summaryrefslogtreecommitdiff
path: root/xc/test/xsuite
diff options
context:
space:
mode:
authorrws <empty>1992-06-11 15:26:22 +0000
committerrws <empty>1992-06-11 15:26:22 +0000
commit7119bb6a712c6a90a34bc9b719b6a67f24fab749 (patch)
tree0270049c8da9aa012abad319784f28b716d718c2 /xc/test/xsuite
parentc3ebc3539110bc7ed3118c49860ca8a5d3ac1a26 (diff)
initial external version
Diffstat (limited to 'xc/test/xsuite')
-rw-r--r--xc/test/xsuite/Makefile71
-rw-r--r--xc/test/xsuite/README41
-rw-r--r--xc/test/xsuite/bug-report29
-rw-r--r--xc/test/xsuite/port/INC/dirent.h8
-rw-r--r--xc/test/xsuite/port/INC/signal.h75
-rw-r--r--xc/test/xsuite/port/INC/stddef.h45
-rw-r--r--xc/test/xsuite/port/INC/stdlib.h15
-rw-r--r--xc/test/xsuite/port/INC/string.h12
-rw-r--r--xc/test/xsuite/port/INC/sys/types.h43
-rw-r--r--xc/test/xsuite/port/INC/sys/wait.h14
-rw-r--r--xc/test/xsuite/port/INC/unistd.h56
-rw-r--r--xc/test/xsuite/port/Makefile25
-rw-r--r--xc/test/xsuite/port/getcwd.c53
-rw-r--r--xc/test/xsuite/port/getopt.c107
-rw-r--r--xc/test/xsuite/port/memcmp.c13
-rw-r--r--xc/test/xsuite/port/putenv.c83
-rw-r--r--xc/test/xsuite/port/signals.c139
-rw-r--r--xc/test/xsuite/port/strchr.c24
-rw-r--r--xc/test/xsuite/port/strftime.c292
-rw-r--r--xc/test/xsuite/port/strpbrk.c26
-rw-r--r--xc/test/xsuite/port/strspn.c50
-rw-r--r--xc/test/xsuite/port/strtok.c49
-rw-r--r--xc/test/xsuite/port/toupper.c40
-rw-r--r--xc/test/xsuite/port/vsprintf.c31
-rw-r--r--xc/test/xsuite/port/waitpid.c117
-rwxr-xr-xxc/test/xsuite/xtest/bin/pclean37
-rwxr-xr-xxc/test/xsuite/xtest/bin/pmake44
-rwxr-xr-xxc/test/xsuite/xtest/bin/prp272
-rwxr-xr-xxc/test/xsuite/xtest/bin/pt102
-rwxr-xr-xxc/test/xsuite/xtest/bin/rpt272
-rw-r--r--xc/test/xsuite/xtest/doc/00.header89
-rw-r--r--xc/test/xsuite/xtest/doc/Copyright16
-rw-r--r--xc/test/xsuite/xtest/doc/Makefile67
-rw-r--r--xc/test/xsuite/xtest/doc/head.t108
-rw-r--r--xc/test/xsuite/xtest/doc/paper.ms405
-rw-r--r--xc/test/xsuite/xtest/doc/progguide.mm4012
-rw-r--r--xc/test/xsuite/xtest/doc/relnotes.mm599
-rw-r--r--xc/test/xsuite/xtest/doc/userguide.mm3695
-rw-r--r--xc/test/xsuite/xtest/fonts/Makefile88
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont0.bdf97
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont0.c119
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont1.bdf2588
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont1.c178
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont2.bdf5716
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont2.c1552
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont3.bdf1899
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont3.c175
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont4.bdf1901
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont4.c177
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont5.bdf298
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont5.c51
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont6.bdf7486
-rw-r--r--xc/test/xsuite/xtest/fonts/xtfont6.c561
-rw-r--r--xc/test/xsuite/xtest/include/Vlib.h3490
-rw-r--r--xc/test/xsuite/xtest/include/XstDisplay.h225
-rw-r--r--xc/test/xsuite/xtest/include/Xstlib.h336
-rw-r--r--xc/test/xsuite/xtest/include/Xstos.h121
-rw-r--r--xc/test/xsuite/xtest/include/pixval.h259
-rw-r--r--xc/test/xsuite/xtest/include/xtest.h273
-rw-r--r--xc/test/xsuite/xtest/include/xtestlib.h396
-rw-r--r--xc/test/xsuite/xtest/include/xthost.h22
-rw-r--r--xc/test/xsuite/xtest/include/xtlibproto.h476
-rw-r--r--xc/test/xsuite/xtest/lib/error/EAcc1.mc28
-rw-r--r--xc/test/xsuite/xtest/lib/error/EAcc2.mc28
-rw-r--r--xc/test/xsuite/xtest/lib/error/EAcc3.mc28
-rw-r--r--xc/test/xsuite/xtest/lib/error/EAcc4.mc29
-rw-r--r--xc/test/xsuite/xtest/lib/error/EAcc5.mc28
-rw-r--r--xc/test/xsuite/xtest/lib/error/EAll.mc28
-rw-r--r--xc/test/xsuite/xtest/lib/error/EAto.mc33
-rw-r--r--xc/test/xsuite/xtest/lib/error/ECol.mc33
-rw-r--r--xc/test/xsuite/xtest/lib/error/ECur.mc47
-rw-r--r--xc/test/xsuite/xtest/lib/error/EDra.mc48
-rw-r--r--xc/test/xsuite/xtest/lib/error/EFon1.mc37
-rw-r--r--xc/test/xsuite/xtest/lib/error/EFon2.mc28
-rw-r--r--xc/test/xsuite/xtest/lib/error/EGC.mc47
-rw-r--r--xc/test/xsuite/xtest/lib/error/EMat1.mc60
-rw-r--r--xc/test/xsuite/xtest/lib/error/EMat2.mc67
-rw-r--r--xc/test/xsuite/xtest/lib/error/EMat3.mc77
-rw-r--r--xc/test/xsuite/xtest/lib/error/EMat4.mc42
-rw-r--r--xc/test/xsuite/xtest/lib/error/ENam1.mc36
-rw-r--r--xc/test/xsuite/xtest/lib/error/ENam2.mc27
-rw-r--r--xc/test/xsuite/xtest/lib/error/EPix.mc39
-rw-r--r--xc/test/xsuite/xtest/lib/error/EVal.mc48
-rw-r--r--xc/test/xsuite/xtest/lib/error/EWin.mc49
-rw-r--r--xc/test/xsuite/xtest/lib/gc/arc-mode.mc16
-rw-r--r--xc/test/xsuite/xtest/lib/gc/backgroun.mc228
-rw-r--r--xc/test/xsuite/xtest/lib/gc/cap-style.mc689
-rw-r--r--xc/test/xsuite/xtest/lib/gc/clip-mask.mc272
-rw-r--r--xc/test/xsuite/xtest/lib/gc/clip-x-or.mc99
-rw-r--r--xc/test/xsuite/xtest/lib/gc/clip-y-or.mc16
-rw-r--r--xc/test/xsuite/xtest/lib/gc/dash-list.mc107
-rw-r--r--xc/test/xsuite/xtest/lib/gc/dash-offs.mc103
-rw-r--r--xc/test/xsuite/xtest/lib/gc/fill-rule.mc16
-rw-r--r--xc/test/xsuite/xtest/lib/gc/fill-styl.mc320
-rw-r--r--xc/test/xsuite/xtest/lib/gc/font.mc16
-rw-r--r--xc/test/xsuite/xtest/lib/gc/foregroun.mc197
-rw-r--r--xc/test/xsuite/xtest/lib/gc/function.mc632
-rw-r--r--xc/test/xsuite/xtest/lib/gc/graphics-.mc16
-rw-r--r--xc/test/xsuite/xtest/lib/gc/join-styl.mc631
-rw-r--r--xc/test/xsuite/xtest/lib/gc/line-styl.mc763
-rw-r--r--xc/test/xsuite/xtest/lib/gc/line-widt.mc298
-rw-r--r--xc/test/xsuite/xtest/lib/gc/plane-mas.mc188
-rw-r--r--xc/test/xsuite/xtest/lib/gc/stipple.mc16
-rw-r--r--xc/test/xsuite/xtest/lib/gc/subwindow.mc300
-rw-r--r--xc/test/xsuite/xtest/lib/gc/tile.mc16
-rw-r--r--xc/test/xsuite/xtest/lib/gc/ts-x-orig.mc104
-rw-r--r--xc/test/xsuite/xtest/lib/gc/ts-y-orig.mc16
-rw-r--r--xc/test/xsuite/xtest/lib/mc/maheader.mc107
-rw-r--r--xc/test/xsuite/xtest/lib/mc/mcextern.mc13
-rw-r--r--xc/test/xsuite/xtest/lib/mc/mcinclude.mc9
-rw-r--r--xc/test/xsuite/xtest/lib/mc/mcxpext.mc1
-rw-r--r--xc/test/xsuite/xtest/lib/mc/mcxpinc.mc5
-rw-r--r--xc/test/xsuite/xtest/lib/mc/mmlib.mc15
-rw-r--r--xc/test/xsuite/xtest/lib/mc/mmlink.mc31
-rw-r--r--xc/test/xsuite/xtest/lib/mc/mmmisc.mc22
-rw-r--r--xc/test/xsuite/xtest/lib/mc/mmmlink.mc11
-rw-r--r--xc/test/xsuite/xtest/lib/mc/mmmsa.mc10
-rw-r--r--xc/test/xsuite/xtest/lib/mc/mmpgen.mc18
-rw-r--r--xc/test/xsuite/xtest/lib/mc/mmsa.mc9
-rw-r--r--xc/test/xsuite/xtest/lib/mc/mmxpinit.mc15
-rw-r--r--xc/test/xsuite/xtest/lib/mc/mmxplib.mc20
-rw-r--r--xc/test/xsuite/xtest/link_scen666
-rw-r--r--xc/test/xsuite/xtest/results/empty0
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/Makefile66
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/code.c978
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/cond.c179
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/error.c231
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/expand.c86
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/files.c259
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/gccomps.c93
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/ma.c133
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/main.c436
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/make.c372
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/mas.c123
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/mc.h148
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/mcproto.h194
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/sections.c532
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/set.c73
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/shortname.c213
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/Makefile41
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/maheader.mc107
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/mcextern.mc13
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/mcinclude.mc9
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/mcxpext.mc1
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/mcxpinc.mc5
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/mmlib.mc15
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/mmlink.mc31
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/mmmisc.mc22
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/mmmlink.mc11
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/mmmsa.mc10
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/mmpgen.mc18
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/mmsa.mc9
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/mmxpinit.mc15
-rw-r--r--xc/test/xsuite/xtest/src/bin/mc/tmpl/mmxplib.mc20
-rw-r--r--xc/test/xsuite/xtest/src/lib/Makefile108
-rw-r--r--xc/test/xsuite/xtest/src/lib/XTestExt.c180
-rw-r--r--xc/test/xsuite/xtest/src/lib/badcmap.c41
-rw-r--r--xc/test/xsuite/xtest/src/lib/badfont.c46
-rw-r--r--xc/test/xsuite/xtest/src/lib/badgc.c40
-rw-r--r--xc/test/xsuite/xtest/src/lib/badpixm.c40
-rw-r--r--xc/test/xsuite/xtest/src/lib/badvis.c34
-rw-r--r--xc/test/xsuite/xtest/src/lib/badwin.c38
-rw-r--r--xc/test/xsuite/xtest/src/lib/bitcount.c103
-rw-r--r--xc/test/xsuite/xtest/src/lib/block.c277
-rw-r--r--xc/test/xsuite/xtest/src/lib/buildtree.c282
-rw-r--r--xc/test/xsuite/xtest/src/lib/checkarea.c203
-rw-r--r--xc/test/xsuite/xtest/src/lib/checkevent.c560
-rw-r--r--xc/test/xsuite/xtest/src/lib/checkfont.c641
-rw-r--r--xc/test/xsuite/xtest/src/lib/checkgc.c75
-rw-r--r--xc/test/xsuite/xtest/src/lib/checkimg.c139
-rw-r--r--xc/test/xsuite/xtest/src/lib/checkpixel.c86
-rw-r--r--xc/test/xsuite/xtest/src/lib/checktile.c125
-rw-r--r--xc/test/xsuite/xtest/src/lib/config.c228
-rw-r--r--xc/test/xsuite/xtest/src/lib/crechild.c97
-rw-r--r--xc/test/xsuite/xtest/src/lib/cursor.c73
-rw-r--r--xc/test/xsuite/xtest/src/lib/delete.c126
-rw-r--r--xc/test/xsuite/xtest/src/lib/devcntl.c394
-rw-r--r--xc/test/xsuite/xtest/src/lib/dset.c56
-rw-r--r--xc/test/xsuite/xtest/src/lib/dumpimage.c76
-rw-r--r--xc/test/xsuite/xtest/src/lib/environ.c96
-rw-r--r--xc/test/xsuite/xtest/src/lib/err.c123
-rw-r--r--xc/test/xsuite/xtest/src/lib/events.c75
-rw-r--r--xc/test/xsuite/xtest/src/lib/ex_startup.c130
-rw-r--r--xc/test/xsuite/xtest/src/lib/exposechk.c148
-rw-r--r--xc/test/xsuite/xtest/src/lib/extenavail.c60
-rw-r--r--xc/test/xsuite/xtest/src/lib/gcflush.c34
-rw-r--r--xc/test/xsuite/xtest/src/lib/gcinclude.c64
-rw-r--r--xc/test/xsuite/xtest/src/lib/getevent.c44
-rw-r--r--xc/test/xsuite/xtest/src/lib/getsize.c67
-rw-r--r--xc/test/xsuite/xtest/src/lib/gettime.c76
-rw-r--r--xc/test/xsuite/xtest/src/lib/iponlywin.c54
-rw-r--r--xc/test/xsuite/xtest/src/lib/issuppvis.c121
-rw-r--r--xc/test/xsuite/xtest/src/lib/linkstart.c172
-rw-r--r--xc/test/xsuite/xtest/src/lib/lookupname.c1139
-rw-r--r--xc/test/xsuite/xtest/src/lib/makecolmap.c72
-rw-r--r--xc/test/xsuite/xtest/src/lib/makecur.c83
-rw-r--r--xc/test/xsuite/xtest/src/lib/makegc.c58
-rw-r--r--xc/test/xsuite/xtest/src/lib/makeimg.c107
-rw-r--r--xc/test/xsuite/xtest/src/lib/makepixm.c53
-rw-r--r--xc/test/xsuite/xtest/src/lib/makeregion.c40
-rw-r--r--xc/test/xsuite/xtest/src/lib/makewin.c186
-rw-r--r--xc/test/xsuite/xtest/src/lib/makewin2.c158
-rw-r--r--xc/test/xsuite/xtest/src/lib/maxsize.c61
-rw-r--r--xc/test/xsuite/xtest/src/lib/nextvclass.c181
-rw-r--r--xc/test/xsuite/xtest/src/lib/nextvinf.c274
-rw-r--r--xc/test/xsuite/xtest/src/lib/nondpth1pix.c41
-rw-r--r--xc/test/xsuite/xtest/src/lib/notmember.c161
-rw-r--r--xc/test/xsuite/xtest/src/lib/opendisp.c41
-rw-r--r--xc/test/xsuite/xtest/src/lib/openfonts.c56
-rw-r--r--xc/test/xsuite/xtest/src/lib/pattern.c88
-rw-r--r--xc/test/xsuite/xtest/src/lib/pfcount.c39
-rw-r--r--xc/test/xsuite/xtest/src/lib/pointer.c114
-rw-r--r--xc/test/xsuite/xtest/src/lib/regid.c222
-rw-r--r--xc/test/xsuite/xtest/src/lib/report.c219
-rw-r--r--xc/test/xsuite/xtest/src/lib/rpt.c137
-rw-r--r--xc/test/xsuite/xtest/src/lib/savimage.c119
-rw-r--r--xc/test/xsuite/xtest/src/lib/setline.c81
-rw-r--r--xc/test/xsuite/xtest/src/lib/settimeout.c83
-rw-r--r--xc/test/xsuite/xtest/src/lib/stackorder.c72
-rw-r--r--xc/test/xsuite/xtest/src/lib/startcall.c101
-rw-r--r--xc/test/xsuite/xtest/src/lib/startup.c354
-rw-r--r--xc/test/xsuite/xtest/src/lib/tpstartup.c92
-rw-r--r--xc/test/xsuite/xtest/src/lib/verimage.c239
-rw-r--r--xc/test/xsuite/xtest/src/lib/winh.c1345
-rw-r--r--xc/test/xsuite/xtest/src/lib/xtestlib.h396
-rw-r--r--xc/test/xsuite/xtest/src/lib/xthost.c112
-rw-r--r--xc/test/xsuite/xtest/src/lib/xtlibproto.h476
-rw-r--r--xc/test/xsuite/xtest/src/libproto/ClientMng.c778
-rw-r--r--xc/test/xsuite/xtest/src/libproto/DataMove.c287
-rw-r--r--xc/test/xsuite/xtest/src/libproto/DataMove.h125
-rw-r--r--xc/test/xsuite/xtest/src/libproto/DfltVals.c311
-rw-r--r--xc/test/xsuite/xtest/src/libproto/Expect.c573
-rw-r--r--xc/test/xsuite/xtest/src/libproto/Log.c198
-rw-r--r--xc/test/xsuite/xtest/src/libproto/MakeReq.c1192
-rw-r--r--xc/test/xsuite/xtest/src/libproto/Makefile136
-rw-r--r--xc/test/xsuite/xtest/src/libproto/RcvErr.c159
-rw-r--r--xc/test/xsuite/xtest/src/libproto/RcvEvt.c396
-rw-r--r--xc/test/xsuite/xtest/src/libproto/RcvRep.c757
-rw-r--r--xc/test/xsuite/xtest/src/libproto/ResMng.c351
-rw-r--r--xc/test/xsuite/xtest/src/libproto/SendEvt.c484
-rw-r--r--xc/test/xsuite/xtest/src/libproto/SendReq.c1161
-rw-r--r--xc/test/xsuite/xtest/src/libproto/SendSup.c333
-rw-r--r--xc/test/xsuite/xtest/src/libproto/ShowErr.c177
-rw-r--r--xc/test/xsuite/xtest/src/libproto/ShowEvt.c438
-rw-r--r--xc/test/xsuite/xtest/src/libproto/ShowRep.c545
-rw-r--r--xc/test/xsuite/xtest/src/libproto/ShowReq.c1064
-rw-r--r--xc/test/xsuite/xtest/src/libproto/ShowSup.c534
-rw-r--r--xc/test/xsuite/xtest/src/libproto/TestMng.c232
-rw-r--r--xc/test/xsuite/xtest/src/libproto/TestSup.c167
-rw-r--r--xc/test/xsuite/xtest/src/libproto/Timer.c284
-rw-r--r--xc/test/xsuite/xtest/src/libproto/Utils.c149
-rw-r--r--xc/test/xsuite/xtest/src/libproto/ValListMng.c1095
-rw-r--r--xc/test/xsuite/xtest/src/libproto/Validate.c75
-rw-r--r--xc/test/xsuite/xtest/src/libproto/XlibNoXtst.c663
-rw-r--r--xc/test/xsuite/xtest/src/libproto/XlibOpaque.c347
-rw-r--r--xc/test/xsuite/xtest/src/libproto/XlibXtst.c499
-rw-r--r--xc/test/xsuite/xtest/src/libproto/XstIO.c169
-rw-r--r--xc/test/xsuite/xtest/src/libproto/XstlibInt.h191
-rw-r--r--xc/test/xsuite/xtest/src/libproto/XstosInt.h137
-rw-r--r--xc/test/xsuite/xtest/src/libproto/delete.c121
-rw-r--r--xc/test/xsuite/xtest/src/libproto/linkstart.c167
-rw-r--r--xc/test/xsuite/xtest/src/libproto/startup.c136
-rw-r--r--xc/test/xsuite/xtest/src/libproto/tpstartup.c213
-rw-r--r--xc/test/xsuite/xtest/src/pixval/blowup/Makefile34
-rw-r--r--xc/test/xsuite/xtest/src/pixval/blowup/ajax.c503
-rw-r--r--xc/test/xsuite/xtest/src/pixval/blowup/vblowup_c.c990
-rw-r--r--xc/test/xsuite/xtest/tet_code3
-rw-r--r--xc/test/xsuite/xtest/tet_scen650
-rw-r--r--xc/test/xsuite/xtest/tetbuild.cfg345
-rw-r--r--xc/test/xsuite/xtest/tetclean.cfg345
-rw-r--r--xc/test/xsuite/xtest/tetexec.cfg349
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/Makefile200
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/allplns/allplns.m55
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/blckpxl/blckpxl.m45
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/blckpxlofs/blckpxlofs.m44
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/btmpbtordr/btmpbtordr.m66
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/btmppd/btmppd.m45
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/btmpunt/btmpunt.m60
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/cllsofscrn/cllsofscrn.m57
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/clsdsply/clsdsply.m1848
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/cnnctnnmbr/cnnctnnmbr.m121
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dfltclrmp/dfltclrmp.m49
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dfltclrmpo/dfltclrmpo.m46
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dfltdpth/dfltdpth.m50
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dfltdpthof/dfltdpthof.m46
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dfltgc/dfltgc.m35
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dfltgcofsc/dfltgcofsc.m65
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dfltrtwdw/dfltrtwdw.m48
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dfltscrn/dfltscrn.m48
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dfltscrnof/dfltscrnof.m41
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dfltvsl/dfltvsl.m59
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dfltvslofs/dfltvslofs.m57
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dsbckngstr/dsbckngstr.m78
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dsplyclls/dsplyclls.m59
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dsplyhght/dsplyhght.m48
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dsplyhghtm/dsplyhghtm.m42
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dsplyofscr/dsplyofscr.m42
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dsplyplns/dsplyplns.m49
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dsplystr/Test1.c87
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dsplystr/dsplystr.m139
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dsplywdth/dsplywdth.m47
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dsplywdthm/dsplywdthm.m42
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/dssvundrs/dssvundrs.m67
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/evntmskofs/evntmskofs.m48
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/fr/fr.m32
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/hghtmmofsc/hghtmmofsc.m41
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/hghtofscrn/hghtofscrn.m47
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/imgbytordr/imgbytordr.m67
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/linktbl.c227
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/lstdpths/lstdpths.m130
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/lstknwnrqs/lstknwnrqs.m43
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/lstpxmpfrm/lstpxmpfrm.m115
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/mncmpsofsc/mncmpsofsc.m51
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/mxcmpsofsc/mxcmpsofsc.m62
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/nop/nop.m52
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/nxtrqst/nxtrqst.m125
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/opndsply/Test1.c87
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/opndsply/opndsply.m1013
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/plnsofscrn/plnsofscrn.m46
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/prtclrvsn/prtclrvsn.m34
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/prtclvrsn/prtclvrsn.m37
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/qlngth/qlngth.m54
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/rtwdw/rtwdw.m49
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/rtwdwofscr/rtwdwofscr.m40
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/scrncnt/scrncnt.m58
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/scrnnmbrof/scrnnmbrof.m42
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/scrnofdspl/scrnofdspl.m47
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/srvrvndr/srvrvndr.m49
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/vndrrls/vndrrls.m34
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/wdthmmofsc/wdthmmofsc.m41
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/wdthofscrn/wdthofscrn.m47
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/whtpxl/whtpxl.m45
-rw-r--r--xc/test/xsuite/xtest/tset/CH02/whtpxlofsc/whtpxlofsc.m44
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/Makefile138
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a13.dat3604
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a17.dat99
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a2.dat79
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a3.dat99
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/chngwdwatt/chngwdwatt.m1143
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a10.dat857
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a11.dat429
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a12.dat415
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a13.dat437
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a14.dat421
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a15.dat437
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a16.dat421
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a17.dat461
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a18.dat411
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a19.dat421
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a3.dat3561
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a6.dat1276
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a7.dat2973
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a8.dat3505
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a9.dat829
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/cnfgrwdw.m2100
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/crcltsbws/a1.dat323
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/crcltsbws/a2.dat323
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/crcltsbws/crcltsbws.m517
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/crcltsbwsd/a1.dat323
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/crcltsbwsd/crcltsbwsd.m350
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/crcltsbwsu/a1.dat323
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/crcltsbwsu/crcltsbwsu.m351
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/crtsmplwdw/a4.dat43
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/crtsmplwdw/crtsmplwdw.m543
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/crtwdw/a11.dat3604
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/crtwdw/a15.dat99
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/crtwdw/commattr.mc1837
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/crtwdw/crtwdw.m790
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/dstrysbws/dstrysbws.m462
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/dstrywdw/dstrywdw.m470
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/linktbl.c77
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/lwrwdw/a1.dat323
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/lwrwdw/lwrwdw.m233
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/mprsd/a1.dat233
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/mprsd/a4.dat151
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/mprsd/mprsd.m1070
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/mpsbws/a1.dat263
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/mpsbws/mpsbws.m982
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/mpwdw/a4.dat159
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/mpwdw/mpwdw.m835
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/mvrszwdw/a2.dat4833
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/mvrszwdw/mvrszwdw.m1175
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/mvwdw/mvwdw.m350
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/rstckwdws/a1.dat368
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/rstckwdws/a2.dat368
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/rstckwdws/a3.dat368
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/rstckwdws/rstckwdws.m393
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/rswdw/a1.dat303
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/rswdw/rswdw.m234
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/rszwdw/a2.dat3561
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/rszwdw/rszwdw.m1156
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/stwdwbg/stwdwbg.m112
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/stwdwbgpxm/stwdwbgpxm.m347
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/stwdwbrdr/stwdwbrdr.m185
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/a1.dat271
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/a2.dat271
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/a3.dat271
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/stwdwbrdrp.m245
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/stwdwbrdrw/a1.dat301
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/stwdwbrdrw/stwdwbrdrw.m388
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/trnsltcrdn/trnsltcrdn.m346
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/unmpsbws/unmpsbws.m327
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/unmpwdw/unmpwdw.m307
-rw-r--r--xc/test/xsuite/xtest/tset/CH03/vslidfrmvs/vslidfrmvs.m47
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/Makefile112
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/chngprprty/chngprprty.m804
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/cnvrtslctn/cnvrtslctn.m212
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/dltprprty/dltprprty.m155
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/gtatmnm/gtatmnm.m77
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/gtgmtry/gtgmtry.m403
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/gtslctnown/gtslctnown.m84
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/gtwdwattrb/gtwdwattrb.m313
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/gtwdwprprt/gtwdwprprt.m931
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/intrnatm/intrnatm.m431
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/linktbl.c36
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/lstprprts/lstprprts.m164
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/qrypntr/qrypntr.m330
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/qrytr/qrytr.m242
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/rttwdwprpr/rttwdwprpr.m600
-rw-r--r--xc/test/xsuite/xtest/tset/CH04/stslctnown/stslctnown.m459
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/Makefile174
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/allcclr/allcclr.m319
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/allcclrcll/allcclrcll.m728
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/allcclrpln/allcclrpln.m576
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/allcnmdclr/allcnmdclr.m357
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/chnggc/chnggc.m1144
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/cpyclrmpan/cpyclrmpan.m430
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/cpygc/cpygc.m505
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/crtclrmp/crtclrmp.m546
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/crtgc/crtgc.m1063
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/crtpxmp/crtpxmp.m197
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/frclrmp/frclrmp.m225
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/frclrs/frclrs.m687
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/frgc/frgc.m55
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/frpxmp/frpxmp.m101
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/gcntxtfrmg/gcntxtfrmg.m48
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/gtgcvls/gtgcvls.m402
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/linktbl.c113
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/lkpclr/lkpclr.m314
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/qrybststpp/qrybststpp.m147
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/qrybstsz/qrybstsz.m466
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/qrybsttl/qrybsttl.m148
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/qryclr/qryclr.m144
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/qryclrs/qryclrs.m180
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/starcmd/starcmd.m85
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stbg/stbg.m83
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stclpmsk/stclpmsk.m277
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stclporgn/stclporgn.m95
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stclprctng/stclprctng.m420
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stdshs/stdshs.m268
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stfllrl/stfllrl.m87
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stfllstyl/stfllstyl.m89
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stfnctn/stfnctn.m85
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stfnt/stfnt.m103
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stfrgrnd/stfrgrnd.m81
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stgrphcsex/stgrphcsex.m98
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stlnattrbt/stlnattrbt.m212
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stplnmsk/stplnmsk.m86
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/strclr/strclr.m570
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/strclrs/strclrs.m744
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/strnmdclr/strnmdclr.m468
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stsbwmd/stsbwmd.m91
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/ststppl/ststppl.m128
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/ststt/ststt.m218
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/sttl/sttl.m102
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/sttsorgn/sttsorgn.m96
-rw-r--r--xc/test/xsuite/xtest/tset/CH05/stwdwclrmp/stwdwclrmp.m114
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/Makefile192
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/clrar/clrar.m344
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/clrwdw/clrwdw.m217
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/cpyar/a27.dat147
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/cpyar/a30.dat183
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/cpyar/cpyar.m379
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/cpypln/a26.dat2791
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/cpypln/a28.dat2791
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/cpypln/a33.dat313
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/cpypln/a36.dat281
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/cpypln/cpypln.m551
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/crtfntcrsr/crtfntcrsr.m100
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/crtglyphcr/crtglyphcr.m592
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/crtpxmpcrs/crtpxmpcrs.m482
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/dfncrsr/dfncrsr.m433
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a1.dat231
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a34.dat65
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a42.dat303
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a49.dat297
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a5.dat13
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a50.dat185
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a51.dat185
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a52.dat63
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a53.dat153
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a54.dat177
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a55.dat147
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a6.dat13
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a64.dat59
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a66.dat445
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a68.dat77
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a73.dat35
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a76.dat231
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a77.dat773
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a78.dat445
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a79.dat339
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a83.dat457
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a86.dat157
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a88.dat7823
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a90.dat7823
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a92.dat1593
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a93.dat3091
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a94.dat57
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/a95.dat11
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarc/drwarc.m411
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a1.dat579
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a100.dat19655
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a102.dat4281
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a103.dat5441
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a104.dat523
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a105.dat73
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a12.dat579
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a37.dat65
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a45.dat1423
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a5.dat27
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a52.dat824
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a53.dat479
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a54.dat479
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a55.dat259
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a56.dat981
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a57.dat545
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a58.dat327
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a6.dat323
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a67.dat59
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a69.dat445
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a7.dat323
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a71.dat77
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a76.dat35
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a79.dat129
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a80.dat157
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a81.dat283
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a82.dat283
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a86.dat579
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a87.dat2104
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a88.dat1311
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a89.dat1055
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a93.dat1127
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a96.dat385
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/a98.dat19655
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwarcs/drwarcs.m538
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgst16/a1.dat421
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgst16/a11.dat297
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgst16/a14.dat125
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgst16/a16.dat6803
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgst16/a18.dat7557
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgst16/a3.dat3188
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgst16/drwimgst16.m234
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgstr/a1.dat2327
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgstr/a11.dat417
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgstr/a14.dat165
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgstr/a16.dat7823
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgstr/a18.dat8223
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgstr/a3.dat373
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwimgstr/drwimgstr.m221
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a1.dat29
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a2.dat43
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a23.dat205
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a3.dat29
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a31.dat303
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a38.dat308
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a39.dat197
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a4.dat83
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a40.dat197
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a41.dat63
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a42.dat161
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a43.dat189
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a44.dat147
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a53.dat157
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a55.dat1255
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a57.dat267
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a62.dat35
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a65.dat29
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a66.dat103
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a67.dat83
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a68.dat69
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a72.dat61
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a75.dat21
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a77.dat955
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a79.dat955
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a81.dat217
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a82.dat3239
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a83.dat57
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/a84.dat11
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwln/drwln.m192
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a1.dat153
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a28.dat205
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a3.dat155
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a36.dat1287
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a4.dat87
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a43.dat690
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a44.dat377
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a45.dat377
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a46.dat231
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a47.dat893
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a48.dat473
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a49.dat281
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a5.dat153
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a58.dat157
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a60.dat1255
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a62.dat267
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a67.dat35
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a7.dat145
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a70.dat153
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a71.dat732
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a72.dat381
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a73.dat313
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a77.dat269
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a78.dat2373
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a79.dat1265
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a80.dat3285
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a81.dat3187
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a87.dat109
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a89.dat5171
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a9.dat113
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a91.dat5171
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a93.dat1237
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a94.dat3945
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a95.dat501
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/a96.dat69
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwlns/drwlns.m352
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwpnt/a20.dat139
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwpnt/a25.dat37
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwpnt/a28.dat3
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwpnt/drwpnt.m80
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwpnts/a1.dat14
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwpnts/a23.dat445
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwpnts/a28.dat50
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwpnts/a3.dat11
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwpnts/a31.dat10
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwpnts/drwpnts.m120
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a1.dat139
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a23.dat195
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a31.dat2227
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a38.dat1288
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a39.dat661
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a4.dat139
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a40.dat661
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a41.dat781
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a42.dat1616
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a43.dat797
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a44.dat473
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a50.dat139
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a51.dat17
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a52.dat139
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a53.dat139
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a54.dat17
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a57.dat139
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a58.dat740
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a59.dat436
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a60.dat375
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a64.dat277
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a67.dat117
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a69.dat4695
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a71.dat4695
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a73.dat1151
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a74.dat7251
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a75.dat899
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/a76.dat119
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngl/drwrctngl.m155
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a1.dat79
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a25.dat195
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a33.dat3587
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a40.dat1835
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a41.dat963
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a42.dat963
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a43.dat635
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a44.dat2545
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a45.dat1173
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a46.dat689
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a5.dat79
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a52.dat79
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a53.dat17
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a54.dat79
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a55.dat79
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a56.dat17
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a59.dat79
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a6.dat163
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a60.dat1134
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a61.dat563
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a62.dat525
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a66.dat203
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a69.dat113
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a71.dat2655
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a73.dat2655
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a75.dat1379
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a76.dat10083
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a77.dat1401
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/a78.dat183
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwrctngls/drwrctngls.m186
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a1.dat81
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a24.dat205
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a3.dat91
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a32.dat1479
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a39.dat749
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a4.dat81
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a40.dat409
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a41.dat409
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a42.dat255
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a43.dat926
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a44.dat513
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a45.dat327
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a5.dat155
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a54.dat157
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a56.dat1255
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a58.dat267
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a63.dat35
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a66.dat81
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a67.dat389
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a68.dat226
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a69.dat179
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a73.dat157
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a76.dat59
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a78.dat2723
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a80.dat2723
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a82.dat651
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a83.dat4151
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a84.dat513
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a85.dat75
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwsgmnts/drwsgmnts.m193
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr/a1.dat40487
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr/a23.dat345
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr/a24.dat415
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr/a25.dat397
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr/a26.dat243
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr/a3.dat436
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr/a30.dat611
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr/a33.dat243
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr/a35.dat11699
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr/a37.dat11699
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr/a39.dat3091
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr/drwstr.m184
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr16/a1.dat385
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr16/a23.dat201
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr16/a24.dat245
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr16/a25.dat215
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr16/a26.dat125
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr16/a3.dat1073
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr16/a30.dat311
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr16/a33.dat125
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr16/a35.dat6803
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr16/a37.dat6803
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr16/a39.dat1593
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwstr16/drwstr16.m164
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt/a1.dat41427
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt/a27.dat201
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt/a28.dat238
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt/a29.dat239
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt/a3.dat125
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt/a30.dat153
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt/a34.dat355
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt/a37.dat153
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt/a39.dat6803
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt/a41.dat6803
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt/a43.dat1911
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt/a5.dat1131
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt/drwtxt.m432
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt16/a1.dat561
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt16/a27.dat339
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt16/a28.dat413
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt16/a29.dat369
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt16/a3.dat575
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt16/a30.dat221
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt16/a34.dat645
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt16/a37.dat221
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt16/a39.dat11495
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt16/a4.dat363
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt16/a41.dat11495
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt16/a43.dat2703
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/drwtxt16/drwtxt16.m365
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarc/a1.dat123
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarc/a2.dat123
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarc/a23.dat123
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarc/a24.dat992
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarc/a25.dat518
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarc/a26.dat469
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarc/a3.dat123
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarc/a30.dat563
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarc/a33.dat469
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarc/a35.dat4151
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarc/a37.dat4151
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarc/a39.dat7743
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarc/fllarc.m180
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/a1.dat111
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/a2.dat107
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/a25.dat111
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/a26.dat577
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/a27.dat327
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/a28.dat285
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/a3.dat111
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/a32.dat289
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/a35.dat285
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/a37.dat3743
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/a39.dat3743
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/a41.dat4509
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/a6.dat123
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllarcs/fllarcs.m214
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a1.dat121
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a28.dat121
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a29.dat1381
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a30.dat676
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a31.dat621
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a35.dat575
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a38.dat621
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a40.dat4083
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a42.dat4083
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a44.dat11313
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a45.dat381
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a46.dat235
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a8.dat121
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/a9.dat123
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllplygn/fllplygn.m439
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngl/a22.dat63
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngl/a24.dat457
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngl/a25.dat427
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngl/a29.dat395
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngl/a32.dat427
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngl/a34.dat2111
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngl/a36.dat2111
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngl/a38.dat7993
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngl/fllrctngl.m124
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngls/a1.dat153
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngls/a23.dat153
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngls/a24.dat767
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngls/a25.dat413
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngls/a26.dat337
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngls/a30.dat335
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngls/a33.dat337
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngls/a35.dat5171
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngls/a37.dat5171
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngls/a39.dat5667
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/fllrctngls/fllrctngls.m159
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/frcrsr/frcrsr.m129
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/frfnt/frfnt.m118
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/frfntinf/frfntinf.m86
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/frfntnms/frfntnms.m85
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/frfntpth/frfntpth.m48
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/gtfntprprt/gtfntprprt.m151
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/gtfntpth/gtfntpth.m66
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/gtimg/gtimg.m1014
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/gtsbimg/gtsbimg.m1205
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/ldfnt/a2.dat15
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/ldfnt/ldfnt.m171
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/ldqryfnt/a2.dat15
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/ldqryfnt/ldqryfnt.m163
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/linktbl.c131
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/lstfnts/lstfnts.m331
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/lstfntswth/lstfntswth.m383
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/ptimg/a24.dat36
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/ptimg/a27.dat4
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/ptimg/a29.dat105
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/ptimg/a31.dat105
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/ptimg/ptimg.m852
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/qrybstcrsr/qrybstcrsr.m188
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/qryfnt/qryfnt.m140
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/qrytxtex16/qrytxtex16.m341
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/qrytxtextn/qrytxtextn.m339
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/rclrcrsr/rclrcrsr.m83
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/stfntpth/stfntpth.m251
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/txtextnt16/txtextnt16.m199
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/txtextnts/txtextnts.m173
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/txtwdth/txtwdth.m63
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/txtwdth16/txtwdth16.m83
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/undfncrsr/undfncrsr.m313
-rw-r--r--xc/test/xsuite/xtest/tset/CH06/unldfnt/unldfnt.m77
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/Makefile196
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/actvtscrns/actvtscrns.m35
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/addhst/addhst.m163
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/addhsts/addhsts.m175
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/addtsvst/addtsvst.m744
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/allwevnts/allwevnts.m1510
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/atrptoff/atrptoff.m52
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/atrpton/atrpton.m53
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/bll/bll.m84
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/chngactvpn/chngactvpn.m321
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/chngkybrdc/chngkybrdc.m804
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/chngkybrdm/chngkybrdm.m265
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/chngpntrcn/chngpntrcn.m419
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/chngsvst/chngsvst.m155
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/dltmdfrmpe/dltmdfrmpe.m97
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/dsblaccssc/dsblaccssc.m114
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/dsplykycds/dsplykycds.m144
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/enblaccssc/enblaccssc.m134
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/frcscrnsvr/frcscrnsvr.m60
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/frmdfrmp/frmdfrmp.m35
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/grbbttn/grbbttn.m2266
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/grbky/grbky.m1202
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/grbkybrd/grbkybrd.m896
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/grbpntr/grbpntr.m1584
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/grbsrvr/grbsrvr.m127
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/gtinptfcs/gtinptfcs.m69
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/gtkybrdcnt/gtkybrdcnt.m97
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/gtkybrdmpp/gtkybrdmpp.m231
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/gtmdfrmppn/gtmdfrmppn.m165
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/gtpntrcntr/gtpntrcntr.m82
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/gtpntrmppn/gtpntrmppn.m193
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/gtscrnsvr/gtscrnsvr.m100
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/insrtmdfrm/insrtmdfrm.m90
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/instllclrm/instllclrm.m206
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/kllclnt/kllclnt.m235
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/linktbl.c120
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/lsthsts/lsthsts.m126
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/lstinstlld/lstinstlld.m67
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/nwmdfrmp/nwmdfrmp.m78
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/qrykymp/qrykymp.m119
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/rmvfrmsvst/rmvfrmsvst.m94
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/rmvhst/rmvhst.m165
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/rmvhsts/rmvhsts.m160
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/rprntwdw/rprntwdw.m650
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/rstscrnsvr/rstscrnsvr.m34
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/staccsscnt/staccsscnt.m119
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/stclsdwnmd/stclsdwnmd.m629
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/stinptfcs/stinptfcs.m972
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/stmdfrmppn/stmdfrmppn.m442
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/stpntrmppn/stpntrmppn.m397
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/stscrnsvr/stscrnsvr.m255
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/ungrbbttn/ungrbbttn.m292
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/ungrbky/ungrbky.m517
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/ungrbkybrd/ungrbkybrd.m250
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/ungrbpntr/ungrbpntr.m245
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/ungrbsrvr/ungrbsrvr.m125
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/unnstllclr/unnstllclr.m89
-rw-r--r--xc/test/xsuite/xtest/tset/CH07/wrppntr/wrppntr.m434
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/Makefile204
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/bttnprss/bttnprss.m921
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/bttnrls/bttnrls.m894
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/chckifevnt/chckifevnt.m482
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/chckmskevn/chckmskevn.m223
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/chcktypdev/chcktypdev.m224
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/chcktypdwd/chcktypdwd.m265
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/chckwdwevn/chckwdwevn.m266
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/clntmssg/clntmssg.m104
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/clrmpntfy/clrmpntfy.m263
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/cnfgrntfy/cnfgrntfy.m510
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/cnfgrrqst/cnfgrrqst.m746
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/crcltntfy/crcltntfy.m507
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/crcltrqst/crcltrqst.m365
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/crtntfy/crtntfy.m243
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/dsplymtnbf/dsplymtnbf.m84
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/dsplynm/Test1.c88
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/dsplynm/dsplynm.m107
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/dstryntfy/dstryntfy.m329
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/entrntfy/entrntfy.m1493
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/evntsqd/evntsqd.m524
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/exps/exps.m356
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/fcsin/fcsin.m3019
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/fcsot/fcsot.m2723
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/flsh/flsh.m113
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/grphcsexps/grphcsexps.m210
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/grvtyntfy/grvtyntfy.m473
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/gterrrdtbs/gterrrdtbs.m187
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/gterrrtxt/gterrrtxt.m68
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/gtmtnevnts/gtmtnevnts.m182
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/ifevnt/ifevnt.m347
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/kympntfy/kympntfy.m472
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/kyprss/kyprss.m954
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/kyrls/kyrls.m952
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/linktbl.c143
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/lvntfy/lvntfy.m1694
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/mpntfy/mpntfy.m405
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/mppngntfy/mppngntfy.m200
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/mprqst/mprqst.m317
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/mskevnt/mskevnt.m191
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/mtnntfy/mtnntfy.m2173
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/nexps/nexps.m104
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/nxtevnt/nxtevnt.m184
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/pkevnt/pkevnt.m197
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/pkifevnt/pkifevnt.m350
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/pndng/pndng.m162
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/prprtyntfy/prprtyntfy.m243
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/ptbckevnt/ptbckevnt.m84
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/rprntntfy/rprntntfy.m435
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/rszrqst/rszrqst.m366
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/slctinpt/slctinpt.m612
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/slctnclr/slctnclr.m95
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/slctnntfy/slctnntfy.m126
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/slctnrqst/slctnrqst.m126
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/sndevnt/sndevnt.m2206
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/staftrfnct/staftrfnct.m115
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/sterrrhndl/sterrrhndl.m498
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/stioerrrhn/stioerrrhn.m367
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/sync/sync.m258
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/synchrnz/synchrnz.m136
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/unmpntfy/unmpntfy.m344
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/vsbltyntfy/vsbltyntfy.m906
-rw-r--r--xc/test/xsuite/xtest/tset/CH08/wdwevnt/wdwevnt.m229
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/Makefile174
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/allcclsshn/allcclsshn.m58
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/allcicnsz/allcicnsz.m80
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/allcstndrd/allcstndrd.m115
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/allcszhnts/allcszhnts.m145
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/allcwmhnts/allcwmhnts.m102
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/frstrlst/frstrlst.m81
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/ftchnm/ftchnm.m175
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gtclsshnt/gtclsshnt.m188
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gtcmmnd/gtcmmnd.m189
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gticnnm/gticnnm.m179
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gticnszs/gticnszs.m231
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gtrgbclrmp/gtrgbclrmp.m462
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gttrnsntfr/gttrnsntfr.m162
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gttxtprprt/gttxtprprt.m221
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gtwmclntmc/gtwmclntmc.m210
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gtwmclrmpw/gtwmclrmpw.m259
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gtwmhnts/gtwmhnts.m217
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gtwmicnnm/gtwmicnnm.m212
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gtwmnm/gtwmnm.m213
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gtwmnrmlhn/gtwmnrmlhn.m354
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gtwmprtcls/gtwmprtcls.m267
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/gtwmszhnts/gtwmszhnts.m362
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/icnfywdw/icnfywdw.m165
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/linktbl.c113
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/rcnfgrwmwd/rcnfgrwmwd.m294
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/stclsshnt/stclsshnt.m129
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/stcmmnd/stcmmnd.m152
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/sticnnm/sticnnm.m119
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/sticnszs/sticnszs.m165
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/strgbclrmp/strgbclrmp.m176
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/strlstttxt/strlstttxt.m256
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/strnm/strnm.m119
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/sttrnsntfr/sttrnsntfr.m139
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/sttxtprprt/sttxtprprt.m195
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/stwmclntmc/stwmclntmc.m242
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/stwmclrmpw/stwmclrmpw.m151
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/stwmhnts/stwmhnts.m168
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/stwmicnnm/stwmicnnm.m246
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/stwmnm/stwmnm.m238
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/stwmnrmlhn/stwmnrmlhn.m211
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/stwmprprts/Test1.c100
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/stwmprprts/Test2.c102
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/stwmprprts/stwmprprts.m904
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/stwmprtcls/stwmprtcls.m149
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/stwmszhnts/stwmszhnts.m214
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/txtprprtyt/txtprprtyt.m196
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/wmgmtry/wmgmtry.m759
-rw-r--r--xc/test/xsuite/xtest/tset/CH09/wthdrwwdw/wthdrwwdw.m182
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/Makefile238
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/addpxl/addpxl.m153
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/clpbx/clpbx.m205
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/crtbtmpfrm/crtbtmpfrm.m151
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/crtimg/crtimg.m364
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/crtpxmpfrm/crtpxmpfrm.m200
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/crtrgn/crtrgn.m75
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/dltcntxt/dltcntxt.m116
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/dstryimg/dstryimg.m65
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/dstryrgn/dstryrgn.m47
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/emptyrgn/emptyrgn.m97
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/eqlrgn/eqlrgn.m169
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/fndcntxt/fndcntxt.m121
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/ftchbffr/ftchbffr.m166
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/ftchbyts/ftchbyts.m106
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/gtdflt/EnvXdefaults3
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/gtdflt/HstXdefaults4
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/gtdflt/Test3.c110
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/gtdflt/Test4.c97
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/gtdflt/Test5.c103
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/gtdflt/Xdefaults4
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/gtdflt/gtdflt.m291
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/gtpxl/gtpxl.m127
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/gtvslinf/gtvslinf.m519
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/intrsctrgn/intrsctrgn.m108
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/iscrsrky/iscrsrky.m89
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/isfnctnky/isfnctnky.m140
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/iskypdky/iskypdky.m105
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/ismdfrky/ismdfrky.m94
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/ismscfnctn/ismscfnctn.m94
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/ispfky/ispfky.m84
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/kycdtkysym/kycdtkysym.m127
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/kysymtkycd/kysymtkycd.m77
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/kysymtstr/kysymtstr.m81
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/linktbl.c162
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/lkpkysym/lkpkysym.m121
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/lkpstr/lkpstr.m198
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/mtchvslinf/mtchvslinf.m125
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/offstrgn/offstrgn.m89
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/plygnrgn/plygnrgn.m139
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/pntinrgn/pntinrgn.m152
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/prmllc/prmllc.m69
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/prsclr/prsclr.m431
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/prsgmtry/prsgmtry.m295
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/ptpxl/ptpxl.m140
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rbndkysym/rbndkysym.m193
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rctinrgn/rctinrgn.m137
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rdbtmpfl/rdbtmpfl.m480
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rfrshkybrd/rfrshkybrd.m269
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmdstrydtb/rmdstrydtb.m67
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmgtfldtbs/rmgtfldtbs.m157
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmgtrsrc/common.mc58
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmgtrsrc/rmgtrsrc.m201
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmgtstrdtb/rmgtstrdtb.m139
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmintlz/rmintlz.m21
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmmrgdtbss/rmmrgdtbss.m237
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmprscmmnd/rmprscmmnd.m582
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmptfldtbs/rmptfldtbs.m84
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmptlnrsrc/rmptlnrsrc.m513
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmptrsrc/common.mc93
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmptrsrc/fn.mc117
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmptrsrc/rmptrsrc.m183
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmptstrrsr/rmptstrrsr.m177
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmqgtrsrc/rmqgtrsrc.m203
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmqgtsrchl/rmqgtsrchl.m169
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmqgtsrchr/rmqgtsrchr.m246
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmqptrsrc/rmqptrsrc.m208
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmqptstrrs/rmqptstrrs.m203
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmqrktstr/rmqrktstr.m81
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmstrtbndn/rmstrtbndn.m493
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmstrtqrk/rmstrtqrk.m89
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmstrtqrkl/rmstrtqrkl.m316
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rmunqqrk/rmunqqrk.m60
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rsrcmngrst/rsrcmngrst.m58
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/rttbffrs/rttbffrs.m118
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/sbimg/sbimg.m181
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/sbtrctrgn/sbtrctrgn.m84
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/shrnkrgn/shrnkrgn.m225
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/strbffr/strbffr.m101
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/strbyts/strbyts.m72
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/strgn/strgn.m90
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/strtkysym/strtkysym.m69
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/svcntxt/svcntxt.m155
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/unnrctwthr/unnrctwthr.m58
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/unnrgn/unnrgn.m107
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/unqcntxt/unqcntxt.m43
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/wrtbtmpfl/wrtbtmpfl.m300
-rw-r--r--xc/test/xsuite/xtest/tset/CH10/xrrgn/xrrgn.m85
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/Makefile344
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/allcclr/allcclr.m192
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/allcclrcll/allcclrcll.m226
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/allcclrpln/allcclrpln.m226
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/allcnmdclr/allcnmdclr.m192
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/allwevnts/allwevnts.m186
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/bdrqst/bdrqst.m97
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/bll/bll.m163
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/chngactvpn/chngactvpn.m182
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/chnggc/chnggc.m197
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/chnghsts/chnghsts.m247
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/chngkybrdc/chngkybrdc.m210
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/chngkybrdm/chngkybrdm.m208
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/chngpntrcn/chngpntrcn.m181
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/chngprprty/chngprprty.m171
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/chngsvst/chngsvst.m171
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/chngwdwatt/chngwdwatt.m199
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/clrar/clrar.m184
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/clsfnt/clsfnt.m170
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/cnfgrwdw/cnfgrwdw.m199
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/cnvrtslctn/cnvrtslctn.m181
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/cpyar/cpyar.m187
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/cpyclrmpan/cpyclrmpan.m259
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/cpygc/cpygc.m206
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/cpypln/cpypln.m186
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/crcltwdw/crcltwdw.m224
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/crtclrmp/crtclrmp.m239
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/crtcrsr/crtcrsr.m232
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/crtgc/crtgc.m260
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/crtglyphcr/crtglyphcr.m234
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/crtpxmp/crtpxmp.m229
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/crtwdw/crtwdw.m265
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/dltprprty/dltprprty.m179
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/dstrysbws/dstrysbws.m177
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/dstrywdw/dstrywdw.m168
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/fllply/fllply.m156
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/frclrmp/frclrmp.m178
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/frclrs/frclrs.m182
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/frcrsr/frcrsr.m167
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/frcscrnsvr/frcscrnsvr.m165
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/frgc/frgc.m166
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/frpxmp/frpxmp.m167
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/grbbttn/grbbttn.m165
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/grbky/grbky.m165
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/grbkybrd/grbkybrd.m175
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/grbpntr/grbpntr.m175
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/grbsrvr/grbsrvr.m165
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtatmnm/gtatmnm.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtfntpth/gtfntpth.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtgmtry/gtgmtry.m175
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtimg/gtimg.m183
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtinptfcs/gtinptfcs.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtkybrdcnt/gtkybrdcnt.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtkybrdmpp/gtkybrdmpp.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtmdfrmppn/gtmdfrmppn.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtmtnevnts/gtmtnevnts.m175
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtpntrcntr/gtpntrcntr.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtpntrmppn/gtpntrmppn.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtprprty/gtprprty.m186
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtscrnsvr/gtscrnsvr.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtslctnown/gtslctnown.m183
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/gtwdwattrb/gtwdwattrb.m175
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/imgtxt16/imgtxt16.m205
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/imgtxt8/imgtxt8.m169
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/instllclrm/instllclrm.m201
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/intrnatm/intrnatm.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/kllclnt/kllclnt.m174
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/linktbl.c252
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/lkpclr/lkpclr.m185
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/lstextnsns/lstextnsns.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/lstfnts/lstfnts.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/lstfntswth/lstfntswth.m184
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/lsthsts/lsthsts.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/lstinstlld/lstinstlld.m187
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/lstprprts/lstprprts.m175
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/mpsbws/mpsbws.m178
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/mpwdw/mpwdw.m175
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/noprtn/noprtn.m179
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/opndsply/opndsply.m131
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/opnfnt/opnfnt.m231
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/plyarc/plyarc.m170
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/plyfllarc/plyfllarc.m170
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/plyfllrctn/plyfllrctn.m169
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/plyln/plyln.m155
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/plypnt/plypnt.m155
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/plyrctngl/plyrctngl.m169
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/plysgmnt/plysgmnt.m169
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/plytxt16/plytxt16.m203
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/plytxt8/plytxt8.m171
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/ptimg/ptimg.m232
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/qrybstsz/qrybstsz.m177
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/qryclrs/qryclrs.m191
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/qryextnsn/qryextnsn.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/qryfnt/qryfnt.m180
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/qrykymp/qrykymp.m173
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/qrypntr/qrypntr.m175
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/qrytr/qrytr.m175
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/qrytxtextn/qrytxtextn.m166
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/rclrcrsr/rclrcrsr.m167
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/rprntwdw/rprntwdw.m178
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/rttprprts/rttprprts.m189
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/sndevnt/sndevnt.m206
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/staccsscnt/staccsscnt.m164
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/stclprctng/stclprctng.m166
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/stclsdwnmd/stclsdwnmd.m164
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/stdshs/stdshs.m166
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/stfntpth/stfntpth.m163
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/stinptfcs/stinptfcs.m180
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/stmdfrmppn/stmdfrmppn.m217
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/stpntrmppn/stpntrmppn.m211
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/strclrs/strclrs.m291
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/strnmdclr/strnmdclr.m287
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/stscrnsvr/stscrnsvr.m182
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/stslctnown/stslctnown.m168
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/trnsltcrds/trnsltcrds.m185
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/ungrbbttn/ungrbbttn.m172
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/ungrbky/ungrbky.m172
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/ungrbkybrd/ungrbkybrd.m185
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/ungrbpntr/ungrbpntr.m185
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/ungrbsrvr/ungrbsrvr.m172
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/unmpsbws/unmpsbws.m187
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/unmpwdw/unmpwdw.m170
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/unnstllclr/unnstllclr.m207
-rw-r--r--xc/test/xsuite/xtest/tset/XPROTO/wrppntr/wrppntr.m167
1252 files changed, 808319 insertions, 0 deletions
diff --git a/xc/test/xsuite/Makefile b/xc/test/xsuite/Makefile
new file mode 100644
index 000000000..b1106798d
--- /dev/null
+++ b/xc/test/xsuite/Makefile
@@ -0,0 +1,71 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+
+#
+# Makefile for building the TET and the X test suite libraries/utilities.
+#
+# For full details on what needs to be built and how to build, refer
+# to the User Guide in file user_guide.mm in the directory xtest/doc.
+# This Makefile just performs some of the required steps more easily.
+#
+# First, work through the instructions in the section entitled
+# "Configuring the X test suite" in the User Guide. This involves
+# setting the configuration parameters correctly for your system.
+# This also includes setting the TET_ROOT environment variable to the
+# directory in which this Makefile is supplied.
+#
+# Ensure your PATH environment variable is set to include $TET_ROOT/xtest/bin.
+#
+# You may then need to build the portability library, if your system is not
+# a POSIX.1 system. This is described further in the User Guide.
+#
+# Then, you can perform the following steps described in the User Guide
+# by just typing "make" in this directory:
+#
+# Building the TET:
+# 1. The Test Case Controller (TCC)
+# 2. The API library
+#
+# Building the X test suite libraries and utilities:
+# 1. Building the X test suite library
+# 2. Building the X Protocol library
+# 3. Building the X test fonts library
+# 4. Building the mc utility
+# 5. Building the blowup utility
+#
+# You then need to build and install the test fonts as described in the
+# User Guide.
+#
+
+all: install
+
+install:
+ cd tet/src/posix_c/tools; pmake install
+ cd tet/src/posix_c/api; pmake install
+ cd xtest/src/lib; pmake install
+ cd xtest/src/libproto; pmake install
+ cd xtest/fonts; pmake install
+ cd xtest/src/bin/mc ; pmake install
+ cd xtest/src/pixval/blowup; pmake install
+
+clean:
+ cd tet/src/posix_c/tools; pclean
+ cd tet/src/posix_c/api; pclean
+ cd xtest/src/lib; pclean
+ cd xtest/src/libproto; pclean
+ cd xtest/fonts; pclean
+ cd xtest/src/bin/mc ; pclean
+ cd xtest/src/pixval/blowup; pclean
diff --git a/xc/test/xsuite/README b/xc/test/xsuite/README
new file mode 100644
index 000000000..4bd11e29f
--- /dev/null
+++ b/xc/test/xsuite/README
@@ -0,0 +1,41 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+This file describes the software in release 1.1 of the
+revised X test suite produced for MIT by UniSoft Group Limited.
+
+The test suite includes tests for sections 2 to 10 of the X11R4 Xlib
+specifications.
+
+The test suite also contains touch tests for the X Protocol (version 11).
+
+The main directories to be aware of initially are:
+
+tet - This contains the source files and include files needed to build
+the Test Environment Toolkit (TET).
+
+xtest - This contains the tests included in the revised X test suite
+which are stored as a complete TET test suite. This includes all
+necessary configuration files and scenario files to enable you to use
+the X test suite following the instructions in the documentation.
+
+xtest/doc - This contains the documentation. It contains a user guide,
+programmers guide and release notes. These are supplied in troff(1)
+format requiring the mm macro package, and also in PostScript format.
+It also contains a template for error reports and a description of how
+to submit them. You should look at the release notes and the user guide
+before attempting to install and build the test suite.
diff --git a/xc/test/xsuite/bug-report b/xc/test/xsuite/bug-report
new file mode 100644
index 000000000..f96e29e16
--- /dev/null
+++ b/xc/test/xsuite/bug-report
@@ -0,0 +1,29 @@
+ X Test Suite Bug Report
+ xtest-bugs@expo.lcs.mit.edu
+
+TEST SUITE VERSION:
+ release 1.1
+
+CLIENT MACHINE and OPERATING SYSTEM:
+ [e.g. Sun 3/50 running SunOS 4.1, DECstation 3100 running Ultrix 4.0, ...]
+
+DISPLAY:
+ [e.g. Digital QVSS, Sun CG4, HP Topcat, IBM APA16, Apollo 4 plane, ...]
+
+AREA:
+ [e.g. tset/CH06, src/lib ]
+
+SPECIFIC TEST SET AND TEST PURPOSE:
+ [e.g. drwarcs 21 ]
+
+SYNOPSIS:
+ [brief description of the problem and where it is located]
+
+DESCRIPTION:
+ [detailed description]
+
+REPEAT BY:
+ [what you did to get the error; include configuration files if appropriate]
+
+SAMPLE FIX:
+ [preferred, but not necessary. Please send context diffs (diff -c -b)]
diff --git a/xc/test/xsuite/port/INC/dirent.h b/xc/test/xsuite/port/INC/dirent.h
new file mode 100644
index 000000000..6240dc461
--- /dev/null
+++ b/xc/test/xsuite/port/INC/dirent.h
@@ -0,0 +1,8 @@
+/* $XConsortium$ */
+/* POSIX dirent.h compatibility. */
+
+#include <sys/dir.h>
+
+
+/* This is GROSS! BSD uses direct, POSIX uses dirent. */
+#define dirent direct
diff --git a/xc/test/xsuite/port/INC/signal.h b/xc/test/xsuite/port/INC/signal.h
new file mode 100644
index 000000000..0e260394f
--- /dev/null
+++ b/xc/test/xsuite/port/INC/signal.h
@@ -0,0 +1,75 @@
+/* $XConsortium$ */
+#ifndef SIG_DFL
+
+typedef long sigset_t;
+
+struct sigaction {
+ void (*sa_handler)();
+ sigset_t sa_mask;
+ int sa_flags;
+};
+
+/*
+ * For BSD use jmp_buf for sigjmp_buf.
+ * For sig{set,long}jmp() alway assume that save is set (as it is in
+ * the TCM)
+ * (This would all be defined in setjmp.h on a POSIX system)
+ */
+#define sigjmp_buf jmp_buf
+#define sigsetjmp(env, save) setjmp(env)
+#define siglongjmp(env, val) longjmp(env, val)
+
+#define SIG_DFL (void (*)())0
+#ifdef lint
+#define SIG_IGN (void (*)())(31) /* ??? */
+#else
+#define SIG_IGN (void (*)())1
+#endif
+#define SIG_ERR ((void (*)())-1)
+
+#define NSIG 32
+#define SIGHUP 1 /* hangup */
+#define SIGINT 2 /* interrupt */
+#define SIGQUIT 3 /* quit */
+#define SIGILL 4 /* illegal instruction (not reset when caught) */
+#define SIGTRAP 5 /* trace trap (not reset when caught) */
+#define SIGIOT 6 /* IOT instruction */
+#define SIGABRT 6 /* User Abort - aliased to IOT */
+#define SIGEMT 7 /* EMT instruction */
+#define SIGFPE 8 /* floating point exception (see machine/fpu.h) */
+#define SIGKILL 9 /* kill (cannot be caught or ignored) */
+#define SIGBUS 10 /* bus error */
+#define SIGSEGV 11 /* segmentation violation */
+#define SIGSYS 12 /* bad argument to system call */
+#define SIGPIPE 13 /* write on a pipe with no one to read it */
+#define SIGALRM 14 /* alarm clock */
+#define SIGTERM 15 /* software termination signal from kill */
+#define SIGURG 16 /* urgent condition on IO channel */
+#define SIGSTOP 17 /* sendable stop signal not from tty */
+#define SIGTSTP 18 /* stop signal from tty */
+#define SIGCONT 19 /* continue a stopped process */
+#define SIGCHLD 20 /* to parent on child stop or exit */
+#define SIGTTIN 21 /* to readers pgrp upon background tty read */
+#define SIGTTOU 22 /* like TTIN for output if (tp->t_local&LTOSTOP) */
+#define SIGIO 23 /* input/output possible signal */
+#define SIGXCPU 24 /* exceeded CPU time limit */
+#define SIGXFSZ 25 /* exceeded file size limit */
+#define SIGVTALRM 26 /* virtual time alarm */
+#define SIGPROF 27 /* profiling time alarm */
+#define SIGWINCH 28 /* window size change */
+#define SIGUSR1 30 /* user defined signal 1 */
+#define SIGUSR2 31 /* user defined signal 2 */
+
+#define SA_NOCLDSTOP 2 /* same as SV_BSDSIG */
+
+#define SIG_BLOCK 1
+#define SIG_UNBLOCK 2
+#define SIG_SETMASK 3
+
+extern int kill(), sigaction(), sigaddset(), sigdelset(),
+ sigemptyset(), sigfillset(), sigismember(),
+ sigpending(), sigprocmask(), sigsuspend();
+
+extern void (*signal())();
+
+#endif
diff --git a/xc/test/xsuite/port/INC/stddef.h b/xc/test/xsuite/port/INC/stddef.h
new file mode 100644
index 000000000..d65302b28
--- /dev/null
+++ b/xc/test/xsuite/port/INC/stddef.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#ifndef _STDDEF_H
+#define _STDDEF_H
+
+typedef int ptrdiff_t; /* difference of two pointers */
+
+#ifndef _WCHAR_T
+#define _WCHAR_T
+typedef unsigned char wchar_t; /* size of largest character */
+#endif
+
+#ifndef _SIZE_T
+#define _SIZE_T
+typedef unsigned int size_t; /* type of sizeof */
+#endif
+
+/*
+ Null pointer.
+ */
+#ifndef NULL
+#define NULL 0
+#endif
+
+/*
+ Offset in bytes of a member of the specified type.
+ */
+#define offsetof(strct_t, member) (size_t)&(((strct_t *)0)->member)
+
+#endif
diff --git a/xc/test/xsuite/port/INC/stdlib.h b/xc/test/xsuite/port/INC/stdlib.h
new file mode 100644
index 000000000..9c77adc59
--- /dev/null
+++ b/xc/test/xsuite/port/INC/stdlib.h
@@ -0,0 +1,15 @@
+/* $XConsortium$ */
+
+#define EXIT_SUCCESS 0
+#define EXIT_FAILURE 1
+
+#ifndef NULL
+#define NULL 0
+
+#ifndef _SIZE_T
+#define _SIZE_T
+ typedef unsigned int size_t;
+
+extern void *malloc();
+extern void *calloc();
+extern char *getenv();
diff --git a/xc/test/xsuite/port/INC/string.h b/xc/test/xsuite/port/INC/string.h
new file mode 100644
index 000000000..2a43eabc7
--- /dev/null
+++ b/xc/test/xsuite/port/INC/string.h
@@ -0,0 +1,12 @@
+/* $XConsortium$ */
+
+
+#include <strings.h>
+
+extern char *strchr();
+extern char *strrchr();
+extern char *strtok();
+extern char *strstr();
+extern char *strdup();
+extern char *strpbrk();
+extern int strcspn();
diff --git a/xc/test/xsuite/port/INC/sys/types.h b/xc/test/xsuite/port/INC/sys/types.h
new file mode 100644
index 000000000..c4d04cad1
--- /dev/null
+++ b/xc/test/xsuite/port/INC/sys/types.h
@@ -0,0 +1,43 @@
+/* $XConsortium$ */
+
+#ifndef _SYS_TYPES_H
+#define _SYS_TYPES_H
+
+#ifndef _CLOCK_T
+#define _CLOCK_T
+typedef long clock_t;
+typedef long daddr_t;
+typedef char * caddr_t;
+typedef long swblk_t;
+typedef int bool_t;
+typedef int spl_t;
+
+typedef long dev_t;
+typedef short gid_t;
+typedef unsigned long ino_t;
+typedef long key_t;
+#ifndef _MODE_T
+#define _MODE_T
+typedef unsigned short mode_t;
+#endif
+typedef short nlink_t;
+#ifndef _PID_T
+#define _PID_T
+typedef int pid_t;
+#endif
+typedef long off_t;
+#ifndef _SIZE_T
+#define _SIZE_T
+typedef unsigned int size_t;
+#endif
+#ifndef _TIME_T
+#define _TIME_T
+typedef long time_t;
+#endif
+typedef short uid_t;
+
+typedef unsigned char u_char;
+typedef unsigned short u_short;
+typedef unsigned long u_long;
+
+#endif /* _SYS_TYPES_H */
diff --git a/xc/test/xsuite/port/INC/sys/wait.h b/xc/test/xsuite/port/INC/sys/wait.h
new file mode 100644
index 000000000..e602edfe5
--- /dev/null
+++ b/xc/test/xsuite/port/INC/sys/wait.h
@@ -0,0 +1,14 @@
+/* $XConsortium$ */
+#define WNOHANG 1
+#define WUNTRACED 2
+
+#define WIFEXITED(s) (((s) & 0xff) == 0)
+#define WEXITSTATUS(s) ((s)>>8 & 0xff)
+
+#define WIFSIGNALED(s) (((s) & 0xff00) == 0 && WTERMSIG(s) != 0)
+#define WTERMSIG(s) ((s) & 0x7f)
+
+#define WIFSTOPPED(s) (((s) & 0xff) == 0177)
+#define WSTOPSIG(s) ((s)>>8 & 0xff)
+
+extern pid_t wait(), waitpid();
diff --git a/xc/test/xsuite/port/INC/unistd.h b/xc/test/xsuite/port/INC/unistd.h
new file mode 100644
index 000000000..a97026aad
--- /dev/null
+++ b/xc/test/xsuite/port/INC/unistd.h
@@ -0,0 +1,56 @@
+/* $XConsortium$ */
+
+/* We want to see if we have to define ENOSYS.. */
+#include <errno.h>
+#ifndef ENOSYS
+#define ENOSYS -2
+
+#ifndef _PID_T
+#define _PID_T
+ typedef int pid_t;
+#ifndef _MODE_T
+#define _MODE_T
+typedef int mode_t;
+
+/* For F_OK etc */
+/*#include <sys/file.h>*/
+#define F_OK 0
+#define X_OK 1
+#define W_OK 2
+#define R_OK 4
+
+/* For fcntl. Probably not the right place for this. */
+#ifndef FD_CLOEXEC
+#define FD_CLOEXEC 1
+#endif
+
+/*
+ * POSIX mode defines
+ */
+#define S_IRWXU 0700
+#define S_IRWXG 0070
+#define S_IRWXO 0007
+#define S_IRUSR 0400
+#define S_IWUSR 0200
+#define S_IXUSR 0100
+#define S_IRGRP 0040
+#define S_IWGRP 0020
+#define S_IXGRP 0010
+#define S_IROTH 0004
+#define S_IWOTH 0002
+#define S_IXOTH 0001
+
+#define SEEK_SET 0
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+#ifndef _POSIX_PATH_MAX
+#define _POSIX_PATH_MAX 255
+#endif
+
+char *getenv();
+char *getlogin();
+char *getcwd();
+
diff --git a/xc/test/xsuite/port/Makefile b/xc/test/xsuite/port/Makefile
new file mode 100644
index 000000000..b24a0bdda
--- /dev/null
+++ b/xc/test/xsuite/port/Makefile
@@ -0,0 +1,25 @@
+# $XConsortium$
+
+
+CFILES = getcwd.c putenv.c strspn.c strtok.c waitpid.c signals.c \
+ toupper.c strchr.c strftime.c getopt.c vsprintf.c strpbrk.c \
+ memcmp.c
+
+OFILES = getcwd.o putenv.o strspn.o strtok.o waitpid.o signals.o \
+ toupper.o strchr.o strftime.o getopt.o vsprintf.o strpbrk.o \
+ memcmp.o
+
+all: libport.a
+
+libport.a:$P $(OFILES)
+ $(AR) $@ `$(LORDER) $(OFILES) | $(TSORT)`
+ $(RANLIB) $@
+
+clean:
+ $(RM) $(OFILES) libport.a
+
+install: all
+ echo "portlib is used from this directory at present"
+
+LINT:
+ $(LINT) $(LINTFLAGS) $(CFILES) $(LINTTCM) $(LINTLIBS)
diff --git a/xc/test/xsuite/port/getcwd.c b/xc/test/xsuite/port/getcwd.c
new file mode 100644
index 000000000..9ea5d3a45
--- /dev/null
+++ b/xc/test/xsuite/port/getcwd.c
@@ -0,0 +1,53 @@
+/* $XConsortium$ */
+
+#include <stdlib.h>
+#include <errno.h>
+#include <sys/param.h>
+
+/*
+ * A simple emulation of getcwd() to allow the tcc to run on BSD systems
+ * that don't provide this.
+ * getcwd() differs from the BSD getwd() by specifing a size.
+ *
+ * Do not use if the system provides getcwd()
+ *
+ */
+char *
+getcwd(buf, size)
+char *buf;
+int size;
+{
+char *bp;
+char *getwd();
+
+ if (size <= 0) {
+ errno = EINVAL;
+ return((char*) 0);
+ }
+
+ /*
+ * get a buffer that hold the max possible BSD pathname.
+ */
+ bp = (char *)malloc((size_t)(MAXPATHLEN+1));
+ if (bp == (char *)0) {
+ errno = ENOMEM;
+ return((char *) 0);
+ }
+
+ if (getwd(bp) == (char *)0) {
+ /* errno should have been set */
+ return((char *) 0);
+ }
+
+ if (strlen(bp) >= size) {
+ errno = ERANGE;
+ return((char *) 0);
+ }
+
+ strcpy(buf, bp);
+
+ free(bp);
+
+ return(buf);
+
+}
diff --git a/xc/test/xsuite/port/getopt.c b/xc/test/xsuite/port/getopt.c
new file mode 100644
index 000000000..c31829303
--- /dev/null
+++ b/xc/test/xsuite/port/getopt.c
@@ -0,0 +1,107 @@
+/* $XConsortium$ */
+
+#include <stdio.h>
+#include <string.h>
+
+char *optarg;
+int optind = 1;
+int opterr = 1;
+
+getopt(argc, argv, optstring)
+int argc;
+char **argv;
+char *optstring;
+{
+static int avplace;
+char *ap;
+char *cp;
+int c;
+
+ if (optind >= argc)
+ return(EOF);
+
+ ap = argv[optind] + avplace;
+
+ /* At begining of arg but not an option */
+ if (avplace == 0) {
+ if (ap[0] != '-')
+ return(EOF);
+ else if (ap[1] == '-') {
+ /* Special end of options option */
+ optind++;
+ return(EOF);
+ } else if (ap[1] == '\0')
+ return(EOF); /* single '-' is not allowed */
+ }
+
+ /* Get next letter */
+ avplace++;
+ c = *++ap;
+
+ cp = strchr(optstring, c);
+ if (cp == NULL || c == ':') {
+ if (opterr)
+ fprintf(stderr, "Unrecognised option -- %c\n", c);
+ return('?');
+ }
+
+ if (cp[1] == ':') {
+ /* There should be an option arg */
+ avplace = 0;
+ if (ap[1] == '\0') {
+ /* It is a separate arg */
+ if (++optind >= argc) {
+ if (opterr)
+ fprintf(stderr, "Option requires an argument\n");
+ return('?');
+ }
+ optarg = argv[optind++];
+ } else {
+ /* is attached to option letter */
+ optarg = ap + 1;
+ ++optind;
+ }
+ } else {
+
+ /* If we are out of letters then go to next arg */
+ if (ap[1] == '\0') {
+ ++optind;
+ avplace = 0;
+ }
+
+ optarg = NULL;
+ }
+
+ return(c);
+}
+
+#ifdef test
+
+main(argc, argv)
+int argc;
+char **argv;
+{
+extern char *optarg;
+extern int optind;
+int c;
+
+ while ((c = getopt(argc, argv, "ab:cd:")) != EOF) {
+ switch (c) {
+ case 'a':
+ case 'c':
+ printf("opt -%c\n", c);
+ break;
+ case 'b':
+ case 'd':
+ printf("opt -%c %s\n", c, optarg);
+ break;
+ case '?':
+ printf("Bad option %c\n", c);
+ break;
+ default:
+ printf("unexpected default\n");
+ break;
+ }
+ }
+}
+#endif
diff --git a/xc/test/xsuite/port/memcmp.c b/xc/test/xsuite/port/memcmp.c
new file mode 100644
index 000000000..a83969334
--- /dev/null
+++ b/xc/test/xsuite/port/memcmp.c
@@ -0,0 +1,13 @@
+/* $XConsortium$ */
+
+/*
+ * Compare two areas of memory.
+ */
+int
+memcmp(s1, s2, n)
+char *s1;
+char *s2;
+int n;
+{
+ return bcmp(s2, s1, n);
+}
diff --git a/xc/test/xsuite/port/putenv.c b/xc/test/xsuite/port/putenv.c
new file mode 100644
index 000000000..7270d95fd
--- /dev/null
+++ b/xc/test/xsuite/port/putenv.c
@@ -0,0 +1,83 @@
+/* $XConsortium$ */
+
+#include <stdlib.h>
+#include <string.h>
+
+/*
+ * An emulation of putenv() which is required for BSD4.2 systems
+ * and perhaps pure POSIX.1 systems.
+ *
+ * Do not use if the system provides putenv()
+ *
+ */
+int
+putenv(envstr)
+char *envstr;
+{
+ /*
+ * This routine mimics putenv(), and is provided
+ * because putenv() is not in POSIX.1
+ */
+
+ char **newenv, **cur, *envname;
+ int n, count = 0;
+ static char **allocp = NULL;
+ extern char **environ;
+
+ if (environ == NULL)
+ {
+ newenv = (char **)malloc((size_t)(2*sizeof(char *)));
+ if (newenv == NULL)
+ return -1;
+
+ newenv[0] = envstr;
+ newenv[1] = NULL;
+ environ = newenv;
+ allocp = newenv;
+ return 0;
+ }
+
+ cur = environ;
+
+ while (*cur != NULL)
+ {
+ count++;
+ envname = *cur;
+ n = strcspn(envstr, "=");
+ if (strncmp(envname, envstr, (size_t) n) || envname[n] != '=')
+ cur++;
+ else
+ {
+ *cur = envstr;
+ return 0;
+ }
+ }
+
+ /*
+ * If we previously allocated this environment enlarge it using
+ * realloc(), otherwise allocate a new one and copy it over.
+ * Note that only the last malloc()/realloc() pointer is saved, so
+ * if environ has since been changed the old space will be wasted.
+ */
+
+ if (environ == allocp)
+ newenv = (char **) realloc((void *) environ,
+ (size_t) ((count+2)*sizeof(char *)));
+ else
+ newenv = (char **) malloc((size_t) ((count+2)*sizeof(char *)));
+
+ if (newenv == NULL)
+ return -1;
+
+ if (environ != allocp)
+ {
+ for (n = 0; environ[n] != NULL; n++)
+ newenv[n] = environ[n];
+ allocp = newenv;
+ }
+ newenv[count] = envstr;
+ newenv[count+1] = NULL;
+ environ = newenv;
+
+ return 0;
+}
diff --git a/xc/test/xsuite/port/signals.c b/xc/test/xsuite/port/signals.c
new file mode 100644
index 000000000..f69f7381a
--- /dev/null
+++ b/xc/test/xsuite/port/signals.c
@@ -0,0 +1,139 @@
+/* $XConsortium$ */
+#include <signal.h>
+#include <errno.h>
+
+extern int errno;
+
+sigemptyset(set)
+sigset_t *set;
+{
+ *set = 0;
+ return 0;
+}
+
+sigfillset(set)
+sigset_t *set;
+{
+ *set = 0xffffffff;
+ return 0;
+}
+
+sigaddset(set, sig)
+sigset_t *set;
+int sig;
+{
+ if (sig < 1 || sig >= NSIG)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ *set |= (1 << (sig-1));
+ return 0;
+}
+
+sigdelset(set, sig)
+sigset_t *set;
+int sig;
+{
+ if (sig < 1 || sig >= NSIG)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ *set &= ~(1 << (sig-1));
+ return 0;
+}
+
+sigismember(set, sig)
+sigset_t *set;
+int sig;
+{
+ if (sig < 1 || sig >= NSIG)
+ {
+ errno = EINVAL;
+ return -1;
+ }
+ return ((*set & (1 << (sig-1))) != 0);
+}
+
+sigaction(sig, act, oact)
+int sig;
+struct sigaction *act, *oact;
+{
+ int ret;
+
+ /*
+ * This is what we do for now: zero sa_flags so that the sigaction
+ * structures can be passed to th BSD sigvec() as if they
+ * were sigvec structures.
+ */
+
+#if 1
+ /* Put in a trap so we know when assumption becomes wrong */
+ if (act && act->sa_flags != 0) {
+ printf("sa_flags != 0\n");
+ exit(123);
+ }
+#endif
+
+ if (act)
+ act->sa_flags = 0;
+ ret = sigvec(sig, act, oact);
+ if (oact)
+ oact->sa_flags = 0;
+
+ return ret;
+}
+
+sigprocmask(how, set, oset)
+int how;
+sigset_t *set, *oset;
+{
+ sigset_t omask;
+
+ if (set != 0)
+ switch (how) {
+ case SIG_BLOCK :
+ omask = sigblock(*set);
+ break;
+ case SIG_UNBLOCK :
+ omask = sigblock((sigset_t)0);
+ omask = sigsetmask(omask & ~*set);
+ break;
+ case SIG_SETMASK :
+ omask = sigsetmask(*set);
+ break;
+ default :
+ errno = EINVAL;
+ return -1;
+ }
+ else
+ omask = sigblock((sigset_t)0);
+
+ if (oset != 0)
+ *oset = omask;
+
+ return 0;
+}
+
+/* ARGSUSED */
+sigpending(set)
+sigset_t *set;
+{
+#ifdef ENOSYS
+ errno = ENOSYS;
+#else
+ /*
+ * BSD4.2 doesn't have a suitable eqivalent to ENOSYS.
+ */
+ errno = EINVAL;
+#endif
+ return -1;
+}
+
+sigsuspend(mask)
+sigset_t *mask;
+{
+ (void) sigpause(*mask);
+ return -1;
+}
diff --git a/xc/test/xsuite/port/strchr.c b/xc/test/xsuite/port/strchr.c
new file mode 100644
index 000000000..1da3684b6
--- /dev/null
+++ b/xc/test/xsuite/port/strchr.c
@@ -0,0 +1,24 @@
+/* $XConsortium$ */
+/*
+ * Emulations of strchr() and strrchr() for BSD systems without
+ * them
+ */
+
+char *index();
+char *rindex();
+
+char *
+strchr(s1, c)
+char *s1;
+int c;
+{
+ return(index(s1, c));
+}
+
+char *
+strrchr(s1, c)
+char *s1;
+int c;
+{
+ return(rindex(s1, c));
+}
diff --git a/xc/test/xsuite/port/strftime.c b/xc/test/xsuite/port/strftime.c
new file mode 100644
index 000000000..ec886f783
--- /dev/null
+++ b/xc/test/xsuite/port/strftime.c
@@ -0,0 +1,292 @@
+/* $XConsortium$ */
+/*
+ * This is a stub for strftime which is used to provide the time in the TCC.
+ */
+
+#include <sys/types.h>
+#include <sys/time.h>
+
+int
+strftime(s, maxsize, format, tm)
+char *s;
+int maxsize;
+char *format;
+struct tm *tm;
+{
+char *cp;
+
+#ifdef lint
+ cp = format;
+#endif
+
+ cp = asctime(tm);
+ /*
+ * Copy exactly HH:MM:SS\0 (TSIZE chars) into s.
+ */
+#define TSIZE 9
+ strncpy(s, cp+11, maxsize);
+ if (maxsize >= TSIZE) {
+ s[TSIZE-1] = '\0';
+ return(TSIZE);
+ } else {
+ return(maxsize);
+ }
+}
+
+#ifdef notdef
+
+/* A complete version that requires nls */
+
+/****************************************************************************
+
+NAME: strftime() - convert date and time to string
+
+MODULE CONTAINS:
+ strftime()
+
+SYNOPSIS:
+ #include <time.h>
+ int strftime(s,maxsize,format,tm)
+ char *s;
+ int maxsize;
+ char *format;
+ struct tm *tm;
+
+DESCRIPTION:
+ strftime() places characters into the array pointed to by s as
+ controlled by the string pointed to by format.
+
+AUTHOR: Geoff Clare/Phyfos Photi
+DATE CREATED: July 15th, 1988
+
+****************************************************************************/
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <time.h>
+#include <langinfo.h>
+#include <nlstest.h>
+
+#define CHKCOUNT(incr) count += incr; \
+ if (count+1 > maxsize) \
+ { \
+ *bufp = '\0'; \
+ return(0); \
+ };
+
+#define PUTVAL2(bufp,val) CHKCOUNT(2); \
+ *bufp++ = '0' + ((val)/10) % 10; \
+ *bufp++ = '0' + (val) % 10
+
+#define PUTVAL3(bufp,val) CHKCOUNT(3); \
+ *bufp++ = '0' + ((val)/100) % 10; \
+ *bufp++ = '0' + ((val)/10) % 10; \
+ *bufp++ = '0' + (val) % 10
+
+#define PUTINFO(bufp,item) info = nl_langinfo(item); \
+ if (info == NULL || *info == '\0') \
+ ++langerror; \
+ else \
+ { CHKCOUNT(strlen(info)); \
+ (void) strcpy(bufp, info); \
+ bufp += strlen(info); \
+ }
+
+extern char *nl_langinfo();
+extern char *strcpy();
+extern size_t strlen();
+
+size_t
+strftime(buf,maxsize,fmt,tm)
+
+struct tm *tm;
+register char *fmt,*buf;
+size_t maxsize;
+
+{
+ int langerror = 0;
+ int count = 0;
+ register char *info,*bufp;
+ extern int lc_time;
+ int len;
+ int tznum;
+
+ if (fmt == NULL || *fmt == '\0')
+ { fmt = nl_langinfo(D_T_FMT);
+ if (fmt == NULL || *fmt == '\0')
+ ++langerror;
+ }
+
+ for (bufp = buf; *fmt != '\0' && langerror == 0; fmt++)
+ {
+ if (*fmt == '%')
+ switch (*++fmt)
+ {
+ case '%' : CHKCOUNT(1);
+ *bufp++ = '%';
+ break;
+ case 'n' : CHKCOUNT(1);
+ *bufp++ = '\n';
+ break;
+ case 't' : CHKCOUNT(1);
+ *bufp++ = '\t';
+ break;
+ case 'm' : PUTVAL2(bufp, tm->tm_mon + 1);
+ break;
+ case 'd' : PUTVAL2(bufp, tm->tm_mday);
+ break;
+ case 'y' : PUTVAL2(bufp, tm->tm_year);
+ break;
+ case 'Y' : CHKCOUNT(4);
+ (void)sprintf(bufp,"%4d",1900 + tm->tm_year);
+ bufp += 4;
+ break;
+ case 'D' : PUTVAL2(bufp, tm->tm_mon + 1);
+ CHKCOUNT(1);
+ *bufp++ = '/';
+ PUTVAL2(bufp, tm->tm_mday);
+ CHKCOUNT(1);
+ *bufp++ = '/';
+ PUTVAL2(bufp, tm->tm_year);
+ break;
+ case 'H' : PUTVAL2(bufp, tm->tm_hour);
+ break;
+ case 'I' : PUTVAL2(bufp, (tm->tm_hour % 12 != 0) ?
+ (tm->tm_hour % 12) : 12);
+ break;
+ case 'M' : PUTVAL2(bufp, tm->tm_min);
+ break;
+ case 'S' : PUTVAL2(bufp, tm->tm_sec);
+ break;
+ case 'T' : PUTVAL2(bufp, tm->tm_hour);
+ CHKCOUNT(1);
+ *bufp++ = ':';
+ PUTVAL2(bufp, tm->tm_min);
+ CHKCOUNT(1);
+ *bufp++ = ':';
+ PUTVAL2(bufp, tm->tm_sec);
+ break;
+ case 'j' : PUTVAL3(bufp, tm->tm_yday + 1);
+ break;
+ case 'w' : CHKCOUNT(1);
+ *bufp++ = tm->tm_wday + '0';
+ break;
+ case 'a' : PUTINFO(bufp, ABDAY_1 + tm->tm_wday);
+ break;
+ case 'A' : PUTINFO(bufp, DAY_1 + tm->tm_wday);
+ break;
+ case 'b' : /* fall-through */
+ case 'h' : PUTINFO(bufp, ABMON_1 + tm->tm_mon);
+ break;
+ case 'B' : PUTINFO(bufp, MON_1 + tm->tm_mon);
+ break;
+ case 'r' : PUTVAL2(bufp, (tm->tm_hour + 11) % 12 + 1);
+ CHKCOUNT(1);
+ *bufp++ = ':';
+ PUTVAL2(bufp, tm->tm_min);
+ CHKCOUNT(1);
+ *bufp++ = ':';
+ PUTVAL2(bufp, tm->tm_sec);
+ *bufp++ = ' ';
+ if (tm->tm_hour < 12)
+ *bufp++ = 'A';
+ else
+ *bufp++ = 'P';
+ *bufp++ = 'M';
+ break;
+ case 'p' : PUTINFO(bufp,
+ tm->tm_hour < 12 ? AM_STR : PM_STR);
+ break;
+ case 'c' : info = nl_langinfo(D_T_FMT);
+ if (info == NULL || *info == '\0')
+ ++langerror;
+ else
+ if ((len = strftime(bufp,maxsize - count
+ ,info,tm)) == 0)
+ return(0);
+ else
+ { CHKCOUNT(len);
+ bufp += len;
+ }
+ break;
+ case 'U' : if ((tm->tm_yday - tm->tm_wday) < 0)
+ {
+ PUTVAL2(bufp, 0);
+ }
+ else
+ {
+ PUTVAL2(bufp, (tm->tm_yday -
+ tm->tm_wday)/ 7 + 1);
+ }
+ break;
+ case 'W' : if (tm->tm_yday - ((tm->tm_wday != 0) ?
+ tm->tm_wday - 1 : 6) < 0)
+ {
+ PUTVAL2(bufp, 0);
+ }
+ else
+ {
+ PUTVAL2(bufp, (tm->tm_yday -
+ ((tm->tm_wday != 0) ? tm->tm_wday - 1 :
+ 6)) / 7 + 1);
+ }
+ break;
+ case 'x' : info = nl_langinfo(D_FMT);
+ if (info == NULL || *info == '\0')
+ ++langerror;
+ else
+ if ((len = strftime(bufp,maxsize - count
+ ,info,tm)) == 0)
+ return(0);
+ else
+ { CHKCOUNT(len);
+ bufp += len;
+ }
+ break;
+ case 'X' : info = nl_langinfo(T_FMT);
+ if (info == NULL || *info == '\0')
+ ++langerror;
+ else
+ if ((len = strftime(bufp,maxsize - count
+ ,info,tm)) == 0)
+ return(0);
+ else
+ { CHKCOUNT(len);
+ bufp += len;
+ }
+ break;
+ case 'Z' : tzset();
+ if (tm->tm_isdst == 0 || *tzname[1] == '\0')
+ tznum = 0;
+ else
+ tznum = 1;
+ if (tzname[tznum] == NULL || *tzname[tznum] == '\0')
+ break;
+ CHKCOUNT(strlen(tzname[tznum]));
+ (void) strcpy(bufp,tzname[tznum]);
+ bufp += strlen(tzname[tznum]);
+ break;
+ case '\0': CHKCOUNT(1);
+ *bufp++ = '%';
+ --fmt;
+ break;
+ default : CHKCOUNT(2);
+ *bufp++ = '%';
+ *bufp++ = *fmt;
+ break;
+ }
+ else
+ { CHKCOUNT(1);
+ *bufp++ = *fmt;
+ }
+ }
+
+ *bufp = '\0';
+
+ if (langerror == 0)
+ return(count);
+ else
+ return(0);
+}
+
+#endif
diff --git a/xc/test/xsuite/port/strpbrk.c b/xc/test/xsuite/port/strpbrk.c
new file mode 100644
index 000000000..d1d2fe829
--- /dev/null
+++ b/xc/test/xsuite/port/strpbrk.c
@@ -0,0 +1,26 @@
+/* $XConsortium$ */
+/* A version of strpbrk for systems without it. */
+
+/* Return pointer to first occurence of any character from `bset' */
+/* in `string'. NULL is returned if none exists. */
+
+#ifndef NULL
+#define NULL (char *) 0
+#endif
+
+char *
+strpbrk(str, bset)
+char *str;
+char *bset;
+{
+ char *ptr;
+
+ do {
+ for(ptr=bset; *ptr != '\0' && *ptr != *str; ++ptr)
+ ;
+ if(*ptr != '\0')
+ return(str);
+ }
+ while(*str++);
+ return(NULL);
+}
diff --git a/xc/test/xsuite/port/strspn.c b/xc/test/xsuite/port/strspn.c
new file mode 100644
index 000000000..238a0979a
--- /dev/null
+++ b/xc/test/xsuite/port/strspn.c
@@ -0,0 +1,50 @@
+/* $XConsortium$ */
+/*
+ * returns the number of contiguous characters from the beginning
+ * of str that are in set.
+ *
+ * A simple emulation provided for (eg BSD) systems that do not provide
+ * this routine.
+ */
+int
+strspn(str, set)
+char *str;
+char *set;
+{
+char *cp, *sp;
+
+ for (cp = str; *cp; cp++) {
+ for (sp = set; *sp && *cp != *sp; sp++)
+ ;
+
+ if (*sp == '\0')
+ break;
+
+ }
+ return(cp - str);
+}
+
+/*
+ * returns the number of contiguous characters from the beginning
+ * of str that are not in set.
+ *
+ * A simple emulation provided for (eg BSD) systems that do not provide
+ * this routine.
+ */
+int
+strcspn(str, set)
+char *str;
+char *set;
+{
+char *cp, *sp;
+
+ for (cp = str; *cp; cp++) {
+ for (sp = set; *sp && *cp != *sp; sp++)
+ ;
+
+ if (*sp != '\0')
+ break;
+
+ }
+ return(cp - str);
+}
diff --git a/xc/test/xsuite/port/strtok.c b/xc/test/xsuite/port/strtok.c
new file mode 100644
index 000000000..65da542e6
--- /dev/null
+++ b/xc/test/xsuite/port/strtok.c
@@ -0,0 +1,49 @@
+/* $XConsortium$ */
+
+
+/*
+ * A version of strtok for systems that do not have it
+ */
+char *
+strtok(s1, sep)
+char *s1;
+char *sep;
+{
+static char *savpos;
+int n;
+
+ if (s1)
+ savpos = s1;
+ else
+ s1 = savpos;
+
+ /* Skip over leading separators */
+ n = strspn(s1, sep);
+ s1 += n;
+
+ n = strcspn(s1, sep);
+ if (n == 0)
+ return((char *) 0);
+
+ savpos = s1 + n;
+ if (*savpos != '\0')
+ *savpos++ = '\0';
+
+ return(s1);
+}
+
+#ifdef test
+#include <stdio.h>
+main()
+{
+char *s;
+char *strtok();
+
+ s = strtok("this is :, . string", " :,");
+ do {
+ printf("%s\n", s);
+ fflush(stdout);
+ } while ((s = strtok((char*)0, " :,")) != 0);
+
+}
+#endif
diff --git a/xc/test/xsuite/port/toupper.c b/xc/test/xsuite/port/toupper.c
new file mode 100644
index 000000000..344d5ebb1
--- /dev/null
+++ b/xc/test/xsuite/port/toupper.c
@@ -0,0 +1,40 @@
+/* $XConsortium$ */
+
+
+/*
+ * A function version of toupper().
+ * The BSD4.2 version of toupper in ctype.h does
+ * not leave non-lowercase letters unchanged.
+ */
+toupper(c)
+int c;
+{
+ return(upcase(c));
+}
+
+tolower(c)
+int c;
+{
+ return(locase(c));
+}
+
+
+#include <ctype.h>
+
+upcase(c)
+int c;
+{
+ if (islower(c))
+ return(toupper(c));
+ else
+ return(c);
+}
+
+locase(c)
+int c;
+{
+ if (isupper(c))
+ return(tolower(c));
+ else
+ return(c);
+}
diff --git a/xc/test/xsuite/port/vsprintf.c b/xc/test/xsuite/port/vsprintf.c
new file mode 100644
index 000000000..c465ce0b8
--- /dev/null
+++ b/xc/test/xsuite/port/vsprintf.c
@@ -0,0 +1,31 @@
+/* $XConsortium$ */
+
+/*
+ * This is a very simple emulation for BSD with the standard compiler
+ * It is limited to 6 args.
+ * Do NOT use if the system posesses vsprintf()
+ * NB. This is not even necessarily portable even to all BSD systems.
+ * This is only required temporarily until the tet_infoline() issue
+ * is resolved.
+ */
+
+#include <varargs.h>
+
+vsprintf(buf, fmt, args)
+char *buf;
+char *fmt;
+va_list args;
+{
+int a1, a2, a3, a4, a5, a6;
+
+ a1 = va_arg(args, int);
+ a2 = va_arg(args, int);
+ a3 = va_arg(args, int);
+ a4 = va_arg(args, int);
+ a5 = va_arg(args, int);
+ a6 = va_arg(args, int);
+
+ sprintf(buf, fmt, a1, a2, a3, a4, a5, a6);
+
+}
+
diff --git a/xc/test/xsuite/port/waitpid.c b/xc/test/xsuite/port/waitpid.c
new file mode 100644
index 000000000..f8f60b001
--- /dev/null
+++ b/xc/test/xsuite/port/waitpid.c
@@ -0,0 +1,117 @@
+/* $XConsortium$ */
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <errno.h>
+
+#ifdef DEBUG
+# include <stdio.h>
+# define DBP(fmt,arg) (fprintf(stderr, "waitpid(%d): ", currpid), \
+ fprintf(stderr, fmt, arg), fflush(stderr))
+#else
+# define DBP(fmt,arg)
+#endif
+
+#define MAXTAB 20
+
+static struct {
+ pid_t pid;
+ int status;
+} savtab[MAXTAB];
+static int ntab = 0;
+static pid_t currpid = 0;
+
+pid_t
+waitpid(pid, stat_loc, options)
+pid_t pid;
+int *stat_loc;
+int options;
+{
+ int rval, i;
+ int local_loc;
+
+ /* Clear the table for each new process */
+ if (getpid() != currpid)
+ {
+ ntab = 0;
+ currpid = getpid();
+ DBP("clearing table\n", 0);
+ }
+
+ DBP("waiting for pid %d\n", pid);
+
+ if (options & ~(WNOHANG|WUNTRACED))
+ {
+ errno = EINVAL;
+ return -1;
+ }
+
+ if (pid == -1)
+ {
+ /* see if any saved */
+ for (i=0; i<ntab; i++)
+ if (savtab[i].pid != 0)
+ {
+ pid = savtab[i].pid;
+ if (stat_loc)
+ *stat_loc = savtab[i].status;
+ savtab[i].pid = 0;
+ DBP("got %d from table\n", pid);
+ return pid;
+ }
+
+ DBP("return wait3(...)\n", 0);
+ return wait3(stat_loc, options, (int *)0);
+ }
+
+ if (pid <= 0)
+ {
+ /* can't do this functionality (without reading /dev/kmem!) */
+ errno = EINVAL;
+ return -1;
+ }
+
+ /* see if already saved */
+ for (i=0; i<ntab; i++)
+ if (savtab[i].pid == pid)
+ {
+ if (stat_loc)
+ *stat_loc = savtab[i].status;
+ savtab[i].pid = 0;
+ DBP("found %d in table\n", pid);
+ return pid;
+ }
+
+ rval = wait3(&local_loc, options, (int *)0);
+ DBP("wait3() returned %d\n", rval);
+ while (rval != pid && rval != -1 && rval != 0)
+ {
+ /* save for later */
+ for (i=0; i<ntab; i++)
+ if (savtab[i].pid == 0)
+ {
+ savtab[i].pid = rval;
+ savtab[i].status = local_loc;
+ DBP("saved %d in free slot\n", rval);
+ break;
+ }
+ if (i == ntab)
+ {
+ if (ntab < MAXTAB)
+ {
+ savtab[ntab].pid = rval;
+ savtab[ntab].status = local_loc;
+ ++ntab;
+ DBP("saved %d in new slot\n", rval);
+ }
+ else
+ DBP("no free slot for %d\n", rval);
+ }
+ rval = wait3(&local_loc, options, (int *)0);
+ DBP("wait3() returned %d\n", rval);
+ }
+
+ if(stat_loc)
+ *stat_loc = local_loc;
+
+ return rval;
+}
diff --git a/xc/test/xsuite/xtest/bin/pclean b/xc/test/xsuite/xtest/bin/pclean
new file mode 100755
index 000000000..d3d9fd4d3
--- /dev/null
+++ b/xc/test/xsuite/xtest/bin/pclean
@@ -0,0 +1,37 @@
+
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+
+# If there is no Makefile then make it first
+if [ ! -f Makefile ]; then
+ mmkf -o Makefile *.m
+ if [ ! -f Makefile ]; then
+ echo Could not make Makefile
+ exit 1
+ fi
+fi
+
+TMP=/tmp/xm$$
+trap 'rm -f $TMP; exit ${EXIT_STATUS}' 0 1 2 3 15
+
+CCONFIG=${TET_CLEANCONFIG-${TET_ROOT}/xtest/tetclean.cfg}
+
+cat $CCONFIG Makefile > $TMP
+
+make -f $TMP clean
+EXIT_STATUS=$?
diff --git a/xc/test/xsuite/xtest/bin/pmake b/xc/test/xsuite/xtest/bin/pmake
new file mode 100755
index 000000000..be98242e1
--- /dev/null
+++ b/xc/test/xsuite/xtest/bin/pmake
@@ -0,0 +1,44 @@
+
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+
+# If there is no Makefile then make it first
+if [ ! -f Makefile ]; then
+ mmkf -o Makefile *.m
+ if [ ! -f Makefile ]; then
+ echo Could not make Makefile
+ exit 1
+ fi
+fi
+
+TMP=/tmp/xm$$
+trap 'rm -f $TMP; exit ${EXIT_STATUS}' 0 1 2 3 15
+
+BCONFIG=${TET_BUILDCONFIG-${TET_ROOT}/xtest/tetbuild.cfg}
+
+cat $BCONFIG Makefile > $TMP
+# cat $TMP
+#. $TMP
+#$TET_BUILD_TOOL $TET_BUILD_FILE "$@"
+if [ $# = 0 ]; then
+ make -f $TMP
+ EXIT_STATUS=$?
+else
+ make -f $TMP "$@"
+ EXIT_STATUS=$?
+fi
diff --git a/xc/test/xsuite/xtest/bin/prp b/xc/test/xsuite/xtest/bin/prp
new file mode 100755
index 000000000..a410862a7
--- /dev/null
+++ b/xc/test/xsuite/xtest/bin/prp
@@ -0,0 +1,272 @@
+
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+# A simple report generator for development use
+# There is much information in the journal file that can be
+# used to check that all went well, for example matching the number
+# of tests in the IC with the number that actually are reported.
+#
+# This prototype report generator only provides a very simple
+# formating function, rather than a validation one.
+
+DODEBUG=0
+DOTRACE=0
+DOPASS=1
+DOSUM=1
+
+usefile=
+number=
+
+
+while test $# -gt 0
+do
+ case $1 in
+ -d)
+ DODEBUG=1
+ DOTRACE=1
+ ;;
+ -t)
+ DOTRACE=1
+ ;;
+ -p)
+ # Report only on failures.
+ DOPASS=0
+ ;;
+ -s)
+ DOSUM=0
+ ;;
+ -f)
+ usefile=$2
+ shift
+ ;;
+ -T)
+ case $2 in
+ [0-9]*)
+ number=$2
+ shift
+ esac
+ ;;
+ esac
+ shift
+done
+
+if [ "$usefile" != "" ]; then
+ file=$usefile
+else
+ # Default for file.
+ if [ `basename $0` = prp ]; then
+ file=tet_xres
+ elif [ "$number" != "" ]; then
+ # Use the user supplied number.
+ ntmp=`echo 0000$number | sed -e 's/.*\(....\)/\1/'`
+ file=$TET_ROOT/xtest/results/${ntmp}*/journal
+ else
+ # Take the highest numbered journal with an 'e' in it
+ file=`ls -r $TET_ROOT/xtest/results/*e*/journal |\
+ sed -e '1{
+ s/[bce]*//
+ q
+ }'`
+ fi
+fi
+
+if [ ! -f $file ]; then
+ echo "Could not find file $file"
+ exit 1
+fi
+
+(
+ cat $file
+ echo '520|0 0 0 0 0|TRACE:NAME:'
+) | awk -F\| '
+
+BEGIN {
+ dotrace='$DOTRACE';
+ dodebug='$DODEBUG';
+ dopass='$DOPASS';
+ dosumm='$DOSUM';
+ firsttime = 1;
+
+ PASS = 0
+ FAIL = 1
+ UNRESOLVED = 2
+ NOTINUSE = 3
+ UNSUPPORTED = 4
+ UNTESTED = 5
+ UNINITIATED = 6
+ NORESULT = 7
+
+
+}
+
+# The begining of a test case is recognised by the NAME keyword in a
+# trace line.
+/TRACE:NAME:/ {
+ if (firsttime == 0 && dosumm) {
+ print ""
+ line = "Summary of Results for " name
+ print line
+ print substr("------------------------------------------------------------------------------------------------", 1, length(line));
+ printf "%-12s %d\n", "PASS", result[PASS]
+ printf "%-12s %d\n", "FAIL", result[FAIL]
+ if (result[UNRESOLVED] != 0)
+ printf "%-12s %d\n", "UNRESOLVED", result[UNRESOLVED]
+ if (result[NOTINUSE] != 0)
+ printf "%-12s %d\n", "NOTINUSE", result[NOTINUSE]
+ if (result[UNSUPPORTED] != 0)
+ printf "%-12s %d\n", "UNSUPPORTED", result[UNSUPPORTED]
+ if (result[UNTESTED] != 0)
+ printf "%-12s %d\n", "UNTESTED", result[UNTESTED]
+ if (result[UNINITIATED] != 0)
+ printf "%-12s %d\n", "UNINITIATED", result[UNINITIATED]
+ if (result[NORESULT] != 0)
+ printf "%-12s %d\n", "NORESULT", result[NORESULT]
+ }
+ n = split($3, dat, " ");
+ name = dat[2];
+
+ if (firsttime == 0 && name != "")
+ printf "\n\n\n"
+ if (name != "")
+ printf "Tests for %s\n", name;
+ for (i = 0; i < 8; i++)
+ result[i] = 0;
+
+ # Reset all the information indexes.
+ #
+ infoind = 0;
+ failnum = 0;
+
+ firsttime = 0;
+ next;
+}
+
+# An IC start message.
+$1 == 400 {
+ n = split($2, dat, " ");
+ ic = dat[2];
+ nics = dat[3];
+}
+
+# A TP Start message
+$1 == 200 {
+ split($2, dat, " ");
+ tp = dat[2];
+ if (donefirst == 0 && infoind > 0) {
+ print "Non specific error messages:"
+ for (i = 0; i < infoind; i++)
+ printf " %s\n", infoline[i];
+ }
+ donefirst = 1;
+
+ infoind = 0;
+ failnum = 0;
+}
+
+# A infomation line
+$1 == 520 {
+
+ # Not that the message field may legally contain the field separator.
+ # So we have to extract the message from $0 with a substr expression.
+ if ($3 ~ /^REPORT:/) {
+ infoline[infoind++] = substr($0, length($1)+1+length($2)+1+8, 512);
+ failnum++;
+ }
+ if ($3 ~ /^TRACE:/ && dotrace) {
+ infoline[infoind++] = substr($0, length($1)+1+length($2)+1, 512);
+ }
+ if ($3 ~ /^TRACE:/ && dotrace == 0 && substr($3, 7, 3) == "---") {
+ infoline[infoind++] = substr($0, length($1)+1+length($2)+1+7, 512);
+ }
+ if ($3 ~ /^DEBUG:/ && dodebug) {
+ infoline[infoind++] = substr($0, length($1)+1+length($2)+1, 512);
+ }
+ if ($3 ~ /^CHECK:/) {
+ # Ignore this for the time being
+ }
+ if ($3 !~ /^[A-Z][A-Z][A-Z][A-Z]*:/) {
+ # This was probably entered by the TCM on a signal or other error.
+ infoline[infoind++] = "TCM:" substr($0, length($1)+1+length($2)+1, 512);
+ failnum++;
+ }
+}
+
+# A TP Result message
+$1 == 220 {
+
+ split($2, dat, " ");
+ res = dat[3];
+
+ # Quick consistancy check - ensure that if the
+ # result is pass then there are no infoline.
+ #
+ if (res == PASS && failnum != 0) {
+ printf "ERROR: Failure reason given for PASS result\n";
+ }
+
+ # Get the result code.
+ # NORESULT seems to appear as -1 for some reason ???
+ #
+ if (res == -1)
+ res = NORESULT;
+
+ #
+ # Increment the count of this class of result.
+ #
+ result[res]++;
+
+ if (res == PASS || res == UNTESTED || res == UNSUPPORTED || res == NOTINUSE) {
+ # The test did not fail.
+ nofailtype = 1;
+ } else {
+ nofailtype = 0;
+ }
+
+ if (dopass == 0 && nofailtype == 1)
+ next
+
+ printf "Test %3d: %s\n", tp, $3
+
+ if (infoind > 0 && res != NOTINUSE) {
+ numprint = infoind;
+ for (i = 0; i < infoind; i++) {
+ if (nofailtype && infoline[i] ~ /^--/) {
+ numprint--;
+ continue;
+ }
+ printf " %s\n", infoline[i];
+ }
+ if (numprint)
+ print ""
+ }
+ if (nofailtype == 0 && failnum == 0)
+ print " Warning: No reasons given for result"
+
+}
+
+# A TCM start line
+$1 == 15 {
+ donefirst = 0;
+}
+
+
+END {
+
+}
+
+'
diff --git a/xc/test/xsuite/xtest/bin/pt b/xc/test/xsuite/xtest/bin/pt
new file mode 100755
index 000000000..1b72ebbf9
--- /dev/null
+++ b/xc/test/xsuite/xtest/bin/pt
@@ -0,0 +1,102 @@
+
+#
+# Flags accepted.
+# -v XT_VARIABLE_NAME=Value Add a variable setting
+# -d display Set the display
+# -i <IC's> List of IC's to do
+# -p Do pixmaps only.
+# -w Do windows only.
+# -P Pause after each drawing.
+# -D Do default depth of screen only.
+# -x <lev> Set debug level
+# -g Generate pixmaps.
+# -m Use macro version of function.
+
+# The display defaults to $DISPLAY
+#
+
+trap "rm -f CONFIG" 0
+
+PROG=./Test
+if [ ! -f $PROG ]; then
+ # If there isn't a ./Test then try for the space saving name.
+ THISDIR=`pwd`
+ PROG=./`basename $THISDIR`
+fi
+
+ICS=
+echo > CONFIG
+
+while [ $# -gt 0 ]
+do
+ case $1 in
+ -v)
+ echo $2 >> CONFIG
+ shift
+ ;;
+ -d)
+ echo "XT_DISPLAY=$2" >> CONFIG
+ shift
+ ;;
+ -i)
+ ICS=$2
+ shift
+ ;;
+ -x)
+ echo "XT_DEBUG=$2" >> CONFIG
+ shift
+ ;;
+ -p)
+ echo "XT_DEBUG_PIXMAP_ONLY=YES" >> CONFIG
+ ;;
+ -w)
+ echo "XT_DEBUG_WINDOW_ONLY=YES" >> CONFIG
+ ;;
+ -P)
+ echo "XT_DEBUG_PAUSE_AFTER=YES" >> CONFIG
+ ;;
+ -D)
+ echo "XT_DEBUG_DEFAULT_DEPTHS=YES" >> CONFIG
+ ;;
+ -g)
+ PROG=./pvgen
+ ;;
+ -m)
+ PROG=./MTest
+ ;;
+ esac
+ shift
+done
+
+# If the display variable is not set on the command line then
+# this will cause the display in DISPLAY to be used.
+
+if [ "$DISPLAY" != "" ]; then
+ echo "XT_DISPLAY=$DISPLAY" >> CONFIG
+fi
+
+# config=${TET_CONFIG:-$TET_ROOT/xtest/tetexec.cfg}
+# Since :- is not universal, and I really want that functionality.
+if [ x"$TET_CONFIG" = x"" ]; then
+ config=$TET_ROOT/xtest/tetexec.cfg
+else
+ config=$TET_CONFIG
+fi
+
+cat $config >> CONFIG
+echo "junk=junk" >> CONFIG # TEMP
+
+# set TET_CONFIG to our modified file.
+TET_CONFIG=CONFIG
+export TET_CONFIG
+
+#TET_CODE=${TET_CODE:-$TET_ROOT/xtest/tet_code}
+if [ x"$TET_CODE" = x"" ]; then
+ TET_CODE=$TET_ROOT/xtest/tet_code
+fi
+export TET_CODE
+
+rm -f Err*.err
+
+$PROG $ICS
+
diff --git a/xc/test/xsuite/xtest/bin/rpt b/xc/test/xsuite/xtest/bin/rpt
new file mode 100755
index 000000000..a410862a7
--- /dev/null
+++ b/xc/test/xsuite/xtest/bin/rpt
@@ -0,0 +1,272 @@
+
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+# A simple report generator for development use
+# There is much information in the journal file that can be
+# used to check that all went well, for example matching the number
+# of tests in the IC with the number that actually are reported.
+#
+# This prototype report generator only provides a very simple
+# formating function, rather than a validation one.
+
+DODEBUG=0
+DOTRACE=0
+DOPASS=1
+DOSUM=1
+
+usefile=
+number=
+
+
+while test $# -gt 0
+do
+ case $1 in
+ -d)
+ DODEBUG=1
+ DOTRACE=1
+ ;;
+ -t)
+ DOTRACE=1
+ ;;
+ -p)
+ # Report only on failures.
+ DOPASS=0
+ ;;
+ -s)
+ DOSUM=0
+ ;;
+ -f)
+ usefile=$2
+ shift
+ ;;
+ -T)
+ case $2 in
+ [0-9]*)
+ number=$2
+ shift
+ esac
+ ;;
+ esac
+ shift
+done
+
+if [ "$usefile" != "" ]; then
+ file=$usefile
+else
+ # Default for file.
+ if [ `basename $0` = prp ]; then
+ file=tet_xres
+ elif [ "$number" != "" ]; then
+ # Use the user supplied number.
+ ntmp=`echo 0000$number | sed -e 's/.*\(....\)/\1/'`
+ file=$TET_ROOT/xtest/results/${ntmp}*/journal
+ else
+ # Take the highest numbered journal with an 'e' in it
+ file=`ls -r $TET_ROOT/xtest/results/*e*/journal |\
+ sed -e '1{
+ s/[bce]*//
+ q
+ }'`
+ fi
+fi
+
+if [ ! -f $file ]; then
+ echo "Could not find file $file"
+ exit 1
+fi
+
+(
+ cat $file
+ echo '520|0 0 0 0 0|TRACE:NAME:'
+) | awk -F\| '
+
+BEGIN {
+ dotrace='$DOTRACE';
+ dodebug='$DODEBUG';
+ dopass='$DOPASS';
+ dosumm='$DOSUM';
+ firsttime = 1;
+
+ PASS = 0
+ FAIL = 1
+ UNRESOLVED = 2
+ NOTINUSE = 3
+ UNSUPPORTED = 4
+ UNTESTED = 5
+ UNINITIATED = 6
+ NORESULT = 7
+
+
+}
+
+# The begining of a test case is recognised by the NAME keyword in a
+# trace line.
+/TRACE:NAME:/ {
+ if (firsttime == 0 && dosumm) {
+ print ""
+ line = "Summary of Results for " name
+ print line
+ print substr("------------------------------------------------------------------------------------------------", 1, length(line));
+ printf "%-12s %d\n", "PASS", result[PASS]
+ printf "%-12s %d\n", "FAIL", result[FAIL]
+ if (result[UNRESOLVED] != 0)
+ printf "%-12s %d\n", "UNRESOLVED", result[UNRESOLVED]
+ if (result[NOTINUSE] != 0)
+ printf "%-12s %d\n", "NOTINUSE", result[NOTINUSE]
+ if (result[UNSUPPORTED] != 0)
+ printf "%-12s %d\n", "UNSUPPORTED", result[UNSUPPORTED]
+ if (result[UNTESTED] != 0)
+ printf "%-12s %d\n", "UNTESTED", result[UNTESTED]
+ if (result[UNINITIATED] != 0)
+ printf "%-12s %d\n", "UNINITIATED", result[UNINITIATED]
+ if (result[NORESULT] != 0)
+ printf "%-12s %d\n", "NORESULT", result[NORESULT]
+ }
+ n = split($3, dat, " ");
+ name = dat[2];
+
+ if (firsttime == 0 && name != "")
+ printf "\n\n\n"
+ if (name != "")
+ printf "Tests for %s\n", name;
+ for (i = 0; i < 8; i++)
+ result[i] = 0;
+
+ # Reset all the information indexes.
+ #
+ infoind = 0;
+ failnum = 0;
+
+ firsttime = 0;
+ next;
+}
+
+# An IC start message.
+$1 == 400 {
+ n = split($2, dat, " ");
+ ic = dat[2];
+ nics = dat[3];
+}
+
+# A TP Start message
+$1 == 200 {
+ split($2, dat, " ");
+ tp = dat[2];
+ if (donefirst == 0 && infoind > 0) {
+ print "Non specific error messages:"
+ for (i = 0; i < infoind; i++)
+ printf " %s\n", infoline[i];
+ }
+ donefirst = 1;
+
+ infoind = 0;
+ failnum = 0;
+}
+
+# A infomation line
+$1 == 520 {
+
+ # Not that the message field may legally contain the field separator.
+ # So we have to extract the message from $0 with a substr expression.
+ if ($3 ~ /^REPORT:/) {
+ infoline[infoind++] = substr($0, length($1)+1+length($2)+1+8, 512);
+ failnum++;
+ }
+ if ($3 ~ /^TRACE:/ && dotrace) {
+ infoline[infoind++] = substr($0, length($1)+1+length($2)+1, 512);
+ }
+ if ($3 ~ /^TRACE:/ && dotrace == 0 && substr($3, 7, 3) == "---") {
+ infoline[infoind++] = substr($0, length($1)+1+length($2)+1+7, 512);
+ }
+ if ($3 ~ /^DEBUG:/ && dodebug) {
+ infoline[infoind++] = substr($0, length($1)+1+length($2)+1, 512);
+ }
+ if ($3 ~ /^CHECK:/) {
+ # Ignore this for the time being
+ }
+ if ($3 !~ /^[A-Z][A-Z][A-Z][A-Z]*:/) {
+ # This was probably entered by the TCM on a signal or other error.
+ infoline[infoind++] = "TCM:" substr($0, length($1)+1+length($2)+1, 512);
+ failnum++;
+ }
+}
+
+# A TP Result message
+$1 == 220 {
+
+ split($2, dat, " ");
+ res = dat[3];
+
+ # Quick consistancy check - ensure that if the
+ # result is pass then there are no infoline.
+ #
+ if (res == PASS && failnum != 0) {
+ printf "ERROR: Failure reason given for PASS result\n";
+ }
+
+ # Get the result code.
+ # NORESULT seems to appear as -1 for some reason ???
+ #
+ if (res == -1)
+ res = NORESULT;
+
+ #
+ # Increment the count of this class of result.
+ #
+ result[res]++;
+
+ if (res == PASS || res == UNTESTED || res == UNSUPPORTED || res == NOTINUSE) {
+ # The test did not fail.
+ nofailtype = 1;
+ } else {
+ nofailtype = 0;
+ }
+
+ if (dopass == 0 && nofailtype == 1)
+ next
+
+ printf "Test %3d: %s\n", tp, $3
+
+ if (infoind > 0 && res != NOTINUSE) {
+ numprint = infoind;
+ for (i = 0; i < infoind; i++) {
+ if (nofailtype && infoline[i] ~ /^--/) {
+ numprint--;
+ continue;
+ }
+ printf " %s\n", infoline[i];
+ }
+ if (numprint)
+ print ""
+ }
+ if (nofailtype == 0 && failnum == 0)
+ print " Warning: No reasons given for result"
+
+}
+
+# A TCM start line
+$1 == 15 {
+ donefirst = 0;
+}
+
+
+END {
+
+}
+
+'
diff --git a/xc/test/xsuite/xtest/doc/00.header b/xc/test/xsuite/xtest/doc/00.header
new file mode 100644
index 000000000..9166877b2
--- /dev/null
+++ b/xc/test/xsuite/xtest/doc/00.header
@@ -0,0 +1,89 @@
+.de TP
+.sp 1
+.tl \\*(}t
+.if e 'tl \\*(}e
+.if o 'tl \\*(}o
+.sp 1
+..
+.VM 0 3
+.de )k
+..
+.PH "''''"
+.PF "''''"
+.ds HP +2 +2 +2
+.ds rC "UniSoft Group Limited
+.ds xW "X\ Window System
+.ds xT "X\ Test Suite
+.ds cH "0"
+.nr Hs 4
+.S 18
+.B
+.DS 2
+Xlib and X Protocol test suite
+
+\*(dD
+\*(dN
+.DE
+.R
+.S 14
+.DS 2
+
+
+
+
+
+
+
+
+Prepared by
+
+UniSoft Group Limited
+
+
+May 1992
+.DE
+.SP 3
+.TS
+box center;
+c.
+
+Printed: May 15, 1992
+
+.TE
+.SP 2
+.S 10
+.TS
+expand;
+l l.
+UniSoft Group Limited, Tel: +44 71 729 3773
+Spa House, Fax: +44 71 729 3273
+Chapel Place,
+Rivington Street,
+LONDON EC2A 3DQ
+.TE
+Copyright \(co 1991, 1992 by the Massachusetts Institute of Technology and
+UniSoft Group Limited
+.P
+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 names of MIT and UniSoft not be
+used in advertising or publicity pertaining to distribution of the
+software without specific, written prior permission. MIT and UniSoft
+make no representations about the suitability of this software for any
+purpose. It is provided "as is" without express or implied warranty.
+.S 11
+.pn 1
+.PH "'\s14Xlib and X Protocol test suite''\*(dN'"
+.EH "'\*(dD '''"
+.OH "'\*(dD '''"
+.SK
+.PF "\s12'May 15, 1992''Page %'"
+.OF "\s12''\*(rC''"
+.EF "\s12''\*(rC''"
+.S 16
+.B
+\*(dD
+.R
+.S 12
diff --git a/xc/test/xsuite/xtest/doc/Copyright b/xc/test/xsuite/xtest/doc/Copyright
new file mode 100644
index 000000000..5a85c90f3
--- /dev/null
+++ b/xc/test/xsuite/xtest/doc/Copyright
@@ -0,0 +1,16 @@
+/*
+ * Copyright 1990, 1991, 1992 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * SCCS: %Z% %M% Rel %I% (%G%)
+ */
diff --git a/xc/test/xsuite/xtest/doc/Makefile b/xc/test/xsuite/xtest/doc/Makefile
new file mode 100644
index 000000000..e2989e2e1
--- /dev/null
+++ b/xc/test/xsuite/xtest/doc/Makefile
@@ -0,0 +1,67 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+# This Makefile can be used to print the documentation for the X test suite.
+# - "make print00" formats and prints the Release Notes
+# - "make print01" formats and prints the User Guide
+# - "make print02" formats and prints the Programmers Guide
+# - "make printall" formats and prints all three documents
+# You may need to alter the following variables first:
+
+# This command expands .so directives to include the specified files.
+SOELIM=soelim
+
+# This command converts tbl requests to nroff format.
+TBL=tbl
+
+# This command formats text using nroff/troff with the mm macros.
+TROFF=ditroff -mm -Tpsc
+
+# This command converts to PostScript format if needed (if not, it can
+# be altered to "cat").
+PSDIT=psdit
+
+# This command sends output to a printer.
+LPR=cpr -Bps
+
+all: printall
+
+printall: print00 print01 print02
+
+print00: rel_note.ps
+ cat rel_note.ps | $(LPR)
+
+rel_note.ps: rel_note.mm
+ $(SOELIM) rel_note.mm | $(TBL) | $(TROFF) | $(PSDIT) >rel_note.ps
+
+print01: user_guide.ps
+ cat user_guide.ps | $(LPR)
+
+user_guide.ps: user_guide.mm
+ $(SOELIM) user_guide.mm | $(TBL) | $(TROFF) | $(PSDIT) >user_guide.ps
+
+print02: prog_guide.ps
+ cat prog_guide.ps | $(LPR)
+
+prog_guide.ps: prog_guide.mm
+ $(SOELIM) prog_guide.mm | $(TBL) | $(TROFF) | $(PSDIT) >prog_guide.ps
+
+print03: paper.ps
+ cat paper.ps | $(LPR)
+
+paper.ps: paper.mm
+ $(SOELIM) paper.mm | $(TBL) | $(TROFF) | $(PSDIT) >paper.ps
diff --git a/xc/test/xsuite/xtest/doc/head.t b/xc/test/xsuite/xtest/doc/head.t
new file mode 100644
index 000000000..b3b598530
--- /dev/null
+++ b/xc/test/xsuite/xtest/doc/head.t
@@ -0,0 +1,108 @@
+.\" $XConsortium$
+'\" Simple table specification - to avoid the need to use tbl.
+.de tL \" table line
+.nf
+\\&\\$1\\h'|10n'\\$2\\h'|26n'\\$3\\h'|30n'\\$4\\h'|34n'\\$5\\h'|43n'\\$6\\h'|50n'\\$7\\h'|61n'\\$8
+.fi
+..
+.hy 0
+'\" Font for arguments
+.ds fA \f(CO
+'\" Font for structure member names
+.ds fM \fI
+'\" Font for symbols.
+.ds fS \fC
+'\" Font for function names
+.ds fF \fC
+'\"
+'\"
+'\" ### .TH - Header for a test set.
+.de TH
+.nr Ac 0 1 \" Set the assertion counter to zero.
+'\" Save the name
+.ds Na \\$1
+.ds Ch \\$2 \" Save the chapter name
+.if \\n(nl .bp 1
+.sp 2
+.ps +2
+Assertions for \\*(Na
+.ps
+.sp 2
+..
+'\" ### .TI - Start assertion.
+.de TI
+.ds Ty \\$1
+.if '\\*(Ty'' .ds Ty <class>
+.sp
+\fBAssertion \\*(Na-\\n+(Ac(\\*(Ty).\fR
+.br
+..
+'\" ### .A - Argument
+.de A
+\&\\*(fA\\$1\fR\\$2\\*(fA\\$3\fR\\$4\\*(fA\\$5\fR\\$6
+..
+'\" ### .M - Structure member name
+.de M
+\&\\*(fM\\$1\fR\\$2\\*(fM\\$3\fR\\$4\\*(fM\\$5\fR\\$6
+..
+'\" ### .S - Symbol name
+.de S
+\&\\*(fS\\$1\fR\\$2\\*(fS\\$3\fR\\$4\\*(fS\\$5\fR\\$6
+..
+'\" ### .F - Function name
+.de F
+.ie '\\$1'' \\*(fF\\*(Na\fR
+.el \&\\*(fF\\$1\fR\\$2\\*(fF\\$3\fR\\$4\\*(fF\\$5\fR\\$6
+..
+'\" ### .SM - Make argument smaller
+.de SM
+.ie \\n(.$-2 \&\\$1\s-1\\$2\s0\\$3
+.el \&\s-1\\$1\s0\\$2
+..
+'\" The following macros NS and NE are for internal review purposes.
+'\" ### .NS - Start a note from a comment in the source.
+.de NS
+.br
+.ft I
+.ps -1
+.in 1c
+..
+'\" ### .NE - End a note from a comment in the source.
+.de NE
+.ft P
+.ps
+.in
+.br
+..
+'\" ### .)h - header macro
+.de )h
+'ev 1
+'sp .5i
+'nr P +1
+.tl \\*({h
+'sp .5i
+.br
+'ev
+..
+'\" ### .)f - footer macro
+.de )f
+'ev 1
+'sp .5i
+.tl \\*({f
+.br
+'ev
+'bp
+..
+.if !\nS .nr S 12
+.ps \nS
+.ev 1
+.ps \nS
+.ev
+.if !\nO .nr O 7
+.po \nO
+.ll 6i
+.wh 0 )h
+.wh -1i )f
+.ds {h "'\\*(Na''\\*(Ch'"
+.ds {f "''%''"
+.nr P 0 1
diff --git a/xc/test/xsuite/xtest/doc/paper.ms b/xc/test/xsuite/xtest/doc/paper.ms
new file mode 100644
index 000000000..277e72706
--- /dev/null
+++ b/xc/test/xsuite/xtest/doc/paper.ms
@@ -0,0 +1,405 @@
+.\" $XConsortium$
+.TL
+An Approach to Testing X Window System Servers at a Protocol Level
+.AU
+Michael Lee Squires
+.AU
+Len Wyatt
+.AI
+Sequent Computer Systems, Inc.
+15450 SW Koll Parkway
+Beaverton, OR\ \ 97006
+(503) 626-5700
+.AB
+An approach to testing display servers for the X Window System
+is presented which depends only on an underlying communications
+mechanism.
+The server tester is intended to provide coverage
+for those server specifications
+which cannot be tested from the Xlib level.
+It also ensures that the basic facilities needed to
+run the Xlib tests are operational.
+All testing is performed by sending messages to the server and
+evaluating the responses from the server.
+.AE
+.NH 1
+INTRODUCTION
+.PP
+The purpose of this document is to present a set of requirements
+for a \fIserver tester\fP and to outline a
+software structure which will satisfy those requirements.
+This document is intended to guide not only the server tester
+developers, but
+other X Window System developers and testers also.
+.NH 2
+Background
+.PP
+There are a variety of interfaces, services, and protocols specified
+as part of the X Window System.
+These are implemented by a set of components which may be produced by
+different organizations,
+running on different hardware and using different operating systems.
+.PP
+In order to promote a standard,
+it is not sufficient to merely
+publish an interface specification.
+Examples of software which implement the standards
+and which illustrate the use of the services must be made available.
+Test procedures and test suites
+which verify that specific component implementations adhere to the
+specifications must be defined and made generally available.
+.PP
+The MIT X effort has addressed the interface specification,
+software implementation,
+and example use.
+It has not,
+thus far,
+addressed the issue of testing and
+specification compliance.
+.PP
+In the interests of promoting the X Window System as an industry standard,
+a number of organizations have formed a
+\fIconsortium\fP
+for the purpose of defining and generating an appropriate
+set of test tools and procedures for X.
+This document addresses a specific facet of X testing which has
+been identified by the consortium.
+.NH 1
+PROBLEM STATEMENT
+.NH 2
+Testing Goals
+.NH 3
+General
+.PP
+The goals for testing X implementations are to:
+.Ls
+.Li
+promote \fIportability\fP of applications and application
+libraries by ensuring a consistent set of interfaces
+across disparate computer systems and operating systems.
+That is,
+if we have an application program which compiles and
+runs on system A,
+we should be able to transfer the source to
+system B and,
+within the constraints of language and operating system portability,
+compile and run that program satisfactorily.
+Since most applications are currently written to
+the procedural interface provided in C by the Xlib
+library,
+this interface is the first target of the testing effort
+for portability.
+.Li
+promote \fIinteroperability\fP of clients and servers which
+may be running on disparate computer systems.
+That is,
+if we have a client which runs on system A and uses the
+display server available on system B,
+then that client should be able to operate successfully with
+a server running on system C
+(ignoring protocol extensions and client device dependencies).
+.Le
+.NH 3
+Server Tester Goals
+.PP
+The primary goal of the server tester is to address those
+areas of interoperability which cannot be adequately covered
+by tests at the Xlib level.
+A secondary goal is to facilitate the Xlib testing
+by ensuring that the basic server functions are operational.
+Another secondary goal is to provide a low-level diagnostic
+tool which would be useful to server developers.
+.NH 2
+Definitions
+.PP
+The following definitions form a basis for understanding the
+requirements of the server tester.
+.PP
+We define an \fBinterface\fP as an implementation
+dependent functional boundary between two adjacent components.
+Taking Xlib as an example,
+the function names, calling sequences, and data types
+necessary to interact with Xlib are its interface.
+.PP
+We define a \fBservice\fP as an implementation
+independent set of capabilities that a particular
+layer of software provides.
+Again using Xlib as an example,
+we could define an equivalent level library for another
+language which provided the same services via a different
+interface.
+.PP
+We define a \fBprotocol\fP as the specification of interaction
+between two peer processes.
+This specification consists of:
+.Ls
+.Li
+a message catalog
+.Li
+sequencing rules for message exchange
+.Li
+the specifications of the actions of the individual
+processes in response to the message sequencing
+.Le
+.PP
+When we examine the X Window System,
+we see that the X protocol specification encompasses
+three components:
+the client, the server,
+and the display hardware.
+Thus a complete test of a server's adherence to
+the protocol specification would include observing
+its effect on the display hardware as well as its
+ability to adhere to the rules for message sequencing.
+.PP
+We also notice that the "XLib Interface Specification"
+actually consists of both an interface and a service
+specification.
+Furthermore,
+the service specification depends on the adherence
+of a particular server to the protocol specification.
+.PP
+Because Xlib was designed to provide fairly direct
+access to the underlying X protocol,
+many of the messages defined in the protocol specification
+and their corresponding actions have a direct mapping
+at the Xlib level.
+This concept of a \fBmapping\fP between the
+Xlib specification and the protocol specification
+is a key element in determining the requirements for
+a server tester.
+.NH 1
+APPROACH
+.NH 2
+General
+.PP
+Because many of the actions specified in the protocol specification
+can be tested at the Xlib level,
+because the Xlib level will be more heavily used by the majority
+of X-based programmers,
+and because DEC is mounting a substantial effort to rigorously
+test the Xlib interfaces and services,
+we will defer the bulk of the testing of server actions to the
+Xlib testing effort.
+.PP
+We will design and implement a server tester which will concentrate
+on testing those features of the protocol which are not testable
+at the Xlib level or which are prerequisites to the Xlib level
+testing.
+Thus,
+we will test the ability of the server to accept all legal
+message types and respond appropriately.
+We will ensure that server capabilities
+which the Xlib testing will depend on
+work within some bounds
+(e.g ensure that the server can send a pixmap to the client
+upon request).
+We will test to ensure adherence to the canonical byte stream of
+the protocol,
+independent of the host byte sex or compiler structure packing.
+.NH 2
+Determining Specific Requirements
+.PP
+We have developed a decision tree which allows us to determine
+which server actions should be addressed by the server tester.
+.PP
+The first decision in the tree is "is the mapping of this action
+(and the stimulus to cause it) to the Xlib level direct enough
+to allow it to be tested at the Xlib level?"
+An example of an action which can be tested at the Xlib level
+is drawing a line within a window.
+Initializing the server connection with an incorrect protocol
+version number is an example of a test which cannot be performed
+at the Xlib level.
+.PP
+If the mapping is direct enough to allow testing at the Xlib level,
+then we need to ask "is this capability fundamental enough
+that the Xlib tests cannot be reasonably performed if
+the capability is deficient?"
+An example of a fundamental capability is the server's ability
+to send error responses.
+.PP
+If the mapping is not direct enough to allow the testing at
+the Xlib level,
+then we ask "can the action be inferred from other data available
+at the Xlib level?"
+An example of something which could be inferred is the initialization
+of the default color map.
+By reading the color map immediately following opening the display,
+an Xlib level test can determine if the color map was properly initialized.
+.TS
+expand,box;
+c s c s c
+l l l l l.
+Decision #1 Decision #2 Result
+_
+T{
+Is the mapping direct enough to test at the Xlib level?
+T} NO T{
+Can the action be inferred?
+T} NO TEST
+\^ \^ \^ YES DON'T TEST
+\^
+\^ YES T{
+Is the action fundamental?
+T} NO DON'T TEST
+\^ \^ \^ YES TEST
+.TE
+.PP
+We will apply this set of decisions to the protocol specification
+to generate specific tests to perform in the server tester.
+Generating this list is a specific deliverable on the development
+schedule (see section 6).
+.NH 1
+SPECIFICATIONS
+.NH 2
+General Requirements
+.PP
+The server tester must satisfy the following requirements:
+.Ls
+.Li
+It will not use X as a basis for its user interaction.
+(This provides a new server developer the ability to run
+the tester using standard character terminals.)
+.Li
+It will verify that the server can accept all legal message types.
+.Li
+It will verify that the server will reject invalid message types.
+.Li
+It will perform all tests which are derived from applying
+the decision criteria in section 3.2 to the protocol specification.
+The complete list of tests is presented in section 4.2.
+.Li
+It will be portable to different computer systems
+and operating systems.
+(That is, any machine/operating system dependencies will be isolated.
+We are not committing to port it to any/all systems.)
+.Li
+It will adapt the tests to different display hardware.
+(That is, a mechanism for modifying test parameters based on
+display characteristics will be provided.)
+.Li
+It will provide the capability to continue a test suite after
+errors are encountered in a particular test.
+.Li
+It will provide the capability to test a server's ability
+to deal with clients running on different byte sex hosts.
+(That is, the tester will be capable of 'masquerading'
+as a host with a different byte sex than it really has.
+This allows an organization to more completely test
+a server with a single host system.)
+.Le
+Additionally,
+we will provide user documentation and
+internal documentation for the server tester.
+.NH 2
+Specific Tests
+.PP
+This subsection is currently \fBTBD\fP.
+The detailed list of tests is the first deliverable discussed
+in section 6.
+.NH 1
+SOFTWARE STRUCTURE
+.PP
+The basic approach to developing the server tester and the test cases
+which use it is to provide a layered set of C routines which constitute
+the bulk of the test mechanism.
+Individual test cases will be implemented as C programs which make
+use of this layered set.
+We will explore development of some sort of front-end tool
+(e.g. preprocessor, interpreter) which will facilitate test case
+generation,
+but given the resource and schedule constraints we are unwilling to
+commit to that at this time.
+.PP
+We will structure the test cases as a series of C programs,
+each one designed to test a specific capability or set of capabilities.
+This allows incremental development of the test cases,
+selective use of individual tests during development or
+diagnoses, and
+ease of test suite configuration via use of command scripts.
+.PP
+The software will consist of 5 software layers:
+.Ls
+.Li
+Communication Manipulation -
+lowest level - contains the
+machine and operating dependent software -
+responsible for byte swapping, buffering,
+and ensuring the canonical byte stream.
+.Li
+Message Handling
+low level utilities
+(which look \fIvery\fP similar to the various internal
+utilities within the
+current Xlib implementation) -
+expose more of their internal data structures than Xlib does to provide
+test case writers the capability to "damage" messages
+.Li
+Message Generation -
+essentially a subset of the current Xlib with many parameters omitted in
+favor of their defaults -
+(i.e. Generate_Standard_Create_Window_Request would be a candidate routine)
+.Li
+Adaptation -
+all routines necessary to adapt the tests to specific display parameters -
+(e.g. Generate_Safe_Rectangle_Set)
+.Li
+specific test cases
+.Le
+.PP
+Note that this software really consists of two major components -
+the "tools" (levels 1-4) and the test cases themselves.
+This division is used to generate the milestones in section 6.
+.DS L
+.ft 5
++--------------------------------------+
+| TEST CASE |
++--------------------------------------+
+ | | | |
+ | | | |
+ v | | |
++------------+ | | |
+| ADAPTATION | | | |
++------------+ | | |
+ | | |
+ | | |
+ v | |
++----------------------+ | |
+| MESSAGE GENERATION | | |
++----------------------+ | |
+ | |
+ | |
+ v |
++-------------------------+ |
+| MESSAGE HANDLING | |
++-------------------------+ |
+ |
+ |
+ v
++--------------------------------------+
+| COMMUNICATION MANIPULATION |
++--------------------------------------+
+.ft 1
+.DE
+.NH 1
+DEVELOPMENT SCHEDULE
+.DS
+.TS
+box;
+l l.
+Deliverable Date
+_
+T{
+Complete list of server tests
+T} 7/17/87
+
+T{
+Tools + initial set of test cases
+T} 10/9/87
+
+T{
+Remainder of test cases
+T} 12/18/87
+.TE
+.DE
diff --git a/xc/test/xsuite/xtest/doc/progguide.mm b/xc/test/xsuite/xtest/doc/progguide.mm
new file mode 100644
index 000000000..eb3d265fb
--- /dev/null
+++ b/xc/test/xsuite/xtest/doc/progguide.mm
@@ -0,0 +1,4012 @@
+.\" $XConsortium$
+'
+.ds dN "\s-1MIT\s0-3-02.3
+'
+.ds dD Programmers Guide for the X test suite (release 1.1)
+.so 00.header
+.ds xT X\ test suite
+.ds xW X\ Window System
+.ds xP X\ Protocol tests
+.ds xL Xlib tests
+'\"
+'\" Start and end of a user-typed display
+'\"
+.de eS
+.in +2
+.nf
+.ft C
+.ps -2
+..
+.de eE
+.ps +2
+.ft R
+.fi
+.in -2
+..
+.de cS
+.DS I
+.ft C
+.ps -2
+..
+.de cE
+.ps +2
+.ft R
+.DE
+..
+'\" # Courier
+.de C
+\fC\\$1\fP\\$2\fC\\$3\fP\\$4\fC\\$5\fP\\$6
+..
+'\" ###
+.H 1 "Introduction"
+This document is a Programmers Guide to the revised
+\*(xT produced during stage two of the
+test suite development project.
+.P
+Instructions for installing and running the
+revised \*(xT are contained in the document
+"User Guide for the \*(xT (release 1.1)".
+It is not
+necessary to read the Programmers Guide in order to install and run the test
+suite.
+.H 1 "Purpose of this guide"
+The information in this section is designed to be used by a programmer
+intending to review the source code in the
+revised \*(xT. It is also intended to be used by an experienced
+programmer, familiar
+with the \*(xW, to modify or extend the \*(xT to add additional tests.
+.P
+Before reading this document, it is necessary to read
+the document "User Guide for the \*(xT (release 1.1)".
+This is because the nomenclature used in this
+document is explained in the "User Guide". Appendix F of that document is
+a glossary, which explains the meaning of
+some terms which may not be in common usage.
+.P
+The directory structure used within the \*(xT is described further in
+"Appendix A - Contents of release 1.1" in
+the "User Guide". You should be familiar with that
+appendix before reading further.
+.H 1 "Contents of this guide"
+The test set source files in the
+revised \*(xT have been developed in the format of a
+simple language, specially produced as part of the
+test suite development project.
+Files in the test suite which use this
+language have the suffix ".m" and are known as dot-m files.
+.P
+The syntax of this language is described in the next section of this
+document entitled "Source file syntax".
+.P
+During the stage one review of the development project, it was determined
+that there were some advantages in methods of automatically generating
+source code for the tests from templates. The dot-m file may be seen as
+a template for the tests. At the same time, it was important that
+any utilities associated with the code generation should be commonly
+available or provided within the test suite.
+.P
+For this reason, a utility
+.C mc
+has been provided to convert dot-m files
+into C source code and produce Makefiles automatically
+for the test set.
+The file formats which may be produced
+are described in the section entitled
+"Source file formats".
+Summaries of usage of the utilies are given in appendices D-F.
+.P
+As part of the test suite development, a number of conventions were
+established to define how the syntax of this language should be used in
+writing test sets.
+It is useful to understand these conventions in order to understand
+the structure of the existing tests.
+You are recommended to use the existing tests as a model,
+and follow the same structure when modifying or extending the \*(xT.
+This is described in the section entitled
+"Source file structure".
+.P
+The test set structure has deliberately
+been kept as simple as possible, and common
+functions have been developed in libraries. The contents of these
+libraries is described in the section entitled "Source file libraries".
+.H 2 "Typographical conventions used in this document"
+The following conventions have been used in this document:
+.AL
+.LI
+Items appearing in angle brackets <> should be substituted with a suitable
+value.
+.LI
+Items appearing in square brackets [] are optional.
+.LE
+.SK
+.H 1 "Source file syntax"
+It is a design requirement that
+the test code for each test purpose has an associated description of what
+is being tested
+(an
+.I assertion )
+and a description of the procedure used to test it
+(a
+.I "test strategy" ).
+All of these items are contained in dot-m files,
+and programs are used to extract the relevant parts.
+The utilies developed for the purpose are
+outlined in appendices D-F, and the format of the files they output
+is described in the section entitled
+"Source file formats.
+.P
+The format of a dot-m file consists of a number of sections
+introduced by keywords. The sections of a dot-m file are as follows:
+.AL
+.LI
+A copyright notice.
+.LI
+A section introduced by the >>TITLE keyword. This section
+defines the name of the function being tested and its arguments.
+.P
+The >>TITLE keyword, and the declaration and arguments
+which follows it, are together known as the "title section".
+.LI
+Optionally, there may be a section introduced by the >>MAKE keyword.
+This section defines additional rules for
+.C make
+beyond the default rules.
+.P
+The >>MAKE keyword, and the text which follows it, are together
+known as a "make section".
+.LI
+Optionally, there may be a section introduced by the >>CFILES keyword.
+This section defines additional C source files
+source files that should be compiled and linked
+(together with the
+C source files produced by
+.C mc )
+when building a test set.
+.LI
+Optionally, there may be a section introduced by the >>EXTERN keyword.
+This section defines C source code which will be in scope for
+all test purposes in the test set.
+.P
+The >>EXTERN keyword, and the source code which follows it, are together
+known as an "extern section".
+.LI
+For each test purpose in the test set, there will be
+a section introduced by an >>ASSERTION keyword. These sections
+each contain the text of an assertion for the function being tested.
+.P
+The >>ASSERTION keyword, and the text which follows it, are together
+known as an "assertion section".
+.LI
+An assertion section is normally followed by a section introduced
+by a >>STRATEGY keyword, which is followed by the strategy. This is
+a description of how the assertion is tested.
+.P
+The >>STRATEGY keyword, and the strategy which follows it, are together
+known as a "strategy section".
+.LI
+The strategy is always followed by a section introduced
+by a >>CODE keyword, which is followed by a section of C source
+code which will test
+whether the assertion is true or false on the system being tested.
+.P
+The >>CODE keyword, and the C source code which follows it, are together
+known as a "code section".
+.LI
+Optionally, the >>INCLUDE keyword includes, from a file, one or more
+of the above sections, at that point in the dot-m file.
+It terminates the previous section.
+.LE
+.P
+The keywords introducing the sections are defined in detail below.
+.P
+There are also optional keywords which may appear anywhere in a dot-m file:
+.P
+.AL
+.LI
+The >>SET keyword sets options which apply in the dot-m file.
+.LI
+The >># keyword introduces a comment in a dot-m file.
+.LE
+.P
+The optional keywords are also defined in detail below.
+.P
+.H 2 "Title section - >>TITLE"
+.H 3 "Description"
+.cS
+\&>>TITLE <function> <section>
+.cE
+.P
+This keyword must be used at the start of a test purpose immediately after
+the copyright message.
+.P
+It may be followed by the declaration of the data type returned and
+the function arguments.
+These lines may be omitted if XCALL is never used in any code section
+in the test set.
+.P
+.AL
+.LI
+The line after >>TITLE should specify the data type returned.
+.LI
+The next line should specify the function call with any arguments.
+This is no longer mandatory, since the information is not used in the current
+version of
+.C mc .
+So the second line may be left completely blank.
+.LI
+The following lines should specify the arguments and may set them
+to any expression (not necessarily a constant expression).
+Usually arguments are set to the return value of a function call,
+a global variable inserted by the
+.C mc
+utility,
+or a global variable declared in an >>EXTERN section.
+.P
+Static variables will be created to match these arguments, and
+will be reset as specified automatically before the start
+of each test purpose, by the function
+.C setargs()
+(described in the section entitled
+"Source file formats").
+.LE
+.H 3 "Arguments"
+.VL 12 2
+.LI function
+This is the name of the function in the \*(xW to be tested.
+In the \*(xP
+it should be the name of an X\ Protocol request or
+an X\ event.
+In the \*(xL
+it should be the name of an Xlib function or
+an X\ event.
+.P
+The XCALL macro will invoke the named function or macro (which should be in
+Xlib) with the arguments specified on the lines following >>TITLE.
+.LI section
+This is the section of the \*(xT in which this particular test set is stored.
+It should be the name of a directory in
+.C $TET_ROOT/tset .
+The section name is used in formatting the assertions in the test set,
+and for output to the journal file for reporting purposes.
+The section name does not affect the building and execution of the tests.
+.LE
+.H 2 "Make section - >>MAKE"
+.H 3 "Description"
+.cS
+\&>>MAKE
+.cE
+.P
+This keyword may be used anywhere in the dot-m file after the end of
+a section.
+.P
+It should be followed by lines which will be copied into the Makefile
+by the
+.C mc
+utility, when the Makefile is remade using the
+.C -m
+option.
+.P
+The lines specified will be joined together and placed in order
+before the first
+rule in the Makefile. In this way, the lines copied may contain both
+initialisation of Make variables, and additional rules.
+.P
+This keyword should be used sparingly, since the additional Makefile lines
+must be consistent with the rest of the
+Makefile (see later section entitled "Makefile").
+.P
+These lines are designed to allow auxiliary programs to be made by
+.C make
+(in addition to the default target which is
+.C Test ).
+For example, if test purposes in the test set
+execute programs
+.C Test1
+and
+.C Test2 ,
+which must also be built,
+the >>MAKE keyword can be
+followed by lines which specify rules for building
+these executable programs. This can be done as follows:
+.P
+.cS
+>>MAKE
+AUXFILES=Test1 Test2
+AUXCLEAN=Test1.o Test1 Test2.o Test2
+
+all: Test
+
+Test1 : Test1.o $(LIBS) $(TCMCHILD)
+ $(CC) $(LDFLAGS) -o $@ Test1.o $(TCMCHILD) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+Test2 : Test2.o $(LIBS) $(TCMCHILD)
+ $(CC) $(LDFLAGS) -o $@ Test2.o $(TCMCHILD) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+.cE
+Notice that the default target
+.C Test
+is still made by the new default Make rule.
+Also, notice that \fCTest1\fP and \fCTest2\fP are not dependencies for the
+\fCall\fP target. They are dependencies for \fCTest\fP.
+(See the later section entitled "Makefile".)
+.H 2 "Additional source files - >>CFILES"
+.H 3 "Description"
+.cS
+\&>>CFILES <filename> ...
+.cE
+This keyword may be used anywhere in the dot-m file after the end
+of a section.
+.P
+The list of files following the keyword are taken as the names of C
+source files that should be compiled and linked (together with the
+C source files produced by
+.C mc )
+when building a test set.
+This allows code to be split among several files.
+.P
+The only effect is to alter the Makefile that is produced by
+.C mmkf .
+.H 2 "Extern section - >>EXTERN"
+.H 3 "Description"
+.cS
+\&>>EXTERN
+.cE
+.P
+This keyword may be used anywhere in the dot-m file after the end of
+a section.
+.P
+It should be followed by lines of C source code which will be copied
+into the C source file
+by the
+.C mc
+utility, when the C source code is remade.
+.P
+These lines will be copied unaltered into the C source file
+before the source code for the first test purpose.
+.P
+This section is useful for including three types of source code:
+.AL
+.LI
+static variables declarations which are used by a number of
+test purposes in the test set.
+.LI
+static functions which are used by a number of
+test purposes in the test set.
+.LI
+header file inclusions which are needed in addition to the default header file
+inclusions in the C source code.
+.LE
+.H 2 "Assertion section - >>ASSERTION"
+.H 3 "Description"
+.cS
+\&>>ASSERTION <test-type> [ <category> [<reason>] ]
+.cE
+.P
+This keyword is used at the start of each test purpose.
+.P
+It should be followed by the text of the assertion
+which is a description of what is tested by this particular test purpose.
+.P
+The text should not contain troff font change commands (or any other
+nroff/troff commands). This is because the majority of nroff/troff
+commands will not be understood by the
+.C ma
+utility.
+However, various macros can be
+used to enable mapping of the format of special text
+onto similar fonts to those used in the \*(xW documentation.
+These are described in appendix B.
+.P
+The keyword xname in the assertion text will be replaced by
+.C mc
+with the name of the function
+under test obtained from the >>TITLE keyword.
+.P
+Unless the
+.C category
+argument specifies an extended assertion, or the
+.C test-type
+is
+.C gc
+or
+.C def ,
+the assertion text must be followed by the >>STRATEGY keyword, strategy
+section, >>CODE keyword and code section.
+Refer to the description of the
+.C category
+argument.
+.P
+If the >>CODE keyword is missing, following the text of an assertion
+which is not an extended assertion, the
+.C mc
+utility will insert code to produce a result code UNREPORTED for this
+test purpose when the test set is executed.
+.H 3 "Arguments"
+.VL 12 2
+.LI test-type
+.VL 6 2
+.LI Good
+.P
+This is a "good" test.
+The function under test is expected to give a successful result.
+.P
+By convention these assertions appear in the dot-m file
+before all assertions with test-type Bad.
+.LI Bad
+.P
+This is a "bad" test.
+The function under test is expected to give an unsuccessful result
+under the conditions that the test imposes.
+.P
+By convention these assertions appear in the dot-m file
+after all assertions with test-type Good.
+.P
+The assertion text for many of these assertions is included via the
+.ER keyword, described below.
+.LI gc
+.P
+The assertion text states which gc components affect the function under test.
+In this case the remaining arguments are unused, and
+.C mc
+inserts into the C source file a series of assertions, strategies and
+test code corresponding to the gc components listed in the assertion text
+via the macro
+.cS
+\&.M gc-comp ,
+.cE
+or
+.cS
+\&.M gc-comp .
+.cE
+.P
+The assertions, strategies and test
+code are included, from files in the directory
+\fC$TET_ROOT/xtest/lib/gc\fP.
+.P
+The \.M macro is used, since the gc components correspond to structure members
+in a gc structure.
+.LI def
+.P
+The assertion text is tested in the test for another assertion.
+These assertions are often definitions of terms, which cannot be tested in
+isolation, hence the abbreviation "def".
+The remaining arguments are unused, and
+.C mc
+inserts code into the C file to issue the result code NOTINUSE, and
+issues a message stating that the assertion is tested elsewhere.
+.LE
+.ne 5
+.LI category
+.P
+.P
+This is the assertion category, modelled on the corresponding
+codes in the document\*F
+.FS
+Obtainable from Publication Sales, IEEE\ Service\ Center, P.O.\ Box\ 1331,
+445\ Hoes\ Lane, Piscataway, NJ\ 08854-1331, (201)\ 981-0060
+.FE
+POSIX.3 entitled "Test Methods for Measuring Conformance to POSIX".
+It is either A, B, C or D.
+.P
+If the assertion tests a conditional feature, it is categorised as type
+C or D, otherwise it is categorised as type A or B.
+.P
+If the assertion is classified as an "extended assertion"
+it is categorised as type
+B or D.
+Otherwise it is categorised
+as type A or C and is known as a "base assertion".
+.TS
+center box;
+c | c | c.
+ Base Assertion Extended Assertion
+_
+Required Feature A B
+_
+Conditional Feature C D
+.TE
+.P
+Tests are always required for base assertions. Tests are not required
+for extended assertions, but should be provided if possible.
+Extended assertions are used to describe features that may be difficult
+to test.
+.P
+In some
+cases partial testing may be performed for extended assertions.
+An example is that it may be possible to test that some specific common
+faults are not present.
+In this the result code would be FAIL if an error is detected, or
+UNTESTED if no failure is detected, but the assertion is still
+not fully tested.
+.P
+For this reason, the strategy and code sections are optional for
+extended assertions.
+If they are not supplied,
+.C mc
+will automatically generate source code to
+put out a result code UNTESTED, with a message which describes
+the reason.
+If they are supplied, they will override the automatically generated sections.
+.P
+Since there is not yet an equivalent document to POSIX.3 for
+the \*(xW then these codes are subject to change. For example, an
+assertion classified as an "extended assertion" (type B) might
+become a "base assertion" (type A) if a test method is later identified.
+.P
+The following table lists the allowed test result codes for each category.
+.P
+.TS
+center box;
+c | l.
+Category Allowed Result Codes
+_
+A PASS, FAIL, UNRESOLVED
+B PASS, FAIL, UNTESTED, UNRESOLVED
+C PASS, FAIL, UNSUPPORTED, UNRESOLVED
+D PASS, FAIL, UNSUPPORTED, UNTESTED, UNRESOLVED
+.TE
+.LI reason
+.P
+In the case of extended assertions (category B or D)
+a reason code must be supplied. These are the same as in POSIX.3.
+A list of the reason codes, and the corresponding text of the reason, are
+shown in appendix A.
+.LE
+.H 2 "Strategy section - >>STRATEGY"
+.H 3 "Description"
+.cS
+\&>>STRATEGY
+.cE
+.P
+If the category of an assertion is A or C,
+this keyword must be used immediately after the assertion section.
+.P
+If the category of an assertion is B or D,
+this keyword may be optionally be used immediately after the assertion section.
+.P
+It should be followed by the strategy, which is a description of how the
+assertion is to be tested.
+.P
+The text of the strategy is in free format sentences.
+It may contain the xname keyword, which is an abbreviation for the name
+of the function under test.
+.P
+The use of the XCALL keyword in the strategy section as an abbreviation
+for "Call xname" is discontinued,
+although in this release, some occurrences remain.
+.H 2 "Code section - >>CODE"
+.H 3 "Description"
+.cS
+\&>>CODE [<BadThing>]
+.cE
+.P
+This keyword must be used immediately after the strategy section.
+.P
+It should be followed by the C source code which will test the assertion.
+.P
+The C source code will be converted by
+.C mc
+into a format suitable for the use by the
+.SM "TET API" .
+The way in which this is done is described
+in the section entitled
+"Source file formats".
+.P
+A blank line must separate the declarations of automatic variables
+in the test function
+from the first executable statement. There must be no other blank lines
+within these declarations.
+.P
+The utility
+.C mc
+also expands the XCALL macro to call the function under test, and
+to call library functions, before and after the function under test,
+to install and deinstall error handlers and flush pending requests to the
+X server. The way in which this is done is described
+in the section entitled
+"Source file formats".
+.H 3 "Arguments"
+.VL 12 2
+.LI BadThing
+.P
+This is an optional argument to the >>CODE macro.
+.P
+If it is omitted,
+the XCALL macro will cause code to be
+inserted to ensure that the function
+under test produces no X\ Protocol error, and issues a result code FAIL if an
+error is detected.
+.P
+If it is set to the symbolic value of an \*(xW
+error code, the XCALL macro will cause code to be
+inserted to ensure that the
+function under test produces that X\ Protocol error,
+and issues a result code FAIL
+if the wrong error, or no error, is detected.
+.LE
+.H 2 "Included section - >>INCLUDE"
+.H 3 "Description"
+.cS
+\&>>INCLUDE <filename>
+.cE
+This keyword includes the contents of
+.C filename ,
+which must be a file containing
+one or more sections in the dot-m file format, optionally containing a
+copyright header.
+The sections in the included file should
+produce a valid dot-m file, if they were included directly at the point
+of inclusion. The >>INCLUDE keyword terminates the preceding section -
+it cannot be used in the middle of a section.
+.P
+The included sections are processed at the point of inclusion when
+the C source code is generated by the
+.C mc
+utility.
+.P
+The >>INCLUDE keyword is usually used when including test purposes
+which are common to more than one test set.
+The >>INCLUDE mechanism allows an entire test purpose (including
+assertion, strategy and code sections) to be included.
+.P
+The >>INCLUDE keyword should not be used for merely including
+common functions called by a number of test purposes.
+If the functions are common to
+one dot-m file, they should be placed in an extern section. If the functions
+are common to many test sets, they should be placed in one of the
+\*(xT libraries.
+.SK
+.H 2 "Included errors - .ER"
+.H 3 "Description"
+.cS
+\&.ER [Bad]Access grab
+\&.ER [Bad]Access colormap-free
+\&.ER [Bad]Access colormap-store
+\&.ER [Bad]Access acl
+\&.ER [Bad]Access select
+\&.ER [Bad]Alloc
+\&.ER [Bad]Atom [val1] [val2] ... \(dg
+\&.ER [Bad]Color
+\&.ER [Bad]Cursor [val1] [val2] ... \(dg
+\&.ER [Bad]Drawable [val1] [val2] ... \(dg
+\&.ER [Bad]Font bad-font
+\&.ER [Bad]Font bad-fontable
+\&.ER [Bad]GC
+\&.ER [Bad]Match inputonly
+\&.ER [Bad]Match gc-drawable-depth
+\&.ER [Bad]Match gc-drawable-screen
+\&.ER [Bad]Match wininputonly
+\&.ER [Bad]Name font
+\&.ER [Bad]Name colour
+\&.ER [Bad]Pixmap [val1] [val2] ... \(dg
+\&.ER [Bad]Value <arg> [mask] <val1> [val2] ... \(dd
+\&.ER [Bad]Window [val1] [val2] ... \(dg
+.cE
+.S -1
+\(dg - these arguments are optional.
+.P
+\(dd - the <arg> and at least <val1> argument must be supplied. The
+mask argument, and additional arguments, are optional.
+.P
+Note - the \fCBad\fP prefix is in each case optional.
+.S
+.P
+This keyword
+causes
+.C mc
+to insert into the C source file the text of an assertion,
+and in some cases default strategy and
+default
+test code to test for the generation of a particular X\ Protocol error by
+an Xlib function.
+.P
+In some cases there is no strategy and code in the included file,
+because only the assertion is common - the strategy and code
+sections are specific to each test purpose, and must be provided immediately
+after the .ER keyword.
+.P
+The default strategy and code sections (if included) may be overridden by
+sections in the dot-m file immediately after the .ER keyword.
+.P
+Note that this keyword does not insert the >>ASSERTION keyword - this must
+appear on the line before .ER is invoked. Thus the keyword does not
+include the entire assertion section.
+.P
+The assertion text, strategy and test
+code are included from files in the directory
+\fC$TET_ROOT/xtest/lib/error\fP.
+.P
+The names of these files, and the
+assertion text in each file, is shown in appendix C.
+.H 2 "Set options - >>SET"
+.H 3 "Description"
+.cS
+\&>>SET startup <func_startup>
+\&>>SET cleanup <func_cleanup>
+\&>>SET tpstartup <func_tpstartup>
+\&>>SET tpcleanup <func_tpcleanup>
+\&>>SET need-gc-flush
+\&>>SET fail-return
+\&>>SET fail-no-return
+\&>>SET return-value <return_value>
+\&>>SET no-error-status-check
+\&>>SET macro [ <macroname> ]
+\&>>SET begin-function
+\&>>SET end-function
+.cE
+.P
+These options control how the
+.C mc
+utility converts the dot-m file into a C source file.
+.P
+Except where specifically stated,
+they may appear anywhere in the dot-m file and apply from that point on, unless
+reset by a further >>SET keyword with the same first argument.
+.P
+.H 3 "Arguments"
+.VL 12 2
+.LI startup
+.br
+The name of the function called before all test
+purposes is to be set to func_startup (rather than the default, startup()).
+.LI cleanup
+.br
+The name of the function called after all test
+purposes is to be set to func_cleanup (rather than the default, cleanup()).
+.LI tpstartup
+.br
+The name of the function called before each test
+purpose is to be set to func_tpstartup (rather than the default, tpstartup()).
+.LI tpcleanup
+.br
+The name of the function called after each test
+purpose is to be set to func_tpcleanup (rather than the default, tpcleanup()).
+.LI need-gc-flush
+.br
+When the XCALL macro is expanded, code to call the \*(xT library
+function gcflush(display, gc) will be inserted
+after the code to call the function under test.
+.LI fail-return
+.br
+When the XCALL macro is expanded, code to end the test purpose
+will be inserted where an error is reported
+(the default is to continue after an error is reported).
+.LI fail-no-return
+.br
+When the XCALL macro is expanded, no code to end the test purpose
+will be inserted where an error is reported (this reverses the effect earlier
+using >>SET fail-return).
+.LI return-value
+.br
+When the XCALL macro is expanded, and the Xlib function call has return type
+.C Status ,
+and the return value of XCALL is not saved for testing in the calling code,
+code will be inserted to report an error if the function under test does not
+return <return_value>.
+(By default,
+when the Xlib function call has return type
+.C Status ,
+an error is reported for assertions with test-type
+Good if the return value is zero, and for assertions with test-type Bad if
+the return value is non-zero).
+.LI no-error-status-check
+.br
+When the XCALL macro is expanded, the default code to check for X Protocol
+errors will not be inserted. The test purpose can perform alternative checking
+after invoking XCALL.
+This setting only applies up to the end of the current section.
+.LI macro
+.br
+There is a macro in an \*(xW header file for which a
+test set source file will be produced which uses identical test purposes
+to the function under test. This is used to automatically
+generate test purposes for
+the Display and Screen information macros, which are identical to those
+for the corresponding Xlib functions.
+.P
+The macro name is set to
+.C <macroname>
+- the default is the
+.C function
+argument in the >>TITLE keyword,
+with the leading letter `X' removed.
+.P
+This option must be specified
+.B before
+the title section of the dot-m file.
+.P
+Note - this option may not be used for macros which have no arguments.
+.LI begin-function
+.br
+The name of an additional function called before each test
+purpose, after tpstartup() and global function arguments are initialised.
+.LI end-function
+.br
+The name of an additional function called after each test
+purpose, before tpcleanup().
+.LE
+.H 2 "Comment lines - >>#"
+.H 3 "Description"
+.cS
+\&>># <Comment text>
+.cE
+This keyword specifies a one line comment. These are not intended to replace
+code comments in the code section - in fact the
+.C mc
+utility does not copy dot-m format comments to the C source file.
+Comments in the dot-m file are used for higher level comments rather
+than detailed comments. For example, comments are used to record the
+history of the development of the dot-m file, to preserve previous versions
+of assertions where necessary,
+and to draw attention to unresolved problem areas.
+.SK
+.H 1 "Source file formats"
+This section describes the output from
+various utilities which may be used to format
+the contents of a dot-m file.
+.P
+The code-maker utility
+.C mc
+builds C source files from a dot-m file.
+Appendix D gives a usage summary.
+.P
+The Makefile utility
+.C mmkf
+builds Makefiles from a dot-m file.
+Appendix E gives a usage summary.
+.P
+The assertion utility
+.C ma
+produces a list of assertions from a dot-m file.
+Appendix F gives a usage summary.
+.P
+Instructions for building and installing the
+.C mc
+utility are given in the "User Guide". When the utility
+.C mc
+is built and installed, the utilities
+.C mmkf
+and
+.C ma ,
+which are links to the same program
+.C mc
+differing only in name, are automatically installed as well.
+.H 2 "C files for standalone executable - \fCTest.c\fP"
+The command
+.cS
+mc -o Test.c stclpmsk.m
+.cE
+produces a C file named
+.C Test.c .
+This may be compiled to produce a standalone executable file named
+.C Test .
+Instructions on building and executing the tests are given in the "User Guide".
+The
+.C Test.c
+files are not provided as part of this release, but are built
+automatically when building the \*(xT.
+.P
+The C file contains all of the interface code required
+to invoke the test purposes from the
+.SM TET
+and a description of the assertion being tested is placed as a comment
+above the code for each test
+purpose to make it easy to understand what is being tested.
+.P
+The remaining parts of this section describe the format of the
+.C Test.c
+files in more detail. The descriptions are in the order in which the text
+is inserted into the
+.C Test.c
+file.
+.P
+Some parts of the
+.C Test.c
+file are constructed by copying in template files specifically written
+to work with
+.C mc .
+These files are all located in the directory
+\fC$TET_ROOT/xtest/lib/mc\fP.
+.H 3 "Copyright header"
+A copyright header is inserted as a C source comment block. This will
+contain lines showing the SCCS versions of the dot-m file and any
+included files.
+.H 3 "SYNOPSIS section"
+A synopsis defining the arguments of the function being tested is inserted
+as a C source comment block.
+This is constructed from the lines following the >>TITLE keyword in the
+dot-m file.
+It includes the data type returned and any arguments
+to the function.
+.P
+The synopsis section is omitted if there are no lines
+following the the >>TITLE keyword.
+.P
+For example:
+.cS
+/*
+ * SYNOPSIS:
+ * void
+ * XSetClipMask(display, gc, pixmap)
+ * Display *display;
+ * GC gc;
+ * Pixmap pixmap;
+ */
+.cE
+.H 3 "Include files"
+For the \*(xL, when the
+.C section
+argument to the >>TITLE keyword is
+other than
+.C XPROTO ,
+the contents of the file
+.C mcinclude.mc
+are then included.
+.P
+In this release the contents of this file are
+as follows:
+.cS
+#include <stdlib.h>
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "Xresource.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+.cE
+.P
+For the \*(xP, when the
+.C section
+argument to the >>TITLE keyword is
+.C XPROTO
+the contents of the file
+.C mcxpinc.mc
+are then included.
+.P
+In this release the contents of this file are
+as follows:
+.cS
+#include <stdlib.h>
+#include "xtest.h"
+#include "tet_api.h"
+.cE
+.H 3 "External variables"
+For the \*(xL, when the
+.C section
+argument to the >>TITLE keyword is
+other than
+.C XPROTO ,
+the contents of the file
+.C mcextern.mc
+are then included.
+.P
+In this release the contents of this file are
+as follows:
+.cS
+extern Display *Dsp;
+extern Window Win;
+
+extern Window ErrdefWindow;
+extern Drawable ErrdefDrawable;
+extern GC ErrdefGC;
+extern Colormap ErrdefColormap;
+extern Pixmap ErrdefPixmap;
+extern Atom ErrdefAtom;
+extern Cursor ErrdefCursor;
+extern Font ErrdefFont;
+.cE
+.P
+The external variables are defined in the file
+.C startup.c
+or (when linking a program executed via \fCtet_exec()\fP)
+in the file
+.C ex_startup.c .
+.P
+For the \*(xP, when the
+.C section
+argument to the >>TITLE keyword is
+.C XPROTO
+the contents of the file
+.C mcxpext.mc
+are then included.
+.P
+In this release this file is empty.
+.H 3 "Test set symbol and name"
+A symbol is defined indicating the function under test.
+.P
+For example:
+.P
+.cS
+#define T_XSetClipMask 1
+.cE
+.P
+You may use this in a
+.C #ifdef
+control line,
+to distinguish special cases for particular functions in code sections
+of a dot-m file included via the >>INCLUDE keyword.
+.P
+The global variable
+.C TestName
+is initialised to the name of the function under test, which is the
+.C function
+argument given to the >>TITLE keyword.
+.P
+For example:
+.P
+.cS
+char *TestName = "XSetClipMask";
+.cE
+.P
+You can use this within a code section
+of a dot-m file to obtain the name of the function under test.
+.H 3 "Definitions for arguments"
+Symbols are defined to correspond with any arguments to the
+.C function
+specified in the >>TITLE keyword.
+.P
+These correspond to the lines following the >>TITLE keyword in the
+dot-m file.
+.P
+For example:
+.P
+.cS
+/*
+ * Defines for different argument types
+ */
+#define A_DISPLAY display
+#define A_GC gc
+#define A_PIXMAP pixmap
+#define A_DRAWABLE pixmap
+.cE
+.P
+These are used by the code in various included files, to substitute a symbol
+representing a particular argument type with the
+actual variable used as the argument by the function under test.
+.H 3 "Static variables"
+Static variables are defined to correspond with any arguments to the
+.C function
+specified in the >>TITLE keyword.
+.P
+These correspond to the lines following the >>TITLE keyword in the
+dot-m file.
+.P
+For example:
+.P
+.cS
+/*
+ * Arguments to the XSetClipMask function
+ */
+static Display *display;
+static GC gc;
+static Pixmap pixmap;
+.cE
+.P
+These are the arguments that will be passed to the function under test
+when the XCALL macro is expanded.
+.P
+You can initialise these in a code section of a
+dot-m file as required prior to invoking the macro XCALL.
+.P
+These variables will be initialised at the start of each test purpose
+using the function
+.C setargs()
+described below in the section entitled "Initialising arguments".
+.H 3 "Test purpose number"
+You can use this within a code section
+of a dot-m file to obtain the number of the current test purpose.
+.cS
+int tet_thistest;
+.cE
+.H 3 "Initialising arguments"
+A function
+.C setargs()
+is defined to initialise the arguments to the function under
+test.
+.P
+Code to call this function is inserted at the start of each
+test purpose before the code you put in the code section.
+.P
+The arguments are initialised to have the value of the expression
+you specified in the title section. This does not have to be a constant
+expression - for example, it my be a return value of a function in
+a library or extern section.
+By default arguments are initialised to zero values.
+.P
+For example:
+.cS
+/*
+ * Called at the beginning of each test purpose to reset the
+ * arguments to their initial values
+ */
+static void
+setargs()
+{
+ display = Dsp;
+ gc = 0;
+ pixmap = 0;
+}
+.cE
+.H 3 "Initialising arguments when test-type is Bad"
+A function
+.C seterrdef()
+is defined to initialise some of the arguments to the function under
+test to values which are suitable for conducting the included
+error tests.
+.P
+This is called in some of the included error tests to initialise
+the arguments to known good values.
+.P
+For example:
+.cS
+/*
+ * Set arguments to default values for error tests
+ */
+static void
+seterrdef()
+{
+ gc = ErrdefGC;
+ pixmap = ErrdefPixmap;
+}
+.cE
+.H 3 "Code sections"
+The code sections in the dot-m file are converted into a sequence of
+functions named t\fCnnn\fP(), where \fCnnn\fP is a three digit number which
+is filled with leading zeros if necessary, the first code section
+being named t001(). This is known as a "test function".
+.P
+Each of the test functions is preceded by the corresponding assertion
+for the test purpose, in a C source code comment, labelled with the
+test purpose number.
+.P
+Code to call the library function
+.C tpstartup()
+is inserted at the start of the test function, immediately
+after any automatic variables declared in your code section.
+This function performs initialisation required for each test purpose,
+including setting error handlers to trap unexpected errors.
+.P
+Code to call the automatically generated test-set specific function
+.C setargs()
+is then inserted. This function
+is described further in the previous section entitled "Initialising arguments".
+.P
+The contents of your code section are then inserted.
+.P
+The macro XCALL in a dot-m file is expanded to call the function
+under test with arguments
+corresponding to the lines following the >>TITLE keyword.
+.P
+For example:
+.cS
+ XCALL;
+.cE
+is by default expanded to
+.cS
+ startcall(display);
+ if (isdeleted())
+ return;
+ XSetClipMask(display, gc, pixmap);
+ endcall(display);
+ if (geterr() != Success) {
+ report("Got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ }
+.cE
+.P
+The stages in this expansion are as follows:
+.AL
+.LI
+The library function
+.C startcall()
+is called to check for any outstanding unexpected X protocol errors,
+which might have been generated, for example, during the setup
+part of the test.
+A call to
+.C XSync()
+is made to achieve this.
+.LI
+The library function
+.C startcall()
+installs a test error handler in place of the unexpected X protocol
+error handler.
+.LI
+The library function
+.C isdeleted()
+returns
+.C True
+if the test purpose has already issued a result code UNRESOLVED due to
+an earlier call to
+.C delete() .
+(This must be done after calling
+.C startcall()
+in case
+.C XSync()
+flushed an unexpected X protocol error.)
+.LI
+The function under test is then called with the arguments listed
+in the title section.
+.LI
+The library function
+.C endcall()
+is called to check for any X protocol errors caused by the
+function under test.
+A call to
+.C XSync()
+is made to achieve this.
+.LI
+The library function
+.C endcall()
+installs the unexpected X protocol
+error handler.
+.LI
+The test error handler saves the number of the most recent X protocol error.
+It is accessed by calling the function
+.C geterr()
+and the value is checked. The value is expected to be
+.C Success
+by default, or
+.C BadThing
+if the code section was introduced in the dot-m file by
+.cS
+>>CODE BadThing
+.cE
+.P
+If it is desirable to skip checking the error status at this point, the
+option
+.cS
+>>SET no-error-status-check
+.cE
+may be inserted in the dot-m file in the current code section before the
+XCALL.
+This setting only applies up to the end of the current section.
+.LE
+.H 3 "TET initialisation code"
+The
+.C mc
+utility
+adds a reference to the function into an array of functions which can
+be invoked via the
+.SM "TET API" .
+.P
+For example:
+.P
+.cS
+struct tet_testlist tet_testlist[] = {
+ t001, 1,
+ t002, 2,
+ t003, 3,
+ NULL, 0
+};
+.cE
+Code to calculate the number of test purposes in the test set is
+inserted as follows:
+.cS
+int ntests = sizeof(tet_testlist)/sizeof(struct tet_testlist)-1;
+.cE
+.P
+Finally, the names of the startup and cleanup functions are used to
+initialise variables used by the
+.SM "TET API" .
+These functions are
+called before the first test purpose and after the last test purpose.
+The functions called can be overridden using the options
+>>SET startup and >>SET cleanup.
+.P
+The default library functions perform initialisation including
+reading the TET configuration variables and opening a default
+client.
+.P
+Should you override the default startup and cleanup functions, you
+are recommended to call
+.C startup()
+as the first line of your startup function and
+.C cleanup()
+as the last line of your cleanup function.
+.cS
+void (*tet_startup)() = startup;
+void (*tet_cleanup)() = cleanup;
+.cE
+.H 2 "C files for standalone executable in macro tests - \fCMTest.c\fP"
+When the dot-m file contains the line
+.cS
+>>SET macro
+.cE
+the command
+.cS
+mc -m -o MTest.c scrncnt.m
+.cE
+produces a C file named
+.C MTest.c .
+This may be compiled to produce a standalone executable file named
+.C MTest .
+Instructions on building and executing the tests are given in the "User Guide".
+The
+.C MTest.c
+files are not provided as part of this release, but are built
+automatically when building the \*(xT.
+.P
+The file
+.C MTest.c
+is identical to the file
+.C Test.c
+except that a macro (which is expected to be made visible by including
+the file Xlib.h)
+is tested instead of the Xlib function named in the
+title section of the dot-m file.
+.P
+The macro name is set to the
+.C <macroname>
+argument of the >>SET macro option - if there is no >>SET macro
+option in the file, or no argument specified, the default is the
+.C function
+argument in the >>TITLE keyword,
+with the leading letter `X' removed.
+.H 2 "C files for linked executable - \fClink.c\fP"
+The command
+.cS
+mc -l -o link.c stclpmsk.m
+.cE
+produces a C file named
+.C link.c .
+This is identical to the
+.C Test.c
+file with the exception of the initialisation code
+which
+enables the source code to be
+compiled and linked into a space-saving executable file.
+This is an executable file
+which may invoke any of the test purposes in the various link.c files,
+thereby reducing the number of executable files required, and
+saving space.
+The
+.C link.c
+files are not provided as part of this release, but are built
+automatically when building the \*(xT.
+.P
+The remaining parts of this section describe the differences in
+format of the
+.C link.c
+and
+.C Test.c
+files.
+.P
+The differences are associated with the TET initialisation code
+being in a separate source file named
+.C linktbl.c ,
+rather than in the test set source file.
+.P
+A
+.C linktbl.c
+file is provided for each section of the \*(xT in each subdirectory of
+.C $TET_ROOT/xtest/tset .
+This file contains a pointer to an array of
+.C linkinfo
+structures, one for each test set in the section.
+Each
+.C linkinfo
+structure contains the following items:
+.VL 20 0
+.LI \fCname\fP
+a unique name for that test set (the name of the test set directory).
+.LI \fCtestname\fP
+the actual Xlib function tested by the test set.
+.LI \fCntests\fP
+the number of test purposes in the test set.
+.LI \fCtestlist\fP
+a pointer to the array of test functions constructed for that test set
+from the contents of the link.c file.
+.LI \fClocalstartup\fP
+a pointer to the startup function specific to that test set.
+.LI \fClocalcleanup\fP
+a pointer to the cleanup function specific to that test set.
+.LE
+.P
+Later in this section there are example values of these structure members.
+.P
+When the space-saving executable is executed,
+the TET
+initialisation code in the library function
+.C linkstart.c
+determines which test set is required. This is done by matching \fCargv[0]\fP
+with a \fCname\fP element in the array of
+.C linkinfo
+structures. The test functions specified by the corresponding
+\fCtestlist\fP
+element of the
+.C linkinfo
+structure are then executed, preceded and followed by the corresponding
+startup and cleanup function respectively.
+.H 3 "Test set symbol and name"
+The global variable
+.C TestName
+is made static.
+.cS
+static char *TestName = "XSetClipMask";
+.cE
+.H 3 "Test purpose number"
+This is defined in
+.C linktbl.c ,
+and is made available via the following code:
+.cS
+extern int tet_thistest;
+.cE
+.H 3 "TET initialisation code"
+The global variable
+.C tet_testlist
+is made static.
+.P
+For example:
+.P
+.cS
+static struct tet_testlist tet_testlist[] = {
+ t001, 1,
+ t002, 2,
+ t003, 3,
+ NULL, 0
+};
+.cE
+The global variable
+.C ntests
+is made static.
+.cS
+static int ntests = sizeof(tet_testlist)/sizeof(struct tet_testlist)-1;
+.cE
+The
+.C linkinfo
+structure specific to this test set is defined.
+.P
+For example:
+.P
+.cS
+struct linkinfo EXStClpMsk = {
+ "stclpmsk",
+ "XSetClipMask",
+ &ntests,
+ tet_testlist,
+ 0,
+ 0,
+};
+.cE
+.P
+The TET variables for the startup and cleanup functions are defined in
+.C linktbl.c ,
+and are made available via the following code:
+.cS
+extern void (*tet_startup)();
+extern void (*tet_cleanup)();
+.cE
+.H 2 "C files for linked executable in macro tests - \fCmlink.c\fP"
+When the dot-m file contains the line
+.cS
+>>SET macro
+.cE
+the command
+.cS
+mc -m -l -o mlink.c scrncnt.m
+.cE
+produces a C file named
+.C mlink.c .
+The
+.C mlink.c
+files are not provided as part of this release, but are built
+automatically when building the \*(xT.
+.P
+The file
+.C mlink.c
+is identical to the file
+.C link.c ,
+except that a macro (which is expected to be made visible by including
+the file Xlib.h)
+is tested instead of the Xlib function named in the
+title section of the dot-m file.
+.P
+The macro name is set to the
+.C <macroname>
+argument of the >>SET macro option - if there is no >>SET macro
+option in the file, or no argument specified, the default is the
+.C function
+argument in the >>TITLE keyword,
+with the leading letter `X' removed.
+.H 2 "Makefile"
+The command
+.cS
+mmkf -o Makefile scrncnt.m
+.cE
+produces a Makefile which can be used to build
+all the C source files described in the previous sections
+and to build the test executables from the C files.
+.P
+Further instructions appear in the "User Guide" in the section
+entitled
+"Building, executing and reporting tests without using the TET".
+.P
+The Makefiles produced by
+.C mc
+are portable in that they use symbolic names to describe commands
+and parameters which may vary from system to system.
+The values of these symbolic names are all obtained by a utility
+.C pmake
+from the
+build configuration file, which is described in the
+"User Guide" in the section entitled
+"Configuring the \*(xT".
+.P
+The targets in the Makefile which can be invoked by
+.C pmake
+are as follows:
+.VL 12 0
+.LI "\fCpmake Test\fP"
+.br
+Builds standalone executable version of the test set.
+.LI "\fCpmake Test.c\fP"
+.br
+Builds
+.C Test.c
+using
+.C mc
+with the format described in the earlier section entitled
+"C files for standalone executable - \fCTest.c\fP".
+.LI "\fCpmake MTest\fP"
+.br
+Builds standalone executable version of the test set to test the macro
+version of the function.
+.LI "\fCpmake MTest.c\fP"
+.br
+Builds
+.C MTest.c
+using
+.C mc
+with the format described in the earlier section entitled
+"C files for standalone executable - \fCMTest.c\fP".
+.LI "\fCpmake linkexec\fP"
+.br
+Builds the object files and links
+which can be used to produce a linked executable file. These
+targets are used when building space-saving executables as
+described in the "User Guide".
+.LI "\fCpmake link.c\fP"
+.br
+Builds
+.C link.c
+using
+.C mc
+with the format described in the earlier section entitled
+"C files for linked executable - \fClink.c\fP".
+.LI "\fCpmake mlink.c\fP"
+.br
+Builds
+.C mlink.c
+using
+.C mc
+with the format described in the earlier section entitled
+"C files for linked executable - \fCmlink.c\fP".
+.LI "\fCpmake clean\fP"
+.br
+This
+removes object files and temporary files from the test set directory.
+.LI "\fCpmake clobber\fP"
+.br
+This
+removes object files and temporary files from the test set directory
+and additionally removes all the source files which
+.C mc
+can remake.
+.LE
+.P
+The remaining parts of this section describe the format of the
+Makefiles in more detail.
+.P
+Refer to the section entitled "Make section - >>MAKE" for examples of how
+the variables
+.SM AUXFILES
+and
+.SM AUXCLEAN
+may be set.
+.H 3 "Copyright header"
+A copyright header is inserted as a comment block. This will contain
+lines showing the SCCS versions of the dot-m file and any included files.
+.H 3 "Make variables"
+A series of
+.C make
+variables are initialised
+to represent the names of
+the source, object and executable files.
+.cS
+SOURCES=scrncnt.m
+CFILES=Test.c
+OFILES=Test.o
+MOFILES=MTest.o
+LOFILES=link.o mlink.o
+LINKOBJ=scrncnt.o
+LINKEXEC=scrncnt
+.cE
+.H 3 "Targets for \*(xP"
+For the \*(xP, when the
+.C section
+argument to the >>TITLE keyword is
+.C XPROTO
+the contents of the file
+.C mmxpinit.mc
+are then included.
+.P
+This file initialises various
+.C make
+variables to specific values for the \*(xP.
+.P
+In this release the contents of this file are as follows:
+.cS
+#
+# X Protocol tests.
+#
+
+# CFLAGS - Compilation flags specific to the X Protocol tests.
+#
+CFLAGS=$(XP_CFLAGS)
+SYSLIBS=$(XP_SYSLIBS)
+LIBS=$(XP_LIBS)
+
+# LINTFLAGS - Flags for lint specific to the X Protocol tests.
+#
+LINTFLAGS=$(XP_LINTFLAGS)
+LINTLIBS=$(XP_LINTLIBS)
+
+.cE
+.H 3 "Targets for standalone executable - \fCTest\fP"
+The contents of the file
+.C mmsa.mc
+are included. These are the targets to create the standalone executable file
+.C Test .
+.cS
+#
+# Build a standalone version of the test case.
+#
+Test: $(OFILES) $(LIBS) $(TCM) $(AUXFILES)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(TCM) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+Test.c: $(SOURCES)
+ $(CODEMAKER) -o Test.c $(SOURCES)
+
+.cE
+.H 3 "Targets for standalone executable - \fCMTest\fP"
+If the dot-m file contains the >>SET macro option,
+the contents of the file
+.C mmmsa.mc
+are included. These are the targets to create the standalone executable file
+.C MTest
+for the macro version of the specified Xlib function.
+.cS
+#
+# Build a standalone version of the test case using the macro version
+# of the function.
+#
+MTest: $(MOFILES) $(LIBS) $(TCM) $(AUXFILES)
+ $(CC) $(LDFLAGS) -o $@ $(MOFILES) $(TCM) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+MTest.c: $(SOURCES)
+ $(CODEMAKER) -m -o MTest.c $(SOURCES)
+
+.cE
+.H 3 "Targets for linked executable"
+The contents of the file
+.C mmlink.mc
+are included.
+These are the targets to create object files and links
+which can be used to produce a linked executable file.
+These targets are used when building space-saving executables as described in
+the "User Guide".
+.cS
+#
+# A version of the test that can be combined together with
+# all the other tests to make one executable. This will save a
+# fair amount of disk space especially if the system does not
+# have shared libraries. Different names are used so that
+# there is no possibility of confusion.
+#
+link.c: $(SOURCES)
+ $(CODEMAKER) -l -o link.c $(SOURCES)
+
+# Link the objects into one large object.
+#
+$(LINKOBJ): $(LOFILES)
+ $(LD) $(LINKOBJOPTS) $(LOFILES) -o $(LINKOBJ)
+
+# Link the object file into the parent directory.
+#
+../$(LINKOBJ): $(LINKOBJ)
+ $(RM) ../$(LINKOBJ)
+ $(LN) $(LINKOBJ) ..
+
+# Make a link to the combined executable.
+#
+$(LINKEXEC): ../Tests
+ $(RM) $(LINKEXEC)
+ $(LN) ../Tests $(LINKEXEC)
+
+../Tests: ../$(LINKOBJ)
+
+linkexec:: $(LINKEXEC) $(AUXFILES) ;
+
+.cE
+.H 3 "Targets for linked executable - macro version"
+If the dot-m file contains the >>SET macro option,
+the contents of the file
+.C mmmlink.mc
+are included.
+These are the targets to create object files and links
+for the macro version of the specified Xlib function
+which can be used to produce a linked executable file.
+These targets are used when building space-saving executables as described in
+the "User Guide".
+.cS
+# A version of the test that can be combined with all the other tests for
+# the macro version of the function.
+#
+mlink.c: $(SOURCES)
+ $(CODEMAKER) -m -l -o mlink.c $(SOURCES)
+
+linkexec:: m$(LINKEXEC) $(AUXFILES) ;
+
+m$(LINKEXEC): ../Tests
+ $(RM) m$(LINKEXEC)
+ $(LN) ../Tests m$(LINKEXEC)
+.cE
+.H 3 "Targets for libraries"
+For the \*(xL, when the
+.C section
+argument to the >>TITLE keyword is
+other than
+.C XPROTO ,
+the contents of the file
+.C mmlib.mc
+are then included.
+.P
+In this release the contents of this file are
+as follows:
+.cS
+#
+# This part of the makefile checks for the existance of the libraries
+# and creates them if necessary.
+#
+
+# The xtestlib is made if it doesn't exist
+#
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+#
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
+.cE
+For the \*(xP, when the
+.C section
+argument to the >>TITLE keyword is
+.C XPROTO
+the contents of the file
+.C mmxplib.mc
+are then included. This file is identical to
+.C mmlib.mc
+except for the following additional lines:
+.cS
+# The X Protocol test library is made if it doesn't exist
+#
+$(XSTLIB):
+ cd $(XTESTROOT)/src/libproto; $(TET_BUILD_TOOL) install
+.cE
+.H 3 "Targets for cleaning and linting"
+The contents of the file
+.C mmmisc.mc
+are then included.
+.P
+This file includes a
+.C clean
+target to remove object files and temporary files, and a
+.C clobber
+target which additionally removes all the source files which
+.C mc
+can remake.
+.P
+There is also a
+.C LINT
+target which enables the C source files to be checked against lint
+libraries specified in the build configuration file.
+.cS
+#
+# Miscellaneous housekeeping functions.
+#
+
+# clean up object and junk files.
+#
+clean:
+ $(RM) Test $(OFILES) $(LOFILES) $(LINKOBJ) $(LINKEXEC) core\e
+ MTest m$(LINKEXEC) $(MOFILES) CONFIG Makefile.bak $(AUXCLEAN)
+
+# clobber - clean up and remove remakable sources.
+#
+clobber: clean
+ $(RM) MTest.c Test.c mlink.c link.c Makefile
+
+# Lint makerules
+#
+lint: $(CFILES)
+ $(LINT) $(LINTFLAGS) $(CFILES) $(LINTTCM) $(LINTLIBS)
+
+LINT:lint
+
+.cE
+.H 3 "Targets for building known good image files"
+The contents of the file
+.C mmpgen.mc
+are then included.
+.P
+These include targets which enable the test set to be built so that
+it generates known good image files.
+.P
+These are not intended to be used outside the development
+environment at UniSoft.
+.cS
+#
+# Pixel generation makerules for generating the reference
+# known good image files.
+#
+
+PVOFILES=pvtest.o
+
+pvgen: $(PVOFILES) $(PVLIBS) $(TCM)
+ $(CC) $(LDFLAGS) -o $@ $(PVOFILES) $(TCM) \e
+ $(PVLIBS) $(SYSLIBS) $(SYSMATHLIB)
+
+pvtest.o: pvtest.c
+ cc -c -DGENERATE_PIXMAPS $(CFLAGS) pvtest.c
+
+pvtest.c: Test.c
+ $(RM) pvtest.c; \e
+ $(LN) Test.c pvtest.c
+
+.cE
+.H 3 "Targets for included files"
+Rules are included to specify the dependency of the C source files
+on any included files.
+.P
+For example:
+.P
+.cS
+Test.c link.c: $(XTESTLIBDIR)/error/EAll.mc
+Test.c link.c: $(XTESTLIBDIR)/error/EGC.mc
+Test.c link.c: $(XTESTLIBDIR)/error/EPix.mc
+.cE
+.H 2 "Formatting assertions"
+The command
+.cS
+ma -o stclpmsk.a -h -m stclpmsk.m
+.cE
+produces in the file
+.C stclpmsk.a
+a list of the assertions from the
+assertion sections of the specified dot-m file.
+The assertions are output in nroff format. All macros
+used in the assertion text can be obtained using the -h and -s
+options as described below.
+.P
+The remaining parts of this section describe the output format
+in more detail.
+.H 3 "Copyright header"
+A copyright header is output as an nroff comment block.
+This will contain lines showing the SCCS versions of the dot-m file
+and any included files.
+.H 3 "Macro definitions"
+If the -h option was specified, macros that are later used in the
+assertion text will be output from the file
+.C maheader.mc .
+.H 3 "Title"
+The line
+.cS
+\&.TH <function> <section>
+.cE
+is output, where
+.C <function>
+and
+.C <section>
+are obtained from the title section of the dot-m file.
+.P
+The default macro definition for .TH in
+.C maheader.mc
+causes the section and function name to be printed at the top
+of each page.
+.H 3 "Assertions"
+For each assertion section, the line
+.cS
+\&.TI <category> \e" <function>-n
+.cE
+is output, where
+.C <category>
+is obtained from the second argument of the >>ASSERTION keyword and
+.C <function>
+is obtained from the title section of the dot-m file,
+and
+.C n
+is the number of the assertion in the test set.
+.P
+This is
+followed by the assertion text in which
+.C xname
+is converted to
+.C <function> .
+For example:
+.cS
+\&.TI A \e" XSetClipMask-1
+A call to
+\&.F XSetClipMask
+sets the
+\&.M clip_mask
+component of the specified GC to the value of the
+\&.A pixmap
+argument.
+.cE
+.P
+The other macros used in the assertion text to control font changes
+are described in appendix B.
+.P
+The default macro definition for .TH in
+.C maheader.mc
+causes the example assertion to be printed as follows:
+.P
+.cS
+ \fBAssertion XSetClipMask-1(A).\fR
+ \fRA call to \fCXSetClipMask\fP sets the \fIclip_mask\fP component of the
+ specified GC to the value of the \f(COpixmap\fP argument.
+.cE
+.SK
+.H 1 "Source file structure"
+This section describes the C source coding style and conventions which
+which have been used in the development of the revised \*(xT. These
+conventions
+apply to the structure of the code sections of the dot-m files, whose
+overall structure is defined in previous sections of the Programmers
+Guide. In some
+cases (particularly in the structure of the \*(xP)
+the style and conventions have been deleloped from the earlier T7
+\*(xT.
+.P
+You are advised to study the contents of this section before attempting to
+modify or extend the \*(xT. The contents of this section will give you
+guidelines on how to structure the test code so that it is easy
+to follow, gives correct and reliable information when the tests are
+executed, and is written as compactly as possible.
+.P
+Libraries of common functions have been used and further
+developed in the revised \*(xT
+in order to keep the source code in the test sets as compact as possible.
+The rest of this section describes recommendations on how particular library
+functions should be used. It does not describe the contents of the
+libraries in detail.
+A complete list of library contents is provided in the section entitled
+"Source file libraries".
+.P
+During the development of the \*(xL, a library of support
+functions has been developed. This library includes functions for
+performing common operations required when testing the \*(xW, as well as
+performing common reporting operations. This library includes a small
+number of functions developed for the Xlib tests within the T7 \*(xT.
+This library is known as the
+"X test suite library" in this document, and the source of the library is in
+the directory
+.C $TET_ROOT/xtest/src/lib .
+.P
+Calls to any function in this library may be made by any test set in the
+\*(xT.
+.H 2 "Structure of the \*(xL"
+This section describes the structure of the code sections of the \*(xL.
+.P
+The \*(xL are the tests for sections 2 to 10 of the X11R4 Xlib specifications.
+They are stored in subdirectories of the directories \fCCH02\fP to \fCCH10\fP
+(which are to be found in the directory \fC$TET_ROOT/xtest/tset\fP).
+There is a subdirectory for each Xlib function containing a dot-m file
+which includes all the test purposes provided for that Xlib function.
+The naming scheme which is used for these directories is described in
+appendix B of the "User Guide".
+.H 3 "Result code macros"
+It is good practice where possible to structure the test so that only
+one test result code
+is assigned before the code section returns or ends.
+.P
+The significance of the various test result codes that may
+be assigned are described more fully in appendix D of the
+"User Guide".
+.P
+The following macros
+may be used to assign the test result code.
+These macros call the function
+\fCtet_result()\fP
+which is part of the TET API.
+.VL 12 0
+.LI PASS
+.br
+This assigns test result code PASS.
+.LI FAIL
+.br
+This assigns test result code FAIL.
+.LI UNRESOLVED
+.br
+This assigns test result code UNRESOLVED.
+.LI UNSUPPORTED
+.br
+This assigns test result code UNSUPPORTED.
+.LI UNTESTED
+.br
+This assigns test result code UNTESTED.
+.LI NOTINUSE
+.br
+This assigns test result code NOTINUSE.
+.LI WARNING
+.br
+This assigns test result code WARNING.
+.LI FIP
+.br
+This assigns test result code FIP.
+.LE
+.P
+Note that there are two other test result codes which may not be assigned
+directly within a test purpose.
+.P
+The result code UNINITIATED will be assigned to a test purpose from within the
+TET when the function \fCtet_delete()\fP
+has been called in an earlier test purpose
+or startup function. This is useful to prevent initiation of later test
+purposes when it is not possible to continue executing test purposes in
+the test set.
+.P
+The result code NORESULT will be assigned to a test purpose from within the
+TET if the test purpose is initiated but no result code has been
+output by the time control returns from the test purpose to the TET.
+.P
+The FAIL macro also increments a failure counter which is used to prevent
+a result code being assigned in a later call to CHECKPASS (see below).
+.H 3 "Result code functions"
+There are a series of convenience functions which output a particular
+test result code preceded by a test information message of type REPORT.
+(See "Outputting test information messages", below).
+.P
+In each case the arguments are
+exactly like those for \fIprintf(3)\fP.
+.P
+These are as follows:
+.P
+.VL 12 0
+.LI untested()
+.br
+This function may be used for an extended assertion
+to output the test result code UNTESTED, preceded by a message.
+.LI unsupported()
+.br
+This function may be used for a conditional assertion
+to output the test result code UNSUPPORTED, preceded by a message.
+.LI notinuse()
+.br
+This function may be used to output the test result code NOTINUSE,
+preceded by a message.
+.LI delete()
+.br
+This function may be used to output the test result code UNRESOLVED,
+preceded by a message.
+.LE
+.H 3 "Assigning result codes"
+The code should be structured such that a PASS result code is only
+assigned if there is no doubt that the assertion being tested has been
+determined to be positively true on the system being tested. Absence of
+failure should not be taken as proof of success. For this reason, there
+should if possible be just one place where a PASS result may be assigned,
+whilst there may be many code paths which report other result codes.
+.P
+The result code FAIL should not be called until the function under
+test has been called.
+.P
+During execution of the test purpose, it may not be possible to setup the
+conditions for the assertion to be conclusively tested. In this case
+the result code UNRESOLVED should be assigned rather than FAIL.
+.P
+For example:
+.cS
+.ft C
+>>CODE
+
+ if (setup()) {
+ delete("setup() failed; the test could not be completed");
+ return;
+ }
+
+ ret = XCALL;
+
+ if (ret == 0)
+ PASS;
+ else
+ fAIL;
+.ft
+.cE
+.H 3 "Assigning result codes for extended assertions"
+Extended assertions are described in more detail as part of the
+>>ASSERTION keyword.
+.P
+In some cases partial testing may be done for extended
+assertions. In this case, the result code would be FAIL if an error
+is detected, or UNTESTED if no failure is detected but the assertion is still
+not fully tested.
+.P
+For example:
+.cS
+.ft C
+>>CODE
+
+ ret = XCALL;
+
+ if (ret == 0)
+ PASS;
+ else
+ untested("The assertion could not be completely tested");
+.ft
+.cE
+.H 3 "Assigning result codes for conditional assertions"
+Conditional assertions are described in more detail as part of the
+>>ASSERTION keyword.
+.P
+It is usual to determine at the beginning of the test purpose
+whether the conditional feature described in the assertion is supported.
+.P
+For example:
+.cS
+.ft C
+>>CODE
+
+ if (!feature_supported) {
+ unsupported("The required feature is not supported");
+ return;
+ }
+
+ ret = XCALL;
+
+ if (ret == 0)
+ PASS;
+ else
+ FAIL;
+.ft
+.cE
+.H 3 "Assigning result codes for multi-part tests"
+It is often the case that the test strategy for an assertion requires
+a number of separate checks to be performed, all of which must pass before
+the test purpose can be assigned a PASS result code.
+.P
+In order to ensure that all relevant checks have been performed,
+a macro CHECK is provided which increments a pass counter. At the end of the
+test, a further macro CHECKPASS checks that the counter has reached the
+required value before assigning a PASS result. (The expected value
+of the pass counter is normally a constant, but may be a function of
+a loop counter if the test involves calling CHECK in a loop.)
+.P
+The macro CHECK uses \fCtrace()\fP to print the pass counter and line number
+in the TET journal file.
+The format of the TET journal file is described further in appendix C
+of the
+"User Guide".
+.P
+CHECKPASS also ensures that the pass counter is not zero, and that the fail
+counter is zero.
+.P
+For example:
+.cS
+.ft C
+>>CODE
+
+ n_ret = -1;
+ ret = XCALL;
+
+ if (ret == 0)
+ CHECK;
+ else
+ FAIL;
+
+ if (n_ret == expected_number)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(2);
+.ft
+.cE
+.P
+In the case of extended assertions, the macro CHECKUNTESTED may be called,
+which is identical to CHECKPASS, except that the final result code
+assigned will be UNTESTED.
+.H 3 "Outputting test information messages"
+Test information messages are normally output to describe the reason
+for any test result codes which are other than PASS, and for other
+purposes, as described in this section.
+.P
+Appendix D of the "User Guide" describes the
+four different categories of test information messages which may appear
+in the TET journal file. This section describes how these messages are
+output from the test purpose.
+.P
+The functions described in this section call the function
+\fCtet_infoline()\fP
+which is part of the TET API.
+.P
+.VL 12 0
+.LI REPORT
+.br
+A test information message with type REPORT is used to report the reason
+for any test result code which is other than PASS. A warning message is
+printed by the report writer \fCrpt\fP if a test information message of
+type REPORT is given in a test purpose which produced a test result code PASS.
+.P
+This is output using the function \fCreport()\fP, which takes arguments
+exactly like those for \fIprintf(3)\fP.
+.LI CHECK
+.br
+A test information message with type CHECK should not be output directly -
+this should only be done via the CHECK macro.
+.LI TRACE
+.br
+A test information message with type TRACE is used to
+describe the state of the test being executed.
+.P
+This is not output to the TET journal file if the execution
+configuration parameter XT_OPTION_NO_TRACE is set to Yes.
+.P
+This is output using the function \fCtrace()\fP, which takes arguments
+exactly like those for \fIprintf(3)\fP.
+.LI DEBUG
+.br
+A test information message with type DEBUG is a debug message inserted
+during the development of the test.
+.P
+This is only output to the TET journal file if the value of the
+execution configuration parameter XT_DEBUG is greater than or equal to
+the level of the debug message.
+.P
+This is output using the function \fCdebug()\fP, which takes arguments
+exactly like those for \fIprintf(3)\fP, except that the \fIprintf(3)\fP
+arguments are preceded by a single argument which is the debug level.
+The debug level should be between 1 and 3.
+.LE
+.P
+For example:
+.cS
+.ft C
+>>CODE
+
+ debug(1, "about to call %s", TestName);
+ ret = XCALL;
+
+ if (ret == 0)
+ trace("%s returned %d", TestName, ret);
+ PASS;
+ } else {
+ report("%s returned %d instead of 0", TestName, ret);
+ FAIL;
+ }
+.ft
+.cE
+.H 3 "Creating new test purposes"
+You can create new test purposes within an existing dot-m file using the
+guidelines in this section.
+.P
+It is expected that in doing this you will be primarily aiming to produce
+new test purposes for a particular Xlib function. You should add the
+new test purpose to the dot-m file containing the test purposes for that
+Xlib function.
+.H 4 "Creating new sections in the dot-m file"
+You are advised to create an assertion section and strategy section
+at the end of the file, using as a template one of the existing
+sections in the dot-m file.
+.P
+You should then create a code section commencing with the >>CODE
+keyword. Since there are many different styles of Xlib functions
+which may be tested, there are few additional guidelines that can be given
+beyond those contained in earlier parts of this guide.
+.H 4 "Creating test purposes which use pixmap verification"
+If you have not done so yet, refer to the section entitled
+"Examining image files" in the "User Guide".
+This explains some background to the pixmap verification scheme, and
+in particular how to view image files produced when running the \*(xT.
+.P
+A number of test purposes supplied in the \*(xT use a scheme known as
+pixmap verification, to compare the image produced by the X server with a
+known good image which is stored in a known good image file.
+.P
+All the required known good image files for the test programs in the
+\*(xT (as supplied) have been created in advance.
+The known good image files for each test program
+are supplied in the \*(xT in the test set directory in which the dot-m
+file is supplied. They are named a\fCnnn\fP.dat, where \fCnnn\fP is the
+number of the test purpose for which the known good image file was generated.
+.P
+The known good image files are generated as follows. The \*(xT is compiled
+with the additional compilation flag -DGENERATE_PIXMAPS, and linked with
+a replacement Xlib which determines analytically the expected X server display
+contents at any point. At the points where pixmap verification is going
+to be performed, the expected image is instead written to a data file, which
+is the known good image file.
+.P
+It is not possible to generate further known good image files in this way,
+because the replacement Xlib is not part of the \*(xT.
+.P
+However, it is possible
+to write a server-specific image file
+containing the
+contents of the X server display at points where pixmap verification is
+going to be performed.
+This may be useful for the purposes of validation and regression
+testing against a known server.
+This may be done by working through the following stages:
+.P
+.AL
+.LI
+Create the test purpose with a call to the macro PIXCHECK at the
+point where you want to validate the image displayed by the X server.
+Note that the macro PIXCHECK calls the macros CHECK or FAIL depending on
+whether the image displayed by the X server matches that in the image file.
+The code invoked by the macro PIXCHECK(display, drawable) is as follows:
+.P
+.cS
+ if (verifyimage(display, drawable, (struct area *)0))
+ CHECK;
+ else
+ FAIL;
+.cE
+.P
+The function
+.C verifyimage()
+is described in more detail in the section entitled
+"Source file libraries".
+.P
+.LI
+Build and execute the test without using the
+.SM TCC ,
+(refer to the "User Guide")
+and check that the newly created
+test purpose gives result code UNRESOLVED due to
+the absence of a known good image file as follows:
+.cS
+pmake
+pt
+prp
+.cE
+.LI
+Rerun the test,
+saving the image produced by the X server
+as follows:
+.cS
+pt -v XT_SAVE_SERVER_IMAGE=Yes
+.cE
+.LI
+This should create a file named a\fCnnn\fP.sav, where \fCnnn\fP is the name
+of the newly created test purpose. This is a server-specific image file.
+Rename this file to the name used
+for known good image files as follows:
+.cS
+mv a\fCnnn\fP.sav a\fCnnn\fP.dat
+.cE
+.LI
+Check that the process has worked by executing the test without using the
+.SM TCC ,
+and enabling pixmap verification against the server-specific image file
+as follows:
+.cS
+pt
+prp
+.cE
+.P
+The newly created test purpose should give a result code of PASS.
+.LE
+.P
+It is particularly important that new test purposes are added at the end
+of the file if an earlier test purpose calls the macro \fCPIXCHECK\fP.
+This is because inserting a test purpose before another test purpose
+will cause the later test purpose to be renumbered. As well as causing
+unnecessary confusion in other ways, this will cause the later test purpose
+to now look for the wrong known good image file.
+.H 2 "Structure of the \*(xP"
+This section describes the structure of the code sections of the \*(xP.
+.P
+The \*(xP are the touch tests for the X Protocol (version 11).
+They are stored in subdirectories of the directory \fCXPROTO\fP
+(which is to be found in the directory \fC$TET_ROOT/xtest/tset\fP).
+There is a subdirectory for each X Protocol request containing a dot-m file
+which includes all the test purposes provided for that X Protocol request.
+The naming scheme which is used for these directories is described in
+appendix B of the "User Guide".
+.P
+During the development of the \*(xP, extensive use has also been made of
+a library of support functions developed in the earlier T7 \*(xT. This
+library is known as the "X\ Protocol library" in this document,
+and the source of the library is in
+the directory
+.C $TET_ROOT/xtest/src/libproto .
+.P
+Calls to any function in this library may be made by any of the \*(xP in the
+\*(xT.
+.H 3 "Structure of the code sections"
+In the T7 release of the \*(xT, each of the \*(xP consisted of a
+\fCmain()\fP function which called library functions to
+send an X Protocol request to the X server, and
+checked for the correct response (reply, error or nothing).
+.P
+In the revised \*(xT, the test code originally in the
+\fCmain()\fP function has been moved to a function called \fCtester()\fP
+which is located in an >>EXTERN section in each dot-m file,
+so that it can be called from each test purpose as described below.
+The test function \fCtester()\fP is
+in turn called from a library function \fCtestfunc()\fP.
+.P
+For example:
+.P
+.cS
+.ft C
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+.ft
+.cE
+.P
+By default,
+the library function \fCtestfunc()\fP calls \fCtester()\fP for each byte
+orientation. The test function \fCtester()\fP is called in a sub-process
+via the TET API function \fCtet_fork()\fP, and returns the exit status of
+the test process to \fCtestfunc()\fP.
+.P
+If required, the execution configuration parameter XT_DEBUG_BYTE_SEX may be
+set to NATIVE, REVERSE, MSB or LSB to call \fCtester()\fP just once
+with the required byte orientation.
+.P
+Each client has a test type, which is initialised when the client is created.
+The test type determines whether X Protocol requests sent by the client
+are to be good requests or invalid requests (expecting an X Protocol error
+to be returned). The test type may be modified during the lifetime of
+the client by invoking the macro \fCSet_Test_Type()\fP.
+In many tests, this is done by setting the test type to one of the following
+values before calling \fCSend_Req()\fP, then setting it to GOOD immediately
+afterwards for subsequent library calls:
+.P
+.VL 12 0
+.LI GOOD
+.br
+The request sent will be a known good X Protocol request (unless
+otherwise modified in \fCtester()\fP before calling \fCSend_Req()\fP).
+.LI BAD_LENGTH
+.br
+The request sent will have length field less than the minimum needed
+to contain the request.
+.LI JUST_TOO_LONG
+.br
+The request sent will have length field greater than the minimum needed
+to contain the request (and, for requests where the length is used to
+determine the number of fields in the request, the length is also
+not the minimum length plus a multiple of the field size).
+.LI TOO_LONG
+.br
+The request sent will have a length field which is greater than that
+accepted by the X server under test.
+.LI BAD_IDCHOICE1
+.br
+The request sent will have a resource ID that is already in use
+(it is the responsibility of the function \fCtester()\fP to ensure the
+resource ID is in use before calling \fCSend_Req()\fP).
+.LI BAD_IDCHOICE2
+.br
+The request sent will have a resource ID that is out of range
+(it is the responsibility of the function \fCtester()\fP to ensure the
+resource ID is out of range before calling \fCSend_Req()\fP).
+.LI BAD_VALUE
+.br
+The request sent will have an invalid mask bit set
+(it is the responsibility of the function \fCtester()\fP to ensure the
+mask field contains an invalid bit before calling \fCSend_Req()\fP).
+.LI OPEN_DISPLAY
+.br
+A special value used only in the test for OpenDisplay
+for testing the connection setup protocol.
+.LI SETUP
+.br
+The initial test type of a client, which will cause errors during
+test setup to produce result code
+.SM UNRESOLVED
+rather than
+.SM FAIL .
+.LE
+.H 3 "Outputting test information and result code"
+Errors may be detected and reported both within the test function
+\fCtester()\fP and within library functions. When an error is detected,
+the function \fCLog_Err()\fP should be
+called. This increments an error count and uses \fCreport()\fP
+to output a test information message of type REPORT to the TET journal file.
+.P
+If no error is detected, the function Log_Trace() may be called to
+record that the expected response was received. This uses \fCtrace()\fP
+to output a test information message of type TRACE to the TET journal file.
+.P
+You can also use the function Log_Debug() to
+output more detailed test information such as the contents of request,
+reply and event structures. This uses \fCdebug()\fP
+to output a test information message of type DEBUG at level one
+to the TET journal file.
+.P
+The function \fCExit()\fP should be called at any point after an error has
+occurred, which will assign a test result code FAIL and print the error
+count (or UNRESOLVED if the error counter is zero). The exit status will be
+EXIT_FAIL in this case.
+.P
+If \fCtester()\fP performs all checks and the results are correct,
+the function \fCExit_OK()\fP should be called. The exit status will be
+EXIT_SUCCESS in this case.
+.P
+A result code of PASS is only assigned to a test purpose in the library
+function \fCtestfunc()\fP if all calls to
+\fCtester()\fP give exit status EXIT_SUCCESS. It should not be assigned
+anywhere else.
+.H 3 "Creating new test purposes"
+You can create new test purposes within an existing dot-m file using the
+guidelines in this section.
+.P
+It is expected that in doing this you will be primarily aiming to produce
+new test purposes for a particular X Protocol request. You should add the
+new test purpose to the dot-m file containing the test purposes for that
+X Protocol request.
+.H 4 "Creating new sections in the dot-m file"
+You are advised to create an assertion section and strategy section
+at the end of the file, using as a template one of the existing
+sections in the dot-m file.
+.P
+You should then create a code section which passes a function \fCmy_test()\fP
+you are about to create to the library function \fCtestfunc()\fP.
+.P
+For example:
+.P
+.cS
+.ft C
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(my_test);
+.ft
+.cE
+.H 4 "Creating a new test function"
+You should create a function \fCmy_test()\fP in an >>EXTERN section
+in the dot-m file using the guidelines in this section.
+.P
+A client is a connection to the X server under test.
+Each X Protocol request is sent from a particular client.
+You can create a client numbered \fCclient\fP
+using \fCCreate_Client(client)\fP.
+Normally a single client is created, but it is
+possible to create more than one client. This will be necessary when
+testing the effect on the server of multiple clients.
+.P
+The client data structure \fCXst_clients\fP is used to store the
+information about each client you have created. This includes resource ID's
+and
+a display structure which is filled in when the client is created.
+The client data structure is documented in more detail in the header file in
+which it is defined (\fC$TET_ROOT/xtest/include/Xstlib.h\fP).
+.P
+Next you will need to create a request structure. The function
+\fCMake_Req(client, req_type)\fP should
+be called to create a request of a specified type \fCreq_type\fP for
+a specified client \fCclient\fP
+and return a pointer to the request structure. The request structure will
+be filled in with defaults which may be suitable for the test purpose you are
+creating. The file
+.C MakeReq.c
+in the X Protocol library fills in the default values.
+.P
+Should you want to change the defaults you can do this at any point between
+creating the request structure and sending it to the X server. It may
+be modified by accessing the structure members. The format of the request
+structures is exactly as defined in your X Protocol header file (normally
+\fC/usr/include/X11/Xproto.h\fP). You can alter value list items using the
+following functions:
+.P
+.VL 12 0
+.LI \fCAdd_Masked_Value()\fP
+.br
+.LI \fCDel_Masked_Value()\fP
+.br
+.LI \fCClear_Masked_Value()\fP
+.br
+.LI \fCAdd_Counted_Value()\fP
+.br
+.LI \fCClear_Counted_Value()\fP
+.br
+.LI \fCAdd_Counted_Bytes()\fP
+.br
+.LE
+.P
+When you have the request structure you wish to pass to the X server,
+call the function \fCSend_Req(client)\fP.
+This sends the request \fCreq\fP from client \fCclient\fP to the X server,
+and handles byte swapping and request packing as necessary.
+If you wish the X Protocol library to further modify the request
+structure to send an invalid protocol request, set the test type of the
+client before calling \fCSend_Req(client)\fP using the macro
+\fCSet_Test_Type(client)\fP. The possible test types are listed in the
+earlier section entitled "Structure of the code sections".
+.P
+To check that the X server has reacted correctly to the request sent, you
+will need to call the function \fCExpect()\fP. For convenience, a number
+of macros and functions have been created to call \fCExpect()\fP
+depending on the outcome you are expecting. These are as follows:
+.P
+.VL 12 0
+.LI "\fCExpect_Event(client, event_type)\fP"
+.br
+This expects an event of type \fCevent_type\fP to be sent back from the
+X server to client \fCclient\fP.
+.LI "\fCExpect_Reply(client, req_type)\fP"
+.br
+This expects a reply to the X Protocol request of type \fCreq_type\fP
+to be sent back from the X server to client \fCclient\fP.
+.LI "\fCExpect_Error(client, error_type)\fP"
+.br
+This expects an error of type \fCerror_type\fP
+to be sent back from the X server to client \fCclient\fP.
+.LI "\fCExpect_BadLength(client)\fP"
+.br
+This expects a BadLength error
+to be sent back from the X server to client \fCclient\fP.
+.LI "\fCExpect_BadIDChoice(client)\fP"
+.br
+This expects a BadIDChoice error
+to be sent back from the X server to client \fCclient\fP.
+.LI "\fCExpect_Nothing(client)\fP"
+.br
+This expects neither an error, event or reply
+to be sent back from the X server to client \fCclient\fP.
+.LE
+.P
+The \fCExpect()\fP function will check that the response from the X server
+is of the correct type and has the correct length. It will be byte swapped
+and unpacked as necessary into an event or reply structure, to which a
+pointer will be returned.
+.P
+It is recommended that one of these functions be called immediately after
+sending an X Protocol request to the X server.
+This causes any pending response from the X server to be flushed out,
+and checked. This makes it easier to locate wrong responses from the X server.
+This is effectively designing the test to run synchronously.
+.P
+Once an error, event or reply has been returned, it can be examined directly.
+.P
+Since the structures allocated for
+requests, replies and events are allocated dynamically, it is wise to free
+the structure after use. this may be done using the functions
+\fCFree_Req()\fP,
+\fCFree_Reply()\fP and
+\fCFree_Event()\fP.
+.P
+When the outcome of sending the X Protocol request has been assessed,
+you will want to either report an error or output a trace
+message indicating that the expected response was received.
+Refer to the earlier section entitled
+"Outputting test information and result code".
+.P
+You should end the test purpose if every part of the test purpose has
+succeeded by calling \fCExit_OK()\fP. This should only be done once,
+because it is the means of passing back to the library function
+\fCtestfunc()\fP the fact that the test purpose passed. If at
+an earlier part of the test purpose an error occurs and it is desired to
+exit, call \fCExit()\fP.
+.H 4 "Creating test purposes to test X Protocol extensions"
+The nature of the extension mechanism in X makes it difficult to
+just add support in the switch statements throughout the X Protocol
+library to support protocol extensions.
+.P
+The reason for this is that you do not know the value of the event
+types and reply types until you have queried the X server.
+.P
+For this reason, you are recommended to review the scope of the work
+that would be required in modifying the supplied X Protocol library
+before attempting to test X Protocol extensions.
+You can use the supplied X Protocol library as a framework,
+and develop new versions of routines which handle events and replies.
+.SK
+.H 1 "Source file libraries"
+This sections lists the contents of the principal libraries of
+source files used by many tests in the \*(xT.
+.H 2 "The \*(xT library"
+A library of common subroutines for the \*(xT
+has source in \fC$TET_ROOT/xtest/src/lib\fP.
+This is built automatically when building tests in the \*(xT.
+Should it be required to build it separately for any reason
+run the command.
+.cS
+cd $TET_ROOT/xtest/src/lib
+pmake install
+.cE
+The list of source files in this library,
+with a brief description of the contents of each file, is as follows:
+.VL 12 0
+.LI XTestExt.c
+.br
+If
+.SM XTESTEXTENSION
+is defined,
+this file contains routines to access the
+.SM XTEST
+extension in order to simulate device events and obtain information on the
+cursor attributes of windows.
+.P
+If
+.SM XTESTEXTENSION
+is not defined, dummy routines are used instead.
+.P
+If
+.SM XTESTEXTENSION
+is not defined, client-side functions
+previously in file XTestLib.c (now available in the
+.SM XTEST
+extension library)
+are still included.
+These are XTestDiscard() (to discard current request in request
+buffer) and XTestSetGContextOfGC() and XTestSetVisualIDOfVisual()
+(to set values in opaque Xlib data structures). These functions require
+access to data structures now in the internal Xlib header file
+.C Xlibint.h .
+.LI badcmap.c
+.br
+Create an invalid colourmap ID by creating a readonly colourmap
+of the default visual type.
+.LI badfont.c
+.br
+Return a bad font ID by loading a font and then unloading it.
+.LI badgc.c
+.br
+Return a bad GC id on display disp by creating a GC and
+invalidating it using the
+.SM XTEST
+extension library function
+XTestSetGContextOfGC.
+.LI badpixm.c
+.br
+Return a bad pixmap id on display disp by creating
+a pixmap and freeing it.
+.LI badvis.c
+.br
+Make a visual bad by using the
+.SM XTEST
+extension library function
+XTestSetVisualIDOfVisual.
+.LI badwin.c
+.br
+Return a bad window id on display disp by creating
+a window and destroying it.
+.LI bitcount.c
+.br
+Handle bits in words.
+.LI block.c
+.br
+Check whether process blocks when testing event handling functions.
+.LI buildtree.c
+.br
+Build a tree of windows specified by a list which determines position,
+size and parentage of each window.
+.LI checkarea.c
+.br
+Check pixels inside and/or outside an area of a drawable are set to given values.
+.LI checkevent.c
+.br
+Check two arbitrary events to see if they match, report
+an error if they don't.
+.LI checkfont.c
+.br
+Check returned font characteristics, properties, text extents and widths
+against those expected in the supplied test fonts.
+.LI checkgc.c
+.br
+Check GC components against expected values.
+.LI checkimg.c
+.br
+Check pixels inside and/or outside an area of an image are set to given values.
+.LI checkpixel.c
+.br
+Check specified pixels of a drawable are set to given values.
+.LI checktile.c
+.br
+Check that an area of a drawable is filled with a specified tile.
+.LI config.c
+.br
+Initialise the config structure by getting all the execution
+parameters.
+.LI crechild.c
+.br
+Create a mapped child window for a parent window, and wait for the
+child window to become viewable.
+.LI cursor.c
+.br
+Routines for accessing cursor information. This includes convenience functions
+for checking the cursor defined for a given window.
+These routines call those in XTestExt.c to use the
+.SM XTEST
+extension to access the cursor information.
+.LI delete.c
+.br
+Set the test result code for the current test purpose to
+.SM UNRESOLVED .
+.LI devcntl.c
+.br
+Routines for input device control. This includes convenience functions
+for pressing keys and buttons and remembering those pressed.
+These routines call those in XTestExt.c to use the
+.SM XTEST
+extension to simulate the required device events.
+.LI dset.c
+.br
+Set every pixel in a drawable to a specified value.
+.LI dumpimage.c
+.br
+Dump the contents of an image to a file.
+.LI environ.c
+.br
+Contains a test suite specific version of putenv() (which may not be available
+on POSIX.1 systems). This is required to set up the environment
+before some calls to tet_exec().
+.LI err.c
+.br
+Test error handler (installed when calling the function under test).
+Unexpected error handler (installed at all other times).
+I/O error handler (installed at all times).
+Obtain the error code and resource ID saved by the test error handler.
+.LI events.c
+.br
+Handle the serial fields of incoming requests.
+.LI ex_startup.c
+.br
+Generic startup routines required before executing the first test purpose
+and after executing the last test purpose.
+The routines
+.C exec_startup()
+and
+.C exec_cleanup()
+in this file should be called at the start and end of the
+.C main()
+function of each program executed via the TET function
+.C tet_exec() .
+.LI exposecheck.c
+.br
+Check that either enough expose events were received to
+restore the window, or that the window has been restored from backing
+store.
+.LI extenavail.c
+.br
+If
+.SM XTESTEXTENSION
+is defined, the function IsExtTestAvailable() returns True if the
+server extension
+.SM XTEST
+is available, otherwise it returns False.
+.P
+If
+.SM XTESTEXTENSION
+is not defined, the function IsExtTestAvailable() always returns False.
+.LI gcflush.c
+.br
+Flush the GC cache.
+.LI gcinclude.c
+.br
+Functions which are called from the code included to test the
+correctness of use of GC components by the drawing functions.
+.P
+The only function included at present is
+.C setfuncpixel() ,
+which finds the first pixel set in a drawable (this will vary depending on the
+drawing function).
+.LI getevent.c
+.br
+Check if there are events on the queue and if so return the
+first one.
+.LI getsize.c
+.br
+Get the size of a drawable. Just uses XGetGeometry but avoids all
+the other information that you get with that.
+.LI gettime.c
+.br
+Get the current server time. Use a property attached to the root window
+of the display called
+.SM XT_TIMESTAMP
+and replace it with 42 (32-bits).
+The PropertyNotify event that is generated supplies the time stamp returned.
+.LI iponlywin.c
+.br
+Create an input only window.
+.LI issuppvis.c
+.br
+The function
+.C issuppvis()
+takes a visual class as argument and returns true
+if such a class is supported by the server under test.
+This function uses the XGetVisualInfo() function rather than
+the user-supplied
+.SM XT_VISUAL_CLASSES
+parameter.
+.P
+The function
+.C visualsupported()
+takes a mask indicating a set of visuals, and returns
+a mask indicating the subset that is supported.
+If the mask is 0L then the mask shows all supported
+visuals.
+.P
+The function
+.C resetsupvis()
+takes a mask indicating a set of visuals. Subsequent calls to
+.C nextsupvis()
+will return the next supported visual specified in the mask and increment a
+counter.
+The function
+.C nsupvis()
+returns this counter.
+.LI linkstart.c
+.br
+Define global variables used by the TET which are required when
+linking test programs to produce a space-saving executable.
+.P
+When the space-saving executable is executed,
+the TET
+initialisation code in the library function
+.C linkstart.c
+determines which test set is required. This is done by matching \fCargv[0]\fP
+with the \fCname\fP elements in the array of
+.C linkinfo
+structures. The corresponding test functions specified by the
+\fCtestlist\fP
+element of the
+.C linkinfo
+structure are then executed.
+.LI lookupname.c
+.br
+Convert symbolic values from \*(xW header files to appropriate names.
+.LI makecolmap.c
+.br
+Make a colourmap for the screen associated with the default
+root window.
+.LI makecur.c
+.br
+Create a cursor that can be used within the test suite.
+The cursor is created using XCreateFontCursor. The shape
+chosen can be controlled through the configuration variable
+.SM XT_FONTCURSOR_GOOD .
+.LI makegc.c
+.br
+Make a GC suitable for use with the given drawable.
+.LI makeimg.c
+.br
+Creates a general purpose image that can be used within the
+test suite. The image is cleared to W_BG.
+.LI makepixm.c
+.br
+Creates a general purpose pixmap that can be used within the
+test suite. The pixmap is cleared to W_BG.
+.LI makeregion.c
+.br
+Creates a general purpose region that can be used within the
+test suite.
+.LI makewin.c
+.br
+Creates a general purpose windows that can be used within the
+test suite.
+.LI makewin2.c
+.br
+Creates windows corresponding to a particular area.
+.LI maxsize.c
+.br
+Obtain the number of cells in a colourmap.
+.LI nextvclass.c
+.br
+Functions to cycle through all the visual classes that are supposed to
+supported by the display/screen that is being tested.
+Note that these functions are only used in the tests for
+XMatchVisualInfo and XGetVisualInfo.
+.P
+The function
+.C initvclass()
+initialises the visual class table. The visual classes that are
+supported are supplied by the test suite user in the
+variable
+.SM XT_VISUAL_CLASSES ,
+together with the depths at which they are supported.
+.P
+The function
+.C resetvclass()
+resets the visual class table. Subsequent calls to
+.C nextvclass()
+obtain the next visual class and depth.
+The function
+.C nvclass()
+returns the size of the visual class table.
+.LI nextvinf.c
+.br
+Functions to cycle through all the visuals that are supported
+on the screen under test.
+These functions use the XGetVisualInfo() function rather than
+the user-supplied
+.SM XT_VISUAL_CLASSES
+parameter. If the parameter
+.SM XT_DEBUG_VISUAL_IDS
+is set to a non-empty string,
+only the visuals ID's in the string are used.
+.P
+The function
+.C resetvinf()
+obtains a list of all visuals supported for a particular screen.
+Subsequent calls to
+.C nextvinf()
+obtain the next visual.
+The function
+.C nvinf()
+returns the number of visuals.
+.LI nondepth1pix.c
+.br
+Obtain a pixmap of depth other than 1 if such a pixmap is supported.
+.LI notmember.c
+.br
+Returns a list of numbers that are not members of given list.
+(This is used to test assertions of the form "When an argument
+is other than X or Y, then a BadValue error occurs".
+.LI opendisp.c
+.br
+Open a connection to the server under test.
+.LI openfonts.c
+.br
+Open the xtest fonts, and place their ID's in the fonts array.
+.LI pattern.c
+.br
+Draw a pattern consisting of vertical bands on the specified drawable.
+.LI pfcount.c
+.br
+Functions which may take arguments which are set to the
+pass and fail counters in test set code created by
+.C mc .
+Calls to the
+.C pfcount
+functions are inserted in order to use the counters at least once,
+and so prevent
+.C lint
+reporting unwanted errors.
+.LI pointer.c
+.br
+Routines to move the pointer, and determine if the pointer has been moved.
+.LI regid.c
+.br
+Routines are provided to register resources created during a test purpose.
+Wherever possible, library functions register resources, and test purposes
+may do so directly if desired.
+Registered resources are then destroyed at the end of the test purpose.
+.LI report.c
+.br
+Reporting functions, which output test information messages to the TET
+journal file.
+These all use the TET reporting function
+.C tet_infoline() .
+.LI rpt.c
+.br
+Reporting functions, which output test information messages to the TET
+journal file, and additionally assign a test result code.
+These all use the TET reporting function
+.C tet_infoline() .
+.LI savimage.c
+.br
+The function
+.C savimage()
+returns a pointer to a saved image on a drawable using
+.C XGetImage .
+.P
+The function
+.C compsavimage()
+checks that the image currently on the drawable matches a saved image.
+.P
+The function
+.C diffsavimage()
+checks that the image currently on the drawable differs from a saved image.
+.P
+These functions are used where the precise pixels drawn cannot be
+determined in advance, but the test result may still be infered by
+image comparisons.
+.LI setline.c
+.br
+Convenience functions to set line width, cap style,
+line style and join style in a GC, using
+.C XChangeGC() .
+.LI settimeout.c
+.br
+The function
+.C settimeout()
+sets a timeout which causes the process to exit after a timeout. This
+should be done only in a child process of a test purpose created by
+.C tet_fork() .
+.P
+The function
+.C cleartimeout()
+clears a previously set timeout.
+.LI stackorder.c
+.br
+The function
+.C stackorder()
+uses
+.C XQueryTree()
+to determine the position of a window in the stacking order.
+.LI startcall.c
+.br
+The function
+.C startcall()
+checks for any outstanding unexpected X protocol errors,
+which might have been generated, for example, during the setup
+part of the test.
+A call to
+.C XSync()
+is made to achieve this.
+.P
+The function
+.C startcall()
+installs a test error handler in place of the unexpected X protocol
+error handler.
+.P
+The function
+.C endcall()
+checks for any X protocol errors caused by the
+function under test.
+A call to
+.C XSync()
+is made to achieve this.
+.P
+The function
+.C endcall()
+installs the unexpected X protocol
+error handler.
+.LI startup.c
+.br
+Generic startup routines called by TET before executing the first test purpose
+and after executing the last test purpose.
+.LI tpstartup.c
+.br
+Generic startup routines called by TET before executing each test purpose
+and after executing each test purpose.
+.LI verimage.c
+.br
+The function
+.C verifyimage()
+uses
+.C XGetImage()
+to obtain the contents of the specified drawable.
+This is then compared with the contents of a "known good image file".
+If there is a discrepancy,
+the image produced by the server is dumped to a file using
+.C dumpimage()
+together with the known good image.
+The image produced by the server and the known good image may be
+examined as described in the section in the
+"User Guide"
+entitled
+"Examining image files".
+.P
+If the execution configuration parameter
+.SM XT_DEBUG_NO_PIXCHECK
+is set to
+.C Yes ,
+the image checking is skipped in
+.C verifyimage() .
+.P
+If the execution configuration parameter
+.SM XT_SAVE_SERVER_IMAGE
+is set to
+.C Yes ,
+the image produced by the server is dumped to a file using
+.C dumpimage()
+(regardless of whether it matches the "known good image file").
+.P
+For more background on pixmap verification see the earlier section
+entitled "Creating test purposes which use pixmap verification".
+.LI winh.c
+.br
+Build a tree of windows to test event generation, propogation and delivery.
+.LI xthost.c
+.br
+Specifies operating system dependent data used by the access control list
+functions.
+This includes arrays of
+.C XHostAddress
+structures.
+These should be checked and if necessary edited refering to the
+section in the
+"User Guide"
+entitled
+"System dependent source files".
+.LI xtestlib.h
+.br
+This file contains definitions which are common to many of the
+source files in the \*(xT library, and it is included in those
+source files.
+.LI xtlibproto.h
+.br
+This file contains declarations and (if required by an
+.SM ANSI
+Standard-C compiler)
+function prototypes for all the functions in the source files
+in the \*(xT library.
+.LE
+.H 2 "The X Protocol library"
+A library of common subroutines for the \*(xP in the \*(xT
+has source in \fC$TET_ROOT/xtest/src/libproto\fP.
+This is built automatically when building tests in the \*(xT.
+Should it be required to build it separately for any reason
+run the command.
+.cS
+cd $TET_ROOT/xtest/src/libproto
+pmake install
+.cE
+The list of source files in this library,
+with a brief description of the contents of each file, is as follows:
+.VL 12 0
+.LI ClientMng.c
+.br
+Having established a client connection to the X server using the functions
+in ConnectMng.c, allocate a client data
+structure and fill in its display structure.
+.LI ConnectMng.c
+.br
+Establish a client connection to the X server.
+.LI DataMove.c
+.br
+Convert individual fields into format for sending to the X server.
+.LI DfltVals.c
+.br
+Obtain reasonable default values for contents of request structures.
+.LI Expect.c
+.br
+Check for the expected response (error, event, reply, or nothing)
+from the X server.
+.LI JustALink.c
+.br
+This file is a link to one of the files XlibWithXTest.c, XlibOpaque.c,
+or XlibNoXTest.c. The link is created when the X Protocol library
+is built, and the file used depends on the configuration parameter
+.SM XP_OPEN_DIS .
+.LI Log.c
+.br
+Log test results.
+.LI MakeReq.c
+.br
+Construct a request structure using the functions in DfltVals.c,
+which has reasonable default values so that it may be immediately sent
+to the X server using the functions in SendReq.c.
+.LI RcvErr.c
+.br
+.LI RcvEvt.c
+.br
+.LI RcvRep.c
+.br
+Unpack the response from the server into a structure (RcvErr.c for errors,
+RcvEvt.c for events, RcvRep.c for replies; these all use DataMove.c to do
+the unpacking).
+.LI ResourceMng.c
+.br
+Create a resource (e.g. atom, window) and store its resource ID
+in the client data structure.
+.LI SendEvt.c
+.br
+Pack an event structure into a request structure (only used by SendEvent
+protocol request).
+.LI SendReq.c
+.br
+Pack a request structure in correct format using the functions in DataMove.c
+and send to the X server.
+.LI SendSup.c
+.br
+Support routines for packing request structure.
+.LI ShowErr.c
+.br
+.LI ShowEvt.c
+.br
+.LI ShowRep.c
+.br
+.LI ShowReq.c
+.br
+.LI ShowSup.c
+.br
+Display contents of structures in nice human-readable form (ShowErr.c for
+errors, ShowEvt.c for events, ShowRep.c for replies, and ShowReq.c for
+requests, all of which call ShowSup.c support routines).
+.LI TestMng.c
+.br
+Manage the setup and closedown of the tests. This file includes definitions and
+initialisation of global variables (including TET configuration
+variables) and assigning test result codes.
+.LI TestSup.c
+.br
+Support routines for handling mapping state and event masks of windows.
+.LI Timer.c
+.br
+Set up a timer that will execute a certain routine on completion.
+.LI Utils.c
+.br
+Utilities for isolating operating system dependencies.
+.LI Validate.c
+.br
+Routines to check whether the server under test supports the feature
+being tested (eg. writable colour cells).
+.LI ValueListMng.c
+.br
+Modify the value lists at the ends of request structures.
+.LI XlibNoXTest.c
+.br
+This file contains functions which emulate the post R5 enhanced connection
+setup scheme. A connection can be established in client native or byte-swapped
+orientations, and (when testing XOpenDisplay) both valid and invalid
+byte orderings may be sent to the X server.
+The connection is made using operating system specific
+procedures which were developed in 4.2BSD environment, and may need
+modifications to work on other systems.
+.LI XlibOpaque.c
+.br
+This file contains portable functions to handle connection setup where
+the Xlib implementation does not support the post R5 enhanced connection
+setup scheme.
+The Xlib functions XOpenDisplay and ConnectionNumber are called here to
+obtain a connection using the client native byte orientation,
+and subsequent X Protocol requests are made using this connection.
+.LI XlibWithXTest.c
+.br
+This file contains portable functions to handle connection setup where
+the Xlib implementation supports the post R5 enhanced connection setup scheme.
+The enhancement involves using additional parameters to the
+Xlib function _XConnectDisplay() which allow a byte swapped connection to
+be established. Details of operating system specific connection setup
+procedures including networking are thus not needed in the X Protocol library.
+.LI XstIO.c
+.br
+Routines to handle protocol packet transmission and reception
+including fatal I/O errors.
+.LI delete.c
+.br
+Set the test result code for the current test purpose to UNRESOLVED.
+.LI linkstart.c
+.br
+Define global variables used by the TET which are required when
+linking test programs to produce a space-saving executable.
+.P
+When the space-saving executable is executed,
+the TET
+initialisation code in the library function
+.C linkstart.c
+determines which test set is required. This is done by matching \fCargv[0]\fP
+with the \fCname\fP elements in the array of
+.C linkinfo
+structures. The corresponding test functions specified by the
+\fCtestlist\fP
+element of the
+.C linkinfo
+structure are then executed.
+.LI startup.c
+.br
+Generic startup routines called by TET before executing the first test purpose.
+.LI tpstartup.c
+.br
+Generic startup routines called by TET before executing each test purpose.
+.LI DataMove.h
+.br
+This file contains the macros for byte swapping and word alignment.
+.LI XstlibInt.h
+.br
+This file contains definitions which are common to many of the
+source files in the X Protocol library, and it is included in those
+source files.
+.LI XstosInt.h
+.br
+This file contains definitions related to operating system functions
+which are common to many of the
+source files in the X Protocol library, and it is included in those
+source files.
+.LE
+.H 2 "The X test fonts library"
+A library of common subroutines defining the
+characteristics of the test fonts for the \*(xT
+has source in \fC$TET_ROOT/xtest/fonts\fP.
+This is built automatically when building tests in the \*(xT.
+Should it be required to build it separately for any reason
+run the command.
+.cS
+cd $TET_ROOT/xtest/fonts
+pmake install
+.cE
+The source files
+.C xtfont0.c
+to
+.C xtfont6.c
+contain definitions of
+.C XFontStruct
+structures named
+.C xtfont0
+to
+.C xtfont6
+which define the characteristics of the test fonts used by many of the
+text drawing functions.
+.SK
+.H 1 "Appendix A - reason codes for extended assertions"
+The reason code
+is a number between 1 and 6 (currently) and is used if
+and only if the category is B or D. This number corresponds to a reason
+from the following table which is coded into
+.C mc .
+.P
+The text of the
+reason will be printed with a result code UNTESTED if there
+is no >>CODE.
+.P
+1 - "There is no known portable test method for this assertion",
+.br
+2 - "The statement in the X11 specification is not specific enough to write a test",
+.br
+3 - "There is no known reliable test method for this assertion",
+.br
+4 - "Testing the assertion would require setup procedures that involve an unreasonable amount of effort by the user of the test suite.",
+.br
+5 - "Testing the assertion would require an unreasonable amount of time or resources on most systems",
+.br
+6 - "Creating a test would require an unreasonable amount of test development time."
+.SK
+.H 1 "Appendix B - commands for fonts and symbols in assertions"
+In the text of assertions there should be no in-line nroff font changes.
+This is because the font names may need to be changed on some systems.
+.P
+As an alternative, a number of macros have been defined which are understood
+by the utilities developed during stage two of the project. The definition
+of these macros uses appropriate fonts to correspond closely with those
+used by the \*(xW documentation.
+.AL
+.LI
+Arguments to a function should be written:
+.P
+\&.A window
+.LI
+Function names should be written:
+.P
+\&.F XAllocColorCells
+.P
+(When the special symbol xname is used it can be left as it is, so
+the .F form only needs using when refering to some other function. We
+have avoided cross references to other functions where possible).
+.LI
+Structure members should be written:
+.P
+\&.M override_redirect
+.P
+.LI
+Symbols should be written:
+.P
+\&.S InputOutput
+.P
+This is used for everything that is in the courier font in the \*(xW
+documentation and
+which is not a function name or structure member.
+This includes the #define constants in the headers and typedef'ed names.
+.P
+.cS
+Eg.
+ BadColor
+ IsViewable
+ DirectColor
+ Visual
+ Display
+ MotionNotifyEvent
+.cE
+.LE
+.P
+Punctuation separated by white space from the argument will be
+in the original font, as in mm.
+.P
+\&.A InputOutput ,
+.br
+\&.A InputOnly .
+.P
+.DL
+.LI
+There is a .SM macro, as in mm. Any word that
+is uppercase only should use it to obtain a reduced point size.
+.P
+\&.SM DEBUG
+.br
+\&.SM MIT
+.LE
+.SK
+.H 1 "Appendix C - Included error assertions"
+The .ER keyword is described in the section entitled
+"Included errors - .ER".
+.P
+This appendix gives the names the files which are included when this
+keyword is used with the supported arguments,
+and shows the text of the assertions in those files.
+.P
+All the files from which included tests are stored are located
+in the directory \fC$TET_ROOT/xtest/lib/error\fP.
+.P
+The names of the files which are included, and the text of the assertion
+contained in the file, are specified in the following list:
+.VL 8 0
+.LI "Access grab"
+.br
+File included: EAcc1.mc
+.br
+Assertion text:
+.eS
+When an attempt to grab a key/button combination already
+grabbed by another client is made, then a BadAccess error
+occurs.
+.eE
+.LI "Access colormap-free"
+.br
+File included: EAcc2.mc
+.br
+Assertion text:
+.eS
+When an attempt to free a colormap entry not allocated by
+the client is made, then a BadAccess error occurs.
+.eE
+.LI "Access colormap-store"
+.br
+File included: EAcc3.mc
+.br
+Assertion text:
+.eS
+When an attempt to store into a read-only or an unallocated
+colormap entry is made, then a BadAccess error occurs.
+.eE
+.LI "Access acl"
+.br
+File included: EAcc4.mc
+.br
+Assertion text:
+.eS
+When an attempt is made to modify the access control list
+from a client that is not authorised in a server-dependent
+way to do so, then a BadAccess error occurs.
+.eE
+.LI "Access select"
+.br
+File included: EAcc5.mc
+.br
+Assertion text:
+.eS
+When an attempt to select an event type is made, which at
+most one client can select, and another client has already
+selected it then a BadAccess error occurs.
+.eE
+.LI "Alloc"
+.br
+File included: EAll.mc
+.br
+Assertion text:
+.eS
+When the server fails to allocate a required resource, then
+a BadAlloc error occurs.
+.eE
+.LI "Atom [ARG1] [ARG2] ..."
+.br
+File included: EAto.mc
+.br
+Assertion text:
+.eS
+When an atom argument does not name a valid Atom [, ARG1] [or
+ARG2], then a BadAtom error occurs.
+.eE
+.LI "Color"
+.br
+File included: ECol.mc
+.br
+Assertion text:
+.eS
+When a colourmap argument does not name a valid colourmap,
+then a BadColor error occurs.
+.eE
+.LI "Cursor [ARG1] [ARG2] ..."
+.br
+File included: ECur.mc
+.br
+Assertion text:
+.eS
+When a cursor argument does not name a valid Cursor [, ARG1] [or
+ARG2], then a BadCursor error occurs.
+.eE
+.LI "Drawable [ARG1] [ARG2] ..."
+.br
+File included: EDra.mc
+.br
+Assertion text:
+.eS
+When a drawable argument does not name a valid Drawable,
+[ARG1] [or ARG2], then a BadDrawable error occurs.
+.eE
+.LI "Font bad-font"
+.br
+File included: EFon1.mc
+.br
+Assertion text:
+.eS
+When a font argument does not name a valid font, then a
+BadFont error occurs.
+.eE
+.LI "Font bad-fontable"
+.br
+File included: EFon2.mc
+.br
+Assertion text:
+.eS
+When the font argument does not name a valid GContext or
+font resource, then a BadFont error occurs.
+.eE
+.LI "GC"
+.br
+File included: EGC.mc
+.br
+Assertion text:
+.eS
+When the GC argument does not name a defined GC, then a
+BadGC error occurs.
+.eE
+.LI "Match inputonly"
+.br
+File included: EMat1.mc
+.br
+Assertion text:
+.eS
+When a drawable argument is an InputOnly window then a
+BadMatch error occurs.
+.eE
+.LI "Match gc-drawable-depth"
+.br
+File included: EMat2.mc
+.br
+Assertion text:
+.eS
+When the graphics context and the drawable do not have the
+same depth, then a BadMatch error occurs.
+.eE
+.LI "Match gc-drawable-screen"
+.br
+File included: EMat3.mc
+.br
+Assertion text:
+.eS
+When the graphics context and the drawable were not created
+for the same root, then a BadMatch error occurs.
+.eE
+.LI "Match wininputonly"
+.br
+File included: EMat4.mc
+.br
+Assertion text:
+.eS
+When the window argument is an InputOnly window then a
+BadMatch error occurs.
+.eE
+.LI "Name font"
+.br
+File included: ENam1.mc
+.br
+Assertion text:
+.eS
+When the specified font does not exist, then a BadName error
+occurs.
+.eE
+.LI "Name colour"
+.br
+File included: ENam2.mc
+.br
+Assertion text:
+.eS
+When the specified colour does not exist, then a BadName
+error occurs.
+.eE
+.LI "Pixmap [ARG1] [ARG2] ..."
+.br
+File included: EPix.mc
+.br
+Assertion text:
+.eS
+When a pixmap argument does not name a valid Pixmap [, ARG1] [or
+ARG2], then a BadPixmap error occurs.
+.eE
+.LI "Value ARG1 VAL1 [VAL2] ..."
+.br
+File included: EVal.mc \(dg
+.br
+Assertion text:
+.eS
+When the value of ARG1 is other than VAL1 [or VAL2], then a
+BadValue error occurs.
+.eE
+.P
+.S -1
+\(dg - the assertion text is not in the included file, but is
+inserted directly by
+.C mc .
+.S
+.LI "Value ARG1 mask VAL1 [VAL2] ..."
+.br
+File included: EVal.mc \(dg
+.br
+Assertion text:
+.eS
+When the value of ARG1 is not a bitwise combination of VAL1
+[or VAL2], then a BadValue error occurs.
+.eE
+.P
+.S -1
+\(dg - the assertion text is not in the included file, but is
+inserted directly by
+.C mc .
+.S
+.LI "Window [ARG1] [ARG2] ..."
+.br
+File included: EWin.mc
+.br
+Assertion text:
+.eS
+When a window argument does not name a valid Window [, ARG1] [or
+ARG2], then a BadWindow error occurs.
+.eE
+.LE
+.SK
+.H 1 "Appendix D - \fCmc\fP utility"
+.B Usage
+.cS
+mc [-a a_list] [-o <output-file>] [-l] [-m] [-s] [-p] [<input-file>]
+.cE
+The
+.C mc
+utility
+outputs a C source file containing tests specified in the input
+file
+.C <input-file> ,
+which must be a dot-m file which has the format specified
+in the section entitled "Source file syntax".
+.P
+If no
+.C <input-file>
+is specified, the input is taken from standard input.
+Multiple input files
+can be processed by the utility, but the overall syntax must still conform
+to that defined in the section entitled "Source file syntax".
+A consequence of this is that you cannot specify another title section
+for a different function
+and expect to output tests for more than one function simultaneously.
+Limited diagnostics are
+given if the file does not have the required syntax. By default, the
+C source file is written to the standard output stream.
+.P
+More details of the formats of the C source files produced by
+.C mc
+are given in the section entitled "Source file formats".
+.P
+.B Options
+.VL 5 0
+.LI "\fC-a a_list\fP"
+.br
+This permits the specification of a list of assertions of the form
+.C n1-m1,n2-m2,...
+to be output. Test code will only be output corresponding to the tests
+in the specified ranges.
+.LI "\fC-o output-file\fP"
+.br
+This sends the output to the file
+.C <output-file>
+instead of the standard output stream.
+.LI \fC-l\fP
+.br
+This option outputs a C source file containing tests with modified
+startup code which allows the source code to be compiled and linked into
+a space-saving executable file. The format of these files
+is described in the section entitled
+"C files for linked executable - \fClink.c\fP".
+.LI \fC-m\fP
+.br
+This option outputs a C source file containing tests for the
+macro version of the function specified in the title section of the
+dot-m file. The format of these files
+is described in the section entitled
+"C files for standalone executable in macro tests - \fCMTest.c\fP".
+.P
+The macro name is set to the
+.C <macroname>
+argument of the >>SET macro option - if there is no >>SET macro
+option in the file, or no argument specified, the default is the
+.C function
+argument in the >>TITLE keyword,
+with the leading letter `X' removed.
+.LI \fC-s\fP
+.br
+This option outputs a test strategy from the dot-m file
+as a C source code comment block between the assertion and the
+code. The test strategy is derived from the corresponding
+strategy section in the dot-m file.
+.LI \fC-p\fP
+.br
+This causes additional output including indicators of line number
+in the original dot-m file (where possible).
+This means that any diagnostics produced by
+.I cc(1)
+or
+.I lint(1)
+will refer to the line numbers in the original dot-m file rather
+than the C source file.
+.LE
+.SK
+.H 1 "Appendix E - \fCmmkf\fP utility"
+.B Usage
+.cS
+mmkf [-o <output-file>] [-s sections] [<input_file>]
+.cE
+The
+.C mmkf
+utility
+outputs a Makefile corresponding to the specified input file
+.C <input-file> ,
+which must be a dot-m file which has the format specified
+in the section entitled "Source file syntax".
+The Makefile can build all the C source files that can be
+output by
+.C mc
+from the input file
+.C <input-file> .
+.P
+If no
+.C <input-file>
+is specified, the input is taken from standard input.
+Multiple input files
+can be processed by the utility, but the overall syntax must still conform
+to that defined in the section entitled "Source file syntax".
+A consequence of this is that you cannot specify another title section
+for a different function
+and expect to output Makefiles for more than one function simultaneously.
+Limited diagnostics are
+given if the file does not have the required syntax. By default, the
+Makefile is written to the standard output stream.
+.P
+More details of the formats of the Makefiles produced by
+.C mmkf
+are given in the sub-section entitled "Makefile" in the section entitled
+"Source file formats".
+.P
+.B Options
+.VL 5 0
+.LI "\fC-o output-file\fP"
+.br
+This sends the output to the file
+.C <output-file>
+instead of the standard output stream.
+.LI "\fC-s sections\fP"
+.br
+This option enables output of certain optional sections of the
+Makefile. By default, output of all these sections is enabled. There
+is no reason why you should need to use this option with the
+current version of the \*(xT.
+.P
+The
+.C sections
+argument is a character string which may contain the key letters
+.C l ,
+.C L ,
+.C m
+and
+.C p .
+If these characters are included, the specified sections of the Makefile
+are then output.
+.TS
+box center;
+l | l.
+Key Optional
+letter section
+_
+l Targets for linked executable
+L Targets for libraries
+m Targets for linting and cleaning
+p Targets for building known good image files
+.TE
+.LE
+.SK
+.H 1 "Appendix F - \fCma\fP utility"
+.B Usage
+.cS
+ma [-a a_list] [-o <output-file>] [-h] [-s] [-p] [-m] [<input-file>]
+.cE
+The
+.C ma
+utility
+outputs a file containing a list of assertions in
+.I nroff(1)
+format (requiring no macros other than those supplied in file
+\fCmaheader.mc\fP).
+The assertions are specified in the input file
+.C <input-file> ,
+which must be a dot-m file which has the format specified
+in the section entitled "Source file syntax".
+.P
+If no
+.C <input-file>
+is specified, the input is taken from standard input.
+Multiple input files
+can be processed by the utility, but the overall syntax must still conform
+to that defined in the section entitled "Source file syntax".
+A consequence of this is that you cannot specify another title section
+for a different function
+and expect to output assertions for more than one function simultaneously.
+Limited diagnostics are
+given if the file does not have the required syntax. By default, the
+assertion list is written to the standard output stream.
+.P
+More details of the format of the assertion list produced by
+.C ma
+are given in the sub-section entitled "Formatting assertions"
+in the section entitled
+"Source file formats".
+.P
+.B Options
+.VL 5 0
+.LI "\fC-a a_list\fP"
+.br
+This permits the specification of a list of assertions of the form
+.C n1-m1,n2-m2,...
+to be output. Assertions will only be output corresponding to the tests
+in the specified ranges.
+.LI "\fC-o output-file\fP"
+.br
+This sends the output to the file
+.C <output-file>
+instead of the standard output stream.
+.LI \fC-h\fP
+.br
+The macros required for formatting the assertions are included
+at the start of the output stream. These are copied from the file
+\fCmaheader.mc\fP.
+.P
+By default, the macros are not copied to the output stream.
+.LI \fC-s\fP
+.br
+If this option is specified, and the
+.C -h
+option is specified, the line
+.cS
+\&.so head.t
+.cE
+will be output at the start of the output stream.
+.P
+This option is not intended for general use - it was used when
+distributing assertions in compact form for external review.
+.LI \fC-p\fP
+.br
+The macros \fC.NS\fP and \fC.NE\fP
+will be output before and after each line in the dot-m file which is a
+comment (commencing with >>#). By default, dot-m file comments are not output.
+The macros \fC.NS\fP and \fC.NE\fP are defined in \fCmaheader.mc\fP;
+they cause the dot-m file comment lines to be printed in italic font by
+.I nroff(1) .
+.P
+This option is not intended for general use - it was used when
+reviewing assertions before delivery.
+.LI \fC-m\fP
+.br
+This option outputs assertions for the macro version of the function
+specified in the title section of the dot-m file.
+.P
+The macro name is set to the
+.C <macroname>
+argument of the >>SET macro option - if there is no >>SET macro
+option in the file, or no argument specified, the default is the
+.C function
+argument in the >>TITLE keyword,
+with the leading letter `X' removed.
+.LE
+.TC
diff --git a/xc/test/xsuite/xtest/doc/relnotes.mm b/xc/test/xsuite/xtest/doc/relnotes.mm
new file mode 100644
index 000000000..3ea01eeb1
--- /dev/null
+++ b/xc/test/xsuite/xtest/doc/relnotes.mm
@@ -0,0 +1,599 @@
+.\" $XConsortium$
+.de TP
+.sp 1
+.tl \\*(}t
+.if e 'tl \\*(}e
+.if o 'tl \\*(}o
+.sp 1
+..
+.VM 0 3
+.de )k
+..
+'\"
+'\" Start and end of a user-typed display
+'\"
+.de cS
+.DS I
+.ft C
+.ps -2
+..
+.de cE
+.ps +2
+.ft R
+.DE
+..
+'\" # Courier
+.de C
+\fC\\$1\fP\\$2\fC\\$3\fP\\$4\fC\\$5\fP\\$6
+..
+.ds HP 16 16 14
+.ds rC "UniSoft Ltd.
+.ds xW "X\ Window System
+.ds xT "X\ test suite
+.ds cH "0"
+.nr Hc 2
+.nr Hs 4
+.nr HF 3 3 3 3 3
+.ds HP 14 14 14
+.ds dD Release Notes for the X\ test suite - release 1.1
+.ds dN "\s-1MIT\s0-3-00.3
+.HU " "
+.PH "'\s14Xlib and X\ Protocol test suite''\*(dN'"
+.EH "'\*(dD '''"
+.OH "'\*(dD '''"
+.PF "'May 15, 1992''Page \\\\nP'"
+.EF "''\s12\*(rC''"
+.OF "''\s12\*(rC''"
+.S 18
+.HU "Release Notes for the X\ test suite - release 1.1"
+.S 12
+.ds HP 14 14 14
+.nr H1 0
+.nr Hc 1
+.SP 2
+.HU "Contents"
+This release note describes the contents of release 1.1
+of the revised \*(xT which has been produced by UniSoft under contract to MIT.
+.P
+This release tests sections 2 to 10
+of the
+\fIXlib: C\ Language X\ Interface
+(MIT\ X\ Consortium\ Standard - X\ Version\ 11, Release 4)\fR\*F.
+.FS
+The \*(xW is a trademark of the Massachusetts Institute of Technology.
+.br
+\*(xW Version\ 11 Release\ 4 is abbreviated to X11R4 in this document.
+.br
+\*(xW Version\ 11 Release\ 5 is abbreviated to X11R5 in this document.
+.FE
+It also tests parts of the
+\fIX\ Window\ System\ Protocol
+(MIT\ X\ Consortium\ Standard - X\ Version\ 11)\fR
+where these cannot be infered from tests at the Xlib level.
+.P
+The revised \*(xT may be used to test later versions of X11
+which are compatible with the X11R4 standards. The
+test suite is known to build correctly using the X11R5 Xlib distributed by MIT.
+.P
+This release includes fixes to all bugs submitted on the beta release
+and gamma release up to May 1, 1992.
+The list of bugs fixed is shown in appendices C and D.
+.P
+Appendix A compares this release of the \*(xT with earlier releases from
+UniSoft, and is intended primarily for reviewers of earlier releases.
+.HU "Distribution"
+This release is available from MIT.
+.P
+This release is available to members
+of the X\ Consortium via xftp/xuucp to expo as the file
+.cS
+ /docs/xtest/stage3/rel1.1.tar.Z
+.cE
+.P
+Contact Bob Scheifler (rws@expo.lcs.mit.edu) if you cannot obtain it in
+that way or if you require more details.
+.HU "Submitting bug reports"
+Please submit bug reports on this release
+to MIT using the email address xtest-bugs@expo.lcs.mit.edu.
+Use the report template provided in the file xtest/doc/bug-report.
+.P
+UniSoft will continue to provide support for the \*(xT release 1.1 for MIT
+until June 29th, 1992. Until then,
+UniSoft intends to fix genuine defects in this release as
+defined in the Project Specification dated March 1990.
+Fixes to genuine defects will be made available to MIT in an update via email
+on June 29th, 1992.
+.HU "Target execution environments"
+The software was developed on a DECstation 3100 running ULTRIX\*F
+.FS
+ULTRIX, DEC, and DIGITAL are registered trademarks of Digital
+Equipment Corporation.
+.FE
+4.2a,
+and a Sequent
+.SM DYNIX
+V3.0.14 system.
+It is also known to compile and run on a HP-UX\*F
+.FS
+HP-UX is a registered trademark of Hewlett Packard Corporation.
+.FE
+version 7.0
+system, and on a SPARCstation running SunOS\*F
+.FS
+SunOS is a trademark of SUN Microsystems, Inc.
+.FE
+release 4.1.1.
+.P
+The main portability limitations occur in the
+.SM TET
+which is described further below. This is because the
+.SM TET
+was originally developed to run on systems which are POSIX.1\*F
+.FS
+IEEE Std 1003.1-1990, \fIPortable Operating System Interface for
+Computer Environments\fR
+.FE
+compliant.
+.P
+The aim is that the \*(xT will run without
+code modifications on BSD4.2 systems, UNIX\*F
+.FS
+UNIX is a registered trademark of UNIX System Laboratories, Inc. in
+the U.S. and other countries.
+.FE
+System V (Release 3 and 4)
+and POSIX.1 compliant systems. During development of the revised \*(xT,
+it was decided that since there are so many variants of the aforementioned
+systems,
+the aim should be to enable the test suite to execute without modification
+on platforms on which X11R4 executes without modification (ie. those
+for which there exist \fCconfig\fP files).
+.P
+To enable the \*(xT to build easily on
+BSD4.2 systems, a portability library has been developed which contains
+POSIX.1 functions not present on vanilla BSD4.2 systems. The
+contents and use of this library are described further in the User Guide.
+.P
+Beyond this, variants of the aforementioned systems may require
+some porting effort dependent on the number of commonly supported functions
+which are absent in a particular implementation.
+.HU "Status of the Test Environment Toolkit (\s-1TET\s0)"
+.AL
+.LI
+The \*(xT includes a copy of
+.SM TET
+version 1.9 with a small number of changes described below.
+.LI
+The supplied version of
+.SM TET
+includes fixes to four bugs reported since the
+.SM TET
+1.9 release.
+.LI
+The Makefiles supplied with
+.SM TET
+1.9 have been modified slightly to use the build configuration
+scheme used by the \*(xT.
+This reduces the need to edit Makefiles to modify configuration variables
+when building the
+.SM TET.
+.LI
+You should only refer to the instructions in the User Guide for the \*(xT
+for details of installation of the
+.SM TET .
+.P
+For more complete information on the features of the \s-1TET\s0, you can format
+and print the on-line documentation for the
+.SM TET
+(see "\s-1TET\s0 Documentation").
+.LI
+It is intended that the \*(xT should work in conjunction with
+future versions of the
+.SM TET
+later than 1.9.
+.P
+You can obtain the latest released version by
+sending electronic mail to infoserver@xopen.co.uk. A message body of
+.cS
+request: tet
+topic: index
+request: end
+.cE
+will obtain the index of files available for the
+.SM TET .
+.LE
+.HU "Issues identified during pre-release testing"
+.AL
+.LI
+A BadAccess error may be reported by the touch tests for the X Protocol
+requests ChangeHosts
+and SetAccessControl if you have not been able to set up the X\ server so
+that the client can change the access control list, and enable/disable
+access control.
+.P
+Some X servers now support an option -ac,
+which disables host-based access control mechanisms.
+Using this option will circumvent the problem.
+.LI
+When using the
+.SM TET
+to build the \*(xT in space-saving mode, warning messages may be given
+indicating that output from the build process has been truncated. This occurs
+because the Makefiles used in the build process include unusually long lines.
+These messages are not serious - the output is not lost but is
+split over several lines.
+.LE
+.HU "Documentation for release 1.1"
+The following documentation is provided for release 1.1 of the \*(xT.
+.P
+If you have already used these documents with the beta or gamma release,
+you only need to refer to the
+changed sections (described in appendix A).
+.P
+Further details, including instructions for formatting and printing
+the files on the release media, are given in the file xtest/doc/README.
+.AL
+.LI
+The User Guide
+gives enough information to enable an experienced test suite user,
+(not necessarily familiar with the \*(xW) to configure, build and
+execute the \*(xT, and analyse the results produced.
+.P
+You can find the source of the User Guide
+in the file xtest/doc/user_guide.mm on the release media, and in PostScript
+form in file xtest/doc/user_guide.ps.
+.LI
+The Programmers Guide
+gives enough information to enable an experienced programmer
+familiar with the \*(xW to modify or extend the \*(xT.
+.P
+You can find the source of the Programmers Guide
+in the file xtest/doc/prog_guide.mm on the release media, and in PostScript
+form in file xtest/doc/prog_guide.ps.
+.LE
+.HU "TET Documentation"
+You need only refer to the instructions in the
+User Guide for the \*(xT for details of installation and usage of the
+.SM TET .
+.P
+For more background information on the features and scope of the
+.SM TET ,
+you can format and print the following items of documentation which are
+part of the
+.SM TET .
+.P
+Any conflict between this documentation and the User Guide for the \*(xT is
+unintentional. You should assume the User Guide is correct in case of conflict,
+because it has been checked against the \*(xT.
+.AL
+.LI
+The release note for
+.SM TET
+1.9 is supplied in the file
+tet/doc/posix_c/rel_note.mm on the release media, and in PostScript
+form in file tet/doc/posix_c/rel_note.ps.
+.P
+To format rel_note.mm, you require the utilities tbl,
+and nroff/troff with the mm macros.
+.LI
+A manual page for the tcc utility is provided in file
+tet/doc/posix_c/tcc.1.
+.P
+To format the man page, you require the utility
+nroff/troff with the man macros.
+.LE
+.HU "Setting up your X\ server"
+Your attention is drawn to section 7.1 of the User Guide entitled
+"Setting up your X\ server". You should follow the guidelines in section
+7.1.1 to obtain reliable, repeatable results against your X\ server,
+when running formal verification tests.
+.P
+It is also important to ensure that your X\ server is running no other clients
+before starting formal verification tests. This is because some test programs
+(for example, those which enable access control) may interfere with later
+tests unless the X\ server resets in between. To ensure the X\ server resets
+after each test program, make sure you are not running any other clients
+at the time.
+.SK
+.H 1 "Appendix A - changes from previous releases"
+.HU "Changes since the gamma release"
+The following features have changed since the gamma release of the
+\*(xT.
+.AL
+.LI
+A number of changes have been made to fix bugs reported in the beta and
+gamma releases.
+.P
+27 bug reports were received against the beta release
+up to May 1, 1992.
+.br
+All of these are resolved, and these are listed in appendix C.
+.P
+21 bug reports were received against the gamma release
+up to May 1, 1992.
+.br
+All of these are resolved, and these are listed in appendix D.
+.LI
+The name of the execution configuration parameter
+.SM XT_HOSTNAME
+has changed to
+.SM XT_DISPLAYHOST
+to avoid confusion with the build configuration parameter
+.SM XTESTHOST .
+.LI
+The
+.C -y
+option to the
+.C tcc
+utility
+is now mentioned in the User Guide for the \*(xT. This enables the user to
+build, execute or clean only the test cases matching a specified pattern from a
+.SM TET
+scenario file.
+.LI
+This release is a completely separate release from the
+snapshot, alpha, beta and gamma releases,
+and you should not attempt to
+install it over the top of
+previous releases, or to use it with any files supplied in the
+previous releases.
+.LE
+.HU "New features since beta release"
+The following features, which were first available in
+the gamma release, are also available in release 1.1 of the \*(xT.
+.AL
+.LI
+There are a number of enhanced tests
+making use of the
+.SM XTEST
+extension. The list of assertions for which we have provided enhanced
+tests is in appendix B.
+.P
+Refer to the User Guide for information on how to build and run these
+tests correctly.
+The changes are in sections 2.2, 3.3.5
+.SM ( SYSLIBS ),
+3.3.6
+.SM ( DEFINES ),
+and 7.2.2
+.SM ( XT_EXTENSIONS ).
+.LI
+There is now an option
+.C -s
+to the
+.C mc
+utility which will cause the test strategy to be output as a C source
+file comment between the assertion and the test code.
+.LI
+There are summaries of the utilities
+.C mc ,
+.C mmkf
+and
+.C ma
+which are in separate pages of the appendices to the Programmers Guide.
+.LE
+.HU "New features since alpha release"
+The following features, which were first available in
+the beta release, are also available in release 1.1 of the \*(xT.
+.AL
+.LI
+There are a number of new execution configuration parameters which are
+described in the User Guide. In particular, it is now possible to
+specify a delay to allow time for the X\ server to reset.
+This is used by the test
+suite on startup of each test set and in other places where a server
+reset is expected following the shutdown of the last client.
+.LI
+There are now three source files which provide alternative ways to build the
+code for making connections to the X\ server when building the
+X\ Protocol library.
+These are documented in the description of the build configuration
+parameter
+.SM XP_OPEN_DIS .
+.P
+None of these files makes any assumptions about the contents of the
+Display structure; this had caused problems building the alpha release.
+.LI
+The effects of drawing in the root window using subwindow-mode of
+IncludeInferiors is now tested for all relevant graphics functions.
+.LI
+Some tests which were thought to be untestable during
+stage two have now been reviewed as a result of feedback received
+from alpha sites. In particular, tests are now provided for
+assertions 3, 4 and 5 for XChangePointerControl, and assertion 19 for
+XCloseDisplay.
+.LE
+.HU "Changes since the alpha release"
+The following features have changed since the alpha release of the
+\*(xT.
+.AL
+.LI
+A large number of changes have been made to fix bugs reported in the
+alpha release.
+.P
+In total, 116 bugs reports were reported against the alpha release.
+Out of these, 113 are resolved. The remaining
+three bug reports are outstanding only in respect of requested
+enhancements.
+.LI
+All bugs reported against snapshot releases have now been resolved.
+.LI
+A number of minor improvements have been made to both the software and
+documentation following the reviews conducted by alpha sites.
+.P
+Improvements were suggested both during the stage two review meeting
+and after the meeting.
+.LI
+In the alpha release were a number of tests which printed the
+values of various screen and display
+parameters, and expected the user to verify these by inspection of the
+journal file. These were known as FIP tests.
+These tests have been modified to automatically
+compare the values returned from
+the X\ server against execution configuration parameters. Thus, there are
+no FIP tests in this release.
+.LI
+A number of the assertions for the X\ Protocol have been reclassified as
+extended assertions since they cannot be portably tested. This affects
+assertion 2 for OpenDisplay (invalid byte-orientation). This
+cannot be tested when XOpenDisplay is used to make connections, since the
+Xlib function always creates valid connections.
+.P
+Also affected are the assertions which
+state that a BadLength error occurs when the request length exceeds the maximum
+request length accepted by the X\ server. This is because the maximum
+request length accepted may be greater than or equal to all representable
+request lengths.
+.LI
+In this release, only the dot-m files are supplied for each test set.
+The Makefiles and dot-c files, supplied in the alpha release, are not
+supplied, but are made automatically when the release is built. This is
+mainly to save space in the distribution. Should you need to remake these
+at any time, consult the Programmers Guide.
+.LE
+.HU "Changes from approved assertions"
+There have been some changes to the wording of the assertions
+since their approval during stage two of the project.
+.P
+Changes have been made where statements were made in assertions that are
+erroneous but were not picked up during internal or external review.
+.P
+Where assertions have been modified since the end of the
+external review, the original wording has been
+retained in the dot-m file for comparison and is commented out.
+.P
+We have resisted minor wording changes that would not affect the
+test strategies.
+.P
+Assertions added during the review periods are in a
+logical place (rather than necessarily at the end of file).
+.P
+The effect of this is that the tests in Test.c will be a different
+order to the assertions in the emailed distributions where assertions
+were inserted during the review period.
+.HU "Classification of assertions"
+As planned, we have classified the assertions into POSIX assertion
+categories A, B, C and D. These categories are explained further in the
+"Programmers Guide".
+.P
+As predicted during the assertion reviews, we have classified a number
+of assertions in the "def" category. This is explained further in the
+"Programmers Guide". These are assertions for which an identical
+test elsewhere already fully tests the assertion.
+Altogether we have classified 140 "def" assertions out of 2732 assertions
+which are test set specific. There are a further 17 "def" assertions
+out of the 89 generic assertions for GC components. The GC assertions are
+included in many of the tests which use GC components.
+.P
+Many of the "def"
+assertions occur in the graphics tests (particularly those
+associated with text handling) where the test for the
+first assertion draws text, or obtains font information, using each test font.
+The test fonts contain characters which are adequate to
+fully test all the remaining assertions for the function under test,
+so it is not possible to test those assertions any further.
+.SK
+.H 1 "Appendix B - list of extended assertions now tested"
+The following list shows the extended assertions produced during stage two
+of the project for which we have now provided upgraded tests using the
+.SM XTEST
+extension. In total, there are 160 new tests.
+.P
+Six of these assertions can be tested
+without use of the extension, so we have reclassified them as base
+assertions (category A or C).
+Where there have been changes, the new categories are shown in
+brackets in the table below.
+.TS
+box, center;
+l | l.
+Test set Extended assertions
+_
+CH03/chngwdwatt 11,20
+CH03/crtsmplwdw 8
+CH03/crtwdw 18
+CH06/dfncrsr 1,2,3,4
+CH06/undfncrsr 1,2
+CH07/allwevnts 5,8,10-27
+CH07/chngactvpn 3
+CH07/grbbttn 1-31
+CH07/grbky 1-9
+CH07/grbkybrd 3,5-12,17(A)
+CH07/grbpntr 11-15,20
+CH07/gtmdfrmppn 2
+CH07/gtpntrmppn 1,2
+CH07/qrykymp 1
+CH07/stinptfcs 2-4,9(A)
+CH07/stmdfrmppn 6
+CH07/stpntrmppn 3,5
+CH07/ungrbbttn 1-4
+CH07/ungrbky 1-4
+CH07/ungrbkybrd 1
+CH08/bttnprss 1-2,4-12
+CH08/bttnrls 1-9
+CH08/entrntfy 6(C),13(C)
+CH08/kyprss 1-9
+CH08/kyrls 1-9
+CH08/lvntfy 6(C),13(C)
+CH08/mtnntfy 3-10,14,18-19
+.TE
+.SK
+.H 1 "Appendix C - list of resolved bugs on beta release"
+.cS
+.ps -2
+0206:Subject: tcc: unterminated string literal in scenario.c
+0207:Subject: XTestLib.c: needs Xlibint.h
+0208:Subject: src/libproto: cross-device link
+0209:Subject: sub-processes need environment to do authorization
+0210:Subject: exec_startup continues test when XOpenDisplay fails
+0211:Subject: Font compiler script "fcomp" used /bin/ksh, not /bin/sh.
+0212:Subject: tetclean.cfg doesn't specify SHELL variable
+0213:Subject: stclsshnt: incorrect type
+0214:Subject: stwmprprts: incorrect type
+0215:Subject: tet: error building tcc with ANSI C compiler
+0216:Subject: build: tetbuild.cfg could have sample config parameters for AIXV3
+0217:Subject: CH08/gtmtnevnts: execution stops
+0218:Subject: crtpxmpfrm 2: assertion and code check for wrong error
+0219:Subject: libproto: Allocatable() uses wrong macro
+0220:Subject: XK_script_switch is not a good misc. function key.
+0221:Subject: Use of zero width lines in CH05/stbg and CH05/ststt
+0222:Subject: BadLength problems in src/libproto/SendSup.c
+0223:Subject: opndspy 2: bad assertion, bad test
+0224:Subject: fllarcs 2: a2.dat is still wrong
+0225:Subject: XDisplayName isn't tested.
+0226:Subject: clsdsply 11: buildtree
+0227:Subject: onpdsply 3 and 4 bug
+0242:Subject: CH04/stslctnown
+0243:Subject: CH07/kllclnt, CH08/sndevnt
+0245:Subject: enhanced tet_scen
+0246:Subject: enhanced link_scen
+0247:Subject: cpyar 1: if colormap creation fails, the test can deadlock
+.ps +2
+.cE
+.SK
+.H 1 "Appendix D - list of resolved bugs on gamma release"
+.cS
+.ps -2
+0228:Subject: tet api fails to compile on SunOS
+0229:Subject: libxtest.a: bad type in warppointer
+0230:Subject: libxtest.a: missing declaration of Dsp in nbuttons
+0231:Subject: tet api: install does not run ranlib
+0232:Subject: lkpstr 2: use of Delete key not portable
+0233:Subject: bug in tset/CH10/lkpstr
+0234:Subject: entrntfy 6, 13 and lvntfy 6, 13: incorrect assumptions about events
+0235:Subject: grbbttn 17, 18, 21: device is never thawed
+0236:Subject: grbbttn 16: assertion does not make sense
+0237:Subject: allwevnts 5: incorrect change of event mask
+0238:Subject: allwevnts 17: presses wrong key
+0239:Subject: allwevnts 19: incorrect strategy applied
+0240:Subject: allwevnts 20: wrong event mask used
+0241:Subject: pt: shell :- syntax not universal
+0244:Subject: src/lib: windows on alternate screen can be off-screen
+0248:Subject: tet: non-posix compile(?)
+0249:Subject: tet: non-posix compile (?)
+0250:Subject: strdup() function prototype
+0251:Subject: strdup() function is defined incorrectly
+0252:Subject: strdup() declaration is incorrect in xtest/src/bin/mc/main.c
+0253:Subject: spelling error
+.ps +2
+.cE
diff --git a/xc/test/xsuite/xtest/doc/userguide.mm b/xc/test/xsuite/xtest/doc/userguide.mm
new file mode 100644
index 000000000..188f2f0b2
--- /dev/null
+++ b/xc/test/xsuite/xtest/doc/userguide.mm
@@ -0,0 +1,3695 @@
+.\" $XConsortium$
+'
+.ds dN "\s-1MIT\s0-3-01.3
+'
+.ds dD User Guide for the X test suite (release 1.1)
+.so 00.header
+.ds xT X\ test suite
+.ds xW X\ Window System
+.ds xP X\ Protocol tests
+.ds xL Xlib tests
+'\"
+'\" Start and end of a user-typed display
+'\"
+.de cS
+.DS I
+.ft C
+.ps -2
+..
+.de cE
+.ps +2
+.ft R
+.DE
+..
+'\" # Courier
+.de C
+\fC\\$1\fP\\$2\fC\\$3\fP\\$4\fC\\$5\fP\\$6
+..
+'\" ###
+.H 1 "Introduction"
+This document is a guide to installing and running
+release 1.1 of the revised \*(xT.
+In order to do this, please work through all of the steps described
+in this guide in order. Information on the content, purpose and goals of the
+\*(xT
+is found in a series of appendices, which follow the installation
+instructions.
+.P
+Please read the "Release Notes for the X\ test\ suite -
+release 1.1", which describe particular features of this release.
+.P
+Further information, which would be required by a programmer to modify or extend
+the \*(xT, is contained in a separate document, "Programmers Guide for the
+X\ test\ suite (release 1.1)".
+.P
+Included in this release is a version of the
+"Test Environment Toolkit"
+.SM ( TET ).
+This is required to build and execute the \*(xT.
+The "Test Environment Toolkit"
+is a software tool developed by X/Open,
+UNIX International,
+and the Open Software Foundation.
+More details of the \s-1TET\s0 appear in appendix E.
+.P
+The contents of this document cover the installation and use of the included
+version of the \s-1TET\s0.
+.SK
+.H 1 "Preparation"
+This section of the User Guide describes how to check that the system on which
+you want to build the \*(xT has the required utilities and sufficient
+disc space, how to check the version of the \*(xW\*F
+.FS
+The \*(xW is a trademark of the Massachusetts Institute of Technology.
+.br
+\*(xW Version\ 11 Release\ 4 is abbreviated to X11R4 in this document.
+.br
+\*(xW Version\ 11 Release\ 5 is abbreviated to X11R5 in this document.
+.FE
+you wish to test,
+and how to extract the software from the supplied distribution media.
+.H 2 "Utilities"
+The \*(xT assumes that the following utilities are available on your system.
+.H 3 "Bourne shell"
+The configuration and building stages include example instructions which
+have only been tested using the Bourne shell.
+.P
+The build configuration file sets the SHELL variable so that the Bourne
+shell will be used by \fCmake\fP. No other settings for this variable
+have been tested.
+.H 3 "make"
+The building stages assume the existence of \fCmake\fP.
+.H 3 "awk"
+The report writer \fCrpt\fP uses \fCawk\fP.
+.H 3 "Compiler"
+A C compiler and link editor are required. The \*(xT assumes that when these
+utilities execute successfully, they return a value of zero.
+The names of these utilities may be set in build
+configuration parameters.
+.H 3 "Library archiver"
+A library archiver and a means of ordering the libraries are required.
+The ordering software may be part of the library archiver, the
+\fCranlib\fP utility, or the utilities \fClorder\fP and \fCtsort\fP.
+The names of these utilities may be set in build
+configuration parameters.
+.H 3 "File utilities"
+The \*(xT uses utilities to copy, move, remove and link files during
+the build stages.
+The names of these utilities may be set in build
+configuration parameters.
+.H 2 "Checking your version of the \*(xW"
+If your version of the \*(xW supports the
+.SM XTEST
+extension, you will
+be able to perform tests for
+some assertions which are otherwise untestable. The
+.SM XTEST
+extension has been produced by MIT since the initial release of X11R5,
+based on a specification\*F
+.FS
+Drake, K.J.,
+\(lqSome Proposals for a Minimal X11 Testing Extension.\(rq
+.I
+UniSoft Ltd. June 1991
+.FE
+produced by UniSoft.
+The extension provides access to the X server to enable
+testing of the following areas of the \*(xW:
+.DL
+.LI
+Those which rely on the simulation of device events.
+.LI
+Those requiring access to opaque client side data structures.
+.LI
+Those requiring information on the cursor attribute of windows.
+.LE
+.P
+Before you configure the \*(xT, you should determine whether your
+version of the \*(xW includes the
+.SM XTEST
+extension, and, if so, whether
+you wish to configure and build the \*(xT to enable these features to
+be tested.
+.P
+There are two things to check:
+.AL
+.LI
+Check whether your X server supports the
+.SM XTEST
+extension.
+This can be done by printing the list of extensions available in your
+X server using the X utility
+.C xdpyinfo .
+Note - the name of the
+extension should be printed exactly as in this User Guide -
+there are other testing extensions for X which are not compatible
+with the
+.SM XTEST
+extension.
+.LI
+Check whether you have the required libraries to link the test suite clients
+so as to access the
+.SM XTEST
+extension. All test suite clients must be linked with Xlib, which is
+normally named
+.C libX11.a .
+If you want to access the
+.SM XTEST
+extension,
+you will need two further libraries. These are the
+.SM XTEST
+library (normally named
+.C libXtst.a )
+and the X extension library (normally named
+.C libXext.a ).
+.LE
+.H 2 "Installing the \*(xT"
+The \*(xT requires 10 Mb of disc space to
+install from the supplied media and 50-80 Mb of disc space to build and
+run space-saving executable files (dependent on machine architecture).
+If you choose to build standard executable files
+you will require 150-250 Mb of disc space.
+.P
+Change to the directory in which you wish to install the distribution.
+Set an environment variable \s-1TET_ROOT\s0 to the full path name of
+that directory.
+.P
+Load the software from the media supplied into that directory.
+The precise commands you should use depend on the format of the media
+supplied to you, the utilities available on your system,
+the options
+supported by the utilities, and
+the names of
+the tape devices on your system.
+.P
+The distribution format will be shown on the media label. It will normally
+be \fCcpio\fP format or \fCtar\fP format. If you have obtained the
+distribution by \fCftp\fP, it will normally be in compressed \fCtar\fP format.
+.P
+The following are example commands which work on most systems:
+.TS
+box, center;
+lB | l.
+Media format Example command
+_
+tar tar xvf \fItape-device-name\fR
+_
+cpio cpio -icvdB < \fItape-device-name\fR
+_
+compressed tar uncompress \fIfile-name\fR; tar xvf \fIfile-name\fR
+.TE
+.P
+.SK
+.H 1 "Configuring the \*(xT"
+This section contains instructions on all the procedures you should
+go through in order to configure the \*(xT, before attempting to
+build it.
+.P
+There is a description of the \s-1TET\s0 build tool in section 3.1, and the
+relationship between the \s-1TET\s0 build scheme and the Imake scheme in
+section 3.2.
+.P
+Sections 3.3 and 3.4 contain details of build and clean
+configuration parameters, which you
+should edit to reflect the configuration of the target platform on which
+the \*(xT is to be built.
+.P
+Section 3.5 contains details of source files and include files
+which contain system dependent
+data which cannot be specified via the build configuration parameters.
+You should check these files before configuration and if necessary edit
+them to be suitable for your system.
+.H 2 "The \s-1TET\s0 build tool"
+The \s-1TET\s0 provides a scheme to execute a build tool, which builds
+the tests in the \*(xT.
+The execution of the build tool in the
+\s-1TET\s0
+is controlled by a small number of
+\s-1TET\s0
+configuration parameters, contained in a build configuration file. These
+are described in section 3.3.1.
+.P
+A build tool has been developed and is provided as part of the \*(xT.
+This is a shell script named \fCpmake\fP, which is supplied in the directory
+\fC$TET_ROOT/xtest/bin\fP. The shell script \fCpmake\fP is an interface to the
+\fCmake\fP system command, and when invoked from the
+\s-1TET\s0
+it builds a test using the rules provided in a
+\fCMakefile\fP.
+.P
+Each \fCMakefile\fP in the \*(xT
+is written portably, using symbolic names to describe commands and
+parameters which may vary from system to system. The values of these
+symbolic names are all obtained by \fCpmake\fP from additional parameters in
+the build configuration file
+which are described in sections 3.3.2-3.3.7.
+.P
+The \fCpmake\fP utility may be invoked directly from the shell,
+as well as via the \s-1TET\s0, to build individual parts of the
+\*(xT. This is described further in subsequent sections of this guide.
+.P
+There is also a clean tool \fCpclean\fP which is
+an interface to the system \fCmake clean\fP system command. This
+uses parameters in a clean configuration file.
+.H 2 "Relationship between \s-1TET\s0 build scheme and Imake"
+The \s-1TET\s0 is designed to provide a simple and self contained
+interface to configure and build tests. The \*(xT can be configured and
+built with no specialised knowledge of the \*(xW beyond
+that contained in the \*(xT documentation, and using a limited set of commonly
+available system commands. The only information required to configure and
+build the \*(xT is the location of the \*(xW Xlib and include files.
+.P
+The \*(xW itself includes a
+configuration scheme which is known as \fCImake\fP.
+This uses a utility \fCimake\fP supplied as part of the \*(xW
+to create \fCMakefiles\fP from portable
+description files called \fCImakefiles\fP.
+.P
+If you are familiar with the \fCImake\fP scheme, and have used it to configure
+and build
+the \*(xW on the platform being used to build the \*(xT, you may be able
+to set a limited number of the \s-1TET\s0 build configuration variables
+described in section 3.3 to the same value you used for
+an \fCImake\fP variable. Where this
+is possible, the name of the corresponding \fCImake\fP variable is cross
+referenced.
+.H 2 "Build configuration parameters"
+All build configuration parameters are contained in
+a configuration file that forms part of the \s-1TET\s0.
+This file should be edited to reflect the configuration of the target machine.
+The file
+.cS
+$TET_ROOT/xtest/tetbuild.cfg
+.cE
+contains all the parameters that are needed to build the \*(xT.
+The parameters are grouped in seven sections within the configuration file.
+.H 3 "Configuration Parameters defined by the \s-1TET\s0"
+None of these parameters require changing. They are already set to
+defaults which are correct for the \*(xT.
+.P
+.VL 15 0
+.LI \s-1TET_BUILD_TOOL\s0
+.br
+The name of the program that the
+.SM TET
+will execute in build mode.
+.P
+You should use the \fCpmake\fP command that is supplied
+in the directory \fC$TET_ROOT/xtest/bin\fP.
+.cS
+Eg: TET_BUILD_TOOL=pmake
+.cE
+.LI \s-1TET_BUILD_FILE\s0
+.br
+Any flags required by the build tool.
+This parameter should be empty.
+.cS
+Eg: TET_BUILD_FILE=
+.cE
+.LI \s-1TET_CLEAN_TOOL\s0
+.br
+The name of the program that the
+.SM TET
+will execute in clean mode.
+.P
+You should use the \fCpclean\fP command that is supplied
+in the directory \fC$TET_ROOT/xtest/bin\fP.
+.cS
+Eg: TET_CLEAN_TOOL=pclean
+.cE
+.LI \s-1TET_CLEAN_FILE\s0
+.br
+Any flags required by the clean tool.
+This parameter should be empty.
+.cS
+Eg: TET_CLEAN_FILE=
+.cE
+.LI \s-1TET_OUTPUT_CAPTURE\s0
+.br
+This flag is used by the \s-1TET\s0 to enable the output from the build tool
+to be saved and copied into the journal file. This line should not be
+altered.
+.LE
+.H 3 "Configuration for system commands"
+In this section the names of system commands are specified.
+.VL 15 0
+.LI \s-1SHELL\s0
+The following line should cause the Bourne shell to be used
+by make.
+.cS
+Eg: SHELL=/bin/sh
+.cE
+.LI \s-1CC\s0
+A command to invoke the C compiler.
+.cS
+Eg: CC=cc
+.cE
+.P
+\fIImake variable: CcCmd\fP
+.LI \s-1RM\s0
+A command to remove a file without interactive help.
+.cS
+Eg: RM=rm -f
+.cE
+.P
+\fIImake variable: RmCmd\fP
+.LI \s-1AR\s0
+A command to generate a library archive.
+.cS
+Eg: AR=ar crv
+.cE
+.P
+\fIImake variable: ArCmd\fP
+.LI \s-1LD\s0
+A command to link object files.
+.cS
+Eg: LD=ld
+.cE
+.P
+\fIImake variable: LdCmd\fP
+.LI \s-1LN\s0
+A command to make hard links.
+.cS
+Eg: LN=ln
+.cE
+.P
+\fINB: This does not correspond to the Imake variable: LnCmd\fP
+.LI \s-1RANLIB\s0
+If the system supports a command to order library
+archives into random access libraries, then set the parameter to that command.
+Otherwise it should be set to \fCecho\fP (or a command that does nothing).
+.cS
+Eg: RANLIB=ranlib
+.cE
+.P
+\fIImake variable: RanlibCmd\fP
+.LI \s-1TSORT\s0
+Set to \fCcat\fP if AR was set to a command which inserts a symbol table
+in the library archive,
+or if RANLIB was set to a command which creates a random access library,
+otherwise set to \fCtsort\fP.
+.LI \s-1LORDER\s0
+Set to \fCecho\fP if AR was set to a command which inserts a symbol table
+in the library archive,
+or if RANLIB was set to a command which creates a random access library.
+otherwise set to \fClorder\fP.
+.LI \s-1CP\s0
+A command to copy files.
+.cS
+Eg: CP=cp
+.cE
+.P
+\fIImake variable: CpCmd\fP
+.LI \s-1CODEMAKER\s0
+A utility to produce C source files from dot-m files.
+The supplied utility \fCmc\fP should always be used.
+This line should not be altered.
+.cS
+Eg: CODEMAKER=mc
+.cE
+.LE
+.H 3 "Configuration for the \s-1TET\s0"
+This section contains the locations of various parts of the \s-1TET\s0.
+Usually only the first four parameters will need changing,
+unless files have been moved from their default locations.
+.VL 15 0
+.LI \s-1TET_ROOT\s0
+The directory that contains all the files in the \*(xT.
+This should be set to the path to which \fCTET_ROOT\fP was set (see the
+section entitled "Installing the \*(xT").
+It must be written out as a full path without using any variable notation.
+.LI \s-1TETBASE\s0
+The directory that contains all the files in the \s-1TET\s0 system.
+This is used for convenience in defining the other directories.
+This should be set to \fC${TET_ROOT}/tet\fP.
+.LI \s-1PORTINC\s0
+An option that can be given to the C compiler
+that will cause it to search all directories that are
+required to allow portability to systems that do not support
+.SM POSIX .
+Should be empty for
+.SM POSIX
+systems.
+If compiling on a \s-1BSD\s0 system using the supplied compatibility library,
+then the following line should be used.
+(See section entitled "The portability library").
+.cS
+Eg: PORTINC=-I${TET_ROOT}/port/INC
+.cE
+.LI \s-1PORTLIB\s0
+A library containing
+.SM POSIX.1
+and C library functions that
+are not supplied by the system.
+This should be empty for a
+.SM POSIX
+system.
+If compiling on a \s-1BSD\s0 system using the supplied compatibility library,
+then the following line should be used.
+(See section entitled "The portability library").
+.cS
+Eg: PORTLIB=${TET_ROOT}/port/libport.a
+.cE
+.LI \s-1TETINCDIR\s0
+The directory containing the
+.SM TET
+headers.
+.cS
+Eg: TETINCDIR=${TETBASE}/inc/posix_c
+.cE
+.LI \s-1TETLIB\s0
+The directory containing the
+.SM TET
+library.
+.cS
+Eg: TETLIB=${TETBASE}/lib/posix_c
+.cE
+.LI \s-1TCM\s0
+The Test Control Manager.
+This is part of the \s-1TET\s0.
+It is an object file that is linked with each test.
+.cS
+Eg: TCM=${TETLIB}/tcm.o
+.cE
+.LI \s-1TCMCHILD\s0
+The Test Control Manager.
+This is part of the \s-1TET\s0.
+It is an object file that is linked with each program that is
+executed within a test by tet_exec().
+.cS
+Eg: TCMCHILD=${TETLIB}/tcmchild.o
+.cE
+.LI \s-1APILIB\s0
+The \s-1TET\s0 \s-1API\s0 library.
+.cS
+Eg: APILIB=${TETLIB}/libapi.a
+.cE
+.LE
+.H 3 "Configuration parameters for the \*(xT"
+Only the first one of these parameters requires changing unless
+directories have been moved from their default locations.
+.VL 15 0
+.LI \s-1XTESTHOST\s0
+The name of the host on which test suite clients are to be executed.
+This may be set to the value returned by a command which can be executed
+using the PATH you have set on your host, or may be set to a specific name.
+This is used to produce a resource file named .Xdefaults-$(\s-1XTESTHOST\s0)
+in the test execution directory.
+The resource file is created when building the test for XGetDefault.
+This parameter is only used in the Makefile of the test for XGetDefault.
+.cS
+Eg. XTESTHOST=`hostname`
+Eg. XTESTHOST=`uname -n`
+Eg. XTESTHOST=triton
+.cE
+.LI \s-1XTESTROOT\s0
+The directory that is the root of the \*(xT.
+.cS
+Eg: XTESTROOT=${TET_ROOT}/xtest
+.cE
+.LI \s-1XTESTLIBDIR\s0
+The directory containing libraries for the \*(xT.
+.cS
+Eg: XTESTLIBDIR=${XTESTROOT}/lib
+.cE
+.LI \s-1XTESTLIB\s0
+The xtest library.
+This library contains
+subroutines that are common to many tests in the \*(xT.
+.cS
+Eg: XTESTLIB=${XTESTLIBDIR}/libxtest.a
+.cE
+.LI \s-1XSTLIB\s0
+The X Protocol test library.
+This library contains
+subroutines that are common to many tests in the X Protocol section
+of the \*(xT.
+.cS
+Eg: XSTLIB=${XTESTLIBDIR}/libXst.a
+.cE
+.LI \s-1XTESTFONTLIB\s0
+The fonts library.
+This library contains
+font descriptions that are common to many tests in the \*(xT.
+.cS
+Eg: XTESTFONTLIB=${XTESTLIBDIR}/libfont.a
+.cE
+.LI \s-1XTESTINCDIR\s0
+The xtest header file directory.
+This directory contains headers that are local to the \*(xT.
+.cS
+Eg: XTESTINCDIR=${XTESTROOT}/include
+.cE
+.LI \s-1XTESTBIN\s0
+The xtest binary file directory.
+This directory contains utility programs that are used by \*(xT.
+.cS
+Eg: XTESTBIN=${XTESTROOT}/bin
+.cE
+.LE
+.H 3 "System Parameters"
+Location of system libraries and include files.
+.VL 15 0
+.LI \s-1SYSLIBS\s0
+Options to cause the C compiler to search
+any system libraries that are required for the \*(xT
+that are not searched by default.
+This will probably include Xlib.
+.cS
+Eg: SYSLIBS=-lX11
+.cE
+If you wish to build the \*(xT to make use of the
+.SM XTEST
+extension, you
+will need to include the
+.SM XTEST
+library and the X\ extension library (in that order).
+.cS
+Eg: SYSLIBS=-lXtst -lXext -lX11
+.cE
+.P
+\fIImake variables: ExtraLibraries\fP
+.LI \s-1XP_SYSLIBS\s0
+Any system libraries that are needed, to link the
+X Protocol tests. This will include Xlib, since libXst.a
+(which is part of the test suite) will include at least one call to
+XOpenDisplay.
+.cS
+Eg: XP_SYSLIBS=-lX11
+.cE
+.P
+\fIImake variables: ExtraLibraries\fP
+.LI \s-1SYSINC\s0
+Any commands that should be given to the C compiler
+to cause all relevant system include files to be included. This will
+probably
+include /usr/include/X11.
+.cS
+Eg: SYSINC=-I/usr/include/X11
+.cE
+.LE
+.H 3 "C Compiler Directives"
+Directives to the C compiler.
+Usually only the first four parameters will need changing. The
+remainder are internally used parameters, which are an amalgam of previously
+set parameters.
+.VL 15 0
+.LI \s-1COPTS\s0
+Options to the C compiler.
+.cS
+Eg: COPTS=-O
+.cE
+.P
+\fIImake variables: DefaultCDebugFlags and DefaultCCOptions\fP
+.LI \s-1DEFINES\s0
+Options required by the C compiler to set up any required defines.
+For example in strict
+.SM ANSI
+Standard-C systems you will need to define
+.SM _POSIX_SOURCE .
+Additionally on an
+.SM X/Open
+conformant system it may be necessary to define
+.SM _XOPEN_SOURCE .
+.cS
+Eg: DEFINES=-D_POSIX_SOURCE
+.cE
+.P
+If there is no symbol
+.C NSIG
+defined in the system header file
+\fCsignal.h\fP, then this has to be supplied for
+use by the \s-1TET\s0 \s-1API\s0.
+It should be the number of signal types on the system.
+.cS
+Eg: DEFINES=-D_POSIX_SOURCE -DNSIG=32
+.cE
+If you wish to build the \*(xT to make use of the
+.SM XTEST
+extension, you
+will need to define
+.SM XTESTEXTENSION .
+.br
+.SM XTESTEXTENSION
+is only used when building the \*(xT library.
+.cS
+Eg: DEFINES=-D_POSIX_SOURCE -DNSIG=32 -DXTESTEXTENSION
+.cE
+.P
+\fIImake variables: StandardDefines\fP
+.LI \s-1XP_DEFINES\s0
+C compiler defines specific to the X Protocol tests.
+.br
+This can be set as DEFINES, but
+you can build support for additional connection methods beyond TCP/IP,
+using the following defines, if XP_OPEN_DIS is
+XlibNoXTest.c (R4/R5 XOpenDisplay emulation):
+.cS
+-DDNETCONN - Connections can also use DECnet\*F.
+-DUNIXCONN - Connections can also use UNIX\*F domain sockets.
+.cE
+.br
+Refer to your documentation for building and installing Xlib on
+your platform.
+.FS
+DEC and DECnet are registered trademarks of Digital
+Equipment Corporation.
+.FE
+.FS
+UNIX is a registered trademark of UNIX System Laboratories, Inc. in
+the U.S. and other countries.
+.FE
+.br
+If XP_OPEN_DIS is one of XlibWithXTest.c or XlibOpaque.c then none of
+the defines listed above will be required.
+.cS
+Eg: XP_DEFINES=-D_POSIX_SOURCE -DUNIXCONN
+.cE
+.P
+\fIImake variables: StandardDefines\fP
+.LI \s-1LINKOBJOPTS\s0
+Options to give to the LD program to link object
+files together into one object file that can be further linked.
+.cS
+Eg: LINKOBJOPTS=-r
+.cE
+.LI \s-1INCLUDES\s0
+Options to cause C compiler to search the correct directories
+for headers.
+This should not need changing as it is just an amalgam of
+other parameters.
+.cS
+.ps -2
+INCLUDES=-I. ${PORTINC} -I${TETINCDIR} -I${XTESTINCDIR} ${SYSINC}
+.ps +2
+.cE
+.LI \s-1CFLAGS\s0
+Flags for the C compiler.
+This should not need changing as it is just an amalgam of other
+parameters.
+Note that \fC\s-1CFLOCAL\s0\fP is not defined in the configuration file;
+it is available for use in makefiles, to define
+parameters that only apply to a particular case.
+(It intentionally uses parentheses rather than braces)
+.cS
+.ps -2
+CFLAGS=$(CFLOCAL) $(COPTS) $(INCLUDES) $(DEFINES)
+.ps +2
+.cE
+.LI \s-1XP_CFLAGS\s0
+Flags for the C compiler.
+This parameter is used by the \*(xP in the \*(xT.
+This should not need changing as it is just an amalgam of other
+parameters.
+.cS
+.ps -2
+XP_CFLAGS=$(CFLOCAL) $(COPTS) $(INCLUDES) $(XP_DEFINES)
+.ps +2
+.cE
+.LI \s-1LDFLAGS\s0
+Flags used by the loader.
+This is needed on some systems
+to specify options used when object files are linked to produce an executable.
+.cS
+.ps -2
+Eg. LDFLAGS=-ZP
+.ps +2
+.cE
+.LI \s-1LIBS\s0
+List of libraries.
+This should not need changing as it is just an amalgam of other
+parameters.
+.cS
+.ps -2
+LIBS=${XTESTLIB} ${XTESTFONTLIB} ${APILIB} ${PORTLIB}
+.ps +2
+.cE
+.LI \s-1XP_LIBS\s0
+List of libraries.
+This parameter is used by the \*(xP in the \*(xT.
+This should not need changing as it is just an amalgam of other
+parameters.
+.cS
+.ps -2
+XP_LIBS=${XSTLIB} ${XTESTLIB} ${XTESTFONTLIB} ${APILIB} ${PORTLIB}
+.ps +2
+.cE
+.LI \s-1XP_OPEN_DIS\s0
+A choice of which code to build in the X Protocol library
+to make an X server connection.
+This must be set to one of three possible values:
+.VL 4 0
+.LI XlibWithXTest.c
+.br
+Use this option only if your Xlib includes post R5 enhancements
+to _XConnectDisplay
+ensuring maximum portable protocol test coverage. These enhancements include
+arguments to _XConnectDisplay to return authorisation details on
+connection. If you use this option when your Xlib does not have these
+enhancements to _XConnectDisplay, the results of running the \*(xP
+will be
+.B undefined .
+.LI XlibOpaque.c
+.br
+You have a normal R4 Xlib or early R5 Xlib which you
+cannot patch to include the enhancements to
+_XConnectDisplay, and you cannot emulate these by
+building XlibNoXTest.c, so only client-native testing
+can be done portably, and no failure testing of
+XOpenDisplay can be done.
+This option uses XOpenDisplay to make the connection,
+from which the file descriptor is recovered for our own use.
+XCloseDisplay shuts down the connection.
+.LI XlibNoXTest.c
+.br
+As for XlibOpaque.c but you can use the R4/R5
+connection emulation supplied. (Note: R4/R5 independent)
+This will ensure maximum protocol test coverage
+but may not be portable to all platforms.
+.LE
+.P
+Reasons for not being able to build XlibNoXTest.c might include:
+.br
+i) different interfaces to connection setup and connection read/write;
+.br
+ii) different access control mechanisms.
+.br
+Refer to your Xlib documentation for further details.
+.cS
+Eg. XP_OPEN_DIS=XOpenDis4.c
+.cE
+.LE
+.H 3 "Pixel validation section"
+This section defines a number of parameters that are used only when
+generating known good image files. These are not intended to be modified
+and need not be used when running the test suite.
+They are only used in the development environment
+at UniSoft when generating known good image files.
+.H 2 "Clean configuration parameters"
+The \s-1TET\s0 provides a scheme to execute a clean tool, which removes
+previously built tests and object files.
+.P
+All clean configuration parameters are contained in a configuration file that
+forms part of the \s-1TET\s0.
+The file
+.cS
+$TET_ROOT/xtest/tetclean.cfg
+.cE
+contains all the parameters that are needed to clean the \*(xT.
+.P
+To save configuration effort,
+we have arranged that the build and clean configuration files
+may contain identical parameter settings. Both files are needed,
+since the
+.SM TET
+requires both a default build and clean configuration file.
+.P
+Copy the build configuration file into the clean configuration file:
+.cS
+cd $TET_ROOT/xtest
+cp tetbuild.cfg tetclean.cfg
+.cE
+.H 2 "System dependent source files"
+This section describes source files and include files provided
+in the \*(xT which contain data,
+which you may need to edit to reflect the system under test.
+.H 3 "Host address structures"
+The file \fCxthost.c\fP
+in the directory \fC$TET_ROOT/xtest/src/lib\fP
+contains three items, which you may need to edit to reflect the system
+under test. These are all related to the mechanisms provided by the X
+server under test to add, get or remove hosts from the access control list.
+These are only used in the tests
+for those Xlib functions which use or modify the access control list.
+.P
+The host access control functions use the XHostAddress structure. You
+should refer to the Xlib documentation for your system, to determine
+the allowed formats for host addresses in an XHostAddress structure.
+You may also find it helpful to refer to the X Window System Protocol
+documentation supplied with the X server under test. The section
+describing the ChangeHosts protocol request gives examples of host
+address formats supported by many X servers. The symbols FamilyInternet,
+FamilyDECnet, FamilyChaos and FamilyUname are defined on many systems
+in the include files X.h and Xstreams.h. The X server under test is not
+guaranteed to support these families, and may support families not
+listed here. You should find out which families are supported for the X
+server under test, by examining the header files supplied with your
+system, and consulting the documentation supplied with the X server.
+.P
+Some default declarations are contained in the file, but there is no
+guarantee that they will work correctly on your system.
+.P
+The three items are as follows:
+.AL
+.LI
+You should ensure that there is a declaration for an
+array xthosts[] of at least 5 XHostAddress structures containing
+valid family,length,address triples.
+.LI
+You should ensure that there is a declaration for an
+array xtbadhosts[] of at least 5 XHostAddress structures containing
+invalid family,length,address triples.
+You should ensure that there is a declaration for an array
+xtbadhosts[] of at least 5 XHostAddress structures containing invalid
+family,length,address triples. If you cannot use the supplied examples,
+the simplest way to do this is to use an invalid family, which is not
+supported by the X server under test, in each structure of the array.
+.LI
+You should ensure that there is a declaration for a
+function samehost() that compares two XHostAddress structures
+and returns True if they are equivalent. (It is unlikely that the sample
+function will need modification - no systems requiring modification have
+yet been identified).
+.LE
+.SK
+.H 1 "Building the \s-1TET\s0"
+The \*(xT
+runs under the
+Test Environment Toolkit
+(\s-1TET\s0).
+.P
+This section of the User Guide tells you how to build and install the
+supplied version of the
+.SM TET .
+.P
+The following instructions assume the use of a Bourne shell.
+.P
+The \s-1PATH\s0 variable should have the directory \fC$TET_ROOT/xtest/bin\fP
+prepended to it.
+.cS
+PATH=$TET_ROOT/xtest/bin:$PATH
+export PATH
+.cE
+.H 2 "The portability library"
+The current version of the \s-1TET\s0 used by the \*(xT
+is designed to run on a
+\s-1POSIX.1\s0
+system.
+.P
+Since many systems running the \*(xW
+currently run on \s-1BSD\s0 based systems a portability library
+that emulates the required routines using \s-1BSD\s0 facilities has
+been provided.
+.P
+This library is not part of the \s-1TET\s0 itself.
+.P
+The portability library source is kept in \fC$TET_ROOT/port\fP.
+.P
+The portability library may be useful in porting the \*(xT to other
+environments as described below.
+Please refer to the "Release Notes for the X\ test\ suite -
+release 1.1" for details of the target execution environments,
+and a list of systems to which it has already been ported.
+.H 3 "Porting to a POSIX.1 system"
+If your system conforms to
+.SM POSIX.1
+and has an
+.SM ANSI
+Standard-C compiler then this library should not be built
+and so this section can be skipped.
+The exception is that \fCputenv()\fP may not exist on a
+\s-1POSIX.1\s0\*F
+.FS
+IEEE Std 1003.1-1990, \fIPortable Operating System Interface for
+Computer Environments\fR
+.FE
+system, however it is in the
+\s-1SVID\s0\*F
+.FS
+System V Interface Definition, Issue 1, AT&T, Spring 1985.
+.FE
+and the
+\s-1XPG\s0\*F,
+.FS
+\fIX/Open Portability Guide Issue 3, Volume 2: XSI System Interface and Headers\fR
+.FE
+so in practice most
+.SM non- BSD
+machines will have this function.
+.H 3 "Porting to a BSD system"
+If the system is a standard \s-1BSD\s0 one,
+then the portability library can be used as it is; build
+it as follows.
+.cS
+cd $TET_ROOT/port
+pmake
+.cE
+.H 3 "Porting to other systems"
+The portability
+library may be useful as a base for porting the \s-1TET\s0 to other
+.SM non- POSIX
+systems,
+however the portability library is designed to run on a \s-1BSD\s0 system,
+and will not necessarily build without change on other systems.
+.P
+The following routines are emulated for use under a \s-1BSD\s0 system,
+and these may be needed on other systems:
+.cS
+getcwd() getopt() putenv() sigaction()
+sigaddset() sigdelset() sigemptyset() sigfillset()
+sigismember() sigpending() sigprocmask() sigsuspend()
+strchr() strcspn() strftime() strpbrk() strrchr()
+strspn() strtok() toupper() upcase()
+vsprintf() waitpid()
+.cE
+Only the features that are used by the \*(xT are emulated.
+They are not meant to mimic completely the standard behaviour.
+.P
+There is also an include directory
+.C $TET_ROOT/port/INC
+that contains header files
+that are required that are not found on a \s-1BSD\s0 system.
+These files contain only items that are needed for the \*(xT,
+they are not designed to replace completely the standard ones.
+.P
+To adapt the portability library to other systems,
+the following hints may be found useful:
+.BL
+.LI
+Examine the directory
+.C $TET_ROOT/port/INC .
+If the system already provides a standard conforming header file
+of the same name
+as one in the \s-1INC\s0 directory, then remove the version
+from the \s-1INC\s0 directory.
+.LI
+The header files contain the bare minimum required to compile the
+\*(xT, and use \s-1BSD\s0 features.
+It may be necessary to alter them to suit the local system.
+This applies particularly to
+.C signal.h .
+.LI
+It may be necessary to add other header files.
+.LI
+In the library \fCMakefile\fP remove any function that is already provided by
+the system in a standard conforming form.
+.LI
+Examine the code of the remaining functions to make
+sure that they will work on the target system.
+.LE
+.P
+.H 2 "Building libraries and utilities"
+There is a top level Makefile which can be used to automatically perform
+a number of the following steps. You should still check through the User Guide
+and perform the steps which need to be done manually. In particular you
+need to build
+and install the test fonts as described in the section entitled
+"Compiling and installing the test fonts".
+.P
+The top level Makefile enables the following steps to be performed:
+.P
+Building the \s-1TET\s0:
+.AL
+.LI
+The Test Case Controller (TCC)
+.LI
+The API library
+.LE
+.P
+Building the X test suite libraries and utilities:
+.AL
+.LI
+Building the X test suite library
+.LI
+Building the X Protocol library
+.LI
+Building the X test fonts library
+.LI
+Building the mc utility
+.LI
+Building the blowup utility
+.LE
+.P
+To use the top level Makefile, move to the top level directory:
+.cS
+cd $TET_ROOT
+.cE
+.P
+Make the utilities and libraries with the command:
+.cS
+make
+.cE
+.H 2 "The Test Case Controller (TCC)"
+Move to the directory containing the \s-1TCC\s0 source.
+.cS
+cd $TET_ROOT/tet/src/posix_c/tools
+.cE
+.P
+Make the
+.SM TCC
+with the command:
+.cS
+pmake install
+.cE
+.P
+Note: the supplied version of the \s-1TCC\s0
+assumes that the \fIcp\fP utility on your system supports recursive
+copy using the option \fI-r\fP. There are two occurrences of \fIcp\fP in
+the file \fCexec.c\fP which use this option.
+.P
+In the \*(xT, recursive copying is not required.
+.P
+If your system does not support this option, you can remove the use of
+this option in the source code
+before building the \s-1TCC\s0. If you do this you may
+not be able to use the supplied \s-1TCC\s0 with other test suites.
+.P
+Alternatively, you can provide a shell script in the directory
+\fC$TET_ROOT/xtest/bin\fP
+which copies files using \fIcp\fP but ignores any option \fI-r\fP.
+.H 2 "The \s-1API\s0 library"
+Move to the
+.SM API
+library source directory.
+.cS
+cd $TET_ROOT/tet/src/posix_c/api
+.cE
+.P
+Run the command
+.cS
+pmake install
+.cE
+which should produce the files \fClibapi.a\fP and the Test
+Case Manager files \fCtcm.o\fP and \fCtcmchild.o\fP.
+.H 1 "Building the X test suite libraries and utilities"
+.H 2 "The X test suite library"
+A library of common subroutines for the \*(xT
+has source in \fC$TET_ROOT/xtest/src/lib\fP.
+This is built automatically when building tests in the \*(xT.
+Should it be required to build it separately for any reason
+run the command.
+.cS
+cd $TET_ROOT/xtest/src/lib
+pmake install
+.cE
+.P
+The list of source files in this library is described in the
+"Programmers Guide".
+.H 2 "The X Protocol library"
+A library of common subroutines for the \*(xP in the \*(xT
+has source in \fC$TET_ROOT/xtest/src/libproto\fP.
+This is built automatically when building tests in the \*(xT.
+Should it be required to build it separately for any reason
+run the command.
+.cS
+cd $TET_ROOT/xtest/src/libproto
+pmake install
+.cE
+.P
+The list of source files in this library is described in the
+"Programmers Guide".
+.H 2 "The X test fonts library"
+A library of common subroutines defining the
+characteristics of the test fonts for the \*(xT
+has source in \fC$TET_ROOT/xtest/fonts\fP.
+This is built automatically when building tests in the \*(xT.
+Should it be required to build it separately for any reason
+run the command.
+.cS
+cd $TET_ROOT/xtest/fonts
+pmake install
+.cE
+.P
+The list of source files in this library is described in the
+"Programmers Guide".
+.P
+Note that the directory
+\fC$TET_ROOT/xtest/fonts\fP also contains the test fonts themselves in
+bdf format, which must be compiled and installed. Instructions for
+performing these steps are included in the next section entitled
+"Compiling and installing the test fonts".
+.H 2 "Compiling and installing the test fonts"
+The \*(xT contains a series of test fonts which are used
+to test the correctness of the information returned by the graphics
+functions in the \*(xW. This is done by comparing the information
+returned by those functions with the expected font characteristics
+which are compiled into the tests via the X test fonts library.
+The X test fonts library is described in an earlier section of this document.
+.P
+There are seven test fonts whose descriptions are contained in the files
+.cS
+xtfont0.bdf xtfont1.bdf xtfont2.bdf
+xtfont3.bdf xtfont4.bdf xtfont5.bdf
+xtfont6.bdf
+.cE
+.P
+These files are located in the directory \fC$TET_ROOT/xtest/fonts\fP.
+.P
+The manner in which fonts should be compiled and installed for any
+particular X server is system dependent, and you should refer to
+the instructions supplied with your release of the \*(xW for
+details of how to do this.
+.P
+Some sample instructions are given here which may be useful on many
+systems. These may not be appropriate for your system, or they may
+need adaptation to work properly on your system and so are provided
+only as a guide.
+.AL
+.LI
+Move to the directory \fC$TET_ROOT/xtest/fonts\fP.
+.cS
+cd $TET_ROOT/xtest/fonts
+.cE
+.LI
+Compile the seven \fC.bdf\fP files into \fC.snf\fP format.
+.cS
+bdftosnf xtfont0.bdf > xtfont0.snf
+bdftosnf xtfont1.bdf > xtfont1.snf
+bdftosnf xtfont2.bdf > xtfont2.snf
+bdftosnf xtfont3.bdf > xtfont3.snf
+bdftosnf xtfont4.bdf > xtfont4.snf
+bdftosnf xtfont5.bdf > xtfont5.snf
+bdftosnf xtfont6.bdf > xtfont6.snf
+.cE
+This can also be achieved more easily by using the command
+.cS
+pmake bdfcomp
+.cE
+.LI
+Copy the \fC.snf\fP files into a server font directory. This
+is normally done by creating a new font directory (for example,
+/usr/lib/X11/fonts/xtest).
+.cS
+mkdir /usr/lib/X11/fonts/xtest
+cp *.snf /usr/lib/X11/fonts/xtest
+.cE
+.LI
+Remake the index in the new server font directory.
+On some systems this may be done by executing
+the \fCmkfontdir\fP command in the new server font directory.
+.cS
+cd /usr/lib/X11/fonts/xtest
+mkfontdir
+.cE
+.LE
+.H 2 "Building the \fCmc\fP utility"
+The
+.C mc
+utility is used to generate test set source files and Makefiles
+from a template file, known as a dot-m file.
+The file naming scheme is described further in appendix B.
+The file formats are described further in the "Programmers Guide".
+.P
+The Makefiles and test set source files will be created using
+.C mc
+whenever test sets are built, if the dot-m file is found to be
+newer than the source file or Makefile, or if these files do not
+exist.
+.P
+Build
+.C mc
+and install in the xtest bin directory as follows.
+.cS
+cd $TET_ROOT/xtest/src/bin/mc
+pmake install
+.cE
+.H 2 "Building the blowup utility"
+The blowup utility is required for examining any incorrect image files
+generated by the X server during a test run. Instructions for running the
+blowup program are given in the section entitled "Examining image files".
+.P
+Build
+.C blowup
+and install in the xtest bin directory as follows.
+.cS
+cd $TET_ROOT/xtest/src/pixval/blowup
+pmake install
+.cE
+.SK
+.H 1 "Building the tests"
+.H 2 "Building tests using the \s-1TET\s0"
+The entire \*(xT can be built by using the
+build mode of the \s-1TCC\s0. In this mode, the build configuration
+parameters in the file
+.C $TET_ROOT/xtest/tetbuild.cfg
+are used to build each test
+set in the \*(xT separately.
+.P
+.cS
+cd $TET_ROOT/xtest
+tcc -b [ -s scenario_file ] [ -j journal_file ] [ -y string ] xtest all
+.cE
+.VL 5 0
+.LI \fC-b\fP
+.br
+This invokes the \s-1TCC\s0 in build mode.
+.LI "\fC-s scenario_file\fP"
+.br
+This option builds the test sets in the named scenario file.
+The default is a file named \fCtet_scen\fP in the directory
+\fC$TET_ROOT/xtest\fP.
+For more details refer to the section entitled
+"Building modified scenarios using the \s-1TET\s0".
+.LI "\fC-j journal_file\fP"
+.br
+This option sends the output of the build to the named journal file.
+The default is a file named \fCjournal\fP in a newly created sub-directory
+of \fC$TET_ROOT/xtest/results\fP. Sub-directories are created with sequential
+four digit numbers, with the
+.SM TCC
+flags (in this case "b") appended.
+The \s-1TCC\s0 will exit if the specified journal file already exists, thus the
+journal file should be renamed or removed
+before attempting to execute the \s-1TCC\s0.
+.LI "\fC-y string\fP"
+.br
+This option only builds tests which include the specified string in the
+scenario file line. This may be used to build specific sections or individual
+test sets.
+.LI \fCxtest\fP
+.br
+This is the name of the test suite.
+It determines the directory under $\s-1TET_ROOT\s0
+where the test suite is to be found.
+.LI \fCall\fP
+.br
+This is the scenario name in the default scenario file
+\fC$TET_ROOT/xtest/tet_scen\fP.
+For more details refer to the section entitled
+"Building modified scenarios using the \s-1TET\s0"
+.LE
+.P
+This will execute the \s-1TET\s0 build tool in the \s-1TET\s0 configuration
+variable
+.SM TET_BUILD_TOOL
+(which is normally pmake),
+in each test set directory of the \*(xT.
+.P
+The journal file should be examined to verify
+that the build process succeeded.
+The report writer \fCrpt\fP cannot interpret the contents
+of a journal file produced during the build process.
+.P
+Note: If the \s-1TCC\s0
+terminates due to receipt of a signal which
+cannot be caught, the \s-1TCC\s0
+may leave lock files in the test source directories. Subsequent
+attempts to restart the \s-1TCC\s0 may give error messages
+saying that a lock file was encountered. At this point
+\s-1TCC\s0
+may suspend the build. It may be
+necessary to find and remove files or directories named \fCtet_lock\fP
+before continuing.
+.H 3 "Signal handling in the \s-1TET\s0"
+An interrupt signal (caused for example by typing the
+system interrupt character on the controlling terminal)
+will cause the \s-1TCC\s0 to abort the currently executing test case. The
+journal file output records the fact that the test case was interrupted.
+.P
+Any other signal which can be caught by the \s-1TCC\s0 causes it to terminate.
+By default, the system suspend character will also cause the \s-1TCC\s0
+to terminate. If you wish to be able to suspend the \s-1TCC\s0,
+you can add the relevant signals to the parameter SIG_LEAVE
+in the Makefile for the \s-1TCC\s0.
+Signals in this list will not be caught, but will cause their
+default action.
+This is explained further in the Test Environment Tookit Release Notes.
+.H 2 "Building, executing and cleaning tests using the \s-1TET\s0"
+Each test in the \*(xT may be built, executed and cleaned before
+the next test set in the scenario. This mode of use has the advantage that
+the entire \*(xT may be executed, without necessarily building all the
+test sets in advance. This mode of use has the disadvantage that you will
+need to rebuild a test set before rerunning, which will take
+considerably longer than when it is built in advance.
+.P
+To do this, skip to the section entitled "Executing the \*(xT",
+and refer to the instructions in the sub-section entitled
+"Building, executing and cleaning tests using the \s-1TET\s0"
+.H 2 "Building modified scenarios using the \s-1TET\s0"
+.H 3 "Format of the scenario file"
+The \s-1TET\s0 uses a scenario file to determine which test sets to build.
+The file
+\fC$TET_ROOT/xtest/tet_scen\fP
+is the default scenario file.
+The format is basically a scenario name starting in column one,
+followed by list of test sets to be built (each starting beyond column one).
+Only one scenario named "all" is provided in the default scenario file.
+.P
+The names of the test sets are given relative to the directory
+$TET_ROOT/xtest, and must commence with a leading slash.
+.H 3 "Modifying the scenario file"
+The file
+\fC$TET_ROOT/xtest/tet_scen\fP
+may be modified by removing lines corresponding to test sets which are not
+wanted. These will then simply not be built by the \s-1TCC\s0.
+Alternatively, unwanted
+lines may be commented out by placing \fC#\fP in column one of a line.
+.P
+It is recommended that the supplied scenario file should be saved if it is
+modified.
+.H 3 "Creating new scenario files"
+A new scenario file may be created in the directory
+\fC$TET_ROOT/xtest\fP.
+The \s-1TCC\s0 will use this scenario file instead of the file
+\fC$TET_ROOT/xtest/tet_scen\fP
+if it is passed via the \fC-s\fP option. For example
+.cS
+cd $TET_ROOT/xtest
+tcc -b -s scenario_file [ -j journal_file ] [ -y string ] xtest all
+.cE
+.H 2 "Building tests without using the \s-1TET\s0"
+See section 11, entitled
+"Building, executing and reporting tests without using the \s-1TET\s0".
+.H 2 "Building tests in space-saving format"
+It is possible to build the tests in the \*(xT such that
+all the executable files in one section are links to a single
+executable file. This normally allows a considerable reduction
+in the disc space requirements for the \*(xT when fully built.
+.P
+Note that the names of the files built in space-saving format
+are different to the names of the separate executable files
+built using the instructions in previous sections. There is
+nothing to prevent both sets of executables being built (although
+there is no value in this, and unnecessary disc space will be consumed).
+.H 3 "Building tests in space-saving format using the \s-1TET\s0"
+Before reading this section, read the section entitled "Building
+the tests using the \s-1TET\s0". This gives an explanation of the build mode
+of the \s-1TET\s0, and the structure of scenario files.
+.P
+A scenario named \fClinkbuild\fP is provided in a scenario file
+named \fClink_scen\fP in the directory
+$TET_ROOT/xtest.
+This enables the \s-1TCC\s0 to build the space-saving
+executable files and create all the required links for each test set in
+each section of the \*(xT.
+The -y option allows a particular space-saving
+executable for a single section to be built.
+.P
+Execute the command:
+.cS
+cd $TET_ROOT/xtest
+tcc -b -s link_scen [ -j journal_file ] [ -y string ] xtest linkbuild
+.cE
+This command will execute the \s-1TET\s0 build tool in the \s-1TET\s0 configuration
+variable
+.SM TET_BUILD_TOOL
+(which is normally pmake),
+in the top level directory of each section of the test suite.
+.H 3 "Building tests in space-saving format without using the \s-1TET\s0"
+This section describes how to build the space-saving
+executable files for a particular section of the
+\*(xT directly without using the \s-1TET\s0.
+.P
+This can be simply done by calling pmake in the required directory.
+For example, to build all the space-saving executable files for
+section 5 of the \*(xT, execute the command:
+.cS
+cd $TET_ROOT/xtest/tset/CH05
+pmake
+.cE
+.SK
+.H 1 "Executing the \*(xT"
+Once you have built the \*(xT as described in the previous sections,
+work through the following sections to execute the tests.
+.H 2 "Setting up your X server"
+The first step is to ensure that the X server to be tested is correctly set up.
+.H 3 "Formal verification testing"
+A number of the tests within the \*(xT can only give reliable results
+if there is no window manager and no other clients making connections to
+the X server. Thus, when conducting formal verification tests, there
+should be no window manager and no other clients connected to the X server.
+.P
+It is recommended that you close down and restart your X server before
+a formal verification test run, in order to ensure that results produced
+are repeatable and are not affected by earlier tests, although this is
+not strictly necessary.
+.P
+You should switch off the
+screen saver if possible before starting formal verification tests.
+This is because some X servers implement the screen saver in a way
+which interferes with windows created by test suite clients, which may cause
+misleading results. If the screen saver cannot be switched off, the
+time interval should be set so large as to prevent interference with the tests.
+.P
+You should also ensure that access control is disabled for the server
+under test, so that the test suite can make connections to the server.
+Also (if the X server allows this) you should ensure that clients on the
+host system (as specified in the build
+configuration parameter
+.SM XTESTHOST )
+can modify the access control list.
+Some X servers support the -ac option which disables host-based access
+control mechanisms. If this option is supported, you should use it.
+.H 3 "Informal testing and debugging"
+Although no guarantee can be made that the tests within the \*(xT will give
+correct results if there are window managers and other clients connected
+to the X server, it is still possible to run many tests satisfactorily.
+.P
+This section gives some guidelines which may be helpful in running tests
+with a window manager present, and still deriving correct results.
+The guidelines have been derived from the experience gained
+during the development of the tests.
+.P
+Using these guidelines in connection with the instructions
+in section 11,
+entitled
+"Building, executing and reporting tests without using the \s-1TET\s0",
+gives a rapid means to investigate the results of particular tests in detail.
+.P
+.AL
+.LI
+Set XT_DEBUG_OVERRIDE_REDIRECT=Yes
+in your execution configuration file. This is described in more detail in the
+next section.
+.LI
+Do not raise any windows on top of those created by
+running tests.
+.LI
+Avoid having any windows at position (0,0). Note that some window managers
+such as \fCtvtwm\fP
+create their own "root" window at position (0,0).
+This mainly affects tests for section 8 of the X11R4 Xlib specifications.
+.LI
+Be prepared to lose the input focus when tests are running
+and don't forcibly restore it.
+This mainly affects tests for section 8 of the X11R4 Xlib specifications.
+.LE
+.H 2 "Execute configuration parameters"
+The next step is to set up the execution configuration file.
+.P
+All execution configuration parameters are contained in
+a configuration file that
+forms part of the \s-1TET\s0.
+This file should be edited to reflect the configuration of the X server
+to be tested and the underlying operating system on which Xlib
+is implemented.
+The file
+.cS
+\fC$TET_ROOT/xtest/tetexec.cfg\fP
+.cE
+contains all the parameters that are needed to execute the \*(xT.
+The parameters are grouped in eight sections within the configuration file.
+.P
+Numeric execution parameters may be specified in decimal,
+octal, or hexadecimal. Octal values must be a sequence of octal digits
+preceded by 0. Hexadecimal values must be a sequence of hexadecimal digits
+preceded by 0x or 0X.
+.H 3 "Configuration parameters defined by the \s-1TET\s0"
+.VL 5 0
+.LI \s-1TET_EXEC_IN_PLACE\s0
+.br
+Setting this variable to
+.C False
+indicates that files will be executed
+in a temporary execution directory.
+Use of a temporary execution directory for each test enables
+parallel execution of the test suite against multiple servers.
+.P
+Setting this variable to
+.C True
+will give you improved performance if you are not attempting
+parallel execution of the test suite against multiple servers.
+.cS
+Eg: TET_EXEC_IN_PLACE=False
+.cE
+.LI \s-1TET_SAVE_FILES\s0
+.br
+This indicates which files generated during execution of
+tests are to be saved for later examination.
+This line should not be altered.
+.cS
+Eg. TET_SAVE_FILES=Err*.err,*.sav
+.cE
+.LE
+.H 3 "Configuration Parameters for the \*(xT"
+The following parameters are used in many places in the \*(xT.
+These should be set to match the
+X server to be tested and the underlying operating system on which Xlib
+is implemented.
+.VL 5 0
+.LI \s-1XT_DISPLAY\s0
+.br
+This should be set to a display string that can be passed to XOpenDisplay,
+to access the display under test.
+It must include a screen;
+all testing is done for a particular screen.
+.cS
+Eg: XT_DISPLAY=ariel:0.0
+.cE
+.LI \s-1XT_ALT_SCREEN\s0
+.br
+If the display supports more than one screen,
+this parameter should be set to the number of a screen
+that is different from that incorporated in the XT_DISPLAY variable.
+.br
+Set to the string
+.SM UNSUPPORTED
+if only one screen is available.
+.br
+Note that this should be a screen number, not a display string that can
+be passed to XOpenDisplay.
+.cS
+Eg: XT_ALT_SCREEN=1
+.cE
+.LI \s-1XT_FONTPATH\s0
+.br
+This should be set to a comma separated list that
+is a valid font path for the X server. It should include at least
+the components of the default font path for the X server, enabling the cursor
+font to be accessed.
+One of the components must be the directory
+in which the test fonts were installed (see the section entitled "Compiling
+and installing the test fonts").
+.P
+This parameter will be used to set the font path for specific test purposes
+which access the test fonts. The font path is restored on completion
+of the specific test purposes.
+.cS
+Eg: \s-1XT_FONTPATH=/usr/lib/X11/fonts/xtest/,/usr/lib/X11/fonts/misc/\s0
+.cE
+.LI \s-1XT_SPEEDFACTOR\s0
+.br
+This is a speedfactor which should be set to reflect the relative delay
+in response of the underlying operating system and X server combined.
+Co-operating processes which
+must synchronize allow a time delay in proportion to this speedfactor, to
+account for scheduling delays in the underlying operating system and X server.
+This should be set to a number greater than or equal to one.
+There should be no need to change the default unless the round trip time to
+the X server can be very long ( >15 seconds);
+in this case set this parameter to a
+value larger than the maximum round trip time divided by 3.
+.cS
+Eg: XT_SPEEDFACTOR=5
+.cE
+.LI \s-1XT_RESET_DELAY\s0
+.br
+Specifies a delay time in seconds.
+Set this to be a time which is greater than or equal to the maximum time
+required by your server to reset when the last client is closed.
+The test suite pauses for this time whenever a connection is about to be
+opened and the server may be resetting.
+The server may be resetting when the test case is entered (in startup())
+as a result of closing the last connection in the previous test case.
+The server also resets in a few places in the test for XCloseDisplay().
+.cS
+Eg. XT_RESET_DELAY=1
+.cE
+.LI \s-1XT_EXTENSIONS\s0
+.br
+Specifies whether you wish to test the extended assertions
+which require the XTEST extension.
+Set this to Yes if the XTEST extension is available on your system,
+and you have configured the test suite to use the XTEST extension,
+and you want to execute these tests, otherwise set to No.
+.br
+.cS
+Eg. XT_EXTENSIONS=No
+.cE
+.LE
+.H 3 "Configuration parameters for specific tests"
+The following parameters are used to control
+one or more specific test purposes in the \*(xT.
+These should be set to appropriate values for the X server to be tested.
+.P
+These parameters may cause temporary changes in the settings
+of the X server under test (such as the font path).
+Settings are restored on completion of the specific test purposes.
+.VL 5 0
+.LI \s-1XT_VISUAL_CLASSES\s0
+.br
+A space separated list of the visual classes that
+are supported for the screen given by XT_DISPLAY. Each visual class
+is followed by a list of depths at which the class is supported
+(enclosed by brackets and separated by commas with no spaces).
+Visual classes and depths that are supported only by other screens should
+not be included.
+.br
+Note that this parameter is only used to check the correctness of the values
+returned by XMatchVisualInfo and XGetVisualInfo. Other tests which loop
+over visuals obtain the values by calling these functions.
+.cS
+Eg. XT_VISUAL_CLASSES=StaticGray(1,8) GrayScale(1,8) StaticColor(8)
+ PseudoColor(8) TrueColor(8) DirectColor(8)
+\fR(This must be typed as one line.)\fP
+.cE
+.LI \s-1XT_FONTCURSOR_GOOD\s0
+.br
+This specifies the number of a glyph in the
+default cursor font known to exist.
+.SM XT_FONTCURSOR_GOOD+2
+should also be a glyph in the
+default cursor font.
+Neither of these should be the same as the X server's default cursor.
+.cS
+Eg: XT_FONTCURSOR_GOOD=2
+.cE
+.LI \s-1XT_FONTCURSOR_BAD\s0
+.br
+This specifies the number of a glyph in the
+default cursor font known not to exist.
+If no such value exists, set to
+.SM UNSUPPORTED .
+.cS
+Eg: XT_FONTCURSOR_BAD=9999
+.cE
+.LI \s-1XT_FONTPATH_GOOD\s0
+.br
+This should be set to a comma separated list that
+is a valid font path for the X server.
+It should
+be different from XT_FONTPATH. It need not contain the
+test fonts.
+.cS
+Eg: \s-1XT_FONTPATH_GOOD=/usr/lib/X11/fonts/100dpi/,/usr/lib/X11/fonts/75dpi/\s0
+.cE
+.LI \s-1XT_FONTPATH_BAD\s0
+.br
+This should be set to a comma separated list that
+is an invalid font path for the X server.
+If you cannot determine a suitable value, set to
+.SM UNSUPPORTED .
+There is no default value - by default, tests which use this parameter
+will be reported as
+.SM UNSUPPORTED .
+.cS
+Eg: XT_FONTPATH_BAD=/jfkdsjfksl
+.cE
+.LI \s-1XT_BAD_FONT_NAME\s0
+.br
+This should be set to a non-existent font name.
+.cS
+XT_BAD_FONT_NAME=non-existent-font-name
+.cE
+.LI \s-1XT_GOOD_COLORNAME\s0
+.br
+This should be set to the name of a colour
+which exists in the colour database for the X server.
+.cS
+Eg: XT_GOOD_COLORNAME=red
+.cE
+.LI \s-1XT_BAD_COLORNAME\s0
+.br
+This should be set to the name of a colour
+which does not exist in the colour database for the X server.
+.cS
+Eg: XT_BAD_COLORNAME=nosuchcolour
+.cE
+.LI \s-1XT_DISPLAYMOTIONBUFFERSIZE\s0
+.br
+This should be set to a non-zero value (the value
+returned by XDisplayMotionBufferSize) if the X server supports a more complete
+history of pointer motion than that provided by event notification, or
+zero otherwise. The
+more complete history is made available via the Xlib functions
+XDisplayMotionBufferSize and XGetMotionEvents.
+.cS
+Eg: XT_DISPLAYMOTIONBUFFERSIZE=0
+.cE
+.LE
+.H 3 "Configuration parameters for Display functions"
+The following parameters are used to control one or more test purposes for Xlib
+Display functions which are in section 2 of the X11R4 Xlib specifications.
+These should be set to match the display specified in the XT_DISPLAY parameter.
+.P
+Some of these parameters are specific to the particular screen of
+the display under test. This is also specified in the XT_DISPLAY parameter.
+.P
+Settings to these parameters will not cause any change in the settings
+of the X server under test.
+.P
+Suitable values for most of these parameters can be obtained from the
+output of the X11 utility
+.C xdpyinfo .
+.VL 5 0
+.LI \s-1XT_SCREEN_COUNT\s0
+.br
+This parameter should be set to the number of screens
+available on the display as returned by XScreenCount.
+.br
+.cS
+Eg: XT_SCREEN_COUNT=2
+.cE
+.LI \s-1XT_PIXMAP_DEPTHS\s0
+.br
+A space separated list of depths supported by the specified
+screen of the display that can be used for pixmaps.
+.cS
+Eg: XT_PIXMAP_DEPTHS=1 8
+.cE
+.LI \s-1XT_BLACK_PIXEL\s0
+.br
+This parameter should be set to the black pixel value
+of the specified screen of the display.
+.cS
+Eg: XT_BLACK_PIXEL=0x0
+.cE
+.LI \s-1XT_WHITE_PIXEL\s0
+.br
+This parameter should be set to the white pixel value
+of the specified screen of the display.
+.cS
+Eg: XT_WHITE_PIXEL=0xf
+.cE
+.LI \s-1XT_HEIGHT_MM\s0
+.br
+This parameter should be set to the height in millimeters
+of the specified screen of the display.
+.cS
+Eg: XT_HEIGHT_MM=224
+.cE
+.LI \s-1XT_WIDTH_MM\s0
+.br
+This parameter should be set to the width in millimeters
+of the specified screen of the display.
+.cS
+Eg: XT_WIDTH_MM=288
+.cE
+.LI \s-1XT_PROTOCOL_VERSION\s0
+.br
+This should be set to the major version number (11)
+of the X protocol as returned by XProtocolVersion.
+.cS
+Eg. XT_PROTOCOL_VERSION=11
+.cE
+.LI \s-1XT_PROTOCOL_REVISION\s0
+.br
+This should be set to the minor protocol
+revision number as returned by XProtocolRevision.
+.cS
+Eg. XT_PROTOCOL_REVISION=0
+.cE
+.LI \s-1XT_SERVER_VENDOR\s0
+.br
+This should be set to the X server vendor string
+as returned by XServerVendor.
+.cS
+Eg: XT_SERVER_VENDOR=
+.cE
+.LI \s-1XT_VENDOR_RELEASE\s0
+.br
+This should be set to the X server vendor's release
+number as returned by XVendorRelease.
+.cS
+Eg. XT_VENDOR_RELEASE=1
+.cE
+.LI \s-1XT_DOES_SAVE_UNDERS\s0
+.br
+Set this to Yes if the specified screen of the display
+supports save unders (indicated by XDoesSaveUnders returning True)
+otherwise set to No.
+.cS
+Eg. XT_DOES_SAVE_UNDERS=Yes
+.cE
+.LI \s-1XT_DOES_BACKING_STORE\s0
+.br
+Set this to the following value:
+.br
+0 - the specified screen supports backing store NotUseful
+.br
+1 - the specified screen supports backing store WhenMapped
+.br
+2 - the specified screen supports backing store Always
+.br
+The way the specified screen supports backing store is indicated by the
+return value of XDoesBackingStore.
+.cS
+Eg. XT_DOES_BACKING_STORE=2
+.cE
+.LE
+.H 3 "Configuration parameters for connection tests"
+The following parameters are used to control
+one or more test purposes for XOpenDisplay, XCloseDisplay and
+XConnectionNumber.
+These should be set to match the display specified in the XT_DISPLAY parameter
+and the characteristics of the underlying operating system.
+.P
+Settings to these parameters will not cause any change in the settings
+of the X server under test.
+.P
+These parameters are not used when making connections to the
+X server in other tests.
+.VL 5 0
+.LI \s-1XT_POSIX_SYSTEM\s0
+.br
+This may be set to Yes to indicate that the
+underlying operating system is a POSIX system. If this parameter is
+set to Yes, some extended assertions which describe implementation
+dependent functionality will be tested assuming POSIX concepts.
+.cS
+Eg. XT_POSIX_SYSTEM=Yes
+.cE
+.LI \s-1XT_DECNET\s0
+.br
+Set this to Yes if clients can connect to the X server under
+test using DECnet.
+This will be used (on a POSIX system)
+in the tests for XOpenDisplay.
+.cS
+Eg. XT_DECNET=No
+.cE
+.LI \s-1XT_TCP\s0
+.br
+Set this to Yes if clients can connect to the X server under
+test using TCP streams.
+This will be used (on a POSIX system)
+in the tests for XOpenDisplay.
+.cS
+Eg. XT_TCP=Yes
+.cE
+.LI \s-1XT_DISPLAYHOST\s0
+.br
+Set this to the hostname of the machine on which the display
+is physically attached. This will be used instead of XT_DISPLAY
+(on a POSIX system)
+in the tests for XOpenDisplay which specifically test the hostname
+component of the display name.
+.P
+Note that this may not be the same as the machine on which the
+test suite clients execute (XTESTHOST).
+.cS
+Eg. XT_DISPLAYHOST=ariel
+.cE
+.LI \s-1XT_LOCAL\s0
+.br
+Set this to Yes if clients can connect to a local X server
+without passing a hostname to XOpenDisplay.
+This will be used (on a POSIX system)
+in the tests for XOpenDisplay.
+This is usually the case when the X server under test is running on the
+same platform as the \*(xT.
+When a hostname is omitted, the Xlib implementation of XOpenDisplay
+can use the fastest available transport mechanism to make local connections.
+.cS
+Eg. XT_LOCAL=No
+.cE
+.LE
+.P
+.H 3 "Configuration Parameters which do not affect test results"
+There are a number of execution configuration parameters which can be used
+to reduce the size of the journal file, or dump out more information from the
+test suite.
+They will not alter the behaviour of the tests or the test results.
+.P
+.VL 5 0
+.LI \s-1XT_SAVE_SERVER_IMAGE\s0
+.br
+When set to Yes,
+the image produced by the server
+that is compared with the known good image is dumped to a file
+with suffix ".sav" .
+.cS
+Eg: XT_SAVE_SERVER_IMAGE=Yes
+.cE
+.LI \s-1XT_OPTION_NO_CHECK\s0
+.br
+This may be set to Yes to suppress the journal file
+records containing
+.SM CHECK
+keywords. Refer to appendix D for
+information on the contents of these messages.
+.cS
+Eg: XT_OPTION_NO_CHECK=Yes
+.cE
+.LI \s-1XT_OPTION_NO_TRACE\s0
+.br
+This may be set to Yes to suppress the journal file
+records containing
+.SM TRACE
+keywords. Refer to appendix D for
+information on the contents of these messages.
+.cS
+Eg: XT_OPTION_NO_TRACE=Yes
+.cE
+.LE
+.P
+.H 3 "Configuration Parameters for debugging tests"
+There are a number of execution configuration parameters which should
+not be set when performing verification test runs. These are intended
+for debugging purposes. These parameters may affect the behaviour of some test
+purposes if they are set to assist debugging.
+.P
+.VL 5 0
+.LI \s-1XT_DEBUG\s0
+.br
+This may be set to a debugging level.
+A higher level produces more debugging output. Output is only
+produced by the test suite at levels 1, 2 and 3. Setting
+this variable to 0 produces no debug output, and 3 gives everything
+possible (setting this variable to 3 can give an enormous volume of output
+so you should not do this when running large numbers of test sets).
+.cS
+Eg: XT_DEBUG=0
+.cE
+.LI \s-1XT_DEBUG_OVERRIDE_REDIRECT\s0
+.br
+When set to
+.C Yes ,
+windows are created with
+override_redirect set.
+This enables tests to be run more easily with a
+window manager running on the same screen.
+This should not be set to
+.C Yes
+for verification tests.
+.cS
+Eg: XT_DEBUG_OVERRIDE_REDIRECT=No
+.cE
+.LI \s-1XT_DEBUG_PAUSE_AFTER\s0
+.br
+When set to
+.C Yes ,
+the test pauses after each call to the Xlib
+function being tested, until Carriage Return is entered.
+This is useful to enable the results of
+graphics operations to be observed.
+This should not be set to
+.C Yes
+for verification tests.
+.cS
+Eg: XT_DEBUG_PAUSE_AFTER=No
+.cE
+.LI \s-1XT_DEBUG_PIXMAP_ONLY\s0
+.br
+When set to
+.C Yes ,
+tests which would normally loop over
+both windows and pixmaps are restricted to loop over just pixmaps.
+This is useful for speeding up the
+execution of the test set.
+This should not be set to
+.C Yes
+for verification tests.
+.P
+If
+.SM XT_DEBUG_WINDOW_ONLY
+is also set to
+.C Yes ,
+some tests will report
+.SM UNRESOLVED
+due to the fact that nothing has been tested.
+.cS
+Eg: XT_DEBUG_PIXMAP_ONLY=No
+.cE
+.LI \s-1XT_DEBUG_WINDOW_ONLY\s0
+.br
+When set to
+.C Yes ,
+tests which would normally loop over
+both windows and pixmaps are restricted to loop over just windows.
+This is useful for speeding up the
+execution of the test set.
+This should not be set to
+.C Yes
+for verification tests.
+.P
+If
+.SM XT_DEBUG_PIXMAP_ONLY
+is also set to
+.C Yes ,
+some tests will report
+.SM UNRESOLVED
+due to the fact that nothing has been tested.
+.cS
+Eg: XT_DEBUG_WINDOW_ONLY=No
+.cE
+.LI \s-1XT_DEBUG_DEFAULT_DEPTHS\s0
+.br
+When set to
+.C Yes ,
+tests which would normally loop over multiple
+depths are restricted to test just the first visual returned by
+XGetVisualInfo and/or the first pixmap depth returned by XListDepths
+(depending on whether
+.SM XT_DEBUG_PIXMAP_ONLY
+or
+.SM XT_DEBUG_WINDOW_ONLY
+is also set).
+This is useful for speeding up the
+execution of the test set.
+This should not be set to
+.C Yes
+for verification tests.
+.P
+Note that the first visual returned by XGetVisualInfo may not be the default
+visual for the screen.
+.cS
+Eg: XT_DEBUG_DEFAULT_DEPTHS=No
+.cE
+.LI \s-1XT_DEBUG_VISUAL_IDS\s0
+.br
+When set to a non-empty string, tests which would
+normally loop over multiple depths are restricted to test just the
+visuals ID's listed. Note that visual ID's for visuals on more than
+one screen may be entered, but those used will depend on whether the test
+being executed uses visuals on the default screen or alternate screen.
+The visuals ID's should be entered in decimal, octal or hexadecimal
+and separated with commas and with no intervening spaces.
+This should not be set to a non-empty string for verification tests.
+.cS
+Eg. XT_DEBUG_VISUAL_IDS=0x80064,0x80068,0x8006A
+.cE
+.LI \s-1XT_DEBUG_NO_PIXCHECK\s0
+.br
+When set to
+.C Yes ,
+tests
+which would normally perform pixmap verification omit this (all other
+processing is performed in those tests as normal).
+Pixmap verification is a scheme which compares the image produced by the
+X server with a known good image file which is part of the \*(xT (this is
+described further in the section entitled "Examining Image Files").
+This should not be set to
+.C Yes
+for verification tests.
+.cS
+Eg: XT_DEBUG_NO_PIXCHECK=No
+.cE
+.LI \s-1XT_DEBUG_BYTE_SEX\s0
+.br
+When set to
+.SM NATIVE ,
+.SM REVERSE ,
+.SM MSB
+or
+.SM LSB ,
+the X Protocol tests will only be executed with the specified byte sex.
+When the parameter is not set to one of these values,
+the X Protocol tests make connections to the X server using
+both the native and reversed byte sex.
+.P
+Note: The parameter should always be set to
+.SM NATIVE
+when the build configuration parameter
+.SM XP_OPEN_DIS
+was set to XlibOpaque.c
+.cS
+Eg: XT_DEBUG_BYTE_SEX=NATIVE
+.cE
+.LI \s-1XT_DEBUG_VISUAL_CHECK\s0
+.br
+When set to a non-zero value, the X Protocol tests
+will pause for the specified time interval (in seconds), to enable a visual
+check to be performed on the displayed screen contents.
+.cS
+Eg: XT_DEBUG_VISUAL_CHECK=5
+.cE
+.H 3 "Configuration Parameters used only during test development"
+This section defines a number of parameters that are used only when
+generating known good image files. These are not intended to be modified
+and need not be used when running the test suite.
+They are only used in the development environment
+at UniSoft when generating known good image files.
+.P
+.VL 5 0
+.LI \s-1XT_FONTDIR\s0
+.br
+The directory in which the xtest fonts are located
+(before being installed).
+This must be set such that appending a string gives a valid file name.
+This is normally set to \fC$TET_ROOT/xtest/fonts/\fP.
+.cS
+Eg: XT_FONTDIR=/tree/Xtest/x/root/xtest/fonts/
+.cE
+.LE
+.H 2 "Executing tests using the \s-1TET\s0"
+The \*(xT is executed by invoking the execute mode of the Test Case
+Controller.
+.cS
+cd $TET_ROOT/xtest
+tcc -e [ -s scenario_file ] [ -j journal_file ] [ -x config_file ]
+ [ -y string ] xtest all
+.cE
+.VL 5 0
+.LI \fC-e\fP
+.br
+This invokes the \s-1TCC\s0 in execute mode.
+.LI "\fC-s scenario_file\fP"
+.br
+This option executes the test sets in the named scenario file.
+The default is a file named \fCtet_scen\fP in the directory
+\fC$TET_ROOT/xtest\fP.
+For more details refer to the section entitled
+"Executing modified scenarios using the \s-1TET\s0".
+.LI "\fC-j journal_file\fP"
+.br
+This option sends the test results to the named journal file.
+The default is a file named \fCjournal\fP in a newly created sub-directory
+of \fC$TET_ROOT/xtest/results\fP. Sub-directories are created with sequential
+four digit numbers, with the
+.SM TCC
+flags (in this case "e") appended.
+The \s-1TCC\s0 will exit if the specified journal file already exists, thus the
+journal file should be renamed or removed
+before attempting to execute the \s-1TCC\s0.
+.LI "\fC-x config_file\fP"
+.br
+This is an option to run the test suite using the information in a
+modified execution configuration file named
+.C config_file .
+The default is
+.C tetexec.cfg .
+.LI "\fC-y string\fP"
+.br
+This option only executes tests which include the specified string in the
+scenario file line. This may be used to execute specific sections or individual
+test sets.
+.LI \fCxtest\fP
+.br
+This is the name of the test suite.
+It determines the directory under $\s-1TET_ROOT\s0
+where the test suite is to be found.
+.LI \fCall\fP
+.br
+This is the scenario name in the default scenario file
+\fC$TET_ROOT/xtest/tet_scen\fP.
+For more details refer to the section entitled
+"Executing modified scenarios using the \s-1TET\s0".
+.LE
+.P
+A journal file
+will be produced.
+More information on the contents of the journal file is given in
+appendix C.
+.P
+Note: If the \s-1TCC\s0
+terminates due to receipt of a signal which
+cannot be caught, the \s-1TCC\s0
+may leave lock files in the test source directories. Subsequent
+attempts to restart the \s-1TCC\s0 may give error messages
+saying that a lock file was encountered. At this point
+\s-1TCC\s0
+may suspend the build. It may be
+necessary to find and remove files or directories named \fCtet_lock\fP
+before continuing.
+.H 2 "Building, executing and cleaning tests using the \s-1TET\s0"
+Each test in the \*(xT may be built, executed and cleaned before
+the next test set in the scenario. This mode of use has the advantage that
+the entire \*(xT may be executed without necessarily building all the
+test sets in advance, thus ensuring disc space is conserved throughout.
+This mode of use has the disadvantage that you will
+need to rebuild a test set before rerunning, which will take
+considerably longer than if it is built in advance.
+.P
+The \*(xT is built, executed and cleaned
+by simultaneously invoking the build, execute and clean modes of the Test Case
+Controller.
+.cS
+cd $TET_ROOT/xtest
+tcc -bec [ -s scenario_file ] [ -j journal_file ] [ -x config_file ]
+ [ -y string ] xtest all
+.cE
+.VL 5 0
+.LI \fC-b\fP
+This invokes the \s-1TCC\s0 in build mode.
+.LI \fC-e\fP
+This invokes the \s-1TCC\s0 in execute mode.
+.LI \fC-c\fP
+This invokes the \s-1TCC\s0 in clean mode.
+.LE
+.P
+The other options are as described in the earlier section entitled
+"Executing tests using the \s-1TET\s0".
+.P
+A journal file
+will be produced. This contains for each test set in order the results of
+the build, followed by the test results, followed by the results of the clean.
+More information on the contents of the journal file is given in
+appendix C.
+.P
+The default journal file is named \fCjournal\fP in a newly created sub-directory
+of \fC$TET_ROOT/xtest/results\fP. Sub-directories are created with sequential
+four digit numbers, with the
+.SM TCC
+flags (in this case "bec") appended.
+.H 2 "Executing modified scenarios using the \s-1TET\s0"
+.H 3 "Format of the scenario file"
+The \s-1TET\s0 uses a scenario file to determine which test sets to execute.
+The file
+\fC$TET_ROOT/xtest/tet_scen\fP
+is the default scenario file.
+The format is basically a scenario name starting in column one,
+followed by list of test sets to be executed (each starting beyond column one).
+Only one scenario named "all" is provided in the default scenario file.
+.P
+The names of the test sets are given relative to the directory
+$TET_ROOT/xtest, and must commence with a leading slash.
+.H 3 "Modifying the scenario file"
+The file
+\fC$TET_ROOT/xtest/tet_scen\fP
+may be modified by removing lines corresponding to test sets which are not
+wanted. These will then simply not be executed by the \s-1TCC\s0.
+Alternatively, unwanted
+lines may be commented out by placing \fC#\fP at the start of the line.
+.P
+If you wish to execute just a subset of the test purposes in a test set,
+refer to the section below entitled "Executing individual test purposes
+using the \s-1TET\s0".
+.P
+It is recommended that the supplied scenario file should be saved if it is
+modified.
+.H 3 "Creating new scenario files"
+A new scenario file may be created in the directory
+\fC$TET_ROOT/xtest\fP.
+The \s-1TCC\s0 will use this scenario file instead of the file
+\fC$TET_ROOT/xtest/tet_scen\fP
+if it is passed via the \fC-s\fP option. For example
+.cS
+cd $TET_ROOT/xtest
+tcc -e -s scenario_file [ -j journal_file ] [ -x config_file ]
+ [ -y string ] xtest all
+.cE
+.H 2 "Executing individual test purposes using the \s-1TET\s0"
+Each assertion in the \*(xT has separate test code which is known as a
+test purpose.
+We have arranged that each test purpose is also
+a separately invocable component,
+and that the invocable component number is identical
+to the test purpose number.
+.P
+The expression within the braces
+at the end of a line within a scenario file is an
+invocable component list (or IC_list).
+The default invocable component list \fCall\fP causes the
+\s-1TCC\s0 to execute all invocable components in a test set.
+.P
+By altering the invocable component list for a test set,
+particular invocable components of interest can be
+executed.
+.P
+The invocable component list consists of one or more elements separated
+by commas. Each element is either an invocable component number,
+or a range of invocable component numbers separated by a dash.
+.P
+This is useful for quickly executing a particular test purpose of interest
+for example:
+.cS
+/tset/CH05/stclpmsk/Test{3}
+.cE
+This is also useful for executing all test purposes except one known
+to cause a system error. This may be useful if a particular test purpose
+causes your X server to exit (at present the \s-1TET\s0 provides no high level
+control facilities to conditionally cancel later test sets).
+For example:
+.cS
+/tset/CH05/stclpmsk/Test{1-2,4-6}
+.cE
+.P
+Note that the placement of windows used by the test suite may differ
+when an earlier test purpose is not executed. It is intended that test
+purposes produce the same results regardless of window placement.
+.H 2 "Executing tests without using the \s-1TET\s0"
+See section 11, entitled
+"Building, executing and reporting tests without using the \s-1TET\s0".
+.H 2 "Executing tests in space-saving format using the \s-1TET\s0"
+Before reading this section, read the section entitled "Building
+tests in space-saving format".
+When you have built all the sections of the test suite in space-saving
+format, you can execute all the tests in the test suite using
+the instructions in this section.
+.P
+A scenario named \fClinkexec\fP is provided in a scenario file
+named \fClink_scen\fP in the directory
+$TET_ROOT/xtest.
+This enables the \s-1TCC\s0 to execute the space-saving
+executable files which have been built.
+.P
+Execute the command:
+.cS
+cd $TET_ROOT/xtest
+tcc -e -s link_scen [ -j journal_file ] [ -x config_file ]
+ [ -y string ] xtest linkexec
+.cE
+.SK
+.H 1 "Report writer"
+A basic report writer
+\fCrpt\fP
+is included with the \*(xT.
+It extracts and formats the main information from a
+TET journal file produced by executing the \s-1TCC\s0 in execute
+mode, or build-execute-clean mode.
+It does not format the \s-1TET\s0 journal file produced by the
+\s-1TCC\s0 in build only or clean only mode.
+The main features of the \s-1TET\s0 journal file produced by the \s-1TCC\s0 in
+execute or build-execute-clean mode are described in appendix\ C.
+.P
+Execute the report writer as follows:
+.P
+.cS
+rpt [ -t ] [ -d ] [ -p ] [ -s ] [ -f file ]
+.cE
+With only the -f argument, \fCrpt\fP lists the results of each test purpose
+for all test sets that appear in the journal file \fCfile\fP.
+The default is the file named
+.C journal
+in the highest numbered subdirectory of the
+.C $TET_ROOT/xtest/results
+directory that has an 'e' suffix.
+.P
+The reason for any test result code which is other than PASS is printed out.
+This is done by copying the test information messages of type REPORT.
+For further details, see appendix D.
+.P
+A warning message is printed if a test information message of type REPORT
+is given in a test purpose which produced a test result code PASS.
+.P
+The results for each test set are followed
+by a summary of the number of test purposes in the test set
+which produced each result code type.
+.P
+There is no overall summary list of results for all test sets in the journal
+file.
+.P
+.VL 5 0
+.LI -t
+.br
+Test information messages of type TRACE in the test purposes
+specified are printed.
+For further details, see appendix D.
+.LI -d
+.br
+Test information messages of type TRACE or DEBUG in the test purposes
+specified are printed.
+For further details, see appendix D.
+.LI -p
+.br
+Output is restricted to omit reporting on test purposes that
+resolve to \s-1PASS\s0, \s-1UNSUPPORTED\s0, \s-1UNTESTED\s0
+or \s-1NOTINUSE\s0 \*(EM thereby
+reporting only tests showing possible errors.
+.LI -s
+.br
+The result summaries after the end of each test set are omitted.
+.LE
+.SK
+.H 1 "Examining image files"
+.H 2 "Generating pixmap error files"
+During the test run, discrepancies may be encountered between the image
+displayed by the server and the known good image. The known good image
+may have been obtained from a known good image file supplied with the
+release, or it may have been determined analytically.
+.P
+Should a discrepancy be encountered, the test purpose
+will give a result code of FAIL. The failure reason message will
+name a pixmap error file in which is contained both the known good image and
+the server image.
+.P
+A debug option has been provided, which skips any verification of the
+image produced by the server with known good image files. This
+is done by setting the execution configuration parameter
+.SM XT_DEBUG_NO_PIXCHECK
+to \fCYes\fP.
+.H 2 "Pixmap error file naming scheme"
+Each invocation of the
+.SM TCC
+creates a sub-directory
+in \fC$TET_ROOT/xtest/results\fP. Sub-directories are created with sequential
+four digit numbers, with the
+.SM TCC
+flags ("e" or "bec") appended. The default
+.SM TET
+journal is a file named
+\fCjournal\fP created in this directory.
+.P
+Pixmap error files are stored in a directory tree created within the
+newly created results sub-directory. So, for example, when the
+line
+.cS
+/tset/CH06/drwln
+.cE
+is executed in a scenario file, pixmap error files might be produced
+in a directory named
+\fC$TET_ROOT/xtest/results/0001bec/tset/CH06/drwln\fP.
+.P
+The creation of a new results directory tree for each execution of the
+.SM TCC
+enables results to be obtained in parallel against multiple
+X servers.
+.P
+Pixmap error files are named Err\fCnnnn\fP.err,
+where \fCnnnn\fP
+is a four digit number. This number does not
+correspond to the number of the test purpose which caused the error.
+.P
+Note - when tests are executed without using the
+.SM TCC
+the error files are produced in the current directory.
+.H 2 "Known good image file naming scheme"
+All the required known good image files for the test programs in the
+\*(xT (as supplied) have been created in advance.
+The known good image files for each test program
+are supplied in the \*(xT in the test set directory in which the dot-m
+file is supplied. They are named a\fCnnn\fP.dat, where \fCnnn\fP is the
+number of the test purpose for which the known good image file was generated.
+.P
+More details of the contents of this release are in appendix A.
+.H 2 "Using blowup to view image files"
+The contents of the two images in a pixmap error file
+may be compared by using the blowup utility.
+.P
+Also, a known good image file may be viewed directly.
+.P
+The file formats of the error file and the known good image file are
+the same. The blowup utility detects which file type is being viewed
+by means of file name. For this reason, do not rename the
+pixmap error or known good image files.
+.H 3 "Blowup command"
+The blowup utility may be used to view one or more pixmap error files or
+known good image files as follows:
+.P
+.cS
+blowup [-z zoom_factor] [-f font] [-d display] [-colour] file(s)
+.cE
+.VL 5 0
+.LI "\fC-z zoom_factor\fP"
+.br
+This option sets the magnification factor in all the blowup windows.
+.LI "\fC-f font\fP"
+.br
+This option ensures that
+.C font
+is used rather than the default font. The default font is 6x10.
+.LI "\fC-d display\fP"
+.br
+This option uses the display named
+.C display
+for the display windows.
+.LI "\fC-colour\fP"
+.br
+On a colour display, this option will display different pixel
+values in different colours corresponding to that server's colour table.
+No attempt is made to preserve colours between different servers.
+.LE
+.H 3 "Blowup windows"
+Two windows are created. The first is called Comparison,
+and the second is called Blowup.
+The Blowup window
+shows a magnified version of a portion of the Comparison window,
+which is indicated in the Comparison window by a rectangle. A user
+interface menu is shown in the Blowup window.
+.P
+The title of the Comparison window will change to
+"Server Data", then to "Pixval Data" and then back to "Comparison"
+when the "B/G/Both" option on the menu is used.
+.H 3 "Selection of a viewing region"
+This may be done in one of three ways:
+.AL
+.LI
+Click in the Comparison window.
+.LI
+Click in a square in the Blowup window. This becomes the new centre square
+in that window.
+.LI
+Choose the "next error" option on the menu. The next pixel at which there
+is a discrepancy will become the new centre square in the Blowup
+window.
+.LE
+.H 3 "Information displayed"
+The value stored in the centre pixel
+and its coordinates are shown as the top items
+in the menu. Under some circumstances, the expected pixel value will
+be shown to the right of the actual value.
+.H 3 "Display of errors"
+When the "B/G/Both" option is set to Both, and the title of the Comparison
+window is Comparison,
+errors are displayed in two ways: one for each window.
+.VL 5 0
+.LI
+In the Comparison window pixels set to non-zero in the "good image"
+but set incorrectly in the "server data" are shown as a cross (X).
+.LI
+In the blowup window these are shown as a white square with
+a cross (X) through it.
+.LI
+In the Comparison window pixels set to zero in the "good image"
+but set incorrectly in the "server data" are shown as shaded squares.
+.LI
+In the blowup window these are shown as a black square with
+a white cross through it.
+.LE
+.P
+The reason that we have proposed the two different methods of displaying errors
+is as follows. One normally has a higher magnification in the Blowup
+window and the use of a cross (X) through incorrect pixels
+is good, and simple to remember
+at this level of zoom. In the Comparison window
+this style of display
+does not work well at the lower magnification levels; all the crosses merge to
+a blur so it is hard to see what type of error is being displayed.
+.H 3 "Commands (via menu in the Blowup window)"
+All of the commands are invoked by clicking the left mouse button when the
+corresponding menu item is highlighted (inverted). The available commands are,
+from top to bottom:
+.VL 5 0
+.LI B/G/Both
+.br
+Show Bad (Server Data), Good (Pixval Data) or Both
+(Comparison). Clicking in this advances around the
+cycle
+.ft C
+.DS
+Bad ----> Good -> Both
+ \------<------<----/
+.DE
+.ft
+The Comparison window's name changes to reflect the
+current state.
+.P
+If a known good image file is being displayed then only the Good
+option is available. A pixmap error file is required for this
+command to be useful.
+.LI color/mono
+.br
+Use colour/monochrome in the Blowup window.
+.LI "next error"
+.br
+Advance centre pixel point to be next pixel at which there is a
+discrepancy.
+.LI "sub-zoom +"
+.br
+Zoom in (make bigger by zoomfactor) on the Blowup window
+.LI "sub-zoom -"
+.br
+Zoom out (make smaller by zoomfactor) on the Blowup window
+.LI "quit"
+.br
+Quit from the blowup utility.
+.LI "big-zoom +"
+.br
+Zoom in (make bigger by zoomfactor) on the Comparison window
+.LI "big-zoom -"
+.br
+Zoom out (make smaller by zoomfactor) on the Comparison window
+.LI "next"
+.br
+View next file in the list. The Blowup window will
+be removed and a new one created for each file. The
+size, and zoom factor, of the Comparison window will
+be preserved across files.
+.LE
+.SK
+.H 1 "Cleaning the tests"
+.H 2 "Cleaning tests using the \s-1TET\s0"
+The entire \*(xT can be cleaned by using the
+clean mode of the \s-1TCC\s0. In this mode, the clean configuration
+parameters in the file
+.C $TET_ROOT/xtest/tetclean.cfg
+are used to clean each test
+set in the \*(xT separately. Previously built test set executables
+and object files are removed.
+.P
+.cS
+cd $TET_ROOT/xtest
+tcc -c [ -s scenario_file ] [ -j journal_file ] [ -y string ] xtest all
+.cE
+.VL 5 0
+.LI \fC-c\fP
+.br
+This invokes the \s-1TCC\s0 in clean mode.
+.LI "\fC-s scenario_file\fP"
+.br
+This option cleans the test sets in the named scenario file.
+The default is a file named \fCtet_scen\fP in the directory
+\fC$TET_ROOT/xtest\fP.
+For more details refer to the section entitled
+"Cleaning modified scenarios using the \s-1TET\s0".
+.LI "\fC-j journal_file\fP"
+.br
+This option sends the output of the clean to the named journal file.
+The default is a file named \fCjournal\fP in a newly created sub-directory
+of \fC$TET_ROOT/xtest/results\fP. Sub-directories are created with sequential
+four digit numbers, with the
+.SM TCC
+flags (in this case "c") appended.
+The \s-1TCC\s0 will exit if the specified journal file already exists, thus the
+journal file should be renamed or removed
+before attempting to execute the \s-1TCC\s0.
+.LI "\fC-y string\fP"
+.br
+This option only cleans tests which include the specified string in the
+scenario file line. This may be used to clean specific sections or individual
+test sets.
+.LI \fCxtest\fP
+.br
+This is the name of the test suite.
+It determines the directory under $\s-1TET_ROOT\s0
+where the test suite is to be found.
+.LI \fCall\fP
+.br
+This is the scenario name in the default scenario file
+\fC$TET_ROOT/xtest/tet_scen\fP.
+For more details refer to the section entitled
+"Cleaning modified scenarios using the \s-1TET\s0".
+.LE
+.P
+This will execute the \s-1TET\s0 clean tool in the \s-1TET\s0 configuration
+variable
+.SM TET_CLEAN_TOOL
+(which is normally pclean),
+in each test set directory of the \*(xT.
+.P
+The journal file should be examined to verify
+that the clean process succeeded.
+The report writer \fCrpt\fP cannot interpret the contents
+of a journal file produced during the clean process.
+.P
+Note: If the \s-1TCC\s0
+terminates due to receipt of a signal which
+cannot be caught, the \s-1TCC\s0
+may leave lock files in the test source directories. Subsequent
+attempts to restart the \s-1TCC\s0 may give error messages
+saying that a lock file was encountered. At this point
+\s-1TCC\s0
+may suspend the build. It may be
+necessary to find and remove files or directories named \fCtet_lock\fP
+before continuing.
+.H 2 "Cleaning modified scenarios using the \s-1TET\s0"
+.H 3 "Format of the scenario file"
+Refer to the earlier section "Building modified scenarios using the \s-1TET\s0".
+.H 3 "Modifying the scenario file"
+Refer to the earlier section "Building modified scenarios using the \s-1TET\s0".
+.H 3 "Creating new scenario files"
+A new scenario file may be created in the directory
+\fC$TET_ROOT/xtest\fP.
+The \s-1TCC\s0 will use this scenario file instead of the file
+\fC$TET_ROOT/xtest/tet_scen\fP
+if it is passed via the \fC-s\fP option. For example
+.cS
+cd $TET_ROOT/xtest
+tcc -c -s scenario_file [ -j journal_file ] [ -y string ] xtest all
+.cE
+.H 2 "Cleaning tests without using the \s-1TET\s0"
+See section 11, entitled
+"Building, executing and reporting tests without using the \s-1TET\s0".
+.H 2 "Cleaning tests built in space-saving format"
+It is possible to clean the tests in the \*(xT which were
+previously built in space-saving format.
+.H 3 "Cleaning tests in space-saving format using the \s-1TET\s0"
+A scenario named \fClinkbuild\fP is provided in a scenario file
+named \fClink_scen\fP in the directory
+$TET_ROOT/xtest.
+This enables the \s-1TCC\s0 to clean the space-saving
+executable files and remove all the required links for each test set in
+each section of the \*(xT.
+The -y option allows a particular space-saving
+executable and its links for a single section to be removed.
+.P
+Execute the command:
+.cS
+cd $TET_ROOT/xtest
+tcc -c -s link_scen [ -j journal_file ] [ -y string ] xtest linkbuild
+.cE
+This command will execute the \s-1TET\s0 clean tool in the \s-1TET\s0 configuration
+variable
+.SM TET_CLEAN_TOOL
+(which is normally pclean),
+in the top level directory of each section of the test suite.
+.H 3 "Cleaning tests in space-saving format without using the \s-1TET\s0"
+This section describes how to clean the space-saving
+executable files for a particular section of the
+\*(xT directly without using the \s-1TET\s0.
+.P
+This can be simply done by calling pclean in the required directory.
+For example, to clean all the space-saving executable files for
+section 5 of the \*(xT, execute the command:
+.cS
+cd $TET_ROOT/xtest/tset/CH05
+pclean
+.cE
+.SK
+.H 1 "Building, executing and reporting tests without using the \s-1TET\s0"
+.H 2 "Building tests"
+An individual test set can be rebuilt
+without the need to use the build mode of the \s-1TCC\s0.
+This is done by executing \fCpmake\fP directly, rather than as a \s-1TET\s0
+build tool.
+.P
+This is a useful facility for building a single test set after a
+previous build has failed.
+.P
+The build configuration parameters used by \fCpmake\fP
+are obtained from a file named
+$TET_BUILDCONFIG, or, if TET_BUILDCONFIG is not set in your environment,
+from the file named $TET_ROOT/xtest/tetbuild.cfg.
+.P
+The \fCpmake\fP command should be executed in the directory containing the
+source code for the test set which is to be rebuilt. For more details
+of the names of the directories containing the source code
+for the test sets, refer to appendix A.
+.P
+For example
+.cS
+cd $TET_ROOT/xtest/tset/CH05/stclpmsk
+pmake
+.cE
+.P
+No journal file is created when \fCpmake\fP is executed directly.
+.P
+The test set can also be rebuilt using the command
+.cS
+pmake Test
+.cE
+.P
+If there is a macro version of the Xlib function, this may be rebuilt
+using the command
+.cS
+pmake MTest
+.cE
+.H 2 "Executing tests"
+An individual test set can be executed
+without the need to use the execute mode of the \s-1TCC\s0.
+This is done by executing a shell script \fCpt\fP.
+.P
+This is a useful facility for executing a single test set
+repeatedly when investigating a particular test result.
+.P
+The execution configuration parameters used by \fCpt\fP
+are obtained from a file named
+$TET_CONFIG, or, if TET_CONFIG is not set in your environment,
+from the file named $TET_ROOT/xtest/tetexec.cfg.
+.P
+The \fCpt\fP command is a shell
+script, which attempts to execute the binary file named \fCTest\fP
+in the current directory. If the file \fCTest\fP is not found,
+the \fCpt\fP command attempts to execute the space-saving executable file
+built in that directory.
+.P
+The \fCpt\fP command should be executed in the directory containing the
+test set which has been built.
+Unless you have manually installed the test set elsewhere, this will be
+the directory containing the source code for the test set. For more details
+of the names of the directories containing the source code
+for the test sets, refer to appendix A.
+.P
+For example
+.cS
+cd $TET_ROOT/xtest/tset/CH05/stclpmsk
+pt
+.cE
+.P
+A \s-1TET\s0 results file is created when \fCpt\fP is executed directly.
+This is a file named \fCtet_xres\fP located in the directory in which the
+test was executed.
+.P
+There are a number of options which may be passed to \fCpt\fP which
+alter the manner in which the test set is executed.
+.P
+Execute \fCpt\fP as follows:
+.P
+.cS
+pt [ -v XT_VARIABLE_NAME ] [ -d display ] [-i IC_list ] [ -p ] [ -w ]
+ [ -P ] [ -D ] [ -x debug_level ] [ -g ] [ -m ]
+.cE
+.P
+.VL 5 0
+.LI "-v XT_VARIABLE_NAME=Value"
+.br
+Modifies the value of the execution configuration parameter named
+XT_VARIABLE_NAME, assigning it a value of \fCValue\fP.
+.LI "-d display"
+.br
+Sets the display string to be used for the test.
+.br
+The default value is taken from the environment variable DISPLAY,
+or, if this is not set, from the
+execution configuration parameter XT_DISPLAY.
+.LI "-i IC_list"
+.br
+The invocable components executed will be those specified
+in IC_list.
+.P
+Each assertion in the \*(xT has separate test code, which is known as a
+test purpose.
+We have arranged that each test purpose is also
+a separately invocable component,
+and that the invocable component number is identical
+to the test purpose number.
+.P
+The invocable component list consists of one or more elements separated
+by commas. Each element is either an invocable component number
+or a range of invocable component numbers separated by a dash.
+.P
+This is useful for quickly executing a particular test purpose of interest
+for example:
+.cS
+pt -i 37
+.cE
+This is also useful for executing all test purposes except one known
+to cause a system error.
+For example:
+.cS
+pt -i 1-36,38-57
+.cE
+Note that the placement of windows used by the test suite may differ
+when an earlier test purpose is not executed. It is intended that test
+purposes produce the same results regardless of window placement.
+.LI -p
+.br
+This option is equivalent to setting the
+execution configuration parameter XT_DEBUG_PIXMAP_ONLY to Yes.
+.LI -w
+.br
+This option is equivalent to setting the
+execution configuration parameter XT_DEBUG_WINDOW_ONLY to Yes.
+.LI -P
+.br
+This option is equivalent to setting the
+execution configuration parameter XT_DEBUG_PAUSE_AFTER to Yes.
+.LI -D
+.br
+This option is equivalent to setting the
+execution configuration parameter XT_DEBUG_DEFAULT_DEPTHS to Yes.
+.LI "-x debug_level"
+.br
+This option is equivalent to setting the
+execution configuration parameter XT_DEBUG to \fCdebug_level\fP.
+.LI -g
+.br
+The binary file \fCpvgen\fP will be executed instead of the binary
+file \fCTest\fP. This option should not be used, since binary
+files named \fCpvgen\fP
+are only used in the development environment
+at UniSoft when generating known good image files.
+.LI -m
+.br
+The binary file \fCMTest\fP will be executed instead of the binary
+file \fCTest\fP. Files named \fCMTest\fP contain tests for the
+macro version of an Xlib function.
+.LE
+.P
+Note that \fCpt\fP creates a temporary file
+\fCCONFIG\fP in the current directory
+containing the configuration parameters, so write permission is required
+to this file (or if no file is there, to the current directory).
+.P
+Note also that the binary file \fCTest\fP creates a temporary
+file \fC.tmpresfd\fP in the current directory
+containing the configuration parameters, so write permission is required
+to this file.
+.H 2 "Reporting tests"
+The \s-1TET\s0 results file produced for an individual test set can be formatted
+using the basic report writer \fCrpt\fP, which is described in more detail
+in the section entitled "Report writer". The argument \fC-f tet_xres\fP
+formats the contents of the \fCtet_xres\fP file.
+.P
+For convenience, a separate report writer
+\fCprp\fP
+is provided, which is identical to
+\fCrpt\fP,
+except that the default file used is \fCtet_xres\fP
+in the current directory.
+.P
+This is a useful facility for quickly formatting the
+results from the execution of a test set, and looking at the summary
+of the result codes for each test purpose executed.
+.P
+The \fCprp\fP command should be executed in the directory containing
+the \s-1TET\s0 results file named \fCtet_xres\fP.
+Unless you have manually installed and executed the
+test set elsewhere, this will be the directory containing the source
+code for the test set. For more details
+of the names of the directories containing the source code
+for the test sets, refer to appendix A.
+.P
+For example
+.cS
+cd $TET_ROOT/xtest/tset/CH05/stclpmsk
+prp
+.cE
+.H 2 "Cleaning tests"
+An individual test set can be cleaned
+without the need to use the clean mode of the \s-1TCC\s0.
+This is done by executing \fCpclean\fP directly, rather than as a \s-1TET\s0
+clean tool.
+.P
+The clean configuration parameters used by \fCpclean\fP
+are obtained from a file named
+$TET_CLEANCONFIG, or, if TET_CLEANCONFIG is not set in your environment,
+from the file named $TET_ROOT/xtest/tetclean.cfg.
+.P
+The \fCpclean\fP command should be executed in the directory containing the
+test set which was built. For more details
+of the names of the directories containing the source code
+for the test sets, refer to appendix A.
+.P
+For example
+.cS
+cd $TET_ROOT/xtest/tset/CH05/stclpmsk
+pclean
+.cE
+.P
+No journal file is created when \fCpclean\fP is executed directly.
+.SK
+.H 1 "Appendix A - Contents of release 1.1"
+This section describes the contents of the directories in the \fCTET_ROOT\fP
+directory which are supplied in
+release 1.1 of the \*(xT. The revised \*(xT has been developed from the
+T7 \*(xT.
+This section therefore also explains how the arrangement of the
+revised \*(xT compares with the T7 \*(xT.
+.H 2 "tet"
+.br
+This contains the source files and include files needed to build
+the Test Environment Toolkit (TET). The contents of the
+subdirectories are as follows:
+.H 3 "tet/src"
+.br
+This contains the source files for
+the \s-1TET\s0.
+.H 3 "tet/inc"
+.br
+This contains the include files for
+the \s-1TET\s0.
+.H 3 "tet/lib"
+.br
+This contains the libraries and object files when the
+TET has been built.
+.H 3 "tet/bin"
+.br
+This should be empty since the
+TET utilities will be copied into
+.C $TET_ROOT/xtest/bin ,
+rather than this directory, when using the modified
+Makefiles supplied with the \s-1TET\s0.
+.H 3 "tet/doc"
+.br
+This contains the release notes and man pages for
+the \s-1TET\s0.
+.H 3 "tet/demo"
+.br
+This contains a demonstration program for
+the \s-1TET\s0.
+.H 2 "xtest"
+.br
+This contains the tests included in the revised X test suite
+which are stored as a complete \s-1TET\s0 test suite. This includes all
+necessary configuration files and scenario files to enable you to use
+the \s-1TET\s0 following the instructions in the documentation.
+.H 2 "xtest/bin"
+.br
+This contains commands you will need to install, configure, build
+and execute the \*(xT.
+After installation, this directory
+contains shell script commands. After configuration
+and building the \*(xT,
+this directory also contains executable programs built for your system.
+.H 2 "xtest/doc"
+.br
+This contains the documentation.
+It contains this user guide, the programmers guide and the release
+notes. These are supplied in \fItroff(1)\fP format requiring the \fCmm\fP
+macro package, and also in PostScript format. It also contains a
+template for error
+reports and a description of how to submit them.
+.P
+It also contains a file
+.C paper.mm ,
+which is a copy of the file
+.C Xproto_verf/doc/paper.ms
+originally supplied in the T7 \*(xT, converted
+to use the \fImm\fP macro package.
+This file contains a paper entitled
+"An Approach to Testing X Window System Servers at a Protocol Level".
+.P
+This is a technical paper, which defines in outline terms the areas
+of the \*(xW server which should be tested at the X Protocol level
+rather than the Xlib level.
+.P
+The approach recommended in this paper, and adopted in the design of the
+T7 \*(xT, has been maintained in the revised \*(xT. The paper
+explains the choice of test cases and division of tests between
+the \*(xP and \*(xL.
+.P
+Before the revision of the \*(xT, UniSoft recommended that this paper should be
+left "as is". As a result, some sections of this paper are out of date in
+that they refer to development schedules for a
+previous software development project, which have now been superseded with the
+production of the revised \*(xT.
+.H 2 "xtest/fonts"
+.br
+This contains test fonts which should be installed using the instructions
+in this user guide. It also contains a software library describing the
+fonts which is used by the tests for text drawing.
+.H 2 "xtest/include"
+.br
+This contains include files for the software in the xtest/src and xtest/tset
+directories.
+.H 2 "xtest/lib"
+.br
+This contains libraries and other common software which are used by the
+tests in the xtest/tset directory. The libraries are built using the
+instructions in this user guide.
+.H 2 "xtest/results"
+.br
+This is an empty directory which is used by the \s-1TET\s0 to store journal
+files produced when executing the \*(xT.
+.H 2 "xtest/src"
+.br
+This contains the source for the libraries and utilities. These are
+built using the instructions in this user guide.
+.H 2 "xtest/tset"
+.br
+This contains the source for the tests for sections 2 to 10 of the
+X11R4 Xlib specifications, in directories CH02 to CH10.
+These are
+built using the instructions in this user guide.
+In the rest of this document, these
+are refered to as the "\*(xL".
+.P
+Each of the directories CH02 to CH10 contains further subdirectories
+which are known as test set directories.
+Each of these contain all the test code for a single Xlib function.
+The name of the directory is derived from the name of the Xlib
+function by a scheme which is described in appendix B.
+.P
+So, for example for
+.C XSetClipMask
+we have the following:
+.cS
+tset/CH05/stclpmsk
+tset/CH05/stclpmsk/stclpmsk.m
+.cE
+.P
+The file
+.C stclpmsk.m
+is the source file, which is also known as a dot-m file.
+The format of the dot-m file is described further in the "Programmers Guide".
+.P
+The \*(xL are designed to accomplish the following:
+.P
+.AL
+.LI
+Test the ability of the Xlib function to behave as specified in the X11R4
+Xlib specifications, in situations where no X Protocol error should
+be generated. This is tested by a series of separate tests known,
+as "test purposes", each of which is designed to test a single statement
+in the Xlib specifications. The statement which is tested is contained
+in an "assertion", which is also contained in the dot-m file, and
+precedes the test code for that test purpose.
+.LI
+Test the ability of the Xlib function to produce the expected X Protocol
+errors in specified situations. This is tested in further test purposes,
+each preceded in the dot-m file
+by an assertion describing the situation which should produce the error.
+.LE
+.H 2 "xtest/tset/XPROTO"
+.br
+This contains the source for the touch tests for the X Protocol (version 11).
+These are
+built using the instructions in this user guide.
+In the rest of this document, these
+are refered to as the "\*(xP".
+.P
+These tests were in a separate test suite in the T7 \*(xT, which was
+located in a directory Xproto_verf. This included
+separate documentation, drivers, parameter files, include files and libraries.
+In the revised \*(xT, the directory XPROTO only contains the source of
+the tests - the other items are integrated within the \*(xT as described
+in this user guide.
+.P
+The directory XPROTO contains further subdirectories
+which are known as test set directories.
+The structure of test set directories is exactly as for the \*(xL,
+described in the previous section.
+.P
+The \*(xP tests are designed to accomplish the following:
+.P
+.AL
+.LI
+Test the ability of the \*(xW server to accept all legal message types and
+respond appropriately.
+.LI
+Ensure that the server capabilities which Xlib testing depends on
+work in the simplest cases.
+.LI
+Test that the X server adheres to the canonical byte stream of the X Protocol,
+independent of the host byte sex or compiler structure packing.
+.LE
+.P
+For further details of the choice of test cases and division of tests between
+the \*(xP and \*(xL, refer to the document entitled
+"An Approach to Testing X Window System Servers at a Protocol Level"
+contained in file xtest/doc/paper.mm.
+.SK
+.H 1 "Appendix B - File naming scheme"
+A file naming scheme has been devised which
+is for naming the directories containing dot-m files
+and the dot-m files themselves.
+.P
+The file naming scheme converts from an
+\*(xW name to an abbreviated name. This is done as follows:
+.DL
+.LI
+Remove leading X.
+.LI
+Replace:
+.DS
+ Background -> Bg
+ Subwindow -> Sbwn
+ String -> Str
+ Window -> Wdw
+.DE
+.LI
+Remove all lowercase vowels aeiou.
+.LI
+Truncate to 10 chars.
+We have already checked that
+truncation to ten characters still gives uniqueness.
+.LI
+If the string before truncation ended in "16" then force truncated
+ string to end in "16".
+.LI
+convert to lowercase.
+.LI
+add ".m" suffix to get name of source file containing C code, assertions
+ and strategies.
+.LE
+.SK
+.H 1 "Appendix C - Format of the \s-1TET\s0 journal file"
+This appendix describes the manner in which the \*(xT uses
+some of the \s-1TET\s0 journal file facilities. The format of the \s-1TET\s0
+journal file is not fully described here - only the main features used by the
+\*(xT are described.
+In a future release of the \*(xT the format is expected to
+be described fully in the \s-1TET\s0 documentation.
+.P
+Journal files are produced by the
+\s-1TCC\s0
+during the build and execute stages.
+.P
+The journal file produced during the execute stage contains two basic sections:
+.AL
+.LI
+Details of the configuration parameters and environment in which the
+tests were executed. This may also be preceded by build configuration
+parameters and/or followed by clean configuration parameters, if the
+.SM TCC
+was invoked in build-execute-clean mode.
+.LI
+Details of the test results.
+This includes the test result
+codes and test information messages output by the test suite.
+.LE
+.P
+Each line in the second section of a journal file
+is made up from three components separated by a vertical bar:
+.AL
+.LI
+Message type. There is a unique numeric code for each message
+type which is always the first field on a line.
+.LI
+Message parameters. These contain serial number and similar
+information.
+.LI
+Message area. The format of this area is specific to the
+Message Type.
+.LE
+.P
+An example of the second section is as follows:
+.cS
+10|53 /tset/CH02/vndrrls/vndrrls 13:41:12|TC Start, scenario ref 85-1, ICs {all}
+15|53 1.9 1|TCM Start
+520|53 0 7457 1 1|TRACE:NAME: XVendorRelease
+400|53 1 1 13:41:14|IC Start
+200|53 1 13:41:14|TP Start
+520|53 1 7457 1 1|REPORT:XVendorRelease() returned 5000 instead of 1.
+220|53 1 1 13:41:14|FAIL
+410|53 1 1 13:41:14|IC End
+80|53 0 13:41:15|TC End
+.cE
+This consists of a block of information
+for each test set executed which contains the following
+lines:
+.AL
+.LI
+Message Type 10 - Test Case Start (TC Start)
+.br
+A single message indicating that the Test Case Controller (the part of the
+\s-1TET\s0 which executes test sets) is about to execute a test set.
+This also indicates the start of the results for this
+test set (which in \s-1TET\s0 terminology is known as a test case).
+This line indicates the name of the test set
+obtained from the scenario file.
+.LI
+Message Type 15 - Test Case Manager Start (TCM Start)
+.br
+A single message indicating that the Test Case Manager (the part of the
+\s-1TET\s0 which calls the test purposes) has started executing.
+.LI
+Each assertion in the \*(xT has separate test code, which is known as a
+test purpose.
+We have arranged that each test purpose is also
+a separately invocable component,
+and that the invocable component number is identical
+to the test purpose number.
+For each test purpose these
+lines follow:
+.AL
+.LI
+Message Type 400 - Invocable Component Start (IC Start)
+.br
+The second field of the Message Parameters gives the IC number.
+.LI
+Message Type 200 - Test Purpose Start (TP Start)
+.br
+The second field of the Message Parameters gives the
+number of the test purpose within the test set.
+.LI
+Message Type 520 - Test Case Information
+.br
+The second field of the Message Parameters gives the
+number of the test purpose within the test set.
+.br
+The Message Area contains a text message output by the \*(xT -
+the possible types of message are described further in
+appendix D
+"Interpreting test results" in the section entitled
+"Test information messages".
+.LI
+Message Type 220 - Test Purpose Result
+.br
+The second field of the Message Parameters gives the
+number of the test purpose within the test set.
+.br
+The Message Area contains the test result code - the possible
+test result codes are described further in appendix D
+"Interpreting test results" in the section entitled
+"Test result codes".
+.LI
+Message Type 410 - Invocable Component End (IC End)
+.br
+The second field of the Message Parameters gives the IC number.
+.LE
+.LI
+Message Type 80 - Test Case End (TC End)
+.br
+A single message indicating the end of the results for this
+test set (which in \s-1TET\s0 terminology is known as a test case).
+.LE
+.SK
+.H 1 "Appendix D - Interpreting test results"
+This section includes information describing the significance
+of the test result codes and the accompanying
+test information messages that may appear in a \s-1TET\s0 journal file.
+.H 2 "Categorisation of assertions"
+The test result codes which are output for each test purpose
+are dependent on the category of the assertion.
+.P
+The model for the categorisation of assertions
+which is used in the \*(xT is described in POSIX.3.
+.P
+There are four categories of assertions described by POSIX.3 which are
+designated A, B, C and D.
+.P
+If the assertion tests a conditional feature, it is categorised as type
+C or D, otherwise it is categorised as type A or B.
+.P
+If the assertion is classified as an "extended assertion",
+it is categorised as type
+B or D. Otherwise it is categorised
+as type A or C and is known as a "base assertion".
+.P
+Tests are always required for base assertions. Tests are not required
+for extended assertions, but should be provided if possible.
+There are a number of "extended assertions" for which tests have
+been written in the \*(xT.
+Extended assertions are used to describe features that may be difficult
+to test conclusively.
+.P
+.TS
+center box;
+c | c | c.
+ Base Assertion Extended Assertion
+_
+Required Feature A B
+_
+Conditional Feature C D
+.TE
+.H 2 "Test result codes"
+The following test result codes may be found within the \s-1TET\s0 journal
+file. These will be found in Test Purpose Result lines with Message Type 220
+(described in appendix C).
+.P
+The reason for any
+result codes
+.SM NORESULT ,
+.SM UNRESOLVED
+and
+.SM UNINITIATED
+should be determined and resolved.
+.VL 15 0
+.LI \s-1PASS\s0
+The implementation passed the test for the corresponding assertion.
+.LI \s-1FAIL\s0
+The implementation failed the test for the corresponding assertion.
+.LI \s-1UNRESOLVED\s0
+The test for the corresponding assertion commenced, but was
+unable to establish the required conditions to complete all
+required stages of the test.
+The reasons for this should be investigated
+and if necessary the test rerun.
+.P
+In some tests, reliance is made on the successful behaviour of another
+area of the \*(xW. Where this reliance is made, and that area of
+the \*(xW does not behave as expected, a result code
+.SM UNRESOLVED
+may occur. The test information messages
+should indicate the area of the underlying problem. It may be
+necessary to look at the test results for that area
+first and investigate and resolve the underlying problem
+before re-running the
+.SM UNRESOLVED
+tests.
+.P
+Tests which give a result code of UNRESOLVED and the message "Path check error"
+normally contain programming errors. The test reached the point at which a PASS
+result would be assigned, but the number of check points passed
+in executing the test code differs from the expected number.
+.P
+Tests which give a result code of UNRESOLVED and the message
+"No CHECK marks encountered"
+may be due to programming errors.
+The test reached the point at which a PASS
+result would be assigned, but no check points had been passed.
+This can also occur when you execute the tests using debug options.
+For example, the message occurs
+when you execute tests which normally loop over windows
+and pixmaps and set
+.SM XT_DEBUG_PIXMAP_ONLY=Yes
+or
+.SM XT_DEBUG_WINDOW_ONLY=Yes
+or
+.SM XT_DEBUG_DEFAULT_DEPTHS=Yes
+or
+.SM XT_DEBUG_VISUAL_IDS=Yes .
+.LI \s-1NOTINUSE\s0
+Although there is an assertion within the test set, there is no
+specific test provided for the assertion. This might be because
+the assertion is tested adequately as part of the test for another
+assertion, or because the assertion has been automatically included
+into a test set in which it is not applicable.
+.P
+In either case, tests which report the result code NOTINUSE do not
+need to be investigated further.
+.LI \s-1UNSUPPORTED\s0
+This result code may only be used for assertions in category C or D
+(conditional assertions).
+.P
+The implementation does not support some optional feature of
+the \*(xW, which is needed to test the
+corresponding assertion. In this case, the assertion will normally
+make clear what optional feature is required, and there will be
+an accompanying test information message describing the feature
+which was found to be unsupported.
+.LI \s-1UNTESTED\s0
+This result code may only be used for assertions in category B or D
+(extended assertions).
+.P
+The implementation could not be conclusively tested to determine
+the truth of the corresponding assertion.
+.P
+Note that this does not mean that no testing was performed
+in the \*(xT. There are a number of "extended assertions"
+for which we have provided tests where possible (to test some likely
+problem areas, for example).
+.LI \s-1UNINITIATED\s0
+The test for the corresponding assertion could not commence due to
+a problem in an earlier test purpose or an initialisation routine.
+.P
+Tests which produce this result code should be resolved as for
+those reporting
+.SM UNRESOLVED .
+.LI \s-1NORESULT\s0
+Each test purpose should output a test result code before
+completing.
+This special result code will be inserted by the \s-1TET\s0 in the journal
+file, if the test purpose
+did not output a test result code. This indicates
+a major fault during the execution of the test set
+which should be investigated.
+.LI \s-1WARNING\s0
+The implementation passed the test for the corresponding assertion.
+Whilst the behaviour of the implementation was found to be
+acceptable,
+it behaves in a manner which is not recommended in the
+X11 specification
+on which the assertion is based.
+.LI \s-1FIP\s0
+The contents of the journal file must be examined by hand
+to determine whether the
+implementation passed the test for the corresponding assertion.
+This is used for testing functions which produce
+output whose correctness cannot be easily determined automatically
+by the test suite.
+.LE
+.H 2 "Test information messages"
+There are four types of test information messages which are output
+by the \*(xT. Each one results in a \s-1TET\s0 journal file line
+with Message Type "Test Case Information" (520), and with
+the Message Area beginning with one of the following keywords:
+.VL 15 0
+.LI \s-1REPORT\s0
+This keyword is used to report
+the reason for any test result codes whch are other than
+.SM PASS .
+A warning message is printed by the report
+writer \fCrpt\fP, if a test information message of type
+.SM REPORT
+is given in a test purpose which produced a test result code
+.SM PASS .
+.LI \s-1CHECK\s0
+This keyword is used to record the passing of a particular
+checkpoint in the test suite code. These messages contain
+the checkpoint number within the test purpose, and the line
+number within the source code.
+.P
+These messages are not output
+to the journal file if the execution configuration parameter
+.SM XT_OPTION_NO_CHECK
+is set to Yes.
+This option can reduce the size
+of the journal file considerably.
+.LI \s-1TRACE\s0
+This keyword is used for any messages describing the state of the
+test being executed which are not failure messages.
+.P
+When running the \*(xP, messages with this keyword are output to
+the journal file, to
+describe briefly the interaction between the X server and the test program.
+.P
+These messages are not output
+to the journal file, if the execution configuration parameter
+.SM XT_OPTION_NO_TRACE
+is set to Yes.
+This option can reduce the size
+of the journal file considerably.
+.LI \s-1DEBUG\s0
+This keyword is used for debug messages
+inserted during the development of the \*(xT.
+.P
+When running the \*(xP, messages with this keyword
+are output to the journal file, when the debug level is greater than zero, to
+describe in detail the interaction between the X server and the test program.
+This includes the contents of requests, replies and events.
+.P
+This is output if the value of the
+execution configuration parameter
+.SM XT_DEBUG
+is greater than or equal to the level of the debug message.
+.SM XT_DEBUG
+may be set from 0 to 3.
+.LE
+.SK
+.H 1 "Appendix E - Outline of Test Environment Toolkit"
+The "Test Environment Toolkit"
+is a software tool developed by X/Open\*F,
+.FS
+X/Open is a trademark of the X/Open Company, Ltd. in the U.K. and
+other countries.
+.FE
+UNIX International (UI)\*F,
+.FS
+UI is a trademark of UNIX International.
+.FE
+and the Open Software Foundation (OSF)\*F.
+.FS
+Open Software Foundation, OSF and OSF/1
+are trademarks of the Open Software Foundation, Inc.
+.FE
+The project which produced this software and the
+associated interface specifications was also known as Project Phoenix.
+.P
+The \s-1TET\s0 consists of a user interface program known as the Test Case
+Controller (\s-1TCC\s0). This enables test software to be built and executed.
+The \s-1TCC\s0 uses configuration files to specify the environment
+for both the build and execute operations. The \s-1TCC\s0 also uses a
+scenario file to control which tests to build or execute.
+.P
+The \s-1TCC\s0 produces a journal file which is intended to
+be formated by a test suite specific report writing program.
+.P
+The \s-1TET\s0 also includes an Application Programming Interface (API)
+Part of the API is the Test Case Manager (TCM).
+This includes a
+.B main()
+function which calls user supplied test functions.
+The
+API also includes a library of functions to manage the test
+functions and perform output operations to the journal file
+in a structured fashion.
+.P
+Since the developers of the \s-1TET\s0 have indicated a commitment to
+develop software test suites that execute within this
+environment, the \s-1TET\s0 can be seen as an emerging de facto standard
+environment for test suite execution.
+.P
+During stage one of the \*(xT development project we
+identified that the \s-1TET\s0 provides features which are
+required by the revised test suite.
+.P
+For this reason we have developed the revised test suite
+within the \s-1TET\s0 environment,
+and supplied a copy of the \s-1TET\s0 with the revised test suite.
+.P
+Release 1.9 of the \s-1TET\s0 was issued by the
+developers during March 1992,
+and is included in this release of the \*(xT.
+The software is complete
+in that the functionality is stable and the implementation
+agrees with the \s-1TET\s0 specification.
+Documentation including
+release notes and
+\fCman\fP pages for the \s-1TET\s0 utilities, are included in
+this release of the \*(xT.
+However, this release does not contain a Programmers Guide or Users Guide.
+These are under development by UNIX International,
+but are not complete at the time of this
+release, and so are not part of the current version of the \s-1TET\s0.
+.SK
+.H 1 "Appendix F - Glossary"
+.VL 4 0
+.LI "assertion"
+.br
+A statement of functionality for an
+.I element
+of the \*(xW,
+phrased such that it will be
+.B true
+for a system conforming to the \*(xW specifications.
+An example would be a
+.I "test description"
+phrased according to the requirements of POSIX.3.
+.LI "assertion test"
+.br
+Synonymous with
+.IR "test purpose" .
+.LI "base assertion"
+.br
+An
+.I assertion
+for which a test suite must provide an
+.IR "assertion test" .
+Every assertion that is not an extended assertion is a base assertion.
+.LI "element"
+.br
+A particular \*(xW interface
+such as an Xlib function, header file or X11 Procotol.
+.LI "extended assertion"
+.br
+An
+.I assertion
+for which a test suite is not required to provide an
+.IR "assertion test" .
+An
+.I "assertion test"
+should still be provided if possible.
+.P
+Reasons why a test suite is not required to provide a test are given in
+appendix A of the Programmers Guide.
+.LI "POSIX.1"
+.br
+Part one of the IEEE POSIX 1003 standards, the document\(dg
+entitled
+\fISystem Application Program Interface (API) [C language]\fR.
+Also known as P1003.1.
+.LI "POSIX.3"
+.br
+Part three of the IEEE POSIX 1003 standards, the document\(dg
+.FS \(dg
+Obtainable from Publication Sales, IEEE\ Service\ Center, P.O.\ Box\ 1331,
+445\ Hoes\ Lane, Piscataway, NJ\ 08854-1331, (201)\ 981-0060
+.FE
+entitled
+\fITest Methods for Measuring Conformance to POSIX\fR.
+Also known as P1003.3.
+.LI "Project Phoenix"
+.br
+Synonymous with
+.SM TET .
+.LI SVID
+.br
+System V Interface Definition.
+.LI TCC
+.br
+The Test Case Controller. This is part of the
+.SM TET .
+This is a user interface program which enables the test software to be
+executed. See appendix E for more details.
+.LI TCM
+.br
+The Test Case Manager. This is part of the
+.SM TET .
+This is an object file containing a
+.B main()
+function which calls user supplied test functions.
+See appendix E for more details.
+.LI "TET"
+.br
+The "Test Environment Toolkit". This is a software tool which provides a
+framework within which tests may be developed and executed.
+More information is given in appendix E.
+.LI "test case"
+.br
+Synonymous with
+.IR "test set".
+.LI "test description"
+.br
+The description of a particular test
+to be performed on an
+.IR element .
+This is presented in functional terms and
+describes precisely what aspect of the \*(xW is to be tested for that
+.I element .
+An
+.I assertion
+is an example of a
+.IR "test description" ,
+but the reverse is not the case.
+.LI "test program"
+.br
+Synonymous with
+.IR "test set" .
+.LI "test purpose"
+.br
+The software which tests the conformance of an implementation of the \*(xW
+to an
+.IR assertion .
+.LI "test set"
+.br
+The software containing all the
+.I "test purposes"
+for an
+.IR "element" .
+.LI "test strategy"
+.br
+A description of the design and method used to implement a
+.IR "test purpose" .
+This should say how a
+.I "test purpose"
+is implemented rather than what feature is being tested.
+.LI XPG
+.br
+The X/Open Portability Guide.
+.LI "\*(xL"
+.br
+These are the tests for sections 2 to 10 of the
+X11R4 Xlib specifications.
+They are stored in subdirectories of the directories \fCCH02\fP to \fCCH10\fP
+(which are to be found in the directory \fC$TET_ROOT/xtest/tset\fP).
+.LI "\*(xP"
+.br
+These are the touch tests for the X Protocol (version 11).
+They are stored in subdirectories of the directory \fCXPROTO\fP
+(which is to be found in the directory \fC$TET_ROOT/xtest/tset\fP).
+.LE
+.TC
diff --git a/xc/test/xsuite/xtest/fonts/Makefile b/xc/test/xsuite/xtest/fonts/Makefile
new file mode 100644
index 000000000..3480cba0b
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/Makefile
@@ -0,0 +1,88 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+##########################################################################
+#
+# SCCS:
+# NAME: font
+# PRODUCT: xtest library
+# AUTHOR: Steve Ratcliffe, UniSoft Ltd.
+# DATE CREATED: 30 Aug 1990
+# TARGETS: libfont.a
+# MODIFICATIONS:
+#
+##########################################################################
+
+
+CFILES = xtfont0.c xtfont1.c xtfont2.c xtfont3.c xtfont4.c xtfont5.c \
+ xtfont6.c
+OFILES = xtfont0.o xtfont1.o xtfont2.o xtfont3.o xtfont4.o xtfont5.o \
+ xtfont6.o
+RM_FILES = *.ln *.o core *.a
+
+##############################################################################
+
+all: libfont.a
+
+libfont.a: $P $(OFILES)
+ $(AR) $@ `$(LORDER) $(OFILES) | $(TSORT)`
+ : $(RANLIB) $@
+
+FORCE: CLOBBER all
+
+LINT:
+ $(LINT) $(LINTFLAGS) $(CFILES) $(LINTTCM) $(LINTLIBS)
+
+LINTLIB: $(LINTFONTS)
+
+$(LINTFONTS): llib-lfonts.ln
+ $(CP) $? $@
+ @echo " $? made and installed"
+
+llib-lfonts.ln:
+ $(LINT) -Cfonts $(LINTFLAGS) $(CFILES)
+
+clean:
+ $(RM) $(RM_FILES)
+
+clobber: clean
+
+install: all
+ $(CP) libfont.a $(XTESTLIBDIR)
+ $(RANLIB) $(XTESTLIBDIR)/libfont.a
+
+# -----------------
+#
+# NOTE: The way that the fonts are installed is system dependent.
+# This part of the Makefile is provided solely as an example.
+#
+# See the User Guide for more details.
+#
+
+FONTCOMP=bdftosnf
+EXTEN=.snf
+FONTDIR=/usr/lib/X11/ncd/fonts/xtest
+FONTS=xtfont0 xtfont1 xtfont2 xtfont3 xtfont4 xtfont5 xtfont6
+
+bdfcomp:
+ @ echo "These commands are system dependent - See User Guide"
+ - $(SHELL) ./fcomp $(FONTS)
+ - mkfontdir;
+bdfinstall:
+ @ echo "These commands are system dependent - See User Guide"
+ cp *.bdf *.snf fonts.* $(FONTDIR)
+
diff --git a/xc/test/xsuite/xtest/fonts/xtfont0.bdf b/xc/test/xsuite/xtest/fonts/xtfont0.bdf
new file mode 100644
index 000000000..539187129
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont0.bdf
@@ -0,0 +1,97 @@
+STARTFONT 2.1
+COMMENT xtfont0 - font to test special cases.
+FONT xtfont0
+SIZE 13 100 100
+FONTBOUNDINGBOX 30 23 -4 -3
+STARTPROPERTIES 8
+DEFAULT_CHAR 0
+FONT_DESCENT 3
+FONT_ASCENT 20
+COPYRIGHT "Public domain font. Share and enjoy."
+MIN_SPACE 3
+NORM_SPACE 5
+RESOLUTION 100
+UNDERLINE_POSITION 2
+ENDPROPERTIES
+CHARS 4
+COMMENT The character 0 is reserved to be non-existant.
+COMMENT STARTCHAR nonexistant
+COMMENT ENCODING 0
+COMMENT SWIDTH 0 0
+COMMENT DWIDTH 0 0
+COMMENT BBX 0 0 0 0
+COMMENT BITMAP
+COMMENT ENDCHAR
+COMMENT This is a 10x10 block
+STARTCHAR C001
+ENCODING 1
+SWIDTH 570 0
+DWIDTH 10 0
+BBX 10 10 0 0
+BITMAP
+ffc0
+ffc0
+ffc0
+ffc0
+ffc0
+ffc0
+ffc0
+ffc0
+ffc0
+ffc0
+ENDCHAR
+COMMENT This is a 10x10 empty block
+STARTCHAR C002
+ENCODING 2
+SWIDTH 123 0
+DWIDTH 2 0
+BBX 10 10 0 0
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR C004
+ENCODING 4
+SWIDTH 123 0
+DWIDTH 4 0
+BBX 20 11 5 2
+BITMAP
+d5f000
+000000
+000000
+000180
+03fe00
+003000
+003ff0
+3ff040
+000000
+3ffc00
+3f8000
+ENDCHAR
+STARTCHAR C068
+ENCODING 68
+SWIDTH 123 0
+DWIDTH 10 0
+BBX 9 11 1 -3
+BITMAP
+f000
+fc00
+c600
+c300
+c180
+c080
+c080
+c100
+c200
+c400
+f800
+ENDCHAR
+ENDFONT
diff --git a/xc/test/xsuite/xtest/fonts/xtfont0.c b/xc/test/xsuite/xtest/fonts/xtfont0.c
new file mode 100644
index 000000000..fe64c0149
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont0.c
@@ -0,0 +1,119 @@
+/* $XConsortium$ */
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ */
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "Xatom.h"
+
+static XCharStruct perchar[] = {
+ {0, 10, 10, 10, 0, 0}, /* 1 */
+ {0, 10, 2, 10, 0, 0}, /* 2 */
+ {0, 0, 0, 0, 0, 0}, /* 3 */
+ {5, 25, 4, 13, -2, 0}, /* 4 */
+ {0, 0, 0, 0, 0, 0}, /* 5 */
+ {0, 0, 0, 0, 0, 0}, /* 6 */
+ {0, 0, 0, 0, 0, 0}, /* 7 */
+ {0, 0, 0, 0, 0, 0}, /* 8 */
+ {0, 0, 0, 0, 0, 0}, /* 9 */
+ {0, 0, 0, 0, 0, 0}, /* 10 */
+ {0, 0, 0, 0, 0, 0}, /* 11 */
+ {0, 0, 0, 0, 0, 0}, /* 12 */
+ {0, 0, 0, 0, 0, 0}, /* 13 */
+ {0, 0, 0, 0, 0, 0}, /* 14 */
+ {0, 0, 0, 0, 0, 0}, /* 15 */
+ {0, 0, 0, 0, 0, 0}, /* 16 */
+ {0, 0, 0, 0, 0, 0}, /* 17 */
+ {0, 0, 0, 0, 0, 0}, /* 18 */
+ {0, 0, 0, 0, 0, 0}, /* 19 */
+ {0, 0, 0, 0, 0, 0}, /* 20 */
+ {0, 0, 0, 0, 0, 0}, /* 21 */
+ {0, 0, 0, 0, 0, 0}, /* 22 */
+ {0, 0, 0, 0, 0, 0}, /* 23 */
+ {0, 0, 0, 0, 0, 0}, /* 24 */
+ {0, 0, 0, 0, 0, 0}, /* 25 */
+ {0, 0, 0, 0, 0, 0}, /* 26 */
+ {0, 0, 0, 0, 0, 0}, /* 27 */
+ {0, 0, 0, 0, 0, 0}, /* 28 */
+ {0, 0, 0, 0, 0, 0}, /* 29 */
+ {0, 0, 0, 0, 0, 0}, /* 30 */
+ {0, 0, 0, 0, 0, 0}, /* 31 */
+ {0, 0, 0, 0, 0, 0}, /* 32 */
+ {0, 0, 0, 0, 0, 0}, /* 33 */
+ {0, 0, 0, 0, 0, 0}, /* 34 */
+ {0, 0, 0, 0, 0, 0}, /* 35 */
+ {0, 0, 0, 0, 0, 0}, /* 36 */
+ {0, 0, 0, 0, 0, 0}, /* 37 */
+ {0, 0, 0, 0, 0, 0}, /* 38 */
+ {0, 0, 0, 0, 0, 0}, /* 39 */
+ {0, 0, 0, 0, 0, 0}, /* 40 */
+ {0, 0, 0, 0, 0, 0}, /* 41 */
+ {0, 0, 0, 0, 0, 0}, /* 42 */
+ {0, 0, 0, 0, 0, 0}, /* 43 */
+ {0, 0, 0, 0, 0, 0}, /* 44 */
+ {0, 0, 0, 0, 0, 0}, /* 45 */
+ {0, 0, 0, 0, 0, 0}, /* 46 */
+ {0, 0, 0, 0, 0, 0}, /* 47 */
+ {0, 0, 0, 0, 0, 0}, /* 48 */
+ {0, 0, 0, 0, 0, 0}, /* 49 */
+ {0, 0, 0, 0, 0, 0}, /* 50 */
+ {0, 0, 0, 0, 0, 0}, /* 51 */
+ {0, 0, 0, 0, 0, 0}, /* 52 */
+ {0, 0, 0, 0, 0, 0}, /* 53 */
+ {0, 0, 0, 0, 0, 0}, /* 54 */
+ {0, 0, 0, 0, 0, 0}, /* 55 */
+ {0, 0, 0, 0, 0, 0}, /* 56 */
+ {0, 0, 0, 0, 0, 0}, /* 57 */
+ {0, 0, 0, 0, 0, 0}, /* 58 */
+ {0, 0, 0, 0, 0, 0}, /* 59 */
+ {0, 0, 0, 0, 0, 0}, /* 60 */
+ {0, 0, 0, 0, 0, 0}, /* 61 */
+ {0, 0, 0, 0, 0, 0}, /* 62 */
+ {0, 0, 0, 0, 0, 0}, /* 63 */
+ {0, 0, 0, 0, 0, 0}, /* 64 */
+ {0, 0, 0, 0, 0, 0}, /* 65 */
+ {0, 0, 0, 0, 0, 0}, /* 66 */
+ {0, 0, 0, 0, 0, 0}, /* 67 */
+ {1, 10, 10, 8, 3, 0}, /* 68 */
+};
+static XFontProp props[] = {
+ {XA_COPYRIGHT, 0},
+ {XA_MIN_SPACE, 3},
+ {XA_NORM_SPACE, 5},
+ {XA_RESOLUTION, 100},
+ {XA_UNDERLINE_POSITION, 2},
+};
+
+char *xtfont0cpright = "Public domain font. Share and enjoy.";
+
+XFontStruct xtfont0 = {
+ (XExtData*)0,
+ (Font)0,
+ FontLeftToRight, /* direction */
+ 1, /* min_byte2 */
+ 68, /* max_byte2 */
+ 0, /* min_byte1 */
+ 0, /* max_byte1 */
+ 0, /* all chars exist */
+ 0, /* default char */
+ 5, /* n_properties */
+ props,
+ {0, 10, 2, 8, -2, 0},
+ {5, 25, 10, 13, 3, 0},
+ perchar,
+ 20, /* font ascent */
+ 3, /* font descent */
+};
diff --git a/xc/test/xsuite/xtest/fonts/xtfont1.bdf b/xc/test/xsuite/xtest/fonts/xtfont1.bdf
new file mode 100644
index 000000000..ef7b72e18
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont1.bdf
@@ -0,0 +1,2588 @@
+STARTFONT 2.1
+COMMENT xtfont1 - font with chars: 0-127
+COMMENT Based on font from X distribution:
+COMMENT Designed by Stephen Gildea <gildea@bbn.com> from original designs
+COMMENT and a similarly named (but different style) font by Thomas Bagli of
+COMMENT PCS Computer Systeme, West Germany
+COMMENT
+COMMENT November 1989
+COMMENT
+COMMENT FONT -Misc-Fixed-Bold-R-Normal--13-120-75-75-C-70-ISO8859-1
+FONT xtfont1
+SIZE 13 78 78
+FONTBOUNDINGBOX 7 13 0 -3
+STARTPROPERTIES 7
+DEFAULT_CHAR 0
+FONT_DESCENT 3
+FONT_ASCENT 10
+COPYRIGHT "Public domain font. Share and enjoy."
+RESOLUTION 100
+MIN_SPACE 4
+NORM_SPACE 4
+COMMENT AUTHOR "Stephen Gildea <gildea@bbn.com>"
+COMMENT DATE "November 1989"
+ENDPROPERTIES
+CHARS 128
+STARTCHAR C000
+ENCODING 0
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+COMMENT The character 1 is reserved to be existant.
+COMMENT XCreateGlyphCursor assumes that it is a defined glyph.
+STARTCHAR C001
+ENCODING 1
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+30
+78
+fc
+78
+30
+00
+00
+00
+ENDCHAR
+STARTCHAR C002
+ENCODING 2
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+cc
+cc
+30
+cc
+cc
+30
+cc
+cc
+00
+00
+ENDCHAR
+STARTCHAR C003
+ENCODING 3
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+d8
+d8
+f8
+d8
+d8
+00
+3c
+18
+18
+18
+18
+00
+ENDCHAR
+STARTCHAR C004
+ENCODING 4
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+f0
+c0
+e0
+c0
+c0
+00
+3c
+30
+38
+30
+30
+00
+ENDCHAR
+STARTCHAR C005
+ENCODING 5
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+70
+c0
+c0
+c0
+70
+00
+38
+34
+38
+34
+34
+00
+ENDCHAR
+STARTCHAR C006
+ENCODING 6
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+c0
+c0
+c0
+c0
+f0
+00
+3c
+30
+38
+30
+30
+00
+ENDCHAR
+STARTCHAR C007
+ENCODING 7
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+cc
+cc
+78
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR C010
+ENCODING 8
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+30
+30
+fc
+fc
+30
+30
+00
+fc
+fc
+00
+00
+ENDCHAR
+STARTCHAR C011
+ENCODING 9
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+cc
+ec
+fc
+dc
+cc
+00
+30
+30
+30
+30
+3c
+00
+ENDCHAR
+STARTCHAR C012
+ENCODING 10
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+cc
+cc
+48
+78
+30
+00
+3c
+18
+18
+18
+18
+00
+ENDCHAR
+STARTCHAR C013
+ENCODING 11
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+30
+30
+30
+30
+30
+30
+f0
+f0
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR C014
+ENCODING 12
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+00
+f0
+f0
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR C015
+ENCODING 13
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+00
+3e
+3e
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR C016
+ENCODING 14
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+30
+30
+30
+30
+30
+30
+3e
+3e
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR C017
+ENCODING 15
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+30
+30
+30
+30
+30
+30
+fe
+fe
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR C020
+ENCODING 16
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+01
+01
+fe
+fe
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR C021
+ENCODING 17
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+fe
+fe
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR C022
+ENCODING 18
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+00
+fe
+fe
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR C023
+ENCODING 19
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+fe
+fe
+00
+00
+00
+ENDCHAR
+STARTCHAR C024
+ENCODING 20
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+fe
+fe
+00
+ENDCHAR
+STARTCHAR C025
+ENCODING 21
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+30
+30
+30
+30
+30
+30
+3e
+3e
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR C026
+ENCODING 22
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+30
+30
+30
+30
+30
+30
+f0
+f0
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR C027
+ENCODING 23
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+30
+30
+30
+30
+30
+30
+fe
+fe
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR C030
+ENCODING 24
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+00
+fe
+fe
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR C031
+ENCODING 25
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+30
+30
+30
+30
+30
+30
+30
+30
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR C032
+ENCODING 26
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+0c
+18
+60
+c0
+60
+18
+0c
+fc
+fc
+00
+00
+ENDCHAR
+STARTCHAR C033
+ENCODING 27
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+c0
+60
+18
+0c
+18
+60
+c0
+fc
+fc
+00
+00
+ENDCHAR
+STARTCHAR C034
+ENCODING 28
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+fc
+6c
+6c
+6c
+ec
+cc
+00
+00
+ENDCHAR
+STARTCHAR C035
+ENCODING 29
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+04
+0c
+fc
+fc
+30
+fc
+fc
+c0
+80
+00
+00
+ENDCHAR
+STARTCHAR C036
+ENCODING 30
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+38
+6c
+60
+60
+f0
+60
+60
+6c
+b8
+00
+00
+ENDCHAR
+STARTCHAR C037
+ENCODING 31
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+00
+30
+30
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR C040
+ENCODING 32
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR !
+ENCODING 33
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+30
+30
+30
+30
+30
+30
+00
+30
+30
+00
+00
+ENDCHAR
+STARTCHAR "
+ENCODING 34
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+6c
+6c
+6c
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR #
+ENCODING 35
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+28
+28
+7c
+7c
+28
+7c
+7c
+28
+28
+00
+00
+ENDCHAR
+STARTCHAR $
+ENCODING 36
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+30
+78
+b4
+b0
+78
+34
+b4
+78
+30
+00
+00
+ENDCHAR
+STARTCHAR %
+ENCODING 37
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+e4
+ac
+e8
+18
+30
+60
+5c
+d4
+9c
+00
+00
+ENDCHAR
+STARTCHAR &
+ENCODING 38
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+70
+d8
+d8
+d8
+70
+d4
+dc
+d8
+74
+00
+00
+ENDCHAR
+STARTCHAR '
+ENCODING 39
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+38
+38
+30
+60
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR (
+ENCODING 40
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+18
+30
+30
+60
+60
+60
+30
+30
+18
+00
+00
+ENDCHAR
+STARTCHAR )
+ENCODING 41
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+60
+30
+30
+18
+18
+18
+30
+30
+60
+00
+00
+ENDCHAR
+STARTCHAR *
+ENCODING 42
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+48
+30
+fc
+fc
+30
+48
+00
+00
+00
+ENDCHAR
+STARTCHAR +
+ENCODING 43
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+30
+30
+fc
+fc
+30
+30
+00
+00
+00
+ENDCHAR
+STARTCHAR ,
+ENCODING 44
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+38
+38
+30
+60
+00
+ENDCHAR
+STARTCHAR -
+ENCODING 45
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+00
+fc
+fc
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR .
+ENCODING 46
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+30
+78
+30
+00
+ENDCHAR
+STARTCHAR /
+ENCODING 47
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+0c
+0c
+18
+18
+30
+60
+60
+c0
+c0
+00
+00
+ENDCHAR
+STARTCHAR 0
+ENCODING 48
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+30
+48
+cc
+cc
+cc
+cc
+cc
+48
+30
+00
+00
+ENDCHAR
+STARTCHAR 1
+ENCODING 49
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+30
+70
+b0
+30
+30
+30
+30
+30
+fc
+00
+00
+ENDCHAR
+STARTCHAR 2
+ENCODING 50
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+cc
+cc
+0c
+38
+60
+c0
+c0
+fc
+00
+00
+ENDCHAR
+STARTCHAR 3
+ENCODING 51
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+cc
+0c
+0c
+38
+0c
+0c
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR 4
+ENCODING 52
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+0c
+1c
+3c
+6c
+cc
+cc
+fc
+0c
+0c
+00
+00
+ENDCHAR
+STARTCHAR 5
+ENCODING 53
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+fc
+c0
+c0
+f8
+cc
+0c
+0c
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR 6
+ENCODING 54
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+cc
+c0
+c0
+f8
+cc
+cc
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR 7
+ENCODING 55
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+fc
+0c
+0c
+18
+18
+30
+30
+60
+60
+00
+00
+ENDCHAR
+STARTCHAR 8
+ENCODING 56
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+cc
+cc
+cc
+78
+cc
+cc
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR 9
+ENCODING 57
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+cc
+cc
+cc
+7c
+0c
+0c
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR :
+ENCODING 58
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+30
+78
+30
+00
+00
+30
+78
+30
+00
+ENDCHAR
+STARTCHAR ;
+ENCODING 59
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+30
+78
+30
+00
+38
+38
+30
+60
+00
+ENDCHAR
+STARTCHAR <
+ENCODING 60
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+0c
+18
+30
+60
+c0
+60
+30
+18
+0c
+00
+00
+ENDCHAR
+STARTCHAR =
+ENCODING 61
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+fc
+fc
+00
+fc
+fc
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR >
+ENCODING 62
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+c0
+60
+30
+18
+0c
+18
+30
+60
+c0
+00
+00
+ENDCHAR
+STARTCHAR ?
+ENCODING 63
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+cc
+cc
+0c
+38
+30
+00
+30
+30
+00
+00
+ENDCHAR
+STARTCHAR @
+ENCODING 64
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+8c
+8c
+bc
+ac
+bc
+80
+8c
+78
+00
+00
+ENDCHAR
+STARTCHAR A
+ENCODING 65
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+cc
+cc
+cc
+fc
+cc
+cc
+cc
+cc
+00
+00
+ENDCHAR
+STARTCHAR B
+ENCODING 66
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+f8
+cc
+cc
+cc
+f8
+cc
+cc
+cc
+f8
+00
+00
+ENDCHAR
+STARTCHAR C
+ENCODING 67
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+cc
+c0
+c0
+c0
+c0
+c0
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR D
+ENCODING 68
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+f8
+cc
+cc
+cc
+cc
+cc
+cc
+cc
+f8
+00
+00
+ENDCHAR
+STARTCHAR E
+ENCODING 69
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+fc
+c0
+c0
+c0
+f8
+c0
+c0
+c0
+fc
+00
+00
+ENDCHAR
+STARTCHAR F
+ENCODING 70
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+fc
+c0
+c0
+c0
+f8
+c0
+c0
+c0
+c0
+00
+00
+ENDCHAR
+STARTCHAR G
+ENCODING 71
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+cc
+c0
+c0
+dc
+cc
+cc
+cc
+7c
+00
+00
+ENDCHAR
+STARTCHAR H
+ENCODING 72
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+cc
+cc
+cc
+cc
+fc
+cc
+cc
+cc
+cc
+00
+00
+ENDCHAR
+STARTCHAR I
+ENCODING 73
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+fc
+30
+30
+30
+30
+30
+30
+30
+fc
+00
+00
+ENDCHAR
+STARTCHAR J
+ENCODING 74
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+0c
+0c
+0c
+0c
+0c
+0c
+0c
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR K
+ENCODING 75
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+c4
+cc
+d8
+f0
+e0
+f0
+d8
+cc
+c4
+00
+00
+ENDCHAR
+STARTCHAR L
+ENCODING 76
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+fc
+00
+00
+ENDCHAR
+STARTCHAR M
+ENCODING 77
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+84
+cc
+fc
+fc
+cc
+cc
+cc
+cc
+cc
+00
+00
+ENDCHAR
+STARTCHAR N
+ENCODING 78
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+cc
+cc
+ec
+ec
+fc
+dc
+dc
+cc
+cc
+00
+00
+ENDCHAR
+STARTCHAR O
+ENCODING 79
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+cc
+cc
+cc
+cc
+cc
+cc
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR P
+ENCODING 80
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+f8
+cc
+cc
+cc
+f8
+c0
+c0
+c0
+c0
+00
+00
+ENDCHAR
+STARTCHAR Q
+ENCODING 81
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+cc
+cc
+cc
+cc
+cc
+ec
+dc
+78
+0c
+00
+ENDCHAR
+STARTCHAR R
+ENCODING 82
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+f8
+cc
+cc
+cc
+f8
+f0
+d8
+cc
+c4
+00
+00
+ENDCHAR
+STARTCHAR S
+ENCODING 83
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+cc
+c0
+c0
+78
+0c
+0c
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR T
+ENCODING 84
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+fc
+30
+30
+30
+30
+30
+30
+30
+30
+00
+00
+ENDCHAR
+STARTCHAR U
+ENCODING 85
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+cc
+cc
+cc
+cc
+cc
+cc
+cc
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR V
+ENCODING 86
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+cc
+cc
+cc
+48
+48
+78
+30
+30
+30
+00
+00
+ENDCHAR
+STARTCHAR W
+ENCODING 87
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+cc
+cc
+cc
+cc
+cc
+fc
+fc
+cc
+84
+00
+00
+ENDCHAR
+STARTCHAR X
+ENCODING 88
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+84
+cc
+48
+78
+30
+78
+48
+cc
+84
+00
+00
+ENDCHAR
+STARTCHAR Y
+ENCODING 89
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+cc
+cc
+78
+78
+30
+30
+30
+30
+30
+00
+00
+ENDCHAR
+STARTCHAR Z
+ENCODING 90
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+fc
+0c
+0c
+18
+30
+60
+c0
+c0
+fc
+00
+00
+ENDCHAR
+STARTCHAR [
+ENCODING 91
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+60
+60
+60
+60
+60
+60
+60
+78
+00
+00
+ENDCHAR
+STARTCHAR \
+ENCODING 92
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+c0
+c0
+60
+60
+30
+18
+18
+0c
+0c
+00
+00
+ENDCHAR
+STARTCHAR ]
+ENCODING 93
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+78
+18
+18
+18
+18
+18
+18
+18
+78
+00
+00
+ENDCHAR
+STARTCHAR ^
+ENCODING 94
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+30
+78
+cc
+84
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR _
+ENCODING 95
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+00
+00
+00
+00
+00
+fc
+fc
+00
+ENDCHAR
+STARTCHAR `
+ENCODING 96
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+70
+70
+30
+18
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR a
+ENCODING 97
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+78
+0c
+7c
+cc
+cc
+7c
+00
+00
+ENDCHAR
+STARTCHAR b
+ENCODING 98
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+c0
+c0
+c0
+f8
+cc
+cc
+cc
+cc
+f8
+00
+00
+ENDCHAR
+STARTCHAR c
+ENCODING 99
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+78
+cc
+c0
+c0
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR d
+ENCODING 100
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+0c
+0c
+0c
+7c
+cc
+cc
+cc
+cc
+7c
+00
+00
+ENDCHAR
+STARTCHAR e
+ENCODING 101
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+78
+cc
+fc
+c0
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR f
+ENCODING 102
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+38
+6c
+60
+60
+f0
+60
+60
+60
+60
+00
+00
+ENDCHAR
+STARTCHAR g
+ENCODING 103
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+74
+cc
+cc
+78
+c0
+78
+cc
+78
+ENDCHAR
+STARTCHAR h
+ENCODING 104
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+c0
+c0
+c0
+f8
+cc
+cc
+cc
+cc
+cc
+00
+00
+ENDCHAR
+STARTCHAR i
+ENCODING 105
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+30
+30
+00
+70
+30
+30
+30
+30
+fc
+00
+00
+ENDCHAR
+STARTCHAR j
+ENCODING 106
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+0c
+0c
+00
+0c
+0c
+0c
+0c
+0c
+0c
+cc
+78
+ENDCHAR
+STARTCHAR k
+ENCODING 107
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+c0
+c0
+c0
+cc
+d8
+f0
+f0
+d8
+cc
+00
+00
+ENDCHAR
+STARTCHAR l
+ENCODING 108
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+70
+30
+30
+30
+30
+30
+30
+30
+fc
+00
+00
+ENDCHAR
+STARTCHAR m
+ENCODING 109
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+d8
+fc
+fc
+cc
+cc
+cc
+00
+00
+ENDCHAR
+STARTCHAR n
+ENCODING 110
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+f8
+cc
+cc
+cc
+cc
+cc
+00
+00
+ENDCHAR
+STARTCHAR o
+ENCODING 111
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+78
+cc
+cc
+cc
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR p
+ENCODING 112
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+f8
+cc
+cc
+cc
+f8
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR q
+ENCODING 113
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+7c
+cc
+cc
+cc
+7c
+0c
+0c
+0c
+ENDCHAR
+STARTCHAR r
+ENCODING 114
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+f8
+cc
+c0
+c0
+c0
+c0
+00
+00
+ENDCHAR
+STARTCHAR s
+ENCODING 115
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+78
+cc
+60
+18
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR t
+ENCODING 116
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+c0
+c0
+f0
+c0
+c0
+c0
+cc
+78
+00
+00
+ENDCHAR
+STARTCHAR u
+ENCODING 117
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+cc
+cc
+cc
+cc
+cc
+7c
+00
+00
+ENDCHAR
+STARTCHAR v
+ENCODING 118
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+cc
+cc
+cc
+78
+78
+30
+00
+00
+ENDCHAR
+STARTCHAR w
+ENCODING 119
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+cc
+cc
+cc
+fc
+fc
+48
+00
+00
+ENDCHAR
+STARTCHAR x
+ENCODING 120
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+cc
+cc
+78
+78
+cc
+cc
+00
+00
+ENDCHAR
+STARTCHAR y
+ENCODING 121
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+cc
+cc
+cc
+cc
+7c
+0c
+cc
+78
+ENDCHAR
+STARTCHAR z
+ENCODING 122
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+00
+00
+00
+fc
+0c
+18
+60
+c0
+fc
+00
+00
+ENDCHAR
+STARTCHAR {
+ENCODING 123
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+38
+60
+60
+30
+60
+30
+60
+60
+38
+00
+00
+ENDCHAR
+STARTCHAR |
+ENCODING 124
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+30
+30
+30
+30
+30
+30
+30
+30
+30
+00
+00
+ENDCHAR
+STARTCHAR }
+ENCODING 125
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+70
+18
+18
+30
+18
+30
+18
+18
+70
+00
+00
+ENDCHAR
+STARTCHAR ~
+ENCODING 126
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+00
+00
+64
+fc
+98
+00
+00
+00
+00
+00
+00
+00
+00
+ENDCHAR
+STARTCHAR C177
+ENCODING 127
+SWIDTH 570 0
+DWIDTH 7 0
+BBX 7 13 0 -3
+BITMAP
+54
+28
+54
+28
+54
+28
+54
+28
+54
+28
+54
+28
+54
+ENDCHAR
+ENDFONT
diff --git a/xc/test/xsuite/xtest/fonts/xtfont1.c b/xc/test/xsuite/xtest/fonts/xtfont1.c
new file mode 100644
index 000000000..0ad8c1a79
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont1.c
@@ -0,0 +1,178 @@
+/* $XConsortium$ */
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ */
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "Xatom.h"
+
+static XCharStruct perchar[] = {
+ {0, 0, 7, 0, 0, 0}, /* 0 */
+ {0, 6, 7, 5, 0, 0}, /* 1 */
+ {0, 6, 7, 7, 1, 0}, /* 2 */
+ {0, 6, 7, 9, 2, 0}, /* 3 */
+ {0, 6, 7, 9, 2, 0}, /* 4 */
+ {0, 6, 7, 9, 2, 0}, /* 5 */
+ {0, 6, 7, 9, 2, 0}, /* 6 */
+ {0, 6, 7, 8, -4, 0}, /* 7 */
+ {0, 6, 7, 8, 1, 0}, /* 8 */
+ {0, 6, 7, 9, 2, 0}, /* 9 */
+ {0, 6, 7, 9, 2, 0}, /* 10 */
+ {0, 4, 7, 10, -2, 0}, /* 11 */
+ {0, 4, 7, 4, 3, 0}, /* 12 */
+ {2, 7, 7, 4, 3, 0}, /* 13 */
+ {2, 7, 7, 10, -2, 0}, /* 14 */
+ {0, 7, 7, 10, 3, 0}, /* 15 */
+ {0, 7, 7, 8, -6, 0}, /* 16 */
+ {0, 7, 7, 6, -4, 0}, /* 17 */
+ {0, 7, 7, 4, -2, 0}, /* 18 */
+ {0, 7, 7, 2, 0, 0}, /* 19 */
+ {0, 7, 7, 0, 2, 0}, /* 20 */
+ {2, 7, 7, 10, 3, 0}, /* 21 */
+ {0, 4, 7, 10, 3, 0}, /* 22 */
+ {0, 7, 7, 10, -2, 0}, /* 23 */
+ {0, 7, 7, 4, 3, 0}, /* 24 */
+ {2, 4, 7, 10, 3, 0}, /* 25 */
+ {0, 6, 7, 8, 1, 0}, /* 26 */
+ {0, 6, 7, 8, 1, 0}, /* 27 */
+ {0, 6, 7, 5, 1, 0}, /* 28 */
+ {0, 6, 7, 8, 1, 0}, /* 29 */
+ {0, 6, 7, 8, 1, 0}, /* 30 */
+ {2, 4, 7, 4, -2, 0}, /* 31 */
+ {0, 0, 7, 0, 0, 0}, /* 32 */
+ {2, 4, 7, 8, 1, 0}, /* 33 */
+ {1, 6, 7, 8, -5, 0}, /* 34 */
+ {1, 6, 7, 8, 1, 0}, /* 35 */
+ {0, 6, 7, 8, 1, 0}, /* 36 */
+ {0, 6, 7, 8, 1, 0}, /* 37 */
+ {0, 6, 7, 8, 1, 0}, /* 38 */
+ {1, 5, 7, 8, -4, 0}, /* 39 */
+ {1, 5, 7, 8, 1, 0}, /* 40 */
+ {1, 5, 7, 8, 1, 0}, /* 41 */
+ {0, 6, 7, 6, 0, 0}, /* 42 */
+ {0, 6, 7, 6, 0, 0}, /* 43 */
+ {1, 5, 7, 2, 2, 0}, /* 44 */
+ {0, 6, 7, 4, -2, 0}, /* 45 */
+ {1, 5, 7, 1, 2, 0}, /* 46 */
+ {0, 6, 7, 8, 1, 0}, /* 47 */
+ {0, 6, 7, 8, 1, 0}, /* 48 */
+ {0, 6, 7, 8, 1, 0}, /* 49 */
+ {0, 6, 7, 8, 1, 0}, /* 50 */
+ {0, 6, 7, 8, 1, 0}, /* 51 */
+ {0, 6, 7, 8, 1, 0}, /* 52 */
+ {0, 6, 7, 8, 1, 0}, /* 53 */
+ {0, 6, 7, 8, 1, 0}, /* 54 */
+ {0, 6, 7, 8, 1, 0}, /* 55 */
+ {0, 6, 7, 8, 1, 0}, /* 56 */
+ {0, 6, 7, 8, 1, 0}, /* 57 */
+ {1, 5, 7, 6, 2, 0}, /* 58 */
+ {1, 5, 7, 6, 2, 0}, /* 59 */
+ {0, 6, 7, 8, 1, 0}, /* 60 */
+ {0, 6, 7, 6, -1, 0}, /* 61 */
+ {0, 6, 7, 8, 1, 0}, /* 62 */
+ {0, 6, 7, 8, 1, 0}, /* 63 */
+ {0, 6, 7, 8, 1, 0}, /* 64 */
+ {0, 6, 7, 8, 1, 0}, /* 65 */
+ {0, 6, 7, 8, 1, 0}, /* 66 */
+ {0, 6, 7, 8, 1, 0}, /* 67 */
+ {0, 6, 7, 8, 1, 0}, /* 68 */
+ {0, 6, 7, 8, 1, 0}, /* 69 */
+ {0, 6, 7, 8, 1, 0}, /* 70 */
+ {0, 6, 7, 8, 1, 0}, /* 71 */
+ {0, 6, 7, 8, 1, 0}, /* 72 */
+ {0, 6, 7, 8, 1, 0}, /* 73 */
+ {0, 6, 7, 8, 1, 0}, /* 74 */
+ {0, 6, 7, 8, 1, 0}, /* 75 */
+ {0, 6, 7, 8, 1, 0}, /* 76 */
+ {0, 6, 7, 8, 1, 0}, /* 77 */
+ {0, 6, 7, 8, 1, 0}, /* 78 */
+ {0, 6, 7, 8, 1, 0}, /* 79 */
+ {0, 6, 7, 8, 1, 0}, /* 80 */
+ {0, 6, 7, 8, 2, 0}, /* 81 */
+ {0, 6, 7, 8, 1, 0}, /* 82 */
+ {0, 6, 7, 8, 1, 0}, /* 83 */
+ {0, 6, 7, 8, 1, 0}, /* 84 */
+ {0, 6, 7, 8, 1, 0}, /* 85 */
+ {0, 6, 7, 8, 1, 0}, /* 86 */
+ {0, 6, 7, 8, 1, 0}, /* 87 */
+ {0, 6, 7, 8, 1, 0}, /* 88 */
+ {0, 6, 7, 8, 1, 0}, /* 89 */
+ {0, 6, 7, 8, 1, 0}, /* 90 */
+ {1, 5, 7, 8, 1, 0}, /* 91 */
+ {0, 6, 7, 8, 1, 0}, /* 92 */
+ {1, 5, 7, 8, 1, 0}, /* 93 */
+ {0, 6, 7, 8, -4, 0}, /* 94 */
+ {0, 6, 7, 0, 2, 0}, /* 95 */
+ {1, 5, 7, 8, -4, 0}, /* 96 */
+ {0, 6, 7, 5, 1, 0}, /* 97 */
+ {0, 6, 7, 8, 1, 0}, /* 98 */
+ {0, 6, 7, 5, 1, 0}, /* 99 */
+ {0, 6, 7, 8, 1, 0}, /* 100 */
+ {0, 6, 7, 5, 1, 0}, /* 101 */
+ {0, 6, 7, 8, 1, 0}, /* 102 */
+ {0, 6, 7, 5, 3, 0}, /* 103 */
+ {0, 6, 7, 8, 1, 0}, /* 104 */
+ {0, 6, 7, 8, 1, 0}, /* 105 */
+ {0, 6, 7, 8, 3, 0}, /* 106 */
+ {0, 6, 7, 8, 1, 0}, /* 107 */
+ {0, 6, 7, 8, 1, 0}, /* 108 */
+ {0, 6, 7, 5, 1, 0}, /* 109 */
+ {0, 6, 7, 5, 1, 0}, /* 110 */
+ {0, 6, 7, 5, 1, 0}, /* 111 */
+ {0, 6, 7, 5, 3, 0}, /* 112 */
+ {0, 6, 7, 5, 3, 0}, /* 113 */
+ {0, 6, 7, 5, 1, 0}, /* 114 */
+ {0, 6, 7, 5, 1, 0}, /* 115 */
+ {0, 6, 7, 7, 1, 0}, /* 116 */
+ {0, 6, 7, 5, 1, 0}, /* 117 */
+ {0, 6, 7, 5, 1, 0}, /* 118 */
+ {0, 6, 7, 5, 1, 0}, /* 119 */
+ {0, 6, 7, 5, 1, 0}, /* 120 */
+ {0, 6, 7, 5, 3, 0}, /* 121 */
+ {0, 6, 7, 5, 1, 0}, /* 122 */
+ {1, 5, 7, 8, 1, 0}, /* 123 */
+ {2, 4, 7, 8, 1, 0}, /* 124 */
+ {1, 5, 7, 8, 1, 0}, /* 125 */
+ {0, 6, 7, 8, -5, 0}, /* 126 */
+ {1, 6, 7, 10, 3, 0}, /* 127 */
+};
+static XFontProp props[] = {
+ {XA_COPYRIGHT, 0},
+ {XA_RESOLUTION, 100},
+ {XA_MIN_SPACE, 4},
+ {XA_NORM_SPACE, 4},
+};
+
+char *xtfont1cpright = "Public domain font. Share and enjoy.";
+
+XFontStruct xtfont1 = {
+ (XExtData*)0,
+ (Font)0,
+ FontLeftToRight, /* direction */
+ 0, /* min_byte2 */
+ 127, /* max_byte2 */
+ 0, /* min_byte1 */
+ 0, /* max_byte1 */
+ 1, /* all chars exist */
+ 0, /* default char */
+ 4, /* n_properties */
+ props,
+ {0, 0, 7, 0, -6, 0},
+ {2, 7, 7, 10, 3, 0},
+ perchar,
+ 10, /* font ascent */
+ 3, /* font descent */
+};
diff --git a/xc/test/xsuite/xtest/fonts/xtfont2.bdf b/xc/test/xsuite/xtest/fonts/xtfont2.bdf
new file mode 100644
index 000000000..54a185df0
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont2.bdf
@@ -0,0 +1,5716 @@
+STARTFONT 2.1
+COMMENT Selected parts of the font found on the X distribution for testing
+COMMENT the 2 byte fonts.
+COMMENT characters in the ranges:
+COMMENT (33,33) - (33,126)
+COMMENT (36,33) - (36,115)
+COMMENT (48,33) - (48,126)
+COMMENT default char is 0 which also doesn't exist.
+COMMENT ---------
+COMMENT Donated by H. Kagotani <kagotani@cs.titech.ac.jp>; public domain
+COMMENT font from Japan
+COMMENT
+COMMENT FONT -Misc-Fixed-Medium-R-Normal--14-130-75-75-C-140-JISX0208.1983-0
+FONT xtfont2
+SIZE 14 75 75
+FONTBOUNDINGBOX 14 14 0 -2
+STARTPROPERTIES 5
+DEFAULT_CHAR 0
+FONT_DESCENT 2
+FONT_ASCENT 12
+COPYRIGHT "Public domain font. Share and enjoy."
+RESOLUTION 75
+ENDPROPERTIES
+CHARS 271
+STARTCHAR 2121
+ENCODING 8481
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2122
+ENCODING 8482
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+4000
+3000
+1800
+0800
+ENDCHAR
+STARTCHAR 2123
+ENCODING 8483
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+3000
+4800
+4800
+3000
+ENDCHAR
+STARTCHAR 2124
+ENCODING 8484
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+6000
+6000
+2000
+4000
+ENDCHAR
+STARTCHAR 2125
+ENCODING 8485
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+6000
+6000
+0000
+ENDCHAR
+STARTCHAR 2126
+ENCODING 8486
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0300
+0780
+0780
+0300
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2127
+ENCODING 8487
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0300
+0300
+0000
+0000
+0000
+0300
+0300
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2128
+ENCODING 8488
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0300
+0300
+0000
+0000
+0000
+0300
+0300
+0100
+0200
+0000
+0000
+ENDCHAR
+STARTCHAR 2129
+ENCODING 8489
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0380
+04C0
+0860
+0C60
+0C60
+00C0
+0080
+0100
+0100
+0100
+0000
+0180
+0180
+ENDCHAR
+STARTCHAR 212a
+ENCODING 8490
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0380
+0380
+0380
+0380
+0380
+0380
+0100
+0100
+0100
+0000
+0100
+0380
+0100
+ENDCHAR
+STARTCHAR 212b
+ENCODING 8491
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1000
+4800
+2000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 212c
+ENCODING 8492
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+3000
+4800
+4800
+3000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 212d
+ENCODING 8493
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0180
+0300
+0400
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 212e
+ENCODING 8494
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0600
+0300
+0080
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 212f
+ENCODING 8495
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0C60
+0C60
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2130
+ENCODING 8496
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0280
+0440
+0820
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2131
+ENCODING 8497
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+FFFC
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2132
+ENCODING 8498
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+FFFC
+ENDCHAR
+STARTCHAR 2133
+ENCODING 8499
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0C00
+0300
+0080
+0040
+0020
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2134
+ENCODING 8500
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0020
+0090
+0C40
+0300
+0080
+0040
+0020
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2135
+ENCODING 8501
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0C00
+0300
+0080
+00C0
+0100
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2136
+ENCODING 8502
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0020
+0090
+0C40
+0300
+0080
+00C0
+0100
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2137
+ENCODING 8503
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0440
+0440
+0440
+0880
+0880
+1100
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2138
+ENCODING 8504
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0100
+0280
+0440
+0820
+1010
+600C
+0FE0
+0100
+0100
+0100
+0100
+7FFC
+0000
+ENDCHAR
+STARTCHAR 2139
+ENCODING 8505
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0200
+0200
+03F0
+0420
+0420
+0840
+1280
+0180
+0040
+0020
+ENDCHAR
+STARTCHAR 213a
+ENCODING 8506
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0010
+0010
+0020
+0640
+0980
+0900
+1280
+1400
+1800
+1000
+2000
+0000
+ENDCHAR
+STARTCHAR 213b
+ENCODING 8507
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+07C0
+1830
+2008
+2008
+4004
+4004
+4004
+4004
+4004
+2008
+2008
+1830
+07C0
+ENDCHAR
+STARTCHAR 213c
+ENCODING 8508
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+40F8
+3F00
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 213d
+ENCODING 8509
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+FFFC
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 213e
+ENCODING 8510
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+07C0
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 213f
+ENCODING 8511
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0004
+0008
+0010
+0020
+0040
+0080
+0100
+0200
+0400
+0800
+1000
+2000
+4000
+8000
+ENDCHAR
+STARTCHAR 2140
+ENCODING 8512
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+8000
+4000
+2000
+1000
+0800
+0400
+0200
+0100
+0080
+0040
+0020
+0010
+0008
+0004
+ENDCHAR
+STARTCHAR 2141
+ENCODING 8513
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+1C00
+2208
+4110
+00E0
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2142
+ENCODING 8514
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0480
+0480
+0480
+0480
+0480
+0480
+0480
+0480
+0480
+0480
+0480
+0480
+0480
+0480
+ENDCHAR
+STARTCHAR 2143
+ENCODING 8515
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+ENDCHAR
+STARTCHAR 2144
+ENCODING 8516
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+3330
+3330
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2145
+ENCODING 8517
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+1860
+1860
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2146
+ENCODING 8518
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0018
+0020
+0030
+0038
+0010
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2147
+ENCODING 8519
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+2000
+7000
+3000
+1000
+6000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2148
+ENCODING 8520
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0198
+0220
+0330
+03B8
+0110
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2149
+ENCODING 8521
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+2200
+7700
+3300
+1100
+6600
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 214a
+ENCODING 8522
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0008
+0010
+0020
+0060
+0040
+00C0
+00C0
+00C0
+00C0
+0040
+0060
+0020
+0010
+0008
+ENDCHAR
+STARTCHAR 214b
+ENCODING 8523
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+4000
+2000
+1000
+1800
+0800
+0C00
+0C00
+0C00
+0C00
+0800
+1800
+1000
+2000
+4000
+ENDCHAR
+STARTCHAR 214c
+ENCODING 8524
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0008
+0010
+0020
+0040
+0040
+0040
+0040
+0040
+0040
+0040
+0040
+0020
+0010
+0008
+ENDCHAR
+STARTCHAR 214d
+ENCODING 8525
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+4000
+2000
+1000
+0800
+0800
+0800
+0800
+0800
+0800
+0800
+0800
+1000
+2000
+4000
+ENDCHAR
+STARTCHAR 214e
+ENCODING 8526
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+00F8
+00C0
+00C0
+00C0
+00C0
+00C0
+00C0
+00C0
+00C0
+00C0
+00C0
+00C0
+00C0
+00F8
+ENDCHAR
+STARTCHAR 214f
+ENCODING 8527
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+7C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+7C00
+ENDCHAR
+STARTCHAR 2150
+ENCODING 8528
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0018
+0020
+0060
+0060
+0060
+0040
+0180
+0040
+0060
+0060
+0060
+0060
+0020
+0018
+ENDCHAR
+STARTCHAR 2151
+ENCODING 8529
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+6000
+1000
+1800
+1800
+1800
+0800
+0600
+0800
+1800
+1800
+1800
+1800
+1000
+6000
+ENDCHAR
+STARTCHAR 2152
+ENCODING 8530
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0008
+0010
+0020
+0040
+0080
+0100
+0200
+0200
+0100
+0080
+0040
+0020
+0010
+0008
+ENDCHAR
+STARTCHAR 2153
+ENCODING 8531
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+4000
+2000
+1000
+0800
+0400
+0200
+0100
+0100
+0200
+0400
+0800
+1000
+2000
+4000
+ENDCHAR
+STARTCHAR 2154
+ENCODING 8532
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0048
+0048
+0090
+0090
+0120
+0120
+0240
+0240
+0120
+0120
+0090
+0090
+0048
+0048
+ENDCHAR
+STARTCHAR 2155
+ENCODING 8533
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+4800
+4800
+2400
+2400
+1200
+1200
+0900
+0900
+1200
+1200
+2400
+2400
+4800
+4800
+ENDCHAR
+STARTCHAR 2156
+ENCODING 8534
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+01F8
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+0100
+ENDCHAR
+STARTCHAR 2157
+ENCODING 8535
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0200
+0200
+0200
+0200
+0200
+0200
+0200
+0200
+0200
+0200
+0200
+0200
+0200
+7E00
+ENDCHAR
+STARTCHAR 2158
+ENCODING 8536
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+03F8
+0208
+02F8
+0280
+0280
+0280
+0280
+0280
+0280
+0280
+0280
+0280
+0280
+0380
+ENDCHAR
+STARTCHAR 2159
+ENCODING 8537
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0700
+0500
+0500
+0500
+0500
+0500
+0500
+0500
+0500
+0500
+0500
+7D00
+4100
+7F00
+ENDCHAR
+STARTCHAR 215a
+ENCODING 8538
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+00F8
+00F0
+00E0
+00E0
+00C0
+00C0
+00C0
+00C0
+00C0
+00C0
+00E0
+00E0
+00F0
+00F8
+ENDCHAR
+STARTCHAR 215b
+ENCODING 8539
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+7C00
+3C00
+1C00
+1C00
+0C00
+0C00
+0C00
+0C00
+0C00
+0C00
+1C00
+1C00
+3C00
+7C00
+ENDCHAR
+STARTCHAR 215c
+ENCODING 8540
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0100
+0100
+0100
+0100
+0100
+3FF8
+0100
+0100
+0100
+0100
+0100
+0100
+0000
+ENDCHAR
+STARTCHAR 215d
+ENCODING 8541
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+3FF8
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 215e
+ENCODING 8542
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0100
+0100
+0100
+0100
+3FF8
+0100
+0100
+0100
+0100
+0000
+3FF8
+0000
+0000
+ENDCHAR
+STARTCHAR 215f
+ENCODING 8543
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+2008
+1010
+0820
+0440
+0280
+0100
+0280
+0440
+0820
+1010
+2008
+0000
+0000
+ENDCHAR
+STARTCHAR 2160
+ENCODING 8544
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0100
+0380
+0100
+0000
+0000
+3FF8
+0000
+0000
+0100
+0380
+0100
+0000
+0000
+ENDCHAR
+STARTCHAR 2161
+ENCODING 8545
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+3FF8
+0000
+0000
+0000
+3FF8
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2162
+ENCODING 8546
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0080
+0080
+0080
+3FF8
+0100
+0100
+0100
+3FF8
+0200
+0200
+0200
+0000
+0000
+ENDCHAR
+STARTCHAR 2163
+ENCODING 8547
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0010
+0060
+0080
+0300
+0400
+1800
+2000
+1800
+0400
+0300
+0080
+0060
+0010
+0000
+ENDCHAR
+STARTCHAR 2164
+ENCODING 8548
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+2000
+1800
+0400
+0300
+0080
+0060
+0010
+0060
+0080
+0300
+0400
+1800
+2000
+0000
+ENDCHAR
+STARTCHAR 2165
+ENCODING 8549
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0030
+00C0
+0300
+0C00
+3000
+0C00
+0300
+00C0
+0030
+0000
+3FF8
+0000
+3FF8
+0000
+ENDCHAR
+STARTCHAR 2166
+ENCODING 8550
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+3000
+0C00
+0300
+00C0
+0030
+00C0
+0300
+0C00
+3000
+0000
+3FF8
+0000
+3FF8
+0000
+ENDCHAR
+STARTCHAR 2167
+ENCODING 8551
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+1C70
+36D8
+2388
+2388
+36D8
+1C70
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2168
+ENCODING 8552
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0100
+0380
+0100
+0000
+0000
+0000
+0000
+1010
+3838
+1010
+0000
+0000
+ENDCHAR
+STARTCHAR 2169
+ENCODING 8553
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+03F8
+0018
+0028
+0048
+0088
+1D08
+2208
+4100
+4100
+4100
+2200
+1C00
+0000
+ENDCHAR
+STARTCHAR 216a
+ENCODING 8554
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0380
+0440
+0820
+0820
+0820
+0440
+0380
+0100
+0100
+1FF0
+0100
+0100
+0100
+ENDCHAR
+STARTCHAR 216b
+ENCODING 8555
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+1800
+2400
+2400
+1800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 216c
+ENCODING 8556
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+1800
+1800
+3000
+2000
+4000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 216d
+ENCODING 8557
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+1B00
+1B00
+3600
+2400
+4800
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 216e
+ENCODING 8558
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+3000
+48E8
+4918
+3308
+0608
+0600
+0600
+0600
+0600
+0208
+0110
+00E0
+0000
+ENDCHAR
+STARTCHAR 216f
+ENCODING 8559
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+7838
+3010
+1820
+0C40
+3FF0
+0680
+0300
+3FF0
+0300
+0300
+0300
+0FC0
+0000
+ENDCHAR
+STARTCHAR 2170
+ENCODING 8560
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0100
+07C0
+0920
+1130
+1930
+0F00
+03C0
+0160
+1930
+1910
+0920
+07C0
+0100
+ENDCHAR
+STARTCHAR 2171
+ENCODING 8561
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0080
+0080
+0380
+0540
+0960
+1960
+1900
+1A00
+0A20
+0640
+0780
+0400
+0400
+ENDCHAR
+STARTCHAR 2172
+ENCODING 8562
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+00C0
+0120
+0230
+0220
+0600
+0600
+3FE0
+0600
+3600
+4C08
+4FF0
+39E0
+0000
+ENDCHAR
+STARTCHAR 2173
+ENCODING 8563
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+1808
+2410
+6620
+6640
+2480
+1900
+0260
+0490
+0998
+1198
+2090
+4060
+0000
+ENDCHAR
+STARTCHAR 2174
+ENCODING 8564
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0220
+0220
+0220
+1FF8
+0440
+0440
+0440
+0440
+3FF0
+0880
+0880
+0880
+0880
+ENDCHAR
+STARTCHAR 2175
+ENCODING 8565
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0700
+0880
+1880
+1900
+0E00
+0C78
+1630
+3320
+31C0
+30C0
+1960
+0E18
+0000
+ENDCHAR
+STARTCHAR 2176
+ENCODING 8566
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0100
+0380
+1930
+1D70
+0380
+0380
+1D70
+1930
+0380
+0100
+0000
+0000
+ENDCHAR
+STARTCHAR 2177
+ENCODING 8567
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0380
+0C60
+1010
+23C8
+24C8
+44C8
+4888
+4990
+2760
+2008
+1830
+07C0
+0000
+ENDCHAR
+STARTCHAR 2178
+ENCODING 8568
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0380
+0440
+0440
+0600
+0300
+0380
+04C0
+0640
+0380
+0180
+00C0
+0440
+0440
+0380
+ENDCHAR
+STARTCHAR 2179
+ENCODING 8569
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0100
+0100
+0280
+0280
+7C7C
+3018
+0C60
+0440
+0920
+0AA0
+1C70
+1010
+0000
+ENDCHAR
+STARTCHAR 217a
+ENCODING 8570
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0100
+0100
+0380
+0380
+7FFC
+3FF8
+0FE0
+07C0
+0FE0
+0EE0
+1C70
+1010
+0000
+ENDCHAR
+STARTCHAR 217b
+ENCODING 8571
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0380
+0C60
+1010
+1010
+2008
+2008
+2008
+1010
+1010
+0C60
+0380
+0000
+ENDCHAR
+STARTCHAR 217c
+ENCODING 8572
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0380
+0FE0
+1FF0
+1FF0
+3FF8
+3FF8
+3FF8
+1FF0
+1FF0
+0FE0
+0380
+0000
+ENDCHAR
+STARTCHAR 217d
+ENCODING 8573
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0380
+0C60
+1390
+1450
+2828
+2828
+2828
+1450
+1390
+0C60
+0380
+0000
+ENDCHAR
+STARTCHAR 217e
+ENCODING 8574
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0100
+0280
+0440
+0820
+1010
+2008
+4004
+2008
+1010
+0820
+0440
+0280
+0100
+ENDCHAR
+STARTCHAR 2421
+ENCODING 9249
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0400
+0200
+1380
+0E00
+0480
+07E0
+0D10
+1610
+2610
+2A20
+10C0
+ENDCHAR
+STARTCHAR 2422
+ENCODING 9250
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0400
+0200
+02C0
+1F00
+0480
+0480
+07E0
+0D10
+1508
+2208
+2608
+2A10
+1060
+0000
+ENDCHAR
+STARTCHAR 2423
+ENCODING 9251
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+1040
+1020
+1010
+1030
+0A00
+0C00
+0400
+0000
+ENDCHAR
+STARTCHAR 2424
+ENCODING 9252
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+4000
+2060
+2010
+2008
+2208
+2418
+1408
+1800
+0800
+0000
+0000
+ENDCHAR
+STARTCHAR 2425
+ENCODING 9253
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0200
+0180
+0000
+1380
+0C40
+0040
+0040
+0040
+0080
+0300
+ENDCHAR
+STARTCHAR 2426
+ENCODING 9254
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0200
+01C0
+0000
+0000
+03C0
+1C20
+0020
+0020
+0020
+0020
+0040
+0040
+0080
+0100
+ENDCHAR
+STARTCHAR 2427
+ENCODING 9255
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0200
+0180
+0000
+01C0
+0E80
+0100
+0200
+0700
+0900
+10F0
+ENDCHAR
+STARTCHAR 2428
+ENCODING 9256
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0400
+0380
+0000
+0000
+11C0
+0E80
+0100
+0200
+0400
+0E00
+1100
+2100
+20F8
+0000
+ENDCHAR
+STARTCHAR 2429
+ENCODING 9257
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+1040
+0830
+0C20
+3800
+0BC0
+0C20
+1820
+2820
+18C0
+0800
+ENDCHAR
+STARTCHAR 242a
+ENCODING 9258
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0800
+0430
+0508
+060C
+1C00
+0460
+0590
+0608
+0C08
+3488
+0C70
+0400
+0000
+ENDCHAR
+STARTCHAR 242b
+ENCODING 9259
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0800
+0400
+0460
+4710
+3C88
+0898
+0880
+0880
+1080
+1100
+2500
+2200
+0000
+ENDCHAR
+STARTCHAR 242c
+ENCODING 9260
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0008
+0824
+0410
+0440
+4720
+3C90
+0888
+0898
+0880
+1080
+1100
+2500
+2200
+0000
+ENDCHAR
+STARTCHAR 242d
+ENCODING 9261
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0200
+0100
+0160
+0F80
+0080
+00F0
+1F40
+0020
+0020
+07F0
+0810
+0800
+0600
+01C0
+ENDCHAR
+STARTCHAR 242e
+ENCODING 9262
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0408
+0224
+02D0
+1F00
+0100
+01E0
+3E80
+0040
+0040
+0FE0
+1020
+1000
+0C00
+0380
+ENDCHAR
+STARTCHAR 242f
+ENCODING 9263
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0080
+0040
+0040
+0080
+0100
+0600
+0800
+0800
+0400
+0200
+0100
+0080
+0040
+0040
+ENDCHAR
+STARTCHAR 2430
+ENCODING 9264
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0080
+0040
+0040
+0088
+0124
+0610
+0800
+0800
+0400
+0200
+0100
+0080
+0040
+0040
+ENDCHAR
+STARTCHAR 2431
+ENCODING 9265
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0080
+2040
+1020
+1020
+103C
+23E0
+2020
+2020
+2020
+2020
+1820
+1040
+1040
+0080
+ENDCHAR
+STARTCHAR 2432
+ENCODING 9266
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0108
+40A4
+2050
+2040
+2078
+47C0
+4040
+4040
+4040
+4040
+3040
+2080
+2080
+0100
+ENDCHAR
+STARTCHAR 2433
+ENCODING 9267
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0800
+07E0
+0080
+0100
+0000
+0000
+0000
+0000
+2000
+2000
+1010
+0FE0
+0000
+ENDCHAR
+STARTCHAR 2434
+ENCODING 9268
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0008
+0804
+07F0
+0088
+0100
+0000
+0000
+0000
+0000
+2000
+2000
+1010
+0FE0
+0000
+ENDCHAR
+STARTCHAR 2435
+ENCODING 9269
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0400
+0200
+0130
+21C0
+1E80
+0040
+0040
+07E0
+0820
+1000
+1000
+0C00
+03C0
+0000
+ENDCHAR
+STARTCHAR 2436
+ENCODING 9270
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0408
+0204
+0130
+21C8
+1E80
+0040
+0040
+07E0
+0820
+1000
+1000
+0C00
+03C0
+0000
+ENDCHAR
+STARTCHAR 2437
+ENCODING 9271
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+1000
+0800
+0800
+0800
+0800
+0800
+0800
+0800
+0808
+0810
+0460
+0380
+0000
+ENDCHAR
+STARTCHAR 2438
+ENCODING 9272
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+1020
+0890
+0840
+0800
+0800
+0800
+0800
+0800
+0808
+0810
+0460
+0380
+0000
+ENDCHAR
+STARTCHAR 2439
+ENCODING 9273
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0080
+40F8
+3F80
+0080
+0380
+04C0
+0440
+03C0
+0040
+0080
+0080
+0100
+0200
+ENDCHAR
+STARTCHAR 243a
+ENCODING 9274
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0128
+0094
+40F8
+3F80
+0080
+0380
+04C0
+0440
+03C0
+0040
+0080
+0080
+0100
+0200
+ENDCHAR
+STARTCHAR 243b
+ENCODING 9275
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0080
+1040
+0840
+0878
+4BC0
+3C40
+0840
+0840
+08C0
+0840
+0400
+03E0
+0000
+ENDCHAR
+STARTCHAR 243c
+ENCODING 9276
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0008
+0084
+1050
+0848
+0878
+4BC0
+3C40
+0840
+0840
+08C0
+0840
+0400
+03E0
+0000
+ENDCHAR
+STARTCHAR 243d
+ENCODING 9277
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+09C0
+0640
+0080
+0100
+0238
+07C0
+3880
+0100
+0200
+0200
+0200
+0100
+00E0
+ENDCHAR
+STARTCHAR 243e
+ENCODING 9278
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+09C8
+0664
+0090
+0100
+0238
+07C0
+3880
+0100
+0200
+0200
+0200
+0100
+00E0
+ENDCHAR
+STARTCHAR 243f
+ENCODING 9279
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0800
+0480
+0700
+3C00
+08F0
+0818
+0820
+1000
+1000
+1100
+2100
+20F8
+0000
+ENDCHAR
+STARTCHAR 2440
+ENCODING 9280
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0008
+0824
+0490
+0700
+3C00
+08F0
+0818
+0820
+1000
+1000
+1100
+2100
+20F8
+0000
+ENDCHAR
+STARTCHAR 2441
+ENCODING 9281
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0800
+0400
+04C0
+4700
+3C00
+0800
+08C0
+0B20
+1C10
+1010
+0010
+0020
+00C0
+0700
+ENDCHAR
+STARTCHAR 2442
+ENCODING 9282
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0800
+0408
+04C4
+4710
+3C08
+0800
+08C0
+0B20
+1C10
+1010
+0010
+0020
+00C0
+0700
+ENDCHAR
+STARTCHAR 2443
+ENCODING 9283
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+01C0
+0620
+3810
+0010
+0010
+0020
+00C0
+0700
+ENDCHAR
+STARTCHAR 2444
+ENCODING 9284
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+03E0
+4C10
+3008
+0008
+0008
+0008
+0010
+0060
+0380
+0000
+0000
+ENDCHAR
+STARTCHAR 2445
+ENCODING 9285
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0008
+0024
+0010
+03E0
+4C10
+3008
+0008
+0008
+0008
+0010
+0060
+0380
+0000
+0000
+ENDCHAR
+STARTCHAR 2446
+ENCODING 9286
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0038
+43C0
+3C80
+0100
+0100
+0200
+0200
+0200
+0200
+0200
+0100
+00E0
+0000
+ENDCHAR
+STARTCHAR 2447
+ENCODING 9287
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0038
+43C0
+3C88
+0124
+0110
+0200
+0200
+0200
+0200
+0200
+0100
+00E0
+0000
+ENDCHAR
+STARTCHAR 2448
+ENCODING 9288
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0400
+0200
+0200
+0200
+0270
+0380
+0600
+0800
+1000
+1000
+0800
+07F0
+0000
+ENDCHAR
+STARTCHAR 2449
+ENCODING 9289
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0408
+0224
+0210
+0200
+0270
+0380
+0600
+0800
+1000
+1000
+0800
+07F0
+0000
+ENDCHAR
+STARTCHAR 244a
+ENCODING 9290
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0400
+0200
+0280
+3F00
+0470
+0818
+0820
+1040
+1040
+2040
+03C0
+0460
+0450
+0380
+ENDCHAR
+STARTCHAR 244b
+ENCODING 9291
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+2000
+1000
+10F0
+1318
+2020
+2000
+2000
+2000
+2200
+2A00
+11F8
+1000
+1000
+ENDCHAR
+STARTCHAR 244c
+ENCODING 9292
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0100
+0080
+0080
+13E0
+1510
+1908
+1208
+2A08
+4C08
+4C68
+5490
+2068
+0000
+ENDCHAR
+STARTCHAR 244d
+ENCODING 9293
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1000
+0800
+0800
+0800
+4CE0
+3F10
+0C10
+0810
+1810
+1810
+28F0
+5918
+08E0
+0000
+ENDCHAR
+STARTCHAR 244e
+ENCODING 9294
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+03C0
+0D20
+1110
+1108
+2208
+2208
+2408
+2410
+2810
+1060
+0180
+0000
+ENDCHAR
+STARTCHAR 244f
+ENCODING 9295
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0040
+2020
+1020
+1438
+13E0
+2020
+2020
+2020
+2020
+29E0
+1230
+1228
+11C0
+0000
+ENDCHAR
+STARTCHAR 2450
+ENCODING 9296
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0088
+4044
+2050
+2878
+27C0
+4040
+4040
+4040
+4040
+53C0
+2460
+2450
+2380
+0000
+ENDCHAR
+STARTCHAR 2451
+ENCODING 9297
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0098
+4064
+2064
+2878
+27C0
+4040
+4040
+4040
+4040
+53C0
+2460
+2450
+2380
+0000
+ENDCHAR
+STARTCHAR 2452
+ENCODING 9298
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0040
+0440
+3C20
+0820
+0830
+1028
+1020
+1020
+1040
+1040
+0880
+0700
+0000
+ENDCHAR
+STARTCHAR 2453
+ENCODING 9299
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0008
+0044
+0450
+3C28
+0820
+0830
+1028
+1020
+1020
+1040
+1040
+0880
+0700
+0000
+ENDCHAR
+STARTCHAR 2454
+ENCODING 9300
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0030
+0048
+0448
+3C30
+0820
+0830
+1028
+1020
+1020
+1040
+1040
+0880
+0700
+0000
+ENDCHAR
+STARTCHAR 2455
+ENCODING 9301
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0400
+0380
+0080
+0100
+0200
+0200
+0100
+02B0
+4C88
+389C
+2480
+0300
+0000
+ENDCHAR
+STARTCHAR 2456
+ENCODING 9302
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0400
+0388
+00A4
+0110
+0200
+0200
+0100
+02B0
+4C88
+389C
+2480
+0300
+0000
+ENDCHAR
+STARTCHAR 2457
+ENCODING 9303
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0400
+0398
+00A4
+0124
+0218
+0200
+0100
+02B0
+4C88
+389C
+2480
+0300
+0000
+ENDCHAR
+STARTCHAR 2458
+ENCODING 9304
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0600
+0900
+5080
+2040
+0030
+000C
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 2459
+ENCODING 9305
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0010
+0048
+0620
+0900
+5080
+2040
+0030
+000C
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 245a
+ENCODING 9306
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0030
+0048
+0048
+0630
+0900
+5080
+2040
+0030
+000C
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 245b
+ENCODING 9307
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+2230
+11C0
+1040
+1038
+23E0
+2020
+2020
+2020
+29E0
+1230
+1228
+11C0
+0000
+ENDCHAR
+STARTCHAR 245c
+ENCODING 9308
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+4468
+2384
+2090
+2078
+47C0
+4040
+4040
+4040
+53C0
+2460
+2450
+2380
+0000
+ENDCHAR
+STARTCHAR 245d
+ENCODING 9309
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0018
+4464
+23A4
+2098
+2070
+47C0
+4040
+4040
+4040
+53C0
+2460
+2450
+2380
+0000
+ENDCHAR
+STARTCHAR 245e
+ENCODING 9310
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0080
+10F0
+0F80
+0080
+10E0
+0F80
+0080
+0080
+0F80
+10E0
+1090
+0F00
+0000
+ENDCHAR
+STARTCHAR 245f
+ENCODING 9311
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0880
+0780
+0100
+0100
+0220
+0210
+0FF0
+3418
+4424
+4820
+3040
+0080
+0000
+ENDCHAR
+STARTCHAR 2460
+ENCODING 9312
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0800
+0400
+2700
+1C30
+0408
+1C0C
+2400
+2400
+2C20
+1810
+0810
+0810
+07E0
+0000
+ENDCHAR
+STARTCHAR 2461
+ENCODING 9313
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0100
+0080
+1080
+13C0
+1CA0
+1110
+2908
+2A08
+4608
+4408
+4A10
+3060
+0000
+ENDCHAR
+STARTCHAR 2462
+ENCODING 9314
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0200
+0100
+1100
+0E00
+0380
+1200
+2420
+1C20
+0710
+0410
+0410
+0410
+0220
+01C0
+ENDCHAR
+STARTCHAR 2463
+ENCODING 9315
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0100
+0880
+09E0
+0E10
+3C10
+0460
+0200
+0200
+0100
+0100
+ENDCHAR
+STARTCHAR 2464
+ENCODING 9316
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0080
+01C0
+1800
+10F0
+0B08
+4C08
+3408
+0270
+0200
+0100
+0100
+0080
+0080
+ENDCHAR
+STARTCHAR 2465
+ENCODING 9317
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0200
+0100
+21E0
+2710
+2910
+3110
+2320
+21C0
+0100
+0200
+ENDCHAR
+STARTCHAR 2466
+ENCODING 9318
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0300
+4080
+21E0
+2290
+2488
+2888
+3088
+3488
+2290
+21E0
+0080
+0100
+0200
+ENDCHAR
+STARTCHAR 2467
+ENCODING 9319
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0200
+0100
+0120
+01C0
+0100
+0100
+0100
+0F00
+11C0
+1120
+0E00
+ENDCHAR
+STARTCHAR 2468
+ENCODING 9320
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0200
+0100
+0100
+0130
+01C0
+0100
+0100
+0100
+0100
+1F80
+2160
+2110
+1E00
+0000
+ENDCHAR
+STARTCHAR 2469
+ENCODING 9321
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0200
+0100
+01C0
+0600
+0800
+0800
+0800
+09E0
+0E10
+0810
+0810
+0020
+00C0
+0300
+ENDCHAR
+STARTCHAR 246a
+ENCODING 9322
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1000
+0980
+0A40
+0C20
+0C20
+0820
+0820
+0820
+0820
+0040
+0040
+0080
+0100
+0200
+ENDCHAR
+STARTCHAR 246b
+ENCODING 9323
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+08C0
+0740
+0080
+0100
+0200
+07C0
+0C20
+1010
+2010
+0390
+0460
+0440
+0380
+ENDCHAR
+STARTCHAR 246c
+ENCODING 9324
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+1000
+0800
+09C0
+0A20
+1C20
+6C20
+0820
+1820
+1820
+2820
+4824
+1818
+0800
+ENDCHAR
+STARTCHAR 246d
+ENCODING 9325
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+1180
+0E80
+0100
+0200
+0400
+0FC0
+0820
+1010
+2010
+0010
+0020
+00C0
+0700
+ENDCHAR
+STARTCHAR 246e
+ENCODING 9326
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0800
+0400
+0400
+06E0
+1D10
+0610
+0C10
+0C10
+1420
+0440
+ENDCHAR
+STARTCHAR 246f
+ENCODING 9327
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1000
+0800
+0800
+0800
+4CE0
+3F10
+0C08
+0808
+1808
+1808
+2810
+4820
+18C0
+0800
+ENDCHAR
+STARTCHAR 2470
+ENCODING 9328
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0980
+0680
+0100
+0100
+03E0
+0E10
+1208
+2408
+2408
+28C8
+1930
+10E0
+0000
+ENDCHAR
+STARTCHAR 2471
+ENCODING 9329
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0980
+0700
+0200
+07C0
+0820
+1020
+0620
+09C0
+0700
+0800
+1CE0
+2310
+4038
+ENDCHAR
+STARTCHAR 2472
+ENCODING 9330
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0400
+0200
+12C0
+0F00
+0400
+0420
+0F38
+18C0
+2180
+0280
+0480
+0800
+0800
+07E0
+ENDCHAR
+STARTCHAR 2473
+ENCODING 9331
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0200
+0100
+0100
+0200
+0200
+0400
+0400
+0F00
+0880
+1080
+1088
+2090
+2060
+0000
+ENDCHAR
+STARTCHAR 3021
+ENCODING 12321
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+7FF8
+0480
+0480
+3FF0
+2490
+2490
+2490
+3FF0
+2490
+0480
+0480
+7FF8
+0000
+ENDCHAR
+STARTCHAR 3022
+ENCODING 12322
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+07FC
+78A0
+48A0
+4BF8
+4AA8
+4AA8
+4AA8
+4BF8
+7AA8
+48A0
+40A0
+0FFC
+0000
+ENDCHAR
+STARTCHAR 3023
+ENCODING 12323
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0820
+0820
+0820
+08F8
+7E20
+1220
+13FC
+1220
+3C20
+24F8
+0620
+0A20
+11FC
+2000
+ENDCHAR
+STARTCHAR 3024
+ENCODING 12324
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+3FFC
+2408
+2808
+31E8
+2928
+2528
+2528
+25E8
+2528
+3808
+2008
+2008
+2018
+ENDCHAR
+STARTCHAR 3025
+ENCODING 12325
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0100
+7FFC
+0000
+0FE0
+0820
+0820
+0FE8
+0308
+0C90
+74A0
+0440
+0730
+380C
+ENDCHAR
+STARTCHAR 3026
+ENCODING 12326
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0030
+3FD0
+1210
+0920
+3FFC
+2588
+5450
+13C8
+2208
+07E0
+3A40
+0180
+06E0
+781C
+ENDCHAR
+STARTCHAR 3027
+ENCODING 12327
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1080
+10A0
+1090
+7938
+17C8
+1100
+11F8
+1A40
+7440
+17FC
+1040
+10A0
+1310
+3C0C
+ENDCHAR
+STARTCHAR 3028
+ENCODING 12328
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0820
+0820
+0820
+0850
+7E50
+1288
+13FC
+1200
+32F8
+2C88
+0488
+0A88
+10F8
+6088
+ENDCHAR
+STARTCHAR 3029
+ENCODING 12329
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0080
+21F8
+1690
+1060
+01F0
+0E4C
+73F8
+1040
+13F8
+1040
+17FC
+1840
+2640
+41FC
+ENDCHAR
+STARTCHAR 302a
+ENCODING 12330
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0440
+7FFC
+0440
+0720
+1128
+0AC8
+0450
+1FF0
+610C
+1FF0
+0100
+0280
+0C60
+3018
+ENDCHAR
+STARTCHAR 302b
+ENCODING 12331
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0440
+0440
+7FFC
+0440
+7FFC
+0480
+3FF8
+2488
+2498
+2878
+3008
+2008
+3FF8
+2008
+ENDCHAR
+STARTCHAR 302c
+ENCODING 12332
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0440
+19F0
+7620
+11F0
+1150
+7DF0
+11F0
+1BF8
+3648
+37F8
+5248
+13FC
+1244
+103C
+ENDCHAR
+STARTCHAR 302d
+ENCODING 12333
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+3FF8
+0280
+1FF0
+1290
+1FF0
+0280
+7FFC
+0100
+1490
+1488
+2424
+4424
+03E0
+ENDCHAR
+STARTCHAR 302e
+ENCODING 12334
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1000
+13F8
+1208
+7FF8
+1200
+13F8
+1260
+1A90
+73E8
+1440
+17F8
+1840
+17FC
+3000
+ENDCHAR
+STARTCHAR 302f
+ENCODING 12335
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1000
+0BF8
+0A08
+43F8
+2200
+23FC
+0250
+0298
+13E4
+1240
+25F8
+2440
+4FFC
+4000
+ENDCHAR
+STARTCHAR 3030
+ENCODING 12336
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0800
+08F8
+0888
+0888
+7E88
+0AF8
+0A88
+0A88
+0A88
+0AF8
+1288
+1204
+2204
+41FC
+ENDCHAR
+STARTCHAR 3031
+ENCODING 12337
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0440
+7FFC
+0540
+0FE0
+0220
+7FFC
+0FE0
+0820
+0FE0
+0FF0
+0840
+7FFC
+0040
+0040
+ENDCHAR
+STARTCHAR 3032
+ENCODING 12338
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0440
+0440
+7FFC
+0440
+3FF8
+0000
+1FF0
+1010
+1010
+1FF0
+1010
+1000
+2000
+4000
+ENDCHAR
+STARTCHAR 3033
+ENCODING 12339
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0820
+0830
+1E48
+25F4
+7E20
+2BFC
+3E50
+2A98
+3F64
+0410
+3A64
+2E08
+2830
+41C0
+ENDCHAR
+STARTCHAR 3034
+ENCODING 12340
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0820
+0820
+09FC
+7E88
+0848
+1C50
+1BFC
+1A20
+2820
+29FC
+4820
+0820
+0820
+0820
+ENDCHAR
+STARTCHAR 3035
+ENCODING 12341
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+1FFC
+1080
+1080
+1080
+1080
+17F8
+1080
+1080
+1080
+2080
+2080
+4FFC
+0000
+ENDCHAR
+STARTCHAR 3036
+ENCODING 12342
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0820
+0820
+7F50
+0888
+3F54
+2230
+3E90
+2250
+3E50
+081C
+7FF0
+0810
+0810
+0810
+ENDCHAR
+STARTCHAR 3037
+ENCODING 12343
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1000
+13F0
+1110
+7D20
+1120
+11F8
+1188
+1D88
+7250
+1250
+1220
+1450
+1588
+3E04
+ENDCHAR
+STARTCHAR 3038
+ENCODING 12344
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0100
+3FFC
+2808
+4800
+0EF8
+1288
+1288
+2A88
+44B0
+0480
+0884
+1084
+607C
+ENDCHAR
+STARTCHAR 3039
+ENCODING 12345
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0800
+08F8
+0888
+0888
+7E88
+12F8
+1288
+1288
+3CF8
+2488
+0688
+0888
+13FC
+6000
+ENDCHAR
+STARTCHAR 303a
+ENCODING 12346
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0820
+0820
+0820
+3E20
+2BFC
+2A80
+2A80
+3E80
+2880
+0C80
+0A80
+0F80
+7180
+0078
+ENDCHAR
+STARTCHAR 303b
+ENCODING 12347
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0820
+0C20
+1220
+2A50
+4848
+3E9C
+23E4
+3E00
+22F8
+3E88
+2488
+2688
+3AF8
+6088
+ENDCHAR
+STARTCHAR 303c
+ENCODING 12348
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1100
+1100
+1500
+65F8
+1A08
+13E8
+2928
+7DE8
+1528
+19E8
+3528
+3408
+5008
+1030
+ENDCHAR
+STARTCHAR 303d
+ENCODING 12349
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1040
+1040
+17F8
+6440
+1FFC
+10A0
+2924
+7E9C
+14F0
+3990
+36A0
+3440
+51B0
+160C
+ENDCHAR
+STARTCHAR 303e
+ENCODING 12350
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0820
+0820
+1E20
+243C
+7E20
+2A20
+3E20
+2AF8
+3E88
+0488
+3A88
+2E88
+28F8
+4088
+ENDCHAR
+STARTCHAR 303f
+ENCODING 12351
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0090
+0088
+0088
+7FFC
+0080
+1E88
+1288
+1248
+1E50
+1030
+0324
+0C54
+718C
+0604
+ENDCHAR
+STARTCHAR 3040
+ENCODING 12352
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+7FFC
+0280
+1FF0
+1290
+1290
+1FF0
+0920
+0540
+7FFC
+0380
+0D60
+711C
+0100
+ENDCHAR
+STARTCHAR 3041
+ENCODING 12353
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1040
+1040
+10A0
+7CA0
+0910
+0BF8
+1204
+3C00
+55F0
+1310
+1110
+1110
+11F0
+1110
+ENDCHAR
+STARTCHAR 3042
+ENCODING 12354
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0100
+3FFC
+2208
+4200
+0200
+7FFC
+0440
+0440
+0F40
+08C0
+0120
+0610
+3808
+ENDCHAR
+STARTCHAR 3043
+ENCODING 12355
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0080
+0080
+1FFC
+1100
+1FFC
+12A0
+1490
+1FFC
+1490
+17F0
+2490
+27F0
+4484
+007C
+ENDCHAR
+STARTCHAR 3044
+ENCODING 12356
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1040
+1040
+13FC
+7E08
+1440
+1040
+17FC
+1890
+7090
+1190
+1160
+1030
+10C8
+3704
+ENDCHAR
+STARTCHAR 3045
+ENCODING 12357
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0040
+0040
+7BF8
+4910
+48A0
+4FFC
+7800
+49F0
+4910
+49F0
+7910
+4910
+41F0
+0110
+ENDCHAR
+STARTCHAR 3046
+ENCODING 12358
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0100
+3FFC
+2208
+7FF8
+0440
+0F80
+0360
+1D10
+7FFC
+0380
+0D60
+711C
+0100
+ENDCHAR
+STARTCHAR 3047
+ENCODING 12359
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+3EF8
+2288
+3EF8
+3EF8
+2108
+2FE8
+2288
+3FF8
+27C8
+2448
+27C8
+27C8
+2458
+ENDCHAR
+STARTCHAR 3048
+ENCODING 12360
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1420
+1420
+7FFC
+1488
+1D20
+0820
+3FFC
+2A48
+3E48
+08F0
+7E90
+0828
+0844
+0984
+ENDCHAR
+STARTCHAR 3049
+ENCODING 12361
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0100
+7FFC
+0380
+0540
+1930
+610C
+0100
+1FF0
+1010
+1010
+1010
+1FF0
+1010
+ENDCHAR
+STARTCHAR 304a
+ENCODING 12362
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1010
+1010
+1210
+1110
+1090
+1090
+1010
+1010
+1010
+1030
+1628
+1848
+6184
+0604
+ENDCHAR
+STARTCHAR 304b
+ENCODING 12363
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0800
+0BF8
+0848
+1048
+17FC
+3048
+5048
+13F8
+1048
+1040
+1080
+1080
+1100
+1200
+ENDCHAR
+STARTCHAR 304c
+ENCODING 12364
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0880
+0880
+0880
+1080
+1FFC
+3010
+5210
+1110
+1110
+1120
+1120
+1040
+1FFC
+1000
+ENDCHAR
+STARTCHAR 304d
+ENCODING 12365
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0840
+0840
+0840
+17FC
+1080
+30C8
+5148
+1350
+1520
+1120
+1110
+1150
+1188
+1604
+ENDCHAR
+STARTCHAR 304e
+ENCODING 12366
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0840
+0BF0
+0890
+17FC
+1000
+33F0
+5210
+13F0
+1020
+13F8
+1220
+1FFC
+1020
+1020
+ENDCHAR
+STARTCHAR 304f
+ENCODING 12367
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+3FF8
+2008
+2248
+2248
+2FE8
+2248
+2248
+3FF8
+2248
+2448
+2848
+3FF8
+2008
+ENDCHAR
+STARTCHAR 3050
+ENCODING 12368
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0100
+7FFC
+0100
+3FF0
+0110
+3FF0
+2100
+3FFC
+2304
+0284
+0458
+1830
+600C
+ENDCHAR
+STARTCHAR 3051
+ENCODING 12369
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0030
+1FC0
+0100
+7FFC
+0380
+0D60
+711C
+0200
+7FFC
+0440
+0F40
+10C0
+0330
+3C08
+ENDCHAR
+STARTCHAR 3052
+ENCODING 12370
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0050
+0048
+1FFC
+1040
+1FC8
+1248
+1FC8
+14D0
+14B0
+1F30
+1124
+22D4
+2C8C
+4004
+ENDCHAR
+STARTCHAR 3053
+ENCODING 12371
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0008
+3F08
+2108
+3F08
+20FC
+3E08
+2048
+3F28
+2428
+2E08
+2D08
+3508
+4408
+0C18
+ENDCHAR
+STARTCHAR 3054
+ENCODING 12372
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1090
+1090
+1120
+19FC
+3720
+3520
+31F8
+5120
+1120
+11F8
+1120
+1120
+11FC
+1100
+ENDCHAR
+STARTCHAR 3055
+ENCODING 12373
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+3FF8
+0440
+7FFC
+0000
+0FE0
+0820
+0FE0
+0820
+0FE0
+2508
+2484
+4424
+03E0
+ENDCHAR
+STARTCHAR 3056
+ENCODING 12374
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0010
+3F10
+2110
+3FFC
+2E90
+2050
+3F50
+5610
+2510
+4D30
+0488
+24A4
+2424
+43E0
+ENDCHAR
+STARTCHAR 3057
+ENCODING 12375
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0FE0
+0820
+0FE0
+0820
+0FE0
+0200
+07F8
+1928
+6248
+0C88
+3108
+0610
+00E0
+ENDCHAR
+STARTCHAR 3058
+ENCODING 12376
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0820
+0820
+09FC
+7E60
+0850
+1C88
+1BFC
+1A08
+29E8
+2928
+49E8
+0928
+0808
+0818
+ENDCHAR
+STARTCHAR 3059
+ENCODING 12377
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1100
+0900
+0900
+3FE0
+0220
+0240
+07F0
+0410
+0FFC
+0804
+1544
+32A4
+4AA4
+0818
+ENDCHAR
+STARTCHAR 305a
+ENCODING 12378
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+1FF0
+1110
+1FF0
+1110
+1FF0
+0000
+7FFC
+0910
+0890
+08A0
+0B40
+0C30
+700C
+ENDCHAR
+STARTCHAR 305b
+ENCODING 12379
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+1FF0
+1110
+1FF0
+1110
+1FF0
+0440
+3FF8
+0440
+0440
+7FFC
+0240
+0C30
+3008
+ENDCHAR
+STARTCHAR 305c
+ENCODING 12380
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0240
+0C78
+3888
+0950
+0820
+7E40
+09A0
+1C3C
+1A44
+2AA8
+4918
+0810
+0860
+0B80
+ENDCHAR
+STARTCHAR 305d
+ENCODING 12381
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0848
+0848
+0A90
+72FC
+1590
+0890
+14F8
+7E90
+0A90
+2CF8
+2A90
+2A90
+48FC
+0880
+ENDCHAR
+STARTCHAR 305e
+ENCODING 12382
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0820
+09F8
+0A48
+73FC
+1400
+0CF8
+1288
+7EF8
+0810
+2CF8
+2A90
+2BFC
+4810
+0810
+ENDCHAR
+STARTCHAR 305f
+ENCODING 12383
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+3FF8
+2108
+3FF8
+2108
+3FF8
+0000
+1FF0
+1010
+1FF0
+1010
+1FF0
+1010
+1030
+ENDCHAR
+STARTCHAR 3060
+ENCODING 12384
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0440
+7FFC
+0460
+1FC0
+0100
+7FFC
+0540
+1930
+620C
+3FF8
+0440
+0F80
+0360
+3C10
+ENDCHAR
+STARTCHAR 3061
+ENCODING 12385
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0100
+0100
+7FFC
+0100
+0308
+0488
+1C90
+6460
+0440
+0420
+0590
+0608
+3804
+ENDCHAR
+STARTCHAR 3062
+ENCODING 12386
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+3DFC
+0124
+7FFC
+0124
+3DFC
+0000
+3CF8
+0088
+3CF8
+2488
+24F8
+3C88
+2498
+ENDCHAR
+STARTCHAR 3063
+ENCODING 12387
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0040
+23F0
+1090
+17FC
+01F0
+0110
+71F0
+1020
+11F8
+1120
+17FC
+1820
+2620
+41FC
+ENDCHAR
+STARTCHAR 3064
+ENCODING 12388
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0040
+21F0
+1150
+11F0
+07FC
+01F0
+7110
+11F0
+11F0
+1110
+11F0
+1B10
+2608
+41FC
+ENDCHAR
+STARTCHAR 3065
+ENCODING 12389
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+3FF8
+2200
+2200
+27F0
+2480
+2880
+3FF8
+2140
+2120
+2210
+2C10
+3FFC
+2000
+ENDCHAR
+STARTCHAR 3066
+ENCODING 12390
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0440
+0440
+0440
+0440
+3FF8
+0440
+0440
+0440
+7FFC
+0440
+0840
+0840
+1040
+2040
+ENDCHAR
+STARTCHAR 3067
+ENCODING 12391
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0100
+7FFC
+0100
+0240
+1A40
+0490
+0320
+0240
+0CC0
+1120
+0610
+1808
+6008
+ENDCHAR
+STARTCHAR 3068
+ENCODING 12392
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0040
+1050
+1048
+17FC
+1040
+7FC8
+12C8
+12A8
+13A8
+1630
+1894
+6334
+0C4C
+0084
+ENDCHAR
+STARTCHAR 3069
+ENCODING 12393
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0100
+7FFC
+0220
+0470
+3F88
+0FE0
+0820
+0FE0
+0820
+0FE0
+0820
+0820
+0860
+ENDCHAR
+STARTCHAR 306a
+ENCODING 12394
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0400
+0478
+7FC8
+0850
+0850
+1F60
+1150
+3F48
+5144
+1F44
+1164
+1158
+1140
+1340
+ENDCHAR
+STARTCHAR 306b
+ENCODING 12395
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0150
+7D50
+1268
+16D8
+1150
+3AE8
+2FFC
+6850
+2BFC
+2B28
+3AA8
+2A94
+042C
+08C4
+ENDCHAR
+STARTCHAR 306c
+ENCODING 12396
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0000
+0000
+0000
+0000
+0000
+7FFC
+0000
+0000
+0000
+0000
+0000
+0000
+0000
+ENDCHAR
+STARTCHAR 306d
+ENCODING 12397
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0100
+7FFC
+0100
+1FF0
+0000
+3FFC
+2408
+4460
+0780
+0400
+0408
+0408
+03F8
+ENDCHAR
+STARTCHAR 306e
+ENCODING 12398
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+2410
+1210
+1220
+4FFC
+2220
+2220
+0410
+1FF8
+1554
+1550
+2550
+2550
+5FFC
+4000
+ENDCHAR
+STARTCHAR 306f
+ENCODING 12399
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0080
+20F0
+1120
+1240
+07F8
+0248
+7248
+13F8
+12C8
+10C0
+1144
+1A3C
+2600
+41FC
+ENDCHAR
+STARTCHAR 3070
+ENCODING 12400
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0218
+0FE4
+3A44
+0928
+0930
+7E00
+1978
+1D48
+2B48
+2B78
+4948
+0948
+0978
+0948
+ENDCHAR
+STARTCHAR 3071
+ENCODING 12401
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0440
+0440
+7FFC
+0440
+0540
+2100
+11FC
+1148
+0250
+0440
+18A0
+6110
+0608
+1804
+ENDCHAR
+STARTCHAR 3072
+ENCODING 12402
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0440
+0440
+7FFC
+0440
+0000
+1FF0
+0100
+0100
+7FFC
+0100
+0100
+0100
+0100
+0300
+ENDCHAR
+STARTCHAR 3073
+ENCODING 12403
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0800
+09F8
+1E48
+2448
+7FF8
+2B20
+3FF8
+2A48
+3F68
+04D8
+3AD8
+2F68
+2848
+41B0
+ENDCHAR
+STARTCHAR 3074
+ENCODING 12404
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0200
+0240
+0430
+0868
+7F84
+0480
+0480
+0480
+0880
+0880
+1080
+1084
+2084
+407C
+ENDCHAR
+STARTCHAR 3075
+ENCODING 12405
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0100
+0600
+38F8
+2088
+2088
+3E88
+2088
+2088
+2088
+3E88
+20F0
+2080
+0080
+0080
+ENDCHAR
+STARTCHAR 3076
+ENCODING 12406
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+03F8
+7A48
+4A48
+4A48
+4BF8
+4A48
+4A48
+4AA8
+7A98
+4B18
+4208
+03F8
+0208
+ENDCHAR
+STARTCHAR 3077
+ENCODING 12407
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+0FE0
+0820
+0FE0
+0000
+1FF0
+1010
+1FF0
+1010
+1FF0
+1010
+1FF0
+0660
+3818
+ENDCHAR
+STARTCHAR 3078
+ENCODING 12408
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0000
+3FF8
+2108
+2108
+2108
+3FF8
+2108
+2308
+2288
+2448
+2828
+2008
+3FF8
+2008
+ENDCHAR
+STARTCHAR 3079
+ENCODING 12409
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1000
+11F8
+1148
+1148
+7D48
+25F8
+2548
+2548
+7968
+4998
+0D98
+1508
+21F8
+4108
+ENDCHAR
+STARTCHAR 307a
+ENCODING 12410
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0010
+7F10
+0110
+0110
+3F10
+2110
+2010
+3F10
+2110
+0110
+0110
+0110
+0210
+1C10
+ENDCHAR
+STARTCHAR 307b
+ENCODING 12411
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0840
+0840
+1440
+1A40
+29FC
+7EA8
+2330
+3E20
+2220
+3E60
+2850
+2490
+3B08
+6204
+ENDCHAR
+STARTCHAR 307c
+ENCODING 12412
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+100C
+0874
+0F84
+4488
+2250
+2238
+03C0
+1040
+1040
+13F8
+2040
+2040
+4FFC
+4000
+ENDCHAR
+STARTCHAR 307d
+ENCODING 12413
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+1110
+1150
+1E50
+1290
+1150
+1FF0
+1030
+17D0
+1450
+17D0
+1450
+27D4
+2454
+44CC
+ENDCHAR
+STARTCHAR 307e
+ENCODING 12414
+SWIDTH 960 0
+DWIDTH 14 0
+BBX 14 14 0 -2
+BITMAP
+0440
+7FFC
+0440
+3CA0
+27F0
+2C0C
+31F0
+2820
+25F8
+2400
+27FC
+38A0
+2130
+23C8
+ENDCHAR
+ENDFONT
diff --git a/xc/test/xsuite/xtest/fonts/xtfont2.c b/xc/test/xsuite/xtest/fonts/xtfont2.c
new file mode 100644
index 000000000..aabc68914
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont2.c
@@ -0,0 +1,1552 @@
+/* $XConsortium$ */
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ */
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "Xatom.h"
+
+static XCharStruct perchar[] = {
+ {0, 0, 14, 0, 0, 0}, /* 8481 */
+ {1, 5, 14, 2, 2, 0}, /* 8482 */
+ {1, 5, 14, 2, 2, 0}, /* 8483 */
+ {1, 3, 14, 2, 2, 0}, /* 8484 */
+ {1, 3, 14, 1, 1, 0}, /* 8485 */
+ {5, 9, 14, 7, -3, 0}, /* 8486 */
+ {6, 8, 14, 9, -2, 0}, /* 8487 */
+ {6, 8, 14, 9, 0, 0}, /* 8488 */
+ {4, 11, 14, 11, 2, 0}, /* 8489 */
+ {6, 9, 14, 12, 2, 0}, /* 8490 */
+ {1, 5, 14, 12, -9, 0}, /* 8491 */
+ {1, 5, 14, 12, -8, 0}, /* 8492 */
+ {5, 9, 14, 12, -9, 0}, /* 8493 */
+ {5, 9, 14, 12, -9, 0}, /* 8494 */
+ {4, 11, 14, 12, -10, 0}, /* 8495 */
+ {4, 11, 14, 12, -8, 0}, /* 8496 */
+ {0, 14, 14, 12, -11, 0}, /* 8497 */
+ {0, 14, 14, -1, 2, 0}, /* 8498 */
+ {4, 11, 14, 8, -3, 0}, /* 8499 */
+ {4, 12, 14, 10, -3, 0}, /* 8500 */
+ {4, 10, 14, 8, -3, 0}, /* 8501 */
+ {4, 12, 14, 10, -3, 0}, /* 8502 */
+ {3, 10, 14, 8, -2, 0}, /* 8503 */
+ {1, 14, 14, 12, 1, 0}, /* 8504 */
+ {3, 12, 14, 8, 2, 0}, /* 8505 */
+ {2, 12, 14, 10, 1, 0}, /* 8506 */
+ {1, 14, 14, 11, 2, 0}, /* 8507 */
+ {1, 13, 14, 6, -4, 0}, /* 8508 */
+ {0, 14, 14, 6, -5, 0}, /* 8509 */
+ {5, 10, 14, 6, -5, 0}, /* 8510 */
+ {0, 14, 14, 12, 2, 0}, /* 8511 */
+ {0, 14, 14, 12, 2, 0}, /* 8512 */
+ {1, 13, 14, 7, -3, 0}, /* 8513 */
+ {5, 9, 14, 12, 2, 0}, /* 8514 */
+ {7, 8, 14, 12, 2, 0}, /* 8515 */
+ {2, 12, 14, 6, -4, 0}, /* 8516 */
+ {3, 11, 14, 6, -4, 0}, /* 8517 */
+ {10, 13, 14, 12, -7, 0}, /* 8518 */
+ {1, 4, 14, 12, -7, 0}, /* 8519 */
+ {6, 13, 14, 12, -7, 0}, /* 8520 */
+ {1, 8, 14, 12, -7, 0}, /* 8521 */
+ {8, 13, 14, 12, 2, 0}, /* 8522 */
+ {1, 6, 14, 12, 2, 0}, /* 8523 */
+ {9, 13, 14, 12, 2, 0}, /* 8524 */
+ {1, 5, 14, 12, 2, 0}, /* 8525 */
+ {8, 13, 14, 12, 2, 0}, /* 8526 */
+ {1, 6, 14, 12, 2, 0}, /* 8527 */
+ {7, 13, 14, 12, 2, 0}, /* 8528 */
+ {1, 7, 14, 12, 2, 0}, /* 8529 */
+ {6, 13, 14, 12, 2, 0}, /* 8530 */
+ {1, 8, 14, 12, 2, 0}, /* 8531 */
+ {6, 13, 14, 12, 2, 0}, /* 8532 */
+ {1, 8, 14, 12, 2, 0}, /* 8533 */
+ {7, 13, 14, 12, 2, 0}, /* 8534 */
+ {1, 7, 14, 12, 2, 0}, /* 8535 */
+ {6, 13, 14, 12, 2, 0}, /* 8536 */
+ {1, 8, 14, 12, 2, 0}, /* 8537 */
+ {8, 13, 14, 12, 2, 0}, /* 8538 */
+ {1, 6, 14, 12, 2, 0}, /* 8539 */
+ {2, 13, 14, 11, 1, 0}, /* 8540 */
+ {2, 13, 14, 6, -5, 0}, /* 8541 */
+ {2, 13, 14, 11, 0, 0}, /* 8542 */
+ {2, 13, 14, 11, 0, 0}, /* 8543 */
+ {2, 13, 14, 11, 0, 0}, /* 8544 */
+ {2, 13, 14, 8, -3, 0}, /* 8545 */
+ {2, 13, 14, 11, 0, 0}, /* 8546 */
+ {2, 12, 14, 12, 1, 0}, /* 8547 */
+ {2, 12, 14, 12, 1, 0}, /* 8548 */
+ {2, 13, 14, 12, 1, 0}, /* 8549 */
+ {2, 13, 14, 12, 1, 0}, /* 8550 */
+ {2, 13, 14, 8, -2, 0}, /* 8551 */
+ {2, 13, 14, 10, 0, 0}, /* 8552 */
+ {1, 13, 14, 11, 1, 0}, /* 8553 */
+ {3, 12, 14, 11, 2, 0}, /* 8554 */
+ {2, 6, 14, 11, -7, 0}, /* 8555 */
+ {1, 5, 14, 11, -6, 0}, /* 8556 */
+ {1, 8, 14, 11, -6, 0}, /* 8557 */
+ {1, 13, 14, 11, 1, 0}, /* 8558 */
+ {1, 13, 14, 11, 1, 0}, /* 8559 */
+ {3, 12, 14, 11, 2, 0}, /* 8560 */
+ {3, 11, 14, 11, 2, 0}, /* 8561 */
+ {1, 13, 14, 11, 1, 0}, /* 8562 */
+ {1, 13, 14, 11, 1, 0}, /* 8563 */
+ {2, 13, 14, 11, 2, 0}, /* 8564 */
+ {2, 13, 14, 11, 1, 0}, /* 8565 */
+ {3, 12, 14, 10, 0, 0}, /* 8566 */
+ {1, 13, 14, 11, 1, 0}, /* 8567 */
+ {5, 10, 14, 12, 2, 0}, /* 8568 */
+ {1, 14, 14, 11, 1, 0}, /* 8569 */
+ {1, 14, 14, 11, 1, 0}, /* 8570 */
+ {2, 13, 14, 10, 1, 0}, /* 8571 */
+ {2, 13, 14, 10, 1, 0}, /* 8572 */
+ {2, 13, 14, 10, 1, 0}, /* 8573 */
+ {1, 14, 14, 11, 2, 0}, /* 8574 */
+ {0, 0, 0, 0, 0, 0}, /* 8737 */
+ {0, 0, 0, 0, 0, 0}, /* 8738 */
+ {0, 0, 0, 0, 0, 0}, /* 8739 */
+ {0, 0, 0, 0, 0, 0}, /* 8740 */
+ {0, 0, 0, 0, 0, 0}, /* 8741 */
+ {0, 0, 0, 0, 0, 0}, /* 8742 */
+ {0, 0, 0, 0, 0, 0}, /* 8743 */
+ {0, 0, 0, 0, 0, 0}, /* 8744 */
+ {0, 0, 0, 0, 0, 0}, /* 8745 */
+ {0, 0, 0, 0, 0, 0}, /* 8746 */
+ {0, 0, 0, 0, 0, 0}, /* 8747 */
+ {0, 0, 0, 0, 0, 0}, /* 8748 */
+ {0, 0, 0, 0, 0, 0}, /* 8749 */
+ {0, 0, 0, 0, 0, 0}, /* 8750 */
+ {0, 0, 0, 0, 0, 0}, /* 8751 */
+ {0, 0, 0, 0, 0, 0}, /* 8752 */
+ {0, 0, 0, 0, 0, 0}, /* 8753 */
+ {0, 0, 0, 0, 0, 0}, /* 8754 */
+ {0, 0, 0, 0, 0, 0}, /* 8755 */
+ {0, 0, 0, 0, 0, 0}, /* 8756 */
+ {0, 0, 0, 0, 0, 0}, /* 8757 */
+ {0, 0, 0, 0, 0, 0}, /* 8758 */
+ {0, 0, 0, 0, 0, 0}, /* 8759 */
+ {0, 0, 0, 0, 0, 0}, /* 8760 */
+ {0, 0, 0, 0, 0, 0}, /* 8761 */
+ {0, 0, 0, 0, 0, 0}, /* 8762 */
+ {0, 0, 0, 0, 0, 0}, /* 8763 */
+ {0, 0, 0, 0, 0, 0}, /* 8764 */
+ {0, 0, 0, 0, 0, 0}, /* 8765 */
+ {0, 0, 0, 0, 0, 0}, /* 8766 */
+ {0, 0, 0, 0, 0, 0}, /* 8767 */
+ {0, 0, 0, 0, 0, 0}, /* 8768 */
+ {0, 0, 0, 0, 0, 0}, /* 8769 */
+ {0, 0, 0, 0, 0, 0}, /* 8770 */
+ {0, 0, 0, 0, 0, 0}, /* 8771 */
+ {0, 0, 0, 0, 0, 0}, /* 8772 */
+ {0, 0, 0, 0, 0, 0}, /* 8773 */
+ {0, 0, 0, 0, 0, 0}, /* 8774 */
+ {0, 0, 0, 0, 0, 0}, /* 8775 */
+ {0, 0, 0, 0, 0, 0}, /* 8776 */
+ {0, 0, 0, 0, 0, 0}, /* 8777 */
+ {0, 0, 0, 0, 0, 0}, /* 8778 */
+ {0, 0, 0, 0, 0, 0}, /* 8779 */
+ {0, 0, 0, 0, 0, 0}, /* 8780 */
+ {0, 0, 0, 0, 0, 0}, /* 8781 */
+ {0, 0, 0, 0, 0, 0}, /* 8782 */
+ {0, 0, 0, 0, 0, 0}, /* 8783 */
+ {0, 0, 0, 0, 0, 0}, /* 8784 */
+ {0, 0, 0, 0, 0, 0}, /* 8785 */
+ {0, 0, 0, 0, 0, 0}, /* 8786 */
+ {0, 0, 0, 0, 0, 0}, /* 8787 */
+ {0, 0, 0, 0, 0, 0}, /* 8788 */
+ {0, 0, 0, 0, 0, 0}, /* 8789 */
+ {0, 0, 0, 0, 0, 0}, /* 8790 */
+ {0, 0, 0, 0, 0, 0}, /* 8791 */
+ {0, 0, 0, 0, 0, 0}, /* 8792 */
+ {0, 0, 0, 0, 0, 0}, /* 8793 */
+ {0, 0, 0, 0, 0, 0}, /* 8794 */
+ {0, 0, 0, 0, 0, 0}, /* 8795 */
+ {0, 0, 0, 0, 0, 0}, /* 8796 */
+ {0, 0, 0, 0, 0, 0}, /* 8797 */
+ {0, 0, 0, 0, 0, 0}, /* 8798 */
+ {0, 0, 0, 0, 0, 0}, /* 8799 */
+ {0, 0, 0, 0, 0, 0}, /* 8800 */
+ {0, 0, 0, 0, 0, 0}, /* 8801 */
+ {0, 0, 0, 0, 0, 0}, /* 8802 */
+ {0, 0, 0, 0, 0, 0}, /* 8803 */
+ {0, 0, 0, 0, 0, 0}, /* 8804 */
+ {0, 0, 0, 0, 0, 0}, /* 8805 */
+ {0, 0, 0, 0, 0, 0}, /* 8806 */
+ {0, 0, 0, 0, 0, 0}, /* 8807 */
+ {0, 0, 0, 0, 0, 0}, /* 8808 */
+ {0, 0, 0, 0, 0, 0}, /* 8809 */
+ {0, 0, 0, 0, 0, 0}, /* 8810 */
+ {0, 0, 0, 0, 0, 0}, /* 8811 */
+ {0, 0, 0, 0, 0, 0}, /* 8812 */
+ {0, 0, 0, 0, 0, 0}, /* 8813 */
+ {0, 0, 0, 0, 0, 0}, /* 8814 */
+ {0, 0, 0, 0, 0, 0}, /* 8815 */
+ {0, 0, 0, 0, 0, 0}, /* 8816 */
+ {0, 0, 0, 0, 0, 0}, /* 8817 */
+ {0, 0, 0, 0, 0, 0}, /* 8818 */
+ {0, 0, 0, 0, 0, 0}, /* 8819 */
+ {0, 0, 0, 0, 0, 0}, /* 8820 */
+ {0, 0, 0, 0, 0, 0}, /* 8821 */
+ {0, 0, 0, 0, 0, 0}, /* 8822 */
+ {0, 0, 0, 0, 0, 0}, /* 8823 */
+ {0, 0, 0, 0, 0, 0}, /* 8824 */
+ {0, 0, 0, 0, 0, 0}, /* 8825 */
+ {0, 0, 0, 0, 0, 0}, /* 8826 */
+ {0, 0, 0, 0, 0, 0}, /* 8827 */
+ {0, 0, 0, 0, 0, 0}, /* 8828 */
+ {0, 0, 0, 0, 0, 0}, /* 8829 */
+ {0, 0, 0, 0, 0, 0}, /* 8830 */
+ {0, 0, 0, 0, 0, 0}, /* 8993 */
+ {0, 0, 0, 0, 0, 0}, /* 8994 */
+ {0, 0, 0, 0, 0, 0}, /* 8995 */
+ {0, 0, 0, 0, 0, 0}, /* 8996 */
+ {0, 0, 0, 0, 0, 0}, /* 8997 */
+ {0, 0, 0, 0, 0, 0}, /* 8998 */
+ {0, 0, 0, 0, 0, 0}, /* 8999 */
+ {0, 0, 0, 0, 0, 0}, /* 9000 */
+ {0, 0, 0, 0, 0, 0}, /* 9001 */
+ {0, 0, 0, 0, 0, 0}, /* 9002 */
+ {0, 0, 0, 0, 0, 0}, /* 9003 */
+ {0, 0, 0, 0, 0, 0}, /* 9004 */
+ {0, 0, 0, 0, 0, 0}, /* 9005 */
+ {0, 0, 0, 0, 0, 0}, /* 9006 */
+ {0, 0, 0, 0, 0, 0}, /* 9007 */
+ {0, 0, 0, 0, 0, 0}, /* 9008 */
+ {0, 0, 0, 0, 0, 0}, /* 9009 */
+ {0, 0, 0, 0, 0, 0}, /* 9010 */
+ {0, 0, 0, 0, 0, 0}, /* 9011 */
+ {0, 0, 0, 0, 0, 0}, /* 9012 */
+ {0, 0, 0, 0, 0, 0}, /* 9013 */
+ {0, 0, 0, 0, 0, 0}, /* 9014 */
+ {0, 0, 0, 0, 0, 0}, /* 9015 */
+ {0, 0, 0, 0, 0, 0}, /* 9016 */
+ {0, 0, 0, 0, 0, 0}, /* 9017 */
+ {0, 0, 0, 0, 0, 0}, /* 9018 */
+ {0, 0, 0, 0, 0, 0}, /* 9019 */
+ {0, 0, 0, 0, 0, 0}, /* 9020 */
+ {0, 0, 0, 0, 0, 0}, /* 9021 */
+ {0, 0, 0, 0, 0, 0}, /* 9022 */
+ {0, 0, 0, 0, 0, 0}, /* 9023 */
+ {0, 0, 0, 0, 0, 0}, /* 9024 */
+ {0, 0, 0, 0, 0, 0}, /* 9025 */
+ {0, 0, 0, 0, 0, 0}, /* 9026 */
+ {0, 0, 0, 0, 0, 0}, /* 9027 */
+ {0, 0, 0, 0, 0, 0}, /* 9028 */
+ {0, 0, 0, 0, 0, 0}, /* 9029 */
+ {0, 0, 0, 0, 0, 0}, /* 9030 */
+ {0, 0, 0, 0, 0, 0}, /* 9031 */
+ {0, 0, 0, 0, 0, 0}, /* 9032 */
+ {0, 0, 0, 0, 0, 0}, /* 9033 */
+ {0, 0, 0, 0, 0, 0}, /* 9034 */
+ {0, 0, 0, 0, 0, 0}, /* 9035 */
+ {0, 0, 0, 0, 0, 0}, /* 9036 */
+ {0, 0, 0, 0, 0, 0}, /* 9037 */
+ {0, 0, 0, 0, 0, 0}, /* 9038 */
+ {0, 0, 0, 0, 0, 0}, /* 9039 */
+ {0, 0, 0, 0, 0, 0}, /* 9040 */
+ {0, 0, 0, 0, 0, 0}, /* 9041 */
+ {0, 0, 0, 0, 0, 0}, /* 9042 */
+ {0, 0, 0, 0, 0, 0}, /* 9043 */
+ {0, 0, 0, 0, 0, 0}, /* 9044 */
+ {0, 0, 0, 0, 0, 0}, /* 9045 */
+ {0, 0, 0, 0, 0, 0}, /* 9046 */
+ {0, 0, 0, 0, 0, 0}, /* 9047 */
+ {0, 0, 0, 0, 0, 0}, /* 9048 */
+ {0, 0, 0, 0, 0, 0}, /* 9049 */
+ {0, 0, 0, 0, 0, 0}, /* 9050 */
+ {0, 0, 0, 0, 0, 0}, /* 9051 */
+ {0, 0, 0, 0, 0, 0}, /* 9052 */
+ {0, 0, 0, 0, 0, 0}, /* 9053 */
+ {0, 0, 0, 0, 0, 0}, /* 9054 */
+ {0, 0, 0, 0, 0, 0}, /* 9055 */
+ {0, 0, 0, 0, 0, 0}, /* 9056 */
+ {0, 0, 0, 0, 0, 0}, /* 9057 */
+ {0, 0, 0, 0, 0, 0}, /* 9058 */
+ {0, 0, 0, 0, 0, 0}, /* 9059 */
+ {0, 0, 0, 0, 0, 0}, /* 9060 */
+ {0, 0, 0, 0, 0, 0}, /* 9061 */
+ {0, 0, 0, 0, 0, 0}, /* 9062 */
+ {0, 0, 0, 0, 0, 0}, /* 9063 */
+ {0, 0, 0, 0, 0, 0}, /* 9064 */
+ {0, 0, 0, 0, 0, 0}, /* 9065 */
+ {0, 0, 0, 0, 0, 0}, /* 9066 */
+ {0, 0, 0, 0, 0, 0}, /* 9067 */
+ {0, 0, 0, 0, 0, 0}, /* 9068 */
+ {0, 0, 0, 0, 0, 0}, /* 9069 */
+ {0, 0, 0, 0, 0, 0}, /* 9070 */
+ {0, 0, 0, 0, 0, 0}, /* 9071 */
+ {0, 0, 0, 0, 0, 0}, /* 9072 */
+ {0, 0, 0, 0, 0, 0}, /* 9073 */
+ {0, 0, 0, 0, 0, 0}, /* 9074 */
+ {0, 0, 0, 0, 0, 0}, /* 9075 */
+ {0, 0, 0, 0, 0, 0}, /* 9076 */
+ {0, 0, 0, 0, 0, 0}, /* 9077 */
+ {0, 0, 0, 0, 0, 0}, /* 9078 */
+ {0, 0, 0, 0, 0, 0}, /* 9079 */
+ {0, 0, 0, 0, 0, 0}, /* 9080 */
+ {0, 0, 0, 0, 0, 0}, /* 9081 */
+ {0, 0, 0, 0, 0, 0}, /* 9082 */
+ {0, 0, 0, 0, 0, 0}, /* 9083 */
+ {0, 0, 0, 0, 0, 0}, /* 9084 */
+ {0, 0, 0, 0, 0, 0}, /* 9085 */
+ {0, 0, 0, 0, 0, 0}, /* 9086 */
+ {2, 12, 14, 9, 2, 0}, /* 9249 */
+ {2, 13, 14, 12, 1, 0}, /* 9250 */
+ {3, 12, 14, 6, 1, 0}, /* 9251 */
+ {1, 13, 14, 9, 0, 0}, /* 9252 */
+ {3, 10, 14, 8, 2, 0}, /* 9253 */
+ {3, 11, 14, 12, 2, 0}, /* 9254 */
+ {3, 12, 14, 8, 2, 0}, /* 9255 */
+ {2, 13, 14, 12, 1, 0}, /* 9256 */
+ {2, 12, 14, 8, 2, 0}, /* 9257 */
+ {2, 14, 14, 11, 1, 0}, /* 9258 */
+ {1, 13, 14, 11, 1, 0}, /* 9259 */
+ {1, 14, 14, 12, 1, 0}, /* 9260 */
+ {3, 12, 14, 12, 2, 0}, /* 9261 */
+ {2, 14, 14, 12, 2, 0}, /* 9262 */
+ {4, 10, 14, 12, 2, 0}, /* 9263 */
+ {4, 14, 14, 12, 2, 0}, /* 9264 */
+ {2, 14, 14, 12, 2, 0}, /* 9265 */
+ {1, 14, 14, 12, 2, 0}, /* 9266 */
+ {2, 12, 14, 11, 1, 0}, /* 9267 */
+ {2, 14, 14, 12, 1, 0}, /* 9268 */
+ {2, 12, 14, 12, 1, 0}, /* 9269 */
+ {2, 14, 14, 12, 1, 0}, /* 9270 */
+ {3, 13, 14, 11, 1, 0}, /* 9271 */
+ {3, 13, 14, 11, 1, 0}, /* 9272 */
+ {1, 13, 14, 12, 2, 0}, /* 9273 */
+ {1, 14, 14, 12, 2, 0}, /* 9274 */
+ {1, 13, 14, 11, 1, 0}, /* 9275 */
+ {1, 14, 14, 12, 1, 0}, /* 9276 */
+ {2, 13, 14, 11, 2, 0}, /* 9277 */
+ {2, 14, 14, 11, 2, 0}, /* 9278 */
+ {2, 13, 14, 11, 1, 0}, /* 9279 */
+ {2, 14, 14, 12, 1, 0}, /* 9280 */
+ {1, 12, 14, 12, 2, 0}, /* 9281 */
+ {1, 14, 14, 12, 2, 0}, /* 9282 */
+ {2, 12, 14, 6, 2, 0}, /* 9283 */
+ {1, 13, 14, 9, 0, 0}, /* 9284 */
+ {1, 14, 14, 12, 0, 0}, /* 9285 */
+ {1, 13, 14, 11, 1, 0}, /* 9286 */
+ {1, 14, 14, 11, 1, 0}, /* 9287 */
+ {3, 12, 14, 11, 1, 0}, /* 9288 */
+ {3, 14, 14, 11, 1, 0}, /* 9289 */
+ {2, 13, 14, 12, 2, 0}, /* 9290 */
+ {2, 13, 14, 11, 2, 0}, /* 9291 */
+ {1, 13, 14, 11, 1, 0}, /* 9292 */
+ {1, 13, 14, 12, 1, 0}, /* 9293 */
+ {2, 13, 14, 10, 1, 0}, /* 9294 */
+ {2, 13, 14, 12, 1, 0}, /* 9295 */
+ {1, 14, 14, 12, 1, 0}, /* 9296 */
+ {1, 14, 14, 12, 1, 0}, /* 9297 */
+ {2, 13, 14, 11, 1, 0}, /* 9298 */
+ {2, 14, 14, 12, 1, 0}, /* 9299 */
+ {2, 13, 14, 12, 1, 0}, /* 9300 */
+ {1, 14, 14, 11, 1, 0}, /* 9301 */
+ {1, 14, 14, 11, 1, 0}, /* 9302 */
+ {1, 14, 14, 11, 1, 0}, /* 9303 */
+ {1, 14, 14, 8, -2, 0}, /* 9304 */
+ {1, 14, 14, 10, -2, 0}, /* 9305 */
+ {1, 14, 14, 11, -2, 0}, /* 9306 */
+ {2, 13, 14, 11, 1, 0}, /* 9307 */
+ {1, 14, 14, 11, 1, 0}, /* 9308 */
+ {1, 14, 14, 12, 1, 0}, /* 9309 */
+ {3, 12, 14, 12, 1, 0}, /* 9310 */
+ {1, 14, 14, 11, 1, 0}, /* 9311 */
+ {2, 14, 14, 12, 1, 0}, /* 9312 */
+ {1, 13, 14, 11, 1, 0}, /* 9313 */
+ {2, 12, 14, 12, 2, 0}, /* 9314 */
+ {2, 12, 14, 8, 2, 0}, /* 9315 */
+ {1, 13, 14, 12, 2, 0}, /* 9316 */
+ {2, 12, 14, 8, 2, 0}, /* 9317 */
+ {1, 13, 14, 11, 2, 0}, /* 9318 */
+ {3, 11, 14, 9, 2, 0}, /* 9319 */
+ {2, 12, 14, 12, 1, 0}, /* 9320 */
+ {4, 12, 14, 12, 2, 0}, /* 9321 */
+ {3, 11, 14, 12, 2, 0}, /* 9322 */
+ {2, 12, 14, 11, 2, 0}, /* 9323 */
+ {1, 14, 14, 11, 2, 0}, /* 9324 */
+ {2, 12, 14, 11, 2, 0}, /* 9325 */
+ {3, 12, 14, 8, 2, 0}, /* 9326 */
+ {1, 13, 14, 12, 2, 0}, /* 9327 */
+ {2, 13, 14, 11, 1, 0}, /* 9328 */
+ {1, 13, 14, 11, 2, 0}, /* 9329 */
+ {2, 13, 14, 12, 2, 0}, /* 9330 */
+ {2, 13, 14, 12, 1, 0}, /* 9331 */
+ {0, 0, 0, 0, 0, 0}, /* 9332 */
+ {0, 0, 0, 0, 0, 0}, /* 9333 */
+ {0, 0, 0, 0, 0, 0}, /* 9334 */
+ {0, 0, 0, 0, 0, 0}, /* 9335 */
+ {0, 0, 0, 0, 0, 0}, /* 9336 */
+ {0, 0, 0, 0, 0, 0}, /* 9337 */
+ {0, 0, 0, 0, 0, 0}, /* 9338 */
+ {0, 0, 0, 0, 0, 0}, /* 9339 */
+ {0, 0, 0, 0, 0, 0}, /* 9340 */
+ {0, 0, 0, 0, 0, 0}, /* 9341 */
+ {0, 0, 0, 0, 0, 0}, /* 9342 */
+ {0, 0, 0, 0, 0, 0}, /* 9505 */
+ {0, 0, 0, 0, 0, 0}, /* 9506 */
+ {0, 0, 0, 0, 0, 0}, /* 9507 */
+ {0, 0, 0, 0, 0, 0}, /* 9508 */
+ {0, 0, 0, 0, 0, 0}, /* 9509 */
+ {0, 0, 0, 0, 0, 0}, /* 9510 */
+ {0, 0, 0, 0, 0, 0}, /* 9511 */
+ {0, 0, 0, 0, 0, 0}, /* 9512 */
+ {0, 0, 0, 0, 0, 0}, /* 9513 */
+ {0, 0, 0, 0, 0, 0}, /* 9514 */
+ {0, 0, 0, 0, 0, 0}, /* 9515 */
+ {0, 0, 0, 0, 0, 0}, /* 9516 */
+ {0, 0, 0, 0, 0, 0}, /* 9517 */
+ {0, 0, 0, 0, 0, 0}, /* 9518 */
+ {0, 0, 0, 0, 0, 0}, /* 9519 */
+ {0, 0, 0, 0, 0, 0}, /* 9520 */
+ {0, 0, 0, 0, 0, 0}, /* 9521 */
+ {0, 0, 0, 0, 0, 0}, /* 9522 */
+ {0, 0, 0, 0, 0, 0}, /* 9523 */
+ {0, 0, 0, 0, 0, 0}, /* 9524 */
+ {0, 0, 0, 0, 0, 0}, /* 9525 */
+ {0, 0, 0, 0, 0, 0}, /* 9526 */
+ {0, 0, 0, 0, 0, 0}, /* 9527 */
+ {0, 0, 0, 0, 0, 0}, /* 9528 */
+ {0, 0, 0, 0, 0, 0}, /* 9529 */
+ {0, 0, 0, 0, 0, 0}, /* 9530 */
+ {0, 0, 0, 0, 0, 0}, /* 9531 */
+ {0, 0, 0, 0, 0, 0}, /* 9532 */
+ {0, 0, 0, 0, 0, 0}, /* 9533 */
+ {0, 0, 0, 0, 0, 0}, /* 9534 */
+ {0, 0, 0, 0, 0, 0}, /* 9535 */
+ {0, 0, 0, 0, 0, 0}, /* 9536 */
+ {0, 0, 0, 0, 0, 0}, /* 9537 */
+ {0, 0, 0, 0, 0, 0}, /* 9538 */
+ {0, 0, 0, 0, 0, 0}, /* 9539 */
+ {0, 0, 0, 0, 0, 0}, /* 9540 */
+ {0, 0, 0, 0, 0, 0}, /* 9541 */
+ {0, 0, 0, 0, 0, 0}, /* 9542 */
+ {0, 0, 0, 0, 0, 0}, /* 9543 */
+ {0, 0, 0, 0, 0, 0}, /* 9544 */
+ {0, 0, 0, 0, 0, 0}, /* 9545 */
+ {0, 0, 0, 0, 0, 0}, /* 9546 */
+ {0, 0, 0, 0, 0, 0}, /* 9547 */
+ {0, 0, 0, 0, 0, 0}, /* 9548 */
+ {0, 0, 0, 0, 0, 0}, /* 9549 */
+ {0, 0, 0, 0, 0, 0}, /* 9550 */
+ {0, 0, 0, 0, 0, 0}, /* 9551 */
+ {0, 0, 0, 0, 0, 0}, /* 9552 */
+ {0, 0, 0, 0, 0, 0}, /* 9553 */
+ {0, 0, 0, 0, 0, 0}, /* 9554 */
+ {0, 0, 0, 0, 0, 0}, /* 9555 */
+ {0, 0, 0, 0, 0, 0}, /* 9556 */
+ {0, 0, 0, 0, 0, 0}, /* 9557 */
+ {0, 0, 0, 0, 0, 0}, /* 9558 */
+ {0, 0, 0, 0, 0, 0}, /* 9559 */
+ {0, 0, 0, 0, 0, 0}, /* 9560 */
+ {0, 0, 0, 0, 0, 0}, /* 9561 */
+ {0, 0, 0, 0, 0, 0}, /* 9562 */
+ {0, 0, 0, 0, 0, 0}, /* 9563 */
+ {0, 0, 0, 0, 0, 0}, /* 9564 */
+ {0, 0, 0, 0, 0, 0}, /* 9565 */
+ {0, 0, 0, 0, 0, 0}, /* 9566 */
+ {0, 0, 0, 0, 0, 0}, /* 9567 */
+ {0, 0, 0, 0, 0, 0}, /* 9568 */
+ {0, 0, 0, 0, 0, 0}, /* 9569 */
+ {0, 0, 0, 0, 0, 0}, /* 9570 */
+ {0, 0, 0, 0, 0, 0}, /* 9571 */
+ {0, 0, 0, 0, 0, 0}, /* 9572 */
+ {0, 0, 0, 0, 0, 0}, /* 9573 */
+ {0, 0, 0, 0, 0, 0}, /* 9574 */
+ {0, 0, 0, 0, 0, 0}, /* 9575 */
+ {0, 0, 0, 0, 0, 0}, /* 9576 */
+ {0, 0, 0, 0, 0, 0}, /* 9577 */
+ {0, 0, 0, 0, 0, 0}, /* 9578 */
+ {0, 0, 0, 0, 0, 0}, /* 9579 */
+ {0, 0, 0, 0, 0, 0}, /* 9580 */
+ {0, 0, 0, 0, 0, 0}, /* 9581 */
+ {0, 0, 0, 0, 0, 0}, /* 9582 */
+ {0, 0, 0, 0, 0, 0}, /* 9583 */
+ {0, 0, 0, 0, 0, 0}, /* 9584 */
+ {0, 0, 0, 0, 0, 0}, /* 9585 */
+ {0, 0, 0, 0, 0, 0}, /* 9586 */
+ {0, 0, 0, 0, 0, 0}, /* 9587 */
+ {0, 0, 0, 0, 0, 0}, /* 9588 */
+ {0, 0, 0, 0, 0, 0}, /* 9589 */
+ {0, 0, 0, 0, 0, 0}, /* 9590 */
+ {0, 0, 0, 0, 0, 0}, /* 9591 */
+ {0, 0, 0, 0, 0, 0}, /* 9592 */
+ {0, 0, 0, 0, 0, 0}, /* 9593 */
+ {0, 0, 0, 0, 0, 0}, /* 9594 */
+ {0, 0, 0, 0, 0, 0}, /* 9595 */
+ {0, 0, 0, 0, 0, 0}, /* 9596 */
+ {0, 0, 0, 0, 0, 0}, /* 9597 */
+ {0, 0, 0, 0, 0, 0}, /* 9598 */
+ {0, 0, 0, 0, 0, 0}, /* 9761 */
+ {0, 0, 0, 0, 0, 0}, /* 9762 */
+ {0, 0, 0, 0, 0, 0}, /* 9763 */
+ {0, 0, 0, 0, 0, 0}, /* 9764 */
+ {0, 0, 0, 0, 0, 0}, /* 9765 */
+ {0, 0, 0, 0, 0, 0}, /* 9766 */
+ {0, 0, 0, 0, 0, 0}, /* 9767 */
+ {0, 0, 0, 0, 0, 0}, /* 9768 */
+ {0, 0, 0, 0, 0, 0}, /* 9769 */
+ {0, 0, 0, 0, 0, 0}, /* 9770 */
+ {0, 0, 0, 0, 0, 0}, /* 9771 */
+ {0, 0, 0, 0, 0, 0}, /* 9772 */
+ {0, 0, 0, 0, 0, 0}, /* 9773 */
+ {0, 0, 0, 0, 0, 0}, /* 9774 */
+ {0, 0, 0, 0, 0, 0}, /* 9775 */
+ {0, 0, 0, 0, 0, 0}, /* 9776 */
+ {0, 0, 0, 0, 0, 0}, /* 9777 */
+ {0, 0, 0, 0, 0, 0}, /* 9778 */
+ {0, 0, 0, 0, 0, 0}, /* 9779 */
+ {0, 0, 0, 0, 0, 0}, /* 9780 */
+ {0, 0, 0, 0, 0, 0}, /* 9781 */
+ {0, 0, 0, 0, 0, 0}, /* 9782 */
+ {0, 0, 0, 0, 0, 0}, /* 9783 */
+ {0, 0, 0, 0, 0, 0}, /* 9784 */
+ {0, 0, 0, 0, 0, 0}, /* 9785 */
+ {0, 0, 0, 0, 0, 0}, /* 9786 */
+ {0, 0, 0, 0, 0, 0}, /* 9787 */
+ {0, 0, 0, 0, 0, 0}, /* 9788 */
+ {0, 0, 0, 0, 0, 0}, /* 9789 */
+ {0, 0, 0, 0, 0, 0}, /* 9790 */
+ {0, 0, 0, 0, 0, 0}, /* 9791 */
+ {0, 0, 0, 0, 0, 0}, /* 9792 */
+ {0, 0, 0, 0, 0, 0}, /* 9793 */
+ {0, 0, 0, 0, 0, 0}, /* 9794 */
+ {0, 0, 0, 0, 0, 0}, /* 9795 */
+ {0, 0, 0, 0, 0, 0}, /* 9796 */
+ {0, 0, 0, 0, 0, 0}, /* 9797 */
+ {0, 0, 0, 0, 0, 0}, /* 9798 */
+ {0, 0, 0, 0, 0, 0}, /* 9799 */
+ {0, 0, 0, 0, 0, 0}, /* 9800 */
+ {0, 0, 0, 0, 0, 0}, /* 9801 */
+ {0, 0, 0, 0, 0, 0}, /* 9802 */
+ {0, 0, 0, 0, 0, 0}, /* 9803 */
+ {0, 0, 0, 0, 0, 0}, /* 9804 */
+ {0, 0, 0, 0, 0, 0}, /* 9805 */
+ {0, 0, 0, 0, 0, 0}, /* 9806 */
+ {0, 0, 0, 0, 0, 0}, /* 9807 */
+ {0, 0, 0, 0, 0, 0}, /* 9808 */
+ {0, 0, 0, 0, 0, 0}, /* 9809 */
+ {0, 0, 0, 0, 0, 0}, /* 9810 */
+ {0, 0, 0, 0, 0, 0}, /* 9811 */
+ {0, 0, 0, 0, 0, 0}, /* 9812 */
+ {0, 0, 0, 0, 0, 0}, /* 9813 */
+ {0, 0, 0, 0, 0, 0}, /* 9814 */
+ {0, 0, 0, 0, 0, 0}, /* 9815 */
+ {0, 0, 0, 0, 0, 0}, /* 9816 */
+ {0, 0, 0, 0, 0, 0}, /* 9817 */
+ {0, 0, 0, 0, 0, 0}, /* 9818 */
+ {0, 0, 0, 0, 0, 0}, /* 9819 */
+ {0, 0, 0, 0, 0, 0}, /* 9820 */
+ {0, 0, 0, 0, 0, 0}, /* 9821 */
+ {0, 0, 0, 0, 0, 0}, /* 9822 */
+ {0, 0, 0, 0, 0, 0}, /* 9823 */
+ {0, 0, 0, 0, 0, 0}, /* 9824 */
+ {0, 0, 0, 0, 0, 0}, /* 9825 */
+ {0, 0, 0, 0, 0, 0}, /* 9826 */
+ {0, 0, 0, 0, 0, 0}, /* 9827 */
+ {0, 0, 0, 0, 0, 0}, /* 9828 */
+ {0, 0, 0, 0, 0, 0}, /* 9829 */
+ {0, 0, 0, 0, 0, 0}, /* 9830 */
+ {0, 0, 0, 0, 0, 0}, /* 9831 */
+ {0, 0, 0, 0, 0, 0}, /* 9832 */
+ {0, 0, 0, 0, 0, 0}, /* 9833 */
+ {0, 0, 0, 0, 0, 0}, /* 9834 */
+ {0, 0, 0, 0, 0, 0}, /* 9835 */
+ {0, 0, 0, 0, 0, 0}, /* 9836 */
+ {0, 0, 0, 0, 0, 0}, /* 9837 */
+ {0, 0, 0, 0, 0, 0}, /* 9838 */
+ {0, 0, 0, 0, 0, 0}, /* 9839 */
+ {0, 0, 0, 0, 0, 0}, /* 9840 */
+ {0, 0, 0, 0, 0, 0}, /* 9841 */
+ {0, 0, 0, 0, 0, 0}, /* 9842 */
+ {0, 0, 0, 0, 0, 0}, /* 9843 */
+ {0, 0, 0, 0, 0, 0}, /* 9844 */
+ {0, 0, 0, 0, 0, 0}, /* 9845 */
+ {0, 0, 0, 0, 0, 0}, /* 9846 */
+ {0, 0, 0, 0, 0, 0}, /* 9847 */
+ {0, 0, 0, 0, 0, 0}, /* 9848 */
+ {0, 0, 0, 0, 0, 0}, /* 9849 */
+ {0, 0, 0, 0, 0, 0}, /* 9850 */
+ {0, 0, 0, 0, 0, 0}, /* 9851 */
+ {0, 0, 0, 0, 0, 0}, /* 9852 */
+ {0, 0, 0, 0, 0, 0}, /* 9853 */
+ {0, 0, 0, 0, 0, 0}, /* 9854 */
+ {0, 0, 0, 0, 0, 0}, /* 10017 */
+ {0, 0, 0, 0, 0, 0}, /* 10018 */
+ {0, 0, 0, 0, 0, 0}, /* 10019 */
+ {0, 0, 0, 0, 0, 0}, /* 10020 */
+ {0, 0, 0, 0, 0, 0}, /* 10021 */
+ {0, 0, 0, 0, 0, 0}, /* 10022 */
+ {0, 0, 0, 0, 0, 0}, /* 10023 */
+ {0, 0, 0, 0, 0, 0}, /* 10024 */
+ {0, 0, 0, 0, 0, 0}, /* 10025 */
+ {0, 0, 0, 0, 0, 0}, /* 10026 */
+ {0, 0, 0, 0, 0, 0}, /* 10027 */
+ {0, 0, 0, 0, 0, 0}, /* 10028 */
+ {0, 0, 0, 0, 0, 0}, /* 10029 */
+ {0, 0, 0, 0, 0, 0}, /* 10030 */
+ {0, 0, 0, 0, 0, 0}, /* 10031 */
+ {0, 0, 0, 0, 0, 0}, /* 10032 */
+ {0, 0, 0, 0, 0, 0}, /* 10033 */
+ {0, 0, 0, 0, 0, 0}, /* 10034 */
+ {0, 0, 0, 0, 0, 0}, /* 10035 */
+ {0, 0, 0, 0, 0, 0}, /* 10036 */
+ {0, 0, 0, 0, 0, 0}, /* 10037 */
+ {0, 0, 0, 0, 0, 0}, /* 10038 */
+ {0, 0, 0, 0, 0, 0}, /* 10039 */
+ {0, 0, 0, 0, 0, 0}, /* 10040 */
+ {0, 0, 0, 0, 0, 0}, /* 10041 */
+ {0, 0, 0, 0, 0, 0}, /* 10042 */
+ {0, 0, 0, 0, 0, 0}, /* 10043 */
+ {0, 0, 0, 0, 0, 0}, /* 10044 */
+ {0, 0, 0, 0, 0, 0}, /* 10045 */
+ {0, 0, 0, 0, 0, 0}, /* 10046 */
+ {0, 0, 0, 0, 0, 0}, /* 10047 */
+ {0, 0, 0, 0, 0, 0}, /* 10048 */
+ {0, 0, 0, 0, 0, 0}, /* 10049 */
+ {0, 0, 0, 0, 0, 0}, /* 10050 */
+ {0, 0, 0, 0, 0, 0}, /* 10051 */
+ {0, 0, 0, 0, 0, 0}, /* 10052 */
+ {0, 0, 0, 0, 0, 0}, /* 10053 */
+ {0, 0, 0, 0, 0, 0}, /* 10054 */
+ {0, 0, 0, 0, 0, 0}, /* 10055 */
+ {0, 0, 0, 0, 0, 0}, /* 10056 */
+ {0, 0, 0, 0, 0, 0}, /* 10057 */
+ {0, 0, 0, 0, 0, 0}, /* 10058 */
+ {0, 0, 0, 0, 0, 0}, /* 10059 */
+ {0, 0, 0, 0, 0, 0}, /* 10060 */
+ {0, 0, 0, 0, 0, 0}, /* 10061 */
+ {0, 0, 0, 0, 0, 0}, /* 10062 */
+ {0, 0, 0, 0, 0, 0}, /* 10063 */
+ {0, 0, 0, 0, 0, 0}, /* 10064 */
+ {0, 0, 0, 0, 0, 0}, /* 10065 */
+ {0, 0, 0, 0, 0, 0}, /* 10066 */
+ {0, 0, 0, 0, 0, 0}, /* 10067 */
+ {0, 0, 0, 0, 0, 0}, /* 10068 */
+ {0, 0, 0, 0, 0, 0}, /* 10069 */
+ {0, 0, 0, 0, 0, 0}, /* 10070 */
+ {0, 0, 0, 0, 0, 0}, /* 10071 */
+ {0, 0, 0, 0, 0, 0}, /* 10072 */
+ {0, 0, 0, 0, 0, 0}, /* 10073 */
+ {0, 0, 0, 0, 0, 0}, /* 10074 */
+ {0, 0, 0, 0, 0, 0}, /* 10075 */
+ {0, 0, 0, 0, 0, 0}, /* 10076 */
+ {0, 0, 0, 0, 0, 0}, /* 10077 */
+ {0, 0, 0, 0, 0, 0}, /* 10078 */
+ {0, 0, 0, 0, 0, 0}, /* 10079 */
+ {0, 0, 0, 0, 0, 0}, /* 10080 */
+ {0, 0, 0, 0, 0, 0}, /* 10081 */
+ {0, 0, 0, 0, 0, 0}, /* 10082 */
+ {0, 0, 0, 0, 0, 0}, /* 10083 */
+ {0, 0, 0, 0, 0, 0}, /* 10084 */
+ {0, 0, 0, 0, 0, 0}, /* 10085 */
+ {0, 0, 0, 0, 0, 0}, /* 10086 */
+ {0, 0, 0, 0, 0, 0}, /* 10087 */
+ {0, 0, 0, 0, 0, 0}, /* 10088 */
+ {0, 0, 0, 0, 0, 0}, /* 10089 */
+ {0, 0, 0, 0, 0, 0}, /* 10090 */
+ {0, 0, 0, 0, 0, 0}, /* 10091 */
+ {0, 0, 0, 0, 0, 0}, /* 10092 */
+ {0, 0, 0, 0, 0, 0}, /* 10093 */
+ {0, 0, 0, 0, 0, 0}, /* 10094 */
+ {0, 0, 0, 0, 0, 0}, /* 10095 */
+ {0, 0, 0, 0, 0, 0}, /* 10096 */
+ {0, 0, 0, 0, 0, 0}, /* 10097 */
+ {0, 0, 0, 0, 0, 0}, /* 10098 */
+ {0, 0, 0, 0, 0, 0}, /* 10099 */
+ {0, 0, 0, 0, 0, 0}, /* 10100 */
+ {0, 0, 0, 0, 0, 0}, /* 10101 */
+ {0, 0, 0, 0, 0, 0}, /* 10102 */
+ {0, 0, 0, 0, 0, 0}, /* 10103 */
+ {0, 0, 0, 0, 0, 0}, /* 10104 */
+ {0, 0, 0, 0, 0, 0}, /* 10105 */
+ {0, 0, 0, 0, 0, 0}, /* 10106 */
+ {0, 0, 0, 0, 0, 0}, /* 10107 */
+ {0, 0, 0, 0, 0, 0}, /* 10108 */
+ {0, 0, 0, 0, 0, 0}, /* 10109 */
+ {0, 0, 0, 0, 0, 0}, /* 10110 */
+ {0, 0, 0, 0, 0, 0}, /* 10273 */
+ {0, 0, 0, 0, 0, 0}, /* 10274 */
+ {0, 0, 0, 0, 0, 0}, /* 10275 */
+ {0, 0, 0, 0, 0, 0}, /* 10276 */
+ {0, 0, 0, 0, 0, 0}, /* 10277 */
+ {0, 0, 0, 0, 0, 0}, /* 10278 */
+ {0, 0, 0, 0, 0, 0}, /* 10279 */
+ {0, 0, 0, 0, 0, 0}, /* 10280 */
+ {0, 0, 0, 0, 0, 0}, /* 10281 */
+ {0, 0, 0, 0, 0, 0}, /* 10282 */
+ {0, 0, 0, 0, 0, 0}, /* 10283 */
+ {0, 0, 0, 0, 0, 0}, /* 10284 */
+ {0, 0, 0, 0, 0, 0}, /* 10285 */
+ {0, 0, 0, 0, 0, 0}, /* 10286 */
+ {0, 0, 0, 0, 0, 0}, /* 10287 */
+ {0, 0, 0, 0, 0, 0}, /* 10288 */
+ {0, 0, 0, 0, 0, 0}, /* 10289 */
+ {0, 0, 0, 0, 0, 0}, /* 10290 */
+ {0, 0, 0, 0, 0, 0}, /* 10291 */
+ {0, 0, 0, 0, 0, 0}, /* 10292 */
+ {0, 0, 0, 0, 0, 0}, /* 10293 */
+ {0, 0, 0, 0, 0, 0}, /* 10294 */
+ {0, 0, 0, 0, 0, 0}, /* 10295 */
+ {0, 0, 0, 0, 0, 0}, /* 10296 */
+ {0, 0, 0, 0, 0, 0}, /* 10297 */
+ {0, 0, 0, 0, 0, 0}, /* 10298 */
+ {0, 0, 0, 0, 0, 0}, /* 10299 */
+ {0, 0, 0, 0, 0, 0}, /* 10300 */
+ {0, 0, 0, 0, 0, 0}, /* 10301 */
+ {0, 0, 0, 0, 0, 0}, /* 10302 */
+ {0, 0, 0, 0, 0, 0}, /* 10303 */
+ {0, 0, 0, 0, 0, 0}, /* 10304 */
+ {0, 0, 0, 0, 0, 0}, /* 10305 */
+ {0, 0, 0, 0, 0, 0}, /* 10306 */
+ {0, 0, 0, 0, 0, 0}, /* 10307 */
+ {0, 0, 0, 0, 0, 0}, /* 10308 */
+ {0, 0, 0, 0, 0, 0}, /* 10309 */
+ {0, 0, 0, 0, 0, 0}, /* 10310 */
+ {0, 0, 0, 0, 0, 0}, /* 10311 */
+ {0, 0, 0, 0, 0, 0}, /* 10312 */
+ {0, 0, 0, 0, 0, 0}, /* 10313 */
+ {0, 0, 0, 0, 0, 0}, /* 10314 */
+ {0, 0, 0, 0, 0, 0}, /* 10315 */
+ {0, 0, 0, 0, 0, 0}, /* 10316 */
+ {0, 0, 0, 0, 0, 0}, /* 10317 */
+ {0, 0, 0, 0, 0, 0}, /* 10318 */
+ {0, 0, 0, 0, 0, 0}, /* 10319 */
+ {0, 0, 0, 0, 0, 0}, /* 10320 */
+ {0, 0, 0, 0, 0, 0}, /* 10321 */
+ {0, 0, 0, 0, 0, 0}, /* 10322 */
+ {0, 0, 0, 0, 0, 0}, /* 10323 */
+ {0, 0, 0, 0, 0, 0}, /* 10324 */
+ {0, 0, 0, 0, 0, 0}, /* 10325 */
+ {0, 0, 0, 0, 0, 0}, /* 10326 */
+ {0, 0, 0, 0, 0, 0}, /* 10327 */
+ {0, 0, 0, 0, 0, 0}, /* 10328 */
+ {0, 0, 0, 0, 0, 0}, /* 10329 */
+ {0, 0, 0, 0, 0, 0}, /* 10330 */
+ {0, 0, 0, 0, 0, 0}, /* 10331 */
+ {0, 0, 0, 0, 0, 0}, /* 10332 */
+ {0, 0, 0, 0, 0, 0}, /* 10333 */
+ {0, 0, 0, 0, 0, 0}, /* 10334 */
+ {0, 0, 0, 0, 0, 0}, /* 10335 */
+ {0, 0, 0, 0, 0, 0}, /* 10336 */
+ {0, 0, 0, 0, 0, 0}, /* 10337 */
+ {0, 0, 0, 0, 0, 0}, /* 10338 */
+ {0, 0, 0, 0, 0, 0}, /* 10339 */
+ {0, 0, 0, 0, 0, 0}, /* 10340 */
+ {0, 0, 0, 0, 0, 0}, /* 10341 */
+ {0, 0, 0, 0, 0, 0}, /* 10342 */
+ {0, 0, 0, 0, 0, 0}, /* 10343 */
+ {0, 0, 0, 0, 0, 0}, /* 10344 */
+ {0, 0, 0, 0, 0, 0}, /* 10345 */
+ {0, 0, 0, 0, 0, 0}, /* 10346 */
+ {0, 0, 0, 0, 0, 0}, /* 10347 */
+ {0, 0, 0, 0, 0, 0}, /* 10348 */
+ {0, 0, 0, 0, 0, 0}, /* 10349 */
+ {0, 0, 0, 0, 0, 0}, /* 10350 */
+ {0, 0, 0, 0, 0, 0}, /* 10351 */
+ {0, 0, 0, 0, 0, 0}, /* 10352 */
+ {0, 0, 0, 0, 0, 0}, /* 10353 */
+ {0, 0, 0, 0, 0, 0}, /* 10354 */
+ {0, 0, 0, 0, 0, 0}, /* 10355 */
+ {0, 0, 0, 0, 0, 0}, /* 10356 */
+ {0, 0, 0, 0, 0, 0}, /* 10357 */
+ {0, 0, 0, 0, 0, 0}, /* 10358 */
+ {0, 0, 0, 0, 0, 0}, /* 10359 */
+ {0, 0, 0, 0, 0, 0}, /* 10360 */
+ {0, 0, 0, 0, 0, 0}, /* 10361 */
+ {0, 0, 0, 0, 0, 0}, /* 10362 */
+ {0, 0, 0, 0, 0, 0}, /* 10363 */
+ {0, 0, 0, 0, 0, 0}, /* 10364 */
+ {0, 0, 0, 0, 0, 0}, /* 10365 */
+ {0, 0, 0, 0, 0, 0}, /* 10366 */
+ {0, 0, 0, 0, 0, 0}, /* 10529 */
+ {0, 0, 0, 0, 0, 0}, /* 10530 */
+ {0, 0, 0, 0, 0, 0}, /* 10531 */
+ {0, 0, 0, 0, 0, 0}, /* 10532 */
+ {0, 0, 0, 0, 0, 0}, /* 10533 */
+ {0, 0, 0, 0, 0, 0}, /* 10534 */
+ {0, 0, 0, 0, 0, 0}, /* 10535 */
+ {0, 0, 0, 0, 0, 0}, /* 10536 */
+ {0, 0, 0, 0, 0, 0}, /* 10537 */
+ {0, 0, 0, 0, 0, 0}, /* 10538 */
+ {0, 0, 0, 0, 0, 0}, /* 10539 */
+ {0, 0, 0, 0, 0, 0}, /* 10540 */
+ {0, 0, 0, 0, 0, 0}, /* 10541 */
+ {0, 0, 0, 0, 0, 0}, /* 10542 */
+ {0, 0, 0, 0, 0, 0}, /* 10543 */
+ {0, 0, 0, 0, 0, 0}, /* 10544 */
+ {0, 0, 0, 0, 0, 0}, /* 10545 */
+ {0, 0, 0, 0, 0, 0}, /* 10546 */
+ {0, 0, 0, 0, 0, 0}, /* 10547 */
+ {0, 0, 0, 0, 0, 0}, /* 10548 */
+ {0, 0, 0, 0, 0, 0}, /* 10549 */
+ {0, 0, 0, 0, 0, 0}, /* 10550 */
+ {0, 0, 0, 0, 0, 0}, /* 10551 */
+ {0, 0, 0, 0, 0, 0}, /* 10552 */
+ {0, 0, 0, 0, 0, 0}, /* 10553 */
+ {0, 0, 0, 0, 0, 0}, /* 10554 */
+ {0, 0, 0, 0, 0, 0}, /* 10555 */
+ {0, 0, 0, 0, 0, 0}, /* 10556 */
+ {0, 0, 0, 0, 0, 0}, /* 10557 */
+ {0, 0, 0, 0, 0, 0}, /* 10558 */
+ {0, 0, 0, 0, 0, 0}, /* 10559 */
+ {0, 0, 0, 0, 0, 0}, /* 10560 */
+ {0, 0, 0, 0, 0, 0}, /* 10561 */
+ {0, 0, 0, 0, 0, 0}, /* 10562 */
+ {0, 0, 0, 0, 0, 0}, /* 10563 */
+ {0, 0, 0, 0, 0, 0}, /* 10564 */
+ {0, 0, 0, 0, 0, 0}, /* 10565 */
+ {0, 0, 0, 0, 0, 0}, /* 10566 */
+ {0, 0, 0, 0, 0, 0}, /* 10567 */
+ {0, 0, 0, 0, 0, 0}, /* 10568 */
+ {0, 0, 0, 0, 0, 0}, /* 10569 */
+ {0, 0, 0, 0, 0, 0}, /* 10570 */
+ {0, 0, 0, 0, 0, 0}, /* 10571 */
+ {0, 0, 0, 0, 0, 0}, /* 10572 */
+ {0, 0, 0, 0, 0, 0}, /* 10573 */
+ {0, 0, 0, 0, 0, 0}, /* 10574 */
+ {0, 0, 0, 0, 0, 0}, /* 10575 */
+ {0, 0, 0, 0, 0, 0}, /* 10576 */
+ {0, 0, 0, 0, 0, 0}, /* 10577 */
+ {0, 0, 0, 0, 0, 0}, /* 10578 */
+ {0, 0, 0, 0, 0, 0}, /* 10579 */
+ {0, 0, 0, 0, 0, 0}, /* 10580 */
+ {0, 0, 0, 0, 0, 0}, /* 10581 */
+ {0, 0, 0, 0, 0, 0}, /* 10582 */
+ {0, 0, 0, 0, 0, 0}, /* 10583 */
+ {0, 0, 0, 0, 0, 0}, /* 10584 */
+ {0, 0, 0, 0, 0, 0}, /* 10585 */
+ {0, 0, 0, 0, 0, 0}, /* 10586 */
+ {0, 0, 0, 0, 0, 0}, /* 10587 */
+ {0, 0, 0, 0, 0, 0}, /* 10588 */
+ {0, 0, 0, 0, 0, 0}, /* 10589 */
+ {0, 0, 0, 0, 0, 0}, /* 10590 */
+ {0, 0, 0, 0, 0, 0}, /* 10591 */
+ {0, 0, 0, 0, 0, 0}, /* 10592 */
+ {0, 0, 0, 0, 0, 0}, /* 10593 */
+ {0, 0, 0, 0, 0, 0}, /* 10594 */
+ {0, 0, 0, 0, 0, 0}, /* 10595 */
+ {0, 0, 0, 0, 0, 0}, /* 10596 */
+ {0, 0, 0, 0, 0, 0}, /* 10597 */
+ {0, 0, 0, 0, 0, 0}, /* 10598 */
+ {0, 0, 0, 0, 0, 0}, /* 10599 */
+ {0, 0, 0, 0, 0, 0}, /* 10600 */
+ {0, 0, 0, 0, 0, 0}, /* 10601 */
+ {0, 0, 0, 0, 0, 0}, /* 10602 */
+ {0, 0, 0, 0, 0, 0}, /* 10603 */
+ {0, 0, 0, 0, 0, 0}, /* 10604 */
+ {0, 0, 0, 0, 0, 0}, /* 10605 */
+ {0, 0, 0, 0, 0, 0}, /* 10606 */
+ {0, 0, 0, 0, 0, 0}, /* 10607 */
+ {0, 0, 0, 0, 0, 0}, /* 10608 */
+ {0, 0, 0, 0, 0, 0}, /* 10609 */
+ {0, 0, 0, 0, 0, 0}, /* 10610 */
+ {0, 0, 0, 0, 0, 0}, /* 10611 */
+ {0, 0, 0, 0, 0, 0}, /* 10612 */
+ {0, 0, 0, 0, 0, 0}, /* 10613 */
+ {0, 0, 0, 0, 0, 0}, /* 10614 */
+ {0, 0, 0, 0, 0, 0}, /* 10615 */
+ {0, 0, 0, 0, 0, 0}, /* 10616 */
+ {0, 0, 0, 0, 0, 0}, /* 10617 */
+ {0, 0, 0, 0, 0, 0}, /* 10618 */
+ {0, 0, 0, 0, 0, 0}, /* 10619 */
+ {0, 0, 0, 0, 0, 0}, /* 10620 */
+ {0, 0, 0, 0, 0, 0}, /* 10621 */
+ {0, 0, 0, 0, 0, 0}, /* 10622 */
+ {0, 0, 0, 0, 0, 0}, /* 10785 */
+ {0, 0, 0, 0, 0, 0}, /* 10786 */
+ {0, 0, 0, 0, 0, 0}, /* 10787 */
+ {0, 0, 0, 0, 0, 0}, /* 10788 */
+ {0, 0, 0, 0, 0, 0}, /* 10789 */
+ {0, 0, 0, 0, 0, 0}, /* 10790 */
+ {0, 0, 0, 0, 0, 0}, /* 10791 */
+ {0, 0, 0, 0, 0, 0}, /* 10792 */
+ {0, 0, 0, 0, 0, 0}, /* 10793 */
+ {0, 0, 0, 0, 0, 0}, /* 10794 */
+ {0, 0, 0, 0, 0, 0}, /* 10795 */
+ {0, 0, 0, 0, 0, 0}, /* 10796 */
+ {0, 0, 0, 0, 0, 0}, /* 10797 */
+ {0, 0, 0, 0, 0, 0}, /* 10798 */
+ {0, 0, 0, 0, 0, 0}, /* 10799 */
+ {0, 0, 0, 0, 0, 0}, /* 10800 */
+ {0, 0, 0, 0, 0, 0}, /* 10801 */
+ {0, 0, 0, 0, 0, 0}, /* 10802 */
+ {0, 0, 0, 0, 0, 0}, /* 10803 */
+ {0, 0, 0, 0, 0, 0}, /* 10804 */
+ {0, 0, 0, 0, 0, 0}, /* 10805 */
+ {0, 0, 0, 0, 0, 0}, /* 10806 */
+ {0, 0, 0, 0, 0, 0}, /* 10807 */
+ {0, 0, 0, 0, 0, 0}, /* 10808 */
+ {0, 0, 0, 0, 0, 0}, /* 10809 */
+ {0, 0, 0, 0, 0, 0}, /* 10810 */
+ {0, 0, 0, 0, 0, 0}, /* 10811 */
+ {0, 0, 0, 0, 0, 0}, /* 10812 */
+ {0, 0, 0, 0, 0, 0}, /* 10813 */
+ {0, 0, 0, 0, 0, 0}, /* 10814 */
+ {0, 0, 0, 0, 0, 0}, /* 10815 */
+ {0, 0, 0, 0, 0, 0}, /* 10816 */
+ {0, 0, 0, 0, 0, 0}, /* 10817 */
+ {0, 0, 0, 0, 0, 0}, /* 10818 */
+ {0, 0, 0, 0, 0, 0}, /* 10819 */
+ {0, 0, 0, 0, 0, 0}, /* 10820 */
+ {0, 0, 0, 0, 0, 0}, /* 10821 */
+ {0, 0, 0, 0, 0, 0}, /* 10822 */
+ {0, 0, 0, 0, 0, 0}, /* 10823 */
+ {0, 0, 0, 0, 0, 0}, /* 10824 */
+ {0, 0, 0, 0, 0, 0}, /* 10825 */
+ {0, 0, 0, 0, 0, 0}, /* 10826 */
+ {0, 0, 0, 0, 0, 0}, /* 10827 */
+ {0, 0, 0, 0, 0, 0}, /* 10828 */
+ {0, 0, 0, 0, 0, 0}, /* 10829 */
+ {0, 0, 0, 0, 0, 0}, /* 10830 */
+ {0, 0, 0, 0, 0, 0}, /* 10831 */
+ {0, 0, 0, 0, 0, 0}, /* 10832 */
+ {0, 0, 0, 0, 0, 0}, /* 10833 */
+ {0, 0, 0, 0, 0, 0}, /* 10834 */
+ {0, 0, 0, 0, 0, 0}, /* 10835 */
+ {0, 0, 0, 0, 0, 0}, /* 10836 */
+ {0, 0, 0, 0, 0, 0}, /* 10837 */
+ {0, 0, 0, 0, 0, 0}, /* 10838 */
+ {0, 0, 0, 0, 0, 0}, /* 10839 */
+ {0, 0, 0, 0, 0, 0}, /* 10840 */
+ {0, 0, 0, 0, 0, 0}, /* 10841 */
+ {0, 0, 0, 0, 0, 0}, /* 10842 */
+ {0, 0, 0, 0, 0, 0}, /* 10843 */
+ {0, 0, 0, 0, 0, 0}, /* 10844 */
+ {0, 0, 0, 0, 0, 0}, /* 10845 */
+ {0, 0, 0, 0, 0, 0}, /* 10846 */
+ {0, 0, 0, 0, 0, 0}, /* 10847 */
+ {0, 0, 0, 0, 0, 0}, /* 10848 */
+ {0, 0, 0, 0, 0, 0}, /* 10849 */
+ {0, 0, 0, 0, 0, 0}, /* 10850 */
+ {0, 0, 0, 0, 0, 0}, /* 10851 */
+ {0, 0, 0, 0, 0, 0}, /* 10852 */
+ {0, 0, 0, 0, 0, 0}, /* 10853 */
+ {0, 0, 0, 0, 0, 0}, /* 10854 */
+ {0, 0, 0, 0, 0, 0}, /* 10855 */
+ {0, 0, 0, 0, 0, 0}, /* 10856 */
+ {0, 0, 0, 0, 0, 0}, /* 10857 */
+ {0, 0, 0, 0, 0, 0}, /* 10858 */
+ {0, 0, 0, 0, 0, 0}, /* 10859 */
+ {0, 0, 0, 0, 0, 0}, /* 10860 */
+ {0, 0, 0, 0, 0, 0}, /* 10861 */
+ {0, 0, 0, 0, 0, 0}, /* 10862 */
+ {0, 0, 0, 0, 0, 0}, /* 10863 */
+ {0, 0, 0, 0, 0, 0}, /* 10864 */
+ {0, 0, 0, 0, 0, 0}, /* 10865 */
+ {0, 0, 0, 0, 0, 0}, /* 10866 */
+ {0, 0, 0, 0, 0, 0}, /* 10867 */
+ {0, 0, 0, 0, 0, 0}, /* 10868 */
+ {0, 0, 0, 0, 0, 0}, /* 10869 */
+ {0, 0, 0, 0, 0, 0}, /* 10870 */
+ {0, 0, 0, 0, 0, 0}, /* 10871 */
+ {0, 0, 0, 0, 0, 0}, /* 10872 */
+ {0, 0, 0, 0, 0, 0}, /* 10873 */
+ {0, 0, 0, 0, 0, 0}, /* 10874 */
+ {0, 0, 0, 0, 0, 0}, /* 10875 */
+ {0, 0, 0, 0, 0, 0}, /* 10876 */
+ {0, 0, 0, 0, 0, 0}, /* 10877 */
+ {0, 0, 0, 0, 0, 0}, /* 10878 */
+ {0, 0, 0, 0, 0, 0}, /* 11041 */
+ {0, 0, 0, 0, 0, 0}, /* 11042 */
+ {0, 0, 0, 0, 0, 0}, /* 11043 */
+ {0, 0, 0, 0, 0, 0}, /* 11044 */
+ {0, 0, 0, 0, 0, 0}, /* 11045 */
+ {0, 0, 0, 0, 0, 0}, /* 11046 */
+ {0, 0, 0, 0, 0, 0}, /* 11047 */
+ {0, 0, 0, 0, 0, 0}, /* 11048 */
+ {0, 0, 0, 0, 0, 0}, /* 11049 */
+ {0, 0, 0, 0, 0, 0}, /* 11050 */
+ {0, 0, 0, 0, 0, 0}, /* 11051 */
+ {0, 0, 0, 0, 0, 0}, /* 11052 */
+ {0, 0, 0, 0, 0, 0}, /* 11053 */
+ {0, 0, 0, 0, 0, 0}, /* 11054 */
+ {0, 0, 0, 0, 0, 0}, /* 11055 */
+ {0, 0, 0, 0, 0, 0}, /* 11056 */
+ {0, 0, 0, 0, 0, 0}, /* 11057 */
+ {0, 0, 0, 0, 0, 0}, /* 11058 */
+ {0, 0, 0, 0, 0, 0}, /* 11059 */
+ {0, 0, 0, 0, 0, 0}, /* 11060 */
+ {0, 0, 0, 0, 0, 0}, /* 11061 */
+ {0, 0, 0, 0, 0, 0}, /* 11062 */
+ {0, 0, 0, 0, 0, 0}, /* 11063 */
+ {0, 0, 0, 0, 0, 0}, /* 11064 */
+ {0, 0, 0, 0, 0, 0}, /* 11065 */
+ {0, 0, 0, 0, 0, 0}, /* 11066 */
+ {0, 0, 0, 0, 0, 0}, /* 11067 */
+ {0, 0, 0, 0, 0, 0}, /* 11068 */
+ {0, 0, 0, 0, 0, 0}, /* 11069 */
+ {0, 0, 0, 0, 0, 0}, /* 11070 */
+ {0, 0, 0, 0, 0, 0}, /* 11071 */
+ {0, 0, 0, 0, 0, 0}, /* 11072 */
+ {0, 0, 0, 0, 0, 0}, /* 11073 */
+ {0, 0, 0, 0, 0, 0}, /* 11074 */
+ {0, 0, 0, 0, 0, 0}, /* 11075 */
+ {0, 0, 0, 0, 0, 0}, /* 11076 */
+ {0, 0, 0, 0, 0, 0}, /* 11077 */
+ {0, 0, 0, 0, 0, 0}, /* 11078 */
+ {0, 0, 0, 0, 0, 0}, /* 11079 */
+ {0, 0, 0, 0, 0, 0}, /* 11080 */
+ {0, 0, 0, 0, 0, 0}, /* 11081 */
+ {0, 0, 0, 0, 0, 0}, /* 11082 */
+ {0, 0, 0, 0, 0, 0}, /* 11083 */
+ {0, 0, 0, 0, 0, 0}, /* 11084 */
+ {0, 0, 0, 0, 0, 0}, /* 11085 */
+ {0, 0, 0, 0, 0, 0}, /* 11086 */
+ {0, 0, 0, 0, 0, 0}, /* 11087 */
+ {0, 0, 0, 0, 0, 0}, /* 11088 */
+ {0, 0, 0, 0, 0, 0}, /* 11089 */
+ {0, 0, 0, 0, 0, 0}, /* 11090 */
+ {0, 0, 0, 0, 0, 0}, /* 11091 */
+ {0, 0, 0, 0, 0, 0}, /* 11092 */
+ {0, 0, 0, 0, 0, 0}, /* 11093 */
+ {0, 0, 0, 0, 0, 0}, /* 11094 */
+ {0, 0, 0, 0, 0, 0}, /* 11095 */
+ {0, 0, 0, 0, 0, 0}, /* 11096 */
+ {0, 0, 0, 0, 0, 0}, /* 11097 */
+ {0, 0, 0, 0, 0, 0}, /* 11098 */
+ {0, 0, 0, 0, 0, 0}, /* 11099 */
+ {0, 0, 0, 0, 0, 0}, /* 11100 */
+ {0, 0, 0, 0, 0, 0}, /* 11101 */
+ {0, 0, 0, 0, 0, 0}, /* 11102 */
+ {0, 0, 0, 0, 0, 0}, /* 11103 */
+ {0, 0, 0, 0, 0, 0}, /* 11104 */
+ {0, 0, 0, 0, 0, 0}, /* 11105 */
+ {0, 0, 0, 0, 0, 0}, /* 11106 */
+ {0, 0, 0, 0, 0, 0}, /* 11107 */
+ {0, 0, 0, 0, 0, 0}, /* 11108 */
+ {0, 0, 0, 0, 0, 0}, /* 11109 */
+ {0, 0, 0, 0, 0, 0}, /* 11110 */
+ {0, 0, 0, 0, 0, 0}, /* 11111 */
+ {0, 0, 0, 0, 0, 0}, /* 11112 */
+ {0, 0, 0, 0, 0, 0}, /* 11113 */
+ {0, 0, 0, 0, 0, 0}, /* 11114 */
+ {0, 0, 0, 0, 0, 0}, /* 11115 */
+ {0, 0, 0, 0, 0, 0}, /* 11116 */
+ {0, 0, 0, 0, 0, 0}, /* 11117 */
+ {0, 0, 0, 0, 0, 0}, /* 11118 */
+ {0, 0, 0, 0, 0, 0}, /* 11119 */
+ {0, 0, 0, 0, 0, 0}, /* 11120 */
+ {0, 0, 0, 0, 0, 0}, /* 11121 */
+ {0, 0, 0, 0, 0, 0}, /* 11122 */
+ {0, 0, 0, 0, 0, 0}, /* 11123 */
+ {0, 0, 0, 0, 0, 0}, /* 11124 */
+ {0, 0, 0, 0, 0, 0}, /* 11125 */
+ {0, 0, 0, 0, 0, 0}, /* 11126 */
+ {0, 0, 0, 0, 0, 0}, /* 11127 */
+ {0, 0, 0, 0, 0, 0}, /* 11128 */
+ {0, 0, 0, 0, 0, 0}, /* 11129 */
+ {0, 0, 0, 0, 0, 0}, /* 11130 */
+ {0, 0, 0, 0, 0, 0}, /* 11131 */
+ {0, 0, 0, 0, 0, 0}, /* 11132 */
+ {0, 0, 0, 0, 0, 0}, /* 11133 */
+ {0, 0, 0, 0, 0, 0}, /* 11134 */
+ {0, 0, 0, 0, 0, 0}, /* 11297 */
+ {0, 0, 0, 0, 0, 0}, /* 11298 */
+ {0, 0, 0, 0, 0, 0}, /* 11299 */
+ {0, 0, 0, 0, 0, 0}, /* 11300 */
+ {0, 0, 0, 0, 0, 0}, /* 11301 */
+ {0, 0, 0, 0, 0, 0}, /* 11302 */
+ {0, 0, 0, 0, 0, 0}, /* 11303 */
+ {0, 0, 0, 0, 0, 0}, /* 11304 */
+ {0, 0, 0, 0, 0, 0}, /* 11305 */
+ {0, 0, 0, 0, 0, 0}, /* 11306 */
+ {0, 0, 0, 0, 0, 0}, /* 11307 */
+ {0, 0, 0, 0, 0, 0}, /* 11308 */
+ {0, 0, 0, 0, 0, 0}, /* 11309 */
+ {0, 0, 0, 0, 0, 0}, /* 11310 */
+ {0, 0, 0, 0, 0, 0}, /* 11311 */
+ {0, 0, 0, 0, 0, 0}, /* 11312 */
+ {0, 0, 0, 0, 0, 0}, /* 11313 */
+ {0, 0, 0, 0, 0, 0}, /* 11314 */
+ {0, 0, 0, 0, 0, 0}, /* 11315 */
+ {0, 0, 0, 0, 0, 0}, /* 11316 */
+ {0, 0, 0, 0, 0, 0}, /* 11317 */
+ {0, 0, 0, 0, 0, 0}, /* 11318 */
+ {0, 0, 0, 0, 0, 0}, /* 11319 */
+ {0, 0, 0, 0, 0, 0}, /* 11320 */
+ {0, 0, 0, 0, 0, 0}, /* 11321 */
+ {0, 0, 0, 0, 0, 0}, /* 11322 */
+ {0, 0, 0, 0, 0, 0}, /* 11323 */
+ {0, 0, 0, 0, 0, 0}, /* 11324 */
+ {0, 0, 0, 0, 0, 0}, /* 11325 */
+ {0, 0, 0, 0, 0, 0}, /* 11326 */
+ {0, 0, 0, 0, 0, 0}, /* 11327 */
+ {0, 0, 0, 0, 0, 0}, /* 11328 */
+ {0, 0, 0, 0, 0, 0}, /* 11329 */
+ {0, 0, 0, 0, 0, 0}, /* 11330 */
+ {0, 0, 0, 0, 0, 0}, /* 11331 */
+ {0, 0, 0, 0, 0, 0}, /* 11332 */
+ {0, 0, 0, 0, 0, 0}, /* 11333 */
+ {0, 0, 0, 0, 0, 0}, /* 11334 */
+ {0, 0, 0, 0, 0, 0}, /* 11335 */
+ {0, 0, 0, 0, 0, 0}, /* 11336 */
+ {0, 0, 0, 0, 0, 0}, /* 11337 */
+ {0, 0, 0, 0, 0, 0}, /* 11338 */
+ {0, 0, 0, 0, 0, 0}, /* 11339 */
+ {0, 0, 0, 0, 0, 0}, /* 11340 */
+ {0, 0, 0, 0, 0, 0}, /* 11341 */
+ {0, 0, 0, 0, 0, 0}, /* 11342 */
+ {0, 0, 0, 0, 0, 0}, /* 11343 */
+ {0, 0, 0, 0, 0, 0}, /* 11344 */
+ {0, 0, 0, 0, 0, 0}, /* 11345 */
+ {0, 0, 0, 0, 0, 0}, /* 11346 */
+ {0, 0, 0, 0, 0, 0}, /* 11347 */
+ {0, 0, 0, 0, 0, 0}, /* 11348 */
+ {0, 0, 0, 0, 0, 0}, /* 11349 */
+ {0, 0, 0, 0, 0, 0}, /* 11350 */
+ {0, 0, 0, 0, 0, 0}, /* 11351 */
+ {0, 0, 0, 0, 0, 0}, /* 11352 */
+ {0, 0, 0, 0, 0, 0}, /* 11353 */
+ {0, 0, 0, 0, 0, 0}, /* 11354 */
+ {0, 0, 0, 0, 0, 0}, /* 11355 */
+ {0, 0, 0, 0, 0, 0}, /* 11356 */
+ {0, 0, 0, 0, 0, 0}, /* 11357 */
+ {0, 0, 0, 0, 0, 0}, /* 11358 */
+ {0, 0, 0, 0, 0, 0}, /* 11359 */
+ {0, 0, 0, 0, 0, 0}, /* 11360 */
+ {0, 0, 0, 0, 0, 0}, /* 11361 */
+ {0, 0, 0, 0, 0, 0}, /* 11362 */
+ {0, 0, 0, 0, 0, 0}, /* 11363 */
+ {0, 0, 0, 0, 0, 0}, /* 11364 */
+ {0, 0, 0, 0, 0, 0}, /* 11365 */
+ {0, 0, 0, 0, 0, 0}, /* 11366 */
+ {0, 0, 0, 0, 0, 0}, /* 11367 */
+ {0, 0, 0, 0, 0, 0}, /* 11368 */
+ {0, 0, 0, 0, 0, 0}, /* 11369 */
+ {0, 0, 0, 0, 0, 0}, /* 11370 */
+ {0, 0, 0, 0, 0, 0}, /* 11371 */
+ {0, 0, 0, 0, 0, 0}, /* 11372 */
+ {0, 0, 0, 0, 0, 0}, /* 11373 */
+ {0, 0, 0, 0, 0, 0}, /* 11374 */
+ {0, 0, 0, 0, 0, 0}, /* 11375 */
+ {0, 0, 0, 0, 0, 0}, /* 11376 */
+ {0, 0, 0, 0, 0, 0}, /* 11377 */
+ {0, 0, 0, 0, 0, 0}, /* 11378 */
+ {0, 0, 0, 0, 0, 0}, /* 11379 */
+ {0, 0, 0, 0, 0, 0}, /* 11380 */
+ {0, 0, 0, 0, 0, 0}, /* 11381 */
+ {0, 0, 0, 0, 0, 0}, /* 11382 */
+ {0, 0, 0, 0, 0, 0}, /* 11383 */
+ {0, 0, 0, 0, 0, 0}, /* 11384 */
+ {0, 0, 0, 0, 0, 0}, /* 11385 */
+ {0, 0, 0, 0, 0, 0}, /* 11386 */
+ {0, 0, 0, 0, 0, 0}, /* 11387 */
+ {0, 0, 0, 0, 0, 0}, /* 11388 */
+ {0, 0, 0, 0, 0, 0}, /* 11389 */
+ {0, 0, 0, 0, 0, 0}, /* 11390 */
+ {0, 0, 0, 0, 0, 0}, /* 11553 */
+ {0, 0, 0, 0, 0, 0}, /* 11554 */
+ {0, 0, 0, 0, 0, 0}, /* 11555 */
+ {0, 0, 0, 0, 0, 0}, /* 11556 */
+ {0, 0, 0, 0, 0, 0}, /* 11557 */
+ {0, 0, 0, 0, 0, 0}, /* 11558 */
+ {0, 0, 0, 0, 0, 0}, /* 11559 */
+ {0, 0, 0, 0, 0, 0}, /* 11560 */
+ {0, 0, 0, 0, 0, 0}, /* 11561 */
+ {0, 0, 0, 0, 0, 0}, /* 11562 */
+ {0, 0, 0, 0, 0, 0}, /* 11563 */
+ {0, 0, 0, 0, 0, 0}, /* 11564 */
+ {0, 0, 0, 0, 0, 0}, /* 11565 */
+ {0, 0, 0, 0, 0, 0}, /* 11566 */
+ {0, 0, 0, 0, 0, 0}, /* 11567 */
+ {0, 0, 0, 0, 0, 0}, /* 11568 */
+ {0, 0, 0, 0, 0, 0}, /* 11569 */
+ {0, 0, 0, 0, 0, 0}, /* 11570 */
+ {0, 0, 0, 0, 0, 0}, /* 11571 */
+ {0, 0, 0, 0, 0, 0}, /* 11572 */
+ {0, 0, 0, 0, 0, 0}, /* 11573 */
+ {0, 0, 0, 0, 0, 0}, /* 11574 */
+ {0, 0, 0, 0, 0, 0}, /* 11575 */
+ {0, 0, 0, 0, 0, 0}, /* 11576 */
+ {0, 0, 0, 0, 0, 0}, /* 11577 */
+ {0, 0, 0, 0, 0, 0}, /* 11578 */
+ {0, 0, 0, 0, 0, 0}, /* 11579 */
+ {0, 0, 0, 0, 0, 0}, /* 11580 */
+ {0, 0, 0, 0, 0, 0}, /* 11581 */
+ {0, 0, 0, 0, 0, 0}, /* 11582 */
+ {0, 0, 0, 0, 0, 0}, /* 11583 */
+ {0, 0, 0, 0, 0, 0}, /* 11584 */
+ {0, 0, 0, 0, 0, 0}, /* 11585 */
+ {0, 0, 0, 0, 0, 0}, /* 11586 */
+ {0, 0, 0, 0, 0, 0}, /* 11587 */
+ {0, 0, 0, 0, 0, 0}, /* 11588 */
+ {0, 0, 0, 0, 0, 0}, /* 11589 */
+ {0, 0, 0, 0, 0, 0}, /* 11590 */
+ {0, 0, 0, 0, 0, 0}, /* 11591 */
+ {0, 0, 0, 0, 0, 0}, /* 11592 */
+ {0, 0, 0, 0, 0, 0}, /* 11593 */
+ {0, 0, 0, 0, 0, 0}, /* 11594 */
+ {0, 0, 0, 0, 0, 0}, /* 11595 */
+ {0, 0, 0, 0, 0, 0}, /* 11596 */
+ {0, 0, 0, 0, 0, 0}, /* 11597 */
+ {0, 0, 0, 0, 0, 0}, /* 11598 */
+ {0, 0, 0, 0, 0, 0}, /* 11599 */
+ {0, 0, 0, 0, 0, 0}, /* 11600 */
+ {0, 0, 0, 0, 0, 0}, /* 11601 */
+ {0, 0, 0, 0, 0, 0}, /* 11602 */
+ {0, 0, 0, 0, 0, 0}, /* 11603 */
+ {0, 0, 0, 0, 0, 0}, /* 11604 */
+ {0, 0, 0, 0, 0, 0}, /* 11605 */
+ {0, 0, 0, 0, 0, 0}, /* 11606 */
+ {0, 0, 0, 0, 0, 0}, /* 11607 */
+ {0, 0, 0, 0, 0, 0}, /* 11608 */
+ {0, 0, 0, 0, 0, 0}, /* 11609 */
+ {0, 0, 0, 0, 0, 0}, /* 11610 */
+ {0, 0, 0, 0, 0, 0}, /* 11611 */
+ {0, 0, 0, 0, 0, 0}, /* 11612 */
+ {0, 0, 0, 0, 0, 0}, /* 11613 */
+ {0, 0, 0, 0, 0, 0}, /* 11614 */
+ {0, 0, 0, 0, 0, 0}, /* 11615 */
+ {0, 0, 0, 0, 0, 0}, /* 11616 */
+ {0, 0, 0, 0, 0, 0}, /* 11617 */
+ {0, 0, 0, 0, 0, 0}, /* 11618 */
+ {0, 0, 0, 0, 0, 0}, /* 11619 */
+ {0, 0, 0, 0, 0, 0}, /* 11620 */
+ {0, 0, 0, 0, 0, 0}, /* 11621 */
+ {0, 0, 0, 0, 0, 0}, /* 11622 */
+ {0, 0, 0, 0, 0, 0}, /* 11623 */
+ {0, 0, 0, 0, 0, 0}, /* 11624 */
+ {0, 0, 0, 0, 0, 0}, /* 11625 */
+ {0, 0, 0, 0, 0, 0}, /* 11626 */
+ {0, 0, 0, 0, 0, 0}, /* 11627 */
+ {0, 0, 0, 0, 0, 0}, /* 11628 */
+ {0, 0, 0, 0, 0, 0}, /* 11629 */
+ {0, 0, 0, 0, 0, 0}, /* 11630 */
+ {0, 0, 0, 0, 0, 0}, /* 11631 */
+ {0, 0, 0, 0, 0, 0}, /* 11632 */
+ {0, 0, 0, 0, 0, 0}, /* 11633 */
+ {0, 0, 0, 0, 0, 0}, /* 11634 */
+ {0, 0, 0, 0, 0, 0}, /* 11635 */
+ {0, 0, 0, 0, 0, 0}, /* 11636 */
+ {0, 0, 0, 0, 0, 0}, /* 11637 */
+ {0, 0, 0, 0, 0, 0}, /* 11638 */
+ {0, 0, 0, 0, 0, 0}, /* 11639 */
+ {0, 0, 0, 0, 0, 0}, /* 11640 */
+ {0, 0, 0, 0, 0, 0}, /* 11641 */
+ {0, 0, 0, 0, 0, 0}, /* 11642 */
+ {0, 0, 0, 0, 0, 0}, /* 11643 */
+ {0, 0, 0, 0, 0, 0}, /* 11644 */
+ {0, 0, 0, 0, 0, 0}, /* 11645 */
+ {0, 0, 0, 0, 0, 0}, /* 11646 */
+ {0, 0, 0, 0, 0, 0}, /* 11809 */
+ {0, 0, 0, 0, 0, 0}, /* 11810 */
+ {0, 0, 0, 0, 0, 0}, /* 11811 */
+ {0, 0, 0, 0, 0, 0}, /* 11812 */
+ {0, 0, 0, 0, 0, 0}, /* 11813 */
+ {0, 0, 0, 0, 0, 0}, /* 11814 */
+ {0, 0, 0, 0, 0, 0}, /* 11815 */
+ {0, 0, 0, 0, 0, 0}, /* 11816 */
+ {0, 0, 0, 0, 0, 0}, /* 11817 */
+ {0, 0, 0, 0, 0, 0}, /* 11818 */
+ {0, 0, 0, 0, 0, 0}, /* 11819 */
+ {0, 0, 0, 0, 0, 0}, /* 11820 */
+ {0, 0, 0, 0, 0, 0}, /* 11821 */
+ {0, 0, 0, 0, 0, 0}, /* 11822 */
+ {0, 0, 0, 0, 0, 0}, /* 11823 */
+ {0, 0, 0, 0, 0, 0}, /* 11824 */
+ {0, 0, 0, 0, 0, 0}, /* 11825 */
+ {0, 0, 0, 0, 0, 0}, /* 11826 */
+ {0, 0, 0, 0, 0, 0}, /* 11827 */
+ {0, 0, 0, 0, 0, 0}, /* 11828 */
+ {0, 0, 0, 0, 0, 0}, /* 11829 */
+ {0, 0, 0, 0, 0, 0}, /* 11830 */
+ {0, 0, 0, 0, 0, 0}, /* 11831 */
+ {0, 0, 0, 0, 0, 0}, /* 11832 */
+ {0, 0, 0, 0, 0, 0}, /* 11833 */
+ {0, 0, 0, 0, 0, 0}, /* 11834 */
+ {0, 0, 0, 0, 0, 0}, /* 11835 */
+ {0, 0, 0, 0, 0, 0}, /* 11836 */
+ {0, 0, 0, 0, 0, 0}, /* 11837 */
+ {0, 0, 0, 0, 0, 0}, /* 11838 */
+ {0, 0, 0, 0, 0, 0}, /* 11839 */
+ {0, 0, 0, 0, 0, 0}, /* 11840 */
+ {0, 0, 0, 0, 0, 0}, /* 11841 */
+ {0, 0, 0, 0, 0, 0}, /* 11842 */
+ {0, 0, 0, 0, 0, 0}, /* 11843 */
+ {0, 0, 0, 0, 0, 0}, /* 11844 */
+ {0, 0, 0, 0, 0, 0}, /* 11845 */
+ {0, 0, 0, 0, 0, 0}, /* 11846 */
+ {0, 0, 0, 0, 0, 0}, /* 11847 */
+ {0, 0, 0, 0, 0, 0}, /* 11848 */
+ {0, 0, 0, 0, 0, 0}, /* 11849 */
+ {0, 0, 0, 0, 0, 0}, /* 11850 */
+ {0, 0, 0, 0, 0, 0}, /* 11851 */
+ {0, 0, 0, 0, 0, 0}, /* 11852 */
+ {0, 0, 0, 0, 0, 0}, /* 11853 */
+ {0, 0, 0, 0, 0, 0}, /* 11854 */
+ {0, 0, 0, 0, 0, 0}, /* 11855 */
+ {0, 0, 0, 0, 0, 0}, /* 11856 */
+ {0, 0, 0, 0, 0, 0}, /* 11857 */
+ {0, 0, 0, 0, 0, 0}, /* 11858 */
+ {0, 0, 0, 0, 0, 0}, /* 11859 */
+ {0, 0, 0, 0, 0, 0}, /* 11860 */
+ {0, 0, 0, 0, 0, 0}, /* 11861 */
+ {0, 0, 0, 0, 0, 0}, /* 11862 */
+ {0, 0, 0, 0, 0, 0}, /* 11863 */
+ {0, 0, 0, 0, 0, 0}, /* 11864 */
+ {0, 0, 0, 0, 0, 0}, /* 11865 */
+ {0, 0, 0, 0, 0, 0}, /* 11866 */
+ {0, 0, 0, 0, 0, 0}, /* 11867 */
+ {0, 0, 0, 0, 0, 0}, /* 11868 */
+ {0, 0, 0, 0, 0, 0}, /* 11869 */
+ {0, 0, 0, 0, 0, 0}, /* 11870 */
+ {0, 0, 0, 0, 0, 0}, /* 11871 */
+ {0, 0, 0, 0, 0, 0}, /* 11872 */
+ {0, 0, 0, 0, 0, 0}, /* 11873 */
+ {0, 0, 0, 0, 0, 0}, /* 11874 */
+ {0, 0, 0, 0, 0, 0}, /* 11875 */
+ {0, 0, 0, 0, 0, 0}, /* 11876 */
+ {0, 0, 0, 0, 0, 0}, /* 11877 */
+ {0, 0, 0, 0, 0, 0}, /* 11878 */
+ {0, 0, 0, 0, 0, 0}, /* 11879 */
+ {0, 0, 0, 0, 0, 0}, /* 11880 */
+ {0, 0, 0, 0, 0, 0}, /* 11881 */
+ {0, 0, 0, 0, 0, 0}, /* 11882 */
+ {0, 0, 0, 0, 0, 0}, /* 11883 */
+ {0, 0, 0, 0, 0, 0}, /* 11884 */
+ {0, 0, 0, 0, 0, 0}, /* 11885 */
+ {0, 0, 0, 0, 0, 0}, /* 11886 */
+ {0, 0, 0, 0, 0, 0}, /* 11887 */
+ {0, 0, 0, 0, 0, 0}, /* 11888 */
+ {0, 0, 0, 0, 0, 0}, /* 11889 */
+ {0, 0, 0, 0, 0, 0}, /* 11890 */
+ {0, 0, 0, 0, 0, 0}, /* 11891 */
+ {0, 0, 0, 0, 0, 0}, /* 11892 */
+ {0, 0, 0, 0, 0, 0}, /* 11893 */
+ {0, 0, 0, 0, 0, 0}, /* 11894 */
+ {0, 0, 0, 0, 0, 0}, /* 11895 */
+ {0, 0, 0, 0, 0, 0}, /* 11896 */
+ {0, 0, 0, 0, 0, 0}, /* 11897 */
+ {0, 0, 0, 0, 0, 0}, /* 11898 */
+ {0, 0, 0, 0, 0, 0}, /* 11899 */
+ {0, 0, 0, 0, 0, 0}, /* 11900 */
+ {0, 0, 0, 0, 0, 0}, /* 11901 */
+ {0, 0, 0, 0, 0, 0}, /* 11902 */
+ {0, 0, 0, 0, 0, 0}, /* 12065 */
+ {0, 0, 0, 0, 0, 0}, /* 12066 */
+ {0, 0, 0, 0, 0, 0}, /* 12067 */
+ {0, 0, 0, 0, 0, 0}, /* 12068 */
+ {0, 0, 0, 0, 0, 0}, /* 12069 */
+ {0, 0, 0, 0, 0, 0}, /* 12070 */
+ {0, 0, 0, 0, 0, 0}, /* 12071 */
+ {0, 0, 0, 0, 0, 0}, /* 12072 */
+ {0, 0, 0, 0, 0, 0}, /* 12073 */
+ {0, 0, 0, 0, 0, 0}, /* 12074 */
+ {0, 0, 0, 0, 0, 0}, /* 12075 */
+ {0, 0, 0, 0, 0, 0}, /* 12076 */
+ {0, 0, 0, 0, 0, 0}, /* 12077 */
+ {0, 0, 0, 0, 0, 0}, /* 12078 */
+ {0, 0, 0, 0, 0, 0}, /* 12079 */
+ {0, 0, 0, 0, 0, 0}, /* 12080 */
+ {0, 0, 0, 0, 0, 0}, /* 12081 */
+ {0, 0, 0, 0, 0, 0}, /* 12082 */
+ {0, 0, 0, 0, 0, 0}, /* 12083 */
+ {0, 0, 0, 0, 0, 0}, /* 12084 */
+ {0, 0, 0, 0, 0, 0}, /* 12085 */
+ {0, 0, 0, 0, 0, 0}, /* 12086 */
+ {0, 0, 0, 0, 0, 0}, /* 12087 */
+ {0, 0, 0, 0, 0, 0}, /* 12088 */
+ {0, 0, 0, 0, 0, 0}, /* 12089 */
+ {0, 0, 0, 0, 0, 0}, /* 12090 */
+ {0, 0, 0, 0, 0, 0}, /* 12091 */
+ {0, 0, 0, 0, 0, 0}, /* 12092 */
+ {0, 0, 0, 0, 0, 0}, /* 12093 */
+ {0, 0, 0, 0, 0, 0}, /* 12094 */
+ {0, 0, 0, 0, 0, 0}, /* 12095 */
+ {0, 0, 0, 0, 0, 0}, /* 12096 */
+ {0, 0, 0, 0, 0, 0}, /* 12097 */
+ {0, 0, 0, 0, 0, 0}, /* 12098 */
+ {0, 0, 0, 0, 0, 0}, /* 12099 */
+ {0, 0, 0, 0, 0, 0}, /* 12100 */
+ {0, 0, 0, 0, 0, 0}, /* 12101 */
+ {0, 0, 0, 0, 0, 0}, /* 12102 */
+ {0, 0, 0, 0, 0, 0}, /* 12103 */
+ {0, 0, 0, 0, 0, 0}, /* 12104 */
+ {0, 0, 0, 0, 0, 0}, /* 12105 */
+ {0, 0, 0, 0, 0, 0}, /* 12106 */
+ {0, 0, 0, 0, 0, 0}, /* 12107 */
+ {0, 0, 0, 0, 0, 0}, /* 12108 */
+ {0, 0, 0, 0, 0, 0}, /* 12109 */
+ {0, 0, 0, 0, 0, 0}, /* 12110 */
+ {0, 0, 0, 0, 0, 0}, /* 12111 */
+ {0, 0, 0, 0, 0, 0}, /* 12112 */
+ {0, 0, 0, 0, 0, 0}, /* 12113 */
+ {0, 0, 0, 0, 0, 0}, /* 12114 */
+ {0, 0, 0, 0, 0, 0}, /* 12115 */
+ {0, 0, 0, 0, 0, 0}, /* 12116 */
+ {0, 0, 0, 0, 0, 0}, /* 12117 */
+ {0, 0, 0, 0, 0, 0}, /* 12118 */
+ {0, 0, 0, 0, 0, 0}, /* 12119 */
+ {0, 0, 0, 0, 0, 0}, /* 12120 */
+ {0, 0, 0, 0, 0, 0}, /* 12121 */
+ {0, 0, 0, 0, 0, 0}, /* 12122 */
+ {0, 0, 0, 0, 0, 0}, /* 12123 */
+ {0, 0, 0, 0, 0, 0}, /* 12124 */
+ {0, 0, 0, 0, 0, 0}, /* 12125 */
+ {0, 0, 0, 0, 0, 0}, /* 12126 */
+ {0, 0, 0, 0, 0, 0}, /* 12127 */
+ {0, 0, 0, 0, 0, 0}, /* 12128 */
+ {0, 0, 0, 0, 0, 0}, /* 12129 */
+ {0, 0, 0, 0, 0, 0}, /* 12130 */
+ {0, 0, 0, 0, 0, 0}, /* 12131 */
+ {0, 0, 0, 0, 0, 0}, /* 12132 */
+ {0, 0, 0, 0, 0, 0}, /* 12133 */
+ {0, 0, 0, 0, 0, 0}, /* 12134 */
+ {0, 0, 0, 0, 0, 0}, /* 12135 */
+ {0, 0, 0, 0, 0, 0}, /* 12136 */
+ {0, 0, 0, 0, 0, 0}, /* 12137 */
+ {0, 0, 0, 0, 0, 0}, /* 12138 */
+ {0, 0, 0, 0, 0, 0}, /* 12139 */
+ {0, 0, 0, 0, 0, 0}, /* 12140 */
+ {0, 0, 0, 0, 0, 0}, /* 12141 */
+ {0, 0, 0, 0, 0, 0}, /* 12142 */
+ {0, 0, 0, 0, 0, 0}, /* 12143 */
+ {0, 0, 0, 0, 0, 0}, /* 12144 */
+ {0, 0, 0, 0, 0, 0}, /* 12145 */
+ {0, 0, 0, 0, 0, 0}, /* 12146 */
+ {0, 0, 0, 0, 0, 0}, /* 12147 */
+ {0, 0, 0, 0, 0, 0}, /* 12148 */
+ {0, 0, 0, 0, 0, 0}, /* 12149 */
+ {0, 0, 0, 0, 0, 0}, /* 12150 */
+ {0, 0, 0, 0, 0, 0}, /* 12151 */
+ {0, 0, 0, 0, 0, 0}, /* 12152 */
+ {0, 0, 0, 0, 0, 0}, /* 12153 */
+ {0, 0, 0, 0, 0, 0}, /* 12154 */
+ {0, 0, 0, 0, 0, 0}, /* 12155 */
+ {0, 0, 0, 0, 0, 0}, /* 12156 */
+ {0, 0, 0, 0, 0, 0}, /* 12157 */
+ {0, 0, 0, 0, 0, 0}, /* 12158 */
+ {1, 13, 14, 11, 1, 0}, /* 12321 */
+ {1, 14, 14, 11, 1, 0}, /* 12322 */
+ {1, 14, 14, 12, 2, 0}, /* 12323 */
+ {2, 14, 14, 11, 2, 0}, /* 12324 */
+ {1, 14, 14, 12, 2, 0}, /* 12325 */
+ {1, 14, 14, 12, 2, 0}, /* 12326 */
+ {1, 14, 14, 12, 2, 0}, /* 12327 */
+ {1, 14, 14, 12, 2, 0}, /* 12328 */
+ {1, 14, 14, 12, 2, 0}, /* 12329 */
+ {1, 14, 14, 12, 2, 0}, /* 12330 */
+ {1, 14, 14, 12, 2, 0}, /* 12331 */
+ {1, 14, 14, 12, 2, 0}, /* 12332 */
+ {1, 14, 14, 11, 2, 0}, /* 12333 */
+ {1, 14, 14, 12, 2, 0}, /* 12334 */
+ {1, 14, 14, 12, 2, 0}, /* 12335 */
+ {1, 14, 14, 12, 2, 0}, /* 12336 */
+ {1, 14, 14, 12, 2, 0}, /* 12337 */
+ {1, 14, 14, 12, 2, 0}, /* 12338 */
+ {1, 14, 14, 12, 2, 0}, /* 12339 */
+ {1, 14, 14, 12, 2, 0}, /* 12340 */
+ {1, 14, 14, 11, 1, 0}, /* 12341 */
+ {1, 14, 14, 12, 2, 0}, /* 12342 */
+ {1, 14, 14, 12, 2, 0}, /* 12343 */
+ {1, 14, 14, 12, 2, 0}, /* 12344 */
+ {1, 14, 14, 12, 2, 0}, /* 12345 */
+ {1, 14, 14, 12, 2, 0}, /* 12346 */
+ {1, 14, 14, 12, 2, 0}, /* 12347 */
+ {1, 13, 14, 12, 2, 0}, /* 12348 */
+ {1, 14, 14, 12, 2, 0}, /* 12349 */
+ {1, 14, 14, 12, 2, 0}, /* 12350 */
+ {1, 14, 14, 12, 2, 0}, /* 12351 */
+ {1, 14, 14, 11, 2, 0}, /* 12352 */
+ {1, 14, 14, 12, 2, 0}, /* 12353 */
+ {1, 14, 14, 12, 2, 0}, /* 12354 */
+ {1, 14, 14, 12, 2, 0}, /* 12355 */
+ {1, 14, 14, 12, 2, 0}, /* 12356 */
+ {1, 14, 14, 12, 2, 0}, /* 12357 */
+ {1, 14, 14, 12, 2, 0}, /* 12358 */
+ {2, 13, 14, 11, 2, 0}, /* 12359 */
+ {1, 14, 14, 12, 2, 0}, /* 12360 */
+ {1, 14, 14, 12, 2, 0}, /* 12361 */
+ {1, 14, 14, 12, 2, 0}, /* 12362 */
+ {1, 14, 14, 12, 2, 0}, /* 12363 */
+ {1, 14, 14, 12, 2, 0}, /* 12364 */
+ {1, 14, 14, 12, 2, 0}, /* 12365 */
+ {1, 14, 14, 12, 2, 0}, /* 12366 */
+ {2, 13, 14, 11, 2, 0}, /* 12367 */
+ {1, 14, 14, 12, 2, 0}, /* 12368 */
+ {1, 14, 14, 12, 2, 0}, /* 12369 */
+ {1, 14, 14, 12, 2, 0}, /* 12370 */
+ {1, 14, 14, 12, 2, 0}, /* 12371 */
+ {1, 14, 14, 12, 2, 0}, /* 12372 */
+ {1, 14, 14, 12, 2, 0}, /* 12373 */
+ {1, 14, 14, 12, 2, 0}, /* 12374 */
+ {1, 13, 14, 11, 2, 0}, /* 12375 */
+ {1, 14, 14, 12, 2, 0}, /* 12376 */
+ {1, 14, 14, 12, 2, 0}, /* 12377 */
+ {1, 14, 14, 11, 2, 0}, /* 12378 */
+ {1, 14, 14, 11, 2, 0}, /* 12379 */
+ {1, 14, 14, 12, 2, 0}, /* 12380 */
+ {1, 14, 14, 12, 2, 0}, /* 12381 */
+ {1, 14, 14, 12, 2, 0}, /* 12382 */
+ {2, 13, 14, 11, 2, 0}, /* 12383 */
+ {1, 14, 14, 12, 2, 0}, /* 12384 */
+ {1, 14, 14, 12, 2, 0}, /* 12385 */
+ {1, 14, 14, 11, 2, 0}, /* 12386 */
+ {1, 14, 14, 12, 2, 0}, /* 12387 */
+ {1, 14, 14, 12, 2, 0}, /* 12388 */
+ {2, 14, 14, 11, 2, 0}, /* 12389 */
+ {1, 14, 14, 12, 2, 0}, /* 12390 */
+ {1, 14, 14, 12, 2, 0}, /* 12391 */
+ {1, 14, 14, 12, 2, 0}, /* 12392 */
+ {1, 14, 14, 12, 2, 0}, /* 12393 */
+ {1, 14, 14, 12, 2, 0}, /* 12394 */
+ {1, 14, 14, 12, 2, 0}, /* 12395 */
+ {1, 14, 14, 6, -5, 0}, /* 12396 */
+ {1, 14, 14, 12, 2, 0}, /* 12397 */
+ {1, 14, 14, 12, 2, 0}, /* 12398 */
+ {1, 14, 14, 12, 2, 0}, /* 12399 */
+ {1, 14, 14, 12, 2, 0}, /* 12400 */
+ {1, 14, 14, 12, 2, 0}, /* 12401 */
+ {1, 14, 14, 12, 2, 0}, /* 12402 */
+ {1, 13, 14, 12, 2, 0}, /* 12403 */
+ {1, 14, 14, 12, 2, 0}, /* 12404 */
+ {2, 13, 14, 12, 2, 0}, /* 12405 */
+ {1, 13, 14, 11, 2, 0}, /* 12406 */
+ {2, 13, 14, 11, 2, 0}, /* 12407 */
+ {2, 13, 14, 11, 2, 0}, /* 12408 */
+ {1, 13, 14, 12, 2, 0}, /* 12409 */
+ {1, 12, 14, 12, 2, 0}, /* 12410 */
+ {1, 14, 14, 12, 2, 0}, /* 12411 */
+ {1, 14, 14, 12, 2, 0}, /* 12412 */
+ {1, 14, 14, 12, 2, 0}, /* 12413 */
+ {1, 14, 14, 12, 2, 0}, /* 12414 */
+};
+static XFontProp props[] = {
+ {XA_COPYRIGHT, 0},
+ {XA_RESOLUTION, 75},
+};
+
+char *xtfont2cpright = "Public domain font. Share and enjoy.";
+
+XFontStruct xtfont2 = {
+ (XExtData*)0,
+ (Font)0,
+ FontLeftToRight, /* direction */
+ 33, /* min_byte2 */
+ 126, /* max_byte2 */
+ 33, /* min_byte1 */
+ 48, /* max_byte1 */
+ 0, /* all chars exist */
+ 0, /* default char */
+ 2, /* n_properties */
+ props,
+ {0, 0, 14, -1, -11, 0},
+ {10, 14, 14, 12, 2, 0},
+ perchar,
+ 12, /* font ascent */
+ 2, /* font descent */
+};
diff --git a/xc/test/xsuite/xtest/fonts/xtfont3.bdf b/xc/test/xsuite/xtest/fonts/xtfont3.bdf
new file mode 100644
index 000000000..8a0790793
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont3.bdf
@@ -0,0 +1,1899 @@
+STARTFONT 2.1
+COMMENT xtfont3 - font with chars 1-126
+COMMENT Based on t7 font tf_var75:
+COMMENT Created by onxtobdf
+COMMENT
+COMMENT STARTCHAR NAMES were off by 1 corrected July 17th,87
+COMMENT
+COMMENT six characters with encoding:09,10,12,13,26&27 (decimal)
+COMMENT and ascii values:11,12,14,15,32&33 (octal)
+COMMENT had their BW (glyph width) changed from 1 to 0
+COMMENT This was done to be consistent DWIDTH 0.
+COMMENT corrected Aug 10th, 87
+COMMENT
+FONT xtfont3
+SIZE 14 78 78
+FONTBOUNDINGBOX 16 14 0 -3
+STARTPROPERTIES 6
+COPYRIGHT "These glyphs are unencumbered"
+FONT_ASCENT 11
+FONT_DESCENT 3
+DEFAULT_CHAR 2
+RESOLUTION 78
+UNDERLINE_POSITION 3
+ENDPROPERTIES
+CHARS 126
+STARTCHAR ascii001
+ENCODING 1
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 3 1 8
+BITMAP
+c6
+6c
+38
+ENDCHAR
+STARTCHAR ascii002
+ENCODING 2
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 6 10 1 0
+BITMAP
+30
+30
+00
+30
+30
+60
+c0
+cc
+cc
+78
+ENDCHAR
+STARTCHAR ascii003
+ENCODING 3
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 -3
+BITMAP
+7c
+c6
+c0
+c0
+c6
+c6
+7c
+00
+18
+30
+ENDCHAR
+STARTCHAR ascii004
+ENCODING 4
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 6 2 1 8
+BITMAP
+cc
+cc
+ENDCHAR
+STARTCHAR ascii005
+ENCODING 5
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 4 3 3 8
+BITMAP
+c0
+60
+30
+ENDCHAR
+STARTCHAR ascii006
+ENCODING 6
+SWIDTH 714 0
+DWIDTH 10 0
+BBX 10 10 0 0
+BITMAP
+39c0
+6300
+6300
+ffc0
+6300
+6300
+6300
+6300
+6300
+6300
+ENDCHAR
+STARTCHAR ascii007
+ENCODING 7
+SWIDTH 285 0
+DWIDTH 4 0
+BBX 3 5 0 5
+BITMAP
+60
+c0
+c0
+e0
+e0
+ENDCHAR
+STARTCHAR ascii0010
+ENCODING 8
+SWIDTH 357 0
+DWIDTH 5 0
+BBX 2 10 1 0
+BITMAP
+c0
+c0
+00
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR ascii011
+ENCODING 9
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii012
+ENCODING 10
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii013
+ENCODING 11
+SWIDTH 428 0
+DWIDTH 6 0
+BBX 4 3 2 8
+BITMAP
+30
+60
+c0
+ENDCHAR
+STARTCHAR ascii014
+ENCODING 12
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii015
+ENCODING 13
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii016
+ENCODING 14
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 5 2 2 8
+BITMAP
+f8
+f8
+ENDCHAR
+STARTCHAR ascii017
+ENCODING 15
+SWIDTH 1142 0
+DWIDTH 16 0
+BBX 0 0 16 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii020
+ENCODING 16
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 2 1 8
+BITMAP
+76
+dc
+ENDCHAR
+STARTCHAR ascii021
+ENCODING 17
+SWIDTH 1000 0
+DWIDTH 14 0
+BBX 13 10 0 0
+BITMAP
+39d8
+6318
+6300
+ffd8
+6318
+6318
+6318
+6318
+6318
+6318
+ENDCHAR
+STARTCHAR ascii022
+ENCODING 18
+SWIDTH 1000 0
+DWIDTH 14 0
+BBX 13 10 0 0
+BITMAP
+39d8
+6318
+6318
+ffd8
+6318
+6318
+6318
+6318
+6318
+6318
+ENDCHAR
+STARTCHAR ascii023
+ENCODING 19
+SWIDTH 1142 0
+DWIDTH 16 0
+BBX 16 2 0 3
+BITMAP
+ffff
+ffff
+ENDCHAR
+STARTCHAR ascii024
+ENCODING 20
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+3b
+63
+60
+fb
+63
+63
+63
+63
+63
+63
+ENDCHAR
+STARTCHAR ascii025
+ENCODING 21
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+3b
+63
+63
+fb
+63
+63
+63
+63
+63
+63
+ENDCHAR
+STARTCHAR ascii026
+ENCODING 22
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 8 2 0 3
+BITMAP
+ff
+ff
+ENDCHAR
+STARTCHAR ascii027
+ENCODING 23
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 6 3 1 8
+BITMAP
+84
+fc
+78
+ENDCHAR
+STARTCHAR ascii030
+ENCODING 24
+SWIDTH 1142 0
+DWIDTH 16 0
+BBX 8 2 4 3
+BITMAP
+ff
+ff
+ENDCHAR
+STARTCHAR ascii031
+ENCODING 25
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 0 0 9 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii032
+ENCODING 26
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii033
+ENCODING 27
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii034
+ENCODING 28
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 0 0 8 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii035
+ENCODING 29
+SWIDTH 428 0
+DWIDTH 6 0
+BBX 2 2 4 -3
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR ascii036
+ENCODING 30
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 2 1 8
+BITMAP
+76
+dc
+ENDCHAR
+STARTCHAR ascii037
+ENCODING 31
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 5 4 2 7
+BITMAP
+70
+d8
+d8
+70
+ENDCHAR
+STARTCHAR space
+ENCODING 32
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 0 0 7 10
+BITMAP
+ENDCHAR
+STARTCHAR exclam
+ENCODING 33
+SWIDTH 285 0
+DWIDTH 4 0
+BBX 2 10 1 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+00
+c0
+c0
+ENDCHAR
+STARTCHAR quotedbl
+ENCODING 34
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 5 4 1 6
+BITMAP
+d8
+d8
+d8
+d8
+ENDCHAR
+STARTCHAR numbersign
+ENCODING 35
+SWIDTH 857 0
+DWIDTH 12 0
+BBX 10 10 1 0
+BITMAP
+0cc0
+0cc0
+1980
+7fc0
+3300
+3300
+ff80
+6600
+cc00
+cc00
+ENDCHAR
+STARTCHAR dollar
+ENCODING 36
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 7 12 1 -1
+BITMAP
+10
+7c
+d6
+d6
+d0
+f8
+3c
+16
+d6
+d6
+7c
+10
+ENDCHAR
+STARTCHAR percent
+ENCODING 37
+SWIDTH 1000 0
+DWIDTH 14 0
+BBX 12 10 1 0
+BITMAP
+7180
+d980
+db00
+7300
+0600
+0600
+0ce0
+0db0
+19b0
+18e0
+ENDCHAR
+STARTCHAR ampersand
+ENCODING 38
+SWIDTH 785 0
+DWIDTH 11 0
+BBX 9 10 1 0
+BITMAP
+3800
+6c00
+6c00
+2800
+3800
+7d80
+c700
+c600
+cf00
+7b80
+ENDCHAR
+STARTCHAR quoteright
+ENCODING 39
+SWIDTH 285 0
+DWIDTH 4 0
+BBX 3 5 0 5
+BITMAP
+e0
+e0
+60
+60
+c0
+ENDCHAR
+STARTCHAR parenleft
+ENCODING 40
+SWIDTH 428 0
+DWIDTH 6 0
+BBX 4 12 1 -2
+BITMAP
+30
+60
+60
+c0
+c0
+c0
+c0
+c0
+c0
+60
+60
+30
+ENDCHAR
+STARTCHAR parenright
+ENCODING 41
+SWIDTH 428 0
+DWIDTH 6 0
+BBX 4 12 1 -2
+BITMAP
+c0
+60
+60
+30
+30
+30
+30
+30
+30
+60
+60
+c0
+ENDCHAR
+STARTCHAR asterisk
+ENCODING 42
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 5 6 1 5
+BITMAP
+20
+a8
+70
+70
+a8
+20
+ENDCHAR
+STARTCHAR plus
+ENCODING 43
+SWIDTH 714 0
+DWIDTH 10 0
+BBX 8 8 1 0
+BITMAP
+18
+18
+18
+ff
+ff
+18
+18
+18
+ENDCHAR
+STARTCHAR comma
+ENCODING 44
+SWIDTH 285 0
+DWIDTH 4 0
+BBX 2 5 1 -3
+BITMAP
+c0
+c0
+40
+40
+80
+ENDCHAR
+STARTCHAR hyphen
+ENCODING 45
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 6 2 2 3
+BITMAP
+fc
+fc
+ENDCHAR
+STARTCHAR period
+ENCODING 46
+SWIDTH 285 0
+DWIDTH 4 0
+BBX 2 2 1 0
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR slash
+ENCODING 47
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 6 10 1 0
+BITMAP
+0c
+0c
+18
+18
+30
+30
+60
+60
+c0
+c0
+ENDCHAR
+STARTCHAR zero
+ENCODING 48
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 7 10 1 0
+BITMAP
+38
+6c
+c6
+c6
+c6
+c6
+c6
+c6
+6c
+38
+ENDCHAR
+STARTCHAR one
+ENCODING 49
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 5 10 2 0
+BITMAP
+18
+38
+f8
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR two
+ENCODING 50
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 7 10 1 0
+BITMAP
+7c
+c6
+c6
+06
+0c
+18
+30
+60
+c0
+fe
+ENDCHAR
+STARTCHAR three
+ENCODING 51
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 7 10 1 0
+BITMAP
+7c
+c6
+c6
+06
+1c
+06
+06
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR four
+ENCODING 52
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 7 10 1 0
+BITMAP
+0c
+1c
+3c
+2c
+6c
+cc
+cc
+fe
+0c
+0c
+ENDCHAR
+STARTCHAR five
+ENCODING 53
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 7 10 1 0
+BITMAP
+7e
+60
+60
+fc
+c6
+c6
+06
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR six
+ENCODING 54
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 7 10 1 0
+BITMAP
+3c
+66
+c6
+c0
+fc
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR seven
+ENCODING 55
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 7 10 1 0
+BITMAP
+fe
+06
+0c
+18
+18
+30
+30
+60
+60
+60
+ENDCHAR
+STARTCHAR eight
+ENCODING 56
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 7 10 1 0
+BITMAP
+7c
+c6
+c6
+c6
+7c
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR nine
+ENCODING 57
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 7 10 1 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+7e
+06
+c6
+cc
+78
+ENDCHAR
+STARTCHAR colon
+ENCODING 58
+SWIDTH 285 0
+DWIDTH 4 0
+BBX 2 7 1 0
+BITMAP
+c0
+c0
+00
+00
+00
+c0
+c0
+ENDCHAR
+STARTCHAR semicolon
+ENCODING 59
+SWIDTH 285 0
+DWIDTH 4 0
+BBX 2 10 1 -3
+BITMAP
+c0
+c0
+00
+00
+00
+c0
+c0
+40
+40
+80
+ENDCHAR
+STARTCHAR less
+ENCODING 60
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 6 10 1 0
+BITMAP
+0c
+18
+30
+60
+c0
+c0
+60
+30
+18
+0c
+ENDCHAR
+STARTCHAR equal
+ENCODING 61
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 5 5 2 1
+BITMAP
+f8
+f8
+00
+f8
+f8
+ENDCHAR
+STARTCHAR greater
+ENCODING 62
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 6 10 1 0
+BITMAP
+c0
+60
+30
+18
+0c
+0c
+18
+30
+60
+c0
+ENDCHAR
+STARTCHAR question
+ENCODING 63
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 6 10 1 0
+BITMAP
+78
+cc
+cc
+0c
+18
+30
+30
+00
+30
+30
+ENDCHAR
+STARTCHAR at
+ENCODING 64
+SWIDTH 1000 0
+DWIDTH 14 0
+BBX 12 10 1 0
+BITMAP
+3fc0
+6060
+cf30
+d9b0
+d9b0
+d9b0
+d9a0
+cec0
+6010
+3fe0
+ENDCHAR
+STARTCHAR A
+ENCODING 65
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+18
+18
+3c
+3c
+24
+66
+7e
+66
+c3
+c3
+ENDCHAR
+STARTCHAR B
+ENCODING 66
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 0
+BITMAP
+f8
+cc
+cc
+cc
+fc
+c6
+c6
+c6
+c6
+fc
+ENDCHAR
+STARTCHAR C
+ENCODING 67
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+3e
+63
+c3
+c0
+c0
+c0
+c3
+c3
+63
+3e
+ENDCHAR
+STARTCHAR D
+ENCODING 68
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+fc
+c6
+c3
+c3
+c3
+c3
+c3
+c3
+c6
+fc
+ENDCHAR
+STARTCHAR E
+ENCODING 69
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 0
+BITMAP
+fe
+c0
+c0
+c0
+fc
+c0
+c0
+c0
+c0
+fe
+ENDCHAR
+STARTCHAR F
+ENCODING 70
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 0
+BITMAP
+fe
+c0
+c0
+c0
+fc
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR G
+ENCODING 71
+SWIDTH 714 0
+DWIDTH 10 0
+BBX 9 10 0 0
+BITMAP
+3f00
+6180
+c180
+c000
+c000
+c780
+c180
+c180
+6380
+3d80
+ENDCHAR
+STARTCHAR H
+ENCODING 72
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+c3
+c3
+c3
+c3
+ff
+c3
+c3
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR I
+ENCODING 73
+SWIDTH 214 0
+DWIDTH 3 0
+BBX 2 10 0 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR J
+ENCODING 74
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 6 10 0 0
+BITMAP
+0c
+0c
+0c
+0c
+0c
+0c
+0c
+cc
+cc
+78
+ENDCHAR
+STARTCHAR K
+ENCODING 75
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+c6
+cc
+d8
+f0
+e0
+f0
+d8
+cc
+c6
+c3
+ENDCHAR
+STARTCHAR L
+ENCODING 76
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 6 10 0 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+fc
+ENDCHAR
+STARTCHAR M
+ENCODING 77
+SWIDTH 857 0
+DWIDTH 12 0
+BBX 11 10 0 0
+BITMAP
+e0e0
+e0e0
+f1e0
+f1e0
+db60
+db60
+db60
+ce60
+ce60
+c460
+ENDCHAR
+STARTCHAR N
+ENCODING 78
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+c3
+e3
+e3
+f3
+f3
+db
+db
+cf
+cf
+c7
+ENDCHAR
+STARTCHAR O
+ENCODING 79
+SWIDTH 714 0
+DWIDTH 10 0
+BBX 9 10 0 0
+BITMAP
+3e00
+6300
+c180
+c180
+c180
+c180
+c180
+c180
+6300
+3e00
+ENDCHAR
+STARTCHAR P
+ENCODING 80
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 0
+BITMAP
+fc
+c6
+c6
+c6
+c6
+fc
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR Q
+ENCODING 81
+SWIDTH 714 0
+DWIDTH 10 0
+BBX 9 11 0 -1
+BITMAP
+3e00
+6300
+c180
+c180
+c180
+c180
+c180
+cd80
+6700
+3f00
+0180
+ENDCHAR
+STARTCHAR R
+ENCODING 82
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+fe
+c3
+c3
+c3
+fe
+c3
+c3
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR S
+ENCODING 83
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 0
+BITMAP
+7c
+c6
+c6
+f0
+7c
+1e
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR T
+ENCODING 84
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+ff
+18
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR U
+ENCODING 85
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+c3
+c3
+c3
+c3
+c3
+c3
+c3
+c3
+66
+3c
+ENDCHAR
+STARTCHAR V
+ENCODING 86
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+c3
+c3
+c3
+66
+66
+66
+24
+3c
+18
+18
+ENDCHAR
+STARTCHAR W
+ENCODING 87
+SWIDTH 1000 0
+DWIDTH 14 0
+BBX 13 10 0 0
+BITMAP
+c218
+c218
+6730
+6730
+6730
+2fa0
+3de0
+38e0
+18c0
+18c0
+ENDCHAR
+STARTCHAR X
+ENCODING 88
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+c3
+c3
+66
+3c
+18
+18
+3c
+66
+c3
+c3
+ENDCHAR
+STARTCHAR Y
+ENCODING 89
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+c3
+c3
+66
+66
+3c
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR Z
+ENCODING 90
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 10 0 0
+BITMAP
+ff
+03
+06
+0c
+18
+18
+30
+60
+c0
+ff
+ENDCHAR
+STARTCHAR braketleft
+ENCODING 91
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 5 13 1 -3
+BITMAP
+f8
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+f8
+ENDCHAR
+STARTCHAR backslash
+ENCODING 92
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 6 10 1 0
+BITMAP
+c0
+c0
+60
+60
+30
+30
+18
+18
+0c
+0c
+ENDCHAR
+STARTCHAR bracketright
+ENCODING 93
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 5 13 1 -3
+BITMAP
+f8
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+f8
+ENDCHAR
+STARTCHAR asciicircum
+ENCODING 94
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 6 8 1 1
+BITMAP
+30
+78
+fc
+b4
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR underscore
+ENCODING 95
+SWIDTH 714 0
+DWIDTH 10 0
+BBX 8 6 1 2
+BITMAP
+30
+60
+ff
+ff
+60
+30
+ENDCHAR
+STARTCHAR quoteleft
+ENCODING 96
+SWIDTH 285 0
+DWIDTH 4 0
+BBX 3 5 0 5
+BITMAP
+60
+c0
+c0
+e0
+e0
+ENDCHAR
+STARTCHAR a
+ENCODING 97
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 7 0 0
+BITMAP
+78
+cc
+0c
+7c
+cc
+cc
+76
+ENDCHAR
+STARTCHAR b
+ENCODING 98
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 0
+BITMAP
+c0
+c0
+c0
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+ENDCHAR
+STARTCHAR c
+ENCODING 99
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 7 0 0
+BITMAP
+7c
+c6
+c0
+c0
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR d
+ENCODING 100
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 0
+BITMAP
+06
+06
+06
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+ENDCHAR
+STARTCHAR e
+ENCODING 101
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 7 0 0
+BITMAP
+7c
+c6
+c6
+fe
+c0
+c6
+7c
+ENDCHAR
+STARTCHAR f
+ENCODING 102
+SWIDTH 428 0
+DWIDTH 6 0
+BBX 5 10 0 0
+BITMAP
+38
+60
+60
+f8
+60
+60
+60
+60
+60
+60
+ENDCHAR
+STARTCHAR g
+ENCODING 103
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 -3
+BITMAP
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+06
+c6
+7c
+ENDCHAR
+STARTCHAR h
+ENCODING 104
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 0
+BITMAP
+c0
+c0
+c0
+fc
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR i
+ENCODING 105
+SWIDTH 214 0
+DWIDTH 3 0
+BBX 2 10 0 0
+BITMAP
+c0
+c0
+00
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR j
+ENCODING 106
+SWIDTH 357 0
+DWIDTH 5 0
+BBX 4 12 0 -2
+BITMAP
+30
+30
+00
+30
+30
+30
+30
+30
+30
+30
+30
+e0
+ENDCHAR
+STARTCHAR k
+ENCODING 107
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 0
+BITMAP
+c0
+c0
+c0
+cc
+d8
+f0
+f0
+d8
+cc
+c6
+ENDCHAR
+STARTCHAR l
+ENCODING 108
+SWIDTH 214 0
+DWIDTH 3 0
+BBX 2 10 0 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR m
+ENCODING 109
+SWIDTH 785 0
+DWIDTH 11 0
+BBX 10 7 0 0
+BITMAP
+fb80
+ccc0
+ccc0
+ccc0
+ccc0
+ccc0
+ccc0
+ENDCHAR
+STARTCHAR n
+ENCODING 110
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 7 0 0
+BITMAP
+fc
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR o
+ENCODING 111
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 7 0 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR p
+ENCODING 112
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 -3
+BITMAP
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR q
+ENCODING 113
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 -3
+BITMAP
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+06
+06
+06
+ENDCHAR
+STARTCHAR r
+ENCODING 114
+SWIDTH 428 0
+DWIDTH 6 0
+BBX 5 7 0 0
+BITMAP
+f8
+d8
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR s
+ENCODING 115
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 6 7 0 0
+BITMAP
+78
+cc
+e0
+78
+1c
+cc
+78
+ENDCHAR
+STARTCHAR t
+ENCODING 116
+SWIDTH 428 0
+DWIDTH 6 0
+BBX 5 9 0 0
+BITMAP
+60
+60
+f8
+60
+60
+60
+60
+60
+38
+ENDCHAR
+STARTCHAR u
+ENCODING 117
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 7 0 0
+BITMAP
+c6
+c6
+c6
+c6
+c6
+c6
+7e
+ENDCHAR
+STARTCHAR v
+ENCODING 118
+SWIDTH 642 0
+DWIDTH 9 0
+BBX 8 7 0 0
+BITMAP
+c3
+c3
+66
+66
+24
+3c
+18
+ENDCHAR
+STARTCHAR w
+ENCODING 119
+SWIDTH 857 0
+DWIDTH 12 0
+BBX 11 7 0 0
+BITMAP
+c460
+c460
+6ec0
+6ec0
+7bc0
+3180
+3180
+ENDCHAR
+STARTCHAR x
+ENCODING 120
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 6 7 0 0
+BITMAP
+cc
+cc
+78
+30
+78
+cc
+cc
+ENDCHAR
+STARTCHAR y
+ENCODING 121
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 7 10 0 -3
+BITMAP
+c6
+c6
+66
+6c
+2c
+3c
+18
+18
+d8
+70
+ENDCHAR
+STARTCHAR z
+ENCODING 122
+SWIDTH 500 0
+DWIDTH 7 0
+BBX 6 7 0 0
+BITMAP
+fc
+0c
+18
+30
+60
+c0
+fc
+ENDCHAR
+STARTCHAR braceleft
+ENCODING 123
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 6 13 1 -3
+BITMAP
+1c
+30
+30
+30
+30
+30
+e0
+30
+30
+30
+30
+30
+1c
+ENDCHAR
+STARTCHAR bar
+ENCODING 124
+SWIDTH 357 0
+DWIDTH 5 0
+BBX 2 13 2 -3
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR braceright
+ENCODING 125
+SWIDTH 571 0
+DWIDTH 8 0
+BBX 6 13 1 -3
+BITMAP
+e0
+30
+30
+30
+30
+30
+1c
+30
+30
+30
+30
+30
+e0
+ENDCHAR
+STARTCHAR tilda
+ENCODING 126
+SWIDTH 714 0
+DWIDTH 10 0
+BBX 8 3 1 3
+BITMAP
+33
+7e
+cc
+ENDCHAR
+ENDFONT
+COMMENT DEC/CMS REPLACEMENT HISTORY, Element VARIABLE.DECW$BDF
+COMMENT *1 30-DEC-1987 13:34:31 GEORGE "Initial Entry"
+COMMENT DEC/CMS REPLACEMENT HISTORY, Element VARIABLE.DECW$BDF
+COMMENT DEC/CMS REPLACEMENT HISTORY, Element VARIABLE_100DPI.DECW$BDF
+COMMENT *3 5-APR-1988 22:39:02 BARRIE "update for new fonts Lubalin, Souvenir, AvantGarde & 8 pt sizes"
+COMMENT *2 21-MAR-1988 10:13:11 BARRIE "changed Font Name to Variable_100dpi"
+COMMENT *1 15-MAR-1988 19:33:53 ORGOVAN "Initial Entry"
+COMMENT DEC/CMS REPLACEMENT HISTORY, Element VARIABLE_100DPI.DECW$BDF
diff --git a/xc/test/xsuite/xtest/fonts/xtfont3.c b/xc/test/xsuite/xtest/fonts/xtfont3.c
new file mode 100644
index 000000000..4d8a82d49
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont3.c
@@ -0,0 +1,175 @@
+/* $XConsortium$ */
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ */
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "Xatom.h"
+
+static XCharStruct perchar[] = {
+ {1, 8, 8, 11, -8, 0}, /* 1 */
+ {1, 7, 8, 10, 0, 0}, /* 2 */
+ {0, 7, 8, 7, 3, 0}, /* 3 */
+ {1, 7, 7, 10, -8, 0}, /* 4 */
+ {3, 7, 7, 11, -8, 0}, /* 5 */
+ {0, 10, 10, 10, 0, 0}, /* 6 */
+ {0, 3, 4, 10, -5, 0}, /* 7 */
+ {1, 3, 5, 10, 0, 0}, /* 8 */
+ {0, 0, 0, 10, -10, 0}, /* 9 */
+ {0, 0, 0, 10, -10, 0}, /* 10 */
+ {2, 6, 6, 11, -8, 0}, /* 11 */
+ {0, 0, 0, 10, -10, 0}, /* 12 */
+ {0, 0, 0, 10, -10, 0}, /* 13 */
+ {2, 7, 7, 10, -8, 0}, /* 14 */
+ {16, 16, 16, 10, -10, 0}, /* 15 */
+ {1, 8, 8, 10, -8, 0}, /* 16 */
+ {0, 13, 14, 10, 0, 0}, /* 17 */
+ {0, 13, 14, 10, 0, 0}, /* 18 */
+ {0, 16, 16, 5, -3, 0}, /* 19 */
+ {0, 8, 9, 10, 0, 0}, /* 20 */
+ {0, 8, 9, 10, 0, 0}, /* 21 */
+ {0, 8, 8, 5, -3, 0}, /* 22 */
+ {1, 7, 7, 11, -8, 0}, /* 23 */
+ {4, 12, 16, 5, -3, 0}, /* 24 */
+ {9, 9, 9, 10, -10, 0}, /* 25 */
+ {0, 0, 0, 10, -10, 0}, /* 26 */
+ {0, 0, 0, 10, -10, 0}, /* 27 */
+ {8, 8, 8, 10, -10, 0}, /* 28 */
+ {4, 6, 6, -1, 3, 0}, /* 29 */
+ {1, 8, 8, 10, -8, 0}, /* 30 */
+ {2, 7, 7, 11, -7, 0}, /* 31 */
+ {7, 7, 7, 10, -10, 0}, /* 32 */
+ {1, 3, 4, 10, 0, 0}, /* 33 */
+ {1, 6, 7, 10, -6, 0}, /* 34 */
+ {1, 11, 12, 10, 0, 0}, /* 35 */
+ {1, 8, 9, 11, 1, 0}, /* 36 */
+ {1, 13, 14, 10, 0, 0}, /* 37 */
+ {1, 10, 11, 10, 0, 0}, /* 38 */
+ {0, 3, 4, 10, -5, 0}, /* 39 */
+ {1, 5, 6, 10, 2, 0}, /* 40 */
+ {1, 5, 6, 10, 2, 0}, /* 41 */
+ {1, 6, 7, 11, -5, 0}, /* 42 */
+ {1, 9, 10, 8, 0, 0}, /* 43 */
+ {1, 3, 4, 2, 3, 0}, /* 44 */
+ {2, 8, 9, 5, -3, 0}, /* 45 */
+ {1, 3, 4, 2, 0, 0}, /* 46 */
+ {1, 7, 8, 10, 0, 0}, /* 47 */
+ {1, 8, 9, 10, 0, 0}, /* 48 */
+ {2, 7, 9, 10, 0, 0}, /* 49 */
+ {1, 8, 9, 10, 0, 0}, /* 50 */
+ {1, 8, 9, 10, 0, 0}, /* 51 */
+ {1, 8, 9, 10, 0, 0}, /* 52 */
+ {1, 8, 9, 10, 0, 0}, /* 53 */
+ {1, 8, 9, 10, 0, 0}, /* 54 */
+ {1, 8, 9, 10, 0, 0}, /* 55 */
+ {1, 8, 9, 10, 0, 0}, /* 56 */
+ {1, 8, 9, 10, 0, 0}, /* 57 */
+ {1, 3, 4, 7, 0, 0}, /* 58 */
+ {1, 3, 4, 7, 3, 0}, /* 59 */
+ {1, 7, 8, 10, 0, 0}, /* 60 */
+ {2, 7, 8, 6, -1, 0}, /* 61 */
+ {1, 7, 8, 10, 0, 0}, /* 62 */
+ {1, 7, 8, 10, 0, 0}, /* 63 */
+ {1, 13, 14, 10, 0, 0}, /* 64 */
+ {0, 8, 9, 10, 0, 0}, /* 65 */
+ {0, 7, 8, 10, 0, 0}, /* 66 */
+ {0, 8, 9, 10, 0, 0}, /* 67 */
+ {0, 8, 9, 10, 0, 0}, /* 68 */
+ {0, 7, 8, 10, 0, 0}, /* 69 */
+ {0, 7, 8, 10, 0, 0}, /* 70 */
+ {0, 9, 10, 10, 0, 0}, /* 71 */
+ {0, 8, 9, 10, 0, 0}, /* 72 */
+ {0, 2, 3, 10, 0, 0}, /* 73 */
+ {0, 6, 7, 10, 0, 0}, /* 74 */
+ {0, 8, 9, 10, 0, 0}, /* 75 */
+ {0, 6, 7, 10, 0, 0}, /* 76 */
+ {0, 11, 12, 10, 0, 0}, /* 77 */
+ {0, 8, 9, 10, 0, 0}, /* 78 */
+ {0, 9, 10, 10, 0, 0}, /* 79 */
+ {0, 7, 8, 10, 0, 0}, /* 80 */
+ {0, 9, 10, 10, 1, 0}, /* 81 */
+ {0, 8, 9, 10, 0, 0}, /* 82 */
+ {0, 7, 8, 10, 0, 0}, /* 83 */
+ {0, 8, 9, 10, 0, 0}, /* 84 */
+ {0, 8, 9, 10, 0, 0}, /* 85 */
+ {0, 8, 9, 10, 0, 0}, /* 86 */
+ {0, 13, 14, 10, 0, 0}, /* 87 */
+ {0, 8, 9, 10, 0, 0}, /* 88 */
+ {0, 8, 9, 10, 0, 0}, /* 89 */
+ {0, 8, 9, 10, 0, 0}, /* 90 */
+ {1, 6, 7, 10, 3, 0}, /* 91 */
+ {1, 7, 8, 10, 0, 0}, /* 92 */
+ {1, 6, 7, 10, 3, 0}, /* 93 */
+ {1, 7, 8, 9, -1, 0}, /* 94 */
+ {1, 9, 10, 8, -2, 0}, /* 95 */
+ {0, 3, 4, 10, -5, 0}, /* 96 */
+ {0, 7, 8, 7, 0, 0}, /* 97 */
+ {0, 7, 8, 10, 0, 0}, /* 98 */
+ {0, 7, 8, 7, 0, 0}, /* 99 */
+ {0, 7, 8, 10, 0, 0}, /* 100 */
+ {0, 7, 8, 7, 0, 0}, /* 101 */
+ {0, 5, 6, 10, 0, 0}, /* 102 */
+ {0, 7, 8, 7, 3, 0}, /* 103 */
+ {0, 7, 8, 10, 0, 0}, /* 104 */
+ {0, 2, 3, 10, 0, 0}, /* 105 */
+ {0, 4, 5, 10, 2, 0}, /* 106 */
+ {0, 7, 8, 10, 0, 0}, /* 107 */
+ {0, 2, 3, 10, 0, 0}, /* 108 */
+ {0, 10, 11, 7, 0, 0}, /* 109 */
+ {0, 7, 8, 7, 0, 0}, /* 110 */
+ {0, 7, 8, 7, 0, 0}, /* 111 */
+ {0, 7, 8, 7, 3, 0}, /* 112 */
+ {0, 7, 8, 7, 3, 0}, /* 113 */
+ {0, 5, 6, 7, 0, 0}, /* 114 */
+ {0, 6, 7, 7, 0, 0}, /* 115 */
+ {0, 5, 6, 9, 0, 0}, /* 116 */
+ {0, 7, 8, 7, 0, 0}, /* 117 */
+ {0, 8, 9, 7, 0, 0}, /* 118 */
+ {0, 11, 12, 7, 0, 0}, /* 119 */
+ {0, 6, 7, 7, 0, 0}, /* 120 */
+ {0, 7, 8, 7, 3, 0}, /* 121 */
+ {0, 6, 7, 7, 0, 0}, /* 122 */
+ {1, 7, 8, 10, 3, 0}, /* 123 */
+ {2, 4, 5, 10, 3, 0}, /* 124 */
+ {1, 7, 8, 10, 3, 0}, /* 125 */
+ {1, 9, 10, 6, -3, 0}, /* 126 */
+};
+static XFontProp props[] = {
+ {XA_COPYRIGHT, 0},
+ {XA_RESOLUTION, 78},
+ {XA_UNDERLINE_POSITION, 3},
+};
+
+char *xtfont3cpright = "These glyphs are unencumbered";
+
+XFontStruct xtfont3 = {
+ (XExtData*)0,
+ (Font)0,
+ FontLeftToRight, /* direction */
+ 1, /* min_byte2 */
+ 126, /* max_byte2 */
+ 0, /* min_byte1 */
+ 0, /* max_byte1 */
+ 1, /* all chars exist */
+ 2, /* default char */
+ 3, /* n_properties */
+ props,
+ {0, 0, 0, -1, -10, 0},
+ {16, 16, 16, 11, 3, 0},
+ perchar,
+ 11, /* font ascent */
+ 3, /* font descent */
+};
diff --git a/xc/test/xsuite/xtest/fonts/xtfont4.bdf b/xc/test/xsuite/xtest/fonts/xtfont4.bdf
new file mode 100644
index 000000000..7bcc92324
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont4.bdf
@@ -0,0 +1,1901 @@
+STARTFONT 2.1
+COMMENT xtfont4 - reverse variable font, chars 1-126
+COMMENT Based on t7 font tf_varrv:
+COMMENT Created by onxtobdf
+COMMENT
+COMMENT STARTCHAR NAMES were off by 1 corrected July 17th,87
+COMMENT
+COMMENT six characters with encoding:09,10,12,13,26&27 (decimal)
+COMMENT and ascii values:11,12,14,15,32&33 (octal)
+COMMENT had their BW (glyph width) changed from 1 to 0
+COMMENT This was done to be consistent DWIDTH 0.
+COMMENT corrected Aug 10th, 87
+COMMENT
+FONT xtfont4
+SIZE 14 78 78
+FONTBOUNDINGBOX 16 14 -16 -3
+STARTPROPERTIES 8
+COPYRIGHT "These glyphs are unencumbered"
+FONT_ASCENT 11
+FONT_DESCENT 3
+DEFAULT_CHAR 2
+MIN_SPACE 2
+NORM_SPACE 4
+RESOLUTION 78
+UNDERLINE_POSITION 3
+ENDPROPERTIES
+CHARS 126
+STARTCHAR ascii001
+ENCODING 1
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 3 -8 8
+BITMAP
+c6
+6c
+38
+ENDCHAR
+STARTCHAR ascii002
+ENCODING 2
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+30
+30
+00
+30
+30
+18
+0c
+cc
+cc
+78
+ENDCHAR
+STARTCHAR ascii003
+ENCODING 3
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+7c
+c6
+06
+06
+c6
+c6
+7c
+00
+30
+18
+ENDCHAR
+STARTCHAR ascii004
+ENCODING 4
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 2 -7 8
+BITMAP
+cc
+cc
+ENDCHAR
+STARTCHAR ascii005
+ENCODING 5
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 4 3 -7 8
+BITMAP
+30
+60
+c0
+ENDCHAR
+STARTCHAR ascii006
+ENCODING 6
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 10 10 -10 0
+BITMAP
+e700
+3180
+3180
+ffc0
+3180
+3180
+3180
+3180
+3180
+3180
+ENDCHAR
+STARTCHAR ascii007
+ENCODING 7
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+c0
+60
+60
+e0
+e0
+ENDCHAR
+STARTCHAR ascii0010
+ENCODING 8
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 2 10 -3 0
+BITMAP
+c0
+c0
+00
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR ascii011
+ENCODING 9
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii012
+ENCODING 10
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii013
+ENCODING 11
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 3 -6 8
+BITMAP
+c0
+60
+30
+ENDCHAR
+STARTCHAR ascii014
+ENCODING 12
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii015
+ENCODING 13
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii016
+ENCODING 14
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 2 -7 8
+BITMAP
+f8
+f8
+ENDCHAR
+STARTCHAR ascii017
+ENCODING 15
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 0 0 -16 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii020
+ENCODING 16
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 2 -8 8
+BITMAP
+dc
+76
+ENDCHAR
+STARTCHAR ascii021
+ENCODING 17
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+dce0
+c630
+0630
+dff8
+c630
+c630
+c630
+c630
+c630
+c630
+ENDCHAR
+STARTCHAR ascii022
+ENCODING 18
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+dce0
+c630
+c630
+dff8
+c630
+c630
+c630
+c630
+c630
+c630
+ENDCHAR
+STARTCHAR ascii023
+ENCODING 19
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 16 2 -16 3
+BITMAP
+ffff
+ffff
+ENDCHAR
+STARTCHAR ascii024
+ENCODING 20
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+dc
+c6
+06
+df
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR ascii025
+ENCODING 21
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+dc
+c6
+c6
+df
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR ascii026
+ENCODING 22
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 8 2 -8 3
+BITMAP
+ff
+ff
+ENDCHAR
+STARTCHAR ascii027
+ENCODING 23
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 3 -7 8
+BITMAP
+84
+fc
+78
+ENDCHAR
+STARTCHAR ascii030
+ENCODING 24
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 8 2 -12 3
+BITMAP
+ff
+ff
+ENDCHAR
+STARTCHAR ascii031
+ENCODING 25
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 0 0 -9 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii032
+ENCODING 26
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii033
+ENCODING 27
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii034
+ENCODING 28
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 0 0 -8 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii035
+ENCODING 29
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 2 2 -6 -3
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR ascii036
+ENCODING 30
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 2 -8 8
+BITMAP
+dc
+76
+ENDCHAR
+STARTCHAR ascii037
+ENCODING 31
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 4 -7 7
+BITMAP
+70
+d8
+d8
+70
+ENDCHAR
+STARTCHAR space
+ENCODING 32
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 0 0 -7 10
+BITMAP
+ENDCHAR
+STARTCHAR exclam
+ENCODING 33
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 10 -3 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+00
+c0
+c0
+ENDCHAR
+STARTCHAR quotedbl
+ENCODING 34
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 4 -6 6
+BITMAP
+d8
+d8
+d8
+d8
+ENDCHAR
+STARTCHAR numbersign
+ENCODING 35
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 10 10 -11 0
+BITMAP
+cc00
+cc00
+6600
+ff80
+3300
+3300
+7fc0
+1980
+0cc0
+0cc0
+ENDCHAR
+STARTCHAR dollar
+ENCODING 36
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 12 -8 -1
+BITMAP
+10
+7c
+d6
+d6
+16
+3e
+78
+d0
+d6
+d6
+7c
+10
+ENDCHAR
+STARTCHAR percent
+ENCODING 37
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 12 10 -13 0
+BITMAP
+18e0
+19b0
+0db0
+0ce0
+0600
+0600
+7300
+db00
+d980
+7180
+ENDCHAR
+STARTCHAR ampersand
+ENCODING 38
+SWIDTH 785 0
+DWIDTH -11 0
+BBX 9 10 -10 0
+BITMAP
+0e00
+1b00
+1b00
+0a00
+0e00
+df00
+7180
+3180
+7980
+ef00
+ENDCHAR
+STARTCHAR quoteright
+ENCODING 39
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+e0
+e0
+c0
+c0
+60
+ENDCHAR
+STARTCHAR parenleft
+ENCODING 40
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 12 -5 -2
+BITMAP
+c0
+60
+60
+30
+30
+30
+30
+30
+30
+60
+60
+c0
+ENDCHAR
+STARTCHAR parenright
+ENCODING 41
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 12 -5 -2
+BITMAP
+30
+60
+60
+c0
+c0
+c0
+c0
+c0
+c0
+60
+60
+30
+ENDCHAR
+STARTCHAR asterisk
+ENCODING 42
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 6 -6 5
+BITMAP
+20
+a8
+70
+70
+a8
+20
+ENDCHAR
+STARTCHAR plus
+ENCODING 43
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 8 -9 0
+BITMAP
+18
+18
+18
+ff
+ff
+18
+18
+18
+ENDCHAR
+STARTCHAR comma
+ENCODING 44
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 5 -3 -3
+BITMAP
+c0
+c0
+80
+80
+40
+ENDCHAR
+STARTCHAR hyphen
+ENCODING 45
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 6 2 -8 3
+BITMAP
+fc
+fc
+ENDCHAR
+STARTCHAR period
+ENCODING 46
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 2 -3 0
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR slash
+ENCODING 47
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+c0
+c0
+60
+60
+30
+30
+18
+18
+0c
+0c
+ENDCHAR
+STARTCHAR zero
+ENCODING 48
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+38
+6c
+c6
+c6
+c6
+c6
+c6
+c6
+6c
+38
+ENDCHAR
+STARTCHAR one
+ENCODING 49
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 5 10 -7 0
+BITMAP
+c0
+e0
+f8
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR two
+ENCODING 50
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c0
+60
+30
+18
+0c
+06
+fe
+ENDCHAR
+STARTCHAR three
+ENCODING 51
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c0
+70
+c0
+c0
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR four
+ENCODING 52
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+60
+70
+78
+68
+6c
+66
+66
+fe
+60
+60
+ENDCHAR
+STARTCHAR five
+ENCODING 53
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+fc
+0c
+0c
+7e
+c6
+c6
+c0
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR six
+ENCODING 54
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+78
+cc
+c6
+06
+7e
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR seven
+ENCODING 55
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+fe
+c0
+60
+30
+30
+18
+18
+0c
+0c
+0c
+ENDCHAR
+STARTCHAR eight
+ENCODING 56
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c6
+7c
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR nine
+ENCODING 57
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+fc
+c0
+c6
+66
+3c
+ENDCHAR
+STARTCHAR colon
+ENCODING 58
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 7 -3 0
+BITMAP
+c0
+c0
+00
+00
+00
+c0
+c0
+ENDCHAR
+STARTCHAR semicolon
+ENCODING 59
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 10 -3 -3
+BITMAP
+c0
+c0
+00
+00
+00
+c0
+c0
+80
+80
+40
+ENDCHAR
+STARTCHAR less
+ENCODING 60
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+c0
+60
+30
+18
+0c
+0c
+18
+30
+60
+c0
+ENDCHAR
+STARTCHAR equal
+ENCODING 61
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 5 5 -7 1
+BITMAP
+f8
+f8
+00
+f8
+f8
+ENDCHAR
+STARTCHAR greater
+ENCODING 62
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+0c
+18
+30
+60
+c0
+c0
+60
+30
+18
+0c
+ENDCHAR
+STARTCHAR question
+ENCODING 63
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+78
+cc
+cc
+c0
+60
+30
+30
+00
+30
+30
+ENDCHAR
+STARTCHAR at
+ENCODING 64
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 12 10 -13 0
+BITMAP
+3fc0
+6060
+cf30
+d9b0
+d9b0
+d9b0
+59b0
+3730
+8060
+7fc0
+ENDCHAR
+STARTCHAR A
+ENCODING 65
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+18
+18
+3c
+3c
+24
+66
+7e
+66
+c3
+c3
+ENDCHAR
+STARTCHAR B
+ENCODING 66
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+3e
+66
+66
+66
+7e
+c6
+c6
+c6
+c6
+7e
+ENDCHAR
+STARTCHAR C
+ENCODING 67
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+7c
+c6
+c3
+03
+03
+03
+c3
+c3
+c6
+7c
+ENDCHAR
+STARTCHAR D
+ENCODING 68
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+3f
+63
+c3
+c3
+c3
+c3
+c3
+c3
+63
+3f
+ENDCHAR
+STARTCHAR E
+ENCODING 69
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+fe
+06
+06
+06
+7e
+06
+06
+06
+06
+fe
+ENDCHAR
+STARTCHAR F
+ENCODING 70
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+fe
+06
+06
+06
+7e
+06
+06
+06
+06
+06
+ENDCHAR
+STARTCHAR G
+ENCODING 71
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 10 -9 0
+BITMAP
+7e00
+c300
+c180
+0180
+0180
+f180
+c180
+c180
+e300
+de00
+ENDCHAR
+STARTCHAR H
+ENCODING 72
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+c3
+c3
+ff
+c3
+c3
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR I
+ENCODING 73
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR J
+ENCODING 74
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 10 -6 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+cc
+cc
+78
+ENDCHAR
+STARTCHAR K
+ENCODING 75
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+63
+33
+1b
+0f
+07
+0f
+1b
+33
+63
+c3
+ENDCHAR
+STARTCHAR L
+ENCODING 76
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 10 -6 0
+BITMAP
+0c
+0c
+0c
+0c
+0c
+0c
+0c
+0c
+0c
+fc
+ENDCHAR
+STARTCHAR M
+ENCODING 77
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 11 10 -11 0
+BITMAP
+e0e0
+e0e0
+f1e0
+f1e0
+db60
+db60
+db60
+ce60
+ce60
+c460
+ENDCHAR
+STARTCHAR N
+ENCODING 78
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c7
+c7
+cf
+cf
+db
+db
+f3
+f3
+e3
+ENDCHAR
+STARTCHAR O
+ENCODING 79
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 10 -9 0
+BITMAP
+3e00
+6300
+c180
+c180
+c180
+c180
+c180
+c180
+6300
+3e00
+ENDCHAR
+STARTCHAR P
+ENCODING 80
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+7e
+c6
+c6
+c6
+c6
+7e
+06
+06
+06
+06
+ENDCHAR
+STARTCHAR Q
+ENCODING 81
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 11 -9 -1
+BITMAP
+3e00
+6300
+c180
+c180
+c180
+c180
+c180
+d980
+7300
+7e00
+c000
+ENDCHAR
+STARTCHAR R
+ENCODING 82
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+7f
+c3
+c3
+c3
+7f
+c3
+c3
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR S
+ENCODING 83
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+7c
+c6
+c6
+1e
+7c
+f0
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR T
+ENCODING 84
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+ff
+18
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR U
+ENCODING 85
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+c3
+c3
+c3
+c3
+c3
+c3
+66
+3c
+ENDCHAR
+STARTCHAR V
+ENCODING 86
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+c3
+66
+66
+66
+24
+3c
+18
+18
+ENDCHAR
+STARTCHAR W
+ENCODING 87
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+c218
+c218
+6730
+6730
+6730
+2fa0
+3de0
+38e0
+18c0
+18c0
+ENDCHAR
+STARTCHAR X
+ENCODING 88
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+66
+3c
+18
+18
+3c
+66
+c3
+c3
+ENDCHAR
+STARTCHAR Y
+ENCODING 89
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+66
+66
+3c
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR Z
+ENCODING 90
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+ff
+c0
+60
+30
+18
+18
+0c
+06
+03
+ff
+ENDCHAR
+STARTCHAR braketleft
+ENCODING 91
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 13 -6 -3
+BITMAP
+f8
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+f8
+ENDCHAR
+STARTCHAR backslash
+ENCODING 92
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+0c
+0c
+18
+18
+30
+30
+60
+60
+c0
+c0
+ENDCHAR
+STARTCHAR bracketright
+ENCODING 93
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 13 -6 -3
+BITMAP
+f8
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+f8
+ENDCHAR
+STARTCHAR asciicircum
+ENCODING 94
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 8 -7 1
+BITMAP
+30
+78
+fc
+b4
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR underscore
+ENCODING 95
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 6 -9 2
+BITMAP
+0c
+06
+ff
+ff
+06
+0c
+ENDCHAR
+STARTCHAR quoteleft
+ENCODING 96
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+c0
+60
+60
+e0
+e0
+ENDCHAR
+STARTCHAR a
+ENCODING 97
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+3c
+66
+60
+7c
+66
+66
+dc
+ENDCHAR
+STARTCHAR b
+ENCODING 98
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+06
+06
+06
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+ENDCHAR
+STARTCHAR c
+ENCODING 99
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+06
+06
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR d
+ENCODING 100
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+c0
+c0
+c0
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+ENDCHAR
+STARTCHAR e
+ENCODING 101
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+c6
+fe
+06
+c6
+7c
+ENDCHAR
+STARTCHAR f
+ENCODING 102
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 10 -5 0
+BITMAP
+e0
+30
+30
+f8
+30
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR g
+ENCODING 103
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+c0
+c6
+7c
+ENDCHAR
+STARTCHAR h
+ENCODING 104
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+06
+06
+06
+7e
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR i
+ENCODING 105
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+00
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR j
+ENCODING 106
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 4 12 -4 -2
+BITMAP
+c0
+c0
+00
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+70
+ENDCHAR
+STARTCHAR k
+ENCODING 107
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+06
+06
+06
+66
+36
+1e
+1e
+36
+66
+c6
+ENDCHAR
+STARTCHAR l
+ENCODING 108
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR m
+ENCODING 109
+SWIDTH 785 0
+DWIDTH -11 0
+BBX 10 7 -10 0
+BITMAP
+77c0
+ccc0
+ccc0
+ccc0
+ccc0
+ccc0
+ccc0
+ENDCHAR
+STARTCHAR n
+ENCODING 110
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7e
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR o
+ENCODING 111
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR p
+ENCODING 112
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+06
+06
+06
+ENDCHAR
+STARTCHAR q
+ENCODING 113
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR r
+ENCODING 114
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 7 -5 0
+BITMAP
+f8
+d8
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR s
+ENCODING 115
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+78
+cc
+1c
+78
+e0
+cc
+78
+ENDCHAR
+STARTCHAR t
+ENCODING 116
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 9 -5 0
+BITMAP
+30
+30
+f8
+30
+30
+30
+30
+30
+e0
+ENDCHAR
+STARTCHAR u
+ENCODING 117
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+c6
+c6
+c6
+c6
+c6
+c6
+fc
+ENDCHAR
+STARTCHAR v
+ENCODING 118
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 7 -8 0
+BITMAP
+c3
+c3
+66
+66
+24
+3c
+18
+ENDCHAR
+STARTCHAR w
+ENCODING 119
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 11 7 -11 0
+BITMAP
+c460
+c460
+6ec0
+6ec0
+7bc0
+3180
+3180
+ENDCHAR
+STARTCHAR x
+ENCODING 120
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+cc
+cc
+78
+30
+78
+cc
+cc
+ENDCHAR
+STARTCHAR y
+ENCODING 121
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+c6
+c6
+cc
+6c
+68
+78
+30
+30
+36
+1c
+ENDCHAR
+STARTCHAR z
+ENCODING 122
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+fc
+c0
+60
+30
+18
+0c
+fc
+ENDCHAR
+STARTCHAR braceleft
+ENCODING 123
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 13 -7 -3
+BITMAP
+e0
+30
+30
+30
+30
+30
+1c
+30
+30
+30
+30
+30
+e0
+ENDCHAR
+STARTCHAR bar
+ENCODING 124
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 2 13 -4 -3
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR braceright
+ENCODING 125
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 13 -7 -3
+BITMAP
+1c
+30
+30
+30
+30
+30
+e0
+30
+30
+30
+30
+30
+1c
+ENDCHAR
+STARTCHAR tilda
+ENCODING 126
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 3 -9 3
+BITMAP
+cc
+7e
+33
+ENDCHAR
+ENDFONT
+COMMENT DEC/CMS REPLACEMENT HISTORY, Element VARIABLE.DECW$BDF
+COMMENT *1 30-DEC-1987 13:34:31 GEORGE "Initial Entry"
+COMMENT DEC/CMS REPLACEMENT HISTORY, Element VARIABLE.DECW$BDF
+COMMENT DEC/CMS REPLACEMENT HISTORY, Element VARIABLE_100DPI.DECW$BDF
+COMMENT *3 5-APR-1988 22:39:02 BARRIE "update for new fonts Lubalin, Souvenir, AvantGarde & 8 pt sizes"
+COMMENT *2 21-MAR-1988 10:13:11 BARRIE "changed Font Name to Variable_100dpi"
+COMMENT *1 15-MAR-1988 19:33:53 ORGOVAN "Initial Entry"
+COMMENT DEC/CMS REPLACEMENT HISTORY, Element VARIABLE_100DPI.DECW$BDF
diff --git a/xc/test/xsuite/xtest/fonts/xtfont4.c b/xc/test/xsuite/xtest/fonts/xtfont4.c
new file mode 100644
index 000000000..db3df9c9f
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont4.c
@@ -0,0 +1,177 @@
+/* $XConsortium$ */
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ */
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "Xatom.h"
+
+static XCharStruct perchar[] = {
+ {-8, -1, -8, 11, -8, 0}, /* 1 */
+ {-7, -1, -8, 10, 0, 0}, /* 2 */
+ {-7, 0, -8, 7, 3, 0}, /* 3 */
+ {-7, -1, -7, 10, -8, 0}, /* 4 */
+ {-7, -3, -7, 11, -8, 0}, /* 5 */
+ {-10, 0, -10, 10, 0, 0}, /* 6 */
+ {-3, 0, -4, 10, -5, 0}, /* 7 */
+ {-3, -1, -5, 10, 0, 0}, /* 8 */
+ {0, 0, 0, 10, -10, 0}, /* 9 */
+ {0, 0, 0, 10, -10, 0}, /* 10 */
+ {-6, -2, -6, 11, -8, 0}, /* 11 */
+ {0, 0, 0, 10, -10, 0}, /* 12 */
+ {0, 0, 0, 10, -10, 0}, /* 13 */
+ {-7, -2, -7, 10, -8, 0}, /* 14 */
+ {-16, -16, -16, 10, -10, 0}, /* 15 */
+ {-8, -1, -8, 10, -8, 0}, /* 16 */
+ {-13, 0, -14, 10, 0, 0}, /* 17 */
+ {-13, 0, -14, 10, 0, 0}, /* 18 */
+ {-16, 0, -16, 5, -3, 0}, /* 19 */
+ {-8, 0, -9, 10, 0, 0}, /* 20 */
+ {-8, 0, -9, 10, 0, 0}, /* 21 */
+ {-8, 0, -8, 5, -3, 0}, /* 22 */
+ {-7, -1, -7, 11, -8, 0}, /* 23 */
+ {-12, -4, -16, 5, -3, 0}, /* 24 */
+ {-9, -9, -9, 10, -10, 0}, /* 25 */
+ {0, 0, 0, 10, -10, 0}, /* 26 */
+ {0, 0, 0, 10, -10, 0}, /* 27 */
+ {-8, -8, -8, 10, -10, 0}, /* 28 */
+ {-6, -4, -6, -1, 3, 0}, /* 29 */
+ {-8, -1, -8, 10, -8, 0}, /* 30 */
+ {-7, -2, -7, 11, -7, 0}, /* 31 */
+ {-7, -7, -7, 10, -10, 0}, /* 32 */
+ {-3, -1, -4, 10, 0, 0}, /* 33 */
+ {-6, -1, -7, 10, -6, 0}, /* 34 */
+ {-11, -1, -12, 10, 0, 0}, /* 35 */
+ {-8, -1, -9, 11, 1, 0}, /* 36 */
+ {-13, -1, -14, 10, 0, 0}, /* 37 */
+ {-10, -1, -11, 10, 0, 0}, /* 38 */
+ {-3, 0, -4, 10, -5, 0}, /* 39 */
+ {-5, -1, -6, 10, 2, 0}, /* 40 */
+ {-5, -1, -6, 10, 2, 0}, /* 41 */
+ {-6, -1, -7, 11, -5, 0}, /* 42 */
+ {-9, -1, -10, 8, 0, 0}, /* 43 */
+ {-3, -1, -4, 2, 3, 0}, /* 44 */
+ {-8, -2, -9, 5, -3, 0}, /* 45 */
+ {-3, -1, -4, 2, 0, 0}, /* 46 */
+ {-7, -1, -8, 10, 0, 0}, /* 47 */
+ {-8, -1, -9, 10, 0, 0}, /* 48 */
+ {-7, -2, -9, 10, 0, 0}, /* 49 */
+ {-8, -1, -9, 10, 0, 0}, /* 50 */
+ {-8, -1, -9, 10, 0, 0}, /* 51 */
+ {-8, -1, -9, 10, 0, 0}, /* 52 */
+ {-8, -1, -9, 10, 0, 0}, /* 53 */
+ {-8, -1, -9, 10, 0, 0}, /* 54 */
+ {-8, -1, -9, 10, 0, 0}, /* 55 */
+ {-8, -1, -9, 10, 0, 0}, /* 56 */
+ {-8, -1, -9, 10, 0, 0}, /* 57 */
+ {-3, -1, -4, 7, 0, 0}, /* 58 */
+ {-3, -1, -4, 7, 3, 0}, /* 59 */
+ {-7, -1, -8, 10, 0, 0}, /* 60 */
+ {-7, -2, -8, 6, -1, 0}, /* 61 */
+ {-7, -1, -8, 10, 0, 0}, /* 62 */
+ {-7, -1, -8, 10, 0, 0}, /* 63 */
+ {-13, -1, -14, 10, 0, 0}, /* 64 */
+ {-8, 0, -9, 10, 0, 0}, /* 65 */
+ {-7, 0, -8, 10, 0, 0}, /* 66 */
+ {-8, 0, -9, 10, 0, 0}, /* 67 */
+ {-8, 0, -9, 10, 0, 0}, /* 68 */
+ {-7, 0, -8, 10, 0, 0}, /* 69 */
+ {-7, 0, -8, 10, 0, 0}, /* 70 */
+ {-9, 0, -10, 10, 0, 0}, /* 71 */
+ {-8, 0, -9, 10, 0, 0}, /* 72 */
+ {-2, 0, -3, 10, 0, 0}, /* 73 */
+ {-6, 0, -7, 10, 0, 0}, /* 74 */
+ {-8, 0, -9, 10, 0, 0}, /* 75 */
+ {-6, 0, -7, 10, 0, 0}, /* 76 */
+ {-11, 0, -12, 10, 0, 0}, /* 77 */
+ {-8, 0, -9, 10, 0, 0}, /* 78 */
+ {-9, 0, -10, 10, 0, 0}, /* 79 */
+ {-7, 0, -8, 10, 0, 0}, /* 80 */
+ {-9, 0, -10, 10, 1, 0}, /* 81 */
+ {-8, 0, -9, 10, 0, 0}, /* 82 */
+ {-7, 0, -8, 10, 0, 0}, /* 83 */
+ {-8, 0, -9, 10, 0, 0}, /* 84 */
+ {-8, 0, -9, 10, 0, 0}, /* 85 */
+ {-8, 0, -9, 10, 0, 0}, /* 86 */
+ {-13, 0, -14, 10, 0, 0}, /* 87 */
+ {-8, 0, -9, 10, 0, 0}, /* 88 */
+ {-8, 0, -9, 10, 0, 0}, /* 89 */
+ {-8, 0, -9, 10, 0, 0}, /* 90 */
+ {-6, -1, -7, 10, 3, 0}, /* 91 */
+ {-7, -1, -8, 10, 0, 0}, /* 92 */
+ {-6, -1, -7, 10, 3, 0}, /* 93 */
+ {-7, -1, -8, 9, -1, 0}, /* 94 */
+ {-9, -1, -10, 8, -2, 0}, /* 95 */
+ {-3, 0, -4, 10, -5, 0}, /* 96 */
+ {-7, 0, -8, 7, 0, 0}, /* 97 */
+ {-7, 0, -8, 10, 0, 0}, /* 98 */
+ {-7, 0, -8, 7, 0, 0}, /* 99 */
+ {-7, 0, -8, 10, 0, 0}, /* 100 */
+ {-7, 0, -8, 7, 0, 0}, /* 101 */
+ {-5, 0, -6, 10, 0, 0}, /* 102 */
+ {-7, 0, -8, 7, 3, 0}, /* 103 */
+ {-7, 0, -8, 10, 0, 0}, /* 104 */
+ {-2, 0, -3, 10, 0, 0}, /* 105 */
+ {-4, 0, -5, 10, 2, 0}, /* 106 */
+ {-7, 0, -8, 10, 0, 0}, /* 107 */
+ {-2, 0, -3, 10, 0, 0}, /* 108 */
+ {-10, 0, -11, 7, 0, 0}, /* 109 */
+ {-7, 0, -8, 7, 0, 0}, /* 110 */
+ {-7, 0, -8, 7, 0, 0}, /* 111 */
+ {-7, 0, -8, 7, 3, 0}, /* 112 */
+ {-7, 0, -8, 7, 3, 0}, /* 113 */
+ {-5, 0, -6, 7, 0, 0}, /* 114 */
+ {-6, 0, -7, 7, 0, 0}, /* 115 */
+ {-5, 0, -6, 9, 0, 0}, /* 116 */
+ {-7, 0, -8, 7, 0, 0}, /* 117 */
+ {-8, 0, -9, 7, 0, 0}, /* 118 */
+ {-11, 0, -12, 7, 0, 0}, /* 119 */
+ {-6, 0, -7, 7, 0, 0}, /* 120 */
+ {-7, 0, -8, 7, 3, 0}, /* 121 */
+ {-6, 0, -7, 7, 0, 0}, /* 122 */
+ {-7, -1, -8, 10, 3, 0}, /* 123 */
+ {-4, -2, -5, 10, 3, 0}, /* 124 */
+ {-7, -1, -8, 10, 3, 0}, /* 125 */
+ {-9, -1, -10, 6, -3, 0}, /* 126 */
+};
+static XFontProp props[] = {
+ {XA_COPYRIGHT, 0},
+ {XA_MIN_SPACE, 2},
+ {XA_NORM_SPACE, 4},
+ {XA_RESOLUTION, 78},
+ {XA_UNDERLINE_POSITION, 3},
+};
+
+char *xtfont4cpright = "These glyphs are unencumbered";
+
+XFontStruct xtfont4 = {
+ (XExtData*)0,
+ (Font)0,
+ FontRightToLeft, /* direction */
+ 1, /* min_byte2 */
+ 126, /* max_byte2 */
+ 0, /* min_byte1 */
+ 0, /* max_byte1 */
+ 1, /* all chars exist */
+ 2, /* default char */
+ 5, /* n_properties */
+ props,
+ {-16, -16, -16, -1, -10, 0},
+ {0, 0, 0, 11, 3, 0},
+ perchar,
+ 11, /* font ascent */
+ 3, /* font descent */
+};
diff --git a/xc/test/xsuite/xtest/fonts/xtfont5.bdf b/xc/test/xsuite/xtest/fonts/xtfont5.bdf
new file mode 100644
index 000000000..9b8ee87dd
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont5.bdf
@@ -0,0 +1,298 @@
+STARTFONT 2.1
+COMMENT xtfont5 - font with large characters, chars 0-3
+COMMENT Based on t7 font tf_big3:
+COMMENT This font describes a few fairly big characters.
+FONT xtfont5
+SIZE 14 78 78
+FONTBOUNDINGBOX 129 67 -1 -1
+STARTPROPERTIES 4
+COPYRIGHT "These glyphs are unencumbered"
+FONT_ASCENT 66
+FONT_DESCENT 1
+DEFAULT_CHAR 1234
+ENDPROPERTIES
+CHARS 4
+STARTCHAR ascii001
+ENCODING 0
+SWIDTH 571 0
+DWIDTH 129 0
+BBX 128 63 0 3
+BITMAP
+801ff003001ff002001ff002801ff002
+c0038004801ff006801ff00640038006
+60038004c003800ec003800e4003800c
+300380106003801c6003801c10038018
+18038020300380383003803808038030
+0c038040180380701803807004038060
+060380800c0380e00c0380e0020380c0
+03038100060381c0060381c001038180
+01838200030383800303838000838300
+00c38400018387000183870000438600
+00638c0000c38e0000c38e0000638c00
+1033900800639c0000639c0020139810
+101820081033b8081033b80820083010
+100c4008101870081018700820046010
+10068008100ce008100ce0082002c010
+fffd7ffe1006c0081006c008fffd7ffe
+1006c008fffd7ffefffd7ffe2006c010
+100ce0081006800810068008200e6010
+10187008100c4008100c4008201c3010
+1033b8081018200810182008203b9810
+00639c00103390081033900800738c00
+00c38e0000638c0000638c0000e38600
+0183870000c3840000c3840001c38300
+03038380018382000183820003838180
+060381c00303810003038100070380c0
+0c0380e006038080060380800e038060
+180380700c0380400c0380401c038030
+30038038180380201803802038038018
+6003801c30038010300380107003800c
+c003800e6003800460038004e0038006
+801ff006c0038004c0038004c01ff002
+001ff002801ff002001ff002801ff002
+001ff002801ff002801ff002801ff000
+801ff0064003800640038006c01ff002
+c003800e4003800c4003800ce0038006
+6003801c10038018100380187003800c
+30038038080380300803803038038018
+1803807004038060040380601c038030
+0c0380e0020380c0020380c00e038060
+060381c00103818001038180070380c0
+03038380008383000083830003838180
+01838700004386000043860001c38300
+00c38e0000638c0000638c0000e38600
+00639c00201398102013981000738c00
+1033b8082008301020083010203b9810
+101870082004601020046010201c3010
+100ce0082002c0102002c010200e6010
+1006c008fffd7ffefffd7ffe2006c010
+fffd7ffe2006c0102006c010fffd7ffe
+10068008200e6010200e60102002c010
+100c4008201c3010201c301020046010
+10182008203b9810203b981020083010
+1033900800738c0000738c0020139810
+00638c0000e3860000e3860000638c00
+00c3840001c3830001c3830000438600
+01838200038381800383818000838300
+03038100070380c0070380c001038180
+060380800e0380600e038060020380c0
+0c0380401c0380301c03803004038060
+18038020380380183803801808038030
+300380107003800c7003800c10038018
+60038004e0038006e00380064003800c
+c0038004c01ff002c01ff00240038006
+ENDCHAR
+STARTCHAR ascii001b
+ENCODING 1
+SWIDTH 571 0
+DWIDTH 128 0
+BBX 127 64 0 -1
+BITMAP
+001ff002801ff002801ff002801ff000
+801ff0064003800640038006c01ff002
+c003800e4003800c4003800ce0038006
+6003801c10038018100380187003800c
+30038038080380300803803038038018
+1803807004038060040380601c038030
+0c0380e0020380c0020380c00e038060
+060381c00103818001038180070380c0
+03038380008383000083830003838180
+01838700004386000043860001c38300
+00c38e0000638c0000638c0000e38600
+00639c00201398102013981000738c00
+1033b8082008301020083010203b9810
+101870082004601020046010201c3010
+100ce0082002c0102002c010200e6010
+1006c008fffd7ffefffd7ffe2006c010
+fffd7ffe2006c0102006c010fffd7ffe
+10068008200e6010200e60102002c010
+100c4008201c3010201c301020046010
+10182008203b9810203b981020083010
+1033900800738c0000738c0020139810
+00638c0000e3860000e3860000638c00
+00c3840001c3830001c3830000438600
+01838200038381800383818000838300
+03038100070380c0070380c001038180
+060380800e0380600e038060020380c0
+0c0380401c0380301c03803004038060
+18038020380380183803801808038030
+300380107003800c7003800c10038018
+60038004e0038006e00380064003800c
+c0038004c01ff002c01ff00240038006
+001ff002801ff002801ff000801ff002
+40038006c01ff002c01ff002c01ff002
+4003800ce0038006e0038006e0038006
+100380187003800c7003800c7003800c
+08038030380380183803801838038018
+040380601c0380301c0380301c038030
+020380c00e0380600e0380600e038060
+01038180070380c0070380c0070380c0
+00838300038381800383818003838180
+0043860001c3830001c3830001c38300
+00638c0000e3860000e3860000e38600
+2013981000738c0000738c0000738c00
+20083010203b9810203b9810203b9810
+20046010201c3010201c3010201c3010
+2002c010200e6010200e6010200e6010
+fffd7ffe2006c0102006c0102006c010
+2006c010fffd7ffefffd7ffefffd7ffe
+200e60102002c0102002c0102002c010
+201c3010200460102004601020046010
+203b9810200830102008301020083010
+00738c00201398102013981020139810
+00e3860000638c0000638c0000638c00
+01c38300004386000043860000438600
+03838180008383000083830000838300
+070380c0010381800103818001038180
+0e038060020380c0020380c0020380c0
+1c038030040380600403806004038060
+38038018080380300803803008038030
+7003800c100380181003801810038018
+e00380064003800c4003800c4003800c
+c01ff002400380064003800640038006
+801ff000801ff002801ff002801ff002
+801ff000801ff000001ff002801ff002
+ENDCHAR
+STARTCHAR ascii001c
+ENCODING 2
+SWIDTH 571 0
+DWIDTH 63 0
+BBX 126 64 -1 0
+BITMAP
+801ff002801ff000801ff000801ff000
+40038006c01ff002c01ff002c01ff002
+4003800ce0038006e0038006e0038006
+100380187003800c7003800c7003800c
+08038030380380183803801838038018
+040380601c0380301c0380301c038030
+020380c00e0380600e0380600e038060
+01038180070380c0070380c0070380c0
+00838300038381800383818003838180
+0043860001c3830001c3830001c38300
+00638c0000e3860000e3860000e38600
+2013981000738c0000738c0000738c00
+20083010203b9810203b9810203b9810
+20046010201c3010201c3010201c3010
+2002c010200e6010200e6010200e6010
+fffd7ffe2006c0102006c0102006c010
+2006c010fffd7ffefffd7ffefffd7ffe
+200e60102002c0102002c0102002c010
+201c3010200460102004601020046010
+203b9810200830102008301020083010
+00738c00201398102013981020139810
+00e3860000638c0000638c0000638c00
+01c38300004386000043860000438600
+03838180008383000083830000838300
+070380c0010381800103818001038180
+0e038060020380c0020380c0020380c0
+1c038030040380600403806004038060
+38038018080380300803803008038030
+7003800c100380181003801810038018
+e00380064003800c4003800c4003800c
+c01ff002400380064003800640038006
+801ff000801ff002801ff002801ff002
+801ff000801ff000001ff002801ff002
+c01ff002c01ff002801ff00640038006
+e0038006e0038006c003800e4003800c
+7003800c7003800c6003801c10038018
+38038018380380183003803808038030
+1c0380301c0380301803807004038060
+0e0380600e0380600c0380e0020380c0
+070380c0070380c0060381c001038180
+03838180038381800303838000838300
+01c3830001c383000183870000438600
+00e3860000e3860000c38e0000638c00
+00738c0000738c0000639c0020139810
+203b9810203b98101033b80820083010
+201c3010201c30101018700820046010
+200e6010200e6010100ce0082002c010
+2006c0102006c0101006c008fffd7ffe
+fffd7ffefffd7ffefffd7ffe2006c010
+2002c0102002c01010068008200e6010
+2004601020046010100c4008201c3010
+200830102008301010182008203b9810
+20139810201398101033900800738c00
+00638c0000638c0000638c0000e38600
+004386000043860000c3840001c38300
+00838300008383000183820003838180
+010381800103818003038100070380c0
+020380c0020380c0060380800e038060
+04038060040380600c0380401c038030
+08038030080380301803802038038018
+1003801810038018300380107003800c
+4003800c4003800c60038004e0038006
+4003800640038006c0038004c01ff002
+801ff002801ff002001ff002801ff002
+ENDCHAR
+STARTCHAR ascii001d
+ENCODING 3
+SWIDTH 571 0
+DWIDTH 63 0
+BBX 125 64 1 0
+BITMAP
+801ff000801ff000001ff002801ff002
+c01ff002c01ff002801ff00640038006
+e0038006e0038006c003800e4003800c
+7003800c7003800c6003801c10038018
+38038018380380183003803808038030
+1c0380301c0380301803807004038060
+0e0380600e0380600c0380e0020380c0
+070380c0070380c0060381c001038180
+03838180038381800303838000838300
+01c3830001c383000183870000438600
+00e3860000e3860000c38e0000638c00
+00738c0000738c0000639c0020139810
+203b9810203b98101033b80820083010
+201c3010201c30101018700820046010
+200e6010200e6010100ce0082002c010
+2006c0102006c0101006c008fffd7ffe
+fffd7ffefffd7ffefffd7ffe2006c010
+2002c0102002c01010068008200e6010
+2004601020046010100c4008201c3010
+200830102008301010182008203b9810
+20139810201398101033900800738c00
+00638c0000638c0000638c0000e38600
+004386000043860000c3840001c38300
+00838300008383000183820003838180
+010381800103818003038100070380c0
+020380c0020380c0060380800e038060
+04038060040380600c0380401c038030
+08038030080380301803802038038018
+1003801810038018300380107003800c
+4003800c4003800c60038004e0038006
+4003800640038006c0038004c01ff002
+801ff002801ff002001ff002801ff002
+801ff003001ff002001ff002801ff002
+c0038004801ff006801ff00640038006
+60038004c003800ec003800e4003800c
+300380106003801c6003801c10038018
+18038020300380383003803808038030
+0c038040180380701803807004038060
+060380800c0380e00c0380e0020380c0
+03038100060381c0060381c001038180
+01838200030383800303838000838300
+00c38400018387000183870000438600
+00638c0000c38e0000c38e0000638c00
+1033900800639c0000639c0020139810
+101820081033b8081033b80820083010
+100c4008101870081018700820046010
+10068008100ce008100ce0082002c010
+fffd7ffe1006c0081006c008fffd7ffe
+1006c008fffd7ffefffd7ffe2006c010
+100ce0081006800810068008200e6010
+10187008100c4008100c4008201c3010
+1033b8081018200810182008203b9810
+00639c00103390081033900800738c00
+00c38e0000638c0000638c0000e38600
+0183870000c3840000c3840001c38300
+03038380018382000183820003838180
+060381c00303810003038100070380c0
+0c0380e006038080060380800e038060
+180380700c0380400c0380401c038030
+30038038180380201803802038038018
+6003801c30038010300380107003800c
+c003800e6003800460038004e0038006
+801ff006c0038004c0038004c01ff002
+001ff002801ff002001ff002801ff002
+ENDCHAR
+ENDFONT
diff --git a/xc/test/xsuite/xtest/fonts/xtfont5.c b/xc/test/xsuite/xtest/fonts/xtfont5.c
new file mode 100644
index 000000000..370345389
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont5.c
@@ -0,0 +1,51 @@
+/* $XConsortium$ */
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ */
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "Xatom.h"
+
+static XCharStruct perchar[] = {
+ {0, 128, 129, 66, -3, 0}, /* 0 */
+ {0, 127, 128, 63, 1, 0}, /* 1 */
+ {-1, 125, 63, 64, 0, 0}, /* 2 */
+ {1, 126, 63, 64, 0, 0}, /* 3 */
+};
+static XFontProp props[] = {
+ {XA_COPYRIGHT, 0},
+};
+
+char *xtfont5cpright = "These glyphs are unencumbered";
+
+XFontStruct xtfont5 = {
+ (XExtData*)0,
+ (Font)0,
+ FontLeftToRight, /* direction */
+ 0, /* min_byte2 */
+ 3, /* max_byte2 */
+ 0, /* min_byte1 */
+ 0, /* max_byte1 */
+ 1, /* all chars exist */
+ 1234, /* default char */
+ 1, /* n_properties */
+ props,
+ {-1, 125, 63, 63, -3, 0},
+ {1, 128, 129, 66, 1, 0},
+ perchar,
+ 66, /* font ascent */
+ 1, /* font descent */
+};
diff --git a/xc/test/xsuite/xtest/fonts/xtfont6.bdf b/xc/test/xsuite/xtest/fonts/xtfont6.bdf
new file mode 100644
index 000000000..ef80db694
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont6.bdf
@@ -0,0 +1,7486 @@
+STARTFONT 2.1
+COMMENT xtfont6 - 16 byte font. variable width, reverse, chars (0,0)-(1,255)
+COMMENT Based on t7 font tf16_varrv:
+COMMENT Created by onxtobdf
+COMMENT
+COMMENT STARTCHAR NAMES were off by 1 corrected July 17th,87
+COMMENT
+COMMENT six characters with encoding:09,10,12,13,26&27 (decimal)
+COMMENT and ascii values:11,12,14,15,32&33 (octal)
+COMMENT had their BW (glyph width) changed from 1 to 0
+COMMENT This was done to be consistent DWIDTH 0.
+COMMENT corrected Aug 10th, 87
+COMMENT
+FONT xtfont6
+SIZE 14 78 78
+FONTBOUNDINGBOX 16 14 -16 -3
+STARTPROPERTIES 6
+COPYRIGHT "These glyphs are unencumbered"
+FONT_ASCENT 11
+FONT_DESCENT 3
+DEFAULT_CHAR 2
+UNDERLINE_POSITION 3
+RESOLUTION 78
+ENDPROPERTIES
+CHARS 504
+STARTCHAR ascii001
+ENCODING 1
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 3 -8 8
+BITMAP
+c6
+6c
+38
+ENDCHAR
+STARTCHAR ascii002
+ENCODING 2
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+30
+30
+00
+30
+30
+18
+0c
+cc
+cc
+78
+ENDCHAR
+STARTCHAR ascii003
+ENCODING 3
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+7c
+c6
+06
+06
+c6
+c6
+7c
+00
+30
+18
+ENDCHAR
+STARTCHAR ascii004
+ENCODING 4
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 2 -7 8
+BITMAP
+cc
+cc
+ENDCHAR
+STARTCHAR ascii005
+ENCODING 5
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 4 3 -7 8
+BITMAP
+30
+60
+c0
+ENDCHAR
+STARTCHAR ascii006
+ENCODING 6
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 10 10 -10 0
+BITMAP
+e700
+3180
+3180
+ffc0
+3180
+3180
+3180
+3180
+3180
+3180
+ENDCHAR
+STARTCHAR ascii007
+ENCODING 7
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+c0
+60
+60
+e0
+e0
+ENDCHAR
+STARTCHAR ascii0010
+ENCODING 8
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 2 10 -3 0
+BITMAP
+c0
+c0
+00
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR ascii011
+ENCODING 9
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii012
+ENCODING 10
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii013
+ENCODING 11
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 3 -6 8
+BITMAP
+c0
+60
+30
+ENDCHAR
+STARTCHAR ascii014
+ENCODING 12
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii015
+ENCODING 13
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii016
+ENCODING 14
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 2 -7 8
+BITMAP
+f8
+f8
+ENDCHAR
+STARTCHAR ascii017
+ENCODING 15
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 0 0 -16 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii020
+ENCODING 16
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 2 -8 8
+BITMAP
+dc
+76
+ENDCHAR
+STARTCHAR ascii021
+ENCODING 17
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+dce0
+c630
+0630
+dff8
+c630
+c630
+c630
+c630
+c630
+c630
+ENDCHAR
+STARTCHAR ascii022
+ENCODING 18
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+dce0
+c630
+c630
+dff8
+c630
+c630
+c630
+c630
+c630
+c630
+ENDCHAR
+STARTCHAR ascii023
+ENCODING 19
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 16 2 -16 3
+BITMAP
+ffff
+ffff
+ENDCHAR
+STARTCHAR ascii024
+ENCODING 20
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+dc
+c6
+06
+df
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR ascii025
+ENCODING 21
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+dc
+c6
+c6
+df
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR ascii026
+ENCODING 22
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 8 2 -8 3
+BITMAP
+ff
+ff
+ENDCHAR
+STARTCHAR ascii027
+ENCODING 23
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 3 -7 8
+BITMAP
+84
+fc
+78
+ENDCHAR
+STARTCHAR ascii030
+ENCODING 24
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 8 2 -12 3
+BITMAP
+ff
+ff
+ENDCHAR
+STARTCHAR ascii031
+ENCODING 25
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 0 0 -9 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii032
+ENCODING 26
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii033
+ENCODING 27
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii034
+ENCODING 28
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 0 0 -8 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii035
+ENCODING 29
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 2 2 -6 -3
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR ascii036
+ENCODING 30
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 2 -8 8
+BITMAP
+dc
+76
+ENDCHAR
+STARTCHAR ascii037
+ENCODING 31
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 4 -7 7
+BITMAP
+70
+d8
+d8
+70
+ENDCHAR
+STARTCHAR space
+ENCODING 32
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 0 0 -7 10
+BITMAP
+ENDCHAR
+STARTCHAR exclam
+ENCODING 33
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 10 -3 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+00
+c0
+c0
+ENDCHAR
+STARTCHAR quotedbl
+ENCODING 34
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 4 -6 6
+BITMAP
+d8
+d8
+d8
+d8
+ENDCHAR
+STARTCHAR numbersign
+ENCODING 35
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 10 10 -11 0
+BITMAP
+cc00
+cc00
+6600
+ff80
+3300
+3300
+7fc0
+1980
+0cc0
+0cc0
+ENDCHAR
+STARTCHAR dollar
+ENCODING 36
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 12 -8 -1
+BITMAP
+10
+7c
+d6
+d6
+16
+3e
+78
+d0
+d6
+d6
+7c
+10
+ENDCHAR
+STARTCHAR percent
+ENCODING 37
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 12 10 -13 0
+BITMAP
+18e0
+19b0
+0db0
+0ce0
+0600
+0600
+7300
+db00
+d980
+7180
+ENDCHAR
+STARTCHAR ampersand
+ENCODING 38
+SWIDTH 785 0
+DWIDTH -11 0
+BBX 9 10 -10 0
+BITMAP
+0e00
+1b00
+1b00
+0a00
+0e00
+df00
+7180
+3180
+7980
+ef00
+ENDCHAR
+STARTCHAR quoteright
+ENCODING 39
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+e0
+e0
+c0
+c0
+60
+ENDCHAR
+STARTCHAR parenleft
+ENCODING 40
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 12 -5 -2
+BITMAP
+c0
+60
+60
+30
+30
+30
+30
+30
+30
+60
+60
+c0
+ENDCHAR
+STARTCHAR parenright
+ENCODING 41
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 12 -5 -2
+BITMAP
+30
+60
+60
+c0
+c0
+c0
+c0
+c0
+c0
+60
+60
+30
+ENDCHAR
+STARTCHAR asterisk
+ENCODING 42
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 6 -6 5
+BITMAP
+20
+a8
+70
+70
+a8
+20
+ENDCHAR
+STARTCHAR plus
+ENCODING 43
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 8 -9 0
+BITMAP
+18
+18
+18
+ff
+ff
+18
+18
+18
+ENDCHAR
+STARTCHAR comma
+ENCODING 44
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 5 -3 -3
+BITMAP
+c0
+c0
+80
+80
+40
+ENDCHAR
+STARTCHAR hyphen
+ENCODING 45
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 6 2 -8 3
+BITMAP
+fc
+fc
+ENDCHAR
+STARTCHAR period
+ENCODING 46
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 2 -3 0
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR slash
+ENCODING 47
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+c0
+c0
+60
+60
+30
+30
+18
+18
+0c
+0c
+ENDCHAR
+STARTCHAR zero
+ENCODING 48
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+38
+6c
+c6
+c6
+c6
+c6
+c6
+c6
+6c
+38
+ENDCHAR
+STARTCHAR one
+ENCODING 49
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 5 10 -7 0
+BITMAP
+c0
+e0
+f8
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR two
+ENCODING 50
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c0
+60
+30
+18
+0c
+06
+fe
+ENDCHAR
+STARTCHAR three
+ENCODING 51
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c0
+70
+c0
+c0
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR four
+ENCODING 52
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+60
+70
+78
+68
+6c
+66
+66
+fe
+60
+60
+ENDCHAR
+STARTCHAR five
+ENCODING 53
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+fc
+0c
+0c
+7e
+c6
+c6
+c0
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR six
+ENCODING 54
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+78
+cc
+c6
+06
+7e
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR seven
+ENCODING 55
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+fe
+c0
+60
+30
+30
+18
+18
+0c
+0c
+0c
+ENDCHAR
+STARTCHAR eight
+ENCODING 56
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c6
+7c
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR nine
+ENCODING 57
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+fc
+c0
+c6
+66
+3c
+ENDCHAR
+STARTCHAR colon
+ENCODING 58
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 7 -3 0
+BITMAP
+c0
+c0
+00
+00
+00
+c0
+c0
+ENDCHAR
+STARTCHAR semicolon
+ENCODING 59
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 10 -3 -3
+BITMAP
+c0
+c0
+00
+00
+00
+c0
+c0
+80
+80
+40
+ENDCHAR
+STARTCHAR less
+ENCODING 60
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+c0
+60
+30
+18
+0c
+0c
+18
+30
+60
+c0
+ENDCHAR
+STARTCHAR equal
+ENCODING 61
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 5 5 -7 1
+BITMAP
+f8
+f8
+00
+f8
+f8
+ENDCHAR
+STARTCHAR greater
+ENCODING 62
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+0c
+18
+30
+60
+c0
+c0
+60
+30
+18
+0c
+ENDCHAR
+STARTCHAR question
+ENCODING 63
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+78
+cc
+cc
+c0
+60
+30
+30
+00
+30
+30
+ENDCHAR
+STARTCHAR at
+ENCODING 64
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 12 10 -13 0
+BITMAP
+3fc0
+6060
+cf30
+d9b0
+d9b0
+d9b0
+59b0
+3730
+8060
+7fc0
+ENDCHAR
+STARTCHAR A
+ENCODING 65
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+18
+18
+3c
+3c
+24
+66
+7e
+66
+c3
+c3
+ENDCHAR
+STARTCHAR B
+ENCODING 66
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+3e
+66
+66
+66
+7e
+c6
+c6
+c6
+c6
+7e
+ENDCHAR
+STARTCHAR C
+ENCODING 67
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+7c
+c6
+c3
+03
+03
+03
+c3
+c3
+c6
+7c
+ENDCHAR
+STARTCHAR D
+ENCODING 68
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+3f
+63
+c3
+c3
+c3
+c3
+c3
+c3
+63
+3f
+ENDCHAR
+STARTCHAR E
+ENCODING 69
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+fe
+06
+06
+06
+7e
+06
+06
+06
+06
+fe
+ENDCHAR
+STARTCHAR F
+ENCODING 70
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+fe
+06
+06
+06
+7e
+06
+06
+06
+06
+06
+ENDCHAR
+STARTCHAR G
+ENCODING 71
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 10 -9 0
+BITMAP
+7e00
+c300
+c180
+0180
+0180
+f180
+c180
+c180
+e300
+de00
+ENDCHAR
+STARTCHAR H
+ENCODING 72
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+c3
+c3
+ff
+c3
+c3
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR I
+ENCODING 73
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR J
+ENCODING 74
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 10 -6 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+cc
+cc
+78
+ENDCHAR
+STARTCHAR K
+ENCODING 75
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+63
+33
+1b
+0f
+07
+0f
+1b
+33
+63
+c3
+ENDCHAR
+STARTCHAR L
+ENCODING 76
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 10 -6 0
+BITMAP
+0c
+0c
+0c
+0c
+0c
+0c
+0c
+0c
+0c
+fc
+ENDCHAR
+STARTCHAR M
+ENCODING 77
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 11 10 -11 0
+BITMAP
+e0e0
+e0e0
+f1e0
+f1e0
+db60
+db60
+db60
+ce60
+ce60
+c460
+ENDCHAR
+STARTCHAR N
+ENCODING 78
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c7
+c7
+cf
+cf
+db
+db
+f3
+f3
+e3
+ENDCHAR
+STARTCHAR O
+ENCODING 79
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 10 -9 0
+BITMAP
+3e00
+6300
+c180
+c180
+c180
+c180
+c180
+c180
+6300
+3e00
+ENDCHAR
+STARTCHAR P
+ENCODING 80
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+7e
+c6
+c6
+c6
+c6
+7e
+06
+06
+06
+06
+ENDCHAR
+STARTCHAR Q
+ENCODING 81
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 11 -9 -1
+BITMAP
+3e00
+6300
+c180
+c180
+c180
+c180
+c180
+d980
+7300
+7e00
+c000
+ENDCHAR
+STARTCHAR R
+ENCODING 82
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+7f
+c3
+c3
+c3
+7f
+c3
+c3
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR S
+ENCODING 83
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+7c
+c6
+c6
+1e
+7c
+f0
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR T
+ENCODING 84
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+ff
+18
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR U
+ENCODING 85
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+c3
+c3
+c3
+c3
+c3
+c3
+66
+3c
+ENDCHAR
+STARTCHAR V
+ENCODING 86
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+c3
+66
+66
+66
+24
+3c
+18
+18
+ENDCHAR
+STARTCHAR W
+ENCODING 87
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+c218
+c218
+6730
+6730
+6730
+2fa0
+3de0
+38e0
+18c0
+18c0
+ENDCHAR
+STARTCHAR X
+ENCODING 88
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+66
+3c
+18
+18
+3c
+66
+c3
+c3
+ENDCHAR
+STARTCHAR Y
+ENCODING 89
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+66
+66
+3c
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR Z
+ENCODING 90
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+ff
+c0
+60
+30
+18
+18
+0c
+06
+03
+ff
+ENDCHAR
+STARTCHAR braketleft
+ENCODING 91
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 13 -6 -3
+BITMAP
+f8
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+f8
+ENDCHAR
+STARTCHAR backslash
+ENCODING 92
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+0c
+0c
+18
+18
+30
+30
+60
+60
+c0
+c0
+ENDCHAR
+STARTCHAR bracketright
+ENCODING 93
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 13 -6 -3
+BITMAP
+f8
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+f8
+ENDCHAR
+STARTCHAR asciicircum
+ENCODING 94
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 8 -7 1
+BITMAP
+30
+78
+fc
+b4
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR underscore
+ENCODING 95
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 6 -9 2
+BITMAP
+0c
+06
+ff
+ff
+06
+0c
+ENDCHAR
+STARTCHAR quoteleft
+ENCODING 96
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+c0
+60
+60
+e0
+e0
+ENDCHAR
+STARTCHAR a
+ENCODING 97
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+3c
+66
+60
+7c
+66
+66
+dc
+ENDCHAR
+STARTCHAR b
+ENCODING 98
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+06
+06
+06
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+ENDCHAR
+STARTCHAR c
+ENCODING 99
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+06
+06
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR d
+ENCODING 100
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+c0
+c0
+c0
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+ENDCHAR
+STARTCHAR e
+ENCODING 101
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+c6
+fe
+06
+c6
+7c
+ENDCHAR
+STARTCHAR f
+ENCODING 102
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 10 -5 0
+BITMAP
+e0
+30
+30
+f8
+30
+30
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR g
+ENCODING 103
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+c0
+c6
+7c
+ENDCHAR
+STARTCHAR h
+ENCODING 104
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+06
+06
+06
+7e
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR i
+ENCODING 105
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+00
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR j
+ENCODING 106
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 4 12 -4 -2
+BITMAP
+c0
+c0
+00
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+70
+ENDCHAR
+STARTCHAR k
+ENCODING 107
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+06
+06
+06
+66
+36
+1e
+1e
+36
+66
+c6
+ENDCHAR
+STARTCHAR l
+ENCODING 108
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR m
+ENCODING 109
+SWIDTH 785 0
+DWIDTH -11 0
+BBX 10 7 -10 0
+BITMAP
+77c0
+ccc0
+ccc0
+ccc0
+ccc0
+ccc0
+ccc0
+ENDCHAR
+STARTCHAR n
+ENCODING 110
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7e
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR o
+ENCODING 111
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR p
+ENCODING 112
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+06
+06
+06
+ENDCHAR
+STARTCHAR q
+ENCODING 113
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR r
+ENCODING 114
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 7 -5 0
+BITMAP
+f8
+d8
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR s
+ENCODING 115
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+78
+cc
+1c
+78
+e0
+cc
+78
+ENDCHAR
+STARTCHAR t
+ENCODING 116
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 9 -5 0
+BITMAP
+30
+30
+f8
+30
+30
+30
+30
+30
+e0
+ENDCHAR
+STARTCHAR u
+ENCODING 117
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+c6
+c6
+c6
+c6
+c6
+c6
+fc
+ENDCHAR
+STARTCHAR v
+ENCODING 118
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 7 -8 0
+BITMAP
+c3
+c3
+66
+66
+24
+3c
+18
+ENDCHAR
+STARTCHAR w
+ENCODING 119
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 11 7 -11 0
+BITMAP
+c460
+c460
+6ec0
+6ec0
+7bc0
+3180
+3180
+ENDCHAR
+STARTCHAR x
+ENCODING 120
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+cc
+cc
+78
+30
+78
+cc
+cc
+ENDCHAR
+STARTCHAR y
+ENCODING 121
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+c6
+c6
+cc
+6c
+68
+78
+30
+30
+36
+1c
+ENDCHAR
+STARTCHAR z
+ENCODING 122
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+fc
+c0
+60
+30
+18
+0c
+fc
+ENDCHAR
+STARTCHAR braceleft
+ENCODING 123
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 13 -7 -3
+BITMAP
+e0
+30
+30
+30
+30
+30
+1c
+30
+30
+30
+30
+30
+e0
+ENDCHAR
+STARTCHAR bar
+ENCODING 124
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 2 13 -4 -3
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR braceright
+ENCODING 125
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 13 -7 -3
+BITMAP
+1c
+30
+30
+30
+30
+30
+e0
+30
+30
+30
+30
+30
+1c
+ENDCHAR
+STARTCHAR tilda
+ENCODING 126
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 3 -9 3
+BITMAP
+cc
+7e
+33
+ENDCHAR
+STARTCHAR ascii001b
+ENCODING 127
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 3 -8 8
+BITMAP
+38
+6c
+c6
+ENDCHAR
+STARTCHAR ascii002b
+ENCODING 128
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+78
+cc
+cc
+0c
+18
+30
+30
+00
+30
+30
+ENDCHAR
+STARTCHAR ascii003b
+ENCODING 129
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+18
+30
+00
+7c
+c6
+c6
+06
+06
+c6
+7c
+ENDCHAR
+STARTCHAR ascii004b
+ENCODING 130
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 2 -7 8
+BITMAP
+cc
+cc
+ENDCHAR
+STARTCHAR ascii005b
+ENCODING 131
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 4 3 -7 8
+BITMAP
+c0
+60
+30
+ENDCHAR
+STARTCHAR ascii006b
+ENCODING 132
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 10 10 -10 0
+BITMAP
+3180
+3180
+3180
+3180
+3180
+3180
+ffc0
+3180
+3180
+e700
+ENDCHAR
+STARTCHAR ascii007b
+ENCODING 133
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+e0
+e0
+60
+60
+c0
+ENDCHAR
+STARTCHAR ascii0010b
+ENCODING 134
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 2 10 -3 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+00
+c0
+c0
+ENDCHAR
+STARTCHAR ascii011b
+ENCODING 135
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii012b
+ENCODING 136
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii013b
+ENCODING 137
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 3 -6 8
+BITMAP
+30
+60
+c0
+ENDCHAR
+STARTCHAR ascii014b
+ENCODING 138
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii015b
+ENCODING 139
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii016b
+ENCODING 140
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 2 -7 8
+BITMAP
+f8
+f8
+ENDCHAR
+STARTCHAR ascii017b
+ENCODING 141
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 0 0 -16 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii020b
+ENCODING 142
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 2 -8 8
+BITMAP
+76
+dc
+ENDCHAR
+STARTCHAR ascii021b
+ENCODING 143
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+c630
+c630
+c630
+c630
+c630
+c630
+dff8
+0630
+c630
+dce0
+ENDCHAR
+STARTCHAR ascii022b
+ENCODING 144
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+c630
+c630
+c630
+c630
+c630
+c630
+dff8
+c630
+c630
+dce0
+ENDCHAR
+STARTCHAR ascii023b
+ENCODING 145
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 16 2 -16 3
+BITMAP
+ffff
+ffff
+ENDCHAR
+STARTCHAR ascii024b
+ENCODING 146
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c6
+c6
+c6
+c6
+c6
+c6
+df
+06
+c6
+dc
+ENDCHAR
+STARTCHAR ascii025b
+ENCODING 147
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c6
+c6
+c6
+c6
+c6
+c6
+df
+c6
+c6
+dc
+ENDCHAR
+STARTCHAR ascii026b
+ENCODING 148
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 8 2 -8 3
+BITMAP
+ff
+ff
+ENDCHAR
+STARTCHAR ascii027b
+ENCODING 149
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 3 -7 8
+BITMAP
+78
+fc
+84
+ENDCHAR
+STARTCHAR ascii030b
+ENCODING 150
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 8 2 -12 3
+BITMAP
+ff
+ff
+ENDCHAR
+STARTCHAR ascii031b
+ENCODING 151
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 0 0 -9 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii032b
+ENCODING 152
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii033b
+ENCODING 153
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii034b
+ENCODING 154
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 0 0 -8 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii035b
+ENCODING 155
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 2 2 -6 -3
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR ascii036b
+ENCODING 156
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 2 -8 8
+BITMAP
+76
+dc
+ENDCHAR
+STARTCHAR ascii037b
+ENCODING 157
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 4 -7 7
+BITMAP
+70
+d8
+d8
+70
+ENDCHAR
+STARTCHAR spaceb
+ENCODING 158
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 0 0 -7 10
+BITMAP
+ENDCHAR
+STARTCHAR exclamb
+ENCODING 159
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 10 -3 0
+BITMAP
+c0
+c0
+00
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR quotedblb
+ENCODING 160
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 4 -6 6
+BITMAP
+d8
+d8
+d8
+d8
+ENDCHAR
+STARTCHAR numbersignb
+ENCODING 161
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 10 10 -11 0
+BITMAP
+0cc0
+0cc0
+1980
+7fc0
+3300
+3300
+ff80
+6600
+cc00
+cc00
+ENDCHAR
+STARTCHAR dollarb
+ENCODING 162
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 12 -8 -1
+BITMAP
+10
+7c
+d6
+d6
+d0
+78
+3e
+16
+d6
+d6
+7c
+10
+ENDCHAR
+STARTCHAR percentb
+ENCODING 163
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 12 10 -13 0
+BITMAP
+7180
+d980
+db00
+7300
+0600
+0600
+0ce0
+0db0
+19b0
+18e0
+ENDCHAR
+STARTCHAR ampersandb
+ENCODING 164
+SWIDTH 785 0
+DWIDTH -11 0
+BBX 9 10 -10 0
+BITMAP
+ef00
+7980
+3180
+7180
+df00
+0e00
+0a00
+1b00
+1b00
+0e00
+ENDCHAR
+STARTCHAR quoterightb
+ENCODING 165
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+60
+c0
+c0
+e0
+e0
+ENDCHAR
+STARTCHAR parenleftb
+ENCODING 166
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 12 -5 -2
+BITMAP
+c0
+60
+60
+30
+30
+30
+30
+30
+30
+60
+60
+c0
+ENDCHAR
+STARTCHAR parenrightb
+ENCODING 167
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 12 -5 -2
+BITMAP
+30
+60
+60
+c0
+c0
+c0
+c0
+c0
+c0
+60
+60
+30
+ENDCHAR
+STARTCHAR asteriskb
+ENCODING 168
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 6 -6 5
+BITMAP
+20
+a8
+70
+70
+a8
+20
+ENDCHAR
+STARTCHAR plusb
+ENCODING 169
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 8 -9 0
+BITMAP
+18
+18
+18
+ff
+ff
+18
+18
+18
+ENDCHAR
+STARTCHAR commab
+ENCODING 170
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 5 -3 -3
+BITMAP
+40
+80
+80
+c0
+c0
+ENDCHAR
+STARTCHAR hyphenb
+ENCODING 171
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 6 2 -8 3
+BITMAP
+fc
+fc
+ENDCHAR
+STARTCHAR periodb
+ENCODING 172
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 2 -3 0
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR slashb
+ENCODING 173
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+0c
+0c
+18
+18
+30
+30
+60
+60
+c0
+c0
+ENDCHAR
+STARTCHAR zerob
+ENCODING 174
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+38
+6c
+c6
+c6
+c6
+c6
+c6
+c6
+6c
+38
+ENDCHAR
+STARTCHAR oneb
+ENCODING 175
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 5 10 -7 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+f8
+e0
+c0
+ENDCHAR
+STARTCHAR twob
+ENCODING 176
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+fe
+06
+0c
+18
+30
+60
+c0
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR threeb
+ENCODING 177
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c0
+c0
+70
+c0
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR fourb
+ENCODING 178
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+60
+60
+fe
+66
+66
+6c
+68
+78
+70
+60
+ENDCHAR
+STARTCHAR fiveb
+ENCODING 179
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c0
+c6
+c6
+7e
+0c
+0c
+fc
+ENDCHAR
+STARTCHAR sixb
+ENCODING 180
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+7e
+06
+c6
+cc
+78
+ENDCHAR
+STARTCHAR sevenb
+ENCODING 181
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+0c
+0c
+0c
+18
+18
+30
+30
+60
+c0
+fe
+ENDCHAR
+STARTCHAR eightb
+ENCODING 182
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+7c
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR nineb
+ENCODING 183
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+3c
+66
+c6
+c0
+fc
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR colonb
+ENCODING 184
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 7 -3 0
+BITMAP
+c0
+c0
+00
+00
+00
+c0
+c0
+ENDCHAR
+STARTCHAR semicolonb
+ENCODING 185
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 10 -3 -3
+BITMAP
+40
+80
+80
+c0
+c0
+00
+00
+00
+c0
+c0
+ENDCHAR
+STARTCHAR lessb
+ENCODING 186
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+c0
+60
+30
+18
+0c
+0c
+18
+30
+60
+c0
+ENDCHAR
+STARTCHAR equalb
+ENCODING 187
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 5 5 -7 1
+BITMAP
+f8
+f8
+00
+f8
+f8
+ENDCHAR
+STARTCHAR greaterb
+ENCODING 188
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+0c
+18
+30
+60
+c0
+c0
+60
+30
+18
+0c
+ENDCHAR
+STARTCHAR questionb
+ENCODING 189
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+30
+30
+00
+30
+30
+60
+c0
+cc
+cc
+78
+ENDCHAR
+STARTCHAR atb
+ENCODING 190
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 12 10 -13 0
+BITMAP
+7fc0
+8060
+3730
+59b0
+d9b0
+d9b0
+d9b0
+cf30
+6060
+3fc0
+ENDCHAR
+STARTCHAR Ab
+ENCODING 191
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+66
+7e
+66
+24
+3c
+3c
+18
+18
+ENDCHAR
+STARTCHAR Bb
+ENCODING 192
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+7e
+c6
+c6
+c6
+c6
+7e
+66
+66
+66
+3e
+ENDCHAR
+STARTCHAR Cb
+ENCODING 193
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+7c
+c6
+c3
+c3
+03
+03
+03
+c3
+c6
+7c
+ENDCHAR
+STARTCHAR Db
+ENCODING 194
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+3f
+63
+c3
+c3
+c3
+c3
+c3
+c3
+63
+3f
+ENDCHAR
+STARTCHAR Eb
+ENCODING 195
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+fe
+06
+06
+06
+06
+7e
+06
+06
+06
+fe
+ENDCHAR
+STARTCHAR Fb
+ENCODING 196
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+06
+06
+06
+06
+06
+7e
+06
+06
+06
+fe
+ENDCHAR
+STARTCHAR Gb
+ENCODING 197
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 10 -9 0
+BITMAP
+de00
+e300
+c180
+c180
+f180
+0180
+0180
+c180
+c300
+7e00
+ENDCHAR
+STARTCHAR Hb
+ENCODING 198
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+c3
+c3
+c3
+ff
+c3
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR Ib
+ENCODING 199
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR Jb
+ENCODING 200
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 10 -6 0
+BITMAP
+78
+cc
+cc
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR Kb
+ENCODING 201
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+63
+33
+1b
+0f
+07
+0f
+1b
+33
+63
+ENDCHAR
+STARTCHAR Lb
+ENCODING 202
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 10 -6 0
+BITMAP
+fc
+0c
+0c
+0c
+0c
+0c
+0c
+0c
+0c
+0c
+ENDCHAR
+STARTCHAR Mb
+ENCODING 203
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 11 10 -11 0
+BITMAP
+c460
+ce60
+ce60
+db60
+db60
+db60
+f1e0
+f1e0
+e0e0
+e0e0
+ENDCHAR
+STARTCHAR Nb
+ENCODING 204
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+e3
+f3
+f3
+db
+db
+cf
+cf
+c7
+c7
+c3
+ENDCHAR
+STARTCHAR Ob
+ENCODING 205
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 10 -9 0
+BITMAP
+3e00
+6300
+c180
+c180
+c180
+c180
+c180
+c180
+6300
+3e00
+ENDCHAR
+STARTCHAR Pb
+ENCODING 206
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+06
+06
+06
+06
+7e
+c6
+c6
+c6
+c6
+7e
+ENDCHAR
+STARTCHAR Qb
+ENCODING 207
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 11 -9 -1
+BITMAP
+c000
+7e00
+7300
+d980
+c180
+c180
+c180
+c180
+c180
+6300
+3e00
+ENDCHAR
+STARTCHAR Rb
+ENCODING 208
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+c3
+c3
+c3
+7f
+c3
+c3
+c3
+7f
+ENDCHAR
+STARTCHAR Sb
+ENCODING 209
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+7c
+c6
+c6
+c6
+f0
+7c
+1e
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR Tb
+ENCODING 210
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+18
+18
+ff
+ENDCHAR
+STARTCHAR Ub
+ENCODING 211
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+3c
+66
+c3
+c3
+c3
+c3
+c3
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR Vb
+ENCODING 212
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+18
+18
+3c
+24
+66
+66
+66
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR Wb
+ENCODING 213
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+18c0
+18c0
+38e0
+3de0
+2fa0
+6730
+6730
+6730
+c218
+c218
+ENDCHAR
+STARTCHAR Xb
+ENCODING 214
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+66
+3c
+18
+18
+3c
+66
+c3
+c3
+ENDCHAR
+STARTCHAR Yb
+ENCODING 215
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+18
+18
+18
+18
+18
+3c
+66
+66
+c3
+c3
+ENDCHAR
+STARTCHAR Zb
+ENCODING 216
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+ff
+03
+06
+0c
+18
+18
+30
+60
+c0
+ff
+ENDCHAR
+STARTCHAR braketleftb
+ENCODING 217
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 13 -6 -3
+BITMAP
+f8
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+f8
+ENDCHAR
+STARTCHAR backslashb
+ENCODING 218
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+c0
+c0
+60
+60
+30
+30
+18
+18
+0c
+0c
+ENDCHAR
+STARTCHAR bracketrightb
+ENCODING 219
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 13 -6 -3
+BITMAP
+f8
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+f8
+ENDCHAR
+STARTCHAR asciicircumb
+ENCODING 220
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 8 -7 1
+BITMAP
+30
+30
+30
+30
+b4
+fc
+78
+30
+ENDCHAR
+STARTCHAR underscoreb
+ENCODING 221
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 6 -9 2
+BITMAP
+0c
+06
+ff
+ff
+06
+0c
+ENDCHAR
+STARTCHAR quoteleftb
+ENCODING 222
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+e0
+e0
+60
+60
+c0
+ENDCHAR
+STARTCHAR ab
+ENCODING 223
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+dc
+66
+66
+7c
+60
+66
+3c
+ENDCHAR
+STARTCHAR bb
+ENCODING 224
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+06
+06
+06
+ENDCHAR
+STARTCHAR cb
+ENCODING 225
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+c6
+06
+06
+c6
+7c
+ENDCHAR
+STARTCHAR db
+ENCODING 226
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR eb
+ENCODING 227
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+06
+fe
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR fb
+ENCODING 228
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 10 -5 0
+BITMAP
+30
+30
+30
+30
+30
+30
+f8
+30
+30
+e0
+ENDCHAR
+STARTCHAR gb
+ENCODING 229
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+7c
+c6
+c0
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+ENDCHAR
+STARTCHAR hb
+ENCODING 230
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+c6
+c6
+c6
+c6
+c6
+c6
+7e
+06
+06
+06
+ENDCHAR
+STARTCHAR ib
+ENCODING 231
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+00
+c0
+c0
+ENDCHAR
+STARTCHAR jb
+ENCODING 232
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 4 12 -4 -2
+BITMAP
+70
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+00
+c0
+c0
+ENDCHAR
+STARTCHAR kb
+ENCODING 233
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+c6
+66
+36
+1e
+1e
+36
+66
+06
+06
+06
+ENDCHAR
+STARTCHAR lb
+ENCODING 234
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR mb
+ENCODING 235
+SWIDTH 785 0
+DWIDTH -11 0
+BBX 10 7 -10 0
+BITMAP
+ccc0
+ccc0
+ccc0
+ccc0
+ccc0
+ccc0
+77c0
+ENDCHAR
+STARTCHAR nb
+ENCODING 236
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+c6
+c6
+c6
+c6
+c6
+c6
+7e
+ENDCHAR
+STARTCHAR ob
+ENCODING 237
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR pb
+ENCODING 238
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+06
+06
+06
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+ENDCHAR
+STARTCHAR qb
+ENCODING 239
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+c0
+c0
+c0
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+ENDCHAR
+STARTCHAR rb
+ENCODING 240
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 7 -5 0
+BITMAP
+18
+18
+18
+18
+18
+d8
+f8
+ENDCHAR
+STARTCHAR sb
+ENCODING 241
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+78
+cc
+e0
+78
+1c
+cc
+78
+ENDCHAR
+STARTCHAR tb
+ENCODING 242
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 9 -5 0
+BITMAP
+e0
+30
+30
+30
+30
+30
+f8
+30
+30
+ENDCHAR
+STARTCHAR ub
+ENCODING 243
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+fc
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR vb
+ENCODING 244
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 7 -8 0
+BITMAP
+18
+3c
+24
+66
+66
+c3
+c3
+ENDCHAR
+STARTCHAR wb
+ENCODING 245
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 11 7 -11 0
+BITMAP
+3180
+3180
+7bc0
+6ec0
+6ec0
+c460
+c460
+ENDCHAR
+STARTCHAR xb
+ENCODING 246
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+cc
+cc
+78
+30
+78
+cc
+cc
+ENDCHAR
+STARTCHAR yb
+ENCODING 247
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+1c
+36
+30
+30
+78
+68
+6c
+cc
+c6
+c6
+ENDCHAR
+STARTCHAR zb
+ENCODING 248
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+fc
+0c
+18
+30
+60
+c0
+fc
+ENDCHAR
+STARTCHAR braceleftb
+ENCODING 249
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 13 -7 -3
+BITMAP
+e0
+30
+30
+30
+30
+30
+1c
+30
+30
+30
+30
+30
+e0
+ENDCHAR
+STARTCHAR barb
+ENCODING 250
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 2 13 -4 -3
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR bracerightb
+ENCODING 251
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 13 -7 -3
+BITMAP
+1c
+30
+30
+30
+30
+30
+e0
+30
+30
+30
+30
+30
+1c
+ENDCHAR
+STARTCHAR tildab
+ENCODING 252
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 3 -9 3
+BITMAP
+33
+7e
+cc
+ENDCHAR
+STARTCHAR ascii001c
+ENCODING 253
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 3 -8 8
+BITMAP
+c6
+6c
+38
+ENDCHAR
+STARTCHAR ascii002c
+ENCODING 254
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+30
+30
+00
+30
+30
+60
+c0
+cc
+cc
+78
+ENDCHAR
+STARTCHAR ascii003c
+ENCODING 255
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+7c
+c6
+c0
+c0
+c6
+c6
+7c
+00
+18
+30
+ENDCHAR
+STARTCHAR ascii004c
+ENCODING 256
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 2 -7 8
+BITMAP
+cc
+cc
+ENDCHAR
+STARTCHAR ascii005c
+ENCODING 257
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 4 3 -7 8
+BITMAP
+c0
+60
+30
+ENDCHAR
+STARTCHAR ascii006c
+ENCODING 258
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 10 10 -10 0
+BITMAP
+39c0
+6300
+6300
+ffc0
+6300
+6300
+6300
+6300
+6300
+6300
+ENDCHAR
+STARTCHAR ascii007c
+ENCODING 259
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+60
+c0
+c0
+e0
+e0
+ENDCHAR
+STARTCHAR ascii0010c
+ENCODING 260
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 2 10 -3 0
+BITMAP
+c0
+c0
+00
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR ascii011c
+ENCODING 261
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii012c
+ENCODING 262
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii013c
+ENCODING 263
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 3 -6 8
+BITMAP
+30
+60
+c0
+ENDCHAR
+STARTCHAR ascii014c
+ENCODING 264
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii015c
+ENCODING 265
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii016c
+ENCODING 266
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 2 -7 8
+BITMAP
+f8
+f8
+ENDCHAR
+STARTCHAR ascii017c
+ENCODING 267
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 0 0 -16 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii020c
+ENCODING 268
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 2 -8 8
+BITMAP
+76
+dc
+ENDCHAR
+STARTCHAR ascii021c
+ENCODING 269
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+39d8
+6318
+6300
+ffd8
+6318
+6318
+6318
+6318
+6318
+6318
+ENDCHAR
+STARTCHAR ascii022c
+ENCODING 270
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+39d8
+6318
+6318
+ffd8
+6318
+6318
+6318
+6318
+6318
+6318
+ENDCHAR
+STARTCHAR ascii023c
+ENCODING 271
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 16 2 -16 3
+BITMAP
+ffff
+ffff
+ENDCHAR
+STARTCHAR ascii024c
+ENCODING 272
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+3b
+63
+60
+fb
+63
+63
+63
+63
+63
+63
+ENDCHAR
+STARTCHAR ascii025c
+ENCODING 273
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+3b
+63
+63
+fb
+63
+63
+63
+63
+63
+63
+ENDCHAR
+STARTCHAR ascii026c
+ENCODING 274
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 8 2 -8 3
+BITMAP
+ff
+ff
+ENDCHAR
+STARTCHAR ascii027c
+ENCODING 275
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 3 -7 8
+BITMAP
+84
+fc
+78
+ENDCHAR
+STARTCHAR ascii030c
+ENCODING 276
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 8 2 -12 3
+BITMAP
+ff
+ff
+ENDCHAR
+STARTCHAR ascii031c
+ENCODING 277
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 0 0 -9 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii032c
+ENCODING 278
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii033c
+ENCODING 279
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii034c
+ENCODING 280
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 0 0 -8 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii035c
+ENCODING 281
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 2 2 -6 -3
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR ascii036c
+ENCODING 282
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 2 -8 8
+BITMAP
+76
+dc
+ENDCHAR
+STARTCHAR ascii037c
+ENCODING 283
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 4 -7 7
+BITMAP
+70
+d8
+d8
+70
+ENDCHAR
+STARTCHAR spacec
+ENCODING 284
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 0 0 -7 10
+BITMAP
+ENDCHAR
+STARTCHAR exclamc
+ENCODING 285
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 10 -3 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+00
+c0
+c0
+ENDCHAR
+STARTCHAR quotedblc
+ENCODING 286
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 4 -6 6
+BITMAP
+d8
+d8
+d8
+d8
+ENDCHAR
+STARTCHAR numbersignc
+ENCODING 287
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 10 10 -11 0
+BITMAP
+0cc0
+0cc0
+1980
+7fc0
+3300
+3300
+ff80
+6600
+cc00
+cc00
+ENDCHAR
+STARTCHAR dollarc
+ENCODING 288
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 12 -8 -1
+BITMAP
+10
+7c
+d6
+d6
+d0
+f8
+3c
+16
+d6
+d6
+7c
+10
+ENDCHAR
+STARTCHAR percentc
+ENCODING 289
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 12 10 -13 0
+BITMAP
+7180
+d980
+db00
+7300
+0600
+0600
+0ce0
+0db0
+19b0
+18e0
+ENDCHAR
+STARTCHAR ampersandc
+ENCODING 290
+SWIDTH 785 0
+DWIDTH -11 0
+BBX 9 10 -10 0
+BITMAP
+3800
+6c00
+6c00
+2800
+3800
+7d80
+c700
+c600
+cf00
+7b80
+ENDCHAR
+STARTCHAR quoterightc
+ENCODING 291
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+e0
+e0
+60
+60
+c0
+ENDCHAR
+STARTCHAR parenleftc
+ENCODING 292
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 12 -5 -2
+BITMAP
+30
+60
+60
+c0
+c0
+c0
+c0
+c0
+c0
+60
+60
+30
+ENDCHAR
+STARTCHAR parenrightc
+ENCODING 293
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 12 -5 -2
+BITMAP
+c0
+60
+60
+30
+30
+30
+30
+30
+30
+60
+60
+c0
+ENDCHAR
+STARTCHAR asteriskc
+ENCODING 294
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 6 -6 5
+BITMAP
+20
+a8
+70
+70
+a8
+20
+ENDCHAR
+STARTCHAR plusc
+ENCODING 295
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 8 -9 0
+BITMAP
+18
+18
+18
+ff
+ff
+18
+18
+18
+ENDCHAR
+STARTCHAR commac
+ENCODING 296
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 5 -3 -3
+BITMAP
+c0
+c0
+40
+40
+80
+ENDCHAR
+STARTCHAR hyphenc
+ENCODING 297
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 6 2 -8 3
+BITMAP
+fc
+fc
+ENDCHAR
+STARTCHAR periodc
+ENCODING 298
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 2 -3 0
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR slashc
+ENCODING 299
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+0c
+0c
+18
+18
+30
+30
+60
+60
+c0
+c0
+ENDCHAR
+STARTCHAR zeroc
+ENCODING 300
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+38
+6c
+c6
+c6
+c6
+c6
+c6
+c6
+6c
+38
+ENDCHAR
+STARTCHAR onec
+ENCODING 301
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 5 10 -7 0
+BITMAP
+18
+38
+f8
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR twoc
+ENCODING 302
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+06
+0c
+18
+30
+60
+c0
+fe
+ENDCHAR
+STARTCHAR threec
+ENCODING 303
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+06
+1c
+06
+06
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR fourc
+ENCODING 304
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+0c
+1c
+3c
+2c
+6c
+cc
+cc
+fe
+0c
+0c
+ENDCHAR
+STARTCHAR fivec
+ENCODING 305
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7e
+60
+60
+fc
+c6
+c6
+06
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR sixc
+ENCODING 306
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+3c
+66
+c6
+c0
+fc
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR sevenc
+ENCODING 307
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+fe
+06
+0c
+18
+18
+30
+30
+60
+60
+60
+ENDCHAR
+STARTCHAR eightc
+ENCODING 308
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c6
+7c
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR ninec
+ENCODING 309
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+7e
+06
+c6
+cc
+78
+ENDCHAR
+STARTCHAR colonc
+ENCODING 310
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 7 -3 0
+BITMAP
+c0
+c0
+00
+00
+00
+c0
+c0
+ENDCHAR
+STARTCHAR semicolonc
+ENCODING 311
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 10 -3 -3
+BITMAP
+c0
+c0
+00
+00
+00
+c0
+c0
+40
+40
+80
+ENDCHAR
+STARTCHAR lessc
+ENCODING 312
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+0c
+18
+30
+60
+c0
+c0
+60
+30
+18
+0c
+ENDCHAR
+STARTCHAR equalc
+ENCODING 313
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 5 5 -7 1
+BITMAP
+f8
+f8
+00
+f8
+f8
+ENDCHAR
+STARTCHAR greaterc
+ENCODING 314
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+c0
+60
+30
+18
+0c
+0c
+18
+30
+60
+c0
+ENDCHAR
+STARTCHAR questionc
+ENCODING 315
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+78
+cc
+cc
+0c
+18
+30
+30
+00
+30
+30
+ENDCHAR
+STARTCHAR atc
+ENCODING 316
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 12 10 -13 0
+BITMAP
+3fc0
+6060
+cf30
+d9b0
+d9b0
+d9b0
+d9a0
+cec0
+6010
+3fe0
+ENDCHAR
+STARTCHAR Ac
+ENCODING 317
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+18
+18
+3c
+3c
+24
+66
+7e
+66
+c3
+c3
+ENDCHAR
+STARTCHAR Bc
+ENCODING 318
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+f8
+cc
+cc
+cc
+fc
+c6
+c6
+c6
+c6
+fc
+ENDCHAR
+STARTCHAR Cc
+ENCODING 319
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+3e
+63
+c3
+c0
+c0
+c0
+c3
+c3
+63
+3e
+ENDCHAR
+STARTCHAR Dc
+ENCODING 320
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+fc
+c6
+c3
+c3
+c3
+c3
+c3
+c3
+c6
+fc
+ENDCHAR
+STARTCHAR Ec
+ENCODING 321
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+fe
+c0
+c0
+c0
+fc
+c0
+c0
+c0
+c0
+fe
+ENDCHAR
+STARTCHAR Fc
+ENCODING 322
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+fe
+c0
+c0
+c0
+fc
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR Gc
+ENCODING 323
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 10 -9 0
+BITMAP
+3f00
+6180
+c180
+c000
+c000
+c780
+c180
+c180
+6380
+3d80
+ENDCHAR
+STARTCHAR Hc
+ENCODING 324
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+c3
+c3
+ff
+c3
+c3
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR Ic
+ENCODING 325
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR Jc
+ENCODING 326
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 10 -6 0
+BITMAP
+0c
+0c
+0c
+0c
+0c
+0c
+0c
+cc
+cc
+78
+ENDCHAR
+STARTCHAR Kc
+ENCODING 327
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c6
+cc
+d8
+f0
+e0
+f0
+d8
+cc
+c6
+c3
+ENDCHAR
+STARTCHAR Lc
+ENCODING 328
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 10 -6 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+fc
+ENDCHAR
+STARTCHAR Mc
+ENCODING 329
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 11 10 -11 0
+BITMAP
+e0e0
+e0e0
+f1e0
+f1e0
+db60
+db60
+db60
+ce60
+ce60
+c460
+ENDCHAR
+STARTCHAR Nc
+ENCODING 330
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+e3
+e3
+f3
+f3
+db
+db
+cf
+cf
+c7
+ENDCHAR
+STARTCHAR Oc
+ENCODING 331
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 10 -9 0
+BITMAP
+3e00
+6300
+c180
+c180
+c180
+c180
+c180
+c180
+6300
+3e00
+ENDCHAR
+STARTCHAR Pc
+ENCODING 332
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+fc
+c6
+c6
+c6
+c6
+fc
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR Qc
+ENCODING 333
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 11 -9 -1
+BITMAP
+3e00
+6300
+c180
+c180
+c180
+c180
+c180
+cd80
+6700
+3f00
+0180
+ENDCHAR
+STARTCHAR Rc
+ENCODING 334
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+fe
+c3
+c3
+c3
+fe
+c3
+c3
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR Sc
+ENCODING 335
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+7c
+c6
+c6
+f0
+7c
+1e
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR Tc
+ENCODING 336
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+ff
+18
+18
+18
+18
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR Uc
+ENCODING 337
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+c3
+c3
+c3
+c3
+c3
+c3
+66
+3c
+ENDCHAR
+STARTCHAR Vc
+ENCODING 338
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+c3
+66
+66
+66
+24
+3c
+18
+18
+ENDCHAR
+STARTCHAR Wc
+ENCODING 339
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+c218
+c218
+6730
+6730
+6730
+2fa0
+3de0
+38e0
+18c0
+18c0
+ENDCHAR
+STARTCHAR Xc
+ENCODING 340
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+66
+3c
+18
+18
+3c
+66
+c3
+c3
+ENDCHAR
+STARTCHAR Yc
+ENCODING 341
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+66
+66
+3c
+18
+18
+18
+18
+18
+ENDCHAR
+STARTCHAR Zc
+ENCODING 342
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+ff
+03
+06
+0c
+18
+18
+30
+60
+c0
+ff
+ENDCHAR
+STARTCHAR braketleftc
+ENCODING 343
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 13 -6 -3
+BITMAP
+f8
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+f8
+ENDCHAR
+STARTCHAR backslashc
+ENCODING 344
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+c0
+c0
+60
+60
+30
+30
+18
+18
+0c
+0c
+ENDCHAR
+STARTCHAR bracketrightc
+ENCODING 345
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 13 -6 -3
+BITMAP
+f8
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+f8
+ENDCHAR
+STARTCHAR asciicircumc
+ENCODING 346
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 8 -7 1
+BITMAP
+30
+78
+fc
+b4
+30
+30
+30
+30
+ENDCHAR
+STARTCHAR underscorec
+ENCODING 347
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 6 -9 2
+BITMAP
+30
+60
+ff
+ff
+60
+30
+ENDCHAR
+STARTCHAR quoteleftc
+ENCODING 348
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+60
+c0
+c0
+e0
+e0
+ENDCHAR
+STARTCHAR ac
+ENCODING 349
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+78
+cc
+0c
+7c
+cc
+cc
+76
+ENDCHAR
+STARTCHAR bc
+ENCODING 350
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+c0
+c0
+c0
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+ENDCHAR
+STARTCHAR cc
+ENCODING 351
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+c0
+c0
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR dc
+ENCODING 352
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+06
+06
+06
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+ENDCHAR
+STARTCHAR ec
+ENCODING 353
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+c6
+fe
+c0
+c6
+7c
+ENDCHAR
+STARTCHAR fc
+ENCODING 354
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 10 -5 0
+BITMAP
+38
+60
+60
+f8
+60
+60
+60
+60
+60
+60
+ENDCHAR
+STARTCHAR gc
+ENCODING 355
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+06
+c6
+7c
+ENDCHAR
+STARTCHAR hc
+ENCODING 356
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+c0
+c0
+c0
+fc
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR ic
+ENCODING 357
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+00
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR jc
+ENCODING 358
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 4 12 -4 -2
+BITMAP
+30
+30
+00
+30
+30
+30
+30
+30
+30
+30
+30
+e0
+ENDCHAR
+STARTCHAR kc
+ENCODING 359
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+c0
+c0
+c0
+cc
+d8
+f0
+f0
+d8
+cc
+c6
+ENDCHAR
+STARTCHAR lc
+ENCODING 360
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR mc
+ENCODING 361
+SWIDTH 785 0
+DWIDTH -11 0
+BBX 10 7 -10 0
+BITMAP
+fb80
+ccc0
+ccc0
+ccc0
+ccc0
+ccc0
+ccc0
+ENDCHAR
+STARTCHAR nc
+ENCODING 362
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+fc
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR oc
+ENCODING 363
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR pc
+ENCODING 364
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR qc
+ENCODING 365
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+06
+06
+06
+ENDCHAR
+STARTCHAR rc
+ENCODING 366
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 7 -5 0
+BITMAP
+f8
+d8
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR sc
+ENCODING 367
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+78
+cc
+e0
+78
+1c
+cc
+78
+ENDCHAR
+STARTCHAR tc
+ENCODING 368
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 9 -5 0
+BITMAP
+60
+60
+f8
+60
+60
+60
+60
+60
+38
+ENDCHAR
+STARTCHAR uc
+ENCODING 369
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+c6
+c6
+c6
+c6
+c6
+c6
+7e
+ENDCHAR
+STARTCHAR vc
+ENCODING 370
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 7 -8 0
+BITMAP
+c3
+c3
+66
+66
+24
+3c
+18
+ENDCHAR
+STARTCHAR wc
+ENCODING 371
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 11 7 -11 0
+BITMAP
+c460
+c460
+6ec0
+6ec0
+7bc0
+3180
+3180
+ENDCHAR
+STARTCHAR xc
+ENCODING 372
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+cc
+cc
+78
+30
+78
+cc
+cc
+ENDCHAR
+STARTCHAR yc
+ENCODING 373
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+c6
+c6
+66
+6c
+2c
+3c
+18
+18
+d8
+70
+ENDCHAR
+STARTCHAR zc
+ENCODING 374
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+fc
+0c
+18
+30
+60
+c0
+fc
+ENDCHAR
+STARTCHAR braceleftc
+ENCODING 375
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 13 -7 -3
+BITMAP
+1c
+30
+30
+30
+30
+30
+e0
+30
+30
+30
+30
+30
+1c
+ENDCHAR
+STARTCHAR barc
+ENCODING 376
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 2 13 -4 -3
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR bracerightc
+ENCODING 377
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 13 -7 -3
+BITMAP
+e0
+30
+30
+30
+30
+30
+1c
+30
+30
+30
+30
+30
+e0
+ENDCHAR
+STARTCHAR tildac
+ENCODING 378
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 3 -9 3
+BITMAP
+33
+7e
+cc
+ENDCHAR
+STARTCHAR ascii001d
+ENCODING 379
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 3 -8 8
+BITMAP
+38
+6c
+c6
+ENDCHAR
+STARTCHAR ascii002d
+ENCODING 380
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+78
+cc
+cc
+c0
+60
+30
+30
+00
+30
+30
+ENDCHAR
+STARTCHAR ascii003d
+ENCODING 381
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+30
+18
+00
+7c
+c6
+c6
+c0
+c0
+c6
+7c
+ENDCHAR
+STARTCHAR ascii004d
+ENCODING 382
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 2 -7 8
+BITMAP
+cc
+cc
+ENDCHAR
+STARTCHAR ascii005d
+ENCODING 383
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 4 3 -7 8
+BITMAP
+30
+60
+c0
+ENDCHAR
+STARTCHAR ascii006d
+ENCODING 384
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 10 10 -10 0
+BITMAP
+6300
+6300
+6300
+6300
+6300
+6300
+ffc0
+6300
+6300
+39c0
+ENDCHAR
+STARTCHAR ascii007d
+ENCODING 385
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+e0
+e0
+c0
+c0
+60
+ENDCHAR
+STARTCHAR ascii0010d
+ENCODING 386
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 2 10 -3 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+00
+c0
+c0
+ENDCHAR
+STARTCHAR ascii011d
+ENCODING 387
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii012d
+ENCODING 388
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii013d
+ENCODING 389
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 3 -6 8
+BITMAP
+c0
+60
+30
+ENDCHAR
+STARTCHAR ascii014d
+ENCODING 390
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii015d
+ENCODING 391
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii016d
+ENCODING 392
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 2 -7 8
+BITMAP
+f8
+f8
+ENDCHAR
+STARTCHAR ascii017d
+ENCODING 393
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 0 0 -16 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii020d
+ENCODING 394
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 2 -8 8
+BITMAP
+dc
+76
+ENDCHAR
+STARTCHAR ascii021d
+ENCODING 395
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+6318
+6318
+6318
+6318
+6318
+6318
+ffd8
+6300
+6318
+39d8
+ENDCHAR
+STARTCHAR ascii022d
+ENCODING 396
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+6318
+6318
+6318
+6318
+6318
+6318
+ffd8
+6318
+6318
+39d8
+ENDCHAR
+STARTCHAR ascii023d
+ENCODING 397
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 16 2 -16 3
+BITMAP
+ffff
+ffff
+ENDCHAR
+STARTCHAR ascii024d
+ENCODING 398
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+63
+63
+63
+63
+63
+63
+fb
+60
+63
+3b
+ENDCHAR
+STARTCHAR ascii025d
+ENCODING 399
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+63
+63
+63
+63
+63
+63
+fb
+63
+63
+3b
+ENDCHAR
+STARTCHAR ascii026d
+ENCODING 400
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 8 2 -8 3
+BITMAP
+ff
+ff
+ENDCHAR
+STARTCHAR ascii027d
+ENCODING 401
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 3 -7 8
+BITMAP
+78
+fc
+84
+ENDCHAR
+STARTCHAR ascii030d
+ENCODING 402
+SWIDTH 1142 0
+DWIDTH -16 0
+BBX 8 2 -12 3
+BITMAP
+ff
+ff
+ENDCHAR
+STARTCHAR ascii031d
+ENCODING 403
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 0 0 -9 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii032d
+ENCODING 404
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii033d
+ENCODING 405
+SWIDTH 0 0
+DWIDTH 0 0
+COMMENT BBX 1 0 0 10 RSB <= CHAR_WIDTH to be a good font
+BBX 0 0 0 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii034d
+ENCODING 406
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 0 0 -8 10
+BITMAP
+ENDCHAR
+STARTCHAR ascii035d
+ENCODING 407
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 2 2 -6 -3
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR ascii036d
+ENCODING 408
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 2 -8 8
+BITMAP
+dc
+76
+ENDCHAR
+STARTCHAR ascii037d
+ENCODING 409
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 4 -7 7
+BITMAP
+70
+d8
+d8
+70
+ENDCHAR
+STARTCHAR spaced
+ENCODING 410
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 0 0 -7 10
+BITMAP
+ENDCHAR
+STARTCHAR exclamd
+ENCODING 411
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 10 -3 0
+BITMAP
+c0
+c0
+00
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR quotedbld
+ENCODING 412
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 4 -6 6
+BITMAP
+d8
+d8
+d8
+d8
+ENDCHAR
+STARTCHAR numbersignd
+ENCODING 413
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 10 10 -11 0
+BITMAP
+cc00
+cc00
+6600
+ff80
+3300
+3300
+7fc0
+1980
+0cc0
+0cc0
+ENDCHAR
+STARTCHAR dollard
+ENCODING 414
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 12 -8 -1
+BITMAP
+10
+7c
+d6
+d6
+16
+3c
+f8
+d0
+d6
+d6
+7c
+10
+ENDCHAR
+STARTCHAR percentd
+ENCODING 415
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 12 10 -13 0
+BITMAP
+18e0
+19b0
+0db0
+0ce0
+0600
+0600
+7300
+db00
+d980
+7180
+ENDCHAR
+STARTCHAR ampersandd
+ENCODING 416
+SWIDTH 785 0
+DWIDTH -11 0
+BBX 9 10 -10 0
+BITMAP
+7b80
+cf00
+c600
+c700
+7d80
+3800
+2800
+6c00
+6c00
+3800
+ENDCHAR
+STARTCHAR quoterightd
+ENCODING 417
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+c0
+60
+60
+e0
+e0
+ENDCHAR
+STARTCHAR parenleftd
+ENCODING 418
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 12 -5 -2
+BITMAP
+30
+60
+60
+c0
+c0
+c0
+c0
+c0
+c0
+60
+60
+30
+ENDCHAR
+STARTCHAR parenrightd
+ENCODING 419
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 4 12 -5 -2
+BITMAP
+c0
+60
+60
+30
+30
+30
+30
+30
+30
+60
+60
+c0
+ENDCHAR
+STARTCHAR asteriskd
+ENCODING 420
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 6 -6 5
+BITMAP
+20
+a8
+70
+70
+a8
+20
+ENDCHAR
+STARTCHAR plusd
+ENCODING 421
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 8 -9 0
+BITMAP
+18
+18
+18
+ff
+ff
+18
+18
+18
+ENDCHAR
+STARTCHAR commad
+ENCODING 422
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 5 -3 -3
+BITMAP
+80
+40
+40
+c0
+c0
+ENDCHAR
+STARTCHAR hyphend
+ENCODING 423
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 6 2 -8 3
+BITMAP
+fc
+fc
+ENDCHAR
+STARTCHAR periodd
+ENCODING 424
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 2 -3 0
+BITMAP
+c0
+c0
+ENDCHAR
+STARTCHAR slashd
+ENCODING 425
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+c0
+c0
+60
+60
+30
+30
+18
+18
+0c
+0c
+ENDCHAR
+STARTCHAR zerod
+ENCODING 426
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+38
+6c
+c6
+c6
+c6
+c6
+c6
+c6
+6c
+38
+ENDCHAR
+STARTCHAR oned
+ENCODING 427
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 5 10 -7 0
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+f8
+38
+18
+ENDCHAR
+STARTCHAR twod
+ENCODING 428
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+fe
+c0
+60
+30
+18
+0c
+06
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR threed
+ENCODING 429
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+06
+06
+1c
+06
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR fourd
+ENCODING 430
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+0c
+0c
+fe
+cc
+cc
+6c
+2c
+3c
+1c
+0c
+ENDCHAR
+STARTCHAR fived
+ENCODING 431
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+06
+c6
+c6
+fc
+60
+60
+7e
+ENDCHAR
+STARTCHAR sixd
+ENCODING 432
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+fc
+c0
+c6
+66
+3c
+ENDCHAR
+STARTCHAR sevend
+ENCODING 433
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+60
+60
+60
+30
+30
+18
+18
+0c
+06
+fe
+ENDCHAR
+STARTCHAR eightd
+ENCODING 434
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+7c
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR nined
+ENCODING 435
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 7 10 -8 0
+BITMAP
+78
+cc
+c6
+06
+7e
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR colond
+ENCODING 436
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 7 -3 0
+BITMAP
+c0
+c0
+00
+00
+00
+c0
+c0
+ENDCHAR
+STARTCHAR semicolond
+ENCODING 437
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 2 10 -3 -3
+BITMAP
+80
+40
+40
+c0
+c0
+00
+00
+00
+c0
+c0
+ENDCHAR
+STARTCHAR lessd
+ENCODING 438
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+0c
+18
+30
+60
+c0
+c0
+60
+30
+18
+0c
+ENDCHAR
+STARTCHAR equald
+ENCODING 439
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 5 5 -7 1
+BITMAP
+f8
+f8
+00
+f8
+f8
+ENDCHAR
+STARTCHAR greaterd
+ENCODING 440
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+c0
+60
+30
+18
+0c
+0c
+18
+30
+60
+c0
+ENDCHAR
+STARTCHAR questiond
+ENCODING 441
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+30
+30
+00
+30
+30
+18
+0c
+cc
+cc
+78
+ENDCHAR
+STARTCHAR atd
+ENCODING 442
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 12 10 -13 0
+BITMAP
+3fe0
+6010
+cec0
+d9a0
+d9b0
+d9b0
+d9b0
+cf30
+6060
+3fc0
+ENDCHAR
+STARTCHAR Ad
+ENCODING 443
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+66
+7e
+66
+24
+3c
+3c
+18
+18
+ENDCHAR
+STARTCHAR Bd
+ENCODING 444
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+fc
+c6
+c6
+c6
+c6
+fc
+cc
+cc
+cc
+f8
+ENDCHAR
+STARTCHAR Cd
+ENCODING 445
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+3e
+63
+c3
+c3
+c0
+c0
+c0
+c3
+63
+3e
+ENDCHAR
+STARTCHAR Dd
+ENCODING 446
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+fc
+c6
+c3
+c3
+c3
+c3
+c3
+c3
+c6
+fc
+ENDCHAR
+STARTCHAR Ed
+ENCODING 447
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+fe
+c0
+c0
+c0
+c0
+fc
+c0
+c0
+c0
+fe
+ENDCHAR
+STARTCHAR Fd
+ENCODING 448
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+fc
+c0
+c0
+c0
+fe
+ENDCHAR
+STARTCHAR Gd
+ENCODING 449
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 10 -9 0
+BITMAP
+3d80
+6380
+c180
+c180
+c780
+c000
+c000
+c180
+6180
+3f00
+ENDCHAR
+STARTCHAR Hd
+ENCODING 450
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+c3
+c3
+c3
+ff
+c3
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR Id
+ENCODING 451
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR Jd
+ENCODING 452
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 10 -6 0
+BITMAP
+78
+cc
+cc
+0c
+0c
+0c
+0c
+0c
+0c
+0c
+ENDCHAR
+STARTCHAR Kd
+ENCODING 453
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c6
+cc
+d8
+f0
+e0
+f0
+d8
+cc
+c6
+ENDCHAR
+STARTCHAR Ld
+ENCODING 454
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 10 -6 0
+BITMAP
+fc
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR Md
+ENCODING 455
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 11 10 -11 0
+BITMAP
+c460
+ce60
+ce60
+db60
+db60
+db60
+f1e0
+f1e0
+e0e0
+e0e0
+ENDCHAR
+STARTCHAR Nd
+ENCODING 456
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c7
+cf
+cf
+db
+db
+f3
+f3
+e3
+e3
+c3
+ENDCHAR
+STARTCHAR Od
+ENCODING 457
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 10 -9 0
+BITMAP
+3e00
+6300
+c180
+c180
+c180
+c180
+c180
+c180
+6300
+3e00
+ENDCHAR
+STARTCHAR Pd
+ENCODING 458
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+c0
+c0
+c0
+c0
+fc
+c6
+c6
+c6
+c6
+fc
+ENDCHAR
+STARTCHAR Qd
+ENCODING 459
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 9 11 -9 -1
+BITMAP
+0180
+3f00
+6700
+cd80
+c180
+c180
+c180
+c180
+c180
+6300
+3e00
+ENDCHAR
+STARTCHAR Rd
+ENCODING 460
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+c3
+c3
+c3
+fe
+c3
+c3
+c3
+fe
+ENDCHAR
+STARTCHAR Sd
+ENCODING 461
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+7c
+c6
+c6
+c6
+1e
+7c
+f0
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR Td
+ENCODING 462
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+18
+18
+18
+18
+18
+18
+18
+18
+18
+ff
+ENDCHAR
+STARTCHAR Ud
+ENCODING 463
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+3c
+66
+c3
+c3
+c3
+c3
+c3
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR Vd
+ENCODING 464
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+18
+18
+3c
+24
+66
+66
+66
+c3
+c3
+c3
+ENDCHAR
+STARTCHAR Wd
+ENCODING 465
+SWIDTH 1000 0
+DWIDTH -14 0
+BBX 13 10 -13 0
+BITMAP
+18c0
+18c0
+38e0
+3de0
+2fa0
+6730
+6730
+6730
+c218
+c218
+ENDCHAR
+STARTCHAR Xd
+ENCODING 466
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+c3
+c3
+66
+3c
+18
+18
+3c
+66
+c3
+c3
+ENDCHAR
+STARTCHAR Yd
+ENCODING 467
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+18
+18
+18
+18
+18
+3c
+66
+66
+c3
+c3
+ENDCHAR
+STARTCHAR Zd
+ENCODING 468
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 10 -8 0
+BITMAP
+ff
+c0
+60
+30
+18
+18
+0c
+06
+03
+ff
+ENDCHAR
+STARTCHAR braketleftd
+ENCODING 469
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 13 -6 -3
+BITMAP
+f8
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+f8
+ENDCHAR
+STARTCHAR backslashd
+ENCODING 470
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 10 -7 0
+BITMAP
+0c
+0c
+18
+18
+30
+30
+60
+60
+c0
+c0
+ENDCHAR
+STARTCHAR bracketrightd
+ENCODING 471
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 5 13 -6 -3
+BITMAP
+f8
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+18
+f8
+ENDCHAR
+STARTCHAR asciicircumd
+ENCODING 472
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 8 -7 1
+BITMAP
+30
+30
+30
+30
+b4
+fc
+78
+30
+ENDCHAR
+STARTCHAR underscored
+ENCODING 473
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 6 -9 2
+BITMAP
+30
+60
+ff
+ff
+60
+30
+ENDCHAR
+STARTCHAR quoteleftd
+ENCODING 474
+SWIDTH 285 0
+DWIDTH -4 0
+BBX 3 5 -3 5
+BITMAP
+e0
+e0
+c0
+c0
+60
+ENDCHAR
+STARTCHAR ad
+ENCODING 475
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+76
+cc
+cc
+7c
+0c
+cc
+78
+ENDCHAR
+STARTCHAR bd
+ENCODING 476
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR cd
+ENCODING 477
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+c6
+c0
+c0
+c6
+7c
+ENDCHAR
+STARTCHAR dd
+ENCODING 478
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+06
+06
+06
+ENDCHAR
+STARTCHAR ed
+ENCODING 479
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+c0
+fe
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR fd
+ENCODING 480
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 10 -5 0
+BITMAP
+60
+60
+60
+60
+60
+60
+f8
+60
+60
+38
+ENDCHAR
+STARTCHAR gd
+ENCODING 481
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+7c
+c6
+06
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+ENDCHAR
+STARTCHAR hd
+ENCODING 482
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+c6
+c6
+c6
+c6
+c6
+c6
+fc
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR id
+ENCODING 483
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+00
+c0
+c0
+ENDCHAR
+STARTCHAR jd
+ENCODING 484
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 4 12 -4 -2
+BITMAP
+e0
+30
+30
+30
+30
+30
+30
+30
+30
+00
+30
+30
+ENDCHAR
+STARTCHAR kd
+ENCODING 485
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 0
+BITMAP
+c6
+cc
+d8
+f0
+f0
+d8
+cc
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR ld
+ENCODING 486
+SWIDTH 214 0
+DWIDTH -3 0
+BBX 2 10 -2 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR md
+ENCODING 487
+SWIDTH 785 0
+DWIDTH -11 0
+BBX 10 7 -10 0
+BITMAP
+ccc0
+ccc0
+ccc0
+ccc0
+ccc0
+ccc0
+fb80
+ENDCHAR
+STARTCHAR nd
+ENCODING 488
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+c6
+c6
+c6
+c6
+c6
+c6
+fc
+ENDCHAR
+STARTCHAR od
+ENCODING 489
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7c
+c6
+c6
+c6
+c6
+c6
+7c
+ENDCHAR
+STARTCHAR pd
+ENCODING 490
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+c0
+c0
+c0
+fc
+c6
+c6
+c6
+c6
+c6
+fc
+ENDCHAR
+STARTCHAR qd
+ENCODING 491
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+06
+06
+06
+7e
+c6
+c6
+c6
+c6
+c6
+7e
+ENDCHAR
+STARTCHAR rd
+ENCODING 492
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 7 -5 0
+BITMAP
+c0
+c0
+c0
+c0
+c0
+d8
+f8
+ENDCHAR
+STARTCHAR sd
+ENCODING 493
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+78
+cc
+1c
+78
+e0
+cc
+78
+ENDCHAR
+STARTCHAR td
+ENCODING 494
+SWIDTH 428 0
+DWIDTH -6 0
+BBX 5 9 -5 0
+BITMAP
+38
+60
+60
+60
+60
+60
+f8
+60
+60
+ENDCHAR
+STARTCHAR ud
+ENCODING 495
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 7 -7 0
+BITMAP
+7e
+c6
+c6
+c6
+c6
+c6
+c6
+ENDCHAR
+STARTCHAR vd
+ENCODING 496
+SWIDTH 642 0
+DWIDTH -9 0
+BBX 8 7 -8 0
+BITMAP
+18
+3c
+24
+66
+66
+c3
+c3
+ENDCHAR
+STARTCHAR wd
+ENCODING 497
+SWIDTH 857 0
+DWIDTH -12 0
+BBX 11 7 -11 0
+BITMAP
+3180
+3180
+7bc0
+6ec0
+6ec0
+c460
+c460
+ENDCHAR
+STARTCHAR xd
+ENCODING 498
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+cc
+cc
+78
+30
+78
+cc
+cc
+ENDCHAR
+STARTCHAR yd
+ENCODING 499
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 7 10 -7 -3
+BITMAP
+70
+d8
+18
+18
+3c
+2c
+6c
+66
+c6
+c6
+ENDCHAR
+STARTCHAR zd
+ENCODING 500
+SWIDTH 500 0
+DWIDTH -7 0
+BBX 6 7 -6 0
+BITMAP
+fc
+c0
+60
+30
+18
+0c
+fc
+ENDCHAR
+STARTCHAR braceleftd
+ENCODING 501
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 13 -7 -3
+BITMAP
+1c
+30
+30
+30
+30
+30
+e0
+30
+30
+30
+30
+30
+1c
+ENDCHAR
+STARTCHAR bard
+ENCODING 502
+SWIDTH 357 0
+DWIDTH -5 0
+BBX 2 13 -4 -3
+BITMAP
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+c0
+ENDCHAR
+STARTCHAR bracerightd
+ENCODING 503
+SWIDTH 571 0
+DWIDTH -8 0
+BBX 6 13 -7 -3
+BITMAP
+e0
+30
+30
+30
+30
+30
+1c
+30
+30
+30
+30
+30
+e0
+ENDCHAR
+STARTCHAR tildad
+ENCODING 504
+SWIDTH 714 0
+DWIDTH -10 0
+BBX 8 3 -9 3
+BITMAP
+cc
+7e
+33
+ENDCHAR
+ENDFONT
diff --git a/xc/test/xsuite/xtest/fonts/xtfont6.c b/xc/test/xsuite/xtest/fonts/xtfont6.c
new file mode 100644
index 000000000..f0a1f419d
--- /dev/null
+++ b/xc/test/xsuite/xtest/fonts/xtfont6.c
@@ -0,0 +1,561 @@
+/* $XConsortium$ */
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ */
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "Xatom.h"
+
+static XCharStruct perchar[] = {
+ {0, 0, 0, 0, 0, 0}, /* 0 */
+ {-8, -1, -8, 11, -8, 0}, /* 1 */
+ {-7, -1, -8, 10, 0, 0}, /* 2 */
+ {-7, 0, -8, 7, 3, 0}, /* 3 */
+ {-7, -1, -7, 10, -8, 0}, /* 4 */
+ {-7, -3, -7, 11, -8, 0}, /* 5 */
+ {-10, 0, -10, 10, 0, 0}, /* 6 */
+ {-3, 0, -4, 10, -5, 0}, /* 7 */
+ {-3, -1, -5, 10, 0, 0}, /* 8 */
+ {0, 0, 0, 10, -10, 0}, /* 9 */
+ {0, 0, 0, 10, -10, 0}, /* 10 */
+ {-6, -2, -6, 11, -8, 0}, /* 11 */
+ {0, 0, 0, 10, -10, 0}, /* 12 */
+ {0, 0, 0, 10, -10, 0}, /* 13 */
+ {-7, -2, -7, 10, -8, 0}, /* 14 */
+ {-16, -16, -16, 10, -10, 0}, /* 15 */
+ {-8, -1, -8, 10, -8, 0}, /* 16 */
+ {-13, 0, -14, 10, 0, 0}, /* 17 */
+ {-13, 0, -14, 10, 0, 0}, /* 18 */
+ {-16, 0, -16, 5, -3, 0}, /* 19 */
+ {-8, 0, -9, 10, 0, 0}, /* 20 */
+ {-8, 0, -9, 10, 0, 0}, /* 21 */
+ {-8, 0, -8, 5, -3, 0}, /* 22 */
+ {-7, -1, -7, 11, -8, 0}, /* 23 */
+ {-12, -4, -16, 5, -3, 0}, /* 24 */
+ {-9, -9, -9, 10, -10, 0}, /* 25 */
+ {0, 0, 0, 10, -10, 0}, /* 26 */
+ {0, 0, 0, 10, -10, 0}, /* 27 */
+ {-8, -8, -8, 10, -10, 0}, /* 28 */
+ {-6, -4, -6, -1, 3, 0}, /* 29 */
+ {-8, -1, -8, 10, -8, 0}, /* 30 */
+ {-7, -2, -7, 11, -7, 0}, /* 31 */
+ {-7, -7, -7, 10, -10, 0}, /* 32 */
+ {-3, -1, -4, 10, 0, 0}, /* 33 */
+ {-6, -1, -7, 10, -6, 0}, /* 34 */
+ {-11, -1, -12, 10, 0, 0}, /* 35 */
+ {-8, -1, -9, 11, 1, 0}, /* 36 */
+ {-13, -1, -14, 10, 0, 0}, /* 37 */
+ {-10, -1, -11, 10, 0, 0}, /* 38 */
+ {-3, 0, -4, 10, -5, 0}, /* 39 */
+ {-5, -1, -6, 10, 2, 0}, /* 40 */
+ {-5, -1, -6, 10, 2, 0}, /* 41 */
+ {-6, -1, -7, 11, -5, 0}, /* 42 */
+ {-9, -1, -10, 8, 0, 0}, /* 43 */
+ {-3, -1, -4, 2, 3, 0}, /* 44 */
+ {-8, -2, -9, 5, -3, 0}, /* 45 */
+ {-3, -1, -4, 2, 0, 0}, /* 46 */
+ {-7, -1, -8, 10, 0, 0}, /* 47 */
+ {-8, -1, -9, 10, 0, 0}, /* 48 */
+ {-7, -2, -9, 10, 0, 0}, /* 49 */
+ {-8, -1, -9, 10, 0, 0}, /* 50 */
+ {-8, -1, -9, 10, 0, 0}, /* 51 */
+ {-8, -1, -9, 10, 0, 0}, /* 52 */
+ {-8, -1, -9, 10, 0, 0}, /* 53 */
+ {-8, -1, -9, 10, 0, 0}, /* 54 */
+ {-8, -1, -9, 10, 0, 0}, /* 55 */
+ {-8, -1, -9, 10, 0, 0}, /* 56 */
+ {-8, -1, -9, 10, 0, 0}, /* 57 */
+ {-3, -1, -4, 7, 0, 0}, /* 58 */
+ {-3, -1, -4, 7, 3, 0}, /* 59 */
+ {-7, -1, -8, 10, 0, 0}, /* 60 */
+ {-7, -2, -8, 6, -1, 0}, /* 61 */
+ {-7, -1, -8, 10, 0, 0}, /* 62 */
+ {-7, -1, -8, 10, 0, 0}, /* 63 */
+ {-13, -1, -14, 10, 0, 0}, /* 64 */
+ {-8, 0, -9, 10, 0, 0}, /* 65 */
+ {-7, 0, -8, 10, 0, 0}, /* 66 */
+ {-8, 0, -9, 10, 0, 0}, /* 67 */
+ {-8, 0, -9, 10, 0, 0}, /* 68 */
+ {-7, 0, -8, 10, 0, 0}, /* 69 */
+ {-7, 0, -8, 10, 0, 0}, /* 70 */
+ {-9, 0, -10, 10, 0, 0}, /* 71 */
+ {-8, 0, -9, 10, 0, 0}, /* 72 */
+ {-2, 0, -3, 10, 0, 0}, /* 73 */
+ {-6, 0, -7, 10, 0, 0}, /* 74 */
+ {-8, 0, -9, 10, 0, 0}, /* 75 */
+ {-6, 0, -7, 10, 0, 0}, /* 76 */
+ {-11, 0, -12, 10, 0, 0}, /* 77 */
+ {-8, 0, -9, 10, 0, 0}, /* 78 */
+ {-9, 0, -10, 10, 0, 0}, /* 79 */
+ {-7, 0, -8, 10, 0, 0}, /* 80 */
+ {-9, 0, -10, 10, 1, 0}, /* 81 */
+ {-8, 0, -9, 10, 0, 0}, /* 82 */
+ {-7, 0, -8, 10, 0, 0}, /* 83 */
+ {-8, 0, -9, 10, 0, 0}, /* 84 */
+ {-8, 0, -9, 10, 0, 0}, /* 85 */
+ {-8, 0, -9, 10, 0, 0}, /* 86 */
+ {-13, 0, -14, 10, 0, 0}, /* 87 */
+ {-8, 0, -9, 10, 0, 0}, /* 88 */
+ {-8, 0, -9, 10, 0, 0}, /* 89 */
+ {-8, 0, -9, 10, 0, 0}, /* 90 */
+ {-6, -1, -7, 10, 3, 0}, /* 91 */
+ {-7, -1, -8, 10, 0, 0}, /* 92 */
+ {-6, -1, -7, 10, 3, 0}, /* 93 */
+ {-7, -1, -8, 9, -1, 0}, /* 94 */
+ {-9, -1, -10, 8, -2, 0}, /* 95 */
+ {-3, 0, -4, 10, -5, 0}, /* 96 */
+ {-7, 0, -8, 7, 0, 0}, /* 97 */
+ {-7, 0, -8, 10, 0, 0}, /* 98 */
+ {-7, 0, -8, 7, 0, 0}, /* 99 */
+ {-7, 0, -8, 10, 0, 0}, /* 100 */
+ {-7, 0, -8, 7, 0, 0}, /* 101 */
+ {-5, 0, -6, 10, 0, 0}, /* 102 */
+ {-7, 0, -8, 7, 3, 0}, /* 103 */
+ {-7, 0, -8, 10, 0, 0}, /* 104 */
+ {-2, 0, -3, 10, 0, 0}, /* 105 */
+ {-4, 0, -5, 10, 2, 0}, /* 106 */
+ {-7, 0, -8, 10, 0, 0}, /* 107 */
+ {-2, 0, -3, 10, 0, 0}, /* 108 */
+ {-10, 0, -11, 7, 0, 0}, /* 109 */
+ {-7, 0, -8, 7, 0, 0}, /* 110 */
+ {-7, 0, -8, 7, 0, 0}, /* 111 */
+ {-7, 0, -8, 7, 3, 0}, /* 112 */
+ {-7, 0, -8, 7, 3, 0}, /* 113 */
+ {-5, 0, -6, 7, 0, 0}, /* 114 */
+ {-6, 0, -7, 7, 0, 0}, /* 115 */
+ {-5, 0, -6, 9, 0, 0}, /* 116 */
+ {-7, 0, -8, 7, 0, 0}, /* 117 */
+ {-8, 0, -9, 7, 0, 0}, /* 118 */
+ {-11, 0, -12, 7, 0, 0}, /* 119 */
+ {-6, 0, -7, 7, 0, 0}, /* 120 */
+ {-7, 0, -8, 7, 3, 0}, /* 121 */
+ {-6, 0, -7, 7, 0, 0}, /* 122 */
+ {-7, -1, -8, 10, 3, 0}, /* 123 */
+ {-4, -2, -5, 10, 3, 0}, /* 124 */
+ {-7, -1, -8, 10, 3, 0}, /* 125 */
+ {-9, -1, -10, 6, -3, 0}, /* 126 */
+ {-8, -1, -8, 11, -8, 0}, /* 127 */
+ {-7, -1, -8, 10, 0, 0}, /* 128 */
+ {-7, 0, -8, 7, 3, 0}, /* 129 */
+ {-7, -1, -7, 10, -8, 0}, /* 130 */
+ {-7, -3, -7, 11, -8, 0}, /* 131 */
+ {-10, 0, -10, 10, 0, 0}, /* 132 */
+ {-3, 0, -4, 10, -5, 0}, /* 133 */
+ {-3, -1, -5, 10, 0, 0}, /* 134 */
+ {0, 0, 0, 10, -10, 0}, /* 135 */
+ {0, 0, 0, 10, -10, 0}, /* 136 */
+ {-6, -2, -6, 11, -8, 0}, /* 137 */
+ {0, 0, 0, 10, -10, 0}, /* 138 */
+ {0, 0, 0, 10, -10, 0}, /* 139 */
+ {-7, -2, -7, 10, -8, 0}, /* 140 */
+ {-16, -16, -16, 10, -10, 0}, /* 141 */
+ {-8, -1, -8, 10, -8, 0}, /* 142 */
+ {-13, 0, -14, 10, 0, 0}, /* 143 */
+ {-13, 0, -14, 10, 0, 0}, /* 144 */
+ {-16, 0, -16, 5, -3, 0}, /* 145 */
+ {-8, 0, -9, 10, 0, 0}, /* 146 */
+ {-8, 0, -9, 10, 0, 0}, /* 147 */
+ {-8, 0, -8, 5, -3, 0}, /* 148 */
+ {-7, -1, -7, 11, -8, 0}, /* 149 */
+ {-12, -4, -16, 5, -3, 0}, /* 150 */
+ {-9, -9, -9, 10, -10, 0}, /* 151 */
+ {0, 0, 0, 10, -10, 0}, /* 152 */
+ {0, 0, 0, 10, -10, 0}, /* 153 */
+ {-8, -8, -8, 10, -10, 0}, /* 154 */
+ {-6, -4, -6, -1, 3, 0}, /* 155 */
+ {-8, -1, -8, 10, -8, 0}, /* 156 */
+ {-7, -2, -7, 11, -7, 0}, /* 157 */
+ {-7, -7, -7, 10, -10, 0}, /* 158 */
+ {-3, -1, -4, 10, 0, 0}, /* 159 */
+ {-6, -1, -7, 10, -6, 0}, /* 160 */
+ {-11, -1, -12, 10, 0, 0}, /* 161 */
+ {-8, -1, -9, 11, 1, 0}, /* 162 */
+ {-13, -1, -14, 10, 0, 0}, /* 163 */
+ {-10, -1, -11, 10, 0, 0}, /* 164 */
+ {-3, 0, -4, 10, -5, 0}, /* 165 */
+ {-5, -1, -6, 10, 2, 0}, /* 166 */
+ {-5, -1, -6, 10, 2, 0}, /* 167 */
+ {-6, -1, -7, 11, -5, 0}, /* 168 */
+ {-9, -1, -10, 8, 0, 0}, /* 169 */
+ {-3, -1, -4, 2, 3, 0}, /* 170 */
+ {-8, -2, -9, 5, -3, 0}, /* 171 */
+ {-3, -1, -4, 2, 0, 0}, /* 172 */
+ {-7, -1, -8, 10, 0, 0}, /* 173 */
+ {-8, -1, -9, 10, 0, 0}, /* 174 */
+ {-7, -2, -9, 10, 0, 0}, /* 175 */
+ {-8, -1, -9, 10, 0, 0}, /* 176 */
+ {-8, -1, -9, 10, 0, 0}, /* 177 */
+ {-8, -1, -9, 10, 0, 0}, /* 178 */
+ {-8, -1, -9, 10, 0, 0}, /* 179 */
+ {-8, -1, -9, 10, 0, 0}, /* 180 */
+ {-8, -1, -9, 10, 0, 0}, /* 181 */
+ {-8, -1, -9, 10, 0, 0}, /* 182 */
+ {-8, -1, -9, 10, 0, 0}, /* 183 */
+ {-3, -1, -4, 7, 0, 0}, /* 184 */
+ {-3, -1, -4, 7, 3, 0}, /* 185 */
+ {-7, -1, -8, 10, 0, 0}, /* 186 */
+ {-7, -2, -8, 6, -1, 0}, /* 187 */
+ {-7, -1, -8, 10, 0, 0}, /* 188 */
+ {-7, -1, -8, 10, 0, 0}, /* 189 */
+ {-13, -1, -14, 10, 0, 0}, /* 190 */
+ {-8, 0, -9, 10, 0, 0}, /* 191 */
+ {-7, 0, -8, 10, 0, 0}, /* 192 */
+ {-8, 0, -9, 10, 0, 0}, /* 193 */
+ {-8, 0, -9, 10, 0, 0}, /* 194 */
+ {-7, 0, -8, 10, 0, 0}, /* 195 */
+ {-7, 0, -8, 10, 0, 0}, /* 196 */
+ {-9, 0, -10, 10, 0, 0}, /* 197 */
+ {-8, 0, -9, 10, 0, 0}, /* 198 */
+ {-2, 0, -3, 10, 0, 0}, /* 199 */
+ {-6, 0, -7, 10, 0, 0}, /* 200 */
+ {-8, 0, -9, 10, 0, 0}, /* 201 */
+ {-6, 0, -7, 10, 0, 0}, /* 202 */
+ {-11, 0, -12, 10, 0, 0}, /* 203 */
+ {-8, 0, -9, 10, 0, 0}, /* 204 */
+ {-9, 0, -10, 10, 0, 0}, /* 205 */
+ {-7, 0, -8, 10, 0, 0}, /* 206 */
+ {-9, 0, -10, 10, 1, 0}, /* 207 */
+ {-8, 0, -9, 10, 0, 0}, /* 208 */
+ {-7, 0, -8, 10, 0, 0}, /* 209 */
+ {-8, 0, -9, 10, 0, 0}, /* 210 */
+ {-8, 0, -9, 10, 0, 0}, /* 211 */
+ {-8, 0, -9, 10, 0, 0}, /* 212 */
+ {-13, 0, -14, 10, 0, 0}, /* 213 */
+ {-8, 0, -9, 10, 0, 0}, /* 214 */
+ {-8, 0, -9, 10, 0, 0}, /* 215 */
+ {-8, 0, -9, 10, 0, 0}, /* 216 */
+ {-6, -1, -7, 10, 3, 0}, /* 217 */
+ {-7, -1, -8, 10, 0, 0}, /* 218 */
+ {-6, -1, -7, 10, 3, 0}, /* 219 */
+ {-7, -1, -8, 9, -1, 0}, /* 220 */
+ {-9, -1, -10, 8, -2, 0}, /* 221 */
+ {-3, 0, -4, 10, -5, 0}, /* 222 */
+ {-7, 0, -8, 7, 0, 0}, /* 223 */
+ {-7, 0, -8, 10, 0, 0}, /* 224 */
+ {-7, 0, -8, 7, 0, 0}, /* 225 */
+ {-7, 0, -8, 10, 0, 0}, /* 226 */
+ {-7, 0, -8, 7, 0, 0}, /* 227 */
+ {-5, 0, -6, 10, 0, 0}, /* 228 */
+ {-7, 0, -8, 7, 3, 0}, /* 229 */
+ {-7, 0, -8, 10, 0, 0}, /* 230 */
+ {-2, 0, -3, 10, 0, 0}, /* 231 */
+ {-4, 0, -5, 10, 2, 0}, /* 232 */
+ {-7, 0, -8, 10, 0, 0}, /* 233 */
+ {-2, 0, -3, 10, 0, 0}, /* 234 */
+ {-10, 0, -11, 7, 0, 0}, /* 235 */
+ {-7, 0, -8, 7, 0, 0}, /* 236 */
+ {-7, 0, -8, 7, 0, 0}, /* 237 */
+ {-7, 0, -8, 7, 3, 0}, /* 238 */
+ {-7, 0, -8, 7, 3, 0}, /* 239 */
+ {-5, 0, -6, 7, 0, 0}, /* 240 */
+ {-6, 0, -7, 7, 0, 0}, /* 241 */
+ {-5, 0, -6, 9, 0, 0}, /* 242 */
+ {-7, 0, -8, 7, 0, 0}, /* 243 */
+ {-8, 0, -9, 7, 0, 0}, /* 244 */
+ {-11, 0, -12, 7, 0, 0}, /* 245 */
+ {-6, 0, -7, 7, 0, 0}, /* 246 */
+ {-7, 0, -8, 7, 3, 0}, /* 247 */
+ {-6, 0, -7, 7, 0, 0}, /* 248 */
+ {-7, -1, -8, 10, 3, 0}, /* 249 */
+ {-4, -2, -5, 10, 3, 0}, /* 250 */
+ {-7, -1, -8, 10, 3, 0}, /* 251 */
+ {-9, -1, -10, 6, -3, 0}, /* 252 */
+ {-8, -1, -8, 11, -8, 0}, /* 253 */
+ {-7, -1, -8, 10, 0, 0}, /* 254 */
+ {-7, 0, -8, 7, 3, 0}, /* 255 */
+ {-7, -1, -7, 10, -8, 0}, /* 256 */
+ {-7, -3, -7, 11, -8, 0}, /* 257 */
+ {-10, 0, -10, 10, 0, 0}, /* 258 */
+ {-3, 0, -4, 10, -5, 0}, /* 259 */
+ {-3, -1, -5, 10, 0, 0}, /* 260 */
+ {0, 0, 0, 10, -10, 0}, /* 261 */
+ {0, 0, 0, 10, -10, 0}, /* 262 */
+ {-6, -2, -6, 11, -8, 0}, /* 263 */
+ {0, 0, 0, 10, -10, 0}, /* 264 */
+ {0, 0, 0, 10, -10, 0}, /* 265 */
+ {-7, -2, -7, 10, -8, 0}, /* 266 */
+ {-16, -16, -16, 10, -10, 0}, /* 267 */
+ {-8, -1, -8, 10, -8, 0}, /* 268 */
+ {-13, 0, -14, 10, 0, 0}, /* 269 */
+ {-13, 0, -14, 10, 0, 0}, /* 270 */
+ {-16, 0, -16, 5, -3, 0}, /* 271 */
+ {-8, 0, -9, 10, 0, 0}, /* 272 */
+ {-8, 0, -9, 10, 0, 0}, /* 273 */
+ {-8, 0, -8, 5, -3, 0}, /* 274 */
+ {-7, -1, -7, 11, -8, 0}, /* 275 */
+ {-12, -4, -16, 5, -3, 0}, /* 276 */
+ {-9, -9, -9, 10, -10, 0}, /* 277 */
+ {0, 0, 0, 10, -10, 0}, /* 278 */
+ {0, 0, 0, 10, -10, 0}, /* 279 */
+ {-8, -8, -8, 10, -10, 0}, /* 280 */
+ {-6, -4, -6, -1, 3, 0}, /* 281 */
+ {-8, -1, -8, 10, -8, 0}, /* 282 */
+ {-7, -2, -7, 11, -7, 0}, /* 283 */
+ {-7, -7, -7, 10, -10, 0}, /* 284 */
+ {-3, -1, -4, 10, 0, 0}, /* 285 */
+ {-6, -1, -7, 10, -6, 0}, /* 286 */
+ {-11, -1, -12, 10, 0, 0}, /* 287 */
+ {-8, -1, -9, 11, 1, 0}, /* 288 */
+ {-13, -1, -14, 10, 0, 0}, /* 289 */
+ {-10, -1, -11, 10, 0, 0}, /* 290 */
+ {-3, 0, -4, 10, -5, 0}, /* 291 */
+ {-5, -1, -6, 10, 2, 0}, /* 292 */
+ {-5, -1, -6, 10, 2, 0}, /* 293 */
+ {-6, -1, -7, 11, -5, 0}, /* 294 */
+ {-9, -1, -10, 8, 0, 0}, /* 295 */
+ {-3, -1, -4, 2, 3, 0}, /* 296 */
+ {-8, -2, -9, 5, -3, 0}, /* 297 */
+ {-3, -1, -4, 2, 0, 0}, /* 298 */
+ {-7, -1, -8, 10, 0, 0}, /* 299 */
+ {-8, -1, -9, 10, 0, 0}, /* 300 */
+ {-7, -2, -9, 10, 0, 0}, /* 301 */
+ {-8, -1, -9, 10, 0, 0}, /* 302 */
+ {-8, -1, -9, 10, 0, 0}, /* 303 */
+ {-8, -1, -9, 10, 0, 0}, /* 304 */
+ {-8, -1, -9, 10, 0, 0}, /* 305 */
+ {-8, -1, -9, 10, 0, 0}, /* 306 */
+ {-8, -1, -9, 10, 0, 0}, /* 307 */
+ {-8, -1, -9, 10, 0, 0}, /* 308 */
+ {-8, -1, -9, 10, 0, 0}, /* 309 */
+ {-3, -1, -4, 7, 0, 0}, /* 310 */
+ {-3, -1, -4, 7, 3, 0}, /* 311 */
+ {-7, -1, -8, 10, 0, 0}, /* 312 */
+ {-7, -2, -8, 6, -1, 0}, /* 313 */
+ {-7, -1, -8, 10, 0, 0}, /* 314 */
+ {-7, -1, -8, 10, 0, 0}, /* 315 */
+ {-13, -1, -14, 10, 0, 0}, /* 316 */
+ {-8, 0, -9, 10, 0, 0}, /* 317 */
+ {-7, 0, -8, 10, 0, 0}, /* 318 */
+ {-8, 0, -9, 10, 0, 0}, /* 319 */
+ {-8, 0, -9, 10, 0, 0}, /* 320 */
+ {-7, 0, -8, 10, 0, 0}, /* 321 */
+ {-7, 0, -8, 10, 0, 0}, /* 322 */
+ {-9, 0, -10, 10, 0, 0}, /* 323 */
+ {-8, 0, -9, 10, 0, 0}, /* 324 */
+ {-2, 0, -3, 10, 0, 0}, /* 325 */
+ {-6, 0, -7, 10, 0, 0}, /* 326 */
+ {-8, 0, -9, 10, 0, 0}, /* 327 */
+ {-6, 0, -7, 10, 0, 0}, /* 328 */
+ {-11, 0, -12, 10, 0, 0}, /* 329 */
+ {-8, 0, -9, 10, 0, 0}, /* 330 */
+ {-9, 0, -10, 10, 0, 0}, /* 331 */
+ {-7, 0, -8, 10, 0, 0}, /* 332 */
+ {-9, 0, -10, 10, 1, 0}, /* 333 */
+ {-8, 0, -9, 10, 0, 0}, /* 334 */
+ {-7, 0, -8, 10, 0, 0}, /* 335 */
+ {-8, 0, -9, 10, 0, 0}, /* 336 */
+ {-8, 0, -9, 10, 0, 0}, /* 337 */
+ {-8, 0, -9, 10, 0, 0}, /* 338 */
+ {-13, 0, -14, 10, 0, 0}, /* 339 */
+ {-8, 0, -9, 10, 0, 0}, /* 340 */
+ {-8, 0, -9, 10, 0, 0}, /* 341 */
+ {-8, 0, -9, 10, 0, 0}, /* 342 */
+ {-6, -1, -7, 10, 3, 0}, /* 343 */
+ {-7, -1, -8, 10, 0, 0}, /* 344 */
+ {-6, -1, -7, 10, 3, 0}, /* 345 */
+ {-7, -1, -8, 9, -1, 0}, /* 346 */
+ {-9, -1, -10, 8, -2, 0}, /* 347 */
+ {-3, 0, -4, 10, -5, 0}, /* 348 */
+ {-7, 0, -8, 7, 0, 0}, /* 349 */
+ {-7, 0, -8, 10, 0, 0}, /* 350 */
+ {-7, 0, -8, 7, 0, 0}, /* 351 */
+ {-7, 0, -8, 10, 0, 0}, /* 352 */
+ {-7, 0, -8, 7, 0, 0}, /* 353 */
+ {-5, 0, -6, 10, 0, 0}, /* 354 */
+ {-7, 0, -8, 7, 3, 0}, /* 355 */
+ {-7, 0, -8, 10, 0, 0}, /* 356 */
+ {-2, 0, -3, 10, 0, 0}, /* 357 */
+ {-4, 0, -5, 10, 2, 0}, /* 358 */
+ {-7, 0, -8, 10, 0, 0}, /* 359 */
+ {-2, 0, -3, 10, 0, 0}, /* 360 */
+ {-10, 0, -11, 7, 0, 0}, /* 361 */
+ {-7, 0, -8, 7, 0, 0}, /* 362 */
+ {-7, 0, -8, 7, 0, 0}, /* 363 */
+ {-7, 0, -8, 7, 3, 0}, /* 364 */
+ {-7, 0, -8, 7, 3, 0}, /* 365 */
+ {-5, 0, -6, 7, 0, 0}, /* 366 */
+ {-6, 0, -7, 7, 0, 0}, /* 367 */
+ {-5, 0, -6, 9, 0, 0}, /* 368 */
+ {-7, 0, -8, 7, 0, 0}, /* 369 */
+ {-8, 0, -9, 7, 0, 0}, /* 370 */
+ {-11, 0, -12, 7, 0, 0}, /* 371 */
+ {-6, 0, -7, 7, 0, 0}, /* 372 */
+ {-7, 0, -8, 7, 3, 0}, /* 373 */
+ {-6, 0, -7, 7, 0, 0}, /* 374 */
+ {-7, -1, -8, 10, 3, 0}, /* 375 */
+ {-4, -2, -5, 10, 3, 0}, /* 376 */
+ {-7, -1, -8, 10, 3, 0}, /* 377 */
+ {-9, -1, -10, 6, -3, 0}, /* 378 */
+ {-8, -1, -8, 11, -8, 0}, /* 379 */
+ {-7, -1, -8, 10, 0, 0}, /* 380 */
+ {-7, 0, -8, 7, 3, 0}, /* 381 */
+ {-7, -1, -7, 10, -8, 0}, /* 382 */
+ {-7, -3, -7, 11, -8, 0}, /* 383 */
+ {-10, 0, -10, 10, 0, 0}, /* 384 */
+ {-3, 0, -4, 10, -5, 0}, /* 385 */
+ {-3, -1, -5, 10, 0, 0}, /* 386 */
+ {0, 0, 0, 10, -10, 0}, /* 387 */
+ {0, 0, 0, 10, -10, 0}, /* 388 */
+ {-6, -2, -6, 11, -8, 0}, /* 389 */
+ {0, 0, 0, 10, -10, 0}, /* 390 */
+ {0, 0, 0, 10, -10, 0}, /* 391 */
+ {-7, -2, -7, 10, -8, 0}, /* 392 */
+ {-16, -16, -16, 10, -10, 0}, /* 393 */
+ {-8, -1, -8, 10, -8, 0}, /* 394 */
+ {-13, 0, -14, 10, 0, 0}, /* 395 */
+ {-13, 0, -14, 10, 0, 0}, /* 396 */
+ {-16, 0, -16, 5, -3, 0}, /* 397 */
+ {-8, 0, -9, 10, 0, 0}, /* 398 */
+ {-8, 0, -9, 10, 0, 0}, /* 399 */
+ {-8, 0, -8, 5, -3, 0}, /* 400 */
+ {-7, -1, -7, 11, -8, 0}, /* 401 */
+ {-12, -4, -16, 5, -3, 0}, /* 402 */
+ {-9, -9, -9, 10, -10, 0}, /* 403 */
+ {0, 0, 0, 10, -10, 0}, /* 404 */
+ {0, 0, 0, 10, -10, 0}, /* 405 */
+ {-8, -8, -8, 10, -10, 0}, /* 406 */
+ {-6, -4, -6, -1, 3, 0}, /* 407 */
+ {-8, -1, -8, 10, -8, 0}, /* 408 */
+ {-7, -2, -7, 11, -7, 0}, /* 409 */
+ {-7, -7, -7, 10, -10, 0}, /* 410 */
+ {-3, -1, -4, 10, 0, 0}, /* 411 */
+ {-6, -1, -7, 10, -6, 0}, /* 412 */
+ {-11, -1, -12, 10, 0, 0}, /* 413 */
+ {-8, -1, -9, 11, 1, 0}, /* 414 */
+ {-13, -1, -14, 10, 0, 0}, /* 415 */
+ {-10, -1, -11, 10, 0, 0}, /* 416 */
+ {-3, 0, -4, 10, -5, 0}, /* 417 */
+ {-5, -1, -6, 10, 2, 0}, /* 418 */
+ {-5, -1, -6, 10, 2, 0}, /* 419 */
+ {-6, -1, -7, 11, -5, 0}, /* 420 */
+ {-9, -1, -10, 8, 0, 0}, /* 421 */
+ {-3, -1, -4, 2, 3, 0}, /* 422 */
+ {-8, -2, -9, 5, -3, 0}, /* 423 */
+ {-3, -1, -4, 2, 0, 0}, /* 424 */
+ {-7, -1, -8, 10, 0, 0}, /* 425 */
+ {-8, -1, -9, 10, 0, 0}, /* 426 */
+ {-7, -2, -9, 10, 0, 0}, /* 427 */
+ {-8, -1, -9, 10, 0, 0}, /* 428 */
+ {-8, -1, -9, 10, 0, 0}, /* 429 */
+ {-8, -1, -9, 10, 0, 0}, /* 430 */
+ {-8, -1, -9, 10, 0, 0}, /* 431 */
+ {-8, -1, -9, 10, 0, 0}, /* 432 */
+ {-8, -1, -9, 10, 0, 0}, /* 433 */
+ {-8, -1, -9, 10, 0, 0}, /* 434 */
+ {-8, -1, -9, 10, 0, 0}, /* 435 */
+ {-3, -1, -4, 7, 0, 0}, /* 436 */
+ {-3, -1, -4, 7, 3, 0}, /* 437 */
+ {-7, -1, -8, 10, 0, 0}, /* 438 */
+ {-7, -2, -8, 6, -1, 0}, /* 439 */
+ {-7, -1, -8, 10, 0, 0}, /* 440 */
+ {-7, -1, -8, 10, 0, 0}, /* 441 */
+ {-13, -1, -14, 10, 0, 0}, /* 442 */
+ {-8, 0, -9, 10, 0, 0}, /* 443 */
+ {-7, 0, -8, 10, 0, 0}, /* 444 */
+ {-8, 0, -9, 10, 0, 0}, /* 445 */
+ {-8, 0, -9, 10, 0, 0}, /* 446 */
+ {-7, 0, -8, 10, 0, 0}, /* 447 */
+ {-7, 0, -8, 10, 0, 0}, /* 448 */
+ {-9, 0, -10, 10, 0, 0}, /* 449 */
+ {-8, 0, -9, 10, 0, 0}, /* 450 */
+ {-2, 0, -3, 10, 0, 0}, /* 451 */
+ {-6, 0, -7, 10, 0, 0}, /* 452 */
+ {-8, 0, -9, 10, 0, 0}, /* 453 */
+ {-6, 0, -7, 10, 0, 0}, /* 454 */
+ {-11, 0, -12, 10, 0, 0}, /* 455 */
+ {-8, 0, -9, 10, 0, 0}, /* 456 */
+ {-9, 0, -10, 10, 0, 0}, /* 457 */
+ {-7, 0, -8, 10, 0, 0}, /* 458 */
+ {-9, 0, -10, 10, 1, 0}, /* 459 */
+ {-8, 0, -9, 10, 0, 0}, /* 460 */
+ {-7, 0, -8, 10, 0, 0}, /* 461 */
+ {-8, 0, -9, 10, 0, 0}, /* 462 */
+ {-8, 0, -9, 10, 0, 0}, /* 463 */
+ {-8, 0, -9, 10, 0, 0}, /* 464 */
+ {-13, 0, -14, 10, 0, 0}, /* 465 */
+ {-8, 0, -9, 10, 0, 0}, /* 466 */
+ {-8, 0, -9, 10, 0, 0}, /* 467 */
+ {-8, 0, -9, 10, 0, 0}, /* 468 */
+ {-6, -1, -7, 10, 3, 0}, /* 469 */
+ {-7, -1, -8, 10, 0, 0}, /* 470 */
+ {-6, -1, -7, 10, 3, 0}, /* 471 */
+ {-7, -1, -8, 9, -1, 0}, /* 472 */
+ {-9, -1, -10, 8, -2, 0}, /* 473 */
+ {-3, 0, -4, 10, -5, 0}, /* 474 */
+ {-7, 0, -8, 7, 0, 0}, /* 475 */
+ {-7, 0, -8, 10, 0, 0}, /* 476 */
+ {-7, 0, -8, 7, 0, 0}, /* 477 */
+ {-7, 0, -8, 10, 0, 0}, /* 478 */
+ {-7, 0, -8, 7, 0, 0}, /* 479 */
+ {-5, 0, -6, 10, 0, 0}, /* 480 */
+ {-7, 0, -8, 7, 3, 0}, /* 481 */
+ {-7, 0, -8, 10, 0, 0}, /* 482 */
+ {-2, 0, -3, 10, 0, 0}, /* 483 */
+ {-4, 0, -5, 10, 2, 0}, /* 484 */
+ {-7, 0, -8, 10, 0, 0}, /* 485 */
+ {-2, 0, -3, 10, 0, 0}, /* 486 */
+ {-10, 0, -11, 7, 0, 0}, /* 487 */
+ {-7, 0, -8, 7, 0, 0}, /* 488 */
+ {-7, 0, -8, 7, 0, 0}, /* 489 */
+ {-7, 0, -8, 7, 3, 0}, /* 490 */
+ {-7, 0, -8, 7, 3, 0}, /* 491 */
+ {-5, 0, -6, 7, 0, 0}, /* 492 */
+ {-6, 0, -7, 7, 0, 0}, /* 493 */
+ {-5, 0, -6, 9, 0, 0}, /* 494 */
+ {-7, 0, -8, 7, 0, 0}, /* 495 */
+ {-8, 0, -9, 7, 0, 0}, /* 496 */
+ {-11, 0, -12, 7, 0, 0}, /* 497 */
+ {-6, 0, -7, 7, 0, 0}, /* 498 */
+ {-7, 0, -8, 7, 3, 0}, /* 499 */
+ {-6, 0, -7, 7, 0, 0}, /* 500 */
+ {-7, -1, -8, 10, 3, 0}, /* 501 */
+ {-4, -2, -5, 10, 3, 0}, /* 502 */
+ {-7, -1, -8, 10, 3, 0}, /* 503 */
+ {-9, -1, -10, 6, -3, 0}, /* 504 */
+ {0, 0, 0, 0, 0, 0}, /* 505 */
+ {0, 0, 0, 0, 0, 0}, /* 506 */
+ {0, 0, 0, 0, 0, 0}, /* 507 */
+ {0, 0, 0, 0, 0, 0}, /* 508 */
+ {0, 0, 0, 0, 0, 0}, /* 509 */
+ {0, 0, 0, 0, 0, 0}, /* 510 */
+ {0, 0, 0, 0, 0, 0}, /* 511 */
+};
+static XFontProp props[] = {
+ {XA_COPYRIGHT, 0},
+ {XA_UNDERLINE_POSITION, 3},
+ {XA_RESOLUTION, 78},
+};
+
+char *xtfont6cpright = "These glyphs are unencumbered";
+
+XFontStruct xtfont6 = {
+ (XExtData*)0,
+ (Font)0,
+ FontRightToLeft, /* direction */
+ 0, /* min_byte2 */
+ 255, /* max_byte2 */
+ 0, /* min_byte1 */
+ 1, /* max_byte1 */
+ 0, /* all chars exist */
+ 2, /* default char */
+ 3, /* n_properties */
+ props,
+ {-16, -16, -16, -1, -10, 0},
+ {0, 0, 0, 11, 3, 0},
+ perchar,
+ 11, /* font ascent */
+ 3, /* font descent */
+};
diff --git a/xc/test/xsuite/xtest/include/Vlib.h b/xc/test/xsuite/xtest/include/Vlib.h
new file mode 100644
index 000000000..e288af048
--- /dev/null
+++ b/xc/test/xsuite/xtest/include/Vlib.h
@@ -0,0 +1,3490 @@
+/* $XConsortium$ */
+#ifndef _VLIB_H_
+#define _VLIB_H_
+
+#include <X11/Xlib.h>
+
+#include <X11/X.h>
+
+#ifndef NeedFunctionPrototypes
+#if defined(FUNCPROTO) || defined(__STDC__) || defined(__cplusplus) || defined(c_plusplus)
+#define NeedFunctionPrototypes 1
+#else
+#define NeedFunctionPrototypes 0
+
+#ifndef NeedWidePrototypes
+#if defined(NARROWPROTO)
+#define NeedWidePrototypes 0
+#else
+#define NeedWidePrototypes 1 /* default to make interropt. easier */
+#endif
+#endif
+
+
+#ifdef XLoadQueryFont
+extern XFontStruct *VLoadQueryFont(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ const char* /* name */
+#endif
+);
+#endif /* XLoadQueryFont */
+
+#ifdef XQueryFont
+extern XFontStruct *VQueryFont(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* font_ID */
+#endif
+);
+#endif /* XQueryFont */
+
+
+#ifdef XGetMotionEvents
+extern XTimeCoord *VGetMotionEvents(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Time /* start */,
+ Time /* stop */,
+ int* /* nevents_return */
+#endif
+);
+#endif /* XGetMotionEvents */
+
+#ifdef XDeleteModifiermapEntry
+extern XModifierKeymap *VDeleteModifiermapEntry(
+#if NeedFunctionPrototypes
+ XModifierKeymap* /* modmap */,
+#if NeedWidePrototypes
+ unsigned int /* keycode_entry */,
+#else
+ KeyCode /* keycode_entry */,
+#endif
+ int /* modifier */
+#endif
+);
+#endif /* XDeleteModifiermapEntry */
+
+#ifdef XGetModifierMapping
+extern XModifierKeymap *VGetModifierMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XGetModifierMapping */
+
+#ifdef XInsertModifiermapEntry
+extern XModifierKeymap *VInsertModifiermapEntry(
+#if NeedFunctionPrototypes
+ XModifierKeymap* /* modmap */,
+#if NeedWidePrototypes
+ unsigned int /* keycode_entry */,
+#else
+ KeyCode /* keycode_entry */,
+#endif
+ int /* modifier */
+#endif
+);
+#endif /* XInsertModifiermapEntry */
+
+#ifdef XNewModifiermap
+extern XModifierKeymap *VNewModifiermap(
+#if NeedFunctionPrototypes
+ int /* max_keys_per_mod */
+#endif
+);
+#endif /* XNewModifiermap */
+
+#ifdef XCreateImage
+extern XImage *VCreateImage(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Visual* /* visual */,
+ unsigned int /* depth */,
+ int /* format */,
+ int /* offset */,
+ char* /* data */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ int /* bitmap_pad */,
+ int /* bytes_per_line */
+#endif
+);
+#endif /* XCreateImage */
+#ifdef XGetImage
+extern XImage *VGetImage(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned long /* plane_mask */,
+ int /* format */
+#endif
+);
+#endif /* XGetImage */
+#ifdef XGetSubImage
+extern XImage *VGetSubImage(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned long /* plane_mask */,
+ int /* format */,
+ XImage* /* dest_image */,
+ int /* dest_x */,
+ int /* dest_y */
+#endif
+);
+#endif /* XGetSubImage */
+
+/*
+ * X function declarations.
+ */
+#ifdef XOpenDisplay
+extern Display *VOpenDisplay(
+#if NeedFunctionPrototypes
+ const char* /* display_name */
+#endif
+);
+#endif /* XOpenDisplay */
+
+#ifdef XrmInitialize
+extern void VrmInitialize(
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+#endif /* XrmInitialize */
+
+#ifdef XFetchBytes
+extern char *VFetchBytes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* nbytes_return */
+#endif
+);
+#endif /* XFetchBytes */
+#ifdef XFetchBuffer
+extern char *VFetchBuffer(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* nbytes_return */,
+ int /* buffer */
+#endif
+);
+#endif /* XFetchBuffer */
+#ifdef XGetAtomName
+extern char *VGetAtomName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Atom /* atom */
+#endif
+);
+#endif /* XGetAtomName */
+#ifdef XGetDefault
+extern char *VGetDefault(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ const char* /* program */,
+ const char* /* option */
+#endif
+);
+#endif /* XGetDefault */
+#ifdef XDisplayName
+extern char *VDisplayName(
+#if NeedFunctionPrototypes
+ const char* /* string */
+#endif
+);
+#endif /* XDisplayName */
+#ifdef XKeysymToString
+extern char *VKeysymToString(
+#if NeedFunctionPrototypes
+ KeySym /* keysym */
+#endif
+);
+#endif /* XKeysymToString */
+
+#ifdef XSynchronize
+extern int (*VSynchronize(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Bool /* onoff */
+#endif
+))();
+#endif /* XSynchronize */
+#ifdef XSetAfterFunction
+extern int (*VSetAfterFunction(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int (*) ( Display* /* display */
+ ) /* procedure */
+#endif
+))();
+#endif /* XSetAfterFunction */
+#ifdef XInternAtom
+extern Atom VInternAtom(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ const char* /* atom_name */,
+ Bool /* only_if_exists */
+#endif
+);
+#endif /* XInternAtom */
+#ifdef XCopyColormapAndFree
+extern Colormap VCopyColormapAndFree(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */
+#endif
+);
+#endif /* XCopyColormapAndFree */
+#ifdef XCreateColormap
+extern Colormap VCreateColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Visual* /* visual */,
+ int /* alloc */
+#endif
+);
+#endif /* XCreateColormap */
+#ifdef XCreatePixmapCursor
+extern Cursor VCreatePixmapCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Pixmap /* source */,
+ Pixmap /* mask */,
+ XColor* /* foreground_color */,
+ XColor* /* background_color */,
+ unsigned int /* x */,
+ unsigned int /* y */
+#endif
+);
+#endif /* XCreatePixmapCursor */
+#ifdef XCreateGlyphCursor
+extern Cursor VCreateGlyphCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Font /* source_font */,
+ Font /* mask_font */,
+ unsigned int /* source_char */,
+ unsigned int /* mask_char */,
+ XColor* /* foreground_color */,
+ XColor* /* background_color */
+#endif
+);
+#endif /* XCreateGlyphCursor */
+#ifdef XCreateFontCursor
+extern Cursor VCreateFontCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ unsigned int /* shape */
+#endif
+);
+#endif /* XCreateFontCursor */
+#ifdef XLoadFont
+extern Font VLoadFont(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ const char* /* name */
+#endif
+);
+#endif /* XLoadFont */
+#ifdef XCreateGC
+extern GC VCreateGC(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ unsigned long /* valuemask */,
+ XGCValues* /* values */
+#endif
+);
+#endif /* XCreateGC */
+#ifdef XGContextFromGC
+extern GContext VGContextFromGC(
+#if NeedFunctionPrototypes
+ GC /* gc */
+#endif
+);
+#endif /* XGContextFromGC */
+#ifdef XCreatePixmap
+extern Pixmap VCreatePixmap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned int /* depth */
+#endif
+);
+#endif /* XCreatePixmap */
+#ifdef XCreateBitmapFromData
+extern Pixmap VCreateBitmapFromData(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ const char* /* data */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+#endif /* XCreateBitmapFromData */
+#ifdef XCreatePixmapFromBitmapData
+extern Pixmap VCreatePixmapFromBitmapData(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ char* /* data */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned long /* fg */,
+ unsigned long /* bg */,
+ unsigned int /* depth */
+#endif
+);
+#endif /* XCreatePixmapFromBitmapData */
+#ifdef XCreateSimpleWindow
+extern Window VCreateSimpleWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* parent */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned int /* border_width */,
+ unsigned long /* border */,
+ unsigned long /* background */
+#endif
+);
+#endif /* XCreateSimpleWindow */
+#ifdef XGetSelectionOwner
+extern Window VGetSelectionOwner(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Atom /* selection */
+#endif
+);
+#endif /* XGetSelectionOwner */
+#ifdef XCreateWindow
+extern Window VCreateWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ 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* /* attributes */
+#endif
+);
+#endif /* XCreateWindow */
+#ifdef XListInstalledColormaps
+extern Colormap *VListInstalledColormaps(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int* /* num_return */
+#endif
+);
+#endif /* XListInstalledColormaps */
+#ifdef XListFonts
+extern char **VListFonts(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ const char* /* pattern */,
+ int /* maxnames */,
+ int* /* actual_count_return */
+#endif
+);
+#endif /* XListFonts */
+#ifdef XListFontsWithInfo
+extern char **VListFontsWithInfo(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ const char* /* pattern */,
+ int /* maxnames */,
+ int* /* count_return */,
+ XFontStruct** /* info_return */
+#endif
+);
+#endif /* XListFontsWithInfo */
+#ifdef XGetFontPath
+extern char **VGetFontPath(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* npaths_return */
+#endif
+);
+#endif /* XGetFontPath */
+#ifdef XListExtensions
+extern char **VListExtensions(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* nextensions_return */
+#endif
+);
+#endif /* XListExtensions */
+#ifdef XListProperties
+extern Atom *VListProperties(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int* /* num_prop_return */
+#endif
+);
+#endif /* XListProperties */
+#ifdef XListHosts
+extern XHostAddress *VListHosts(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* nhosts_return */,
+ Bool* /* state_return */
+#endif
+);
+#endif /* XListHosts */
+#ifdef XKeycodeToKeysym
+extern KeySym VKeycodeToKeysym(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+#if NeedWidePrototypes
+ unsigned int /* keycode */,
+#else
+ KeyCode /* keycode */,
+#endif
+ int /* index */
+#endif
+);
+#endif /* XKeycodeToKeysym */
+#ifdef XLookupKeysym
+extern KeySym VLookupKeysym(
+#if NeedFunctionPrototypes
+ XKeyEvent* /* key_event */,
+ int /* index */
+#endif
+);
+#endif /* XLookupKeysym */
+#ifdef XGetKeyboardMapping
+extern KeySym *VGetKeyboardMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+#if NeedWidePrototypes
+ unsigned int /* first_keycode */,
+#else
+ KeyCode /* first_keycode */,
+#endif
+ int /* keycode_count */,
+ int* /* keysyms_per_keycode_return */
+#endif
+);
+#endif /* XGetKeyboardMapping */
+#ifdef XStringToKeysym
+extern KeySym VStringToKeysym(
+#if NeedFunctionPrototypes
+ const char* /* string */
+#endif
+);
+#endif /* XStringToKeysym */
+#ifdef XMaxRequestSize
+extern long VMaxRequestSize(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XMaxRequestSize */
+#ifdef XResourceManagerString
+extern char *VResourceManagerString(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XResourceManagerString */
+#ifdef XDisplayMotionBufferSize
+extern unsigned long VDisplayMotionBufferSize(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XDisplayMotionBufferSize */
+#ifdef XVisualIDFromVisual
+extern VisualID VVisualIDFromVisual(
+#if NeedFunctionPrototypes
+ Visual* /* visual */
+#endif
+);
+#endif /* XVisualIDFromVisual */
+
+/* routines for dealing with extensions */
+
+#ifdef XInitExtension
+extern XExtCodes *VInitExtension(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ const char* /* name */
+#endif
+);
+#endif /* XInitExtension */
+
+#ifdef XAddExtension
+extern XExtCodes *VAddExtension(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XAddExtension */
+#ifdef XFindOnExtensionList
+extern XExtData *VFindOnExtensionList(
+#if NeedFunctionPrototypes
+ XExtData** /* structure */,
+ int /* number */
+#endif
+);
+#endif /* XFindOnExtensionList */
+#ifdef XEHeadOfExtensionList
+extern XExtData **VEHeadOfExtensionList(
+#if NeedFunctionPrototypes
+ XEDataObject /* object */
+#endif
+);
+#endif /* XEHeadOfExtensionList */
+
+/* these are routines for which there are also macros */
+#ifdef XRootWindow
+extern Window VRootWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XRootWindow */
+#ifdef XDefaultRootWindow
+extern Window VDefaultRootWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XDefaultRootWindow */
+#ifdef XRootWindowOfScreen
+extern Window VRootWindowOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XRootWindowOfScreen */
+#ifdef XDefaultVisual
+extern Visual *VDefaultVisual(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XDefaultVisual */
+#ifdef XDefaultVisualOfScreen
+extern Visual *VDefaultVisualOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XDefaultVisualOfScreen */
+#ifdef XDefaultGC
+extern GC VDefaultGC(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XDefaultGC */
+#ifdef XDefaultGCOfScreen
+extern GC VDefaultGCOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XDefaultGCOfScreen */
+#ifdef XBlackPixel
+extern unsigned long VBlackPixel(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XBlackPixel */
+#ifdef XWhitePixel
+extern unsigned long VWhitePixel(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XWhitePixel */
+#ifdef XAllPlanes
+extern unsigned long VAllPlanes(
+#if NeedFunctionPrototypes
+ void
+#endif
+);
+#endif /* XAllPlanes */
+#ifdef XBlackPixelOfScreen
+extern unsigned long VBlackPixelOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XBlackPixelOfScreen */
+#ifdef XWhitePixelOfScreen
+extern unsigned long VWhitePixelOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XWhitePixelOfScreen */
+#ifdef XNextRequest
+extern unsigned long VNextRequest(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XNextRequest */
+#ifdef XLastKnownRequestProcessed
+extern unsigned long VLastKnownRequestProcessed(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XLastKnownRequestProcessed */
+#ifdef XServerVendor
+extern char *VServerVendor(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XServerVendor */
+#ifdef XDisplayString
+extern char *VDisplayString(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XDisplayString */
+#ifdef XDefaultColormap
+extern Colormap VDefaultColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XDefaultColormap */
+#ifdef XDefaultColormapOfScreen
+extern Colormap VDefaultColormapOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XDefaultColormapOfScreen */
+#ifdef XDisplayOfScreen
+extern Display *VDisplayOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XDisplayOfScreen */
+#ifdef XScreenOfDisplay
+extern Screen *VScreenOfDisplay(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XScreenOfDisplay */
+#ifdef XDefaultScreenOfDisplay
+extern Screen *VDefaultScreenOfDisplay(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XDefaultScreenOfDisplay */
+#ifdef XEventMaskOfScreen
+extern long VEventMaskOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XEventMaskOfScreen */
+
+#ifdef XScreenNumberOfScreen
+extern int VScreenNumberOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XScreenNumberOfScreen */
+
+#ifndef GENERATE_PIXMAPS
+#ifdef XSetErrorHandler
+extern XErrorHandler VSetErrorHandler(
+#if NeedFunctionPrototypes
+ XErrorHandler /* handler */
+#endif
+);
+#endif /* XSetErrorHandler */
+
+#ifdef XSetIOErrorHandler
+extern XIOErrorHandler VSetIOErrorHandler(
+#if NeedFunctionPrototypes
+ XIOErrorHandler /* handler */
+#endif
+);
+#endif /* XSetIOErrorHandler */
+#endif /* GENERATE_PIXMAPS */
+
+
+#ifdef XListPixmapFormats
+extern XPixmapFormatValues *VListPixmapFormats(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* count_return */
+#endif
+);
+#endif /* XListPixmapFormats */
+#ifdef XListDepths
+extern int *VListDepths(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */,
+ int* /* count_return */
+#endif
+);
+#endif /* XListDepths */
+
+/* ICCCM routines for things that don't require special include files; */
+/* other declarations are given in Xutil.h */
+#ifdef XReconfigureWMWindow
+extern Status VReconfigureWMWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* screen_number */,
+ unsigned int /* mask */,
+ XWindowChanges* /* changes */
+#endif
+);
+#endif /* XReconfigureWMWindow */
+
+#ifdef XGetWMProtocols
+extern Status VGetWMProtocols(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Atom** /* protocols_return */,
+ int* /* count_return */
+#endif
+);
+#endif /* XGetWMProtocols */
+#ifdef XSetWMProtocols
+extern Status VSetWMProtocols(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Atom* /* protocols */,
+ int /* count */
+#endif
+);
+#endif /* XSetWMProtocols */
+#ifdef XIconifyWindow
+extern Status VIconifyWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* screen_number */
+#endif
+);
+#endif /* XIconifyWindow */
+#ifdef XWithdrawWindow
+extern Status VWithdrawWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* screen_number */
+#endif
+);
+#endif /* XWithdrawWindow */
+#ifdef XGetCommand
+extern Status VGetCommand(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ char*** /* argv_return */,
+ int* /* argc_return */
+#endif
+);
+#endif /* XGetCommand */
+#ifdef XGetWMColormapWindows
+extern Status VGetWMColormapWindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window** /* windows_return */,
+ int* /* count_return */
+#endif
+);
+#endif /* XGetWMColormapWindows */
+#ifdef XSetWMColormapWindows
+extern Status VSetWMColormapWindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window* /* colormap_windows */,
+ int /* count */
+#endif
+);
+#endif /* XSetWMColormapWindows */
+#ifdef XFreeStringList
+extern void VFreeStringList(
+#if NeedFunctionPrototypes
+ char** /* list */
+#endif
+);
+#endif /* XFreeStringList */
+#ifdef XSetTransientForHint
+extern VSetTransientForHint(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window /* prop_window */
+#endif
+);
+#endif /* XSetTransientForHint */
+
+/* The following are given in alphabetical order */
+
+#ifdef XActivateScreenSaver
+extern VActivateScreenSaver(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XActivateScreenSaver */
+
+#ifdef XAddHost
+extern VAddHost(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XHostAddress* /* host */
+#endif
+);
+#endif /* XAddHost */
+
+#ifdef XAddHosts
+extern VAddHosts(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XHostAddress* /* hosts */,
+ int /* num_hosts */
+#endif
+);
+#endif /* XAddHosts */
+
+#ifdef XAddToExtensionList
+extern VAddToExtensionList(
+#if NeedFunctionPrototypes
+ struct _XExtData** /* structure */,
+ XExtData* /* ext_data */
+#endif
+);
+#endif /* XAddToExtensionList */
+
+#ifdef XAddToSaveSet
+extern VAddToSaveSet(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XAddToSaveSet */
+
+#ifdef XAllocColor
+extern Status VAllocColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ XColor* /* screen_in_out */
+#endif
+);
+#endif /* XAllocColor */
+
+#ifdef XAllocColorCells
+extern Status VAllocColorCells(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ Bool /* contig */,
+ unsigned long* /* plane_masks_return */,
+ unsigned int /* nplanes */,
+ unsigned long* /* pixels_return */,
+ unsigned int /* npixels */
+#endif
+);
+#endif /* XAllocColorCells */
+
+#ifdef XAllocColorPlanes
+extern Status VAllocColorPlanes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ Bool /* contig */,
+ unsigned long* /* pixels_return */,
+ int /* ncolors */,
+ int /* nreds */,
+ int /* ngreens */,
+ int /* nblues */,
+ unsigned long* /* rmask_return */,
+ unsigned long* /* gmask_return */,
+ unsigned long* /* bmask_return */
+#endif
+);
+#endif /* XAllocColorPlanes */
+
+#ifdef XAllocNamedColor
+extern Status VAllocNamedColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ const char* /* color_name */,
+ XColor* /* screen_def_return */,
+ XColor* /* exact_def_return */
+#endif
+);
+#endif /* XAllocNamedColor */
+
+#ifdef XAllowEvents
+extern VAllowEvents(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* event_mode */,
+ Time /* time */
+#endif
+);
+#endif /* XAllowEvents */
+
+#ifdef XAutoRepeatOff
+extern VAutoRepeatOff(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XAutoRepeatOff */
+
+#ifdef XAutoRepeatOn
+extern VAutoRepeatOn(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XAutoRepeatOn */
+
+#ifdef XBell
+extern VBell(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* percent */
+#endif
+);
+#endif /* XBell */
+
+#ifdef XBitmapBitOrder
+extern int VBitmapBitOrder(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XBitmapBitOrder */
+
+#ifdef XBitmapPad
+extern int VBitmapPad(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XBitmapPad */
+
+#ifdef XBitmapUnit
+extern int VBitmapUnit(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XBitmapUnit */
+
+#ifdef XCellsOfScreen
+extern int VCellsOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XCellsOfScreen */
+
+#ifdef XChangeActivePointerGrab
+extern VChangeActivePointerGrab(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ unsigned int /* event_mask */,
+ Cursor /* cursor */,
+ Time /* time */
+#endif
+);
+#endif /* XChangeActivePointerGrab */
+
+#ifdef XChangeGC
+extern VChangeGC(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned long /* valuemask */,
+ XGCValues* /* values */
+#endif
+);
+#endif /* XChangeGC */
+
+#ifdef XChangeKeyboardControl
+extern VChangeKeyboardControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ unsigned long /* value_mask */,
+ XKeyboardControl* /* values */
+#endif
+);
+#endif /* XChangeKeyboardControl */
+
+#ifdef XChangeKeyboardMapping
+extern VChangeKeyboardMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* first_keycode */,
+ int /* keysyms_per_keycode */,
+ KeySym* /* keysyms */,
+ int /* num_codes */
+#endif
+);
+#endif /* XChangeKeyboardMapping */
+
+#ifdef XChangePointerControl
+extern VChangePointerControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Bool /* do_accel */,
+ Bool /* do_threshold */,
+ int /* accel_numerator */,
+ int /* accel_denominator */,
+ int /* threshold */
+#endif
+);
+#endif /* XChangePointerControl */
+
+#ifdef XChangeProperty
+extern VChangeProperty(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Atom /* property */,
+ Atom /* type */,
+ int /* format */,
+ int /* mode */,
+ const unsigned char* /* data */,
+ int /* nelements */
+#endif
+);
+#endif /* XChangeProperty */
+
+#ifdef XChangeSaveSet
+extern VChangeSaveSet(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* change_mode */
+#endif
+);
+#endif /* XChangeSaveSet */
+
+#ifdef XChangeWindowAttributes
+extern VChangeWindowAttributes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ unsigned long /* valuemask */,
+ XSetWindowAttributes* /* attributes */
+#endif
+);
+#endif /* XChangeWindowAttributes */
+
+#ifdef XCheckIfEvent
+extern Bool VCheckIfEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XEvent* /* event_return */,
+ Bool (*) ( Display* /* display */,
+ XEvent* /* event */,
+ char* /* arg */
+ ) /* predicate */,
+ char* /* arg */
+#endif
+);
+#endif /* XCheckIfEvent */
+
+#ifdef XCheckMaskEvent
+extern Bool VCheckMaskEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ long /* event_mask */,
+ XEvent* /* event_return */
+#endif
+);
+#endif /* XCheckMaskEvent */
+
+#ifdef XCheckTypedEvent
+extern Bool VCheckTypedEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* event_type */,
+ XEvent* /* event_return */
+#endif
+);
+#endif /* XCheckTypedEvent */
+
+#ifdef XCheckTypedWindowEvent
+extern Bool VCheckTypedWindowEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* event_type */,
+ XEvent* /* event_return */
+#endif
+);
+#endif /* XCheckTypedWindowEvent */
+
+#ifdef XCheckWindowEvent
+extern Bool VCheckWindowEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ long /* event_mask */,
+ XEvent* /* event_return */
+#endif
+);
+#endif /* XCheckWindowEvent */
+
+#ifdef XCirculateSubwindows
+extern VCirculateSubwindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* direction */
+#endif
+);
+#endif /* XCirculateSubwindows */
+
+#ifdef XCirculateSubwindowsDown
+extern VCirculateSubwindowsDown(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XCirculateSubwindowsDown */
+
+#ifdef XCirculateSubwindowsUp
+extern VCirculateSubwindowsUp(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XCirculateSubwindowsUp */
+
+#ifdef XClearArea
+extern VClearArea(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ Bool /* exposures */
+#endif
+);
+#endif /* XClearArea */
+
+#ifdef XClearWindow
+extern VClearWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XClearWindow */
+
+#ifdef XCloseDisplay
+extern VCloseDisplay(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XCloseDisplay */
+
+#ifdef XConfigureWindow
+extern VConfigureWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ unsigned int /* value_mask */,
+ XWindowChanges* /* values */
+#endif
+);
+#endif /* XConfigureWindow */
+
+#ifdef XConnectionNumber
+extern int VConnectionNumber(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XConnectionNumber */
+
+#ifdef XConvertSelection
+extern VConvertSelection(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Atom /* selection */,
+ Atom /* target */,
+ Atom /* property */,
+ Window /* requestor */,
+ Time /* time */
+#endif
+);
+#endif /* XConvertSelection */
+
+#ifdef XCopyArea
+extern VCopyArea(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* src */,
+ Drawable /* dest */,
+ GC /* gc */,
+ int /* src_x */,
+ int /* src_y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ int /* dest_x */,
+ int /* dest_y */
+#endif
+);
+#endif /* XCopyArea */
+
+#ifdef XCopyGC
+extern VCopyGC(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* src */,
+ unsigned long /* valuemask */,
+ GC /* dest */
+#endif
+);
+#endif /* XCopyGC */
+
+#ifdef XCopyPlane
+extern VCopyPlane(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* src */,
+ Drawable /* dest */,
+ GC /* gc */,
+ int /* src_x */,
+ int /* src_y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ int /* dest_x */,
+ int /* dest_y */,
+ unsigned long /* plane */
+#endif
+);
+#endif /* XCopyPlane */
+
+#ifdef XDefaultDepth
+extern int VDefaultDepth(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XDefaultDepth */
+
+#ifdef XDefaultDepthOfScreen
+extern int VDefaultDepthOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XDefaultDepthOfScreen */
+
+#ifdef XDefaultScreen
+extern int VDefaultScreen(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XDefaultScreen */
+
+#ifdef XDefineCursor
+extern VDefineCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Cursor /* cursor */
+#endif
+);
+#endif /* XDefineCursor */
+
+#ifdef XDeleteProperty
+extern VDeleteProperty(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Atom /* property */
+#endif
+);
+#endif /* XDeleteProperty */
+
+#ifdef XDestroyWindow
+extern VDestroyWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XDestroyWindow */
+
+#ifdef XDestroySubwindows
+extern VDestroySubwindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XDestroySubwindows */
+
+#ifdef XDoesBackingStore
+extern int VDoesBackingStore(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XDoesBackingStore */
+
+#ifdef XDoesSaveUnders
+extern Bool VDoesSaveUnders(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XDoesSaveUnders */
+
+#ifdef XDisableAccessControl
+extern VDisableAccessControl(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XDisableAccessControl */
+
+
+#ifdef XDisplayCells
+extern int VDisplayCells(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XDisplayCells */
+
+#ifdef XDisplayHeight
+extern int VDisplayHeight(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XDisplayHeight */
+
+#ifdef XDisplayHeightMM
+extern int VDisplayHeightMM(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XDisplayHeightMM */
+
+#ifdef XDisplayKeycodes
+extern VDisplayKeycodes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* min_keycodes_return */,
+ int* /* max_keycodes_return */
+#endif
+);
+#endif /* XDisplayKeycodes */
+
+#ifdef XDisplayPlanes
+extern int VDisplayPlanes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XDisplayPlanes */
+
+#ifdef XDisplayWidth
+extern int VDisplayWidth(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XDisplayWidth */
+
+#ifdef XDisplayWidthMM
+extern int VDisplayWidthMM(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen_number */
+#endif
+);
+#endif /* XDisplayWidthMM */
+
+#ifdef XDrawArc
+extern VDrawArc(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ int /* angle1 */,
+ int /* angle2 */
+#endif
+);
+#endif /* XDrawArc */
+
+#ifdef XDrawArcs
+extern VDrawArcs(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XArc* /* arcs */,
+ int /* narcs */
+#endif
+);
+#endif /* XDrawArcs */
+
+#ifdef XDrawImageString
+extern VDrawImageString(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ const char* /* string */,
+ int /* length */
+#endif
+);
+#endif /* XDrawImageString */
+
+#ifdef XDrawImageString16
+extern VDrawImageString16(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ const XChar2b* /* string */,
+ int /* length */
+#endif
+);
+#endif /* XDrawImageString16 */
+
+#ifdef XDrawLine
+extern VDrawLine(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x1 */,
+ int /* x2 */,
+ int /* y1 */,
+ int /* y2 */
+#endif
+);
+#endif /* XDrawLine */
+
+#ifdef XDrawLines
+extern VDrawLines(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XPoint* /* points */,
+ int /* npoints */,
+ int /* mode */
+#endif
+);
+#endif /* XDrawLines */
+
+#ifdef XDrawPoint
+extern VDrawPoint(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */
+#endif
+);
+#endif /* XDrawPoint */
+
+#ifdef XDrawPoints
+extern VDrawPoints(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XPoint* /* points */,
+ int /* npoints */,
+ int /* mode */
+#endif
+);
+#endif /* XDrawPoints */
+
+#ifdef XDrawRectangle
+extern VDrawRectangle(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+#endif /* XDrawRectangle */
+
+#ifdef XDrawRectangles
+extern VDrawRectangles(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XRectangle* /* rectangles */,
+ int /* nrectangles */
+#endif
+);
+#endif /* XDrawRectangles */
+
+#ifdef XDrawSegments
+extern VDrawSegments(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XSegment* /* segments */,
+ int /* nsegments */
+#endif
+);
+#endif /* XDrawSegments */
+
+#ifdef XDrawString
+extern VDrawString(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ const char* /* string */,
+ int /* length */
+#endif
+);
+#endif /* XDrawString */
+
+#ifdef XDrawString16
+extern VDrawString16(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ const XChar2b* /* string */,
+ int /* length */
+#endif
+);
+#endif /* XDrawString16 */
+
+#ifdef XDrawText
+extern VDrawText(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ XTextItem* /* items */,
+ int /* nitems */
+#endif
+);
+#endif /* XDrawText */
+
+#ifdef XDrawText16
+extern VDrawText16(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ XTextItem16* /* items */,
+ int /* nitems */
+#endif
+);
+#endif /* XDrawText16 */
+
+#ifdef XEnableAccessControl
+extern VEnableAccessControl(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XEnableAccessControl */
+
+#ifdef XEventsQueued
+extern int VEventsQueued(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* mode */
+#endif
+);
+#endif /* XEventsQueued */
+
+#ifdef XFetchName
+extern Status VFetchName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ char** /* window_name_return */
+#endif
+);
+#endif /* XFetchName */
+
+#ifdef XFillArc
+extern VFillArc(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ int /* angle1 */,
+ int /* angle2 */
+#endif
+);
+#endif /* XFillArc */
+
+#ifdef XFillArcs
+extern VFillArcs(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XArc* /* arcs */,
+ int /* narcs */
+#endif
+);
+#endif /* XFillArcs */
+
+#ifdef XFillPolygon
+extern VFillPolygon(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XPoint* /* points */,
+ int /* npoints */,
+ int /* shape */,
+ int /* mode */
+#endif
+);
+#endif /* XFillPolygon */
+
+#ifdef XFillRectangle
+extern VFillRectangle(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+#endif /* XFillRectangle */
+
+#ifdef XFillRectangles
+extern VFillRectangles(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XRectangle* /* rectangles */,
+ int /* nrectangles */
+#endif
+);
+#endif /* XFillRectangles */
+
+#ifdef XFlush
+extern VFlush(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XFlush */
+
+#ifdef XForceScreenSaver
+extern VForceScreenSaver(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* mode */
+#endif
+);
+#endif /* XForceScreenSaver */
+
+#ifdef XFree
+extern VFree(
+#if NeedFunctionPrototypes
+ char* /* data */
+#endif
+);
+#endif /* XFree */
+
+#ifdef XFreeColormap
+extern VFreeColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */
+#endif
+);
+#endif /* XFreeColormap */
+
+#ifdef XFreeColors
+extern VFreeColors(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ unsigned long* /* pixels */,
+ int /* npixels */,
+ unsigned long /* planes */
+#endif
+);
+#endif /* XFreeColors */
+
+#ifdef XFreeCursor
+extern VFreeCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Cursor /* cursor */
+#endif
+);
+#endif /* XFreeCursor */
+
+#ifdef XFreeExtensionList
+extern VFreeExtensionList(
+#if NeedFunctionPrototypes
+ char** /* list */
+#endif
+);
+#endif /* XFreeExtensionList */
+
+#ifdef XFreeFont
+extern VFreeFont(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XFontStruct* /* font_struct */
+#endif
+);
+#endif /* XFreeFont */
+
+#ifdef XFreeFontInfo
+extern VFreeFontInfo(
+#if NeedFunctionPrototypes
+ char** /* names */,
+ XFontStruct* /* free_info */,
+ int /* actual_count */
+#endif
+);
+#endif /* XFreeFontInfo */
+
+#ifdef XFreeFontNames
+extern VFreeFontNames(
+#if NeedFunctionPrototypes
+ char** /* list */
+#endif
+);
+#endif /* XFreeFontNames */
+
+#ifdef XFreeFontPath
+extern VFreeFontPath(
+#if NeedFunctionPrototypes
+ char** /* list */
+#endif
+);
+#endif /* XFreeFontPath */
+
+#ifdef XFreeGC
+extern VFreeGC(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */
+#endif
+);
+#endif /* XFreeGC */
+
+#ifdef XFreeModifiermap
+extern VFreeModifiermap(
+#if NeedFunctionPrototypes
+ XModifierKeymap* /* modmap */
+#endif
+);
+#endif /* XFreeModifiermap */
+
+#ifdef XFreePixmap
+extern VFreePixmap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Pixmap /* pixmap */
+#endif
+);
+#endif /* XFreePixmap */
+
+#ifdef XGeometry
+extern int VGeometry(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* screen */,
+ const char* /* position */,
+ const char* /* default_position */,
+ unsigned int /* bwidth */,
+ unsigned int /* fwidth */,
+ unsigned int /* fheight */,
+ int /* xadder */,
+ int /* yadder */,
+ int* /* x_return */,
+ int* /* y_return */,
+ int* /* width_return */,
+ int* /* height_return */
+#endif
+);
+#endif /* XGeometry */
+
+#ifdef XGetErrorDatabaseText
+extern VGetErrorDatabaseText(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ const char* /* name */,
+ const char* /* message */,
+ const char* /* default_string */,
+ char* /* buffer_return */,
+ int /* length */
+#endif
+);
+#endif /* XGetErrorDatabaseText */
+
+#ifdef XGetErrorText
+extern VGetErrorText(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* code */,
+ char* /* buffer_return */,
+ int /* length */
+#endif
+);
+#endif /* XGetErrorText */
+
+#ifdef XGetFontProperty
+extern Bool VGetFontProperty(
+#if NeedFunctionPrototypes
+ XFontStruct* /* font_struct */,
+ Atom /* atom */,
+ unsigned long* /* value_return */
+#endif
+);
+#endif /* XGetFontProperty */
+
+#ifdef XGetGCValues
+extern Status VGetGCValues(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned long /* valuemask */,
+ XGCValues* /* values_return */
+#endif
+);
+#endif /* XGetGCValues */
+
+#ifdef XGetGeometry
+extern Status VGetGeometry(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ Window* /* root_return */,
+ int* /* x_return */,
+ int* /* y_return */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */,
+ unsigned int* /* border_width_return */,
+ unsigned int* /* depth_return */
+#endif
+);
+#endif /* XGetGeometry */
+
+#ifdef XGetIconName
+extern Status VGetIconName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ char** /* icon_name_return */
+#endif
+);
+#endif /* XGetIconName */
+
+#ifdef XGetInputFocus
+extern VGetInputFocus(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window* /* focus_return */,
+ int* /* revert_to_return */
+#endif
+);
+#endif /* XGetInputFocus */
+
+#ifdef XGetKeyboardControl
+extern VGetKeyboardControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XKeyboardState* /* values_return */
+#endif
+);
+#endif /* XGetKeyboardControl */
+
+#ifdef XGetPointerControl
+extern VGetPointerControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* accel_numerator_return */,
+ int* /* accel_denominator_return */,
+ int* /* threshold_return */
+#endif
+);
+#endif /* XGetPointerControl */
+
+#ifdef XGetPointerMapping
+extern int VGetPointerMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ unsigned char* /* map_return */,
+ int /* nmap */
+#endif
+);
+#endif /* XGetPointerMapping */
+
+#ifdef XGetScreenSaver
+extern VGetScreenSaver(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int* /* timeout_return */,
+ int* /* interval_return */,
+ int* /* prefer_blanking_return */,
+ int* /* allow_exposures_return */
+#endif
+);
+#endif /* XGetScreenSaver */
+
+#ifdef XGetTransientForHint
+extern Status VGetTransientForHint(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window* /* prop_window_return */
+#endif
+);
+#endif /* XGetTransientForHint */
+
+#ifdef XGetWindowProperty
+extern int VGetWindowProperty(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Atom /* property */,
+ long /* long_offset */,
+ long /* long_length */,
+ Bool /* delete */,
+ Atom /* req_type */,
+ Atom* /* actual_type_return */,
+ int* /* actual_format_return */,
+ unsigned long* /* nitems_return */,
+ unsigned long* /* bytes_after_return */,
+ unsigned char** /* prop_return */
+#endif
+);
+#endif /* XGetWindowProperty */
+
+#ifdef XGetWindowAttributes
+extern Status VGetWindowAttributes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ XWindowAttributes* /* window_attributes_return */
+#endif
+);
+#endif /* XGetWindowAttributes */
+
+#ifdef XGrabButton
+extern VGrabButton(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ unsigned int /* button */,
+ unsigned int /* modifiers */,
+ Window /* grab_window */,
+ Bool /* owner_events */,
+ unsigned int /* event_mask */,
+ int /* pointer_mode */,
+ int /* keyboard_mode */,
+ Window /* confine_to */,
+ Cursor /* cursor */
+#endif
+);
+#endif /* XGrabButton */
+
+#ifdef XGrabKey
+extern VGrabKey(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* keycode */,
+ unsigned int /* modifiers */,
+ Window /* grab_window */,
+ Bool /* owner_events */,
+ int /* pointer_mode */,
+ int /* keyboard_mode */
+#endif
+);
+#endif /* XGrabKey */
+
+#ifdef XGrabKeyboard
+extern int VGrabKeyboard(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* grab_window */,
+ Bool /* owner_events */,
+ int /* pointer_mode */,
+ int /* keyboard_mode */,
+ Time /* time */
+#endif
+);
+#endif /* XGrabKeyboard */
+
+#ifdef XGrabPointer
+extern int VGrabPointer(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* grab_window */,
+ Bool /* owner_events */,
+ unsigned int /* event_mask */,
+ int /* pointer_mode */,
+ int /* keyboard_mode */,
+ Window /* confine_to */,
+ Cursor /* cursor */,
+ Time /* time */
+#endif
+);
+#endif /* XGrabPointer */
+
+#ifdef XGrabServer
+extern VGrabServer(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XGrabServer */
+
+#ifdef XHeightMMOfScreen
+extern int VHeightMMOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XHeightMMOfScreen */
+
+#ifdef XHeightOfScreen
+extern int VHeightOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XHeightOfScreen */
+
+#ifdef XIfEvent
+extern VIfEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XEvent* /* event_return */,
+ Bool (*) ( Display* /* display */,
+ XEvent* /* event */,
+ char* /* arg */
+ ) /* predicate */,
+ char* /* arg */
+#endif
+);
+#endif /* XIfEvent */
+
+#ifdef XImageByteOrder
+extern int VImageByteOrder(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XImageByteOrder */
+
+#ifdef XInstallColormap
+extern VInstallColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */
+#endif
+);
+#endif /* XInstallColormap */
+
+#ifdef XKeysymToKeycode
+extern KeyCode VKeysymToKeycode(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ KeySym /* keysym */
+#endif
+);
+#endif /* XKeysymToKeycode */
+
+#ifdef XKillClient
+extern VKillClient(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* resource */
+#endif
+);
+#endif /* XKillClient */
+
+#ifdef XLastKnownRequestProcessed
+extern unsigned long VLastKnownRequestProcessed(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XLastKnownRequestProcessed */
+
+#ifdef XLookupColor
+extern Status VLookupColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ const char* /* color_name */,
+ XColor* /* exact_def_return */,
+ XColor* /* screen_def_return */
+#endif
+);
+#endif /* XLookupColor */
+
+#ifdef XLowerWindow
+extern VLowerWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XLowerWindow */
+
+#ifdef XMapRaised
+extern VMapRaised(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XMapRaised */
+
+#ifdef XMapSubwindows
+extern VMapSubwindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XMapSubwindows */
+
+#ifdef XMapWindow
+extern VMapWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XMapWindow */
+
+#ifdef XMaskEvent
+extern VMaskEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ long /* event_mask */,
+ XEvent* /* event_return */
+#endif
+);
+#endif /* XMaskEvent */
+
+#ifdef XMaxCmapsOfScreen
+extern int VMaxCmapsOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XMaxCmapsOfScreen */
+
+#ifdef XMinCmapsOfScreen
+extern int VMinCmapsOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XMinCmapsOfScreen */
+
+#ifdef XMoveResizeWindow
+extern VMoveResizeWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* x */,
+ int /* y */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+#endif /* XMoveResizeWindow */
+
+#ifdef XMoveWindow
+extern VMoveWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ int /* x */,
+ int /* y */
+#endif
+);
+#endif /* XMoveWindow */
+
+#ifndef GENERATE_PIXMAPS
+#ifdef XNextEvent
+extern VNextEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XEvent* /* event_return */
+#endif
+);
+#endif /* XNextEvent */
+#endif /* GENERATE_PIXMAPS */
+
+#ifdef XNoOp
+extern VNoOp(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XNoOp */
+
+#ifdef XParseColor
+extern Status VParseColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ const char* /* spec */,
+ XColor* /* exact_def_return */
+#endif
+);
+#endif /* XParseColor */
+
+#ifdef XParseGeometry
+extern int VParseGeometry(
+#if NeedFunctionPrototypes
+ const char* /* parsestring */,
+ int* /* x_return */,
+ int* /* y_return */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */
+#endif
+);
+#endif /* XParseGeometry */
+
+#ifdef XPeekEvent
+extern VPeekEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XEvent* /* event_return */
+#endif
+);
+#endif /* XPeekEvent */
+
+#ifdef XPeekIfEvent
+extern VPeekIfEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XEvent* /* event_return */,
+ Bool (*) ( Display* /* display */,
+ XEvent* /* event */,
+ char* /* arg */
+ ) /* predicate */,
+ char* /* arg */
+#endif
+);
+#endif /* XPeekIfEvent */
+
+#ifdef XPending
+extern int VPending(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XPending */
+
+#ifdef XPlanesOfScreen
+extern int VPlanesOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+
+#endif
+);
+#endif /* XPlanesOfScreen */
+
+#ifdef XProtocolRevision
+extern int VProtocolRevision(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XProtocolRevision */
+
+#ifdef XProtocolVersion
+extern int VProtocolVersion(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XProtocolVersion */
+
+
+#ifdef XPutBackEvent
+extern VPutBackEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XEvent* /* event */
+#endif
+);
+#endif /* XPutBackEvent */
+
+#ifdef XPutImage
+extern VPutImage(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ GC /* gc */,
+ XImage* /* image */,
+ int /* src_x */,
+ int /* src_y */,
+ int /* dest_x */,
+ int /* dest_y */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+#endif /* XPutImage */
+
+#ifdef XQLength
+extern int VQLength(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XQLength */
+
+#ifdef XQueryBestCursor
+extern Status VQueryBestCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */
+#endif
+);
+#endif /* XQueryBestCursor */
+
+#ifdef XQueryBestSize
+extern Status VQueryBestSize(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* class */,
+ Drawable /* which_screen */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */
+#endif
+);
+#endif /* XQueryBestSize */
+
+#ifdef XQueryBestStipple
+extern Status VQueryBestStipple(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* which_screen */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */
+#endif
+);
+#endif /* XQueryBestStipple */
+
+#ifdef XQueryBestTile
+extern Status VQueryBestTile(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* which_screen */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */
+#endif
+);
+#endif /* XQueryBestTile */
+
+#ifdef XQueryColor
+extern VQueryColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ XColor* /* def_in_out */
+#endif
+);
+#endif /* XQueryColor */
+
+#ifdef XQueryColors
+extern VQueryColors(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ XColor* /* defs_in_out */,
+ int /* ncolors */
+#endif
+);
+#endif /* XQueryColors */
+
+#ifdef XQueryExtension
+extern Bool VQueryExtension(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ const char* /* name */,
+ int* /* major_opcode_return */,
+ int* /* first_event_return */,
+ int* /* first_error_return */
+#endif
+);
+#endif /* XQueryExtension */
+
+#ifdef XQueryKeymap
+extern VQueryKeymap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ char [32] /* keys_return */
+#endif
+);
+#endif /* XQueryKeymap */
+
+#ifdef XQueryPointer
+extern Bool VQueryPointer(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window* /* root_return */,
+ Window* /* child_return */,
+ int* /* root_x_return */,
+ int* /* root_y_return */,
+ int* /* win_x_return */,
+ int* /* win_y_return */,
+ unsigned int* /* mask_return */
+#endif
+);
+#endif /* XQueryPointer */
+
+#ifdef XQueryTextExtents
+extern VQueryTextExtents(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* font_ID */,
+ const char* /* string */,
+ int /* nchars */,
+ int* /* direction_return */,
+ int* /* font_ascent_return */,
+ int* /* font_descent_return */,
+ XCharStruct* /* overall_return */
+#endif
+);
+#endif /* XQueryTextExtents */
+
+#ifdef XQueryTextExtents16
+extern VQueryTextExtents16(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XID /* font_ID */,
+ const XChar2b* /* string */,
+ int /* nchars */,
+ int* /* direction_return */,
+ int* /* font_ascent_return */,
+ int* /* font_descent_return */,
+ XCharStruct* /* overall_return */
+#endif
+);
+#endif /* XQueryTextExtents16 */
+
+#ifdef XQueryTree
+extern Status VQueryTree(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window* /* root_return */,
+ Window* /* parent_return */,
+ Window** /* children_return */,
+ unsigned int* /* nchildren_return */
+#endif
+);
+#endif /* XQueryTree */
+
+#ifdef XRaiseWindow
+extern VRaiseWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XRaiseWindow */
+
+#ifdef XReadBitmapFile
+extern int VReadBitmapFile(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Drawable /* d */,
+ const char* /* filename */,
+ unsigned int* /* width_return */,
+ unsigned int* /* height_return */,
+ Pixmap* /* bitmap_return */,
+ int* /* x_hot_return */,
+ int* /* y_hot_return */
+#endif
+);
+#endif /* XReadBitmapFile */
+
+#ifdef XRebindKeysym
+extern VRebindKeysym(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ KeySym /* keysym */,
+ KeySym* /* list */,
+ int /* mod_count */,
+ const unsigned char* /* string */,
+ int /* bytes_string */
+#endif
+);
+#endif /* XRebindKeysym */
+
+#ifdef XRecolorCursor
+extern VRecolorCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Cursor /* cursor */,
+ XColor* /* foreground_color */,
+ XColor* /* background_color */
+#endif
+);
+#endif /* XRecolorCursor */
+
+#ifdef XRefreshKeyboardMapping
+extern VRefreshKeyboardMapping(
+#if NeedFunctionPrototypes
+ XMappingEvent* /* event_map */
+#endif
+);
+#endif /* XRefreshKeyboardMapping */
+
+#ifdef XRemoveFromSaveSet
+extern VRemoveFromSaveSet(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XRemoveFromSaveSet */
+
+#ifdef XRemoveHost
+extern VRemoveHost(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XHostAddress* /* host */
+#endif
+);
+#endif /* XRemoveHost */
+
+#ifdef XRemoveHosts
+extern VRemoveHosts(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XHostAddress* /* hosts */,
+ int /* num_hosts */
+#endif
+);
+#endif /* XRemoveHosts */
+
+#ifdef XReparentWindow
+extern VReparentWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Window /* parent */,
+ int /* x */,
+ int /* y */
+#endif
+);
+#endif /* XReparentWindow */
+
+#ifdef XResetScreenSaver
+extern VResetScreenSaver(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XResetScreenSaver */
+
+#ifdef XResizeWindow
+extern VResizeWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ unsigned int /* width */,
+ unsigned int /* height */
+#endif
+);
+#endif /* XResizeWindow */
+
+#ifdef XRestackWindows
+extern VRestackWindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window* /* windows */,
+ int /* nwindows */
+#endif
+);
+#endif /* XRestackWindows */
+
+#ifdef XRotateBuffers
+extern VRotateBuffers(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* rotate */
+#endif
+);
+#endif /* XRotateBuffers */
+
+#ifdef XRotateWindowProperties
+extern VRotateWindowProperties(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Atom* /* properties */,
+ int /* num_prop */,
+ int /* npositions */
+#endif
+);
+#endif /* XRotateWindowProperties */
+
+#ifdef XScreenCount
+extern int VScreenCount(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XScreenCount */
+
+#ifdef XSelectInput
+extern VSelectInput(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ long /* event_mask */
+#endif
+);
+#endif /* XSelectInput */
+
+#ifdef XSendEvent
+extern Status VSendEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Bool /* propagate */,
+ long /* event_mask */,
+ XEvent* /* event_send */
+#endif
+);
+#endif /* XSendEvent */
+
+#ifdef XSetAccessControl
+extern VSetAccessControl(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* mode */
+#endif
+);
+#endif /* XSetAccessControl */
+
+#ifdef XSetArcMode
+extern VSetArcMode(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* arc_mode */
+#endif
+);
+#endif /* XSetArcMode */
+
+#ifdef XSetBackground
+extern VSetBackground(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned long /* background */
+#endif
+);
+#endif /* XSetBackground */
+
+#ifdef XSetClipMask
+extern VSetClipMask(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ Pixmap /* pixmap */
+#endif
+);
+#endif /* XSetClipMask */
+
+#ifdef XSetClipOrigin
+extern VSetClipOrigin(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* clip_x_origin */,
+ int /* clip_y_origin */
+#endif
+);
+#endif /* XSetClipOrigin */
+
+#ifdef XSetClipRectangles
+extern VSetClipRectangles(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* clip_x_origin */,
+ int /* clip_y_origin */,
+ XRectangle* /* rectangles */,
+ int /* n */,
+ int /* ordering */
+#endif
+);
+#endif /* XSetClipRectangles */
+
+#ifdef XSetCloseDownMode
+extern VSetCloseDownMode(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* close_mode */
+#endif
+);
+#endif /* XSetCloseDownMode */
+
+#ifdef XSetCommand
+extern VSetCommand(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ char** /* argv */,
+ int /* argc */
+#endif
+);
+#endif /* XSetCommand */
+
+#ifdef XSetDashes
+extern VSetDashes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* dash_offset */,
+ const char* /* dash_list */,
+ int /* n */
+#endif
+);
+#endif /* XSetDashes */
+
+#ifdef XSetFillRule
+extern VSetFillRule(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* fill_rule */
+#endif
+);
+#endif /* XSetFillRule */
+
+#ifdef XSetFillStyle
+extern VSetFillStyle(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* fill_style */
+#endif
+);
+#endif /* XSetFillStyle */
+
+#ifdef XSetFont
+extern VSetFont(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ Font /* font */
+#endif
+);
+#endif /* XSetFont */
+
+#ifdef XSetFontPath
+extern VSetFontPath(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ char** /* directories */,
+ int /* ndirs */
+#endif
+);
+#endif /* XSetFontPath */
+
+#ifdef XSetForeground
+extern VSetForeground(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned long /* foreground */
+#endif
+);
+#endif /* XSetForeground */
+
+#ifdef XSetFunction
+extern VSetFunction(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* function */
+#endif
+);
+#endif /* XSetFunction */
+
+#ifdef XSetGraphicsExposures
+extern VSetGraphicsExposures(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ Bool /* graphics_exposures */
+#endif
+);
+#endif /* XSetGraphicsExposures */
+
+#ifdef XSetIconName
+extern VSetIconName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ const char* /* icon_name */
+#endif
+);
+#endif /* XSetIconName */
+
+#ifdef XSetInputFocus
+extern VSetInputFocus(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* focus */,
+ int /* revert_to */,
+ Time /* time */
+#endif
+);
+#endif /* XSetInputFocus */
+
+#ifdef XSetLineAttributes
+extern VSetLineAttributes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned int /* line_width */,
+ int /* line_style */,
+ int /* cap_style */,
+ int /* join_style */
+#endif
+);
+#endif /* XSetLineAttributes */
+
+#ifdef XSetModifierMapping
+extern int VSetModifierMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ XModifierKeymap* /* modmap */
+#endif
+);
+#endif /* XSetModifierMapping */
+
+#ifdef XSetPlaneMask
+extern VSetPlaneMask(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned long /* plane_mask */
+#endif
+);
+#endif /* XSetPlaneMask */
+
+#ifdef XSetPointerMapping
+extern int VSetPointerMapping(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ const unsigned char* /* map */,
+ int /* nmap */
+#endif
+);
+#endif /* XSetPointerMapping */
+
+#ifdef XSetScreenSaver
+extern VSetScreenSaver(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* timeout */,
+ int /* interval */,
+ int /* prefer_blanking */,
+ int /* allow_exposures */
+#endif
+);
+#endif /* XSetScreenSaver */
+
+#ifdef XSetSelectionOwner
+extern VSetSelectionOwner(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Atom /* selection */,
+ Window /* owner */,
+ Time /* time */
+#endif
+);
+#endif /* XSetSelectionOwner */
+
+#ifdef XSetState
+extern VSetState(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ unsigned long /* foreground */,
+ unsigned long /* background */,
+ int /* function */,
+ unsigned long /* plane_mask */
+#endif
+);
+#endif /* XSetState */
+
+#ifdef XSetStipple
+extern VSetStipple(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ Pixmap /* stipple */
+#endif
+);
+#endif /* XSetStipple */
+
+#ifdef XSetSubwindowMode
+extern VSetSubwindowMode(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* subwindow_mode */
+#endif
+);
+#endif /* XSetSubwindowMode */
+
+#ifdef XSetTSOrigin
+extern VSetTSOrigin(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ int /* ts_x_origin */,
+ int /* ts_y_origin */
+#endif
+);
+#endif /* XSetTSOrigin */
+
+#ifdef XSetTile
+extern VSetTile(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ GC /* gc */,
+ Pixmap /* tile */
+#endif
+);
+#endif /* XSetTile */
+
+#ifdef XSetWindowBackground
+extern VSetWindowBackground(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ unsigned long /* background_pixel */
+#endif
+);
+#endif /* XSetWindowBackground */
+
+#ifdef XSetWindowBackgroundPixmap
+extern VSetWindowBackgroundPixmap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Pixmap /* background_pixmap */
+#endif
+);
+#endif /* XSetWindowBackgroundPixmap */
+
+#ifdef XSetWindowBorder
+extern VSetWindowBorder(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ unsigned long /* border_pixel */
+#endif
+);
+#endif /* XSetWindowBorder */
+
+#ifdef XSetWindowBorderPixmap
+extern VSetWindowBorderPixmap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Pixmap /* border_pixmap */
+#endif
+);
+#endif /* XSetWindowBorderPixmap */
+
+#ifdef XSetWindowBorderWidth
+extern VSetWindowBorderWidth(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ unsigned int /* width */
+#endif
+);
+#endif /* XSetWindowBorderWidth */
+
+#ifdef XSetWindowColormap
+extern VSetWindowColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ Colormap /* colormap */
+#endif
+);
+#endif /* XSetWindowColormap */
+
+#ifdef XStoreBuffer
+extern VStoreBuffer(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ const char* /* bytes */,
+ int /* nbytes */,
+ int /* buffer */
+#endif
+);
+#endif /* XStoreBuffer */
+
+#ifdef XStoreBytes
+extern VStoreBytes(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ const char* /* bytes */,
+ int /* nbytes */
+#endif
+);
+#endif /* XStoreBytes */
+
+#ifdef XStoreColor
+extern VStoreColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ XColor* /* color */
+#endif
+);
+#endif /* XStoreColor */
+
+#ifdef XStoreColors
+extern VStoreColors(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ XColor* /* color */,
+ int /* ncolors */
+#endif
+);
+#endif /* XStoreColors */
+
+#ifdef XStoreName
+extern VStoreName(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ const char* /* window_name */
+#endif
+);
+#endif /* XStoreName */
+
+#ifdef XStoreNamedColor
+extern VStoreNamedColor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */,
+ const char* /* color */,
+ unsigned long /* pixel */,
+ int /* flags */
+#endif
+);
+#endif /* XStoreNamedColor */
+
+#ifdef XSync
+extern VSync(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Bool /* discard */
+#endif
+);
+#endif /* XSync */
+
+#ifdef XTextExtents
+extern VTextExtents(
+#if NeedFunctionPrototypes
+ XFontStruct* /* font_struct */,
+ const char* /* string */,
+ int /* nchars */,
+ int* /* direction_return */,
+ int* /* font_ascent_return */,
+ int* /* font_descent_return */,
+ XCharStruct* /* overall_return */
+#endif
+);
+#endif /* XTextExtents */
+
+#ifdef XTextExtents16
+extern VTextExtents16(
+#if NeedFunctionPrototypes
+ XFontStruct* /* font_struct */,
+ const XChar2b* /* string */,
+ int /* nchars */,
+ int* /* direction_return */,
+ int* /* font_ascent_return */,
+ int* /* font_descent_return */,
+ XCharStruct* /* overall_return */
+#endif
+);
+#endif /* XTextExtents16 */
+
+#ifdef XTextWidth
+extern int VTextWidth(
+#if NeedFunctionPrototypes
+ XFontStruct* /* font_struct */,
+ const char* /* string */,
+ int /* count */
+#endif
+);
+#endif /* XTextWidth */
+
+#ifdef XTextWidth16
+extern int VTextWidth16(
+#if NeedFunctionPrototypes
+ XFontStruct* /* font_struct */,
+ const XChar2b* /* string */,
+ int /* count */
+#endif
+);
+#endif /* XTextWidth16 */
+
+#ifdef XTranslateCoordinates
+extern Bool VTranslateCoordinates(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* src_w */,
+ Window /* dest_w */,
+ int /* src_x */,
+ int /* src_y */,
+ int* /* dest_x_return */,
+ int* /* dest_y_return */,
+ Window* /* child_return */
+#endif
+);
+#endif /* XTranslateCoordinates */
+
+#ifdef XUndefineCursor
+extern VUndefineCursor(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XUndefineCursor */
+
+#ifdef XUngrabButton
+extern VUngrabButton(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ unsigned int /* button */,
+ unsigned int /* modifiers */,
+ Window /* grab_window */
+#endif
+);
+#endif /* XUngrabButton */
+
+#ifdef XUngrabKey
+extern VUngrabKey(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* keycode */,
+ unsigned int /* modifiers */,
+ Window /* grab_window */
+#endif
+);
+#endif /* XUngrabKey */
+
+#ifdef XUngrabKeyboard
+extern VUngrabKeyboard(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Time /* time */
+#endif
+);
+#endif /* XUngrabKeyboard */
+
+#ifdef XUngrabPointer
+extern VUngrabPointer(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Time /* time */
+#endif
+);
+#endif /* XUngrabPointer */
+
+#ifdef XUngrabServer
+extern VUngrabServer(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XUngrabServer */
+
+#ifdef XUninstallColormap
+extern VUninstallColormap(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Colormap /* colormap */
+#endif
+);
+#endif /* XUninstallColormap */
+
+#ifdef XUnloadFont
+extern VUnloadFont(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Font /* font */
+#endif
+);
+#endif /* XUnloadFont */
+
+#ifdef XUnmapSubwindows
+extern VUnmapSubwindows(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XUnmapSubwindows */
+
+#ifdef XUnmapWindow
+extern VUnmapWindow(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */
+#endif
+);
+#endif /* XUnmapWindow */
+
+#ifdef XVendorRelease
+extern int VVendorRelease(
+#if NeedFunctionPrototypes
+ Display* /* display */
+#endif
+);
+#endif /* XVendorRelease */
+
+#ifdef XWarpPointer
+extern VWarpPointer(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* src_w */,
+ Window /* dest_w */,
+ int /* src_x */,
+ int /* src_y */,
+ unsigned int /* src_width */,
+ unsigned int /* src_height */,
+ int /* dest_x */,
+ int /* dest_y */
+#endif
+);
+#endif /* XWarpPointer */
+
+#ifdef XWidthMMOfScreen
+extern int VWidthMMOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XWidthMMOfScreen */
+
+#ifdef XWidthOfScreen
+extern int VWidthOfScreen(
+#if NeedFunctionPrototypes
+ Screen* /* screen */
+#endif
+);
+#endif /* XWidthOfScreen */
+
+#ifndef GENERATE_PIXMAPS
+#ifdef XWindowEvent
+extern VWindowEvent(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ Window /* w */,
+ long /* event_mask */,
+ XEvent* /* event_return */
+#endif
+);
+#endif /* XWindowEvent */
+#endif /* GENERATE_PIXMAPS */
+
+#ifdef XWriteBitmapFile
+extern int VWriteBitmapFile(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ const char* /* filename */,
+ Pixmap /* bitmap */,
+ unsigned int /* width */,
+ unsigned int /* height */,
+ int /* x_hot */,
+ int /* y_hot */
+#endif
+);
+#endif /* XWriteBitmapFile */
+
+/*** added by kieron to allow use of Xlib image functions that do not go
+ near the server. Our display structure may be different from the
+ Xlib one so any display using functions called by the image handling
+ routines in Xlib have to be duplicated in the pv lib.
+***/
+
+#ifdef _XGetScanlinePad
+extern int _VGetScanlinePad(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* depth */
+#endif
+);
+#endif /* _XGetScanlinePad */
+
+#ifdef _XGetBitsPerPixel
+extern int _VGetBitsPerPixel(
+#if NeedFunctionPrototypes
+ Display* /* display */,
+ int /* depth */
+#endif
+);
+#endif /* _XGetBitsPerPixel */
+
+/***** Nothing after it is munged, just included. - kieron *****/
+
+/***** added these for completeness, as used internally in our versions of
+ XCreateBitmapFromData() and XCreatePixmapFromBitmapData() - when
+ cobbling up an convincing XImage structure - or in VGetSubImage().
+ kieron
+*****/
+extern void _XInitImageFuncPtrs(
+#if NeedFunctionPrototypes
+ XImage* /* image */
+#endif
+);
+
+extern void _XSetImage(
+#if NeedFunctionPrototypes
+ XImage* /* src_image */,
+ XImage* /* dest_image */,
+ int /* dest_x */,
+ int /* dest_y */
+#endif
+);
+
+#endif /* _VLIB_H_ */
diff --git a/xc/test/xsuite/xtest/include/XstDisplay.h b/xc/test/xsuite/xtest/include/XstDisplay.h
new file mode 100644
index 000000000..7f27a2fe5
--- /dev/null
+++ b/xc/test/xsuite/xtest/include/XstDisplay.h
@@ -0,0 +1,225 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#define XstConnectionNumber(dpy) ((dpy)->fd)
+#define XstRootWindow(dpy, scr) (((dpy)->screens[(scr)]).root)
+#define XstDefaultScreen(dpy) ((dpy)->default_screen)
+#define XstDefaultRootWindow(dpy) (((dpy)->screens[(dpy)->default_screen]).root)
+#define XstDefaultVisual(dpy, scr) (((dpy)->screens[(scr)]).root_visual)
+#define XstDefaultGC(dpy, scr) (((dpy)->screens[(scr)]).default_gc)
+#define XstBlackPixel(dpy, scr) (((dpy)->screens[(scr)]).black_pixel)
+#define XstWhitePixel(dpy, scr) (((dpy)->screens[(scr)]).white_pixel)
+#define XstAllPlanes (~0)
+#define XstQLength(dpy) ((dpy)->qlen)
+#define XstDisplayWidth(dpy, scr) (((dpy)->screens[(scr)]).width)
+#define XstDisplayHeight(dpy, scr) (((dpy)->screens[(scr)]).height)
+#define XstDisplayWidthMM(dpy, scr)(((dpy)->screens[(scr)]).mwidth)
+#define XstDisplayHeightMM(dpy, scr)(((dpy)->screens[(scr)]).mheight)
+#define XstDisplayPlanes(dpy, scr) (((dpy)->screens[(scr)]).root_depth)
+#define XstDisplayCells(dpy, scr) (XstDefaultVisual((dpy), (scr))->map_entries)
+#define XstScreenCount(dpy) ((dpy)->nscreens)
+#define XstServerVendor(dpy) ((dpy)->vendor)
+#define XstProtocolVersion(dpy) ((dpy)->proto_major_version)
+#define XstProtocolRevision(dpy) ((dpy)->proto_minor_version)
+#define XstVendorRelease(dpy) ((dpy)->release)
+#define XstDisplayString(dpy) ((dpy)->display_name)
+#define XstDefaultDepth(dpy, scr) (((dpy)->screens[(scr)]).root_depth)
+#define XstDefaultColormap(dpy, scr)(((dpy)->screens[(scr)]).cmap)
+#define XstBitmapUnit(dpy) ((dpy)->bitmap_unit)
+#define XstBitmapBitOrder(dpy) ((dpy)->bitmap_bit_order)
+#define XstBitmapPad(dpy) ((dpy)->bitmap_pad)
+#define XstImageByteOrder(dpy) ((dpy)->byte_order)
+#define XstNextRequest(dpy) ((dpy)->request + 1)
+#define XstLastKnownRequestProcessed(dpy) ((dpy)->last_request_read)
+
+/* macros for screen oriented applications (toolkit) */
+#define XstScreenOfDisplay(dpy, scr)(&((dpy)->screens[(scr)]))
+#define XstDefaultScreenOfDisplay(dpy) (&((dpy)->screens[(dpy)->default_screen]))
+#define XstDisplayOfScreen(s) ((s)->display)
+#define XstRootWindowOfScreen(s) ((s)->root)
+#define XstBlackPixelOfScreen(s) ((s)->black_pixel)
+#define XstWhitePixelOfScreen(s) ((s)->white_pixel)
+#define XstDefaultColormapOfScreen(s)((s)->cmap)
+#define XstDefaultDepthOfScreen(s) ((s)->root_depth)
+#define XstDefaultGCOfScreen(s) ((s)->default_gc)
+#define XstDefaultVisualOfScreen(s)((s)->root_visual)
+#define XstWidthOfScreen(s) ((s)->width)
+#define XstHeightOfScreen(s) ((s)->height)
+#define XstWidthMMOfScreen(s) ((s)->mwidth)
+#define XstHeightMMOfScreen(s) ((s)->mheight)
+#define XstPlanesOfScreen(s) ((s)->root_depth)
+#define XstCellsOfScreen(s) (XstDefaultVisualOfScreen((s))->map_entries)
+#define XstMinCmapsOfScreen(s) ((s)->min_maps)
+#define XstMaxCmapsOfScreen(s) ((s)->max_maps)
+#define XstDoesSaveUnders(s) ((s)->save_unders)
+#define XstDoesBackingStore(s) ((s)->backing_store)
+#define XstEventMaskOfScreen(s) ((s)->root_input_mask)
+
+
+/*
+ * Visual structure; contains information about colormapping possible.
+ */
+typedef struct {
+ XExtData *ext_data; /* hook for extension to hang data */
+ VisualID visualid; /* visual id of this visual */
+#if defined(__cplusplus) || defined(c_plusplus)
+ int c_class; /* C++ class of screen (monochrome, etc.) */
+#else
+ int class; /* class of screen (monochrome, etc.) */
+#endif
+ unsigned long red_mask, green_mask, blue_mask; /* mask values */
+ int bits_per_rgb; /* log base 2 of distinct color values */
+ int map_entries; /* color map entries */
+} XstVisual;
+
+/*
+ * Depth structure; contains information for each possible depth.
+ */
+typedef struct {
+ int depth; /* this depth (Z) of the depth */
+ int nvisuals; /* number of Visual types at this depth */
+ XstVisual *visuals; /* list of visuals possible at this depth */
+} XstDepth;
+
+/*
+ * Information about the screen.
+ */
+typedef struct {
+ XExtData *ext_data; /* hook for extension to hang data */
+ struct _XstDisplay *display;/* back pointer to display structure */
+ Window root; /* Root window id. */
+ int width, height; /* width and height of screen */
+ int mwidth, mheight; /* width and height of in millimeters */
+ int ndepths; /* number of depths possible */
+ XstDepth *depths; /* list of allowable depths on the screen */
+ int root_depth; /* bits per pixel */
+ XstVisual *root_visual; /* root visual */
+#ifdef NotRequired
+ GC default_gc; /* GC for the root root visual */
+#endif /* NotRequired */
+ Colormap cmap; /* default color map */
+ unsigned long white_pixel;
+ unsigned long black_pixel; /* White and Black pixel values */
+ int max_maps, min_maps; /* max and min color maps */
+ int backing_store; /* Never, WhenMapped, Always */
+ Bool save_unders;
+ long root_input_mask; /* initial root input mask */
+} XstScreen;
+
+/*
+ * Format structure; describes ZFormat data the screen will understand.
+ */
+typedef struct {
+ XExtData *ext_data; /* hook for extension to hang data */
+ int depth; /* depth of this image format */
+ int bits_per_pixel; /* bits/pixel at this depth */
+ int scanline_pad; /* scanline must padded to this multiple */
+} XstScreenFormat;
+
+/*
+ * Display datatype maintaining display specific data.
+ */
+typedef struct _XstDisplay {
+ XExtData *ext_data; /* hook for extension to hang data */
+ struct _XstDisplay *next; /* next open Display on list */
+ int fd; /* Network socket. */
+ int lock; /* is someone in critical section? */
+ int proto_major_version;/* maj. version of server's X protocol */
+ int proto_minor_version;/* minor version of servers X protocol */
+ char *vendor; /* vendor of the server hardware */
+ long resource_base; /* resource ID base */
+ long resource_mask; /* resource ID mask bits */
+ long resource_id; /* allocator current ID */
+ int resource_shift; /* allocator shift to correct bits */
+ XID (*resource_alloc)(); /* allocator function */
+ int byte_order; /* screen byte order, LSBFirst, MSBFirst */
+ int bitmap_unit; /* padding and data requirements */
+ int bitmap_pad; /* padding requirements on bitmaps */
+ int bitmap_bit_order; /* LeastSignificant or MostSignificant */
+ int nformats; /* number of pixmap formats in list */
+ XstScreenFormat *pixmap_format; /* pixmap format list */
+ int vnumber; /* Xlib's X protocol version number. */
+ int release; /* release of the server */
+#ifdef NotRequired
+ struct _XSQEvent *head, *tail; /* Input event queue. */
+#endif /* NotRequired */
+ int qlen; /* Length of input event queue */
+ unsigned long last_request_read; /* seq number of last event read */
+ unsigned long request; /* sequence number of last request. */
+ char *last_req; /* beginning of last request, or dummy */
+ char *buffer; /* Output buffer starting address. */
+ char *bufptr; /* Output buffer index pointer. */
+ char *bufmax; /* Output buffer maximum+1 address. */
+ unsigned max_request_size; /* maximum number 32 bit words in request*/
+#ifdef NotRequired
+ struct _XrmHashBucketRec *db;
+#endif /* NotRequired */
+ int (*synchandler)(); /* Synchronization handler */
+ char *display_name; /* "host:display" string used on this connect*/
+ int default_screen; /* default screen for operations */
+ int nscreens; /* number of screens on this server*/
+ XstScreen *screens; /* pointer to list of screens */
+ unsigned long motion_buffer; /* size of motion buffer */
+ Window current; /* for use internally for Keymap notify */
+ int min_keycode; /* minimum defined keycode */
+ int max_keycode; /* maximum defined keycode */
+ KeySym *keysyms; /* This server's keysyms */
+ XModifierKeymap *modifiermap; /* This server's modifier keymap */
+ int keysyms_per_keycode;/* number of rows */
+ char *xdefaults; /* contents of defaults from server */
+ char *scratch_buffer; /* place to hang scratch buffer */
+ unsigned long scratch_length; /* length of scratch buffer */
+#ifdef NotRequired
+ int ext_number; /* extension number on this display */
+ _XExtension *ext_procs; /* extensions initialized on this display */
+#endif /* NotRequired */
+ /*
+ * the following can be fixed size, as the protocol defines how
+ * much address space is available.
+ * While this could be done using the extension vector, there
+ * may be MANY events processed, so a search through the extension
+ * list to find the right procedure for each event might be
+ * expensive if many extensions are being used.
+ */
+ Bool (*event_vec[128])(); /* vector for wire to event */
+ Status (*wire_vec[128])(); /* vector for event to wire */
+#ifdef NotRequired
+ KeySym lock_meaning; /* for XLookupString */
+ struct XKeytrans *key_bindings; /* for XLookupString */
+#endif /* NotRequired */
+ Font cursor_font; /* for XCreateFontCursor */
+ /*
+ * ICCCM information, version 1
+ */
+ struct _DisplayAtoms *atoms;
+ struct { /* for XReconfigureWMWindow */
+ long sequence_number;
+ int (*old_handler)();
+ Bool succeeded;
+ } reconfigure_wm_window;
+ /*
+ * additional connection info
+ */
+ unsigned long flags; /* internal connection flags */
+ unsigned int mode_switch; /* keyboard group modifiers */
+ /*
+ * For X Protocol Testing use only. This is where we store
+ * the Xlib Display pointer, for subsequent closing, if we
+ * had to use XOpenDisplay to get at the fd. If not it's NULL.
+ */
+ Display *xlib_dpy;
+} XstDisplay;
diff --git a/xc/test/xsuite/xtest/include/Xstlib.h b/xc/test/xsuite/xtest/include/Xstlib.h
new file mode 100644
index 000000000..826360399
--- /dev/null
+++ b/xc/test/xsuite/xtest/include/Xstlib.h
@@ -0,0 +1,336 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: Xstlib.h 1.8 89/04/17 $
+ */
+
+/*
+ * Includes for OS dependent headers
+ */
+#include "Xstos.h"
+
+/*
+ * Includes of standard X headers
+ */
+#define NEED_REPLIES
+#define NEED_EVENTS
+
+#include <X11/Xproto.h>
+#include <X11/Xlib.h>
+#include <X11/X.h>
+
+/*
+ * The client structure (Xst_clients) is visible to
+ * tests to provide easy use of macros to get at the
+ * underlying display structure stuff. Tests should
+ * NEVER muck directly with the client or display structure!!
+ * Always use Get_* and Set_* to affect this.
+ */
+
+#define MAX_CLIENTS 8
+#define LONG_LIVED_CLIENT (MAX_CLIENTS-1)
+
+typedef enum {
+ GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG, SETUP, OPEN_DISPLAY,
+ BAD_IDCHOICE1, BAD_IDCHOICE2, BAD_VALUE
+} TestType;
+
+#include "XstDisplay.h"
+
+typedef struct cl { /* client entry */
+ XstDisplay *cl_dpy; /* display structure for this client */
+ int cl_bytesex; /* byte sex for this client */
+ int cl_swap; /* need to swap to behave like this? */
+ int cl_pollout; /* seq # of outstanding poll */
+ int cl_reqout; /* seq # of outstanding request */
+ short cl_imagewidth; /* width of last image requested by GetImage */
+ short cl_imageheight; /* height of last image requested */
+ int cl_reqtype; /* type of outstanding request */
+ Atom cl_atom; /* default atom */
+ Colormap cl_colormap; /* default colormap */
+ Cursor cl_cursor; /* default cursor */
+ Font cl_font; /* default font */
+ GContext cl_gc; /* default gc */
+ Pixmap cl_pixmap; /* default pixmap */
+ Pixmap cl_cursor_pixmap;
+ /* default cursor pixmap (depth = 1) */
+ Window cl_window; /* default window */
+ xEvent cl_event; /* default event */
+ TestType cl_test_type; /* test for success or two types of BadLength */
+} CL;
+
+extern CL Xst_clients[MAX_CLIENTS];
+
+/* this is not a legal core request type (1..127, with gaps i.e.
+ * X_CreateWindow .. X_NoOperation).
+ */
+#define UNKNOWN_REQUEST_TYPE 0
+/* this is not a legal core event type (2..34) or a reply (1), but looks
+ * like an error (0), but isn't.
+ */
+#define ARBITRARY_EVENT_TYPE 0
+/* this is another value distinguishable from real requests. Problem is that
+ * there isn't an X_OpenDisplay and we're worried about using any of the gaps
+ * in the current encoding (120..126, inclusive, as of X11R5). We use -1
+ * instead.
+ */
+#define OPEN_DISPLAY_REQUEST_TYPE ((int)-1)
+
+/* Some initial checking for cocection replies, assumes at least one depth
+ * pixmap must be supported (n == 1) and 1 screen with 1 depth (m == 1)
+ * which comes out as a total length of 10 + 14 = 24 words.
+ */
+#define MIN_SETUP_DATA_LEN 24
+
+/*
+ * Defines for selecting, on a per client basis, the apparent
+ * byte sex of that client.
+ * Note that SEX_BOTH has been added and is the default.
+ * In this case the test code is called twice with byte sex
+ * set to NATIVE and REVERSE.
+ */
+#define SEX_BOTH 0
+#define SEX_NATIVE 1
+#define SEX_REVERSE 2
+#define SEX_MSB 3
+#define SEX_LSB 4
+
+/*
+ * Define expectations
+ */
+
+#define EXPECT_REPLY 0
+#define EXPECT_ERROR 1
+#define EXPECT_EVENT 2
+#define EXPECT_NOTHING 3
+/*
+ * General defines
+ */
+#define min(a,b) (((a) < (b)) ? (a) : (b))
+#define max(a,b) (((a) > (b)) ? (a) : (b))
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+/*
+ * Defines for Expect_*
+ */
+#define Expect_Error(client,type) ((xError *)Expect(client,EXPECT_ERROR,type))
+#define Expect_Event(client,type) ((xEvent *)Expect(client,EXPECT_EVENT,type))
+#define Expect_Nothing(client) ((int) Expect(client,EXPECT_NOTHING,0))
+#define Expect_Reply(client,type) ((xReply *)Expect(client,EXPECT_REPLY,type))
+
+/*
+ * Free_*
+ */
+#define Free_Error(ep) free((char *)(ep))
+#define Free_Event(ep) free((char *)(ep))
+#define Free_Reply(rp) free((char *)(rp))
+#define Free_Req(rp) free((char *)(rp))
+
+
+
+/*
+ * Macros to access display attributes.
+ */
+
+#define Get_Display(client) (Xst_clients[client].cl_dpy)
+#define Set_Display(client, val) (Xst_clients[client].cl_dpy = (val))
+#define Get_Root_Id(client) (XstDefaultRootWindow(Get_Display(client)))
+#define Get_Screen_Width(client) \
+ (XstDisplayWidth(Get_Display(client),XstDefaultScreen(Get_Display(client))))
+#define Get_Screen_Height(client) \
+ (XstDisplayHeight(Get_Display(client),XstDefaultScreen(Get_Display(client))))
+#define Get_Planes(client) \
+ (XstDisplayPlanes(Get_Display(client),XstDefaultScreen(Get_Display(client))))
+#define Get_Max_Request(client) \
+ (Get_Display(client)->max_request_size)
+/*
+ * Macros to access visual attributes.
+ */
+
+#define Get_Visual(client,screen) \
+ (XstDefaultVisual(Get_Display(client),screen))
+#define Get_Visual_ID(visual) (visual->visualid)
+#define Get_Visual_Class(visual) (visual->class)
+#define Get_Visual_Depth(visual) (visual->depth)
+/*
+ * Get access to the 'value-list' portion of a request and the
+ * length (in bytes) of the value-list
+ * rp - pointer to request
+ * type - type of request (e.g. GrabButton)
+ */
+
+#if __STDC__ == 1
+#define Get_Value_Ptr(rp,type) ((unsigned long *) (((unsigned long) (rp) + sizeof (x##type##Req))))
+#else
+#define Get_Value_Ptr(rp,type) ((unsigned long *) (((unsigned long) (rp) + sizeof (x/**/type/**/Req))))
+#endif
+
+#if __STDC__ == 1
+#define Get_Value_Len(rp,type) ((unsigned long) (((rp)->length<<2) - \
+ sizeof (x##type##Req)))
+#else
+#define Get_Value_Len(rp,type) ((unsigned long) (((rp)->length<<2) - \
+ sizeof (x/**/type/**/Req)))
+#endif
+
+/*
+ * Test Resource Management
+ */
+
+#define Get_Default_Atom(cl) (Xst_clients[cl].cl_atom)
+#define Get_Default_Colormap(cl) (Xst_clients[cl].cl_colormap)
+#define Get_Default_Cursor(cl) (Xst_clients[cl].cl_cursor)
+#define Get_Default_Font(cl) (Xst_clients[cl].cl_font)
+#define Get_Default_GContext(cl) (Xst_clients[cl].cl_gc)
+#define Get_Default_Pixmap(cl) (Xst_clients[cl].cl_pixmap)
+#define Get_Default_Cursor_Pixmap(cl) (Xst_clients[cl].cl_cursor_pixmap)
+#define Get_Default_Window(cl) (Xst_clients[cl].cl_window)
+#define Get_Default_Event(cl) (Xst_clients[cl].cl_event)
+#define Get_Test_Type(cl) (Xst_clients[cl].cl_test_type)
+#define Get_Req_Type(cl) (Xst_clients[cl].cl_reqtype)
+
+#define Set_Default_Atom(cl,val) (Xst_clients[cl].cl_atom = (val))
+#define Set_Default_Colormap(cl,val) (Xst_clients[cl].cl_colormap = (val))
+#define Set_Default_Cursor(cl,val) (Xst_clients[cl].cl_cursor = (val))
+#define Set_Default_Font(cl,val) (Xst_clients[cl].cl_font = (val))
+#define Set_Default_GContext(cl,val) (Xst_clients[cl].cl_gc = (val))
+#define Set_Default_Pixmap(cl,val) (Xst_clients[cl].cl_pixmap = (val))
+#define Set_Default_Cursor_Pixmap(cl,val) (Xst_clients[cl].cl_cursor_pixmap = (val))
+#define Set_Default_Window(cl,val) (Xst_clients[cl].cl_window = (val))
+#define Set_Default_Event(cl,val) (Xst_clients[cl].cl_event = (val))
+#define Set_Test_Type(cl,val) (Xst_clients[cl].cl_test_type = (val))
+#define Set_Req_Type(cl,val) (Xst_clients[cl].cl_reqtype = (val))
+
+/*
+ * Some dummy request types used for testing only
+ */
+#define Xst_BadType 254
+#define Xst_BadLength 255
+
+/*
+ * defines for real and fake events
+ */
+
+#define real_type(event_type) (event_type & 0x7f)
+#define is_fake(event_type) ((event_type & 0x80) != 0)
+
+/*
+ * Routine definitions for TET startup and cleanup.
+ */
+void protostartup();
+void protocleanup();
+void openprotostartup();
+void openprotocleanup();
+void fontprotostartup();
+void fontprotocleanup();
+void checkconfig();
+
+/*
+ * Xstlib routine definitions
+ */
+void Abort();
+void Delete ();
+void Finish ();
+Atom Create_Atom();
+void Create_Client ();
+int Create_Client_Tested ();
+Colormap Create_Colormap();
+Cursor Create_Cursor();
+Atom Create_Default_Atom();
+Colormap Create_Default_Colormap();
+Cursor Create_Default_Cursor();
+Font Create_Default_Font();
+GContext Create_Default_GContext();
+Pixmap Create_Default_Pixmap();
+Window Create_Default_Window();
+Font Create_Font();
+GContext Create_GContext();
+Pixmap Create_Pixmap();
+Window Create_Window();
+void Exit();
+void Exit_OK();
+xReply *Expect();
+char *Get_Date();
+int Get_Timer();
+XID Get_Resource_Id();
+int Log_Close();
+void Reset_Some();
+/*VARARGS1*/
+void Log_Debug();
+/*VARARGS1*/
+void Log_Debug2();
+/*VARARGS1*/
+void Log_Debug3();
+/*VARARGS1*/
+void Log_Some();
+/*VARARGS1*/
+void Log_Err();
+/*VARARGS1*/
+void Log_Del();
+/*VARARGS1*/
+void Log_Err_Detail();
+/*VARARGS1*/
+void Log_Msg();
+void Log_Open();
+/*VARARGS1*/
+void Log_Trace();
+xReq *Make_Req();
+xReq *Clear_Counted_Value();
+xReq *Add_Counted_Value();
+void Map_Window();
+void Send_Req(); /* send the request pointed to */
+void Server_Close(); /* close connection to X server */
+int Server_Open(); /* establish connection to X server */
+int Set_Timer();
+void Set_Value1();
+void Set_Value2();
+void Set_Value4();
+void Set_Byte_Sex();
+void Show_Err();
+void Show_Evt();
+void Show_Rep();
+void Show_Req();
+int Stop_Timer();
+xReq *Add_Masked_Value();
diff --git a/xc/test/xsuite/xtest/include/Xstos.h b/xc/test/xsuite/xtest/include/Xstos.h
new file mode 100644
index 000000000..7ddf930f4
--- /dev/null
+++ b/xc/test/xsuite/xtest/include/Xstos.h
@@ -0,0 +1,121 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: Xstos.h 1.3 88/07/28 $
+ */
+
+/* Header file for UNIX library for X Server tests.
+ *
+ * $Header: Xstos.h 1.3 88/07/28 $
+ */
+
+/*
+ * System header files.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <sys/types.h>
+#include <string.h>
+
+/*
+ * System calls, library functions and other definitions in UNIX/DYNIX.
+ */
+
+
+/* Comment out the unecessary (or wrong) definitions */
+
+extern int errno;
+
+#ifdef NOT_REQUIRED
+
+char *alloca();
+/* char *calloc(); */
+void exit();
+int fclose();
+/* void fflush(); */
+FILE *fopen();
+int fprintf();
+void free();
+int fscanf();
+int getitimer();
+char *index();
+/* char *malloc(); */
+void perror();
+/* char *realloc(); */
+int setitimer();
+int sigblock();
+/* int (*signal())(); */
+int sigsetmask();
+char *strcat();
+int strcmp();
+char *strncat();
+char *strncpy();
+
+void bcopy();
+void bzero();
+
+#endif /* NOT_REQUIRED */
+
+#define SearchString(string, char) strchr((string), (char))
+
+
+/*
+ * Note that some machines do not return a valid pointer for malloc(0), in
+ * which case we provide an alternate under the control of the
+ * define MALLOC_0_RETURNS_NULL. This is necessary because some
+ * Xst code expects malloc(0) to return a valid pointer to storage.
+ */
+#define EXTRA 16
+#ifdef MALLOC_0_RETURNS_NULL
+
+# define Xstmalloc(size) malloc(max((size)+EXTRA,1))
+# define Xstrealloc(ptr, size) realloc((ptr), max((size)+EXTRA,1))
+# define Xstcalloc(nelem, elsize) calloc(max((nelem)+EXTRA,1), (elsize))
+
+#else
+
+# define Xstmalloc(size) malloc((size)+EXTRA)
+# define Xstrealloc(ptr, size) realloc((ptr), (size)+EXTRA)
+# define Xstcalloc(nelem, elsize) calloc((nelem)+EXTRA, (elsize))
+
+#endif
diff --git a/xc/test/xsuite/xtest/include/pixval.h b/xc/test/xsuite/xtest/include/pixval.h
new file mode 100644
index 000000000..b6999ef67
--- /dev/null
+++ b/xc/test/xsuite/xtest/include/pixval.h
@@ -0,0 +1,259 @@
+#ifndef _PIX_VAL_
+#define _PIX_VAL_
+/*************
+* Functions to mask during pixval generation runs
+* $XConsortium$
+**************/
+
+#ifdef GENERATE_PIXMAPS
+#define XSync(a,b)
+#define XPending(d) (0)
+#define XMapWindow(a,b) VMapWindow(a,b)
+#define XMapRaised(a,b) do {VMapWindow(a,b);VRaiseWindow(a,b);} while(0)
+#define XUnmapWindow(a,b) VUnmapWindow(a,b)
+#define XClearWindow(a,b) VClearWindow(a,b)
+#define XClearArea(a,b,x,y,w,h,e) VClearArea(a,b,x,y,w,h,e)
+#define save_stat(a,b,c,d) REGR_NORMAL
+#define chek_stat(a,b,c,d,e) REGR_NORMAL
+#define badstat(a,b,c) REGR_NORMAL
+#define r_init() vr_init()
+#define r_close() vr_close()
+#define step(str) vstep(str)
+#define r_wait(a,b,c,d)
+#define bufrdisp(a)
+#define bufrgc(a,b)
+#define signal_status arbitrary
+#define XDrawPoint(a,b,c,d,e) VDrawPoint(a,b,c,d,e)
+#define XDrawPoints(a,b,c,d,e,f) VDrawPoints(a,b,c,d,e,f)
+#define XDrawLine(a,b,c,d,e,f,g) VDrawLine(a,b,c,d,e,f,g)
+#define XDrawLines(a,b,c,d,e,f) VDrawLines(a,b,c,d,e,f)
+#define XDrawSegments(a,b,c,d,e) VDrawSegments(a,b,c,d,e)
+#define XDrawRectangle(a,b,c,d,e,f,g) VDrawRectangle(a,b,c,d,e,f,g)
+#define XDrawRectangles(a,b,c,d,e) VDrawRectangles(a,b,c,d,e)
+#define XFillRectangle(a,b,c,d,e,f,g) VFillRectangle(a,b,c,d,e,f,g)
+#define XFillRectangles(a,b,c,d,e) VFillRectangles(a,b,c,d,e)
+#define XFillPolygon(a,b,c,d,e,f,g) VFillPolygon(a,b,c,d,e,f,g)
+#define XDrawArc(a,b,c,d,e,f,g,h,i) VDrawArc(a,b,c,d,e,f,g,h,i)
+#define XDrawArcs(a,b,c,d,e) VDrawArcs(a,b,c,d,e)
+#define XFillArc(a,b,c,d,e,f,g,h,i) VFillArc(a,b,c,d,e,f,g,h,i)
+#define XFillArcs(a,b,c,d,e) VFillArcs(a,b,c,d,e)
+#define XCloseDisplay(a) VCloseDisplay(a)
+#define XCopyGC(d,gc,vm,xgcv) VCopyGC(d,gc,vm,xgcv)
+#define XCreateGC(d,w,vm,xgcv) VCreateGC(d,w,vm,xgcv)
+#define XCreatePixmap(a,b,c,d,e) VCreatePixmap(a,b,c,d,e)
+#define XCreateSimpleWindow(a,b,c,d,e,f,g,h,i) VCreateSimpleWindow(a,b,c,d,e,f,g,h,i)
+#define XCreateWindow(a,b,c,d,e,f,g,h,i,j,k,l) VCreateWindow(a,b,c,d,e,f,g,h,i,j,k,l)
+#define XChangeWindowAttributes(a,b,c,d) VChangeWindowAttributes(a,b,c,d)
+#define XGetGeometry(display, drawable, root, x, y, width, height, b_w, depth) \
+ VGetGeometry(display, drawable, root, x, y, width, height, b_w, depth)
+#define XGetWindowAttributes(a,b,c) VGetWindowAttributes(a,b,c)
+#define XQueryTree(di,w,rr,pr,cr,n) VQueryTree(di,w,rr,pr,cr,n)
+#define XDestroyWindow(a,b) VDestroyWindow(a,b)
+#define XFreeGC(a,b) VFreeGC(a,b)
+#define XFreePixmap(a,b) VFreePixmap(a,b)
+#define XOpenDisplay(a) VOpenDisplay(a)
+#define XSetBackground(a,b,c) VSetBackground(a,b,c)
+#define XSetForeground(a,b,c) VSetForeground(a,b,c)
+#define XSetFunction(a,b,c) VSetFunction(a,b,c)
+#define XSetState(a,b,c,d,e,f) VSetState(a,b,c,d,e,f)
+#define XSetLineAttributes(disp,gc,a,b,c,d) VSetLineAttributes(disp,gc,a,b,c,d)
+#define XSetDashes(disp,gc,do,dl,n) VSetDashes(disp,gc,do,dl,n)
+#define XSetFillStyle(disp,gc,fs) VSetFillStyle(disp,gc,fs)
+#define XSetFillRule(disp,gc,fr) VSetFillRule(disp,gc,fr)
+#define XSetArcMode(disp,gc,am) VSetArcMode(disp,gc,am)
+#define XSetStipple(disp,gc,s) VSetStipple(disp,gc,s)
+#define XSetTile(disp,gc,t) VSetTile(disp,gc,t)
+#define XSetClipMask(disp,gc,cm) VSetClipMask(disp,gc,cm)
+#define XSetTSOrigin(disp,gc,tsx,tsy) VSetTSOrigin(disp,gc,tsx,tsy)
+#define XSetClipOrigin(disp,gc,clx,cly) VSetClipOrigin(disp,gc,clx,cly)
+#define XSetWindowBackground(a,b,c) VSetWindowBackground(a,b,c)
+#define XSetWindowBackgroundPixmap(a,b,c) VSetWindowBackgroundPixmap(a,b,c)
+#define XConfigureWindow(d,w,a,b) VConfigureWindow(d,w,a,b)
+#define XMoveWindow(d,w,x,y) VMoveWindow(d,w,x,y)
+#define XResizeWindow(d,w,wd,h) VResizeWindow(d,w,wd,h)
+#define XRaiseWindow(d,w) VRaiseWindow(d,w)
+#define XLoadFont(d,fn) VLoadFont(d,fn)
+#define XQueryFont(d,fid) VQueryFont(d,fid)
+#define XLoadQueryFont(d,fn) VLoadQueryFont(d,fn)
+#define XSetFont(d,gc,f) VSetFont(d,gc,f)
+#define XTextExtents(fs,s,n,dr,ar,dtr,or) VTextExtents(fs,s,n,dr,ar,dtr,or)
+#define XTextExtents16(fs,s,n,dr,ar,dtr,or) VTextExtents16(fs,s,n,dr,ar,dtr,or)
+#define XTextWidth(fs,s,len) VTextWidth(fs,s,len)
+#define XTextWidth16(fs,s,len) VTextWidth16(fs,s,len)
+#define XUnloadFont(d,f) VUnloadFont(d,f)
+#define XFreeFont(d,fs) VFreeFont(d,fs)
+#define XDrawImageString(a,b,c,d,e,f,g) VDrawImageString(a,b,c,d,e,f,g)
+#define XDrawString(a,b,c,d,e,f,g) VDrawString(a,b,c,d,e,f,g)
+#define XDrawImageString16(a,b,c,d,e,f,g) VDrawImageString16(a,b,c,d,e,f,g)
+#define XDrawString16(a,b,c,d,e,f,g) VDrawString16(a,b,c,d,e,f,g)
+#define XDrawText(di,dr,gc,x,y,items,nitems) VDrawText(di,dr,gc,x,y,items,nitems)
+#define XDrawText16(di,dr,gc,x,y,items,nitems) VDrawText16(di,dr,gc,x,y,items,nitems)
+#define XDestroySubwindows(di,wi) VDestroySubwindows(di,wi)
+#define XMapSubwindows(di,wi) VMapSubwindows(di,wi)
+#define XMoveResizeWindow(di,wi,x,y,w,h) VMoveResizeWindow(di,wi,x,y,w,h)
+#define XSetWindowBorder(di,wi,b) VSetWindowBorder(di,wi,b)
+#define XSetWindowBorderPixmap(di,wi,p) VSetWindowBorderPixmap(di,wi,p)
+#define XSetWindowBorderWidth(di,wi,w) VSetWindowBorderWidth(di,wi,w)
+#define XCreateColormap(disp,w,vis,alloc) NULL
+#define XFreeColormap(disp,colormap)
+#define XInstallColormap(disp,colormap)
+#define XSetWindowColormap(disp,w,colormap)
+#define XStoreColor(disp,colormap,color)
+#define XCreateRegion() NULL
+#define XEmptyRegion(anything) True
+#define XEqualRegion(aand, b) True
+#define XIntersectRegion(three, para, meters)
+#define XNextEvent(has, twoparameters)
+#define XSelectInput(hasone, two, threethreeparameters)
+#define XSubtractRegion(one, two, three)
+#define XUnionRectWithRegion(onetwo, three, also)
+#define XUnionRegion(has, threeparameters, howboutthat)
+#define XResetScreenSaver(dsp)
+
+/* Section 3.8 functions */
+#define XCirculateSubwindows(di,wi,dir) VCirculateSubwindows(di,wi,dir)
+#define XCirculateSubwindowsUp(di,wi) VCirculateSubwindowsUp(di,wi)
+#define XCirculateSubwindowsDown(di,wi) VCirculateSubwindowsDown(di,wi)
+#define XLowerWindow(di,wi) VLowerWindow(di,wi)
+#define XRestackWindows(di,wi,nwi) VRestackWindows(di,wi,nwi)
+
+/* kieron new stuff */
+#define XT_FONTDIR "XT_FONTDIR" /* used in tet_getvar() call in vfonts */
+#define XCopyArea(display, source, dest, gc, src_x, src_y, width, height, dest_x, dest_y) \
+ VCopyArea(display, source, dest, gc, src_x, src_y, width, height, dest_x, dest_y)
+#define XCopyPlane(display, source, dest, gc, src_x, src_y, width, height, dest_x, dest_y,plane) \
+ VCopyPlane(display, source, dest, gc, src_x, src_y, width, height, dest_x, dest_y,plane)
+
+#define XSetPlaneMask(a,b,c) VSetPlaneMask(a,b,c)
+#define XSetSubwindowMode(a,b,c) VSetSubwindowMode(a,b,c)
+#define XSetGraphicsExposures(a,b,c) VSetGraphicsExposures(a,b,c)
+#define XGetAtomName(dpy, atom) atomname(atom)
+#define XSetErrorHandler(a) VSetErrorHandler(a)
+#define XSetIOErrorHandler(a) VSetIOErrorHandler(a)
+#define XSetFontPath(dpy, dirs, ndirs) VSetFontPath(dpy, dirs, ndirs)
+#define XGetFontPath(dpy, ndirs_return) VGetFontPath(dpy, ndirs_return)
+#define XFreeFontPath(dirs) VFreeFontPath(dirs)
+#define XChangeGC(a,b,c,d) VChangeGC(a,b,c,d)
+#define XGetGCValues(dsp,gc,val,vp) VGetGCValues(dsp,gc,val,vp)
+#define _XFlushGCCache(d,g)
+#define XWindowEvent(a,b,c,d)
+#define XCreateBitmapFromData(display, d, data, width, height) \
+ VCreateBitmapFromData(display, d, data, width, height)
+#define XCreatePixmapFromBitmapData(display,d,data,width,height,fg,bg,depth) \
+ VCreatePixmapFromBitmapData(display,d,data,width,height,fg,bg,depth)
+#define XPutImage(dpy, d, gc, image, req_xoffset, req_yoffset, x, y , req_width, req_height) \
+ VPutImage (dpy, d, gc, image, req_xoffset, \
+ req_yoffset, x, y , req_width, req_height)
+
+#define XGetImage(dpy, d, x, y , width, height, planes, format) \
+ VGetImage (dpy, d, x, y , width, height, planes, format)
+#define XGetSubImage(dpy, d, x, y, width, height, plane_mask, format, dest_image, dest_x, dest_y) \
+ VGetSubImage(dpy, d, x, y, width, height, plane_mask, \
+ format, dest_image, dest_x, dest_y)
+
+/****** ones to watch?
+gettime.o:_XChangeProperty
+gettime.o:_XCheckWindowEvent
+gettime.o:_XInternAtom
+issuppvis.o:_XFree
+issuppvis.o:_XGetVisualInfo
+nextvinf.o:_XGetVisualInfo
+nextvinf.o:_XListDepths
+*******/
+
+#define XInternAtom(a,b,c) (1)
+
+#define XCreateFontCursor(dpy, shape) ((Cursor)-1)
+#define XFreeCursor(dpy, cursor)
+#define XQueryPointer(dpy,w,rootp,childp,rxp,ryp,xp,yp,maskp) False
+#define XWarpPointer(dpy, src_w,dst_w,x,y,w,h,dstx,dsty)
+#define XGetInputFocus(dpy, focus_ret, rev_to_ret)
+#define XSetInputFocus(dpy, focus, rev_to, time)
+
+/**** versions of internal functions to interrogate display - kieron ****/
+/* All to allow us to use Xlib image functions unaltered so we need
+ to use our routines that go near displays rather than theirs, as
+ their display layout may be different. That way we don't have to
+ duplicate all of Xlib, just most of it!
+*/
+
+#define _XGetScanlinePad(dpy, depth) _VGetScanlinePad(dpy, depth)
+#define _XGetBitsPerPixel(dpy, depth) _VGetBitsPerPixel(dpy, depth)
+
+
+/* display macros */
+
+#define XConnectionNumber(dpy) ((dpy)->fd)
+#define XRootWindow(dpy, scr) (((dpy)->screens[(scr)]).root)
+#define XDefaultScreen(dpy) ((dpy)->default_screen)
+#define XDefaultRootWindow(dpy) (((dpy)->screens[(dpy)->default_screen]).root)
+#define XDefaultVisual(dpy, scr) (((dpy)->screens[(scr)]).root_visual)
+#define XDefaultGC(dpy, scr) (((dpy)->screens[(scr)]).default_gc)
+#define XBlackPixel(dpy, scr) (((dpy)->screens[(scr)]).black_pixel)
+#define XWhitePixel(dpy, scr) (((dpy)->screens[(scr)]).white_pixel)
+#define XAllPlanes() (~0)
+#define XQLength(dpy) ((dpy)->qlen)
+#define XDisplayWidth(dpy, scr) (((dpy)->screens[(scr)]).width)
+#define XDisplayHeight(dpy, scr) (((dpy)->screens[(scr)]).height)
+#define XDisplayWidthMM(dpy, scr)(((dpy)->screens[(scr)]).mwidth)
+#define XDisplayHeightMM(dpy, scr)(((dpy)->screens[(scr)]).mheight)
+#define XDisplayPlanes(dpy, scr) (((dpy)->screens[(scr)]).root_depth)
+#define XDisplayCells(dpy, scr) (DefaultVisual((dpy), (scr))->map_entries)
+#define XScreenCount(dpy) ((dpy)->nscreens)
+#define XServerVendor(dpy) ((dpy)->vendor)
+#define XProtocolVersion(dpy) ((dpy)->proto_major_version)
+#define XProtocolRevision(dpy) ((dpy)->proto_minor_version)
+#define XVendorRelease(dpy) ((dpy)->release)
+#define XDisplayString(dpy) ((dpy)->display_name)
+#define XDefaultDepth(dpy, scr) (((dpy)->screens[(scr)]).root_depth)
+#define XDefaultColormap(dpy, scr)(((dpy)->screens[(scr)]).cmap)
+#define XBitmapUnit(dpy) ((dpy)->bitmap_unit)
+#define XBitmapBitOrder(dpy) ((dpy)->bitmap_bit_order)
+#define XBitmapPad(dpy) ((dpy)->bitmap_pad)
+#define XImageByteOrder(dpy) ((dpy)->byte_order)
+#define XNextRequest(dpy) ((dpy)->request + 1)
+#define XLastKnownRequestProcessed(dpy) ((dpy)->last_request_read)
+
+/* macros for screen oriented applications (toolkit) */
+
+#define XScreenOfDisplay(dpy, scr)(&((dpy)->screens[(scr)]))
+#define XDefaultScreenOfDisplay(dpy) (&((dpy)->screens[(dpy)->default_screen]))
+#define XDisplayOfScreen(s) ((s)->display)
+#define XRootWindowOfScreen(s) ((s)->root)
+#define XBlackPixelOfScreen(s) ((s)->black_pixel)
+#define XWhitePixelOfScreen(s) ((s)->white_pixel)
+#define XDefaultColormapOfScreen(s)((s)->cmap)
+#define XDefaultDepthOfScreen(s)((s)->root_depth)
+#define XDefaultGCOfScreen(s) ((s)->default_gc)
+#define XDefaultVisualOfScreen(s)((s)->root_visual)
+#define XWidthOfScreen(s) ((s)->width)
+#define XHeightOfScreen(s) ((s)->height)
+#define XWidthMMOfScreen(s) ((s)->mwidth)
+#define XHeightMMOfScreen(s) ((s)->mheight)
+#define XPlanesOfScreen(s) ((s)->root_depth)
+#define XCellsOfScreen(s) (DefaultVisualOfScreen((s))->map_entries)
+#define XMinCmapsOfScreen(s) ((s)->min_maps)
+#define XMaxCmapsOfScreen(s) ((s)->max_maps)
+#define XDoesSaveUnders(s) ((s)->save_unders)
+#define XDoesBackingStore(s) ((s)->backing_store)
+#define XEventMaskOfScreen(s) ((s)->root_input_mask)
+
+#define VCompareCompImage() VGenerateCompImage()
+
+#ifdef DUMP_KNOWN_GOOD_IMAGES /* for debug purposes - dumps known good image at generate time to given server for viewing */
+#define VCompareCompImage() VGenerateCompImage2()
+#endif
+
+
+#ifdef DUMP_PIXMAPS /* for debug purposes - dumps pixmap record to given server for viewing 1 at a time */
+#define VCompareCompImage() VDumpCompImage()
+#endif
+
+extern int PVT_debug;
+
+#endif /* ifdef GENERATE_PIXMAPS */
+
+/* pick up function protos for Vxxxxxx routines - kieron */
+#include "Vlib.h"
+
+#endif /* _PIX_VAL_ */
diff --git a/xc/test/xsuite/xtest/include/xtest.h b/xc/test/xsuite/xtest/include/xtest.h
new file mode 100644
index 000000000..dbcf75e8e
--- /dev/null
+++ b/xc/test/xsuite/xtest/include/xtest.h
@@ -0,0 +1,273 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#define TEST_ANSI (__STDC__ == 1)
+
+/*
+ * Define NULL if not already done - really just SunOS writearound.
+ * NULL should be in stdlib.h - but SunOS4.1 does not have it.
+ */
+#ifndef NULL
+#define NULL 0
+#endif
+
+#define ALLEVENTS \
+(KeyPressMask|KeyReleaseMask|ButtonPressMask|ButtonReleaseMask| \
+EnterWindowMask|LeaveWindowMask|PointerMotionMask|PointerMotionHintMask| \
+Button1MotionMask|Button2MotionMask|Button3MotionMask|Button4MotionMask| \
+Button5MotionMask|ButtonMotionMask|KeymapStateMask|ExposureMask| \
+VisibilityChangeMask|StructureNotifyMask|ResizeRedirectMask| \
+SubstructureNotifyMask|SubstructureRedirectMask|FocusChangeMask| \
+PropertyChangeMask|ColormapChangeMask|OwnerGrabButtonMask)
+
+struct linkinfo {
+ char *name; /* name of executable link */
+ char *testname; /* Actual name of function */
+ int *ntests; /* Number of TP's for this Test Case */
+ struct tet_testlist *testlist; /* test purpose list */
+ void (*localstartup)(); /* A local startup routine */
+ void (*localcleanup)(); /* A local cleanup routine */
+};
+
+/*
+ * Macros to use when not using XCALL
+ */
+#define BASIC_STARTCALL(d) \
+ startcall(d);\
+ if (isdeleted())\
+ return
+#define BASIC_ENDCALL(d, expected) \
+ do {\
+ endcall(d);\
+ if (geterr() != expected) {\
+ report("Got %s, Expecting %s", errorname(geterr()), errorname(expected));\
+ FAIL;\
+ }\
+ } while (0)
+
+
+/*
+ * Invocable component types
+ */
+#define Good 1
+#define Bad 2
+
+/*
+ * Standard parameters for windows and pixmaps.
+ */
+#define W_STDWIDTH 100
+#define W_STDHEIGHT 90
+#define W_BG 0L /* Background pixel */
+#define W_FG 1L /* Forground pixel */
+
+/* Size for images */
+#define I_STDWIDTH 100
+#define I_STDHEIGHT 90
+
+/* A shorthand for DefaultRootWindow */
+#define DRW DefaultRootWindow
+
+/* Parameters used for font paths */
+#define MAX_DIRS 32
+#define SEP ","
+
+/*
+ * MIT specific test results codes.
+ */
+#define MIT_TET_WARNING 101
+#define MIT_TET_FIP 102
+#define MIT_TET_ABORT 103
+
+/*
+ * Path check macros
+ */
+#define CHECK do {\
+ ++pass; \
+ check("%s-%d %d, line %d", TestName, tet_thistest, pass, __LINE__); \
+ } while (0)
+
+#define PASS tet_result(TET_PASS)
+#define FAIL do { fail++; if (!isdeleted()) tet_result(TET_FAIL); } while (0)
+#define UNTESTED tet_result(TET_UNTESTED)
+#define UNSUPPORTED tet_result(TET_UNSUPPORTED)
+#define UNRESOLVED tet_result(TET_UNRESOLVED)
+#define NOTINUSE tet_result(TET_NOTINUSE)
+#define WARNING tet_result(MIT_TET_WARNING)
+#define FIP tet_result(MIT_TET_FIP)
+#define ABORT tet_result(MIT_TET_ABORT)
+#define CHECKPASS(n) \
+do { \
+ if (n && n == pass && fail == 0) \
+ PASS; \
+ else if (fail == 0) {\
+ if (n == 0) \
+ report("No CHECK marks encountered"); \
+ else \
+ report("Path check error (%d should be %d)", pass, n);\
+ report("This is usually caused by a programming error in the test-suite"); \
+ UNRESOLVED;\
+ } \
+} while (0)
+#define CHECKUNTESTED(n) \
+do { \
+ if (n && n == pass && fail == 0) \
+ untested("The assertion can only be partially tested"); \
+ else if (fail == 0) {\
+ if (n == 0) \
+ report("Path check error - no CHECK marks encountered"); \
+ else \
+ report("Path check error (%d should be %d)", pass, n);\
+ report("This is usually caused by a programming error in the test-suite"); \
+ UNRESOLVED;\
+ } \
+} while (0)
+#define CHECKFIP(n) \
+do { \
+ if (n && n == pass && fail == 0) \
+ FIP; \
+ else if (fail == 0) {\
+ if (n == 0) \
+ report("Path check error - no CHECK marks encountered"); \
+ else \
+ report("Path check error (%d should be %d)", pass, n);\
+ report("This is usually caused by a programming error in the test-suite"); \
+ UNRESOLVED;\
+ } \
+} while (0)
+
+
+/*
+ * A macro to do the often repeated check, pass/fail operation
+ */
+#define PIXCHECK(DSP, D) \
+ do { \
+ if (verifyimage(DSP, D, (struct area *)0)) \
+ CHECK; \
+ else \
+ FAIL; \
+ } while (0)
+
+/*
+ * Get the number of elements in an array. Must be passed a real array
+ * only.
+ */
+#define NELEM(array) (sizeof(array)/sizeof(array[0]))
+
+/*
+ * Create a plane mask for a depth.
+ */
+#define DEPTHMASK(D) (((D)==32)? 0xffffffff: (1<<(D))-1)
+
+/*
+ * Set all the members of an area structure in one go.
+ */
+#define setarea(_A, _X, _Y, _Width, _Height) \
+ do { \
+ (_A)->x = _X; \
+ (_A)->y = _Y; \
+ (_A)->width = _Width; \
+ (_A)->height = _Height; \
+ } while (0);
+
+/* Number of fonts used in xtest */
+#define XT_NFONTS 7
+
+/* Name of a propoerty used by gettime() and some of the CH08 tests */
+#define XT_TIMESTAMP "XTEST_TIMESTAMP"
+
+/*
+ * Options are all set into this structure.
+ */
+struct config {
+ char *display; /* The display string */
+ int alt_screen; /* Alternate screen number */
+ int fontcursor_good; /* A good value in the cursor font */
+ int fontcursor_bad; /* A bad value in the cursor font */
+ char *fontdir; /* Font location for pixel generation */
+ char *fontpath_good; /* known good path for fonts */
+ char *fontpath_bad; /* known bad path for fonts */
+ char *bad_font_name; /* known bad font name */
+ int save_server_image; /* Save server images */
+ char *good_colorname; /* known good name */
+ char *bad_colorname; /* known bad name */
+ int option_no_check; /* No check messages in the journal */
+ int option_no_trace; /* No trace messages in the journal */
+ int debug; /* debug level */
+ int debug_override_redirect;/* Use override redirect on windows */
+ int debug_pause_after; /* pause after each XCALL */
+ int debug_pixmap_only; /* use only pixmaps */
+ int debug_window_only; /* use only windows */
+ int debug_default_depths; /* use default depth/visual */
+ int speedfactor; /* used as multiplier when timing */
+ int displaymotionbuffersize;/* value to be returned by ... */
+ char *fontpath; /* font path for test fonts */
+ int posix_system; /* whether posix system */
+ int protocol_version; /* protocol version */
+ int protocol_revision; /* protocol revision */
+ int vendor_release; /* vendor release */
+ int does_save_unders; /* save unders supported */
+ int does_backing_store; /* backing store supported */
+ int decnet; /* decnet supported */
+ int tcp; /* tcp supported */
+ char *displayhost; /* hostname for XOpenDisplay tests */
+ char *debug_byte_sex; /* byte sex for X protocol tests */
+ int debug_visual_check; /* time delay in X protocol tests */
+ int local; /* local display server supported */
+ int screen_count; /* Number of screen server supports */
+ char *visual_classes; /* The visual class/depth pairs */
+ char *debug_no_pixcheck; /* Disable pixchecking */
+ char *pixmap_depths; /* List of pixmap formats */
+ char *server_vendor; /* returned by XServerVendor */
+ int black_pixel; /* returned by XBlackPixel */
+ int white_pixel; /* returned by XWhitePixel */
+ int height_mm; /* returned by XHeightMMOfScreen */
+ int width_mm; /* returned by XWidthMMOfScreen */
+ int reset_delay; /* delay to allow for server reset */
+ char *debug_visual_ids; /* list of visuals to use */
+ int extensions; /* Do we want to use xtest extensions */
+};
+
+
+extern struct config config;
+
+/* Define to allow the use of a more intuitive name for makewin */
+#define makedrawable makewin
+
+/*
+ * Macros to enclose a region of code that should not abort on an
+ * X error.
+ */
+#define CATCH_ERROR(DISP) do {\
+ XSync(DISP, False);\
+ reseterr();\
+ XSetErrorHandler(error_status);\
+ } while (0)
+#define RESTORE_ERROR(DISP) do {\
+ XSync(DISP, False);\
+ XSetErrorHandler(unexp_err);\
+ } while (0)
+#define GET_ERROR(DISP) geterr() /* ??? */
+
+/* Macro to set the first four elements of an event */
+#define defsetevent(EV, D, T) \
+ EV.type = T;\
+ EV.serial = 0L; \
+ EV.send_event = False; \
+ EV.display = D;
+
+/* The exit status when a timeout called with settimeout() goes off */
+#define TIMEOUT_EXIT 1
diff --git a/xc/test/xsuite/xtest/include/xtestlib.h b/xc/test/xsuite/xtest/include/xtestlib.h
new file mode 100644
index 000000000..51fc6e53f
--- /dev/null
+++ b/xc/test/xsuite/xtest/include/xtestlib.h
@@ -0,0 +1,396 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+
+/*
+ * Structure to define an area by position and size.
+ */
+struct area {
+ int x;
+ int y;
+ unsigned int width;
+ unsigned int height;
+};
+
+/*
+ * Flags for the checkarea() function.
+ */
+#define CHECK_IN 0x1 /* Check inside the area */
+#define CHECK_OUT 0x2 /* Check outside the area */
+#define CHECK_ALL (CHECK_IN|CHECK_OUT) /* Check both in and out */
+#define CHECK_DIFFER 0x4 /* Check that areas differ */
+
+/*
+ * Flags for the resetvinf() function.
+ */
+#define VI_WIN 0x1 /* Return visuals for windows */
+#define VI_PIX 0x2 /* Return depths for pixmaps */
+#define VI_WIN_PIX (VI_WIN|VI_PIX) /* Return visuals and depths */
+#define VI_ALT_WIN 0x4 /* Return visuals for windows
+ on alternate screen */
+#define VI_ALT_PIX 0x8 /* Return depts for pixmaps
+ on alternate screen */
+#define VI_ALT_WIN_PIX (VI_ALT_WIN|VI_ALT_PIX)
+ /* Return alternate visuals & depths */
+
+/*
+ * Defines for the notmember() function that is used to test BadValue
+ */
+#define NM_GREATER 0
+#define NM_LESS 1
+#define NM_NEGATIVE 2
+#define NM_LARGE 3
+#define NM_LEN 4
+
+/*
+ * Structure to hold the connections between names, XFontStruct's and
+ * the associated string.
+ */
+struct fontinfo {
+ char *name; /* Font name */
+ XFontStruct *fontstruct; /* pointer to known good XFontStruct */
+ char **string; /* Copyright string */
+ short flag; /* for use by lstfnt* */
+};
+
+/*
+ * The following defines and typedef's are related to block().
+ */
+
+#define BLOCK_FILE "block_file"
+/*
+ * predicate procedure argument types
+ */
+typedef Bool (*Predicate) (
+#if TEST_ANSI
+ Display *display,
+ XEvent *error_event,
+ char *arg
+#endif
+);
+
+/*
+ * The type of the procedure argument to block().
+ *
+ * It should be noted that some of these function definitions are
+ * listed as returning int's where the return value is not actually
+ * specified by Xlib (so, they therefore default to int).
+ */
+typedef union {
+ int (*a0)(
+#if TEST_ANSI
+ /*
+ * The arguments have been commented out at present, because
+ * some compilers have problems with this.
+ */
+ /* Display *d, int a */
+#endif
+ );
+ int (*a1)(
+#if TEST_ANSI
+ /* Display *d, XEvent *e, Predicate p, char *cp */
+#endif
+ );
+ int (*a2)(
+#if TEST_ANSI
+ /* Display *d, long l, XEvent *ep */
+#endif
+ );
+ int (*a3)(
+#if TEST_ANSI
+ /* Display *d, XEvent *e */
+#endif
+ );
+ int (*a4)(
+#if TEST_ANSI
+ /* Display *d, Window w, long l, XEvent *ep */
+#endif
+ );
+ int (*a5)(
+#if TEST_ANSI
+ /* Display *d */
+#endif
+ );
+} Block_Proc;
+
+/*
+ * Convenience constants for accessing various types of function pointers
+ */
+#define XEventsQueued_Like_Proc blocker.a0
+#define XIfEvent_Like_Proc blocker.a1
+#define XMaskEvent_Like_Proc blocker.a2
+#define XNextEvent_Like_Proc blocker.a3
+#define XPeekEvent_Like_Proc blocker.a3
+#define XPeekIfEvent_Like_Proc blocker.a1
+#define XWindowEvent_Like_Proc blocker.a4
+#define XPending_Like_Proc blocker.a5
+
+/*
+ * The type of the info argument to block().
+ */
+typedef struct _Block_Info {
+ int p_type;
+ Block_Proc blocker;
+ int int_return;
+ XEvent event_return;
+ union {
+ struct { /* XEventsQueued */
+ int mode;
+ } a0;
+ struct { /* XIfEvent, XPeekIfEvent */
+ Predicate predicate;
+ char* arg;
+ } a1;
+ struct { /* XMaskEvent */
+ long event_mask;
+ } a2;
+ struct { /* XWindowEvent */
+ Window w;
+ long event_mask;
+ } a3;
+ } u;
+} *Block_InfoP, Block_Info;
+
+/*
+ * Convenience constants for getting at the various argument types.
+ */
+#define XEventsQueued_Args u.a0
+#define XIfEvent_Args u.a1
+#define XMaskEvent_Args u.a2
+/*
+ * These have no (and need no) corresponding entry in the argument union.
+#define XNextEvent_Args
+#define XPeekEvent_Args
+#define XPending_Args
+*/
+#define XPeekIfEvent_Args u.a1
+#define XWindowEvent_Args u.a3
+
+/*
+ * Convenience constants for checking the various argument types.
+ */
+#define Ignore_Event_Return (1<<15)
+#define XEventsQueued_Like ((1<<0)|Ignore_Event_Return)
+#define XIfEvent_Like (1<<1)
+#define XMaskEvent_Like (1<<2)
+#define XNextEvent_Like (1<<3)
+#define XPeekEvent_Like (1<<4)
+#define XPeekIfEvent_Like (1<<5)
+#define XWindowEvent_Like (1<<6)
+#define XPending_Like ((1<<7)|Ignore_Event_Return)
+
+/*
+ * Macros to set some of the info fields
+ */
+#define XEventsQueued_Type(i, m) \
+ i.XEventsQueued_Like_Proc = XEventsQueued;\
+ i.p_type = XEventsQueued_Like;\
+ i.XEventsQueued_Args.mode = m
+#define XIfEvent_Type(i, p, a) \
+ i.XIfEvent_Like_Proc = XIfEvent;\
+ i.p_type = XIfEvent_Like;\
+ i.XIfEvent_Args.predicate = p;\
+ i.XIfEvent_Args.arg = a
+#define XMaskEvent_Type(i, m) \
+ i.XMaskEvent_Like_Proc = XMaskEvent;\
+ i.p_type = XMaskEvent_Like;\
+ i.XMaskEvent_Args.event_mask = m
+#define XNextEvent_Type(i) \
+ i.XNextEvent_Like_Proc = XNextEvent;\
+ i.p_type = XNextEvent_Like
+#define XPeekEvent_Type(i) \
+ i.XPeekEvent_Like_Proc = XPeekEvent;\
+ i.p_type = XPeekEvent_Like
+#define XPeekIfEvent_Type(i, p, a) \
+ i.XPeekIfEvent_Like_Proc = XPeekIfEvent;\
+ i.p_type = XPeekIfEvent_Like;\
+ i.XPeekIfEvent_Args.predicate = p;\
+ i.XPeekIfEvent_Args.arg = a
+#define XWindowEvent_Type(i, w, m) \
+ i.XWindowEvent_Like_Proc = XWindowEvent;\
+ i.p_type = XWindowEvent_Like;\
+ i.XWindowEvent_Args.w = w;\
+ i.XWindowEvent_Args.event_mask = m
+#define XPending_Type(i) \
+ i.XPending_Like_Proc = XPending;\
+ i.p_type = XPending_Like
+
+/*
+ * The following defines and typedef's are related to winh.
+ */
+typedef struct {
+ int high;
+ int low;
+ int count;
+} Winhs;
+
+extern Winhs winh_event_stats[];
+
+typedef struct _Winhc {
+ Display *display; /* client identifier */
+ struct _Winhc *next; /* next client in client list */
+ struct _Winh *node; /* pointer to member in hierarchy */
+ long event_mask; /* mask of selected events */
+ long flags; /* used during hierarchy checking & traversal */
+} Winhc;
+
+typedef struct _Winhe {
+ XEvent *event; /* an event */
+ struct _Winhe *next; /* next associated event */
+ long sequence; /* sequence number */
+ long flags; /* used during hierarchy checking & traversal */
+} Winhe;
+
+typedef struct _Winhg {
+ struct area area;
+ int border_width; /* */
+} Winhg;
+
+typedef struct _Winh {
+ Window window; /* window ID */
+ struct _Winh *parent; /* ptr to parent in hierarchy, NULL if top */
+ struct _Winh *nextsibling; /* linked list of siblings */
+ struct _Winh *prevsibling; /* linked list of siblings */
+ struct _Winh *firstchild; /* linked list of children */
+ int numchildren; /* number of children */
+ unsigned long valuemask; /* mask corresponding to attributes */
+ XSetWindowAttributes attributes; /* */
+ long winhmask; /* Winh-specific flags */
+ Winhc *clients; /* linked list of interested clients */
+ Winhe *expected; /* linked list of expected events */
+ Winhe *delivered; /* linked list of delivered events */
+ int depth; /* depth in window hierarchy */
+ Winhg winhg; /* geometry hook */
+ int screen; /* only used for children of guardian */
+} Winh;
+
+extern Winh *guardian;
+extern Winhe *winh_qexp;
+extern Winhe *winh_qdel;
+
+/*
+ * winhmask values
+ */
+#define WINH_NOMASK (0L<<0)
+#define WINH_CREATED (1L<<0) /* window of node created */
+#define WINH_DEL_PROPOGATE (1L<<1) /* event propagates */
+#define WINH_DEL_SEND_EVENT (1L<<2) /* behave as would XSendEvent */
+#define WINH_GUARDIAN (1L<<3) /* a guardian node */
+#define WINH_INHERIT (1L<<4) /* use winhmask values from parent */
+#define WINH_MAP (1L<<5) /* map upon creation */
+#define WINH_WEED_IDENTITY (1L<<6) /* expected should equal delivered */
+#define WINH_WEED_MINIMUM (1L<<7)
+#define WINH_WEED_TYPE (1L<<8)
+#define WINH_IGNORE_GEOMETRY (1L<<9) /* winhg not initialized */
+#define WINH_BOTH_SCREENS (1L<<10)/* build hierarchy on both screens */
+
+#define WINH_BAD ((Window) -1)
+
+/*
+ * Pointer location management structure (pointer.c)
+ */
+typedef struct {
+ Window oroot; /* where the pointer was */
+ int ox, oy;
+ Window nroot; /* where the pointer moved to */
+ int nx, ny;
+} PointerPlace;
+
+/*
+ * Defines for the resource registering service.
+ */
+#define REG_IMAGE 0
+#define REG_WINDOW 1
+#define REG_PIXMAP 2
+#define REG_GC 3
+#define REG_COLORMAP 4
+#define REG_CURSOR 5
+#define REG_OPEN 6
+#define REG_WINH 7
+#define REG_POINTER 8
+#define REG_MALLOC 9
+#define REG_XMALLOC 10
+
+#define REG_REGION 11
+#define REG_MAX 12
+
+/* union of types that can be registered */
+union regtypes {
+ XImage *image;
+ Window window;
+ Pixmap pixmap;
+ GC gc;
+ Colormap colormap;
+ Cursor cursor;
+ Display *display;
+ Winh *winh;
+ PointerPlace *pointer;
+ char *malloc;
+ Region region;
+};
+
+/*
+ * Some event convenience macros.
+ */
+
+/* must be called after window, x, and y members are set! */
+#define ROOTCOORDSET(d, e) \
+ rootcoordset((d), (e)->window, DRW((d)), (e)->x, (e)->y, &((e)->x_root), &((e)->y_root))
+
+/* used when one wishes to check serial */
+#define CHECKEVENT(g, e) \
+ if (checkevent((g), (e)) || serialtest((g), (e)) == False) {\
+ report("Delivered event did not match expected event");\
+ FAIL;\
+ }\
+ else\
+ CHECK
+
+/*
+ * Structure for use with buildtree.
+ */
+struct buildtree {
+ char *name; /* Name */
+ char *pname; /* Parent's name */
+ Window wid; /* Window id */
+ struct buildtree *parent; /* pointer to parent */
+ unsigned long uflags; /* Flags for user of routines */
+ unsigned long opts; /* Internal flags renamed from 'flags' */
+ int num; /* number in list (only valid in list[0]) */
+ int x, y; /* Position */
+ unsigned int width, height; /* size */
+ unsigned int borderwidth; /* border width */
+};
+
+/*
+ * Flags for use in buildtree.
+ */
+#define BT_UNMAP 1 /* Window is unmapped */
+
+/*
+ * A structure for linking values and names. Used in the functions defined
+ * in lookupname.c.
+ */
+struct valname {
+ int val;
+ char *name;
+};
+
+/*
+ * Include the automaticaly generated prototypes.
+ */
+#include "xtlibproto.h"
diff --git a/xc/test/xsuite/xtest/include/xthost.h b/xc/test/xsuite/xtest/include/xthost.h
new file mode 100644
index 000000000..ab24d6355
--- /dev/null
+++ b/xc/test/xsuite/xtest/include/xthost.h
@@ -0,0 +1,22 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+extern XHostAddress xthosts[];
+extern XHostAddress xtbadhosts[];
+
+extern int nxthosts;
+extern int nxtbadhosts;
diff --git a/xc/test/xsuite/xtest/include/xtlibproto.h b/xc/test/xsuite/xtest/include/xtlibproto.h
new file mode 100644
index 000000000..d5b786c59
--- /dev/null
+++ b/xc/test/xsuite/xtest/include/xtlibproto.h
@@ -0,0 +1,476 @@
+/* $XConsortium$ */
+
+/*
+ * Do not edit this file.
+ * It is generated automaticaly from the source files.
+ */
+#if __STDC__ == 1
+
+void startup(void);
+void cleanup(void);
+void fontstartup(void);
+void setxtfontpath(void);
+void fontcleanup(void);
+void focusstartup(void);
+void focuscleanup(void);
+void fontfocusstartup(void);
+void fontfocuscleanup(void);
+void rmstartup(void);
+void aborttest(void);
+void reset_delay(void);
+void exec_startup(void);
+void exec_cleanup(void);
+char *boolname(int val);
+char *eventmaskname(unsigned long val);
+char *eventname(int val);
+char *keymaskname(unsigned long val);
+char *modifiername(int val);
+char *buttonmaskname(unsigned long val);
+char *buttonname(int val);
+char *notifymodename(int val);
+char *notifydetailname(int val);
+char *visibilityname(int val);
+char *grabreplyname(int val);
+char *alloweventmodename(int val);
+char *reverttoname(int val);
+char *errorname(int val);
+char *classname(int val);
+char *bitgravityname(int val);
+char *wingravityname(int val);
+char *backingstorename(int val);
+char *gcfunctionname(int val);
+char *linestylename(int val);
+char *capstylename(int val);
+char *joinstylename(int val);
+char *fillstylename(int val);
+char *displayclassname(int val);
+char *protoname(int val);
+char *atomname(int val);
+char *mapstatename(int val);
+char *visualmaskname(unsigned long val);
+char *contexterrorname(int val);
+int error_status(Display *disp, XErrorEvent *errevent);
+int unexp_err(Display *disp, XErrorEvent *errevent);
+int io_err(Display *disp);
+int geterr(void);
+int getbadvalue(void);
+void reseterr(void);
+int getevent(Display *disp, XEvent *event);
+int stackorder(Display *disp, Window win);
+void report(char *fmt, ...);
+void trace(char *fmt, ...);
+void check(char *fmt, ...);
+void debug(int lev, char *fmt, ...);
+void tccabort(char *fmt, ...);
+void setdblev(int n);
+int getdblev(void);
+Window iponlywin(Display *disp);
+Window badwin(Display *disp);
+void _startcall(Display *disp);
+void startcall(Display *disp);
+void _endcall(Display *disp);
+void endcall(Display *disp);
+Window makewin(Display *disp, XVisualInfo *vp);
+void winpair(Display *disp, XVisualInfo *vp, Window *w1p, Window *w2p);
+Drawable makewinpos(Display *disp, XVisualInfo *vp, int x, int y);
+int checkevent(XEvent *good, XEvent *ev);
+int initvclass(void);
+void resetvclass(void);
+int nextvclass(int *vp, int *dp);
+int nvclass(void);
+GC badgc(Display *disp);
+Pixmap badpixm(Display *disp);
+Font badfont(Display *disp);
+void badvis(Visual *v);
+void linkstart(void);
+void linkclean(void);
+int issuppvis(Display *disp, int vis);
+unsigned long visualsupported(Display *disp, unsigned long mask);
+void resetsupvis(unsigned long vismask);
+int nextsupvis(XVisualInfo **vi);
+int nsupvis(void);
+Status checkarea(Display *disp, Drawable d, register struct area *ap, unsigned long inpix, unsigned long outpix, int flags);
+Status checkclear(Display *disp, Drawable d);
+void getsize(Display *disp, Drawable d, unsigned int *widthp, unsigned int *heightp);
+unsigned int getdepth(Display *disp, Drawable d);
+void pattern(Display *disp, Drawable d);
+Status checkpattern(Display *disp, Drawable d, struct area *ap);
+Window crechild(Display *disp, Window w, struct area *ap);
+Window creunmapchild(Display *disp, Window w, struct area *ap);
+Status checktile(Display *disp, Drawable d, struct area *ap, int xorig, int yorig, Pixmap pm);
+Pixmap maketile(Display *disp, Drawable d);
+Pixmap makepixm(Display *disp, XVisualInfo *vp);
+void resetvinf(int flags);
+int nextvinf(XVisualInfo **visp);
+int nvinf(void);
+Drawable defdraw(Display *disp, int type);
+Window defwin(Display *disp);
+GC makegc(Display *disp, Drawable d);
+void setgcfont(Font font);
+void dumpimage(XImage *imp, char *name, struct area *ap);
+Status verifyimage(Display *disp, Drawable d, struct area *ap);
+void dclear(Display *disp, Drawable d);
+void dset(Display *disp, Drawable d, unsigned long pix);
+void delete(char *mess, ... );
+int isdeleted(void);
+void resetdelete(void);
+void cancelrest(char *reason);
+void unsupported(char *mess, ... );
+void notinuse(char *mess, ... );
+void untested(char *mess, ... );
+XImage *savimage(Display *disp, Drawable d);
+Status compsavimage(Display *disp, Drawable d, XImage *im);
+Status diffsavimage(Display *disp, Drawable d, XImage *im);
+int checkpixel(Display *display, Drawable drawable, int x, int y, unsigned long value);
+unsigned long getpixel(Display *display, Drawable drawable, int x, int y);
+Status checkpixels(Display *display, Drawable drawable, int x, int y, int dx, int dy, int len, unsigned long value);
+int notmember(int *list, int len, long *ret);
+int notmaskmember(unsigned long *list, int len, unsigned long *ret);
+void setwidth(Display *disp, GC gc, unsigned int width);
+void setcapstyle(Display *disp, GC gc, int capstyle);
+void setlinestyle(Display *disp, GC gc, int linestyle);
+void setjoinstyle(Display *disp, GC gc, int joinstyle);
+int checkgccomponent(Display *disp, GC gc, unsigned int valuemask, XGCValues *values);
+void gcflush(Display *dpy, GC gc);
+void tpstartup(void);
+void tpcleanup(void);
+Pixmap nondepth1pixmap( Display *disp, Drawable d);
+void setfuncpixel(Display *disp, Drawable drw, int *xp, int *yp);
+void regid(Display *disp, union regtypes *id, int type);
+void freereg(void);
+int regenable(void);
+int regdisable(void);
+void openfonts(Font fonts[], int nfonts);
+int checkfsp(XFontStruct *fsp, XFontStruct *good, char *str);
+void txtextents(XFontStruct *fsp, unsigned char *str, int n, int *dir, int *ascent, int *descent, XCharStruct *overall);
+void txtextents16(XFontStruct *fsp, XChar2b *str, int n, int *dir, int *ascent, int *descent, XCharStruct *overall);
+int txtwidth(XFontStruct *fsp, unsigned char *str, int n);
+int txtwidth16(XFontStruct *fsp, XChar2b *str, int n);
+Colormap badcolormap( Display *disp, Window win);
+Colormap makecolmap(Display *disp, Visual *visual, int alloc);
+int lg( unsigned long x);
+char *bitstr( unsigned long val, char spare[]);
+Cursor makecurnum(Display *disp, int inc);
+Cursor makecur(Display *disp);
+Cursor makecur2(Display *disp);
+XImage *makeimg(Display *disp, XVisualInfo *vp, int format);
+void dsetimg(XImage *ximage, unsigned long pixel);
+void patternimg(XImage *ximage, unsigned long pixel);
+Status checkimg(XImage *im, struct area *ap, long inpix, long outpix, int flags);
+Status checkimgstruct(XImage *im, unsigned int depth, unsigned int width, unsigned int height, int format);
+Display *opendisplay(void);
+unsigned int bitcount( register unsigned long n);
+unsigned long getpix(unsigned long m, unsigned long p);
+int atov(char *str);
+void initconfig(void);
+Window mkwinchild(Display *disp, XVisualInfo *vp, struct area *ap, int mapflag, Window parent, int border_width);
+Window mkwin(Display *disp, XVisualInfo *vp, struct area *ap, int mapflag);
+Status block(Display *display, XEvent *event, Block_Info *info);
+Winh *winh_adopt(Display *display, Winh *parent, unsigned long valuemask, XSetWindowAttributes *attributes, Winhg *winhg, long winhmask);
+int winh_create(Display *display, Winh *winh, long winhmask);
+Winh *winh_find(Winh *winh, Window window);
+int winh_plant(Winh *source, XEvent *event, long event_mask, long winhmask);
+int winh_pending(int expected);
+int winh_harvest(Display *display, Winh *winh);
+int winh_weed(Winh *winh, int event_type, long winhmask);
+int winh_ignore_event(Winh *winh, int event_type, long winhmask);
+int winh_selectinput(Display *display, Winh *winh, long event_mask);
+int winh_changewindowattributes(Display *display, Winh *winh, unsigned long valuemask, XSetWindowAttributes *attributes);
+void winh_free(Winh *winh);
+int winh_walk(Winh *winh, int depthfirst, int (*procedure)());
+int winh_climb(Winh *start, Winh *stop, int (*procedure)());
+int winh_eventindex(int event_type);
+int winh_ordercheck(int before, int after);
+int winh(Display *display, int depth, long winhmask);
+PointerPlace *warppointer(Display *display, Window dest_w, int dest_x, int dest_y);
+Bool pointermoved(Display *display, PointerPlace *ptr);
+void unwarppointer(Display *display, PointerPlace *ptr);
+void pointerrootpos(Display *display, PointerPlace *ptr);
+void rootcoordset(Display *display, Window src_w, Window dest_w, int src_x, int src_y, int *dest_x_return, int *dest_y_return);
+void serialset(Display *display, XEvent *event);
+Bool serialtest(XEvent *good, XEvent *ev);
+Time gettime( Display *disp);
+int maxsize( XVisualInfo *vp);
+char *xt_strdup(char *str);
+struct buildtree *buildtree(Display *disp, Window parent, char **list, int nlist);
+struct buildtree *btntobtp(struct buildtree *list, char *name);
+struct buildtree *btwtobtp(struct buildtree *list, Window w);
+Window btntow(struct buildtree *list, char *name);
+char *btwton(struct buildtree *list, Window w);
+void setforexpose(Display *disp, Window w);
+Status exposefill(Display *disp, Window w);
+Status exposecheck(Display *disp, Window w);
+Status expose_test_restored(Display *disp, Window w);
+void settimeout(int to);
+unsigned long cleartimeout(void);
+Region makeregion(void);
+int samehost(XHostAddress *h1, XHostAddress *h2);
+int pfcount(int pass, int fail);
+int rptcounts(void);
+Status SimulateKeyPressEvent(Display *dpy, KeyCode keycode);
+Status SimulateKeyReleaseEvent(Display *dpy, KeyCode keycode);
+Status SimulateButtonPressEvent(Display *dpy, unsigned int button);
+Status SimulateButtonReleaseEvent(Display *dpy, unsigned int button);
+Status CompareCursorWithWindow(Display *dpy, Window window, Cursor cursor);
+Status CompareCurrentWithWindow(Display *dpy, Window window);
+Status SimulateMotionEvent(Display *dpy, int screen, int x, int y);
+Status XTestDiscard( Display *dpy);
+void XTestSetGContextOfGC( GC gc, GContext gid);
+void XTestSetVisualIDOfVisual( Visual *v, VisualID vid);
+void buttonpress(Display *disp, unsigned int button);
+void buttonrel(Display *disp, unsigned int button);
+void keypress(Display *disp, int key);
+void keyrel(Display *disp, int key);
+void relbuttons(void);
+void relkeys(void);
+void relalldev(void);
+unsigned int wantmods(Display *disp, int want);
+int modpress(Display *disp, unsigned int mask);
+int modrel(Display *disp, unsigned int mask);
+int ismodkey(unsigned int mask, int kc);
+int restoredevstate(void);
+int noext(int needbutton);
+int nbuttons(void);
+int getkeycode(Display *display);
+Status IsExtTestAvailable(void);
+int xtest_putenv(char *envstr);
+int curofwin(Display *display, Cursor cursor, Window window);
+int defcur(Display *display, Window window);
+int spriteiswin(Display *display, Window window);
+
+#else
+
+void startup();
+void cleanup();
+void fontstartup();
+void setxtfontpath();
+void fontcleanup();
+void focusstartup();
+void focuscleanup();
+void fontfocusstartup();
+void fontfocuscleanup();
+void rmstartup();
+void aborttest();
+void reset_delay();
+void exec_startup();
+void exec_cleanup();
+char *boolname();
+char *eventmaskname();
+char *eventname();
+char *keymaskname();
+char *modifiername();
+char *buttonmaskname();
+char *buttonname();
+char *notifymodename();
+char *notifydetailname();
+char *visibilityname();
+char *grabreplyname();
+char *alloweventmodename();
+char *reverttoname();
+char *errorname();
+char *classname();
+char *bitgravityname();
+char *wingravityname();
+char *backingstorename();
+char *gcfunctionname();
+char *linestylename();
+char *capstylename();
+char *joinstylename();
+char *fillstylename();
+char *displayclassname();
+char *protoname();
+char *atomname();
+char *mapstatename();
+char *visualmaskname();
+char *contexterrorname();
+int error_status();
+int unexp_err();
+int io_err();
+int geterr();
+int getbadvalue();
+void reseterr();
+int getevent();
+int stackorder();
+void report();
+void trace();
+void check();
+void debug();
+void tccabort();
+void setdblev();
+int getdblev();
+Window iponlywin();
+Window badwin();
+void _startcall();
+void startcall();
+void _endcall();
+void endcall();
+Window makewin();
+void winpair();
+Drawable makewinpos();
+int checkevent();
+int initvclass();
+void resetvclass();
+int nextvclass();
+int nvclass();
+GC badgc();
+Pixmap badpixm();
+Font badfont();
+void badvis();
+void linkstart();
+void linkclean();
+int issuppvis();
+unsigned long visualsupported();
+void resetsupvis();
+int nextsupvis();
+int nsupvis();
+Status checkarea();
+Status checkclear();
+void getsize();
+unsigned int getdepth();
+void pattern();
+Status checkpattern();
+Window crechild();
+Window creunmapchild();
+Status checktile();
+Pixmap maketile();
+Pixmap makepixm();
+void resetvinf();
+int nextvinf();
+int nvinf();
+Drawable defdraw();
+Window defwin();
+GC makegc();
+void setgcfont();
+void dumpimage();
+Status verifyimage();
+void dclear();
+void dset();
+void delete();
+int isdeleted();
+void resetdelete();
+void cancelrest();
+void unsupported();
+void notinuse();
+void untested();
+XImage *savimage();
+Status compsavimage();
+Status diffsavimage();
+int checkpixel();
+unsigned long getpixel();
+Status checkpixels();
+int notmember();
+int notmaskmember();
+void setwidth();
+void setcapstyle();
+void setlinestyle();
+void setjoinstyle();
+int checkgccomponent();
+void gcflush();
+void tpstartup();
+void tpcleanup();
+Pixmap nondepth1pixmap();
+void setfuncpixel();
+void regid();
+void freereg();
+int regenable();
+int regdisable();
+void openfonts();
+int checkfsp();
+void txtextents();
+void txtextents16();
+int txtwidth();
+int txtwidth16();
+Colormap badcolormap();
+Colormap makecolmap();
+int lg();
+char *bitstr();
+Cursor makecurnum();
+Cursor makecur();
+Cursor makecur2();
+XImage *makeimg();
+void dsetimg();
+void patternimg();
+Status checkimg();
+Status checkimgstruct();
+Display *opendisplay();
+unsigned int bitcount();
+unsigned long getpix();
+int atov();
+void initconfig();
+Window mkwinchild();
+Window mkwin();
+Status block();
+Winh *winh_adopt();
+int winh_create();
+Winh *winh_find();
+int winh_plant();
+int winh_pending();
+int winh_harvest();
+int winh_weed();
+int winh_ignore_event();
+int winh_selectinput();
+int winh_changewindowattributes();
+void winh_free();
+int winh_walk();
+int winh_climb();
+int winh_eventindex();
+int winh_ordercheck();
+int winh();
+PointerPlace *warppointer();
+Bool pointermoved();
+void unwarppointer();
+void pointerrootpos();
+void rootcoordset();
+void serialset();
+Bool serialtest();
+Time gettime();
+int maxsize();
+char *xt_strdup();
+struct buildtree *buildtree();
+struct buildtree *btntobtp();
+struct buildtree *btwtobtp();
+Window btntow();
+char *btwton();
+void setforexpose();
+Status exposefill();
+Status exposecheck();
+Status expose_test_restored();
+void settimeout();
+unsigned long cleartimeout();
+Region makeregion();
+int samehost();
+int pfcount();
+int rptcounts();
+Status SimulateKeyPressEvent();
+Status SimulateKeyReleaseEvent();
+Status SimulateButtonPressEvent();
+Status SimulateButtonReleaseEvent();
+Status CompareCursorWithWindow();
+Status CompareCurrentWithWindow();
+Status SimulateMotionEvent();
+Status XTestDiscard();
+void XTestSetGContextOfGC();
+void XTestSetVisualIDOfVisual();
+void buttonpress();
+void buttonrel();
+void keypress();
+void keyrel();
+void relbuttons();
+void relkeys();
+void relalldev();
+unsigned int wantmods();
+int modpress();
+int modrel();
+int ismodkey();
+int restoredevstate();
+int noext();
+int nbuttons();
+int getkeycode();
+Status IsExtTestAvailable();
+int xtest_putenv();
+int curofwin();
+int defcur();
+int spriteiswin();
+
+#endif
+
diff --git a/xc/test/xsuite/xtest/lib/error/EAcc1.mc b/xc/test/xsuite/xtest/lib/error/EAcc1.mc
new file mode 100644
index 000000000..c80e5ffd6
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EAcc1.mc
@@ -0,0 +1,28 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Access grab
+When an attempt to grab a key/button combination already grabbed
+by another client is made, then a
+.S BadAccess
+error occurs.
+>>STRATEGY
+Note - no generic code can be written for this included assertion.
+There should be a CODE section wherever it is included to override the
+default CODE section below.
+>>CODE
+report("No code written for this assertion.");
diff --git a/xc/test/xsuite/xtest/lib/error/EAcc2.mc b/xc/test/xsuite/xtest/lib/error/EAcc2.mc
new file mode 100644
index 000000000..07ec0e918
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EAcc2.mc
@@ -0,0 +1,28 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Access colormap-free
+When an attempt to free a colormap entry not allocated by the client
+is made, then a
+.S BadAccess
+error occurs.
+>>STRATEGY
+Note - no generic code can be written for this included assertion.
+There should be a CODE section wherever it is included to override the
+default CODE section below.
+>>CODE
+report("No code written for this assertion.");
diff --git a/xc/test/xsuite/xtest/lib/error/EAcc3.mc b/xc/test/xsuite/xtest/lib/error/EAcc3.mc
new file mode 100644
index 000000000..683011718
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EAcc3.mc
@@ -0,0 +1,28 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Access colormap-store
+When an attempt to store into a read-only or an unallocated colormap
+entry is made, then a
+.S BadAccess
+error occurs.
+>>STRATEGY
+Note - no generic code can be written for this included assertion.
+There should be a CODE section wherever it is included to override the
+default CODE section below.
+>>CODE
+report("No code written for this assertion.");
diff --git a/xc/test/xsuite/xtest/lib/error/EAcc4.mc b/xc/test/xsuite/xtest/lib/error/EAcc4.mc
new file mode 100644
index 000000000..bad7baa72
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EAcc4.mc
@@ -0,0 +1,29 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Access acl
+When an attempt is made to modify the access control list from a client
+that is not authorised in a server-dependent way to do so,
+then a
+.S BadAccess
+error occurs.
+>>STRATEGY
+Note - no generic code can be written for this included assertion.
+There should be a CODE section wherever it is included to override the
+default CODE section below.
+>>CODE
+report("No code written for this assertion.");
diff --git a/xc/test/xsuite/xtest/lib/error/EAcc5.mc b/xc/test/xsuite/xtest/lib/error/EAcc5.mc
new file mode 100644
index 000000000..0f9704688
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EAcc5.mc
@@ -0,0 +1,28 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Access select
+When an attempt to select an event type is made, which at most one client
+can select, and another client has already selected it then a
+.S BadAccess
+error occurs.
+>>STRATEGY
+Note - no generic code can be written for this included assertion.
+There should be a CODE section wherever it is included to override the
+default CODE section below.
+>>CODE
+report("No code written for this assertion.");
diff --git a/xc/test/xsuite/xtest/lib/error/EAll.mc b/xc/test/xsuite/xtest/lib/error/EAll.mc
new file mode 100644
index 000000000..c57f3c1e9
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EAll.mc
@@ -0,0 +1,28 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad B 1
+>>### Alloc
+>># This is not testable
+When the server fails to allocate a required resource, then a
+.S BadAlloc
+error occurs.
+>>STRATEGY
+Report UNTESTED
+>>CODE
+
+ report("There is no reliable method of testing that a BadAlloc error is generated");
+ tet_result(TET_UNTESTED);
diff --git a/xc/test/xsuite/xtest/lib/error/EAto.mc b/xc/test/xsuite/xtest/lib/error/EAto.mc
new file mode 100644
index 000000000..77713fdeb
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EAto.mc
@@ -0,0 +1,33 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Atom
+When an atom argument does not name a valid xerrlist, then a
+.S BadAtom
+error occurs.
+>>STRATEGY
+Call test function using a value with the top bits set as the atom argument.
+Verify that a BadAtom error occurs.
+>>CODE BadAtom
+
+ A_ATOM = ~0L;
+ XCALL;
+
+ if(geterr() == BadAtom)
+ PASS;
+ else
+ FAIL;
diff --git a/xc/test/xsuite/xtest/lib/error/ECol.mc b/xc/test/xsuite/xtest/lib/error/ECol.mc
new file mode 100644
index 000000000..2788bebb5
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/ECol.mc
@@ -0,0 +1,33 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Color
+When a colourmap argument does not name a valid colourmap, then a
+.S BadColor
+error occurs.
+>>STRATEGY
+Create a bad colourmap by creating and freeing a colourmap.
+Call test function using bad colourmap as the colourmap argument.
+Verify that a BadColor error occurs.
+>>CODE BadColor
+
+ A_COLORMAP = badcolormap(A_DISPLAY, DRW(A_DISPLAY));
+ XCALL;
+ if(geterr() == BadColor)
+ PASS;
+ else
+ FAIL;
diff --git a/xc/test/xsuite/xtest/lib/error/ECur.mc b/xc/test/xsuite/xtest/lib/error/ECur.mc
new file mode 100644
index 000000000..4a3b4809b
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/ECur.mc
@@ -0,0 +1,47 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Cursor
+When a cursor argument does not name a valid xerrlist, then a
+.S BadCursor
+error occurs.
+>>STRATEGY
+Create cursor with shape XT_FONTCURSOR_GOOD in font cursor.
+Free cursor.
+Call test function using bad cursor as the cursor argument.
+Verify that a BadCursor error occurs.
+>>CODE BadCursor
+unsigned int shape;
+
+ seterrdef();
+
+ /* UNSUPPORTED is not allowed */
+ shape = config.fontcursor_good;
+ if (config.fontcursor_good == -1) {
+ delete("A value of UNSUPPORTED is not allowed for XT_FONTCURSOR_GOOD");
+ return;
+ }
+
+ A_CURSOR = XCreateFontCursor(A_DISPLAY, shape);
+ XFreeCursor(A_DISPLAY, A_CURSOR);
+
+ XCALL;
+
+ if (geterr() == BadCursor)
+ PASS;
+ else
+ FAIL;
diff --git a/xc/test/xsuite/xtest/lib/error/EDra.mc b/xc/test/xsuite/xtest/lib/error/EDra.mc
new file mode 100644
index 000000000..77a508766
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EDra.mc
@@ -0,0 +1,48 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Drawable
+When a drawable argument does not name a valid xerrlist, then a
+.S BadDrawable
+error occurs.
+>>STRATEGY
+Create a bad drawable by creating and destroying a window.
+Call test function using bad drawable as the drawable argument.
+Verify that a BadDrawable error occurs.
+>>CODE BadDrawable
+#ifdef A_IMAGE
+ XVisualInfo *vp;
+#endif
+
+ seterrdef();
+
+#ifdef A_IMAGE
+ resetvinf(VI_WIN_PIX); nextvinf(&vp);
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+ A_DRAWABLE = (Drawable)badwin(A_DISPLAY);
+#ifdef A_DRAWABLE2
+ A_DRAWABLE2 = A_DRAWABLE;
+#endif
+
+ XCALL;
+
+ if (geterr() == BadDrawable)
+ PASS;
+ else
+ FAIL;
diff --git a/xc/test/xsuite/xtest/lib/error/EFon1.mc b/xc/test/xsuite/xtest/lib/error/EFon1.mc
new file mode 100644
index 000000000..b5c326be9
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EFon1.mc
@@ -0,0 +1,37 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Font bad-font
+When a font argument does not name a valid font, then a
+.S BadFont
+error occurs.
+>>STRATEGY
+Create a bad font by loading and freeing a font.
+Call test function using bad font as the font argument.
+Verify that a BadFont error occurs.
+>>CODE BadFont
+
+ seterrdef();
+
+ A_FONT = (Font) badfont(A_DISPLAY);
+
+ XCALL;
+
+ if(geterr() == BadFont)
+ PASS;
+ else
+ FAIL;
diff --git a/xc/test/xsuite/xtest/lib/error/EFon2.mc b/xc/test/xsuite/xtest/lib/error/EFon2.mc
new file mode 100644
index 000000000..e35993484
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EFon2.mc
@@ -0,0 +1,28 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Font bad-fontable
+When the font argument does not name a valid GContext or font resource,
+then a
+.S BadFont
+error occurs.
+>>STRATEGY
+Note - no generic code can be written for this included assertion.
+There should be a CODE section wherever it is included to override the
+default CODE section below.
+>>CODE
+report("No code written for this assertion.");
diff --git a/xc/test/xsuite/xtest/lib/error/EGC.mc b/xc/test/xsuite/xtest/lib/error/EGC.mc
new file mode 100644
index 000000000..4fb210f34
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EGC.mc
@@ -0,0 +1,47 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### GC
+When the GC argument does not name a defined GC, then a
+.S BadGC
+error occurs.
+>>STRATEGY
+Create a GC.
+Set GC id to -1 using XTestSetGContextOfGC.
+Call test function using bad GC as the GC argument.
+Verify that a BadGC error occurs.
+>>CODE BadGC
+#ifdef A_IMAGE
+ XVisualInfo *vp;
+#endif
+
+ seterrdef();
+
+#ifdef A_IMAGE
+ resetvinf(VI_WIN_PIX); nextvinf(&vp);
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ A_GC = badgc(A_DISPLAY);
+
+ XCALL;
+
+ if (geterr() == BadGC)
+ PASS;
+ else
+ FAIL;
diff --git a/xc/test/xsuite/xtest/lib/error/EMat1.mc b/xc/test/xsuite/xtest/lib/error/EMat1.mc
new file mode 100644
index 000000000..70f9adad1
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EMat1.mc
@@ -0,0 +1,60 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Match inputonly
+When a drawable argument is an
+.S InputOnly
+window then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create an InputOnly window.
+Call test function using InputOnly window as the drawable argument.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+#ifdef A_IMAGE
+ XVisualInfo *vp;
+#endif
+
+ seterrdef();
+
+#ifdef A_IMAGE
+ resetvinf(VI_WIN_PIX); nextvinf(&vp);
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ A_DRAWABLE = (Drawable)iponlywin(A_DISPLAY);
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+#ifdef A_DRAWABLE2
+ seterrdef();
+ A_DRAWABLE2 = (Drawable)iponlywin(A_DISPLAY);
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+#endif
diff --git a/xc/test/xsuite/xtest/lib/error/EMat2.mc b/xc/test/xsuite/xtest/lib/error/EMat2.mc
new file mode 100644
index 000000000..88268f621
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EMat2.mc
@@ -0,0 +1,67 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Match gc-drawable-depth
+When the graphics context and the drawable
+do not have the same depth, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If only one depth supported
+ report UNSUPPORTED
+Create pixmap of depth 1.
+Create gc of different depth.
+Call test function with this pixmap and gc.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+XVisualInfo *vp;
+Drawable errpm;
+int founddepth = 0;
+
+ for (resetvinf(VI_PIX); nextvinf(&vp); ) {
+ if (vp->depth != 1) {
+ founddepth++;
+
+ errpm = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, errpm);
+#ifdef A_IMAGE
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ break;
+ }
+ }
+
+ if (!founddepth) {
+ report("Only one depth supported");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ vp->depth = 1;
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+#ifdef A_DRAWABLE2
+ A_DRAWABLE2 = makewin(A_DISPLAY, vp);
+#endif
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
diff --git a/xc/test/xsuite/xtest/lib/error/EMat3.mc b/xc/test/xsuite/xtest/lib/error/EMat3.mc
new file mode 100644
index 000000000..b27b4cf56
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EMat3.mc
@@ -0,0 +1,77 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Match gc-drawable-screen
+When the graphics context and the drawable were not created for the same
+root, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If multiple screens are supported
+ Create pixmap of depth 1.
+ Create gc on alternate screen.
+ Call test function with this pixmap and gc.
+ Verify that a BadMatch error occurs.
+else
+ report UNSUPPORTED
+>>CODE BadMatch
+XVisualInfo vi;
+Pixmap errpm;
+int scr_num;
+
+ if (config.alt_screen == -1) {
+ unsupported("No alternate root supported");
+ return;
+ }
+
+ scr_num = config.alt_screen;
+ if (scr_num == DefaultScreen(A_DISPLAY)) {
+ delete("The alternate root was the same as the one under test");
+ return;
+ }
+ if (scr_num >= ScreenCount(A_DISPLAY)) {
+ delete("The alternate root could not be accessed");
+ return;
+ }
+
+ vi.visual = NULL;
+ vi.screen = DefaultScreen(A_DISPLAY); /* XXX */
+ vi.depth = 1;
+ A_DRAWABLE = makepixm(A_DISPLAY, &vi);
+#ifdef A_DRAWABLE2
+ A_DRAWABLE2 = makepixm(A_DISPLAY, &vi);
+#endif
+#ifdef A_IMAGE
+ A_IMAGE = makeimg(A_DISPLAY, &vi, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ /*
+ * Create a 1x1 depth 1 pixmap on other screen
+ * and use it to create a gc
+ */
+ errpm = XCreatePixmap(A_DISPLAY, RootWindow(A_DISPLAY, scr_num), 1, 1, 1);
+ A_GC = makegc(A_DISPLAY, errpm);
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+ XFreePixmap(A_DISPLAY, errpm);
diff --git a/xc/test/xsuite/xtest/lib/error/EMat4.mc b/xc/test/xsuite/xtest/lib/error/EMat4.mc
new file mode 100644
index 000000000..7e72ccf19
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EMat4.mc
@@ -0,0 +1,42 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Match wininputonly
+When the window argument is an
+.S InputOnly
+window then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create an InputOnly window.
+Call test function using InputOnly window as the window argument.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+
+ seterrdef();
+
+ A_WINDOW = iponlywin(A_DISPLAY);
+#ifdef A_WINDOW2
+ A_WINDOW2 = iponlywin(A_DISPLAY);
+#endif
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
diff --git a/xc/test/xsuite/xtest/lib/error/ENam1.mc b/xc/test/xsuite/xtest/lib/error/ENam1.mc
new file mode 100644
index 000000000..3a527336d
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/ENam1.mc
@@ -0,0 +1,36 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Name font
+When the specified font does not exist, then a
+.S BadName
+error occurs.
+>>STRATEGY
+Call test function with non-existent font as the font name argument.
+Verify that a BadName error occurs.
+>>CODE BadName
+Font font;
+
+ /* Note: the argument has to be called 'name' */
+ name = config.bad_font_name;
+
+ font = XCALL;
+
+ if (geterr() == BadName)
+ PASS;
+ else
+ FAIL; /* For safty, this should already have been issued */
diff --git a/xc/test/xsuite/xtest/lib/error/ENam2.mc b/xc/test/xsuite/xtest/lib/error/ENam2.mc
new file mode 100644
index 000000000..8af7658a2
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/ENam2.mc
@@ -0,0 +1,27 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Name colour
+When the specified colour does not exist, then a
+.S BadName
+error occurs.
+>>STRATEGY
+Note - no generic code can be written for this included assertion.
+There should be a CODE section wherever it is included to override the
+default CODE section below.
+>>CODE
+report("No code written for this assertion.");
diff --git a/xc/test/xsuite/xtest/lib/error/EPix.mc b/xc/test/xsuite/xtest/lib/error/EPix.mc
new file mode 100644
index 000000000..e3f5544e2
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EPix.mc
@@ -0,0 +1,39 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Pixmap
+When a pixmap argument does not name a valid xerrlist, then a
+.S BadPixmap
+error occurs.
+>>STRATEGY
+Create a bad pixmap by creating and freeing a pixmap.
+Call test function using bad pixmap as the pixmap argument.
+Verify that a BadPixmap error occurs.
+>>CODE BadPixmap
+
+
+ seterrdef();
+
+ A_PIXMAP = (Pixmap) badpixm(A_DISPLAY);
+
+ XCALL;
+
+ if(geterr() == BadPixmap)
+ PASS;
+ else
+ FAIL;
+
diff --git a/xc/test/xsuite/xtest/lib/error/EVal.mc b/xc/test/xsuite/xtest/lib/error/EVal.mc
new file mode 100644
index 000000000..27c949908
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EVal.mc
@@ -0,0 +1,48 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>### Value
+>>STRATEGY
+Obtain a sequence of values which are not in the list specified by VALUE_LIST.
+For each value:
+ Call test function with this value in the VALUE_ARG argument.
+ Verify that a BadValue error occurs.
+>>CODE BadValue
+int i;
+int n;
+NOTMEMTYPE
+long vals[NM_LEN];
+
+ seterrdef();
+
+ n = NOTMEMBER(VALUE_LIST, NELEM(VALUE_LIST), vals);
+
+ for (i = 0; i < n; i++) {
+
+ debug(1, "Trying arg of %d", vals[i]);
+
+ VALUE_ARG = vals[i];
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else {
+ trace("Value of %d did not give BadValue", vals[i]);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(n);
diff --git a/xc/test/xsuite/xtest/lib/error/EWin.mc b/xc/test/xsuite/xtest/lib/error/EWin.mc
new file mode 100644
index 000000000..4d2ab324a
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/error/EWin.mc
@@ -0,0 +1,49 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Bad A
+>>### Window
+When a window argument does not name a valid xerrlist, then a
+.S BadWindow
+error occurs.
+>>STRATEGY
+Create a bad window by creating and destroying a window.
+Call test function using bad window as the window argument.
+Verify that a BadWindow error occurs.
+>>CODE BadWindow
+
+ seterrdef();
+
+ A_WINDOW = badwin(A_DISPLAY);
+
+ XCALL;
+
+ if (geterr() == BadWindow)
+ PASS;
+ else
+ FAIL;
+
+#ifdef A_WINDOW2
+ seterrdef();
+ A_WINDOW2 = badwin(A_DISPLAY);
+
+ XCALL;
+
+ if (geterr() == BadWindow)
+ PASS;
+ else
+ FAIL;
+#endif
diff --git a/xc/test/xsuite/xtest/lib/gc/arc-mode.mc b/xc/test/xsuite/xtest/lib/gc/arc-mode.mc
new file mode 100644
index 000000000..57a169717
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/arc-mode.mc
@@ -0,0 +1,16 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
diff --git a/xc/test/xsuite/xtest/lib/gc/backgroun.mc b/xc/test/xsuite/xtest/lib/gc/backgroun.mc
new file mode 100644
index 000000000..ebc5d464e
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/backgroun.mc
@@ -0,0 +1,228 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Good A
+The background component of the gc is used to determine the background
+pixel value.
+>>STRATEGY
+Set GC component background to various values.
+Pixmap verify the results.
+>>EXTERN
+
+#if !defined(T_XDrawImageString) && !defined(T_XCopyPlane) && !defined(T_XPutImage) && !defined(T_XCopyArea)
+#define NEED_STIPPLE
+#endif
+
+#if defined(T_XCopyPlane)
+#define CLEAR_TO_ZERO
+#endif
+
+>>CODE
+static unsigned long bglist[] = {
+ 0, 0x1, 0x2, 0x3, 0x4, 0x6, 0x7, 0x10, 0x33, 0x81,
+ 0xa3, 0xff, 256, 300, 1000,
+ 0x111111, 0x400200, 0x777777,
+ };
+XVisualInfo *vp;
+#ifdef NEED_STIPPLE
+Pixmap stip;
+char *stipbit = "\0";
+#endif
+long bgind;
+unsigned long bg;
+int nchecks = 0;
+
+#ifdef NEED_STIPPLE
+ stip = XCreateBitmapFromData(A_DISPLAY, DRW(A_DISPLAY), stipbit, 1, 1);
+#endif
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#ifdef CLEAR_TO_ZERO
+ dset(A_DISPLAY, A_DRAWABLE, 0L);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ /* Bitmap full of 0's will cause a bg fill */
+ A_IMAGE = makeimg(A_DISPLAY, vp, XYBitmap);
+ dsetimg(A_IMAGE, 0L);
+#endif
+
+ for (bgind = 0; bgind < NELEM(bglist); bgind++) {
+
+ bg = bglist[bgind];
+ if (bg > DEPTHMASK(vp->depth))
+ break;
+
+ trace("Testing bg pixel of %d", bg);
+ nchecks++;
+
+#ifdef NEED_STIPPLE
+ /*
+ * Set a stipple to all zero's and set the fill style
+ * to be FillOpaqueStippled. This will mean that everything
+ * should be drawn in the background colour.
+ * (different for XCopyPlane, which doesn't use fill style,
+ * nor does XPutImage or XCopyArea).
+ */
+ XSetStipple(A_DISPLAY, A_GC, stip);
+ XSetFillStyle(A_DISPLAY, A_GC, FillOpaqueStippled);
+#endif
+/* now set the background to bg and do the call. If it's XCopyPlane/XPutImage then
+ * we have cleared the src drawable/image to zero so we will always find 0 in the
+ * selected plane so we will fill with bg. If we're XDrawImageString then
+ * we do the equivalent of the background fill anyway, if we're
+ * XCopyArea then we have to do a dset of src with bg otherwise we'll have
+ * used FillOpaqueStippled and a stipple of a lone zero, only, to get the
+ * same effect of a background fill.
+ */
+#if T_XCopyArea
+ dset(A_DISPLAY, A_DRAWABLE, bg);
+#else
+ XSetBackground(A_DISPLAY, A_GC, bg);
+#endif
+
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAW);
+
+ dclear(A_DISPLAY, A_DRAW);
+ }
+ }
+
+#ifdef NEED_STIPPLE
+ XFreePixmap(A_DISPLAY, stip);
+#endif
+
+ CHECKPASS(nchecks);
+>>ASSERTION Good A
+The value for
+.M background
+is truncated to the depth of the GC.
+>>STRATEGY
+Set GC component background to value with all bits set.
+If not (XDrawImageString || XCopyPlane || XPutImage || XCopyArea)
+ Set GC component stipple to all zeros
+ Set GC component FillStyle to FillOpaqueStippled.
+else if (XCopyPlane || XPutImage)
+ Fill source drawable/image-bitmap with 0's to ensure we draw with background
+else if XCopyArea
+ Fill source drawable/image-bitmap with all 1's
+Draw item.
+Find a pixel with a value other than W_BG.
+Check that this is truncated to the depth.
+>>CODE
+XVisualInfo *vp;
+XImage *imp;
+#ifdef NEED_STIPPLE
+Pixmap stip;
+char *stipbit = "\0\0\0\0";
+#endif
+unsigned long pix;
+int found;
+int i_x, i_y;
+unsigned int i_width, i_height;
+
+#ifdef NEED_STIPPLE
+ stip = XCreateBitmapFromData(A_DISPLAY, DRW(A_DISPLAY), stipbit, 1, 1);
+#endif
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#ifdef CLEAR_TO_ZERO
+ dset(A_DISPLAY, A_DRAWABLE, 0L);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ /* bitmap of all 0's will cause bg "fill" */
+ A_IMAGE = makeimg(A_DISPLAY, vp, XYBitmap);
+ dsetimg(A_IMAGE, 0L);
+#endif
+
+#ifdef NEED_STIPPLE
+ /*
+ * Set a stipple to all zero's and set the fill style
+ * to be FillOpaqueStippled. This will mean that everything
+ * should be drawn in the background colour.
+ */
+ XSetStipple(A_DISPLAY, A_GC, stip);
+ XSetFillStyle(A_DISPLAY, A_GC, FillOpaqueStippled);
+#endif
+
+/* now set the background to ~0 and do the call. If it's XCopyPlane/XPutImage then
+ * we have cleared the src drawable/image to zero so we will always find 0 in the
+ * selected plane so we will fill with ~0. If we're XDrawImageString then
+ * we do the equivalent of the background fill anyway, if we're XCopyArea
+ * then we need to fill the src will all 1's, otherwise we'll have
+ * used FillOpaqueStippled and a stipple of a lone zero, only, to get the
+ * same effect of a background fill.
+ */
+#if T_XCopyArea
+ dset(A_DISPLAY, A_DRAWABLE, ~0L);
+#else
+ XSetBackground(A_DISPLAY, A_GC, ~0L);
+#endif
+
+ XCALL;
+
+ imp = savimage(A_DISPLAY, A_DRAW);
+ getsize(A_DISPLAY, A_DRAW, &i_width, &i_height);
+ found = 0;
+ for (i_y = 0; i_y < i_height; i_y++) {
+ for (i_x = 0; i_x < i_width; i_x++) {
+ pix = XGetPixel(imp, i_x, i_y);
+ if (pix != W_BG) {
+ found = 1;
+ if (pix == DEPTHMASK(vp->depth)) {
+ CHECK;
+ } else {
+ report("Pixel was set to %d, expecting %d", pix, DEPTHMASK(vp->depth));
+#ifdef NEED_STIPPLE
+ report("FillOpaqueStippled is also used in this test, and could affect the result");
+#endif
+ FAIL;
+ }
+ i_y = i_height; /* So that we leave loop XXX */
+ break;
+ }
+ }
+ }
+ if (found == 0) {
+ report("Nothing was drawn");
+#ifdef NEED_STIPPLE
+ report("FillOpaqueStippled is also used in this test, and could affect the result");
+#endif
+ FAIL;
+ }
+ }
+#ifdef NEED_STIPPLE
+ XFreePixmap(A_DISPLAY, stip);
+#endif
+
+ CHECKPASS(nvinf());
+
diff --git a/xc/test/xsuite/xtest/lib/gc/cap-style.mc b/xc/test/xsuite/xtest/lib/gc/cap-style.mc
new file mode 100644
index 000000000..8c08ff73d
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/cap-style.mc
@@ -0,0 +1,689 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Good A
+>># this first one was in line-style but doesn't apply to rectangle(s), but
+>># whenever this assertion is required then cap-style is in as well so
+>># put this at the beginning of cap-style so it looks as if it was at the
+>># end of the line-style stuff (because line-style normally immediately
+>># precedes cap-style in auto. inclusion order). kieron
+When
+.M line_width
+is greater than or equal to one,
+and
+.M line_style
+is
+.S LineSolid ,
+and a line is drawn from [x1, y1] to [x2, y2],
+and a line is drawn from [x2, y2] to [x1, y1],
+then the same pixels are drawn in each case.
+>>STRATEGY
+Draw lines in one direction.
+Save image.
+Clear drawable.
+Draw lines in opposite direction.
+Verify that the image is the same as that saved and that something was drawn.
+>>CODE
+XVisualInfo *vp;
+struct linedata {
+ int x1;
+ int y1;
+ int x2;
+ int y2;
+};
+static struct linedata linedata[] = {
+ {1, 1, 70, 10},
+ {3, 5, 10, 50},
+ {50, 25, 10, 20},
+ {45, 18, 34, 80},
+ {1, 77, 38, 22},
+ {88, 12, 54, 23},
+ };
+struct linedata *lp;
+int ndata = NELEM(linedata);
+XImage *lsimp;
+unsigned int lswidth;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ lswidth = 1;
+ for (lp = linedata; lp < &linedata[ndata]; lp++) {
+ setwidth(A_DISPLAY, A_GC, lswidth++);
+ drawline(lp->x1, lp->y1, lp->x2, lp->y2);
+ }
+
+ lsimp = savimage(A_DISPLAY, A_DRAWABLE);
+ dclear(A_DISPLAY, A_DRAWABLE);
+
+ /* Draw the lines reversed */
+ lswidth = 1;
+ for (lp = linedata; lp < &linedata[ndata]; lp++) {
+ setwidth(A_DISPLAY, A_GC, lswidth++);
+ drawline(lp->x2, lp->y2, lp->x1, lp->y1);
+ }
+
+ /* Compare the results */
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, lsimp))
+ CHECK;
+ else {
+ report("Lines not same when drawn in opposite direction");
+ FAIL;
+ }
+
+ /* assume we're not allowed to draw nothing, complain if so */
+ if (!checkarea(A_DISPLAY, A_DRAWABLE,
+ (struct area *)0, W_BG, W_BG, CHECK_IN | CHECK_DIFFER))
+ CHECK;
+ else {
+ report("%s didn't draw anything in opposite direction", TestName);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>EXTERN
+
+#define CAP_X1 15
+#define CAP_Y1 15
+#define CAP_X2 63
+#define CAP_Y2 42
+
+>>ASSERTION Good A
+When the
+.M cap_style
+is
+.S CapNotLast
+and the
+.M line_width
+is greater than zero (> 0),
+then this is equivalent to
+.S CapButt .
+>>STRATEGY
+For a variety of line widths, both odd and even.
+ Draw line with CapNotLast.
+ Save the image on the drawable.
+ Draw line with CapButt.
+ Verify that the images drawn were the same.
+>>CODE
+XVisualInfo *vp;
+XImage *capsav;
+unsigned int capw;
+static unsigned int capwidths[] = {
+ 1, 2, 5, 6, 10, 11, 40, 41};
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ for (capw = 0; capw < NELEM(capwidths); capw++) {
+ setwidth(A_DISPLAY, A_GC, capwidths[capw]);
+
+ setcapstyle(A_DISPLAY, A_GC, CapNotLast);
+ XCALL;
+ capsav = savimage(A_DISPLAY, A_DRAWABLE);
+ dclear(A_DISPLAY, A_DRAWABLE);
+
+ setcapstyle(A_DISPLAY, A_GC, CapButt);
+ XCALL;
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, capsav))
+ CHECK;
+ else {
+ report("CapNotLast was not equivalent to CapButt for linewidth %d", capwidths[capw]);
+ FAIL;
+ }
+ /* assume we're not allowed to draw nothing, complain if so */
+ if (!checkarea(A_DISPLAY, A_DRAWABLE,
+ (struct area *)0, W_BG, W_BG, CHECK_IN | CHECK_DIFFER))
+ CHECK;
+ else {
+ report("%s didn't draw anything with CapButt", TestName);
+ FAIL;
+ }
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ }
+ CHECKPASS(2*nvinf()*NELEM(capwidths));
+
+>>ASSERTION Good A
+When the
+.M cap_style
+is
+.S CapNotLast
+and the
+.M line_width
+is zero (0),
+then this is equivalent to
+.S CapButt
+except that the final endpoint is not drawn.
+>>STRATEGY
+Draw line with CapButt.
+Set GC component function to GXxor.
+Draw line with CapNotLast.
+Verify that only the final end point is set.
+>>CODE
+XVisualInfo *vp;
+int capx1, capy1, capx2, capy2;
+struct area area;
+
+ capx1 = 10; capy1 = 10;
+ capx2 = 70; capy2 = 30;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setwidth(A_DISPLAY, A_GC, (unsigned)0);
+
+ setcapstyle(A_DISPLAY, A_GC, CapButt);
+ drawline(capx1, capy1, capx2, capy2);
+
+ XSetFunction(A_DISPLAY, A_GC, GXxor);
+ setcapstyle(A_DISPLAY, A_GC, CapNotLast);
+ drawline(capx1, capy1, capx2, capy2);
+
+ /* Only the final endpoint should be set */
+ setarea(&area, capx2, capy2, 1, 1);
+ if (checkarea(A_DISPLAY, A_DRAWABLE, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Cap style incorrect for thin line and CapNotLast");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+When the
+.M cap_style
+is
+.S CapButt ,
+then the line is square at the endpoint (perpendicular to the slope of the line)
+with no projection beyond.
+>>STRATEGY
+Draw line with CapButt and odd or even line width.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ for(lw=8; lw <= 9; lw++) { /* odd or even line widths */
+ setwidth(A_DISPLAY, A_GC, lw);
+ setcapstyle(A_DISPLAY, A_GC, CapButt);
+
+ drawline(15, 15, 50, 33);
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ }
+
+ CHECKPASS(2*nvinf());
+>>ASSERTION Good A
+When the
+.M cap_style
+is
+.S CapRound
+and
+.M line-width
+is zero,
+then this is equivalent to
+.S CapButt .
+>>STRATEGY
+Draw line with CapRound.
+Save the image on the drawable.
+Draw line with CapButt.
+Verify that the images drawn were the same.
+>>CODE
+XVisualInfo *vp;
+XImage *savimp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setwidth(A_DISPLAY, A_GC, (unsigned)0);
+ setcapstyle(A_DISPLAY, A_GC, CapRound);
+
+ drawline(15, 15, 52, 35);
+ savimp = savimage(A_DISPLAY, A_DRAWABLE);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ setcapstyle(A_DISPLAY, A_GC, CapButt);
+ drawline(15, 15, 52, 35);
+
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, savimp))
+ CHECK;
+ else {
+ report("CapRound not equivalent to CapButt for thin line");
+ FAIL;
+ }
+
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+When the
+.M cap_style
+is
+.S CapRound
+and
+.M line-width
+is not zero,
+then the line has a circular arc, with the diamater equal to the
+.M line_width ,
+centred on the endpoint.
+>>STRATEGY
+For a variety of line widths.
+ Draw line with CapRound.
+ Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+int i;
+static unsigned int capwidths[] = {
+ 1, 2, 4, 5, 10, 11, 40,41};
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setcapstyle(A_DISPLAY, A_GC, CapRound);
+
+ for (i = 0; i < NELEM(capwidths); i++) {
+ trace("Trying CapRound with width of %d", capwidths[i]);
+ setwidth(A_DISPLAY, A_GC, capwidths[i]);
+ drawline(CAP_X1, CAP_Y1, CAP_X2, CAP_Y2);
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ }
+
+ CHECKPASS(NELEM(capwidths)*nvinf());
+>>ASSERTION Good A
+When the
+.M cap_style
+is
+.S CapProjecting
+and
+.M line-width
+is zero,
+then this is equivalent to
+.S CapButt .
+>>STRATEGY
+Draw line with CapProjecting.
+Save the image on the drawable.
+Draw line with CapButt.
+Verify that the images drawn were the same.
+>>CODE
+XVisualInfo *vp;
+XImage *savimp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setwidth(A_DISPLAY, A_GC, (unsigned)0);
+ setcapstyle(A_DISPLAY, A_GC, CapProjecting);
+
+ drawline(CAP_X1, CAP_Y1, CAP_X2, CAP_Y2);
+ savimp = savimage(A_DISPLAY, A_DRAWABLE);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ setcapstyle(A_DISPLAY, A_GC, CapButt);
+ drawline(CAP_X1, CAP_Y1, CAP_X2, CAP_Y2);
+
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, savimp))
+ CHECK;
+ else {
+ report("CapProjecting not equivalent to CapButt for thin line");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+When the
+.M cap_style
+is
+.S CapProjecting
+and
+.M line-width
+is not zero,
+then the line is square at the end, but the path continues beyond the endpoint
+for a distance equal to half the
+.M line-width .
+>>STRATEGY
+Draw horizontal line.
+Verify directly that path continues beyond end points.
+Draw arbitrary line.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+struct area area;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setcapstyle(A_DISPLAY, A_GC, CapProjecting);
+
+ for(lw=11; lw <= 12; lw++) { /* odd and even linewidths */
+ setwidth(A_DISPLAY, A_GC, lw);
+ drawline(20, 20, 70, 20);
+
+ setarea(&area, 20-lw/2, 20-lw/2, (70-20)+lw, lw);
+ if (checkarea(A_DISPLAY, A_DRAWABLE, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("CapProjecting on horizontal line failed (width = %u)", lw);
+ FAIL;
+ }
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ drawline(CAP_X1, CAP_Y1, CAP_X2, CAP_Y2);
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ }
+
+ CHECKPASS(4*nvinf());
+>>ASSERTION Good A
+>># added during review of assertions
+When a line has coincident endpoints (x1=x2, y1=y2),
+and the
+.M cap_style
+is applied to both endpoints and the
+.M line_width
+is equal to zero and the
+.M cap_style
+is
+.S CapNotLast ,
+then the results are device-dependent,
+but the desired effect is that nothing is drawn.
+>>STRATEGY
+Draw line with zero width and length.
+Verify that nothing is drawn.
+(Test always passes whatever the result.)
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setcapstyle(A_DISPLAY, A_GC, CapNotLast);
+
+ setwidth(A_DISPLAY, A_GC, (unsigned)0);
+ drawline(20, 20, 20, 20);
+
+ if (checkarea(A_DISPLAY, A_DRAWABLE, (struct area *)0, W_BG, W_BG,
+ CHECK_DIFFER|CHECK_ALL)) {
+
+ trace("zero width, length line - Nothing was drawn (desired effect)");
+ } else {
+ trace("zero width, length line - Something was drawn (not the desired effect)");
+ }
+
+ CHECK;
+ }
+
+ CHECKPASS(nvinf());
+
+>>#ASSERTION
+>># suppressed during drafting of assertions.
+>>#When a line has coincident endpoints (x1=x2, y1=y2),
+>>#and the
+>>#.M cap_style
+>>#is applied to both endpoints and the
+>>#.M line_width
+>>#is equal to zero and the
+>>#.M cap_style
+>>#is
+>>#.S CapButt ,
+>>#then the results are device-dependent,
+>>#but the desired effect is that a single pixel is drawn.
+>>ASSERTION Good A
+When a line has coincident endpoints (x1=x2, y1=y2),
+and the
+.M cap_style
+is applied to both endpoints and the
+.M line_width
+is equal to zero and the
+.M cap_style
+is
+.S CapRound ,
+then the results are the same as for
+.S CapButt
+with
+.M line_width
+equal to zero.
+>>STRATEGY
+Draw zero length line with CapRound.
+Save the image on the drawable.
+Draw zero length line with CapButt.
+Verify that the images drawn were the same.
+>>CODE
+XVisualInfo *vp;
+XImage *savimp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setwidth(A_DISPLAY, A_GC, (unsigned)0);
+ setcapstyle(A_DISPLAY, A_GC, CapRound);
+
+ drawline(15, 15, 15, 15);
+ savimp = savimage(A_DISPLAY, A_DRAWABLE);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ setcapstyle(A_DISPLAY, A_GC, CapButt);
+ drawline(15, 15, 15, 15);
+
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, savimp))
+ CHECK;
+ else {
+ report("CapRound not equivalent to CapButt for zero length thin line");
+ FAIL;
+ }
+
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+When a line has coincident endpoints (x1=x2, y1=y2),
+and the
+.M cap_style
+is applied to both endpoints and the
+.M line_width
+is equal to zero and the
+.M cap_style
+is
+.S CapProjecting ,
+then the results are the same as for
+.S CapButt
+with
+.M line_width
+equal to zero.
+>>STRATEGY
+Draw zero length line with CapProjecting.
+Save the image on the drawable.
+Draw zero length line with CapButt.
+Verify that the images drawn were the same.
+>>CODE
+XVisualInfo *vp;
+XImage *savimp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setwidth(A_DISPLAY, A_GC, (unsigned)0);
+ setcapstyle(A_DISPLAY, A_GC, CapProjecting);
+
+ drawline(15, 15, 15, 15);
+ savimp = savimage(A_DISPLAY, A_DRAWABLE);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ setcapstyle(A_DISPLAY, A_GC, CapButt);
+ drawline(15, 15, 15, 15);
+
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, savimp))
+ CHECK;
+ else {
+ report("CapProjecting not equivalent to CapButt for zero length thin line");
+ FAIL;
+ }
+
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+When a line has coincident endpoints (x1=x2, y1=y2),
+and the
+.M cap_style
+is applied to both endpoints and the
+.M line_width
+is not equal to zero and the
+.M cap_style
+is
+.S CapButt ,
+then nothing is drawn.
+>>STRATEGY
+Draw zero length line with CapButt.
+Verify that the drawable is clear.
+>>CODE
+XVisualInfo *vp;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ for(lw=10; lw <= 11; lw++) { /* odd and even widths */
+ setwidth(A_DISPLAY, A_GC, lw);
+ setcapstyle(A_DISPLAY, A_GC, CapButt);
+
+ drawline(20, 20, 20, 20);
+
+ if (checkarea(A_DISPLAY, A_DRAWABLE, (struct area *)0, W_BG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Something was drawn with zero length line and CapButt (width = %u)", lw);
+ FAIL;
+ }
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ }
+
+ CHECKPASS(2*nvinf());
+>>ASSERTION Good A
+When a line has coincident endpoints (x1=x2, y1=y2),
+and the
+.M cap_style
+is applied to both endpoints and the
+.M line_width
+is not equal to zero and the
+.M cap_style
+is
+.S CapRound ,
+then the closed path is a circle, centered at the endpoint, and
+with the diameter equal to the line-width.
+>>STRATEGY
+Draw zero length line with CapRound.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ for(lw=4; lw <= 5; lw++) { /* odd and even line widths */
+ setwidth(A_DISPLAY, A_GC, lw);
+ setcapstyle(A_DISPLAY, A_GC, CapRound);
+
+ drawline(20, 20, 20, 20);
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ }
+
+ CHECKPASS(2*nvinf());
+>>ASSERTION Good A
+When a line has coincident endpoints (x1=x2, y1=y2),
+and the
+.M cap_style
+is applied to both endpoints and the
+.M line_width
+is not equal to zero and the
+.M cap_style
+is
+.S CapProjecting ,
+then the closed path is a square, aligned with the coordinate axes, centered at the
+endpoint, and with the sides equal to the line-width.
+>>STRATEGY
+Draw zero length line with CapProjecting.
+Verify area drawn directly.
+>>CODE
+XVisualInfo *vp;
+struct area area;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ for(lw=21; lw <= 22; lw++) { /* odd and even line widths */
+ setwidth(A_DISPLAY, A_GC, lw);
+ setcapstyle(A_DISPLAY, A_GC, CapProjecting);
+ drawline(40, 40, 40, 40);
+
+ setarea(&area, 40-lw/2, 40-lw/2, lw, lw);
+ if (checkarea(A_DISPLAY, A_DRAWABLE, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("CapProjecting with zero length line did not draw a square (width = %u)", lw);
+ FAIL;
+ }
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION def
+>># The first test in dash-list.mc will check this, if checkable.
+When a
+.M cap_style
+is applied at an end point, then the phase of the
+dash pattern is reset to the
+.M dash_offset .
diff --git a/xc/test/xsuite/xtest/lib/gc/clip-mask.mc b/xc/test/xsuite/xtest/lib/gc/clip-mask.mc
new file mode 100644
index 000000000..c91cc71bc
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/clip-mask.mc
@@ -0,0 +1,272 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Good A
+When the
+.M clip_mask
+is set to
+.S None ,
+then the pixels are always drawn regardless of the clip origin.
+>>STRATEGY
+Set clip mask to None
+Verify that things are still drawn.
+>>CODE
+XVisualInfo *vp;
+XImage *cmsav;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#if T_XCopyPlane
+ dset(A_DISPLAY, A_DRAWABLE, ~0L);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ XCALL;
+ cmsav = savimage(A_DISPLAY, A_DRAW);
+ dclear(A_DISPLAY, A_DRAW);
+
+ /*
+ * Not very interesting, because this should be the default
+ * anyway.
+ */
+ XSetClipMask(A_DISPLAY, A_GC, None);
+
+ XCALL;
+
+ if (compsavimage(A_DISPLAY, A_DRAW, cmsav))
+ CHECK;
+ else {
+ report("Clip mask of None changed graphics");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When pixels are outside the area covered by the
+.M clip_mask ,
+then they are not drawn.
+>>STRATEGY
+Create a pixmap depth 1.
+Fill it with all ones.
+Set this pixmap as the clip_mask.
+Verify that nothing is drawn outside the clip-mask area.
+Use a pixmap size of 5x5 to ensure that all tests have some part of the
+drawing outside the clip-mask.
+>>CODE
+XVisualInfo *vp;
+Pixmap cmpm;
+struct area area;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#if T_XCopyPlane
+ dset(A_DISPLAY, A_DRAWABLE, ~0L);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ setarea(&area, 0, 0, 5, 5);
+ cmpm = XCreatePixmap(A_DISPLAY, A_DRAW, area.width, area.height, 1);
+ dset(A_DISPLAY, cmpm, 1L);
+ XSetClipMask(A_DISPLAY, A_GC, cmpm);
+ XFreePixmap(A_DISPLAY, cmpm);
+
+ XCALL;
+
+ if (checkarea(A_DISPLAY, A_DRAW, &area, 0L, W_BG, CHECK_OUT))
+ CHECK;
+ else {
+ report("Drawing outside clip mask");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+When pixels have a
+.M clip_mask
+bit set to 1, and they would be drawn,
+then they are drawn.
+>>STRATEGY
+Do graphics operation.
+Save the image on the drawable.
+Clear drawable.
+Create a pixmap depth 1 that is the same size as the window.
+Set all bits in pixmap to 1.
+Set GC component clip-mask to pixmap using XSetClipMask.
+Do graphics operation.
+Verify that the images drawn were the same.
+
+Set pixmap to a pattern.
+Do graphics operation.
+Pixmap verify the result.
+>>CODE
+#define stipple_width 24
+#define stipple_height 11
+static unsigned char stipple_bits[] = {
+ 0xff, 0x0f, 0x00, 0x3f, 0xf0, 0xff, 0xcf, 0xff, 0x03, 0xf7, 0x0f, 0xfc,
+ 0xff, 0xf1, 0x0f, 0x78, 0x7e, 0xf0, 0x80, 0x8f, 0x1f, 0x2a, 0xf0, 0xe1,
+ 0x80, 0x07, 0x1e, 0xaa, 0xff, 0xe0, 0x80, 0xff, 0x0f};
+XVisualInfo *vp;
+Pixmap cmpixmap;
+Pixmap cmstip;
+XImage *cmsav;
+GC cmgc;
+unsigned int cmwidth, cmheight;
+int i, j;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#if T_XCopyPlane
+ dset(A_DISPLAY, A_DRAWABLE, ~0L);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ XCALL;
+ cmsav = savimage(A_DISPLAY, A_DRAW);
+ if (isdeleted())
+ return;
+ /* Must clear the drawable - otherwise there is no way
+ of proving clip mask of all 1's allowed drawing */
+ dclear(A_DISPLAY, A_DRAW);
+
+ getsize(A_DISPLAY, A_DRAW, &cmwidth, &cmheight);
+ cmpixmap = XCreatePixmap(A_DISPLAY, A_DRAW, cmwidth, cmheight, 1);
+ if (isdeleted())
+ return;
+ dset(A_DISPLAY, cmpixmap, 1L);
+
+ XSetClipMask(A_DISPLAY, A_GC, cmpixmap);
+
+ trace("Clip mask of all 1's");
+ XCALL;
+ if (compsavimage(A_DISPLAY, A_DRAW, cmsav))
+ CHECK;
+ else {
+ report("fail on clip_mask of all 1's");
+ FAIL;
+ }
+ dclear(A_DISPLAY, A_DRAW);
+
+ cmstip = XCreateBitmapFromData(A_DISPLAY, A_DRAW, (char*)stipple_bits,
+ stipple_width, stipple_height);
+ cmgc = makegc(A_DISPLAY, cmstip);
+ if (isdeleted())
+ return;
+
+ for (i = 0; i < cmwidth; i += stipple_width) {
+ for (j = 0; j < cmheight; j += stipple_height) {
+ XCopyArea(A_DISPLAY, cmstip, cmpixmap, cmgc, 0, 0,
+ stipple_width, stipple_height, i, j);
+ }
+ }
+ XSetClipMask(A_DISPLAY, A_GC, cmpixmap);
+
+ trace("Clip mask with pattern");
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAW);
+
+ XFreePixmap(A_DISPLAY, cmpixmap);
+ XFreePixmap(A_DISPLAY, cmstip);
+ }
+
+ CHECKPASS(2*nvinf());
+>>ASSERTION Good A
+When pixels have a
+.M clip_mask
+bit set to 0,
+then they are not drawn.
+>>STRATEGY
+Create a pixmap depth 1 that is the same size as the window.
+Set all bits in pixmap to 0.
+Set GC component clip_mask to pixmap using XSetClipMask.
+Do graphics operation.
+Verify that nothing is drawn.
+>>CODE
+XVisualInfo *vp;
+Pixmap cmpixmap;
+unsigned int cmwidth, cmheight;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#if T_XCopyPlane
+ dset(A_DISPLAY, A_DRAWABLE, ~0L);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ getsize(A_DISPLAY, A_DRAW, &cmwidth, &cmheight);
+ cmpixmap = XCreatePixmap(A_DISPLAY, A_DRAW, cmwidth, cmheight, 1);
+ if (isdeleted())
+ return;
+ dset(A_DISPLAY, cmpixmap, 0L);
+
+ XSetClipMask(A_DISPLAY, A_GC, cmpixmap);
+
+ trace("Clip mask of all 0's");
+ XCALL;
+ if (checkclear(A_DISPLAY, A_DRAW))
+ CHECK;
+ else {
+ report("Pixels were drawn with clip_mask of all zeros");
+ FAIL;
+ }
+
+ XFreePixmap(A_DISPLAY, cmpixmap);
+ }
+
+ CHECKPASS(nvinf());
diff --git a/xc/test/xsuite/xtest/lib/gc/clip-x-or.mc b/xc/test/xsuite/xtest/lib/gc/clip-x-or.mc
new file mode 100644
index 000000000..8107836e6
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/clip-x-or.mc
@@ -0,0 +1,99 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+>># This file does both the x and y clip-mask origin components.
+>>#
+>>ASSERTION Good A
+The clip origin coordinates
+.M clip-x-origin
+and
+.M clip-y-origin
+are interpreted relative to the
+origin of the destination drawable specified in the graphics
+operation.
+>>STRATEGY
+Create Pixmap and set clip-mask with it.
+Vary clip origin
+Verify nothing is drawn outside the clip_mask based on the origin.
+Pixmap verify results inside the cliparea.
+>>CODE
+XVisualInfo *vp;
+Pixmap cmopixmap;
+struct area area;
+unsigned int cmowidth;
+unsigned int cmoheight;
+int divsize;
+int i, j;
+
+ divsize = 3;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#if T_XCopyPlane
+ dset(A_DISPLAY, A_DRAWABLE, ~0L);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ /*
+ * Get size of the pixmap. It is divsize smaller on all sides
+ * than the window.
+ */
+ getsize(A_DISPLAY, A_DRAW, &cmowidth, &cmoheight);
+ cmowidth /= divsize;
+ cmoheight /= divsize;
+ debug(2, "clip-mask height=%d, width=%d", cmowidth, cmoheight);
+
+ /*
+ * Create a pixmap that is about divsize^2 of the area of
+ * the window.
+ */
+ cmopixmap = XCreatePixmap(A_DISPLAY, A_DRAW, cmowidth, cmoheight, 1);
+ dset(A_DISPLAY, cmopixmap, 1L);
+
+ XSetClipMask(A_DISPLAY, A_GC, cmopixmap);
+ XFreePixmap(A_DISPLAY, cmopixmap);
+
+ for (i = 0; i < divsize; i++) {
+ for (j = 0; j < divsize; j++) {
+ setarea(&area, i*cmowidth, j*cmoheight, cmowidth, cmoheight);
+ debug(2, "Origin at (%d,%d)", area.x, area.y);
+ XSetClipOrigin(A_DISPLAY, A_GC, area.x, area.y);
+ XCALL;
+ if (checkarea(A_DISPLAY,A_DRAW,&area,W_BG,W_BG,CHECK_OUT))
+ CHECK;
+ else {
+ report("Drawing occurred outside clip_mask");
+ FAIL;
+ }
+ PIXCHECK(A_DISPLAY, A_DRAW);
+ dclear(A_DISPLAY, A_DRAW);
+ }
+ }
+ }
+
+ CHECKPASS(2*divsize*divsize*nvinf());
+
diff --git a/xc/test/xsuite/xtest/lib/gc/clip-y-or.mc b/xc/test/xsuite/xtest/lib/gc/clip-y-or.mc
new file mode 100644
index 000000000..57a169717
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/clip-y-or.mc
@@ -0,0 +1,16 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
diff --git a/xc/test/xsuite/xtest/lib/gc/dash-list.mc b/xc/test/xsuite/xtest/lib/gc/dash-list.mc
new file mode 100644
index 000000000..9c0040ddc
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/dash-list.mc
@@ -0,0 +1,107 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>EXTERN
+static char dashlist[] = {
+ 1, 5, 3, 9, 15, 1, 1, 2, 2, 3, 3,
+ 2, 3, 1, 5, 1, 7, 1, 2, 1};
+>>ASSERTION Good A
+The
+initial and alternate elements of the
+.M dash-list
+within the GC
+specify the lengths of the even dashes and
+the second and alternate elements specify the lengths of the odd dashes.
+>>STRATEGY
+Set graphics coordinates for dashed lines
+ (includes horizontal and vertical cases,
+ and includes joins and caps where relevant).
+Set the line_style of the GC to LineOnOffDash using XChangeGC.
+Set the dash_list of the GC to even length list using XSetDashes.
+Clear drawable.
+Draw lines.
+Verify that dashes drawn correspond to dash_list (use pixmap checking).
+Repeat with odd length dash_list.
+Repeat with single dash of length 255 in dash_list.
+>>CODE
+XVisualInfo *vp;
+static unsigned char longdash[] = {
+ 255};
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setfordash();
+ setlinestyle(A_DISPLAY, A_GC, LineOnOffDash);
+
+ trace("various length dashes, %d in list", NELEM(dashlist));
+ XSetDashes(A_DISPLAY, A_GC, 0, dashlist, NELEM(dashlist));
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ trace("various length dashes, %d in list", NELEM(dashlist)-1);
+ XSetDashes(A_DISPLAY, A_GC, 0, dashlist, NELEM(dashlist)-1);
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ trace("dash length of 255");
+ XSetDashes(A_DISPLAY, A_GC, 0, (char *)longdash, NELEM(longdash));
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ }
+
+ CHECKPASS(3*nvinf());
+
+>>ASSERTION Good A
+The dashes component of the GC specifies the length of both even and
+odd dashes.
+>>STRATEGY
+Set the dashes component of the GC using XChangeGC.
+Draw lines.
+Verify that even and odd dashes are same length (use pixmap checking).
+>>CODE
+XVisualInfo *vp;
+XGCValues gcv;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setfordash();
+ setlinestyle(A_DISPLAY, A_GC, LineOnOffDash);
+
+ gcv.dashes = 8;
+ XChangeGC(A_DISPLAY, A_GC, GCDashList, &gcv);
+
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+>>#There is nothing new to test as the first test purpose implicitly tests this.
+When the line is horizontal, then the length of a dash is measured along the
+x axis.
+>>ASSERTION def
+>>#There is nothing new to test as the first test purpose implicitly tests this.
+When the line is vertical, then the length of a dash is measured along the
+y axis.
diff --git a/xc/test/xsuite/xtest/lib/gc/dash-offs.mc b/xc/test/xsuite/xtest/lib/gc/dash-offs.mc
new file mode 100644
index 000000000..fe28ac8e9
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/dash-offs.mc
@@ -0,0 +1,103 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>EXTERN
+static char dolist[] = {
+ 8, 1, 2, 3, 1, 1, 1, 1, 1, 11, 2, 8};
+>>ASSERTION Good A
+The
+.M dash_offset
+defines the phase of the pattern,
+specifying how many pixels into the dash-list the pattern
+begins in any single graphics request.
+>>STRATEGY
+For both odd and even line widths do:
+ Set graphics coordinates for dashed lines
+ (includes horizontal and vertical cases,
+ and includes joins and caps where relevant).
+ Set the line_style of the GC to LineOnOffDash using XSetLineAttributes.
+ For various dash_offsets:
+ Set the dash_offset of the GC using XSetDashes.
+ Clear drawable.
+ Draw lines.
+ Verify that dashes drawn correspond to dash_list (use pixmap checking).
+ Set dash_offset of the GC to zero using XSetDashes.
+ Clear drawable.
+ Draw lines.
+ Save the image on the drawable.
+ Set dash_offset of the GC to multiple of combined dash length using XSetDashes.
+ Clear drawable.
+ Draw lines.
+ Verify that the images drawn were the same.
+>>CODE
+static unsigned short dashoff[] = {
+ 0x0, 0x2, 0x7, 0x99, 0xfe78};
+XVisualInfo *vp;
+XImage *dosav;
+int i;
+int combinedlen = 0;
+unsigned int lw;
+
+ /*
+ * Calculate total length of list needed to check circularity.
+ */
+ for (i = 0; i < NELEM(dolist); i++)
+ combinedlen += dolist[i];
+
+ if (NELEM(dolist) & 1) /* Odd length */
+ combinedlen *= 2;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setfordash();
+ setlinestyle(A_DISPLAY, A_GC, LineOnOffDash);
+ for(lw=10; lw <= 11; lw++) { /* both odd and even widths */
+ setwidth(A_DISPLAY, A_GC, lw);
+
+ for (i = 0; i < NELEM(dashoff); i++) {
+ trace("dash offset of %d", dashoff[i]);
+ XSetDashes(A_DISPLAY, A_GC, dashoff[i], dolist, NELEM(dolist));
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ }
+
+ XSetDashes(A_DISPLAY, A_GC, 0, dolist, NELEM(dolist));
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+ dosav = savimage(A_DISPLAY, A_DRAWABLE);
+
+ trace("dash offset of the combined length of dash list %d",
+ combinedlen);
+ XSetDashes(A_DISPLAY, A_GC, combinedlen, dolist, NELEM(dolist));
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, dosav))
+ CHECK;
+ else {
+ report("dash offset of 0 not equivalent to sum of elements in dash list (%d) for linewidth %u", combinedlen, lw);
+ FAIL;
+ }
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ } /* odd and even widths */
+ }
+
+ CHECKPASS(2*(NELEM(dashoff)+1)*nvinf());
diff --git a/xc/test/xsuite/xtest/lib/gc/fill-rule.mc b/xc/test/xsuite/xtest/lib/gc/fill-rule.mc
new file mode 100644
index 000000000..57a169717
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/fill-rule.mc
@@ -0,0 +1,16 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
diff --git a/xc/test/xsuite/xtest/lib/gc/fill-styl.mc b/xc/test/xsuite/xtest/lib/gc/fill-styl.mc
new file mode 100644
index 000000000..bea043ec6
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/fill-styl.mc
@@ -0,0 +1,320 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>EXTERN
+
+#ifndef tile_width
+#define tile_width 19
+#define tile_height 19
+static unsigned char tile_bits[] = {
+ 0xff, 0xff, 0x07, 0x80, 0x0f, 0x00, 0x67, 0x30, 0x07, 0x9b, 0xcf, 0x06,
+ 0xe8, 0xbf, 0x00, 0x94, 0x4f, 0x01, 0x54, 0x50, 0x01, 0x2a, 0xa7, 0x02,
+ 0xaa, 0xaf, 0x02, 0xaf, 0xaf, 0x07, 0xaa, 0xaf, 0x02, 0x2a, 0xa7, 0x02,
+ 0x54, 0x50, 0x01, 0x94, 0x4f, 0x01, 0xe8, 0xbf, 0x00, 0x98, 0xcf, 0x00,
+ 0x63, 0x30, 0x06, 0x80, 0x0f, 0x00, 0xff, 0xf8, 0x07};
+#endif
+#ifndef stipple_width
+#define stipple_width 24
+#define stipple_height 11
+static unsigned char stipple_bits[] = {
+ 0xff, 0x0f, 0x00, 0x3f, 0xf0, 0xff, 0xcf, 0xff, 0x03, 0xf7, 0x0f, 0xfc,
+ 0xff, 0xf1, 0x0f, 0x78, 0x7e, 0xf0, 0x80, 0x8f, 0x1f, 0x2a, 0xf0, 0xe1,
+ 0x80, 0x07, 0x1e, 0xaa, 0xff, 0xe0, 0x80, 0xff, 0x0f};
+#endif
+>>ASSERTION Good A
+When
+.M fill_style
+is
+.S FillSolid ,
+then on a call to xname the source pixel for the drawing operation is
+.M foreground .
+>>STRATEGY
+Set fill-style to FillSolid.
+Do drawing operation.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ XSetFillStyle(A_DISPLAY, A_GC, FillSolid);
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+When
+.M fill-style
+is
+.S FillTiled ,
+then on a call to xname the source for the drawing operation is
+.M tile .
+>>STRATEGY
+Create a tile of appropriate depth.
+If depth is greater than one, set the fg and bg in the tile
+to interesting values.
+Set fill-style to FillTiled.
+Part 1.
+Do drawing operation.
+If FillRectangle operation
+ Directly check using checktile.
+else
+ Pixmap verify.
+
+Part 2.
+Do drawing operation.
+Reverse fg and bg in tile.
+Set gc function to xor.
+Repeat drawing operation.
+Verify that result is the same as drawing solid line with xor
+of the fg and bg.
+(This also verifies for depth 1 screens that the background is being
+drawn)
+
+>>CODE
+XVisualInfo *vp;
+XImage *fssav;
+Pixmap fstile, fstile2;
+unsigned long fsfg, fsbg;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setwidth(A_DISPLAY, A_GC, (unsigned)8);
+
+ /* 1 */
+ fsfg = W_FG;
+ fsbg = W_BG;
+ if (vp->depth > 1) {
+ fsfg ^= 0x2;
+ fsbg ^= 0x2;
+ }
+ fstile = XCreatePixmapFromBitmapData(A_DISPLAY, A_DRAWABLE
+ , (char*)tile_bits, tile_width, tile_height
+ , fsfg, fsbg
+ , vp->depth
+ );
+ XSetTile(A_DISPLAY, A_GC, fstile);
+
+ XSetFillStyle(A_DISPLAY, A_GC, FillTiled);
+
+ XCALL;
+
+#if defined(T_XFillRectangle)
+ {
+ struct area area;
+
+ setarea(&area, x, y, width, height);
+ if (checktile(A_DISPLAY, A_DRAWABLE, &area, 0, 0, fstile))
+ CHECK;
+ else {
+ report("Direct test of tiled area failed");
+ FAIL;
+ }
+ }
+#else
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+#endif
+
+ /* 2 */
+ dclear(A_DISPLAY, A_DRAWABLE);
+
+ XSetFillStyle(A_DISPLAY, A_GC, FillSolid);
+ XSetForeground(A_DISPLAY, A_GC, fsfg^fsbg);
+ XCALL;
+ fssav = savimage(A_DISPLAY, A_DRAWABLE);
+
+ /*
+ * Draw with foreground and background as before.
+ */
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XSetFillStyle(A_DISPLAY, A_GC, FillTiled);
+ XSetTile(A_DISPLAY, A_GC, fstile);
+ XCALL;
+
+ /*
+ * Draw with background and foreground reversed.
+ * xor it in.
+ */
+ fstile2 = XCreatePixmapFromBitmapData(A_DISPLAY, A_DRAWABLE
+ , (char*)tile_bits, tile_width, tile_height
+ , fsbg, fsfg
+ , vp->depth
+ );
+ XSetFillStyle(A_DISPLAY, A_GC, FillTiled);
+ XSetTile(A_DISPLAY, A_GC, fstile2);
+ XSetFunction(A_DISPLAY, A_GC, GXxor);
+ XCALL;
+
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, fssav))
+ CHECK;
+ else {
+ report("Reversing tile fg and bg did not draw solid line");
+ FAIL;
+ }
+ XFreePixmap(A_DISPLAY, fstile);
+ XFreePixmap(A_DISPLAY, fstile2);
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When
+.M fill_style
+is
+.S FillOpaqueStippled ,
+then on a call to xname the source for the drawing operation is
+a tile with the same width and height as
+.M stipple ,
+but with
+.M background
+everywhere
+.M stipple
+has a zero and with
+.M foreground
+everywhere
+.M stipple
+has a one.
+>>STRATEGY
+Create stipple.
+Set fill-style to FillOpaqueStippled.
+Do drawing operation.
+Pixmap verify the results.
+
+Reverse foreground and background pixels.
+Combine drawing with previous drawing.
+Verify that the results are the same as FillSolid with foreground
+ equal to combination of fg and bg pixels.
+>>CODE
+XVisualInfo *vp;
+XImage *fssav;
+Pixmap fsstip;
+unsigned long fsfg, fsbg;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setwidth(A_DISPLAY, A_GC, (unsigned)8);
+
+ /* 1 */
+ fsfg = W_FG;
+ fsbg = W_BG;
+ if (vp->depth > 1) {
+ fsfg ^= 0x2;
+ fsbg ^= 0x2;
+ XSetForeground(A_DISPLAY, A_GC, fsfg);
+ XSetBackground(A_DISPLAY, A_GC, fsbg);
+ }
+ fsstip = XCreateBitmapFromData(A_DISPLAY, A_DRAWABLE
+ , (char*)stipple_bits, stipple_width, stipple_height
+ );
+ XSetStipple(A_DISPLAY, A_GC, fsstip);
+
+ XSetFillStyle(A_DISPLAY, A_GC, FillOpaqueStippled);
+
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ /* 2 */
+ dclear(A_DISPLAY, A_DRAWABLE);
+
+ XSetFillStyle(A_DISPLAY, A_GC, FillSolid);
+ XSetForeground(A_DISPLAY, A_GC, fsfg^fsbg);
+ XCALL;
+ fssav = savimage(A_DISPLAY, A_DRAWABLE);
+ XSetForeground(A_DISPLAY, A_GC, fsfg);
+
+ /*
+ * Draw with foreground and background as before.
+ */
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XSetFillStyle(A_DISPLAY, A_GC, FillOpaqueStippled);
+ XSetStipple(A_DISPLAY, A_GC, fsstip);
+ XCALL;
+
+ /*
+ * Draw with background and foreground reversed.
+ * xor it in.
+ */
+ XSetForeground(A_DISPLAY, A_GC, fsbg);
+ XSetBackground(A_DISPLAY, A_GC, fsfg);
+ XSetFillStyle(A_DISPLAY, A_GC, FillOpaqueStippled);
+ XSetStipple(A_DISPLAY, A_GC, fsstip);
+ XSetFunction(A_DISPLAY, A_GC, GXxor);
+ XCALL;
+
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, fssav))
+ CHECK;
+ else {
+ report("Reversing fg and bg did not draw solid line");
+ FAIL;
+ }
+ XFreePixmap(A_DISPLAY, fsstip);
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When
+.M fill_style
+is
+.S FillStippled ,
+then on a call to xname the source for the drawing operation is
+.M foreground
+masked by
+the stipple pattern tiled in a single plane.
+>>STRATEGY
+Create stipple
+Set fill-style to FillStippled.
+Set background to foreground pixel to verify it is not affecting things.
+Do drawing.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+Pixmap fsstip;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setwidth(A_DISPLAY, A_GC, (unsigned)8);
+
+ /* 1 */
+ fsstip = XCreateBitmapFromData(A_DISPLAY, A_DRAWABLE
+ , (char*)stipple_bits, stipple_width, stipple_height
+ );
+ XSetStipple(A_DISPLAY, A_GC, fsstip);
+ XSetFillStyle(A_DISPLAY, A_GC, FillStippled);
+ /* To show it has no effect */
+ XSetBackground(A_DISPLAY, A_GC, W_FG);
+
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ XFreePixmap(A_DISPLAY, fsstip);
+
+ }
+
+ CHECKPASS(nvinf());
+
diff --git a/xc/test/xsuite/xtest/lib/gc/font.mc b/xc/test/xsuite/xtest/lib/gc/font.mc
new file mode 100644
index 000000000..57a169717
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/font.mc
@@ -0,0 +1,16 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
diff --git a/xc/test/xsuite/xtest/lib/gc/foregroun.mc b/xc/test/xsuite/xtest/lib/gc/foregroun.mc
new file mode 100644
index 000000000..4409fa83a
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/foregroun.mc
@@ -0,0 +1,197 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>ASSERTION Good A
+The foregound component of the gc is used to determine the foreground
+pixel value.
+>>STRATEGY
+Set foreground to various values.
+Pixmap verify the results.
+>>CODE
+static unsigned long fglist[] = {
+ 0, 0x1, 0x2, 0x3, 0x4, 0x6, 0x7, 0x10, 0x33, 0x81,
+ 0xa3, 0xff, 256, 300, 1000,
+ 0x111111, 0x400200, 0x777777,
+ };
+XVisualInfo *vp;
+long fgind;
+unsigned long fg;
+int nchecks = 0;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#if T_XCopyPlane
+ dset(A_DISPLAY, A_DRAWABLE, ~0);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ /* XYBitmap full of 1's will do a foreground fill */
+ A_IMAGE = makeimg(A_DISPLAY, vp, XYBitmap);
+ dsetimg(A_IMAGE, 1L);
+#endif
+
+ for (fgind = 0; fgind < sizeof(fglist)/sizeof(int); fgind++) {
+
+ fg = fglist[fgind];
+ if (fg > DEPTHMASK(vp->depth))
+ break;
+
+ nchecks++;
+ trace("Testing fg pixel of %d", fg);
+#if T_XCopyArea
+ dset(A_DISPLAY, A_DRAWABLE, fg);
+#else
+ XSetForeground(A_DISPLAY, A_GC, fg);
+#endif
+
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAW);
+
+ dclear(A_DISPLAY, A_DRAW);
+ }
+ }
+
+ CHECKPASS(nchecks);
+>>ASSERTION Good A
+The value for
+.M foreground
+is truncated to the depth of the GC.
+>>STRATEGY
+Set foreground to value with all bits set.
+Find a non background pixel.
+Check that this is truncated to the depth.
+>>CODE
+XVisualInfo *vp;
+XImage *imp;
+unsigned long pix;
+unsigned long fgfg;
+int found;
+int i_x, i_y;
+unsigned int i_width, i_height;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#if T_XCopyPlane
+ dset(A_DISPLAY, A_DRAWABLE, ~0);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ /* XYBitmap full of 1's will do a foreground fill */
+ A_IMAGE = makeimg(A_DISPLAY, vp, XYBitmap);
+ dsetimg(A_IMAGE, 1L);
+#endif
+
+ XSetForeground(A_DISPLAY, A_GC, ~0L);
+
+ XCALL;
+
+ imp = savimage(A_DISPLAY, A_DRAW);
+ getsize(A_DISPLAY, A_DRAW, &i_width, &i_height);
+ found = 0;
+ /*
+ * Look for a non background pixel, if there is one then this
+ * should be the foreground truncated to the depth.
+ */
+ for (i_y = 0; i_y < i_height; i_y++) {
+ for (i_x = 0; i_x < i_width; i_x++) {
+ pix = XGetPixel(imp, i_x, i_y);
+ if (pix != W_BG) {
+ found = 1;
+ if (pix == DEPTHMASK(vp->depth)) {
+ CHECK;
+ } else {
+ report("Pixel was set to %d, expecting %d", pix, DEPTHMASK(vp->depth));
+ FAIL;
+ }
+ i_y = i_height; /* So that we leave loop XXX */
+ break;
+ }
+ }
+ }
+ if (found == 0) {
+ if (W_BG == (~0 & DEPTHMASK(vp->depth))) {
+ report("WARNING: W_BG != 0; this should not be the case");
+ CHECK;
+ } else {
+ report("After setting foreground to (~0)");
+ report("no non-background pixel was drawn");
+ FAIL;
+ }
+ }
+
+ dclear(A_DISPLAY, A_DRAW);
+
+ /* Set all bits other than the bottom one */
+ fgfg = (~0)^1;
+#if T_XCopyArea
+ dset(A_DISPLAY, A_DRAWABLE, fgfg);
+#else
+ XSetForeground(A_DISPLAY, A_GC, fgfg);
+#endif
+
+ XCALL;
+
+ imp = savimage(A_DISPLAY, A_DRAW);
+ getsize(A_DISPLAY, A_DRAW, &i_width, &i_height);
+ found = 0;
+ /*
+ * Look for a non background pixel, if there is one then this
+ * should be the foreground truncated to the depth.
+ */
+ for (i_y = 0; i_y < i_height; i_y++) {
+ for (i_x = 0; i_x < i_width; i_x++) {
+ pix = XGetPixel(imp, i_x, i_y);
+ if (pix != W_BG) {
+ found = 1;
+ if (pix == (fgfg & DEPTHMASK(vp->depth))) {
+ CHECK;
+ } else {
+ report("Pixel was set to %d, expecting %d", pix, (fgfg & DEPTHMASK(vp->depth)));
+ FAIL;
+ }
+ i_y = i_height; /* So that we leave loop XXX */
+ break;
+ }
+ }
+ }
+ if (found == 0) {
+ /*
+ * This should be the case on monochrome displays
+ */
+ if (W_BG == (fgfg & DEPTHMASK(vp->depth))) {
+ CHECK;
+ } else {
+ report("After setting foreground to (~0)^1");
+ report("no non-background pixel was drawn");
+ FAIL;
+ }
+ }
+ }
+
+ CHECKPASS(2*nvinf());
diff --git a/xc/test/xsuite/xtest/lib/gc/function.mc b/xc/test/xsuite/xtest/lib/gc/function.mc
new file mode 100644
index 000000000..0e76f4d11
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/function.mc
@@ -0,0 +1,632 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>EXTERN
+
+#ifdef A_DRAWABLE2
+#define A_DRAW A_DRAWABLE2
+#else
+#define A_DRAW A_DRAWABLE
+#endif
+
+static int f_pix_x = -1;
+static int f_pix_y = -1;
+
+static void
+functest(functype)
+int functype;
+{
+XVisualInfo *vp;
+unsigned long srcpix;
+unsigned long destpix;
+unsigned long expected;
+unsigned long actualpix;
+unsigned long maxpix;
+int pass = 0, fail = 0;
+
+ trace("Function %s", gcfunctionname(functype));
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#if T_XCopyPlane
+ dset(A_DISPLAY, A_DRAWABLE, ~0L);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ /*
+ * If this is the first call find a pixel that is drawn
+ * that can be used for all the tests.
+ */
+ if (f_pix_x == -1) {
+ XCALL;
+ setfuncpixel(A_DISPLAY, A_DRAW, &f_pix_x, &f_pix_y);
+ dclear(A_DISPLAY, A_DRAW);
+ if (f_pix_x == -1) {
+ report("Nothing was drawn with a gc function of GXcopy");
+ /*
+ * If we were actually testing GXcopy then the test has
+ * failed (in a way), so say FAIL.
+ */
+ if (functype == GXcopy)
+ FAIL;
+ else
+ delete("Setup error in functest");
+ return;
+ }
+ }
+
+ XSetFunction(A_DISPLAY, A_GC, functype);
+
+ /* Try out a few more values without taking too long */
+ maxpix = 3;
+
+ for (destpix = 0; destpix <= maxpix; destpix++) {
+ for (srcpix = 0; srcpix <= 1; srcpix++) {
+
+ trace("src=%d, dest=%d", srcpix, destpix);
+
+ /*
+ * The test on depth shouldn't be necessary, however a common
+ * bug exists where pixels are not truncated on mono screens.
+ * The bug is diagnosed in another test so causing failures here
+ * as well would be confusing.
+ */
+ if (vp->depth == 1)
+ dset(A_DISPLAY, A_DRAW, destpix&1);
+ else
+ dset(A_DISPLAY, A_DRAW, destpix);
+#if T_XCopyArea
+ dset(A_DISPLAY, A_DRAWABLE, srcpix);
+#else
+#if T_XPutImage
+ dsetimg(A_IMAGE, srcpix);
+#else
+ XSetForeground(A_DISPLAY, A_GC, srcpix);
+#endif
+#endif
+ XCALL;
+
+ switch (functype) {
+ case GXclear:
+ expected = 0;
+ break;
+ case GXand:
+ expected = srcpix & destpix;
+ break;
+ case GXandReverse:
+ expected = srcpix & ~destpix;
+ break;
+ case GXcopy:
+ expected = srcpix;
+ break;
+ case GXandInverted:
+ expected = ~srcpix & destpix;
+ break;
+ case GXnoop:
+ expected = destpix;
+ break;
+ case GXxor:
+ expected = srcpix ^ destpix;
+ break;
+ case GXor:
+ expected = srcpix | destpix;
+ break;
+ case GXnor:
+ expected = ~srcpix & ~destpix;
+ break;
+ case GXequiv:
+ expected = ~srcpix ^ destpix;
+ break;
+ case GXinvert:
+ expected = ~destpix;
+ break;
+ case GXorReverse:
+ expected = srcpix | ~destpix;
+ break;
+ case GXcopyInverted:
+ expected = ~srcpix;
+ break;
+ case GXorInverted:
+ expected = ~srcpix | destpix;
+ break;
+ case GXnand:
+ expected = ~srcpix | ~destpix;
+ break;
+ case GXset:
+ expected = ~0;
+ break;
+ default:
+ report("Bad value given to functest");
+ tet_result(TET_UNRESOLVED);
+ break;
+ }
+
+ expected &= DEPTHMASK(vp->depth);
+ actualpix = getpixel(A_DISPLAY, A_DRAW, f_pix_x, f_pix_y);
+
+ debug(3, "src %d, dst %d, expect %d", srcpix, destpix,expected);
+
+ if (actualpix == expected)
+ CHECK;
+ else {
+ report("%s fail expected %d, got %d", gcfunctionname(functype), expected, actualpix);
+ FAIL;
+ }
+ }
+ }
+
+ }
+
+ CHECKPASS(2*(maxpix+1)*nvinf());
+}
+
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXclear ,
+then the destination becomes
+(dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXclear.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is 0.
+>>CODE
+
+ functest(GXclear);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXand ,
+then the destination becomes
+((src AND dst) AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXand.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is src&dest.
+>>CODE
+
+ functest(GXand);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXandReverse ,
+then the destination becomes
+((src AND (NOT dst)) AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXandReverse.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is src&~dest.
+>>CODE
+
+ functest(GXandReverse);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXcopy ,
+then the destination becomes
+(src AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXcopy.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is src.
+>>CODE
+
+ functest(GXcopy);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXandInverted ,
+then the destination becomes
+(((NOT src) AND dst) AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXandInverted.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is ~src&dest.
+>>CODE
+
+ functest(GXandInverted);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXnoop ,
+then the destination becomes
+(dst AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXnoop.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is dest.
+>>CODE
+
+ functest(GXnoop);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXxor ,
+then the destination becomes
+((src XOR dst) AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXxor.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is src^dest.
+>>CODE
+
+ functest(GXxor);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXor ,
+then the destination becomes
+((src OR dst) AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXor.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is src|dest.
+>>CODE
+
+ functest(GXor);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXnor ,
+then the destination becomes
+(((NOT src) AND (NOT dst)) AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXnor.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is ~src&~dest.
+>>CODE
+
+ functest(GXnor);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXequiv ,
+then the destination becomes
+(((NOT src) XOR dst) AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXequiv.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is ~src^dest.
+>>CODE
+
+ functest(GXequiv);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXinvert ,
+then the destination becomes
+((NOT dst) AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXinvert.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is ~dest.
+>>CODE
+
+ functest(GXinvert);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXorReverse ,
+then the destination becomes
+((src OR (NOT dst)) AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXorReverse.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is src|~dest.
+>>CODE
+
+ functest(GXorReverse);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXcopyInverted ,
+then the destination becomes
+((NOT src) AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXcopyInverted.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is ~src.
+>>CODE
+
+ functest(GXcopyInverted);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXorInverted ,
+then the destination becomes
+(((NOT src) OR dst) AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXorInverted.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is ~src|dest.
+>>CODE
+
+ functest(GXorInverted);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXnand ,
+then the destination becomes
+(((NOT src) OR (NOT dst)) AND
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXnand.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is ~src|~dest.
+>>CODE
+
+ functest(GXnand);
+>>ASSERTION Good A
+When a graphics operation is performed and the source pixel is src and
+the destination pixel is dst
+and
+.M function
+is
+.S GXset ,
+then the destination becomes
+(
+.M plane_mask )
+OR (dst AND (NOT
+.M plane_mask )).
+>>STRATEGY
+Find a point (f_pix_x, f_pix_y) that is drawn by the graphics operation.
+
+Set function component of GC to GXset.
+For destination pixel values dst = 0, 1, 2, 3
+ For source pixel values of src = 0, 1
+ Set all points in drawable to destination pixel value.
+ Set foreground component of GC to source pixel value.
+ (or fill source drawable/image with source pixel value in the cases
+ of XCopyArea or XPutImage, while XCopyPlane always has it ~0 to
+ force a foreground fill).
+ Do graphics operation.
+ Verify that pixel value at f_pix_x, f_pix_y is ~0.
+>>CODE
+
+ functest(GXset);
+>># HISTORY kieron Completed Use ZPixmap images, fix for XCopyPlane
diff --git a/xc/test/xsuite/xtest/lib/gc/graphics-.mc b/xc/test/xsuite/xtest/lib/gc/graphics-.mc
new file mode 100644
index 000000000..57a169717
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/graphics-.mc
@@ -0,0 +1,16 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
diff --git a/xc/test/xsuite/xtest/lib/gc/join-styl.mc b/xc/test/xsuite/xtest/lib/gc/join-styl.mc
new file mode 100644
index 000000000..d153aa15f
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/join-styl.mc
@@ -0,0 +1,631 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>EXTERN
+
+/*
+ * List of data for joins
+ */
+static struct linejoindata {
+ int a;
+ int b;
+ int c;
+ double ang;
+} linejoindata[] = {
+ {60, 10, 10, 18.9},
+ {30, 20, 40, 86.82},
+ {45, 0, 30, 33.69},
+ {51, 5, 5, 11.20},
+ {50, 20, 30, 52.77},
+
+ {60, 5, 5, 9.53},
+ {20, -50, 60, 3.37},
+ {50, -50, 60, 5.19},
+ {60, 3, 3, 5.73},
+ {60, 2, 2, 3.82},
+ {52, 5, 5, 10.98},
+};
+
+#if T_XDrawArcs
+
+/*
+ * The code for the test purposes knows that the first two arcs
+ * meet at 0 deg and the * next two meet at 90deg (add any others at the end).
+ */
+XArc arcjoindata[] = {
+ {0, 10, 30, 30, DEG(90), DEG(-180)},
+ {-5, 40, 40, 40, DEG(90), DEG(-180)},
+ {20, 10, 40, 40, DEG(90), DEG(-90)},
+ {40, 30, 40, 40, DEG(90), DEG(-90)},
+ {60, 50, 40, 40, DEG(90), DEG(90)},
+};
+#endif
+
+>>ASSERTION Good A
+When the
+.M join_style
+is
+.S JoinMiter
+and the angle at which the lines join is more than or equal to 11 degrees,
+then the outer edges of two lines extend to meet at an angle.
+>>STRATEGY
+Set GC component join_style to JoinMitre.
+Set GC component line_width to 7.
+Do graphics operation (with line joins all at angles >= 11 degrees).
+Pixmap verify.
+For XDrawLines, in addition repeat with line joins at a
+ variety of angles >= 11 degrees.
+>>CODE
+XVisualInfo *vp;
+#if T_XDrawLines
+struct linejoindata *jp;
+XPoint pnts[6];
+int xoffset;
+#endif
+int ndrawn;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ setargs();
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setjoinstyle(A_DISPLAY, A_GC, JoinMiter);
+ setwidth(A_DISPLAY, A_GC, (unsigned)7);
+
+ ndrawn = 0;
+#if !T_XDrawArcs
+
+ /*
+ * The default paths join at greater than 11 deg - so try them
+ * out.
+ */
+ trace("Trying default path");
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ ndrawn++;
+#endif
+
+#if T_XDrawLines
+ xoffset = 30;
+
+ for (jp = linejoindata; jp < &linejoindata[NELEM(linejoindata)]; jp++) {
+ if (jp->ang < 11.0)
+ continue;
+
+ ndrawn++;
+ trace("Trying angle of about %.2f", jp->ang);
+
+#define YOFF 10
+ pnts[0].x = 0; pnts[0].y = 8;
+ pnts[1].x = xoffset - jp->b; pnts[1].y = YOFF;
+ pnts[2].x = xoffset; pnts[2].y = jp->a+YOFF;
+ pnts[3].x = xoffset + jp->c; pnts[3].y = YOFF;
+ pnts[4].x = 90; pnts[4].y = 20;
+#undef YOFF
+
+ points = pnts;
+ npoints = 5;
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+ xoffset += 3;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ }
+#endif
+#if T_XDrawArcs
+ arcs = &arcjoindata[2];
+ narcs = NELEM(arcjoindata)-2;
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ ndrawn++;
+#endif
+ }
+
+ CHECKPASS(ndrawn * nvinf());
+
+>>ASSERTION Good A
+When the
+.M join_style
+is
+.S JoinMiter
+and the angle at which the lines join is less than 11 degrees,
+then a
+.S JoinBevel
+join-style is used.
+>>STRATEGY
+Set GC component join_style to JoinMitre.
+Set GC component line_width to 7.
+Do graphics operation (with line joins all at angles < 11 degrees).
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+#if T_XDrawLines
+struct linejoindata *jp;
+XPoint pnts[3];
+int xoffset;
+#endif
+int ndrawn;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setjoinstyle(A_DISPLAY, A_GC, JoinMiter);
+ setwidth(A_DISPLAY, A_GC, (unsigned)7);
+
+ ndrawn = 0;
+#if T_XDrawLines
+ xoffset = 30;
+
+ for (jp = linejoindata; jp < &linejoindata[NELEM(linejoindata)]; jp++) {
+ if (jp->ang > 11.0)
+ continue;
+
+ ndrawn++;
+ trace("Trying angle of about %.2f", jp->ang);
+
+ pnts[0].x = xoffset - jp->b; pnts[0].y = 0;
+ pnts[1].x = xoffset; pnts[1].y = jp->a;
+ pnts[2].x = xoffset + jp->c; pnts[2].y = 0;
+
+ points = pnts;
+ npoints = 3;
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+ xoffset += 3;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ }
+#endif
+#if T_XDrawRectangle
+ /*
+ * In a sense, height of a rectangle is zero then the
+ * lines join at 0 deg so this assertion applies.
+ * Probably a Grey Area though.
+ */
+ height = 0;
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ ndrawn++;
+#endif
+#if T_XDrawRectangles
+ {
+ XRectangle rect;
+
+ /*
+ * In a sense, height of a rectangle is zero then the
+ * lines join at 0 deg so this assertion applies.
+ * Probably a Grey Area though.
+ */
+ rect.x = 15; rect.y = 15;
+ rect.width = 70;
+ rect.height = 0;
+ rectangles = &rect;
+ nrectangles = 1;
+
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ ndrawn++;
+ }
+#endif
+#if T_XDrawArcs
+ /* The first pair of arcs join at 0 deg. */
+ arcs = arcjoindata;
+ narcs = 2;
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ ndrawn++;
+#endif
+ }
+
+ CHECKPASS(ndrawn * nvinf());
+
+>>ASSERTION Good A
+When the
+.M join_style
+is
+.S JoinRound ,
+then the corner is a circular arc with the diameter equal to the line-width,
+centered on the joinpoint.
+>>STRATEGY
+Set GC component join_style to JoinRound.
+Set GC component line_width to 7.
+Do graphics operation.
+Pixmap verify.
+For XDrawLines, in addition repeat with line joins at a variety of angles.
+>>CODE
+XVisualInfo *vp;
+#if T_XDrawLines
+struct linejoindata *jp;
+XPoint pnts[3];
+int xoffset;
+#endif
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ setargs();
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setjoinstyle(A_DISPLAY, A_GC, JoinRound);
+ setwidth(A_DISPLAY, A_GC, (unsigned)7);
+
+#if !T_XDrawArcs
+ /*
+ * Try the default path.
+ */
+ trace("Draw the default path");
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+#endif
+
+#if T_XDrawArcs
+ arcs = arcjoindata;
+ narcs = NELEM(arcjoindata);
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+#endif
+
+#if T_XDrawLines
+ xoffset = 30;
+ for (jp = linejoindata; jp < &linejoindata[NELEM(linejoindata)]; jp++) {
+
+ trace("Trying angle of about %.2f", jp->ang);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+
+ pnts[0].x = xoffset - jp->b; pnts[0].y = 0;
+ pnts[1].x = xoffset; pnts[1].y = jp->a;
+ pnts[2].x = xoffset + jp->c; pnts[2].y = 0;
+
+ points = pnts;
+ npoints = 3;
+
+ XCALL;
+ xoffset += 3;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ }
+#endif
+ }
+
+#if T_XDrawLines
+ CHECKPASS((1 + NELEM(linejoindata)) * nvinf());
+#else
+ CHECKPASS(nvinf());
+#endif
+
+>>ASSERTION Good A
+When the
+.M join_style
+is
+.S JoinBevel ,
+then the corner has
+.S CapButt
+endpoint styles with the triangular notch filled.
+>>STRATEGY
+Set GC component join_style to JoinBevel.
+Set GC component line_width to 7.
+Do graphics operation.
+Pixmap verify.
+For XDrawLines, in addition repeat with line joins at a variety of angles.
+>>CODE
+XVisualInfo *vp;
+#if T_XDrawLines
+struct linejoindata *jp;
+XPoint pnts[3];
+int xoffset;
+#endif
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ setargs();
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setjoinstyle(A_DISPLAY, A_GC, JoinBevel);
+ setwidth(A_DISPLAY, A_GC, (unsigned)7);
+
+#if T_XDrawArcs
+ arcs = arcjoindata;
+ narcs = NELEM(arcjoindata);
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+#else
+ /*
+ * Try the default path.
+ */
+ trace("Draw the default path");
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+#endif
+
+#if T_XDrawLines
+ xoffset = 30;
+ for (jp = linejoindata; jp < &linejoindata[NELEM(linejoindata)]; jp++) {
+
+ trace("Trying angle of about %.2f", jp->ang);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+
+ pnts[0].x = xoffset - jp->b; pnts[0].y = 0;
+ pnts[1].x = xoffset; pnts[1].y = jp->a;
+ pnts[2].x = xoffset + jp->c; pnts[2].y = 0;
+
+ points = pnts;
+ npoints = 3;
+
+ XCALL;
+ xoffset += 3;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ }
+#endif
+ }
+
+#if T_XDrawLines
+ CHECKPASS((1 + NELEM(linejoindata)) * nvinf());
+#else
+ CHECKPASS(nvinf());
+#endif
+
+>>ASSERTION Good A
+When a line has coincident endpoints (x1=x2, y1=y2),
+and the
+.M join_style
+is applied at one or both endpoints,
+and the path consists of more than just this line,
+then the effect is as though the line was removed from the overall path.
+>>STRATEGY
+Set GC component join_style to JoinBevel.
+Set GC component cap_style to CapRound.
+Set GC component line_width to 7.
+For XDrawRectangles and XDrawRectangle (GREY AREA):
+ Do graphics operation.
+ Pixmap verify.
+For XDrawLines and XDrawArcs:
+ Do graphics operation.
+ Save image on the drawable.
+ Do graphics operation with zero length segment joined to path.
+ Verify image is the same as that saved.
+>>CODE
+XVisualInfo *vp;
+#if T_XDrawLines
+XPoint pnts[3];
+#endif
+XImage *jssav;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setjoinstyle(A_DISPLAY, A_GC, JoinMiter);
+ setcapstyle(A_DISPLAY, A_GC, CapRound);
+ setwidth(A_DISPLAY, A_GC, (unsigned)7);
+
+#if T_XDrawLines
+
+ pnts[0].x = 10; pnts[0].y = 10;
+ pnts[1].x = 80; pnts[1].y = 14;
+ pnts[2].x = 80; pnts[2].y = 14;
+
+ points = pnts;
+ npoints = 3;
+
+ XCALL;
+
+ jssav = savimage(A_DISPLAY, A_DRAWABLE);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ npoints = 2;
+ XCALL;
+
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, jssav))
+ CHECK;
+ else {
+ report("Effect was not the same as removing zero length line");
+ FAIL;
+ }
+#endif
+#if T_XDrawRectangle
+ /*
+ * Since CapStyle is not documented to affect Rectangles
+ * this is a Grey Area.
+ * MIT resolved that CapStyle does affect Rectangles
+ * with zero width and height - still unclear on zero height.
+ * DPJ Cater - 12/3/91
+ */
+ height = 0;
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+#endif
+#if T_XDrawRectangles
+ {
+ XRectangle rect;
+
+ /*
+ * Since CapStyle is not documented to affect Rectangles
+ * this is a Grey Area.
+ * MIT resolved that CapStyle does affect Rectangles
+ * with zero width and height - still unclear on zero height.
+ * DPJ Cater - 12/3/91
+ */
+ rect.x = 15; rect.y = 15;
+ rect.width = 70;
+ rect.height = 0;
+
+ rectangles = &rect;
+ nrectangles = 1;
+
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ }
+#endif
+#if T_XDrawArcs
+ {
+ static XArc jsarc[] = {
+ {0, 10, 60, 40, DEG(90), DEG(-180)},
+ {0, 50, 60, 40, DEG(90), DEG(0)},
+ };
+
+ arcs = jsarc;
+ narcs = 2;
+
+ XCALL;
+ jssav = savimage(A_DISPLAY, A_DRAWABLE);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ narcs = 1; /* Remove Zero length arc */
+ XCALL;
+
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, jssav))
+ CHECK;
+ else {
+ report("Effect was not the same as removing zero length arc");
+ FAIL;
+ }
+ }
+#endif
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When the total path consists of, or is reduced to, a single point joined
+with itself, then the effect is the same as applying the
+.M cap_style
+at both endpoints.
+>>STRATEGY
+Set GC component join_style to JoinMiter.
+Set GC component cap_style to CapRound.
+Set GC component line_width to 12.
+Draw zero length line.
+Save image on the drawable.
+Draw path that is reduced to single point.
+Verify image is the same as that saved.
+(Note that the actual rendering of the cap-style is tested else where)
+>>CODE
+XVisualInfo *vp;
+#if T_XDrawLines
+XPoint pnts[3];
+#endif
+XImage *jssav;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setjoinstyle(A_DISPLAY, A_GC, JoinMiter);
+ setcapstyle(A_DISPLAY, A_GC, CapRound);
+ setwidth(A_DISPLAY, A_GC, (unsigned)12);
+
+ XDrawLine(A_DISPLAY, A_DRAWABLE, A_GC, 30, 30, 30, 30);
+ jssav = savimage(A_DISPLAY, A_DRAWABLE);
+ dclear(A_DISPLAY, A_DRAWABLE);
+
+#if T_XDrawLines
+
+ pnts[0].x = 30; pnts[0].y = 30;
+ pnts[1].x = 30; pnts[1].y = 30;
+ pnts[2].x = 30; pnts[2].y = 30;
+
+ points = pnts;
+ npoints = 3;
+
+ XCALL;
+
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, jssav))
+ CHECK;
+ else {
+ report("Effect was not the same as cap-style applied to both end points");
+ FAIL;
+ }
+#endif
+#if T_XDrawRectangle
+ /*
+ * Since CapStyle is not documented to affect Rectangles
+ * this is a Grey Area.
+ * MIT resolved that CapStyle does affect Rectangles
+ * with zero width and height.
+ * DPJ Cater - 12/3/91
+ */
+ x = 30; y = 30;
+ height = 0;
+ width = 0;
+ XCALL;
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, jssav))
+ CHECK;
+ else {
+ report("Effect was not the same as cap-style applied to both end points");
+ FAIL;
+ }
+#endif
+#if T_XDrawRectangles
+ {
+ XRectangle rect;
+
+ /*
+ * Since CapStyle is not documented to affect Rectangles
+ * this is a Grey Area.
+ * MIT resolved that CapStyle does affect Rectangles
+ * with zero width and height.
+ * DPJ Cater - 12/3/91
+ */
+ rect.x = 30; rect.y = 30;
+ rect.width = 0;
+ rect.height = 0;
+
+ rectangles = &rect;
+ nrectangles = 1;
+
+ XCALL;
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, jssav))
+ CHECK;
+ else {
+ report("Effect was not the same as cap-style applied to both end points");
+ FAIL;
+ }
+ }
+#endif
+#if T_XDrawArcs
+ {
+ static XArc jsarc[] = {
+ {0, 10, 60, 40, DEG(90), DEG(0)},
+ {0, 50, 60, 40, DEG(90), DEG(0)},
+ };
+
+ arcs = jsarc;
+ narcs = 2;
+
+ XCALL;
+ jssav = savimage(A_DISPLAY, A_DRAWABLE);
+
+ narcs = 1; /* Remove Zero length arc */
+ XCALL;
+
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, jssav))
+ CHECK;
+ else {
+ report("Effect was not the same as cap-style applied to both end points");
+ FAIL;
+ }
+ }
+#endif
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+>># The first test in dash-list.mc will check this, if checkable.
+When path elements are combined with a
+.M join_style ,
+then dashing is continuous.
diff --git a/xc/test/xsuite/xtest/lib/gc/line-styl.mc b/xc/test/xsuite/xtest/lib/gc/line-styl.mc
new file mode 100644
index 000000000..0a78c2e5c
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/line-styl.mc
@@ -0,0 +1,763 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>EXTERN
+static int linestyles[] = {LineSolid, LineOnOffDash, LineDoubleDash};
+static int capstyles[] = {CapNotLast, CapButt, CapProjecting, CapRound};
+
+static char lsdashes[] = {
+ 14,14};
+
+#ifndef tile_width
+#define tile_width 19
+#define tile_height 19
+static unsigned char tile_bits[] = {
+ 0xff, 0xff, 0x07, 0x80, 0x0f, 0x00, 0x67, 0x30, 0x07, 0x9b, 0xcf, 0x06,
+ 0xe8, 0xbf, 0x00, 0x94, 0x4f, 0x01, 0x54, 0x50, 0x01, 0x2a, 0xa7, 0x02,
+ 0xaa, 0xaf, 0x02, 0xaf, 0xaf, 0x07, 0xaa, 0xaf, 0x02, 0x2a, 0xa7, 0x02,
+ 0x54, 0x50, 0x01, 0x94, 0x4f, 0x01, 0xe8, 0xbf, 0x00, 0x98, 0xcf, 0x00,
+ 0x63, 0x30, 0x06, 0x80, 0x0f, 0x00, 0xff, 0xf8, 0x07};
+#endif
+#ifdef stipple_width
+#define stipple_width 24
+#define stipple_height 11
+static unsigned char stipple_bits[] = {
+ 0xff, 0x0f, 0x00, 0x3f, 0xf0, 0xff, 0xcf, 0xff, 0x03, 0xf7, 0x0f, 0xfc,
+ 0xff, 0xf1, 0x0f, 0x78, 0x7e, 0xf0, 0x80, 0x8f, 0x1f, 0x2a, 0xf0, 0xe1,
+ 0x80, 0x07, 0x1e, 0xaa, 0xff, 0xe0, 0x80, 0xff, 0x0f};
+#endif
+>>#ASSERTION
+>># suppressed during drafting of assertions
+>>#It is recommended that this property be true for thin lines,
+>>#but this is not required.
+>>#ASSERTION
+>># suppressed during drafting of assertions
+>>#A line-width of zero may differ from a line-width of one in terms of
+>>#which pixels are drawn.
+>>ASSERTION def
+When the
+.M line_style
+is
+.S LineSolid ,
+then the full path of the line is drawn.
+>>ASSERTION Good A
+When the
+.M line_style
+is
+.S LineOnOffDash ,
+then
+.M cap_style
+applies to
+all internal ends of the individual dashes,
+except
+.S CapNotLast
+is treated as
+.S CapButt .
+>>STRATEGY
+Set graphics coordinates for dashed lines
+ (includes horizontal and vertical cases,
+ and includes joins and caps where relevant).
+Set the line_style of the GC to LineOnOffDash using XChangeGC.
+Set the dash_list of the GC to using XSetDashes.
+For cap_style CapNotLast, CapButt, CapProjecting, CapRound:
+ Set the cap_style of the GC using XChangeGC.
+ Draw paths.
+ Pixmap verify.
+ Clear drawable.
+>>CODE
+XVisualInfo *vp;
+int i;
+int caps;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setfordash();
+ for(lw=4; lw <= 5; lw++) { /* odd and even line widths */
+ setwidth(A_DISPLAY, A_GC, lw);
+ XSetDashes(A_DISPLAY, A_GC, 0, lsdashes, 2);
+ setlinestyle(A_DISPLAY, A_GC, LineOnOffDash);
+
+ for (i = 0; i < NELEM(capstyles); i++) {
+
+ caps = capstyles[i];
+ trace("LineOnOffDash with %s width %u", capstylename(caps), lw);
+ setcapstyle(A_DISPLAY, A_GC, caps);
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ }
+
+ CHECKPASS(2*NELEM(capstyles)*nvinf());
+>>ASSERTION def
+When
+.M line_style
+is
+.S LineSolid
+and
+.M fill_style
+is
+.S FillSolid ,
+then on a call to xname the source pixel for the drawing operation is
+.M foreground .
+>>ASSERTION def
+When
+.M line_style
+is
+.S LineSolid
+and
+.M fill_style
+is
+.S FillTiled ,
+then on a call to xname the source for the drawing operation is
+.M tile .
+>>ASSERTION def
+When
+.M line_style
+is
+.S LineSolid
+and
+.M fill_style
+is
+.S FillOpaqueStippled ,
+then on a call to xname the source for the drawing operation is
+a tile with the same width and height as
+.M stipple ,
+but with
+.M background
+everywhere
+.M stipple
+has a zero and with
+.M foreground
+everywhere
+.M stipple
+has a one.
+>>ASSERTION def
+When
+.M line_style
+is
+.S LineSolid
+and
+.M fill_style
+is
+.S FillStippled ,
+then on a call to xname the source for the drawing operation is
+.M foreground
+masked by
+the stipple pattern tiled in a single plane.
+>>ASSERTION def
+When
+.M line_style
+is
+.S LineOnOffDash
+and the dash is odd,
+then nothing is drawn.
+>>ASSERTION def
+When
+.M line_style
+is
+.S LineOnOffDash
+and the dash is even and
+.M fill_style
+is
+.S FillSolid ,
+then on a call to xname the source pixel for the drawing operation is
+.M foreground .
+>>ASSERTION Good A
+When
+.M line_style
+is
+.S LineOnOffDash
+and the dash is even and
+.M fill_style
+is
+.S FillTiled ,
+then on a call to xname the source for the drawing operation is
+.M tile .
+>>STRATEGY
+Create a tile with depth of drawable.
+Set graphics coordinates for dashed lines
+ (includes horizontal and vertical cases,
+ and includes joins and caps where relevant).
+If depth is greater than one, set the fg and bg in the tile
+ to interesting values.
+Set the tile component of the GC to tile using XSetTile.
+Set fill-style to FillTiled using XSetFillStyle.
+Set line-style to LineOnOffDash using XChangeGC.
+Do graphics operation.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+Pixmap fstile;
+unsigned long fsfg, fsbg;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setfordash();
+
+ /* 1 */
+ fsfg = W_FG;
+ fsbg = W_BG;
+ if (vp->depth > 1) {
+ fsfg ^= 0x2;
+ fsbg ^= 0x2;
+ }
+ fstile = XCreatePixmapFromBitmapData(A_DISPLAY, A_DRAWABLE
+ , (char*)tile_bits, tile_width, tile_height
+ , fsfg, fsbg
+ , vp->depth
+ );
+ XSetTile(A_DISPLAY, A_GC, fstile);
+
+ XSetFillStyle(A_DISPLAY, A_GC, FillTiled);
+ setlinestyle(A_DISPLAY, A_GC, LineOnOffDash);
+
+ for(lw=5; lw <= 6; lw++) { /* odd and even widths */
+ setwidth(A_DISPLAY, A_GC, lw);
+
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ XFreePixmap(A_DISPLAY, fstile);
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When
+.M line_style
+is
+.S LineOnOffDash
+and the dash is even and
+.M fill_style
+is
+.S FillOpaqueStippled ,
+then on a call to xname the source for the drawing operation is
+a tile with the same width and height as
+.M stipple ,
+but with
+.M background
+everywhere
+.M stipple
+has a zero and with
+.M foreground
+everywhere
+.M stipple
+has a one.
+>>STRATEGY
+Create a stipple bitmap.
+Set graphics coordinates for dashed lines
+ (includes horizontal and vertical cases,
+ and includes joins and caps where relevant).
+Set the stipple component of the GC to stipple using XSetStipple.
+Set fill-style to FillOpaqueStippled using XSetFillStyle.
+Set line-style to LineOnOffDash using XChangeGC.
+Do graphics operation.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+Pixmap fsstip;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setfordash();
+
+ fsstip = XCreateBitmapFromData(A_DISPLAY, A_DRAWABLE
+ , (char*)stipple_bits, stipple_width, stipple_height
+ );
+ XSetStipple(A_DISPLAY, A_GC, fsstip);
+
+ XSetFillStyle(A_DISPLAY, A_GC, FillOpaqueStippled);
+ setlinestyle(A_DISPLAY, A_GC, LineOnOffDash);
+ for(lw=5; lw <= 6; lw++) { /* odd and even widths */
+ setwidth(A_DISPLAY, A_GC, lw);
+
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ XFreePixmap(A_DISPLAY, fsstip);
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When
+.M line_style
+is
+.S LineOnOffDash
+and the dash is even and
+.M fill_style
+is
+.S FillStippled ,
+then on a call to xname the source for the drawing operation is
+.M foreground
+masked by
+the stipple pattern tiled in a single plane.
+>>STRATEGY
+Create a stipple bitmap.
+Set graphics coordinates for dashed lines
+ (includes horizontal and vertical cases,
+ and includes joins and caps where relevant).
+Set the stipple component of the GC to stipple using XSetStipple.
+Set fill-style to FillStippled using XSetFillStyle.
+Set line-style to LineOnOffDash using XChangeGC.
+Do graphics operation.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+Pixmap fsstip;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setfordash();
+
+ fsstip = XCreateBitmapFromData(A_DISPLAY, A_DRAWABLE
+ , (char*)stipple_bits, stipple_width, stipple_height
+ );
+ XSetStipple(A_DISPLAY, A_GC, fsstip);
+
+ XSetFillStyle(A_DISPLAY, A_GC, FillStippled);
+ setlinestyle(A_DISPLAY, A_GC, LineOnOffDash);
+ for(lw=5; lw <= 6; lw++) { /* odd and even widths */
+ setwidth(A_DISPLAY, A_GC, lw);
+
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ XFreePixmap(A_DISPLAY, fsstip);
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When
+.M line_style
+is
+.S LineDoubleDash
+and the dash is even and
+.M fill_style
+is
+.S FillSolid ,
+then on a call to xname the source pixel for the drawing operation is
+.M foreground .
+>>STRATEGY
+Draw complete path with line-style LineSolid and save results.
+Clear drawable.
+Draw same path with line-style LineDoubleDash
+Reverse foreground and background.
+Set gc function to GXor.
+Draw same path again over previous drawing.
+Check that the combined result is equivalent to using FillSolid.
+>>CODE
+XVisualInfo *vp;
+XImage *lsimp;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ for(lw=4; lw <= 5; lw++) { /* odd and even widths */
+ /*
+ * By reversing the foreground and background pixels we should be
+ * able to fill in the whole line. First save the whole line.
+ */
+ trace("Draw with LineSolid, width %u, and save result", lw);
+ XSetLineAttributes(A_DISPLAY, A_GC, lw, LineSolid, CapButt, JoinMiter);
+ XSetForeground(A_DISPLAY, A_GC, W_FG|W_BG); /* Draw with OR of fg&bg */
+ XCALL;
+ XSetForeground(A_DISPLAY, A_GC, W_FG);
+
+ lsimp = savimage(A_DISPLAY, A_DRAWABLE);
+ dclear(A_DISPLAY, A_DRAWABLE);
+
+ /* Now call with DoubleDash */
+ XSetDashes(A_DISPLAY, A_GC, 0, lsdashes, 2);
+ XSetLineAttributes(A_DISPLAY, A_GC, lw, LineDoubleDash, CapButt, JoinMiter);
+ XCALL;
+
+ /* Reverse fg&bg and or in line */
+ XSetFunction(A_DISPLAY, A_GC, GXor);
+ XSetForeground(A_DISPLAY, A_GC, W_BG);
+ XSetBackground(A_DISPLAY, A_GC, W_FG);
+ XCALL;
+ XSetForeground(A_DISPLAY, A_GC, W_FG);
+ XSetBackground(A_DISPLAY, A_GC, W_BG);
+
+ trace("compare to result of drawing lines with LineDoubleDash");
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, lsimp))
+ CHECK;
+ else {
+ report("Reversing fg and bg did not complete line correctly");
+ FAIL;
+ }
+ /* assume we're not allowed to draw nothing, complain if so */
+ if (!checkarea(A_DISPLAY, A_DRAWABLE,
+ (struct area *)0, W_BG, W_BG, CHECK_IN | CHECK_DIFFER))
+ CHECK;
+ else {
+ report("%s didn't draw anything when ORing together even and odd dashes", TestName);
+ FAIL;
+ }
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+
+ }
+
+ /*
+ * Now do direct checking on vertical or horizontal lines
+ */
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setfordash();
+ XSetDashes(A_DISPLAY, A_GC, 0, lsdashes, 2);
+
+ for(lw=4; lw <=5; lw++) { /* odd/even widths */
+ trace("Direct check of LineDoubleDash on vertical/horizontal lines width %u", lw);
+ XSetLineAttributes(A_DISPLAY, A_GC,
+ lw, LineDoubleDash, CapButt, JoinMiter);
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ }
+
+ CHECKPASS(6*nvinf());
+
+>>ASSERTION Good A
+When
+.M line_style
+is
+.S LineDoubleDash
+and the dash is even and
+.M fill_style
+is
+.S FillTiled ,
+then on a call to xname the source for the drawing operation is
+.M tile .
+>>STRATEGY
+Create a tile with depth of drawable.
+Set graphics coordinates for dashed lines
+ (includes horizontal and vertical cases,
+ and includes joins and caps where relevant).
+If depth is greater than one, set the fg and bg in the tile
+ to interesting values.
+Set the stipple component of the GC to stipple using XSetStipple.
+Set the tile component of the GC to tile using XSetTile.
+Set fill-style to FillTiled using XSetFillStyle.
+Set line-style to LineDoubleDash using XChangeGC.
+Do graphics operation.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+Pixmap fstile;
+unsigned long fsfg, fsbg;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setfordash();
+
+ /* 1 */
+ fsfg = W_FG;
+ fsbg = W_BG;
+ if (vp->depth > 1) {
+ fsfg ^= 0x2;
+ fsbg ^= 0x2;
+ }
+ fstile = XCreatePixmapFromBitmapData(A_DISPLAY, A_DRAWABLE
+ , (char*)tile_bits, tile_width, tile_height
+ , fsfg, fsbg
+ , vp->depth
+ );
+ XSetTile(A_DISPLAY, A_GC, fstile);
+
+ XSetFillStyle(A_DISPLAY, A_GC, FillTiled);
+ setlinestyle(A_DISPLAY, A_GC, LineDoubleDash);
+ for(lw=4; lw <= 5; lw++) { /* odd and even widths */
+ setwidth(A_DISPLAY, A_GC, lw);
+
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ XFreePixmap(A_DISPLAY, fstile);
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When
+.M line_style
+is
+.S LineDoubleDash
+and the dash is even and
+.M fill_style
+is
+.S FillOpaqueStippled ,
+then on a call to xname the source for the drawing operation is
+a tile with the same width and height as
+.M stipple ,
+but with
+.M background
+everywhere
+.M stipple
+has a zero and with
+.M foreground
+everywhere
+.M stipple
+has a one.
+>>STRATEGY
+Create a stipple bitmap.
+Set graphics coordinates for dashed lines
+ (includes horizontal and vertical cases,
+ and includes joins and caps where relevant).
+Set the stipple component of the GC to stipple using XSetStipple.
+Set fill-style to FillOpaqueStippled using XSetFillStyle.
+Set line-style to LineDoubleDash using XChangeGC.
+Do graphics operation.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+Pixmap fsstip;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setfordash();
+
+ fsstip = XCreateBitmapFromData(A_DISPLAY, A_DRAWABLE
+ , (char*)stipple_bits, stipple_width, stipple_height
+ );
+ XSetStipple(A_DISPLAY, A_GC, fsstip);
+
+ XSetFillStyle(A_DISPLAY, A_GC, FillOpaqueStippled);
+ setlinestyle(A_DISPLAY, A_GC, LineDoubleDash);
+ for(lw=4; lw <= 5; lw++) { /* odd and even widths */
+ setwidth(A_DISPLAY, A_GC, lw);
+
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ XFreePixmap(A_DISPLAY, fsstip);
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When
+.M line_style
+is
+.S LineDoubleDash
+and the dash is even and
+.M fill_style
+is
+.S FillStippled ,
+then on a call to xname the source for the drawing operation is
+.M foreground
+masked by
+the stipple pattern tiled in a single plane.
+>>STRATEGY
+Create a stipple bitmap.
+Set graphics coordinates for dashed lines
+ (includes horizontal and vertical cases,
+ and includes joins and caps where relevant).
+Set the stipple component of the GC to stipple using XSetStipple.
+Set fill-style to FillStippled using XSetFillStyle.
+Set line-style to LineDoubleDash using XChangeGC.
+Do graphics operation.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+Pixmap fsstip;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setfordash();
+ XSetDashes(A_DISPLAY, A_GC, 0, lsdashes, 2);
+
+ fsstip = XCreateBitmapFromData(A_DISPLAY, A_DRAWABLE
+ , (char*)stipple_bits, stipple_width, stipple_height
+ );
+ XSetStipple(A_DISPLAY, A_GC, fsstip);
+
+ XSetFillStyle(A_DISPLAY, A_GC, FillStippled);
+ setlinestyle(A_DISPLAY, A_GC, LineDoubleDash);
+ for(lw=4; lw <= 5; lw++) { /* odd and even widths */
+ setwidth(A_DISPLAY, A_GC, lw);
+
+ XCALL;
+
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ XFreePixmap(A_DISPLAY, fsstip);
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION def
+When
+.M line-style
+is
+.S LineDoubleDash
+and the dash is odd and
+.M fill_style
+is
+.S FillSolid ,
+then on a call to xname the source for the drawing operation is
+.M background .
+>>ASSERTION def
+When
+.M line-style
+is
+.S LineDoubleDash
+and the dash is odd and
+.M fill_style
+is
+.S FillTiled ,
+then on a call to xname the source for the drawing operation is
+.M tile .
+>>ASSERTION def
+When
+.M line-style
+is
+.S LineDoubleDash
+and the dash is odd and
+.M fill_style
+is
+.S FillOpaqueStippled ,
+then on a call to xname the source for the drawing operation is
+a tile with the same width and height as
+.M stipple ,
+but with
+.M background
+everywhere
+.M stipple
+has a zero and with
+.M foreground
+everywhere
+.M stipple
+has a one.
+>>ASSERTION def
+When
+.M line-style
+is
+.S LineDoubleDash
+and the dash is odd and
+.M fill_style
+is
+.S FillStippled ,
+then on a call to xname the source for the drawing operation is
+.M background
+masked by
+the stipple pattern tiled in a single plane.
+>>ASSERTION Good A
+A call to xname does not draw each pixel of a particular line more
+than once.
+>>STRATEGY
+For each line-style
+ Draw line with gc function GXcopy.
+ Save image.
+ Clear drawable.
+ Draw line with gc function GXxor
+ Verify that the image is the same as that saved.
+>>CODE
+XVisualInfo *vp;
+XImage *lsimp;
+int i;
+int ls;
+unsigned int lw;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setfordash();
+ XSetDashes(A_DISPLAY, A_GC, 0, lsdashes, 2);
+
+ for(lw=4; lw <= 5; lw++) { /* odd and even widths */
+ setwidth(A_DISPLAY, A_GC, lw);
+
+ for (i = 0; i < NELEM(linestyles); i++) {
+ XSetFunction(A_DISPLAY, A_GC, GXcopy);
+
+ ls = linestyles[i];
+
+ trace("Drawing line style %s width %u", linestylename(ls), lw);
+ setlinestyle(A_DISPLAY, A_GC, ls);
+ XCALL;
+ lsimp = savimage(A_DISPLAY, A_DRAWABLE);
+ dclear(A_DISPLAY, A_DRAWABLE);
+
+ XSetFunction(A_DISPLAY, A_GC, GXxor);
+ XCALL;
+ if (compsavimage(A_DISPLAY, A_DRAWABLE, lsimp))
+ CHECK;
+ else {
+ report("Pixels drawn more than once for %s", linestylename(ls));
+ FAIL;
+ }
+ /* assume we're not allowed to draw nothing, complain if so */
+ if (!checkarea(A_DISPLAY, A_DRAWABLE,
+ (struct area *)0, W_BG, W_BG, CHECK_IN | CHECK_DIFFER))
+ CHECK;
+ else {
+ report("%s didn't draw anything in Xor mode", TestName);
+ FAIL;
+ }
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ dclear(A_DISPLAY, A_DRAWABLE);
+ }
+ }
+
+ CHECKPASS(4*NELEM(linestyles)*nvinf());
diff --git a/xc/test/xsuite/xtest/lib/gc/line-widt.mc b/xc/test/xsuite/xtest/lib/gc/line-widt.mc
new file mode 100644
index 000000000..683ca8102
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/line-widt.mc
@@ -0,0 +1,298 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>># >>ASSERTION Good A
+>># suppressed during drafting stage
+>># When unmodified by the
+>># .M join-style
+>># or
+>># .M cap-style ,
+>># then the bounding box of a wide line with endpoints [x1, y1], [x2, y2] and
+>># width w is a rectangle with vertices at the real coordinates
+>># [x1-(w*sn/2), y1+(w*cs/2)], [x1+(w*sn/2), y1-(w*cs/2)],
+>># [x2-(w*sn/2), y2+(w*cs/2)], [x2+(w*sn/2), y2-(w*cs/2)]
+>># where sn is the sine of the angle of the line
+>># and cs is the cosine of the angle of the line.
+>>ASSERTION Good A
+When
+.M line_width
+is greater than or equal to one, and
+the center of a pixel is fully inside the boundary,
+then the pixel is drawn.
+>>STRATEGY
+Draw a variety of lines with various widths.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+static struct linedata {
+ unsigned int width;
+ int x1;
+ int y1;
+ int x2;
+ int y2;
+} linedata[] = {
+ {1, 15, 10, 50, 30},
+ {5, 50, 4, 43, 21},
+ {8, 70, 6, 55, 27},
+ {2, 13, 13, 15, 24},
+ {15, 10, 51, 49, 60},
+ };
+struct linedata *lp;
+
+#define NLINEDATA (sizeof(linedata)/sizeof(linedata[0]))
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ for (lp = linedata; lp < &linedata[NLINEDATA]; lp++) {
+
+ setwidth(A_DISPLAY, A_GC, lp->width);
+ drawline(lp->x1, lp->y1, lp->x2, lp->y2);
+ }
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+When
+.M line_width
+is greater than or equal to one, and
+the center of the pixel is exactly on the boundary,
+and the boundary is not horizontal, and
+the interior is immediately to its right (x increasing direction),
+then the pixel is drawn.
+>>STRATEGY
+Draw sloping line.
+Verify that a pixel on the boundary is set.
+(More complicated cases are covered by pixel verification elsewhere.)
+>>CODE
+#if T_XDrawRectangle || T_XDrawRectangles || T_XDrawArc || T_XDrawArcs
+>># Next line should be left blank
+
+ report("This test purpose does not apply to %s", TestName);
+ report("as %s cannot generate sloping lines", TestName);
+ tet_result(TET_NOTINUSE);
+#else
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setwidth(A_DISPLAY, A_GC, (unsigned)10);
+ drawline(6, 13, 14, 7);
+
+ /*
+ * Pixel at 13,14 should be unset whereas the one at 7,6 should
+ * be set.
+ */
+ if (checkpixel(A_DISPLAY, A_DRAWABLE, 13, 14, W_BG))
+ CHECK;
+ else {
+ report("pixel at 13,14 was set");
+ FAIL;
+ }
+ if (checkpixel(A_DISPLAY, A_DRAWABLE, 7, 6, W_FG))
+ CHECK;
+ else {
+ report("pixel at 7,6 was not set");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(2*nvinf());
+#endif
+>>ASSERTION Good A
+When
+.M line_width
+is greater than or equal to one, and
+the center of the pixel is exactly on the boundary,
+and the boundary is horizontal, and
+the interior or the boundary is immediately below
+(y increasing direction), and the interior or the boundary is immediately
+to the right (x increasing direction),
+then the pixel is drawn.
+>>STRATEGY
+Draw horizontal line.
+Verify that pixels on boundary with interior below are set.
+Verify that pixels on boundary with interior above are not set.
+Verify that pixels on boundary with interior to the right are set.
+Verify that pixels on boundary with interior to the left are not set.
+>>CODE
+XVisualInfo *vp;
+XImage *lwimp;
+unsigned int lwwidth = 8;
+int begx = 10, begy = 10, len = 60;
+int i;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setwidth(A_DISPLAY, A_GC, lwwidth);
+
+ drawline(begx, begy, begx+len, begy);
+
+ lwimp = savimage(A_DISPLAY, A_DRAWABLE);
+ for (i = 0; i < len; i++) {
+ if (XGetPixel(lwimp, begx+i, begy-lwwidth/2) == W_FG)
+ CHECK;
+ else {
+ report("Pixel with interior below was not drawn");
+ FAIL;
+ }
+ }
+ for (i = 0; i < len; i++) {
+ if (XGetPixel(lwimp, begx+i, begy+lwwidth/2) == W_BG)
+ CHECK;
+ else {
+ report("Pixel with interior above was drawn");
+ FAIL;
+ }
+ }
+
+ for (i = 0; i < lwwidth; i++) {
+ if (XGetPixel(lwimp, 10, begy-lwwidth/2+i) == W_FG)
+ CHECK;
+ else {
+ report("Pixel with interior to the right was not drawn");
+ FAIL;
+ }
+ }
+ for (i = 0; i < lwwidth; i++) {
+ if (XGetPixel(lwimp, 70, begy-lwwidth/2+i) == W_BG)
+ CHECK;
+ else {
+ report("Pixel with interior to the left was drawn");
+ FAIL;
+ }
+ }
+
+ }
+
+ CHECKPASS(nvinf()*(2*len+2*lwwidth));
+>>ASSERTION Good B 2
+When
+.M line_width
+is zero, then a one pixel wide line is drawn using an
+unspecified, device-dependent algorithm.
+>>STRATEGY
+Draw horizontal zero width line.
+Issue warning message if line is not one pixel in width.
+Report assertion UNTESTED.
+>>CODE
+XVisualInfo *vp;
+struct area area;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ setwidth(A_DISPLAY, A_GC, (unsigned)0);
+ drawline(10, 10, 70, 10);
+
+ setarea(&area, 10, 10, 61, 1);
+ if (!checkarea(A_DISPLAY, A_DRAWABLE,
+ &area, W_FG, W_BG, CHECK_ALL)) {
+ /*
+ * The spec doesn't even require that horizontal lines be drawn
+ * properly. So we can only warn about suprises.
+ */
+ trace("Horizontal thin line was not drawn one pixel in width as expected");
+ }
+ }
+
+ tet_result(TET_UNTESTED);
+>>ASSERTION Good A
+When
+.M line_width
+is zero,
+and a line is drawn unclipped from [x1, y1] to [x2, y2] and
+another line is drawn unclipped from [x1+dx, y1+dy] to [x2+dx, y2+dy],
+and a point [x, y] is touched by drawing the first line,
+then point [x+dx, y+dy] is touched by drawing the second line.
+>>STRATEGY
+Draw thin line.
+Save image with origin based on line position.
+Draw thin line displaced by fixed amount.
+Save image with origin in same position relative to line.
+Compare images.
+>>CODE
+XVisualInfo *vp;
+XImage *lwim1, *lwim2;
+int x1, x2, y1, y2;
+int lwx, lwy;
+unsigned int lwwidth = 70;
+unsigned int lwheight = 50;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ x1 = 10; y1 = 10;
+ x2 = 63; y2 = 43;
+
+ setwidth(A_DISPLAY, A_GC, (unsigned)0);
+
+ drawline(x1, y1, x2, y2);
+ lwim1 = XGetImage(A_DISPLAY, A_DRAWABLE, x1, y1, lwwidth, lwheight, AllPlanes, ZPixmap);
+
+ if (isdeleted())
+ return;
+
+ x1 += 12;
+ x2 += 12;
+
+ y1 += 17;
+ y2 += 17;
+
+ dclear(A_DISPLAY, A_DRAWABLE);
+ drawline(x1, y1, x2, y2);
+ lwim2 = XGetImage(A_DISPLAY, A_DRAWABLE, x1, y1, lwwidth, lwheight, AllPlanes, ZPixmap);
+
+ if (isdeleted())
+ return;
+
+ for (lwy = 0; lwy < lwheight; lwy++) {
+ for (lwx = 0; lwx < lwwidth; lwx++) {
+ if (XGetPixel(lwim1, lwx, lwy) != XGetPixel(lwim2, lwx, lwy)) {
+ report("Thin line differed after displacement");
+ report("Point is %d,%d", lwx, lwy);
+ FAIL;
+
+ lwy = lwheight;
+ break;
+ }
+ }
+ }
+ CHECK;
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+When
+.M line_width
+is zero,
+and a line is drawn unclipped from [x1, y1] to [x2, y2] and
+another line is drawn unclipped from [x1+dx, y1+dy] to [x2+dx, y2+dy],
+and a point [x, y] is not touched by drawing the first line,
+then point [x+dx, y+dy] is not touched by drawing the second line.
+>>ASSERTION def
+>># This is done in clip-mask
+When a line is clipped, and the point is inside the clipping region, and
+the point would be touched by the unclipped line, then the pixel is drawn.
diff --git a/xc/test/xsuite/xtest/lib/gc/plane-mas.mc b/xc/test/xsuite/xtest/lib/gc/plane-mas.mc
new file mode 100644
index 000000000..021a5a947
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/plane-mas.mc
@@ -0,0 +1,188 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>EXTERN
+#define PLANEFG 0x55555555
+static int planelist[] = {
+ 0, 0x1, 0x2, 0x23, 0xf8, 0x765, 0x3987, 0x129078, 0x23567193};
+>>ASSERTION Good A
+The value for
+.M plane_mask
+is truncated to the depth of the GC.
+>>STRATEGY
+Set foreground to pattern of 1's and 0's
+Set plane-mask to values larger than the depth.
+Verify that result is what would be expected if the extra bits
+ were masked off.
+>>CODE
+XVisualInfo *vp;
+int depthmask;
+int *ip;
+unsigned long pix;
+unsigned long expected;
+int pmx = -1, pmy;
+int ntested;
+
+ ntested = 0;
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#if T_XCopyPlane
+ dset(A_DISPLAY, A_DRAWABLE, ~0);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ if (pmx == -1) {
+ /*
+ * Get a point that is set in the drawable.
+ */
+ XCALL;
+ setfuncpixel(A_DISPLAY, A_DRAW, &pmx, &pmy);
+ dclear(A_DISPLAY, A_DRAW);
+ }
+
+ depthmask = DEPTHMASK(vp->depth);
+
+#ifdef A_IMAGE
+ /* ZPixmap image so fg not used */
+ dsetimg(A_IMAGE, PLANEFG);
+#else
+#if T_XCopyArea
+ dset(A_DISPLAY, A_DRAWABLE, PLANEFG);
+#else
+ XSetForeground(A_DISPLAY, A_GC, PLANEFG);
+#endif
+#endif
+
+ for (ip = planelist; ip < &planelist[NELEM(planelist)]; ip++) {
+ if (*ip <= depthmask)
+ continue;
+
+ trace("plane-mask 0x%x", *ip);
+ XSetPlaneMask(A_DISPLAY, A_GC, *ip);
+ ntested++;
+
+ dclear(A_DISPLAY, A_DRAW);
+ XCALL;
+
+ expected = (*ip & PLANEFG) & depthmask;
+ pix = getpixel(A_DISPLAY, A_DRAW, pmx, pmy);
+
+ if (pix == expected)
+ CHECK;
+ else {
+ report("got pixel 0x%x, expecting 0x%x", pix, expected);
+ FAIL;
+ }
+ }
+
+ }
+
+ CHECKPASS(ntested);
+
+>>ASSERTION Good A
+The
+.M plane_mask
+specifies which planes of the
+destination are to be modified, one bit per plane, with bits being
+assigned to planes from the least significant bit of the word
+to the most significant bit.
+>>STRATEGY
+Set foreground to pattern of 1's and 0's
+Select a variety of plane masks.
+Verify that the expected pixels are drawn.
+>>CODE
+XVisualInfo *vp;
+int depthmask;
+int *ip;
+unsigned long pix;
+unsigned long expected;
+int pmx = -1, pmy;
+int ntested = 0;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#if T_XCopyPlane
+ dset(A_DISPLAY, A_DRAWABLE, ~0);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ if (pmx == -1) {
+ /*
+ * Get a point that is set in the drawable.
+ */
+ XCALL;
+ setfuncpixel(A_DISPLAY, A_DRAW, &pmx, &pmy);
+ dclear(A_DISPLAY, A_DRAW);
+ }
+
+ depthmask = DEPTHMASK(vp->depth);
+
+#ifdef A_IMAGE
+ /* ZPixmap image so fg not used */
+ dsetimg(A_IMAGE, PLANEFG);
+#else
+#if T_XCopyArea
+ dset(A_DISPLAY, A_DRAWABLE, PLANEFG);
+#else
+ XSetForeground(A_DISPLAY, A_GC, PLANEFG);
+#endif
+#endif
+ for (ip = planelist; ip < &planelist[NELEM(planelist)]; ip++) {
+ if (*ip > depthmask)
+ break;
+
+ trace("plane-mask 0x%x", *ip);
+ XSetPlaneMask(A_DISPLAY, A_GC, *ip);
+ ntested++;
+
+ dclear(A_DISPLAY, A_DRAW);
+ XCALL;
+
+ expected = *ip & PLANEFG;
+ pix = getpixel(A_DISPLAY, A_DRAW, pmx, pmy);
+
+ if (pix == expected)
+ CHECK;
+ else {
+ report("got pixel 0x%x, expecting 0x%x", pix, expected);
+ FAIL;
+ }
+ }
+
+ }
+
+ CHECKPASS(ntested);
+
diff --git a/xc/test/xsuite/xtest/lib/gc/stipple.mc b/xc/test/xsuite/xtest/lib/gc/stipple.mc
new file mode 100644
index 000000000..57a169717
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/stipple.mc
@@ -0,0 +1,16 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
diff --git a/xc/test/xsuite/xtest/lib/gc/subwindow.mc b/xc/test/xsuite/xtest/lib/gc/subwindow.mc
new file mode 100644
index 000000000..e549805d0
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/subwindow.mc
@@ -0,0 +1,300 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>EXTERN
+#ifdef A_WINDOW2
+#include "window2 in subwindow-mode"
+>>#CHANGED peterc
+>>#>>ASSERTION Good A
+>>#When
+>>#.M subwindow_mode
+>>#is
+>>#.S ClipByChildren ,
+>>#then both source and destination windows are
+>>#clipped by all viewable
+>>#.S InputOutput
+>>#children.
+>>ASSERTION Good A
+When
+.M subwindow_mode
+is
+.S ClipByChildren ,
+then the destination window and source
+(if it is a window)
+are clipped by all viewable
+.S InputOutput
+children.
+>>STRATEGY
+Set subwindow-mode to be ClipByChildren
+Cover window with many strip sub-windows.
+Do drawing operation
+Verify that all subwindows are clear.
+>>CODE
+XVisualInfo *vp;
+Window subwins[10];
+unsigned int swmwidth, swmheight;
+struct area area;
+int i;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#if T_XCopyPlane
+ dset(A_DISPLAY, A_DRAWABLE, ~0L);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ XSetSubwindowMode(A_DISPLAY, A_GC, ClipByChildren);
+
+ /*
+ * Place subwindows in strips across the window
+ * leaving spaces between them.
+ */
+ getsize(A_DISPLAY, A_DRAW, &swmwidth, &swmheight);
+ swmwidth /= 2*NELEM(subwins);
+
+ for (i = 0; i < NELEM(subwins); i++) {
+ setarea(&area, 2*i*swmwidth, 0, swmwidth, 0);
+ subwins[i] = crechild(A_DISPLAY, A_DRAW, &area);
+ }
+
+ XCALL;
+
+ for (i = 0; i < NELEM(subwins); i++) {
+ if (checkclear(A_DISPLAY, subwins[i]))
+ CHECK;
+ else {
+ report("Area of subwindow was not clear");
+ FAIL;
+ }
+ }
+ }
+
+ CHECKPASS(NELEM(subwins)*nvinf());
+
+>>#CHANGED peterc
+>>#>>ASSERTION Good A
+>>#When
+>>#.M subwindow_mode
+>>#is
+>>#.S IncludeInferiors ,
+>>#then neither source nor destination window is clipped by inferiors.
+>>ASSERTION Good A
+When
+.M subwindow_mode
+is
+.S IncludeInferiors ,
+then neither the destination window nor source
+(if it is a window) is clipped by inferiors.
+>>#(this will result in including subwindow contents in the source
+>>#and drawing through subwindow boundaries of the destination).
+>>STRATEGY
+Place subwindows over parts of the main window
+Create subwindows over these windows as well.
+Do graphics operation.
+Verify that the operation was not affected.
+>>CODE
+XVisualInfo *vp;
+Window subwins[5];
+XImage *swmsav;
+unsigned int swmwidth, swmheight;
+struct area area;
+int i, j;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp, &A_DRAWABLE, &A_DRAWABLE2);
+#if T_XCopyPlane
+ dset(A_DISPLAY, A_DRAWABLE, ~0L);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ A_IMAGE = makeimg(A_DISPLAY, vp, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ XCALL;
+ swmsav = savimage(A_DISPLAY, A_DRAW);
+ dclear(A_DISPLAY, A_DRAW);
+
+ XSetSubwindowMode(A_DISPLAY, A_GC, IncludeInferiors);
+
+ /*
+ * Place subwindows in strips across the window
+ * leaving spaces between them.
+ */
+ getsize(A_DISPLAY, A_DRAW, &swmwidth, &swmheight);
+ swmwidth /= 2*NELEM(subwins);
+
+ for (i = 0; i < NELEM(subwins); i++) {
+ setarea(&area, 2*i*swmwidth, 0, swmwidth, 0);
+ subwins[i] = crechild(A_DISPLAY, A_DRAW, &area);
+ for (j = 0; j < swmheight; j += 10) {
+ setarea(&area, 0, j, swmwidth, 6);
+ (void) crechild(A_DISPLAY, subwins[i], &area);
+ }
+ }
+
+ XCALL;
+
+ if (compsavimage(A_DISPLAY, A_DRAW, swmsav))
+ CHECK;
+ else {
+ report("Inferiors affected result with IncludeInferiors");
+ FAIL;
+ }
+
+ /*
+ * As a special test due to its importance, test that drawing
+ * on to the root window has the same effect. Move the test
+ * window to the root window origin.
+ */
+ {
+ Drawable savdraw;
+
+ dclear(A_DISPLAY, A_DRAW);
+ XSetWindowBorderWidth(A_DISPLAY, A_DRAW, 0);
+ XMoveWindow(A_DISPLAY, A_DRAW, 0, 0);
+
+ savdraw = A_DRAW;
+ A_DRAW = DRW(A_DISPLAY);
+
+ XCALL;
+
+ A_DRAW = savdraw;
+
+ if (compsavimage(A_DISPLAY, A_DRAW, swmsav))
+ CHECK;
+ else {
+ report("Drawing on root window with IncludeInferiors gave incorrect results");
+ FAIL;
+ }
+ }
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When
+.M subwindow_mode
+is
+.S IncludeInferiors
+on a window of one depth with mapped
+inferiors of differing depth, then no errors occur.
+>>STRATEGY
+If only one depth window supported
+ Result is UNSUPPORTED
+
+Find two visuals with different depths.
+Use one of these visuals to create a window.
+Use the other to create a subwindow.
+Verify that no errors occur.
+For information purposes only see if graphics operation is rendered properly.
+>>CODE
+XVisualInfo *vp1, *vp2;
+XImage *swmsav;
+int found;
+
+ vp2 = NULL;
+ found = 0;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp1); ) {
+ if (vp2 == NULL)
+ vp2 = vp1;
+ if (vp1->depth != vp2->depth) {
+ found++;
+ break;
+ }
+ }
+
+ if (!found) {
+ report("Only one depth visual supported");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ /*
+ * The remainder has not been fully tested -
+ * it requires support for visuals at more than one depth.
+ */
+
+#ifdef A_DRAWABLE2
+ winpair(A_DISPLAY, vp1, &A_DRAWABLE, &A_DRAWABLE2);
+#if T_XCopyPlane
+ dset(A_DISPLAY, A_DRAWABLE, ~0L);
+#else
+ dset(A_DISPLAY, A_DRAWABLE, W_FG);
+#endif
+#else
+ A_DRAW = makewin(A_DISPLAY, vp1);
+#endif
+ A_GC = makegc(A_DISPLAY, A_DRAW);
+#ifdef A_IMAGE
+ A_IMAGE = makeimg(A_DISPLAY, vp1, ZPixmap);
+ dsetimg(A_IMAGE, W_FG);
+#endif
+
+ XCALL;
+ swmsav = savimage(A_DISPLAY, A_DRAW);
+ dclear(A_DISPLAY, A_DRAW);
+
+ XCreateWindow(A_DISPLAY
+ , A_DRAW
+ , 0
+ , 0
+ , 300
+ , 300
+ , 0
+ , vp2->depth
+ , InputOutput
+ , vp2->visual
+ , 0
+ , (XSetWindowAttributes*)0
+ );
+ XSetWindowBackground(A_DISPLAY, A_DRAW, W_BG);
+ XMapWindow(A_DISPLAY, A_DRAW);
+
+ /* Wait for Expose? */
+ /* No.... we're not a top level window so no wmgr interference */
+
+ XSetSubwindowMode(A_DISPLAY, A_GC, IncludeInferiors);
+
+ XCALL;
+
+ if (compsavimage(A_DISPLAY, A_DRAW, swmsav))
+ trace("Drawing through to different depth window produces same results");
+ else
+ trace("Drawing through to different depth window produces different results");
+
+ if (geterr() == Success)
+ PASS;
+ else
+ FAIL;
+>>#HISTORY Completed peterc Incorporated RTCB3.
diff --git a/xc/test/xsuite/xtest/lib/gc/tile.mc b/xc/test/xsuite/xtest/lib/gc/tile.mc
new file mode 100644
index 000000000..57a169717
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/tile.mc
@@ -0,0 +1,16 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
diff --git a/xc/test/xsuite/xtest/lib/gc/ts-x-orig.mc b/xc/test/xsuite/xtest/lib/gc/ts-x-orig.mc
new file mode 100644
index 000000000..8ead28c36
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/ts-x-orig.mc
@@ -0,0 +1,104 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * The symbols stipple_* and tile_* that do not occur in this file
+ * are defined in fill-style.mc which is always included along with
+ * this one.
+ */
+>>ASSERTION Good A
+The tile/stipple origin coordinates
+.M ts-x-origin
+and
+.M ts-y-origin
+are interpreted relative to the
+origin of the destination drawable specified in the graphics
+operation.
+>>STRATEGY
+Create a stipple pixmap.
+Set stipple component of GC to pixmap using XSetStipple.
+For various tile/stipple origins:
+ Set tile/stipple origin using XSetTSOrigin.
+ Set fill-style to FillStippled using XSetFillStyle.
+ Clear drawable.
+ Do graphics operation.
+ Pixmap verify.
+Create a tile with depth of drawable.
+Set tile component of GC to tile using XSetTile.
+For various tile/stipple origins:
+ Set tile/stipple origin using XSetTSOrigin.
+ Set fill-style to FillTiled using XSetFillStyle.
+ Clear drawable.
+ Do graphics operation.
+ Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+Pixmap tsostip;
+Pixmap tsotile;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ A_DRAWABLE = makewin(A_DISPLAY, vp);
+ A_GC = makegc(A_DISPLAY, A_DRAWABLE);
+
+ tsostip = XCreateBitmapFromData(A_DISPLAY, A_DRAWABLE
+ , (char*)stipple_bits, stipple_width, stipple_height
+ );
+ XSetStipple(A_DISPLAY, A_GC, tsostip);
+ XFreePixmap(A_DISPLAY, tsostip);
+ XSetFillStyle(A_DISPLAY, A_GC, FillStippled);
+
+ XSetTSOrigin(A_DISPLAY, A_GC, 9, 17);
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ XSetTSOrigin(A_DISPLAY, A_GC, 0xd8f2, 0x4321);
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ XSetTSOrigin(A_DISPLAY, A_GC, -3, 7);
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ /* Now Tiles */
+ tsotile = XCreatePixmapFromBitmapData(A_DISPLAY, A_DRAWABLE
+ , (char*)tile_bits, tile_width, tile_height
+ , W_FG, W_BG
+ , vp->depth
+ );
+ XSetTile(A_DISPLAY, A_GC, tsotile);
+ XFreePixmap(A_DISPLAY, tsotile);
+ XSetFillStyle(A_DISPLAY, A_GC, FillTiled);
+
+ XSetTSOrigin(A_DISPLAY, A_GC, 9, 17);
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ XSetTSOrigin(A_DISPLAY, A_GC, 0xd8f2, 0x4321);
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+
+ XSetTSOrigin(A_DISPLAY, A_GC, -3, 7);
+ dclear(A_DISPLAY, A_DRAWABLE);
+ XCALL;
+ PIXCHECK(A_DISPLAY, A_DRAWABLE);
+ }
+
+ CHECKPASS(6*nvinf());
diff --git a/xc/test/xsuite/xtest/lib/gc/ts-y-orig.mc b/xc/test/xsuite/xtest/lib/gc/ts-y-orig.mc
new file mode 100644
index 000000000..57a169717
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/gc/ts-y-orig.mc
@@ -0,0 +1,16 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
diff --git a/xc/test/xsuite/xtest/lib/mc/maheader.mc b/xc/test/xsuite/xtest/lib/mc/maheader.mc
new file mode 100644
index 000000000..39e3d7d99
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/maheader.mc
@@ -0,0 +1,107 @@
+'\" Simple table specification - to avoid the need to use tbl.
+.de tL \" table line
+.nf
+\\&\\$1\\h'|10n'\\$2\\h'|26n'\\$3\\h'|30n'\\$4\\h'|34n'\\$5\\h'|43n'\\$6\\h'|50n'\\$7\\h'|61n'\\$8
+.fi
+..
+.hy 0
+'\" Font for arguments
+.ds fA \f(CO
+'\" Font for structure member names
+.ds fM \fI
+'\" Font for symbols.
+.ds fS \fC
+'\" Font for function names
+.ds fF \fC
+'\"
+'\"
+'\" ### .TH - Header for a test set.
+.de TH
+.nr Ac 0 1 \" Set the assertion counter to zero.
+'\" Save the name
+.ds Na \\$1
+.ds Ch \\$2 \" Save the chapter name
+.if \\n(nl .bp 1
+.sp 2
+.ps +2
+Assertions for \\*(Na
+.ps
+.sp 2
+..
+'\" ### .TI - Start assertion.
+.de TI
+.ds Ty \\$1
+.if '\\*(Ty'' .ds Ty <class>
+.sp
+\fBAssertion \\*(Na-\\n+(Ac(\\*(Ty).\fR
+.br
+..
+'\" ### .A - Argument
+.de A
+\&\\*(fA\\$1\fR\\$2\\*(fA\\$3\fR\\$4\\*(fA\\$5\fR\\$6
+..
+'\" ### .M - Structure member name
+.de M
+\&\\*(fM\\$1\fR\\$2\\*(fM\\$3\fR\\$4\\*(fM\\$5\fR\\$6
+..
+'\" ### .S - Symbol name
+.de S
+\&\\*(fS\\$1\fR\\$2\\*(fS\\$3\fR\\$4\\*(fS\\$5\fR\\$6
+..
+'\" ### .F - Function name
+.de F
+.ie '\\$1'' \\*(fF\\*(Na\fR
+.el \&\\*(fF\\$1\fR\\$2\\*(fF\\$3\fR\\$4\\*(fF\\$5\fR\\$6
+..
+'\" ### .SM - Make argument smaller
+.de SM
+.ie \\n(.$-2 \&\\$1\s-1\\$2\s0\\$3
+.el \&\s-1\\$1\s0\\$2
+..
+'\" The following macros NS and NE are for internal review purposes.
+'\" ### .NS - Start a note from a comment in the source.
+.de NS
+.br
+.ft I
+.ps -1
+.in 1c
+..
+'\" ### .NE - End a note from a comment in the source.
+.de NE
+.ft P
+.ps
+.in
+.br
+..
+'\" ### .)h - header macro
+.de )h
+'ev 1
+'sp .5i
+'nr P +1
+.tl \\*({h
+'sp .5i
+.br
+'ev
+..
+'\" ### .)f - footer macro
+.de )f
+'ev 1
+'sp .5i
+.tl \\*({f
+.br
+'ev
+'bp
+..
+.if !\nS .nr S 12
+.ps \nS
+.ev 1
+.ps \nS
+.ev
+.if !\nO .nr O 7
+.po \nO
+.ll 6i
+.wh 0 )h
+.wh -1i )f
+.ds {h "'\\*(Na''\\*(Ch'"
+.ds {f "''%''"
+.nr P 0 1
diff --git a/xc/test/xsuite/xtest/lib/mc/mcextern.mc b/xc/test/xsuite/xtest/lib/mc/mcextern.mc
new file mode 100644
index 000000000..ff6caebbd
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/mcextern.mc
@@ -0,0 +1,13 @@
+
+extern Display *Dsp;
+extern Window Win;
+
+extern Window ErrdefWindow;
+extern Drawable ErrdefDrawable;
+extern GC ErrdefGC;
+extern Colormap ErrdefColormap;
+extern Pixmap ErrdefPixmap;
+extern Atom ErrdefAtom;
+extern Cursor ErrdefCursor;
+extern Font ErrdefFont;
+
diff --git a/xc/test/xsuite/xtest/lib/mc/mcinclude.mc b/xc/test/xsuite/xtest/lib/mc/mcinclude.mc
new file mode 100644
index 000000000..bc93c8eb3
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/mcinclude.mc
@@ -0,0 +1,9 @@
+
+#include <stdlib.h>
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "Xresource.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
diff --git a/xc/test/xsuite/xtest/lib/mc/mcxpext.mc b/xc/test/xsuite/xtest/lib/mc/mcxpext.mc
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/mcxpext.mc
@@ -0,0 +1 @@
+
diff --git a/xc/test/xsuite/xtest/lib/mc/mcxpinc.mc b/xc/test/xsuite/xtest/lib/mc/mcxpinc.mc
new file mode 100644
index 000000000..a999173dc
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/mcxpinc.mc
@@ -0,0 +1,5 @@
+
+
+#include <stdlib.h>
+#include "xtest.h"
+#include "tet_api.h"
diff --git a/xc/test/xsuite/xtest/lib/mc/mmlib.mc b/xc/test/xsuite/xtest/lib/mc/mmlib.mc
new file mode 100644
index 000000000..f7df04409
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/mmlib.mc
@@ -0,0 +1,15 @@
+#
+# This part of the makefile checks for the existance of the libraries
+# and creates them if necessary.
+#
+
+# The xtestlib is made if it doesn't exist
+#
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+#
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
diff --git a/xc/test/xsuite/xtest/lib/mc/mmlink.mc b/xc/test/xsuite/xtest/lib/mc/mmlink.mc
new file mode 100644
index 000000000..4d9d8e9f5
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/mmlink.mc
@@ -0,0 +1,31 @@
+#
+# A version of the test that can be combined together with
+# all the other tests to make one executable. This will save a
+# fair amount of disk space especially if the system does not
+# have shared libraries. Different names are used so that
+# there is no possibility of confusion.
+#
+link.c: $(SOURCES)
+ $(CODEMAKER) -l -o link.c $(SOURCES)
+
+# Link the objects into one large object.
+#
+$(LINKOBJ): $(LOFILES)
+ $(LD) $(LINKOBJOPTS) $(LOFILES) -o $(LINKOBJ)
+
+# Link the object file into the parent directory.
+#
+../$(LINKOBJ): $(LINKOBJ)
+ $(RM) ../$(LINKOBJ)
+ $(LN) $(LINKOBJ) ..
+
+# Make a link to the combined executable.
+#
+$(LINKEXEC): ../Tests
+ $(RM) $(LINKEXEC)
+ $(LN) ../Tests $(LINKEXEC)
+
+../Tests: ../$(LINKOBJ)
+
+linkexec:: $(LINKEXEC) $(AUXFILES) ;
+
diff --git a/xc/test/xsuite/xtest/lib/mc/mmmisc.mc b/xc/test/xsuite/xtest/lib/mc/mmmisc.mc
new file mode 100644
index 000000000..08c9d6965
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/mmmisc.mc
@@ -0,0 +1,22 @@
+#
+# Miscellaneous housekeeping functions.
+#
+
+# clean up object and junk files.
+#
+clean:
+ $(RM) Test $(OFILES) $(LOFILES) $(LINKOBJ) $(LINKEXEC) core\
+ MTest m$(LINKEXEC) $(MOFILES) CONFIG Makefile.bak $(AUXCLEAN)
+
+# clobber - clean up and remove remakable sources.
+#
+clobber: clean
+ $(RM) MTest.c Test.c mlink.c link.c Makefile
+
+# Lint makerules
+#
+lint: $(CFILES)
+ $(LINT) $(LINTFLAGS) $(CFILES) $(LINTTCM) $(LINTLIBS)
+
+LINT:lint
+
diff --git a/xc/test/xsuite/xtest/lib/mc/mmmlink.mc b/xc/test/xsuite/xtest/lib/mc/mmmlink.mc
new file mode 100644
index 000000000..5556555cb
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/mmmlink.mc
@@ -0,0 +1,11 @@
+# A version of the test that can be combined with all the other tests for
+# the macro version of the function.
+#
+mlink.c: $(SOURCES)
+ $(CODEMAKER) -m -l -o mlink.c $(SOURCES)
+
+linkexec:: m$(LINKEXEC) $(AUXFILES) ;
+
+m$(LINKEXEC): ../Tests
+ $(RM) m$(LINKEXEC)
+ $(LN) ../Tests m$(LINKEXEC)
diff --git a/xc/test/xsuite/xtest/lib/mc/mmmsa.mc b/xc/test/xsuite/xtest/lib/mc/mmmsa.mc
new file mode 100644
index 000000000..e294bd8b2
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/mmmsa.mc
@@ -0,0 +1,10 @@
+#
+# Build a standalone version of the test case using the macro version
+# of the function.
+#
+MTest: $(MOFILES) $(LIBS) $(TCM) $(AUXFILES)
+ $(CC) $(LDFLAGS) -o $@ $(MOFILES) $(TCM) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+MTest.c: $(SOURCES)
+ $(CODEMAKER) -m -o MTest.c $(SOURCES)
+
diff --git a/xc/test/xsuite/xtest/lib/mc/mmpgen.mc b/xc/test/xsuite/xtest/lib/mc/mmpgen.mc
new file mode 100644
index 000000000..9457dbba5
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/mmpgen.mc
@@ -0,0 +1,18 @@
+#
+# Pixel generation makerules for generating the reference
+# known good image files.
+#
+
+PVOFILES=pvtest.o
+
+pvgen: $(PVOFILES) $(PVLIBS) $(TCM)
+ $(CC) $(LDFLAGS) -o $@ $(PVOFILES) $(TCM) \
+ $(PVLIBS) $(SYSLIBS) $(SYSMATHLIB)
+
+pvtest.o: pvtest.c
+ cc -c -DGENERATE_PIXMAPS $(CFLAGS) pvtest.c
+
+pvtest.c: Test.c
+ $(RM) pvtest.c; \
+ $(LN) Test.c pvtest.c
+
diff --git a/xc/test/xsuite/xtest/lib/mc/mmsa.mc b/xc/test/xsuite/xtest/lib/mc/mmsa.mc
new file mode 100644
index 000000000..d40362cd8
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/mmsa.mc
@@ -0,0 +1,9 @@
+#
+# Build a standalone version of the test case.
+#
+Test: $(OFILES) $(LIBS) $(TCM) $(AUXFILES)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(TCM) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+Test.c: $(SOURCES)
+ $(CODEMAKER) -o Test.c $(SOURCES)
+
diff --git a/xc/test/xsuite/xtest/lib/mc/mmxpinit.mc b/xc/test/xsuite/xtest/lib/mc/mmxpinit.mc
new file mode 100644
index 000000000..b8c955e52
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/mmxpinit.mc
@@ -0,0 +1,15 @@
+#
+# X Protocol tests.
+#
+
+# CFLAGS - Compilation flags specific to the X Protocol tests.
+#
+CFLAGS=$(XP_CFLAGS)
+SYSLIBS=$(XP_SYSLIBS)
+LIBS=$(XP_LIBS)
+
+# LINTFLAGS - Flags for lint specific to the X Protocol tests.
+#
+LINTFLAGS=$(XP_LINTFLAGS)
+LINTLIBS=$(XP_LINTLIBS)
+
diff --git a/xc/test/xsuite/xtest/lib/mc/mmxplib.mc b/xc/test/xsuite/xtest/lib/mc/mmxplib.mc
new file mode 100644
index 000000000..3a0ecfde3
--- /dev/null
+++ b/xc/test/xsuite/xtest/lib/mc/mmxplib.mc
@@ -0,0 +1,20 @@
+#
+# This part of the makefile checks for the existance of the libraries
+# and creates them if necessary.
+#
+
+# The xtestlib is made if it doesn't exist
+#
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+#
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
+# The X Protocol test library is made if it doesn't exist
+#
+$(XSTLIB):
+ cd $(XTESTROOT)/src/libproto; $(TET_BUILD_TOOL) install
+
diff --git a/xc/test/xsuite/xtest/link_scen b/xc/test/xsuite/xtest/link_scen
new file mode 100644
index 000000000..5a014d21a
--- /dev/null
+++ b/xc/test/xsuite/xtest/link_scen
@@ -0,0 +1,666 @@
+#
+# This scenario can build or run all tests in sections 2 to 10 of the
+# X11R4 Xlib specifications and touch tests for the X Protocol (version 11).
+#
+# This scenario builds the test suite with all executables linked together into
+# one for each section. This saves a considerable amount of disk space.
+#
+linkbuild
+ /tset/CH02/all
+ /tset/CH03/all
+ /tset/CH04/all
+ /tset/CH05/all
+ /tset/CH06/all
+ /tset/CH07/all
+ /tset/CH08/all
+ /tset/CH09/all
+ /tset/CH10/all
+ /tset/XPROTO/all
+
+
+#
+# This scenario is used to run the linked executables.
+#
+
+linkexec
+#
+# section 2.1-2.6
+#
+ /tset/CH02/allplns/allplns{all}
+ /tset/CH02/blckpxl/blckpxl{all}
+ /tset/CH02/blckpxlofs/blckpxlofs{all}
+ /tset/CH02/btmpbtordr/btmpbtordr{all}
+ /tset/CH02/btmppd/btmppd{all}
+ /tset/CH02/btmpunt/btmpunt{all}
+ /tset/CH02/cllsofscrn/cllsofscrn{all}
+ /tset/CH02/clsdsply/clsdsply{all}
+ /tset/CH02/cnnctnnmbr/cnnctnnmbr{all}
+ /tset/CH02/dfltclrmp/dfltclrmp{all}
+ /tset/CH02/dfltclrmpo/dfltclrmpo{all}
+ /tset/CH02/dfltdpth/dfltdpth{all}
+ /tset/CH02/dfltdpthof/dfltdpthof{all}
+ /tset/CH02/dfltgc/dfltgc{all}
+ /tset/CH02/dfltgcofsc/dfltgcofsc{all}
+ /tset/CH02/dfltrtwdw/dfltrtwdw{all}
+ /tset/CH02/dfltscrn/dfltscrn{all}
+ /tset/CH02/dfltscrnof/dfltscrnof{all}
+ /tset/CH02/dfltvsl/dfltvsl{all}
+ /tset/CH02/dfltvslofs/dfltvslofs{all}
+ /tset/CH02/dsbckngstr/dsbckngstr{all}
+ /tset/CH02/dsplyclls/dsplyclls{all}
+ /tset/CH02/dsplyhght/dsplyhght{all}
+ /tset/CH02/dsplyhghtm/dsplyhghtm{all}
+ /tset/CH02/dsplyofscr/dsplyofscr{all}
+ /tset/CH02/dsplyplns/dsplyplns{all}
+ /tset/CH02/dsplystr/dsplystr{all}
+ /tset/CH02/dsplywdth/dsplywdth{all}
+ /tset/CH02/dsplywdthm/dsplywdthm{all}
+ /tset/CH02/dssvundrs/dssvundrs{all}
+ /tset/CH02/evntmskofs/evntmskofs{all}
+ /tset/CH02/fr/fr{all}
+ /tset/CH02/hghtmmofsc/hghtmmofsc{all}
+ /tset/CH02/hghtofscrn/hghtofscrn{all}
+ /tset/CH02/imgbytordr/imgbytordr{all}
+ /tset/CH02/lstdpths/lstdpths{all}
+ /tset/CH02/lstknwnrqs/lstknwnrqs{all}
+ /tset/CH02/lstpxmpfrm/lstpxmpfrm{all}
+ /tset/CH02/mncmpsofsc/mncmpsofsc{all}
+ /tset/CH02/mxcmpsofsc/mxcmpsofsc{all}
+ /tset/CH02/nop/nop{all}
+ /tset/CH02/nxtrqst/nxtrqst{all}
+ /tset/CH02/opndsply/opndsply{all}
+ /tset/CH02/plnsofscrn/plnsofscrn{all}
+ /tset/CH02/prtclrvsn/prtclrvsn{all}
+ /tset/CH02/prtclvrsn/prtclvrsn{all}
+ /tset/CH02/qlngth/qlngth{all}
+ /tset/CH02/rtwdw/rtwdw{all}
+ /tset/CH02/rtwdwofscr/rtwdwofscr{all}
+ /tset/CH02/scrncnt/scrncnt{all}
+ /tset/CH02/scrnnmbrof/scrnnmbrof{all}
+ /tset/CH02/scrnofdspl/scrnofdspl{all}
+ /tset/CH02/srvrvndr/srvrvndr{all}
+ /tset/CH02/vndrrls/vndrrls{all}
+ /tset/CH02/wdthmmofsc/wdthmmofsc{all}
+ /tset/CH02/wdthofscrn/wdthofscrn{all}
+ /tset/CH02/whtpxl/whtpxl{all}
+ /tset/CH02/whtpxlofsc/whtpxlofsc{all}
+ /tset/CH02/blckpxl/mblckpxl{all}
+ /tset/CH02/blckpxlofs/mblckpxlofs{all}
+ /tset/CH02/btmpbtordr/mbtmpbtordr{all}
+ /tset/CH02/btmppd/mbtmppd{all}
+ /tset/CH02/btmpunt/mbtmpunt{all}
+ /tset/CH02/cllsofscrn/mcllsofscrn{all}
+ /tset/CH02/cnnctnnmbr/mcnnctnnmbr{all}
+ /tset/CH02/dfltclrmp/mdfltclrmp{all}
+ /tset/CH02/dfltclrmpo/mdfltclrmpo{all}
+ /tset/CH02/dfltdpth/mdfltdpth{all}
+ /tset/CH02/dfltdpthof/mdfltdpthof{all}
+ /tset/CH02/dfltgc/mdfltgc{all}
+ /tset/CH02/dfltgcofsc/mdfltgcofsc{all}
+ /tset/CH02/dfltrtwdw/mdfltrtwdw{all}
+ /tset/CH02/dfltscrn/mdfltscrn{all}
+ /tset/CH02/dfltscrnof/mdfltscrnof{all}
+ /tset/CH02/dfltvsl/mdfltvsl{all}
+ /tset/CH02/dfltvslofs/mdfltvslofs{all}
+ /tset/CH02/dsbckngstr/mdsbckngstr{all}
+ /tset/CH02/dsplyclls/mdsplyclls{all}
+ /tset/CH02/dsplyhght/mdsplyhght{all}
+ /tset/CH02/dsplyhghtm/mdsplyhghtm{all}
+ /tset/CH02/dsplyofscr/mdsplyofscr{all}
+ /tset/CH02/dsplyplns/mdsplyplns{all}
+ /tset/CH02/dsplystr/mdsplystr{all}
+ /tset/CH02/dsplywdth/mdsplywdth{all}
+ /tset/CH02/dsplywdthm/mdsplywdthm{all}
+ /tset/CH02/dssvundrs/mdssvundrs{all}
+ /tset/CH02/evntmskofs/mevntmskofs{all}
+ /tset/CH02/hghtmmofsc/mhghtmmofsc{all}
+ /tset/CH02/hghtofscrn/mhghtofscrn{all}
+ /tset/CH02/imgbytordr/mimgbytordr{all}
+ /tset/CH02/lstknwnrqs/mlstknwnrqs{all}
+ /tset/CH02/mncmpsofsc/mmncmpsofsc{all}
+ /tset/CH02/mxcmpsofsc/mmxcmpsofsc{all}
+ /tset/CH02/nxtrqst/mnxtrqst{all}
+ /tset/CH02/plnsofscrn/mplnsofscrn{all}
+ /tset/CH02/prtclrvsn/mprtclrvsn{all}
+ /tset/CH02/prtclvrsn/mprtclvrsn{all}
+ /tset/CH02/qlngth/mqlngth{all}
+ /tset/CH02/rtwdw/mrtwdw{all}
+ /tset/CH02/rtwdwofscr/mrtwdwofscr{all}
+ /tset/CH02/scrncnt/mscrncnt{all}
+ /tset/CH02/scrnofdspl/mscrnofdspl{all}
+ /tset/CH02/srvrvndr/msrvrvndr{all}
+ /tset/CH02/vndrrls/mvndrrls{all}
+ /tset/CH02/wdthmmofsc/mwdthmmofsc{all}
+ /tset/CH02/wdthofscrn/mwdthofscrn{all}
+ /tset/CH02/whtpxl/mwhtpxl{all}
+ /tset/CH02/whtpxlofsc/mwhtpxlofsc{all}
+#
+# section 3.1-3.10
+#
+ /tset/CH03/chngwdwatt/chngwdwatt{all}
+ /tset/CH03/cnfgrwdw/cnfgrwdw{all}
+ /tset/CH03/crcltsbws/crcltsbws{all}
+ /tset/CH03/crcltsbwsd/crcltsbwsd{all}
+ /tset/CH03/crcltsbwsu/crcltsbwsu{all}
+ /tset/CH03/crtsmplwdw/crtsmplwdw{all}
+ /tset/CH03/crtwdw/crtwdw{all}
+ /tset/CH03/dstrysbws/dstrysbws{all}
+ /tset/CH03/dstrywdw/dstrywdw{all}
+ /tset/CH03/lwrwdw/lwrwdw{all}
+ /tset/CH03/mprsd/mprsd{all}
+ /tset/CH03/mpsbws/mpsbws{all}
+ /tset/CH03/mpwdw/mpwdw{all}
+ /tset/CH03/mvrszwdw/mvrszwdw{all}
+ /tset/CH03/mvwdw/mvwdw{all}
+ /tset/CH03/rstckwdws/rstckwdws{all}
+ /tset/CH03/rswdw/rswdw{all}
+ /tset/CH03/rszwdw/rszwdw{all}
+ /tset/CH03/stwdwbg/stwdwbg{all}
+ /tset/CH03/stwdwbgpxm/stwdwbgpxm{all}
+ /tset/CH03/stwdwbrdr/stwdwbrdr{all}
+ /tset/CH03/stwdwbrdrp/stwdwbrdrp{all}
+ /tset/CH03/stwdwbrdrw/stwdwbrdrw{all}
+ /tset/CH03/trnsltcrdn/trnsltcrdn{all}
+ /tset/CH03/unmpsbws/unmpsbws{all}
+ /tset/CH03/unmpwdw/unmpwdw{all}
+ /tset/CH03/vslidfrmvs/vslidfrmvs{all}
+#
+# section 4.1-4.4
+#
+ /tset/CH04/chngprprty/chngprprty{all}
+ /tset/CH04/cnvrtslctn/cnvrtslctn{all}
+ /tset/CH04/dltprprty/dltprprty{all}
+ /tset/CH04/gtatmnm/gtatmnm{all}
+ /tset/CH04/gtgmtry/gtgmtry{all}
+ /tset/CH04/gtslctnown/gtslctnown{all}
+ /tset/CH04/gtwdwattrb/gtwdwattrb{all}
+ /tset/CH04/gtwdwprprt/gtwdwprprt{all}
+ /tset/CH04/intrnatm/intrnatm{all}
+ /tset/CH04/lstprprts/lstprprts{all}
+ /tset/CH04/qrypntr/qrypntr{all}
+ /tset/CH04/qrytr/qrytr{all}
+ /tset/CH04/rttwdwprpr/rttwdwprpr{all}
+ /tset/CH04/stslctnown/stslctnown{all}
+#
+# section 5.1-5.4
+#
+ /tset/CH05/allcclr/allcclr{all}
+ /tset/CH05/allcclrcll/allcclrcll{all}
+ /tset/CH05/allcclrpln/allcclrpln{all}
+ /tset/CH05/allcnmdclr/allcnmdclr{all}
+ /tset/CH05/chnggc/chnggc{all}
+ /tset/CH05/cpyclrmpan/cpyclrmpan{all}
+ /tset/CH05/cpygc/cpygc{all}
+ /tset/CH05/crtclrmp/crtclrmp{all}
+ /tset/CH05/crtgc/crtgc{all}
+ /tset/CH05/crtpxmp/crtpxmp{all}
+ /tset/CH05/frclrmp/frclrmp{all}
+ /tset/CH05/frclrs/frclrs{all}
+ /tset/CH05/frgc/frgc{all}
+ /tset/CH05/frpxmp/frpxmp{all}
+ /tset/CH05/gcntxtfrmg/gcntxtfrmg{all}
+ /tset/CH05/gtgcvls/gtgcvls{all}
+ /tset/CH05/lkpclr/lkpclr{all}
+ /tset/CH05/qrybststpp/qrybststpp{all}
+ /tset/CH05/qrybstsz/qrybstsz{all}
+ /tset/CH05/qrybsttl/qrybsttl{all}
+ /tset/CH05/qryclr/qryclr{all}
+ /tset/CH05/qryclrs/qryclrs{all}
+ /tset/CH05/starcmd/starcmd{all}
+ /tset/CH05/stbg/stbg{all}
+ /tset/CH05/stclpmsk/stclpmsk{all}
+ /tset/CH05/stclporgn/stclporgn{all}
+ /tset/CH05/stclprctng/stclprctng{all}
+ /tset/CH05/stdshs/stdshs{all}
+ /tset/CH05/stfllrl/stfllrl{all}
+ /tset/CH05/stfllstyl/stfllstyl{all}
+ /tset/CH05/stfnctn/stfnctn{all}
+ /tset/CH05/stfnt/stfnt{all}
+ /tset/CH05/stfrgrnd/stfrgrnd{all}
+ /tset/CH05/stgrphcsex/stgrphcsex{all}
+ /tset/CH05/stlnattrbt/stlnattrbt{all}
+ /tset/CH05/stplnmsk/stplnmsk{all}
+ /tset/CH05/strclr/strclr{all}
+ /tset/CH05/strclrs/strclrs{all}
+ /tset/CH05/strnmdclr/strnmdclr{all}
+ /tset/CH05/stsbwmd/stsbwmd{all}
+ /tset/CH05/ststppl/ststppl{all}
+ /tset/CH05/ststt/ststt{all}
+ /tset/CH05/sttl/sttl{all}
+ /tset/CH05/sttsorgn/sttsorgn{all}
+ /tset/CH05/stwdwclrmp/stwdwclrmp{all}
+#
+# section 6.1-6.8
+#
+ /tset/CH06/clrar/clrar{all}
+ /tset/CH06/clrwdw/clrwdw{all}
+ /tset/CH06/cpyar/cpyar{all}
+ /tset/CH06/cpypln/cpypln{all}
+ /tset/CH06/crtfntcrsr/crtfntcrsr{all}
+ /tset/CH06/crtglyphcr/crtglyphcr{all}
+ /tset/CH06/crtpxmpcrs/crtpxmpcrs{all}
+ /tset/CH06/dfncrsr/dfncrsr{all}
+ /tset/CH06/drwarc/drwarc{all}
+ /tset/CH06/drwarcs/drwarcs{all}
+ /tset/CH06/drwimgst16/drwimgst16{all}
+ /tset/CH06/drwimgstr/drwimgstr{all}
+ /tset/CH06/drwln/drwln{all}
+ /tset/CH06/drwlns/drwlns{all}
+ /tset/CH06/drwpnt/drwpnt{all}
+ /tset/CH06/drwpnts/drwpnts{all}
+ /tset/CH06/drwrctngl/drwrctngl{all}
+ /tset/CH06/drwrctngls/drwrctngls{all}
+ /tset/CH06/drwsgmnts/drwsgmnts{all}
+ /tset/CH06/drwstr/drwstr{all}
+ /tset/CH06/drwstr16/drwstr16{all}
+ /tset/CH06/drwtxt/drwtxt{all}
+ /tset/CH06/drwtxt16/drwtxt16{all}
+ /tset/CH06/fllarc/fllarc{all}
+ /tset/CH06/fllarcs/fllarcs{all}
+ /tset/CH06/fllplygn/fllplygn{all}
+ /tset/CH06/fllrctngl/fllrctngl{all}
+ /tset/CH06/fllrctngls/fllrctngls{all}
+ /tset/CH06/frcrsr/frcrsr{all}
+ /tset/CH06/frfnt/frfnt{all}
+ /tset/CH06/frfntinf/frfntinf{all}
+ /tset/CH06/frfntnms/frfntnms{all}
+ /tset/CH06/frfntpth/frfntpth{all}
+ /tset/CH06/gtfntprprt/gtfntprprt{all}
+ /tset/CH06/gtfntpth/gtfntpth{all}
+ /tset/CH06/gtimg/gtimg{all}
+ /tset/CH06/gtsbimg/gtsbimg{all}
+ /tset/CH06/ldfnt/ldfnt{all}
+ /tset/CH06/ldqryfnt/ldqryfnt{all}
+ /tset/CH06/lstfnts/lstfnts{all}
+ /tset/CH06/lstfntswth/lstfntswth{all}
+ /tset/CH06/ptimg/ptimg{all}
+ /tset/CH06/qrybstcrsr/qrybstcrsr{all}
+ /tset/CH06/qryfnt/qryfnt{all}
+ /tset/CH06/qrytxtex16/qrytxtex16{all}
+ /tset/CH06/qrytxtextn/qrytxtextn{all}
+ /tset/CH06/rclrcrsr/rclrcrsr{all}
+ /tset/CH06/stfntpth/stfntpth{all}
+ /tset/CH06/txtextnt16/txtextnt16{all}
+ /tset/CH06/txtextnts/txtextnts{all}
+ /tset/CH06/txtwdth/txtwdth{all}
+ /tset/CH06/txtwdth16/txtwdth16{all}
+ /tset/CH06/undfncrsr/undfncrsr{all}
+ /tset/CH06/unldfnt/unldfnt{all}
+#
+# section 7.1-7.11
+#
+ /tset/CH07/actvtscrns/actvtscrns{all}
+ /tset/CH07/addhst/addhst{all}
+ /tset/CH07/addhsts/addhsts{all}
+ /tset/CH07/addtsvst/addtsvst{all}
+ /tset/CH07/allwevnts/allwevnts{all}
+ /tset/CH07/atrptoff/atrptoff{all}
+ /tset/CH07/atrpton/atrpton{all}
+ /tset/CH07/bll/bll{all}
+ /tset/CH07/chngactvpn/chngactvpn{all}
+ /tset/CH07/chngkybrdc/chngkybrdc{all}
+ /tset/CH07/chngkybrdm/chngkybrdm{all}
+ /tset/CH07/chngpntrcn/chngpntrcn{all}
+ /tset/CH07/chngsvst/chngsvst{all}
+ /tset/CH07/dltmdfrmpe/dltmdfrmpe{all}
+ /tset/CH07/dsblaccssc/dsblaccssc{all}
+ /tset/CH07/dsplykycds/dsplykycds{all}
+ /tset/CH07/enblaccssc/enblaccssc{all}
+ /tset/CH07/frcscrnsvr/frcscrnsvr{all}
+ /tset/CH07/frmdfrmp/frmdfrmp{all}
+ /tset/CH07/grbbttn/grbbttn{all}
+ /tset/CH07/grbky/grbky{all}
+ /tset/CH07/grbkybrd/grbkybrd{all}
+ /tset/CH07/grbpntr/grbpntr{all}
+ /tset/CH07/grbsrvr/grbsrvr{all}
+ /tset/CH07/gtinptfcs/gtinptfcs{all}
+ /tset/CH07/gtkybrdcnt/gtkybrdcnt{all}
+ /tset/CH07/gtkybrdmpp/gtkybrdmpp{all}
+ /tset/CH07/gtmdfrmppn/gtmdfrmppn{all}
+ /tset/CH07/gtpntrcntr/gtpntrcntr{all}
+ /tset/CH07/gtpntrmppn/gtpntrmppn{all}
+ /tset/CH07/gtscrnsvr/gtscrnsvr{all}
+ /tset/CH07/insrtmdfrm/insrtmdfrm{all}
+ /tset/CH07/instllclrm/instllclrm{all}
+ /tset/CH07/kllclnt/kllclnt{all}
+ /tset/CH07/lsthsts/lsthsts{all}
+ /tset/CH07/lstinstlld/lstinstlld{all}
+ /tset/CH07/nwmdfrmp/nwmdfrmp{all}
+ /tset/CH07/qrykymp/qrykymp{all}
+ /tset/CH07/rmvfrmsvst/rmvfrmsvst{all}
+ /tset/CH07/rmvhst/rmvhst{all}
+ /tset/CH07/rmvhsts/rmvhsts{all}
+ /tset/CH07/rprntwdw/rprntwdw{all}
+ /tset/CH07/rstscrnsvr/rstscrnsvr{all}
+ /tset/CH07/staccsscnt/staccsscnt{all}
+ /tset/CH07/stclsdwnmd/stclsdwnmd{all}
+ /tset/CH07/stinptfcs/stinptfcs{all}
+ /tset/CH07/stmdfrmppn/stmdfrmppn{all}
+ /tset/CH07/stpntrmppn/stpntrmppn{all}
+ /tset/CH07/stscrnsvr/stscrnsvr{all}
+ /tset/CH07/ungrbbttn/ungrbbttn{all}
+ /tset/CH07/ungrbky/ungrbky{all}
+ /tset/CH07/ungrbkybrd/ungrbkybrd{all}
+ /tset/CH07/ungrbpntr/ungrbpntr{all}
+ /tset/CH07/ungrbsrvr/ungrbsrvr{all}
+ /tset/CH07/unnstllclr/unnstllclr{all}
+ /tset/CH07/wrppntr/wrppntr{all}
+#
+# section 8.1-8.4
+#
+ /tset/CH08/bttnprss/bttnprss{all}
+ /tset/CH08/bttnrls/bttnrls{all}
+ /tset/CH08/clntmssg/clntmssg{all}
+ /tset/CH08/clrmpntfy/clrmpntfy{all}
+ /tset/CH08/cnfgrntfy/cnfgrntfy{all}
+ /tset/CH08/cnfgrrqst/cnfgrrqst{all}
+ /tset/CH08/crcltntfy/crcltntfy{all}
+ /tset/CH08/crcltrqst/crcltrqst{all}
+ /tset/CH08/crtntfy/crtntfy{all}
+ /tset/CH08/dstryntfy/dstryntfy{all}
+ /tset/CH08/entrntfy/entrntfy{all}
+ /tset/CH08/exps/exps{all}
+ /tset/CH08/fcsin/fcsin{all}
+ /tset/CH08/fcsot/fcsot{all}
+ /tset/CH08/grphcsexps/grphcsexps{all}
+ /tset/CH08/grvtyntfy/grvtyntfy{all}
+ /tset/CH08/kympntfy/kympntfy{all}
+ /tset/CH08/kyprss/kyprss{all}
+ /tset/CH08/kyrls/kyrls{all}
+ /tset/CH08/lvntfy/lvntfy{all}
+ /tset/CH08/mpntfy/mpntfy{all}
+ /tset/CH08/mppngntfy/mppngntfy{all}
+ /tset/CH08/mprqst/mprqst{all}
+ /tset/CH08/mtnntfy/mtnntfy{all}
+ /tset/CH08/nexps/nexps{all}
+ /tset/CH08/prprtyntfy/prprtyntfy{all}
+ /tset/CH08/rprntntfy/rprntntfy{all}
+ /tset/CH08/rszrqst/rszrqst{all}
+ /tset/CH08/slctnclr/slctnclr{all}
+ /tset/CH08/slctnntfy/slctnntfy{all}
+ /tset/CH08/slctnrqst/slctnrqst{all}
+ /tset/CH08/unmpntfy/unmpntfy{all}
+ /tset/CH08/vsbltyntfy/vsbltyntfy{all}
+#
+# section 8.5-8.12
+#
+ /tset/CH08/chckifevnt/chckifevnt{all}
+ /tset/CH08/chckmskevn/chckmskevn{all}
+ /tset/CH08/chcktypdev/chcktypdev{all}
+ /tset/CH08/chcktypdwd/chcktypdwd{all}
+ /tset/CH08/chckwdwevn/chckwdwevn{all}
+ /tset/CH08/dsplymtnbf/dsplymtnbf{all}
+ /tset/CH08/dsplynm/dsplynm{all}
+ /tset/CH08/evntsqd/evntsqd{all}
+ /tset/CH08/flsh/flsh{all}
+ /tset/CH08/gterrrdtbs/gterrrdtbs{all}
+ /tset/CH08/gterrrtxt/gterrrtxt{all}
+ /tset/CH08/gtmtnevnts/gtmtnevnts{all}
+ /tset/CH08/ifevnt/ifevnt{all}
+ /tset/CH08/mskevnt/mskevnt{all}
+ /tset/CH08/nxtevnt/nxtevnt{all}
+ /tset/CH08/pkevnt/pkevnt{all}
+ /tset/CH08/pkifevnt/pkifevnt{all}
+ /tset/CH08/pndng/pndng{all}
+ /tset/CH08/ptbckevnt/ptbckevnt{all}
+ /tset/CH08/slctinpt/slctinpt{all}
+ /tset/CH08/sndevnt/sndevnt{all}
+ /tset/CH08/staftrfnct/staftrfnct{all}
+ /tset/CH08/sterrrhndl/sterrrhndl{all}
+ /tset/CH08/stioerrrhn/stioerrrhn{all}
+ /tset/CH08/sync/sync{all}
+ /tset/CH08/synchrnz/synchrnz{all}
+ /tset/CH08/wdwevnt/wdwevnt{all}
+#
+# section 9.1-9.3
+#
+ /tset/CH09/allcclsshn/allcclsshn{all}
+ /tset/CH09/allcicnsz/allcicnsz{all}
+ /tset/CH09/allcstndrd/allcstndrd{all}
+ /tset/CH09/allcszhnts/allcszhnts{all}
+ /tset/CH09/allcwmhnts/allcwmhnts{all}
+ /tset/CH09/frstrlst/frstrlst{all}
+ /tset/CH09/ftchnm/ftchnm{all}
+ /tset/CH09/gtclsshnt/gtclsshnt{all}
+ /tset/CH09/gtcmmnd/gtcmmnd{all}
+ /tset/CH09/gticnnm/gticnnm{all}
+ /tset/CH09/gticnszs/gticnszs{all}
+ /tset/CH09/gtrgbclrmp/gtrgbclrmp{all}
+ /tset/CH09/gttrnsntfr/gttrnsntfr{all}
+ /tset/CH09/gttxtprprt/gttxtprprt{all}
+ /tset/CH09/gtwmclntmc/gtwmclntmc{all}
+ /tset/CH09/gtwmclrmpw/gtwmclrmpw{all}
+ /tset/CH09/gtwmhnts/gtwmhnts{all}
+ /tset/CH09/gtwmicnnm/gtwmicnnm{all}
+ /tset/CH09/gtwmnm/gtwmnm{all}
+ /tset/CH09/gtwmnrmlhn/gtwmnrmlhn{all}
+ /tset/CH09/gtwmprtcls/gtwmprtcls{all}
+ /tset/CH09/gtwmszhnts/gtwmszhnts{all}
+ /tset/CH09/icnfywdw/icnfywdw{all}
+ /tset/CH09/rcnfgrwmwd/rcnfgrwmwd{all}
+ /tset/CH09/stclsshnt/stclsshnt{all}
+ /tset/CH09/stcmmnd/stcmmnd{all}
+ /tset/CH09/sticnnm/sticnnm{all}
+ /tset/CH09/sticnszs/sticnszs{all}
+ /tset/CH09/strgbclrmp/strgbclrmp{all}
+ /tset/CH09/strlstttxt/strlstttxt{all}
+ /tset/CH09/strnm/strnm{all}
+ /tset/CH09/sttrnsntfr/sttrnsntfr{all}
+ /tset/CH09/sttxtprprt/sttxtprprt{all}
+ /tset/CH09/stwmclntmc/stwmclntmc{all}
+ /tset/CH09/stwmclrmpw/stwmclrmpw{all}
+ /tset/CH09/stwmhnts/stwmhnts{all}
+ /tset/CH09/stwmicnnm/stwmicnnm{all}
+ /tset/CH09/stwmnm/stwmnm{all}
+ /tset/CH09/stwmnrmlhn/stwmnrmlhn{all}
+ /tset/CH09/stwmprprts/stwmprprts{all}
+ /tset/CH09/stwmprtcls/stwmprtcls{all}
+ /tset/CH09/stwmszhnts/stwmszhnts{all}
+ /tset/CH09/txtprprtyt/txtprprtyt{all}
+ /tset/CH09/wmgmtry/wmgmtry{all}
+ /tset/CH09/wthdrwwdw/wthdrwwdw{all}
+#
+# section 10.1-10.12
+#
+ /tset/CH10/addpxl/addpxl{all}
+ /tset/CH10/clpbx/clpbx{all}
+ /tset/CH10/crtbtmpfrm/crtbtmpfrm{all}
+ /tset/CH10/crtimg/crtimg{all}
+ /tset/CH10/crtpxmpfrm/crtpxmpfrm{all}
+ /tset/CH10/crtrgn/crtrgn{all}
+ /tset/CH10/dltcntxt/dltcntxt{all}
+ /tset/CH10/dstryimg/dstryimg{all}
+ /tset/CH10/dstryrgn/dstryrgn{all}
+ /tset/CH10/emptyrgn/emptyrgn{all}
+ /tset/CH10/eqlrgn/eqlrgn{all}
+ /tset/CH10/fndcntxt/fndcntxt{all}
+ /tset/CH10/ftchbffr/ftchbffr{all}
+ /tset/CH10/ftchbyts/ftchbyts{all}
+ /tset/CH10/gtdflt/gtdflt{all}
+ /tset/CH10/gtpxl/gtpxl{all}
+ /tset/CH10/gtvslinf/gtvslinf{all}
+ /tset/CH10/intrsctrgn/intrsctrgn{all}
+ /tset/CH10/iscrsrky/iscrsrky{all}
+ /tset/CH10/isfnctnky/isfnctnky{all}
+ /tset/CH10/iskypdky/iskypdky{all}
+ /tset/CH10/ismdfrky/ismdfrky{all}
+ /tset/CH10/ismscfnctn/ismscfnctn{all}
+ /tset/CH10/ispfky/ispfky{all}
+ /tset/CH10/kycdtkysym/kycdtkysym{all}
+ /tset/CH10/kysymtkycd/kysymtkycd{all}
+ /tset/CH10/kysymtstr/kysymtstr{all}
+ /tset/CH10/lkpkysym/lkpkysym{all}
+ /tset/CH10/lkpstr/lkpstr{all}
+ /tset/CH10/mtchvslinf/mtchvslinf{all}
+ /tset/CH10/offstrgn/offstrgn{all}
+ /tset/CH10/plygnrgn/plygnrgn{all}
+ /tset/CH10/pntinrgn/pntinrgn{all}
+ /tset/CH10/prmllc/prmllc{all}
+ /tset/CH10/prsclr/prsclr{all}
+ /tset/CH10/prsgmtry/prsgmtry{all}
+ /tset/CH10/ptpxl/ptpxl{all}
+ /tset/CH10/rbndkysym/rbndkysym{all}
+ /tset/CH10/rctinrgn/rctinrgn{all}
+ /tset/CH10/rdbtmpfl/rdbtmpfl{all}
+ /tset/CH10/rfrshkybrd/rfrshkybrd{all}
+ /tset/CH10/rmdstrydtb/rmdstrydtb{all}
+ /tset/CH10/rmgtfldtbs/rmgtfldtbs{all}
+ /tset/CH10/rmgtrsrc/rmgtrsrc{all}
+ /tset/CH10/rmgtstrdtb/rmgtstrdtb{all}
+ /tset/CH10/rmintlz/rmintlz{all}
+ /tset/CH10/rmmrgdtbss/rmmrgdtbss{all}
+ /tset/CH10/rmprscmmnd/rmprscmmnd{all}
+ /tset/CH10/rmptfldtbs/rmptfldtbs{all}
+ /tset/CH10/rmptlnrsrc/rmptlnrsrc{all}
+ /tset/CH10/rmptrsrc/rmptrsrc{all}
+ /tset/CH10/rmptstrrsr/rmptstrrsr{all}
+ /tset/CH10/rmqgtrsrc/rmqgtrsrc{all}
+ /tset/CH10/rmqgtsrchl/rmqgtsrchl{all}
+ /tset/CH10/rmqgtsrchr/rmqgtsrchr{all}
+ /tset/CH10/rmqptrsrc/rmqptrsrc{all}
+ /tset/CH10/rmqptstrrs/rmqptstrrs{all}
+ /tset/CH10/rmqrktstr/rmqrktstr{all}
+ /tset/CH10/rmstrtbndn/rmstrtbndn{all}
+ /tset/CH10/rmstrtqrk/rmstrtqrk{all}
+ /tset/CH10/rmstrtqrkl/rmstrtqrkl{all}
+ /tset/CH10/rmunqqrk/rmunqqrk{all}
+ /tset/CH10/rsrcmngrst/rsrcmngrst{all}
+ /tset/CH10/rttbffrs/rttbffrs{all}
+ /tset/CH10/sbimg/sbimg{all}
+ /tset/CH10/sbtrctrgn/sbtrctrgn{all}
+ /tset/CH10/shrnkrgn/shrnkrgn{all}
+ /tset/CH10/strbffr/strbffr{all}
+ /tset/CH10/strbyts/strbyts{all}
+ /tset/CH10/strgn/strgn{all}
+ /tset/CH10/strtkysym/strtkysym{all}
+ /tset/CH10/svcntxt/svcntxt{all}
+ /tset/CH10/unnrctwthr/unnrctwthr{all}
+ /tset/CH10/unnrgn/unnrgn{all}
+ /tset/CH10/unqcntxt/unqcntxt{all}
+ /tset/CH10/wrtbtmpfl/wrtbtmpfl{all}
+ /tset/CH10/xrrgn/xrrgn{all}
+#
+# X Protocol section
+#
+ /tset/XPROTO/allcclr/allcclr{all}
+ /tset/XPROTO/allcclrcll/allcclrcll{all}
+ /tset/XPROTO/allcclrpln/allcclrpln{all}
+ /tset/XPROTO/allcnmdclr/allcnmdclr{all}
+ /tset/XPROTO/allwevnts/allwevnts{all}
+ /tset/XPROTO/bdrqst/bdrqst{all}
+ /tset/XPROTO/bll/bll{all}
+ /tset/XPROTO/chngactvpn/chngactvpn{all}
+ /tset/XPROTO/chnggc/chnggc{all}
+ /tset/XPROTO/chnghsts/chnghsts{all}
+ /tset/XPROTO/chngkybrdc/chngkybrdc{all}
+ /tset/XPROTO/chngkybrdm/chngkybrdm{all}
+ /tset/XPROTO/chngpntrcn/chngpntrcn{all}
+ /tset/XPROTO/chngprprty/chngprprty{all}
+ /tset/XPROTO/chngsvst/chngsvst{all}
+ /tset/XPROTO/chngwdwatt/chngwdwatt{all}
+ /tset/XPROTO/clrar/clrar{all}
+ /tset/XPROTO/clsfnt/clsfnt{all}
+ /tset/XPROTO/cnfgrwdw/cnfgrwdw{all}
+ /tset/XPROTO/cnvrtslctn/cnvrtslctn{all}
+ /tset/XPROTO/cpyar/cpyar{all}
+ /tset/XPROTO/cpyclrmpan/cpyclrmpan{all}
+ /tset/XPROTO/cpygc/cpygc{all}
+ /tset/XPROTO/cpypln/cpypln{all}
+ /tset/XPROTO/crcltwdw/crcltwdw{all}
+ /tset/XPROTO/crtclrmp/crtclrmp{all}
+ /tset/XPROTO/crtcrsr/crtcrsr{all}
+ /tset/XPROTO/crtgc/crtgc{all}
+ /tset/XPROTO/crtglyphcr/crtglyphcr{all}
+ /tset/XPROTO/crtpxmp/crtpxmp{all}
+ /tset/XPROTO/crtwdw/crtwdw{all}
+ /tset/XPROTO/dltprprty/dltprprty{all}
+ /tset/XPROTO/dstrysbws/dstrysbws{all}
+ /tset/XPROTO/dstrywdw/dstrywdw{all}
+ /tset/XPROTO/fllply/fllply{all}
+ /tset/XPROTO/frclrmp/frclrmp{all}
+ /tset/XPROTO/frclrs/frclrs{all}
+ /tset/XPROTO/frcrsr/frcrsr{all}
+ /tset/XPROTO/frcscrnsvr/frcscrnsvr{all}
+ /tset/XPROTO/frgc/frgc{all}
+ /tset/XPROTO/frpxmp/frpxmp{all}
+ /tset/XPROTO/grbbttn/grbbttn{all}
+ /tset/XPROTO/grbky/grbky{all}
+ /tset/XPROTO/grbkybrd/grbkybrd{all}
+ /tset/XPROTO/grbpntr/grbpntr{all}
+ /tset/XPROTO/grbsrvr/grbsrvr{all}
+ /tset/XPROTO/gtatmnm/gtatmnm{all}
+ /tset/XPROTO/gtfntpth/gtfntpth{all}
+ /tset/XPROTO/gtgmtry/gtgmtry{all}
+ /tset/XPROTO/gtimg/gtimg{all}
+ /tset/XPROTO/gtinptfcs/gtinptfcs{all}
+ /tset/XPROTO/gtkybrdcnt/gtkybrdcnt{all}
+ /tset/XPROTO/gtkybrdmpp/gtkybrdmpp{all}
+ /tset/XPROTO/gtmdfrmppn/gtmdfrmppn{all}
+ /tset/XPROTO/gtmtnevnts/gtmtnevnts{all}
+ /tset/XPROTO/gtpntrcntr/gtpntrcntr{all}
+ /tset/XPROTO/gtpntrmppn/gtpntrmppn{all}
+ /tset/XPROTO/gtprprty/gtprprty{all}
+ /tset/XPROTO/gtscrnsvr/gtscrnsvr{all}
+ /tset/XPROTO/gtslctnown/gtslctnown{all}
+ /tset/XPROTO/gtwdwattrb/gtwdwattrb{all}
+ /tset/XPROTO/imgtxt16/imgtxt16{all}
+ /tset/XPROTO/imgtxt8/imgtxt8{all}
+ /tset/XPROTO/instllclrm/instllclrm{all}
+ /tset/XPROTO/intrnatm/intrnatm{all}
+ /tset/XPROTO/kllclnt/kllclnt{all}
+ /tset/XPROTO/lkpclr/lkpclr{all}
+ /tset/XPROTO/lstextnsns/lstextnsns{all}
+ /tset/XPROTO/lstfnts/lstfnts{all}
+ /tset/XPROTO/lstfntswth/lstfntswth{all}
+ /tset/XPROTO/lsthsts/lsthsts{all}
+ /tset/XPROTO/lstinstlld/lstinstlld{all}
+ /tset/XPROTO/lstprprts/lstprprts{all}
+ /tset/XPROTO/mpsbws/mpsbws{all}
+ /tset/XPROTO/mpwdw/mpwdw{all}
+ /tset/XPROTO/noprtn/noprtn{all}
+ /tset/XPROTO/opndsply/opndsply{all}
+ /tset/XPROTO/opnfnt/opnfnt{all}
+ /tset/XPROTO/plyarc/plyarc{all}
+ /tset/XPROTO/plyfllarc/plyfllarc{all}
+ /tset/XPROTO/plyfllrctn/plyfllrctn{all}
+ /tset/XPROTO/plyln/plyln{all}
+ /tset/XPROTO/plypnt/plypnt{all}
+ /tset/XPROTO/plyrctngl/plyrctngl{all}
+ /tset/XPROTO/plysgmnt/plysgmnt{all}
+ /tset/XPROTO/plytxt16/plytxt16{all}
+ /tset/XPROTO/plytxt8/plytxt8{all}
+ /tset/XPROTO/ptimg/ptimg{all}
+ /tset/XPROTO/qrybstsz/qrybstsz{all}
+ /tset/XPROTO/qryclrs/qryclrs{all}
+ /tset/XPROTO/qryextnsn/qryextnsn{all}
+ /tset/XPROTO/qryfnt/qryfnt{all}
+ /tset/XPROTO/qrykymp/qrykymp{all}
+ /tset/XPROTO/qrypntr/qrypntr{all}
+ /tset/XPROTO/qrytr/qrytr{all}
+ /tset/XPROTO/qrytxtextn/qrytxtextn{all}
+ /tset/XPROTO/rclrcrsr/rclrcrsr{all}
+ /tset/XPROTO/rprntwdw/rprntwdw{all}
+ /tset/XPROTO/rttprprts/rttprprts{all}
+ /tset/XPROTO/sndevnt/sndevnt{all}
+ /tset/XPROTO/staccsscnt/staccsscnt{all}
+ /tset/XPROTO/stclprctng/stclprctng{all}
+ /tset/XPROTO/stclsdwnmd/stclsdwnmd{all}
+ /tset/XPROTO/stdshs/stdshs{all}
+ /tset/XPROTO/stfntpth/stfntpth{all}
+ /tset/XPROTO/stinptfcs/stinptfcs{all}
+ /tset/XPROTO/stmdfrmppn/stmdfrmppn{all}
+ /tset/XPROTO/stpntrmppn/stpntrmppn{all}
+ /tset/XPROTO/strclrs/strclrs{all}
+ /tset/XPROTO/strnmdclr/strnmdclr{all}
+ /tset/XPROTO/stscrnsvr/stscrnsvr{all}
+ /tset/XPROTO/stslctnown/stslctnown{all}
+ /tset/XPROTO/trnsltcrds/trnsltcrds{all}
+ /tset/XPROTO/ungrbbttn/ungrbbttn{all}
+ /tset/XPROTO/ungrbky/ungrbky{all}
+ /tset/XPROTO/ungrbkybrd/ungrbkybrd{all}
+ /tset/XPROTO/ungrbpntr/ungrbpntr{all}
+ /tset/XPROTO/ungrbsrvr/ungrbsrvr{all}
+ /tset/XPROTO/unmpsbws/unmpsbws{all}
+ /tset/XPROTO/unmpwdw/unmpwdw{all}
+ /tset/XPROTO/unnstllclr/unnstllclr{all}
+ /tset/XPROTO/wrppntr/wrppntr{all}
diff --git a/xc/test/xsuite/xtest/results/empty b/xc/test/xsuite/xtest/results/empty
new file mode 100644
index 000000000..e69de29bb
--- /dev/null
+++ b/xc/test/xsuite/xtest/results/empty
diff --git a/xc/test/xsuite/xtest/src/bin/mc/Makefile b/xc/test/xsuite/xtest/src/bin/mc/Makefile
new file mode 100644
index 000000000..f3a6e39cb
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/Makefile
@@ -0,0 +1,66 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+CFILES=main.c sections.c files.c shortname.c error.c gccomps.c set.c \
+ expand.c code.c make.c ma.c cond.c mas.c
+OFILES=main.o sections.o files.o shortname.o error.o gccomps.o set.o \
+ expand.o code.o make.o ma.o cond.o mas.o
+RM_FILES = *.o mc core
+
+MV=mv
+
+all: mc
+
+mc:$P $(OFILES)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(PORTLIB) $(SYSLIBS)
+
+name10lc: shortname.c
+ -$(MV) shortname.o tmp.o
+ $(CC) -c $(CFLAGS) -Dtest=name10lc shortname.c
+ $(CC) $(LDFLAGS) -o $@ shortname.o $(LIBS)
+ $(MV) tmp.o shortname.o
+
+name12: shortname.c
+ -$(MV) shortname.o tmp.o
+ $(CC) -c $(CFLAGS) -Dtest=name12 shortname.c
+ $(CC) $(LDFLAGS) -o $@ shortname.o $(LIBS)
+ $(MV) tmp.o shortname.o
+
+clean:
+ $(RM) $(RM_FILES)
+
+install: mc
+ $(RM) $(XTESTBIN)/mc
+ $(CP) mc $(XTESTBIN)/mc
+ $(RM) $(XTESTBIN)/ma $(XTESTBIN)/mmkf $(XTESTBIN)/mexpand
+ $(LN) $(XTESTBIN)/mc $(XTESTBIN)/ma
+ $(LN) $(XTESTBIN)/mc $(XTESTBIN)/mmkf
+ $(LN) $(XTESTBIN)/mc $(XTESTBIN)/mexpand
+
+clobber: clean
+
+lint:
+ $(LINT) $(INCLUDES) $(CFILES)
+
+mcproto.h:
+ mkxtl *.c > mcproto.h
+
+frc:
+ rm mcproto.h
+
+main.o error.o files.o gccomps.o make.o: mc.h mcproto.h
+code.o sections.o set.o shortname.o: mc.h mcproto.h
diff --git a/xc/test/xsuite/xtest/src/bin/mc/code.c b/xc/test/xsuite/xtest/src/bin/mc/code.c
new file mode 100644
index 000000000..8a7803f17
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/code.c
@@ -0,0 +1,978 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "mc.h"
+
+#define F_CODE "mccode.tmc"
+#define F_STDEXTERN "mcextern.mc"
+#define F_EXTERN "mcextern.tmc"
+#define F_STDXPEXTERN "mcxpext.mc"
+#define F_XPEXTERN "mcxpext.tmc"
+#define F_STDINCLUDE "mcinclude.mc"
+#define F_INCLUDE "mcinclude.tmc"
+#define F_STDXPINCLUDE "mcxpinc.mc"
+#define F_XPINCLUDE "mcxpinc.tmc"
+#define F_BANNER "mcbanner.tmc"
+#define F_SYNOPSIS "mcsynopsis.tmc"
+
+static FILE *FpCode;
+static FILE *FpExtern;
+static FILE *FpInclude;
+static FILE *FpBanner;
+static FILE *FpSynopsis;
+#define FpDefines FpExtern
+
+extern int Lineno;
+extern char *Filename;
+extern int dflag;
+extern int lflag;
+extern int mflag;
+extern int pflag;
+extern int sflag;
+
+extern struct settings Settings;
+extern struct state State;
+
+#define PRELEN 80
+
+#define MAXTP 1024
+#define MAXARGS 40
+
+#define NRSEPS " \t\n\""
+
+static int Testnum;
+static char *Ictype[MAXTP];
+static short Icnum[MAXTP];
+static char *ExpectError;
+/* TEMP as we don't use it there is no way to set this at present */
+static int gbflag = 0; /* Use Good/bad */
+
+extern char *newline();
+
+static char *validtypes[] = {
+ "def",
+ "Good",
+ "Bad",
+ (char*)0,
+};
+
+static char *Arglines[MAXARGS];
+static char *Argnames[MAXARGS];
+static char *Arginit[MAXARGS];
+static int Nargs;
+static int NeedStatus;
+static int NeedValue;
+static int NeedTpcleanup;
+static int Resyncline;
+
+static void setline();
+static void setoutline();
+static void roffstrip();
+
+/*ARGSUSED*/
+void
+mcstart(buf)
+char *buf;
+{
+ FpBanner = cretmpfile(F_BANNER);
+ FpSynopsis = cretmpfile(F_SYNOPSIS);
+ FpExtern = cretmpfile(F_EXTERN);
+ FpInclude = cretmpfile(F_INCLUDE);
+ FpCode = cretmpfile(F_CODE);
+ setoutline();
+ (void) fprintf(FpCode, "%sint tet_thistest;\n\n", (lflag)? "extern ": "");
+}
+
+/*ARGSUSED*/
+void
+mcend(buf)
+char *buf;
+{
+int i;
+
+ /* Finish the code section */
+ (void) fprintf(FpCode, "/* End of Test Cases */\n\n\n");
+
+ setoutline();
+ (void) fprintf(FpCode, "%sstruct tet_testlist tet_testlist[] = {\n",
+ (lflag)? "static ": "");
+
+ /*
+ * List out the test function names.
+ */
+ for (i = 1; i <= Testnum; i++) {
+ if (!gbflag)
+ (void) fprintf(FpCode, "\tt%03d, %d,\n", Icnum[i], Icnum[i]);
+ else
+ (void) fprintf(FpCode, "\tt%03d, %s,\n", Icnum[i], Ictype[i]);
+ }
+ (void) fprintf(FpCode, "\tNULL, 0\n};\n\n");
+ (void) fprintf(FpCode, "%sint \tntests = sizeof(tet_testlist)/sizeof(struct tet_testlist)-1;\n\n",
+ (lflag)?"static ": "");
+
+ /*
+ * If this is for space saving format then output the linkinfo
+ * entry.
+ */
+ if (lflag) {
+ (void) fprintf(FpCode, "struct linkinfo E%s = {\n", name12(State.name));
+ (void) fprintf(FpCode, "\t\"%s%s\",\n",
+ (mflag)? "m": "",name10lc(State.name));
+ (void) fprintf(FpCode, "\t\"%s\",\n", State.name);
+ (void) fprintf(FpCode, "\t&ntests,\n");
+ (void) fprintf(FpCode, "\ttet_testlist,\n");
+ if (Settings.startup)
+ (void) fprintf(FpCode, "\t%s,\n", Settings.startup);
+ else
+ (void) fprintf(FpCode, "\t0,\n");
+
+ if (Settings.cleanup)
+ (void) fprintf(FpCode, "\t%s,\n", Settings.cleanup);
+ else
+ (void) fprintf(FpCode, "\t0,\n");
+ (void) fprintf(FpCode, "};\n\n");
+ }
+
+ /*
+ * Do the TET interface variables depending on whether this
+ * is a linked binary or not.
+ */
+ if (lflag) {
+ (void) fprintf(FpCode, "extern void (*tet_startup)();\n");
+ (void) fprintf(FpCode, "extern void (*tet_cleanup)();\n");
+ } else {
+ (void) fprintf(FpCode, "void (*tet_startup)() = %s;\n"
+ , Settings.startup? Settings.startup: "startup"
+ );
+ (void) fprintf(FpCode, "void (*tet_cleanup)() = %s;\n"
+ , Settings.cleanup? Settings.cleanup: "cleanup"
+ );
+ }
+
+ /* Finish the copyright banner */
+ (void) fprintf(FpBanner, " */\n");
+
+ /*
+ * Output sub files in correct order.
+ */
+ outfile(FpBanner);
+ outfile(FpSynopsis);
+ outcopy(State.xproto? F_STDXPINCLUDE: F_STDINCLUDE);
+ outfile(FpInclude);
+ outcopy(State.xproto? F_STDXPEXTERN: F_STDEXTERN);
+ outfile(FpExtern);
+ outfile(FpCode);
+}
+
+/*
+ * Output the copyright messages, just the SCCS lines from messages other
+ * than the first are output.
+ */
+void
+mccopyright(fp, buf)
+FILE *fp;
+char *buf;
+{
+static int firsttime = 1;
+
+ while (newline(fp, buf) != NULL && !SECSTART(buf)) {
+ if (strncmp(buf, " */", 3) == 0)
+ strcpy(buf, " * \n");
+ if (firsttime || strinstr(buf, "SCCS"))
+ fputs(buf, FpBanner);
+ }
+ firsttime = 0;
+}
+
+/*
+ * A header request has been found.
+ */
+void
+mcheader(fp, buf)
+FILE *fp;
+char *buf;
+{
+char *arg;
+char *cp;
+int i;
+static int oncethrough;
+
+ Settings.tpstartup = "tpstartup";
+ Settings.tpcleanup = "tpcleanup";
+
+ /*
+ * If we have already seen a header, then just return on the
+ * assumption that the name is not changing. Otherwise
+ * it is probably an error.
+ */
+ if (oncethrough) {
+ skip(fp, buf);
+ return;
+ }
+ oncethrough = 1;
+
+ setoutline();
+ (void) fprintf(FpExtern, "\n#define T_%s\t1\n", State.name);
+ (void) fprintf(FpExtern, "%schar *TestName = \"%s\";\n\n",
+ (lflag)? "static ": "", State.name);
+
+ Nargs = 0;
+
+ while (newline(fp, buf) && !SECSTART(buf)) {
+
+ Arglines[Nargs] = mcstrdup(buf);
+ /*
+ * The type of the function must be first, followed by
+ * the arguments in the correct order.
+ */
+ if (Nargs == 0) {
+ if (strncmp(buf, "Status", strlen("Status")) == 0)
+ NeedStatus = 1;
+ if (strncmp(buf, "int", strlen("int")) == 0)
+ NeedValue = 1;
+ } else if (Nargs == 1) {
+ ; /* call */
+ } else {
+ arg = mcstrdup(buf);
+
+ /*
+ * Separate out any initialisation part of the declaration.
+ */
+ cp = strchr(arg, '=');
+ if (cp) {
+ *cp = '\0';
+ cp++;
+ while (isspace(*cp))
+ cp++;
+
+ Arginit[Nargs] = mcstrdup(cp);
+ }
+
+ /*
+ * This gets the last word in the declaration. This is often
+ * the name of the parameter being declared.
+ */
+ for (cp = strtok(arg, ARGSEP); cp; cp = strtok((char*)0, ARGSEP)) {
+ Argnames[Nargs] = cp;
+ }
+
+ /*
+ * If the first argument is a Display type then save the
+ * arg name for use in startcall() etc.
+ */
+ if (Nargs == 2 && strncmp(Arglines[Nargs], "Display", 7) == 0) {
+ Settings.display = Argnames[Nargs];
+ }
+ }
+ Nargs++;
+ }
+
+ defargnames();
+
+ /*
+ * If this is a test for a function then declare the argument variables
+ * here.
+ */
+ if (Nargs > 2)
+ (void) fprintf(FpExtern, "/*\n * Arguments to the %s %s\n */\n",
+ State.name, (mflag)? "macro": "function");
+ for (i = 2; i < Nargs; i++) {
+ (void) fprintf(FpExtern, "static ");
+ for (cp = Arglines[i]; *cp; cp++) {
+ if ((*cp == ' ' && cp[1] == '=') || *cp == '=') {
+ (void) fprintf(FpExtern, ";\n");
+ break;
+ }
+ (void) fputc(*cp, FpExtern);
+ }
+ }
+ if (Nargs > 2)
+ (void) fprintf(FpExtern, "\n\n");
+
+ if (NeedStatus)
+ (void) fprintf(FpExtern, "static int StatusReturn;\n");
+ if (NeedValue)
+ (void) fprintf(FpExtern, "static int ValueReturn;\n");
+ if (NeedStatus || NeedValue)
+ (void) fprintf(FpExtern, "\n");
+
+ if (Nargs > 2) {
+ (void) fprintf(FpCode, "/*\n * Called at the beginning of each test purpose to reset the\n * arguments to their initial values\n */\n");
+ (void) fprintf(FpCode, "static void\nsetargs()\n{\n");
+
+ for (i = 2; i < Nargs; i++) {
+ if (Arginit[i])
+ (void) fprintf(FpCode, "\t%s = %s", Argnames[i], Arginit[i]);
+ else
+ (void) fprintf(FpCode, "\t%s = 0;\n", Argnames[i]);
+ }
+ (void) fprintf(FpCode, "}\n\n");
+ }
+
+ /*
+ * Put out the routine to call that initialises the default values
+ * for the server resources for testing error funtcions.
+ */
+ if (Nargs) {
+ (void) fprintf(FpCode, "/*\n * Set the arguments to default values for error tests\n */\n");
+ (void) fprintf(FpCode, "static void\nseterrdef()\n{\n");
+ }
+
+ for (i = 2; i < Nargs; i++) {
+ static char *errdeftypes[] = {
+ "Atom",
+ "Colormap",
+ "Cursor",
+ "Drawable",
+ "Font",
+ "GC",
+ "Pixmap",
+ "Window",
+ (char*)0,
+ };
+ char **cp;
+
+ if (Arginit[i])
+ continue;
+
+ for (cp = errdeftypes; *cp; cp++) {
+ if (strncmp(Arglines[i], *cp, strlen(*cp)) == 0)
+ (void) fprintf(FpCode, "\t%s = Errdef%s;\n", Argnames[i], *cp);
+ }
+ }
+ if (Nargs)
+ (void) fprintf(FpCode, "}\n\n");
+
+ /*
+ * If this is testing a particular function then put out a
+ * synopsis in the header.
+ */
+ if (Nargs > 1) {
+ (void) fprintf(FpSynopsis, "/*\n * SYNOPSIS:\n");
+ (void) fprintf(FpSynopsis, " * %s", Arglines[0]); /* return type */
+ (void) fprintf(FpSynopsis, " * %s(", State.name);
+ for (i = 2; i < Nargs; i++) {
+ (void) fprintf(FpSynopsis, "%s%s", Argnames[i], (i == Nargs-1)? "": ", ");
+ }
+ (void) fprintf(FpSynopsis, ")\n");
+ for (i = 2; i < Nargs; i++) {
+ (void) fprintf(FpSynopsis, " * ");
+ for (cp = Arglines[i]; *cp; cp++) {
+ if ((*cp == ' ' && cp[1] == '=') || *cp == '=') {
+ (void) fprintf(FpSynopsis, ";\n");
+ break;
+ }
+ (void) fputc(*cp, FpSynopsis);
+ }
+ }
+ (void) fprintf(FpSynopsis, " */\n\n");
+ }
+}
+
+#define STRPRECMP(s1, s2) (strncmp(s1, s2, strlen(s2)))
+/*
+ * Put out defines for argnames of various types. This is for use
+ * by included tests that need to reference arguments of various
+ * types.
+ */
+defargnames()
+{
+int i;
+int atom = 0;
+int colormap = 0;
+int cursor = 0;
+int display = 0;
+int drawable = 0;
+int font = 0;
+int gc = 0;
+int pixmap = 0;
+int window = 0;
+int image = 0;
+
+ if (Nargs > 2)
+ (void) fprintf(FpDefines, "/*\n * Defines for different argument types\n */\n");
+
+ for (i = 2; i < Nargs; i++) {
+
+ /*
+ * TEMP, while I think about it.
+ * Forget lines with a '*' unless they are for display or image.
+ */
+ if (strchr(Arglines[i], '*')
+ && STRPRECMP(Arglines[i], "Display") != 0
+ && STRPRECMP(Arglines[i], "XImage") != 0)
+ continue;
+
+ if (STRPRECMP(Arglines[i], "Atom") == 0) {
+ if (atom == 0)
+ (void) fprintf(FpDefines, "#define A_ATOM %s\n", Argnames[i]);
+ atom++;
+ defargtype("A_ATOM", atom);
+ } else if (STRPRECMP(Arglines[i], "Colormap") == 0) {
+ if (colormap == 0)
+ (void) fprintf(FpDefines, "#define A_COLORMAP %s\n", Argnames[i]);
+ colormap++;
+ defargtype("A_COLORMAP", colormap);
+ } else if (STRPRECMP(Arglines[i], "Cursor") == 0) {
+ if (cursor == 0)
+ (void) fprintf(FpDefines, "#define A_CURSOR %s\n", Argnames[i]);
+ cursor++;
+ defargtype("A_CURSOR", cursor);
+ } else if (STRPRECMP(Arglines[i], "Display") == 0) {
+ if (display++ > 0) {
+ err("Too many display args\n");
+ errexit();
+ }
+ defargtype("A_DISPLAY", display);
+ (void) fprintf(FpDefines, "#define A_DISPLAY %s\n", Argnames[i]);
+ } else if (STRPRECMP(Arglines[i], "Drawable") == 0) {
+ if (drawable > 0)
+ (void) fprintf(FpDefines, "#define A_DRAWABLE%d %s\n",
+ drawable+1, Argnames[i]);
+ else
+ (void) fprintf(FpDefines, "#define A_DRAWABLE %s\n", Argnames[i]);
+ drawable++;
+ defargtype("A_DRAWABLE", drawable);
+ } else if (STRPRECMP(Arglines[i], "Font") == 0) {
+ if (font == 0)
+ (void) fprintf(FpDefines, "#define A_FONT %s\n", Argnames[i]);
+ font++;
+ defargtype("A_FONT", font);
+ } else if (STRPRECMP(Arglines[i], "GC") == 0) {
+ if (gc == 0)
+ (void) fprintf(FpDefines, "#define A_GC %s\n", Argnames[i]);
+ gc++;
+ defargtype("A_GC", gc);
+ } else if (STRPRECMP(Arglines[i], "XImage") == 0) {
+ /*
+ * At present all the files that have an image have A_IMAGE
+ * defined in the file, this is wrong. Just record that we
+ * have an arg and leave.
+ */
+ image++;
+ defargtype("A_IMAGE", image);
+ } else if (STRPRECMP(Arglines[i], "Pixmap") == 0) {
+ if (pixmap == 0)
+ (void) fprintf(FpDefines, "#define A_PIXMAP %s\n", Argnames[i]);
+ else
+ (void) fprintf(FpDefines, "#define A_PIXMAP%d %s\n", pixmap+1, Argnames[i]);
+ if (drawable > 0)
+ (void) fprintf(FpDefines, "#define A_DRAWABLE%d %s\n",
+ drawable+1, Argnames[i]);
+ else
+ (void) fprintf(FpDefines, "#define A_DRAWABLE %s\n", Argnames[i]);
+ drawable++;
+ defargtype("A_DRAWABLE", drawable);
+ pixmap++;
+ defargtype("A_PIXMAP", pixmap);
+ } else if (STRPRECMP(Arglines[i], "Window") == 0) {
+ if (window == 0)
+ (void) fprintf(FpDefines, "#define A_WINDOW %s\n", Argnames[i]);
+ else
+ (void) fprintf(FpDefines, "#define A_WINDOW%d %s\n", window+1, Argnames[i]);
+ if (drawable > 0)
+ (void) fprintf(FpDefines, "#define A_DRAWABLE%d %s\n",
+ drawable+1, Argnames[i]);
+ else
+ (void) fprintf(FpDefines, "#define A_DRAWABLE %s\n", Argnames[i]);
+ drawable++;
+ defargtype("A_DRAWABLE", drawable);
+ window++;
+ defargtype("A_WINDOW", window);
+ }
+ }
+ (void) fprintf(FpDefines, "\n\n");
+}
+
+/*
+ * An assertion has been found. Place it as a comment in the source.
+ */
+void
+mcassertion(fp, buf)
+FILE *fp;
+char *buf;
+{
+char **cpp;
+
+ if (State.type == NULL) {
+ err("Missing type\n");
+ State.type = "Good";
+ }
+ if (State.category == CAT_NONE) {
+ err("Missing category\n");
+ State.category = CAT_A;
+ }
+
+ for (cpp = validtypes; *cpp; cpp++) {
+ if (strcmp(State.type, *cpp) == 0)
+ break;
+ }
+ if (*cpp == NULL) {
+ err("Unrecognised assertion type");
+ fprintf(stderr, " (%s)\n", State.type);
+ errexit();
+ }
+
+ (void) fprintf(FpCode, "/*\n * ");
+ (void) fprintf(FpCode, "Assertion %s-%d.(%c)\n", State.name,
+ State.assertion, State.category);
+
+ Testnum++;
+ Ictype[Testnum] = mcstrdup(State.type);
+ Icnum[Testnum] = State.assertion;
+
+ if (State.category == CAT_B || State.category == CAT_D) {
+ if (State.reason == NULL) {
+ err("Missing or invalid reason code for assertion\n");
+ State.reason = "No reason code supplied";
+ }
+
+ (void) fprintf(FpCode, " * Reason: %s\n", State.reason);
+ }
+ (void) fprintf(FpCode, " * ");
+
+ assertfill(fp, buf, FpCode, " * ");
+ (void) fprintf(FpCode, "\n */\n");
+
+}
+
+/*
+ * Write out the assertion, filling lines.
+ */
+assertfill(fp, buf, outfp, prefix)
+FILE *fp;
+char *buf;
+FILE *outfp;
+char *prefix;
+{
+register int assertpos;
+register char *tok;
+int oldpos;
+int inmacro; /* inmacro is set to the 'depth' of the macro */
+int needscrunch;
+char *endl;
+
+ assertpos = 0;
+ while (newline(fp, buf) != NULL && !SECSTART(buf)) {
+ inmacro = 0;
+ needscrunch = 0;
+ endl = strchr(buf, '\n');
+ for (tok = strtok(buf, NRSEPS); tok; tok = strtok((char*)0, NRSEPS)) {
+
+ if (endl && tok > endl) {
+ endl = strchr(tok+strlen(tok)+1, '\n');
+ inmacro = 0;
+ needscrunch = 0;
+ }
+
+ /*
+ * The .tL macro is used for simple tables. We don't want
+ * to print them out though.
+ */
+ if (strcmp(tok, ".tL") == 0) {
+ break; /* ie. skip this line altogether. */
+#if 0
+ (void) fprintf(outfp, "\n%s", prefix);
+ assertpos = 0;
+ inmacro = 1;
+#endif
+ }
+
+ /*
+ * Throw out nroff dot commands.
+ */
+ if (*tok == '.' && (strlen(tok) == 2 || strlen(tok) == 3)) {
+ inmacro = 1;
+ if (strlen(tok) == 2) {
+ switch (tok[1]) {
+ case 'S': case 'F':
+ case 'M': case 'A':
+ needscrunch = 1;
+ break;
+ }
+ }
+ continue;
+ }
+
+ /*
+ * Strip off any nroffisms.
+ */
+ roffstrip(tok, inmacro);
+
+ oldpos = assertpos;
+ /* Plus 1 for the space */
+ assertpos += strlen(tok) + 1;
+ if (assertpos > ASLENGTH && !joinpunct(*tok)) {
+ assertpos = strlen(tok);
+ (void) fprintf(outfp, "\n%s", prefix);
+ } else if (oldpos > 0 && needscrunch < 2 && !joinpunct(*tok))
+ (void) fputc(' ', outfp);
+ (void) fprintf(outfp, "%s", tok);
+ if (needscrunch)
+ needscrunch++;
+ }
+ }
+ return(0);
+}
+
+/*
+ * Strip nroff backslash constructions from the token.
+ */
+static void
+roffstrip(intok, macro)
+char *intok;
+int macro;
+{
+char *pos;
+char *tok;
+
+ while (macro-- >= 0) {
+ tok = intok;
+ for (pos = tok; *pos; pos++) {
+ if (*pos == '\\') {
+ pos++;
+ switch (*pos) {
+ case 'f':
+ if (pos[1] == '(')
+ pos += 4;
+ else
+ pos += 2;
+ break;
+ }
+ }
+ *tok++ = *pos;
+ }
+ *tok = '\0';
+ }
+}
+
+/*
+ * If the arg is punctuation that should be attatched to the preceeding
+ * word then return 1, else 0.
+ */
+joinpunct(c)
+int c;
+{
+ if (strchr("!)+}]?/,.", c))
+ return 1;
+ else
+ return 0;
+}
+
+void
+mcstrategy(fp, buf)
+FILE *fp;
+char *buf;
+{
+ if (!sflag) {
+ skip(fp, buf);
+ return;
+ }
+
+ (void) fprintf(FpCode, "/*****\n * *** STRATEGY:\n");
+ while (newline(fp, buf) != NULL && !SECSTART(buf)) {
+ (void) fprintf(FpCode, " * %s", buf);
+ }
+ (void) fprintf(FpCode, " ****/\n");
+}
+
+void
+mccode(fp, buf)
+FILE *fp;
+register char *buf;
+{
+int indecs = 1;
+
+ /*
+ * Get the expected error type.
+ */
+ (void)strtok(buf, SEPS);
+ ExpectError = mcstrdup(strtok((char*)0, SEPS));
+ /* This (the event bit) may go away since it is not used */
+ if (ExpectError == NULL || strcmp(ExpectError, "event") == 0)
+ ExpectError = "Success";
+
+ funcstart();
+ while (newline(fp, buf) != NULL && !SECSTART(buf)) {
+ /*
+ * As a temporary measure we assume that a blank line
+ * signals the end of the declarations.
+ */
+ if (indecs && (*buf == '\0' || *buf == '\n')) {
+ indecs = 0;
+ setoutline();
+ (void) fprintf(FpCode, "int pass = 0, fail = 0;\n");
+ (void) fprintf(FpCode, "\n %s();\n", Settings.tpstartup);
+ if (Nargs > 2)
+ (void) fprintf(FpCode, " setargs();\n");
+ if (Settings.beginfunc)
+ (void) fprintf(FpCode, " %s();\n", Settings.beginfunc);
+ NeedTpcleanup = 1;
+ Resyncline = 1;
+ }
+ setline(FpCode);
+
+ /*
+ * Check for the special symbol XCALL which signals that
+ * the call setup and cleanup procedure should be output.
+ */
+ if (strinstr(buf, XCALLSYM) != NULL) {
+ doxcall(FpCode, buf);
+ } else {
+ fputs(buf, FpCode);
+ }
+ }
+
+ setoutline();
+ funcend();
+}
+
+void
+mcexterncode(fp, buf)
+FILE *fp;
+char *buf;
+{
+ ExpectError = "Success";
+ Resyncline = 1;
+ while (newline(fp, buf) != NULL && !SECSTART(buf)) {
+ setline(FpExtern);
+ /*
+ * Check for the special symbol XCALL which signals that
+ * the call setup and cleanup procedure should be output.
+ */
+ if (strinstr(buf, XCALLSYM) != NULL) {
+ doxcall(FpExtern, buf);
+ } else {
+ fputs(buf, FpExtern);
+ }
+ }
+
+ (void) fputc('\n', FpExtern);
+
+}
+
+funcstart()
+{
+
+ (void) fprintf(FpCode, "%svoid\nt%03d()\n{\n", (dflag)?"" : "static ", State.assertion);
+ NeedTpcleanup = 0;
+ Resyncline = 1;
+}
+
+funcend()
+{
+ if (NeedTpcleanup && Settings.endfunc)
+ (void) fprintf(FpCode, "\t%s();\n", Settings.endfunc);
+ if (NeedTpcleanup) {
+ (void) fprintf(FpCode, "\t%s();\n", Settings.tpcleanup);
+ (void) fprintf(FpCode, "\tpfcount(pass, fail);\n");
+ }
+ (void) fprintf(FpCode, "}\n\n");
+}
+
+
+doxcall(fp, buf)
+FILE *fp;
+char *buf;
+{
+char prefix[PRELEN];
+register char *pp;
+register char *cp;
+register int i;
+int insertstat = 0;
+int insertval = 0;
+
+ setoutline();
+ pp = prefix;
+ for (cp = buf; isspace(*cp); cp++)
+ *pp++ = *cp;
+
+ *pp++ = '\0';
+ if (ExpectError == NULL)
+ ExpectError = "Success";
+
+ fputs(prefix, fp);
+ if (Settings.display)
+ (void) fprintf(fp, "startcall(%s);\n", Settings.display);
+ else
+ fputs("startcall(Dsp);\n", fp);
+ (void) fprintf(fp, "%sif (isdeleted())\n%s\treturn;\n",
+ prefix, prefix);
+
+ setline(fp);
+ /*
+ * Substitute the string XCALL with the call to the function
+ */
+ cp = strinstr(cp, XCALLSYM);
+ *cp = '\0';
+ fputs(buf, fp);
+
+ /*
+ * If there is no equals sign before the XCALL then we insert our
+ * own status checking. If there is one then it is assumed that
+ * you are doing your own checking, so mc stays out the way.
+ */
+ if (NeedStatus && strchr(buf, '=') == NULL) {
+ insertstat = 1;
+ fputs("StatusReturn = ", fp);
+ }
+ /* Also check for casts (to void) for return values */
+ if (NeedValue && strchr(buf, '=') == NULL && strchr(buf, '(') == NULL) {
+ insertval = 1;
+ fputs("ValueReturn = ", fp);
+ }
+ (void) fprintf(fp, "%s(", State.name);
+ for (i = 2; i < Nargs; i++) {
+ (void) fprintf(fp, "%s%s", Argnames[i], (i == Nargs-1)? "": ", ");
+ }
+ (void) fprintf(fp, ")");
+ cp += strlen(XCALLSYM);
+ fputs(cp, fp);
+
+ setoutline();
+
+ if (Settings.needgcflush)
+ (void) fprintf(fp, "%sgcflush(A_DISPLAY, A_GC);\n", prefix);
+ if (Settings.display)
+ (void) fprintf(fp, "%sendcall(%s);\n", prefix, Settings.display);
+ else
+ (void) fprintf(fp, "%sendcall(Dsp);\n", prefix);
+
+ /*
+ * If we are generating code to check for the Status return, then
+ * check for true or false depending on whether the test was declared
+ * to be 'Good' or 'Bad'. If failreturn is set then return
+ * on failure. Also need to use tpcleanup if returning.
+ */
+ if (insertstat) {
+ (void) fprintf(fp, "%sif (StatusReturn %s 0) {\n", prefix,
+ (strcmp(Ictype[Testnum], "Good") == 0)? "==": "!=");
+ (void) fprintf(fp, "%s\treport(\"Status returned was %%d\", StatusReturn);\n",
+ prefix);
+ (void) fprintf(fp, "%s\tFAIL;\n", prefix);
+ if (Settings.failreturn) {
+ if (NeedTpcleanup && Settings.endfunc)
+ (void) fprintf(fp, "%s\t%s();\n", prefix, Settings.endfunc);
+ if (NeedTpcleanup)
+ (void) fprintf(fp, "%s\t%s();\n", prefix, Settings.tpcleanup);
+ (void) fprintf(fp, "%s\treturn;\n", prefix);
+ }
+ (void) fprintf(fp, "%s}\n", prefix);
+ }
+
+ /* As above, but for a value return */
+ if (insertval && Settings.valreturn && *Settings.valreturn) {
+ (void) fprintf(fp, "%sif (ValueReturn != %s) {\n", prefix,
+ Settings.valreturn);
+ (void) fprintf(fp,
+ "%s\treport(\"Returned value was %%d, expecting %s\", ValueReturn);\n"
+ , prefix, Settings.valreturn);
+ (void) fprintf(fp, "%s\tFAIL;\n", prefix);
+ if (Settings.failreturn) {
+ if (NeedTpcleanup && Settings.endfunc)
+ (void) fprintf(fp, "%s\t%s();\n", prefix, Settings.endfunc);
+ if (NeedTpcleanup)
+ (void) fprintf(fp, "%s\t%s();\n", prefix, Settings.tpcleanup);
+ (void) fprintf(fp, "%s\treturn;\n", prefix);
+ }
+ (void) fprintf(fp, "%s}\n", prefix);
+ }
+
+ /*
+ * If wanted check the error status.
+ */
+ if (Settings.noerrcheck == 0) {
+ (void) fprintf(fp, "%sif (geterr() != %s) {\n", prefix, ExpectError);
+ (void) fprintf(fp, "%s\treport(\"Got %%s, Expecting %s\", errorname(geterr()));\n", prefix, ExpectError);
+ (void) fprintf(fp, "%s\tFAIL;\n", prefix);
+ if (Settings.failreturn) {
+ if (NeedTpcleanup && Settings.endfunc)
+ (void) fprintf(fp, "%s\t%s();\n", prefix, Settings.endfunc);
+ if (NeedTpcleanup)
+ (void) fprintf(fp, "%s\t%s();\n", prefix, Settings.tpcleanup);
+ (void) fprintf(fp, "%s\treturn;\n", prefix);
+ }
+ (void) fprintf(fp, "%s}\n", prefix);
+ }
+
+ /* These settings only apply for one xcall */
+ Settings.noerrcheck = 0;
+}
+
+
+void
+mcdefassertion(fp, buf)
+FILE *fp;
+char *buf;
+{
+ mcassertion(fp, buf);
+ funcstart();
+ fprintf(FpCode, "\treport(\"The assertion is descriptive or is tested elsewhere.\");\n");
+ fprintf(FpCode, "\ttet_result(TET_NOTINUSE);\n");
+ funcend();
+}
+
+/*
+ * Start and end included files. Don't clutter up the output by
+ * printing when temporary files are being included.
+ */
+void
+mcincstart(buf)
+char *buf;
+{
+ if (strcmp(buf+strlen(buf)-4, ".tmc") != 0)
+ (void) fprintf(FpCode, "/* Including from file %s */\n", buf);
+}
+
+void
+mcincend(buf)
+char *buf;
+{
+ if (strcmp(buf+strlen(buf)-4, ".tmc") != 0)
+ (void) fprintf(FpCode, "/* End of included file %s */\n\n", buf);
+}
+
+static void
+setline(fp)
+FILE *fp;
+{
+static int lastline;
+
+ if (pflag) {
+ if (Resyncline || lastline+1 != Lineno) {
+ (void) fprintf(fp, "#line %d \"%s\"\n",
+ Lineno, Filename? Filename: "stdin");
+ Resyncline = 0;
+ }
+ lastline = Lineno;
+ }
+}
+
+static void
+setoutline()
+{
+ if (pflag) {
+ (void) fprintf(FpCode, ">>G\n");
+ Resyncline = 1;
+ }
+}
diff --git a/xc/test/xsuite/xtest/src/bin/mc/cond.c b/xc/test/xsuite/xtest/src/bin/mc/cond.c
new file mode 100644
index 000000000..8e0159ba2
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/cond.c
@@ -0,0 +1,179 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+
+/*
+ * Filter out a limited number of conditional constructs from the
+ * source. We attempt only to remove the conditionals that are
+ * designed for the included files, to make them work with different
+ * functions.
+ *
+ * Only recognise:
+ * #ifdef A_<argtype>
+ * and
+ * #if T_<name> [ || T_<name2> ]
+ * Where argtype is WINDOW, PIXMAP etc. and name is the fuction name.
+ * The '#' must be in column 1.
+ *
+ * This makes the resulting C file less a little less cumbersome. All
+ * other defines are left alone. (This is not meant to replace
+ * the C pre-processor...).
+ */
+
+#include <stdio.h>
+#include "mc.h"
+
+int Outputon = 1;
+
+#define MAXLEV 30 /* Not a real max -- just give up at this point */
+static int offlevel;
+static int level;
+static int uselev[MAXLEV] = {
+ 1};
+
+#define MAXDEF 64 /* Max number of defines */
+static char *deftbl[MAXDEF];
+static int defind;
+static char *knownargs[] = {
+ "A_DRAWABLE",
+ "A_DRAWABLE2",
+ "A_WINDOW",
+ "A_WINDOW2",
+ "A_PIXMAP",
+ "A_IMAGE",
+};
+
+extern struct state State;
+
+#define False 0
+#define True 1
+
+hashcmd(buf)
+char *buf;
+{
+ if (strncmp(buf, "#if", 3) == 0)
+ return doif(buf);
+ else if (strncmp(buf, "#else", 5) == 0)
+ return doelse();
+ else if (strncmp(buf, "#endif", 6) == 0)
+ return doendif();
+ return True;
+}
+
+doif(buf)
+char *buf;
+{
+char *line;
+char *tok;
+int known;
+int foundtrue;
+char *strtok();
+int i;
+
+ level++;
+
+ line = mcstrdup(buf);
+ known = False;
+ foundtrue = False;
+
+ tok = strtok(line, " \t");
+ if (strcmp(tok, "#if") == 0) {
+
+ while ((tok = strtok((char*)0, " \t\n()")) != 0) {
+ if (strcmp(tok, "||") == 0)
+ ;
+ else if (strcmp(tok, "defined") == 0)
+ ;
+ else if (tok[0] == 'T' && tok[1] == '_' && tok[2] == 'X') {
+ if (strcmp(tok+2, State.name) == 0)
+ foundtrue = True;
+ known = True;
+ } else {
+ known = False;
+ break;
+ }
+ }
+ } else if (defind && strcmp(tok, "#ifdef") == 0) {
+ tok = strtok((char*)0, " \t\n");
+ if (tok[0] == 'A' && tok[1] == '_') {
+ for (i = 0; i < NELEM(knownargs); i++) {
+ if (strcmp(knownargs[i], tok) == 0)
+ known = True;
+ }
+ for (i = 0; i < defind; i++) {
+ if (strcmp(deftbl[i], tok) == 0)
+ foundtrue = True;
+ }
+ }
+ } else {
+ uselev[level] = False;
+ }
+ uselev[level] = known;
+ if (offlevel == 0 && known && foundtrue == False) {
+ Outputon = 0;
+ offlevel = level;
+ }
+
+ return (known)? False: True;
+}
+
+doelse()
+{
+
+ if (uselev[level]) {
+ if (offlevel == 0) {
+ Outputon = 0;
+ offlevel = level;
+ } else if (offlevel == level) {
+ Outputon = 1;
+ offlevel = 0;
+ }
+ return(False);
+ }
+ return(True);
+}
+
+doendif()
+{
+ if (uselev[level]) {
+ if (offlevel == level) {
+ Outputon = 1;
+ offlevel = 0;
+ }
+ }
+ level--;
+ return(!uselev[level+1]);
+}
+
+/*
+ * Called to record the fact that the function has a particualar type
+ * of argument, ie it uses a window or pixmap etc.
+ */
+void
+defargtype(name, num)
+char *name;
+int num;
+{
+char buf[64];
+
+ if (num > 1) {
+ sprintf(buf, "%s%d", name, num);
+ name = buf;
+ }
+ deftbl[defind++] = mcstrdup(name);
+}
diff --git a/xc/test/xsuite/xtest/src/bin/mc/error.c b/xc/test/xsuite/xtest/src/bin/mc/error.c
new file mode 100644
index 000000000..81ebaa616
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/error.c
@@ -0,0 +1,231 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+
+
+#include <stdio.h>
+
+#include "mc.h"
+
+extern struct state State;
+
+static char *elist[] = {
+ "Access grab", "EAcc1.mc",
+ "Access colormap-free", "EAcc2.mc",
+ "Access colormap-store", "EAcc3.mc",
+ "Access acl", "EAcc4.mc",
+ "Access select", "EAcc5.mc",
+ "Alloc", "EAll.mc",
+ "Atom", "EAto.mc",
+ "Color", "ECol.mc",
+ "Cursor", "ECur.mc",
+ "Drawable", "EDra.mc",
+ "Font bad-fontable", "EFon2.mc",
+ "Font bad-font", "EFon1.mc",
+ "GC", "EGC.mc",
+ "Match inputonly", "EMat1.mc",
+ "Match gc-drawable-depth", "EMat2.mc",
+ "Match gc-drawable-screen", "EMat3.mc",
+ "Match wininputonly", "EMat4.mc",
+ "Name font", "ENam1.mc",
+ "Name colour", "ENam2.mc",
+ "Pixmap", "EPix.mc",
+ "Value", "EVal.mc",
+ "Window", "EWin.mc",
+ (char*)0
+};
+
+#define MAXALTS 128
+
+static char errfile[32];
+static char *Alts[MAXALTS];
+static int Nalts;
+
+errtext(buf)
+char *buf;
+{
+char **mp;
+char *savline;
+char *type;
+char *strtok();
+static char *sep = " ,\t";
+
+ State.err = ER_NORM;
+
+ type = buf+3;
+ if (type[strlen(type)-1] == '\n')
+ type[strlen(type)-1] = '\0';
+
+ while (type[0] == ' ' || type[0] == '\t')
+ type++;
+
+ /* Skip over any initial 'Bad' */
+ if (strncmp(type, "Bad", 3) == 0)
+ type += 3;
+
+ for (mp = elist; *mp; mp++) {
+ if (strncmp(*mp, type, strlen(*mp)) == 0)
+ break;
+ }
+
+ if (*mp == NULL) {
+ err("Bad .ER error code");
+ (void) fprintf(stderr, " (%s)\n", type);
+ errexit();
+ }
+
+
+ /*
+ * This is only used on BadPixmap etc. but we do it for all.
+ */
+ savline = mcstrdup(type);
+ Alts[0] = strtok(savline, sep);
+ for (Nalts = 1; Nalts < MAXALTS; Nalts++) {
+ if ((Alts[Nalts] = strtok((char*)0, sep)) == NULL)
+ break;
+ }
+
+ (void) strcpy(errfile, "error/");
+ (void) strcat(errfile, *(mp+1));
+
+ /* BadValue is a special case to be dealt with */
+ if (strncmp(type, "Value", 5) == 0) {
+ valerror(buf);
+ } else {
+ State.abortafter = 1;
+ includefile(errfile, buf);
+ }
+}
+
+static int wasmasktype;
+
+valerror(buf)
+char *buf;
+{
+int i;
+FILE *fp;
+
+ State.err = ER_VALUE;
+
+ fp = cretmpfile(F_TVAL);
+
+ (void) fprintf(fp, ">>ASSERTION Bad A\n");
+ (void) fprintf(fp, "When the value of\n.A %s\n", Alts[1]);
+
+ i = 2;
+ if (strcmp(Alts[i], "mask") == 0) {
+ wasmasktype = 1;
+ i++;
+ } else
+ wasmasktype = 0;
+
+ if (wasmasktype)
+ (void) fprintf(fp, "is not a bitwise combination of\n");
+ else
+ (void) fprintf(fp, "is other than\n");
+
+ for (; i < Nalts; i++) {
+ (void) fprintf(fp, ".S %s", Alts[i]);
+ if (i == Nalts-2)
+ (void) fprintf(fp, "%s", "\nor\n");
+ else
+ (void) fprintf(fp, "%s", " ,\n");
+ }
+
+ (void) fprintf(fp, "then a\n.S BadValue\nerror occurs.\n");
+
+ (void) fprintf(fp, ">>EXTERN\n\n");
+ (void) fprintf(fp, "/* Value list for use in test t%03d */\n", State.assertion+1);
+ (void) fprintf(fp, "static %s %svallist[] = {\n",
+ wasmasktype? "unsigned long": "int ", Alts[1]);
+
+
+ for (i = (wasmasktype)? 3: 2; i < Nalts; i++) {
+ (void) fprintf(fp, "\t%s,\n", Alts[i]);
+ }
+
+ (void) fprintf(fp, "};\n\n");
+ (void) fclose(fp);
+
+ includefile(F_TVAL, buf);
+}
+
+valerrdefs()
+{
+char line[MAXLINE];
+
+ /*
+ * Do the define bits.
+ */
+ line[0] = '\0';
+ (void) strcat(line, "#undef\tVALUE_ARG\n");
+ (void) sprintf(line+strlen(line), "#define\tVALUE_ARG %s\n", Alts[1]);
+ (void) strcat(line, "#undef\tVALUE_LIST\n");
+ (void) sprintf(line+strlen(line), "#define\tVALUE_LIST %svallist\n", Alts[1]);
+ (void) sprintf(line+strlen(line), "#undef NOTMEMTYPE\n");
+ (void) sprintf(line+strlen(line), "#define NOTMEMTYPE %s\n",
+ (wasmasktype)? "unsigned": "");
+ (void) strcat(line, "#undef\tNOTMEMBER\n");
+ if (wasmasktype)
+ (void) strcat(line, "#define\tNOTMEMBER notmaskmember\n");
+ else
+ (void) strcat(line, "#define\tNOTMEMBER notmember\n");
+
+ putbackline(line);
+}
+
+
+/*
+ * List out all the alternatives that have been defined for this error.
+ * This allows you to do things like 'a valid Pixmap or None'.
+ */
+erralternates(out)
+char *out;
+{
+int i;
+char *word;
+
+ *out = '\0';
+ for (i = 0; i < Nalts; i++) {
+ word = Alts[i];
+ (void) strcat(out, word);
+
+ if (i < Nalts-2)
+ (void) strcat(out, ",\n.S ");
+ if (i == Nalts-2)
+ (void) strcat(out, "\nor\n.S ");
+ }
+ if (Nalts > 1)
+ (void) strcat(out, " ");
+ (void) strcat(out, ",\n");
+
+ return(strlen(out));
+}
+
+/*
+ * If there has not been any user supplied code then use the default
+ * error code in the file.
+ */
+errcode(bp)
+char *bp;
+{
+ if (State.err != ER_VALUE)
+ State.skipsec = 2;
+ includefile(errfile, bp);
+}
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/expand.c b/xc/test/xsuite/xtest/src/bin/mc/expand.c
new file mode 100644
index 000000000..8b01c6c21
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/expand.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+
+#include "stdio.h"
+#include "mc.h"
+
+#define F_BANNER "mepbanner.tmc"
+#define F_EXPAND "mepexpand.tmc"
+
+static FILE *FpBanner;
+static FILE *FpExp;
+
+void
+mepcopyright(fp, buf)
+FILE *fp;
+char *buf;
+{
+static int firsttime = 1;
+
+ while (newline(fp, buf) != NULL && !SECSTART(buf)) {
+ if (strncmp(buf, " */", 3) == 0)
+ strcpy(buf, " * \n");
+ if (firsttime || strinstr(buf, "SCCS"))
+ fputs(buf, FpBanner);
+ }
+ firsttime = 0;
+}
+
+void
+mepecho(fp, buf)
+FILE *fp;
+char *buf;
+{
+ echo(fp, buf, FpExp);
+}
+
+/* Hooks */
+/*ARGSUSED*/
+void
+mepstart(buf)
+char *buf;
+{
+ FpExp = cretmpfile(F_EXPAND);
+ FpBanner = cretmpfile(F_BANNER);
+}
+
+/*ARGSUSED*/
+void
+mepend(buf)
+char *buf;
+{
+ (void) fprintf(FpBanner, " */\n");
+ outfile(FpBanner);
+ outfile(FpExp);
+ fclose(FpExp);
+}
+
+void
+mepset(buf)
+char *buf;
+{
+ fprintf(FpExp, ">>SET %s", buf);
+}
+
+void
+mepcomment(buf)
+char *buf;
+{
+ fprintf(FpExp, "%s", buf);
+}
diff --git a/xc/test/xsuite/xtest/src/bin/mc/files.c b/xc/test/xsuite/xtest/src/bin/mc/files.c
new file mode 100644
index 000000000..356b969e7
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/files.c
@@ -0,0 +1,259 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+
+#include "stdio.h"
+#include "mc.h"
+
+#define MC_LOC "/xtest/lib/"
+
+extern char *getenv();
+extern char *Filename;
+extern int Lineno;
+
+static int Filenum;
+static char *Filetemp[50];
+static int Filetind;
+
+FILE *opencopy();
+
+/*
+ * Open the first source file.
+ */
+FILE *
+nextfile(sources)
+struct mclist *sources;
+{
+FILE *fp;
+static int firsttime = 1;
+
+ Lineno = 0;
+ if ((Filename = getmclistitem(sources, Filenum++)) == NULL) {
+ if (firsttime)
+ fp = stdin;
+ else
+ fp = NULL;
+ } else {
+ if ((fp = fopen(Filename, "r")) == NULL) {
+ (void) fprintf(stderr, "Could not open %s\n", Filename);
+ errexit();
+ }
+ }
+
+ firsttime = 0;
+ return(fp);
+}
+
+/*
+ * Copy the contents of the corresponding skeleton file to the output.
+ * The skeleton files have a .mc suffix.
+ */
+void
+outcopy(file)
+char *file;
+{
+register FILE *fp;
+char buf[BUFSIZ];
+
+ /*
+ * Look for a corresponding file with name lib/mc/*.mc .
+ */
+ (void) sprintf(buf, "mc/%s", file);
+ file = buf;
+ if (strcmp(file+strlen(file)-3, ".mc") != 0) {
+ /*
+ * For debugging only -- there is an error in the file name
+ * conventions.
+ */
+ fprintf(stderr, "Internal error outcopy file does not end in .mc\n");
+ }
+
+ if ((fp = fopen(mcpath(file), "r")) != NULL) {
+ outfile(fp);
+ fclose(fp);
+ } else {
+ fprintf(stderr, "Could not open skeleton file %s\n", mcpath(file));
+ errexit();
+ /*NOTREACHED*/
+ }
+}
+
+/*
+ * Create a temporary file with the given name. Open a stream to it
+ * and return the stream pointer.
+ */
+FILE *
+cretmpfile(file)
+char *file;
+{
+register FILE *fp;
+
+ if ((fp = fopen(file, "w+")) == NULL) {
+ (void) fprintf(stderr, "Could not open %s\n", file);
+ errexit();
+ }
+ filetemp(file);
+ return(fp);
+}
+
+
+/*
+ * Combine all the files in the right order onto
+ * stdout.
+ */
+outfile(fp)
+FILE *fp;
+{
+static FILE *fout;
+static int olineno = 0;
+static char *ofilename;
+char buf[BUFSIZ];
+register int n;
+extern char *OutFile;
+extern int pflag;
+extern int Cmdname;
+
+ if (!fout) {
+ if (OutFile) {
+ if ((fout = fopen(OutFile, "w")) == NULL) {
+ (void) fprintf(stderr, "Could not open %s for output\n", OutFile);
+ errexit();
+ }
+ ofilename = OutFile;
+ } else {
+ fout = stdout;
+ ofilename = "stdout";
+ }
+ }
+
+ rewind(fp);
+
+ if (pflag && Cmdname == CMD_MC) {
+ while (fgets(buf, BUFSIZ, fp) != NULL) {
+ olineno++;
+ if (buf[0] == '>' && buf[1] == '>' && buf[2] == 'G')
+ (void) sprintf(buf, "#line %d \"%s\"\n", olineno+1, ofilename);
+ fputs(buf, fout);
+ }
+ } else {
+ while ((n = fread(buf, sizeof(char), BUFSIZ, fp)) > 0)
+ (void) fwrite(buf, n, 1, fout);
+ }
+}
+
+remfiles()
+{
+int i;
+
+ for (i = 0; i < Filetind; i++)
+ (void) unlink(Filetemp[i]);
+ Filetind = 0;
+}
+
+includefile(file, bp)
+char *file;
+char *bp;
+{
+char *name;
+char *savline;
+char *savfilename;
+char *path;
+char *strtok();
+FILE *fp;
+int savlineno;
+
+ savline = mcstrdup(bp);
+ file = mcstrdup(file);
+
+ name = strtok(file, " \t\n");
+ if (name == (char*)0) {
+ err("Missing file name on include directive\n");
+ errexit();
+ }
+
+ if ((fp = fopen(name, "r")) == NULL) {
+ path = mcpath(name);
+ if ((fp = fopen(path, "r")) == NULL) {
+ err("");
+ (void) fprintf(stderr, "Cannot open include file %s\n", name);
+ errexit();
+ }
+ }
+
+ savfilename = Filename;
+ savlineno = Lineno;
+ Filename = name;
+ Lineno = 0;
+
+ dohook(name, HOOK_INCSTART);
+ dosections(fp, bp);
+ (void) fclose(fp);
+ dohook(name, HOOK_INCEND);
+
+ Filename = savfilename;
+ Lineno = savlineno;
+
+ strcpy(bp, savline);
+ free(savline);
+ free(file);
+}
+
+/*
+ * Mark the file name for deletion at the end.
+ */
+void
+filetemp(name)
+char *name;
+{
+int i;
+
+ for (i = 0; i < Filetind; i++) {
+ if (strcmp(Filetemp[i], name) == 0)
+ return;
+ }
+ Filetemp[Filetind++] = name;
+}
+
+/*
+ * Return path name of file in the xtest lib directory.
+ */
+char *
+mcpath(file)
+char *file;
+{
+char *rp;
+char *path;
+int size;
+
+ rp = getenv("TET_ROOT");
+ if (rp == NULL) {
+ (void) fprintf(stderr, "TET_ROOT not set in environment\n");
+ errexit();
+ }
+ size = strlen(rp)+strlen(MC_LOC)+strlen(file)+1;
+ path = (char *)malloc((unsigned)size);
+ if (path == NULL) {
+ (void) fprintf(stderr, "Out of memory\n");
+ errexit();
+ }
+ (void) strcpy(path, rp);
+ (void) strcat(path, MC_LOC);
+ (void) strcat(path, file);
+
+ return(path);
+}
diff --git a/xc/test/xsuite/xtest/src/bin/mc/gccomps.c b/xc/test/xsuite/xtest/src/bin/mc/gccomps.c
new file mode 100644
index 000000000..64dc16e84
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/gccomps.c
@@ -0,0 +1,93 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+
+
+#include <stdio.h>
+#include <string.h>
+
+#include "mc.h"
+
+static struct gclookup {
+ char *gccompname;
+ char *include;
+} gclookup[] = {
+ /*
+ * Note: If there are gccompname's that are initial strings of others
+ * then they must be afterwards.
+ */
+ {"function", "function"},
+ {"plane-mask", "plane-mask"},
+ {"foreground", "foreground"},
+ {"background", "background"},
+ {"line-width", "line-width"},
+ {"line-style", "line-style"},
+ {"cap-style", "cap-style"},
+ {"join-style", "join-style"},
+ {"fill-style", "fill-style"},
+ {"fill-rule", "fill-rule"},
+ {"arc-mode", "arc-mode"},
+ {"tile-stipple-x-origin", "ts-x-origin"},
+ {"tile-stipple-y-origin", "ts-y-origin"},
+ {"ts-x-origin", "ts-x-origin"},
+ {"ts-y-origin", "ts-y-origin"},
+ {"tile", "tile"},
+ {"stipple", "stipple"},
+ {"font", "font"},
+ {"subwindow-mode", "subwindow-mode"},
+ {"graphics-exposures", "graphics-exposures"},
+ {"clip-x-origin", "clip-x-origin"},
+ {"clip-y-origin", "clip-y-origin"},
+ {"clip-mask", "clip-mask"},
+ {"dash-offset", "dash-offset"},
+ {"dash-list", "dash-list"},
+ {"dashes", "dash-list"},
+};
+
+#define NGCCOMP (sizeof(gclookup)/sizeof(struct gclookup))
+
+gccomps(fp, buf)
+FILE *fp;
+char *buf;
+{
+struct gclookup *lp;
+char *cp;
+
+ while (newline(fp, buf) != NULL && !SECSTART(buf)) {
+ if (strncmp(buf, ".M", 2) != 0)
+ continue;
+
+ cp = buf+3;
+ while (*cp && *cp == ' ' || *cp == '\t')
+ cp++;
+
+ for (lp = gclookup; lp < gclookup+NGCCOMP; lp++) {
+ if (strncmp(cp, lp->gccompname, strlen(lp->gccompname)) == 0)
+ break;
+ }
+
+ if (lp == gclookup+NGCCOMP) {
+ err("");
+ (void) fprintf(stderr, "Unrecognised gc component name %s\n", cp);
+ errexit();
+ }
+
+ (void) sprintf(buf, "gc/%.9s.mc\n", lp->include);
+ includefile(buf, buf);
+ }
+}
diff --git a/xc/test/xsuite/xtest/src/bin/mc/ma.c b/xc/test/xsuite/xtest/src/bin/mc/ma.c
new file mode 100644
index 000000000..b0de28933
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/ma.c
@@ -0,0 +1,133 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+
+#include "stdio.h"
+#include "string.h"
+
+char *strtok();
+
+#include "mc.h"
+
+extern struct state State;
+extern int hflag;
+extern int sflag;
+
+#define F_BANNER "mabanner.tmc"
+#define F_STDHEADER "maheader.mc"
+#define F_HEADER "maheader.tmc"
+#define F_TEXT "matext.tmc"
+
+static FILE *FpBanner;
+static FILE *FpHeader;
+static FILE *FpText;
+
+void
+macopyright(fp, buf)
+FILE *fp;
+char *buf;
+{
+static int firsttime = 1;
+
+ while (newline(fp, buf) != NULL && !SECSTART(buf)) {
+ int off = 3;
+
+ if (strncmp(buf, " */", 3) == 0)
+ strcpy(buf, " * \n");
+ if (firsttime || strinstr(buf, "SCCS")) {
+ fputs("'\\\" ", FpBanner);
+ if (buf[off] == '\0')
+ off--;
+ fputs(buf+off, FpBanner);
+ }
+ }
+ firsttime = 0;
+}
+
+void
+maheader(fp, buf)
+FILE *fp;
+char *buf;
+{
+ (void) fprintf(FpText, ".TH %s %s\n", State.name, State.chap);
+ skip(fp, buf);
+}
+
+void
+maassertion(fp, buf)
+FILE *fp;
+char *buf;
+{
+ (void) fprintf(FpText, ".TI ");
+ if (State.category != CAT_NONE)
+ (void) fprintf(FpText, "%c ", (char)State.category);
+ (void) fprintf(FpText, "\\\" %s-%d\n",
+ State.name, State.assertion);
+ echon(fp, buf, FpText);
+}
+
+void
+madefassertion(fp, buf)
+FILE *fp;
+char *buf;
+{
+ (void) fprintf(FpText, ".TI def \\\" %s-%d\n", State.name, State.assertion);
+ echon(fp, buf, FpText);
+}
+
+/* Hooks */
+/*ARGSUSED*/
+void
+mastart(buf)
+char *buf;
+{
+ FpBanner = cretmpfile(F_BANNER);
+ FpText = cretmpfile(F_TEXT);
+}
+
+/*ARGSUSED*/
+void
+maend(buf)
+char *buf;
+{
+ fputs("'\\\"\n", FpBanner);
+ outfile(FpBanner);
+ if (hflag) {
+ if (sflag) {
+ FpHeader = cretmpfile(F_HEADER);
+ (void) fprintf(FpHeader, ".so head.t\n");
+ outfile(FpHeader);
+ } else {
+ outcopy(F_STDHEADER);
+ }
+ }
+ outfile(FpText);
+}
+
+void
+macomment(buf)
+char *buf;
+{
+extern int pflag;
+
+ if (pflag) {
+ fputs(".NS\n", FpText);
+ fputs(buf, FpText);
+ fputs(".NE\n", FpText);
+ }
+}
diff --git a/xc/test/xsuite/xtest/src/bin/mc/main.c b/xc/test/xsuite/xtest/src/bin/mc/main.c
new file mode 100644
index 000000000..eaebbc6a6
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/main.c
@@ -0,0 +1,436 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <signal.h>
+#include <ctype.h>
+
+#include "mc.h"
+
+extern char *strtok();
+extern char *strrchr();
+
+/*
+ * The input buffer
+ */
+char Ibuf[MAXLINE];
+int Lineno;
+char *Filename;
+
+char *OutFile; /* Output file name */
+
+FILE *FpSource = stdin;
+
+int aflag;
+int dflag;
+int hflag;
+int lflag;
+int pflag;
+int sflag;
+char *sopt;
+int mflag;
+
+static void sigclean();
+static void setupaslist();
+
+struct mclist *Sources;
+int Cmdname;
+
+struct state State;
+
+/*
+ * This table decodes argv[0] to the correct command. Induvidual getopt
+ * strings and usage messages are supplied for each. If all else fails
+ * the -c option can be used to get a particular command.
+ * All commands should if applicable take -a for a assertion list,
+ * -o for an output file. Also unadvertised options of -d for debug
+ * and -c to change the command.
+ */
+struct cmdinfo {
+ int cmd;
+ char *name;
+ char *opts;
+ char *usage;
+} cmdinfo[] = {
+ { CMD_MEXPAND, "mexpand", "c:a:o:d",
+ "mexpand [-a a_list] [-o <output-file>]" },
+ { CMD_MC, "mc", "c:a:o:dlsmp",
+ "mc [-a a_list] [-o <output-file>] [-l] [-m] [-s] [-p]" },
+ { CMD_MKMF, "mmkf", "c:o:ds:",
+ "mmkf [-o <output-file>] [-s sections]" },
+ { CMD_MA, "ma", "c:a:o:dhpsm",
+ "ma [-a a_list] [-o <output-file>] [-h] [-s] [-p] [-m]" },
+ { CMD_MAS, "mas", "c:a:o:dm",
+ "mas [-a a_list] [-o <output-file>] [-m]" },
+};
+
+/*
+ * If argv[0] is not recognised then this is used to suggest the use
+ * of -c. (Or fix the links!)
+ */
+static struct cmdinfo defcmd = {
+ CMD_MC,
+ "mtool",
+ "c:o:d",
+ "mtool -c <command> [-o <output-file>] [other-options]"
+};
+
+main(argc, argv)
+int argc;
+char **argv;
+{
+int c;
+int i;
+char *cp;
+struct cmdinfo *cip;
+extern int optind;
+extern char *optarg;
+
+newcmd:
+ cp = strrchr(argv[0], '/');
+ if (cp == NULL)
+ cp = argv[0];
+ else
+ cp++;
+ for (i = 0; i < NELEM(cmdinfo); i++) {
+ if (strcmp(cp, cmdinfo[i].name) == 0) {
+ cip = cmdinfo+i;
+ break;
+ }
+ }
+ if (i == NELEM(cmdinfo))
+ cip = &defcmd;
+
+ Cmdname = cip->cmd;
+
+ while ((c = getopt(argc, argv, cip->opts)) != EOF) {
+ switch (c) {
+ case 'a':
+ aflag++;
+ setupaslist(optarg);
+ break;
+ case 'd':
+ dflag++;
+ break;
+ case 'h':
+ hflag++;
+ break;
+ case 'l':
+ lflag++;
+ break;
+ case 'm':
+ mflag++;
+ break;
+ case 'p':
+ pflag++;
+ break;
+ case 's':
+ sflag++;
+ sopt = optarg;
+ break;
+ case 'o':
+ OutFile = optarg;
+ break;
+ case 'c':
+ argv[0] = optarg;
+ goto newcmd;
+ case '?':
+ (void) fprintf(stderr, "Invalid option\n");
+ (void) fprintf(stderr, "%s\n", cip->usage);
+ errexit();
+ break;
+ }
+ }
+
+ signal(SIGINT, sigclean);
+ signal(SIGHUP, sigclean);
+ signal(SIGTERM, sigclean);
+
+ /*
+ * Collect the other arguments which sould be names of combined
+ * source files.
+ */
+ Sources = createmclist();
+ for (; optind < argc; optind++)
+ Sources = addmclist(Sources, argv[optind]);
+
+ State.name = "";
+ State.chap = "";
+
+ dohook((char*)0, HOOK_START);
+
+ while ((FpSource = nextfile(Sources)) != NULL) {
+ dosections(FpSource, Ibuf);
+ dodefaults(Ibuf);
+ (void) fclose(FpSource);
+ }
+
+ dohook((char*)0, HOOK_END);
+
+ remfiles();
+ exit(0);
+}
+
+static char putbackbuf[MAXLINE];
+
+char *
+newline(fp, buf)
+FILE *fp;
+char *buf;
+{
+char *res;
+extern int Outputon;
+
+ if (*putbackbuf) {
+ strcpy(buf, putbackbuf);
+ putbackbuf[0] = '\0';
+ return(buf);
+ }
+
+ while ((res = fgets(buf, MAXLINE, fp)) != NULL) {
+
+ Lineno++;
+
+ if (buf[0] == '>') {
+
+ if (strncmp(buf, D_COMMENT, D_COMMENT_LEN) == 0) {
+ dohook(buf, HOOK_COMMENT);
+ continue;
+ }
+
+ if (strncmp(buf, D_SET, strlen(D_SET)) == 0) {
+ dohook(buf+strlen(D_SET)+1, HOOK_SET);
+ setcmd(buf);
+ continue;
+ }
+ }
+ if (buf[0] == '#') {
+ if (!hashcmd(buf))
+ continue;
+ }
+ if (Outputon == 0)
+ continue;
+ break;
+ }
+
+ if (res)
+ expandxname(res);
+ return(res);
+}
+
+/*
+ * Push back a line of input.
+ */
+putbackline(line)
+char *line;
+{
+ if (*putbackbuf) {
+ err("Internal error: one line already pushed back\n");
+ errexit();
+ }
+ (void) strcpy(putbackbuf, line);
+}
+
+/*
+ * Expand occurences of xname in assertion or strategy sections to
+ * the name of the test.
+ */
+/*
+ * Since this routine depends on assertion/strategy state so much
+ * then perhaps this is the wrong place to do this.
+ */
+void
+expandxname(line)
+char *line;
+{
+static char buf[MAXLINE];
+char *cp;
+char *np;
+
+ if (State.sectype != SEC_ASSERTION &&
+ State.sectype != SEC_DEFASSERT &&
+ State.sectype != SEC_STRATEGY)
+ return;
+
+ for (np = buf, cp = line; *cp; ) {
+ if (*cp == 'x') {
+ if (strncmp(cp, "xname", 5) == 0) {
+ if (State.sectype == SEC_ASSERTION ||
+ State.sectype == SEC_DEFASSERT) {
+ if (cp != line)
+ *np++ = '\n';
+ (void) strcpy(np, ".F "); np += 3;
+ }
+ (void) strcpy(np, State.name); np += strlen(State.name);
+ cp += 5;/* len of xname XXX */
+ if (State.sectype == SEC_ASSERTION ||
+ State.sectype == SEC_DEFASSERT) {
+ if (ispunct(*cp)) {
+ *np++ = ' ';
+ *np++ = *cp++;
+ *np++ = '\n';
+ } else {
+ *np++ = '\n';
+ }
+ while (isspace(*cp))
+ cp++;
+ }
+ } else if (strncmp(cp, "xerrlist", 8) == 0) {
+ /* This should not occur in strategies but no reason to check */
+ np += erralternates(np);
+ cp += 8; /* len of xerrlist */
+ while (*cp == ' ' || *cp == '\n' || *cp == ',') /* XXX */
+ cp++;
+ } else {
+ *np++ = *cp++;
+ }
+ } else {
+ *np++ = *cp++;
+ }
+ }
+ *np++ = '\0';
+ (void) strcpy(line, buf);
+}
+
+/*
+ * Print out an error message with preceeding line and file information.
+ */
+err(mess)
+char *mess;
+{
+ fprintf(stderr, "%s: line %d: %s", Filename? Filename: "<stdin>", Lineno, mess);
+}
+
+/*
+ * Tidy up and exit.
+ */
+errexit()
+{
+ remfiles();
+ exit(EXIT_FAILURE);
+}
+
+/*
+ * Action to take when terminated by a signal such as SIGINT. For
+ * unexpected signals no action is taken to aid debuging.
+ */
+/*ARGSUSED*/
+static void
+sigclean(sig)
+int sig;
+{
+ errexit();
+}
+
+/*
+ * Copy a string using malloced storage.
+ */
+char *
+mcstrdup(s)
+char *s;
+{
+char *bp;
+
+ if (s == 0)
+ return(s);
+
+ bp = (char*)malloc((unsigned)strlen(s)+1);
+ if (bp)
+ (void) strcpy(bp, s);
+
+ return(bp);
+}
+
+/*
+ * Find a s2 within s1.
+ */
+char *
+strinstr(s1, s2)
+char *s1;
+char *s2;
+{
+register char *cp;
+register int c;
+int len;
+
+ len = strlen(s2);
+ if (len == 0)
+ return(s1);
+
+ c = *s2;
+
+ for (cp = s1; *cp; cp++) {
+ if (*cp == c) {
+ if (strncmp(cp, s2, len) == 0) {
+ return(cp);
+ }
+ }
+ }
+
+ return(NULL);
+}
+
+#define MAXICLIST 100
+static struct aslist {
+ short begin;
+ short end;
+} aslist[MAXICLIST];
+static int aslind;
+
+static void
+setupaslist(list)
+char *list;
+{
+char *cp;
+
+ for (cp = strtok(list, ",\t\n "); cp; cp = strtok((char*)0, ",\t\n ")) {
+ if (*cp == '-')
+ aslist[aslind].begin = 0;
+ else
+ aslist[aslind].begin = atoi(cp);
+ while (*cp && *cp != '-')
+ cp++;
+
+ if (*cp == '-') {
+ if (*++cp)
+ aslist[aslind].end = atoi(cp);
+ else
+ aslist[aslind].end = 9999;
+ } else
+ aslist[aslind].end = aslist[aslind].begin;
+ aslind++;
+ }
+}
+
+int
+isassertwanted(a)
+int a;
+{
+int i;
+
+ if (aslind == 0)
+ return(1);
+
+ for (i = 0; i < aslind; i++) {
+ if (a >= aslist[i].begin && a <= aslist[i].end)
+ return(1);
+ }
+ return(0);
+}
diff --git a/xc/test/xsuite/xtest/src/bin/mc/make.c b/xc/test/xsuite/xtest/src/bin/mc/make.c
new file mode 100644
index 000000000..cbd9e487d
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/make.c
@@ -0,0 +1,372 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+
+#include "mc.h"
+
+#define MAXNAMES 20
+#define MAXMLINES 20
+#define CFILELINELEN 65
+
+extern struct state State;
+
+#define F_BANNER "mmbanner.tmc"
+#define F_DEFINES "mmdefs.tmc"
+#define F_SA "mmsa.mc"
+#define F_MSA "mmmsa.mc"
+#define F_LINK "mmlink.mc"
+#define F_MLINK "mmmlink.mc"
+#define F_LIB "mmlib.mc"
+#define F_MISC "mmmisc.mc"
+#define F_PGEN "mmpgen.mc"
+#define F_XPINIT "mmxpinit.mc"
+#define F_XPLIB "mmxplib.mc"
+#define F_DEPS "mmdeps.tmc"
+#define F_TOP "mmtop.tmc"
+
+static FILE *FpBanner;
+static FILE *FpDefines;
+static FILE *FpDepends;
+static FILE *FpTop;
+
+/*
+ * Which parts to include, this is so the makefiles can be made
+ * without eg. pixgen, or the library stuff.
+ */
+static char *incwhich = "lLmp";
+
+extern struct settings Settings;
+extern int dflag;
+extern int lflag;
+extern int sflag;
+extern char *sopt;
+
+void makename();
+void makeline();
+
+extern struct mclist *Sources;
+struct mclist *filenames;
+
+/*ARGSUSED*/
+void
+mmstart(buf)
+char *buf;
+{
+
+ /* sections to include */
+ if (sflag)
+ incwhich = sopt;
+
+ /* Index into files is one more than number of files */
+ filenames = createmclist();
+
+ FpBanner = cretmpfile(F_BANNER);
+ FpDefines = cretmpfile(F_DEFINES);
+ FpDepends = cretmpfile(F_DEPS);
+ FpTop = cretmpfile(F_TOP);
+}
+
+
+/*ARGSUSED*/
+void
+mmend(buf)
+char *buf;
+{
+char *lp;
+int i;
+int linepos;
+
+ (void) fprintf(FpDefines, "SOURCES=");
+ linepos = strlen("SOURCES=");
+ for (i = 0; lp = getmclistitem(Sources, i); i++) {
+ linepos += strlen(lp);
+ if (linepos > CFILELINELEN) {
+ (void) fprintf(FpDefines, "\\\n\t");
+ linepos = 8;
+ }
+ (void) fprintf(FpDefines, "%s ", lp);
+
+ }
+ (void) fprintf(FpDefines, "\n");
+ (void) fprintf(FpDefines, "CFILES=Test.c ");
+ linepos = strlen("CFILES=Test.c ");
+ for (i = 0; lp = getmclistitem(filenames, i); i++) {
+ linepos += strlen(lp);
+ if (linepos > CFILELINELEN) {
+ (void) fprintf(FpDefines, "\\\n\t");
+ linepos = 8;
+ }
+ (void) fprintf(FpDefines, "%s ", lp);
+
+ }
+ (void) fprintf(FpDefines, "\n");
+
+ (void) fprintf(FpDefines, "OFILES=Test.o ");
+ linepos = strlen("OFILES=Test.o ");
+ for (i = 0; lp = getmclistitem(filenames, i); i++) {
+ linepos += strlen(lp);
+ if (linepos > CFILELINELEN) {
+ (void) fprintf(FpDefines, "\\\n\t");
+ linepos = 8;
+ }
+ /* Convert to dot-o */
+ lp[strlen(lp)-1] = 'o';
+ (void) fprintf(FpDefines, "%s ", lp);
+
+ }
+ (void) fprintf(FpDefines, "\n");
+
+ if (Settings.macro) {
+ (void) fprintf(FpDefines, "MOFILES=MTest.o ");
+ linepos = strlen("OFILES=MTest.o ");
+ for (i = 0; lp = getmclistitem(filenames, i); i++) {
+ linepos += strlen(lp);
+ if (linepos > CFILELINELEN) {
+ (void) fprintf(FpDefines, "\\\n\t");
+ linepos = 8;
+ }
+ /* Convert to dot-o */
+ lp[strlen(lp)-1] = 'o';
+ (void) fprintf(FpDefines, "%s ", lp);
+
+ }
+ (void) fprintf(FpDefines, "\n");
+ }
+
+ (void) fprintf(FpDefines, "LOFILES=link.o ");
+ if (Settings.macro)
+ fprintf(FpDefines, "mlink.o ");
+ linepos = strlen("LOFILES=link.o ");
+ for (i = 0; lp = getmclistitem(filenames, i); i++) {
+ linepos += strlen(lp);
+ if (linepos > CFILELINELEN) {
+ (void) fprintf(FpDefines, "\\\n\t");
+ linepos = 8;
+ }
+ /* Convert to dot-o */
+ lp[strlen(lp)-1] = 'o';
+ (void) fprintf(FpDefines, "%s ", lp);
+ }
+ (void) fprintf(FpDefines, "\n");
+
+
+ (void) fprintf(FpDefines, "LINKOBJ=%s.o\n", name10lc(State.name));
+ (void) fprintf(FpDefines, "LINKEXEC=%s\n", name10lc(State.name));
+
+ (void) fprintf(FpDefines, "\n\n");
+
+ /*
+ * Now the makefile is output using the saved information and
+ * the skeleton files. There are a few variations depending
+ * on whether the test has a macro version or is an X protocol
+ * test.
+ */
+
+ /* The top of the makefile */
+ outfile(FpBanner);
+ outfile(FpDefines);
+ if (State.xproto)
+ outcopy(F_XPINIT);
+
+ outfile(FpTop);
+
+ /* The rules for the standalone tests */
+ outcopy(F_SA);
+ if (Settings.macro)
+ outcopy(F_MSA);
+
+ /* Do the combined parts, if they are wanted */
+ if (strchr(incwhich, 'l')) {
+ outcopy(F_LINK);
+ if (Settings.macro)
+ outcopy(F_MLINK);
+ }
+
+ /* Do the library rules, if they are wanted */
+ if (strchr(incwhich, 'L')) {
+ if (State.xproto)
+ outcopy(F_XPLIB);
+ else
+ outcopy(F_LIB);
+ }
+
+ /* The misc rules, if wanted */
+ if (strchr(incwhich, 'm'))
+ outcopy(F_MISC);
+
+ /*
+ * We assume here that neither the xproto tests or tests that have
+ * a macro version use Pixel Generation.
+ * This is true at present.
+ */
+ if (!State.xproto && !Settings.macro && strchr(incwhich, 'p'))
+ outcopy(F_PGEN);
+
+ /* Depends */
+ outfile(FpDepends);
+}
+
+
+void
+mmcopyright(fp, buf)
+FILE *fp;
+char *buf;
+{
+static int firsttime = 1;
+
+ while (newline(fp, buf) != NULL && !SECSTART(buf)) {
+ if (strncmp(buf, " */", 3) == 0)
+ strcpy(buf, " * \n");
+ if (firsttime || strinstr(buf, "SCCS")) {
+ buf[0] = '#';
+ buf[1] = ' ';
+ if (buf[2] == '/')
+ buf[2] = ' ';
+ fputs(buf, FpBanner);
+ }
+ }
+ firsttime = 0;
+}
+
+void
+mmheader(fp, buf)
+FILE *fp;
+char *buf;
+{
+ /*
+ * This is a name of the function that the test is being
+ * built for.
+ */
+ if (State.name) {
+ (void) fprintf(FpDefines, "#\n# Makefile for %s\n", State.name);
+ (void) fprintf(FpDefines, "#\n\n");
+ }
+ skip(fp, buf);
+}
+
+void
+mmmake(fp, buf)
+FILE *fp;
+char *buf;
+{
+ echon(fp, buf, FpTop);
+}
+
+void
+mmcfiles(fp, buf)
+FILE *fp;
+char *buf;
+{
+char *cp;
+char *tok;
+
+ cp = buf+strlen(D_CFILE);
+ for (tok = strtok(cp, " \t\n"); tok; tok = strtok((char*)0, " \t\n")) {
+ filenames = addmclist(filenames, tok);
+ }
+ skip(fp, buf);
+}
+
+void
+mmincstart(name)
+char *name;
+{
+
+ /* If this is temp file then don't bother with it */
+ if (strcmp(name+strlen(name)-4, ".tmc") == 0)
+ return;
+
+ /* If this is a gc or error include then put in a dependency */
+ if (strncmp(name, "gc/", 3) == 0 || strncmp(name, "error/", 6) == 0) {
+ fprintf(FpDepends, "Test.c link.c: $(XTESTLIBDIR)/%s\n", name);
+ } else {
+ /* Otherwise put in dependency as it is */
+ fprintf(FpDepends, "Test.c link.c: %s\n", name);
+ }
+}
+
+#define MCLINIT 10 /* Initial number of slots to create */
+/*
+ * create an mclist structure and initialise it
+ */
+struct mclist *
+createmclist()
+{
+struct mclist *mclp;
+
+ mclp = (struct mclist *)malloc(sizeof(struct mclist)+MCLINIT*sizeof(char*));
+ if (mclp == NULL) {
+ (void) fprintf(stderr, "Out of memory\n");
+ errexit();
+ }
+
+ mclp->num = 0;
+ mclp->size = MCLINIT;
+
+ return(mclp);
+}
+
+/*
+ * Add a string to the list. The given string will be copied.
+ * A pointer to the list is returned, it may have been realloced so
+ * it could have changed.
+ */
+struct mclist *
+addmclist(list, string)
+struct mclist *list;
+char *string;
+{
+int size;
+
+ if (list->num > list->size) {
+ /* Need to alloc more space */
+ list->size += MCLINIT;
+ size = sizeof(struct mclist) + (list->size-1)*sizeof(char*);
+ list = (struct mclist *)realloc((char*)list, (unsigned)size);
+ if (list == NULL) {
+ (void) fprintf(stderr, "Out of memory\n");
+ errexit();
+ }
+ }
+
+ list->items[list->num++] = mcstrdup(string);
+
+ return(list);
+}
+
+/*
+ * Get a list string item.
+ */
+char *
+getmclistitem(list, n)
+struct mclist *list;
+int n;
+{
+
+ if (n > list->num)
+ return((char*)0);
+
+ return(list->items[n]);
+}
+
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/mas.c b/xc/test/xsuite/xtest/src/bin/mc/mas.c
new file mode 100644
index 000000000..c43e786d7
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/mas.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+
+#include "stdio.h"
+#include "string.h"
+
+char *strtok();
+
+#include "mc.h"
+
+extern struct state State;
+extern int hflag;
+extern int sflag;
+
+#define F_BANNER "mabanner.tmc"
+#define F_STDHEADER "maheader.mc"
+#define F_HEADER "maheader.tmc"
+#define F_TEXT "matext.tmc"
+
+static FILE *FpBanner;
+static FILE *FpHeader;
+static FILE *FpText;
+
+void
+mascopyright(fp, buf)
+FILE *fp;
+char *buf;
+{
+static int firsttime = 1;
+
+ while (newline(fp, buf) != NULL && !SECSTART(buf)) {
+ int off = 3;
+
+ if (strncmp(buf, " */", 3) == 0)
+ strcpy(buf, " * \n");
+ if (firsttime || strinstr(buf, "SCCS")) {
+ fputs(">># ", FpBanner);
+ if (buf[off] == '\0')
+ off--;
+ fputs(buf+off, FpBanner);
+ }
+ }
+ firsttime = 0;
+}
+
+void
+masheader(fp, buf)
+FILE *fp;
+char *buf;
+{
+ (void) fprintf(FpText, ">>TITLE %s %s\n", State.name, State.chap);
+ skip(fp, buf);
+}
+
+void
+masassertion(fp, buf)
+FILE *fp;
+char *buf;
+{
+ (void) fprintf(FpText, ">>ASSERTION ");
+ if (State.category != CAT_NONE)
+ (void) fprintf(FpText, "%c ", (char)State.category);
+ (void) fprintf(FpText, "%s-%d\n",
+ State.name, State.assertion);
+ assertfill(fp, buf, FpText, "");
+ (void) fprintf(FpText, "\n");
+}
+
+void
+masstrategy(fp, buf)
+FILE *fp;
+char *buf;
+{
+ (void) fprintf(FpText, ">>STRATEGY\n");
+ echon(fp, buf, FpText);
+}
+
+void
+masdefassertion(fp, buf)
+FILE *fp;
+char *buf;
+{
+ (void) fprintf(FpText, ">>ASSERTION def %s-%d\n",
+ State.name, State.assertion);
+ echon(fp, buf, FpText);
+}
+
+/* Hooks */
+/*ARGSUSED*/
+void
+masstart(buf)
+char *buf;
+{
+ FpBanner = cretmpfile(F_BANNER);
+ FpText = cretmpfile(F_TEXT);
+}
+
+/*ARGSUSED*/
+void
+masend(buf)
+char *buf;
+{
+ fputs(">>#\n", FpBanner);
+ outfile(FpBanner);
+ outfile(FpText);
+}
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/mc.h b/xc/test/xsuite/xtest/src/bin/mc/mc.h
new file mode 100644
index 000000000..168521391
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/mc.h
@@ -0,0 +1,148 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+
+#ifndef EXIT_FAILURE
+#define EXIT_FAILURE 1
+#endif
+
+#define MAXLINE 1024
+
+/*
+ * Defines for the directives that introduce each section.
+ */
+#define D_HEADER ">>TITLE"
+#define D_ASSERTION ">>ASSERTION"
+#define D_STRATEGY ">>STRATEGY"
+#define D_CODE ">>CODE"
+#define D_MAKE ">>MAKE"
+#define D_EXTERN ">>EXTERN"
+#define D_INCLUDE ">>INCLUDE"
+#define D_CFILE ">>CFILES"
+#define D_COMMENT ">>#"
+#define D_COMMENT_LEN 3
+#define D_SET ">>SET"
+
+#define SECSTART(buf) ((buf)[0] == '>' && (buf)[2] != '#')
+
+#define XCALLSYM "XCALL"
+#define XNAMESYM "xname"
+
+#define ASLENGTH 60
+
+struct settings {
+ char *startup;
+ char *cleanup;
+ char *tpstartup;
+ char *tpcleanup;
+ short needgcflush;
+ char *display; /* Name of the display variable if there is one */
+ short failreturn; /* return after a failure */
+ char *valreturn; /* Symbol value that should be returned */
+ char *beginfunc; /* Function to call at beginning of TP */
+ char *endfunc; /* Function to call at end of TP */
+ int macro; /* Has a macro version */
+ char *macroname; /* Name of the macro version */
+ short noerrcheck; /* No error status check */
+};
+
+struct state {
+ char *name; /* test name */
+ char *chap; /* associated chapter or section */
+ int assertion; /* assertion number */
+ char *type; /* type code */
+ short category; /* category code */
+ char *reason; /* reason code string for categories B, D */
+ short sectype; /* Current section we are in */
+ short defaultreq; /* Default strat/code is needed */
+ short discardtest;/* We are discarding this assertion */
+ short err; /* State within a .ER assertion */
+ short skipsec; /* Skip some sections */
+ short abortafter; /* stop after this many sections */
+ short xproto; /* This is an xproto test */
+};
+
+#define ER_NONE 0 /* No error */
+#define ER_NORM 1 /* Normal error */
+#define ER_VALUE 2 /* A Value error */
+
+/*
+ * Commands.
+ */
+#define CMD_MEXPAND 0
+#define CMD_MC 1
+#define CMD_MKMF 2
+#define CMD_MA 3
+#define CMD_MAS 4
+
+/*
+ * Section types.
+ */
+#define SEC_COPYRIGHT 0
+#define SEC_HEADER 1
+#define SEC_ASSERTION 2
+#define SEC_DEFASSERT 3
+#define SEC_STRATEGY 4
+#define SEC_CODE 5
+#define SEC_EXTERNCODE 6
+#define SEC_FILE 7
+#define SEC_MAKE 8
+#define NSEC 9
+
+/*
+ * Hook types. These allow commands to obtain information about
+ * various things that happen.
+ */
+#define HOOK_START 0
+#define HOOK_END 1
+#define HOOK_INCSTART 2
+#define HOOK_INCEND 3
+#define HOOK_SET 4
+#define HOOK_COMMENT 5
+#define NHOOK 6
+
+struct mclist {
+ int num; /* Number used */
+ int size; /* Number available */
+ char *items[1];/* strings */
+ /* Really longer */
+};
+
+/*
+ * Some temporary file names.
+ */
+#define F_TVAL "Mval.tmc" /* Value assertion */
+#define F_TVCODE "Mvcode.tmc" /* BadValue code */
+#define F_TDEFCODE "Mdefcode.tmc" /* default code */
+
+/*
+ * Category codes
+ */
+#define CAT_NONE '\0'
+#define CAT_A 'A'
+#define CAT_B 'B'
+#define CAT_C 'C'
+#define CAT_D 'D'
+#define CAT_DEF '-'
+
+#define SEPS " \t\n"
+#define ARGSEP " \t\n*[]();"
+
+#define NELEM(A) (sizeof(A)/sizeof(A[0]))
+
+#include "mcproto.h"
diff --git a/xc/test/xsuite/xtest/src/bin/mc/mcproto.h b/xc/test/xsuite/xtest/src/bin/mc/mcproto.h
new file mode 100644
index 000000000..cb17f900d
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/mcproto.h
@@ -0,0 +1,194 @@
+/* $XConsortium$ */
+
+/*
+ * Do not edit this file.
+ * It is generated automaticaly from the source files.
+ */
+#if __STDC__ == 1
+
+void mcstart(char *buf);
+void mcend(char *buf);
+void mccopyright(FILE *fp, char *buf);
+void mcheader(FILE *fp, char *buf);
+int defargnames(void);
+void mcassertion(FILE *fp, char *buf);
+int assertfill(FILE *fp, char *buf, FILE *outfp, char *prefix);
+int joinpunct(int c);
+void mcstrategy(FILE *fp, char *buf);
+void mccode(FILE *fp, register char *buf);
+void mcexterncode(FILE *fp, char *buf);
+int funcstart(void);
+int funcend(void);
+int doxcall(FILE *fp, char *buf);
+void mcdefassertion(FILE *fp, char *buf);
+void mcincstart(char *buf);
+void mcincend(char *buf);
+int hashcmd(char *buf);
+int doif(char *buf);
+int doelse(void);
+int doendif(void);
+void defargtype(char *name, int num);
+int errtext(char *buf);
+int valerror(char *buf);
+int valerrdefs(void);
+int erralternates(char *out);
+int errcode(char *bp);
+void mepcopyright(FILE *fp, char *buf);
+void mepecho(FILE *fp, char *buf);
+void mepstart(char *buf);
+void mepend(char *buf);
+void mepset(char *buf);
+void mepcomment(char *buf);
+FILE *nextfile(struct mclist *sources);
+void outcopy(char *file);
+FILE *cretmpfile(char *file);
+int outfile(FILE *fp);
+int remfiles(void);
+int includefile(char *file, char *bp);
+void filetemp(char *name);
+char *mcpath(char *file);
+int gccomps(FILE *fp, char *buf);
+void macopyright(FILE *fp, char *buf);
+void maheader(FILE *fp, char *buf);
+void maassertion(FILE *fp, char *buf);
+void madefassertion(FILE *fp, char *buf);
+void mastart(char *buf);
+void maend(char *buf);
+void macomment(char *buf);
+int main(int argc, char **argv);
+char *newline(FILE *fp, char *buf);
+int putbackline(char *line);
+void expandxname(char *line);
+int err(char *mess);
+int errexit(void);
+char *mcstrdup(char *s);
+char *strinstr(char *s1, char *s2);
+int isassertwanted(int a);
+void mmstart(char *buf);
+void mmend(char *buf);
+void mmcopyright(FILE *fp, char *buf);
+void mmheader(FILE *fp, char *buf);
+void mmmake(FILE *fp, char *buf);
+void mmcfiles(FILE *fp, char *buf);
+void mmincstart(char *name);
+struct mclist *createmclist(void);
+struct mclist *addmclist(struct mclist *list, char *string);
+char *getmclistitem(struct mclist *list, int n);
+void mascopyright(FILE *fp, char *buf);
+void masheader(FILE *fp, char *buf);
+void masassertion(FILE *fp, char *buf);
+void masstrategy(FILE *fp, char *buf);
+void masdefassertion(FILE *fp, char *buf);
+void masstart(char *buf);
+void masend(char *buf);
+int dosections(FILE *fp, char *buf);
+int assertion(FILE *fp, char *buf);
+int do1sec(FILE *fp, char *buf, int sec);
+int dohook(char *buf, int hook);
+void skip(FILE *fp, char *buf);
+void echo(FILE *fp, char *buf, FILE *fpout);
+void echon(FILE *fp, char *buf, FILE *fpout);
+int dodefaults(char *buf);
+int setcmd(char *bp);
+char *name12(char *inname);
+char *name12lc(char *name);
+char *name10(char *name);
+char *name10lc(char *name);
+int main(int argc, char **argv);
+char *strinstr(char *s1, char *s2);
+
+#else
+
+void mcstart();
+void mcend();
+void mccopyright();
+void mcheader();
+int defargnames();
+void mcassertion();
+int assertfill();
+int joinpunct();
+void mcstrategy();
+void mccode();
+void mcexterncode();
+int funcstart();
+int funcend();
+int doxcall();
+void mcdefassertion();
+void mcincstart();
+void mcincend();
+int hashcmd();
+int doif();
+int doelse();
+int doendif();
+void defargtype();
+int errtext();
+int valerror();
+int valerrdefs();
+int erralternates();
+int errcode();
+void mepcopyright();
+void mepecho();
+void mepstart();
+void mepend();
+void mepset();
+void mepcomment();
+FILE *nextfile();
+void outcopy();
+FILE *cretmpfile();
+int outfile();
+int remfiles();
+int includefile();
+void filetemp();
+char *mcpath();
+int gccomps();
+void macopyright();
+void maheader();
+void maassertion();
+void madefassertion();
+void mastart();
+void maend();
+void macomment();
+int main();
+char *newline();
+int putbackline();
+void expandxname();
+int err();
+int errexit();
+char *mcstrdup();
+char *strinstr();
+int isassertwanted();
+void mmstart();
+void mmend();
+void mmcopyright();
+void mmheader();
+void mmmake();
+void mmcfiles();
+void mmincstart();
+struct mclist *createmclist();
+struct mclist *addmclist();
+char *getmclistitem();
+void mascopyright();
+void masheader();
+void masassertion();
+void masstrategy();
+void masdefassertion();
+void masstart();
+void masend();
+int dosections();
+int assertion();
+int do1sec();
+int dohook();
+void skip();
+void echo();
+void echon();
+int dodefaults();
+int setcmd();
+char *name12();
+char *name12lc();
+char *name10();
+char *name10lc();
+int main();
+char *strinstr();
+
+#endif
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/sections.c b/xc/test/xsuite/xtest/src/bin/mc/sections.c
new file mode 100644
index 000000000..05adc5550
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/sections.c
@@ -0,0 +1,532 @@
+
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+
+#include <stdio.h>
+#include <ctype.h>
+#include "string.h"
+
+#include "mc.h"
+
+extern int Cmdname;
+extern struct state State;
+extern struct settings Settings;
+
+extern int mflag;
+
+/*
+ * What needs to be defaulted. Note that it is sort of assumed that
+ * code follows strategy even though this is not tested at present.
+ */
+#define NEED_STRAT 0x1
+#define NEED_CODE 0x2
+
+#if 0
+/* Template for sections */
+ , /* copyright */
+ , /* header */
+ , /* assertion */
+ , /* defassertion */
+ , /* strategy */
+ , /* code */
+ , /* extern code */
+ , /* extra files */
+ , /* make files */
+#endif
+#if 0
+/* Template for hooks */
+ , /* start */
+ , /* end */
+ , /* include start hook */
+ , /* include end hook */
+ , /* set hook */
+ , /* comment hook */
+#endif
+
+void (*secsw[][NSEC])() = {
+ { /* mexpand */
+ mepcopyright, /* copyright */
+ mepecho, /* header */
+ mepecho, /* assertion */
+ mepecho, /* defassertion */
+ mepecho, /* strategy */
+ mepecho, /* code */
+ mepecho, /* extern code */
+ mepecho, /* make lines */
+ mepecho, /* make files */
+ },
+ { /* mc */
+ mccopyright, /* copyright */
+ mcheader, /* header */
+ mcassertion, /* assertion */
+ mcdefassertion, /* defassertion */
+ mcstrategy, /* strategy */
+ mccode, /* code */
+ mcexterncode, /* extern code */
+ skip, /* extra files */
+ skip, /* make files */
+ },
+ { /* mmkf */
+ mmcopyright, /* copyright */
+ mmheader, /* header */
+ skip, /* assertion */
+ skip, /* defassertion */
+ skip, /* strategy */
+ skip, /* code */
+ skip, /* extern code */
+ mmcfiles, /* extra files */
+ mmmake, /* make section */
+ },
+ { /* ma */
+ macopyright, /* copyright */
+ maheader, /* header */
+ maassertion, /* assertion */
+ madefassertion, /* defassertion */
+ skip, /* strategy */
+ skip, /* code */
+ skip, /* extern code */
+ skip, /* extra files */
+ skip, /* make files */
+ },
+ { /* mas */
+ mascopyright, /* copyright */
+ masheader, /* header */
+ masassertion, /* assertion */
+ masassertion, /* defassertion */
+ masstrategy, /* strategy */
+ skip, /* code */
+ skip, /* extern code */
+ skip, /* extra files */
+ skip, /* make files */
+ },
+};
+
+void (*hooksw[][NSEC])() = {
+ {
+ mepstart, /* start */
+ mepend, /* end */
+ 0, /* include start hook */
+ 0, /* include end hook */
+ mepset, /* set hook */
+ mepcomment, /* comment hook */
+ },
+ {
+ mcstart, /* start */
+ mcend, /* end */
+ mcincstart, /* include start hook */
+ mcincend, /* include end hook */
+ 0, /* set hook */
+ 0, /* comment hook */
+ },
+ {
+ mmstart, /* start */
+ mmend, /* end */
+ mmincstart, /* include start hook */
+ 0, /* include end hook */
+ 0, /* set hook */
+ 0, /* comment hook */
+ },
+ {
+ mastart, /* start */
+ maend, /* end */
+ 0, /* include start hook */
+ 0, /* include end hook */
+ 0, /* set hook */
+ macomment, /* comment hook */
+ },
+ {
+ masstart, /* start */
+ masend, /* end */
+ 0, /* include start hook */
+ 0, /* include end hook */
+ 0, /* set hook */
+ 0, /* comment hook */
+ },
+};
+
+#define NCMDS (sizeof(secsw)/(NSEC*sizeof(void (*)())))
+
+struct secname {
+ char *name;
+ int sec;
+} secname[] = {
+ {D_HEADER, SEC_HEADER},
+ {D_ASSERTION, SEC_ASSERTION},
+ {D_STRATEGY, SEC_STRATEGY},
+ {D_CODE, SEC_CODE},
+ {D_EXTERN, SEC_EXTERNCODE},
+ {D_CFILE, SEC_FILE},
+ {D_MAKE, SEC_MAKE},
+};
+
+/*
+ * Loop through all sections and branch out to the appropriate strategy
+ * routines.
+ */
+dosections(fp, buf)
+FILE *fp;
+char *buf;
+{
+struct secname *sp;
+int sec;
+
+ if (State.skipsec == 0)
+ do1sec(fp, buf, SEC_COPYRIGHT);
+
+ while (State.skipsec > 0) {
+ State.skipsec--;
+ skip(fp, buf);
+ }
+
+ while (!feof(fp)) {
+
+ sec = -1;
+ for (sp = secname; sp < secname+NELEM(secname); sp++) {
+ if (strncmp(buf, sp->name, strlen(sp->name)) == 0) {
+ sec = sp->sec;
+ break;
+ }
+ }
+
+ if (sec == -1) {
+ if (strncmp(buf, D_INCLUDE, strlen(D_INCLUDE)) == 0) {
+ includefile(buf+strlen(D_INCLUDE), buf);
+ newline(fp, buf);
+ continue;
+ } else {
+ err("Bad directive\n");
+ errexit();
+ }
+ }
+
+ /* XXX Temp because of the push-back line problem */
+ State.sectype = sec;
+
+ if (sec == SEC_ASSERTION) {
+ assertion(fp, buf);
+ } else {
+ do1sec(fp, buf, sec);
+ }
+ if (State.abortafter > 0) {
+ if (--State.abortafter == 0)
+ break;
+ }
+ }
+}
+
+/*
+ * Do an assertion. There are three types of assertion regular, def
+ * and gc. The gc type are sorted out by gccomps the others
+ * branch to their own strategies.
+ */
+assertion(fp, buf)
+FILE *fp;
+char *buf;
+{
+char *line;
+char *str;
+char *type;
+int reason;
+static char *reasons[] = {
+ "Temporarily can't be implemented",
+ "There is no known portable test method for this assertion",
+ "The statement in the X11 specification is not specific enough to write a test",
+ "There is no known reliable test method for this assertion",
+ "Testing the assertion would require setup procedures that involve an unreasonable amount of effort by the user of the test suite.",
+ "Testing the assertion would require an unreasonable amount of time or resources on most systems",
+ "Creating a test would require an unreasonable amount of test development time.",
+};
+
+ /* Check for default error sections */
+ dodefaults(buf);
+ State.assertion++;
+
+ line = mcstrdup(buf); /* Must not be freed */
+ str = strtok(line, SEPS);
+ type = strtok((char*)0, SEPS);
+ /*
+ * When in an included error file then the type cannot be allowed
+ * to overrule the type that the programmer has selected. This is
+ * because it affects things like Status returns.
+ */
+ if (State.err == ER_NONE)
+ State.type = type;
+
+ if (type == NULL)
+ type = "NOT-SET";
+
+ if (strcmp(type, "def") == 0) {
+ State.category = CAT_DEF;
+ do1sec(fp, buf, SEC_DEFASSERT);
+ } else if (strcmp(type, "gc") == 0) {
+ /*
+ * Since this is not a real assertion then undo the
+ * state changes above.
+ */
+ State.assertion--;
+ gccomps(fp, buf);
+ } else {
+ str = strtok((char*)0, SEPS);
+ if (str == NULL)
+ str = "";
+ State.category = *str;
+ if (State.category == CAT_B || State.category == CAT_D) {
+ State.reason = NULL;
+ str = strtok((char*)0, SEPS);
+ if (str && isdigit(*str)) {
+ reason = atoi(str);
+ if (reason < NELEM(reasons))
+ State.reason = reasons[reason];
+ }
+ }
+
+ /* XXX Temp. to get expansion */
+ State.sectype = SEC_ASSERTION;
+ /*
+ * Look ahead to see if there is an error. This is probably
+ * slightly better than the way it used to be done.
+ */
+ line = mcstrdup(buf);
+ if (newline(fp, buf) && strncmp(buf, ".ER", 3) == 0) {
+ /* Back out of the assertion so far */
+ State.assertion--;
+ errtext(buf);
+ newline(fp, buf);
+ } else {
+ putbackline(buf);
+ (void) strcpy(buf, line);
+ State.defaultreq = NEED_STRAT|NEED_CODE;
+ do1sec(fp, buf, SEC_ASSERTION);
+ }
+ free(line);
+ }
+}
+
+/*
+ * Do one section.
+ */
+do1sec(fp, buf, sec)
+FILE *fp;
+char *buf;
+int sec;
+{
+char *line;
+char *str;
+
+ State.sectype = sec;
+
+ if (sec >= NSEC) {
+ (void) fprintf(stderr, "Internal error: invalid command\n");
+ errexit();
+ }
+
+ /*
+ * Any special action that needs to be done at the global level
+ * for a section.
+ */
+ switch (sec) {
+ case SEC_STRATEGY:
+ State.defaultreq &= ~NEED_STRAT;
+ if (State.discardtest) {
+ skip(fp, buf);
+ return;
+ }
+ break;
+ case SEC_CODE:
+ State.defaultreq &= ~NEED_CODE;
+ if (State.discardtest) {
+ skip(fp, buf);
+ return;
+ }
+
+ if (State.err == ER_VALUE)
+ valerrdefs();
+
+ State.err = 0;
+ break;
+ case SEC_HEADER:
+ line = mcstrdup(buf);
+ if ((str = strtok(line+strlen(D_HEADER), SEPS)) == NULL)
+ str = "";
+ /*
+ * If the name has changed, then reset the assertion number to
+ * zero.
+ */
+ if (State.name == NULL || strcmp(str, State.name) != 0)
+ State.assertion = 0;
+ State.name = str;
+ State.chap = strtok((char*)0, SEPS);
+ if (State.name == NULL)
+ State.name = "NoName";
+ if (State.chap == NULL)
+ State.chap = "";
+
+ /*
+ * If we are in macro mode then either take an explicit macro
+ * name if given, or construct the name by removing the leading
+ * letter 'X'.
+ */
+ if (mflag) {
+ if (Settings.macroname)
+ State.name = Settings.macroname;
+ if (State.name[0] == 'X')
+ State.name++;
+ }
+
+ /* Check for xprotocol test */
+ if (strcmp(State.chap, "XPROTO") == 0)
+ State.xproto = 1;
+
+ break;
+ case SEC_ASSERTION:
+ case SEC_DEFASSERT:
+ /*
+ * Are we interested in this assertion? If not then just skip
+ * code and strategy until the next assertion.
+ */
+ if (!isassertwanted(State.assertion)) {
+ State.defaultreq = 0;
+ State.discardtest = 1;
+ skip(fp, buf);
+ return;
+ }
+ State.discardtest = 0;
+ break;
+ }
+
+ if (secsw[Cmdname][sec])
+ (*secsw[Cmdname][sec])(fp, buf);
+}
+
+/*
+ * Switch out to the command specific hook command.
+ */
+dohook(buf, hook)
+char *buf;
+int hook;
+{
+ if (hook >= NHOOK) {
+ (void) fprintf(stderr, "Internal error: invalid hook\n");
+ errexit();
+ }
+ if (Cmdname >= NCMDS) {
+ (void) fprintf(stderr, "Internal error: command not implemented\n");
+ errexit();
+ }
+
+ if (hooksw[Cmdname][hook])
+ (*hooksw[Cmdname][hook])(buf);
+}
+
+/*
+ * Skip over this section.
+ */
+void
+skip(fp, buf)
+FILE *fp;
+char *buf;
+{
+ while (newline(fp, buf) != NULL && !SECSTART(buf))
+ ;
+}
+
+/*
+ * Copy the complete section straight to the output, including the
+ * section start line.
+ */
+void
+echo(fp, buf, fpout)
+FILE *fp;
+char *buf;
+FILE *fpout;
+{
+ fwrite(buf, strlen(buf), 1, fpout);
+ echon(fp, buf, fpout);
+}
+
+/*
+ * Copy this section straight to the output, without the section start
+ * line.
+ */
+void
+echon(fp, buf, fpout)
+FILE *fp;
+char *buf;
+FILE *fpout;
+{
+ while (newline(fp, buf) != NULL && !SECSTART(buf))
+ fwrite(buf, strlen(buf), 1, fpout);
+}
+
+/*
+ * At this point we insert any default code that needs inserting.
+ */
+dodefaults(buf)
+char *buf;
+{
+FILE *fp;
+int needed;
+
+ /*
+ * If there is any supplied strategy or code then there are no defaults.
+ */
+ if (!State.defaultreq)
+ return;
+ needed = State.defaultreq;
+ State.defaultreq = 0;
+
+ if (State.err) {
+ errcode(buf);
+ State.err = 0;
+ return;
+ }
+
+ /* Default code stub */
+ fp = cretmpfile(F_TDEFCODE);
+
+ switch (State.category) {
+ case CAT_B: case CAT_D: /* Untested */
+ if (needed & NEED_STRAT) {
+ (void) fprintf(fp, ">>STRATEGY\n");
+ (void) fprintf(fp, "Report UNTESTED\n");
+ }
+ if (needed & NEED_CODE) {
+ (void) fprintf(fp, ">>CODE\n");
+ (void) fprintf(fp, "\treport(\"%s\");\n", State.reason);
+ (void) fprintf(fp, "\tUNTESTED;\n");
+ }
+ break;
+ default: /* No code written */
+ if (needed & NEED_STRAT) {
+ (void) fprintf(fp, ">>STRATEGY\n");
+ if (needed & NEED_CODE)
+ (void) fprintf(fp, "Report that no code has been written for this test.\n");
+ else
+ (void) fprintf(fp, "No strategy has been written for this test\n");
+ }
+ if (needed & NEED_CODE) {
+ (void) fprintf(fp, ">>CODE\n");
+ (void) fprintf(fp, "\treport(\"No code written for this assertion.\");\n");
+ }
+ break;
+ }
+ fclose(fp);
+
+ includefile(F_TDEFCODE, buf);
+}
diff --git a/xc/test/xsuite/xtest/src/bin/mc/set.c b/xc/test/xsuite/xtest/src/bin/mc/set.c
new file mode 100644
index 000000000..5e40064e3
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/set.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "mc.h"
+
+struct settings Settings;
+
+setcmd(bp)
+char *bp;
+{
+char *tok;
+char *arg1;
+
+ (void) strtok(bp, SEPS);
+
+ tok = strtok((char *)0, SEPS);
+ arg1 = strtok((char *)0, SEPS);
+ if (arg1)
+ arg1 = mcstrdup(arg1);
+
+ if (strcmp(tok, "startup") == 0) {
+ Settings.startup = arg1;
+ } else if (strcmp(tok, "cleanup") == 0) {
+ Settings.cleanup = arg1;
+ } else if (strcmp(tok, "tpstartup") == 0) {
+ Settings.tpstartup = arg1;
+ } else if (strcmp(tok, "tpcleanup") == 0) {
+ Settings.tpcleanup = arg1;
+ } else if (strcmp(tok, "need-gc-flush") == 0) {
+ Settings.needgcflush = 1;
+ } else if (strcmp(tok, "fail-return") == 0) {
+ Settings.failreturn = 1;
+ } else if (strcmp(tok, "fail-no-return") == 0) {
+ Settings.failreturn = 0;
+ } else if (strcmp(tok, "return-value") == 0) {
+ Settings.valreturn = arg1;
+ } else if (strcmp(tok, "macro") == 0) {
+ Settings.macro = 1;
+ if (arg1)
+ Settings.macroname = arg1;
+ } else if (strcmp(tok, "begin-function") == 0) {
+ Settings.beginfunc = arg1;
+ } else if (strcmp(tok, "end-function") == 0) {
+ Settings.endfunc = arg1;
+ } else if (strcmp(tok, "no-error-status-check") == 0) {
+ Settings.noerrcheck = 1;
+ } else if (strcmp(tok, "error-status-check") == 0) {
+ Settings.noerrcheck = 0;
+ } else {
+ err("Unrecognised set option\n");
+ errexit();
+ }
+
+}
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/shortname.c b/xc/test/xsuite/xtest/src/bin/mc/shortname.c
new file mode 100644
index 000000000..bc728975c
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/shortname.c
@@ -0,0 +1,213 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ *
+ * Author: Steve Ratcliffe, UniSoft Ltd.
+ */
+/*
+ * Routines to produce abreviated names of the functions.
+ *
+ * This algorithm is used as a basis:
+ *
+ * Background -> Bg
+ * Subwindow -> Sbw
+ * String -> Str
+ * Window -> Wdw
+ * Remove all lower case vowels
+ * Truncate.
+ * If the string ended in 16 then make it end in 16 after truncation.
+ */
+
+#include <stdio.h>
+#include <string.h>
+#include "mc.h"
+
+#define VOWELS "aeiou"
+
+char *
+name12(inname)
+char *inname;
+{
+char *name;
+char *cp;
+char *np;
+int end16 = 0;
+int n;
+
+#ifndef test
+ name = mcstrdup(inname);
+#else
+ name = inname;
+#endif
+
+ if (name[strlen(name)-1] == '\n')
+ name[strlen(name)-1] = '\0';
+
+ if (name[strlen(name)-1] == '6')
+ end16 = 1;
+
+ cp = strinstr(name, "Background");
+ if (cp) {
+ (void) strcpy(cp, "Bg");
+ (void) strcpy(cp+2, cp+10);
+ }
+ cp = strinstr(name, "Subwindow");
+ if (cp) {
+ (void) strcpy(cp, "Sbw");
+ (void) strcpy(cp+3, cp+9);
+ }
+ cp = strinstr(name, "String");
+ if (cp) {
+ (void) strcpy(cp, "Str");
+ (void) strcpy(cp+3, cp+6);
+ }
+ cp = strinstr(name, "Window");
+ if (cp) {
+ (void) strcpy(cp, "Wdw");
+ (void) strcpy(cp+3, cp+6);
+ }
+
+ /*
+ * Take out lowercase vowels.
+ */
+ np = name;
+ cp = name;
+ for (;;) {
+ n = strcspn(np, VOWELS);
+ if (n == 0)
+ break;
+ /* strncpy(cp, np, n); doesn't work on happy */
+ for (; n > 0; n--)
+ *cp++ = *np++;
+
+ n = strspn(np, VOWELS);
+ np += n;
+ }
+ *cp = '\0';
+
+ if (strlen(name) > 12) {
+ name[12] = '\0';
+ if (end16) {
+ name[strlen(name)-2] = '1';
+ name[strlen(name)-1] = '6';
+ }
+ }
+ return(name);
+}
+
+/*
+ * Truncate to 12 characters and lowercase everything.
+ */
+char *
+name12lc(name)
+char *name;
+{
+char *np;
+char *cp;
+
+ np = name12(name);
+ for (cp = np; *cp; cp++)
+ *cp = tolower(*cp);
+
+ return(np);
+}
+
+/*
+ * Truncate to 10 characters. Like name12 but ommit leading
+ * 'X'.
+ */
+char *
+name10(name)
+char *name;
+{
+char *np;
+int end16;
+
+ if (name[strlen(name)-1] == '6')
+ end16 = 1;
+ else
+ end16 = 0;
+
+ np = name12(name);
+ if (*np == 'X')
+ np++;
+ if (strlen(np) > 10) {
+ np[10] = '\0';
+ if (end16) {
+ np[strlen(np)-2] = '1';
+ np[strlen(np)-1] = '6';
+ }
+ }
+
+ return(np);
+}
+
+/*
+ * Truncate to 10 characters and lowercase everything.
+ */
+char *
+name10lc(name)
+char *name;
+{
+char *np;
+char *cp;
+
+ np = name10(name);
+ for (cp = np; *cp; cp++)
+ *cp = tolower(*cp);
+
+ return(np);
+}
+
+#ifdef test
+
+main(argc, argv)
+int argc;
+char **argv;
+{
+
+ while (--argc) {
+ printf("%s\n", test(*++argv));
+ }
+
+}
+
+/*
+ * Find a s2 within s1.
+ */
+char *
+strinstr(s1, s2)
+char *s1;
+char *s2;
+{
+char *cp;
+int len;
+
+ len = strlen(s2);
+ if (len == 0)
+ return(s1);
+
+ for (cp = s1; *cp; cp++) {
+ if (*cp == *s2) {
+ if (strncmp(cp, s2, len) == 0) {
+ return(cp);
+ }
+ }
+ }
+
+ return(NULL);
+}
+
+#endif
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/Makefile b/xc/test/xsuite/xtest/src/bin/mc/tmpl/Makefile
new file mode 100644
index 000000000..726a0948a
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/Makefile
@@ -0,0 +1,41 @@
+# $XConsortium$
+
+MCDIR=$(XTESTROOT)/lib/mc
+
+MCFILES= $(MCDIR)/maheader.mc $(MCDIR)/mcextern.mc $(MCDIR)/mcinclude.mc \
+ $(MCDIR)/mcxpext.mc $(MCDIR)/mcxpinc.mc \
+ $(MCDIR)/mmlib.mc $(MCDIR)/mmlink.mc $(MCDIR)/mmmisc.mc \
+ $(MCDIR)/mmmlink.mc $(MCDIR)/mmmsa.mc $(MCDIR)/mmpgen.mc \
+ $(MCDIR)/mmsa.mc $(MCDIR)/mmxpinit.mc $(MCDIR)/mmxplib.mc
+
+install: $(MCFILES)
+
+$(MCDIR)/maheader.mc: maheader.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+$(MCDIR)/mcextern.mc: mcextern.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+$(MCDIR)/mcinclude.mc: mcinclude.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+$(MCDIR)/mcxpext.mc: mcxpext.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+$(MCDIR)/mcxpinc.mc: mcxpinc.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+$(MCDIR)/mmlib.mc: mmlib.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+$(MCDIR)/mmlink.mc: mmlink.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+$(MCDIR)/mmmisc.mc: mmmisc.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+$(MCDIR)/mmmlink.mc: mmmlink.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+$(MCDIR)/mmmsa.mc: mmmsa.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+$(MCDIR)/mmpgen.mc: mmpgen.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+$(MCDIR)/mmsa.mc: mmsa.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+$(MCDIR)/mmxpinit.mc: mmxpinit.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+$(MCDIR)/mmxplib.mc: mmxplib.mc
+ $(RM) $@; $(CP) $? $@; chmod 0664 $@
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/maheader.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/maheader.mc
new file mode 100644
index 000000000..39e3d7d99
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/maheader.mc
@@ -0,0 +1,107 @@
+'\" Simple table specification - to avoid the need to use tbl.
+.de tL \" table line
+.nf
+\\&\\$1\\h'|10n'\\$2\\h'|26n'\\$3\\h'|30n'\\$4\\h'|34n'\\$5\\h'|43n'\\$6\\h'|50n'\\$7\\h'|61n'\\$8
+.fi
+..
+.hy 0
+'\" Font for arguments
+.ds fA \f(CO
+'\" Font for structure member names
+.ds fM \fI
+'\" Font for symbols.
+.ds fS \fC
+'\" Font for function names
+.ds fF \fC
+'\"
+'\"
+'\" ### .TH - Header for a test set.
+.de TH
+.nr Ac 0 1 \" Set the assertion counter to zero.
+'\" Save the name
+.ds Na \\$1
+.ds Ch \\$2 \" Save the chapter name
+.if \\n(nl .bp 1
+.sp 2
+.ps +2
+Assertions for \\*(Na
+.ps
+.sp 2
+..
+'\" ### .TI - Start assertion.
+.de TI
+.ds Ty \\$1
+.if '\\*(Ty'' .ds Ty <class>
+.sp
+\fBAssertion \\*(Na-\\n+(Ac(\\*(Ty).\fR
+.br
+..
+'\" ### .A - Argument
+.de A
+\&\\*(fA\\$1\fR\\$2\\*(fA\\$3\fR\\$4\\*(fA\\$5\fR\\$6
+..
+'\" ### .M - Structure member name
+.de M
+\&\\*(fM\\$1\fR\\$2\\*(fM\\$3\fR\\$4\\*(fM\\$5\fR\\$6
+..
+'\" ### .S - Symbol name
+.de S
+\&\\*(fS\\$1\fR\\$2\\*(fS\\$3\fR\\$4\\*(fS\\$5\fR\\$6
+..
+'\" ### .F - Function name
+.de F
+.ie '\\$1'' \\*(fF\\*(Na\fR
+.el \&\\*(fF\\$1\fR\\$2\\*(fF\\$3\fR\\$4\\*(fF\\$5\fR\\$6
+..
+'\" ### .SM - Make argument smaller
+.de SM
+.ie \\n(.$-2 \&\\$1\s-1\\$2\s0\\$3
+.el \&\s-1\\$1\s0\\$2
+..
+'\" The following macros NS and NE are for internal review purposes.
+'\" ### .NS - Start a note from a comment in the source.
+.de NS
+.br
+.ft I
+.ps -1
+.in 1c
+..
+'\" ### .NE - End a note from a comment in the source.
+.de NE
+.ft P
+.ps
+.in
+.br
+..
+'\" ### .)h - header macro
+.de )h
+'ev 1
+'sp .5i
+'nr P +1
+.tl \\*({h
+'sp .5i
+.br
+'ev
+..
+'\" ### .)f - footer macro
+.de )f
+'ev 1
+'sp .5i
+.tl \\*({f
+.br
+'ev
+'bp
+..
+.if !\nS .nr S 12
+.ps \nS
+.ev 1
+.ps \nS
+.ev
+.if !\nO .nr O 7
+.po \nO
+.ll 6i
+.wh 0 )h
+.wh -1i )f
+.ds {h "'\\*(Na''\\*(Ch'"
+.ds {f "''%''"
+.nr P 0 1
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/mcextern.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mcextern.mc
new file mode 100644
index 000000000..ff6caebbd
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mcextern.mc
@@ -0,0 +1,13 @@
+
+extern Display *Dsp;
+extern Window Win;
+
+extern Window ErrdefWindow;
+extern Drawable ErrdefDrawable;
+extern GC ErrdefGC;
+extern Colormap ErrdefColormap;
+extern Pixmap ErrdefPixmap;
+extern Atom ErrdefAtom;
+extern Cursor ErrdefCursor;
+extern Font ErrdefFont;
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/mcinclude.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mcinclude.mc
new file mode 100644
index 000000000..bc93c8eb3
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mcinclude.mc
@@ -0,0 +1,9 @@
+
+#include <stdlib.h>
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "Xresource.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/mcxpext.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mcxpext.mc
new file mode 100644
index 000000000..8b1378917
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mcxpext.mc
@@ -0,0 +1 @@
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/mcxpinc.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mcxpinc.mc
new file mode 100644
index 000000000..a999173dc
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mcxpinc.mc
@@ -0,0 +1,5 @@
+
+
+#include <stdlib.h>
+#include "xtest.h"
+#include "tet_api.h"
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmlib.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmlib.mc
new file mode 100644
index 000000000..f7df04409
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmlib.mc
@@ -0,0 +1,15 @@
+#
+# This part of the makefile checks for the existance of the libraries
+# and creates them if necessary.
+#
+
+# The xtestlib is made if it doesn't exist
+#
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+#
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmlink.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmlink.mc
new file mode 100644
index 000000000..4d9d8e9f5
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmlink.mc
@@ -0,0 +1,31 @@
+#
+# A version of the test that can be combined together with
+# all the other tests to make one executable. This will save a
+# fair amount of disk space especially if the system does not
+# have shared libraries. Different names are used so that
+# there is no possibility of confusion.
+#
+link.c: $(SOURCES)
+ $(CODEMAKER) -l -o link.c $(SOURCES)
+
+# Link the objects into one large object.
+#
+$(LINKOBJ): $(LOFILES)
+ $(LD) $(LINKOBJOPTS) $(LOFILES) -o $(LINKOBJ)
+
+# Link the object file into the parent directory.
+#
+../$(LINKOBJ): $(LINKOBJ)
+ $(RM) ../$(LINKOBJ)
+ $(LN) $(LINKOBJ) ..
+
+# Make a link to the combined executable.
+#
+$(LINKEXEC): ../Tests
+ $(RM) $(LINKEXEC)
+ $(LN) ../Tests $(LINKEXEC)
+
+../Tests: ../$(LINKOBJ)
+
+linkexec:: $(LINKEXEC) $(AUXFILES) ;
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmmisc.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmmisc.mc
new file mode 100644
index 000000000..08c9d6965
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmmisc.mc
@@ -0,0 +1,22 @@
+#
+# Miscellaneous housekeeping functions.
+#
+
+# clean up object and junk files.
+#
+clean:
+ $(RM) Test $(OFILES) $(LOFILES) $(LINKOBJ) $(LINKEXEC) core\
+ MTest m$(LINKEXEC) $(MOFILES) CONFIG Makefile.bak $(AUXCLEAN)
+
+# clobber - clean up and remove remakable sources.
+#
+clobber: clean
+ $(RM) MTest.c Test.c mlink.c link.c Makefile
+
+# Lint makerules
+#
+lint: $(CFILES)
+ $(LINT) $(LINTFLAGS) $(CFILES) $(LINTTCM) $(LINTLIBS)
+
+LINT:lint
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmmlink.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmmlink.mc
new file mode 100644
index 000000000..5556555cb
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmmlink.mc
@@ -0,0 +1,11 @@
+# A version of the test that can be combined with all the other tests for
+# the macro version of the function.
+#
+mlink.c: $(SOURCES)
+ $(CODEMAKER) -m -l -o mlink.c $(SOURCES)
+
+linkexec:: m$(LINKEXEC) $(AUXFILES) ;
+
+m$(LINKEXEC): ../Tests
+ $(RM) m$(LINKEXEC)
+ $(LN) ../Tests m$(LINKEXEC)
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmmsa.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmmsa.mc
new file mode 100644
index 000000000..e294bd8b2
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmmsa.mc
@@ -0,0 +1,10 @@
+#
+# Build a standalone version of the test case using the macro version
+# of the function.
+#
+MTest: $(MOFILES) $(LIBS) $(TCM) $(AUXFILES)
+ $(CC) $(LDFLAGS) -o $@ $(MOFILES) $(TCM) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+MTest.c: $(SOURCES)
+ $(CODEMAKER) -m -o MTest.c $(SOURCES)
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmpgen.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmpgen.mc
new file mode 100644
index 000000000..9457dbba5
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmpgen.mc
@@ -0,0 +1,18 @@
+#
+# Pixel generation makerules for generating the reference
+# known good image files.
+#
+
+PVOFILES=pvtest.o
+
+pvgen: $(PVOFILES) $(PVLIBS) $(TCM)
+ $(CC) $(LDFLAGS) -o $@ $(PVOFILES) $(TCM) \
+ $(PVLIBS) $(SYSLIBS) $(SYSMATHLIB)
+
+pvtest.o: pvtest.c
+ cc -c -DGENERATE_PIXMAPS $(CFLAGS) pvtest.c
+
+pvtest.c: Test.c
+ $(RM) pvtest.c; \
+ $(LN) Test.c pvtest.c
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmsa.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmsa.mc
new file mode 100644
index 000000000..d40362cd8
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmsa.mc
@@ -0,0 +1,9 @@
+#
+# Build a standalone version of the test case.
+#
+Test: $(OFILES) $(LIBS) $(TCM) $(AUXFILES)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(TCM) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+Test.c: $(SOURCES)
+ $(CODEMAKER) -o Test.c $(SOURCES)
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmxpinit.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmxpinit.mc
new file mode 100644
index 000000000..b8c955e52
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmxpinit.mc
@@ -0,0 +1,15 @@
+#
+# X Protocol tests.
+#
+
+# CFLAGS - Compilation flags specific to the X Protocol tests.
+#
+CFLAGS=$(XP_CFLAGS)
+SYSLIBS=$(XP_SYSLIBS)
+LIBS=$(XP_LIBS)
+
+# LINTFLAGS - Flags for lint specific to the X Protocol tests.
+#
+LINTFLAGS=$(XP_LINTFLAGS)
+LINTLIBS=$(XP_LINTLIBS)
+
diff --git a/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmxplib.mc b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmxplib.mc
new file mode 100644
index 000000000..3a0ecfde3
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/bin/mc/tmpl/mmxplib.mc
@@ -0,0 +1,20 @@
+#
+# This part of the makefile checks for the existance of the libraries
+# and creates them if necessary.
+#
+
+# The xtestlib is made if it doesn't exist
+#
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+#
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
+# The X Protocol test library is made if it doesn't exist
+#
+$(XSTLIB):
+ cd $(XTESTROOT)/src/libproto; $(TET_BUILD_TOOL) install
+
diff --git a/xc/test/xsuite/xtest/src/lib/Makefile b/xc/test/xsuite/xtest/src/lib/Makefile
new file mode 100644
index 000000000..f9e252211
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/Makefile
@@ -0,0 +1,108 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+##########################################################################
+#
+# SCCS:
+# NAME: xtestlib
+# PRODUCT: xtest library
+# AUTHOR: Steve Ratcliffe, UniSoft Ltd.
+# DATE CREATED: 30 Aug 1990
+# TARGETS: libxtest.a
+# MODIFICATIONS:
+#
+##########################################################################
+
+
+CFILES = startup.c ex_startup.c \
+ lookupname.c err.c getevent.c stackorder.c report.c \
+ iponlywin.c badwin.c startcall.c makewin.c checkevent.c \
+ nextvclass.c badgc.c badpixm.c badfont.c badvis.c linkstart.c \
+ issuppvis.c checkarea.c getsize.c pattern.c crechild.c checktile.c \
+ makepixm.c nextvinf.c makegc.c dumpimage.c verimage.c dset.c \
+ delete.c rpt.c \
+ savimage.c checkpixel.c notmember.c setline.c checkgc.c gcflush.c \
+ tpstartup.c nondepth1pix.c gcinclude.c regid.c openfonts.c checkfont.c \
+ badcmap.c makecolmap.c makecur.c makeimg.c checkimg.c opendisp.c \
+ bitcount.c config.c makewin2.c block.c winh.c pointer.c events.c \
+ gettime.c maxsize.c buildtree.c exposecheck.c \
+ settimeout.c makeregion.c xthost.c pfcount.c XTestExt.c devcntl.c \
+ extenavail.c environ.c cursor.c
+OFILES = startup.o ex_startup.o \
+ lookupname.o err.o getevent.o stackorder.o report.o \
+ iponlywin.o badwin.o startcall.o makewin.o checkevent.o \
+ nextvclass.o badgc.o badpixm.o badfont.o badvis.o linkstart.o \
+ issuppvis.o checkarea.o getsize.o pattern.o crechild.o checktile.o \
+ makepixm.o nextvinf.o makegc.o dumpimage.o verimage.o dset.o \
+ delete.o rpt.o \
+ savimage.o checkpixel.o notmember.o setline.o checkgc.o gcflush.o \
+ tpstartup.o nondepth1pix.o gcinclude.o regid.o openfonts.o checkfont.o \
+ badcmap.o makecolmap.o makecur.o makeimg.o checkimg.o opendisp.o \
+ bitcount.o config.o makewin2.o block.o winh.o pointer.o events.o \
+ gettime.o maxsize.o buildtree.o exposecheck.o \
+ settimeout.o makeregion.o xthost.o pfcount.o XTestExt.o devcntl.o \
+ extenavail.o environ.o cursor.o
+
+RM_FILES = *.ln *.o core *.a
+
+##############################################################################
+
+all: $(XTESTINCDIR)/xtestlib.h libxtest.a
+
+libxtest.a: $(OFILES)
+ $(AR) $@ `$(LORDER) $(OFILES) | $(TSORT)`
+ : $(RANLIB) $@
+
+
+.c.o:
+ $(CC) -c $(CFLAGS) $<
+
+install: all
+ $(CP) libxtest.a $(XTESTLIB)
+ $(RANLIB) $(XTESTLIB)
+
+FORCE: CLOBBER all
+
+LINT:
+ $(LINT) $(LINTFLAGS) $(CFILES) $(LINTTCM) $(LINTLIBS)
+
+LINTLIB: $(LINTXTEST)
+
+$(LINTXTEST): llib-lxtest.ln
+ cp $? $@
+ @echo " $? made and installed"
+
+llib-lxtest.ln: $(CFILES)
+ echo $(CFILES) | sed -e 's/linkstart.c //' >/tmp/Lint$$$$.tmp; \
+ $(LINT) -Cxtest $(LINTFLAGS) `cat /tmp/Lint$$$$.tmp` ; \
+ rm -f Lint$$$$.tmp
+
+clean:
+ $(RM) $(RM_FILES)
+
+clobber: clean
+
+doc:
+ ctodoc $(CFILES) > ../../doc/xtestraw.mm
+
+xtlibproto.h: $(CFILES)
+ mkxtl $(CFILES) > xtlibproto.h
+ $(RM) $(XTESTINCDIR)/xtlibproto.h
+ $(CP) xtlibproto.h $(XTESTINCDIR)
+
+tags: $(CFILES)
+ ctags $(CFILES) > tags 2> /dev/null
diff --git a/xc/test/xsuite/xtest/src/lib/XTestExt.c b/xc/test/xsuite/xtest/src/lib/XTestExt.c
new file mode 100644
index 000000000..c94e62b63
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/XTestExt.c
@@ -0,0 +1,180 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+#ifdef GENERATE_PIXMAPS
+/* in this case we never want to do anything like real buffer stuffing or
+ * I/O on our "display" as it isn't real enough for that.
+ */
+#undef XTESTEXTENSION
+#endif /* GENERATE_PIXMAPS */
+
+
+#define NULL 0
+#include "Xlibint.h"
+
+Status
+SimulateKeyPressEvent(dpy, keycode)
+Display *dpy;
+KeyCode keycode;
+{
+#ifdef XTESTEXTENSION
+ XTestFakeKeyEvent(dpy, keycode, 1, 0);
+ return(True);
+#else
+ return(False);
+#endif /* XTESTEXTENSION */
+}
+
+Status
+SimulateKeyReleaseEvent(dpy, keycode)
+Display *dpy;
+KeyCode keycode;
+{
+#ifdef XTESTEXTENSION
+ XTestFakeKeyEvent(dpy, keycode, 0, 0);
+ return(True);
+#else
+ return(False);
+#endif /* XTESTEXTENSION */
+}
+
+Status
+SimulateButtonPressEvent(dpy, button)
+Display *dpy;
+unsigned int button;
+{
+#ifdef XTESTEXTENSION
+ XTestFakeButtonEvent(dpy, button, 1, 0);
+ return(True);
+#else
+ return(False);
+#endif /* XTESTEXTENSION */
+}
+
+Status
+SimulateButtonReleaseEvent(dpy, button)
+Display *dpy;
+unsigned int button;
+{
+#ifdef XTESTEXTENSION
+ XTestFakeButtonEvent(dpy, button, 0, 0);
+ return(True);
+#else
+ return(False);
+#endif /* XTESTEXTENSION */
+}
+
+Status
+CompareCursorWithWindow(dpy, window, cursor)
+Display *dpy;
+Window window;
+Cursor cursor;
+{
+#ifdef XTESTEXTENSION
+ return XTestCompareCursorWithWindow(dpy, window, cursor);
+#else
+ return(False);
+#endif /* XTESTEXTENSION */
+}
+
+Status
+CompareCurrentWithWindow(dpy, window)
+Display *dpy;
+Window window;
+{
+#ifdef XTESTEXTENSION
+ return XTestCompareCurrentCursorWithWindow(dpy, window);
+#else
+ return(False);
+#endif /* XTESTEXTENSION */
+}
+
+Status
+SimulateMotionEvent(dpy, screen, x, y)
+Display *dpy;
+int screen;
+int x;
+int y;
+{
+#ifdef XTESTEXTENSION
+ XTestFakeMotionEvent(dpy, screen, x, y, 0);
+ return(True);
+#else
+ return(False);
+#endif /* XTESTEXTENSION */
+}
+
+#ifndef XTESTEXTENSION
+
+ /* No server extension, but we can still test some client-side functionality, can't we. */
+
+/*
+ * Discard current requests in buffer. Returns True if somthing was
+ * discarded, False otherwise.
+ * The XTEST extension library includes this function.
+ */
+
+static xReq _dummy_request = {
+ 0, 0, 0
+};
+
+Status
+XTestDiscard(dpy)
+ Display *dpy;
+{
+ Bool something;
+ register char *ptr;
+
+ LockDisplay(dpy);
+ if (something = (dpy->bufptr != dpy->buffer)) {
+ for (ptr = dpy->buffer;
+ ptr < dpy->bufptr;
+ ptr += (((xReq *)ptr)->length << 2))
+ dpy->request--;
+ dpy->bufptr = dpy->buffer;
+ dpy->last_req = (char *)&_dummy_request;
+ }
+ UnlockDisplay(dpy);
+ SyncHandle();
+ return something;
+}
+
+
+/*
+ * Change the GContext held within a GC structure. Now it messes with an
+ * opaque data structure. The XTEST extension library includes this function.
+ */
+void
+XTestSetGContextOfGC(gc, gid)
+ GC gc;
+ GContext gid;
+{
+ gc->gid = gid;
+}
+
+/*
+ * Change the Visual ID held within a Visual structure. Now it messes with an
+ * opaque data structure. The XTEST extension library includes this function.
+ */
+void
+XTestSetVisualIDOfVisual(v, vid)
+ Visual *v;
+ VisualID vid;
+{
+ v->visualid = vid;
+}
+
+#endif /* XTESTEXTENSION */
diff --git a/xc/test/xsuite/xtest/src/lib/badcmap.c b/xc/test/xsuite/xtest/src/lib/badcmap.c
new file mode 100644
index 000000000..2ac2e1565
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/badcmap.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdlib.h"
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "pixval.h"
+
+/*
+ *
+ * Create an invalid colourmap ID by creating a readonly colourmap
+ * of the default visual type.
+ *
+ */
+
+Colormap
+badcolormap(disp, win)
+ Display *disp;
+ Window win;
+{
+ Colormap cmap;
+
+ cmap = XCreateColormap(disp, win, DefaultVisual(disp, DefaultScreen(disp)), AllocNone);
+ XFreeColormap(disp, cmap);
+ return cmap;
+}
diff --git a/xc/test/xsuite/xtest/src/lib/badfont.c b/xc/test/xsuite/xtest/src/lib/badfont.c
new file mode 100644
index 000000000..02158bcb1
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/badfont.c
@@ -0,0 +1,46 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "pixval.h"
+
+/*
+ * Return a bad font ID by loading a font and then unloading it.
+ * Note the font ID may be realocated and so become good again by the
+ * time it is used. If the font cannot be found then return 0 - this
+ * is a bad font ID anyway.
+ */
+Font
+badfont(disp)
+Display *disp;
+{
+XFontStruct *fsp;
+Font font;
+
+
+ fsp = XLoadQueryFont(disp, "xtfont0");
+ if (fsp)
+ {
+ font = fsp->fid;
+ XFreeFont(disp, fsp);
+ } else
+ font = 0;
+
+ return(font);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/badgc.c b/xc/test/xsuite/xtest/src/lib/badgc.c
new file mode 100644
index 000000000..20cb8142d
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/badgc.c
@@ -0,0 +1,40 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Return a bad GC id on display disp by creating a GC and
+ * invalidating it using the proposed X Testing extension function
+ * XTestSetGContextOfGC.
+ */
+GC
+badgc(disp)
+Display *disp;
+{
+GC gc;
+
+ gc = XCreateGC(disp, DefaultRootWindow(disp), 0L, (XGCValues *)0);
+ XTestSetGContextOfGC(gc, (GContext)0xFFFFFFFF);
+ /* known invalid as top 3 bits set. */
+
+ return(gc);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/badpixm.c b/xc/test/xsuite/xtest/src/lib/badpixm.c
new file mode 100644
index 000000000..28a963fc9
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/badpixm.c
@@ -0,0 +1,40 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "pixval.h"
+
+/*
+ * Return a bad pixmap id on display disp by creating
+ * a pixmap and freeing it
+ */
+Pixmap
+badpixm(disp)
+Display *disp;
+{
+Pixmap pm;
+Window w;
+
+ w = DefaultRootWindow(disp);
+ pm = XCreatePixmap(disp, w, 100, 100, 1);
+
+ XFreePixmap(disp, pm);
+
+ return(pm);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/badvis.c b/xc/test/xsuite/xtest/src/lib/badvis.c
new file mode 100644
index 000000000..0c8602ca0
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/badvis.c
@@ -0,0 +1,34 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Make a visual bad by using the proposed X Testing extension function
+ * XTestSetVisualIDOfVisual.
+ */
+void
+badvis(v)
+Visual *v;
+{
+ XTestSetVisualIDOfVisual(v, (VisualID)0xFFFFFFFF);
+ /* known invalid as top 3 bits set. */
+}
diff --git a/xc/test/xsuite/xtest/src/lib/badwin.c b/xc/test/xsuite/xtest/src/lib/badwin.c
new file mode 100644
index 000000000..056c92fc8
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/badwin.c
@@ -0,0 +1,38 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "pixval.h"
+
+/*
+ * Return a bad window id on display disp by creating
+ * a window and destroying it
+ */
+Window
+badwin(disp)
+Display *disp;
+{
+Window w;
+
+ w = XCreateSimpleWindow(disp, DefaultRootWindow(disp), 0, 0, 5, 5, 0, 0, 0);
+
+ XDestroyWindow(disp, w);
+
+ return(w);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/bitcount.c b/xc/test/xsuite/xtest/src/lib/bitcount.c
new file mode 100644
index 000000000..bbf568343
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/bitcount.c
@@ -0,0 +1,103 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * Explanation:
+ * First we add 32 1-bit fields to get 16 2-bit fields.
+ * Each 2-bit field is one of 00, 01, or 10 (binary).
+ * We then add all the two-bit fields to get 8 4-bit fields.
+ * These are all one of 0000, 0001, 0010, 0011, or 0100.
+ *
+ * Now we can do something different, becuase for the first
+ * time the value in each k-bit field (k now being 4) is small
+ * enough that adding two k-bit fields results in a value that
+ * still fits in the k-bit field. The result is four 4-bit
+ * fields containing one of {0000,0001,...,0111,1000} and four
+ * more 4-bit fields containing junk (sums that are uninteresting).
+ * Pictorially:
+ * n = 0aaa0bbb0ccc0ddd0eee0fff0ggg0hhh
+ * n>>4 = 00000aaa0bbb0ccc0ddd0eee0fff0ggg
+ * sum = 0aaaWWWWiiiiXXXXjjjjYYYYkkkkZZZZ
+ * where W, X, Y, and Z are the interesting sums (each at most 1000,
+ * or 8 decimal). Masking with 0x0f0f0f0f extracts these.
+ *
+ * Now we can change tactics yet again, because now we have:
+ * n = 0000WWWW0000XXXX0000YYYY0000ZZZZ
+ * n>>8 = 000000000000WWWW0000XXXX0000YYYY
+ * so sum = 0000WWWW000ppppp000qqqqq000rrrrr
+ * where p and r are the interesting sums (and each is at most
+ * 10000, or 16 decimal). The sum `q' is junk, like i, j, and
+ * k above; but it is not necessarry to discard it this time.
+ * One more fold, this time by sixteen bits, gives
+ * n = 0000WWWW000ppppp000qqqqq000rrrrr
+ * n>>16 = 00000000000000000000WWWW000ppppp
+ * so sum = 0000WWWW000ppppp000sssss00tttttt
+ * where s is at most 11000 and t is it most 100000 (32 decimal).
+ *
+ * Now we have t = r+p = (Z+Y)+(X+W) = ((h+g)+(f+e))+((d+c)+(b+a)),
+ * or in other words, t is the number of bits set in the original
+ * 32-bit longword. So all we have to do is return the low byte
+ * (or low 6 bits, but `low byte' is typically just as easy if not
+ * easier).
+ *
+ * This technique is also applicable to 64 and 128 bit words, but
+ * 256 bit or larger word sizes require at least one more masking
+ * step.
+ *
+ * Author: Gene Olsen
+ */
+unsigned int
+bitcount(n)
+ register unsigned long n;
+{
+
+ n = (n & 0x55555555) + ((n >> 1) & 0x55555555);
+ n = (n & 0x33333333) + ((n >> 2) & 0x33333333);
+ n = (n + (n >> 4)) & 0x0f0f0f0f;
+ n += n >> 8;
+ n += n >> 16;
+ return ((unsigned int) (n & 0xff));
+}
+
+/*
+ * Given a pixel value and a mask return a word with masked bits
+ * all squeezed into bottom bits of word (i.e. (0xF1, 0x78) -> 0x0E ).
+ * Used for checking reults of getting images/subimages with plane masks.
+ */
+unsigned long
+getpix(m, p)
+unsigned long m;
+unsigned long p;
+{
+ unsigned long pix = 0;
+ unsigned long bit = 1;
+ unsigned long nbit;
+ unsigned long bb = 1;
+
+ while (bit) {
+ if (p & bit) {
+ if (m & bit)
+ pix |= bb;
+ bb <<= 1;
+ }
+ nbit = bit << 1;
+ if (nbit == bit) /* don't trust some compilers */
+ break;
+ bit = nbit;
+ }
+ debug(1, "getpix: Pixel is %lx from %lx and %lx.", pix, m, p);
+ return pix;
+}
diff --git a/xc/test/xsuite/xtest/src/lib/block.c b/xc/test/xsuite/xtest/src/lib/block.c
new file mode 100644
index 000000000..f197cf912
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/block.c
@@ -0,0 +1,277 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "tet_api.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include <signal.h>
+#include <unistd.h>
+
+/*
+ * Possible child exit codes
+ */
+#define CHILD_EXIT_BLOCKING 0
+#define CHILD_EXIT_NOBLOCKING 1
+#define CHILD_EXIT_ERROR 2
+
+/*
+ * passed as validresults argument to tet_fork
+ */
+#define CHILD_EXIT_MASK 0x3
+
+/*
+ * how long child waits before generating event
+ */
+#define CHILD_SLEEP_TIME (5+(10*config.speedfactor))
+
+/*
+ * how long parent waits before timing out
+ */
+#define TIMEOUT_TIME (30+(10*config.speedfactor))
+
+static char block_file[] = BLOCK_FILE;
+static jmp_buf jumptohere;
+
+/*
+ * Global variables corresponding to block() arguments.
+ * These are set by block() so that block_parent_proc() can access them.
+ */
+static Display *gdisplay;
+static XEvent *gevent;
+static Block_Info *ginfo;
+
+/*
+ * Status variable used to track problems encountered in block_parent_proc()
+ */
+static int parent_status;
+
+static void block_child_proc();
+static void block_parent_proc();
+static int blocker();
+
+/*
+ * Used to test whether or not a procedure blocks. If event is NULL,
+ * then it is assumed that the delivery of any event is sufficient
+ * to unblock procedure. See block.man for more details.
+ */
+Status
+block(display, event, info)
+Display *display;
+XEvent *event;
+Block_Info *info;
+{
+ FILE *fp;
+ int exit_status;
+
+ gdisplay = display;
+ gevent = event;
+ ginfo = info;
+ if (config.speedfactor < 1) {
+ delete("Unsupported speedfactor value: %d", config.speedfactor);
+ return(-1);
+ }
+ fp = fopen(block_file, "w");
+ if (fp == (FILE *) NULL) {
+ delete("Could not create block file: %s", block_file);
+ return(-1);
+ }
+ if (setjmp(jumptohere)) {
+ delete("Timeout in block routine");
+ (void) unlink(block_file);
+ return(-1);
+ }
+ parent_status = 1;
+ exit_status = tet_fork(block_child_proc, block_parent_proc, 0, CHILD_EXIT_MASK);
+ /*
+ * try removing block file just in case it still exists...
+ */
+ (void) unlink(block_file);
+ /*
+ * check for problems in block_parent_proc
+ */
+ if (parent_status == -1)
+ return(-1);
+ /*
+ * verify that we got the expected event
+ * do not verify for types with Ignore_Event_Return set
+ */
+ if (!(info->p_type & Ignore_Event_Return)) {
+ if (event == (XEvent *) NULL) {
+ if (info->event_return.type != MappingNotify) {
+ delete("Unexpected event type: %s", eventname(info->event_return.type));
+ return(-1);
+ }
+ }
+ else {
+ int err = 0;
+
+#define ER ((XAnyEvent *)(&(info->event_return)))
+#define ES ((XAnyEvent *)event)
+ if (ER->type != ES->type) {
+ delete("expected %s, got %s", eventname(ES->type), eventname(ER->type));
+ err++;
+ }
+ if (ER->send_event != True) {
+ delete("send_event not se in returned event");
+ err++;
+ }
+ if (ER->window != ES->window) {
+ delete("wrong window, expected %d, got %d", ES->window, ER->window);
+ err++;
+ }
+ if (err)
+ return(-1);
+ }
+ }
+ switch (exit_status) {
+ default:
+ case CHILD_EXIT_ERROR:
+ delete("Error return from block's child");
+ return(-1);
+ case CHILD_EXIT_BLOCKING:
+ return(1);
+ case CHILD_EXIT_NOBLOCKING:
+ return(0);
+ }
+ /*NOTREACHED*/
+}
+
+/*ARGSUSED*/
+static void
+block_alarm(sig)
+int sig;
+{
+ longjmp(jumptohere, 1);
+}
+
+/*
+ * block_child_proc
+ */
+static void
+block_child_proc()
+{
+ Display *display;
+ XAnyEvent *event = (XAnyEvent *) gevent;
+
+ display = opendisplay();
+ if (display == (Display *) NULL)
+ exit(CHILD_EXIT_ERROR);
+ sleep(CHILD_SLEEP_TIME);
+ if (access(block_file, F_OK))
+ exit(CHILD_EXIT_NOBLOCKING);
+ if (gevent == (XEvent *) NULL) {
+ int retval;
+ unsigned char buf[512];
+
+ retval = XGetPointerMapping(display, buf, sizeof(buf));
+ if (XSetPointerMapping(display, buf, retval) != MappingSuccess)
+ exit(CHILD_EXIT_ERROR);
+ }
+ else if (!XSendEvent(display, event->window, False, NoEventMask, gevent))
+ exit(CHILD_EXIT_ERROR);
+ XCloseDisplay(display);
+ exit(CHILD_EXIT_BLOCKING);
+}
+
+static void
+block_parent_proc()
+{
+ (void) signal(SIGALRM, block_alarm);
+ alarm(TIMEOUT_TIME);
+ parent_status = blocker(gdisplay, ginfo);
+ alarm(0);
+ if (parent_status == -1)
+ return;
+ if (access(block_file, F_OK)) {
+ delete("Block file mysteriously disappeared: %s", block_file);
+ parent_status = -1;
+ return;
+ }
+ if (unlink(block_file)) {
+ /*
+ * return value of unlink() does not always indicate
+ * whether or not the file was removed...pc
+ */
+ if (!access(block_file, F_OK)) {
+ delete("Block file could not be removed: %s", block_file);
+ parent_status = -1;
+ return;
+ }
+ }
+}
+
+/*
+ * invoke the procedure which is being tested for blocking
+ *
+ * returns -1 on unexpected error
+ */
+static int
+blocker(display, info)
+Display *display;
+Block_Info *info;
+{
+ _startcall(display);
+ if (isdeleted())
+ return(-1);
+ switch (info->p_type) {
+ default:
+ delete("Unrecognized argument type in block: %x", info->p_type);
+ return(-1);
+ case XEventsQueued_Like:
+ info->int_return = (*(info->XEventsQueued_Like_Proc))
+ (display,
+ info->XEventsQueued_Args.mode);
+ break;
+ case XPending_Like:
+ info->int_return = (*(info->XPending_Like_Proc))
+ (display);
+ break;
+ case XIfEvent_Like:
+ case XPeekIfEvent_Like:
+ (*(info->XIfEvent_Like_Proc))
+ (display,
+ &(info->event_return),
+ info->XIfEvent_Args.predicate,
+ info->XIfEvent_Args.arg);
+ break;
+ case XMaskEvent_Like:
+ (*(info->XMaskEvent_Like_Proc))
+ (display,
+ info->XMaskEvent_Args.event_mask,
+ &(info->event_return));
+ break;
+ case XNextEvent_Like:
+ case XPeekEvent_Like:
+ (*(info->XNextEvent_Like_Proc))
+ (display,
+ &(info->event_return));
+ break;
+ case XWindowEvent_Like:
+ (*(info->XWindowEvent_Like_Proc))
+ (display,
+ info->XWindowEvent_Args.w,
+ info->XWindowEvent_Args.event_mask,
+ &(info->event_return));
+ break;
+ }
+ _endcall(display);
+ return(0);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/buildtree.c b/xc/test/xsuite/xtest/src/lib/buildtree.c
new file mode 100644
index 000000000..9f0eeace4
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/buildtree.c
@@ -0,0 +1,282 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+#include "string.h"
+
+
+/*
+ * Some standard trees for general purpose use.
+ */
+/*
+ * Two overlapping windows with various piles of subwindows.
+ */
+char *STreeGen[] = {
+ ".",
+ "A . (5,5) 50x80",
+ "A1 A (5,10) 30x10",
+ "A1a A1 (1,1) 8x8",
+ "A1b A1a (1,1) 6x6",
+ "A1c A1b (1,1) 4x4",
+ "A2 A (20,5) 10x40",
+ "A2a A2 (2,2) 5x5",
+ "A2b A2 (2,10) 5x5",
+ "A2c A2 (2,20) 5x5",
+ "A2d A2 (2,30) 5x5",
+ "A2e A2 (2,36) 5x5",
+ "B . (45,8) 50x80",
+ "B1 B (2,2) 45x75",
+ "B2 B1 (2,2) 40x70",
+ "B3 B2 (2,2) 35x65",
+ "B4 B3 (2,2) 30x60",
+ "B5 B4 (2,2) 25x55",
+ "B6 B5 (2,2) 20x50",
+};
+int NSTreeGen = NELEM(STreeGen);
+
+/*
+ * A single window with a variety of subwindows.
+ */
+char *STreeSgl[] = {
+ ".",
+ "top . (8, 8) 80x70",
+ "A top (10, 10) 15x15",
+ "A1 A (3, 5) 3x4",
+ "B top (40, 20) 17x14",
+ "B1 B (4, 5) 6x6",
+ "B1a B1 (1, 1) 1x1",
+ "B2 B (2, 8) 3x3",
+ "C top (20, 60) 20x30",
+};
+int NSTreeSgl = NELEM(STreeSgl);
+
+/*
+ * Collection of overlapping sibling windows designed for expose checking.
+ */
+char *STreeOlsib[] = {
+ ". allfg",
+ "A . (10,10) 70x3",
+ "B . (15,3) 2x50",
+ "C . (30,8) 4x60",
+ "D . (17,20) 20x23",
+ "E . (7,51) 60x6",
+ "F . (4,78) 70x4",
+ "G . (60,38) 10x4",
+ "H . (60,38) 4x13",
+ "I . (44,5) 20x21",
+};
+int NSTreeOlsib = NELEM(STreeOlsib);
+
+/*
+ * Duplicate a string. This is the functionallity sometimes provided by
+ * strdup, but because it's not commonly supported, we provide our own.
+ */
+char *
+xt_strdup(str)
+char *str;
+{
+char *sp = NULL;
+
+ if (str)
+ sp = (char*)malloc(strlen(str)+1);
+ if (sp)
+ strcpy(sp, str);
+ return(sp);
+}
+
+/*
+ * Build a tree of windows given a description in list.
+ * The tree has the given parent.
+ */
+struct buildtree *
+buildtree(disp, parent, list, nlist)
+Display *disp;
+Window parent;
+char **list;
+int nlist;
+{
+struct area area;
+struct buildtree *btbase;
+struct buildtree *btp;
+char *line;
+char *str;
+unsigned long pixel;
+int depth;
+int i;
+int allfg = 0;
+int borders = 0;
+
+ pixel = W_FG;
+
+ btbase = (struct buildtree *)calloc(sizeof(struct buildtree)*nlist, 1);
+ if (btbase == NULL) {
+ delete("Not enough memory in buildtree()");
+ return((struct buildtree *) 0);
+ }
+ regid(disp, (union regtypes *)&btbase, REG_MALLOC);
+
+ depth = getdepth(disp, parent);
+
+ line = xt_strdup(list[0]);
+ if (line == (char*)0) {
+ delete("Out of memory in buildtree");
+ return((struct buildtree *) 0);
+ }
+
+ btp = btbase;
+ btp->name = strtok(line, " \t");
+ btp->pname = (char*)0;
+ btp->wid = parent;
+ btp->num = nlist;
+ btp->opts = 0;
+ btp->uflags = 0;
+
+ /* Pick up options */
+ while ((str = strtok((char*)0, " \t")) != 0) {
+ if (strcmp(str, "allfg") == 0)
+ allfg = 1;
+ else if (strcmp(str, "borders") == 0)
+ borders = 1;
+ }
+
+ for (i = 1; i < nlist; i++) {
+ btp = &btbase[i];
+
+ line = xt_strdup(list[i]);
+ if (line == (char*)0) {
+ delete("Out of memory in buildtree");
+ return((struct buildtree *) 0);
+ }
+ regid(disp, (union regtypes *)&line, REG_MALLOC);
+
+ btp->opts = 0;
+ btp->uflags = 0;
+
+ /* Parse child description */
+ btp->name = strtok(line, " ");
+ btp->pname = strtok((char*)0, " ");
+ btp->x = area.x = atoi(strtok((char*)0, " (,"));
+ btp->y = area.y = atoi(strtok((char*)0, " ,)"));
+ btp->width = area.width = atoi(strtok((char*)0, " x"));
+ btp->height = area.height = atoi(strtok((char*)0, " x"));
+ while ((str = strtok((char*)0, " \t")) != NULL) {
+ if (strcmp(str, "unmap") == 0)
+ btp->opts |= BT_UNMAP;
+ }
+
+ btp->parent = btntobtp(btbase, btp->pname);
+ if (btp->parent == 0) {
+ delete("Can't find window name '%s' in buildtree()", btp->pname);
+ return((struct buildtree *) 0);
+ }
+
+ if (btp->opts & BT_UNMAP)
+ btp->wid = creunmapchild(disp, btp->parent->wid, &area);
+ else
+ btp->wid = crechild(disp, btp->parent->wid, &area);
+
+ /*
+ * Set the background pixel so overlapping of windows can be
+ * detected.
+ */
+ XSetWindowBackground(disp, btp->wid, pixel);
+ XClearWindow(disp, btp->wid);
+ if (!allfg) {
+ pixel++;
+ pixel &= DEPTHMASK(depth);
+ }
+ if (borders) {
+ XSetWindowBorderWidth(disp, btp->wid, 1);
+ btp->borderwidth = 1;
+ } else
+ btp->borderwidth = 0;
+ }
+ return(btbase);
+}
+
+/*
+ * Return a pointer to the buildtree structure corresponding to a given name.
+ */
+struct buildtree *
+btntobtp(list, name)
+struct buildtree *list;
+char *name;
+{
+int n = list[0].num;
+
+ while (n-- > 0) {
+ if (strcmp(name, list->name) == 0)
+ return(list);
+ list++;
+ }
+ return(0);
+}
+
+/*
+ * Return a pointer to the buildtree structure corresponding to a given window
+ * ID.
+ */
+struct buildtree *
+btwtobtp(list, w)
+struct buildtree *list;
+Window w;
+{
+int n = list[0].num;
+
+ while (n-- > 0) {
+ if (list->wid == w)
+ return(list);
+ list++;
+ }
+ return(0);
+}
+
+/*
+ * Return the window id corresponding to the given name.
+ */
+Window
+btntow(list, name)
+struct buildtree *list;
+char *name;
+{
+struct buildtree *btp;
+
+ btp = btntobtp(list, name);
+ return(btp->wid);
+}
+
+/*
+ * Return the window name corresponding to the given id.
+ */
+char *
+btwton(list, w)
+struct buildtree *list;
+Window w;
+{
+struct buildtree *btp;
+
+ btp = btwtobtp(list, w);
+ if (btp)
+ return(btp->name);
+ return (char *)NULL;
+}
+
diff --git a/xc/test/xsuite/xtest/src/lib/checkarea.c b/xc/test/xsuite/xtest/src/lib/checkarea.c
new file mode 100644
index 000000000..3e3215b5e
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/checkarea.c
@@ -0,0 +1,203 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+static void doerr();
+
+#define inarea(ap, x, y) \
+(\
+ (x >= ap->x && x < ap->x+ap->width && y >= ap->y && y < ap->y+ap->height)\
+ ? True: False\
+)
+
+/*
+ * Check that each pixel within the specified area is set to
+ * inpix and that each pixel outside the area is set to outpix.
+ * If flags are CHECK_IN only the inside is checked.
+ * If flags are CHECK_OUT only the outside is checked.
+ * flags of 0 or CHECK_ALL check both.
+ * If ap is NULL then the whole window is checked. (See also checkclear)
+ */
+Status
+checkarea(disp, d, ap, inpix, outpix, flags)
+Display *disp;
+Drawable d;
+register struct area *ap;
+unsigned long inpix;
+unsigned long outpix;
+int flags;
+{
+register int x, y;
+XImage *im;
+int xorig;
+int yorig;
+unsigned int width;
+unsigned int height;
+register unsigned long pix;
+struct area area;
+int inloopflag = 0;
+
+ if (flags == 0)
+ flags = CHECK_ALL;
+ if ((flags & CHECK_ALL) == 0) {
+ report("assert error in checkarea()");
+ printf("assert error in checkarea()\n");
+ exit(1);
+ }
+
+ getsize(disp, d, &width, &height);
+
+ /*
+ * If a NULL ap has been given then look at the whole window.
+ */
+ if (ap == (struct area *)0) {
+ ap = &area;
+ ap->x = 0;
+ ap->y = 0;
+ ap->width = width;
+ ap->height = height;
+ flags &= ~CHECK_OUT;
+ }
+
+ im = XGetImage(disp, d, 0, 0, width, height, AllPlanes, ZPixmap);
+ if (im == (XImage*)0) {
+ delete("XGetImage failed");
+ return(False);
+ }
+
+ /*
+ * If we are only checking inside then only examine that part.
+ */
+ if ((flags & CHECK_ALL) == CHECK_IN) {
+ xorig = ap->x;
+ yorig = ap->y;
+ width = ap->width;
+ height = ap->height;
+ } else {
+ xorig = 0;
+ yorig = 0;
+ }
+
+ for (y = yorig; y < yorig+height; y++) {
+ for (x = xorig; x < xorig+width; x++) {
+ inloopflag = 1;
+ pix = XGetPixel(im, x, y);
+ if (inarea(ap, x, y)) {
+ if (pix != inpix && (flags & CHECK_IN)) {
+ if (!(flags & CHECK_DIFFER))
+ doerr(im, ap, inpix, outpix, flags);
+ XDestroyImage(im);
+ return(False);
+ }
+ } else {
+ if (pix != outpix && (flags & CHECK_OUT)) {
+ if (!(flags & CHECK_DIFFER))
+ doerr(im, ap, inpix, outpix, flags);
+ XDestroyImage(im);
+ return(False);
+ }
+ }
+ }
+ }
+
+ /* This is to chatch bugs */
+ if (inloopflag == 0) {
+ delete("No pixels checked in checkarea - internal error");
+ XDestroyImage(im);
+ return(False);
+ }
+ XDestroyImage(im);
+ return(True);
+}
+
+/*
+ * Check that the whole window or pixmap is clear (set to pixel value W_BG)
+ */
+Status
+checkclear(disp, d)
+Display *disp;
+Drawable d;
+{
+ return(checkarea(disp, d, (struct area *)0, W_BG, W_BG, CHECK_IN));
+}
+
+/*
+ * Make up an error file by faking a known good image.
+ */
+static void
+doerr(im, ap, inpix, outpix, flags)
+XImage *im;
+struct area *ap;
+unsigned long inpix;
+unsigned long outpix;
+int flags;
+{
+XImage *good;
+XImage *bad;
+int x, y;
+char name[32];
+extern int Errnum;
+
+ flags &= CHECK_ALL;
+
+ /*
+ * Make copies of the image, because we are going to scribble into them.
+ */
+ good = XSubImage(im, 0, 0, im->width, im->height);
+ bad = XSubImage(im, 0, 0, im->width, im->height);
+
+ for (y = 0; y < im->height; y++) {
+ for (x = 0; x < im->width; x++) {
+ /*
+ * For parts of the image that we are not interested in
+ * then we set both good and bad to W_BG.
+ * Otherwise build up a good image.
+ */
+ if (inarea(ap, x, y)) {
+ if (flags & CHECK_IN) {
+ XPutPixel(good, x, y, inpix);
+ } else {
+ XPutPixel(good, x, y, W_BG);
+ XPutPixel(bad, x, y, W_BG);
+ }
+ } else {
+ if (flags & CHECK_OUT) {
+ XPutPixel(good, x, y, outpix);
+ } else {
+ XPutPixel(good, x, y, W_BG);
+ XPutPixel(bad, x, y, W_BG);
+ }
+ }
+ }
+ }
+ report("Pixel mismatch in image");
+
+ /* Making up an error file should be a subroutine.. */
+ sprintf(name, "Err%04d.err", Errnum++);
+ report("See file %s for details", name);
+ (void) unlink(name);
+ dumpimage(bad, name, (struct area *)0);
+ dumpimage(good, name, (struct area *)0);
+
+ XDestroyImage(good);
+ XDestroyImage(bad);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/checkevent.c b/xc/test/xsuite/xtest/src/lib/checkevent.c
new file mode 100644
index 000000000..3410a2450
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/checkevent.c
@@ -0,0 +1,560 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/***********************************************************
+Copyright 1987, 1989 by Digital Equipment Corporation, Maynard, Massachusetts,
+
+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.
+
+******************************************************************/
+/**
+* FACILITY: Regression Test Library
+*
+* ABSTRACT:
+*
+* Check two arbitrary events to see if they match, report
+* an error if they don't
+*
+* AUTHOR:
+* Larry Jones 21-Dec-1987
+*
+* MODIFIED BY:
+*
+* x-5 EJM0003 Erik J. Morse, 03-Feb-1989
+* Remove window check line for keymap events.
+*
+* x-4 EJM0004 Erik J. Morse, 19-July-1988
+* Type case DCMP args to long to avoid lint errors.
+* Remove check for window from XMappinEvent since it is unused.
+* Only check xmapping.first_keycode and xmapping.count fields
+* if the event is a MappingKeyboard one.
+*
+* x-3 EJM0003 Erik J. Morse, 19-May-1988
+* Remove if (!errflg) check
+*
+* x-2 EJM0002 Erik J. Morse, 06-Jan-1988
+* Fix incompatabilites in event fields and make error reporting
+* clearer.
+*
+* x-1 EJM0001 Erik J. Morse, 24-Dec-1987
+* Rewrite to use new check_item routines and to properly use
+* unions fields.
+*
+* ----
+* Steve Ratcliffe, 14 Sep 1990
+* Rewritten for use within the xtest/phoenix system.
+* I have not verified that all the fields are covered by this routine.
+*
+* CALLING SEQUENCE:
+*
+* checkevent(good, ev)
+*
+* FORMAL PARAMETERS:
+*
+* good
+* pointer to an XEvent
+* a known good event
+*
+* ev
+* pointer to an XEvent
+* the event pulled off the queue by a XNextEvent or
+* XPeekEvent call
+*
+* IMPLICIT INPUTS:
+*
+* NONE
+*
+* IMPLICIT OUTPUTS:
+*
+* NONE
+*
+* COMPLETION STATUS: (or ROUTINE VALUE:)
+*
+* Returns number of fields that failed or -1 if the event was
+* not recognised as valid.
+*
+* SIDE EFFECTS:
+*
+* NONE
+*
+**/
+
+/*
+ * intentionally left out time field checks because we never know what
+ * they will contain.
+ */
+
+#include "stdio.h"
+#include "xtest.h"
+#include "tet_api.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/* Compare values (address type) */
+#define ACMP(g, t, str) if (g != t) {\
+ report("Checking event type %s", eventname(good->type)); \
+ report("found error in %s field, was 0x%lx, expecting 0x%lx", str, t, g);\
+ fail++; \
+ } else pass++;
+
+/* Compare values (decimal type) */
+#define DCMP(g, t, str) if (g != t) {\
+ report("Checking event type %s", eventname(good->type)); \
+ report("found error in %s field, was %ld, expecting %ld",str,t,g);\
+ fail++; \
+ } else pass++;
+
+/* Compare values (unsigned type) */
+#define UCMP(g, t, str) if (g != t) {\
+ report("Checking event type %s", eventname(good->type)); \
+ report("found error in %s field, was %lu, expecting %lu",str,t,g);\
+ fail++; \
+ } else pass++;
+
+/*
+ * Compare two events.
+ * Returns the number of fields that compared false.
+ * On error (eg. no such event type) returns -1.
+ */
+int
+checkevent(good, ev)
+XEvent *good;
+XEvent *ev;
+{
+int i;
+int fail;
+int pass;
+char tempstr[50];
+
+ fail = 0;
+ pass = 0;
+
+ /*
+ * First check the type. If the type is incorrect then we return
+ * immediately since there is almost certainly no point in testing
+ * the other fields.
+ */
+ if (good->type != ev->type) {
+ report("Incorrect event type %s, was expecting %s",
+ eventname(ev->type), eventname(good->type));
+ fail++;
+ return(1);
+ } else
+ pass++;
+
+ ACMP((char*)good->xany.display, (char*)ev->xany.display, "display");
+
+ switch (good->type) {
+ case KeyPress:
+ case KeyRelease:
+ case ButtonPress:
+ case ButtonRelease:
+ case MotionNotify:
+ case EnterNotify:
+ case LeaveNotify:
+ UCMP(good->xkey.window, ev->xkey.window, "window");
+ UCMP(good->xkey.root, ev->xkey.root, "root");
+ UCMP(good->xkey.subwindow, ev->xkey.subwindow, "subwindow");
+ DCMP((long)good->xkey.x, (long)ev->xkey.x, "x coord");
+ DCMP((long)good->xkey.y, (long)ev->xkey.y, "y coord");
+ DCMP((long)good->xkey.x_root, (long)ev->xkey.x_root, "x_root");
+ DCMP((long)good->xkey.y_root, (long)ev->xkey.y_root, "y_root");
+
+ switch (good->type) {
+ case KeyPress:
+ case KeyRelease:
+ case ButtonPress:
+ case ButtonRelease:
+ UCMP((unsigned long)good->xkey.state,
+ (unsigned long)ev->xkey.state, "state");
+ DCMP((long)good->xkey.same_screen,
+ (long)ev->xkey.same_screen, "same screen");
+ break;
+ case MotionNotify:
+ UCMP((unsigned long)good->xmotion.state,
+ (unsigned long)ev->xmotion.state, "state");
+ DCMP((long)good->xmotion.is_hint,
+ (long)ev->xmotion.is_hint, "is hint");
+ DCMP((long)good->xmotion.same_screen,
+ (long)ev->xmotion.same_screen, "same screen");
+ break;
+ default:
+ DCMP((long)good->xcrossing.mode,
+ (long)ev->xcrossing.mode, "mode");
+ DCMP((long)good->xcrossing.detail,
+ (long)ev->xcrossing.detail, "detail");
+ DCMP((long)good->xcrossing.same_screen,
+ (long)ev->xcrossing.same_screen, "same screen");
+ DCMP((long)good->xcrossing.focus,
+ (long)ev->xcrossing.focus, "focus");
+ UCMP((unsigned long)good->xcrossing.state,
+ (unsigned long)ev->xcrossing.state, "state");
+ }
+
+ switch (good->type) {
+ case KeyPress:
+ case KeyRelease:
+ UCMP((unsigned long)good->xkey.keycode,
+ (unsigned long)ev->xkey.keycode, "keycode");
+ break;
+ case ButtonPress:
+ case ButtonRelease:
+ UCMP((unsigned long)good->xbutton.button,
+ (unsigned long)ev->xbutton.button, "button");
+ break;
+ }
+ break;
+
+ case FocusIn:
+ case FocusOut:
+ UCMP(good->xfocus.window, ev->xfocus.window,
+ "window");
+ DCMP((long)good->xfocus.mode, (long)ev->xfocus.mode,
+ "mode");
+ DCMP((long)good->xfocus.detail, (long)ev->xfocus.detail,
+ "detail");
+ break;
+
+ case KeymapNotify:
+ UCMP(good->xkeymap.window, ev->xkeymap.window,
+ "window");
+ for (i = 0; i < 32; i++) {
+ (void)sprintf(tempstr, "key vector[%d]",i);
+ DCMP((long)good->xkeymap.key_vector[i],
+ (long)ev->xkeymap.key_vector[i], tempstr);
+ }
+ break;
+
+ case Expose:
+ UCMP(good->xexpose.window, ev->xexpose.window,
+ "window");
+ DCMP((long)good->xexpose.x, (long)ev->xexpose.x,
+ "x coord");
+ DCMP((long)good->xexpose.y, (long)ev->xexpose.y,
+ "y coord");
+ DCMP((long)good->xexpose.width, (long)ev->xexpose.width,
+ "width");
+ DCMP((long)good->xexpose.height, (long)ev->xexpose.height,
+ "height");
+ DCMP((long)good->xexpose.count, (long)ev->xexpose.count,
+ "count");
+ break;
+
+ case GraphicsExpose:
+ UCMP(good->xgraphicsexpose.drawable,
+ ev->xgraphicsexpose.drawable, "drawable");
+ DCMP((long)good->xgraphicsexpose.x,
+ (long)ev->xgraphicsexpose.x, "x coord");
+ DCMP((long)good->xgraphicsexpose.y,
+ (long)ev->xgraphicsexpose.y, "y coord");
+ DCMP((long)good->xgraphicsexpose.width,
+ (long)ev->xgraphicsexpose.width, "width");
+ DCMP((long)good->xgraphicsexpose.height,
+ (long)ev->xgraphicsexpose.height, "height");
+ DCMP((long)good->xgraphicsexpose.count,
+ (long)ev->xgraphicsexpose.count, "count");
+ DCMP((long)good->xgraphicsexpose.major_code,
+ (long)ev->xgraphicsexpose.major_code, "major code");
+ DCMP((long)good->xgraphicsexpose.minor_code,
+ (long)ev->xgraphicsexpose.minor_code, "minor code");
+ break;
+
+ case NoExpose:
+ UCMP(good->xnoexpose.drawable, ev->xnoexpose.drawable,
+ "drawable");
+ DCMP((long)good->xnoexpose.major_code,
+ (long)ev->xnoexpose.major_code, "major code");
+ DCMP((long)good->xnoexpose.minor_code,
+ (long)ev->xnoexpose.minor_code, "minor code");
+ break;
+
+ case VisibilityNotify:
+ UCMP(good->xvisibility.window, ev->xvisibility.window,
+ "window");
+ DCMP((long)good->xvisibility.state,
+ (long)ev->xvisibility.state, "state");
+ break;
+
+ case CreateNotify:
+ UCMP(good->xcreatewindow.parent, ev->xcreatewindow.parent,
+ "window parent");
+ UCMP(good->xcreatewindow.window, ev->xcreatewindow.window,
+ "window");
+ DCMP((long)good->xcreatewindow.x, (long)ev->xcreatewindow.x,
+ "x coord");
+ DCMP((long)good->xcreatewindow.y, (long)ev->xcreatewindow.y,
+ "y coord");
+ DCMP((long)good->xcreatewindow.width,
+ (long)ev->xcreatewindow.width, "width");
+ DCMP((long)good->xcreatewindow.height,
+ (long)ev->xcreatewindow.height, "height");
+ DCMP((long)good->xcreatewindow.border_width,
+ (long)ev->xcreatewindow.border_width, "border width");
+ DCMP((long)good->xcreatewindow.override_redirect,
+ (long)ev->xcreatewindow.override_redirect,
+ "override redirect");
+ break;
+
+ case DestroyNotify:
+ UCMP(good->xdestroywindow.event, ev->xdestroywindow.event,
+ "event window");
+ UCMP(good->xdestroywindow.window, ev->xdestroywindow.window,
+ "window");
+ break;
+
+ case UnmapNotify:
+ UCMP(good->xunmap.event, ev->xunmap.event,
+ "event window");
+ UCMP(good->xunmap.window, ev->xunmap.window,
+ "window");
+ DCMP((long)good->xunmap.from_configure,
+ (long)ev->xunmap.from_configure, "from configure");
+ break;
+
+ case MapNotify:
+ UCMP(good->xmap.event, ev->xmap.event,
+ "event window");
+ UCMP(good->xmap.window, ev->xmap.window, "window");
+ DCMP((long)good->xmap.override_redirect,
+ (long)ev->xmap.override_redirect, "override redirect");
+ break;
+
+ case MapRequest:
+ UCMP(good->xmaprequest.parent, ev->xmaprequest.parent,
+ "window parent");
+ UCMP(good->xmaprequest.window, ev->xmaprequest.window,
+ "window");
+ break;
+
+ case ReparentNotify:
+ UCMP(good->xreparent.event, ev->xreparent.event,
+ "event window");
+ UCMP(good->xreparent.window, ev->xreparent.window, "window");
+ UCMP(good->xreparent.parent, ev->xreparent.parent,
+ "window parent");
+ DCMP((long)good->xreparent.x, (long)ev->xreparent.x, "x coord");
+ DCMP((long)good->xreparent.y, (long)ev->xreparent.y, "y coord");
+ DCMP((long)good->xreparent.override_redirect,
+ (long)ev->xreparent.override_redirect,
+ "override redirect");
+ break;
+
+ case ConfigureNotify:
+ UCMP(good->xconfigure.event, ev->xconfigure.event,
+ "event window");
+ UCMP(good->xconfigure.window, ev->xconfigure.window, "window");
+ DCMP((long)good->xconfigure.x, (long)ev->xconfigure.x,
+ "x coord");
+ DCMP((long)good->xconfigure.y, (long)ev->xconfigure.y,
+ "y coord");
+ DCMP((long)good->xconfigure.width, (long)ev->xconfigure.width,
+ "width");
+ DCMP((long)good->xconfigure.height, (long)ev->xconfigure.height,
+ "height");
+ DCMP((long)good->xconfigure.border_width,
+ (long)ev->xconfigure.border_width, "border width");
+ UCMP(good->xconfigure.above, ev->xconfigure.above,
+ "window above");
+ DCMP((long)good->xconfigure.override_redirect,
+ (long)ev->xconfigure.override_redirect,
+ "override redirect");
+ break;
+
+ case ConfigureRequest:
+ UCMP(good->xconfigurerequest.parent,
+ ev->xconfigurerequest.parent, "window parent");
+ UCMP(good->xconfigurerequest.window,
+ ev->xconfigurerequest.window, "window");
+ DCMP((long)good->xconfigurerequest.x,
+ (long)ev->xconfigurerequest.x, "x coord");
+ DCMP((long)good->xconfigurerequest.y,
+ (long)ev->xconfigurerequest.y, "y coord");
+ DCMP((long)good->xconfigurerequest.width,
+ (long)ev->xconfigurerequest.width, "width");
+ DCMP((long)good->xconfigurerequest.height,
+ (long)ev->xconfigurerequest.height, "height");
+ DCMP((long)good->xconfigurerequest.border_width,
+ (long)ev->xconfigurerequest.border_width,
+ "border width");
+ UCMP(good->xconfigurerequest.above, ev->xconfigurerequest.above,
+ "window above");
+ DCMP((long)good->xconfigurerequest.detail,
+ (long)ev->xconfigurerequest.detail, "detail");
+ UCMP(good->xconfigurerequest.value_mask,
+ ev->xconfigurerequest.value_mask, "window value mask");
+ break;
+
+ case GravityNotify:
+ UCMP(good->xgravity.event, ev->xgravity.event, "event window");
+ UCMP(good->xgravity.window, ev->xgravity.window, "window");
+ DCMP((long)good->xgravity.x, (long)ev->xgravity.x, "x coord");
+ DCMP((long)good->xgravity.y, (long)ev->xgravity.y, "y coord");
+ break;
+
+ case ResizeRequest:
+ UCMP(good->xresizerequest.window, ev->xresizerequest.window,
+ "window");
+ DCMP((long)good->xresizerequest.width,
+ (long)ev->xresizerequest.width, "width");
+ DCMP((long)good->xresizerequest.height,
+ (long)ev->xresizerequest.height, "height");
+ break;
+
+ case CirculateNotify:
+ UCMP(good->xcirculate.event, ev->xcirculate.event,
+ "event window");
+ UCMP(good->xcirculate.window, ev->xcirculate.window, "window");
+ DCMP((long)good->xcirculate.place, (long)ev->xcirculate.place,
+ "place");
+ break;
+
+ case CirculateRequest:
+ UCMP(good->xcirculaterequest.parent,
+ ev->xcirculaterequest.parent, "window parent");
+ UCMP(good->xcirculaterequest.window,
+ ev->xcirculaterequest.window, "window");
+ DCMP((long)good->xcirculaterequest.place,
+ (long)ev->xcirculaterequest.place, "place");
+ break;
+
+ case PropertyNotify:
+ UCMP(good->xproperty.window, ev->xproperty.window, "window");
+ UCMP(good->xproperty.atom, ev->xproperty.atom, "atom");
+ DCMP((long)good->xproperty.state, (long)ev->xproperty.state,
+ "state");
+ break;
+
+ case SelectionClear:
+ UCMP(good->xselectionclear.window, ev->xselectionclear.window,
+ "window");
+ UCMP(good->xselectionclear.selection,
+ ev->xselectionclear.selection, "selection");
+ break;
+
+ case SelectionRequest:
+ UCMP(good->xselectionrequest.owner, ev->xselectionrequest.owner,
+ "window owner");
+ UCMP(good->xselectionrequest.requestor,
+ ev->xselectionrequest.requestor, "window requestor");
+ UCMP(good->xselectionrequest.selection,
+ ev->xselectionrequest.selection, "atom selection");
+ UCMP(good->xselectionrequest.target,
+ ev->xselectionrequest.target, "atom target");
+ UCMP(good->xselectionrequest.property,
+ ev->xselectionrequest.property, "atom property");
+ break;
+
+ case SelectionNotify:
+ UCMP(good->xselection.requestor, ev->xselection.requestor,
+ "window requestor");
+ UCMP(good->xselection.selection, ev->xselection.selection,
+ "atom selection");
+ UCMP(good->xselection.target, ev->xselection.target,
+ "atom target");
+ UCMP(good->xselection.property, ev->xselection.property,
+ "atom property");
+ break;
+
+ case ColormapNotify:
+ UCMP(good->xcolormap.window, ev->xcolormap.window, "window");
+ UCMP(good->xcolormap.colormap, ev->xcolormap.colormap,
+ "color map");
+ DCMP((long)good->xcolormap.new, (long)ev->xcolormap.new,
+ "new");
+ DCMP((long)good->xcolormap.state, (long)ev->xcolormap.state,
+ "state");
+ break;
+
+ case ClientMessage:
+ UCMP(good->xclient.window, ev->xclient.window, "window");
+ UCMP(good->xclient.message_type, ev->xclient.message_type,
+ "message type");
+ DCMP((long)good->xclient.format, (long)ev->xclient.format,
+ "format");
+
+ switch(good->xclient.format) {
+
+ case 8:
+ for (i = 0; i < 20; i++) {
+ (void)sprintf(tempstr, "data.b[%d]", i);
+ DCMP((long)good->xclient.data.b[i],
+ (long)ev->xclient.data.b[i], tempstr);
+ }
+ break;
+
+ case 16:
+ for (i = 0; i < 10; i++) {
+ (void)sprintf(tempstr, "data.s[%d]", i);
+ DCMP((long)good->xclient.data.s[i],
+ (long)ev->xclient.data.s[i], tempstr);
+ }
+ break;
+
+ case 32:
+ default:
+ for (i = 0; i < 5; i++) {
+ (void)sprintf(tempstr, "data.l[%d]", i);
+ DCMP((long)good->xclient.data.l[i],
+ (long)ev->xclient.data.l[i], tempstr);
+ }
+
+ }
+
+
+ case MappingNotify:
+ DCMP((long)good->xmapping.request, (long)ev->xmapping.request,
+ "request");
+ if (good->xmapping.request == MappingKeyboard) {
+ DCMP((long)good->xmapping.first_keycode,
+ (long)ev->xmapping.first_keycode,
+ "first keycode");
+ DCMP((long)good->xmapping.count,
+ (long)ev->xmapping.count, "count");
+ }
+ break;
+
+ default:
+ report("Invalid event type %d", good->type);
+ tet_result(TET_UNRESOLVED);
+ fail = -1;
+ }
+
+ /*
+ * We need to check that the correct number of passes have occurred
+ * on an induvidual basis. At present check that at least we didn't
+ * just fall through without checking anything.
+ */
+ if (fail == 0 && pass == 0)
+ fail = -1;
+
+ return(fail);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/checkfont.c b/xc/test/xsuite/xtest/src/lib/checkfont.c
new file mode 100644
index 000000000..9ac66ae77
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/checkfont.c
@@ -0,0 +1,641 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdlib.h"
+#include "stdio.h"
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "Xatom.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+extern Display *Dsp;
+
+extern XFontStruct xtfont0, xtfont1, xtfont2, xtfont3, xtfont4;
+extern XFontStruct xtfont5, xtfont6;
+extern char *xtfont0cpright;
+extern char *xtfont1cpright;
+extern char *xtfont2cpright;
+extern char *xtfont3cpright;
+extern char *xtfont4cpright;
+extern char *xtfont5cpright;
+extern char *xtfont6cpright;
+
+struct fontinfo fontinfo[] = {
+ {"xtfont0", &xtfont0, &xtfont0cpright},
+ {"xtfont1", &xtfont1, &xtfont1cpright},
+ {"xtfont2", &xtfont2, &xtfont2cpright},
+ {"xtfont3", &xtfont3, &xtfont3cpright},
+ {"xtfont4", &xtfont4, &xtfont4cpright},
+ {"xtfont5", &xtfont5, &xtfont5cpright},
+ {"xtfont6", &xtfont6, &xtfont6cpright},
+};
+int nfontinfo = NELEM(fontinfo);
+
+#if TEST_ANSI
+static int checkprops(XFontStruct *fsp, XFontStruct *good, char *str);
+static XCharStruct *getmetric(XFontStruct *fsp, unsigned int c);
+static check1prop(XFontStruct *fsp, XFontProp *fp, char *str);
+#else
+static int checkprops();
+static XCharStruct *getmetric();
+static check1prop();
+#endif
+
+/*
+ * Check a XCharStruct item. FAIL is issued on error, PASS is not.
+ * Used by checkfsp().
+ * Returns True if checking is OK.
+ */
+static int
+checkcharstruct(csp, good, name)
+XCharStruct *csp;
+XCharStruct *good;
+char *name;
+{
+int pass = 0, fail = 0;
+
+ if (csp->lbearing != good->lbearing) {
+ report("%s, lbearing was %d, expecting %d",
+ name, csp->lbearing, good->lbearing);
+ FAIL;
+ } else
+ pass++;
+
+ if (csp->rbearing != good->rbearing) {
+ report("%s, rbearing was %d, expecting %d",
+ name, csp->rbearing, good->rbearing);
+ FAIL;
+ } else
+ pass++;
+
+ if (csp->width != good->width) {
+ report("%s, width was %d, expecting %d",
+ name, csp->width, good->width);
+ FAIL;
+ } else
+ pass++;
+
+ if (csp->ascent != good->ascent) {
+ report("%s, ascent was %d, expecting %d",
+ name, csp->ascent, good->ascent);
+ FAIL;
+ } else
+ pass++;
+
+ if (csp->descent != good->descent) {
+ report("%s, descent was %d, expecting %d",
+ name, csp->descent, good->descent);
+ FAIL;
+ } else
+ pass++;
+
+ if (fail == 0 && pass == 5)
+ return(True);
+ else {
+ if (fail == 0)
+ report("Path check error in checkcharstruct");
+ return(False);
+ }
+}
+
+
+/*
+ * Check a XFontStruct against a known good one. The font property
+ * checking is based on a knowledge of the properties defined in the xtest
+ * fonts.
+ */
+int
+checkfsp(fsp, good, str)
+XFontStruct *fsp;
+XFontStruct *good; /* Known good XFontStruct */
+char *str; /* Known good copyright string */
+{
+int i;
+int nchars;
+int metrics_correct;
+int pass = 0, fail = 0;
+
+ if (fsp == NULL) {
+ report("returned XFontStruct pointer was NULL");
+ FAIL;
+ return(False);
+ }
+
+ /*
+ * No clear definition of what this hint is
+ */
+ if (fsp->direction != FontLeftToRight && fsp->direction != FontRightToLeft){
+ report("direction was %d, expecting %d", fsp->direction, good->direction);
+ FAIL;
+ } else
+ pass++;
+
+ if (fsp->min_char_or_byte2 != good->min_char_or_byte2) {
+ report("min_char_or_byte2 was %d, expecting %d", fsp->min_char_or_byte2, good->min_char_or_byte2);
+ FAIL;
+ } else
+ pass++;
+
+ if (fsp->max_char_or_byte2 != good->max_char_or_byte2) {
+ report("max_char_or_byte2 was %d, expecting %d", fsp->max_char_or_byte2,
+ good->max_char_or_byte2);
+ FAIL;
+ } else
+ pass++;
+
+ if (fsp->min_byte1 != good->min_byte1) {
+ report("min_byte1 was %d, expecting %d", fsp->min_byte1,
+ good->min_byte1);
+ FAIL;
+ } else
+ pass++;
+
+ if (fsp->max_byte1 != good->max_byte1) {
+ report("max_byte1 was %d, expecting %d", fsp->max_byte1,
+ good->max_byte1);
+ FAIL;
+ } else
+ pass++;
+
+ if (fsp->all_chars_exist != good->all_chars_exist) {
+ report("all_chars_exist was %d, expecting %d", fsp->all_chars_exist,
+ good->all_chars_exist);
+ FAIL;
+ } else
+ pass++;
+
+ if (fsp->default_char != good->default_char) {
+ report("default_char was %d, expecting %d", fsp->default_char,
+ good->default_char);
+ FAIL;
+ } else
+ pass++;
+
+ /*
+ * There may be extra properties added by the font compiler, so
+ * we can only check that there are at least enough properties.
+ */
+ if (fsp->n_properties < good->n_properties) {
+ report("n_properties was %d, expecting a number greater than %d",
+ fsp->n_properties, good->n_properties);
+ FAIL;
+ } else
+ pass++;
+
+ if (fsp->ascent != good->ascent) {
+ report("ascent was %d, expecting %d", fsp->ascent, good->ascent);
+ FAIL;
+ } else
+ pass++;
+
+ if (fsp->descent != good->descent) {
+ report("descent was %d, expecting %d", fsp->descent, good->descent);
+ FAIL;
+ } else
+ pass++;
+
+ /*
+ * Check that the per_char pointer is NULL or not as appropriate.
+ */
+ if (good->per_char == NULL) {
+ if (fsp->per_char == NULL)
+ pass++;
+ else {
+ report("The per_char member of XFontStruct was not NULL");
+ FAIL;
+ }
+ } else {
+ if (fsp->per_char == NULL) {
+ report("The per_char member of XFontStruct was NULL");
+ FAIL;
+ } else {
+ pass++;
+ }
+ }
+
+ if (checkcharstruct(&fsp->min_bounds, &good->min_bounds, "min_bounds"))
+ pass++;
+ else {
+ report("min_bound check failed");
+ FAIL;
+ }
+ if (checkcharstruct(&fsp->max_bounds, &good->max_bounds, "max_bounds"))
+ pass++;
+ else {
+ report("max_bounds check failed");
+ FAIL;
+ }
+
+
+ if (fsp->per_char != NULL && good->per_char != NULL) {
+ int giveup;
+
+#define percharsize(FSP) ( (FSP->max_char_or_byte2 - FSP->min_char_or_byte2 + 1) * (FSP->max_byte1 - FSP->min_byte1 + 1))
+
+ nchars = percharsize(good);
+ /*
+ * Make sure that we don't run off the end of the array, if
+ * the min and max chars are wrong then will probably fail,
+ * but try anyway.
+ */
+ if (nchars > percharsize(fsp))
+ nchars = percharsize(fsp);
+
+ /*
+ * If the max and min bytes are wrong then there is not much
+ * chance that the per_char metrics will tally, so if there
+ * have been previous errors then abandon checking per_char
+ * after a few errors.
+ */
+ giveup = 9999;
+ if (fail)
+ giveup = 3;
+
+ metrics_correct = 0;
+
+ for (i = 0; i < nchars; i++) {
+ char mess[32];
+
+ sprintf(mess, "char %d", i);
+
+ if (checkcharstruct(&fsp->per_char[i], &good->per_char[i], mess))
+ metrics_correct++;
+ else if (--giveup == 0) {
+ report("Abandoning checks to other characters");
+ break;
+ }
+ }
+
+ if (metrics_correct == nchars)
+ pass++;
+ else {
+ if (giveup == 0) {
+ report("Metrics bad, %d correct seen before abandoning checks",
+ metrics_correct);
+ } else {
+ report("Metrics for %d out of %d chars incorrect",
+ nchars-metrics_correct, nchars);
+ }
+ FAIL;
+ }
+ } else {
+ /* Nothing to check */
+ pass++;
+ }
+
+ if (checkprops(fsp, good, str))
+ pass++;
+ else {
+ report("Property checking failed");
+ FAIL;
+ }
+
+ if (fail == 0 && pass == 15) {
+ return(True);
+ } else {
+ if (fail == 0)
+ report("Path check error in checkfsp");
+ return(False);
+ }
+}
+
+/*
+ * Check each of the properties that we have chosen to test. There may be
+ * other properties defined in the returned XFontStruct which are ignored.
+ */
+static int
+checkprops(fsp, good, str)
+XFontStruct *fsp;
+XFontStruct *good;
+char *str;
+{
+XFontProp *fp;
+int pass = 0, fail = 0;
+
+ for (fp = good->properties;
+ fp < &good->properties[good->n_properties];
+ fp++) {
+ if (check1prop(fsp, fp, str))
+ pass++;
+ else
+ fail++;
+ }
+ if (fail == 0 && pass == good->n_properties)
+ return(True);
+ else
+ return(False);
+}
+
+/*
+ * Check a single property
+ */
+static
+check1prop(fsp, fp, str)
+XFontStruct *fsp;
+XFontProp *fp;
+char *str;
+{
+XFontProp *testp;
+char *teststr;
+int found;
+int pass = 0, fail = 0;
+
+ found = 0;
+ for (testp = fsp->properties; testp < &fsp->properties[fsp->n_properties];
+ testp++){
+
+ if (testp->name == fp->name) {
+ found = 1;
+
+ if (fp->name == XA_COPYRIGHT) {
+
+ /*
+ * This is a string value, so have to get the atom value.
+ * Have to disable default error processing because the
+ * atom may not exist.
+ */
+ XSetErrorHandler(error_status);
+ reseterr();
+ teststr = XGetAtomName(Dsp, testp->card32);
+ XSetErrorHandler(unexp_err);
+
+ switch (geterr()) {
+ case Success:
+ break;
+ case BadAtom:
+ report("XA_COPYRIGHT atom value was not a valid atom");
+ FAIL;
+ break;
+ default:
+ delete("Unexpected error on XGetAtomName");
+ return(False);
+ }
+
+ if (str && strcmp(teststr, str) != 0) {
+ report("XA_COPYRIGHT string..");
+ report(" was '%s'", teststr);
+ report(" expecting '%s'", str);
+ FAIL;
+ }
+ else
+ pass++;
+ } else {
+ if (testp->card32 != fp->card32) {
+ report("Value of %s was %d, expecting %d",
+ atomname(fp->name), testp->card32, fp->card32);
+ FAIL;
+ }
+ else
+ pass++;
+ }
+ }
+ }
+ if (!found) {
+ report("Font property %s not found", atomname(fp->name));
+ FAIL;
+ }
+ else
+ pass++;
+ if (fail == 0 && pass == 2)
+ return(True);
+ else
+ return(False);
+}
+
+
+#define min(a, b) ((a)<(b)? (a): (b))
+#define max(a, b) ((a)>(b)? (a): (b))
+
+/*
+ * Direct calculation of extents.
+ */
+void
+txtextents(fsp, str, n, dir, ascent, descent, overall)
+XFontStruct *fsp;
+unsigned char *str;
+int n;
+int *dir; /*NOTUSED*/
+int *ascent;
+int *descent;
+XCharStruct *overall;
+{
+int i;
+unsigned int c;
+XCharStruct *cm;
+extern XCharStruct *getmetric();
+short width;
+short rbearing = 0;
+short lbearing = 0;
+short oascent = 0;
+short odescent = 0;
+int firstchar = 1;
+
+ *ascent = fsp->ascent;
+ *descent = fsp->descent;
+
+ /*
+ * If there are no per_char metrics then use max_bounds
+ * of the font width.
+ */
+ if (fsp->per_char == NULL) {
+ rbearing = max(fsp->max_bounds.rbearing, (n-1)*fsp->max_bounds.width + fsp->max_bounds.rbearing);
+ lbearing = min(fsp->max_bounds.lbearing, (n-1)*fsp->max_bounds.width + fsp->max_bounds.lbearing);
+ oascent = fsp->max_bounds.ascent;
+ odescent = fsp->max_bounds.descent;
+ width = n*fsp->max_bounds.width;
+ }
+
+ width = 0;
+ for (i = 0; i < n; i++) {
+ c = str[i];
+
+ cm = getmetric(fsp, c);
+ if (cm == NULL)
+ cm = getmetric(fsp, fsp->default_char);
+
+ if (cm == NULL)
+ continue;
+
+ if (firstchar) {
+ firstchar = 0;
+ rbearing = cm->rbearing;
+ lbearing = cm->lbearing;
+ oascent = cm->ascent;
+ odescent = cm->descent;
+ width = cm->width;
+ } else {
+ rbearing = max(width+cm->rbearing, rbearing);
+ lbearing = min(width+cm->lbearing, lbearing);
+ oascent = max(oascent, cm->ascent);
+ odescent = max(odescent, cm->descent);
+ width += cm->width;
+ }
+ }
+ overall->rbearing = rbearing;
+ overall->lbearing = lbearing;
+ overall->width = width;
+ overall->ascent = oascent;
+ overall->descent = odescent;
+}
+
+/*
+ * Direct calculation of extents with 16bit strings.
+ */
+void
+txtextents16(fsp, str, n, dir, ascent, descent, overall)
+XFontStruct *fsp;
+XChar2b *str;
+int n;
+int *dir;
+int *ascent;
+int *descent;
+XCharStruct *overall;
+{
+int i;
+unsigned int c;
+XCharStruct *cm;
+extern XCharStruct *getmetric();
+short width;
+short rbearing = 0;
+short lbearing = 0;
+short oascent = 0;
+short odescent = 0;
+int firstchar = 1;
+
+ *ascent = fsp->ascent;
+ *descent = fsp->descent;
+
+ /*
+ * If there are no per_char metrics then use max_bounds
+ * of the font width.
+ */
+ if (fsp->per_char == NULL) {
+ rbearing = max(fsp->max_bounds.rbearing, (n-1)*fsp->max_bounds.width + fsp->max_bounds.rbearing);
+ lbearing = min(fsp->max_bounds.lbearing, (n-1)*fsp->max_bounds.width + fsp->max_bounds.lbearing);
+ oascent = fsp->max_bounds.ascent;
+ odescent = fsp->max_bounds.descent;
+ width = n*fsp->max_bounds.width;
+ }
+
+ width = 0;
+ for (i = 0; i < n; i++) {
+ c = str[i].byte1;
+ c <<= 8;
+ c += str[i].byte2;
+
+ cm = getmetric(fsp, c);
+ if (cm == NULL)
+ cm = getmetric(fsp, fsp->default_char);
+
+ if (cm == NULL)
+ continue;
+
+ if (firstchar) {
+ firstchar = 0;
+ rbearing = cm->rbearing;
+ lbearing = cm->lbearing;
+ oascent = cm->ascent;
+ odescent = cm->descent;
+ width = cm->width;
+ } else {
+ rbearing = max(width+cm->rbearing, rbearing);
+ lbearing = min(width+cm->lbearing, lbearing);
+ oascent = max(oascent, cm->ascent);
+ odescent = max(odescent, cm->descent);
+ width += cm->width;
+ }
+ }
+ overall->rbearing = rbearing;
+ overall->lbearing = lbearing;
+ overall->width = width;
+ overall->ascent = oascent;
+ overall->descent = odescent;
+}
+
+/*
+ * Direct calculation of width.
+ */
+int
+txtwidth(fsp, str, n)
+XFontStruct *fsp;
+unsigned char *str;
+int n;
+{
+XCharStruct cm;
+int dum;
+
+ txtextents(fsp, str, n, &dum, &dum, &dum, &cm);
+ return(cm.width);
+}
+
+/*
+ * Direct calculation of width for 16 bit strings.
+ */
+int
+txtwidth16(fsp, str, n)
+XFontStruct *fsp;
+XChar2b *str;
+int n;
+{
+XCharStruct cm;
+int dum;
+
+ txtextents16(fsp, str, n, &dum, &dum, &dum, &cm);
+ return(cm.width);
+}
+
+/*
+ * Get a metric. Note that the spec states that a character is non-existant
+ * when all metrics are zero. Xlib only checks width, lbearing and rbearing.
+ * All metrics zero is used here.
+ */
+static XCharStruct *
+getmetric(fsp, c)
+XFontStruct *fsp;
+unsigned int c;
+{
+XCharStruct *cm;
+int byte1;
+int byte2;
+
+ byte1 = (c>>8)&0xff;
+ byte2 = c&0xff;
+
+ /*
+ * Out of range character.
+ */
+ if (byte1 < fsp->min_byte1 || byte1 > fsp->max_byte1)
+ return((XCharStruct *)0);
+ if (byte2 < fsp->min_char_or_byte2 || byte2 > fsp->max_char_or_byte2)
+ return((XCharStruct *)0);
+
+ c = (byte1-fsp->min_byte1)*(fsp->max_char_or_byte2 - fsp->min_char_or_byte2+1)
+ + byte2 - fsp->min_char_or_byte2;
+ cm = &fsp->per_char[c];
+ /*
+ * Check for non-existant character.
+ */
+ if (cm->lbearing == 0 && cm->rbearing == 0 &&
+ cm->ascent == 0 && cm->descent == 0 &&
+ cm->width == 0) {
+ return((XCharStruct*)0);
+ }
+ return(cm);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/checkgc.c b/xc/test/xsuite/xtest/src/lib/checkgc.c
new file mode 100644
index 000000000..eebd421e2
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/checkgc.c
@@ -0,0 +1,75 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "pixval.h"
+
+int
+checkgccomponent(disp, gc, valuemask, values)
+Display *disp;
+GC gc;
+unsigned int valuemask;
+XGCValues *values;
+{
+ XGCValues rvalues;
+
+ if(XGetGCValues(disp, gc, valuemask, &rvalues) != True)
+ return(0);
+
+ switch(valuemask) {
+ case GCBackground :
+ return(rvalues.background == values->background);
+ case GCLineWidth :
+ return(rvalues.line_width == values->line_width);
+ case GCLineStyle :
+ return(rvalues.line_style == values->line_style);
+ case GCCapStyle :
+ return(rvalues.cap_style == values->cap_style);
+ case GCJoinStyle :
+ return(rvalues.join_style == values->join_style);
+ case GCFillStyle :
+ return(rvalues.fill_style == values->fill_style);
+ case GCFillRule :
+ return(rvalues.fill_rule == values->fill_rule);
+ case GCTile :
+ return(rvalues.tile == values->tile);
+ case GCStipple :
+ return(rvalues.stipple == values->stipple);
+ case GCTileStipXOrigin :
+ return(rvalues.ts_x_origin == values->ts_x_origin);
+ case GCTileStipYOrigin :
+ return(rvalues.ts_y_origin == values->ts_y_origin);
+ case GCFont :
+ return(rvalues.font == values->font);
+ case GCSubwindowMode :
+ return(rvalues.subwindow_mode == values->subwindow_mode);
+ case GCGraphicsExposures :
+ return(rvalues.graphics_exposures == values->graphics_exposures);
+ case GCClipXOrigin :
+ return(rvalues.clip_x_origin == values->clip_y_origin);
+ case GCClipYOrigin :
+ return(rvalues.clip_y_origin == values->clip_y_origin);
+ case GCDashOffset :
+ return(rvalues.dash_offset == values->dash_offset);
+ case GCArcMode :
+ return(rvalues.arc_mode == values->arc_mode);
+ default :
+ return(0);
+ }
+}
+
diff --git a/xc/test/xsuite/xtest/src/lib/checkimg.c b/xc/test/xsuite/xtest/src/lib/checkimg.c
new file mode 100644
index 000000000..10976309a
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/checkimg.c
@@ -0,0 +1,139 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Check that each pixel within the specified area is set to
+ * inpix and that each pixel outside the area is set to outpix.
+ * If flags are CHECK_IN only the inside is checked.
+ * If flags are CHECK_OUT only the outside is checked.
+ * flags of 0 or CHECK_ALL check both.
+ * If ap is NULL then the whole image is checked.
+ */
+Status
+checkimg(im, ap, inpix, outpix, flags)
+XImage *im;
+struct area *ap;
+long inpix;
+long outpix;
+int flags;
+{
+register int x, y;
+int xorig;
+int yorig;
+unsigned int fullwidth;
+unsigned int fullheight;
+register unsigned long pix;
+struct area area;
+int inloopflag = 0;
+
+ if (flags == 0)
+ flags = CHECK_ALL;
+ if ((flags & CHECK_ALL) == 0) {
+ report("assert error in checkimg()");
+ printf("assert error in checkimg()\n");
+ exit(1);
+ }
+
+ fullwidth = im->width;
+ fullheight = im->height;
+
+ /*
+ * If a NULL ap has been given then check the whole image.
+ */
+ if (ap == (struct area *)0) {
+ ap = &area;
+ ap->x = 0;
+ ap->y = 0;
+ ap->width = fullwidth;
+ ap->height = fullheight;
+ flags = CHECK_IN;
+ }
+
+ if ((flags & CHECK_ALL) == CHECK_IN) {
+ xorig = ap->x;
+ yorig = ap->y;
+ fullwidth = ap->width;
+ fullheight = ap->height;
+ } else {
+ xorig = 0;
+ yorig = 0;
+ }
+
+ for (y = 0; y < fullheight; y++) {
+ for (x = 0; x < fullwidth; x++) {
+ inloopflag = 1;
+ pix = XGetPixel(im, x, y);
+ if (x+xorig >= ap->x && x+xorig < ap->x+ap->width && y+yorig >= ap->y && y+yorig < ap->y+ap->height) {
+ if (pix != inpix && (flags & CHECK_IN)) {
+ report("Incorrect pixel on inside of area at point (%d, %d): 0x%x != 0x%x",
+ x, y, pix, inpix);
+ return(False);
+ }
+ } else {
+ if (pix != outpix && (flags & CHECK_OUT)) {
+ report("Incorrect pixel on outside of area at point (%d, %d): 0x%x != 0x%x",
+ x, y, pix, outpix);
+ return(False);
+ }
+ }
+ }
+ }
+
+ /* This is to catch bugs */
+ if (inloopflag == 0) {
+ delete("No pixels checked in checkimg - internal error");
+ return(False);
+ }
+ return(True);
+}
+
+/*
+ * checkimgstruct() - verify width, height, and format fields
+ * of an image structure
+ */
+Status
+checkimgstruct(im, depth, width, height, format)
+XImage *im;
+unsigned int depth;
+unsigned int width;
+unsigned int height;
+int format;
+{
+ if (im->depth != depth) {
+ report("Incorrect depth (%d != %d)", im->depth, depth);
+ return(False);
+ }
+ if (im->width != width) {
+ report("Incorrect width (%d != %d)", im->width, width);
+ return(False);
+ }
+ if (im->height != height) {
+ report("Incorrect height (%d != %d)", im->height, height);
+ return(False);
+ }
+ if (im->format != format) {
+ report("Incorrect format (%d != %d)", im->format, format);
+ return(False);
+ }
+ return(True);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/checkpixel.c b/xc/test/xsuite/xtest/src/lib/checkpixel.c
new file mode 100644
index 000000000..17c02f42e
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/checkpixel.c
@@ -0,0 +1,86 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "pixval.h"
+
+/*
+ * Test pixel in a drawable.
+ */
+
+int
+checkpixel(display,drawable,x,y,value)
+Display *display;
+Drawable drawable;
+int x;
+int y;
+unsigned long value;
+{
+ XImage *image;
+ int pix;
+
+ image = XGetImage(display, drawable, x, y, 1, 1, AllPlanes, ZPixmap);
+ pix = XGetPixel(image, 0, 0);
+ XDestroyImage(image);
+ return(pix == value);
+}
+
+/*
+ * Return the value of a pixel. Only efficient when only one (or a few)
+ * pixels are of interest.
+ */
+unsigned long
+getpixel(display, drawable, x, y)
+Display *display;
+Drawable drawable;
+int x;
+int y;
+{
+XImage *image;
+unsigned long pix;
+
+ image = XGetImage(display, drawable, x, y, 1, 1, AllPlanes, ZPixmap);
+ pix = XGetPixel(image, 0, 0);
+ XDestroyImage(image);
+ return(pix);
+}
+
+/*
+ * Verify the values of a set of linear points.
+ */
+
+Status
+checkpixels(display, drawable, x, y, dx, dy, len, value)
+Display *display;
+Drawable drawable;
+int x;
+int y;
+int dx;
+int dy;
+int len;
+unsigned long value;
+{
+ int i;
+
+ for(i=0; i<len; i++, x += dx, y += dy)
+ if(checkpixel(display, drawable, x, y, value) == 0)
+ return(False);
+
+ return(True);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/checktile.c b/xc/test/xsuite/xtest/src/lib/checktile.c
new file mode 100644
index 000000000..1d4fb0251
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/checktile.c
@@ -0,0 +1,125 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+
+/*
+ * Check that the area is filled with the given tile pm.
+ * a NULL area pointer means check the whole window.
+ * xorig and yorig specify the tiling origin which is otherwise
+ * assumed to start at the origin of the drawable (not the area)
+ * The width and height if zero default to the rest of the drawable.
+ */
+Status
+checktile(disp, d, ap, xorig, yorig, pm)
+Display *disp;
+Drawable d;
+struct area *ap;
+int xorig;
+int yorig;
+Pixmap pm;
+{
+XImage *im;
+XImage *pmim;
+unsigned int pmwidth;
+unsigned int pmheight;
+register int x;
+register int y;
+unsigned long ppix;
+unsigned long ipix;
+int ret;
+struct area area;
+
+ if (ap == 0) {
+ ap = &area;
+ ap->x = 0;
+ ap->y = 0;
+ getsize(disp, d, &area.width, &area.height);
+ }
+ if (ap->width == 0) {
+ getsize(disp, d, &ap->width, (unsigned*)0);
+ ap->width -= xorig;
+ }
+ if (ap->height == 0) {
+ getsize(disp, d, (unsigned*)0, &ap->height);
+ ap->height -= yorig;
+ }
+
+ getsize(disp, pm, &pmwidth, &pmheight);
+ im = XGetImage(disp, d, ap->x, ap->y, ap->width, ap->height,
+ AllPlanes, ZPixmap);
+ pmim = XGetImage(disp, pm, 0, 0, pmwidth, pmheight, AllPlanes, ZPixmap);
+
+ xorig = ap->x - xorig;
+ while (xorig < 0)
+ xorig += pmwidth;
+ yorig = ap->y - yorig;
+ while (yorig < 0)
+ yorig += pmheight;
+
+ ret = True;
+ for (y = 0; y < ap->height; y++) {
+ for (x = 0; x < ap->width; x++) {
+ ppix = XGetPixel(pmim, (xorig+x)%pmwidth, (yorig+y)%pmheight);
+ ipix = XGetPixel(im, x, y);
+ if (ppix != ipix) {
+ report("Bad pixel in tiled area at (%d, %d)", x, y);
+ ret = False;
+ goto bad;
+ }
+ }
+ }
+
+bad:
+ XDestroyImage(im);
+ XDestroyImage(pmim);
+
+ return(ret);
+}
+
+
+#define tile_width 7
+#define tile_height 7
+static char tile_bits[] = {
+ 0x4c, 0x52, 0x04, 0x08,
+ 0x52, 0x4c, 0x61,
+};
+
+/*
+ * Make a 7x7 tile and fill it with a pattern.
+ */
+Pixmap
+maketile(disp, d)
+Display *disp;
+Drawable d;
+{
+Pixmap pm;
+unsigned int depth;
+
+ depth = getdepth(disp, d);
+
+ pm = XCreatePixmapFromBitmapData(disp, d, tile_bits,
+ tile_width, tile_height, W_FG, W_BG, depth);
+
+ return(pm);
+}
+
diff --git a/xc/test/xsuite/xtest/src/lib/config.c b/xc/test/xsuite/xtest/src/lib/config.c
new file mode 100644
index 000000000..e008ffc03
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/config.c
@@ -0,0 +1,228 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdlib.h"
+#include "string.h"
+#include <ctype.h>
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "tet_api.h"
+
+
+/*
+ * Calculate a value from a string, allowing hex or octal
+ * in a similar, but almost completely different, way to strtol.
+ */
+int
+atov( str )
+char *str;
+{
+ int base = 10;
+ int value= 0;
+ char eval[2];
+ int sign=1;
+
+ if (str == NULL)
+ return(0);
+
+ eval[1]='\0';
+
+/* Strip leading whitespace */
+ while(isspace(*str))
+ str++;
+
+ while(*str) {
+ int a;
+
+ eval[0] = *str;
+
+ a = strcspn("00112233445566778899aAbBcCdDeEfFxX--", eval)/2;
+
+ if (a==17 && value==0 && base==10) { /* minus sign */
+ sign = -1;
+ } else if (a==0 && value==0 && base==10) { /* octal */
+ base = 8;
+ } else if (a==16 && value==0 && base==8 ) { /* hex */
+ base = 16;
+ } else if (a<base) { /* number */
+ value *= base;
+ value += a*sign;
+ } else { /* Out of range, or not a number */
+ return(value);
+ }
+ str++;
+ }
+ return(value);
+}
+
+struct config config;
+
+#define T_INT 1
+#define T_STRING 2
+#define T_YESNO 3
+/*
+ * Flags to control what action to take about missing or blank parameters.
+ * Parameters marked DEBUG are also implicitly OPTIONAL.
+ */
+#define FL_DEBUG 0x1 /* Not to be set for verification runs */
+#define FL_OPTIONAL 0x2 /* Optional parameter, absence not fatal */
+#define FL_EMPTYOK 0x4 /* Empty value is ok */
+
+struct getparam {
+ char *name;
+ int type;
+ char *addr;
+ int flags;
+};
+
+struct getparam parm[] = {
+
+ /* General configuration parameters */
+
+ {"XT_DISPLAY", T_STRING, (char*)&config.display, 0},
+ {"XT_ALT_SCREEN", T_INT, (char*)&config.alt_screen, 0},
+ {"XT_FONTPATH", T_STRING, (char*)&config.fontpath, 0},
+ {"XT_SPEEDFACTOR", T_INT, (char*)&config.speedfactor, 0},
+ {"XT_RESET_DELAY", T_INT, (char*)&config.reset_delay, 0},
+ {"XT_EXTENSIONS", T_YESNO, (char*)&config.extensions, 0},
+
+ /* Configuration parameters for specific tests */
+
+ {"XT_VISUAL_CLASSES", T_STRING, (char*)&config.visual_classes, 0},
+ {"XT_FONTCURSOR_GOOD", T_INT, (char*)&config.fontcursor_good, 0},
+ {"XT_FONTCURSOR_BAD", T_INT, (char*)&config.fontcursor_bad, 0},
+ {"XT_FONTPATH_GOOD", T_STRING, (char*)&config.fontpath_good, 0},
+ {"XT_FONTPATH_BAD", T_STRING, (char*)&config.fontpath_bad, 0},
+ {"XT_BAD_FONT_NAME", T_STRING, (char*)&config.bad_font_name, 0},
+ {"XT_GOOD_COLORNAME", T_STRING, (char*)&config.good_colorname, 0},
+ {"XT_BAD_COLORNAME", T_STRING, (char*)&config.bad_colorname, 0},
+ {"XT_DISPLAYMOTIONBUFFERSIZE", T_INT, (char*)&config.displaymotionbuffersize, 0},
+
+ /* Configuration parameters for Display functions */
+
+ {"XT_SCREEN_COUNT", T_INT, (char*)&config.screen_count, 0},
+ {"XT_PIXMAP_DEPTHS", T_STRING, (char*)&config.pixmap_depths, 0},
+ {"XT_BLACK_PIXEL", T_INT, (char*)&config.black_pixel, 0},
+ {"XT_WHITE_PIXEL", T_INT, (char*)&config.white_pixel, 0},
+ {"XT_HEIGHT_MM", T_INT, (char*)&config.height_mm, 0},
+ {"XT_WIDTH_MM", T_INT, (char*)&config.width_mm, 0},
+ {"XT_SERVER_VENDOR", T_STRING, (char*)&config.server_vendor, 0},
+ {"XT_PROTOCOL_VERSION", T_INT, (char *)&config.protocol_version, 0},
+ {"XT_PROTOCOL_REVISION", T_INT, (char *)&config.protocol_revision, 0},
+ {"XT_VENDOR_RELEASE", T_INT, (char *)&config.vendor_release, 0},
+ {"XT_DOES_SAVE_UNDERS", T_YESNO, (char *)&config.does_save_unders, 0},
+ {"XT_DOES_BACKING_STORE", T_INT, (char *)&config.does_backing_store, 0},
+
+ /* Configuration parameters for connection tests */
+
+ {"XT_POSIX_SYSTEM", T_YESNO, (char*)&config.posix_system, 0},
+ {"XT_DECNET", T_YESNO, (char *)&config.decnet, 0},
+ {"XT_TCP", T_YESNO, (char *)&config.tcp, 0},
+ {"XT_DISPLAYHOST", T_STRING, (char *)&config.displayhost, 0},
+ {"XT_LOCAL", T_YESNO, (char *)&config.local, 0},
+
+ /* Parameters which do not affect test results */
+
+ {"XT_OPTION_NO_CHECK", T_YESNO, (char*)&config.option_no_check,
+ FL_OPTIONAL},
+ {"XT_OPTION_NO_TRACE", T_YESNO, (char*)&config.option_no_trace,
+ FL_OPTIONAL},
+ {"XT_SAVE_SERVER_IMAGE", T_YESNO, (char*)&config.save_server_image,
+ FL_OPTIONAL},
+
+ /* Parameters which should not be set on verification test runs */
+
+ {"XT_DEBUG", T_INT, (char*)&config.debug, FL_DEBUG},
+ {"XT_DEBUG_OVERRIDE_REDIRECT", T_YESNO, (char*)&config.debug_override_redirect,
+ FL_DEBUG},
+ {"XT_DEBUG_PAUSE_AFTER", T_YESNO, (char*)&config.debug_pause_after,
+ FL_DEBUG},
+ {"XT_DEBUG_PIXMAP_ONLY", T_YESNO, (char*)&config.debug_pixmap_only,
+ FL_DEBUG},
+ {"XT_DEBUG_WINDOW_ONLY", T_YESNO, (char*)&config.debug_window_only,
+ FL_DEBUG},
+ {"XT_DEBUG_DEFAULT_DEPTHS", T_YESNO, (char*)&config.debug_default_depths,
+ FL_DEBUG},
+ {"XT_DEBUG_BYTE_SEX", T_STRING, (char*)&config.debug_byte_sex,
+ FL_DEBUG},
+ {"XT_DEBUG_VISUAL_CHECK", T_INT, (char*)&config.debug_visual_check,
+ FL_DEBUG},
+ {"XT_DEBUG_NO_PIXCHECK", T_YESNO, (char*)&config.debug_no_pixcheck,
+ FL_DEBUG},
+ {"XT_DEBUG_VISUAL_IDS", T_STRING, (char*)&config.debug_visual_ids,
+ FL_DEBUG},
+
+ /* Parameters only used during test development */
+ {"XT_FONTDIR", T_STRING, (char*)&config.fontdir, FL_OPTIONAL},
+};
+
+/*
+ * Initialise the config structure by getting all the execution
+ * parameters.
+ */
+void
+initconfig()
+{
+char *var;
+struct getparam *gp;
+
+ for (gp = parm; gp < parm+NELEM(parm); gp++) {
+ var = tet_getvar(gp->name);
+ if (var == NULL) {
+ if (!(gp->flags&(FL_OPTIONAL|FL_DEBUG)))
+ report("Required parameter %s was not set", gp->name);
+ continue;
+ }
+
+ if (var && *var == '\0') {
+ if (!(gp->flags&(FL_EMPTYOK|FL_DEBUG)))
+ report("Parameter %s had an empty value", gp->name);
+ continue;
+ }
+
+ debug(2, "Variable %s=%s", gp->name, var);
+ switch (gp->type) {
+ case T_STRING:
+ *(char**)gp->addr = var;
+ break;
+ case T_INT:
+ if (strcmp(var, "UNSUPPORTED") == 0) {
+ *(int*)gp->addr = -1; /* XXX */
+ } else {
+ *(int*)gp->addr = atov(var);
+ }
+ debug(3, " int val=%d", *(int*)gp->addr);
+ break;
+ case T_YESNO:
+ if (*var == 'Y' || *var == 'y')
+ *(int*)gp->addr = 1;
+ else if (*var == 'N' || *var == 'n')
+ *(int*)gp->addr = 0;
+ else {
+ report("Parameter %s was not set to 'Y' or 'N'", gp->name);
+ report(" was %s", var);
+ }
+ debug(3, " yesno val=%d", *(int*)gp->addr);
+ break;
+ default:
+ report("Unrecognised type in initconfig");
+ break;
+ }
+ }
+}
diff --git a/xc/test/xsuite/xtest/src/lib/crechild.c b/xc/test/xsuite/xtest/src/lib/crechild.c
new file mode 100644
index 000000000..05a77f7f0
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/crechild.c
@@ -0,0 +1,97 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Create, map and wait for a child window covering the
+ * specified area of the parent window.
+ * If either width or height are zero then the child extends to the left
+ * or bottom edge of the parent window.
+ * If ap is NULL then the child will exactly cover the parent window.
+ */
+Window
+crechild(disp, w, ap)
+Display *disp;
+Window w;
+struct area *ap;
+{
+Window child;
+XEvent event;
+XWindowAttributes atts;
+
+ child = creunmapchild(disp, w, ap);
+
+ if (isdeleted())
+ return None; /* avoid waiting for events that won't happen. */
+
+ XSync(disp, True);
+ XSelectInput(disp, child, ExposureMask);
+ XMapWindow(disp, child);
+
+ XGetWindowAttributes(disp, child, &atts);
+ if (XPending(disp) && atts.map_state == IsViewable)
+ XWindowEvent(disp, child, ExposureMask, &event);
+
+ XSelectInput(disp, child, NoEventMask);
+
+ return(child);
+}
+
+/*
+ * Create, without mapping, a child window covering the
+ * specified area of the parent window.
+ * If either width or height are zero then the child extends to the left
+ * or bottom edge of the parent window.
+ * If ap is NULL then the child will exactly cover the parent window.
+ */
+Window
+creunmapchild(disp, w, ap)
+Display *disp;
+Window w;
+struct area *ap;
+{
+Window child;
+struct area ar;
+
+ if(ap == (struct area *) 0) {
+ ar.width = ar.height = ar.x = ar.y = 0;
+ ap = &ar;
+ }
+
+ /*
+ * If either width or height is 0, then use size of parent window.
+ * This ensures that the window covers the rest of the
+ * parent without sticking off the edge.
+ */
+ if (ap->width == 0) {
+ getsize(disp, w, &ap->width, (unsigned int*)0);
+ ap->width -= ap->x;
+ }
+ if (ap->height == 0) {
+ getsize(disp, w, (unsigned int*)0, &ap->height);
+ ap->height -= ap->y;
+ }
+
+ child = XCreateSimpleWindow(disp, w, ap->x, ap->y, ap->width, ap->height, 0, W_FG, W_BG);
+
+ return(child);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/cursor.c b/xc/test/xsuite/xtest/src/lib/cursor.c
new file mode 100644
index 000000000..5f4486886
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/cursor.c
@@ -0,0 +1,73 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/* does this cursor match that of the window? */
+
+curofwin(display, cursor, window)
+Display *display;
+Cursor cursor;
+Window window;
+{
+ return CompareCursorWithWindow(display, window, cursor);
+}
+
+/* has this window the default cursor? */
+
+defcur(display, window)
+Display *display;
+Window window;
+{
+ Window root, wjunk, withdefault;
+ int ijunk, rx, ry, res;
+ unsigned int ujunk;
+
+ if (!XQueryPointer(display, window, &root, &wjunk,
+ &rx, &ry, &ijunk, &ijunk, &ujunk)) {
+ delete("pointer not on same screen as window 0x%x.",
+ (unsigned)window);
+ return False;
+ }
+ withdefault = crechild(display, root, (struct area *)NULL);
+ /* that window should have default Cursor, whatever that is */
+
+ /*
+ * Note if a grab is active with a cursor specified then that's what
+ * we've got instead of our nice default cursor, so we fail.
+ * Also, if confine_to & grab then we may not get to our nice new
+ * window.
+ * DO NOT USE THIS WHEN GRABS ARE ACTIVE.
+ */
+ XWarpPointer(display, None, withdefault, 0, 0, 0, 0, 1, 1);
+ res = CompareCurrentWithWindow(display, window);
+ XWarpPointer(display, None, root, 0, 0, 0, 0, rx, ry);
+ return res;
+}
+
+/* is the current cursor the same as that of window? */
+
+spriteiswin(display, window)
+Display *display;
+Window window;
+{
+ return CompareCurrentWithWindow(display, window);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/delete.c b/xc/test/xsuite/xtest/src/lib/delete.c
new file mode 100644
index 000000000..0b5377266
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/delete.c
@@ -0,0 +1,126 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*LINTLIBRARY*/
+
+#include "stdio.h"
+#include "xtest.h"
+#include "tet_api.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+#if TEST_ANSI
+#include <stdarg.h>
+#else
+#include <varargs.h>
+#endif
+
+#define LINELEN 1024
+
+/*
+ * Routines to control deleting of tests.
+ */
+
+extern int tet_thistest;
+
+static int TestDeleted = True;
+
+/*
+ * Call this routine to delete the current test. If there is a message
+ * it is output using report(). If not then a generic message is output
+ * as a fail safe measure.
+ */
+/*VARARGS1*/
+
+void
+#if TEST_ANSI
+delete(char *mess, ... )
+#else
+delete(mess, va_alist)
+char *mess;
+va_dcl
+#endif
+{
+char buf[LINELEN];
+va_list args;
+
+#if TEST_ANSI
+ va_start(args, mess);
+#else
+ va_start(args);
+#endif
+
+
+ if (mess && *mess) {
+ (void) vsprintf(buf, mess, args);
+ report(buf);
+ } else
+ report("Test deleted");
+
+ /*
+ * Can not call tet_result from within a startup routine.
+ */
+ if (tet_thistest)
+ tet_result(TET_UNRESOLVED);
+ TestDeleted = True;
+}
+
+/*
+ * Return True if deleted, False if not. All conections other than Dsp
+ * should be sync'ed.
+ */
+int
+isdeleted()
+{
+extern Display *Dsp;
+
+ /*
+ * The default display is flushed so that errors (which are one of the
+ * main reasons that a test will be deleted unexpectedly) have a
+ * chance to be processed by the server.
+ */
+ XSync(Dsp, False);
+ return(TestDeleted);
+}
+
+/*
+ * Reset the delete status back to false.
+ */
+void
+resetdelete()
+{
+ TestDeleted = False;
+}
+
+/*
+ * Cancel all remaining tests in this test case. They will
+ * not be initiated by the TCM. The current test is not affected,
+ * that should be marked as deleted with delete() if that is desired.
+ * Can also be called from startup routines - none of the tests will be
+ * run.
+ */
+void
+cancelrest(reason)
+char *reason;
+{
+extern int ntests;
+int i;
+
+ for (i = tet_thistest+1; i <= ntests; i++)
+ tet_delete(i, reason);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/devcntl.c b/xc/test/xsuite/xtest/src/lib/devcntl.c
new file mode 100644
index 000000000..032de9bb5
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/devcntl.c
@@ -0,0 +1,394 @@
+/*
+ * Copyright 1990, 1991, 1992 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include <Xlib.h>
+#include <Xutil.h>
+#include "xtestlib.h"
+
+#define MAXBUT 200
+#define MAXKEY 256
+
+static struct butsave {
+ unsigned int button;
+ Display *disp;
+} buttons[MAXBUT];
+static int butind;
+
+static struct keysave {
+ int key;
+ Display *disp;
+} keys[MAXKEY];
+static int keyind;
+
+/*
+ * Simulate a button press, saving the press so it can be automatically
+ * released later.
+ */
+void
+buttonpress(disp, button)
+Display *disp;
+unsigned int button;
+{
+ if (!SimulateButtonPressEvent(disp, button)) {
+ delete("XTEST extension not configured or in use");
+ return;
+ }
+ XSync(disp, False);
+ debug(1, "Button press %d", button);
+
+ buttons[butind].disp = disp;
+ buttons[butind++].button = button;
+}
+
+/*
+ * Simulate a button release, the corresponding saved event is removed.
+ */
+void
+buttonrel(disp, button)
+Display *disp;
+unsigned int button;
+{
+int i;
+
+ if (!SimulateButtonReleaseEvent(disp, button)) {
+ delete("XTEST extension not configured or in use");
+ return;
+ }
+ XSync(disp, False);
+ debug(1, "Button release %d", button);
+
+ /*
+ * Remove the corresponding button down.
+ */
+ for (i = butind-1; i >= 0; i--) {
+ if (buttons[i].button == button) {
+ buttons[i].disp = 0;
+ break;
+ }
+ }
+}
+
+/*
+ * Simulate a key press, saving the event so it can be automatically
+ * released later.
+ */
+void
+keypress(disp, key)
+Display *disp;
+int key;
+{
+ if (key == NoSymbol)
+ return;
+
+ if (!SimulateKeyPressEvent(disp, key)) {
+ delete("XTEST extension not configured or in use");
+ return;
+ }
+ XSync(disp, False);
+ debug(1, "Key press %d", key);
+
+ keys[keyind].disp = disp;
+ keys[keyind++].key = key;
+}
+
+/*
+ * Simulate a key release, the corresponding saved event is removed.
+ */
+void
+keyrel(disp, key)
+Display *disp;
+int key;
+{
+int i;
+
+ if (!SimulateKeyReleaseEvent(disp, key)) {
+ delete("XTEST extension not configured or in use");
+ return;
+ }
+ XSync(disp, False);
+ debug(1, "Key release %d", key);
+
+ /*
+ * Remove the corresponding key down.
+ */
+ for (i = keyind-1; i >= 0; i--) {
+ if (keys[i].key == key) {
+ keys[i].disp = 0;
+ break;
+ }
+ }
+}
+
+/*
+ * Release buttons pressed with buttonpress, in reverse order of pressing.
+ */
+void
+relbuttons()
+{
+int i;
+
+ for (i = butind-1; i >= 0; i--) {
+ if (buttons[i].disp)
+ buttonrel(buttons[i].disp, buttons[i].button);
+ }
+ butind = 0;
+}
+
+/*
+ * Release keys pressed with keypress, in reverse order of pressing.
+ */
+void
+relkeys()
+{
+int i;
+
+ for (i = keyind-1; i >= 0; i--) {
+ if (keys[i].disp)
+ keyrel(keys[i].disp, keys[i].key);
+ }
+ keyind = 0;
+}
+
+/*
+ * Release all buttons and keys, buttons first. It doesn't matter
+ * if none are currently pressed (applies to all the release functions.)
+ */
+void
+relalldev()
+{
+ relbuttons();
+ relkeys();
+}
+
+
+#define NMODS 8 /* Number of modifiers */
+
+static XModifierKeymap *origmap;
+static XModifierKeymap *curmap;
+
+/*
+ * Given the number of modifiers that you want it returns a modifier
+ * key mask with that number of bits set if possible. Each bit is
+ * a valid modifier for the server. If necessary the modifer map is
+ * set up with extra keycodes.
+ * If the server is really limited in how many keycodes it allows
+ * to be used as modifiers then you may not get as many modifiers as
+ * you want. You should insure that the test will still work in this
+ * case.
+ */
+unsigned int
+wantmods(disp, want)
+Display *disp;
+int want;
+{
+unsigned int mask;
+int nmods;
+int i;
+
+ if (curmap == NULL)
+ curmap = XGetModifierMapping(disp);
+ if (curmap == NULL)
+ return(0);
+
+ mask = 0;
+ nmods = 0;
+
+ /*
+ * Find out what is currently available.
+ */
+ for (i = 0; i < NMODS*curmap->max_keypermod; i++) {
+ if (curmap->modifiermap[i])
+ mask |= 1 << (i/curmap->max_keypermod);
+ }
+
+ /*
+ * If we want more modifiers than are currently in the map then
+ * try to add some. There is no guarantee that this can be done though.
+ */
+ nmods = bitcount(mask);
+ if (nmods < want) {
+ /*
+ * Exercise for the reader...
+ */
+ untested("Unimplemented modmap expansion in wantmods");
+ }
+
+ /* I want, but I can't get */
+ if (nmods < want)
+ want = nmods;
+
+ /*
+ * Put the wanted number of modifiers into the return mask
+ */
+ for (i = 0; i < NMODS; i++) {
+ if (mask & (1 << i))
+ want--;
+ if (want < 0)
+ mask &= ~(1 << i);
+ }
+
+ return(mask);
+}
+
+static void modthing(/* disp, mask */);
+
+/*
+ * Simulate pressing a bunch of modifier keys. The mask passed to this
+ * function should be made of bits obtained by a previous call to wantmods,
+ * to ensure that they have assigned keycodes.
+ */
+modpress(disp, mask)
+Display *disp;
+unsigned int mask;
+{
+ modthing(disp, mask, True);
+}
+
+/*
+ * Simulate releasing a bunch of modifier keys. The mask passed to this
+ * function should be made of bits obtained by a previous call to wantmods,
+ * to ensure that they have assigned keycodes.
+ */
+modrel(disp, mask)
+Display *disp;
+unsigned int mask;
+{
+ modthing(disp, mask, False);
+}
+
+static void
+modthing(disp, mask, pressing)
+Display *disp;
+unsigned int mask;
+int pressing;
+{
+int mod;
+void (*func)();
+
+ if (curmap == NULL) {
+ delete("Programming error: wantmods() not called");
+ return;
+ }
+
+ if (pressing)
+ func = keypress;
+ else
+ func = keyrel;
+
+ for (mod = 0; mod < NMODS; mod++) {
+ if (mask & (1 << mod))
+ (*func)(disp, curmap->modifiermap[mod*curmap->max_keypermod]);
+ }
+}
+
+/*
+ * Check if a keycode corresponds to any of mods in a mask, returned by
+ * wantmods.
+ */
+ismodkey(mask, kc)
+unsigned int mask;
+int kc;
+{
+int mod;
+
+ if (curmap == NULL) {
+ delete("Programming error: wantmods() not called");
+ return False;
+ }
+ if (!mask || kc < 8 || kc > 255)
+ return False;
+
+ for (mod = 0; mod < NMODS; mod++) {
+ if (mask & (1 << mod))
+ if (curmap->modifiermap[mod*curmap->max_keypermod] == kc)
+ return True;
+ }
+ return False;
+}
+
+/*
+ * This routine should be called at the end of a test after any of the
+ * device press routines have been called.
+ */
+restoredevstate()
+{
+extern Display *Dsp;
+
+ relalldev();
+ if (origmap)
+ XSetModifierMapping(Dsp, origmap);
+}
+
+/*
+ * Returns True if we don't want to do extended testing for any reason.
+ */
+noext(needbutton)
+int needbutton;
+{
+
+ if (config.extensions == False) {
+ untested("Extended testing not required");
+ return True;
+ } else if (IsExtTestAvailable() == False) {
+ untested("Server does not support XTEST extension");
+ untested("or test suite not configured to use XTEST extension");
+ return True;
+ } else if (needbutton && nbuttons() == 0) {
+ untested("No buttons exist on the server");
+ return True;
+ }
+ return False;
+}
+
+
+/*
+ * Returns the number of physical buttons.
+ */
+nbuttons()
+{
+static int Nbuttons = -1;
+unsigned char pmap[5];
+extern Display *Dsp;
+
+ if (Nbuttons == -1)
+ Nbuttons = XGetPointerMapping(Dsp, pmap, sizeof(pmap));
+ return Nbuttons;
+}
+
+/*
+ * Returns a valid keycode for the server. A different one is returned
+ * every time (until it wraps round).
+ */
+getkeycode(display)
+Display *display;
+{
+static int minkc, maxkc;
+static int curkey;
+
+ if (minkc == 0) {
+ XDisplayKeycodes(display, &minkc, &maxkc);
+ if (minkc < 8)
+ minkc = 8;
+ curkey = minkc;
+ }
+
+ if (curkey > maxkc)
+ curkey = minkc;
+
+ return curkey++;
+}
diff --git a/xc/test/xsuite/xtest/src/lib/dset.c b/xc/test/xsuite/xtest/src/lib/dset.c
new file mode 100644
index 000000000..04a6e3d15
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/dset.c
@@ -0,0 +1,56 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Clear a drawable to the pixel W_BG, it uses fill rectangle so
+ * that it will work on pixmaps.
+ */
+void
+dclear(disp, d)
+Display *disp;
+Drawable d;
+{
+void dset();
+
+ dset(disp, d, W_BG);
+}
+
+/*
+ * Set every pixel in a drawable to pix, it uses fill rectangle so that it
+ * works on pixmaps.
+ */
+void
+dset(disp, d, pix)
+Display *disp;
+Drawable d;
+unsigned long pix;
+{
+unsigned int width, height;
+GC gc;
+
+ getsize(disp, d, &width, &height);
+ gc = makegc(disp, d);
+ XSetForeground(disp, gc, pix);
+ XFillRectangle(disp, d, gc, 0, 0, width+1, height+1);
+ /* XFreeGC(disp, gc); */
+}
diff --git a/xc/test/xsuite/xtest/src/lib/dumpimage.c b/xc/test/xsuite/xtest/src/lib/dumpimage.c
new file mode 100644
index 000000000..77d83babd
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/dumpimage.c
@@ -0,0 +1,76 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdio.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Dump out an image to the given file name. A ascii form is used
+ * with a simple run length encoding.
+ */
+/*ARGSUSED2*/
+void
+dumpimage(imp, name, ap)
+XImage *imp;
+char *name;
+struct area *ap; /* NOTUSED yet */
+{
+FILE *fp;
+int x, y;
+unsigned long pix, lastpix = 0L; /* Initialise just to keep lint quiet */
+unsigned long count;
+extern int tet_thistest;
+static int lasttest;
+
+ fp = fopen(name, (lasttest==tet_thistest)? "a": "w");
+ if (fp == NULL) {
+ report("Could not create image file %s", name);
+ return;
+ }
+ lasttest = tet_thistest;
+
+ fprintf(fp, "%d %d %d\n", imp->width, imp->height, imp->depth);
+
+ count = 0;
+ for (y = 0; y < imp->height; y++) {
+ for (x = 0; x < imp->width; x++) {
+ pix = XGetPixel(imp, x, y);
+ /* count is 0 on the first time through */
+ if (pix != lastpix || count == 0) {
+ if (count == 1) {
+ fprintf(fp, "%x\n", lastpix);
+ } else if (count != 0) {
+ fprintf(fp, "%x,%x\n", count, lastpix);
+ }
+ lastpix = pix;
+ count = 1;
+ } else {
+ count++;
+ }
+ }
+ }
+ if (count == 1) {
+ fprintf(fp, "%x\n", lastpix);
+ } else if (count != 0) {
+ fprintf(fp, "%x,%x\n", count, lastpix);
+ }
+ fclose(fp);
+}
+
diff --git a/xc/test/xsuite/xtest/src/lib/environ.c b/xc/test/xsuite/xtest/src/lib/environ.c
new file mode 100644
index 000000000..9d9baf0f0
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/environ.c
@@ -0,0 +1,96 @@
+/*
+ * Copyright 1990, 1991, 1992 by the Massachusetts Institute of Technology
+ * and UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+/*
+ * Add a string to the environment. This is sourced from the tet api.
+ * References to size_t have been removed for maximum portability
+ */
+
+#include "xtest.h"
+
+#include "string.h"
+
+extern char **environ;
+
+int
+xtest_putenv(envstr)
+char *envstr;
+{
+ /*
+ * This routine mimics putenv(), and is provided purely
+ * because putenv() is not in POSIX.1
+ */
+
+ char **newenv, **cur, *envname;
+ int n, count = 0;
+ static char **allocp = NULL;
+
+ if (environ == NULL)
+ {
+ newenv = (char **)malloc((2*sizeof(char *)));
+ if (newenv == NULL)
+ return -1;
+
+ newenv[0] = envstr;
+ newenv[1] = NULL;
+ environ = newenv;
+ allocp = newenv;
+ return 0;
+ }
+
+ cur = environ;
+ while (*cur != NULL)
+ {
+ count++;
+ envname = *cur;
+ n = strcspn(envstr, "=");
+ if (strncmp(envname, envstr, n) || envname[n] != '=')
+ cur++;
+ else
+ {
+ *cur = envstr;
+ return 0;
+ }
+ }
+ /*
+ * If we previously allocated this environment enlarge it using
+ * realloc(), otherwise allocate a new one and copy it over.
+ * Note that only the last malloc()/realloc() pointer is saved, so
+ * if environ has since been changed the old space will be wasted.
+ */
+ if (environ == allocp)
+ newenv = (char **) realloc((void *) environ,
+ ((count+2)*sizeof(char *)));
+ else
+ newenv = (char **) malloc(((count+2)*sizeof(char *)));
+
+ if (newenv == NULL)
+ return -1;
+
+ if (environ != allocp)
+ {
+ for (n = 0; environ[n] != NULL; n++)
+ newenv[n] = environ[n];
+ allocp = newenv;
+ }
+ newenv[count] = envstr;
+ newenv[count+1] = NULL;
+ environ = newenv;
+
+ return 0;
+}
+
diff --git a/xc/test/xsuite/xtest/src/lib/err.c b/xc/test/xsuite/xtest/src/lib/err.c
new file mode 100644
index 000000000..ae2dad3ef
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/err.c
@@ -0,0 +1,123 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include <unistd.h>
+#include "xtest.h"
+#include "tet_api.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+static int Error; /* Place to save error code */
+static int Resourceid; /* Place to save BadValues */
+
+/*
+ * This is the error handler that is used when the routine under
+ * test is called. The error type is saved in Error, for later
+ * examination.
+ */
+int
+error_status(disp, errevent)
+Display *disp;
+XErrorEvent *errevent;
+{
+
+ /*
+ * The test for Success means that the first error will be recorded
+ * rather than the last. This is usually the most intuitively
+ * related to the problem. However there is no guarantee when
+ * multiple errors occur which will get reported and in what order.
+ * So all tests look for at most one error.
+ */
+ if (Error == Success) {
+ Error = errevent->error_code;
+ Resourceid = errevent->resourceid;
+ }
+ trace("Received error type %s", errorname(errevent->error_code));
+ return(0); /* This is not used (?) */
+
+}
+
+#define TEXTLEN 200
+
+/*
+ * This error handler deals with errors that occur when
+ * routines other than the one under test are called.
+ * It is always an error to get here.
+ */
+int
+unexp_err(disp, errevent)
+Display *disp;
+XErrorEvent *errevent;
+{
+char text[TEXTLEN];
+
+ XGetErrorText(disp, errevent->error_code, text, TEXTLEN);
+
+ report("Unexpected error %s", errorname(errevent->error_code));
+ report(text);
+ report("Protocol request was %s", protoname(errevent->request_code));
+
+ /* Cause to test to not pass */
+ delete("Unexpected Xlib error");
+}
+
+/*
+ * Error handler that is called upon a fatal i/o error.
+ * This is defined to return int even though it is not meant
+ * to return.
+ */
+int
+io_err(disp)
+Display *disp;
+{
+ delete("A fatal I/O error occurred");
+
+ /* Attempt to prevent any more tests from running */
+ tccabort("Any following results can not be relied upon");
+ exit(TET_UNRESOLVED);
+}
+
+/*
+ * Get the error code that was saved by a previous call to
+ * error_status.
+ */
+int
+geterr()
+{
+ return(Error);
+}
+
+/*
+ * Get the resourceid that was saved by a previous call to
+ * error_status.
+ */
+int
+getbadvalue()
+{
+ return(Resourceid);
+}
+
+/*
+ * Reset Error to Success.
+ */
+void
+reseterr()
+{
+ Error = Success;
+}
diff --git a/xc/test/xsuite/xtest/src/lib/events.c b/xc/test/xsuite/xtest/src/lib/events.c
new file mode 100644
index 000000000..74ebcd7e0
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/events.c
@@ -0,0 +1,75 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*LINTLIBRARY*/
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "tet_api.h"
+#include <unistd.h>
+
+/*
+ * Return in x_root_return and y_root_return the specified coordinates
+ * transformed from the coordinate space of the given window to that
+ * of the specified window. It is assumed that the two windows are on
+ * the same screen.
+ *
+ * Can be used in conjunction with ROOTCOORDSET macro.
+ */
+void
+rootcoordset(display, src_w, dest_w, src_x, src_y, dest_x_return, dest_y_return)
+Display *display;
+Window src_w;
+Window dest_w;
+int src_x;
+int src_y;
+int *dest_x_return;
+int *dest_y_return;
+{
+ Window window;
+
+ (void) XTranslateCoordinates(display, src_w, dest_w, src_x, src_y, dest_x_return, dest_y_return, &window);
+}
+
+/*
+ * Set the serial member of the specified event to NextRequest.
+ */
+void
+serialset(display, event)
+Display *display;
+XEvent *event;
+{
+ event->xany.serial = NextRequest(display);
+}
+
+/*
+ * Compare serial field of two events. Return True if they compare
+ * equal, else return False.
+ */
+Bool
+serialtest(good, ev)
+XEvent *good;
+XEvent *ev;
+{
+ if (ev->xany.serial != good->xany.serial) {
+ report("Checking event type %s", eventname(good->type));
+ report("found error in %s field, was %ld, expecting %ld","serial",ev->xany.serial, good->xany.serial);
+ return(False);
+ }
+ return(True);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/ex_startup.c b/xc/test/xsuite/xtest/src/lib/ex_startup.c
new file mode 100644
index 000000000..6bcceb231
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/ex_startup.c
@@ -0,0 +1,130 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "unistd.h"
+#include "string.h"
+#include "tet_api.h"
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Generic startup routine for functions which are called
+ * via tet_exec.
+ */
+
+extern int ntests;
+
+Display *Dsp;
+Window Win;
+
+Window ErrdefWindow;
+Drawable ErrdefDrawable;
+GC ErrdefGC;
+Colormap ErrdefColormap;
+
+/* NOT DONE YET */
+Pixmap ErrdefPixmap;
+Atom ErrdefAtom;
+Cursor ErrdefCursor;
+Font ErrdefFont;
+
+void
+exec_startup()
+{
+char *disp;
+char *cp;
+extern char *TestName;
+#if TEST_ANSI
+extern int unexp_err(Display *, XErrorEvent *ep);
+extern int io_err(Display *);
+#else
+extern int unexp_err();
+extern int io_err();
+#endif
+
+ initconfig();
+
+ /*
+ * Set the debug level first.
+ */
+ if ((cp = tet_getvar("XT_DEBUG")) != NULL) {
+ extern int DebugLevel;
+
+ setdblev(atov(cp));
+ } else {
+ setdblev(0);
+ }
+
+ /*
+ * Get the display to use and open it.
+ */
+ disp = tet_getvar("XT_DISPLAY");
+
+ if (disp == (char*)0) {
+ report("exec_startup:XT_DISPLAY not set");
+ UNRESOLVED;
+ exit(0);
+ }
+
+ Dsp = XOpenDisplay(disp);
+
+ if (Dsp == (Display *)0) {
+ report("exec_startup:Could not open display");
+ UNRESOLVED;
+ exit(0);
+ }
+
+#ifdef notyet
+ /* Get a window for general use */
+ Win = makewin(Dsp);
+#endif
+
+ /*
+ * Set up the error handlers.
+ */
+ (void) XSetErrorHandler(unexp_err);
+ (void) XSetIOErrorHandler(io_err);
+
+ /*
+ * Set up the default resources for error tests. At present
+ * just use the root window (could create a window specialy)
+ */
+ ErrdefWindow = DefaultRootWindow(Dsp);
+ ErrdefDrawable = DefaultRootWindow(Dsp);
+ ErrdefGC = DefaultGC(Dsp, DefaultScreen(Dsp));
+ ErrdefColormap = DefaultColormap(Dsp, DefaultScreen(Dsp));
+
+ /*
+ * Sync and clear out queue.
+ */
+ XSync(Dsp, True);
+
+}
+
+/*
+ * Cleanup functions called at the end of the test purposes which
+ * are called via tet_exec.
+ */
+void
+exec_cleanup()
+{
+ if (Dsp)
+ XCloseDisplay(Dsp);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/exposechk.c b/xc/test/xsuite/xtest/src/lib/exposechk.c
new file mode 100644
index 000000000..ede92f8d5
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/exposechk.c
@@ -0,0 +1,148 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+
+/*
+ * Set up a window for testing exposure processing. This routine
+ * is called first, the window is then covered and exposed.
+ */
+void
+setforexpose(disp, w)
+Display *disp;
+Window w;
+{
+ /*
+ * Ensure that the background is set. The whole screen is drawn
+ * on.
+ */
+ XSetWindowBackground(disp, w, W_BG);
+ dset(disp, w, W_FG);
+}
+
+/*
+ * Take the given window and use any Expose events in the queue
+ * to redraw exposed parts of the window.
+ * The fields in the events are checked at the same time.
+ * Returns False if the Expose events fields (other than the position/size
+ * fields) are incorrect.
+ */
+Status
+exposefill(disp, w)
+Display *disp;
+Window w;
+{
+XEvent ev;
+XExposeEvent good;
+XExposeEvent *ep;
+GC gc;
+struct area area;
+int lastcount = 0;
+
+ good.type = Expose;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = disp;
+ good.window = w;
+
+ gc = makegc(disp, w);
+
+ /*
+ * Mimic the action of a client - redraw the areas that get
+ * Expose events. Then checking that the window is complete
+ * verifies that either expose events were received or that
+ * the contents were restored from backing store.
+ */
+ while (XCheckTypedWindowEvent(disp, w, Expose, &ev)) {
+
+ ep = (XExposeEvent*)&ev;
+
+ debug(2, "Expose (%d,%d) %dx%d", ep->x, ep->y, ep->width, ep->height);
+
+ /*
+ * This is for interest. Check that the exposed area is currently
+ * background. The spec does not seem to disallow overlapping
+ * expose areas.
+ */
+ setarea(&area, ep->x, ep->y, ep->width, ep->height);
+ if (!checkarea(disp, w, &area, W_BG, W_BG, CHECK_IN|CHECK_DIFFER))
+ trace("Exposed area was not all background");
+
+ /*
+ * Fill in the exposed area.
+ */
+ XFillRectangle(disp, w, gc, ep->x, ep->y, ep->width, ep->height);
+
+ /*
+ * Check the count field.
+ * NOTE: Not clear what the spec really means here.
+ * I am expecting a series of contiguous sequences counting
+ * down to zero.
+ */
+ if (lastcount == 0) {
+ lastcount = ep->count;
+ good.count = ep->count;
+ } else {
+ good.count = --lastcount;
+ }
+
+ /* Check other event fields */
+ good.x = ep->x;
+ good.y = ep->y;
+ good.width = ep->width;
+ good.height = ep->height;
+
+ if (checkevent((XEvent*)&good, (XEvent*)ep)) {
+ trace("Checkevent failed");
+ return(False);
+ }
+ }
+ return(True);
+}
+
+/*
+ * Check that either enough expose events were received to
+ * restore the window, or that the window has been restored from backing
+ * store. The field in the events are checked at the same time.
+ * This routine may produce error messages and files.
+ */
+Status
+exposecheck(disp, w)
+Display *disp;
+Window w;
+{
+
+ if (exposefill(disp, w) == False)
+ return(False);
+ return checkarea(disp, w, (struct area *)0, W_FG, W_FG, CHECK_ALL);
+}
+
+/*
+ * Verify that the window has been restored to the original pattern
+ * drawn in setforexpose(). This routine produces a status return only -
+ * no error messages or error files are produced.
+ */
+Status
+expose_test_restored(disp, w)
+Display *disp;
+Window w;
+{
+ return checkarea(disp, w, (struct area *)0, W_FG, W_FG, CHECK_ALL|CHECK_DIFFER);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/extenavail.c b/xc/test/xsuite/xtest/src/lib/extenavail.c
new file mode 100644
index 000000000..e87f457ab
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/extenavail.c
@@ -0,0 +1,60 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "Xlib.h"
+
+#ifdef GENERATE_PIXMAPS
+/* in this case we never want to do anything like real buffer stuffing or
+ * I/O on our "display" as it isn't real enough for that.
+ */
+#undef XTESTEXTENSION
+#endif /* GENERATE_PIXMAPS */
+
+extern Display *Dsp;
+
+#ifndef XTestExtName
+# define XTestExtName "XTEST"
+#endif
+
+int XTTestExtn = 0;
+
+Status
+IsExtTestAvailable()
+{
+#ifdef XTESTEXTENSION
+ int mop;
+ int dev;
+ int der;
+
+ switch(XTTestExtn) {
+ case -1 :
+ return(False);
+ case 1 :
+ return(True);
+ default:
+ if(XQueryExtension(Dsp, XTestExtName, &mop, &dev, &der) == False) {
+ XTTestExtn = -1;
+ return(False);
+ } else {
+ XTTestExtn = 1;
+ return(True);
+ }
+ }
+#else
+ return(False);
+#endif
+}
diff --git a/xc/test/xsuite/xtest/src/lib/gcflush.c b/xc/test/xsuite/xtest/src/lib/gcflush.c
new file mode 100644
index 000000000..9c0b4d79b
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/gcflush.c
@@ -0,0 +1,34 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+#include <sys/types.h>
+#include "Xlibint.h"
+#include "xtest.h"
+#include "pixval.h"
+
+/*
+ * Flush the gc cache.
+ */
+void
+gcflush(dpy, gc)
+Display *dpy;
+GC gc;
+{
+ LockDisplay(dpy);
+ _XFlushGCCache(dpy,gc);
+ UnlockDisplay(dpy);
+ SyncHandle();
+}
diff --git a/xc/test/xsuite/xtest/src/lib/gcinclude.c b/xc/test/xsuite/xtest/src/lib/gcinclude.c
new file mode 100644
index 000000000..e5b157594
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/gcinclude.c
@@ -0,0 +1,64 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * Functions that have no general utility but are called in the
+ * included gc routines can go in here. This can save a lot of code
+ * being included in every file.
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Find the first pixel that is set in a drawable. Used
+ * in the gc funtion tests.
+ */
+void
+setfuncpixel(disp, drw, xp, yp)
+Display *disp;
+Drawable drw;
+int *xp;
+int *yp;
+{
+int x;
+int y;
+unsigned int width, height;
+XImage *imp;
+
+ getsize(disp, drw, &width, &height);
+ imp = savimage(disp, drw);
+
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ if (XGetPixel(imp, x, y) == W_FG) {
+ *xp = x;
+ *yp = y;
+ return;
+ }
+ }
+ }
+ /*
+ * No pixel has been found - this 'cant happen' so might as well
+ * flag the fact here. The higher routines will also notice this
+ * anyway
+ */
+ delete("No pixel set in drawable");
+}
diff --git a/xc/test/xsuite/xtest/src/lib/getevent.c b/xc/test/xsuite/xtest/src/lib/getevent.c
new file mode 100644
index 000000000..1b511b060
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/getevent.c
@@ -0,0 +1,44 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Check if there are events on the queue and if so return the
+ * first one.
+ * Returns the number of events that were in the queue on calling.
+ */
+int
+getevent(disp, event)
+Display *disp;
+XEvent *event;
+{
+int len;
+
+ if ((len = XQLength(disp)) == 0)
+ return(0);
+
+ XNextEvent(disp, event);
+
+ debug(2, "Event %s", eventname(event->type));
+
+ return(len);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/getsize.c b/xc/test/xsuite/xtest/src/lib/getsize.c
new file mode 100644
index 000000000..d5d7c23dc
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/getsize.c
@@ -0,0 +1,67 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "Xlib.h"
+#include "Xutil.h"
+#include "pixval.h"
+
+
+/*
+ * Get the size of a drawable. Just uses XGetGeometry but avoids all
+ * the other information that you get with that.
+ * Either of widthp or heightp can be NULL.
+ */
+void
+getsize(disp, d, widthp, heightp)
+Display *disp;
+Drawable d;
+unsigned int *widthp;
+unsigned int *heightp;
+{
+unsigned int dummy;
+Window root;
+int x;
+int y;
+unsigned int border;
+unsigned int depth;
+
+ XGetGeometry(disp, d, &root, &x, &y,
+ widthp? widthp: &dummy,
+ heightp? heightp: &dummy, &border, &depth);
+}
+
+/*
+ * Returns the depth of the given drawable.
+ */
+unsigned int
+getdepth(disp, d)
+Display *disp;
+Drawable d;
+{
+Window root;
+int x;
+int y;
+unsigned int width;
+unsigned int height;
+unsigned int border;
+unsigned int depth;
+
+ XGetGeometry(disp, d, &root, &x, &y, &width, &height,
+ &border, &depth);
+
+ return(depth);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/gettime.c b/xc/test/xsuite/xtest/src/lib/gettime.c
new file mode 100644
index 000000000..204e769f7
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/gettime.c
@@ -0,0 +1,76 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "Xlib.h"
+#include "Xutil.h"
+#include "Xatom.h"
+#include "xtest.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+
+/*
+ * Get the current server time. Use a property attached to the root window
+ * of the display called XT_TIMESTAMP and replaces it with 42 (32-bits).
+ * The PropertyNotify event that's generated supplies the time stamp returned.
+ * The event mask on the root window is restored to its initial state.
+ * Returns CurrentTime on error (as well as deleting the test).
+ */
+Time
+gettime(disp)
+ Display *disp;
+{
+ Window root;
+ static Atom prop = None;
+ static int data = 42;
+ static char *name = XT_TIMESTAMP;
+ XWindowAttributes wattr;
+ XEvent ev;
+ int i;
+
+ root = XDefaultRootWindow(disp);
+
+ if (XGetWindowAttributes(disp, root, &wattr) == False) {
+ delete("gettime: XGetWindowAttributes on root failed.");
+ return CurrentTime;
+ }
+
+ if (prop==None && (prop=XInternAtom(disp, name, False)) == None) {
+ delete("gettime: XInternAtom of '%s' failed.", name);
+ return CurrentTime;
+ }
+
+ XSelectInput(disp, root, wattr.your_event_mask | PropertyChangeMask);
+
+ XChangeProperty(disp, root, prop, XA_INTEGER, 32, PropModeReplace,
+ (unsigned char *)&data, 1);
+
+ for (i=0; i<10; i++, sleep(2)) {
+ if (XCheckWindowEvent(disp, root, PropertyChangeMask, &ev))
+ break;
+ }
+
+ if (i >= 10) {
+ delete("gettime: Didn't receive expected PropertyNotify event");
+ return CurrentTime;
+ }
+
+ XSelectInput(disp, root, wattr.your_event_mask);
+
+ return ev.xproperty.time;
+}
+
diff --git a/xc/test/xsuite/xtest/src/lib/iponlywin.c b/xc/test/xsuite/xtest/src/lib/iponlywin.c
new file mode 100644
index 000000000..ec7451595
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/iponlywin.c
@@ -0,0 +1,54 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdlib.h"
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Create an input-only window on the given display
+ * The window has size 5x5 at location 1, 1.
+ */
+Window
+iponlywin(disp)
+Display *disp;
+{
+Window w;
+XSetWindowAttributes atts;
+
+ atts.override_redirect = config.debug_override_redirect;
+ w = XCreateWindow(disp
+ , DefaultRootWindow(disp)
+ , 1
+ , 1
+ , 5
+ , 5
+ , 0
+ , 0
+ , InputOnly
+ , (Visual *)CopyFromParent
+ , CWOverrideRedirect
+ , &atts
+ );
+ regid(disp, (union regtypes *)&w, REG_WINDOW);
+ return(w);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/issuppvis.c b/xc/test/xsuite/xtest/src/lib/issuppvis.c
new file mode 100644
index 000000000..c60ed856b
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/issuppvis.c
@@ -0,0 +1,121 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+static int Nsupvis;
+static unsigned long Supvismsk;
+
+/*
+ * issuppvis() takes a visual class as argument and returns true
+ * if such a class is supported.
+ * This function uses the XGetVisualInfo() function rather than
+ * use the XT_VISUAL_CLASSES parameter.
+ */
+int
+issuppvis(disp, vis)
+Display *disp;
+int vis;
+{
+XVisualInfo templ;
+XVisualInfo *vip;
+int n;
+
+ templ.class = vis;
+ templ.screen = DefaultScreen(disp);
+ vip = XGetVisualInfo(disp, VisualClassMask|VisualScreenMask, &templ, &n);
+ if(vip != (XVisualInfo *) 0)
+ XFree((char*)vip);
+ return((n>0)? True: False);
+}
+
+/*
+ * Takes a mask indicating a set of visuals, and returns
+ * a mask indicating the subset that is supported.
+ * If the mask is 0L then the mask shows all supported
+ * visuals.
+ */
+unsigned long
+visualsupported(disp, mask)
+Display *disp;
+unsigned long mask;
+{
+ unsigned long resultmask = 0;
+
+ if(mask == 0L)
+ mask = ((1L<<DirectColor) | (1L<<PseudoColor) | (1L<<GrayScale)|
+ (1L<<TrueColor) | (1L<<StaticColor) | (1L<<StaticGray));
+
+ if(mask & (1L<<PseudoColor))
+ if(issuppvis(disp, PseudoColor))
+ resultmask |= (1L<<PseudoColor);
+
+ if(mask & (1L<<DirectColor))
+ if(issuppvis(disp, DirectColor))
+ resultmask |= (1L<<DirectColor);
+
+ if(mask & (1L<<GrayScale))
+ if(issuppvis(disp, GrayScale))
+ resultmask |= (1L<<GrayScale);
+
+ if(mask & (1L<<StaticGray))
+ if(issuppvis(disp, StaticGray))
+ resultmask |= (1L<<StaticGray);
+
+ if(mask & (1L<<StaticColor))
+ if(issuppvis(disp, StaticColor))
+ resultmask |= (1L<<StaticColor);
+
+ if(mask & (1L<<TrueColor))
+ if(issuppvis(disp, TrueColor))
+ resultmask |= (1L<<TrueColor);
+
+ return resultmask;
+}
+
+void
+resetsupvis(vismask)
+unsigned long vismask;
+{
+ resetvinf(VI_WIN);
+ Nsupvis = 0;
+ Supvismsk = vismask;
+}
+
+
+int
+nextsupvis(vi)
+XVisualInfo **vi;
+{
+ while(nextvinf(vi))
+ if(Supvismsk & (1L<<(*vi)->class)) {
+ Nsupvis++;
+ trace("--- Testing with supported visual class %s", displayclassname((*vi)->class));
+ return True;
+ }
+
+ return False;
+}
+
+int
+nsupvis()
+{
+ return Nsupvis;
+}
diff --git a/xc/test/xsuite/xtest/src/lib/linkstart.c b/xc/test/xsuite/xtest/src/lib/linkstart.c
new file mode 100644
index 000000000..649657c8f
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/linkstart.c
@@ -0,0 +1,172 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "tet_api.h"
+#include "stdlib.h"
+#include <stdio.h>
+#include <string.h>
+
+/* For stdlib.h that are not quite standard */
+#ifndef EXIT_FAILURE
+#define EXIT_FAILURE 1
+#endif
+
+#define MAXTPS 1000
+#define TLI nullfn,1
+#define TLI10 TLI, TLI, TLI, TLI, TLI, TLI, TLI, TLI, TLI, TLI
+#define TLI50 TLI10, TLI10, TLI10, TLI10, TLI10
+
+static void
+nullfn()
+{
+ return;
+}
+
+/*
+ * Define the TET interface variables here. This module will be
+ * brought into the executable by the references to these variables.
+ */
+int tet_thistest;
+
+struct tet_testlist tet_testlist[MAXTPS+1] = {
+ TLI50, TLI50, TLI50, TLI50, TLI50,
+ TLI50, TLI50, TLI50, TLI50, TLI50,
+ TLI50, TLI50, TLI50, TLI50, TLI50,
+ TLI50, TLI50, TLI50, TLI50, TLI50,
+ NULL, 0 };
+
+void linkstart();
+void linkclean();
+
+void (*tet_startup)() = linkstart;
+void (*tet_cleanup)() = linkclean;
+
+char *TestName;
+int ntests;
+
+extern char *tet_pname;
+
+extern struct linkinfo *linktbl[];
+
+/*
+ * The startup routine for the linked executables case. We have
+ * to make some assumptions about the TET that are not officialy in
+ * the spec.
+ * - It is valid to change the contents of tet_testlist[] in the
+ * startup routine.
+ *
+ * Get the name of the routine and set up the interface to
+ * point to the tests for that routine.
+ */
+void
+linkstart()
+{
+struct linkinfo *lp;
+struct linkinfo **lpp;
+struct tet_testlist *tlp;
+char *name;
+int i;
+
+ lp = (struct linkinfo *)0;
+
+ /*
+ * Get the basename part of tet_pname.
+ */
+ name = strrchr(tet_pname, '/');
+ if (name)
+ name++;
+ else
+ name = tet_pname;
+
+ for (lpp = linktbl; *lpp; lpp++) {
+ if (strcmp((*lpp)->name, name) == 0) {
+ lp = *lpp;
+ break;
+ }
+ }
+
+ if (lp == (struct linkinfo *)0) {
+ /*
+ * If this happens if probably means that the executable
+ * has been built incorrectly.
+ */
+ report("Name (%s) not found in link table, aborting test\n", name);
+ fprintf(stderr, "Name (%s) not found in link table, aborting test\n", name);
+ exit(EXIT_FAILURE);
+ }
+
+ TestName = lp->testname;
+ ntests = *lp->ntests;
+
+ tlp = lp->testlist;
+ for (i = 0; tlp[i].testfunc != 0; i++) {
+ tet_testlist[i] = tlp[i];
+ }
+ /* Copy the final null entry */
+ tet_testlist[i] = tlp[i];
+
+ if (lp->localstartup)
+ (*lp->localstartup)();
+ else
+ startup();
+
+}
+
+/*
+ * Cleanup function for linked executables.
+ */
+void
+linkclean()
+{
+struct linkinfo *lp;
+struct linkinfo **lpp;
+char *name;
+
+ lp = (struct linkinfo *)0;
+
+ /*
+ * Get the basename part of tet_pname.
+ */
+ name = strrchr(tet_pname, '/');
+ if (name)
+ name++;
+ else
+ name = tet_pname;
+
+ for (lpp = linktbl; *lpp; lpp++) {
+ if (strcmp((*lpp)->name, name) == 0) {
+ lp = *lpp;
+ break;
+ }
+ }
+
+ if (lp == (struct linkinfo *)0) {
+ /*
+ * If this happens here, something has gone VERY BADLY WRONG
+ * and I'm not certain what we can do about it.
+ */
+ report("Name (%s) not found in link table in linkclean!\n", name);
+ fprintf(stderr, "Name (%s) not found in link table in linkclean!\n", name);
+ exit(EXIT_FAILURE);
+ }
+
+ if (lp->localcleanup)
+ (*lp->localcleanup)();
+ else
+ cleanup();
+}
diff --git a/xc/test/xsuite/xtest/src/lib/lookupname.c b/xc/test/xsuite/xtest/src/lib/lookupname.c
new file mode 100644
index 000000000..2320cf959
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/lookupname.c
@@ -0,0 +1,1139 @@
+/* $XConsortium$ */
+/*
+ * Do not edit this file -- it is generated from the
+ * file lookupname.dat.
+ */
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xproto.h"
+#include "Xutil.h"
+#include "Xatom.h"
+#include "xtestlib.h"
+
+static char buf[100];
+static char *bp;
+
+struct valname S_bool[] = {
+ True, "True",
+ False, "False",
+};
+int NS_bool = NELEM(S_bool);
+
+/*
+ * Return a character representation of the given bool value.
+ */
+char *
+boolname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_bool; vp < &S_bool[NELEM(S_bool)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_eventmask[] = {
+ NoEventMask, "NoEventMask",
+ KeyPressMask, "KeyPressMask",
+ KeyReleaseMask, "KeyReleaseMask",
+ ButtonPressMask, "ButtonPressMask",
+ ButtonReleaseMask, "ButtonReleaseMask",
+ EnterWindowMask, "EnterWindowMask",
+ LeaveWindowMask, "LeaveWindowMask",
+ PointerMotionMask, "PointerMotionMask",
+ PointerMotionHintMask, "PointerMotionHintMask",
+ Button1MotionMask, "Button1MotionMask",
+ Button2MotionMask, "Button2MotionMask",
+ Button3MotionMask, "Button3MotionMask",
+ Button4MotionMask, "Button4MotionMask",
+ Button5MotionMask, "Button5MotionMask",
+ ButtonMotionMask, "ButtonMotionMask",
+ KeymapStateMask, "KeymapStateMask",
+ ExposureMask, "ExposureMask",
+ VisibilityChangeMask, "VisibilityChangeMask",
+ StructureNotifyMask, "StructureNotifyMask",
+ ResizeRedirectMask, "ResizeRedirectMask",
+ SubstructureNotifyMask, "SubstructureNotifyMask",
+ SubstructureRedirectMask, "SubstructureRedirectMask",
+ FocusChangeMask, "FocusChangeMask",
+ PropertyChangeMask, "PropertyChangeMask",
+ ColormapChangeMask, "ColormapChangeMask",
+ OwnerGrabButtonMask, "OwnerGrabButtonMask",
+};
+int NS_eventmask = NELEM(S_eventmask);
+
+/*
+ * Return a character representation of the given eventmask value.
+ */
+char *
+eventmaskname(val)
+unsigned long val;
+{
+struct valname *vp;
+int size;
+unsigned long masks;
+
+ size = 0;
+ for (vp = S_eventmask; vp < &S_eventmask[NELEM(S_eventmask)]; vp++)
+ size += strlen(vp->name)+1;
+
+ bp = (char*)malloc(size+sizeof("UNDEFINED BITS(0xffffffff)"));
+ if (bp == (char*)0) {
+ /* Just return the value */
+ sprintf(buf, "(0x%x)", val);
+ return(buf);
+ }
+
+ bp[0] = 0;
+ masks = 0;
+ for (vp = S_eventmask; vp < &S_eventmask[NELEM(S_eventmask)]; vp++) {
+ if (vp->val & val) {
+ if (*bp != 0)
+ strcat(bp, "|");
+ strcat(bp, vp->name);
+ masks |= vp->val;
+ }
+ }
+ /*
+ * Any bits set in val that are not in masks have been
+ * missed by the above.
+ */
+ if (val & (~masks)) {
+ if (*bp != 0)
+ strcat(bp, "|");
+ sprintf(buf, "UNDEFINED BITS(0x%x)", val & (~masks));
+ strcat(bp, buf);
+ }
+ return(bp);
+}
+
+struct valname S_event[] = {
+ KeyPress, "KeyPress",
+ KeyRelease, "KeyRelease",
+ ButtonPress, "ButtonPress",
+ ButtonRelease, "ButtonRelease",
+ MotionNotify, "MotionNotify",
+ EnterNotify, "EnterNotify",
+ LeaveNotify, "LeaveNotify",
+ FocusIn, "FocusIn",
+ FocusOut, "FocusOut",
+ KeymapNotify, "KeymapNotify",
+ Expose, "Expose",
+ GraphicsExpose, "GraphicsExpose",
+ NoExpose, "NoExpose",
+ VisibilityNotify, "VisibilityNotify",
+ CreateNotify, "CreateNotify",
+ DestroyNotify, "DestroyNotify",
+ UnmapNotify, "UnmapNotify",
+ MapNotify, "MapNotify",
+ MapRequest, "MapRequest",
+ ReparentNotify, "ReparentNotify",
+ ConfigureNotify, "ConfigureNotify",
+ ConfigureRequest, "ConfigureRequest",
+ GravityNotify, "GravityNotify",
+ ResizeRequest, "ResizeRequest",
+ CirculateNotify, "CirculateNotify",
+ CirculateRequest, "CirculateRequest",
+ PropertyNotify, "PropertyNotify",
+ SelectionClear, "SelectionClear",
+ SelectionRequest, "SelectionRequest",
+ SelectionNotify, "SelectionNotify",
+ ColormapNotify, "ColormapNotify",
+ ClientMessage, "ClientMessage",
+ MappingNotify, "MappingNotify",
+ LASTEvent, "LASTEvent",
+};
+int NS_event = NELEM(S_event);
+
+/*
+ * Return a character representation of the given event value.
+ */
+char *
+eventname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_event; vp < &S_event[NELEM(S_event)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_keymask[] = {
+ ShiftMask, "ShiftMask",
+ LockMask, "LockMask",
+ ControlMask, "ControlMask",
+ Mod1Mask, "Mod1Mask",
+ Mod2Mask, "Mod2Mask",
+ Mod3Mask, "Mod3Mask",
+ Mod4Mask, "Mod4Mask",
+ Mod5Mask, "Mod5Mask",
+};
+int NS_keymask = NELEM(S_keymask);
+
+/*
+ * Return a character representation of the given keymask value.
+ */
+char *
+keymaskname(val)
+unsigned long val;
+{
+struct valname *vp;
+int size;
+unsigned long masks;
+
+ size = 0;
+ for (vp = S_keymask; vp < &S_keymask[NELEM(S_keymask)]; vp++)
+ size += strlen(vp->name)+1;
+
+ bp = (char*)malloc(size+sizeof("UNDEFINED BITS(0xffffffff)"));
+ if (bp == (char*)0) {
+ /* Just return the value */
+ sprintf(buf, "(0x%x)", val);
+ return(buf);
+ }
+
+ bp[0] = 0;
+ masks = 0;
+ for (vp = S_keymask; vp < &S_keymask[NELEM(S_keymask)]; vp++) {
+ if (vp->val & val) {
+ if (*bp != 0)
+ strcat(bp, "|");
+ strcat(bp, vp->name);
+ masks |= vp->val;
+ }
+ }
+ /*
+ * Any bits set in val that are not in masks have been
+ * missed by the above.
+ */
+ if (val & (~masks)) {
+ if (*bp != 0)
+ strcat(bp, "|");
+ sprintf(buf, "UNDEFINED BITS(0x%x)", val & (~masks));
+ strcat(bp, buf);
+ }
+ return(bp);
+}
+
+struct valname S_modifier[] = {
+ ShiftMapIndex, "ShiftMapIndex",
+ LockMapIndex, "LockMapIndex",
+ ControlMapIndex, "ControlMapIndex",
+ Mod1MapIndex, "Mod1MapIndex",
+ Mod2MapIndex, "Mod2MapIndex",
+ Mod3MapIndex, "Mod3MapIndex",
+ Mod4MapIndex, "Mod4MapIndex",
+ Mod5MapIndex, "Mod5MapIndex",
+};
+int NS_modifier = NELEM(S_modifier);
+
+/*
+ * Return a character representation of the given modifier value.
+ */
+char *
+modifiername(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_modifier; vp < &S_modifier[NELEM(S_modifier)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_buttonmask[] = {
+ Button1Mask, "Button1Mask",
+ Button2Mask, "Button2Mask",
+ Button3Mask, "Button3Mask",
+ Button4Mask, "Button4Mask",
+ Button5Mask, "Button5Mask",
+};
+int NS_buttonmask = NELEM(S_buttonmask);
+
+/*
+ * Return a character representation of the given buttonmask value.
+ */
+char *
+buttonmaskname(val)
+unsigned long val;
+{
+struct valname *vp;
+int size;
+unsigned long masks;
+
+ size = 0;
+ for (vp = S_buttonmask; vp < &S_buttonmask[NELEM(S_buttonmask)]; vp++)
+ size += strlen(vp->name)+1;
+
+ bp = (char*)malloc(size+sizeof("UNDEFINED BITS(0xffffffff)"));
+ if (bp == (char*)0) {
+ /* Just return the value */
+ sprintf(buf, "(0x%x)", val);
+ return(buf);
+ }
+
+ bp[0] = 0;
+ masks = 0;
+ for (vp = S_buttonmask; vp < &S_buttonmask[NELEM(S_buttonmask)]; vp++) {
+ if (vp->val & val) {
+ if (*bp != 0)
+ strcat(bp, "|");
+ strcat(bp, vp->name);
+ masks |= vp->val;
+ }
+ }
+ /*
+ * Any bits set in val that are not in masks have been
+ * missed by the above.
+ */
+ if (val & (~masks)) {
+ if (*bp != 0)
+ strcat(bp, "|");
+ sprintf(buf, "UNDEFINED BITS(0x%x)", val & (~masks));
+ strcat(bp, buf);
+ }
+ return(bp);
+}
+
+struct valname S_button[] = {
+ Button1, "Button1",
+ Button2, "Button2",
+ Button3, "Button3",
+ Button4, "Button4",
+ Button5, "Button5",
+};
+int NS_button = NELEM(S_button);
+
+/*
+ * Return a character representation of the given button value.
+ */
+char *
+buttonname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_button; vp < &S_button[NELEM(S_button)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_notifymode[] = {
+ NotifyNormal, "NotifyNormal",
+ NotifyGrab, "NotifyGrab",
+ NotifyUngrab, "NotifyUngrab",
+ NotifyWhileGrabbed, "NotifyWhileGrabbed",
+};
+int NS_notifymode = NELEM(S_notifymode);
+
+/*
+ * Return a character representation of the given notifymode value.
+ */
+char *
+notifymodename(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_notifymode; vp < &S_notifymode[NELEM(S_notifymode)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_notifydetail[] = {
+ NotifyAncestor, "NotifyAncestor",
+ NotifyVirtual, "NotifyVirtual",
+ NotifyInferior, "NotifyInferior",
+ NotifyNonlinear, "NotifyNonlinear",
+ NotifyNonlinearVirtual, "NotifyNonlinearVirtual",
+ NotifyPointer, "NotifyPointer",
+ NotifyPointerRoot, "NotifyPointerRoot",
+};
+int NS_notifydetail = NELEM(S_notifydetail);
+
+/*
+ * Return a character representation of the given notifydetail value.
+ */
+char *
+notifydetailname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_notifydetail; vp < &S_notifydetail[NELEM(S_notifydetail)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_visibility[] = {
+ VisibilityUnobscured, "VisibilityUnobscured",
+ VisibilityPartiallyObscured, "VisibilityPartiallyObscured",
+ VisibilityFullyObscured, "VisibilityFullyObscured",
+};
+int NS_visibility = NELEM(S_visibility);
+
+/*
+ * Return a character representation of the given visibility value.
+ */
+char *
+visibilityname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_visibility; vp < &S_visibility[NELEM(S_visibility)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_grabreply[] = {
+ GrabSuccess, "GrabSuccess",
+ AlreadyGrabbed, "AlreadyGrabbed",
+ GrabInvalidTime, "GrabInvalidTime",
+ GrabNotViewable, "GrabNotViewable",
+ GrabFrozen, "GrabFrozen",
+};
+int NS_grabreply = NELEM(S_grabreply);
+
+/*
+ * Return a character representation of the given grabreply value.
+ */
+char *
+grabreplyname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_grabreply; vp < &S_grabreply[NELEM(S_grabreply)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_alloweventmode[] = {
+ AsyncPointer, "AsyncPointer",
+ SyncPointer, "SyncPointer",
+ ReplayPointer, "ReplayPointer",
+ AsyncKeyboard, "AsyncKeyboard",
+ SyncKeyboard, "SyncKeyboard",
+ ReplayKeyboard, "ReplayKeyboard",
+ AsyncBoth, "AsyncBoth",
+ SyncBoth, "SyncBoth",
+};
+int NS_alloweventmode = NELEM(S_alloweventmode);
+
+/*
+ * Return a character representation of the given alloweventmode value.
+ */
+char *
+alloweventmodename(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_alloweventmode; vp < &S_alloweventmode[NELEM(S_alloweventmode)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_revertto[] = {
+ RevertToNone, "RevertToNone",
+ RevertToPointerRoot, "RevertToPointerRoot",
+ RevertToParent, "RevertToParent",
+};
+int NS_revertto = NELEM(S_revertto);
+
+/*
+ * Return a character representation of the given revertto value.
+ */
+char *
+reverttoname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_revertto; vp < &S_revertto[NELEM(S_revertto)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_error[] = {
+ Success, "Success",
+ BadRequest, "BadRequest",
+ BadValue, "BadValue",
+ BadWindow, "BadWindow",
+ BadPixmap, "BadPixmap",
+ BadAtom, "BadAtom",
+ BadCursor, "BadCursor",
+ BadFont, "BadFont",
+ BadMatch, "BadMatch",
+ BadDrawable, "BadDrawable",
+ BadAccess, "BadAccess",
+ BadAlloc, "BadAlloc",
+ BadColor, "BadColor",
+ BadGC, "BadGC",
+ BadIDChoice, "BadIDChoice",
+ BadName, "BadName",
+ BadLength, "BadLength",
+ BadImplementation, "BadImplementation",
+};
+int NS_error = NELEM(S_error);
+
+/*
+ * Return a character representation of the given error value.
+ */
+char *
+errorname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_error; vp < &S_error[NELEM(S_error)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_class[] = {
+ InputOutput, "InputOutput",
+ InputOnly, "InputOnly",
+};
+int NS_class = NELEM(S_class);
+
+/*
+ * Return a character representation of the given class value.
+ */
+char *
+classname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_class; vp < &S_class[NELEM(S_class)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_bitgravity[] = {
+ ForgetGravity, "ForgetGravity",
+ NorthWestGravity, "NorthWestGravity",
+ NorthGravity, "NorthGravity",
+ NorthEastGravity, "NorthEastGravity",
+ WestGravity, "WestGravity",
+ CenterGravity, "CenterGravity",
+ EastGravity, "EastGravity",
+ SouthWestGravity, "SouthWestGravity",
+ SouthGravity, "SouthGravity",
+ SouthEastGravity, "SouthEastGravity",
+ StaticGravity, "StaticGravity",
+};
+int NS_bitgravity = NELEM(S_bitgravity);
+
+/*
+ * Return a character representation of the given bitgravity value.
+ */
+char *
+bitgravityname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_bitgravity; vp < &S_bitgravity[NELEM(S_bitgravity)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_wingravity[] = {
+ UnmapGravity, "UnmapGravity",
+ NorthWestGravity, "NorthWestGravity",
+ NorthGravity, "NorthGravity",
+ NorthEastGravity, "NorthEastGravity",
+ WestGravity, "WestGravity",
+ CenterGravity, "CenterGravity",
+ EastGravity, "EastGravity",
+ SouthWestGravity, "SouthWestGravity",
+ SouthGravity, "SouthGravity",
+ SouthEastGravity, "SouthEastGravity",
+ StaticGravity, "StaticGravity",
+};
+int NS_wingravity = NELEM(S_wingravity);
+
+/*
+ * Return a character representation of the given wingravity value.
+ */
+char *
+wingravityname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_wingravity; vp < &S_wingravity[NELEM(S_wingravity)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_backingstore[] = {
+ NotUseful, "NotUseful",
+ WhenMapped, "WhenMapped",
+ Always, "Always",
+};
+int NS_backingstore = NELEM(S_backingstore);
+
+/*
+ * Return a character representation of the given backingstore value.
+ */
+char *
+backingstorename(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_backingstore; vp < &S_backingstore[NELEM(S_backingstore)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_gcfunction[] = {
+ GXclear, "GXclear",
+ GXand, "GXand",
+ GXandReverse, "GXandReverse",
+ GXcopy, "GXcopy",
+ GXandInverted, "GXandInverted",
+ GXnoop, "GXnoop",
+ GXxor, "GXxor",
+ GXor, "GXor",
+ GXnor, "GXnor",
+ GXequiv, "GXequiv",
+ GXinvert, "GXinvert",
+ GXorReverse, "GXorReverse",
+ GXcopyInverted, "GXcopyInverted",
+ GXorInverted, "GXorInverted",
+ GXnand, "GXnand",
+ GXset, "GXset",
+};
+int NS_gcfunction = NELEM(S_gcfunction);
+
+/*
+ * Return a character representation of the given gcfunction value.
+ */
+char *
+gcfunctionname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_gcfunction; vp < &S_gcfunction[NELEM(S_gcfunction)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_linestyle[] = {
+ LineSolid, "LineSolid",
+ LineOnOffDash, "LineOnOffDash",
+ LineDoubleDash, "LineDoubleDash",
+};
+int NS_linestyle = NELEM(S_linestyle);
+
+/*
+ * Return a character representation of the given linestyle value.
+ */
+char *
+linestylename(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_linestyle; vp < &S_linestyle[NELEM(S_linestyle)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_capstyle[] = {
+ CapNotLast, "CapNotLast",
+ CapButt, "CapButt",
+ CapRound, "CapRound",
+ CapProjecting, "CapProjecting",
+};
+int NS_capstyle = NELEM(S_capstyle);
+
+/*
+ * Return a character representation of the given capstyle value.
+ */
+char *
+capstylename(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_capstyle; vp < &S_capstyle[NELEM(S_capstyle)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_joinstyle[] = {
+ JoinMiter, "JoinMiter",
+ JoinRound, "JoinRound",
+ JoinBevel, "JoinBevel",
+};
+int NS_joinstyle = NELEM(S_joinstyle);
+
+/*
+ * Return a character representation of the given joinstyle value.
+ */
+char *
+joinstylename(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_joinstyle; vp < &S_joinstyle[NELEM(S_joinstyle)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_fillstyle[] = {
+ FillSolid, "FillSolid",
+ FillTiled, "FillTiled",
+ FillStippled, "FillStippled",
+ FillOpaqueStippled, "FillOpaqueStippled",
+};
+int NS_fillstyle = NELEM(S_fillstyle);
+
+/*
+ * Return a character representation of the given fillstyle value.
+ */
+char *
+fillstylename(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_fillstyle; vp < &S_fillstyle[NELEM(S_fillstyle)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_displayclass[] = {
+ StaticGray, "StaticGray",
+ GrayScale, "GrayScale",
+ StaticColor, "StaticColor",
+ PseudoColor, "PseudoColor",
+ TrueColor, "TrueColor",
+ DirectColor, "DirectColor",
+};
+int NS_displayclass = NELEM(S_displayclass);
+
+/*
+ * Return a character representation of the given displayclass value.
+ */
+char *
+displayclassname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_displayclass; vp < &S_displayclass[NELEM(S_displayclass)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_proto[] = {
+ X_CreateWindow, "X_CreateWindow",
+ X_ChangeWindowAttributes, "X_ChangeWindowAttributes",
+ X_GetWindowAttributes, "X_GetWindowAttributes",
+ X_DestroyWindow, "X_DestroyWindow",
+ X_DestroySubwindows, "X_DestroySubwindows",
+ X_ChangeSaveSet, "X_ChangeSaveSet",
+ X_ReparentWindow, "X_ReparentWindow",
+ X_MapWindow, "X_MapWindow",
+ X_MapSubwindows, "X_MapSubwindows",
+ X_UnmapWindow, "X_UnmapWindow",
+ X_UnmapSubwindows, "X_UnmapSubwindows",
+ X_ConfigureWindow, "X_ConfigureWindow",
+ X_CirculateWindow, "X_CirculateWindow",
+ X_GetGeometry, "X_GetGeometry",
+ X_QueryTree, "X_QueryTree",
+ X_InternAtom, "X_InternAtom",
+ X_GetAtomName, "X_GetAtomName",
+ X_ChangeProperty, "X_ChangeProperty",
+ X_DeleteProperty, "X_DeleteProperty",
+ X_GetProperty, "X_GetProperty",
+ X_ListProperties, "X_ListProperties",
+ X_SetSelectionOwner, "X_SetSelectionOwner",
+ X_GetSelectionOwner, "X_GetSelectionOwner",
+ X_ConvertSelection, "X_ConvertSelection",
+ X_SendEvent, "X_SendEvent",
+ X_GrabPointer, "X_GrabPointer",
+ X_UngrabPointer, "X_UngrabPointer",
+ X_GrabButton, "X_GrabButton",
+ X_UngrabButton, "X_UngrabButton",
+ X_ChangeActivePointerGrab, "X_ChangeActivePointerGrab",
+ X_GrabKeyboard, "X_GrabKeyboard",
+ X_UngrabKeyboard, "X_UngrabKeyboard",
+ X_GrabKey, "X_GrabKey",
+ X_UngrabKey, "X_UngrabKey",
+ X_AllowEvents, "X_AllowEvents",
+ X_GrabServer, "X_GrabServer",
+ X_UngrabServer, "X_UngrabServer",
+ X_QueryPointer, "X_QueryPointer",
+ X_GetMotionEvents, "X_GetMotionEvents",
+ X_TranslateCoords, "X_TranslateCoords",
+ X_WarpPointer, "X_WarpPointer",
+ X_SetInputFocus, "X_SetInputFocus",
+ X_GetInputFocus, "X_GetInputFocus",
+ X_QueryKeymap, "X_QueryKeymap",
+ X_OpenFont, "X_OpenFont",
+ X_CloseFont, "X_CloseFont",
+ X_QueryFont, "X_QueryFont",
+ X_QueryTextExtents, "X_QueryTextExtents",
+ X_ListFonts, "X_ListFonts",
+ X_ListFontsWithInfo, "X_ListFontsWithInfo",
+ X_SetFontPath, "X_SetFontPath",
+ X_GetFontPath, "X_GetFontPath",
+ X_CreatePixmap, "X_CreatePixmap",
+ X_FreePixmap, "X_FreePixmap",
+ X_CreateGC, "X_CreateGC",
+ X_ChangeGC, "X_ChangeGC",
+ X_CopyGC, "X_CopyGC",
+ X_SetDashes, "X_SetDashes",
+ X_SetClipRectangles, "X_SetClipRectangles",
+ X_FreeGC, "X_FreeGC",
+ X_ClearArea, "X_ClearArea",
+ X_CopyArea, "X_CopyArea",
+ X_CopyPlane, "X_CopyPlane",
+ X_PolyPoint, "X_PolyPoint",
+ X_PolyLine, "X_PolyLine",
+ X_PolySegment, "X_PolySegment",
+ X_PolyRectangle, "X_PolyRectangle",
+ X_PolyArc, "X_PolyArc",
+ X_FillPoly, "X_FillPoly",
+ X_PolyFillRectangle, "X_PolyFillRectangle",
+ X_PolyFillArc, "X_PolyFillArc",
+ X_PutImage, "X_PutImage",
+ X_GetImage, "X_GetImage",
+ X_PolyText8, "X_PolyText8",
+ X_PolyText16, "X_PolyText16",
+ X_ImageText8, "X_ImageText8",
+ X_ImageText16, "X_ImageText16",
+ X_CreateColormap, "X_CreateColormap",
+ X_FreeColormap, "X_FreeColormap",
+ X_CopyColormapAndFree, "X_CopyColormapAndFree",
+ X_InstallColormap, "X_InstallColormap",
+ X_UninstallColormap, "X_UninstallColormap",
+ X_ListInstalledColormaps, "X_ListInstalledColormaps",
+ X_AllocColor, "X_AllocColor",
+ X_AllocNamedColor, "X_AllocNamedColor",
+ X_AllocColorCells, "X_AllocColorCells",
+ X_AllocColorPlanes, "X_AllocColorPlanes",
+ X_FreeColors, "X_FreeColors",
+ X_StoreColors, "X_StoreColors",
+ X_StoreNamedColor, "X_StoreNamedColor",
+ X_QueryColors, "X_QueryColors",
+ X_LookupColor, "X_LookupColor",
+ X_CreateCursor, "X_CreateCursor",
+ X_CreateGlyphCursor, "X_CreateGlyphCursor",
+ X_FreeCursor, "X_FreeCursor",
+ X_RecolorCursor, "X_RecolorCursor",
+ X_QueryBestSize, "X_QueryBestSize",
+ X_QueryExtension, "X_QueryExtension",
+ X_ListExtensions, "X_ListExtensions",
+ X_ChangeKeyboardMapping, "X_ChangeKeyboardMapping",
+ X_GetKeyboardMapping, "X_GetKeyboardMapping",
+ X_ChangeKeyboardControl, "X_ChangeKeyboardControl",
+ X_GetKeyboardControl, "X_GetKeyboardControl",
+ X_Bell, "X_Bell",
+ X_ChangePointerControl, "X_ChangePointerControl",
+ X_GetPointerControl, "X_GetPointerControl",
+ X_SetScreenSaver, "X_SetScreenSaver",
+ X_GetScreenSaver, "X_GetScreenSaver",
+ X_ChangeHosts, "X_ChangeHosts",
+ X_ListHosts, "X_ListHosts",
+ X_SetAccessControl, "X_SetAccessControl",
+ X_SetCloseDownMode, "X_SetCloseDownMode",
+ X_KillClient, "X_KillClient",
+ X_RotateProperties, "X_RotateProperties",
+ X_ForceScreenSaver, "X_ForceScreenSaver",
+ X_SetPointerMapping, "X_SetPointerMapping",
+ X_GetPointerMapping, "X_GetPointerMapping",
+ X_SetModifierMapping, "X_SetModifierMapping",
+ X_GetModifierMapping, "X_GetModifierMapping",
+ X_NoOperation, "X_NoOperation",
+};
+int NS_proto = NELEM(S_proto);
+
+/*
+ * Return a character representation of the given proto value.
+ */
+char *
+protoname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_proto; vp < &S_proto[NELEM(S_proto)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_atom[] = {
+ XA_PRIMARY, "XA_PRIMARY",
+ XA_SECONDARY, "XA_SECONDARY",
+ XA_ARC, "XA_ARC",
+ XA_ATOM, "XA_ATOM",
+ XA_BITMAP, "XA_BITMAP",
+ XA_CARDINAL, "XA_CARDINAL",
+ XA_COLORMAP, "XA_COLORMAP",
+ XA_CURSOR, "XA_CURSOR",
+ XA_CUT_BUFFER0, "XA_CUT_BUFFER0",
+ XA_CUT_BUFFER1, "XA_CUT_BUFFER1",
+ XA_CUT_BUFFER2, "XA_CUT_BUFFER2",
+ XA_CUT_BUFFER3, "XA_CUT_BUFFER3",
+ XA_CUT_BUFFER4, "XA_CUT_BUFFER4",
+ XA_CUT_BUFFER5, "XA_CUT_BUFFER5",
+ XA_CUT_BUFFER6, "XA_CUT_BUFFER6",
+ XA_CUT_BUFFER7, "XA_CUT_BUFFER7",
+ XA_DRAWABLE, "XA_DRAWABLE",
+ XA_FONT, "XA_FONT",
+ XA_INTEGER, "XA_INTEGER",
+ XA_PIXMAP, "XA_PIXMAP",
+ XA_POINT, "XA_POINT",
+ XA_RECTANGLE, "XA_RECTANGLE",
+ XA_RESOURCE_MANAGER, "XA_RESOURCE_MANAGER",
+ XA_RGB_COLOR_MAP, "XA_RGB_COLOR_MAP",
+ XA_RGB_BEST_MAP, "XA_RGB_BEST_MAP",
+ XA_RGB_BLUE_MAP, "XA_RGB_BLUE_MAP",
+ XA_RGB_DEFAULT_MAP, "XA_RGB_DEFAULT_MAP",
+ XA_RGB_GRAY_MAP, "XA_RGB_GRAY_MAP",
+ XA_RGB_GREEN_MAP, "XA_RGB_GREEN_MAP",
+ XA_RGB_RED_MAP, "XA_RGB_RED_MAP",
+ XA_STRING, "XA_STRING",
+ XA_VISUALID, "XA_VISUALID",
+ XA_WINDOW, "XA_WINDOW",
+ XA_WM_COMMAND, "XA_WM_COMMAND",
+ XA_WM_HINTS, "XA_WM_HINTS",
+ XA_WM_CLIENT_MACHINE, "XA_WM_CLIENT_MACHINE",
+ XA_WM_ICON_NAME, "XA_WM_ICON_NAME",
+ XA_WM_ICON_SIZE, "XA_WM_ICON_SIZE",
+ XA_WM_NAME, "XA_WM_NAME",
+ XA_WM_NORMAL_HINTS, "XA_WM_NORMAL_HINTS",
+ XA_WM_SIZE_HINTS, "XA_WM_SIZE_HINTS",
+ XA_WM_ZOOM_HINTS, "XA_WM_ZOOM_HINTS",
+ XA_MIN_SPACE, "XA_MIN_SPACE",
+ XA_NORM_SPACE, "XA_NORM_SPACE",
+ XA_MAX_SPACE, "XA_MAX_SPACE",
+ XA_END_SPACE, "XA_END_SPACE",
+ XA_SUPERSCRIPT_X, "XA_SUPERSCRIPT_X",
+ XA_SUPERSCRIPT_Y, "XA_SUPERSCRIPT_Y",
+ XA_SUBSCRIPT_X, "XA_SUBSCRIPT_X",
+ XA_SUBSCRIPT_Y, "XA_SUBSCRIPT_Y",
+ XA_UNDERLINE_POSITION, "XA_UNDERLINE_POSITION",
+ XA_UNDERLINE_THICKNESS, "XA_UNDERLINE_THICKNESS",
+ XA_STRIKEOUT_ASCENT, "XA_STRIKEOUT_ASCENT",
+ XA_STRIKEOUT_DESCENT, "XA_STRIKEOUT_DESCENT",
+ XA_ITALIC_ANGLE, "XA_ITALIC_ANGLE",
+ XA_X_HEIGHT, "XA_X_HEIGHT",
+ XA_QUAD_WIDTH, "XA_QUAD_WIDTH",
+ XA_WEIGHT, "XA_WEIGHT",
+ XA_POINT_SIZE, "XA_POINT_SIZE",
+ XA_RESOLUTION, "XA_RESOLUTION",
+ XA_COPYRIGHT, "XA_COPYRIGHT",
+ XA_NOTICE, "XA_NOTICE",
+ XA_FONT_NAME, "XA_FONT_NAME",
+ XA_FAMILY_NAME, "XA_FAMILY_NAME",
+ XA_FULL_NAME, "XA_FULL_NAME",
+ XA_CAP_HEIGHT, "XA_CAP_HEIGHT",
+ XA_WM_CLASS, "XA_WM_CLASS",
+ XA_WM_TRANSIENT_FOR, "XA_WM_TRANSIENT_FOR",
+};
+int NS_atom = NELEM(S_atom);
+
+/*
+ * Return a character representation of the given atom value.
+ */
+char *
+atomname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_atom; vp < &S_atom[NELEM(S_atom)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_mapstate[] = {
+ IsUnmapped, "IsUnmapped",
+ IsUnviewable, "IsUnviewable",
+ IsViewable, "IsViewable",
+};
+int NS_mapstate = NELEM(S_mapstate);
+
+/*
+ * Return a character representation of the given mapstate value.
+ */
+char *
+mapstatename(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_mapstate; vp < &S_mapstate[NELEM(S_mapstate)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
+struct valname S_visualmask[] = {
+ VisualNoMask, "VisualNoMask",
+ VisualIDMask, "VisualIDMask",
+ VisualScreenMask, "VisualScreenMask",
+ VisualDepthMask, "VisualDepthMask",
+ VisualClassMask, "VisualClassMask",
+ VisualRedMaskMask, "VisualRedMaskMask",
+ VisualGreenMaskMask, "VisualGreenMaskMask",
+ VisualBlueMaskMask, "VisualBlueMaskMask",
+ VisualColormapSizeMask, "VisualColormapSizeMask",
+ VisualBitsPerRGBMask, "VisualBitsPerRGBMask",
+};
+int NS_visualmask = NELEM(S_visualmask);
+
+/*
+ * Return a character representation of the given visualmask value.
+ */
+char *
+visualmaskname(val)
+unsigned long val;
+{
+struct valname *vp;
+int size;
+unsigned long masks;
+
+ size = 0;
+ for (vp = S_visualmask; vp < &S_visualmask[NELEM(S_visualmask)]; vp++)
+ size += strlen(vp->name)+1;
+
+ bp = (char*)malloc(size+sizeof("UNDEFINED BITS(0xffffffff)"));
+ if (bp == (char*)0) {
+ /* Just return the value */
+ sprintf(buf, "(0x%x)", val);
+ return(buf);
+ }
+
+ bp[0] = 0;
+ masks = 0;
+ for (vp = S_visualmask; vp < &S_visualmask[NELEM(S_visualmask)]; vp++) {
+ if (vp->val & val) {
+ if (*bp != 0)
+ strcat(bp, "|");
+ strcat(bp, vp->name);
+ masks |= vp->val;
+ }
+ }
+ /*
+ * Any bits set in val that are not in masks have been
+ * missed by the above.
+ */
+ if (val & (~masks)) {
+ if (*bp != 0)
+ strcat(bp, "|");
+ sprintf(buf, "UNDEFINED BITS(0x%x)", val & (~masks));
+ strcat(bp, buf);
+ }
+ return(bp);
+}
+
+struct valname S_contexterror[] = {
+ XCSUCCESS, "XCSUCCESS",
+ XCNOMEM, "XCNOMEM",
+ XCNOENT, "XCNOENT",
+};
+int NS_contexterror = NELEM(S_contexterror);
+
+/*
+ * Return a character representation of the given contexterror value.
+ */
+char *
+contexterrorname(val)
+int val;
+{
+struct valname *vp;
+
+ for (vp = S_contexterror; vp < &S_contexterror[NELEM(S_contexterror)]; vp++) {
+ if (vp->val == val)
+ return(vp->name);
+ }
+ sprintf(buf, "UNDEFINED (%d)", val);
+ return(buf);
+}
+
diff --git a/xc/test/xsuite/xtest/src/lib/makecolmap.c b/xc/test/xsuite/xtest/src/lib/makecolmap.c
new file mode 100644
index 000000000..1acddcc3f
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/makecolmap.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+#include "stdlib.h"
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Make a colourmap for the screen associated with the Default
+ * root window.
+ */
+
+Colormap
+makecolmap(disp, visual, alloc)
+Display *disp;
+Visual *visual;
+int alloc;
+{
+ Colormap colormap;
+
+ colormap = XCreateColormap(disp, DRW(disp), visual, alloc);
+ regid(disp, (union regtypes *) &colormap, REG_COLORMAP);
+ return(colormap);
+}
+
+
+/*
+ * return floor of log to base two.
+ * if x is zero returns -1 ( lg(x) != -1 for any integer x)
+ */
+int lg(x)
+ unsigned long x;
+{
+ int count = -1;
+
+ for(; x != 0; x>>=1, count++);
+ return count;
+}
+
+/*
+ * return a sting representing the argument value as a binary number.
+ */
+char *bitstr(val, spare)
+ unsigned long val;
+ char spare[];
+{
+ int i;
+
+ for(i=0; i< sizeof(unsigned long)<<3; i++,val <<= 1)
+ if(val & ((unsigned long)1<<((sizeof(unsigned long)<<3) -1)))
+ spare[i] = '1';
+ else
+ spare[i] = '0';
+ spare[i] = (char)0;
+ return(spare);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/makecur.c b/xc/test/xsuite/xtest/src/lib/makecur.c
new file mode 100644
index 000000000..0db9f4efa
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/makecur.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include <stdlib.h>
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "tet_api.h"
+
+/*
+ * Create a cursor that can be used within the test suite.
+ * The cursor is created using XCreateFontCursor. The shape
+ * chosen can be controlled through the configuration variable
+ * XT_FONTCURSOR_GOOD and arg. "inc". If the config. variable is not set or is
+ * undefined, the shape defaults to inc.
+ */
+Cursor
+makecurnum(disp, inc)
+Display *disp;
+int inc;
+{
+Cursor cursor;
+char *varptr;
+unsigned int shape;
+
+ varptr = tet_getvar("XT_FONTCURSOR_GOOD");
+ if (varptr == NULL || *varptr == 'U')
+ shape = 0;
+ else
+ shape = atov(varptr);
+
+ shape += (inc >= 0) ? (unsigned int) inc : (unsigned int) 0;
+
+ cursor = XCreateFontCursor(disp, shape);
+
+ /* register cursor */
+ regid(disp, (union regtypes *)&cursor, REG_CURSOR);
+
+ return(cursor);
+}
+
+/*
+ * Create a cursor that can be used within the test suite.
+ * The cursor is created using XCreateFontCursor. The shape
+ * chosen can be controlled through the configuration variable
+ * XT_FONTCURSOR_GOOD. If this variable is not set or is
+ * undefined, the shape defaults to 0.
+ */
+Cursor
+makecur(disp)
+Display *disp;
+{
+ return makecurnum(disp, 0);
+}
+
+/*
+ * Create a cursor that can be used within the test suite.
+ * The cursor is created using XCreateFontCursor. The shape
+ * chosen can be controlled through the configuration variable
+ * XT_FONTCURSOR_GOOD; it's XT_FONTCURSOR_GOOD+2. If this
+ * variable is not set or is undefined, the shape defaults to 2.
+ */
+Cursor
+makecur2(disp)
+Display *disp;
+{
+ return makecurnum(disp, 2);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/makegc.c b/xc/test/xsuite/xtest/src/lib/makegc.c
new file mode 100644
index 000000000..bfab5403a
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/makegc.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+#define NO_FONT (~(Font)0)
+
+static Font Gcfont = NO_FONT; /* Default font to place in gc */
+
+/*
+ * Make a gc suitable for use with the given drawable.
+ * The forground and background will be set to the standard forground
+ * and background, function to GXcopy and planes to AllPlanes.
+ */
+GC
+makegc(disp, d)
+Display *disp;
+Drawable d;
+{
+GC gc;
+
+ gc = XCreateGC(disp, d, 0, (XGCValues*)0);
+ XSetState(disp, gc, W_FG, W_BG, GXcopy, AllPlanes);
+ XSetLineAttributes(disp, gc, 1, LineSolid, CapButt, JoinMiter);
+
+ if (Gcfont != NO_FONT)
+ XSetFont(disp, gc, Gcfont);
+
+ /* register it */
+ regid(disp, (union regtypes *)&gc, REG_GC);
+
+ return(gc);
+}
+
+void
+setgcfont(font)
+Font font;
+{
+ Gcfont = font;
+}
diff --git a/xc/test/xsuite/xtest/src/lib/makeimg.c b/xc/test/xsuite/xtest/src/lib/makeimg.c
new file mode 100644
index 000000000..7632674f3
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/makeimg.c
@@ -0,0 +1,107 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdlib.h"
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "tet_api.h"
+#include "pixval.h"
+
+/*
+ * Creates a general purpose image that can be used within the
+ * test suite. The image is cleared to W_BG.
+ */
+XImage *
+makeimg(disp, vp, format)
+Display *disp;
+XVisualInfo *vp;
+int format;
+{
+XImage *im;
+unsigned int width = I_STDWIDTH;
+unsigned int height = I_STDHEIGHT;
+unsigned int depth = vp->depth;
+unsigned int n;
+
+ switch (format)
+ {
+ case XYBitmap:
+ depth = 1;
+ break;
+ case XYPixmap:
+ break;
+ case ZPixmap:
+ break;
+ default:
+ delete("Unknown format in makeimg: %d", format);
+ return((XImage *) 0);
+ }
+
+ im = XCreateImage(disp, vp->visual, depth, format, 0, (char *) 0, width, height, BitmapPad(disp), 0);
+
+ /* this should be more than enough memory */
+ n = (format == ZPixmap ? 1 : depth) * im->bytes_per_line * im->height;
+ im->data = (char *) malloc(n);
+ if (im->data == (char *) 0) {
+ delete("Memory allocation failed in makeimg: %d bytes", n);
+ return((XImage *) 0);
+ }
+
+ /* register Image */
+ regid(disp, (union regtypes *)&im, REG_IMAGE);
+
+ /* set all pixel values to W_BG */
+ dsetimg(im, W_BG);
+
+ return(im);
+}
+
+/*
+ * Set every pixel in an image to pixel.
+ */
+void
+dsetimg(ximage, pixel)
+XImage *ximage;
+unsigned long pixel;
+{
+ int x;
+ int y;
+
+ for (x = 0; x < ximage->width; x++)
+ for (y = 0; y < ximage->height; y++)
+ (void) XPutPixel(ximage, x, y, pixel);
+}
+
+/*
+ * Scribble on the image. A series of vertical lines are drawn starting
+ * at (0,0) then at (5,0) (10,0) etc. pixel specifies the pixel value
+ * assumed by the lines.
+ */
+void
+patternimg(ximage, pixel)
+XImage *ximage;
+unsigned long pixel;
+{
+ int x;
+ int y;
+
+ for (x = 0; x < ximage->width; x += 5)
+ for (y = 0; y < ximage->height; y++)
+ (void) XPutPixel(ximage, x, y, pixel);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/makepixm.c b/xc/test/xsuite/xtest/src/lib/makepixm.c
new file mode 100644
index 000000000..9fb8302b9
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/makepixm.c
@@ -0,0 +1,53 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "tet_api.h"
+#include "pixval.h"
+
+#define BORDER 1
+
+/*
+ * Creates a general purpose pixmap that can be used within the
+ * test suite. The pixmap is cleared to W_BG.
+ */
+Pixmap
+makepixm(disp, vp)
+Display *disp;
+XVisualInfo *vp;
+{
+GC gc;
+Pixmap pm;
+
+ pm = XCreatePixmap(disp, DRW(disp), W_STDWIDTH, W_STDHEIGHT, vp->depth);
+ gc = makegc(disp, pm);
+
+ /*
+ * Set the forground to the background pixel so that we can clear the
+ * pixmap using fill rectangle.
+ */
+ XSetForeground(disp, gc, W_BG);
+ XFillRectangle(disp, pm, gc, 0, 0, W_STDWIDTH+1, W_STDHEIGHT+1);
+
+ /* register pixmap, will be conditional */
+ regid(disp, (union regtypes *)&pm, REG_PIXMAP);
+
+ return(pm);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/makeregion.c b/xc/test/xsuite/xtest/src/lib/makeregion.c
new file mode 100644
index 000000000..2b50878a6
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/makeregion.c
@@ -0,0 +1,40 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * makeregion() returns a new region.
+ */
+
+Region
+makeregion()
+{
+ Region reg;
+
+ if( (reg = XCreateRegion()) == (Region) NULL)
+ delete("XCreateRegion() returned NULL.");
+ else
+ regid(0, (union regtypes *)&reg, REG_REGION);
+
+ return(reg);
+}
+
diff --git a/xc/test/xsuite/xtest/src/lib/makewin.c b/xc/test/xsuite/xtest/src/lib/makewin.c
new file mode 100644
index 000000000..6008a5aa8
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/makewin.c
@@ -0,0 +1,186 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdlib.h"
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+#define BORDER 1
+
+/* The border width must remain the same. */
+#define BWIDTH 1
+
+/*
+ * Position for windows. It is not neccessary to place them all at differing
+ * positions but it useful to see what is happening.
+ */
+static int xpos = 10;
+static int ypos = 5;
+
+Window makewinpos();
+static void incxy();
+
+
+/*
+ * Creates a general purpose window that can be used within the
+ * test suite. It has the Root as parent, and inherits its depth
+ * visual etc. The border and background are not set to
+ * any particular colour, but have pixel values of 1 and 0. (???)
+ * The window is mapped and the routine waits for the first expose event.
+ * If the visual arg is NULL then a pixmap with the given depth is
+ * created. It has the same size as the window would.
+ */
+Window
+makewin(disp, vp)
+Display *disp;
+XVisualInfo *vp;
+{
+Window w;
+
+ incxy(disp, vp);
+ w = makewinpos(disp, vp, xpos, ypos);
+
+ return(w);
+}
+
+/*
+ * Make a pair of windows that are not overlapping. They will both have the
+ * same root and depth. Otherwise just like makewin.
+ */
+void
+winpair(disp, vp, w1p, w2p)
+Display *disp;
+XVisualInfo *vp;
+Window *w1p;
+Window *w2p;
+{
+
+ incxy(disp, vp);
+ *w1p = makewinpos(disp, vp, xpos, ypos);
+
+ incxy(disp, vp);
+ *w2p = makewinpos(disp, vp, xpos, ypos);
+
+}
+
+/*
+ * Make a window at a particular position. Otherwise like makewin() which
+ * calls this routine. If the visual member of vp is NULL then a pixmap
+ * of the given depth is created instead.
+ */
+Drawable
+makewinpos(disp, vp, x, y)
+Display *disp;
+XVisualInfo *vp;
+int x;
+int y;
+{
+Window w;
+XEvent event;
+XSetWindowAttributes atts;
+Colormap cmap;
+char *dboride;
+
+ if (vp->visual == 0) {
+ return((Drawable)makepixm(disp, vp));
+ }
+
+ dboride = tet_getvar("XT_DEBUG_OVERRIDE_REDIRECT");
+ if (dboride && (*dboride == 'y' || *dboride == 'Y'))
+ atts.override_redirect = 1;
+ else
+ atts.override_redirect = 0;
+ atts.border_pixel = BORDER;
+ atts.background_pixel = W_BG;
+
+ switch (vp->class) {
+ case StaticGray:
+ case StaticColor:
+ case TrueColor:
+ cmap = XCreateColormap(disp, RootWindow(disp, vp->screen),
+ vp->visual, AllocNone);
+
+ break;
+ case GrayScale:
+ case PseudoColor:
+ case DirectColor:
+ cmap = XCreateColormap(disp, RootWindow(disp, vp->screen),
+ vp->visual, AllocAll);
+ break;
+ }
+
+ atts.colormap = cmap;
+
+ w = XCreateWindow(disp
+ , RootWindow(disp, vp->screen)
+ , x
+ , y
+ , W_STDWIDTH
+ , W_STDHEIGHT
+ , BWIDTH
+ , vp->depth
+ , InputOutput
+ , vp->visual
+ , CWOverrideRedirect | CWBorderPixel | CWBackPixel | CWColormap
+ , &atts
+ );
+ /* Any errors are handled by unexp_err */
+
+ if (isdeleted())
+ return None; /* avoid waiting for events that won't happen. */
+ XSelectInput(disp, w, ExposureMask);
+ XMapWindow(disp, w);
+ XWindowEvent(disp, w, ExposureMask, &event);
+ XSelectInput(disp, w, NoEventMask);
+
+ regid(disp, (union regtypes *)&w, REG_WINDOW);
+
+ return((Drawable)w);
+}
+
+static void
+incxy(disp, vp)
+Display *disp;
+XVisualInfo *vp;
+{
+unsigned int dwidth, dheight;
+
+ /*
+ * Increment the positions so that the windows do not overlap. This is
+ * essential for winpair() and useful to see what is happening for
+ * the rest. Avoid positions with x or y zero.
+ */
+ xpos += 23;
+ ypos += W_STDHEIGHT+2*BWIDTH+1;
+
+ dwidth = DisplayWidth(disp, vp->screen);
+ dheight = DisplayHeight(disp, vp->screen);
+
+ while (ypos+W_STDHEIGHT+2*BWIDTH > dheight)
+ ypos -= dheight;
+ while (ypos <= 0)
+ ypos += W_STDHEIGHT;
+ while (xpos+(2*BWIDTH+W_STDWIDTH) > dwidth)
+ xpos -= dwidth;
+ while (xpos <= 0)
+ xpos += W_STDWIDTH;
+}
diff --git a/xc/test/xsuite/xtest/src/lib/makewin2.c b/xc/test/xsuite/xtest/src/lib/makewin2.c
new file mode 100644
index 000000000..08b66d049
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/makewin2.c
@@ -0,0 +1,158 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdlib.h"
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+#define BORDER 1
+
+/*
+ * Position for windows. It is not neccessary to place them all at differing
+ * positions but it useful to see what is happening.
+ */
+static int xpos = 10;
+static int ypos = 5;
+
+Drawable mkwinpos();
+Drawable mkunmapwinpos();
+static void incxy();
+
+#define GAP 10
+
+/*
+ * Creates a general purpose window that can be used within the
+ * test suite. It has parent as parent, and can inherits its depth
+ * visual etc. The border and background are not set to
+ * any particular colour, but have pixel values of 1 and 0. (???)
+ * If mapflag:
+ * The window is mapped, but the routine does *NOT* waits
+ * for the first expose event.
+ * No events are selected for the created window.
+ */
+Window
+mkwinchild(disp, vp, ap, mapflag, parent, border_width)
+Display *disp;
+XVisualInfo *vp;
+struct area *ap;
+int mapflag;
+Window parent;
+int border_width;
+{
+Window w;
+struct area area;
+XSetWindowAttributes atts;
+int depth;
+Visual *visual;
+
+ if (ap == (struct area *) NULL) {
+ ap = &area;
+ incxy(disp, border_width, vp);
+ ap->x = xpos;
+ ap->y = ypos;
+ ap->width = W_STDWIDTH;
+ ap->height = W_STDHEIGHT;
+ }
+ if (vp == (XVisualInfo *) NULL) {
+ depth = CopyFromParent;
+ visual = (Visual *) CopyFromParent;
+ }
+ else {
+ depth = vp->depth;
+ visual= vp->visual;
+ }
+
+ atts.override_redirect = config.debug_override_redirect;
+ atts.border_pixel = BORDER;
+ atts.background_pixel = W_BG;
+
+ w = XCreateWindow(disp
+ , parent
+ , ap->x
+ , ap->y
+ , ap->width
+ , ap->height
+ , border_width
+ , depth
+ , InputOutput
+ , visual
+ , CWOverrideRedirect | CWBorderPixel | CWBackPixel
+ , &atts
+ );
+ /* Any errors are handled by unexp_err */
+
+ regid(disp, (union regtypes *)&w, REG_WINDOW);
+
+ if (mapflag) {
+ XMapWindow(disp, w);
+ }
+ return(w);
+}
+
+/*
+ * Creates a general purpose window that can be used within the
+ * test suite. It has the Root as parent, and inherits its depth
+ * visual etc. The border and background are not set to
+ * any particular colour, but have pixel values of 1 and 0. (???)
+ * If mapflag:
+ * The window is mapped, but the routine does *NOT* waits
+ * for the first expose event.
+ * No events are selected for the created window.
+ */
+Window
+mkwin(disp, vp, ap, mapflag)
+Display *disp;
+XVisualInfo *vp;
+struct area *ap;
+int mapflag;
+{
+ return(mkwinchild(disp, vp, ap, mapflag, DefaultRootWindow(disp), 1));
+}
+
+
+static void
+incxy(disp, bw, vp)
+Display *disp;
+XVisualInfo *vp;
+{
+unsigned int dwidth, dheight;
+
+ /*
+ * Increment the positions so that the windows do not overlap. This is
+ * essential for winpair() and useful to see what is happening for
+ * the rest. Avoid positions with x or y zero.
+ */
+ xpos += 23;
+ ypos += W_STDHEIGHT+2*bw+1;
+
+ dwidth = DisplayWidth(disp, (vp? vp->screen : DefaultScreen(disp)));
+ dheight = DisplayHeight(disp, (vp? vp->screen: DefaultScreen(disp)));
+
+ while (ypos+W_STDHEIGHT+2*bw > dheight)
+ ypos -= dheight;
+ while (ypos <= 0)
+ ypos += W_STDHEIGHT;
+ while (xpos+(2*bw+W_STDWIDTH) > dwidth)
+ xpos -= dwidth;
+ while (xpos <= 0)
+ xpos += W_STDWIDTH;
+}
diff --git a/xc/test/xsuite/xtest/src/lib/maxsize.c b/xc/test/xsuite/xtest/src/lib/maxsize.c
new file mode 100644
index 000000000..6fe73e807
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/maxsize.c
@@ -0,0 +1,61 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/* func. to give min of 3 vars */
+static
+int min3(a, b, c)
+ int a,b,c;
+{
+ if (a < b)
+ b = a;
+ if (b < c)
+ c = b;
+ return c;
+}
+
+/*
+ * Get the number of cells in a colourmap given the vp.
+ */
+int
+maxsize(vp)
+ XVisualInfo *vp;
+{
+ int r,g,b;
+ unsigned long mask;
+
+ if (vp->class != DirectColor && vp->class != TrueColor)
+ return vp->colormap_size;
+
+ for(r=0, mask=vp->red_mask; mask; mask >>= 1) {
+ if (mask & 0x1)
+ r++;
+ }
+ for(g=0, mask=vp->green_mask; mask; mask >>= 1) {
+ if (mask & 0x1)
+ g++;
+ }
+ for(b=0, mask=vp->blue_mask; mask; mask >>= 1) {
+ if (mask & 0x1)
+ b++;
+ }
+ return (1 << min3(r,g,b));
+}
diff --git a/xc/test/xsuite/xtest/src/lib/nextvclass.c b/xc/test/xsuite/xtest/src/lib/nextvclass.c
new file mode 100644
index 000000000..60bc49364
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/nextvclass.c
@@ -0,0 +1,181 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * Functions to cycle through all the visual classes that are supposed to
+ * supported by the display/screen that is being tested.
+ * Note that these functions are only used in the tests for
+ * XMatchVisualInfo and XGetVisualInfo.
+ * Other tests call functions in nextvinf.c, which use XGetVisualInfo, and
+ * rely on XGetVisualInfo to work properly.
+ */
+
+#include "xtest.h"
+#include "stdlib.h"
+#include "string.h"
+#include "tet_api.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Table and index into it.
+ */
+static int *Vclass;
+static int *Vdepth;
+static int VCindex;
+static int Nclass;
+
+/*
+ * Items are separated by spaces.
+ */
+#define SEPS " "
+#define LEFT_BRACKET '('
+#define RIGHT_BRACKET ')'
+#define COMMA ','
+
+#define CLASSBUFLEN 40
+
+static char classbuf[CLASSBUFLEN+1];
+
+static struct valname S_displayclass[] = {
+ StaticGray, "StaticGray",
+ GrayScale, "GrayScale",
+ StaticColor, "StaticColor",
+ PseudoColor, "PseudoColor",
+ TrueColor, "TrueColor",
+ DirectColor, "DirectColor",
+ 0, (char*)0,
+};
+
+/*
+ * Initialise the visual class table. The visual classes that are
+ * supported are supplied by the test suite user in the
+ * variable XT_VISUAL_CLASSES, together with the depths at which
+ * they are supported.
+ * Returns -1 on failure, 0 on success.
+ */
+int
+initvclass()
+{
+struct valname *vp;
+char *dp;
+char *tok, *s, *left_bracket, *right_bracket, *comma;
+int Lclass;
+
+ dp = config.visual_classes;
+ if (dp == (char*)0) {
+ report("XT_VISUAL_CLASSES not set");
+ return(-1);
+ }
+
+ /*
+ * The number of visual classes in the string is less than the
+ * length of the string.
+ */
+ Vclass = (int*)malloc(strlen(dp) * sizeof(int));
+ if (Vclass == (int*)0) {
+ report("Could not allocate memory for visual class table");
+ return(-1);
+ }
+ Vdepth = (int*)malloc(strlen(dp) * sizeof(int));
+ if (Vdepth == (int*)0) {
+ report("Could not allocate memory for visual class table");
+ return(-1);
+ }
+
+ Nclass = 0;
+ for (tok = strtok(dp, SEPS); tok; tok = strtok((char*)0, SEPS)) {
+
+ strncpy(classbuf, tok, CLASSBUFLEN);
+ classbuf[CLASSBUFLEN] = '\0';
+ if (!(left_bracket = strchr(classbuf, LEFT_BRACKET))) {
+ report("Display class %s does not contain a '('", tok);
+ return(-1);
+ } else
+ *left_bracket = '\0';
+ if (!(right_bracket = strchr(left_bracket+1, RIGHT_BRACKET))) {
+ report("Display class %s does not contain a ')'", tok);
+ return(-1);
+ } else
+ *right_bracket = '\0';
+ for (vp = S_displayclass; vp->name; vp++) {
+ if (strcmp(vp->name, classbuf) == 0)
+ break;
+ }
+ if (vp->name == 0) {
+ report("Bad display class %s in config file", tok);
+ return(-1);
+ }
+ Lclass = Nclass;
+ for (s = left_bracket; s; s = comma) {
+ if (comma = strchr(++s, COMMA))
+ *comma = '\0';
+ if (*s == '\0')
+ break;
+ Vclass[Nclass] = vp->val;
+ Vdepth[Nclass++] = atov(s);
+ }
+ if (Nclass <= Lclass) {
+ report("Display class %s specifies no depths", tok);
+ return(-1);
+ }
+ }
+
+ return(0);
+
+}
+
+/*
+ * Start again at the beginning of the list of visual classes.
+ */
+void
+resetvclass()
+{
+ VCindex = 0;
+}
+
+/*
+ * Get the next visual class and depth.
+ * Function returns False if there are no more in the list,
+ * otherwise True.
+ */
+int
+nextvclass(vp, dp)
+int *vp;
+int *dp;
+{
+ if (Vclass == 0) {
+ report("initvclass has not been called");
+ tet_result(TET_UNRESOLVED);
+ return(False);
+ }
+
+ if (VCindex >= Nclass)
+ return(False);
+
+ *vp = Vclass[VCindex];
+ *dp = Vdepth[VCindex++];
+
+ return(True);
+}
+
+int
+nvclass()
+{
+ return(Nclass);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/nextvinf.c b/xc/test/xsuite/xtest/src/lib/nextvinf.c
new file mode 100644
index 000000000..d0b55a436
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/nextvinf.c
@@ -0,0 +1,274 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+/*
+ * Functions to cycle through all the visuals that are supported
+ * on the screen under test.
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "tet_api.h"
+#include "pixval.h"
+#include <string.h>
+
+Display *Dsp;
+
+static int Visindex;
+static int Nvis;
+static XVisualInfo *Vinfop;
+
+static int Depthind;
+static int *Depths;
+static int Ndepths;
+
+int CurVinf;
+
+static void iddebug();
+
+/*
+ * Start again at the beginning of the list of visual classes.
+ *
+ * The callee must ensure that the alternate screen is supported if
+ * VI_ALT_PIX or VI_ALT_WIN are used.
+ */
+void
+resetvinf(flags)
+int flags;
+{
+XVisualInfo vi;
+
+ if (flags == 0)
+ flags = VI_WIN_PIX;
+
+ if ((flags & (VI_WIN_PIX|VI_ALT_WIN_PIX) == 0 ) ||
+ ((flags & ~(VI_WIN_PIX|VI_ALT_WIN_PIX) ) != 0)) {
+ printf("Programming error detected in resetvinf\n");
+ exit(1);
+ }
+
+ if (((flags & VI_WIN_PIX) != 0) && ((flags & VI_ALT_WIN_PIX) != 0)) {
+ printf("Illegal flag combination detected in resetvinf\n");
+ exit(1);
+ }
+
+ CurVinf = 1;
+
+ /*
+ * Do pixmaps only. Useful for debuging maybe. Allows you to test
+ * some aspects of a X Terminal that is being used.
+ */
+ if (config.debug_pixmap_only)
+ flags &= ~(VI_WIN|VI_ALT_WIN);
+
+ /*
+ * Do not test pixmaps. Useful during testing maybe.
+ */
+ if (config.debug_window_only)
+ flags &= ~(VI_PIX|VI_ALT_PIX);
+
+ Visindex = 0;
+ if (Vinfop)
+ XFree((char*)Vinfop);
+ Vinfop = (XVisualInfo *)0;
+
+ Depthind = 0;
+ if (Depths)
+ XFree((char*)Depths);
+ Depths = (int *)0;
+
+ Nvis = 0;
+ Ndepths = 0;
+
+ if (flags & (VI_WIN|VI_ALT_WIN)) {
+ vi.screen = (flags & VI_WIN)?
+ DefaultScreen(Dsp) : config.alt_screen;
+ Vinfop = XGetVisualInfo(Dsp, VisualScreenMask, &vi, &Nvis);
+
+ /*
+ * For debuging purposes only consider a subset of the available
+ * visuals.
+ */
+ if (config.debug_visual_ids)
+ iddebug();
+
+ if (Nvis == 0) {
+ /*
+ * Report something to make sure that a problem is noted.
+ */
+ delete("No visuals found");
+ }
+ }
+
+ if (flags & (VI_PIX|VI_ALT_PIX)) {
+ Depths = XListDepths(Dsp,
+ (flags & VI_PIX)?
+ DefaultScreen(Dsp) : config.alt_screen,
+ &Ndepths);
+ if (Depths == (int*)0) {
+ delete("Call to XListDepths failed");
+ }
+ if (Ndepths < 1) {
+ delete("less than 1 depth found in XListDepths");
+ }
+ }
+
+ if (config.debug_default_depths) {
+ if (Nvis > 1)
+ Nvis = 1;
+ if (Ndepths > 1)
+ Ndepths = 1;
+ }
+
+}
+
+/*
+ * Get the next visual info structure.
+ * This will either corespond to a visual supported by the default
+ * screen, or (if visual is NULL) to a depth for which pixmaps are supported.
+ * Returns False if there is one, otherwise True.
+ */
+int
+nextvinf(visp)
+XVisualInfo **visp;
+{
+static XVisualInfo vi;
+
+ CurVinf++;
+
+ /*
+ * This will cycle through the visuals first, then the pixmap depths.
+ */
+ if (Vinfop) {
+ if (Visindex < Nvis) {
+ *visp = &Vinfop[Visindex++];
+ trace("--- Running test with visual class %s, depth %d",
+ displayclassname((*visp)->class), (*visp)->depth);
+ return(True);
+ } else {
+ XFree((char*)Vinfop);
+ Vinfop = (XVisualInfo *)0;
+ }
+ }
+ if (Depths) {
+ if (Depthind < Ndepths) {
+ vi.depth = Depths[Depthind++];
+ vi.visual = 0;
+ *visp = &vi;
+ trace("--- Running test with pixmap depth %d", vi.depth);
+ return(True);
+ } else {
+ XFree((char*)Depths);
+ Depths = (int*)0;
+ }
+ }
+
+ return(False);
+}
+
+/*
+ * Returns the number of times that nextvinf will succeed. Only valid
+ * after a call to resetvinf().
+ */
+int
+nvinf()
+{
+ return(Nvis+Ndepths);
+}
+
+/*
+ * Return a drawable which is either a window with a default visual
+ * or a pixmap with a default depth. This is used where it not
+ * desired to loop over all types and depths.
+ */
+Drawable
+defdraw(disp, type)
+Display *disp;
+int type;
+{
+XVisualInfo *vp;
+Drawable d;
+
+ resetvinf(type);
+ nextvinf(&vp);
+
+ d = makewin(disp, vp);
+
+ return(d);
+}
+
+/*
+ * Create a window with a default visual type. This is only used
+ * where it is not neccessary to loop over all types.
+ */
+Window
+defwin(disp)
+Display *disp;
+{
+XVisualInfo *vp;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ return makewin(disp, vp);
+}
+
+/*
+ * If we only want to consider a subset of visuals then this routine
+ * is called to filter out all the irrelevent ones.
+ */
+static void
+iddebug()
+{
+XVisualInfo *viptmp;
+char *idlist;
+int id;
+int i;
+int nreal = Nvis;
+
+ /*
+ * Copy the original (this is realy only being done this way
+ * to avoid mixing free and XFree.)
+ */
+ viptmp = (XVisualInfo*)malloc(nreal * sizeof(XVisualInfo));
+ if (viptmp == 0)
+ return;
+ for (i = 0; i < nreal; i++)
+ viptmp[i] = Vinfop[i];
+
+ /*
+ * Copy back any visual that is wanted, keeping count of found ones
+ * as we go along. Note that the list may contain visualids for
+ * different screens.
+ */
+ Nvis = 0;
+ idlist = config.debug_visual_ids;
+ while (idlist) {
+ id = atov(idlist); /* Allow hex/octal/decimal values */
+ for (i = 0; i < nreal; i++) {
+ if (viptmp[i].visualid == id)
+ Vinfop[Nvis++] = viptmp[i];
+ }
+
+ idlist = strchr(idlist, ',');
+ if (idlist)
+ idlist++;
+ }
+ free(viptmp);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/nondpth1pix.c b/xc/test/xsuite/xtest/src/lib/nondpth1pix.c
new file mode 100644
index 000000000..15c47a8a6
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/nondpth1pix.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * Return a pixmap of depth other than 1 if such is supported,
+ * otherwise return (pixmap) 0.
+ *
+ */
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "Xutil.h"
+#include "pixval.h"
+
+Pixmap
+nondepth1pixmap(disp, d)
+ Display *disp;
+ Drawable d;
+{
+ XVisualInfo *vp;
+
+ for(resetvinf(VI_WIN); nextvinf(&vp);)
+ if(vp -> depth != 1)
+ return(XCreatePixmap(disp,d,1,1,vp->depth));
+
+ return ((Pixmap) 0);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/notmember.c b/xc/test/xsuite/xtest/src/lib/notmember.c
new file mode 100644
index 000000000..38d1663b5
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/notmember.c
@@ -0,0 +1,161 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+
+static unsigned long masks[] = {
+ /* order is important, from smallest to biggest */
+ 0x000000FF, 0x0000FFFF, 0xFFFFFFFF
+};
+
+static unsigned long biggest[] = {
+ /* order is important, must match masks[] above */
+ 0x0000007F, 0x00007FFF, 0x7FFFFFFF
+};
+
+/*
+ * Guess the largest value that will fit into the encoding based on the
+ * maximum value of the parameter.
+ */
+static unsigned long
+guess_largest(un, is_bit_set)
+ unsigned long un;
+ Bool is_bit_set;
+{
+ int i;
+
+ for (i=0; i < NELEM(masks); i++)
+ if (un < masks[i]) {
+ if (is_bit_set)
+ return masks[i];
+ else
+ return biggest[i];
+ }
+
+ /*
+ * if we got here we're in trouble, even 32-bits isn't enough
+ */
+ delete("INTERNAL ERROR in guess largest with 0x%lx", un);
+ return 0;
+}
+
+/*
+ * Returns a list of numbers that are not members of given list.
+ * The the returned values include:
+ * one greater than max in list.
+ * one less than min in list.
+ * a negative number not in list.
+ * a large number
+ *
+ * An array of long size NM_LEN must be supplied for ret.
+ *
+ * It is assumed that the numbers in the list are 'small' ie don't approach
+ * LONG_MAX/MIN.
+ *
+ * Some attempt to infer possible encoding (1,2 or 4 bytes) from list of
+ * values. Complain - and delete - if it looks as if something won't fit.
+ * All done to avoid having unrepresentable values that get trimmed by the
+ * encoding so they don't look bad after all.
+ *
+ * Negative numbers should be truncated down to some very large number
+ * when the encoding is CARD*, so should be OK.
+ */
+int
+notmember(list, len, ret)
+int *list;
+int len;
+long *ret;
+{
+long *rp;
+long min, max;
+long negative;
+long large;
+int i;
+
+ max = min = list[0];
+ negative = -1;
+ large = 0;
+
+ for (i = 0; i < len; i++) {
+ if (list[i] < min)
+ min = list[i];
+ if (list[i] > max)
+ max = list[i];
+ if (min-1 <= negative)
+ negative = min-2;
+ }
+
+ large = (long) guess_largest((unsigned long)max, False);
+
+ rp = ret;
+ *rp++ = max+1; /* one greater than max in list */
+ *rp++ = min-1; /* one less than min in list */
+ *rp++ = negative; /* a negative number not in list */
+ *rp++ = large; /* a largish number */
+
+ /*
+ * Sanity check to check that NM_LEN was OK.
+ */
+ if (rp-ret > NM_LEN) {
+ delete("INTERNAL error. NM_LEN not large enough in notmember");
+ return(NM_LEN);
+ }
+
+ return(rp-ret);
+
+}
+
+/*
+ * Like notmember() except that it works with a list of bit positions
+ * rather than integers.
+ * Bits that do not occur in the list are filled into the return
+ * array.
+ */
+int
+notmaskmember(list, len, ret)
+unsigned long *list;
+int len;
+unsigned long *ret;
+{
+unsigned long bit;
+unsigned long large;
+unsigned long allbits;
+int i;
+
+ allbits = 0;
+
+ for (i = 0; i < len; i++)
+ allbits |= list[i];
+
+ large = guess_largest(allbits, True);
+
+ i = 0;
+ for (bit = 1; bit && bit < large; bit <<= 1) {
+ if (!(bit & allbits))
+ ret[i++] = bit;
+ if (i >= NM_LEN)
+ break;
+ }
+ if (i == 0)
+ delete("No spare bits in notmaskmember");
+ return(i);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/opendisp.c b/xc/test/xsuite/xtest/src/lib/opendisp.c
new file mode 100644
index 000000000..d5ad6c43c
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/opendisp.c
@@ -0,0 +1,41 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+#include "stdlib.h"
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+#include "tet_api.h"
+
+/*
+ * Open the display in XT_DISPLAY.
+ */
+
+Display *
+opendisplay()
+{
+ Display *disp;
+ char *server;
+
+ if((server = config.display) == (char *) 0)
+ return((Display *) 0);
+
+ disp = XOpenDisplay(server);
+ regid(disp, (union regtypes *) &disp, REG_OPEN);
+ return(disp);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/openfonts.c b/xc/test/xsuite/xtest/src/lib/openfonts.c
new file mode 100644
index 000000000..9f83241b3
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/openfonts.c
@@ -0,0 +1,56 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdio.h"
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+extern Display *Dsp;
+
+/*
+ * Open the xtest fonts, and place their id's in the fonts array.
+ * The nfonts argument limits the number of fonts that will be placed in
+ * the array.
+ */
+void
+openfonts(fonts, nfonts)
+Font fonts[];
+int nfonts;
+{
+char name[64];
+int i;
+
+ if (XT_NFONTS < nfonts)
+ nfonts = XT_NFONTS;
+
+ resetdelete();
+ for (i = 0; i < nfonts; i++) {
+ sprintf(name, "xtfont%d", i);
+
+ fonts[i] = XLoadFont(Dsp, name);
+ if (isdeleted()) {
+ report("Could not open %s in openfonts", name);
+ report("Check that xtest fonts are installed properly");
+ cancelrest("Could not open all xtest fonts");
+ return;
+ }
+ }
+}
+
diff --git a/xc/test/xsuite/xtest/src/lib/pattern.c b/xc/test/xsuite/xtest/src/lib/pattern.c
new file mode 100644
index 000000000..e0e450c3b
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/pattern.c
@@ -0,0 +1,88 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Scribble on the drawable. A series of vertical lines are drawn starting
+ * at (0,0) then at (5,0) (10,0) etc.
+ */
+void
+pattern(disp, d)
+Display *disp;
+Drawable d;
+{
+unsigned int width;
+unsigned int height;
+int x;
+GC gc;
+
+ gc = XCreateGC(disp, d, 0, (XGCValues*)0);
+ XSetState(disp, gc, W_FG, W_BG, GXcopy, AllPlanes);
+
+ getsize(disp, d, &width, &height);
+
+ for (x = 0; x < width; x += 5)
+ XDrawLine(disp, d, gc, x, 0, x, height);
+
+ XFreeGC(disp, gc);
+}
+
+/*
+ * Check that the pattern that is drawn in pattern() is unchanged.
+ * This is done by direct pixel validation with GetImage.
+ * If ap is non-NULL then validation is restricted to that area
+ * with the origin the origin of the area.
+ */
+Status
+checkpattern(disp, d, ap)
+Display *disp;
+Drawable d;
+struct area *ap;
+{
+XImage *imp;
+int x, y;
+unsigned long pix;
+struct area area;
+
+ if (ap == (struct area *)0) {
+ ap = &area;
+ ap->x = ap->y = 0;
+ getsize(disp, d, &ap->width, &ap->height);
+ }
+
+ imp = XGetImage(disp, d, ap->x, ap->y, ap->width, ap->height, AllPlanes, ZPixmap);
+ if (imp == (XImage*)0) {
+ report("Get Image failed in checkpattern()");
+ return(False);
+ }
+
+ for (y = 0; y < ap->height; y++) {
+ for (x = 0; x < ap->width; x++) {
+ pix = XGetPixel(imp, x, y);
+ if (pix != ((x%5 == 0)? W_FG: W_BG)) {
+ report("Bad pixel in pattern at (%d, %d)", x, y);
+ return(False);
+ }
+ }
+ }
+ return(True);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/pfcount.c b/xc/test/xsuite/xtest/src/lib/pfcount.c
new file mode 100644
index 000000000..b3a650ecc
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/pfcount.c
@@ -0,0 +1,39 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+static int passcount;
+static int failcount;
+
+/*
+ * This routine exists just so that the pass and fail counters in each
+ * test purpose can be 'used' and thus save a lot of output from lint
+ * and fussy compilers. Note that these counts are not of any other
+ * use at all because there is no guarantee that pfcount is actually
+ * called.
+ */
+pfcount(pass, fail)
+int pass;
+int fail;
+{
+ passcount += pass;
+ failcount += failcount;
+}
+
+rptcounts()
+{
+ trace("passcount=%d, failcount=%d", passcount, failcount);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/pointer.c b/xc/test/xsuite/xtest/src/lib/pointer.c
new file mode 100644
index 000000000..28d4a9837
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/pointer.c
@@ -0,0 +1,114 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*LINTLIBRARY*/
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "tet_api.h"
+#include <unistd.h>
+
+/*
+ * Warp the pointer to the specified location. Return pointer to
+ * structure contain old and new location information. Register
+ * structure with resource registration system.
+ */
+PointerPlace *
+warppointer(display, dest_w, dest_x, dest_y)
+Display *display;
+Window dest_w;
+int dest_x;
+int dest_y;
+{
+ PointerPlace *ptr;
+ Window wtmp;
+ int itmp;
+ unsigned int uitmp;
+
+ ptr = (PointerPlace *) malloc(sizeof(*ptr));
+ if (ptr == (PointerPlace *) NULL) {
+ delete("Memory allocation failed in warppointer: %d bytes",
+ sizeof(*ptr));
+ return((PointerPlace *) NULL);
+ }
+
+ /* Save initial pointer location. */
+ (void) XQueryPointer(display, DRW(display), &(ptr->oroot), &wtmp, &(ptr->ox), &(ptr->oy), &itmp, &itmp, &uitmp);
+ /* Warp pointer to window. */
+ XWarpPointer(display, None, dest_w, 0, 0, 0, 0, dest_x, dest_y);
+ /* Get new pointer location. */
+ (void) XQueryPointer(display, DRW(display), &(ptr->nroot), &wtmp, &(ptr->nx), &(ptr->ny), &itmp, &itmp, &uitmp);
+
+ regid(display, (union regtypes *)&ptr, REG_POINTER);
+ return(ptr);
+}
+
+/*
+ * Return True if pointer location has changed from the specified location.
+ * No reporting is performed.
+ */
+Bool
+pointermoved(display, ptr)
+Display *display;
+PointerPlace *ptr;
+{
+ Window root;
+ int x, y;
+ Window wtmp;
+ int itmp;
+ unsigned int uitmp;
+
+ (void) XQueryPointer(display, DRW(display), &root, &wtmp, &x, &y, &itmp, &itmp, &uitmp);
+ if (root != ptr->nroot || x != ptr->nx || y != ptr->ny)
+ return(True);
+ else
+ return(False);
+}
+
+/*
+ * Return the pointer to saved location and free data structure.
+ */
+void
+unwarppointer(display, ptr)
+Display *display;
+PointerPlace *ptr;
+{
+ XWarpPointer(display, None, ptr->oroot, 0, 0, 0, 0, ptr->ox, ptr->oy);
+ free(ptr);
+}
+
+/*
+ * Return pointer information relative to the root window.
+ */
+
+void
+pointerrootpos(display, ptr)
+Display *display;
+PointerPlace *ptr;
+{
+ Window root;
+ int x, y;
+ Window wtmp;
+ int itmp;
+ unsigned int uitmp;
+
+ (void) XQueryPointer(display, DRW(display), &root, &wtmp, &x, &y, &itmp, &itmp, &uitmp);
+ ptr->nx = x;
+ ptr->ny = y;
+}
+
diff --git a/xc/test/xsuite/xtest/src/lib/regid.c b/xc/test/xsuite/xtest/src/lib/regid.c
new file mode 100644
index 000000000..61a62fbb9
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/regid.c
@@ -0,0 +1,222 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdlib.h"
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "tet_api.h"
+#include "pixval.h"
+
+/*
+ * All resources created by the library routines are to be
+ * resistered here. They are then freed automaticaly at the test end.
+ * Options are provided to not free certain types of resource for
+ * stress testing.
+ */
+
+
+/* Number of entries to allocate at once */
+#define NALLOC 256
+
+struct regid {
+ int type;
+ Display *display;
+ union regtypes id;
+};
+
+static struct regid *saved;
+static int savsize;
+static int savcount;
+
+static int Regenabled = 1;
+
+/*
+ * Get a free place to store something of the given type.
+ * Finds a place in the list, expanding it it necessary.
+ */
+static struct regid *
+getcell()
+{
+struct regid *rp;
+
+ rp = saved;
+ /*
+ * If not allocated yet then allocate a few cells for use.
+ */
+ if (rp == NULL) {
+ saved = (struct regid *)malloc(sizeof(struct regid)*NALLOC);
+ savsize = NALLOC;
+ savcount = 0;
+ }
+
+ /* If no more room then reallocate */
+ if (savcount >= savsize) {
+ saved = (struct regid *)realloc(rp, (savsize+NALLOC)*sizeof(struct regid));
+ if (saved == NULL) {
+ saved = rp;
+ return((struct regid *)0);
+ }
+ savsize += NALLOC;
+ }
+
+ return(&saved[savcount++]);
+
+}
+
+/*
+ * Register a resource for automatic freeing at the end of the
+ * test. Library functions that create resources register them here.
+ * Tests may do so. It is important to not free anything that has
+ * been registered manually.
+ */
+void
+regid(disp, id, type)
+Display *disp;
+union regtypes *id;
+int type;
+{
+struct regid *savcell;
+
+ if (!Regenabled)
+ return;
+
+ if (type >= REG_MAX)
+ return;
+
+ if (id == NULL)
+ return;
+ savcell = getcell();
+ if (savcell == NULL)
+ return;
+
+ debug(2, "Save id 0x%x, type %d", *id, type);
+
+ savcell->display = disp;
+ savcell->type = type;
+ switch (type) {
+ case REG_IMAGE:
+ savcell->id.image = id->image;
+ break;
+ case REG_WINDOW:
+ savcell->id.window = id->window;
+ break;
+ case REG_PIXMAP:
+ savcell->id.pixmap = id->pixmap;
+ break;
+ case REG_GC:
+ savcell->id.gc = id->gc;
+ break;
+ case REG_COLORMAP:
+ savcell->id.colormap = id->colormap;
+ break;
+ case REG_CURSOR:
+ savcell->id.cursor = id->cursor;
+ break;
+ case REG_OPEN:
+ savcell->id.display = id->display;
+ break;
+ case REG_WINH:
+ savcell->id.winh = id->winh;
+ break;
+ case REG_POINTER:
+ savcell->id.pointer = id->pointer;
+ break;
+ case REG_MALLOC:
+ case REG_XMALLOC:
+ savcell->id.malloc = id->malloc;
+ break;
+ case REG_REGION:
+ savcell->id.region = id->region;
+ break;
+ default:
+ printf("Unknown type in regid\n");
+ delete("Unknown type in regid, internal error");
+ }
+
+}
+
+void
+freereg()
+{
+struct regid *rp;
+
+ if (savcount == 0)
+ return;
+
+ for (rp = &saved[savcount-1]; rp >= saved; rp--) {
+ savcount--;
+ debug(2, "Free id 0x%x, type %d", rp->id, rp->type);
+ switch (rp->type) {
+ case REG_IMAGE:
+ XDestroyImage(rp->id.image);
+ break;
+ case REG_PIXMAP:
+ XFreePixmap(rp->display, rp->id.pixmap);
+ break;
+ case REG_WINDOW:
+ XDestroyWindow(rp->display, rp->id.window);
+ break;
+ case REG_GC:
+ XFreeGC(rp->display, rp->id.gc);
+ break;
+ case REG_COLORMAP:
+ XFreeColormap(rp->display, rp->id.colormap);
+ break;
+ case REG_CURSOR:
+ XFreeCursor(rp->display, rp->id.cursor);
+ break;
+ case REG_OPEN:
+ XCloseDisplay(rp->id.display);
+ break;
+ case REG_WINH:
+ winh_free(rp->id.winh);
+ break;
+ case REG_POINTER:
+ unwarppointer(rp->display, rp->id.pointer);
+ break;
+ case REG_MALLOC:
+ free(rp->id.malloc);
+ break;
+ case REG_XMALLOC:
+ XFree(rp->id.malloc);
+ break;
+ case REG_REGION:
+ XDestroyRegion(rp->id.region);
+ break;
+ default:
+ printf("Unknown type in freereg\n");
+ delete("Unknown type in freereg, internal error");
+ }
+ }
+ savcount = 0;
+}
+
+/*
+ * Functions to enable and disable resource registration. After disabling
+ * it then resources can be freed explicitly.
+ */
+regenable()
+{
+ Regenabled = 1;
+}
+regdisable()
+{
+ Regenabled = 0;
+}
diff --git a/xc/test/xsuite/xtest/src/lib/report.c b/xc/test/xsuite/xtest/src/lib/report.c
new file mode 100644
index 000000000..3c76f5a96
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/report.c
@@ -0,0 +1,219 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*LINTLIBRARY*/
+/*
+ * Reporting functions these implement a higher level
+ * on top of tet_infoline.
+ *
+ * REPORT -- report(char *fmt, ...)
+ * A description of something that went wrong.
+ * TRACE -- trace(char *fmt, ...)
+ * A 'I am here' or description of somthing that happened
+ * that is not an error in itself.
+ * DEBUG -- debug(char *fmt, ...)
+ * Debug lines -- Interface to be decided
+ * CHECK -- ???
+ * Path trace line.
+ */
+
+#include "stdio.h"
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "tet_api.h"
+
+#if TEST_ANSI
+#include <stdarg.h>
+#else
+#include <varargs.h>
+#endif
+
+#define LINELEN 1024
+
+static int DebugLevel = 0;
+
+extern struct config config;
+
+/*VARARGS1*/
+
+void
+#if TEST_ANSI
+report(char *fmt, ...)
+#else
+report(fmt, va_alist)
+char *fmt;
+va_dcl
+#endif
+{
+char buf[LINELEN];
+va_list args;
+
+#if TEST_ANSI
+ va_start(args, fmt);
+#else
+ va_start(args);
+#endif
+
+ (void) strcpy(buf, "REPORT:");
+ (void) vsprintf(buf+strlen("REPORT:"), fmt, args);
+ tet_infoline(buf);
+
+ va_end(args);
+
+}
+
+/*VARARGS1*/
+
+void
+#if TEST_ANSI
+trace(char *fmt, ...)
+#else
+trace(fmt, va_alist)
+char *fmt;
+va_dcl
+#endif
+{
+char buf[LINELEN];
+va_list args;
+
+ if (config.option_no_trace)
+ return;
+
+#if TEST_ANSI
+ va_start(args, fmt);
+#else
+ va_start(args);
+#endif
+
+ (void) strcpy(buf, "TRACE:");
+ (void) vsprintf(buf+strlen("TRACE:"), fmt, args);
+ tet_infoline(buf);
+
+ va_end(args);
+}
+
+/*VARARGS1*/
+
+void
+#if TEST_ANSI
+check(char *fmt, ...)
+#else
+check(fmt, va_alist)
+char *fmt;
+va_dcl
+#endif
+{
+char buf[LINELEN];
+va_list args;
+
+ if (config.option_no_check)
+ return;
+
+#if TEST_ANSI
+ va_start(args, fmt);
+#else
+ va_start(args);
+#endif
+
+ (void) strcpy(buf, "CHECK:");
+ (void) vsprintf(buf+strlen("CHECK:"), fmt, args);
+ tet_infoline(buf);
+
+ va_end(args);
+}
+
+/*VARARGS2*/
+
+void
+#if TEST_ANSI
+debug(int lev, char *fmt, ...)
+#else
+debug(lev, fmt, va_alist)
+int lev;
+char *fmt;
+va_dcl
+#endif
+{
+char buf[LINELEN];
+va_list args;
+
+ if (lev > DebugLevel)
+ return;
+
+#if TEST_ANSI
+ va_start(args, fmt);
+#else
+ va_start(args);
+#endif
+
+ (void) strcpy(buf, "DEBUG:");
+ (void) vsprintf(buf+strlen("DEBUG:"), fmt, args);
+ tet_infoline(buf);
+
+ va_end(args);
+}
+
+/*
+ * This formats its arguments as in report(). It also issues the result
+ * code MIT_TET_ABORT. This causes the TCM to give up, and also the TCC if
+ * running under it. It should be used when something is so badly wrong
+ * that there is no point continuing any more tests.
+ */
+
+/*VARARGS1*/
+
+void
+#if TEST_ANSI
+tccabort(char *fmt, ...)
+#else
+tccabort(fmt, va_alist)
+char *fmt;
+va_dcl
+#endif
+{
+char buf[LINELEN];
+va_list args;
+
+#if TEST_ANSI
+ va_start(args, fmt);
+#else
+ va_start(args);
+#endif
+
+ (void) strcpy(buf, "REPORT:");
+ (void) vsprintf(buf+strlen("REPORT:"), fmt, args);
+ tet_infoline(buf);
+
+ va_end(args);
+
+ tet_result(MIT_TET_ABORT);
+
+}
+
+void
+setdblev(n)
+int n;
+{
+ DebugLevel = n;
+}
+
+int
+getdblev()
+{
+ return DebugLevel;
+}
diff --git a/xc/test/xsuite/xtest/src/lib/rpt.c b/xc/test/xsuite/xtest/src/lib/rpt.c
new file mode 100644
index 000000000..75597763e
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/rpt.c
@@ -0,0 +1,137 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*LINTLIBRARY*/
+
+#include "stdio.h"
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "tet_api.h"
+
+#if TEST_ANSI
+#include <stdarg.h>
+#else
+#include <varargs.h>
+#endif
+
+#define LINELEN 1024
+
+/*
+ * Routines to handle reporting of test result codes and associated messages.
+ * If there is a message it is output using report().
+ * If not then a generic message is output as a fail safe measure.
+ */
+
+/*
+ * Call this routine to report the current test as unsupported.
+ */
+/*VARARGS1*/
+
+void
+#if TEST_ANSI
+unsupported(char *mess, ... )
+#else
+unsupported(mess, va_alist)
+char *mess;
+va_dcl
+#endif
+{
+char buf[LINELEN];
+va_list args;
+
+#if TEST_ANSI
+ va_start(args, mess);
+#else
+ va_start(args);
+#endif
+
+
+ if (mess && *mess) {
+ (void) vsprintf(buf, mess, args);
+ report(buf);
+ } else
+ report("Test unsupported");
+
+ UNSUPPORTED;
+}
+
+/*
+ * Call this routine to report the current test as notinuse.
+ */
+/*VARARGS1*/
+
+void
+#if TEST_ANSI
+notinuse(char *mess, ... )
+#else
+notinuse(mess, va_alist)
+char *mess;
+va_dcl
+#endif
+{
+char buf[LINELEN];
+va_list args;
+
+#if TEST_ANSI
+ va_start(args, mess);
+#else
+ va_start(args);
+#endif
+
+
+ if (mess && *mess) {
+ (void) vsprintf(buf, mess, args);
+ report(buf);
+ } else
+ report("Test not in use");
+
+ NOTINUSE;
+}
+
+/*
+ * Call this routine to report the current test as untested.
+ */
+/*VARARGS1*/
+
+void
+#if TEST_ANSI
+untested(char *mess, ... )
+#else
+untested(mess, va_alist)
+char *mess;
+va_dcl
+#endif
+{
+char buf[LINELEN];
+va_list args;
+
+#if TEST_ANSI
+ va_start(args, mess);
+#else
+ va_start(args);
+#endif
+
+
+ if (mess && *mess) {
+ (void) vsprintf(buf, mess, args);
+ report(buf);
+ } else
+ report("Test is untested");
+
+ UNTESTED;
+}
diff --git a/xc/test/xsuite/xtest/src/lib/savimage.c b/xc/test/xsuite/xtest/src/lib/savimage.c
new file mode 100644
index 000000000..2fa42e6af
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/savimage.c
@@ -0,0 +1,119 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdio.h"
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+extern int Errnum; /* Number of error record */
+
+/*
+ * Save an image of the drawable. Basically this is just a XGetImage
+ * on the whole area of the drawable.
+ */
+XImage *
+savimage(disp, d)
+Display *disp;
+Drawable d;
+{
+unsigned int width;
+unsigned int height;
+XImage *imp;
+
+ getsize(disp, d, &width, &height);
+ imp = XGetImage(disp, d, 0, 0, width, height, AllPlanes, ZPixmap);
+
+ regid(disp, (union regtypes *)&imp, REG_IMAGE);
+
+ return(imp);
+}
+
+
+/*
+ * Compare an image to what is currently on the drawable.
+ * This is common code for the routines compsavimage() and diffsavimage().
+ */
+static Status
+compsavcommon(disp, d, im, diff)
+Display *disp;
+Drawable d;
+XImage *im;
+int diff; /* True if difference expected */
+{
+XImage *newim;
+int x, y;
+unsigned int width, height;
+unsigned long pix1, pix2;
+
+ getsize(disp, d, &width, &height);
+ newim = XGetImage(disp, d, 0, 0, width, height, AllPlanes, ZPixmap);
+ if (newim == (XImage*)0) {
+ delete("XGetImage failed");
+ return(False);
+ }
+
+ for (y = 0; y < height; y++) {
+ for (x = 0; x < width; x++) {
+ pix1 = XGetPixel(im, x, y);
+ pix2 = XGetPixel(newim, x, y);
+
+ if (pix1 != pix2) {
+ if (!diff) {
+ char name[32];
+
+ /*
+ * A difference was not expected so dump out expected
+ * and obtained images.
+ */
+ report("Pixel mismatch at (%d, %d) (%d - %d)"
+ , x, y, pix1, pix2);
+ sprintf(name, "Err%04d.err", Errnum++);
+ report("See file %s for details", name);
+ (void) unlink(name);
+ dumpimage(newim, name, (struct area *)0);
+ dumpimage(im, name, (struct area *)0);
+ XDestroyImage(newim);
+ }
+ return(False);
+ }
+ }
+ }
+ XDestroyImage(newim);
+ return(True);
+}
+
+Status
+compsavimage(disp, d, im)
+Display *disp;
+Drawable d;
+XImage *im;
+{
+ return compsavcommon(disp, d, im, 0);
+}
+
+Status
+diffsavimage(disp, d, im)
+Display *disp;
+Drawable d;
+XImage *im;
+{
+ return compsavcommon(disp, d, im, 1);
+}
+
diff --git a/xc/test/xsuite/xtest/src/lib/setline.c b/xc/test/xsuite/xtest/src/lib/setline.c
new file mode 100644
index 000000000..043970af9
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/setline.c
@@ -0,0 +1,81 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "pixval.h"
+
+/*
+ * Set the line width, without affecting anything else.
+ */
+void
+setwidth(disp, gc, width)
+Display *disp;
+GC gc;
+unsigned int width;
+{
+XGCValues gcv;
+
+ gcv.line_width = width;
+ XChangeGC(disp, gc, GCLineWidth, &gcv);
+}
+
+/*
+ * Set the capstyle without affecting anything else.
+ */
+void
+setcapstyle(disp, gc, capstyle)
+Display *disp;
+GC gc;
+int capstyle;
+{
+XGCValues gcv;
+
+ gcv.cap_style = capstyle;
+ XChangeGC(disp, gc, GCCapStyle, &gcv);
+}
+
+/*
+ * Set the line style without affecting anything else.
+ */
+void
+setlinestyle(disp, gc, linestyle)
+Display *disp;
+GC gc;
+int linestyle;
+{
+XGCValues gcv;
+
+ gcv.line_style = linestyle;
+ XChangeGC(disp, gc, GCLineStyle, &gcv);
+}
+
+/*
+ * Set the join style without affecting anything else.
+ */
+void
+setjoinstyle(disp, gc, joinstyle)
+Display *disp;
+GC gc;
+int joinstyle;
+{
+XGCValues gcv;
+
+ gcv.join_style = joinstyle;
+ XChangeGC(disp, gc, GCJoinStyle, &gcv);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/settimeout.c b/xc/test/xsuite/xtest/src/lib/settimeout.c
new file mode 100644
index 000000000..bd4bb9f71
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/settimeout.c
@@ -0,0 +1,83 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include <signal.h>
+
+static int Alarm_set;
+
+#ifdef OLDSIGNALS
+static void (*osig)();
+#else
+static struct sigaction oact;
+#endif
+
+static void
+alrm_exit(a)
+int a;
+{
+ exit(TIMEOUT_EXIT);
+}
+
+/*
+ * Set up a timeout to cause the process to exit in to seconds. This should
+ * only be called from a child process normally.
+ */
+void
+settimeout(to)
+int to;
+{
+#ifndef OLDSIGNALS
+struct sigaction act;
+#endif
+
+ Alarm_set = 1;
+
+#if OLDSIGNALS
+ osig = signal(SIGALRM, alrm_exit);
+#else
+ act.sa_handler = alrm_exit;
+ act.sa_flags = 0;
+ (void) sigemptyset(&act.sa_mask);
+
+ if (sigaction(SIGALRM, &act, &oact) == -1)
+ delete("Could not set signal handler in settimeout");
+#endif
+ (void) alarm((unsigned long)to);
+}
+
+/*
+ * Clear a previously set timeout. Return the amount of time remaining.
+ */
+unsigned long
+cleartimeout()
+{
+unsigned long timeleft;
+
+ if (Alarm_set == 0)
+ return 0;
+
+ timeleft = alarm(0);
+#if OLDSIGNALS
+ (void) signal(SIGALRM, osig);
+#else
+ if (sigaction(SIGALRM, &oact, (struct sigaction *)0) == -1)
+ delete("Could not reset signal handler in cleartimeout");
+#endif
+ return(timeleft);
+}
+
diff --git a/xc/test/xsuite/xtest/src/lib/stackorder.c b/xc/test/xsuite/xtest/src/lib/stackorder.c
new file mode 100644
index 000000000..2449a6889
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/stackorder.c
@@ -0,0 +1,72 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * stackorder() takes as input a window and returns its
+ * position in the stacking order, with 0 being the lowest.
+ */
+int
+stackorder(disp, win)
+Display *disp;
+Window win;
+{
+Window *children;
+Window parent, root;
+Window dummy;
+unsigned int nchild;
+int result;
+int i;
+
+ /* Get the parent of the input window */
+ if(!XQueryTree(disp, win, &root, &parent, &children, &nchild)) {
+ debug(2, "stackorder: 1st XQueryTree returns 0");
+ return(-1);
+ }
+ if (nchild != 0 && children)
+ XFree((char*)children); /* Not needed here */
+
+ result = -1;
+
+ /*
+ * Now get all the siblings of the input window and
+ * search for the input window among them; return index
+ * if found.
+ */
+ debug(2, "win=%d", win);
+ if(!XQueryTree(disp, parent, &root, &dummy, &children, &nchild)) {
+ debug(2, "stackorder: 2nd XQueryTree returns 0");
+ return(-1);
+ }
+ for (i = 0; i < nchild; i++) {
+ debug(2, "child=%d", children[i]);
+ if (children[i] == win) {
+ result = i;
+ break;
+ }
+ }
+
+ if (children)
+ XFree((char*)children);
+
+ return(result);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/startcall.c b/xc/test/xsuite/xtest/src/lib/startcall.c
new file mode 100644
index 000000000..c17a0dc8c
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/startcall.c
@@ -0,0 +1,101 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "stdio.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * This routine is similar to startcall except that no XSync() occurs.
+ * Various tests assume that this routine merely sets up the error
+ * handler stuff. This routine should not generate protocol requests.
+ */
+void
+_startcall(disp)
+Display *disp;
+{
+extern int error_status();
+ /* Reset the error status */
+ reseterr();
+
+ /*
+ * Set error handler to trap errors that occur on this call
+ * Should be LAST.
+ */
+ XSetErrorHandler(error_status);
+}
+
+/*
+ * This routine contains setup procedures that should be called
+ * before each time that the routine under test is called.
+ */
+void
+startcall(disp)
+Display *disp;
+{
+ XSync(disp, True);
+
+ _startcall(disp);
+}
+
+/*
+ * This routine is similar to endcall() except that XSync() is
+ * not called.
+ * Various tests assume that this routine merely un-sets up the error
+ * handler stuff. This routine should not generate protocol requests.
+ */
+void
+_endcall(disp)
+Display *disp;
+{
+extern int unexp_err();
+
+ /*
+ * Go back to the unexpected error handler.
+ */
+ XSetErrorHandler(unexp_err);
+
+ /* A debuging aid - pause for CR after displaying window */
+ if (config.debug_pause_after) {
+ int c;
+ extern int tet_thistest;
+
+ printf("Test %d: Hit return to continue...", tet_thistest);
+ fflush(stdout);
+ while ((c = getchar()) != '\n' && c != EOF)
+ ;
+ }
+}
+
+/*
+ * The endcall() routine does all common cleanup code that
+ * should be called after the routine under test has been
+ * called. XSync() needs to be called before this.
+ */
+void
+endcall(disp)
+Display *disp;
+{
+
+ XSync(disp, False);
+
+ _endcall(disp);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/startup.c b/xc/test/xsuite/xtest/src/lib/startup.c
new file mode 100644
index 000000000..0f5c9b45e
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/startup.c
@@ -0,0 +1,354 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdio.h"
+#include "unistd.h"
+#include "string.h"
+#include "tet_api.h"
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+/*
+ * Generic startup routine for tests. All tests in general call
+ * this routine unless there is a good reason not to.
+ *
+ */
+
+#define LINELEN 1024
+char buf[LINELEN];
+
+extern int ntests;
+
+Display *Dsp;
+Window Win;
+
+static Window ofocus;
+static int revert_to;
+static char **odir_array;
+static int odirs;
+
+Window ErrdefWindow;
+Drawable ErrdefDrawable;
+GC ErrdefGC;
+Colormap ErrdefColormap;
+
+/* NOT DONE YET */
+Pixmap ErrdefPixmap;
+Atom ErrdefAtom;
+Cursor ErrdefCursor;
+Font ErrdefFont;
+
+void aborttest();
+
+void
+startup()
+{
+int i;
+char *disp;
+char *cp;
+extern char *TestName;
+extern struct tet_testlist tet_testlist[];
+#if TEST_ANSI
+extern int unexp_err(Display *d, XErrorEvent *ev);
+extern int io_err(Display *d);
+#else
+extern int unexp_err();
+extern int io_err();
+#endif
+
+ /*
+ * Set the debug level first (it is used in initconfig).
+ */
+ if ((cp = tet_getvar("XT_DEBUG")) != NULL) {
+ extern int DebugLevel;
+
+ setdblev(atov(cp));
+ } else {
+ setdblev(0);
+ }
+
+ /*
+ * Obtain and check all configuration parameters.
+ */
+ initconfig();
+
+ /*
+ * Put out the NAME info line for the report generator.
+ */
+ (void) sprintf(buf, "TRACE:NAME: %s", TestName);
+ tet_infoline(buf);
+
+ /*
+ * Pause a while in case the X server is resetting.
+ */
+ reset_delay();
+
+ /*
+ * Get the display to use and open it.
+ */
+ disp = tet_getvar("XT_DISPLAY");
+
+ if (disp == (char*)0) {
+ report("XT_DISPLAY was not set. Can not continue.");
+ for (i = 0; i < ntests; i++)
+ tet_testlist[i].testfunc = aborttest;
+ return;
+ }
+
+ Dsp = XOpenDisplay(disp);
+
+ if (Dsp == (Display *)0) {
+ report("Could not open display. Can not continue.");
+ for (i = 0; i < ntests; i++)
+ tet_testlist[i].testfunc = aborttest;
+ return;
+ }
+
+#ifdef notyet
+ /* Get a window for general use */
+ Win = makewin(Dsp);
+#endif
+
+ /* Make sure that screen saver hasn't cut in */
+ XResetScreenSaver(Dsp);
+
+ /*
+ * Set up the error handlers.
+ */
+ (void) XSetErrorHandler(unexp_err);
+ (void) XSetIOErrorHandler(io_err);
+
+ /*
+ * Set up the default resources for error tests. At present
+ * just use the root window (could create a window specially)
+ */
+ ErrdefWindow = DefaultRootWindow(Dsp);
+ ErrdefDrawable = DefaultRootWindow(Dsp);
+ ErrdefGC = DefaultGC(Dsp, DefaultScreen(Dsp));
+ ErrdefColormap = DefaultColormap(Dsp, DefaultScreen(Dsp));
+ ErrdefPixmap = maketile(Dsp, DefaultRootWindow(Dsp));
+ ErrdefAtom = XInternAtom(Dsp, "XT_ERRDEFATOM", False);
+ /* ErrdefCursor; */
+ /* ErrdefFont; */
+
+ /*
+ * Sync and clear out queue.
+ */
+ XSync(Dsp, True);
+
+}
+
+/*
+ * Cleanup functions called at the end of the test purposes.
+ */
+void
+cleanup()
+{
+ if (Dsp) {
+#ifndef GENERATE_PIXMAPS
+ /* At present this causes needless problems... */
+ XCloseDisplay(Dsp);
+#endif
+ }
+}
+
+/*
+ * Startup functions called at the end of the test purposes.
+ * Version to set fontpath.
+ */
+void
+fontstartup()
+{
+ startup();
+ if (Dsp == (Display *)0)
+ return;
+
+ setxtfontpath();
+}
+
+void
+setxtfontpath()
+{
+char *fpathlist;
+char *fpathtmp;
+char *ndir_array[MAX_DIRS];
+int ndirs;
+int i;
+
+ /*
+ * Save font path. (Only the first time).
+ */
+ if (!odir_array)
+ odir_array = XGetFontPath(Dsp, &odirs);
+
+ /*
+ * Set font path to that containing the test fonts.
+ */
+ fpathlist = config.fontpath;
+ if (fpathlist == NULL || *fpathlist == '\0') {
+ for (i = 1; i <= ntests; i++)
+ tet_delete(i, "XT_FONTPATH not set");
+ return;
+ }
+ fpathtmp = (char *)calloc(strlen(fpathlist)+1, sizeof(char));
+ strcpy(fpathtmp, fpathlist);
+
+ for (i = 0; i < MAX_DIRS; i++) {
+ ndir_array[i] = strtok((i==0)? fpathtmp: (char*)0, SEP);
+ if (ndir_array[i] == NULL)
+ break;
+ debug(1, "ndir_array entry %d - '%s'", i, ndir_array[i]);
+ }
+ ndirs = i;
+
+ if (ndirs <= 0) {
+ for (i = 1; i <= ntests; i++)
+ tet_delete(i, "XT_FONTPATH contains no components");
+ return;
+ }
+
+ XSetFontPath(Dsp, ndir_array, ndirs);
+
+ /*
+ * Sync and clear out queue.
+ */
+ XSync(Dsp, True);
+}
+
+/*
+ * Cleanup functions called at the end of the test purposes.
+ * Version to reset fontpath.
+ */
+void
+fontcleanup()
+{
+ if (Dsp) {
+ XSetFontPath(Dsp, odir_array, odirs);
+ XFreeFontPath(odir_array);
+ }
+
+ cleanup();
+}
+
+/*
+ * Startup functions called at the end of the test purposes.
+ * Version to set input focus.
+ */
+void
+focusstartup()
+{
+ startup();
+ if (Dsp == (Display *)0)
+ return;
+
+ /*
+ * Set focus to known state.
+ */
+ XGetInputFocus(Dsp, &ofocus, &revert_to);
+ XSetInputFocus(Dsp, DefaultRootWindow(Dsp), RevertToPointerRoot, CurrentTime);
+
+ /*
+ * Sync and clear out queue.
+ */
+ XSync(Dsp, True);
+}
+
+/*
+ * Cleanup functions called at the end of the test purposes.
+ * Version to reset input focus.
+ */
+void
+focuscleanup()
+{
+ if (Dsp)
+ XSetInputFocus(Dsp, ofocus, revert_to, CurrentTime);
+
+ cleanup();
+}
+
+/*
+ * Startup functions called at the end of the test purposes.
+ * Version to set input focus and fontpath.
+ */
+void
+fontfocusstartup()
+{
+ fontstartup();
+ if (Dsp == (Display *)0)
+ return;
+
+ /*
+ * Set focus to known state.
+ */
+ XGetInputFocus(Dsp, &ofocus, &revert_to);
+ XSetInputFocus(Dsp, PointerRoot, RevertToPointerRoot, CurrentTime);
+
+ /*
+ * Sync and clear out queue.
+ */
+ XSync(Dsp, True);
+}
+
+/*
+ * Cleanup functions called at the end of the test purposes.
+ * Version to reset input focus and fontpath.
+ */
+void
+fontfocuscleanup()
+{
+ if (Dsp)
+ XSetInputFocus(Dsp, ofocus, revert_to, CurrentTime);
+
+ fontcleanup();
+}
+
+/*
+ * Startup functions called at the end of the test purposes.
+ * Version to initialise the resource manager.
+ */
+void
+rmstartup()
+{
+ startup();
+ XrmInitialize();
+}
+
+/*
+ * This is used to replace all test cases when the display can not be
+ * opened. It issues a result code that should abort the current test
+ * case and the tcc.
+ */
+void
+aborttest()
+{
+ tccabort("Could not open display %s",
+ (config.display)? config.display: "<not set>");
+}
+
+/*
+ * This is used to delay before opening the first connection to the server.
+ * This is to allow the server to reset (the previous test case will most
+ * likely cause a reset, when its last connection is closed).
+ */
+void
+reset_delay()
+{
+ sleep(config.reset_delay);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/tpstartup.c b/xc/test/xsuite/xtest/src/lib/tpstartup.c
new file mode 100644
index 000000000..e254a3a39
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/tpstartup.c
@@ -0,0 +1,92 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+extern Display *Dsp;
+
+#ifdef DEBUG
+static int brkval;
+#endif
+
+/*
+ * Actions to take at the beginning of a test purpose.
+ */
+void
+tpstartup()
+{
+#if TEST_ANSI
+extern int unexp_err(Display *, XErrorEvent *ep);
+extern int io_err(Display *);
+#else
+extern int unexp_err();
+extern int io_err();
+#endif
+
+ (void) XSetErrorHandler(unexp_err);
+ (void) XSetIOErrorHandler(io_err);
+
+ resetdelete();
+
+ if (Dsp)
+ XResetScreenSaver(Dsp);
+#ifdef DEBUG
+ brkval = sbrk(0);
+#endif
+
+ /* Do this here in case tpcleanup did not get called */
+ freereg();
+
+ /*
+ * Clean up the common display client.
+ */
+ if (Dsp)
+ XSync(Dsp, True);
+}
+
+/*
+ * Actions to take at the end of a test purpose.
+ */
+void
+tpcleanup()
+{
+ /* Free all registered resources */
+ freereg();
+
+ /*
+ * Try to ensure that everything that is going to happen for
+ * this test happens now, rather than popping up in the next test.
+ */
+ if (Dsp)
+ XSync(Dsp, False);
+#ifdef DEBUG
+ {
+ int newbrk;
+ extern int tet_thistest;
+
+ newbrk = sbrk(0);
+ debug(1, "brk value was %d after test %d", newbrk, tet_thistest);
+ if (newbrk > brkval)
+ printf("brk value increased to %d (+%d) after test %d\n"
+ , newbrk, newbrk-brkval, tet_thistest);
+ }
+#endif
+}
diff --git a/xc/test/xsuite/xtest/src/lib/verimage.c b/xc/test/xsuite/xtest/src/lib/verimage.c
new file mode 100644
index 000000000..5a19b0fc5
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/verimage.c
@@ -0,0 +1,239 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdio.h"
+#include "string.h"
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+extern int tet_thistest;
+extern struct tet_testlist tet_testlist[];
+
+
+int Errnum; /* Number of error record */
+
+Status
+verifyimage(disp, d, ap)
+Display *disp;
+Drawable d;
+struct area *ap;
+{
+static FILE *fp;
+long initfpos;
+XImage *imp;
+register int x, y;
+register unsigned long ipix;
+unsigned long pix;
+unsigned long count;
+int good, bad;
+int ic;
+unsigned int width, height;
+long depth;
+long imdepth;
+char buf[64];
+char name[128];
+static int lasttest;
+static int lastvinf;
+extern int CurVinf;
+
+ if(!config.save_server_image && config.debug_no_pixcheck) {
+ trace("pixcheck code subverted");
+ return(True);
+ }
+
+ if (ap == NULL) {
+ getsize(disp, d, &width, &height);
+ x = 0;
+ y = 0;
+ } else {
+ x = ap->x;
+ y = ap->y;
+ width = ap->width;
+ height = ap->height;
+ }
+
+ depth = getdepth(disp, d);
+ imp = XGetImage(disp, d, x, y, width, height, AllPlanes, ZPixmap);
+ if (imp == 0) {
+ delete("get image failed");
+ return(False);
+ }
+
+ ic = tet_testlist[tet_thistest-1].icref;
+ (void) sprintf(name, "a%d.dat", ic);
+
+#ifdef GENERATE_PIXMAPS
+ if (tet_thistest != lasttest || CurVinf == lastvinf) {
+ dumpimage(imp, name, ap);
+ XDestroyImage(imp);
+ lasttest = tet_thistest;
+ lastvinf = CurVinf;
+ report("Created reference image file");
+ return(True);
+ }
+#endif
+
+ if (tet_thistest != lasttest || CurVinf != lastvinf) {
+ if (fp)
+ fclose(fp);
+ fp = fopen(name, "r");
+ lasttest = tet_thistest;
+ lastvinf = CurVinf;
+ }
+
+ /*
+ * If option to dump out server generated versions of files, do this
+ * here.
+ */
+ if (config.save_server_image) {
+ (void) sprintf(name, "a%d.sav", ic);
+ dumpimage(imp, name, ap);
+ trace("Created server image file %s", name);
+ }
+
+ if(config.debug_no_pixcheck) {
+ XDestroyImage(imp);
+ trace("pixcheck code subverted");
+ return(True);
+ }
+
+ if (fp == NULL) {
+ XDestroyImage(imp);
+ delete("Could not open pixel validation data file %s", name);
+ return(True); /* We don't want to generate a FAIL */
+ }
+
+ initfpos = ftell(fp);
+
+ do {
+ if (fgets(buf, 512, fp) == NULL)
+ goto badformat;
+ } while (buf[0] == '!');
+ if (sscanf(buf, "%d %d %d", &width, &height, &imdepth) < 3) {
+badformat:
+ delete("Bad format pixel validation data file %s", name);
+ XDestroyImage(imp);
+ return(False);
+ }
+
+ /*
+ * Choose the smaller of the depths in the image and in the drawable.
+ */
+ if (imdepth < depth)
+ depth = imdepth;
+
+ if (width != imp->width) {
+ delete("width mismatch");
+ XDestroyImage(imp);
+ return(False);
+ }
+ if (height != imp->height) {
+ delete("height mismatch");
+ XDestroyImage(imp);
+ return(False);
+ }
+
+ count = 0;
+ good = 0;
+ bad = 0;
+
+ x = y = 0;
+
+ while (fgets(buf, 512, fp) != NULL) {
+ if (strchr(buf, ',') != NULL) {
+ if (sscanf(buf, "%x,%x", &count, &pix) < 2)
+ goto badformat;
+ } else {
+ count = 1;
+ if (sscanf(buf, "%x", &pix) < 1)
+ goto badformat;
+ }
+ pix &= (1<<depth)-1;
+
+ for (; count; count--) {
+ ipix = XGetPixel(imp, x, y);
+ ipix &= (1<<depth)-1;
+ if (pix == ipix) {
+ good++;
+ } else {
+ bad++;
+ }
+ if (++x >= width) {
+ x = 0;
+ y++;
+ }
+ if (y >= height)
+ goto ok;
+ }
+ }
+
+ fclose(fp);
+
+ok:
+
+ if (bad) {
+ /*
+ * Make this separate routine XXX
+ */
+ char buf[512];
+ char errfile[64];
+ long newpos;
+ int n;
+ FILE *errfp;
+
+ report("A total of %d out of %d pixels were bad", bad, good+bad);
+ (void) sprintf(errfile, "Err%04d.err", Errnum);
+ (void) unlink(errfile);
+ dumpimage(imp, errfile, ap);
+
+ newpos = ftell(fp);
+ errfp = fopen(errfile, "a");
+ if (errfp == NULL) {
+ report("Could not open pixel error file %s", errfile);
+ } else {
+ fseek(fp, initfpos, 0);
+ for (n = newpos-initfpos; n > 0; ) {
+ fread(buf, 1, (n>512)? 512: n, fp);
+ fwrite(buf, 1, (n>512)? 512: n, errfp);
+ n -= 512;
+ }
+ report("Pixel check failed. See file %s for results", errfile);
+ Errnum++;
+ fclose(errfp);
+ }
+ }
+ if (good + bad < width*height) {
+ delete("Early end of file in pixmap checking");
+ /*
+ * Return is true so that the test does not give a failure;
+ * it is the data file that needs attention.
+ */
+ XDestroyImage(imp);
+ return(True);
+ }
+
+ XDestroyImage(imp);
+ if (good == width*height && bad == 0)
+ return(True);
+ else
+ return(False);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/winh.c b/xc/test/xsuite/xtest/src/lib/winh.c
new file mode 100644
index 000000000..fefce3d1d
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/winh.c
@@ -0,0 +1,1345 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*LINTLIBRARY*/
+
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "tet_api.h"
+#include <stdlib.h>
+#include <stdio.h>
+
+/*
+ * used when weeding
+ */
+#define WEED_MARKED (1<<0) /* matches with an expected/delivered event */
+#define WEED_IGNORE (1<<1) /* ignore this event */
+
+#define FIRSTBORN(winh) ((winh)->prevsibling == (Winh *) NULL)
+
+#define ADD_TO_EXPECTED_GLOBAL(e) \
+ if ((winh_qexp = addto(winh_qexp, (e))) == (Winhe *) NULL)\
+ return(1);\
+ expected_events++
+
+/*
+ * This macro is called to add something to a node's expected list.
+ */
+#define ADD_TO_EXPECTED(c, w, e) \
+ {\
+ Display *tmp_display;\
+ /* fudge display */\
+ tmp_display = (e)->xany.display;\
+ (e)->xany.display = (c)->display;\
+ if (((w)->expected = addto((w)->expected, (e))) == (Winhe *) NULL)\
+ return(1);\
+ debug(4, "Client 0x%x expecting %s on window 0x%x",\
+ (c)->display,\
+ eventname((e)->type),\
+ (w)->window);\
+ (e)->xany.display = tmp_display;\
+ }\
+ ADD_TO_EXPECTED_GLOBAL((e))
+
+/*
+ * Event characteristics
+ */
+#define EC_NONE (0) /* nothing worth mentioning */
+#define EC_PROPS (1<<0) /* propagation occurs naturally */
+#define EC_ALL (1<<1) /* sent to all clients */
+
+/*
+ * Table of per-event information.
+ *
+ * The information in this table is not modified by the winh routines.
+ */
+static struct {
+ int type;
+ long mask; /* NoEventMask if none */
+ long info;
+} event_info[] = {
+ { KeyPress, KeyPressMask, EC_PROPS },
+ { KeyRelease, KeyReleaseMask, EC_PROPS },
+ { ButtonPress, ButtonPressMask, EC_PROPS },
+ { ButtonRelease, ButtonReleaseMask, EC_PROPS },
+ { MotionNotify, PointerMotionMask|
+ PointerMotionHintMask|
+ Button1MotionMask|
+ Button2MotionMask|
+ Button3MotionMask|
+ Button4MotionMask|
+ Button5MotionMask|
+ ButtonMotionMask, EC_PROPS },
+ { EnterNotify, EnterWindowMask, EC_NONE },
+ { LeaveNotify, LeaveWindowMask, EC_NONE },
+ { FocusIn, FocusChangeMask, EC_NONE },
+ { FocusOut, FocusChangeMask, EC_NONE },
+ { KeymapNotify, KeymapStateMask, EC_NONE },
+ { Expose, ExposureMask, EC_NONE },
+ { GraphicsExpose, NoEventMask, EC_NONE },
+ { NoExpose, NoEventMask, EC_NONE },
+ { VisibilityNotify, VisibilityChangeMask, EC_NONE },
+ { CreateNotify, SubstructureNotifyMask, EC_NONE },
+ { DestroyNotify, SubstructureNotifyMask, EC_NONE },
+ { UnmapNotify, SubstructureNotifyMask, EC_NONE },
+ { MapNotify, SubstructureNotifyMask, EC_NONE },
+ { MapRequest, SubstructureRedirectMask,EC_NONE },
+ { ReparentNotify, SubstructureNotifyMask, EC_NONE },
+ { ConfigureNotify, SubstructureNotifyMask, EC_NONE },
+ { ConfigureRequest, SubstructureRedirectMask,EC_NONE },
+ { GravityNotify, SubstructureNotifyMask, EC_NONE },
+ { ResizeRequest, ResizeRedirectMask, EC_NONE },
+ { CirculateNotify, SubstructureNotifyMask, EC_NONE },
+ { CirculateRequest, SubstructureRedirectMask,EC_NONE },
+ { PropertyNotify, PropertyChangeMask, EC_NONE },
+ { SelectionClear, NoEventMask, EC_NONE },
+ { SelectionRequest, NoEventMask, EC_NONE },
+ { SelectionNotify, NoEventMask, EC_NONE },
+ { ColormapNotify, ColormapChangeMask, EC_NONE },
+ { ClientMessage, NoEventMask, EC_NONE },
+ { MappingNotify, NoEventMask, EC_ALL }
+};
+
+/*
+ * Used to track event statistics by event type
+ *
+ * The information in this table is modified by the winh routines.
+ *
+ * There is a one-to-one correspondence between members of this array
+ * and members of the event_info array.
+ */
+Winhs winh_event_stats[NELEM(event_info)];
+
+/*
+ * Used to maintain sequencing information for events in hierarchy event queue.
+ * Also used to track number of events in hierarchy event queue.
+ */
+static int sequence = 0;
+
+/*
+ * Used to track number of expected events.
+ */
+static int expected_events = 0;
+
+Winhe *winh_qexp = (Winhe *) NULL; /* list of expected events */
+Winhe *winh_qdel = (Winhe *) NULL; /* list of delivered events */
+
+Winh *guardian = (Winh *) NULL;
+
+/*
+ * static globals used to communicate between winh_walk() procedures and
+ * the routines which call winh_walk().
+ */
+static Display *_display_;
+static Window _window_;
+static Winh *_foundit_;
+static XEvent *_event_;
+static int _winh_walk_first_time_;
+static long _event_mask_;
+static long _winhmask_;
+static int _event_type_;
+static int _eindex_; /* index into event arrays */
+
+static char *winhmalloc();
+static void add_child(), add_sibling();
+static Winh *getguardian(), *initguardian();
+static Winhe *addto();
+static int free_eventlist();
+static int winh_print();
+
+static int _winh_create();
+static int _winh_find();
+static int _winh_free();
+static int _winh_ignore_event();
+static int _winh_plant();
+static int _winh_selectinput();
+static int _winh_weed();
+static int _winh_walk_depth();
+static int _winh_walk();
+static int _winh();
+
+/*
+ * winh_adopt - add to window hierarchy
+ */
+Winh *
+winh_adopt(display, parent, valuemask, attributes, winhg, winhmask)
+Display *display;
+Winh *parent;
+unsigned long valuemask;
+XSetWindowAttributes *attributes;
+Winhg *winhg;
+long winhmask;
+{
+ Winh *child;
+
+ if (winhmask & WINH_GUARDIAN) {
+ delete("Invalid mask in winh_adopt(): WINH_GUARDIAN");
+ return((Winh *) NULL);
+ }
+ if (guardian == (Winh *) NULL)
+ guardian = initguardian(display);
+ if (guardian == (Winh *) NULL)
+ return((Winh *) NULL);
+ if (parent == (Winh *) NULL)
+ parent = getguardian(display);
+ child = (Winh *) winhmalloc(sizeof(*child), "winh_adopt");
+ if (child == (Winh *) NULL)
+ return((Winh *) NULL);
+ child->window = WINH_BAD;
+ add_child(parent, child);
+ if (winhmask & WINH_INHERIT) {
+ child->valuemask = parent->valuemask;
+ child->attributes = parent->attributes;
+ }
+ else if (attributes == (XSetWindowAttributes *) NULL) {
+ child->valuemask = 0;
+ }
+ else {
+ child->valuemask = valuemask;
+ child->attributes = *attributes;
+ }
+ child->winhmask = winhmask;
+ child->clients = (Winhc *) NULL;
+ child->expected = (Winhe *) NULL;
+ child->delivered = (Winhe *) NULL;
+ if (!(winhmask & WINH_IGNORE_GEOMETRY) && winhg == (Winhg *) NULL) {
+ /*
+ * dynamically generate geometries
+ *
+ * dimensions one fourth minus a little bit of parent
+ * tile window on parent window with
+ * 1st child upper left,
+ * 2nd child upper right,
+ * 3rd child lower left,
+ * 4th child lower right, and
+ * remaining centered
+ */
+ child->winhg = child->parent->winhg;
+ child->winhg.area.width /= 2;
+ child->winhg.area.width -= 6;
+ child->winhg.area.height /= 2;
+ child->winhg.area.height -= 6;
+ child->winhg.area.x = 2;
+ child->winhg.area.y = 2;
+ switch (child->parent->numchildren) {
+ case 1:
+ break;
+ case 2:
+ child->winhg.area.x = child->winhg.area.width + 6;
+ break;
+ case 4:
+ child->winhg.area.x = child->winhg.area.width + 6;
+ /*FALLTHROUGH*/
+ case 3:
+ child->winhg.area.y = child->winhg.area.height + 6;
+ break;
+ default:
+ child->winhg.area.x = child->parent->winhg.area.width / 2;
+ child->winhg.area.x -= child->winhg.area.width/2;
+ child->winhg.area.y = child->parent->winhg.area.height / 2;
+ child->winhg.area.y -= child->winhg.area.height/2;
+ }
+ }
+ else if (!(winhmask & WINH_IGNORE_GEOMETRY))
+ child->winhg = *winhg;
+ return(child);
+}
+
+/*
+ * winh_create - create windows in hierarchy
+ */
+int
+winh_create(display, winh, winhmask)
+Display *display;
+Winh *winh;
+long winhmask;
+{
+ _display_ = display; /* save in global... */
+ _winhmask_ = winhmask;
+ return(winh_walk(winh, 0, _winh_create));
+}
+
+static int
+_winh_create(winh)
+Winh *winh;
+{
+ struct area *ap;
+ int border_width;
+
+ /* ignore guardians, they don't "have" windows */
+ /* don't create a window which is marked as created */
+ if (winh->winhmask & WINH_CREATED)
+ return(0);
+ if (winh->winhmask & WINH_IGNORE_GEOMETRY) {
+ ap = (struct area *) NULL;
+ border_width = 1;
+ }
+ else {
+ ap = &(winh->winhg.area);
+ border_width = winh->winhg.border_width;
+ }
+ winh->window = mkwinchild(_display_, (XVisualInfo *) NULL, ap, 0, winh->parent->window, border_width);
+ if (winh->valuemask)
+ XChangeWindowAttributes(_display_, winh->window, winh->valuemask, &(winh->attributes));
+ if ((winh->winhmask | _winhmask_) & WINH_MAP)
+ XMapWindow(_display_, winh->window);
+ winh->winhmask |= WINH_CREATED;
+ return(0);
+}
+
+/*
+ * winh_find - locate node for window in hierarchy
+ */
+Winh *
+winh_find(winh, window)
+Winh *winh;
+Window window;
+{
+ _window_ = window;
+ if (!winh_walk(winh, 0, _winh_find))
+ return((Winh *) NULL);
+ return(_foundit_);
+}
+
+static int
+_winh_find(winh)
+Winh *winh;
+{
+ if (winh->window == _window_) {
+ _foundit_ = winh;
+ return(1);
+ }
+ return(0);
+}
+
+/*
+ * winh_plant - plant events where they belong in heirarchy
+ *
+ * o free and re-initialize the hierarchy event queue data
+ * o initialize the high, low, and sequence counts for each event type
+ */
+int
+winh_plant(source, event, event_mask, winhmask)
+Winh *source;
+XEvent *event;
+long event_mask;
+long winhmask;
+{
+ Winh *winh;
+
+ if (winh_qdel != (Winhe *) NULL)
+ (void) free_eventlist();
+ if (event == (XEvent *) NULL)
+ return(0);
+ if ((_eindex_ = winh_eventindex(event->type)) == -1)
+ return(1);
+ if (event_mask == NoEventMask)
+ event_mask = event_info[_eindex_].mask;
+ if (source == (Winh *) NULL) {
+ /* deliver event to all windows in hierarchy */
+ _event_ = event;
+ _event_mask_ = event_mask;
+ return(winh_walk((Winh *) NULL, 0, _winh_plant));
+ }
+ /* search for event window */
+ for (winh = source; winh != (Winh *) NULL; winh = winh->parent) {
+ int found = 0;
+ Winhc *winhc;
+
+ /* search for selecting clients */
+ for (winhc = winh->clients; winhc != (Winhc *) NULL; winhc = winhc->next) {
+ if (winhc->event_mask & event_mask) {
+ found++;
+ ADD_TO_EXPECTED(winhc, winh, event);
+ }
+ }
+ if (found)
+ break; /* this is the event window */
+ if (!(winhmask & WINH_DEL_PROPOGATE) &&
+ !(event_info[_eindex_].info & EC_PROPS))
+ break; /* there is no propagation */
+ if (winh->valuemask & CWDontPropagate &&
+ (winh->attributes.do_not_propagate_mask & event_mask))
+ break; /* propagation of this event turned off */
+ }
+ return(0);
+}
+
+static int
+_winh_plant(winh)
+Winh *winh;
+{
+ long emask;
+ Winhc *winhc;
+
+ emask = event_info[_eindex_].mask;
+ for (winhc = winh->clients; winhc != (Winhc *) NULL; winhc = winhc->next) {
+ /* add to expected lists if selected */
+ if (_event_mask_ == NoEventMask ||
+ emask == NoEventMask ||
+ (winhc->event_mask & _event_mask_)) {
+ ADD_TO_EXPECTED(winhc, winh, _event_);
+ }
+ }
+ return(0);
+}
+
+/*
+ * addto - add event to end of specified Winhe list
+ * returns pointer to beginning of list
+ */
+static Winhe *
+addto(winhe, event)
+Winhe *winhe;
+XEvent *event;
+{
+ Winhe *head = winhe;
+ Winhe *last;
+
+ /* locate end of list */
+ if (winhe == (Winhe *) NULL)
+ last = (Winhe *) NULL;
+ else {
+ while (winhe->next != (Winhe *) NULL)
+ winhe = winhe->next;
+ last = winhe;
+ }
+ /* allocate memory for new member */
+ winhe = (Winhe *) winhmalloc(sizeof(*winhe), "addto");
+ if (winhe == (Winhe *) NULL)
+ return((Winhe *) NULL);
+ winhe->event = (XEvent *) winhmalloc(sizeof(*(winhe->event)), "addto");
+ if (winhe->event == (XEvent *) NULL) {
+ free(winhe);
+ return((Winhe *) NULL);
+ }
+ *(winhe->event) = *event;
+ winhe->sequence = sequence;
+ winhe->flags = 0;
+ winhe->next = (Winhe *) NULL;
+ if (head == (Winhe *) NULL)
+ head = winhe;
+ if (last != (Winhe *) NULL)
+ last->next = winhe;
+ return(head);
+}
+
+/*
+ * winh_pending - return number of events in heirarchy event queue
+ */
+int
+winh_pending(expected)
+int expected;
+{
+ return(expected ? expected_events : sequence);
+}
+
+/*
+ * winh_harvest - move events from event queue into heirarchy
+ *
+ * ASSUMES: Caller has XSync'd as is necessary.
+ *
+ * o move all events in event queue to internal event queue.
+ * o link up these events in delivered lists
+ * o maintain event sequence information
+ * o maintain high and low sequence counts for each event type
+ * o maintain event count statistics
+ */
+int
+winh_harvest(display, winh)
+Display *display;
+Winh *winh;
+{
+ int i;
+ int status = 0;
+ Winh *prev = (Winh *) NULL;
+ Window prevwindow = WINH_BAD;
+
+ while (XPending(display) > 0) {
+ for (i = XPending(display); i > 0; i--) {
+ Winh *ptr;
+ XEvent event_return;
+ int j;
+
+ sequence++;
+ XNextEvent(display, &event_return);
+ /*
+ * Update event statistics
+ */
+ j = winh_eventindex(event_return.type);
+ if (j == -1)
+ return(1);
+ winh_event_stats[j].high = sequence;
+ if (!winh_event_stats[j].count)
+ winh_event_stats[j].low = sequence;
+ winh_event_stats[j].count++;
+ if (event_return.type == KeymapNotify) {
+ if (prev == (Winh *) NULL) {
+ delete("KeymapNotify without preceeding EnterNotify or FocusIn event");
+ status = 1;
+ continue;
+ }
+ ptr = prev;
+ event_return.xany.window = prevwindow;
+ }
+ else
+ {
+ ptr = winh_find(winh, event_return.xany.window);
+ if (ptr == (Winh *) NULL) {
+ report("Event type %s received on window (0x%x) outside of specified hierarchy", eventname(event_return.type), event_return.xany.window);
+ delete("Event received on unsupported window");
+ return(1);
+ }
+ prev = ptr;
+ }
+ if ((winh_qdel = addto(winh_qdel, &event_return)) == (Winhe *) NULL)
+ return(1);
+ if ((ptr->delivered = addto(ptr->delivered, &event_return)) == (Winhe *) NULL)
+ return(1);
+ prevwindow = event_return.xany.window;
+ }
+ }
+ return(status);
+}
+
+/*
+ * winh_weed - check heirarchy for undesirable or missing events
+ */
+int
+winh_weed(winh, event_type, winhmask)
+Winh *winh;
+int event_type;
+long winhmask;
+{
+ _winhmask_ = winhmask;
+ _event_type_ = event_type;
+ return(winh_walk(winh, 0, _winh_weed));
+}
+
+static int
+_winh_weed(winh)
+Winh *winh;
+{
+ int status = 0;
+
+ if (_winhmask_ & WINH_WEED_IDENTITY) {
+ Winhe *e = winh->expected;
+
+ /* for each member in the expected list... */
+ for (; e != (Winhe *) NULL; e = e->next) {
+ Winhe *d = winh->delivered;
+
+ /* search for a matching member in delivered list */
+ for (; d != (Winhe *) NULL; d = d->next) {
+ if (e->event->type == d->event->type &&
+ e->event->xany.window == d->event->xany.window &&
+ e->event->xany.display == d->event->xany.display) {
+ if (!(d->flags & (WEED_MARKED|WEED_IGNORE))) {
+ d->flags |= WEED_MARKED;
+ e->flags |= WEED_MARKED;
+ break;
+ }
+ debug(4, "0x%x delivered flags: 0x%x",
+ winh->window, d->flags);
+ }
+ }
+ if (d == (Winhe *) NULL) {
+ report("Expected %s event on window 0x%x from client 0x%x",
+ eventname(e->event->type),
+ winh->window,
+ e->event->xany.display);
+ status = 1;
+ }
+ }
+ /* verify we expected all the events that were delivered */
+ e = winh->delivered;
+ for (; e != (Winhe *) NULL; e = e->next)
+ if (!(e->flags & (WEED_MARKED|WEED_IGNORE))) {
+ report("Unexpectedly delivered %s event on 0x%x window",
+ eventname(e->event->type), winh->window);
+ status = 1;
+ }
+ }
+ else {
+ delete("Unsupported winh_weed mask: 0x%x", _winhmask_);
+ return(-1);
+ }
+ return(status);
+}
+
+/*
+ * winh_ignore_event - ignore an event type while weeding
+ */
+int
+winh_ignore_event(winh, event_type, winhmask)
+Winh *winh;
+int event_type;
+long winhmask;
+{
+ _event_type_ = event_type;
+ _winhmask_ = winhmask;
+ return(winh_walk(winh, 0, _winh_ignore_event));
+}
+
+static int
+_winh_ignore_event(winh)
+Winh *winh;
+{
+ Winhe *d = winh->delivered;
+
+ /* search for all matching events in delivered list */
+ for (; d != (Winhe *) NULL; d = d->next) {
+ if (d->event->type == _event_type_)
+ d->flags |= WEED_IGNORE;
+ }
+ return(0);
+}
+
+/*
+ * winh_selectinput - update hierarchy to reflect event selection
+ */
+int
+winh_selectinput(display, winh, event_mask)
+Display *display;
+Winh *winh;
+long event_mask;
+{
+ _display_ = display;
+ _event_mask_ = event_mask;
+ if (winh == (Winh *) NULL)
+ return(winh_walk((Winh *) NULL, 0, _winh_selectinput));
+ return(_winh_selectinput(winh));
+}
+
+static int
+_winh_selectinput(winh)
+Winh *winh;
+{
+ Winhc *cl, *last;
+
+ if (winh == (Winh *) NULL) {
+ delete("NULL winh in _winh_selectinput");
+ return(-1);
+ }
+ if (!(winh->winhmask & WINH_CREATED)) {
+ delete("Corresponding window not created in _winh_selectinput");
+ return(-1);
+ }
+ XSelectInput(_display_, winh->window, _event_mask_);
+ /* See if this client is already in client list. */
+ for (cl = winh->clients; cl != (Winhc *) NULL; cl = cl->next)
+ if (cl->display == _display_)
+ break;
+ else
+ last = cl;
+ if (cl == (Winhc *) NULL) {
+ if (_event_mask_ == NoEventMask)
+ return(0); /* nothing of note */
+ /* New client, append to client list. */
+ cl = (Winhc *) winhmalloc(sizeof(*cl), "winh_selectinput");
+ if (cl == (Winhc *) NULL)
+ return(-1);
+ if (winh->clients == (Winhc *) NULL)
+ winh->clients = cl;
+ else
+ last->next = cl;
+ cl->display = _display_;
+ cl->next = (Winhc *) NULL;
+ cl->node = winh;
+ }
+ else if (_event_mask_ == NoEventMask) {
+ /* delete entry from list */
+ if (cl == winh->clients) {
+ /* first in list */
+ winh->clients = cl->next;
+ }
+ else {
+ /* not first in list */
+ last->next = cl->next;
+ }
+ free(cl);
+ return(0);
+ }
+ cl->event_mask = _event_mask_;
+ return(0);
+}
+
+/*
+ * winh_changewindowattributes - update hierarchy to reflect event selection
+ */
+int
+winh_changewindowattributes(display, winh, valuemask, attributes)
+Display *display;
+Winh *winh;
+unsigned long valuemask;
+XSetWindowAttributes *attributes;
+{
+ if (winh == (Winh *) NULL) {
+ delete("NULL winh in winh_changewindowattributes");
+ return(-1);
+ }
+ if (!(winh->winhmask & WINH_CREATED)) {
+ delete("Corresponding window not created in winh_changewindowattributes");
+ return(-1);
+ }
+ /*
+ * redirect event_mask requests through winh_selectinput()
+ */
+ if (valuemask & CWEventMask) {
+ int status;
+
+ status = winh_selectinput(display, winh, attributes->event_mask);
+ if (status)
+ return(status);
+ valuemask &= ~CWEventMask;
+ }
+ winh->valuemask |= valuemask;
+ if (valuemask & CWBackPixmap)
+ winh->attributes.background_pixmap = attributes->background_pixmap;
+ if (valuemask & CWBackPixel)
+ winh->attributes.background_pixel = attributes->background_pixel;
+ if (valuemask & CWBorderPixmap)
+ winh->attributes.border_pixmap = attributes->border_pixmap;
+ if (valuemask & CWBorderPixel)
+ winh->attributes.border_pixel = attributes->border_pixel;
+ if (valuemask & CWBitGravity)
+ winh->attributes.bit_gravity = attributes->bit_gravity;
+ if (valuemask & CWWinGravity)
+ winh->attributes.win_gravity = attributes->win_gravity;
+ if (valuemask & CWBackingStore)
+ winh->attributes.backing_store = attributes->backing_store;
+ if (valuemask & CWBackingPlanes)
+ winh->attributes.backing_planes = attributes->backing_planes;
+ if (valuemask & CWBackingPixel)
+ winh->attributes.backing_pixel = attributes->backing_pixel;
+ if (valuemask & CWOverrideRedirect)
+ winh->attributes.override_redirect = attributes->override_redirect;
+ if (valuemask & CWSaveUnder)
+ winh->attributes.save_under = attributes->save_under;
+ if (valuemask & CWDontPropagate)
+ winh->attributes.do_not_propagate_mask = attributes->do_not_propagate_mask;
+ if (valuemask & CWColormap)
+ winh->attributes.colormap = attributes->colormap;
+ if (valuemask & CWCursor)
+ winh->attributes.cursor = attributes->cursor;
+ XChangeWindowAttributes(display, winh->window, winh->valuemask, &(winh->attributes));
+ return(0);
+}
+
+/*
+ * getguardian - return guardian corresponding to specified display
+ */
+static Winh *
+getguardian(display)
+Display *display;
+{
+ Winh *winh;
+
+ if (guardian == (Winh *) NULL) {
+ delete("Uninitialized guardian in getguardian()");
+ return((Winh *) NULL);
+ }
+ for (winh = guardian; winh != (Winh *) NULL; winh = winh->nextsibling)
+ if (winh->screen == DefaultScreen(display))
+ return(winh);
+ return((Winh *) NULL);
+}
+
+/*
+ * initguardian - return an initialize guardian
+ * consult config.alt_screen
+ */
+static Winh *
+initguardian(display)
+Display *display;
+{
+ Winh *winh;
+ Winh *awinh;
+
+ (void) free_eventlist();
+ if ((winh = (Winh *) winhmalloc(sizeof(*winh), "initguardian")) == (Winh *) NULL)
+ return((Winh *) NULL);
+ winh->window = DRW(display);
+ winh->parent = (Winh *) NULL;
+ winh->nextsibling = (Winh *) NULL;
+ winh->prevsibling = (Winh *) NULL;
+ winh->firstchild = (Winh *) NULL;
+ winh->numchildren = 0;
+ winh->valuemask = 0;
+ winh->winhmask = WINH_GUARDIAN | WINH_IGNORE_GEOMETRY | WINH_CREATED;
+ winh->clients = (Winhc *) NULL;
+ winh->expected = (Winhe *) NULL;
+ winh->delivered = (Winhe *) NULL;
+ winh->depth = 0;
+ winh->screen = DefaultScreen(display);
+ winh->winhg.border_width = 1;
+ winh->winhg.area.x = 2;
+ winh->winhg.area.y = 2;
+ winh->winhg.area.width = DisplayWidth(display, winh->screen);
+ winh->winhg.area.height = DisplayHeight(display, winh->screen);
+ regid(display, (union regtypes *) &winh, REG_WINH);
+ /* determine whether or not an alternate screen is supported */
+ if (config.alt_screen == -1 || config.alt_screen == winh->screen)
+ return(winh);
+ if ((awinh = (Winh *) winhmalloc(sizeof(*awinh), "initguardian")) == (Winh *) NULL)
+ return((Winh *) NULL);
+ awinh->screen = config.alt_screen;
+ awinh->window = RootWindow(display, awinh->screen);
+ awinh->parent = (Winh *) NULL;
+ awinh->nextsibling = (Winh *) NULL;
+ awinh->prevsibling = (Winh *) NULL;
+ awinh->firstchild = (Winh *) NULL;
+ awinh->numchildren = 0;
+ awinh->valuemask = 0;
+ awinh->winhmask = winh->winhmask;
+ awinh->clients = (Winhc *) NULL;
+ awinh->expected = (Winhe *) NULL;
+ awinh->delivered = (Winhe *) NULL;
+ awinh->depth = 0;
+ awinh->winhg.border_width = 1;
+ awinh->winhg.area.x = 2;
+ awinh->winhg.area.y = 2;
+ awinh->winhg.area.width = DisplayWidth(display, awinh->screen);
+ awinh->winhg.area.height = DisplayHeight(display, awinh->screen);
+ /* link up the siblings */
+ add_sibling(winh, awinh);
+ return(winh);
+}
+
+/*
+ * add_sibling - add a sibling to the end of a sibling list
+ */
+static void
+add_sibling (sfirst, s)
+Winh *sfirst, *s;
+{
+ /* find last sibling in list */
+ while (sfirst->nextsibling != (Winh *) NULL)
+ sfirst = sfirst->nextsibling;
+ sfirst->nextsibling = s;
+ s->nextsibling = (Winh *) NULL;
+ s->prevsibling = sfirst;
+}
+
+/*
+ * add_child - add child to parent, initializing relevant data
+ */
+static void
+add_child(parent, child)
+Winh *parent, *child;
+{
+
+ child->parent = parent;
+ child->numchildren = 0;
+ child->depth = parent->depth + 1;
+ child->screen = parent->screen;
+ child->firstchild = (Winh *) NULL;
+ if (parent->firstchild == (Winh *) NULL) {
+ parent->firstchild = child;
+ child->nextsibling = (Winh *) NULL;
+ child->prevsibling = (Winh *) NULL;
+ }
+ else
+ add_sibling(parent->firstchild, child);
+ parent->numchildren++;
+}
+
+/*
+ * winhmalloc - memory allocation occurs here
+ */
+static char *
+winhmalloc(bytes, msg)
+unsigned int bytes;
+char *msg;
+{
+ char *new;
+
+ new = (char *) malloc(bytes);
+ if (new == (char *) NULL) {
+ report("Memory allocation failed in %s: %d bytes", msg, bytes);
+ delete("malloc failed in winh routines");
+ }
+ return(new);
+}
+
+/*
+ * winh_free - free winh resources by walking hierarchy calling _winh_free
+ */
+void
+winh_free(winh)
+Winh *winh;
+{
+ (void) free_eventlist();
+ if (winh == (Winh *) NULL)
+ winh = guardian;
+ if (winh == (Winh *) NULL)
+ return;
+ (void) winh_walk(winh, 1, _winh_free);
+ guardian = (Winh *) NULL;
+}
+
+static int
+_winh_free(winh)
+Winh *winh;
+{
+ Winhc *cl;
+
+ /* free the client list */
+ for (cl = winh->clients; cl != (Winhc *) NULL;) {
+ Winhc *next = cl->next;
+
+ free(cl);
+ cl = next;
+ }
+ /* free this node */
+ free(winh);
+ return(0);
+}
+
+/*
+ * winhe_free - free members in specified Winhe list
+ */
+static void
+winhe_free(winhe)
+Winhe *winhe;
+{
+ while (winhe != (Winhe *) NULL) {
+ Winhe *next = winhe->next;
+
+ free(winhe->event);
+ free(winhe);
+ winhe = next;
+ }
+}
+
+static int
+_free_eventlist(winh)
+Winh *winh;
+{
+ winhe_free(winh->expected);
+ winh->expected = (Winhe *) NULL;
+ winhe_free(winh->delivered);
+ winh->delivered = (Winhe *) NULL;
+ return(0);
+}
+
+/*
+ * free all Winhe-type event lists
+ */
+static int
+free_eventlist()
+{
+ int i;
+
+ for (i=0; i<NELEM(winh_event_stats); i++) {
+ winh_event_stats[i].high = -1;
+ winh_event_stats[i].low = -1;
+ winh_event_stats[i].count = 0;
+ }
+ /* Free global queue members */
+ if (winh_qexp != (Winhe *) NULL) {
+ winhe_free(winh_qexp);
+ winh_qexp = (Winhe *) NULL;
+ }
+ if (winh_qdel != (Winhe *) NULL) {
+ winhe_free(winh_qdel);
+ winh_qdel = (Winhe *) NULL;
+ }
+ if (guardian != (Winh *) NULL &&
+ (i = winh_walk((Winh *) NULL, 0, _free_eventlist)))
+ return(i);
+ sequence = 0;
+ expected_events = 0;
+ return(0);
+}
+
+/*
+ * winh_walk - descend through the hierarchy calling procedure at each node
+ * procedure is passed the current hierarchy node
+ * depthfirst is set to specify a depth-first traversal
+ * stop walk when procedure returns non-zero or
+ * tree is completely traversed
+ *
+ * returns non-zero if procedure returned non-zero, otherwise
+ * zero is returned
+ *
+ * if winh is NULL, then guardian is assumed
+ * if procedure is NULL, then winh_print is assumed
+ *
+ * This might be simpler if there were a parent to all guardians.
+ */
+int
+winh_walk(winh, depthfirst, procedure)
+Winh *winh;
+int depthfirst;
+int (*procedure)();
+{
+ int depth;
+ extern int winh_print();
+
+ if (winh == (Winh *) NULL) {
+ winh = guardian;
+ depth = 1;
+ }
+ else
+ depth = 0;
+ if (winh == (Winh *) NULL)
+ return(-1);
+ if (procedure == (int (*)()) NULL)
+ procedure = winh_print;
+ _winh_walk_first_time_ = 1;
+ if (depthfirst)
+ return(_winh_walk_depth(winh, procedure, depth));
+ else
+ return(_winh_walk(winh, procedure, depth));
+/*NOTREACHED*/
+}
+
+/*
+ * _winh_walk_depth - do a depth-first hierarchy walk
+ *
+ * take care to protect against procedure corrupting
+ * the current node.
+ */
+static int
+_winh_walk_depth(winh, procedure, depth)
+Winh *winh;
+int (*procedure)();
+int depth;
+{
+ int i;
+ int firstborn;
+ Winh *sibling;
+
+ /* process children first */
+ if (winh->firstchild != (Winh *) NULL)
+ if (i=_winh_walk_depth(winh->firstchild, procedure, depth+1))
+ return(i);
+ /* save next sibling and firstborn status */
+ firstborn = FIRSTBORN(winh);
+ sibling = winh->nextsibling;
+ /* process this node */
+ if (i=(*procedure)(winh))
+ return(i);
+ /* if not first in child list then we are done */
+ if (!firstborn)
+ return(0);
+ /* deal with siblings */
+ if (depth == 0)
+ return(0);
+ for (winh = sibling; winh != (Winh *) NULL; winh = sibling) {
+ sibling = winh->nextsibling;
+ if (i=_winh_walk_depth(winh, procedure, depth+1))
+ return(i);
+ }
+ return(0);
+}
+
+static int
+_winh_walk(winh, procedure, depth)
+Winh *winh;
+int (*procedure)();
+int depth;
+{
+ int i;
+
+ /* process this node */
+ if (i=(*procedure)(winh))
+ return(i);
+ /* ignore siblings if appropriate */
+ if (depth == 0) {
+ if (winh->firstchild != (Winh *) NULL)
+ if (i=_winh_walk(winh->firstchild, procedure, depth+1))
+ return(i);
+ return(0);
+ }
+ /* deal with siblings */
+ if (FIRSTBORN(winh)) {
+ Winh *ptr = winh->nextsibling;
+
+ for (; ptr != (Winh *) NULL; ptr = ptr->nextsibling)
+ if (i=(*procedure)(ptr))
+ return(i);
+ /* deal with children of each sibling */
+ for (; winh != (Winh *) NULL; winh = winh->nextsibling) {
+ if (winh->firstchild == (Winh *) NULL)
+ continue;
+ if (i=_winh_walk(winh->firstchild, procedure, depth+1))
+ return(i);
+ }
+ }
+ return(0);
+}
+
+/*
+ * winh_climb - climb from start to stop
+ */
+int
+winh_climb(start, stop, procedure)
+Winh *start;
+Winh *stop;
+int (*procedure)();
+{
+ Winh *current, *previous;
+
+ if (start == (Winh *) NULL) {
+ delete("NULL start point in winh_climb");
+ return(-1);
+ }
+ if (stop == (Winh *) NULL) {
+ delete("NULL stop point in winh_climb");
+ return(-1);
+ }
+ current = start;
+ previous = (Winh *) NULL;
+ do {
+ int status;
+
+ status = (*procedure)(start, stop, current, previous);
+ if (status)
+ return(status);
+ previous = current;
+ current = current->parent;
+ } while (current != (Winh *) NULL && previous != stop);
+ if (previous != stop) {
+ report("winh_climb climbed from 0x%x to top without reaching 0x%x",
+ start->window, stop->window);
+ delete("Stop point not encountered in winh_climb");
+ return(-1);
+ }
+ return(0);
+}
+
+/*
+ * winh_print - print data associated with specified node
+ * returns 1 on error, else returns 0
+ */
+static int
+winh_print(winh)
+Winh *winh;
+{
+ int i;
+ char in[512];
+ static struct {
+ int value;
+ char *name;
+ } winhmaskinfo[] = {
+ {WINH_CREATED, "WINH_CREATED"},
+ {WINH_DEL_PROPOGATE, "WINH_DEL_PROPOGATE"},
+ {WINH_DEL_SEND_EVENT, "WINH_DEL_SEND_EVENT"},
+ {WINH_GUARDIAN, "WINH_GUARDIAN"},
+ {WINH_INHERIT, "WINH_INHERIT"},
+ {WINH_MAP, "WINH_MAP"},
+ {WINH_WEED_IDENTITY, "WINH_WEED_IDENTITY"},
+ {WINH_WEED_MINIMUM, "WINH_WEED_MINIMUM"},
+ {WINH_WEED_TYPE, "WINH_WEED_TYPE"},
+ {WINH_IGNORE_GEOMETRY, "WINH_IGNORE_GEOMETRY"}
+ }, attrinfo[] = {
+ {CWBackPixmap, "CWBackPixmap"},
+ {CWBackPixel, "CWBackPixel"},
+ {CWBorderPixmap, "CWBorderPixmap"},
+ {CWBorderPixel, "CWBorderPixel"},
+ {CWBitGravity, "CWBitGravity"},
+ {CWWinGravity, "CWWinGravity"},
+ {CWBackingStore, "CWBackingStore"},
+ {CWBackingPlanes, "CWBackingPlanes"},
+ {CWBackingPixel, "CWBackingPixel"},
+ {CWOverrideRedirect, "CWOverrideRedirect"},
+ {CWSaveUnder, "CWSaveUnder"},
+ {CWEventMask, "CWEventMask"},
+ {CWDontPropagate, "CWDontPropagate"},
+ {CWColormap, "CWColormap"},
+ {CWCursor, "CWCursor"}
+ };
+
+ if (_winh_walk_first_time_) {
+ _winh_walk_first_time_ = 0;
+ (void) fprintf(stderr, "\n\n\n");
+ }
+ if (winh == (Winh *) NULL)
+ return(-1);
+ /* indent a tab per depth */
+ for (i = 0; i < (NELEM(in)-1) && i < winh->depth; i++)
+ in[i] = '\t';
+ in[i] = '\0';
+ (void) fprintf(stderr, "%s========================================\n",
+ in);
+ if (winh->window == WINH_BAD)
+ (void) fprintf(stderr, "%sWindow: None",
+ in);
+ else
+ (void) fprintf(stderr, "%sWindow: 0x%x",
+ in, winh->window);
+ if (winh->parent == (Winh *) NULL)
+ (void) fprintf(stderr, ", Parent: None\n");
+ else
+ (void) fprintf(stderr, ", Parent: 0x%x\n",winh->parent->window);
+ (void) fprintf(stderr, "%sFirstborn: %s, Children: %2d\n",
+ in,
+ (FIRSTBORN(winh) ? "Yes" : "No "), winh->numchildren);
+ (void) fprintf(stderr, "%sValuemask: 0x%04x, Winhmask: 0x%04x\n",
+ in,
+ winh->valuemask, winh->winhmask);
+ if (winh->valuemask != 0) {
+ (void) fprintf(stderr, "%sValuemask strings:\n",
+ in);
+ for (i = 0; i<NELEM(attrinfo); i++)
+ if (winh->valuemask & attrinfo[i].value)
+ (void) fprintf(stderr, "%s %s\n",
+ in,
+ attrinfo[i].name);
+ }
+ if (winh->winhmask != WINH_NOMASK) {
+ (void) fprintf(stderr, "%sWinhmask strings:\n",
+ in);
+ for (i = 0; i<NELEM(winhmaskinfo); i++)
+ if (winh->winhmask & winhmaskinfo[i].value)
+ (void) fprintf(stderr, "%s %s\n",
+ in,
+ winhmaskinfo[i].name);
+ }
+ (void) fprintf(stderr, "%sClients: %s, Expected: %s, Delivered: %s\n",
+ in,
+ ((winh->clients == (Winhc *) NULL) ? "No " : "Yes"),
+ ((winh->expected == (Winhe *) NULL) ? "No " : "Yes"),
+ ((winh->delivered == (Winhe *) NULL) ? "No " : "Yes"));
+ (void) fprintf(stderr, "%sDepth: %2d, Screen: %2d\n",
+ in,
+ winh->depth, winh->screen);
+ if (!(winh->winhmask & WINH_IGNORE_GEOMETRY)) {
+ (void) fprintf(stderr, "%s%dx%d (%d,%d) border width: %d\n",
+ in,
+ winh->winhg.area.width, winh->winhg.area.height,
+ winh->winhg.area.x, winh->winhg.area.y,
+ winh->winhg.border_width);
+ }
+ return(0);
+}
+
+/*
+ * winh_eventindex - return the index into the event arrays
+ * corresponding to the specified event type
+ *
+ * return -1 if unrecognized event_type
+ */
+int
+winh_eventindex(event_type)
+int event_type;
+{
+ int i;
+
+ for (i=0; i<NELEM(event_info); i++)
+ if (event_info[i].type == event_type)
+ return(i);
+ report("Unrecognized event type: %d", event_type);
+ delete("Bad event type in winh routines.");
+ return(-1);
+}
+
+/*
+ * winh_ordercheck - return 0 if all before events occur before the after events
+ * return 1 if they do not
+ * return -1 on error
+ */
+int
+winh_ordercheck(before, after)
+int before;
+int after;
+{
+ int ibefore, iafter;
+
+ if (before == after) {
+ report("before and after set to %s", eventname(before));
+ delete("identical event types in winh_ordercheck");
+ return(-1);
+ }
+ if ((ibefore = winh_eventindex(before)) == -1)
+ return(-1);
+ if ((iafter = winh_eventindex(after)) == -1)
+ return(-1);
+ if (winh_event_stats[ibefore].count == 0) {
+ report("No %s events delivered", eventname(before));
+ delete("Event ordering could not be compared due to missing events");
+ return(-1);
+ }
+ else if (winh_event_stats[iafter ].count == 0) {
+ report("No %s events delivered", eventname(after));
+ delete("Event ordering could not be compared due to missing events");
+ return(-1);
+ }
+ if (winh_event_stats[ibefore].high > winh_event_stats[iafter].low) {
+ report("%s events delivered before %s events",
+ eventname(after), eventname(before));
+ return(1);
+ }
+ return(0);
+}
+
+/*
+ * winh - create a standard symmetrical window hierarchy
+ */
+int
+winh(display, depth, winhmask)
+Display *display;
+int depth;
+long winhmask;
+{
+ int status;
+
+ debug(4, "winh(): depth %d, winhmask 0x%x", depth, winhmask);
+ status = _winh(display, (Winh *) NULL, depth - 1, winhmask);
+ if (status)
+ return(status);
+ if (winhmask & WINH_BOTH_SCREENS) {
+ if (config.alt_screen != -1 &&
+ config.alt_screen != guardian->screen) {
+
+ status = _winh(display, guardian->nextsibling, depth - 1, winhmask);
+ if (status)
+ return(status);
+ }
+ }
+ return(winh_create(display, (Winh *) NULL, winhmask));
+}
+
+static int
+_winh(display, parent, depth, winhmask)
+Display *display;
+Winh *parent;
+int depth;
+long winhmask;
+{
+ int i;
+
+ if (depth < 0)
+ return(0);
+ for (i=0; i<4; i++) {
+ Winh *ptr;
+ int status;
+
+ ptr = winh_adopt(display, parent, 0L, (XSetWindowAttributes *) NULL, (Winhg *) NULL, winhmask);
+ if (ptr == (Winh *) NULL) {
+ delete("Could not create hierarchy member (%d,%d)", depth, i);
+ return(-1);
+ }
+ status = _winh(display, ptr, depth-1, winhmask);
+ if (status)
+ return(status);
+ }
+ return(0);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/xtestlib.h b/xc/test/xsuite/xtest/src/lib/xtestlib.h
new file mode 100644
index 000000000..51fc6e53f
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/xtestlib.h
@@ -0,0 +1,396 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+
+/*
+ * Structure to define an area by position and size.
+ */
+struct area {
+ int x;
+ int y;
+ unsigned int width;
+ unsigned int height;
+};
+
+/*
+ * Flags for the checkarea() function.
+ */
+#define CHECK_IN 0x1 /* Check inside the area */
+#define CHECK_OUT 0x2 /* Check outside the area */
+#define CHECK_ALL (CHECK_IN|CHECK_OUT) /* Check both in and out */
+#define CHECK_DIFFER 0x4 /* Check that areas differ */
+
+/*
+ * Flags for the resetvinf() function.
+ */
+#define VI_WIN 0x1 /* Return visuals for windows */
+#define VI_PIX 0x2 /* Return depths for pixmaps */
+#define VI_WIN_PIX (VI_WIN|VI_PIX) /* Return visuals and depths */
+#define VI_ALT_WIN 0x4 /* Return visuals for windows
+ on alternate screen */
+#define VI_ALT_PIX 0x8 /* Return depts for pixmaps
+ on alternate screen */
+#define VI_ALT_WIN_PIX (VI_ALT_WIN|VI_ALT_PIX)
+ /* Return alternate visuals & depths */
+
+/*
+ * Defines for the notmember() function that is used to test BadValue
+ */
+#define NM_GREATER 0
+#define NM_LESS 1
+#define NM_NEGATIVE 2
+#define NM_LARGE 3
+#define NM_LEN 4
+
+/*
+ * Structure to hold the connections between names, XFontStruct's and
+ * the associated string.
+ */
+struct fontinfo {
+ char *name; /* Font name */
+ XFontStruct *fontstruct; /* pointer to known good XFontStruct */
+ char **string; /* Copyright string */
+ short flag; /* for use by lstfnt* */
+};
+
+/*
+ * The following defines and typedef's are related to block().
+ */
+
+#define BLOCK_FILE "block_file"
+/*
+ * predicate procedure argument types
+ */
+typedef Bool (*Predicate) (
+#if TEST_ANSI
+ Display *display,
+ XEvent *error_event,
+ char *arg
+#endif
+);
+
+/*
+ * The type of the procedure argument to block().
+ *
+ * It should be noted that some of these function definitions are
+ * listed as returning int's where the return value is not actually
+ * specified by Xlib (so, they therefore default to int).
+ */
+typedef union {
+ int (*a0)(
+#if TEST_ANSI
+ /*
+ * The arguments have been commented out at present, because
+ * some compilers have problems with this.
+ */
+ /* Display *d, int a */
+#endif
+ );
+ int (*a1)(
+#if TEST_ANSI
+ /* Display *d, XEvent *e, Predicate p, char *cp */
+#endif
+ );
+ int (*a2)(
+#if TEST_ANSI
+ /* Display *d, long l, XEvent *ep */
+#endif
+ );
+ int (*a3)(
+#if TEST_ANSI
+ /* Display *d, XEvent *e */
+#endif
+ );
+ int (*a4)(
+#if TEST_ANSI
+ /* Display *d, Window w, long l, XEvent *ep */
+#endif
+ );
+ int (*a5)(
+#if TEST_ANSI
+ /* Display *d */
+#endif
+ );
+} Block_Proc;
+
+/*
+ * Convenience constants for accessing various types of function pointers
+ */
+#define XEventsQueued_Like_Proc blocker.a0
+#define XIfEvent_Like_Proc blocker.a1
+#define XMaskEvent_Like_Proc blocker.a2
+#define XNextEvent_Like_Proc blocker.a3
+#define XPeekEvent_Like_Proc blocker.a3
+#define XPeekIfEvent_Like_Proc blocker.a1
+#define XWindowEvent_Like_Proc blocker.a4
+#define XPending_Like_Proc blocker.a5
+
+/*
+ * The type of the info argument to block().
+ */
+typedef struct _Block_Info {
+ int p_type;
+ Block_Proc blocker;
+ int int_return;
+ XEvent event_return;
+ union {
+ struct { /* XEventsQueued */
+ int mode;
+ } a0;
+ struct { /* XIfEvent, XPeekIfEvent */
+ Predicate predicate;
+ char* arg;
+ } a1;
+ struct { /* XMaskEvent */
+ long event_mask;
+ } a2;
+ struct { /* XWindowEvent */
+ Window w;
+ long event_mask;
+ } a3;
+ } u;
+} *Block_InfoP, Block_Info;
+
+/*
+ * Convenience constants for getting at the various argument types.
+ */
+#define XEventsQueued_Args u.a0
+#define XIfEvent_Args u.a1
+#define XMaskEvent_Args u.a2
+/*
+ * These have no (and need no) corresponding entry in the argument union.
+#define XNextEvent_Args
+#define XPeekEvent_Args
+#define XPending_Args
+*/
+#define XPeekIfEvent_Args u.a1
+#define XWindowEvent_Args u.a3
+
+/*
+ * Convenience constants for checking the various argument types.
+ */
+#define Ignore_Event_Return (1<<15)
+#define XEventsQueued_Like ((1<<0)|Ignore_Event_Return)
+#define XIfEvent_Like (1<<1)
+#define XMaskEvent_Like (1<<2)
+#define XNextEvent_Like (1<<3)
+#define XPeekEvent_Like (1<<4)
+#define XPeekIfEvent_Like (1<<5)
+#define XWindowEvent_Like (1<<6)
+#define XPending_Like ((1<<7)|Ignore_Event_Return)
+
+/*
+ * Macros to set some of the info fields
+ */
+#define XEventsQueued_Type(i, m) \
+ i.XEventsQueued_Like_Proc = XEventsQueued;\
+ i.p_type = XEventsQueued_Like;\
+ i.XEventsQueued_Args.mode = m
+#define XIfEvent_Type(i, p, a) \
+ i.XIfEvent_Like_Proc = XIfEvent;\
+ i.p_type = XIfEvent_Like;\
+ i.XIfEvent_Args.predicate = p;\
+ i.XIfEvent_Args.arg = a
+#define XMaskEvent_Type(i, m) \
+ i.XMaskEvent_Like_Proc = XMaskEvent;\
+ i.p_type = XMaskEvent_Like;\
+ i.XMaskEvent_Args.event_mask = m
+#define XNextEvent_Type(i) \
+ i.XNextEvent_Like_Proc = XNextEvent;\
+ i.p_type = XNextEvent_Like
+#define XPeekEvent_Type(i) \
+ i.XPeekEvent_Like_Proc = XPeekEvent;\
+ i.p_type = XPeekEvent_Like
+#define XPeekIfEvent_Type(i, p, a) \
+ i.XPeekIfEvent_Like_Proc = XPeekIfEvent;\
+ i.p_type = XPeekIfEvent_Like;\
+ i.XPeekIfEvent_Args.predicate = p;\
+ i.XPeekIfEvent_Args.arg = a
+#define XWindowEvent_Type(i, w, m) \
+ i.XWindowEvent_Like_Proc = XWindowEvent;\
+ i.p_type = XWindowEvent_Like;\
+ i.XWindowEvent_Args.w = w;\
+ i.XWindowEvent_Args.event_mask = m
+#define XPending_Type(i) \
+ i.XPending_Like_Proc = XPending;\
+ i.p_type = XPending_Like
+
+/*
+ * The following defines and typedef's are related to winh.
+ */
+typedef struct {
+ int high;
+ int low;
+ int count;
+} Winhs;
+
+extern Winhs winh_event_stats[];
+
+typedef struct _Winhc {
+ Display *display; /* client identifier */
+ struct _Winhc *next; /* next client in client list */
+ struct _Winh *node; /* pointer to member in hierarchy */
+ long event_mask; /* mask of selected events */
+ long flags; /* used during hierarchy checking & traversal */
+} Winhc;
+
+typedef struct _Winhe {
+ XEvent *event; /* an event */
+ struct _Winhe *next; /* next associated event */
+ long sequence; /* sequence number */
+ long flags; /* used during hierarchy checking & traversal */
+} Winhe;
+
+typedef struct _Winhg {
+ struct area area;
+ int border_width; /* */
+} Winhg;
+
+typedef struct _Winh {
+ Window window; /* window ID */
+ struct _Winh *parent; /* ptr to parent in hierarchy, NULL if top */
+ struct _Winh *nextsibling; /* linked list of siblings */
+ struct _Winh *prevsibling; /* linked list of siblings */
+ struct _Winh *firstchild; /* linked list of children */
+ int numchildren; /* number of children */
+ unsigned long valuemask; /* mask corresponding to attributes */
+ XSetWindowAttributes attributes; /* */
+ long winhmask; /* Winh-specific flags */
+ Winhc *clients; /* linked list of interested clients */
+ Winhe *expected; /* linked list of expected events */
+ Winhe *delivered; /* linked list of delivered events */
+ int depth; /* depth in window hierarchy */
+ Winhg winhg; /* geometry hook */
+ int screen; /* only used for children of guardian */
+} Winh;
+
+extern Winh *guardian;
+extern Winhe *winh_qexp;
+extern Winhe *winh_qdel;
+
+/*
+ * winhmask values
+ */
+#define WINH_NOMASK (0L<<0)
+#define WINH_CREATED (1L<<0) /* window of node created */
+#define WINH_DEL_PROPOGATE (1L<<1) /* event propagates */
+#define WINH_DEL_SEND_EVENT (1L<<2) /* behave as would XSendEvent */
+#define WINH_GUARDIAN (1L<<3) /* a guardian node */
+#define WINH_INHERIT (1L<<4) /* use winhmask values from parent */
+#define WINH_MAP (1L<<5) /* map upon creation */
+#define WINH_WEED_IDENTITY (1L<<6) /* expected should equal delivered */
+#define WINH_WEED_MINIMUM (1L<<7)
+#define WINH_WEED_TYPE (1L<<8)
+#define WINH_IGNORE_GEOMETRY (1L<<9) /* winhg not initialized */
+#define WINH_BOTH_SCREENS (1L<<10)/* build hierarchy on both screens */
+
+#define WINH_BAD ((Window) -1)
+
+/*
+ * Pointer location management structure (pointer.c)
+ */
+typedef struct {
+ Window oroot; /* where the pointer was */
+ int ox, oy;
+ Window nroot; /* where the pointer moved to */
+ int nx, ny;
+} PointerPlace;
+
+/*
+ * Defines for the resource registering service.
+ */
+#define REG_IMAGE 0
+#define REG_WINDOW 1
+#define REG_PIXMAP 2
+#define REG_GC 3
+#define REG_COLORMAP 4
+#define REG_CURSOR 5
+#define REG_OPEN 6
+#define REG_WINH 7
+#define REG_POINTER 8
+#define REG_MALLOC 9
+#define REG_XMALLOC 10
+
+#define REG_REGION 11
+#define REG_MAX 12
+
+/* union of types that can be registered */
+union regtypes {
+ XImage *image;
+ Window window;
+ Pixmap pixmap;
+ GC gc;
+ Colormap colormap;
+ Cursor cursor;
+ Display *display;
+ Winh *winh;
+ PointerPlace *pointer;
+ char *malloc;
+ Region region;
+};
+
+/*
+ * Some event convenience macros.
+ */
+
+/* must be called after window, x, and y members are set! */
+#define ROOTCOORDSET(d, e) \
+ rootcoordset((d), (e)->window, DRW((d)), (e)->x, (e)->y, &((e)->x_root), &((e)->y_root))
+
+/* used when one wishes to check serial */
+#define CHECKEVENT(g, e) \
+ if (checkevent((g), (e)) || serialtest((g), (e)) == False) {\
+ report("Delivered event did not match expected event");\
+ FAIL;\
+ }\
+ else\
+ CHECK
+
+/*
+ * Structure for use with buildtree.
+ */
+struct buildtree {
+ char *name; /* Name */
+ char *pname; /* Parent's name */
+ Window wid; /* Window id */
+ struct buildtree *parent; /* pointer to parent */
+ unsigned long uflags; /* Flags for user of routines */
+ unsigned long opts; /* Internal flags renamed from 'flags' */
+ int num; /* number in list (only valid in list[0]) */
+ int x, y; /* Position */
+ unsigned int width, height; /* size */
+ unsigned int borderwidth; /* border width */
+};
+
+/*
+ * Flags for use in buildtree.
+ */
+#define BT_UNMAP 1 /* Window is unmapped */
+
+/*
+ * A structure for linking values and names. Used in the functions defined
+ * in lookupname.c.
+ */
+struct valname {
+ int val;
+ char *name;
+};
+
+/*
+ * Include the automaticaly generated prototypes.
+ */
+#include "xtlibproto.h"
diff --git a/xc/test/xsuite/xtest/src/lib/xthost.c b/xc/test/xsuite/xtest/src/lib/xthost.c
new file mode 100644
index 000000000..9e76f6ef0
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/xthost.c
@@ -0,0 +1,112 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+/*
+ * This file contains definitions of three items related to the
+ * mechanisms provided by the X server under test to add, get or remove
+ * hosts from the access control list. These are only used in the tests
+ * for those Xlib functions which use or modify the access control list.
+ *
+ * The host access control functions use the XHostAddress structure.
+ * You should refer to the Xlib documentation for your system, to
+ * determine the allowed formats for host addresses in an
+ * XHostAddress structure.
+ *
+ * This file should be edited if the default declarations are not correct
+ * for your system. Some defaults are provided for the FamilyInternet and
+ * FamilyDECnet types. Only the first has been tested by UniSoft.
+ * There is no guarantee that they will work correctly even if your
+ * system supports the indicated protocol family.
+ *
+ * This file should declare:
+ * 1. an array xthosts[] of at least 5 XHostAddress structures containing
+ * valid family,length,address triples.
+ * 2. an array xtbadhosts[] of at least 5 XHostAddress structures containing
+ * invalid family,length,address triples.
+ * 3. a function samehost() that compares two XHostAddress structures
+ * and returns True if they are equivalent.
+ *
+ * In general it may be necessary to declare the address parts separately
+ * if it is not possible or convenient to use string notation.
+ */
+
+#include "xtest.h"
+#include "Xlib.h"
+
+#define Internet
+
+#ifdef Internet
+XHostAddress xthosts[] = {
+ {FamilyInternet,4,"0000"},
+ {FamilyInternet,4,"ABCD"},
+ {FamilyInternet,4,"1000"},
+ {FamilyInternet,4,"0100"},
+ {FamilyInternet,4,"0010"},
+};
+
+XHostAddress xtbadhosts[] = {
+ {FamilyInternet,1,"0000"},
+ {FamilyInternet,1,"ABCD"},
+ {FamilyInternet,1,"1000"},
+ {FamilyInternet,1,"0100"},
+ {FamilyInternet,1,"0010"},
+};
+#endif
+
+#ifdef VMS
+/* Taken from t7, not tested by UniSoft */
+XHostAddress xthosts[] = {
+ {FamilyDECnet,13,"* WEEKS WEEKS"},
+ {FamilyDECnet,15,"* GABBY GLADWIN"},
+ {FamilyDECnet,11,"* ERIK ERIK"},
+ {FamilyDECnet,15,"* GLOSTA EMORSE"},
+ {FamilyDECnet,14,"* NIFTY VINSEL"}
+};
+XHostAddress xtbadhosts[] = {
+ {FamilyInternet,13,"* WEEKS WEEKS"},
+ {FamilyInternet,15,"* GABBY GLADWIN"},
+ {FamilyInternet,11,"* ERIK ERIK"},
+ {FamilyInternet,15,"* GLOSTA EMORSE"},
+ {FamilyInternet,14,"* NIFTY VINSEL"}
+};
+#endif
+
+int nxthosts = sizeof(xthosts)/sizeof(xthosts[0]);
+int nxtbadhosts = sizeof(xtbadhosts)/sizeof(xtbadhosts[0]);
+
+/*
+ * Compare two XHostAddress structures for equality. Returns True if
+ * the given addresses are equivalent.
+ * The supplied code will need modifying if a simple byte-for-byte
+ * comparison of the address field is not the correct way to compare
+ * them.
+ */
+samehost(h1, h2)
+XHostAddress *h1;
+XHostAddress *h2;
+{
+int i;
+
+ if (h1->family != h2->family || h1->length != h2->length)
+ return(False);
+
+ for (i = 0; i < h1->length; i++) {
+ if (h1->address[i] != h2->address[i])
+ return(False);
+ }
+ return(True);
+}
diff --git a/xc/test/xsuite/xtest/src/lib/xtlibproto.h b/xc/test/xsuite/xtest/src/lib/xtlibproto.h
new file mode 100644
index 000000000..d5b786c59
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/lib/xtlibproto.h
@@ -0,0 +1,476 @@
+/* $XConsortium$ */
+
+/*
+ * Do not edit this file.
+ * It is generated automaticaly from the source files.
+ */
+#if __STDC__ == 1
+
+void startup(void);
+void cleanup(void);
+void fontstartup(void);
+void setxtfontpath(void);
+void fontcleanup(void);
+void focusstartup(void);
+void focuscleanup(void);
+void fontfocusstartup(void);
+void fontfocuscleanup(void);
+void rmstartup(void);
+void aborttest(void);
+void reset_delay(void);
+void exec_startup(void);
+void exec_cleanup(void);
+char *boolname(int val);
+char *eventmaskname(unsigned long val);
+char *eventname(int val);
+char *keymaskname(unsigned long val);
+char *modifiername(int val);
+char *buttonmaskname(unsigned long val);
+char *buttonname(int val);
+char *notifymodename(int val);
+char *notifydetailname(int val);
+char *visibilityname(int val);
+char *grabreplyname(int val);
+char *alloweventmodename(int val);
+char *reverttoname(int val);
+char *errorname(int val);
+char *classname(int val);
+char *bitgravityname(int val);
+char *wingravityname(int val);
+char *backingstorename(int val);
+char *gcfunctionname(int val);
+char *linestylename(int val);
+char *capstylename(int val);
+char *joinstylename(int val);
+char *fillstylename(int val);
+char *displayclassname(int val);
+char *protoname(int val);
+char *atomname(int val);
+char *mapstatename(int val);
+char *visualmaskname(unsigned long val);
+char *contexterrorname(int val);
+int error_status(Display *disp, XErrorEvent *errevent);
+int unexp_err(Display *disp, XErrorEvent *errevent);
+int io_err(Display *disp);
+int geterr(void);
+int getbadvalue(void);
+void reseterr(void);
+int getevent(Display *disp, XEvent *event);
+int stackorder(Display *disp, Window win);
+void report(char *fmt, ...);
+void trace(char *fmt, ...);
+void check(char *fmt, ...);
+void debug(int lev, char *fmt, ...);
+void tccabort(char *fmt, ...);
+void setdblev(int n);
+int getdblev(void);
+Window iponlywin(Display *disp);
+Window badwin(Display *disp);
+void _startcall(Display *disp);
+void startcall(Display *disp);
+void _endcall(Display *disp);
+void endcall(Display *disp);
+Window makewin(Display *disp, XVisualInfo *vp);
+void winpair(Display *disp, XVisualInfo *vp, Window *w1p, Window *w2p);
+Drawable makewinpos(Display *disp, XVisualInfo *vp, int x, int y);
+int checkevent(XEvent *good, XEvent *ev);
+int initvclass(void);
+void resetvclass(void);
+int nextvclass(int *vp, int *dp);
+int nvclass(void);
+GC badgc(Display *disp);
+Pixmap badpixm(Display *disp);
+Font badfont(Display *disp);
+void badvis(Visual *v);
+void linkstart(void);
+void linkclean(void);
+int issuppvis(Display *disp, int vis);
+unsigned long visualsupported(Display *disp, unsigned long mask);
+void resetsupvis(unsigned long vismask);
+int nextsupvis(XVisualInfo **vi);
+int nsupvis(void);
+Status checkarea(Display *disp, Drawable d, register struct area *ap, unsigned long inpix, unsigned long outpix, int flags);
+Status checkclear(Display *disp, Drawable d);
+void getsize(Display *disp, Drawable d, unsigned int *widthp, unsigned int *heightp);
+unsigned int getdepth(Display *disp, Drawable d);
+void pattern(Display *disp, Drawable d);
+Status checkpattern(Display *disp, Drawable d, struct area *ap);
+Window crechild(Display *disp, Window w, struct area *ap);
+Window creunmapchild(Display *disp, Window w, struct area *ap);
+Status checktile(Display *disp, Drawable d, struct area *ap, int xorig, int yorig, Pixmap pm);
+Pixmap maketile(Display *disp, Drawable d);
+Pixmap makepixm(Display *disp, XVisualInfo *vp);
+void resetvinf(int flags);
+int nextvinf(XVisualInfo **visp);
+int nvinf(void);
+Drawable defdraw(Display *disp, int type);
+Window defwin(Display *disp);
+GC makegc(Display *disp, Drawable d);
+void setgcfont(Font font);
+void dumpimage(XImage *imp, char *name, struct area *ap);
+Status verifyimage(Display *disp, Drawable d, struct area *ap);
+void dclear(Display *disp, Drawable d);
+void dset(Display *disp, Drawable d, unsigned long pix);
+void delete(char *mess, ... );
+int isdeleted(void);
+void resetdelete(void);
+void cancelrest(char *reason);
+void unsupported(char *mess, ... );
+void notinuse(char *mess, ... );
+void untested(char *mess, ... );
+XImage *savimage(Display *disp, Drawable d);
+Status compsavimage(Display *disp, Drawable d, XImage *im);
+Status diffsavimage(Display *disp, Drawable d, XImage *im);
+int checkpixel(Display *display, Drawable drawable, int x, int y, unsigned long value);
+unsigned long getpixel(Display *display, Drawable drawable, int x, int y);
+Status checkpixels(Display *display, Drawable drawable, int x, int y, int dx, int dy, int len, unsigned long value);
+int notmember(int *list, int len, long *ret);
+int notmaskmember(unsigned long *list, int len, unsigned long *ret);
+void setwidth(Display *disp, GC gc, unsigned int width);
+void setcapstyle(Display *disp, GC gc, int capstyle);
+void setlinestyle(Display *disp, GC gc, int linestyle);
+void setjoinstyle(Display *disp, GC gc, int joinstyle);
+int checkgccomponent(Display *disp, GC gc, unsigned int valuemask, XGCValues *values);
+void gcflush(Display *dpy, GC gc);
+void tpstartup(void);
+void tpcleanup(void);
+Pixmap nondepth1pixmap( Display *disp, Drawable d);
+void setfuncpixel(Display *disp, Drawable drw, int *xp, int *yp);
+void regid(Display *disp, union regtypes *id, int type);
+void freereg(void);
+int regenable(void);
+int regdisable(void);
+void openfonts(Font fonts[], int nfonts);
+int checkfsp(XFontStruct *fsp, XFontStruct *good, char *str);
+void txtextents(XFontStruct *fsp, unsigned char *str, int n, int *dir, int *ascent, int *descent, XCharStruct *overall);
+void txtextents16(XFontStruct *fsp, XChar2b *str, int n, int *dir, int *ascent, int *descent, XCharStruct *overall);
+int txtwidth(XFontStruct *fsp, unsigned char *str, int n);
+int txtwidth16(XFontStruct *fsp, XChar2b *str, int n);
+Colormap badcolormap( Display *disp, Window win);
+Colormap makecolmap(Display *disp, Visual *visual, int alloc);
+int lg( unsigned long x);
+char *bitstr( unsigned long val, char spare[]);
+Cursor makecurnum(Display *disp, int inc);
+Cursor makecur(Display *disp);
+Cursor makecur2(Display *disp);
+XImage *makeimg(Display *disp, XVisualInfo *vp, int format);
+void dsetimg(XImage *ximage, unsigned long pixel);
+void patternimg(XImage *ximage, unsigned long pixel);
+Status checkimg(XImage *im, struct area *ap, long inpix, long outpix, int flags);
+Status checkimgstruct(XImage *im, unsigned int depth, unsigned int width, unsigned int height, int format);
+Display *opendisplay(void);
+unsigned int bitcount( register unsigned long n);
+unsigned long getpix(unsigned long m, unsigned long p);
+int atov(char *str);
+void initconfig(void);
+Window mkwinchild(Display *disp, XVisualInfo *vp, struct area *ap, int mapflag, Window parent, int border_width);
+Window mkwin(Display *disp, XVisualInfo *vp, struct area *ap, int mapflag);
+Status block(Display *display, XEvent *event, Block_Info *info);
+Winh *winh_adopt(Display *display, Winh *parent, unsigned long valuemask, XSetWindowAttributes *attributes, Winhg *winhg, long winhmask);
+int winh_create(Display *display, Winh *winh, long winhmask);
+Winh *winh_find(Winh *winh, Window window);
+int winh_plant(Winh *source, XEvent *event, long event_mask, long winhmask);
+int winh_pending(int expected);
+int winh_harvest(Display *display, Winh *winh);
+int winh_weed(Winh *winh, int event_type, long winhmask);
+int winh_ignore_event(Winh *winh, int event_type, long winhmask);
+int winh_selectinput(Display *display, Winh *winh, long event_mask);
+int winh_changewindowattributes(Display *display, Winh *winh, unsigned long valuemask, XSetWindowAttributes *attributes);
+void winh_free(Winh *winh);
+int winh_walk(Winh *winh, int depthfirst, int (*procedure)());
+int winh_climb(Winh *start, Winh *stop, int (*procedure)());
+int winh_eventindex(int event_type);
+int winh_ordercheck(int before, int after);
+int winh(Display *display, int depth, long winhmask);
+PointerPlace *warppointer(Display *display, Window dest_w, int dest_x, int dest_y);
+Bool pointermoved(Display *display, PointerPlace *ptr);
+void unwarppointer(Display *display, PointerPlace *ptr);
+void pointerrootpos(Display *display, PointerPlace *ptr);
+void rootcoordset(Display *display, Window src_w, Window dest_w, int src_x, int src_y, int *dest_x_return, int *dest_y_return);
+void serialset(Display *display, XEvent *event);
+Bool serialtest(XEvent *good, XEvent *ev);
+Time gettime( Display *disp);
+int maxsize( XVisualInfo *vp);
+char *xt_strdup(char *str);
+struct buildtree *buildtree(Display *disp, Window parent, char **list, int nlist);
+struct buildtree *btntobtp(struct buildtree *list, char *name);
+struct buildtree *btwtobtp(struct buildtree *list, Window w);
+Window btntow(struct buildtree *list, char *name);
+char *btwton(struct buildtree *list, Window w);
+void setforexpose(Display *disp, Window w);
+Status exposefill(Display *disp, Window w);
+Status exposecheck(Display *disp, Window w);
+Status expose_test_restored(Display *disp, Window w);
+void settimeout(int to);
+unsigned long cleartimeout(void);
+Region makeregion(void);
+int samehost(XHostAddress *h1, XHostAddress *h2);
+int pfcount(int pass, int fail);
+int rptcounts(void);
+Status SimulateKeyPressEvent(Display *dpy, KeyCode keycode);
+Status SimulateKeyReleaseEvent(Display *dpy, KeyCode keycode);
+Status SimulateButtonPressEvent(Display *dpy, unsigned int button);
+Status SimulateButtonReleaseEvent(Display *dpy, unsigned int button);
+Status CompareCursorWithWindow(Display *dpy, Window window, Cursor cursor);
+Status CompareCurrentWithWindow(Display *dpy, Window window);
+Status SimulateMotionEvent(Display *dpy, int screen, int x, int y);
+Status XTestDiscard( Display *dpy);
+void XTestSetGContextOfGC( GC gc, GContext gid);
+void XTestSetVisualIDOfVisual( Visual *v, VisualID vid);
+void buttonpress(Display *disp, unsigned int button);
+void buttonrel(Display *disp, unsigned int button);
+void keypress(Display *disp, int key);
+void keyrel(Display *disp, int key);
+void relbuttons(void);
+void relkeys(void);
+void relalldev(void);
+unsigned int wantmods(Display *disp, int want);
+int modpress(Display *disp, unsigned int mask);
+int modrel(Display *disp, unsigned int mask);
+int ismodkey(unsigned int mask, int kc);
+int restoredevstate(void);
+int noext(int needbutton);
+int nbuttons(void);
+int getkeycode(Display *display);
+Status IsExtTestAvailable(void);
+int xtest_putenv(char *envstr);
+int curofwin(Display *display, Cursor cursor, Window window);
+int defcur(Display *display, Window window);
+int spriteiswin(Display *display, Window window);
+
+#else
+
+void startup();
+void cleanup();
+void fontstartup();
+void setxtfontpath();
+void fontcleanup();
+void focusstartup();
+void focuscleanup();
+void fontfocusstartup();
+void fontfocuscleanup();
+void rmstartup();
+void aborttest();
+void reset_delay();
+void exec_startup();
+void exec_cleanup();
+char *boolname();
+char *eventmaskname();
+char *eventname();
+char *keymaskname();
+char *modifiername();
+char *buttonmaskname();
+char *buttonname();
+char *notifymodename();
+char *notifydetailname();
+char *visibilityname();
+char *grabreplyname();
+char *alloweventmodename();
+char *reverttoname();
+char *errorname();
+char *classname();
+char *bitgravityname();
+char *wingravityname();
+char *backingstorename();
+char *gcfunctionname();
+char *linestylename();
+char *capstylename();
+char *joinstylename();
+char *fillstylename();
+char *displayclassname();
+char *protoname();
+char *atomname();
+char *mapstatename();
+char *visualmaskname();
+char *contexterrorname();
+int error_status();
+int unexp_err();
+int io_err();
+int geterr();
+int getbadvalue();
+void reseterr();
+int getevent();
+int stackorder();
+void report();
+void trace();
+void check();
+void debug();
+void tccabort();
+void setdblev();
+int getdblev();
+Window iponlywin();
+Window badwin();
+void _startcall();
+void startcall();
+void _endcall();
+void endcall();
+Window makewin();
+void winpair();
+Drawable makewinpos();
+int checkevent();
+int initvclass();
+void resetvclass();
+int nextvclass();
+int nvclass();
+GC badgc();
+Pixmap badpixm();
+Font badfont();
+void badvis();
+void linkstart();
+void linkclean();
+int issuppvis();
+unsigned long visualsupported();
+void resetsupvis();
+int nextsupvis();
+int nsupvis();
+Status checkarea();
+Status checkclear();
+void getsize();
+unsigned int getdepth();
+void pattern();
+Status checkpattern();
+Window crechild();
+Window creunmapchild();
+Status checktile();
+Pixmap maketile();
+Pixmap makepixm();
+void resetvinf();
+int nextvinf();
+int nvinf();
+Drawable defdraw();
+Window defwin();
+GC makegc();
+void setgcfont();
+void dumpimage();
+Status verifyimage();
+void dclear();
+void dset();
+void delete();
+int isdeleted();
+void resetdelete();
+void cancelrest();
+void unsupported();
+void notinuse();
+void untested();
+XImage *savimage();
+Status compsavimage();
+Status diffsavimage();
+int checkpixel();
+unsigned long getpixel();
+Status checkpixels();
+int notmember();
+int notmaskmember();
+void setwidth();
+void setcapstyle();
+void setlinestyle();
+void setjoinstyle();
+int checkgccomponent();
+void gcflush();
+void tpstartup();
+void tpcleanup();
+Pixmap nondepth1pixmap();
+void setfuncpixel();
+void regid();
+void freereg();
+int regenable();
+int regdisable();
+void openfonts();
+int checkfsp();
+void txtextents();
+void txtextents16();
+int txtwidth();
+int txtwidth16();
+Colormap badcolormap();
+Colormap makecolmap();
+int lg();
+char *bitstr();
+Cursor makecurnum();
+Cursor makecur();
+Cursor makecur2();
+XImage *makeimg();
+void dsetimg();
+void patternimg();
+Status checkimg();
+Status checkimgstruct();
+Display *opendisplay();
+unsigned int bitcount();
+unsigned long getpix();
+int atov();
+void initconfig();
+Window mkwinchild();
+Window mkwin();
+Status block();
+Winh *winh_adopt();
+int winh_create();
+Winh *winh_find();
+int winh_plant();
+int winh_pending();
+int winh_harvest();
+int winh_weed();
+int winh_ignore_event();
+int winh_selectinput();
+int winh_changewindowattributes();
+void winh_free();
+int winh_walk();
+int winh_climb();
+int winh_eventindex();
+int winh_ordercheck();
+int winh();
+PointerPlace *warppointer();
+Bool pointermoved();
+void unwarppointer();
+void pointerrootpos();
+void rootcoordset();
+void serialset();
+Bool serialtest();
+Time gettime();
+int maxsize();
+char *xt_strdup();
+struct buildtree *buildtree();
+struct buildtree *btntobtp();
+struct buildtree *btwtobtp();
+Window btntow();
+char *btwton();
+void setforexpose();
+Status exposefill();
+Status exposecheck();
+Status expose_test_restored();
+void settimeout();
+unsigned long cleartimeout();
+Region makeregion();
+int samehost();
+int pfcount();
+int rptcounts();
+Status SimulateKeyPressEvent();
+Status SimulateKeyReleaseEvent();
+Status SimulateButtonPressEvent();
+Status SimulateButtonReleaseEvent();
+Status CompareCursorWithWindow();
+Status CompareCurrentWithWindow();
+Status SimulateMotionEvent();
+Status XTestDiscard();
+void XTestSetGContextOfGC();
+void XTestSetVisualIDOfVisual();
+void buttonpress();
+void buttonrel();
+void keypress();
+void keyrel();
+void relbuttons();
+void relkeys();
+void relalldev();
+unsigned int wantmods();
+int modpress();
+int modrel();
+int ismodkey();
+int restoredevstate();
+int noext();
+int nbuttons();
+int getkeycode();
+Status IsExtTestAvailable();
+int xtest_putenv();
+int curofwin();
+int defcur();
+int spriteiswin();
+
+#endif
+
diff --git a/xc/test/xsuite/xtest/src/libproto/ClientMng.c b/xc/test/xsuite/xtest/src/libproto/ClientMng.c
new file mode 100644
index 000000000..e8a2fc7aa
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/ClientMng.c
@@ -0,0 +1,778 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ * ***************************************************************************
+ */
+
+#include "XstlibInt.h"
+#include <X11/Xatom.h>
+
+CL Xst_clients[MAX_CLIENTS];
+
+
+XstDisplay *XstOpenDisplay();
+static void OutOfMemory();
+static void ReleaseMemory();
+
+
+/*
+ * Routine: native_byte_sex
+ *
+ * Input: none
+ *
+ * Output:
+ *
+ * Returns: 0 if machine is LSB, 1 if MSB.
+ *
+ * Globals used:
+ *
+ * Side Effects:
+ *
+ * Methods: stuff a 1 into a longword. Then pick up the 0th byte
+ * of the longword. MSB should have a 1 in it. LSB should have a 0
+ * in it.
+ */
+
+unsigned char
+native_byte_sex ()
+{
+ int realbytesex;
+
+ realbytesex = 1;
+ return ( *((unsigned char *) &realbytesex));
+}
+
+
+/*
+ * Routine: Create_Client - open a connection to the server for client,
+ * and stash information about the server and display
+ *
+ * Input: client - integer from 0 to MAX_CLIENTS. an arbitrary number
+ * assigned to this client. numbers can be reused once the connection
+ * from this client to the server is closed.
+ *
+ * Output: Xst_clients[client] is filled in with some data from the server
+ *
+ * Returns:
+ *
+ * Globals used:
+ *
+ * Side Effects:
+ *
+ * Methods: code was copied from XOpenDisplay in XLIB R2 for establishing
+ * the client-server connection and stashing information. Display data
+ * structure (Xst_client[client].cl_dpy) should be identical to that of
+ * XLIB, sort of......
+ *
+ */
+
+void
+Create_Client(client)
+int client;
+{
+ int bytesex = Xst_byte_sex;
+ unsigned char creal; /* what byte sex this machine is */
+ unsigned char cfake; /* what byte sex we'll make it appear */
+ XstDisplay *dpy; /* local copy of display as XstOpen...
+ will assign to the dpy field of the
+ client structure (that's why it's
+ passed the client number now) so that
+ the GetConn routines can be passed
+ client number instead of display
+ and can then use Get_Display. Phew!
+ */
+
+ creal = native_byte_sex ();
+
+ switch (bytesex) {
+ case SEX_NATIVE:
+ cfake = creal;
+ break;
+ case SEX_REVERSE:
+ cfake = !creal;
+ break;
+ case SEX_MSB:
+ cfake = 1;
+ break;
+ case SEX_LSB:
+ cfake = 0;
+ break;
+ }
+ Xst_clients[client].cl_swap = creal ^ cfake;
+ Xst_clients[client].cl_bytesex = cfake;
+
+ Xst_clients[client].cl_pollout = 0;
+ Xst_clients[client].cl_reqout = 0;
+ Xst_clients[client].cl_reqtype = UNKNOWN_REQUEST_TYPE;
+ Set_Test_Type(client, SETUP);
+
+ dpy = XstOpenDisplay (Xst_server_node, Xst_clients[client].cl_bytesex, Xst_clients[client].cl_swap, client);
+
+ if (dpy == NULL) {
+ Log_Msg ("Create_Client: unable to open display %s",Xst_server_node);
+ Delete ();
+ }
+}
+
+/*
+ * As Create_Client, but for OpenDisplay testing so check if we're
+ * supposed to have failed, depends on test_type, and fail if something
+ * wasn't as expected, rather than deleting the test. Also returns
+ * a boolean indicating whether display opened correctly.
+ */
+int
+Create_Client_Tested(client, test_type)
+int client;
+TestType test_type;
+{
+ int bytesex = Xst_byte_sex;
+ unsigned char creal; /* what byte sex this machine is */
+ unsigned char cfake; /* what byte sex we'll make it appear */
+ XstDisplay *dpy; /* local copy of display as XstOpen...
+ will assign to the dpy field of the
+ client structure (that's why it's
+ passed the client number now) so that
+ the GetConn routines can be passed
+ client number instead of display
+ and can then use Get_Display. Phew!
+ */
+
+ creal = native_byte_sex ();
+
+ switch (bytesex) {
+ case SEX_NATIVE:
+ cfake = creal;
+ break;
+ case SEX_REVERSE:
+ cfake = !creal;
+ break;
+ case SEX_MSB:
+ cfake = 1;
+ break;
+ case SEX_LSB:
+ cfake = 0;
+ break;
+ }
+ Xst_clients[client].cl_swap = creal ^ cfake;
+ Xst_clients[client].cl_bytesex = cfake;
+
+ Xst_clients[client].cl_pollout = 0;
+ Xst_clients[client].cl_reqout = 0;
+ Xst_clients[client].cl_reqtype = OPEN_DISPLAY_REQUEST_TYPE;
+
+ Set_Test_Type(client, test_type);
+
+ dpy = XstOpenDisplay (Xst_server_node, Xst_clients[client].cl_bytesex, Xst_clients[client].cl_swap, client);
+
+ return (dpy != NULL);
+}
+
+static
+XModifierKeymap * XstNewModifiermap ();
+
+
+/*
+ * Connects to a server, creates a XstDisplay object and returns a pointer to
+ * the newly created XstDisplay back to the caller.
+ */
+XstDisplay * XstOpenDisplay (display, bytesex, needswap, cl)
+register char *display;
+int bytesex;
+int needswap;
+int cl; /* client number */
+{
+ register XstDisplay * dpy; /* New XstDisplay object being created. */
+ register int i;
+ int j,
+ k; /* random iterator indexes */
+ char *display_name; /* pointer to display name */
+ xConnClientPrefix client; /* client information */
+ xConnSetupPrefix prefix; /* prefix information */
+ int vendorlen; /* length of vendor string */
+ char *setup; /* memory allocated at startup */
+ char displaybuf[256]; /* buffer to receive expanded name */
+ int screen_num; /* screen number */
+ union {
+ xConnSetup * setup;
+ char *failure;
+ char *vendor;
+ xPixmapFormat * sf;
+ xWindowRoot * rp;
+ xDepth * dp;
+ xVisualType * vp;
+ } u;
+ long setuplength; /* number of bytes in setup message */
+ void (*complain)();
+ char *auth_proto;
+ int auth_length;
+ char *auth_string;
+ int auth_strlen;
+ int using_xo;
+
+ extern int XstSendClientPrefix ();
+ extern int XstConnectDisplay ();
+ extern char *getenv ();
+ extern XID Get_Resource_Id();
+
+ /*
+ * If the display specifier string supplied as an argument to this
+ * routine is NULL or a pointer to NULL, read the DISPLAY variable.
+ */
+ if (display == NULL || *display == '\0') {
+ if ((display_name = getenv ("DISPLAY")) == NULL) {
+ /* Oops! No DISPLAY environment variable - error. */
+ Log_Msg ("No XT_DISPLAY and no DISPLAY environment variable\n");
+ Delete ();
+ }
+ }
+ else {
+ /* Display is non-NULL, copy the pointer */
+ display_name = display;
+ }
+
+/*
+ * Attempt to allocate a display structure. Delete if allocation fails.
+ */
+ if ((dpy = (XstDisplay *) Xstcalloc (1, sizeof (XstDisplay))) == NULL) {
+ errno = ENOMEM;
+ Log_Msg ("Failed to allocate enough memory for display structure\n");
+ Delete ();
+ }
+/*
+ * Now we've got the display structure record it in the client structure
+ */
+ Set_Display(cl, dpy); /* required to be there for GetConn routines */
+
+/*
+ * Call the Connect routine to get the network socket. If 0 is returned, the
+ * connection failed. The connect routine will return the expanded display
+ * name in displaybuf.
+ */
+
+ dpy -> xlib_dpy = (Display *)NULL;
+ if ((dpy -> fd = XstConnectDisplay (display_name, displaybuf, &screen_num,
+ &auth_proto, &auth_length,
+ &auth_string, &auth_strlen,
+ &(dpy->xlib_dpy)))
+ < 0) {
+ Log_Msg ("Could not create network connection to %s\n",display_name);
+ Delete ();
+ /*NOTREACHED*/
+ free ((char *) dpy);
+ return (NULL); /* errno set by XConnectDisplay */
+ }
+ using_xo = (dpy->xlib_dpy != (Display *)NULL);
+
+
+/*
+ * First byte is the byte order byte.
+ */
+
+ if (bytesex) {
+ client.byteOrder = 0x6C; /* 'l' */
+ }
+ else {
+ client.byteOrder = 0x42; /* 'B' */
+ }
+ switch (Get_Test_Type(cl)) {
+ case GOOD:
+ case TOO_LONG:
+ case BAD_LENGTH:
+ case JUST_TOO_LONG:
+ case SETUP:
+ case BAD_IDCHOICE1:
+ case BAD_IDCHOICE2:
+ case BAD_VALUE:
+ if (using_xo && needswap) {
+ Log_Msg("Using XOpenDisplay won't allow non client-native testing\n");
+ XCloseDisplay(dpy->xlib_dpy);
+ free((char *)dpy);
+ Delete();
+ /*NOTREACHED*/
+ }
+ break;
+ case OPEN_DISPLAY:
+ if (using_xo) {
+ Log_Msg("Using XOpenDisplay won't allow bad byteOrder testing\n");
+ XCloseDisplay(dpy->xlib_dpy);
+ free((char *)dpy);
+ Untested(); /* 'cos we know its an extended assertion */
+ /*NOTREACHED*/
+ }
+ client.byteOrder ^= 0xFF; /* now not one of 0x42 or 0x6C */
+ Log_Trace ("About to send OpenDisplay with byte_order = 0x%x\n", client.byteOrder);
+ break;
+ default:
+ Log_Del ("INTERNAL ERROR: bad TestType %d when about to OpenDisplay\n", Get_Test_Type(cl));
+ Exit ();
+ /* NOTREACHED */
+ break;
+ }
+ client.majorVersion = X_PROTOCOL;
+ client.minorVersion = X_PROTOCOL_REVISION;
+ client.nbytesAuthProto = auth_length;
+ client.nbytesAuthString = auth_strlen;
+ /* some of these routines are cheats if using_xo is true... */
+ XstSendClientPrefix (dpy, &client, auth_proto, auth_string, needswap);
+/*
+ * Now see if connection was accepted...
+ */
+ GetConnSetupPrefix (cl, &prefix, needswap);
+
+/*
+ * If the connection was not accepted by the server due to problems,
+ * give error message to the user....
+ */
+ if (Get_Req_Type(cl) != OPEN_DISPLAY_REQUEST_TYPE) {
+ /* OK, we required this to work to set up the test, which is other than
+ * the open display test.
+ */
+ if (prefix.success != xTrue) {
+ static char reason_buf[132];
+ char *pref_res = ((char *)&prefix) + sizeof(prefix);
+
+ if (prefix.lengthReason <= 0)
+ strcpy(reason_buf, "<None Given>");
+ else {
+ int n = min(sizeof(reason_buf)-10, prefix.lengthReason);
+
+ strncpy(reason_buf, pref_res, n);
+ if (n < (int)prefix.lengthReason)
+ strcat(reason_buf, "... etc."); /* the 10 above is to leave room for this */
+ }
+ Log_Del ("Failed to OpenDisplay, reason was %s\n", reason_buf);
+ free ((char *) dpy);
+ return (NULL);
+ }
+ } else {
+ /* OK, we're in the open display test, did we expect failure? */
+ CARD8 expectation = (Get_Test_Type(cl) == OPEN_DISPLAY) ?
+ xFalse : xTrue;
+
+ if (prefix.success != expectation) {
+ static char reason_buf[132];
+ char *pref_res = ((char *)&prefix) + sizeof(prefix);
+
+ if (prefix.lengthReason <= 0)
+ strcpy(reason_buf, "<None Given>");
+ else {
+ int n = min(sizeof(reason_buf)-10, prefix.lengthReason);
+
+ strncpy(reason_buf, pref_res, n);
+ if (n < (int)prefix.lengthReason)
+ strcat(reason_buf, "... etc."); /* the 10 above is to leave room for this */
+ }
+ Log_Trace ("OpenDisplay failure, got %s, expecting %s, with reason %s\n",
+ boolname(prefix.success), boolname(expectation), reason_buf);
+ free ((char *) dpy);
+ return (NULL);
+ }
+ if (expectation == xFalse) {
+ /*
+ * We failed, as expected, so no point in trying to read rest and
+ * already setup only enough to allow the dpy to be closed down
+ */
+ return dpy;
+ }
+ }
+
+ if ((int)prefix.majorVersion < Xst_protocol_version) {
+ Log_Msg ("Warning: Client (%d) built for newer server (%d)!\n", Xst_protocol_version, prefix.majorVersion);
+ }
+ if (prefix.minorVersion != Xst_protocol_revision) {
+ Log_Msg (
+ "Warning: Protocol rev. of client (%d) does not match server (%d)!\n",
+ Xst_protocol_revision, prefix.minorVersion);
+ }
+
+ setuplength = prefix.length << 2;
+ if (setuplength < MIN_SETUP_DATA_LEN) {
+ /* junk reply, so no need to proceed further. */
+ if (Get_Req_Type(cl) == OPEN_DISPLAY_REQUEST_TYPE)
+ complain = Log_Err;
+ else
+ complain = Log_Del;
+ (*complain)("Short setup data (%ld bytes instead of at least %ld bytes)\n",
+ setuplength, (long)MIN_SETUP_DATA_LEN);
+ if (using_xo)
+ XCloseDisplay(dpy->xlib_dpy);
+ free((char *)dpy);
+ return NULL;
+ }
+ if ((u.setup = (xConnSetup *) (setup = (char *) Xstmalloc ((unsigned) setuplength)))
+ == (xConnSetup *)NULL) {
+ errno = ENOMEM;
+ Log_Msg ("Not enough memory to allocate rest of connection data (%d bytes)\n", setuplength);
+ if (using_xo)
+ XCloseDisplay(dpy->xlib_dpy);
+ free((char *)dpy);
+ Delete ();
+ /*NOTREACHED*/
+ }
+ /* may be faked if using_xo is true.... */
+ GetConnSetupData (cl, (char *) u.setup, setuplength, needswap);
+
+/*
+ * We succeeded at authorization, so let us move the data into
+ * the display structure.
+ */
+ dpy -> proto_major_version = prefix.majorVersion;
+ dpy -> proto_minor_version = prefix.minorVersion;
+ dpy -> release = u.setup -> release;
+ dpy -> resource_base = u.setup -> ridBase;
+ dpy -> resource_mask = u.setup -> ridMask;
+ dpy -> min_keycode = u.setup -> minKeyCode;
+ dpy -> max_keycode = u.setup -> maxKeyCode;
+ dpy -> keysyms = (KeySym *) NULL;
+ dpy -> modifiermap = XstNewModifiermap (0);
+ dpy -> keysyms_per_keycode = 0;
+ dpy -> current = None;
+ dpy -> xdefaults = (char *) NULL;
+ dpy -> scratch_length = 0L;
+ dpy -> scratch_buffer = NULL;
+ dpy -> motion_buffer = u.setup -> motionBufferSize;
+ dpy -> nformats = u.setup -> numFormats;
+ dpy -> nscreens = u.setup -> numRoots;
+ dpy -> byte_order = u.setup -> imageByteOrder;
+ dpy -> bitmap_unit = u.setup -> bitmapScanlineUnit;
+ dpy -> bitmap_pad = u.setup -> bitmapScanlinePad;
+ dpy -> bitmap_bit_order = u.setup -> bitmapBitOrder;
+ dpy -> max_request_size = u.setup -> maxRequestSize;
+#ifdef notrequired
+ dpy -> ext_procs = (struct _XExten *) NULL;
+ dpy -> ext_number = 0;
+#endif
+ dpy -> ext_data = (XExtData *) NULL;
+ dpy -> event_vec[X_Error] = NULL;
+ dpy -> event_vec[X_Reply] = NULL;
+ dpy -> wire_vec[X_Error] = NULL;
+ dpy -> wire_vec[X_Reply] = NULL;
+ for (i = KeyPress; i < LASTEvent; i++) {
+ dpy -> event_vec[i] = NULL;
+ dpy -> wire_vec[i] = NULL;
+ }
+ for (i = LASTEvent; i < 128; i++) {
+ dpy -> event_vec[i] = NULL;
+ dpy -> wire_vec[i] = NULL;
+ }
+ dpy -> resource_id = 0;
+ dpy -> resource_shift = ffs ((int) dpy -> resource_mask) - 1;
+/* dpy -> db = (struct _XrmHashBucketRec *) NULL; */
+/*
+ * Initialize pointers to NULL so that XstFreeDisplayStructure will
+ * work if we run out of memory
+ */
+
+ dpy -> screens = NULL;
+ dpy -> display_name = NULL;
+ dpy -> buffer = NULL;
+
+/*
+ * now extract the vendor string... String must be null terminated,
+ * padded to multiple of 4 bytes.
+ */
+ dpy -> vendor = (char *) Xstmalloc (u.setup -> nbytesVendor + 1);
+ if (dpy -> vendor == NULL) {
+ OutOfMemory (dpy, setup);
+ return (NULL);
+ }
+ vendorlen = u.setup -> nbytesVendor;
+ u.setup += 1; /* can't touch information in XConnSetup
+ anymore.. */
+ (void) strncpy (dpy -> vendor, u.vendor, vendorlen);
+ u.vendor += (vendorlen + 3) & ~3;
+/*
+ * Now iterate down setup information.....
+ */
+ dpy -> pixmap_format =
+ (XstScreenFormat *) Xstmalloc (
+ (unsigned) (dpy -> nformats * sizeof (XstScreenFormat)));
+ if (dpy -> pixmap_format == NULL) {
+ OutOfMemory (dpy, setup);
+ return (NULL);
+ }
+/*
+ * First decode the Z axis Screen format information.
+ */
+ for (i = 0; i < dpy -> nformats; i++) {
+ register XstScreenFormat * fmt = &dpy -> pixmap_format[i];
+ fmt -> depth = u.sf -> depth;
+ fmt -> bits_per_pixel = u.sf -> bitsPerPixel;
+ fmt -> scanline_pad = u.sf -> scanLinePad;
+ fmt -> ext_data = NULL;
+ u.sf += 1;
+ }
+
+/*
+ * next the Screen structures.
+ */
+ dpy -> screens =
+ (XstScreen *) Xstmalloc ((unsigned) dpy -> nscreens * sizeof (XstScreen));
+ if (dpy -> screens == NULL) {
+ OutOfMemory (dpy, setup);
+ return (NULL);
+ }
+/*
+ * Now go deal with each screen structure.
+ */
+ for (i = 0; i < dpy -> nscreens; i++) {
+ register XstScreen * sp = &dpy -> screens[i];
+ VisualID root_visualID = u.rp -> rootVisualID;
+ sp -> display = dpy;
+ sp -> root = u.rp -> windowId;
+ sp -> cmap = u.rp -> defaultColormap;
+ sp -> white_pixel = u.rp -> whitePixel;
+ sp -> black_pixel = u.rp -> blackPixel;
+ sp -> root_input_mask = u.rp -> currentInputMask;
+ sp -> width = u.rp -> pixWidth;
+ sp -> height = u.rp -> pixHeight;
+ sp -> mwidth = u.rp -> mmWidth;
+ sp -> mheight = u.rp -> mmHeight;
+ sp -> min_maps = u.rp -> minInstalledMaps;
+ sp -> max_maps = u.rp -> maxInstalledMaps;
+ sp -> root_visual = NULL;
+ /* filled in later, when we alloc Visuals
+ */
+ sp -> backing_store = u.rp -> backingStore;
+ sp -> save_unders = u.rp -> saveUnders;
+ sp -> root_depth = u.rp -> rootDepth;
+ sp -> ndepths = u.rp -> nDepths;
+ sp -> ext_data = NULL;
+ u.rp += 1;
+/*
+ * lets set up the depth structures.
+ */
+ sp -> depths = (XstDepth *) Xstmalloc (
+ (unsigned) sp -> ndepths * sizeof (XstDepth));
+ if (sp -> depths == NULL) {
+ OutOfMemory (dpy, setup);
+ return (NULL);
+ }
+ /*
+ * for all depths on this screen.
+ */
+ for (j = 0; j < sp -> ndepths; j++) {
+ XstDepth * dp = &sp -> depths[j];
+ dp -> depth = u.dp -> depth;
+ dp -> nvisuals = u.dp -> nVisuals;
+ u.dp += 1;
+ dp -> visuals =
+ (XstVisual *) Xstmalloc ((unsigned) dp -> nvisuals * sizeof (XstVisual));
+ if (dp -> visuals == NULL) {
+ OutOfMemory (dpy, setup);
+ return (NULL);
+ }
+ for (k = 0; k < dp -> nvisuals; k++) {
+ register XstVisual * vp = &dp -> visuals[k];
+ if ((vp -> visualid = u.vp -> visualID) == root_visualID)
+ sp -> root_visual = vp;
+ vp -> class = u.vp -> class;
+ vp -> bits_per_rgb = u.vp -> bitsPerRGB;
+ vp -> map_entries = u.vp -> colormapEntries;
+ vp -> red_mask = u.vp -> redMask;
+ vp -> green_mask = u.vp -> greenMask;
+ vp -> blue_mask = u.vp -> blueMask;
+ vp -> ext_data = NULL;
+ u.vp += 1;
+ }
+ }
+ }
+
+
+/*
+ * Setup other information in this display structure.
+ */
+ dpy -> vnumber = X_PROTOCOL;
+ dpy -> resource_alloc = Get_Resource_Id;
+ dpy -> synchandler = NULL;
+ dpy -> request = using_xo ?
+ ((NextRequest(dpy->xlib_dpy) <= 0) ? 0 : (NextRequest(dpy->xlib_dpy)-1))
+ : 0;
+ dpy -> last_request_read = 0;
+ dpy -> default_screen = screen_num;
+ /* Value returned by ConnectDisplay */
+ dpy -> last_req = (char *) NULL;
+
+ /* Salt away the host:display string for later use */
+ if ((dpy -> display_name = (char *) Xstmalloc (
+ (unsigned) (strlen (displaybuf) + 1))) == NULL) {
+ OutOfMemory (dpy, setup);
+ return (NULL);
+ }
+ (void) strcpy (dpy -> display_name, displaybuf);
+
+/* Set up the output buffers. */
+ if ((dpy -> bufptr = dpy -> buffer = (char *) Xstmalloc (OBUFSIZE)) == NULL) {
+ OutOfMemory (dpy, setup);
+ return (NULL);
+ }
+ dpy -> bufmax = dpy -> buffer + OBUFSIZE;
+
+ /* Set up the input event queue and input event queue parameters. */
+/* dpy -> head = dpy -> tail = NULL; */
+ dpy -> qlen = 0;
+
+/*
+ * Now start talking to the server to setup all other information...
+ */
+
+ free (setup); /* all finished with setup information */
+/*
+ * chain this stucture onto global list.
+ */
+
+ return (dpy);
+}
+
+
+/* OutOfMemory is called if Xstmalloc fails. XOpenDisplay returns NULL
+ after this returns. */
+
+static void OutOfMemory (dpy, setup)
+ XstDisplay * dpy;
+ char *setup;
+{
+ ReleaseMemory (dpy, setup);
+ errno = ENOMEM;
+ Log_Del ("Not enough memory for holding connection setup info.\n");
+}
+
+static void ReleaseMemory (dpy, setup)
+ XstDisplay * dpy;
+ char *setup;
+{
+ XstDisconnectDisplay (dpy -> fd);
+ XstFreeDisplayStructure (dpy);
+ free (setup);
+}
+
+
+/* XstFreeDisplayStructure frees all the storage associated with a
+ * Display. It is used by XOpenDisplay if it runs out of memory,
+ * and also by XCloseDisplay. It needs to check whether all pointers
+ * are non-NULL before dereferencing them, since it may be called
+ * by XstOpenDisplay before the XstDisplay structure is fully formed.
+ * XstOpenDisplay must be sure to initialize all the pointers to NULL
+ * before the first possible call on this.
+ */
+
+XstFreeDisplayStructure (dpy)
+register XstDisplay * dpy;
+{
+ /* if we have used XOpenDisplay to get the fd then free the xlib things */
+ if (dpy -> xlib_dpy != (Display *)NULL) {
+ (void)XCloseDisplay(dpy->xlib_dpy);
+ dpy->xlib_dpy = (Display *)NULL;
+ }
+
+ /* OK, now on with ours.... */
+ if (dpy -> screens) {
+ register int i;
+
+ for (i = 0; i < dpy -> nscreens; i++) {
+ XstScreen * sp = &dpy -> screens[i];
+
+ if (sp -> depths) {
+ register int j;
+
+ for (j = 0; j < sp -> ndepths; j++) {
+ XstDepth * dp = &sp -> depths[j];
+
+ if (dp -> visuals) {
+ free ((char *) dp -> visuals);
+ }
+ }
+
+ free ((char *) sp -> depths);
+ }
+
+ }
+
+ free ((char *) dpy -> screens);
+ }
+
+ if (dpy -> pixmap_format) {
+
+ free ((char *) dpy -> pixmap_format);
+ }
+
+ if (dpy -> display_name)
+ free (dpy -> display_name);
+
+ if (dpy -> buffer)
+ free (dpy -> buffer);
+ if (dpy -> keysyms)
+ free ((char *) dpy -> keysyms);
+ if (dpy -> xdefaults)
+ free (dpy -> xdefaults);
+
+
+ (void) free ((char *) dpy);
+}
+
+static
+XModifierKeymap *
+XstNewModifiermap (keyspermodifier)
+int keyspermodifier;
+{
+ XModifierKeymap * res = (XModifierKeymap *) Xstmalloc ((sizeof (XModifierKeymap
+ )));
+ res -> max_keypermod = keyspermodifier;
+ res -> modifiermap = (keyspermodifier > 0 ?
+ (KeyCode *) Xstmalloc (8 * keyspermodifier)
+ : (KeyCode *) NULL);
+ return (res);
+}
+
+Destroy_Client(client)
+int client;
+{
+ XstDisplay *dpy = Get_Display(client);
+ int tmpfd = -1;
+
+ if (dpy == (XstDisplay *)NULL)
+ return;
+
+ tmpfd = dpy->fd;
+ dpy->fd = -1;
+
+ XstFreeDisplayStructure(dpy);
+
+ if (tmpfd != -1)
+ (void) close(tmpfd);
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/DataMove.c b/xc/test/xsuite/xtest/src/libproto/DataMove.c
new file mode 100644
index 000000000..182a46a20
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/DataMove.c
@@ -0,0 +1,287 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: DataMove.c 1.11 89/04/17 $
+ */
+
+extern unsigned char native_byte_sex ();
+
+#ifndef lint
+static char rcsid[]="$Header: DataMove.c 1.11 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+#include "DataMove.h"
+
+/*ARGSUSED*/
+void pack1(bufpp,val)
+char **bufpp;
+char val;
+{
+
+ *(*bufpp) = (char) val;
+ *bufpp += 1;
+}
+
+void
+pack2(bufpp,val,swap)
+char **bufpp;
+short val;
+int swap;
+{
+
+ if (swap) {
+ swapcpsp(((char *)&val),(*bufpp));
+ }
+ else {
+ nonswapcpsp(((char *)&val),(*bufpp));
+ }
+ *bufpp += 2;
+}
+
+void
+pack4(bufpp,val,swap)
+char **bufpp;
+long val;
+int swap;
+{
+
+ if (swap) {
+ swapcplp(((char *)&val),(*bufpp));
+ }
+ else {
+ nonswapcplp(((char *)&val),(*bufpp));
+ }
+ *bufpp += 4;
+}
+
+/*
+ * Routine: pack2_lsb - stuffs short into output buffer in lsb order
+ *
+ * Input: bufpp - pointer to output buffer
+ * val - value to stuff into output buffer
+ *
+ * Output: **bufpp is replaced with val
+ *
+ * Returns: nothing
+ *
+ * Globals used:
+ *
+ * Side Effects:
+ *
+ * Methods:
+ *
+ */
+
+void
+pack2_lsb (bufpp,val)
+ char **bufpp;
+ short val;
+{
+ if (native_byte_sex () == 1) {
+ swapcpsp(((char *)&val),(*bufpp)); /* msb, so swap */
+ }
+ else {
+ nonswapcpsp(((char *)&val),(*bufpp)); /* already lsb, so don't swap */
+ }
+ *bufpp += 2;
+}
+
+void
+packpad(bufpp,cnt)
+char **bufpp;
+int cnt;
+{
+
+ bzero(*bufpp,(unsigned)cnt);
+ *bufpp += cnt;
+}
+
+/*ARGSUSED*/
+unsigned char unpack1(bufpp)
+unsigned char **bufpp;
+{
+ unsigned char ret;
+
+ ret = **bufpp;
+ *bufpp += 1;
+ return(ret);
+}
+
+unsigned short
+unpack2(bufpp,swap)
+unsigned char **bufpp;
+int swap;
+{
+ unsigned short ret;
+
+ if (swap) {
+ swapcpsp(*bufpp,(char *) &ret);
+ }
+ else {
+ nonswapcpsp(*bufpp,(char *) &ret);
+ }
+ *bufpp += 2;
+ return(ret);
+}
+unsigned long
+unpack4(bufpp,swap)
+unsigned char **bufpp;
+int swap;
+{
+ unsigned long ret;
+
+ if (swap) {
+ swapcplp(*bufpp,(char *) &ret);
+ }
+ else {
+ nonswapcplp(*bufpp,(char *) &ret);
+ }
+ *bufpp += 4;
+ return(ret);
+}
+
+void
+Copy_String8(to,from)
+char **to;
+char *from;
+{
+int len;
+
+ len = strlen(from);
+ bcopy (from, *to, len);
+ (*to) += len;
+}
+
+
+void
+Copy_Padded_String8(to,from)
+char **to;
+char *from;
+{
+ int len;
+
+ len = strlen(from);
+ bcopy (from, *to, len);
+ (*to) += padup(len);
+}
+
+void
+Copy_Padded_String16(to,from)
+char **to;
+char *from;
+{
+ int len;
+ int i;
+/*
+ * NOTE: this routine assumes that the tests will just be using
+ * "real" character strings (ie. STRING8) for convenience in
+ * specifying test strings, even though a test may call for
+ * STRING16 (CHAR2B).
+ */
+
+ len = strlen(from);
+ for(i=0;i<len;i++) {
+ **to = 0;
+ (*to)++;
+ **to = *from;
+ (*to)++;
+ from++;
+ }
+}
+
+void
+Set_Value1(to,val)
+char **to;
+char val;
+{
+ **to = val;
+ (*to)++;
+}
+
+void
+Set_Value2(to,val)
+char **to;
+short val;
+{
+ nonswapcpsp(((char *)&val),(*to));
+ *to += 2;
+}
+
+void
+Set_Value4(to,val)
+char **to;
+long val;
+{
+ nonswapcplp(((char *)&val),(*to));
+ *to += 4;
+}
+
+void
+Unpack_Shorts(to,from,count,swap)
+unsigned short *to;
+unsigned char **from;
+int count;
+int swap;
+{
+ int i;
+
+ for(i=0;i<count;i++) {
+ *to = unpack2(from,swap);
+ to++;
+ }
+}
+
+void
+Unpack_Longs(to,from,count,swap)
+unsigned long *to;
+unsigned char **from;
+int count;
+int swap;
+{
+ int i;
+
+ for(i=0;i<count;i++) {
+ *to = unpack4(from,swap);
+ to++;
+ }
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/DataMove.h b/xc/test/xsuite/xtest/src/libproto/DataMove.h
new file mode 100644
index 000000000..c2e2c65a9
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/DataMove.h
@@ -0,0 +1,125 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: DataMove.h 1.5 89/04/17 $
+ */
+
+/*
+ * Macros for byte swapping
+ *
+ * Derived from X.V11R1 server code.
+ *
+ */
+
+/* swap, copy long to long */
+#define swapcpl(src, dst) \
+ ((char *) &(dst))[0] = ((char *) &(src))[3];\
+ ((char *) &(dst))[1] = ((char *) &(src))[2];\
+ ((char *) &(dst))[2] = ((char *) &(src))[1];\
+ ((char *) &(dst))[3] = ((char *) &(src))[0]
+
+/* swap, copy short to short */
+#define swapcps(src, dst)\
+ ((char *) &(dst))[0] = ((char *) &(src))[1];\
+ ((char *) &(dst))[1] = ((char *) &(src))[0]
+
+/* swap, copy longptr to longptr */
+#define swapcplp(srcp, dstp) \
+ ((dstp))[0] = ((srcp))[3];\
+ ((dstp))[1] = ((srcp))[2];\
+ ((dstp))[2] = ((srcp))[1];\
+ ((dstp))[3] = ((srcp))[0]
+
+/* swap, copy shortptr to shortptr */
+#define swapcpsp(srcp, dstp)\
+ ((dstp))[0] = ((srcp))[1];\
+ ((dstp))[1] = ((srcp))[0]
+
+/* swap, inplace long (using char temp) */
+#define swapinl(x, n) n = ((char *) &(x))[0];\
+ ((char *) &(x))[0] = ((char *) &(x))[3];\
+ ((char *) &(x))[3] = n;\
+ n = ((char *) &(x))[1];\
+ ((char *) &(x))[1] = ((char *) &(x))[2];\
+ ((char *) &(x))[2] = n
+
+/* swap, inplace short (using char temp) */
+#define swapins(x, n) n = ((char *) &(x))[0];\
+ ((char *) &(x))[0] = ((char *) &(x))[1];\
+ ((char *) &(x))[1] = n
+
+/* swap, inplace longptr (using char temp) */
+#define swapinlp(x, n) n = ((x))[0];\
+ ((x))[0] = ((x))[3];\
+ ((x))[3] = n;\
+ n = ((x))[1];\
+ ((x))[1] = ((x))[2];\
+ ((x))[2] = n
+
+/* swap, inplace shortptr (using char temp) */
+#define swapinsp(x, n) n = ((x))[0];\
+ ((x))[0] = ((x))[1];\
+ ((x))[1] = n
+
+/*
+ * macros for packing/unpacking shorts/longs
+ * these are here to centralize any issues with word alignment,
+ * byte addressing, etc.
+ */
+
+/* nonswap, copy shortptr to shortptr */
+#define nonswapcpsp(srcp, dstp)\
+ ((dstp))[1] = ((srcp))[1];\
+ ((dstp))[0] = ((srcp))[0]
+
+
+/* nonswap, copy longptr to longptr */
+#define nonswapcplp(srcp, dstp) \
+ ((dstp))[3] = ((srcp))[3];\
+ ((dstp))[2] = ((srcp))[2];\
+ ((dstp))[1] = ((srcp))[1];\
+ ((dstp))[0] = ((srcp))[0]
+
+/*
+ * pads a number of bytes up to next multiple of 4
+ */
+#define padup(n) ((((n)+3)>>2)<<2)
diff --git a/xc/test/xsuite/xtest/src/libproto/DfltVals.c b/xc/test/xsuite/xtest/src/libproto/DfltVals.c
new file mode 100644
index 000000000..23406ae43
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/DfltVals.c
@@ -0,0 +1,311 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: DfltVals.c 1.4 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: DfltVals.c 1.4 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+
+/*ARGSUSED*/
+Gen_Good_accelDenum (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_accelNum (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_backBlue (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_backGreen (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_backRed (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_bitPlane (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_blue (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_colors (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_contiguous (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_count (client) {
+ return (0);
+}
+Gen_Good_depth (client) {
+XstDisplay *dpy = Get_Display(client);
+ return (XstDefaultDepth(dpy, XstDefaultScreen(dpy)));
+}
+/*ARGSUSED*/
+Gen_Good_doAccel (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_doThresh (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_dstDrawable (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_dstX (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_dstY (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_firstKeyCode (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_foreBlue (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_foreGreen (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_foreRed (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_green (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_hostLength (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_id (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_interval (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_leftPad (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_mask (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_maskChar (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_mid (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_pixel (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_planeMask (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_planes (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_red (client) {
+ return(0);
+}
+/*ARGSUSED*/
+Gen_Good_source (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_sourceChar (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_srcCmap (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_srcDrawable (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_srcX (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_srcY (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_threshold (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_time (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_timeout (client) {
+ return (0);
+}
+
+/*
+ * Routine: Gen_Good_Visual - return the resource ID for the client's
+ * visual
+ *
+ * Input: client - integer from 0 to MAX_CLIENTS
+ * scr - integer from 0 to ?
+ *
+ * Output: Visual ID - CARD32 from ? to ?
+ *
+ * Returns:
+ *
+ * Globals used: Xst_clients, SCREEN
+ *
+ * Side Effects:
+ *
+ * Methods: see X11/.../xdpyinfo.c, print_screen_info()
+ *
+ */
+
+VisualID
+Gen_Good_Visual (client,scr)
+ int client; /* client number */
+ int scr; /* screen number */
+{
+ XstVisual *vp; /* pointer to visual structure */
+
+ vp = Get_Visual (client,scr);
+ return (Get_Visual_ID (vp));
+}
+
+/*ARGSUSED*/
+Gen_Good_x (client) {
+ return (0);
+}
+/*ARGSUSED*/
+Gen_Good_y (client) {
+ return (0);
+}
+
+XID
+Get_Resource_Id(client)
+int client;
+{
+ XstDisplay *dpy = Get_Display(client);
+ return(dpy->resource_base + (dpy->resource_id++ << dpy->resource_shift));
+}
+
+/*ARGSUSED*/
+Gen_Good_Event(client,rp)
+int client;
+xReq *rp;
+{
+}
+
+/* func. to give min of 3 vars */
+static
+int min3(a, b, c)
+ int a,b,c;
+{
+ if (a < b)
+ b = a;
+ if (b < c)
+ c = b;
+ return c;
+}
+
+/*
+ * Get a suitable number of colormap entries to allocate.
+ */
+Get_Maxsize(client)
+ int client;
+{
+ XstVisual *vp;
+ int r,g,b;
+ unsigned long mask;
+
+ vp = Get_Visual(client, XstDefaultScreen(Get_Display(client)));
+
+ if (vp->class != DirectColor && vp->class != TrueColor)
+ return vp->map_entries;
+
+ for(r=0, mask=vp->red_mask; mask; mask >>= 1) {
+ if (mask & 0x1)
+ r++;
+ }
+ for(g=0, mask=vp->green_mask; mask; mask >>= 1) {
+ if (mask & 0x1)
+ g++;
+ }
+ for(b=0, mask=vp->blue_mask; mask; mask >>= 1) {
+ if (mask & 0x1)
+ b++;
+ }
+ return (1 << min3(r,g,b));
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/Expect.c b/xc/test/xsuite/xtest/src/libproto/Expect.c
new file mode 100644
index 000000000..a9d447431
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/Expect.c
@@ -0,0 +1,573 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: Expect.c 1.18 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[] = "$Header: Expect.c 1.18 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+
+#define Dont_Log_Twice(cl) do {\
+ int *countp = (Get_Test_Type(cl)==SETUP)?(&Xst_delete_count):(&Xst_error_count);\
+ if (*countp>0) (*countp)--; } while (0)
+
+extern int errno;
+extern int sys_nerr;
+extern char *sys_errlist[];
+
+static int max_extra = IBUFSIZE - sizeof (xReply);
+static char rbuf[IBUFSIZE];
+static char *rbp;
+static char *enames ();
+static char wanted[132];
+static char *got;
+
+static xGenericReply dummy_reply = {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+static char *expect_names[4] = {
+ "REPLY",
+ "ERROR",
+ "EVENT",
+ "NOTHING"
+};
+
+static char emsg[132];
+
+static int this_client;
+
+static void
+Timeout_Func () {
+ Log_Msg ("Expect: wanted %s, got TIMEOUT! (server may be dead)\n", wanted);
+ Finish (this_client);
+}
+
+static void
+Enable_Timeout (client)
+int client;
+{
+ this_client = client;
+ Set_Timer (EXPECT_TIMER_ID, Xst_timeout_value, Timeout_Func);
+}
+
+static void
+Disable_Timeout () {
+ Stop_Timer (EXPECT_TIMER_ID);
+}
+
+/*
+ * Routine: Expect_BadAccess()
+ * Call Expect_Error expecting BadAccess error.
+ */
+void
+Expect_BadAccess(client)
+int client;
+{
+ xError *err;
+
+ if ((err = Expect_Error(client, BadAccess)) == NULL) {
+ Dont_Log_Twice(client);
+ Log_Msg("client %d failed to receive Access error\n", client);
+ Finish(client);
+ } else {
+ Log_Trace("client %d received Access error\n", client);
+ Free_Error(err);
+ }
+}
+
+
+/*
+ * Routine: Expect_BadValue()
+ * Call Expect_Error expecting BadValue error.
+ */
+void
+Expect_BadValue(client)
+int client;
+{
+ xError *err;
+
+ if ((err = Expect_Error(client, BadValue)) == NULL) {
+ Dont_Log_Twice(client);
+ Log_Msg("client %d failed to recv BadValue error\n", client);
+ Finish(client);
+ } else {
+ Log_Trace("client %d received BadValue error\n", client);
+ Free_Error(err);
+ }
+}
+
+/*
+ * Routine: Expect_BadLength()
+ * Call Expect_Error expecting BadLength error.
+ */
+void
+Expect_BadLength(client)
+int client;
+{
+ xError *err;
+
+ if ((err = Expect_Error(client, BadLength)) == NULL) {
+ Dont_Log_Twice(client);
+ Log_Msg("client %d failed to recv BadLength error\n", client);
+ Finish(client);
+ } else {
+ Log_Trace("client %d received BadLength error\n", client);
+ Free_Error(err);
+ }
+}
+
+/*
+ * Routine: Expect_BadIDChoice()
+ * Call Expect_Error expecting BadIDChoice error.
+ */
+void
+Expect_BadIDChoice(client)
+int client;
+{
+ xError *err;
+
+ if ((err = Expect_Error(client, BadIDChoice)) == NULL) {
+ Dont_Log_Twice(client);
+ Log_Msg("client %d failed to recv BadIDChoice error\n", client);
+ Finish(client);
+ } else {
+ Log_Trace("client %d received BadIDChoice error\n", client);
+ Free_Error(err);
+ }
+}
+
+/*
+ * Routine: Expect - extract a response of the specified type and class
+ * from the server
+ *
+ * Input: client - integer between 0 and MAX_CLIENTS
+ * class - one of {EXPECT_ERROR, EXPECT_EVENT, EXPECT_REPLY,
+ * EXPECT_NOTHING}
+ * type - protocol type preceded by X_, e.g. X_GrabPointer
+ *
+ * Output: response if found, else null
+ *
+ * Returns:
+ *
+ * Globals used: Xst_clients
+ *
+ * Side Effects:
+ *
+ * Methods:
+ *
+ */
+#define THRESHOLD 42 /* number of unexpected, malformed or out
+ * of sequence replies/events/errors we will
+ * put up with.
+ */
+
+xReply
+* Expect (client, class, type)
+int client; /* client number */
+int class; /* expected class, e.g. event, error */
+int type; /* request type */
+{
+ XstDisplay * dpy = Get_Display (client);
+ xReply * rep = (xReply *) Xstmalloc (sizeof (xReply));
+ xReply * match = NULL;
+ int done = 0;
+ int strange = 0;
+ int done_reason = EXPECT_NOTHING;
+ unsigned long extra;
+ long so_far;
+ int needswap = Xst_clients[client].cl_swap;
+ void (*Log_Rtn)();
+
+ /* use if-else rather than ?: to init. Log_Rtn to avoid Sequent cc bug */
+ if (Get_Test_Type(client)==SETUP)
+ Log_Rtn = Log_Del;
+ else
+ Log_Rtn = Log_Err;
+
+ strcpy (wanted, enames (class, type));
+/*
+ * If a request has gone out since the last poll, need to update
+ * our notion of "outstanding request"
+ */
+ if (Xst_clients[client].cl_pollout < dpy -> request) {
+ Xst_clients[client].cl_reqout = dpy -> request;
+ }
+/*
+ * If we don't have a poll currently outstanding, send a poll
+ * to ensure that we hear from the server.
+ */
+ if (Xst_clients[client].cl_pollout == 0) {
+ Poll_Server (client);
+ }
+
+/*
+ * Now cycle through the messages coming back until we get something
+ * which corresponds explicitly to the last request sent
+ * (ie. either a reply or an error), or a poll reply.
+ *
+ * Replies and errors for PAST or FUTURE requests are
+ * error-logged and discarded. (ie. sequence number error)
+ *
+ * Replies or errors which explicitly correspond to the current
+ * request (ie. sequence numbers match) cause a return to the caller,
+ * with success/failure a function of what was "expected."
+ *
+ * Events are checked for "expectedness". If an expected event is
+ * received, it is immediately returned to the caller. If an
+ * unexpected event is received, it is error-logged and discarded.
+ *
+ * Poll replies which respond to polls prior to sending the current
+ * request are discarded. Poll replies which respond to polls after
+ * the current request cause a return to caller, with appropriate
+ * success/failure.
+ *
+ * Timeouts on reads are always logged, and the test terminated.
+ *
+ * Truncated reads are always logged, and the test terminated.
+ *
+ * System errors on reads are always logged, and the test terminated.
+ *
+ * Poll replies which appear malformed, or which are errors, are always
+ * logged, and the test terminated.
+ *
+ * Any reply/error/event indicating a length greater than ???? is
+ * logged, and the test terminated.
+ *
+ */
+
+ while (!done && strange < THRESHOLD) {
+
+ Get_Me_That (client, rbuf, so_far = (long) sizeof (xReply));
+/*
+ * unpack the constant header
+ */
+ rbp = rbuf;
+
+ rep->generic.type = unpack1(&rbp);
+ rep->generic.data1 = unpack1(&rbp);
+ rep->generic.sequenceNumber = unpack2(&rbp,needswap);
+ rep->generic.length = unpack4(&rbp,needswap);
+
+/*
+ * Check for a poll reply
+ */
+ if ((Xst_clients[client].cl_pollout == rep -> generic.sequenceNumber) &&
+ (rep->generic.type == X_Reply)) {
+/*
+ * Looks like a poll reply - check it out in more detail
+ */
+ Rcv_Poll (rep,rbuf, client);
+ if (Xst_clients[client].cl_pollout < Xst_clients[client].cl_reqout) {
+ Poll_Server (client); /* response to old poll, send another */
+ }
+ else {
+ Xst_clients[client].cl_pollout = 0;
+ done = 1; /* reponse to current poll */
+ done_reason = EXPECT_NOTHING;
+ }
+
+ continue; /* in any case, no further interest in
+ this */
+ }
+/*
+ * check type of reply
+ */
+
+ switch (rep -> generic.type) {
+ case X_Reply:
+ extra = (rep -> generic.length << 2);
+ if (extra > 0) {/* more to read */
+ if (extra > max_extra) {
+ Log_Msg ("Expect: too big a reply");
+ Show_Rep (rep, UNKNOWN_REQUEST_TYPE, so_far);
+ Finish (client);
+ }
+ so_far = (long) extra + sizeof (xReply);
+ rep = (xReply *) Xstrealloc ((char *) rep, (unsigned) so_far);
+ Get_Me_That (client, (char *) rbuf + sizeof (xReply), extra);
+ }
+/*
+ * Now the whole thing is in, lets look at it
+ */
+ if (!Rcv_Rep(rep,rbuf,Xst_clients[client].cl_reqtype,client)) {
+ match = NULL;
+ continue;
+ }
+ if (rep -> generic.sequenceNumber < (CARD16) Xst_clients[client].cl_reqout) {
+ (*Log_Rtn) ("Expect: reply for PAST request\n");
+ Show_Rep ((xReply *) rep, UNKNOWN_REQUEST_TYPE, so_far);
+ strange++;
+ continue;
+ }
+ if (rep -> generic.sequenceNumber > (CARD16)Xst_clients[client].cl_reqout) {
+ (*Log_Rtn) ("Expect: reply for FUTURE request\n");
+ Show_Rep ((xReply *) rep, UNKNOWN_REQUEST_TYPE, so_far);
+ strange++;
+ continue;
+ }
+/*
+ * this is a reply for the outstanding message
+ */
+ Log_Debug("Received reply:");
+ Show_Rep(rep,type, so_far);
+ done = 1;
+ done_reason = EXPECT_REPLY;
+ match = rep;
+ break;
+ case X_Error:
+ if(!Rcv_Err(rep,rbuf,client)) {
+ continue;
+ }
+ if (rep -> generic.sequenceNumber < (CARD16)Xst_clients[client].cl_reqout) {
+ (*Log_Rtn) ("Expect: error for PAST request\n");
+ Show_Err ((xError *) rep);
+ strange++;
+ continue;
+ }
+ if (rep -> generic.sequenceNumber > (CARD16)Xst_clients[client].cl_reqout) {
+ (*Log_Rtn) ("Expect: error for FUTURE request\n");
+ Show_Err ((xError *) rep);
+ strange++;
+ continue;
+ }
+/*
+ * this is an error for the outstanding message
+ */
+ Log_Debug("Received error:");
+ Show_Err(rep);
+ done = 1;
+ done_reason = EXPECT_ERROR;
+ match = rep;
+ break;
+/*
+ * if its not a reply or an error, its an event!
+ */
+ default:
+ if(!Rcv_Evt(rep,rbuf,client)) {
+ strange++;
+ continue;
+ }
+ if (real_type(rep -> event.u.u.type) != KeymapNotify) {
+ if (rep -> generic.sequenceNumber < (CARD16)Xst_clients[client].cl_reqout) {
+ (*Log_Rtn) ("Expect: event for PAST request\n");
+ Show_Evt ((xEvent *) rep);
+ strange++;
+ continue;
+ }
+ if (rep -> generic.sequenceNumber > (CARD16)Xst_clients[client].cl_reqout) {
+ (*Log_Rtn) ("Expect: event for FUTURE request\n");
+ Show_Evt ((xEvent *) rep);
+ strange++;
+ continue;
+ }
+ }
+ Log_Debug("Received event:");
+ Show_Evt(rep);
+ if ((class == EXPECT_EVENT) &&
+ (real_type(rep -> event.u.u.type) == type)) {
+ done = 1;
+ done_reason = EXPECT_EVENT;
+ match = rep;
+ continue;
+ }
+ got = enames (EXPECT_EVENT, (int) real_type(rep -> event.u.u.type));
+ (*Log_Rtn) ("Expect: wanted %s, got %s\n", wanted, got);
+ Show_Evt ((xEvent *) rep);
+ break;
+ }
+ }
+ if (strange >= THRESHOLD) {
+ /* we'll have got here with the strange count exceeded, probably
+ * due to sequence errors or replies to requests we don't think
+ * think we sent.
+ */
+ (*Log_Rtn) ("Expect: wanted %s but got at least %d unexpected, malformed or out of sequence replies/errors/events.\n",
+ wanted, strange);
+ return (NULL);
+ }
+ switch (done_reason) {
+ case EXPECT_REPLY:
+ if (class == EXPECT_REPLY) {
+ return (match); /* wanted one, got one */
+ }
+ got = enames (EXPECT_REPLY, Xst_clients[client].cl_reqtype);
+ (*Log_Rtn) ("Expect: wanted %s, got %s\n", wanted, got);
+ Show_Rep (rep, UNKNOWN_REQUEST_TYPE, so_far);
+ return (NULL);
+ case EXPECT_NOTHING:
+ if (class == EXPECT_NOTHING) {
+ return ((xReply *) & dummy_reply);
+ }
+ got = enames (EXPECT_NOTHING, 0);
+ (*Log_Rtn) ("Expect: wanted %s, got %s\n", wanted, got);
+ return (NULL);
+ case EXPECT_ERROR:
+ if (class != EXPECT_ERROR) {
+ got = enames (EXPECT_ERROR, (int) match -> error.errorCode);
+ (*Log_Rtn) ("Expect: wanted %s, got %s\n", wanted, got);
+ Show_Err ((xError *) rep);
+ return (NULL);
+ }
+ if (type != match -> error.errorCode) {
+ got = enames (EXPECT_ERROR, (int) match -> error.errorCode);
+ (*Log_Rtn) ("Expect: wanted %s, got %s\n", wanted, got);
+ Show_Err ((xError *) rep);
+ return (NULL);
+ }
+ return (match);
+ case EXPECT_EVENT:
+ /* the only way the "done_reason" would be EXPECT_EVENT is * if
+ we've already done the match */
+ return (match);
+ default:
+ break;
+ }
+ return ((xReply *) NULL);
+}
+
+
+Get_Me_That (client, rbuf, size)
+int client;
+char * rbuf;
+unsigned long size;
+{
+ XstDisplay * dpy = Get_Display (client);
+ int this_read;
+
+ Enable_Timeout (client);
+ while ((this_read = Xst_Read (dpy, (char *) rbuf, size)) < 0) {
+ if (errno == EINTR) {
+ continue;
+ }
+ else {
+ if ((errno >= 0) && (errno < sys_nerr)) {
+ (void) strcpy (emsg, sys_errlist[errno]);
+ }
+ else {
+ sprintf (emsg, "UNKNOWN ERROR - %d", errno);
+ }
+ Log_Msg ("Expect: wanted %s, got SYSTEM ERROR - %s\n", wanted, emsg);
+ Finish (client);
+ }
+ }
+ if (this_read < size) {
+ Log_Msg ("Expect: wanted %s, got TRUNCATED\n", wanted);
+ Log_Msg ("Expect: wanted %d additional, got %d\n",
+ size, this_read);
+ Show_Rep ((xReply *) rbuf, Xst_clients[client].cl_reqtype, (long)this_read);
+ Finish (client);
+ }
+ Disable_Timeout ();
+ return;
+}
+
+Poll_Server (client)
+int client;
+{
+ XstDisplay * dpy = Get_Display (client);
+ xReq * req;
+ int type;
+ TestType tt = Get_Test_Type(client);
+
+ switch (tt) {
+ case BAD_LENGTH:
+ case JUST_TOO_LONG:
+ case TOO_LONG:
+ Set_Test_Type(client, GOOD);
+ break;
+ }
+ req = Make_Req (client, X_GetInputFocus);
+ _Send_Req (client, req,1); /* tell 'em we're a poll */
+ Xst_clients[client].cl_pollout = dpy -> request;
+ Free_Req (req);
+ Set_Test_Type(client, tt);
+}
+
+static char
+ *enames (class, type)
+int class;
+int type;
+{
+ static char prtbuf[132];
+ char *(*namefunc)();
+ extern char *errorname();
+ extern char *eventname();
+ extern char *protoname();
+
+ switch (class) {
+ case EXPECT_REPLY:
+ namefunc = protoname;
+ break;
+ case EXPECT_ERROR:
+ namefunc = errorname;
+ break;
+ case EXPECT_EVENT:
+ namefunc = eventname;
+ break;
+ case EXPECT_NOTHING:
+ sprintf (prtbuf, "%s", expect_names[class]);
+ return prtbuf;
+ /*NOTREACHED*/
+ break;
+ default:
+ Log_Msg("INTERNAL ERROR: enames(%d,%d) - first arg not one of {%d,%d,%d,%d}\n",
+ class, type, EXPECT_REPLY, EXPECT_ERROR, EXPECT_EVENT,
+ EXPECT_NOTHING);
+ Delete ();
+ /*NOTREACHED*/
+ break;
+ }
+ sprintf (prtbuf, "%s - %s ", expect_names[class], (*namefunc)(type));
+ return (prtbuf);
+}
+
+int Rcv_Poll (rep, rbuf, client)
+ xReply * rep;
+ char rbuf[];
+ int client;
+{
+ return(Rcv_Rep(rep,rbuf, X_GetInputFocus, client));
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/Log.c b/xc/test/xsuite/xtest/src/libproto/Log.c
new file mode 100644
index 000000000..f36cbda4d
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/Log.c
@@ -0,0 +1,198 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: Log.c 1.8 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[] = "$Header: Log.c 1.8 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+#include "stdlib.h"
+#include "tet_api.h"
+
+extern char *TestName;
+
+/*
+ * The routines dealing with log files won't return any error status, since
+ * it was their job to log errors in the first place. In case of trouble,
+ * they will write on stderr.
+ */
+
+void
+Log_Open () {
+ /*
+ * In the T7 test suite, this function really opened a log file.
+ */
+}
+
+
+/*VARARGS1*/
+void Log_Err (a, b, c, d, e, f, g, h, i, j, k)
+char *a, *b, *c, *d, *e, *f, *h, *i, *j, *k;
+{
+ ++Xst_error_count;
+ Log_Msg (a, b, c, d, e, f, g, h, i, j, k);
+}
+
+/*VARARGS1*/
+void Log_Err_Detail (a, b, c, d, e, f, g, h, i, j, k)
+char *a, *b, *c, *d, *e, *f, *h, *i, *j, *k;
+{
+ Log_Trace (a, b, c, d, e, f, g, h, i, j, k);
+}
+
+/*VARARGS1*/
+void Log_Msg (a, b, c, d, e, f, g, h, i, j, k)
+char *a, *b, *c, *d, *e, *f, *h, *i, *j, *k;
+{
+ /* Use the TET reporting mechanism developed in the revised test suite */
+ report(a, b, c, d, e, f, g, h, i, j, k);
+}
+
+
+
+/*VARARGS1*/
+void Log_Trace (a, b, c, d, e, f, g, h, i, j, k)
+char *a, *b, *c, *d, *e, *f, *h, *i, *j, *k;
+{
+ /* Use the TET reporting mechanism developed in the revised test suite */
+ trace(a, b, c, d, e, f, g, h, i, j, k);
+}
+
+/*VARARGS1*/
+void Log_Del (a, b, c, d, e, f, g, h, i, j, k)
+char *a, *b, *c, *d, *e, *f, *h, *i, *j, *k;
+{
+ /* Use the TET reporting mechanism developed in the revised test suite */
+ /* ++Xst_delete_count; @* incremented in the xproto delete() */
+ delete(a, b, c, d, e, f, g, h, i, j, k);
+}
+
+/*VARARGS1*/
+void Log_Debug (a, b, c, d, e, f, g, h, i, j, k)
+char *a, *b, *c, *d, *e, *f, *h, *i, *j, *k;
+{
+ /* Use the TET reporting mechanism developed in the revised test suite */
+ debug(1, a, b, c, d, e, f, g, h, i, j, k);
+}
+
+/*VARARGS1*/
+void Log_Debug2 (a, b, c, d, e, f, g, h, i, j, k)
+char *a, *b, *c, *d, *e, *f, *h, *i, *j, *k;
+{
+ /* Use the TET reporting mechanism developed in the revised test suite */
+ debug(2, a, b, c, d, e, f, g, h, i, j, k);
+}
+
+/*VARARGS1*/
+void Log_Debug3 (a, b, c, d, e, f, g, h, i, j, k)
+char *a, *b, *c, *d, *e, *f, *h, *i, *j, *k;
+{
+ /* Use the TET reporting mechanism developed in the revised test suite */
+ debug(3, a, b, c, d, e, f, g, h, i, j, k);
+}
+
+/* support for trimming debug output if debuglevel is less than 3 */
+
+static int some_counter = 0;
+/* maximum number of lines for each variable length request */
+#define SOME_LIMIT 25
+/* debug level at which this maximum is ignored */
+#define THRESHOLD_FOR_ALL 4
+
+void
+Reset_Some()
+{
+ some_counter = 0;
+}
+
+/*VARARGS1*/
+void Log_Some (a, b, c, d, e, f, g, h, i, j, k)
+char *a, *b, *c, *d, *e, *f, *h, *i, *j, *k;
+{
+ /* Use the TET reporting mechanism developed in the revised test suite */
+ if (++some_counter > SOME_LIMIT && getdblev() < THRESHOLD_FOR_ALL) {
+ if (some_counter == (SOME_LIMIT + 1)) {
+ debug(2,"\t..... %d lines printing limit exceeded,\n", SOME_LIMIT);
+ debug(2,"\t\t(increase XT_DEBUG to %d for all lines.)\n", THRESHOLD_FOR_ALL);
+ } else {
+ return;
+ }
+ } else
+ debug(2, a, b, c, d, e, f, g, h, i, j, k);
+}
+
+int
+Log_Close ()
+{
+
+ /*
+ * In the T7 test suite, this function really closed a log file.
+ * Now this is done in the TET, but we can use this function as follows:
+ * All test purposes call Log_Close when the test purpose is complete.
+ * Therefore, this is the place where TET result codes can be assigned
+ * in failure cases.
+ */
+ /* any messages hopefully already done, so just a summary */
+ if(Xst_untested_count != 0) {
+ report("Test %s untested with %d %s.", TestName, Xst_untested_count,
+ (Xst_untested_count == 1) ? "reason" : "reasons");
+ tet_result(TET_UNTESTED);
+ return(EXIT_FAILURE);
+ }
+ if(Xst_delete_count != 0) {
+ report("Test %s unresolved with %d %s.", TestName, Xst_delete_count,
+ (Xst_delete_count == 1) ? "reason" : "reasons");
+ tet_result(TET_UNRESOLVED);
+ return(EXIT_FAILURE);
+ }
+ if(Xst_error_count != 0) {
+ report("Test %s failed with %d %s.", TestName, Xst_error_count,
+ (Xst_error_count == 1) ? "error" : "errors");
+ tet_result(TET_FAIL);
+ return(EXIT_FAILURE);
+ }
+ else
+ return(EXIT_SUCCESS);
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/MakeReq.c b/xc/test/xsuite/xtest/src/libproto/MakeReq.c
new file mode 100644
index 000000000..f6f702cad
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/MakeReq.c
@@ -0,0 +1,1192 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988, 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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, NEGLIGCE OR OTHER TORTIOUS ACTION, *
+ * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS *
+ * SOFTWARE. *
+ * ***************************************************************************
+ */
+
+/*
+ * $Header: MakeReq.c 1.23 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: MakeReq.c 1.23 89/04/17 $";
+#endif
+
+#include "DataMove.h"
+#include "XstlibInt.h"
+#include <X11/Xatom.h>
+#include <X11/X.h>
+
+#define RED 65535 /* default red intensity, range is 0 to 65535 */
+#define GREEN 65535 /* default green intensity, range is 0 to 65535 */
+#define BLUE 65535 /* default blue intensity, range is 0 to 65535 */
+#define NPLANES 0 /* default number of planes */
+#define PLANEMASK 0 /* default plane mask */
+#define TEST16_2 0x2129 /* ? character in test16 (16 bit) font */
+#define TEST16_3 0x212a /* ! character in test16 (16 bit) font */
+
+unsigned long reply_pixel;
+Atom Test_Atom1;
+Atom Test_Atom2;
+char *Test_prop = "__Test_Atom";
+static int bad_len,
+ alloc_len; /* significantly different only in TOO_LONG tests */
+static int this_client;
+
+/*
+ * X Protocol packetizing macros.
+ */
+
+/* The following four macros - GetReq, GetReqExtra, GetEmptyReq, and
+ GetResReq, all allocate memory for a request and initialize the
+ length and reqType fields of the request. Use GetEmptyReq for
+ requests with no parameters, GetResReq for requests with one
+ parameter, GetReq for fixed-length requests with more than one
+ parameter, and GetReqExtra for variable-length requests with more
+ than one parameter. Look in <X11/Xproto.h> for structure
+ definitions - this will help determine which one to use.
+*/
+/*
+ * GetReq - Get an X request packet and return it.
+ *
+ * "name" is the name of the request, e.g. CreatePixmap, OpenFont, etc.
+ * "req" is the name of the request pointer.
+ *
+ * - assumes 'dpy' available
+ * - packet is 'malloc'ed, must be 'free'd later
+ *
+ */
+
+
+/*
+ * Macro: GetReq - allocates memory for a fixed-length request that
+ * takes more than one parameter, and initialize the the length and
+ * reqType fields of the request.
+ *
+ * Input: name - request name
+ * req - pointer to request struct
+ *
+ * Output: allocated, initialized request structure
+ *
+ * Returns:
+ *
+ * Globals used: this_client (test_type) (IN), bad_len (OUT)
+ * and alloc_len (OUT).
+ *
+ * Side Effects: allocates memory, assigns to bad_len.
+ *
+ * Methods:
+ *
+ */
+
+#if __STDC__ == 1
+#define GetReq(name, req) \
+ bad_len = (Get_Test_Type(this_client) == TOO_LONG) ? \
+ ((sizeof(x##name##Req))>>2) : \
+ ( \
+ (Get_Test_Type(this_client) == JUST_TOO_LONG) ? \
+ ((sizeof(x##name##Req))>>2) + 1 : \
+ ((sizeof(x##name##Req))>>2) - 1 \
+ );\
+ if (Get_Test_Type(this_client) == TOO_LONG) \
+ alloc_len = Get_Max_Request(client) + 1; \
+ else \
+ alloc_len = bad_len; \
+ req = (xReq *)Xstmalloc(max(sizeof(x##name##Req), (alloc_len<<2))); \
+ req->length = (sizeof(x##name##Req))>>2;\
+ req->reqType = X_##name
+#else
+#define GetReq(name, req) \
+ bad_len = (Get_Test_Type(this_client) == TOO_LONG) ? \
+ ((sizeof(x/**/name/**/Req))>>2) : \
+ ( \
+ (Get_Test_Type(this_client) == JUST_TOO_LONG) ? \
+ ((sizeof(x/**/name/**/Req))>>2) + 1 : \
+ ((sizeof(x/**/name/**/Req))>>2) - 1 \
+ );\
+ if (Get_Test_Type(this_client) == TOO_LONG) \
+ alloc_len = Get_Max_Request(client) + 1; \
+ else \
+ alloc_len = bad_len; \
+ req = (xReq *)Xstmalloc(max(sizeof(x/**/name/**/Req), (alloc_len<<2))); \
+ req->length = (sizeof(x/**/name/**/Req))>>2;\
+ req->reqType = X_/**/name
+#endif
+
+/*
+ * Macro: GetReqExtra - allocates memory for a variable-length request
+ * that takes more than one parameter, and initialize the length and
+ * reqType fields of the request.
+ *
+ * Input: name - request name
+ * n - number of extra bytes to allocate
+ * req - pointer to request struct
+ *
+ * Output: allocated, initialized request structure
+ *
+ * Returns:
+ *
+ * Globals used: this_client (test_type) (IN), bad_len (OUT)
+ * and alloc_len (OUT).
+ *
+ * Side Effects: allocates memory, assigns to bad_len.
+ *
+ * Methods:
+ *
+ */
+
+#if __STDC__ == 1
+#define GetReqExtra(name, n, req) \
+ bad_len = (Get_Test_Type(this_client) == TOO_LONG) ? \
+ (sizeof(x##name##Req)+padup(n))>>2 : \
+ ( \
+ (Get_Test_Type(this_client) == JUST_TOO_LONG) ? \
+ ((sizeof(x##name##Req)+padup(n))>>2) + 1 : \
+ ((sizeof(x##name##Req))>>2) - 1 \
+ );\
+ if (Get_Test_Type(this_client) == TOO_LONG) \
+ alloc_len = Get_Max_Request(client) + 1; \
+ else \
+ alloc_len = bad_len; \
+ req = (xReq *)Xstmalloc(max((sizeof(x##name##Req)+padup(n)), (alloc_len<<2))); \
+ req->length = (sizeof(x##name##Req)+padup(n))>>2;\
+ req->reqType = X_##name;\
+ valuePtr = (char *) Get_Value_Ptr(req,name)
+#else
+#define GetReqExtra(name, n, req) \
+ bad_len = (Get_Test_Type(this_client) == TOO_LONG) ? \
+ (sizeof(x/**/name/**/Req)+padup(n))>>2 : \
+ ( \
+ (Get_Test_Type(this_client) == JUST_TOO_LONG) ? \
+ ((sizeof(x/**/name/**/Req)+padup(n))>>2) + 1 : \
+ ((sizeof(x/**/name/**/Req))>>2) - 1 \
+ );\
+ if (Get_Test_Type(this_client) == TOO_LONG) \
+ alloc_len = Get_Max_Request(client) + 1; \
+ else \
+ alloc_len = bad_len; \
+ req = (xReq *)Xstmalloc(max((sizeof(x/**/name/**/Req)+padup(n)), (alloc_len<<2))); \
+ req->length = (sizeof(x/**/name/**/Req)+padup(n))>>2;\
+ req->reqType = X_/**/name;\
+ valuePtr = (char *) Get_Value_Ptr(req,name)
+#endif
+
+/*
+ * Macro: GetEmptyReq - allocate memory for a request that takes no
+ * parameters, and initialize the length, reqType fields of the request.
+ *
+ * Input: name - request name
+ * req - pointer to request struct
+ *
+ * Output: allocated, initialized request structure
+ *
+ * Returns:
+ *
+ * Globals used: this_client (test_type) (IN), bad_len (OUT)
+ * and alloc_len (OUT).
+ *
+ * Side Effects: allocates memory, assigns to bad_len.
+ *
+ * Methods:
+ *
+ */
+
+#if __STDC__ == 1
+#define GetEmptyReq(name, req) \
+ bad_len = (Get_Test_Type(this_client) == TOO_LONG) ? \
+ 1 : \
+ ( \
+ (Get_Test_Type(this_client) == JUST_TOO_LONG) ? \
+ 2 : 0 \
+ );\
+ if (Get_Test_Type(this_client) == TOO_LONG) \
+ alloc_len = Get_Max_Request(client) + 1; \
+ else \
+ alloc_len = bad_len; \
+ req = (xReq *)Xstmalloc(max(sizeof(xReq), (alloc_len<<2))); \
+ req->length = 1;\
+ req->reqType = X_##name
+#else
+#define GetEmptyReq(name, req) \
+ bad_len = (Get_Test_Type(this_client) == TOO_LONG) ? \
+ 1 : \
+ ( \
+ (Get_Test_Type(this_client) == JUST_TOO_LONG) ? \
+ 2 : 0 \
+ );\
+ if (Get_Test_Type(this_client) == TOO_LONG) \
+ alloc_len = Get_Max_Request(client) + 1; \
+ else \
+ alloc_len = bad_len; \
+ req = (xReq *)Xstmalloc(max(sizeof(xReq), (alloc_len<<2))); \
+ req->length = 1;\
+ req->reqType = X_/**/name
+#endif
+
+/*
+ intent: allocate memory for a request that takes one parameter,
+ and initialize the length, reqType, id fields of the request.
+ input: name - request name as defined in X11 protocol spec
+ rid - resource id (integer from ? to ?)
+ req - pointer to xReq
+ output:
+ globals used: this_client (test_type) (IN), bad_len (OUT)
+ and alloc_len (OUT).
+ side effects: allocates memory, assigns to bad_len.
+ methods:
+*/
+
+#if __STDC__ == 1
+#define GetResReq(name,rid,req)\
+ bad_len = (Get_Test_Type(this_client) == TOO_LONG) ? \
+ 2 : \
+ ( \
+ (Get_Test_Type(this_client) == JUST_TOO_LONG) ? \
+ 3 : 1 \
+ );\
+ if (Get_Test_Type(this_client) == TOO_LONG) \
+ alloc_len = Get_Max_Request(client) + 1; \
+ else \
+ alloc_len = bad_len; \
+ req = (xReq *)Xstmalloc(max(sizeof(xResourceReq), (alloc_len<<2)));\
+ req->length = 2;\
+ req->reqType = X_##name;\
+ ((xResourceReq *)req)->id = (rid)
+#else
+#define GetResReq(name,rid,req)\
+ bad_len = (Get_Test_Type(this_client) == TOO_LONG) ? \
+ 2 : \
+ ( \
+ (Get_Test_Type(this_client) == JUST_TOO_LONG) ? \
+ 3 : 1 \
+ );\
+ if (Get_Test_Type(this_client) == TOO_LONG) \
+ alloc_len = Get_Max_Request(client) + 1; \
+ else \
+ alloc_len = bad_len; \
+ req = (xReq *)Xstmalloc(max(sizeof(xResourceReq), (alloc_len<<2)));\
+ req->length = 2;\
+ req->reqType = X_/**/name;\
+ ((xResourceReq *)req)->id = (rid)
+#endif
+
+
+#define UNKNOWN_LENGTH 0
+
+/*
+ intent: return a pointer to a "filled in" protocol request
+ input: client - client created by invoking Create_Client
+ type - protocol request type e.g. X_CopyArea
+ output: rp - pointer to allocated and initialized request
+ global input: Get_Test_Type(client)
+ side-effects: causes memory to be allocated for requests
+ methods:
+*/
+xReq
+*Make_Req(client,type)
+int client;
+int type;
+{
+ xReq *rp;
+ char *valuePtr = NULL; /* set NULL to trap errors */
+ XstDisplay *dpy = Get_Display(client);
+
+ /* if max_request_size is 65535 then we can't exceed it in the 16-bit
+ * length field of requests so no TOO_LONG testing can be done. In
+ * this case abandon ship now, with a reason.
+ */
+ if (dpy->max_request_size >= (unsigned)0x0000ffff &&
+ Get_Test_Type(client) == TOO_LONG) {
+ unsigned n = dpy->max_request_size;
+
+ Log_Msg("This server accepts the largest requests possible (%d words, %d bytes)\n", n, n<<2);
+ Log_Msg("\tso this test cannot be performed.\n");
+ Destroy_Client(client);
+ Untested();
+ /*NOTREACHED*/
+ }
+
+ this_client = client;
+
+ switch (type) {
+ case X_CreateWindow:
+ GetReq(CreateWindow,rp);
+ ((xCreateWindowReq *)rp)->depth = CopyFromParent;
+ ((xCreateWindowReq *)rp)->wid = (Window) Get_Resource_Id(client);
+ ((xCreateWindowReq *)rp)->parent = Get_Root_Id(client);
+ ((xCreateWindowReq *)rp)->x = 0;
+ ((xCreateWindowReq *)rp)->y = 0;
+ ((xCreateWindowReq *)rp)->width = Get_Screen_Width(client)/2;
+ ((xCreateWindowReq *)rp)->height = Get_Screen_Height(client)/2;
+ ((xCreateWindowReq *)rp)->borderWidth = 0;
+ ((xCreateWindowReq *)rp)->class = InputOutput;
+ ((xCreateWindowReq *)rp)->visual = CopyFromParent;
+ ((xCreateWindowReq *)rp)->mask = 0; /* no values yet */
+ rp = Add_Masked_Value(rp,CWBackPixel,(unsigned long) 1);
+ rp = Add_Masked_Value(rp,CWEventMask,(unsigned long)ExposureMask);
+ rp = Add_Masked_Value(rp,CWOverrideRedirect,(unsigned long)Xst_override);
+ break;
+ case X_ChangeWindowAttributes:
+ GetReq(ChangeWindowAttributes,rp);
+ ((xChangeWindowAttributesReq *)rp)->window = Get_Default_Window(client);
+ ((xChangeWindowAttributesReq *)rp)->valueMask = 0;
+ rp = Add_Masked_Value(rp,CWWinGravity,(unsigned long)SouthEastGravity);
+ if (Get_Test_Type(this_client) == JUST_TOO_LONG)
+ bad_len++;
+ break;
+ case X_GetWindowAttributes:
+ GetResReq(GetWindowAttributes,Get_Default_Window(client),rp);
+ break;
+ case X_DestroyWindow:
+ GetResReq(DestroyWindow,Get_Default_Window(client),rp);
+ break;
+ case X_DestroySubwindows:
+ GetResReq(DestroySubwindows,Get_Default_Window(client),rp);
+ break;
+ case X_ChangeSaveSet:
+ GetReq(ChangeSaveSet,rp);
+ ((xChangeSaveSetReq *)rp)->mode = SetModeInsert;
+ ((xChangeSaveSetReq *)rp)->window = Get_Default_Window(client);
+ break;
+ case X_ReparentWindow:
+ GetReq(ReparentWindow,rp);
+ ((xReparentWindowReq *)rp)->window = Get_Default_Window(client);
+ ((xReparentWindowReq *)rp)->parent = Get_Root_Id(client);
+ ((xReparentWindowReq *)rp)->x = 0;
+ ((xReparentWindowReq *)rp)->y = 0;
+ break;
+ case X_MapWindow:
+ GetResReq(MapWindow,Get_Default_Window(client),rp);
+ break;
+ case X_MapSubwindows:
+ GetResReq(MapSubwindows,Get_Default_Window(client),rp);
+ break;
+ case X_UnmapWindow:
+ GetResReq(UnmapWindow,Get_Default_Window(client),rp);
+ break;
+ case X_UnmapSubwindows:
+ GetResReq(UnmapSubwindows,Get_Default_Window(client),rp);
+ break;
+ case X_ConfigureWindow:
+ GetReq(ConfigureWindow,rp);
+ ((xConfigureWindowReq *)rp)->window = Get_Default_Window(client);
+ ((xConfigureWindowReq *)rp)->mask = 0;
+ rp = Add_Masked_Value(rp,CWY,(unsigned long)(Get_Screen_Height(client)/2 + 2));
+ if (Get_Test_Type(this_client) == JUST_TOO_LONG)
+ bad_len++;
+ break;
+ case X_CirculateWindow:
+ GetReq(CirculateWindow,rp);
+ ((xCirculateWindowReq *)rp)->direction = RaiseLowest;
+ ((xCirculateWindowReq *)rp)->window = Get_Default_Window(client);
+ break;
+ case X_GetGeometry:
+ GetResReq(GetGeometry,Get_Default_Window(client),rp);
+ break;
+ case X_QueryTree:
+ GetResReq(QueryTree,Get_Default_Window(client),rp);
+ break;
+ case X_InternAtom:
+ GetReqExtra(InternAtom,((int)(3+strlen(Test_prop))>>2) << 2,rp);
+ ((xInternAtomReq *)rp)->onlyIfExists = False;
+ ((xInternAtomReq *)rp)->nbytes = strlen(Test_prop);
+ Copy_Padded_String8(&valuePtr, Test_prop);
+ break;
+ case X_GetAtomName:
+ GetResReq(GetAtomName,XA_NOTICE,rp);
+ break;
+ case X_ChangeProperty:
+ GetReqExtra(ChangeProperty,15,rp);
+ ((xChangePropertyReq *)rp)->mode = PropModeReplace;
+ ((xChangePropertyReq *)rp)->window = Get_Default_Window(client);
+ ((xChangePropertyReq *)rp)->property = Get_Default_Atom(client);
+ ((xChangePropertyReq *)rp)->type = XA_STRING;
+ ((xChangePropertyReq *)rp)->format = 8;
+ ((xChangePropertyReq *)rp)->nUnits = 15;
+ Copy_Padded_String8(&valuePtr, "Test prop data.");
+ break;
+ case X_DeleteProperty:
+ GetReq(DeleteProperty,rp);
+ ((xDeletePropertyReq *)rp)->window = Get_Default_Window(client);
+ ((xDeletePropertyReq *)rp)->property = Get_Default_Atom(client);
+ break;
+ case X_GetProperty:
+ GetReq(GetProperty,rp);
+ ((xGetPropertyReq *)rp)->delete = False;
+ ((xGetPropertyReq *)rp)->window = Get_Default_Window(client);
+ ((xGetPropertyReq *)rp)->property = Get_Default_Atom(client);
+ ((xGetPropertyReq *)rp)->type = AnyPropertyType;
+ ((xGetPropertyReq *)rp)->longOffset = 0;
+ ((xGetPropertyReq *)rp)->longLength = 100;
+ break;
+ case X_ListProperties:
+ GetResReq(ListProperties,Get_Default_Window(client),rp);
+ break;
+ case X_SetSelectionOwner:
+ GetReq(SetSelectionOwner,rp);
+ ((xSetSelectionOwnerReq *)rp)->window = Get_Default_Window(client);
+ ((xSetSelectionOwnerReq *)rp)->selection = Get_Default_Atom(client);
+ ((xSetSelectionOwnerReq *)rp)->time = CurrentTime;
+ break;
+ case X_GetSelectionOwner:
+ GetResReq(GetSelectionOwner,Get_Default_Atom(client),rp);
+ break;
+ case X_ConvertSelection:
+ GetReq(ConvertSelection,rp);
+ ((xConvertSelectionReq *)rp)->requestor = Get_Default_Window(client);
+ ((xConvertSelectionReq *)rp)->selection = Get_Default_Atom(client);
+ ((xConvertSelectionReq *)rp)->target = 31; /* STRING */
+ ((xConvertSelectionReq *)rp)->property = Get_Default_Atom(client);
+ ((xConvertSelectionReq *)rp)->time = Gen_Good_time(client);
+ break;
+ case X_SendEvent:
+ GetReq(SendEvent,rp);
+ ((xSendEventReq *)rp)->propagate = False;
+ ((xSendEventReq *)rp)->destination = Get_Default_Window(client);
+ ((xSendEventReq *)rp)->eventMask = NoEventMask;
+ ((xSendEventReq *)rp)->event = Get_Default_Event(client);
+ break;
+ case X_GrabPointer:
+ GetReq(GrabPointer,rp);
+ ((xGrabPointerReq *)rp)->ownerEvents = False;
+ ((xGrabPointerReq *)rp)->grabWindow = Get_Default_Window(client);
+ ((xGrabPointerReq *)rp)->eventMask = 0x7ffc;
+ ((xGrabPointerReq *)rp)->pointerMode = GrabModeAsync;
+ ((xGrabPointerReq *)rp)->keyboardMode = GrabModeAsync;
+ ((xGrabPointerReq *)rp)->confineTo = None;
+ ((xGrabPointerReq *)rp)->cursor = None;
+ ((xGrabPointerReq *)rp)->time = CurrentTime;
+ break;
+ case X_UngrabPointer:
+ GetResReq(UngrabPointer,CurrentTime,rp);
+ break;
+ case X_GrabButton:
+ GetReq(GrabButton,rp);
+ ((xGrabButtonReq *)rp)->ownerEvents = False;
+ ((xGrabButtonReq *)rp)->grabWindow = Get_Default_Window(client);
+ ((xGrabButtonReq *)rp)->eventMask = 0x7ffc;
+ ((xGrabButtonReq *)rp)->pointerMode = GrabModeAsync;
+ ((xGrabButtonReq *)rp)->keyboardMode = GrabModeAsync;
+ ((xGrabButtonReq *)rp)->confineTo = None;
+ ((xGrabButtonReq *)rp)->cursor = None;
+ ((xGrabButtonReq *)rp)->button = AnyButton;
+ ((xGrabButtonReq *)rp)->modifiers = AnyModifier;
+ break;
+ case X_UngrabButton:
+ GetReq(UngrabButton,rp);
+ ((xUngrabButtonReq *)rp)->button = AnyButton;
+ ((xUngrabButtonReq *)rp)->grabWindow = Get_Default_Window(client);
+ ((xUngrabButtonReq *)rp)->modifiers = AnyModifier;
+ break;
+ case X_ChangeActivePointerGrab:
+ GetReq(ChangeActivePointerGrab,rp);
+ ((xChangeActivePointerGrabReq *)rp)->cursor = None;
+ ((xChangeActivePointerGrabReq *)rp)->time = CurrentTime;
+ ((xChangeActivePointerGrabReq *)rp)->eventMask = NoEventMask;
+ break;
+ case X_GrabKeyboard:
+ GetReq(GrabKeyboard,rp);
+ ((xGrabKeyboardReq *)rp)->ownerEvents = False;
+ ((xGrabKeyboardReq *)rp)->grabWindow = Get_Default_Window(client);
+ ((xGrabKeyboardReq *)rp)->time = CurrentTime;
+ ((xGrabKeyboardReq *)rp)->pointerMode = GrabModeAsync;
+ ((xGrabKeyboardReq *)rp)->keyboardMode = GrabModeAsync;
+ break;
+ case X_UngrabKeyboard:
+ GetResReq(UngrabKeyboard,CurrentTime,rp);
+ break;
+ case X_GrabKey:
+ GetReq(GrabKey,rp);
+ ((xGrabKeyReq *)rp)->ownerEvents = False;
+ ((xGrabKeyReq *)rp)->grabWindow = Get_Default_Window(client);
+ ((xGrabKeyReq *)rp)->modifiers = AnyModifier;
+ ((xGrabKeyReq *)rp)->key = AnyKey;
+ ((xGrabKeyReq *)rp)->pointerMode = GrabModeAsync;
+ ((xGrabKeyReq *)rp)->keyboardMode = GrabModeAsync;
+ break;
+ case X_UngrabKey:
+ GetReq(UngrabKey,rp);
+ ((xUngrabKeyReq *)rp)->key = AnyKey;
+ ((xUngrabKeyReq *)rp)->grabWindow = Get_Default_Window(client);
+ ((xUngrabKeyReq *)rp)->modifiers = AnyModifier;
+ break;
+ case X_AllowEvents:
+ GetReq(AllowEvents,rp);
+ ((xAllowEventsReq *)rp)->mode = AsyncPointer;
+ ((xAllowEventsReq *)rp)->time = CurrentTime;
+ break;
+ case X_GrabServer:
+ GetEmptyReq(GrabServer,rp);
+ break;
+ case X_UngrabServer:
+ GetEmptyReq(UngrabServer,rp);
+ break;
+ case X_QueryPointer:
+ GetResReq(QueryPointer,Get_Default_Window(client),rp);
+ break;
+ case X_GetMotionEvents:
+ GetReq(GetMotionEvents,rp);
+ ((xGetMotionEventsReq *)rp)->window = Get_Default_Window(client);
+ ((xGetMotionEventsReq *)rp)->start = CurrentTime;
+ ((xGetMotionEventsReq *)rp)->stop = CurrentTime;
+ break;
+ case X_TranslateCoords:
+ GetReq(TranslateCoords,rp);
+ ((xTranslateCoordsReq *)rp)->srcWid = Get_Default_Window(client);
+ ((xTranslateCoordsReq *)rp)->dstWid = Get_Default_Window(client);
+ ((xTranslateCoordsReq *)rp)->srcX = Gen_Good_srcX(client);
+ ((xTranslateCoordsReq *)rp)->srcY = Gen_Good_srcY(client);
+ break;
+ case X_WarpPointer:
+ GetReq(WarpPointer,rp);
+ ((xWarpPointerReq *)rp)->srcWid = None;
+ ((xWarpPointerReq *)rp)->dstWid = None;
+ ((xWarpPointerReq *)rp)->srcX = 0;
+ ((xWarpPointerReq *)rp)->srcY = 0;
+ ((xWarpPointerReq *)rp)->srcWidth = 0;
+ ((xWarpPointerReq *)rp)->srcHeight = 0;
+ ((xWarpPointerReq *)rp)->dstX = Get_Screen_Width(client) / 4;
+ ((xWarpPointerReq *)rp)->dstY = Get_Screen_Height(client) / 4;
+ break;
+ case X_SetInputFocus:
+ GetReq(SetInputFocus,rp);
+ ((xSetInputFocusReq *)rp)->revertTo = RevertToPointerRoot;
+ ((xSetInputFocusReq *)rp)->focus = Get_Default_Window(client);
+ ((xSetInputFocusReq *)rp)->time = CurrentTime;
+ break;
+ case X_GetInputFocus:
+ GetEmptyReq(GetInputFocus,rp);
+ break;
+ case X_QueryKeymap:
+ GetEmptyReq(QueryKeymap,rp);
+ break;
+ case X_OpenFont:
+ GetReqExtra(OpenFont,(int)strlen(Xst_def_font8),rp);
+ ((xOpenFontReq *)rp)->fid = (Font) Get_Resource_Id(client);
+ ((xOpenFontReq *)rp)->nbytes = strlen(Xst_def_font8);
+ Copy_Padded_String8(&valuePtr, Xst_def_font8);
+ break;
+ case X_CloseFont:
+ GetResReq(CloseFont,Get_Default_Font(client),rp);
+ break;
+ case X_QueryFont:
+ GetResReq(QueryFont,Get_Default_Font(client),rp);
+ break;
+ case X_QueryTextExtents:
+ GetReqExtra(QueryTextExtents,10,rp);
+ ((xQueryTextExtentsReq *)rp)->oddLength = False;
+ ((xQueryTextExtentsReq *)rp)->fid = Get_Default_Font(client);
+ Copy_Padded_String16(&valuePtr, "[a-z]");
+ break;
+ case X_ListFonts:
+ GetReqExtra(ListFonts,1,rp);
+ ((xListFontsReq *)rp)->maxNames = 200;
+ ((xListFontsReq *)rp)->nbytes = 1;
+ Copy_Padded_String8(&valuePtr, "xtfont1");
+ break;
+ case X_ListFontsWithInfo:
+ GetReqExtra(ListFontsWithInfo,1,rp);
+ ((xListFontsWithInfoReq *)rp)->maxNames = 200;
+ ((xListFontsWithInfoReq *)rp)->nbytes = 1;
+ Copy_Padded_String8(&valuePtr, "xtfont1");
+ break;
+ case X_SetFontPath:
+ GetReqExtra(SetFontPath,0,rp);
+ ((xSetFontPathReq *)rp)->nFonts = 0;
+ /*
+ * NOTE - This requires a value list if you want to send
+ * anything besides 'nFonts=0'
+ */
+ break;
+ case X_GetFontPath:
+ GetEmptyReq(GetFontPath,rp);
+ break;
+ case X_CreatePixmap:
+ GetReq(CreatePixmap,rp);
+ ((xCreatePixmapReq *)rp)->depth = Gen_Good_depth(client);
+ ((xCreatePixmapReq *)rp)->pid = (Pixmap) Get_Resource_Id(client);
+ ((xCreatePixmapReq *)rp)->drawable = Get_Default_Window(client);
+ ((xCreatePixmapReq *)rp)->width = Get_Screen_Width(client)/2;
+ ((xCreatePixmapReq *)rp)->height = Get_Screen_Height(client)/2;
+ break;
+ case X_FreePixmap:
+ GetResReq(FreePixmap,Get_Default_Pixmap(client),rp);
+ break;
+ case X_CreateGC:
+ GetReq(CreateGC,rp);
+ ((xCreateGCReq *)rp)->gc = (GContext) Get_Resource_Id(client);
+ ((xCreateGCReq *)rp)->drawable = Get_Default_Window(client);
+ ((xCreateGCReq *)rp)->mask = 0;
+ break;
+ case X_ChangeGC:
+ GetReq(ChangeGC,rp);
+ ((xChangeGCReq *)rp)->gc = Get_Default_GContext(client);
+ ((xChangeGCReq *)rp)->mask = 0;
+ rp = Add_Masked_Value(rp,GCLineStyle,(unsigned long)LineOnOffDash);
+ if (Get_Test_Type(this_client) == JUST_TOO_LONG)
+ bad_len++;
+ break;
+ case X_CopyGC:
+ GetReq(CopyGC,rp);
+ ((xCopyGCReq *)rp)->srcGC = Get_Default_GContext(client);
+ ((xCopyGCReq *)rp)->dstGC = Get_Default_GContext(client);
+ ((xCopyGCReq *)rp)->mask = GCLineStyle;
+ break;
+ case X_SetDashes:
+ GetReqExtra(SetDashes,4,rp);
+ ((xSetDashesReq *)rp)->gc = Get_Default_GContext(client);
+ ((xSetDashesReq *)rp)->dashOffset = 6;
+ ((xSetDashesReq *)rp)->nDashes = 4;
+ Set_Value1(&valuePtr,2);
+ Set_Value1(&valuePtr,2);
+ Set_Value1(&valuePtr,2);
+ Set_Value1(&valuePtr,6);
+ break;
+ case X_SetClipRectangles:
+ GetReqExtra(SetClipRectangles,8,rp);
+ ((xSetClipRectanglesReq *)rp)->ordering = Unsorted;
+ ((xSetClipRectanglesReq *)rp)->gc = Get_Default_GContext(client);
+ ((xSetClipRectanglesReq *)rp)->xOrigin = 0;
+ ((xSetClipRectanglesReq *)rp)->yOrigin = 0;
+ Set_Value2(&valuePtr,0); /* x */
+ Set_Value2(&valuePtr,0); /* y */
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4); /* width */
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4); /* height */
+ break;
+ case X_FreeGC:
+ GetResReq(FreeGC,Get_Default_GContext(client),rp);
+ break;
+ case X_ClearArea:
+ GetReq(ClearArea,rp);
+ ((xClearAreaReq *)rp)->exposures = True;
+ ((xClearAreaReq *)rp)->window = Get_Default_Window(client);
+ ((xClearAreaReq *)rp)->x = 0;
+ ((xClearAreaReq *)rp)->y = 0;
+ ((xClearAreaReq *)rp)->width = 0;
+ ((xClearAreaReq *)rp)->height = 0;
+ break;
+ case X_CopyArea:
+ GetReq(CopyArea,rp);
+ ((xCopyAreaReq *)rp)->srcDrawable = Get_Default_Window(client);
+ ((xCopyAreaReq *)rp)->dstDrawable = Get_Default_Window(client);
+ ((xCopyAreaReq *)rp)->gc = Get_Default_GContext(client);
+ ((xCopyAreaReq *)rp)->srcX = 0;
+ ((xCopyAreaReq *)rp)->srcY = 0;
+ ((xCopyAreaReq *)rp)->dstX = 0;
+ ((xCopyAreaReq *)rp)->dstY = 0;
+ ((xCopyAreaReq *)rp)->width = Get_Screen_Width(client)/4;
+ ((xCopyAreaReq *)rp)->height = Get_Screen_Height(client)/4;
+ break;
+ case X_CopyPlane:
+ GetReq(CopyPlane,rp);
+ ((xCopyPlaneReq *)rp)->srcDrawable = Get_Default_Window(client);
+ ((xCopyPlaneReq *)rp)->dstDrawable = Get_Default_Window(client);
+ ((xCopyPlaneReq *)rp)->gc = Get_Default_GContext(client);
+ ((xCopyPlaneReq *)rp)->srcX = 0;
+ ((xCopyPlaneReq *)rp)->srcY = 0;
+ ((xCopyPlaneReq *)rp)->dstX = 0;
+ ((xCopyPlaneReq *)rp)->dstY = 0;
+ ((xCopyPlaneReq *)rp)->width = Get_Screen_Width(client)/4;
+ ((xCopyPlaneReq *)rp)->height = Get_Screen_Height(client)/4;
+ ((xCopyPlaneReq *)rp)->bitPlane = 1;
+ break;
+ case X_PolyPoint:
+ GetReqExtra(PolyPoint,12,rp);
+ ((xPolyPointReq *)rp)->coordMode = CoordModeOrigin;
+ ((xPolyPointReq *)rp)->drawable = Get_Default_Window(client);
+ ((xPolyPointReq *)rp)->gc = Get_Default_GContext(client);
+ Set_Value2(&valuePtr,1); /* x[0] */
+ Set_Value2(&valuePtr,1); /* y[0] */
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4); /* x[1] */
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4); /* y[1] */
+ Set_Value2(&valuePtr,(Get_Screen_Width(client)/2)-1); /* x[2] */
+ Set_Value2(&valuePtr,(Get_Screen_Height(client)/2)-1); /* y[2] */
+
+ break;
+ case X_PolyLine:
+ GetReqExtra(PolyLine,32,rp);
+ ((xPolyLineReq *)rp)->coordMode = CoordModeOrigin;
+ ((xPolyLineReq *)rp)->drawable = Get_Default_Window(client);
+ ((xPolyLineReq *)rp)->gc = Get_Default_GContext(client);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/2-1);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/2-1);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/2-1);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/2-1);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ break;
+ case X_PolySegment:
+ GetReqExtra(PolySegment,32,rp);
+ ((xPolySegmentReq *)rp)->drawable = Get_Default_Window(client);
+ ((xPolySegmentReq *)rp)->gc = Get_Default_GContext(client);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/2-1);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/2-1);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/2-1);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/2-1);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ break;
+ case X_PolyRectangle:
+ GetReqExtra(PolyRectangle,16,rp);
+ ((xPolyRectangleReq *)rp)->drawable = Get_Default_Window(client);
+ ((xPolyRectangleReq *)rp)->gc = Get_Default_GContext(client);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/8);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/8);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ break;
+ case X_PolyArc:
+ GetReqExtra(PolyArc,12,rp);
+ ((xPolyArcReq *)rp)->drawable = Get_Default_Window(client);
+ ((xPolyArcReq *)rp)->gc = Get_Default_GContext(client);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/8);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/8);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/8);
+ Set_Value2(&valuePtr,90*64);
+ Set_Value2(&valuePtr,360*64);
+ break;
+ case X_FillPoly:
+ GetReqExtra(FillPoly,16,rp);
+ ((xFillPolyReq *)rp)->drawable = Get_Default_Window(client);
+ ((xFillPolyReq *)rp)->gc = Get_Default_GContext(client);
+ ((xFillPolyReq *)rp)->shape = Complex;
+ ((xFillPolyReq *)rp)->coordMode = CoordModeOrigin;
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,1);
+ break;
+ case X_PolyFillRectangle:
+ GetReqExtra(PolyFillRectangle,16,rp);
+ ((xPolyFillRectangleReq *)rp)->drawable = Get_Default_Window(client);
+ ((xPolyFillRectangleReq *)rp)->gc = Get_Default_GContext(client);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,1);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/8);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/8);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/4);
+ break;
+ case X_PolyFillArc:
+ GetReqExtra(PolyFillArc,12,rp);
+ ((xPolyFillArcReq *)rp)->drawable = Get_Default_Window(client);
+ ((xPolyFillArcReq *)rp)->gc = Get_Default_GContext(client);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/8);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/8);
+ Set_Value2(&valuePtr,Get_Screen_Width(client)/4);
+ Set_Value2(&valuePtr,Get_Screen_Height(client)/8);
+ Set_Value2(&valuePtr,90*64);
+ Set_Value2(&valuePtr,360*64);
+ break;
+ case X_PutImage:
+ GetReq(PutImage,rp);
+ ((xPutImageReq *)rp)->format = XYBitmap;
+ ((xPutImageReq *)rp)->drawable = Get_Default_Window(client);
+ ((xPutImageReq *)rp)->gc = Get_Default_GContext(client);
+ ((xPutImageReq *)rp)->width = Get_Screen_Width(client)/2;
+ ((xPutImageReq *)rp)->height = Get_Screen_Height(client)/2;
+ ((xPutImageReq *)rp)->dstX = 0;
+ ((xPutImageReq *)rp)->dstY = 0;
+ ((xPutImageReq *)rp)->leftPad = 0;
+ ((xPutImageReq *)rp)->depth = 1;
+ /* Test must provide the data */
+ break;
+ case X_GetImage:
+ GetReq(GetImage,rp);
+ ((xPutImageReq *)rp)->format = XYPixmap;
+ ((xGetImageReq *)rp)->drawable = Get_Default_Window(client);
+ ((xGetImageReq *)rp)->x = 0;
+ ((xGetImageReq *)rp)->y = 0;
+ ((xGetImageReq *)rp)->width = Get_Screen_Width(client)/2;
+ ((xGetImageReq *)rp)->height = Get_Screen_Height(client)/2;
+ ((xGetImageReq *)rp)->planeMask = 1;
+ break;
+ case X_PolyText8:
+ GetReqExtra(PolyText8,31,rp);
+ ((xPolyText8Req *)rp)->drawable = Get_Default_Window(client);
+ ((xPolyText8Req *)rp)->gc = Get_Default_GContext(client);
+ ((xPolyText8Req *)rp)->x = Get_Screen_Width(client)/8;
+ ((xPolyText8Req *)rp)->y = Get_Screen_Height(client)/8;
+ Set_Value1(&valuePtr, 12);
+ Set_Value1(&valuePtr, 0);
+ Copy_String8(&valuePtr, "Hello World!");
+ Set_Value1(&valuePtr, 15);
+ Set_Value1(&valuePtr, 30);
+ Copy_String8(&valuePtr, "Parle vu Norsk?");
+ if (Get_Test_Type(this_client) == JUST_TOO_LONG) {
+ Set_Value1(&valuePtr, 4);
+ Set_Value1(&valuePtr, 0);
+ Copy_String8(&valuePtr, "ABC");
+ } else {
+ Set_Value1(&valuePtr, 0);
+ }
+ break;
+ case X_PolyText16:
+ GetReqExtra(PolyText16,8,rp);
+ ((xPolyText16Req *)rp)->drawable = Get_Default_Window(client);
+ ((xPolyText16Req *)rp)->gc = Get_Default_GContext(client);
+ ((xPolyText16Req *)rp)->x = Get_Screen_Width(client)/8;
+ ((xPolyText16Req *)rp)->y = Get_Screen_Height(client)/8;
+ Set_Value1(&valuePtr, 2);
+ Set_Value1(&valuePtr, 0);
+ Set_Value2(&valuePtr,TEST16_2);
+ Set_Value2(&valuePtr,TEST16_3);
+ if (Get_Test_Type(this_client) == JUST_TOO_LONG) {
+ Set_Value1(&valuePtr, 4);
+ Set_Value1(&valuePtr, 0);
+ Set_Value2(&valuePtr, TEST16_2);
+ Set_Value2(&valuePtr, TEST16_3);
+ } else {
+ Set_Value2(&valuePtr,0); /* pad up to longword */
+ }
+ break;
+ case X_ImageText8:
+ GetReqExtra(ImageText8,12,rp);
+ ((xImageText8Req *)rp)->nChars = 12;
+ ((xImageText8Req *)rp)->drawable = Get_Default_Window(client);
+ ((xImageText8Req *)rp)->gc = Get_Default_GContext(client);
+ ((xImageText8Req *)rp)->x = Get_Screen_Width(client)/8;
+ ((xImageText8Req *)rp)->y = Get_Screen_Height(client)/8;
+ Copy_Padded_String8(&valuePtr, "Hello World!");
+ break;
+ case X_ImageText16:
+ GetReqExtra(ImageText16,8,rp);
+ ((xImageText16Req *)rp)->nChars = 4;
+ ((xImageText16Req *)rp)->drawable = Get_Default_Window(client);
+ ((xImageText16Req *)rp)->gc = Get_Default_GContext(client);
+ ((xImageText16Req *)rp)->x = Get_Screen_Width(client)/8;
+ ((xImageText16Req *)rp)->y = Get_Screen_Height(client)/8;
+ Set_Value2(&valuePtr,TEST16_2);
+ Set_Value2(&valuePtr,TEST16_3);
+ Set_Value2(&valuePtr,TEST16_3);
+ Set_Value2(&valuePtr,TEST16_2);
+ break;
+ case X_CreateColormap:
+ GetReq(CreateColormap,rp);
+ ((xCreateColormapReq *)rp)->alloc = AllocNone;
+ ((xCreateColormapReq *)rp)->mid = (Colormap) Get_Resource_Id(client);
+ ((xCreateColormapReq *)rp)->window = Get_Default_Window(client);
+ ((xCreateColormapReq *)rp)->visual = Gen_Good_Visual(client,XstDefaultScreen (Get_Display (client)));
+ break;
+ case X_FreeColormap:
+ GetResReq(FreeColormap,Get_Default_Colormap(client),rp);
+ break;
+ case X_CopyColormapAndFree:
+ GetReq(CopyColormapAndFree,rp);
+ ((xCopyColormapAndFreeReq *)rp)->mid = (Colormap) Get_Resource_Id(client);
+ ((xCopyColormapAndFreeReq *)rp)->srcCmap = Get_Default_Colormap(client);
+ break;
+ case X_InstallColormap:
+ GetResReq(InstallColormap,Get_Default_Colormap(client),rp);
+ break;
+ case X_UninstallColormap:
+ GetResReq(UninstallColormap,Get_Default_Colormap(client),rp);
+ break;
+ case X_ListInstalledColormaps:
+ GetResReq(ListInstalledColormaps,Get_Default_Window(client),rp);
+ break;
+ case X_AllocColor:
+ GetReq(AllocColor,rp);
+ ((xAllocColorReq *)rp)->cmap = Get_Default_Colormap(client);
+ ((xAllocColorReq *)rp)->red = RED;
+ ((xAllocColorReq *)rp)->green = GREEN;
+ ((xAllocColorReq *)rp)->blue = BLUE;
+ break;
+ case X_AllocNamedColor:
+ GetReqExtra(AllocNamedColor,5,rp);
+ ((xAllocNamedColorReq *)rp)->cmap = Get_Default_Colormap(client);
+ ((xAllocNamedColorReq *)rp)->nbytes = 5;
+ Copy_Padded_String8(&valuePtr, "black");
+ break;
+ case X_AllocColorCells:
+ GetReq(AllocColorCells,rp);
+ ((xAllocColorCellsReq *)rp)->contiguous = False;
+ ((xAllocColorCellsReq *)rp)->cmap = Get_Default_Colormap(client);
+ ((xAllocColorCellsReq *)rp)->colors = Get_Maxsize(client);
+ ((xAllocColorCellsReq *)rp)->planes = NPLANES;
+ break;
+ case X_AllocColorPlanes:
+ GetReq(AllocColorPlanes,rp);
+ ((xAllocColorPlanesReq *)rp)->contiguous = False;
+ ((xAllocColorPlanesReq *)rp)->cmap = Get_Default_Colormap(client);
+ ((xAllocColorPlanesReq *)rp)->colors = 1;
+ ((xAllocColorPlanesReq *)rp)->red = 0;
+ ((xAllocColorPlanesReq *)rp)->green = 0;
+ ((xAllocColorPlanesReq *)rp)->blue = 0;
+ break;
+ case X_FreeColors:
+ GetReqExtra(FreeColors,4,rp);
+ ((xFreeColorsReq *)rp)->cmap = Get_Default_Colormap(client);
+ ((xFreeColorsReq *)rp)->planeMask = PLANEMASK;
+ Set_Value4(&valuePtr,reply_pixel); /* pixel */
+ break;
+ case X_StoreColors:
+ GetReqExtra(StoreColors,12,rp);
+ ((xStoreColorsReq *)rp)->cmap = Get_Default_Colormap(client);
+ Set_Value4(&valuePtr,reply_pixel); /* pixel */
+ Set_Value2(&valuePtr,RED); /* red */
+ Set_Value2(&valuePtr,GREEN); /* green */
+ Set_Value2(&valuePtr,BLUE); /* blue */
+ Set_Value1(&valuePtr,DoRed | DoGreen | DoBlue); /* flags */
+ Set_Value1(&valuePtr,0); /* pad */
+ break;
+ case X_StoreNamedColor:
+ GetReqExtra(StoreNamedColor,5,rp);
+ ((xStoreNamedColorReq *)rp)->flags = DoRed | DoGreen | DoBlue;
+ ((xStoreNamedColorReq *)rp)->cmap = Get_Default_Colormap(client);
+ ((xStoreNamedColorReq *)rp)->pixel = reply_pixel;
+ ((xStoreNamedColorReq *)rp)->nbytes = 5;
+ Copy_Padded_String8(&valuePtr,"black");
+ break;
+ case X_QueryColors:
+ GetReqExtra(QueryColors,4,rp);
+ ((xQueryColorsReq *)rp)->cmap = Get_Default_Colormap(client);
+ Set_Value4(&valuePtr,reply_pixel); /* pixel */
+ break;
+ case X_LookupColor:
+ GetReqExtra(LookupColor,5,rp);
+ ((xLookupColorReq *)rp)->cmap = Get_Default_Colormap(client);
+ ((xLookupColorReq *)rp)->nbytes = 5;
+ Copy_Padded_String8(&valuePtr, "black");
+ break;
+ case X_CreateCursor:
+ GetReq(CreateCursor,rp);
+ ((xCreateCursorReq *)rp)->cid = (Cursor) Get_Resource_Id(client);
+ ((xCreateCursorReq *)rp)->source = Get_Default_Cursor_Pixmap(client);
+ ((xCreateCursorReq *)rp)->mask = Get_Default_Cursor_Pixmap(client);
+ ((xCreateCursorReq *)rp)->foreRed = 1;
+ ((xCreateCursorReq *)rp)->foreGreen = 1;
+ ((xCreateCursorReq *)rp)->foreBlue = 1;
+ ((xCreateCursorReq *)rp)->backRed = 0;
+ ((xCreateCursorReq *)rp)->backGreen = 0;
+ ((xCreateCursorReq *)rp)->backBlue = 0;
+ ((xCreateCursorReq *)rp)->x = 8;
+ ((xCreateCursorReq *)rp)->y = 8;
+ break;
+ case X_CreateGlyphCursor:
+ GetReq(CreateGlyphCursor,rp);
+ ((xCreateGlyphCursorReq *)rp)->cid = (Cursor) Get_Resource_Id(client);
+ ((xCreateGlyphCursorReq *)rp)->source = Get_Default_Font(client);
+ ((xCreateGlyphCursorReq *)rp)->mask = Get_Default_Font(client);
+ /* sourceChar and maskChar are valid for xtfont0. */
+ ((xCreateGlyphCursorReq *)rp)->sourceChar = 1;
+ ((xCreateGlyphCursorReq *)rp)->maskChar = 1;
+ ((xCreateGlyphCursorReq *)rp)->foreRed = 1;
+ ((xCreateGlyphCursorReq *)rp)->foreGreen = 1;
+ ((xCreateGlyphCursorReq *)rp)->foreBlue = 1;
+ ((xCreateGlyphCursorReq *)rp)->backRed = 0;
+ ((xCreateGlyphCursorReq *)rp)->backGreen = 0;
+ ((xCreateGlyphCursorReq *)rp)->backBlue = 0;
+ break;
+ case X_FreeCursor:
+ GetResReq(FreeCursor,Get_Default_Cursor(client),rp);
+ break;
+ case X_RecolorCursor:
+ GetReq(RecolorCursor,rp);
+ ((xRecolorCursorReq *)rp)->cursor = Get_Default_Cursor(client);
+ ((xRecolorCursorReq *)rp)->foreRed = 0;
+ ((xRecolorCursorReq *)rp)->foreGreen = 0;
+ ((xRecolorCursorReq *)rp)->foreBlue = 0;
+ ((xRecolorCursorReq *)rp)->backRed = 1;
+ ((xRecolorCursorReq *)rp)->backGreen = 1;
+ ((xRecolorCursorReq *)rp)->backBlue = 1;
+ break;
+ case X_QueryBestSize:
+ GetReq(QueryBestSize,rp);
+ ((xQueryBestSizeReq *)rp)->class = TileShape;
+ ((xQueryBestSizeReq *)rp)->drawable = Get_Default_Window(client);
+ ((xQueryBestSizeReq *)rp)->width = 20;
+ ((xQueryBestSizeReq *)rp)->height = 20;
+ break;
+ case X_QueryExtension:
+ GetReqExtra(QueryExtension,16,rp);
+ ((xQueryExtensionReq *)rp)->nbytes = 16;
+ Copy_Padded_String8(&valuePtr, "Not-an-Extension");
+ break;
+ case X_ListExtensions:
+ GetEmptyReq(ListExtensions,rp);
+ break;
+ case X_ChangeKeyboardMapping:
+ GetReq(ChangeKeyboardMapping,rp);
+ ((xChangeKeyboardMappingReq *)rp)->keyCodes = 0;
+ ((xChangeKeyboardMappingReq *)rp)->firstKeyCode = 0;
+ ((xChangeKeyboardMappingReq *)rp)->keySymsPerKeyCode = 0;
+ break;
+ case X_GetKeyboardMapping:
+ GetReq(GetKeyboardMapping,rp);
+ ((xGetKeyboardMappingReq *)rp)->firstKeyCode = Get_Display(client)->min_keycode;
+ ((xGetKeyboardMappingReq *)rp)->count = Get_Display(client)->max_keycode - Get_Display(client)->min_keycode + 1;
+ break;
+ case X_ChangeKeyboardControl:
+ GetReq(ChangeKeyboardControl,rp);
+ ((xChangeKeyboardControlReq *)rp)->mask = 0;
+ break;
+ case X_GetKeyboardControl:
+ GetEmptyReq(GetKeyboardControl,rp);
+ break;
+ case X_Bell:
+ GetReq(Bell,rp);
+ ((xBellReq *)rp)->percent = 100;
+ break;
+ case X_ChangePointerControl:
+ GetReq(ChangePointerControl,rp);
+ ((xChangePointerControlReq *)rp)->accelNum = 1;
+ ((xChangePointerControlReq *)rp)->accelDenum = 1;
+ ((xChangePointerControlReq *)rp)->threshold = 2000;
+ ((xChangePointerControlReq *)rp)->doAccel = 1;
+ ((xChangePointerControlReq *)rp)->doThresh = 1;
+ break;
+ case X_GetPointerControl:
+ GetEmptyReq(GetPointerControl,rp);
+ break;
+ case X_SetScreenSaver:
+ GetReq(SetScreenSaver,rp);
+ ((xSetScreenSaverReq *)rp)->timeout = 300;
+ ((xSetScreenSaverReq *)rp)->interval = 300;
+ ((xSetScreenSaverReq *)rp)->preferBlank = DefaultBlanking;
+ ((xSetScreenSaverReq *)rp)->allowExpose = DefaultExposures;
+ break;
+ case X_GetScreenSaver:
+ GetEmptyReq(GetScreenSaver,rp);
+ break;
+ case X_ChangeHosts:
+ GetReq(ChangeHosts,rp);
+ ((xChangeHostsReq *)rp)->mode = HostInsert;
+ ((xChangeHostsReq *)rp)->hostFamily = FamilyInternet;
+ ((xChangeHostsReq *)rp)->hostLength = 0;
+ break;
+ case X_ListHosts:
+ GetEmptyReq(ListHosts,rp);
+ break;
+ case X_SetAccessControl:
+ GetReq(SetAccessControl,rp);
+ ((xSetAccessControlReq *)rp)->mode = DisableAccess;
+ break;
+ case X_SetCloseDownMode:
+ GetReq(SetCloseDownMode,rp);
+ ((xSetCloseDownModeReq *)rp)->mode = DestroyAll;
+ break;
+ case X_KillClient:
+ GetResReq(KillClient,Gen_Good_id(client),rp);
+ ((xResourceReq *)rp)->id = 0;
+ break;
+ case X_RotateProperties:
+ GetReqExtra(RotateProperties,8,rp);
+ ((xRotatePropertiesReq *)rp)->window = Get_Default_Window(client);
+ ((xRotatePropertiesReq *)rp)->nAtoms = 2;
+ ((xRotatePropertiesReq *)rp)->nPositions = 1;
+ Set_Value4(&valuePtr,(long) Test_Atom1);
+ Set_Value4(&valuePtr,(long) Test_Atom2);
+ break;
+ case X_ForceScreenSaver:
+ GetReq(ForceScreenSaver,rp);
+ ((xForceScreenSaverReq *)rp)->mode = ScreenSaverActive;
+ break;
+ case X_SetPointerMapping:
+ GetReq(SetPointerMapping,rp);
+ ((xSetPointerMappingReq *)rp)->nElts = 0;
+ break;
+ case X_GetPointerMapping:
+ GetEmptyReq(GetPointerMapping,rp);
+ break;
+ case X_SetModifierMapping:
+ GetReq(SetModifierMapping,rp);
+ ((xSetModifierMappingReq *)rp)->numKeyPerModifier = 0;
+ break;
+ case X_GetModifierMapping:
+ GetEmptyReq(GetModifierMapping,rp);
+ break;
+ case X_NoOperation:
+ GetEmptyReq(NoOperation,rp);
+ break;
+ default:
+ DEFAULT_ERROR;
+ break;
+ }
+ switch (Get_Test_Type(client)) {
+ case SETUP:
+ case GOOD:
+ case OPEN_DISPLAY:
+ case BAD_IDCHOICE1:
+ case BAD_IDCHOICE2:
+ case BAD_VALUE:
+ break;
+ case BAD_LENGTH:
+ case JUST_TOO_LONG:
+ case TOO_LONG:
+ rp->length = bad_len;
+ break;
+ default:
+ Log_Msg ("INTERNAL ERROR: Make_Req - bad test type %d\n", Get_Test_Type(client));
+ Delete ();
+ /*NOTREACHED*/
+ break;
+ }
+ return(rp);
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/Makefile b/xc/test/xsuite/xtest/src/libproto/Makefile
new file mode 100644
index 000000000..1194521c0
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/Makefile
@@ -0,0 +1,136 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+#
+# Makefile for server tester library
+#
+#
+
+RM_FILES = *.ln *.o core *.a ConnOption.c
+
+HDRS=\
+ ../include/Xstlib.h\
+ ../include/Xstos.h\
+ ../include/XstDisplay.h\
+ XstlibInt.h\
+ XstosInt.h\
+ DataMove.h
+
+CFILES=\
+ ShowReq.c\
+ SendReq.c\
+ SendEvt.c\
+ ShowRep.c\
+ MakeReq.c\
+ RcvRep.c\
+ RcvEvt.c\
+ RcvErr.c\
+ ShowEvt.c\
+ ShowErr.c\
+ DfltVals.c\
+ ResourceMng.c\
+ Log.c\
+ ClientMng.c\
+ Expect.c\
+ ConnOption.c\
+ ValueListMng.c\
+ Timer.c\
+ XstIO.c\
+ DataMove.c\
+ TestMng.c\
+ Utils.c\
+ SendSup.c\
+ ShowSup.c\
+ TestSup.c\
+ Validate.c\
+ tpstartup.c\
+ startup.c\
+ linkstart.c\
+ delete.c
+
+
+OFILES =\
+ ShowReq.o\
+ SendReq.o\
+ SendEvt.o\
+ ShowRep.o\
+ MakeReq.o\
+ RcvRep.o\
+ RcvEvt.o\
+ RcvErr.o\
+ ShowEvt.o\
+ ShowErr.o\
+ DfltVals.o\
+ ResourceMng.o\
+ Log.o\
+ ClientMng.o\
+ Expect.o\
+ ConnOption.o\
+ ValueListMng.o\
+ Timer.o\
+ XstIO.o\
+ DataMove.o\
+ TestMng.o\
+ Utils.o\
+ SendSup.o\
+ ShowSup.o\
+ TestSup.o\
+ Validate.o\
+ tpstartup.o\
+ startup.o\
+ linkstart.o\
+ delete.o
+
+# CFLAGS - Flags for C compiler specific to the X Protocols tests.
+CFLAGS=$(XP_CFLAGS)
+
+# LINTFLAGS - Flags for lint specific to the X Protocol tests.
+LINTFLAGS=$(XP_LINTFLAGS)
+LINTLIBS=$(XP_LINTLIBS)
+
+all: libXst.a
+
+ConnOption.c: $(XP_OPEN_DIS)
+ rm -f $@
+ $(CP) $(XP_OPEN_DIS) $@
+
+libXst.a:$(P) $(OFILES)
+ rm -f $@
+ $(AR) $@ `$(LORDER) $(OFILES) | $(TSORT)`
+ : $(RANLIB) $@
+
+install: all
+ $(CP) libXst.a $(XSTLIB)
+ $(RANLIB) $(XSTLIB)
+
+FORCE: CLOBBER all
+
+LINT:
+ $(LINT) $(LINTFLAGS) $(CFILES) $(LINTTCM) $(LINTLIBS)
+
+LINTLIB: $(LINTXST)
+
+$(LINTXST): llib-lXst.ln
+ cp $? $@
+ @echo " $? made and installed"
+
+llib-lXst.ln:
+ $(LINT) -CXst $(LINTFLAGS) $(CFILES)
+
+clean:
+ $(RM) $(RM_FILES)
+
+clobber: clean
diff --git a/xc/test/xsuite/xtest/src/libproto/RcvErr.c b/xc/test/xsuite/xtest/src/libproto/RcvErr.c
new file mode 100644
index 000000000..a7faaa437
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/RcvErr.c
@@ -0,0 +1,159 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: RcvErr.c 1.4 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: RcvErr.c 1.4 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+#include "DataMove.h"
+
+#define ERROR_HEADER 4 /* size of constant header */
+
+int
+Rcv_Err(rp,rbuf,client)
+xError *rp;
+char rbuf[];
+int client;
+{
+ int needswap = Xst_clients[client].cl_swap;
+ char *rbp = rbuf;
+ int valid = 1; /* assume all is OK */
+
+ rbp += ERROR_HEADER;
+
+ switch (rp->errorCode) {
+ case BadRequest:
+ rbp += 4;
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadValue:
+ ((xError *)rp)->resourceID = unpack4(&rbp,needswap);
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadWindow:
+ ((xError *)rp)->resourceID = unpack4(&rbp,needswap);
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadPixmap:
+ ((xError *)rp)->resourceID = unpack4(&rbp,needswap);
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadAtom:
+ ((xError *)rp)->resourceID = unpack4(&rbp,needswap);
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadCursor:
+ ((xError *)rp)->resourceID = unpack4(&rbp,needswap);
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadFont:
+ ((xError *)rp)->resourceID = unpack4(&rbp,needswap);
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadMatch:
+ rbp += 4;
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadDrawable:
+ ((xError *)rp)->resourceID = unpack4(&rbp,needswap);
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadAccess:
+ rbp += 4;
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadAlloc:
+ rbp += 4;
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadColor:
+ ((xError *)rp)->resourceID = unpack4(&rbp,needswap);
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadGC:
+ ((xError *)rp)->resourceID = unpack4(&rbp,needswap);
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadIDChoice:
+ ((xError *)rp)->resourceID = unpack4(&rbp,needswap);
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadName:
+ rbp += 4;
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadLength:
+ rbp += 4;
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ case BadImplementation:
+ rbp += 4;
+ ((xError *)rp)->minorCode = unpack2(&rbp,needswap);
+ ((xError *)rp)->majorCode = unpack1(&rbp);
+ break;
+ default:
+ DEFAULT_ERROR;
+ break;
+ }
+ return(valid);
+
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/RcvEvt.c b/xc/test/xsuite/xtest/src/libproto/RcvEvt.c
new file mode 100644
index 000000000..f9fe31367
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/RcvEvt.c
@@ -0,0 +1,396 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: RcvEvt.c 1.4 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: RcvEvt.c 1.4 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+#ifdef Xpi
+#include "xtestext1.h"
+#endif
+#include "DataMove.h"
+
+#define EVENT_HEADER 4 /* constant header */
+
+#ifdef Xpi
+int
+Rcv_Evt(rp,rbuf,client,base)
+xEvent *rp;
+char rbuf[];
+int client;
+int base;
+#else
+int
+Rcv_Evt(rp,rbuf,client)
+xEvent *rp;
+char rbuf[];
+int client;
+#endif
+{
+#ifdef Xpi
+ int xtestType;
+#endif
+ int needswap = Xst_clients[client].cl_swap;
+ char *rbp = rbuf;
+ int valid = 1; /* assume all is OK */
+
+ rbp += EVENT_HEADER;
+
+ switch (real_type(rp->u.u.type)) {
+ case KeyPress:
+ rp->u.keyButtonPointer.time = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.root = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.event = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.child = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.rootX = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.rootY = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.eventX = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.eventY = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.state = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.sameScreen = unpack1(&rbp);
+ break;
+ case KeyRelease:
+ rp->u.keyButtonPointer.time = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.root = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.event = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.child = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.rootX = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.rootY = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.eventX = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.eventY = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.state = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.sameScreen = unpack1(&rbp);
+ break;
+ case ButtonPress:
+ rp->u.keyButtonPointer.time = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.root = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.event = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.child = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.rootX = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.rootY = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.eventX = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.eventY = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.state = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.sameScreen = unpack1(&rbp);
+ break;
+ case ButtonRelease:
+ rp->u.keyButtonPointer.time = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.root = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.event = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.child = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.rootX = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.rootY = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.eventX = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.eventY = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.state = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.sameScreen = unpack1(&rbp);
+ break;
+ case MotionNotify:
+ rp->u.keyButtonPointer.time = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.root = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.event = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.child = unpack4(&rbp,needswap);
+ rp->u.keyButtonPointer.rootX = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.rootY = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.eventX = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.eventY = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.state = unpack2(&rbp,needswap);
+ rp->u.keyButtonPointer.sameScreen = unpack1(&rbp);
+ break;
+ case EnterNotify:
+ rp->u.enterLeave.time = unpack4(&rbp,needswap);
+ rp->u.enterLeave.root = unpack4(&rbp,needswap);
+ rp->u.enterLeave.event = unpack4(&rbp,needswap);
+ rp->u.enterLeave.child = unpack4(&rbp,needswap);
+ rp->u.enterLeave.rootX = unpack2(&rbp,needswap);
+ rp->u.enterLeave.rootY = unpack2(&rbp,needswap);
+ rp->u.enterLeave.eventX = unpack2(&rbp,needswap);
+ rp->u.enterLeave.eventY = unpack2(&rbp,needswap);
+ rp->u.enterLeave.state = unpack2(&rbp,needswap);
+ rp->u.enterLeave.mode = unpack1(&rbp);
+ rp->u.enterLeave.flags = unpack1(&rbp);
+ break;
+ case LeaveNotify:
+ rp->u.enterLeave.time = unpack4(&rbp,needswap);
+ rp->u.enterLeave.root = unpack4(&rbp,needswap);
+ rp->u.enterLeave.event = unpack4(&rbp,needswap);
+ rp->u.enterLeave.child = unpack4(&rbp,needswap);
+ rp->u.enterLeave.rootX = unpack2(&rbp,needswap);
+ rp->u.enterLeave.rootY = unpack2(&rbp,needswap);
+ rp->u.enterLeave.eventX = unpack2(&rbp,needswap);
+ rp->u.enterLeave.eventY = unpack2(&rbp,needswap);
+ rp->u.enterLeave.state = unpack2(&rbp,needswap);
+ rp->u.enterLeave.mode = unpack1(&rbp);
+ rp->u.enterLeave.flags = unpack1(&rbp);
+ break;
+ case FocusIn:
+ rp->u.focus.window = unpack4(&rbp,needswap);
+ rp->u.focus.mode = unpack1(&rbp);
+ break;
+ case FocusOut:
+ rp->u.focus.window = unpack4(&rbp,needswap);
+ rp->u.focus.mode = unpack1(&rbp);
+ break;
+ case KeymapNotify:
+ rbp = rbuf + 1;
+ bcopy(rbp,(unsigned char *) (((xKeymapEvent *)rp)->map),31);
+ break;
+ case Expose:
+ rp->u.expose.window = unpack4(&rbp,needswap);
+ rp->u.expose.x = unpack2(&rbp,needswap);
+ rp->u.expose.y = unpack2(&rbp,needswap);
+ rp->u.expose.width = unpack2(&rbp,needswap);
+ rp->u.expose.height = unpack2(&rbp,needswap);
+ rp->u.expose.count = unpack2(&rbp,needswap);
+ break;
+ case GraphicsExpose:
+ rp->u.graphicsExposure.drawable = unpack4(&rbp,needswap);
+ rp->u.graphicsExposure.x = unpack2(&rbp,needswap);
+ rp->u.graphicsExposure.y = unpack2(&rbp,needswap);
+ rp->u.graphicsExposure.width = unpack2(&rbp,needswap);
+ rp->u.graphicsExposure.height = unpack2(&rbp,needswap);
+ rp->u.graphicsExposure.minorEvent = unpack2(&rbp,needswap);
+ rp->u.graphicsExposure.count = unpack2(&rbp,needswap);
+ rp->u.graphicsExposure.majorEvent = unpack1(&rbp);
+ break;
+ case NoExpose:
+ rp->u.noExposure.drawable = unpack4(&rbp,needswap);
+ rp->u.noExposure.minorEvent = unpack2(&rbp,needswap);
+ rp->u.noExposure.majorEvent = unpack1(&rbp);
+ break;
+ case VisibilityNotify:
+ rp->u.visibility.window = unpack4(&rbp,needswap);
+ rp->u.visibility.state = unpack1(&rbp);
+ break;
+ case CreateNotify:
+ rp->u.createNotify.parent = unpack4(&rbp,needswap);
+ rp->u.createNotify.window = unpack4(&rbp,needswap);
+ rp->u.createNotify.x = unpack2(&rbp,needswap);
+ rp->u.createNotify.y = unpack2(&rbp,needswap);
+ rp->u.createNotify.width = unpack2(&rbp,needswap);
+ rp->u.createNotify.height = unpack2(&rbp,needswap);
+ rp->u.createNotify.borderWidth = unpack2(&rbp,needswap);
+ rp->u.createNotify.override = unpack1(&rbp);
+ break;
+ case DestroyNotify:
+ rp->u.destroyNotify.event = unpack4(&rbp,needswap);
+ rp->u.destroyNotify.window = unpack4(&rbp,needswap);
+ break;
+ case UnmapNotify:
+ rp->u.unmapNotify.event = unpack4(&rbp,needswap);
+ rp->u.unmapNotify.window = unpack4(&rbp,needswap);
+ rp->u.unmapNotify.fromConfigure = unpack1(&rbp);
+ break;
+ case MapNotify:
+ rp->u.mapNotify.event = unpack4(&rbp,needswap);
+ rp->u.mapNotify.window = unpack4(&rbp,needswap);
+ rp->u.mapNotify.override = unpack1(&rbp);
+ break;
+ case MapRequest:
+ rp->u.mapRequest.parent = unpack4(&rbp,needswap);
+ rp->u.mapRequest.window = unpack4(&rbp,needswap);
+ break;
+ case ReparentNotify:
+ rp->u.reparent.event = unpack4(&rbp,needswap);
+ rp->u.reparent.window = unpack4(&rbp,needswap);
+ rp->u.reparent.parent = unpack4(&rbp,needswap);
+ rp->u.reparent.x = unpack2(&rbp,needswap);
+ rp->u.reparent.y = unpack2(&rbp,needswap);
+ rp->u.reparent.override = unpack1(&rbp);
+ break;
+ case ConfigureNotify:
+ rp->u.configureNotify.event = unpack4(&rbp,needswap);
+ rp->u.configureNotify.window = unpack4(&rbp,needswap);
+ rp->u.configureNotify.aboveSibling = unpack4(&rbp,needswap);
+ rp->u.configureNotify.x = unpack2(&rbp,needswap);
+ rp->u.configureNotify.y = unpack2(&rbp,needswap);
+ rp->u.configureNotify.width = unpack2(&rbp,needswap);
+ rp->u.configureNotify.height = unpack2(&rbp,needswap);
+ rp->u.configureNotify.borderWidth = unpack2(&rbp,needswap);
+ rp->u.configureNotify.override = unpack1(&rbp);
+ break;
+ case ConfigureRequest:
+ rp->u.configureRequest.parent = unpack4(&rbp,needswap);
+ rp->u.configureRequest.window = unpack4(&rbp,needswap);
+ rp->u.configureRequest.sibling = unpack4(&rbp,needswap);
+ rp->u.configureRequest.x = unpack2(&rbp,needswap);
+ rp->u.configureRequest.y = unpack2(&rbp,needswap);
+ rp->u.configureRequest.width = unpack2(&rbp,needswap);
+ rp->u.configureRequest.height = unpack2(&rbp,needswap);
+ rp->u.configureRequest.borderWidth = unpack2(&rbp,needswap);
+ rp->u.configureRequest.valueMask = unpack2(&rbp,needswap);
+ break;
+ case GravityNotify:
+ rp->u.gravity.event = unpack4(&rbp,needswap);
+ rp->u.gravity.window = unpack4(&rbp,needswap);
+ rp->u.gravity.x = unpack2(&rbp,needswap);
+ rp->u.gravity.y = unpack2(&rbp,needswap);
+ break;
+ case ResizeRequest:
+ rp->u.resizeRequest.window = unpack4(&rbp,needswap);
+ rp->u.resizeRequest.width = unpack2(&rbp,needswap);
+ rp->u.resizeRequest.height = unpack2(&rbp,needswap);
+ break;
+ case CirculateNotify:
+ rp->u.circulate.event = unpack4(&rbp,needswap);
+ rp->u.circulate.window = unpack4(&rbp,needswap);
+ rp->u.circulate.parent = unpack4(&rbp,needswap);
+ rp->u.circulate.place = unpack1(&rbp);
+ break;
+ case CirculateRequest:
+ rp->u.circulate.parent = unpack4(&rbp,needswap);
+ rp->u.circulate.window = unpack4(&rbp,needswap);
+ rbp += 4;
+ rp->u.circulate.place = unpack1(&rbp);
+ break;
+ case PropertyNotify:
+ rp->u.property.window = unpack4(&rbp,needswap);
+ rp->u.property.atom = unpack4(&rbp,needswap);
+ rp->u.property.time = unpack4(&rbp,needswap);
+ rp->u.property.state = unpack1(&rbp);
+ break;
+ case SelectionClear:
+ rp->u.selectionClear.time = unpack4(&rbp,needswap);
+ rp->u.selectionClear.window = unpack4(&rbp,needswap);
+ rp->u.selectionClear.atom = unpack4(&rbp,needswap);
+ break;
+ case SelectionRequest:
+ rp->u.selectionRequest.time = unpack4(&rbp,needswap);
+ rp->u.selectionRequest.owner = unpack4(&rbp,needswap);
+ rp->u.selectionRequest.requestor = unpack4(&rbp,needswap);
+ rp->u.selectionRequest.selection = unpack4(&rbp,needswap);
+ rp->u.selectionRequest.target = unpack4(&rbp,needswap);
+ rp->u.selectionRequest.property = unpack4(&rbp,needswap);
+ break;
+ case SelectionNotify:
+ rp->u.selectionNotify.time = unpack4(&rbp,needswap);
+ rp->u.selectionNotify.requestor = unpack4(&rbp,needswap);
+ rp->u.selectionNotify.selection = unpack4(&rbp,needswap);
+ rp->u.selectionNotify.target = unpack4(&rbp,needswap);
+ rp->u.selectionNotify.property = unpack4(&rbp,needswap);
+ break;
+ case ColormapNotify:
+ rp->u.colormap.window = unpack4(&rbp,needswap);
+ rp->u.colormap.colormap = unpack4(&rbp,needswap);
+ rp->u.colormap.new = unpack1(&rbp);
+ rp->u.colormap.state = unpack1(&rbp);
+ break;
+ case ClientMessage: {
+ int i;
+
+ rp->u.clientMessage.window = unpack4(&rbp,needswap);
+ rp->u.clientMessage.u.l.type = unpack4(&rbp,needswap);
+
+ if (rp->u.u.detail == 8)
+ for (i = 0; i < 20; i++)
+ rp->u.clientMessage.u.b.bytes[i] = unpack1(&rbp);
+ else if (rp->u.u.detail == 16) {
+ rp->u.clientMessage.u.s.shorts0 = unpack2(&rbp,needswap);
+ rp->u.clientMessage.u.s.shorts1 = unpack2(&rbp,needswap);
+ rp->u.clientMessage.u.s.shorts2 = unpack2(&rbp,needswap);
+ rp->u.clientMessage.u.s.shorts3 = unpack2(&rbp,needswap);
+ rp->u.clientMessage.u.s.shorts4 = unpack2(&rbp,needswap);
+ rp->u.clientMessage.u.s.shorts5 = unpack2(&rbp,needswap);
+ rp->u.clientMessage.u.s.shorts6 = unpack2(&rbp,needswap);
+ rp->u.clientMessage.u.s.shorts7 = unpack2(&rbp,needswap);
+ rp->u.clientMessage.u.s.shorts8 = unpack2(&rbp,needswap);
+ rp->u.clientMessage.u.s.shorts9 = unpack2(&rbp,needswap);
+ }
+ else if (rp->u.u.detail == 32) {
+ rp->u.clientMessage.u.l.longs0 = unpack4(&rbp,needswap);
+ rp->u.clientMessage.u.l.longs1 = unpack4(&rbp,needswap);
+ rp->u.clientMessage.u.l.longs2 = unpack4(&rbp,needswap);
+ rp->u.clientMessage.u.l.longs3 = unpack4(&rbp,needswap);
+ rp->u.clientMessage.u.l.longs4 = unpack4(&rbp,needswap);
+ }
+ else
+ Log_Err ("Rcv_Evt: bad format for ClientMessage data\n");
+ break;
+ }
+ case MappingNotify:
+ rp->u.mappingNotify.request = unpack1(&rbp);
+ rp->u.mappingNotify.firstKeyCode = unpack1(&rbp);
+ rp->u.mappingNotify.count = unpack1(&rbp);
+ break;
+ default:
+#ifdef Xpi
+ /*
+ * This is an Event for the input synthesis extension
+ * or it is a Default Error. If it is an Event then Expect will
+ * pass the base code in the type field. We can check for
+ * the type of input synthesis Event by subtracting the
+ * base code from the received value.
+ *
+ */
+
+ xtestType = (rp->u.u.type) - base;
+
+ switch(xtestType){
+ case XTest_InputAction_EventType:
+ /*
+ * Pull out the input actions captured by the
+ * server.
+ */
+ Log_Msg("InputActionEvent");
+ break;
+ case XTest_FakeAck_EventType:
+ /*
+ * Nothing special to pull out.
+ */
+ Log_Msg("FakeAckEvent");
+ break;
+ default:
+ DEFAULT_ERROR;
+ break;
+ }
+#else
+ DEFAULT_ERROR;
+ break;
+#endif
+ }
+ return(valid);
+
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/RcvRep.c b/xc/test/xsuite/xtest/src/libproto/RcvRep.c
new file mode 100644
index 000000000..557cf803f
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/RcvRep.c
@@ -0,0 +1,757 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: RcvRep.c 1.8 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: RcvRep.c 1.8 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+#ifdef Xpi
+#include "xtestext1.h"
+#endif
+#include "DataMove.h"
+
+#define REPLY_HEADER 8 /* number of bytes */
+
+static void Length_Error();
+
+int
+Rcv_Rep(rp,rbuf,type,client)
+xReply *rp; /* pointer to XLIB-format reply structure */
+char rbuf[]; /* receive buffer for reply data */
+int type; /* */
+int client; /* */
+{ /*
+ needswap
+ rbp pointer to first byte of receive buffer after header
+ valuePtr pointer to first byte of rp after fixed-size part
+ of reply
+ i
+ nlen
+ valid
+ nitems
+ calculated_length
+ */
+
+ int needswap = Xst_clients[client].cl_swap;
+ char *rbp = (char *) ((char *)rbuf + REPLY_HEADER);
+ unsigned char *valuePtr = (unsigned char *) ((unsigned char *)rp +
+ sizeof(xReply));
+ int i;
+ int nlen;
+ int valid = 1; /* assume all is OK */
+ int nitems;
+ int calculated_length = 0;
+ unsigned long bytes_there = (long)(rp->generic.length<<2) + sizeof(xReply);
+
+ Log_Debug2("Rcv_Rep(): type = %d, length = %d\n", type, rp->generic.length);
+ switch (type) {
+ case X_GetWindowAttributes:
+ if (rp->generic.length != 3) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetWindowAttributes",3);
+ break;
+ }
+ ((xGetWindowAttributesReply *)rp)->visualID = unpack4(&rbp,needswap);
+ ((xGetWindowAttributesReply *)rp)->class = unpack2(&rbp,needswap);
+ ((xGetWindowAttributesReply *)rp)->bitGravity = unpack1(&rbp);
+ ((xGetWindowAttributesReply *)rp)->winGravity = unpack1(&rbp);
+ ((xGetWindowAttributesReply *)rp)->backingBitPlanes = unpack4(&rbp,needswap);
+ ((xGetWindowAttributesReply *)rp)->backingPixel = unpack4(&rbp,needswap);
+ ((xGetWindowAttributesReply *)rp)->saveUnder = unpack1(&rbp);
+ ((xGetWindowAttributesReply *)rp)->mapInstalled = unpack1(&rbp);
+ ((xGetWindowAttributesReply *)rp)->mapState = unpack1(&rbp);
+ ((xGetWindowAttributesReply *)rp)->override = unpack1(&rbp);
+ ((xGetWindowAttributesReply *)rp)->colormap = unpack4(&rbp,needswap);
+ ((xGetWindowAttributesReply *)rp)->allEventMasks = unpack4(&rbp,needswap);
+ ((xGetWindowAttributesReply *)rp)->yourEventMask = unpack4(&rbp,needswap);
+ ((xGetWindowAttributesReply *)rp)->doNotPropagateMask = unpack2(&rbp,needswap);
+ break;
+ case X_GetGeometry:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetGeometry",0);
+ break;
+ }
+ ((xGetGeometryReply *)rp)->root = unpack4(&rbp,needswap);
+ ((xGetGeometryReply *)rp)->x = unpack2(&rbp,needswap);
+ ((xGetGeometryReply *)rp)->y = unpack2(&rbp,needswap);
+ ((xGetGeometryReply *)rp)->width = unpack2(&rbp,needswap);
+ ((xGetGeometryReply *)rp)->height = unpack2(&rbp,needswap);
+ ((xGetGeometryReply *)rp)->borderWidth = unpack2(&rbp,needswap);
+ break;
+ case X_QueryTree:
+ ((xQueryTreeReply *)rp)->root = unpack4(&rbp,needswap);
+ ((xQueryTreeReply *)rp)->parent = unpack4(&rbp,needswap);
+ ((xQueryTreeReply *)rp)->nChildren = unpack2(&rbp,needswap);
+ nitems = ((xQueryTreeReply *)rp)->nChildren;
+ calculated_length = nitems;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"QueryTree",calculated_length);
+ break;
+ }
+ rbp += 14;
+ Unpack_Longs((long *) valuePtr, &rbp,
+ ((xQueryTreeReply *)rp)->nChildren,needswap);
+ break;
+ case X_InternAtom:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"InternAtom",0);
+ break;
+ }
+ ((xInternAtomReply *)rp)->atom = unpack4(&rbp,needswap);
+ break;
+ case X_GetAtomName:
+ ((xGetAtomNameReply *)rp)->nameLength = unpack2(&rbp,needswap);
+ nitems = ((xGetAtomNameReply *)rp)->nameLength;
+ calculated_length = (nitems + 3) / 4;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetAtomName",calculated_length);
+ break;
+ }
+ rbp += 22;
+ bcopy(rbp,valuePtr,((xGetAtomNameReply *)rp)->nameLength);
+ break;
+ case X_GetProperty:
+ ((xGetPropertyReply *)rp)->type = unpack4(&rbp,needswap);
+ ((xGetPropertyReply *)rp)->bytesAfter = unpack4(&rbp,needswap);
+ ((xGetPropertyReply *)rp)->nItems = unpack4(&rbp,needswap);
+ nitems = ((xGetPropertyReply *)rp)->nItems;
+ rbp += 12;
+ switch (((xGetPropertyReply *)rp)->format) {
+ case 0:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetProperty",0);
+ break;
+ }
+ break;
+ case FORMAT8:
+ calculated_length = (nitems + 3) / 4;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetProperty",calculated_length);
+ break;
+ }
+ bcopy(rbp,valuePtr,nitems);
+ break;
+ case FORMAT16:
+ calculated_length = (nitems + 1) >> 1;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetProperty",calculated_length);
+ break;
+ }
+ Unpack_Shorts((unsigned short *) valuePtr, &rbp,nitems,needswap);
+ break;
+ case FORMAT32:
+ calculated_length = nitems;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetProperty",calculated_length);
+ break;
+ }
+ Unpack_Longs((unsigned long *) valuePtr, &rbp,nitems,needswap);
+ break;
+ default:
+ Log_Err("Rcv_Rep: bad format field in GetPropertyReply\n");
+ valid = 0;
+ break;
+ }
+ break;
+ case X_ListProperties:
+ ((xListPropertiesReply *)rp)->nProperties = unpack2(&rbp,needswap);
+ nitems = ((xListPropertiesReply *)rp)->nProperties;
+ calculated_length = nitems;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"ListProperties",calculated_length);
+ break;
+ }
+ rbp += 22;
+ Unpack_Longs((unsigned long *) valuePtr, &rbp,
+ ((xListPropertiesReply *)rp)->nProperties,needswap);
+ break;
+ case X_GetSelectionOwner:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetSelectionOwner",0);
+ break;
+ }
+ ((xGetSelectionOwnerReply *)rp)->owner = unpack4(&rbp,needswap);
+ break;
+ case X_GrabPointer:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GrabPointer",0);
+ break;
+ }
+ break;
+ case X_GrabKeyboard:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GrabKeyboard",0);
+ break;
+ }
+ break;
+ case X_QueryPointer:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"QueryPointer",0);
+ break;
+ }
+ ((xQueryPointerReply *)rp)->root = unpack4(&rbp,needswap);
+ ((xQueryPointerReply *)rp)->child = unpack4(&rbp,needswap);
+ ((xQueryPointerReply *)rp)->rootX = unpack2(&rbp,needswap);
+ ((xQueryPointerReply *)rp)->rootY = unpack2(&rbp,needswap);
+ ((xQueryPointerReply *)rp)->winX = unpack2(&rbp,needswap);
+ ((xQueryPointerReply *)rp)->winY = unpack2(&rbp,needswap);
+ ((xQueryPointerReply *)rp)->mask = unpack2(&rbp,needswap);
+ break;
+ case X_GetMotionEvents:
+ ((xGetMotionEventsReply *)rp)->nEvents = unpack4(&rbp,needswap);
+ nitems = ((xGetMotionEventsReply *)rp)->nEvents;
+ calculated_length = nitems * 2;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetProperty",calculated_length);
+ break;
+ }
+ rbp += 20;
+ /*
+ * Extract timecoords from reply -
+ * CARD32 time;
+ * CARD16 x, y;
+ */
+ for(i=0;i<((xGetMotionEventsReply *)rp)->nEvents;i++) {
+ *((unsigned long *) valuePtr) = unpack4(&rbp,needswap);
+ valuePtr += 4;
+ *((unsigned short *) valuePtr) = unpack2(&rbp,needswap);
+ valuePtr += 2;
+ *((unsigned short *) valuePtr) = unpack2(&rbp,needswap);
+ valuePtr += 2;
+ }
+ break;
+ case X_TranslateCoords:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"TranslateCoords",0);
+ break;
+ }
+ ((xTranslateCoordsReply *)rp)->child = unpack4(&rbp,needswap);
+ ((xTranslateCoordsReply *)rp)->dstX = unpack2(&rbp,needswap);
+ ((xTranslateCoordsReply *)rp)->dstY = unpack2(&rbp,needswap);
+ break;
+ case X_GetInputFocus:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetInputFocus",0);
+ break;
+ }
+ ((xGetInputFocusReply *)rp)->focus = unpack4(&rbp,needswap);
+ break;
+ case X_QueryKeymap:
+ if (rp->generic.length != 2) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"QueryKeymap",2);
+ break;
+ }
+ valuePtr = (unsigned char *) ((unsigned char *) rp +
+ (rbp - rbuf));
+ bcopy(rbp,valuePtr, 32);
+ break;
+ case X_QueryFont:
+ valuePtr = (unsigned char *) &(((xQueryFontReply *)rp)->minBounds);
+ Unpack_Shorts((unsigned short *) valuePtr, &rbp, 6, needswap);
+ rbp += 4;
+ valuePtr = (unsigned char *) &(((xQueryFontReply *)rp)->maxBounds);
+ Unpack_Shorts((unsigned short *) valuePtr, &rbp, 6, needswap);
+ rbp += 4;
+ ((xQueryFontReply *)rp)->minCharOrByte2 = unpack2(&rbp,needswap);
+ ((xQueryFontReply *)rp)->maxCharOrByte2 = unpack2(&rbp,needswap);
+ ((xQueryFontReply *)rp)->defaultChar = unpack2(&rbp,needswap);
+ ((xQueryFontReply *)rp)->nFontProps = unpack2(&rbp,needswap);
+ ((xQueryFontReply *)rp)->drawDirection = unpack1(&rbp);
+ ((xQueryFontReply *)rp)->minByte1 = unpack1(&rbp);
+ ((xQueryFontReply *)rp)->maxByte1 = unpack1(&rbp);
+ ((xQueryFontReply *)rp)->allCharsExist = unpack1(&rbp);
+ ((xQueryFontReply *)rp)->fontAscent = unpack2(&rbp,needswap);
+ ((xQueryFontReply *)rp)->fontDescent = unpack2(&rbp,needswap);
+ ((xQueryFontReply *)rp)->nCharInfos = unpack4(&rbp,needswap);
+ calculated_length = 7 +
+ (2 * ((xQueryFontReply *)rp)->nFontProps) +
+ (3 * ((xQueryFontReply *)rp)->nCharInfos);
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"QueryFont",calculated_length);
+ break;
+ }
+ valuePtr = (unsigned char *) ((unsigned char *) rp + sizeof(xQueryFontReply));
+ Unpack_Longs((unsigned long *) valuePtr, &rbp,
+ ((xQueryFontReply *)rp)->nFontProps * 2,needswap);
+ valuePtr += (((xQueryFontReply *)rp)->nFontProps * 2 * 4);
+ Unpack_Shorts((unsigned long *) valuePtr, &rbp,
+ (((xQueryFontReply *)rp)->nCharInfos) * 6,needswap);
+ break;
+ case X_QueryTextExtents:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"QueryFontExtents",0);
+ break;
+ }
+ ((xQueryTextExtentsReply *)rp)->fontAscent = unpack2(&rbp,needswap);
+ ((xQueryTextExtentsReply *)rp)->fontDescent = unpack2(&rbp,needswap);
+ ((xQueryTextExtentsReply *)rp)->overallAscent = unpack2(&rbp,needswap);
+ ((xQueryTextExtentsReply *)rp)->overallDescent = unpack2(&rbp,needswap);
+ ((xQueryTextExtentsReply *)rp)->overallWidth = unpack4(&rbp,needswap);
+ ((xQueryTextExtentsReply *)rp)->overallLeft = unpack4(&rbp,needswap);
+ ((xQueryTextExtentsReply *)rp)->overallRight = unpack4(&rbp,needswap);
+ break;
+ case X_ListFonts:
+ ((xListFontsReply *)rp)->nFonts = unpack2(&rbp,needswap);
+ nitems = ((xListFontsReply *)rp)->nFonts;
+ rbp += 22;
+ calculated_length = 0;
+ for(i=0;i<nitems;i++) {
+ nlen = *rbp;
+ calculated_length += (nlen + 1); /* # chars + 1 for len */
+ if (calculated_length > (rp->generic.length * 4)) {
+ Log_Msg("Rcv_Rep: BAD LENGTH ERROR!!!\n");
+ Log_Msg("\treply = %s\n","ListFonts");
+ Log_Msg("\tlength is %d, cumulative for %d out of %d names = %d\n",
+ rp->generic.length,i+1,nitems,(calculated_length+3)/4);
+ Show_Rep(rp,X_ListFonts,calculated_length<<2);
+ Finish(client);
+ }
+ *valuePtr++ = *rbp++;
+ bcopy(rbp,valuePtr,nlen);
+ rbp += nlen;
+ valuePtr += nlen;
+ }
+ calculated_length = (calculated_length + 3) / 4;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"ListFonts",calculated_length);
+ break;
+ }
+ break;
+ case X_ListFontsWithInfo:
+ valuePtr = (unsigned char *) &(((xListFontsWithInfoReply *)rp)->minBounds);
+ Unpack_Shorts((unsigned short *) valuePtr, &rbp, 6, needswap);
+ rbp += 4;
+ valuePtr = (unsigned char *) &(((xListFontsWithInfoReply *)rp)->maxBounds);
+ Unpack_Shorts((unsigned short *) valuePtr, &rbp, 6, needswap);
+ rbp += 4;
+ ((xListFontsWithInfoReply *)rp)->minCharOrByte2 = unpack2(&rbp,needswap);
+ ((xListFontsWithInfoReply *)rp)->maxCharOrByte2 = unpack2(&rbp,needswap);
+ ((xListFontsWithInfoReply *)rp)->defaultChar = unpack2(&rbp,needswap);
+ ((xListFontsWithInfoReply *)rp)->nFontProps = unpack2(&rbp,needswap);
+ ((xListFontsWithInfoReply *)rp)->drawDirection = unpack1(&rbp);
+ ((xListFontsWithInfoReply *)rp)->minByte1 = unpack1(&rbp);
+ ((xListFontsWithInfoReply *)rp)->maxByte1 = unpack1(&rbp);
+ ((xListFontsWithInfoReply *)rp)->allCharsExist = unpack1(&rbp);
+ ((xListFontsWithInfoReply *)rp)->fontAscent = unpack2(&rbp,needswap);
+ ((xListFontsWithInfoReply *)rp)->fontDescent = unpack2(&rbp,needswap);
+ ((xListFontsWithInfoReply *)rp)->nReplies = unpack4(&rbp,needswap);
+ calculated_length = 7 +
+ (2 * ((xQueryFontReply *)rp)->nFontProps) +
+ ((int)(rp->generic.data1 + 3) / 4);
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"ListFontsWithInfo",calculated_length);
+ break;
+ }
+ valuePtr = (unsigned char *) (((unsigned char *) rp) + sizeof(xListFontsWithInfoReply));
+ Unpack_Longs((unsigned long *) valuePtr, &rbp,
+ (((xListFontsWithInfoReply *)rp)->nFontProps) * 2,needswap);
+ valuePtr += (((xListFontsWithInfoReply *)rp)->nFontProps * 2 * 4);
+ bcopy(rbp,valuePtr,((xListFontsWithInfoReply *)rp)->nameLength);
+ Show_Rep(rp,X_ListFontsWithInfo,bytes_there);
+ break;
+ case X_GetFontPath:
+ ((xGetFontPathReply *)rp)->nPaths = unpack2(&rbp,needswap);
+ nitems = ((xGetFontPathReply *)rp)->nPaths;
+ rbp += 22;
+ calculated_length = 0;
+ for(i=0;i<nitems;i++) {
+ nlen = *rbp;
+ calculated_length += nlen + 1;
+ if (calculated_length > (rp->generic.length * 4)) {
+ Log_Msg("Rcv_Rep: BAD LENGTH ERROR!!!\n");
+ Log_Msg("\treply = %s\n","GetFontPath");
+ Log_Msg("\tlength is %d, cumulative for %d out of %d names = %d\n",
+ rp->generic.length,i+1,nitems,(calculated_length+3)/4);
+ Show_Rep(rp,X_GetFontPath,calculated_length<<2);
+ Finish(client);
+ }
+ *valuePtr++ = *rbp++;
+ bcopy(rbp,valuePtr,nlen);
+ rbp += nlen;
+ valuePtr += nlen;
+ }
+ calculated_length = (calculated_length + 3) / 4;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetFontPath",calculated_length);
+ break;
+ }
+ break;
+ case X_GetImage:
+ {
+/*
+ * Images are stored in the test programs in client byte order and
+ * unpadded. This allows images to be independent of the server.
+ * However the server will send images in server byte order and
+ * padded. This routine unpacks from server form into client-normal
+ * form. Note that we're assuming client-normal images are padded to
+ * byte boundary; otherwise the translation is more complicated.
+ * Similarly, left-pad must be zero.
+ */
+
+ int row, col = 1;
+ unsigned char my_sex = *((unsigned char *) &col) ^ 1;
+ unsigned char server_sex =
+ (Xst_clients[client].cl_dpy) -> byte_order;
+ long flip = my_sex ^ server_sex; /* assume MSBFirst == 1 */
+ int server_pad = (Xst_clients[client].cl_dpy) -> bitmap_pad;
+ int server_unit = (Xst_clients[client].cl_dpy) -> bitmap_unit;
+ int server_bitorder =
+ (Xst_clients[client].cl_dpy) -> bitmap_bit_order;
+ int dst_width /*in bytes*/ =
+ (Xst_clients[client].cl_imagewidth + 7) >> 3;
+ int src_width /*in bytes*/ = dst_width +
+ ((dst_width % (server_pad>>3)) == 0 ? 0 :
+ (server_pad>>3) - dst_width % (server_pad>>3));
+
+ char *dst = (char *)rp + sizeof(xReply);
+
+ ((xGetImageReply *)rp)->visual = unpack4(&rbp,needswap);
+ rbp += 20;
+
+ calculated_length =
+ (src_width * Xst_clients[client].cl_imageheight) >> 2;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetImage",calculated_length);
+ break;
+ }
+/*****
+ if (server_bitorder != MSBFirst) {
+ Log_Err("LSBFirst bit ordering not supported in Rcv_Rep()\n");
+ Finish(client);
+ }
+*****/
+
+ rp->generic.length =
+ (dst_width * Xst_clients[client].cl_imageheight) >> 2;
+
+ for (row = 0; row < Xst_clients[client].cl_imageheight; row++)
+ for(col = 0; col < src_width; col++)
+
+ if (col < dst_width) {
+ *(dst++) = *((char *)((long)rbp++ ^ flip));
+ } else {
+ rbp++;
+ }
+ }
+ break;
+ case X_ListInstalledColormaps:
+ ((xListInstalledColormapsReply *)rp)->nColormaps = unpack2(&rbp,needswap);
+ calculated_length = ((xListInstalledColormapsReply *)rp)->nColormaps;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"ListInstalledColormaps",calculated_length);
+ break;
+ }
+ rbp += 22;
+ Unpack_Longs((long *) valuePtr, &rbp,
+ ((xListInstalledColormapsReply *)rp)->nColormaps,
+ needswap);
+ break;
+ case X_AllocColor:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"AllocColor",0);
+ break;
+ }
+ ((xAllocColorReply *)rp)->red = unpack2(&rbp,needswap);
+ ((xAllocColorReply *)rp)->green = unpack2(&rbp,needswap);
+ ((xAllocColorReply *)rp)->blue = unpack2(&rbp,needswap);
+ rbp += 2;
+ ((xAllocColorReply *)rp)->pixel = unpack4(&rbp,needswap);
+ break;
+ case X_AllocNamedColor:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"AllocNamedColor",0);
+ break;
+ }
+ ((xAllocNamedColorReply *)rp)->pixel = unpack4(&rbp,needswap);
+ ((xAllocNamedColorReply *)rp)->exactRed = unpack2(&rbp,needswap);
+ ((xAllocNamedColorReply *)rp)->exactGreen = unpack2(&rbp,needswap);
+ ((xAllocNamedColorReply *)rp)->exactBlue = unpack2(&rbp,needswap);
+ ((xAllocNamedColorReply *)rp)->screenRed = unpack2(&rbp,needswap);
+ ((xAllocNamedColorReply *)rp)->screenGreen = unpack2(&rbp,needswap);
+ ((xAllocNamedColorReply *)rp)->screenBlue = unpack2(&rbp,needswap);
+ break;
+ case X_AllocColorCells:
+ ((xAllocColorCellsReply *)rp)->nPixels = unpack2(&rbp,needswap);
+ ((xAllocColorCellsReply *)rp)->nMasks = unpack2(&rbp,needswap);
+ calculated_length = ((xAllocColorCellsReply *)rp)->nPixels +
+ ((xAllocColorCellsReply *)rp)->nMasks;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"AllocColorCells",calculated_length);
+ break;
+ }
+ rbp += 20;
+ Unpack_Longs((long *) valuePtr, &rbp,
+ ((xAllocColorCellsReply *)rp)->nPixels,
+ needswap);
+ Unpack_Longs((long *) valuePtr, &rbp,
+ ((xAllocColorCellsReply *)rp)->nMasks,
+ needswap);
+ break;
+ case X_AllocColorPlanes:
+ ((xAllocColorPlanesReply *)rp)->nPixels = unpack2(&rbp,needswap);
+ calculated_length = ((xAllocColorPlanesReply *)rp)->nPixels;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"AllocColorPlanes",calculated_length);
+ break;
+ }
+ rbp += 2;
+ ((xAllocColorPlanesReply *)rp)->redMask = unpack4(&rbp,needswap);
+ ((xAllocColorPlanesReply *)rp)->greenMask = unpack4(&rbp,needswap);
+ ((xAllocColorPlanesReply *)rp)->blueMask = unpack4(&rbp,needswap);
+ rbp += 8;
+ Unpack_Longs((long *) valuePtr, &rbp,
+ ((xAllocColorPlanesReply *)rp)->nPixels,
+ needswap);
+ break;
+ case X_QueryColors:
+ ((xQueryColorsReply *)rp)->nColors = unpack2(&rbp,needswap);
+ calculated_length = ((xQueryColorsReply *)rp)->nColors * 2;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"QueryColors",calculated_length);
+ break;
+ }
+ rbp += 22;
+ Unpack_Shorts((long *) valuePtr, &rbp, ((xQueryColorsReply *)rp)->nColors * 4, needswap);
+ break;
+ case X_LookupColor:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"LookupColor",0);
+ break;
+ }
+ ((xLookupColorReply *)rp)->exactRed = unpack2(&rbp,needswap);
+ ((xLookupColorReply *)rp)->exactGreen = unpack2(&rbp,needswap);
+ ((xLookupColorReply *)rp)->exactBlue = unpack2(&rbp,needswap);
+ ((xLookupColorReply *)rp)->screenRed = unpack2(&rbp,needswap);
+ ((xLookupColorReply *)rp)->screenGreen = unpack2(&rbp,needswap);
+ ((xLookupColorReply *)rp)->screenBlue = unpack2(&rbp,needswap);
+ break;
+ case X_QueryBestSize:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"QueryBestSize",0);
+ break;
+ }
+ ((xQueryBestSizeReply *)rp)->width = unpack2(&rbp,needswap);
+ ((xQueryBestSizeReply *)rp)->height = unpack2(&rbp,needswap);
+ break;
+ case X_QueryExtension:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"QueryExtension",0);
+ break;
+ }
+ ((xQueryExtensionReply *)rp)->present = unpack1(&rbp);
+ ((xQueryExtensionReply *)rp)->major_opcode = unpack1(&rbp);
+ ((xQueryExtensionReply *)rp)->first_event = unpack1(&rbp);
+ ((xQueryExtensionReply *)rp)->first_error = unpack1(&rbp);
+ break;
+ case X_ListExtensions: {
+ /* rp->generic.data1 is the number of extension strings in
+ the returned list of strings. */
+ int value_len = 0; /* total bytes in returned value */
+ char *buf_ptr = rbuf + sizeof(xReply);
+ int nchars;
+
+ for (i = 0; i < (int)rp->generic.data1; i++) {
+ nchars = *buf_ptr++;
+ value_len += nchars + 1; /* characters plus count */
+ buf_ptr += nchars;
+ }
+
+ calculated_length = (value_len + 3) / 4;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"ListExtensions",calculated_length);
+ break;
+ }
+ bcopy(rbuf + 32, valuePtr, calculated_length << 2);
+ break;
+ }
+ case X_GetKeyboardMapping:
+/*
+ * Can't validate length - depends on value in original request
+ */
+ rbp += 24;
+ Unpack_Longs((long *) valuePtr, &rbp,
+ ((xGetKeyboardMappingReply *)rp)->length,needswap);
+ break;
+ case X_GetKeyboardControl:
+ if (rp->generic.length != 5) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetKeyboardControl",5);
+ break;
+ }
+ ((xGetKeyboardControlReply *)rp)->ledMask = unpack4(&rbp,needswap);
+ ((xGetKeyboardControlReply *)rp)->keyClickPercent = unpack1(&rbp);
+ ((xGetKeyboardControlReply *)rp)->bellPercent = unpack1(&rbp);
+ ((xGetKeyboardControlReply *)rp)->bellPitch = unpack2(&rbp,needswap);
+ ((xGetKeyboardControlReply *)rp)->bellDuration = unpack2(&rbp,needswap);
+ rbp += 2;
+ valuePtr = (unsigned char *) ((unsigned char *) rp +
+ (rbp - rbuf));
+ bcopy(rbp,valuePtr,32);
+ break;
+ case X_GetPointerControl:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetPointerControl",0);
+ break;
+ }
+ ((xGetPointerControlReply *)rp)->accelNumerator = unpack2(&rbp,needswap);
+ ((xGetPointerControlReply *)rp)->accelDenominator = unpack2(&rbp,needswap);
+ ((xGetPointerControlReply *)rp)->threshold = unpack2(&rbp,needswap);
+ break;
+ case X_GetScreenSaver:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetScreenSaver",0);
+ break;
+ }
+ ((xGetScreenSaverReply *)rp)->timeout = unpack2(&rbp,needswap);
+ ((xGetScreenSaverReply *)rp)->interval = unpack2(&rbp,needswap);
+ ((xGetScreenSaverReply *)rp)->preferBlanking = unpack1(&rbp);
+ ((xGetScreenSaverReply *)rp)->allowExposures = unpack1(&rbp);
+ break;
+ case X_ListHosts:
+ {
+ unsigned short nhosts;
+ unsigned short hlen;
+ unsigned char *endrpPtr = ((unsigned char *)rp) + bytes_there;
+ char *endrbPtr = ((char *)rbuf) + bytes_there;
+
+ nhosts = unpack2(&rbp,needswap);
+ ((xListHostsReply *)rp)->nHosts = nhosts;
+ calculated_length = (int)nhosts * 4 / 4; /* min poss. */
+ if (rp->generic.length < calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"ListHosts",calculated_length);
+ break;
+ }
+ rbp += 22;
+ calculated_length = 0;
+ for(i=0;i<(int)nhosts;i++) {
+ calculated_length++;
+ if ((rbp+4) > endrbPtr || (valuePtr+4) > endrpPtr) {
+ Length_Error(bytes_there,
+ client,rp,type,"ListHosts",
+ calculated_length);
+ break;
+ }
+ *valuePtr++ = *rbp++; /* family */
+
+ valuePtr++;
+ rbp++; /* pad */
+
+ hlen = unpack2(&rbp,needswap);
+ *((unsigned short *) valuePtr) = hlen;
+ valuePtr += 2;
+ calculated_length += padup((int)hlen)/4;
+ if ((rbp+hlen) > endrbPtr || (valuePtr+hlen) > endrpPtr) {
+ Length_Error(bytes_there,
+ client,rp,type,"ListHosts",
+ calculated_length);
+ break;
+ }
+ bcopy(rbp,valuePtr,hlen);
+ rbp += padup((int)hlen);
+ valuePtr += padup((int)hlen);
+ }
+ if (i < (int)nhosts) {
+ Log_Msg("Incomplete ListHosts reply: %d hosts found instead of %d\n", i, nhosts);
+ Finish(client);
+ /*NOTREACHED*/
+ }
+ }
+ break;
+ case X_SetPointerMapping:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"SetPointerMapping",0);
+ break;
+ }
+ break;
+ case X_GetPointerMapping:
+ calculated_length = (int)(rp->generic.data1 + 3) / 4;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetPointerMapping",calculated_length);
+ break;
+ }
+ rbp += 24;
+ bcopy(rbp,valuePtr,rp->generic.data1);
+ break;
+ case X_SetModifierMapping:
+ if (rp->generic.length != 0) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"SetModifierMapping",0);
+ break;
+ }
+ break;
+ case X_GetModifierMapping:
+ calculated_length = rp->generic.data1 * 2;
+ if (rp->generic.length != calculated_length) {
+ Length_Error(max(bytes_there,calculated_length<<2),client,rp,type,"GetModifierMapping",calculated_length);
+ break;
+ }
+ rbp += 24;
+ Unpack_Longs((long *) valuePtr, &rbp,
+ ((xGetModifierMappingReply *)rp)->length,needswap);
+ break;
+ default:
+ /* we got a reply to a request that didn't expect one. Assume
+ sequence numbers will be enough to sort out that this is an
+ error so return 1.
+ */
+ Log_Trace("Reply unexpected for request type %d\n", type);
+ break;
+ }
+ return(valid);
+}
+
+static void
+Length_Error(bytes_needed,client,rp,type,label,calc)
+unsigned long bytes_needed;
+int client;
+xReply *rp;
+int type;
+char *label;
+int calc;
+{
+ Log_Msg("Rcv_Rep: BAD LENGTH ERROR!!!\n");
+ Log_Msg("\treply = %s\n",label);
+ Log_Msg("\tlength is %d, should be %d\n",rp->generic.length,calc);
+ Show_Rep(rp,type, bytes_needed);
+ Finish(client);
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/ResMng.c b/xc/test/xsuite/xtest/src/libproto/ResMng.c
new file mode 100644
index 000000000..90e9fbf33
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/ResMng.c
@@ -0,0 +1,351 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "XstlibInt.h"
+
+
+Atom
+Create_Atom (client)
+int client;
+{
+ xInternAtomReq * req;
+ xInternAtomReply * rep;
+ Atom aid;
+
+ req = (xInternAtomReq *) Make_Req (client, X_InternAtom);
+ Send_Req (client, (xReq *) req);
+ Log_Trace ("client %d sent default InternAtom request\n", client);
+
+ if ((rep = (xInternAtomReply *) Expect_Reply (client,X_InternAtom)) == NULL) {
+ Log_Err ("client %d failed to recv InternAtom reply\n", client);
+ Exit ();
+ }
+ else {
+ Log_Trace ("client %d received InternAtom reply\n", client);
+ /* do any reply checking here */
+ aid = rep -> atom;
+ Free_Reply ((char *)rep);
+ }
+ Free_Req (req);
+ return (aid);
+}
+
+
+Atom
+Create_Default_Atom (client)
+int client;
+{
+ Atom rid;
+ rid = Create_Atom (client);
+ Set_Default_Atom (client, rid);
+ return (rid);
+}
+
+/*
+ intent: return the resource ID of an allocated Colormap
+ input: client - integer from 0 to MAX_CLIENTS
+ output: Colormap ID - integer from ? to ?
+ global input:
+ side effects: binds one resource ID
+ methods:
+*/
+
+Colormap
+Create_Colormap (client)
+int client;
+{
+ xCreateColormapReq * req;
+ Colormap mid;
+
+ req = (xCreateColormapReq *) Make_Req (client, X_CreateColormap);
+ Send_Req (client, (xReq *) req);
+ mid = req -> mid;
+ Log_Trace ("client %d sent CreateColormap for colormap %d\n", client, mid);
+ Expect_Nothing (client);
+ Free_Req (req);
+ return (mid);
+}
+
+
+/*
+ intent:
+ input:
+ output:
+ global input:
+ side effects:
+ methods:
+*/
+
+Colormap
+Create_Default_Colormap (client)
+int client;
+{
+ Colormap rid;
+ rid = Create_Colormap (client);
+ Set_Default_Colormap (client, rid);
+ return (rid);
+}
+
+
+Cursor
+Create_Cursor (client)
+int client;
+{
+ xCreateCursorReq * req;
+ Cursor cid;
+
+ req = (xCreateCursorReq *) Make_Req (client, X_CreateCursor);
+ Send_Req (client, (xReq *) req);
+ Log_Trace ("client %d sent default CreateCursor request\n", client);
+ Expect_Nothing (client);
+ cid = req -> cid;
+ Free_Req (req);
+ return (cid);
+}
+
+
+Cursor
+Create_Default_Cursor (client)
+int client;
+{
+ Cursor rid;
+ rid = Create_Cursor (client);
+ Set_Default_Cursor (client, rid);
+ return (rid);
+}
+
+
+
+Font
+Create_Font (client)
+int client;
+{
+ xOpenFontReq * req;
+ Font fid;
+
+ req = (xOpenFontReq *) Make_Req (client, X_OpenFont);
+ Send_Req (client, (xReq *) req);
+ Log_Trace ("client %d sent default OpenFont request\n", client);
+ Expect_Nothing (client);
+ fid = req -> fid;
+ Free_Req (req);
+ return (fid);
+}
+
+
+Font
+Create_Default_Font (client)
+int client;
+{
+ Font rid;
+ rid = Create_Font (client);
+ Set_Default_Font (client, rid);
+ return (rid);
+}
+
+
+GContext
+Create_GContext (client)
+int client;
+{
+ xCreateGCReq * req;
+ GContext gc;
+
+ req = (xCreateGCReq *) Make_Req (client, X_CreateGC);
+ Send_Req (client, (xReq *) req);
+ Log_Trace ("client %d sent default CreateGC request\n", client);
+ Expect_Nothing (client);
+ gc = req -> gc;
+ Free_Req (req);
+ return (gc);
+}
+
+GContext
+Create_Default_GContext (client)
+int client;
+{
+ GContext rid;
+ rid = Create_GContext (client);
+ Set_Default_GContext (client, rid);
+ return (rid);
+}
+
+Pixmap
+Create_Pixmap (client)
+int client;
+{
+ xCreatePixmapReq * req;
+ Pixmap pid;
+
+ req = (xCreatePixmapReq *) Make_Req (client, X_CreatePixmap);
+ Send_Req (client, (xReq *) req);
+ Log_Trace ("client %d sent default CreatePixmap request\n", client);
+ Expect_Nothing (client);
+ pid = req -> pid;
+ Free_Req (req);
+ return (pid);
+}
+
+Pixmap
+Create_Default_Pixmap (client)
+int client;
+{
+ Pixmap rid;
+ rid = Create_Pixmap (client);
+ Set_Default_Pixmap (client, rid);
+ return (rid);
+}
+
+Pixmap
+Create_Cursor_Pixmap (client)
+int client;
+{
+ xCreatePixmapReq * req;
+ Pixmap pid;
+
+ req = (xCreatePixmapReq *) Make_Req (client, X_CreatePixmap);
+ req->depth = 1;
+ Send_Req (client, (xReq *) req);
+ Log_Trace ("client %d sent default CreatePixmap request\n", client);
+ Expect_Nothing (client);
+ pid = req -> pid;
+ Free_Req (req);
+ return (pid);
+}
+
+Pixmap
+Create_Default_Cursor_Pixmap (client)
+int client;
+{
+ Pixmap rid;
+ rid = Create_Cursor_Pixmap (client);
+ Set_Default_Cursor_Pixmap (client, rid);
+ return (rid);
+}
+
+Window
+Create_Window (client)
+int client;
+{
+ xCreateWindowReq * req;
+ Window wid;
+
+ req = (xCreateWindowReq *) Make_Req (client, X_CreateWindow);
+ Send_Req (client, (xReq *) req);
+ wid = req -> wid;
+ Log_Trace ("client %d sent default CreateWindow for window %d\n", client, wid);
+ Expect_Nothing (client);
+ Free_Req (req);
+ return (wid);
+}
+
+Window
+Create_Child_Window (client, parent)
+int client;
+Window parent;
+{
+ xCreateWindowReq * req;
+ Window wid;
+
+ req = (xCreateWindowReq *) Make_Req (client, X_CreateWindow);
+ req->parent = parent;
+ Send_Req (client, (xReq *) req);
+ wid = req -> wid;
+ Log_Trace ("client %d sent CreateWindow for window %d, a child of window %d\n", client, wid, parent);
+ Expect_Nothing (client);
+ Free_Req (req);
+ return (wid);
+}
+
+
+/*
+ intent: set up the client data structure to have a default window
+ input: client ID - integer from 0 to MAX_CLIENTS
+ output: window ID - integer from ? to ?
+ global input:
+ side effects: default window ID field in client data structure is
+ overwritten
+ methods:
+*/
+
+Window
+Create_Default_Window (client)
+int client;
+{
+ Window rid;
+ rid = Create_Window (client);
+ Set_Default_Window (client, rid);
+ return (rid);
+}
+
+xEvent
+Create_Event (client, event_type)
+int client;
+int event_type;
+{
+ xEvent event;
+ int i;
+
+
+ switch (event_type) {
+ case ClientMessage:
+ event.u.u.type = 33;
+ event.u.u.detail = 8;
+ event.u.clientMessage.window = Get_Default_Window(client);
+ event.u.clientMessage.u.b.type = Get_Default_Atom(client);
+ for (i = 0; i < 20; i++) /* set this for debug purposes only */
+/* event.u.clientMessage.u.b.bytes[i] = 0xf;*/
+ event.u.clientMessage.u.b.bytes[i] = 0x6;
+ break;
+ default:
+ DEFAULT_ERROR;
+ break;
+ }
+
+ return (event);
+}
+
+void
+Create_Default_Event (client, event_type)
+int client;
+int event_type;
+{
+ Set_Default_Event(client, Create_Event(client, event_type));
+}
+
diff --git a/xc/test/xsuite/xtest/src/libproto/SendEvt.c b/xc/test/xsuite/xtest/src/libproto/SendEvt.c
new file mode 100644
index 000000000..8dfcc2409
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/SendEvt.c
@@ -0,0 +1,484 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "XstlibInt.h"
+#include "DataMove.h"
+
+/*
+ * Routine: Send_Evt
+ *
+ * Input: client - integer from 0 to MAX_CLIENTS representing which
+ * client this is
+ * rp - pointer to xlib style request structure
+ * size - size of request without event (assumes event is at end)
+ * evt - event type as defined in xlib (e.g. KeyPress)
+ *
+ * Output: packs event into request output buffer
+ *
+ * Returns:
+ *
+ * Globals used:
+ *
+ * Side Effects:
+ *
+ * Methods:
+ *
+ */
+
+/*
+ * NOTE: this code has only been tested down the ClientMessage leg
+ */
+
+Send_Evt(client,event_ptr,event_type)
+int client;
+xEvent *event_ptr;
+int event_type;
+{
+ switch (event_type) {
+ case KeyPress:
+ send1(client,(long) event_ptr->u.u.type);
+ send1(client,(long) event_ptr->u.u.detail);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.keyButtonPointer.time);
+ send4(client,(long) event_ptr->u.keyButtonPointer.root);
+ send4(client,(long) event_ptr->u.keyButtonPointer.event);
+ send4(client,(long) event_ptr->u.keyButtonPointer.child);
+ send2(client,(long) event_ptr->u.keyButtonPointer.rootX);
+ send2(client,(long) event_ptr->u.keyButtonPointer.rootY);
+ send2(client,(long) event_ptr->u.keyButtonPointer.eventX);
+ send2(client,(long) event_ptr->u.keyButtonPointer.eventY);
+ send2(client,(long) event_ptr->u.keyButtonPointer.state);
+ send1(client,(long) event_ptr->u.keyButtonPointer.sameScreen);
+ sendpad(client,1);
+ break;
+ case KeyRelease:
+ send1(client,(long) event_ptr->u.u.type);
+ send1(client,(long) event_ptr->u.u.detail);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.keyButtonPointer.time);
+ send4(client,(long) event_ptr->u.keyButtonPointer.root);
+ send4(client,(long) event_ptr->u.keyButtonPointer.event);
+ send4(client,(long) event_ptr->u.keyButtonPointer.child);
+ send2(client,(long) event_ptr->u.keyButtonPointer.rootX);
+ send2(client,(long) event_ptr->u.keyButtonPointer.rootY);
+ send2(client,(long) event_ptr->u.keyButtonPointer.eventX);
+ send2(client,(long) event_ptr->u.keyButtonPointer.eventY);
+ send2(client,(long) event_ptr->u.keyButtonPointer.state);
+ send1(client,(long) event_ptr->u.keyButtonPointer.sameScreen);
+ sendpad(client,1);
+ break;
+ case ButtonPress:
+ send1(client,(long) event_ptr->u.u.type);
+ send1(client,(long) event_ptr->u.u.detail);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.keyButtonPointer.time);
+ send4(client,(long) event_ptr->u.keyButtonPointer.root);
+ send4(client,(long) event_ptr->u.keyButtonPointer.event);
+ send4(client,(long) event_ptr->u.keyButtonPointer.child);
+ send2(client,(long) event_ptr->u.keyButtonPointer.rootX);
+ send2(client,(long) event_ptr->u.keyButtonPointer.rootY);
+ send2(client,(long) event_ptr->u.keyButtonPointer.eventX);
+ send2(client,(long) event_ptr->u.keyButtonPointer.eventY);
+ send2(client,(long) event_ptr->u.keyButtonPointer.state);
+ send1(client,(long) event_ptr->u.keyButtonPointer.sameScreen);
+ sendpad(client,1);
+ break;
+ case ButtonRelease:
+ send1(client,(long) event_ptr->u.u.type);
+ send1(client,(long) event_ptr->u.u.detail);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.keyButtonPointer.time);
+ send4(client,(long) event_ptr->u.keyButtonPointer.root);
+ send4(client,(long) event_ptr->u.keyButtonPointer.event);
+ send4(client,(long) event_ptr->u.keyButtonPointer.child);
+ send2(client,(long) event_ptr->u.keyButtonPointer.rootX);
+ send2(client,(long) event_ptr->u.keyButtonPointer.rootY);
+ send2(client,(long) event_ptr->u.keyButtonPointer.eventX);
+ send2(client,(long) event_ptr->u.keyButtonPointer.eventY);
+ send2(client,(long) event_ptr->u.keyButtonPointer.state);
+ send1(client,(long) event_ptr->u.keyButtonPointer.sameScreen);
+ sendpad(client,1);
+ break;
+ case MotionNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ send1(client,(long) event_ptr->u.u.detail);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.keyButtonPointer.time);
+ send4(client,(long) event_ptr->u.keyButtonPointer.root);
+ send4(client,(long) event_ptr->u.keyButtonPointer.event);
+ send4(client,(long) event_ptr->u.keyButtonPointer.child);
+ send2(client,(long) event_ptr->u.keyButtonPointer.rootX);
+ send2(client,(long) event_ptr->u.keyButtonPointer.rootY);
+ send2(client,(long) event_ptr->u.keyButtonPointer.eventX);
+ send2(client,(long) event_ptr->u.keyButtonPointer.eventY);
+ send2(client,(long) event_ptr->u.keyButtonPointer.state);
+ send1(client,(long) event_ptr->u.keyButtonPointer.sameScreen);
+ sendpad(client,1);
+ break;
+ case EnterNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ send1(client,(long) event_ptr->u.u.detail);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.enterLeave.time);
+ send4(client,(long) event_ptr->u.enterLeave.root);
+ send4(client,(long) event_ptr->u.enterLeave.event);
+ send4(client,(long) event_ptr->u.enterLeave.child);
+ send2(client,(long) event_ptr->u.enterLeave.rootX);
+ send2(client,(long) event_ptr->u.enterLeave.rootY);
+ send2(client,(long) event_ptr->u.enterLeave.eventX);
+ send2(client,(long) event_ptr->u.enterLeave.eventY);
+ send2(client,(long) event_ptr->u.enterLeave.state);
+ send1(client,(long) event_ptr->u.enterLeave.mode);
+ send1(client,(long) event_ptr->u.enterLeave.flags);
+ break;
+ case LeaveNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ send1(client,(long) event_ptr->u.u.detail);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.enterLeave.time);
+ send4(client,(long) event_ptr->u.enterLeave.root);
+ send4(client,(long) event_ptr->u.enterLeave.event);
+ send4(client,(long) event_ptr->u.enterLeave.child);
+ send2(client,(long) event_ptr->u.enterLeave.rootX);
+ send2(client,(long) event_ptr->u.enterLeave.rootY);
+ send2(client,(long) event_ptr->u.enterLeave.eventX);
+ send2(client,(long) event_ptr->u.enterLeave.eventY);
+ send2(client,(long) event_ptr->u.enterLeave.state);
+ send1(client,(long) event_ptr->u.enterLeave.mode);
+ send1(client,(long) event_ptr->u.enterLeave.flags);
+ break;
+ case FocusIn:
+ send1(client,(long) event_ptr->u.u.type);
+ send1(client,(long) event_ptr->u.u.detail);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.focus.window);
+ send1(client,(long) event_ptr->u.focus.mode);
+ sendpad(client,23);
+ break;
+ case FocusOut:
+ send1(client,(long) event_ptr->u.u.type);
+ send1(client,(long) event_ptr->u.u.detail);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.focus.window);
+ send1(client,(long) event_ptr->u.focus.mode);
+ sendpad(client,23);
+ break;
+ case KeymapNotify:
+ send1(client,(long)((xKeymapEvent *) event_ptr)->type);
+ /*
+ call to sendbytes is commented out to let this file compile;
+ sendbytes is not yet implemented.
+
+ sendbytes(client,((xKeymapEvent *)event_ptr)->map);
+ */
+ break;
+ case Expose:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.expose.window);
+ send2(client,(long) event_ptr->u.expose.x);
+ send2(client,(long) event_ptr->u.expose.y);
+ send2(client,(long) event_ptr->u.expose.width);
+ send2(client,(long) event_ptr->u.expose.height);
+ send2(client,(long) event_ptr->u.expose.count);
+ sendpad(client,14);
+ break;
+ case GraphicsExpose:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.graphicsExposure.drawable);
+ send2(client,(long) event_ptr->u.graphicsExposure.x);
+ send2(client,(long) event_ptr->u.graphicsExposure.y);
+ send2(client,(long) event_ptr->u.graphicsExposure.width);
+ send2(client,(long) event_ptr->u.graphicsExposure.height);
+ send2(client,(long) event_ptr->u.graphicsExposure.minorEvent);
+ send2(client,(long) event_ptr->u.graphicsExposure.count);
+ send1(client,(long) event_ptr->u.graphicsExposure.majorEvent);
+ sendpad(client,11);
+ break;
+ case NoExpose:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.noExposure.drawable);
+ send2(client,(long) event_ptr->u.noExposure.minorEvent);
+ send1(client,(long) event_ptr->u.noExposure.majorEvent);
+ sendpad(client,21);
+ break;
+ case VisibilityNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.visibility.window);
+ send1(client,(long) event_ptr->u.visibility.state);
+ sendpad(client,23);
+ break;
+ case CreateNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.createNotify.parent);
+ send4(client,(long) event_ptr->u.createNotify.window);
+ send2(client,(long) event_ptr->u.createNotify.x);
+ send2(client,(long) event_ptr->u.createNotify.y);
+ send2(client,(long) event_ptr->u.createNotify.width);
+ send2(client,(long) event_ptr->u.createNotify.height);
+ send2(client,(long) event_ptr->u.createNotify.borderWidth);
+ send1(client,(long) event_ptr->u.createNotify.override);
+ sendpad(client,9);
+ break;
+ case DestroyNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.destroyNotify.event);
+ send4(client,(long) event_ptr->u.destroyNotify.window);
+ sendpad(client,20);
+ break;
+ case UnmapNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.unmapNotify.event);
+ send4(client,(long) event_ptr->u.unmapNotify.window);
+ send1(client,(long) event_ptr->u.unmapNotify.fromConfigure);
+ sendpad(client,19);
+ break;
+ case MapNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.mapNotify.event);
+ send4(client,(long) event_ptr->u.mapNotify.window);
+ send1(client,(long) event_ptr->u.mapNotify.override);
+ sendpad(client,19);
+ break;
+ case MapRequest:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.mapRequest.parent);
+ send4(client,(long) event_ptr->u.mapRequest.window);
+ sendpad(client,20);
+ break;
+ case ReparentNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.reparent.event);
+ send4(client,(long) event_ptr->u.reparent.window);
+ send4(client,(long) event_ptr->u.reparent.parent);
+ send2(client,(long) event_ptr->u.reparent.x);
+ send2(client,(long) event_ptr->u.reparent.y);
+ send1(client,(long) event_ptr->u.reparent.override);
+ sendpad(client,11);
+ break;
+ case ConfigureNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.configureNotify.event);
+ send4(client,(long) event_ptr->u.configureNotify.window);
+ send4(client,(long) event_ptr->u.configureNotify.aboveSibling);
+ send2(client,(long) event_ptr->u.configureNotify.x);
+ send2(client,(long) event_ptr->u.configureNotify.y);
+ send2(client,(long) event_ptr->u.configureNotify.width);
+ send2(client,(long) event_ptr->u.configureNotify.height);
+ send2(client,(long) event_ptr->u.configureNotify.borderWidth);
+ send1(client,(long) event_ptr->u.configureNotify.override);
+ sendpad(client,5);
+ break;
+ case ConfigureRequest:
+ send1(client,(long) event_ptr->u.u.type);
+ send1(client,(long) event_ptr->u.u.detail);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.configureRequest.parent);
+ send4(client,(long) event_ptr->u.configureRequest.window);
+ send4(client,(long) event_ptr->u.configureRequest.sibling);
+ send2(client,(long) event_ptr->u.configureRequest.x);
+ send2(client,(long) event_ptr->u.configureRequest.y);
+ send2(client,(long) event_ptr->u.configureRequest.width);
+ send2(client,(long) event_ptr->u.configureRequest.height);
+ send2(client,(long) event_ptr->u.configureRequest.borderWidth);
+ send2(client,(long) event_ptr->u.configureRequest.valueMask);
+ sendpad(client,4);
+ break;
+ case GravityNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.gravity.event);
+ send4(client,(long) event_ptr->u.gravity.window);
+ send2(client,(long) event_ptr->u.gravity.x);
+ send2(client,(long) event_ptr->u.gravity.y);
+ sendpad(client,16);
+ break;
+ case ResizeRequest:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.resizeRequest.window);
+ send2(client,(long) event_ptr->u.resizeRequest.width);
+ send2(client,(long) event_ptr->u.resizeRequest.height);
+ sendpad(client,20);
+ break;
+ case CirculateNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.circulate.event);
+ send4(client,(long) event_ptr->u.circulate.window);
+ send4(client,(long) event_ptr->u.circulate.parent);
+ send1(client,(long) event_ptr->u.circulate.place);
+ sendpad(client,15);
+ break;
+ case CirculateRequest:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.circulate.parent);
+ send4(client,(long) event_ptr->u.circulate.window);
+ sendpad(client,4);
+ send1(client,(long) event_ptr->u.circulate.place);
+ sendpad(client,15);
+ break;
+ case PropertyNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.property.window);
+ send4(client,(long) event_ptr->u.property.atom);
+ send4(client,(long) event_ptr->u.property.time);
+ send1(client,(long) event_ptr->u.property.state);
+ sendpad(client,15);
+ break;
+ case SelectionClear:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.selectionClear.time);
+ send4(client,(long) event_ptr->u.selectionClear.window);
+ send4(client,(long) event_ptr->u.selectionClear.atom);
+ sendpad(client,16);
+ break;
+ case SelectionRequest:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.selectionRequest.time);
+ send4(client,(long) event_ptr->u.selectionRequest.owner);
+ send4(client,(long) event_ptr->u.selectionRequest.requestor);
+ send4(client,(long) event_ptr->u.selectionRequest.selection);
+ send4(client,(long) event_ptr->u.selectionRequest.target);
+ send4(client,(long) event_ptr->u.selectionRequest.property);
+ sendpad(client,4);
+ break;
+ case SelectionNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.selectionNotify.time);
+ send4(client,(long) event_ptr->u.selectionNotify.requestor);
+ send4(client,(long) event_ptr->u.selectionNotify.selection);
+ send4(client,(long) event_ptr->u.selectionNotify.target);
+ send4(client,(long) event_ptr->u.selectionNotify.property);
+ sendpad(client,8);
+ break;
+ case ColormapNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.colormap.window);
+ send4(client,(long) event_ptr->u.colormap.colormap);
+ send1(client,(long) event_ptr->u.colormap.new);
+ send1(client,(long) event_ptr->u.colormap.state);
+ sendpad(client,18);
+ break;
+ case ClientMessage:
+ send1(client,(long) event_ptr->u.u.type);
+ send1(client,(long) event_ptr->u.u.detail);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send4(client,(long) event_ptr->u.clientMessage.window);
+ send4(client,(long) event_ptr->u.clientMessage.u.l.type);
+ if (event_ptr->u.u.detail == 8) {
+ int i;
+ for (i = 0; i < 20; i++)
+ send1(client, event_ptr->u.clientMessage.u.b.bytes[i]);
+ }
+ else if (event_ptr->u.u.detail == 16) {
+ send2(client,event_ptr->u.clientMessage.u.s.shorts0);
+ send2(client,event_ptr->u.clientMessage.u.s.shorts1);
+ send2(client,event_ptr->u.clientMessage.u.s.shorts2);
+ send2(client,event_ptr->u.clientMessage.u.s.shorts3);
+ send2(client,event_ptr->u.clientMessage.u.s.shorts4);
+ send2(client,event_ptr->u.clientMessage.u.s.shorts5);
+ send2(client,event_ptr->u.clientMessage.u.s.shorts6);
+ send2(client,event_ptr->u.clientMessage.u.s.shorts7);
+ send2(client,event_ptr->u.clientMessage.u.s.shorts8);
+ send2(client,event_ptr->u.clientMessage.u.s.shorts9);
+ }
+ else if (event_ptr->u.u.detail == 32) {
+ send4(client,event_ptr->u.clientMessage.u.l.longs0);
+ send4(client,event_ptr->u.clientMessage.u.l.longs1);
+ send4(client,event_ptr->u.clientMessage.u.l.longs2);
+ send4(client,event_ptr->u.clientMessage.u.l.longs3);
+ send4(client,event_ptr->u.clientMessage.u.l.longs4);
+ }
+ else
+ Log_Err ("Send_Evt: bad format for ClientMessage data\n");
+
+/* send_client_data(client, event_ptr);*/
+ break;
+ case MappingNotify:
+ send1(client,(long) event_ptr->u.u.type);
+ sendpad(client,1);
+ send2(client,(long) event_ptr->u.u.sequenceNumber);
+ send1(client,(long) event_ptr->u.mappingNotify.request);
+ send1(client,(long) event_ptr->u.mappingNotify.firstKeyCode);
+ send1(client,(long) event_ptr->u.mappingNotify.count);
+ sendpad(client,25);
+ break;
+ default:
+ DEFAULT_ERROR;
+ break;
+ }
+
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/SendReq.c b/xc/test/xsuite/xtest/src/libproto/SendReq.c
new file mode 100644
index 000000000..2b352e367
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/SendReq.c
@@ -0,0 +1,1161 @@
+
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: SendReq.c 1.15 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: SendReq.c 1.15 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+#include "DataMove.h"
+
+extern int Send_Evt();
+void _Send_Req();
+
+void
+Send_Req(client,rp)
+xReq *rp;
+int client;
+{
+ _Send_Req(client,rp,0); /* not polling thru this entry point */
+}
+
+void
+_Send_Req(client,rp,pollreq)
+int client;
+xReq *rp;
+int pollreq;
+{
+ XstDisplay *dpy = Get_Display(client);
+ unsigned long oldlen = rp->length;
+ long bytes_out = oldlen << 2;
+ long n;
+
+ switch (Get_Test_Type(client)) {
+ case OPEN_DISPLAY:
+ case SETUP:
+ case GOOD:
+ /* nothing */
+ break;
+ case TOO_LONG: /* munge length to be enormous... */
+ {
+ unsigned long newlen = Get_Max_Request(client) + 1;
+
+ rp->length = newlen;
+ bytes_out = (newlen << 2);
+ }
+ break;
+ }
+ if (!pollreq) {
+ Log_Debug("Sending:");
+ Show_Req(rp);
+ }
+
+ if (!pollreq) {
+ Xst_clients[client].cl_reqtype = rp->reqType; /* stash for Expect */
+ }
+
+ dpy->request++;
+
+ switch (rp->reqType) {
+ case X_CreateWindow:
+ send1(client,(long) ((xCreateWindowReq *)rp)->reqType);
+ send1(client,(long) ((xCreateWindowReq *)rp)->depth);
+ send2(client,(short) ((xCreateWindowReq *)rp)->length);
+ send4(client,(long) ((xCreateWindowReq *)rp)->wid);
+ send4(client,(long) ((xCreateWindowReq *)rp)->parent);
+ send2(client,(short) ((xCreateWindowReq *)rp)->x);
+ send2(client,(short) ((xCreateWindowReq *)rp)->y);
+ send2(client,(short) ((xCreateWindowReq *)rp)->width);
+ send2(client,(short) ((xCreateWindowReq *)rp)->height);
+ send2(client,(short) ((xCreateWindowReq *)rp)->borderWidth);
+ send2(client,(short) ((xCreateWindowReq *)rp)->class);
+ send4(client,(long) ((xCreateWindowReq *)rp)->visual);
+ send4(client,(long) ((xCreateWindowReq *)rp)->mask);
+ Send_Value_List(client, rp, sizeof (xCreateWindowReq), 32);
+ break;
+ case X_ChangeWindowAttributes:
+ send1(client,(long) ((xChangeWindowAttributesReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xChangeWindowAttributesReq *)rp)->length);
+ send4(client,(long) ((xChangeWindowAttributesReq *)rp)->window);
+ send4(client,(long) ((xChangeWindowAttributesReq *)rp)->valueMask);
+ Send_Value_List(client, rp, sizeof (xChangeWindowAttributesReq), 32);
+ break;
+ case X_GetWindowAttributes:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_DestroyWindow:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_DestroySubwindows:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_ChangeSaveSet:
+ send1(client,(long) ((xChangeSaveSetReq *)rp)->reqType);
+ send1(client,(long) ((xChangeSaveSetReq *)rp)->mode);
+ send2(client,(short) ((xChangeSaveSetReq *)rp)->length);
+ send4(client,(long) ((xChangeSaveSetReq *)rp)->window);
+ break;
+ case X_ReparentWindow:
+ send1(client,(long) ((xReparentWindowReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xReparentWindowReq *)rp)->length);
+ send4(client,(long) ((xReparentWindowReq *)rp)->window);
+ send4(client,(long) ((xReparentWindowReq *)rp)->parent);
+ send2(client,(short) ((xReparentWindowReq *)rp)->x);
+ send2(client,(short) ((xReparentWindowReq *)rp)->y);
+ break;
+ case X_MapWindow:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_MapSubwindows:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_UnmapWindow:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_UnmapSubwindows:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_ConfigureWindow:
+ send1(client,(long) ((xConfigureWindowReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xConfigureWindowReq *)rp)->length);
+ send4(client,(long) ((xConfigureWindowReq *)rp)->window);
+ send2(client,(short) ((xConfigureWindowReq *)rp)->mask);
+ sendpad(client,2);
+ Send_Value_List(client, rp, sizeof (xConfigureWindowReq), 32);
+ break;
+ case X_CirculateWindow:
+ send1(client,(long) ((xCirculateWindowReq *)rp)->reqType);
+ send1(client,(long) ((xCirculateWindowReq *)rp)->direction);
+ send2(client,(short) ((xCirculateWindowReq *)rp)->length);
+ send4(client,(long) ((xCirculateWindowReq *)rp)->window);
+ break;
+ case X_GetGeometry:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_QueryTree:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_InternAtom:
+ send1(client,(long) ((xInternAtomReq *)rp)->reqType);
+ send1(client,(long) ((xInternAtomReq *)rp)->onlyIfExists);
+ send2(client,(short) ((xInternAtomReq *)rp)->length);
+ send2(client,(short) ((xInternAtomReq *)rp)->nbytes);
+ sendpad(client,2);
+ Send_Value_List(client, rp, sizeof (xInternAtomReq),8);
+ break;
+ case X_GetAtomName:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_ChangeProperty:
+ send1(client,(long) ((xChangePropertyReq *)rp)->reqType);
+ send1(client,(long) ((xChangePropertyReq *)rp)->mode);
+ send2(client,(short) ((xChangePropertyReq *)rp)->length);
+ send4(client,(long) ((xChangePropertyReq *)rp)->window);
+ send4(client,(long) ((xChangePropertyReq *)rp)->property);
+ send4(client,(long) ((xChangePropertyReq *)rp)->type);
+ send1(client,(long) ((xChangePropertyReq *)rp)->format);
+ sendpad(client,3);
+ send4(client,(long) ((xChangePropertyReq *)rp)->nUnits);
+ Send_Value_List(client, rp, sizeof (xChangePropertyReq),
+ (int)((xChangePropertyReq *)rp)->format);
+ break;
+ case X_DeleteProperty:
+ send1(client,(long) ((xDeletePropertyReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xDeletePropertyReq *)rp)->length);
+ send4(client,(long) ((xDeletePropertyReq *)rp)->window);
+ send4(client,(long) ((xDeletePropertyReq *)rp)->property);
+ break;
+ case X_GetProperty:
+ send1(client,(long) ((xGetPropertyReq *)rp)->reqType);
+ send1(client,(long) ((xGetPropertyReq *)rp)->delete);
+ send2(client,(short) ((xGetPropertyReq *)rp)->length);
+ send4(client,(long) ((xGetPropertyReq *)rp)->window);
+ send4(client,(long) ((xGetPropertyReq *)rp)->property);
+ send4(client,(long) ((xGetPropertyReq *)rp)->type);
+ send4(client,(long) ((xGetPropertyReq *)rp)->longOffset);
+ send4(client,(long) ((xGetPropertyReq *)rp)->longLength);
+ break;
+ case X_ListProperties:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_SetSelectionOwner:
+ send1(client,(long) ((xSetSelectionOwnerReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xSetSelectionOwnerReq *)rp)->length);
+ send4(client,(long) ((xSetSelectionOwnerReq *)rp)->window);
+ send4(client,(long) ((xSetSelectionOwnerReq *)rp)->selection);
+ send4(client,(long) ((xSetSelectionOwnerReq *)rp)->time);
+ break;
+ case X_GetSelectionOwner:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_ConvertSelection:
+ send1(client,(long) ((xConvertSelectionReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xConvertSelectionReq *)rp)->length);
+ send4(client,(long) ((xConvertSelectionReq *)rp)->requestor);
+ send4(client,(long) ((xConvertSelectionReq *)rp)->selection);
+ send4(client,(long) ((xConvertSelectionReq *)rp)->target);
+ send4(client,(long) ((xConvertSelectionReq *)rp)->property);
+ send4(client,(long) ((xConvertSelectionReq *)rp)->time);
+ break;
+ case X_SendEvent: {
+ xEvent *event_ptr;
+ send1(client,(long) ((xSendEventReq *)rp)->reqType);
+ send1(client,(long) ((xSendEventReq *)rp)->propagate);
+ send2(client,(short) ((xSendEventReq *)rp)->length);
+ send4(client,(long) ((xSendEventReq *)rp)->destination);
+ send4(client,(long) ((xSendEventReq *)rp)->eventMask);
+ event_ptr = &(((xSendEventReq *)rp)->event);
+ Send_Evt(client, event_ptr, event_ptr->u.u.type);
+ break;
+ }
+ case X_GrabPointer:
+ send1(client,(long) ((xGrabPointerReq *)rp)->reqType);
+ send1(client,(long) ((xGrabPointerReq *)rp)->ownerEvents);
+ send2(client,(short) ((xGrabPointerReq *)rp)->length);
+ send4(client,(long) ((xGrabPointerReq *)rp)->grabWindow);
+ send2(client,(short) ((xGrabPointerReq *)rp)->eventMask);
+ send1(client,(long) ((xGrabPointerReq *)rp)->pointerMode);
+ send1(client,(long) ((xGrabPointerReq *)rp)->keyboardMode);
+ send4(client,(long) ((xGrabPointerReq *)rp)->confineTo);
+ send4(client,(long) ((xGrabPointerReq *)rp)->cursor);
+ send4(client,(long) ((xGrabPointerReq *)rp)->time);
+ break;
+ case X_UngrabPointer:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_GrabButton:
+ send1(client,(long) ((xGrabButtonReq *)rp)->reqType);
+ send1(client,(long) ((xGrabButtonReq *)rp)->ownerEvents);
+ send2(client,(short) ((xGrabButtonReq *)rp)->length);
+ send4(client,(long) ((xGrabButtonReq *)rp)->grabWindow);
+ send2(client,(short) ((xGrabButtonReq *)rp)->eventMask);
+ send1(client,(long) ((xGrabButtonReq *)rp)->pointerMode);
+ send1(client,(long) ((xGrabButtonReq *)rp)->keyboardMode);
+ send4(client,(long) ((xGrabButtonReq *)rp)->confineTo);
+ send4(client,(long) ((xGrabButtonReq *)rp)->cursor);
+ send1(client,(long) ((xGrabButtonReq *)rp)->button);
+ sendpad(client,1);
+ send2(client,(short) ((xGrabButtonReq *)rp)->modifiers);
+ break;
+ case X_UngrabButton:
+ send1(client,(long) ((xUngrabButtonReq *)rp)->reqType);
+ send1(client,(long) ((xUngrabButtonReq *)rp)->button);
+ send2(client,(short) ((xUngrabButtonReq *)rp)->length);
+ send4(client,(long) ((xUngrabButtonReq *)rp)->grabWindow);
+ send2(client,(short) ((xUngrabButtonReq *)rp)->modifiers);
+ sendpad(client,2);
+ break;
+ case X_ChangeActivePointerGrab:
+ send1(client,(long) ((xChangeActivePointerGrabReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xChangeActivePointerGrabReq *)rp)->length);
+ send4(client,(long) ((xChangeActivePointerGrabReq *)rp)->cursor);
+ send4(client,(long) ((xChangeActivePointerGrabReq *)rp)->time);
+ send2(client,(short) ((xChangeActivePointerGrabReq *)rp)->eventMask);
+ sendpad(client,2);
+ break;
+ case X_GrabKeyboard:
+ send1(client,(long) ((xGrabKeyboardReq *)rp)->reqType);
+ send1(client,(long) ((xGrabKeyboardReq *)rp)->ownerEvents);
+ send2(client,(short) ((xGrabKeyboardReq *)rp)->length);
+ send4(client,(long) ((xGrabKeyboardReq *)rp)->grabWindow);
+ send4(client,(long) ((xGrabKeyboardReq *)rp)->time);
+ send1(client,(long) ((xGrabKeyboardReq *)rp)->pointerMode);
+ send1(client,(long) ((xGrabKeyboardReq *)rp)->keyboardMode);
+ sendpad(client,2);
+ break;
+ case X_UngrabKeyboard:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_GrabKey:
+ send1(client,(long) ((xGrabKeyReq *)rp)->reqType);
+ send1(client,(long) ((xGrabKeyReq *)rp)->ownerEvents);
+ send2(client,(short) ((xGrabKeyReq *)rp)->length);
+ send4(client,(long) ((xGrabKeyReq *)rp)->grabWindow);
+ send2(client,(short) ((xGrabKeyReq *)rp)->modifiers);
+ send1(client,(long) ((xGrabKeyReq *)rp)->key);
+ send1(client,(long) ((xGrabKeyReq *)rp)->pointerMode);
+ send1(client,(long) ((xGrabKeyReq *)rp)->keyboardMode);
+ sendpad(client,3);
+ break;
+ case X_UngrabKey:
+ send1(client,(long) ((xUngrabKeyReq *)rp)->reqType);
+ send1(client,(long) ((xUngrabKeyReq *)rp)->key);
+ send2(client,(short) ((xUngrabKeyReq *)rp)->length);
+ send4(client,(long) ((xUngrabKeyReq *)rp)->grabWindow);
+ send2(client,(short) ((xUngrabKeyReq *)rp)->modifiers);
+ sendpad(client,2);
+ break;
+ case X_AllowEvents:
+ send1(client,(long) ((xAllowEventsReq *)rp)->reqType);
+ send1(client,(long) ((xAllowEventsReq *)rp)->mode);
+ send2(client,(short) ((xAllowEventsReq *)rp)->length);
+ send4(client,(long) ((xAllowEventsReq *)rp)->time);
+ break;
+ case X_GrabServer:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ break;
+ case X_UngrabServer:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ break;
+ case X_QueryPointer:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_GetMotionEvents:
+ send1(client,(long) ((xGetMotionEventsReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xGetMotionEventsReq *)rp)->length);
+ send4(client,(long) ((xGetMotionEventsReq *)rp)->window);
+ send4(client,(long) ((xGetMotionEventsReq *)rp)->start);
+ send4(client,(long) ((xGetMotionEventsReq *)rp)->stop);
+ break;
+ case X_TranslateCoords:
+ send1(client,(long) ((xTranslateCoordsReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xTranslateCoordsReq *)rp)->length);
+ send4(client,(long) ((xTranslateCoordsReq *)rp)->srcWid);
+ send4(client,(long) ((xTranslateCoordsReq *)rp)->dstWid);
+ send2(client,(short) ((xTranslateCoordsReq *)rp)->srcX);
+ send2(client,(short) ((xTranslateCoordsReq *)rp)->srcY);
+ break;
+ case X_WarpPointer:
+ send1(client,(long) ((xWarpPointerReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xWarpPointerReq *)rp)->length);
+ send4(client,(long) ((xWarpPointerReq *)rp)->srcWid);
+ send4(client,(long) ((xWarpPointerReq *)rp)->dstWid);
+ send2(client,(short) ((xWarpPointerReq *)rp)->srcX);
+ send2(client,(short) ((xWarpPointerReq *)rp)->srcY);
+ send2(client,(short) ((xWarpPointerReq *)rp)->srcWidth);
+ send2(client,(short) ((xWarpPointerReq *)rp)->srcHeight);
+ send2(client,(short) ((xWarpPointerReq *)rp)->dstX);
+ send2(client,(short) ((xWarpPointerReq *)rp)->dstY);
+ break;
+ case X_SetInputFocus:
+ send1(client,(long) ((xSetInputFocusReq *)rp)->reqType);
+ send1(client,(long) ((xSetInputFocusReq *)rp)->revertTo);
+ send2(client,(short) ((xSetInputFocusReq *)rp)->length);
+ send4(client,(long) ((xSetInputFocusReq *)rp)->focus);
+ send4(client,(long) ((xSetInputFocusReq *)rp)->time);
+ break;
+ case X_GetInputFocus:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ break;
+ case X_QueryKeymap:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ break;
+ case X_OpenFont:
+ send1(client,(long) ((xOpenFontReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xOpenFontReq *)rp)->length);
+ send4(client,(long) ((xOpenFontReq *)rp)->fid);
+ send2(client,(short) ((xOpenFontReq *)rp)->nbytes);
+ sendpad(client,2);
+ Send_Value_List(client, rp, sizeof (xOpenFontReq),8);
+ sendpad(client,0);
+ break;
+ case X_CloseFont:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_QueryFont:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_QueryTextExtents:
+ send1(client,(long) ((xQueryTextExtentsReq *)rp)->reqType);
+ send1(client,(long) ((xQueryTextExtentsReq *)rp)->oddLength);
+ send2(client,(short) ((xQueryTextExtentsReq *)rp)->length);
+ send4(client,(long) ((xQueryTextExtentsReq *)rp)->fid);
+ Send_String16(client, rp, sizeof (xQueryTextExtentsReq));
+ break;
+ case X_ListFonts:
+ send1(client,(long) ((xListFontsReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xListFontsReq *)rp)->length);
+ send2(client,(short) ((xListFontsReq *)rp)->maxNames);
+ send2(client,(short) ((xListFontsReq *)rp)->nbytes);
+ Send_Value_List(client, rp, sizeof (xListFontsReq),8);
+ break;
+ case X_ListFontsWithInfo:
+ send1(client,(long) ((xListFontsWithInfoReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xListFontsWithInfoReq *)rp)->length);
+ send2(client,(short) ((xListFontsWithInfoReq *)rp)->maxNames);
+ send2(client,(short) ((xListFontsWithInfoReq *)rp)->nbytes);
+ Send_Value_List(client, rp, sizeof (xListFontsWithInfoReq),8);
+ break;
+ case X_SetFontPath:
+ send1(client,(long) ((xSetFontPathReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xSetFontPathReq *)rp)->length);
+ send2(client,(short) ((xSetFontPathReq *)rp)->nFonts);
+ sendpad(client,2);
+ Send_Value_List(client, rp, sizeof (xSetFontPathReq),8);
+ break;
+ case X_GetFontPath:
+ send1(client,(long) rp->reqType);
+ sendpad(client,1);
+ send2(client,(short) rp->length);
+ break;
+ case X_CreatePixmap:
+ send1(client,(long) ((xCreatePixmapReq *)rp)->reqType);
+ send1(client,(long) ((xCreatePixmapReq *)rp)->depth);
+ send2(client,(short) ((xCreatePixmapReq *)rp)->length);
+ send4(client,(long) ((xCreatePixmapReq *)rp)->pid);
+ send4(client,(long) ((xCreatePixmapReq *)rp)->drawable);
+ send2(client,(short) ((xCreatePixmapReq *)rp)->width);
+ send2(client,(short) ((xCreatePixmapReq *)rp)->height);
+ break;
+ case X_FreePixmap:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_CreateGC:
+ send1(client,(long) ((xCreateGCReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xCreateGCReq *)rp)->length);
+ send4(client,(long) ((xCreateGCReq *)rp)->gc);
+ send4(client,(long) ((xCreateGCReq *)rp)->drawable);
+ send4(client,(long) ((xCreateGCReq *)rp)->mask);
+ Send_Value_List(client, rp, sizeof (xCreateGCReq), 32);
+ break;
+ case X_ChangeGC:
+ send1(client,(long) ((xChangeGCReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xChangeGCReq *)rp)->length);
+ send4(client,(long) ((xChangeGCReq *)rp)->gc);
+ send4(client,(long) ((xChangeGCReq *)rp)->mask);
+ Send_Value_List(client, rp, sizeof (xChangeGCReq),32);
+ break;
+ case X_CopyGC:
+ send1(client,(long) ((xCopyGCReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xCopyGCReq *)rp)->length);
+ send4(client,(long) ((xCopyGCReq *)rp)->srcGC);
+ send4(client,(long) ((xCopyGCReq *)rp)->dstGC);
+ send4(client,(long) ((xCopyGCReq *)rp)->mask);
+ break;
+ case X_SetDashes:
+ send1(client,(long) ((xSetDashesReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xSetDashesReq *)rp)->length);
+ send4(client,(long) ((xSetDashesReq *)rp)->gc);
+ send2(client,(short) ((xSetDashesReq *)rp)->dashOffset);
+ send2(client,(short) ((xSetDashesReq *)rp)->nDashes);
+ Send_Value_List(client, rp, sizeof (xSetDashesReq),8);
+ break;
+ case X_SetClipRectangles:
+ send1(client,(long) ((xSetClipRectanglesReq *)rp)->reqType);
+ send1(client,(long) ((xSetClipRectanglesReq *)rp)->ordering);
+ send2(client,(short) ((xSetClipRectanglesReq *)rp)->length);
+ send4(client,(long) ((xSetClipRectanglesReq *)rp)->gc);
+ send2(client,(short) ((xSetClipRectanglesReq *)rp)->xOrigin);
+ send2(client,(short) ((xSetClipRectanglesReq *)rp)->yOrigin);
+ Send_Value_List(client, rp, sizeof (xSetClipRectanglesReq),16);
+ break;
+ case X_FreeGC:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_ClearArea:
+ send1(client,(long) ((xClearAreaReq *)rp)->reqType);
+ send1(client,(long) ((xClearAreaReq *)rp)->exposures);
+ send2(client,(short) ((xClearAreaReq *)rp)->length);
+ send4(client,(long) ((xClearAreaReq *)rp)->window);
+ send2(client,(short) ((xClearAreaReq *)rp)->x);
+ send2(client,(short) ((xClearAreaReq *)rp)->y);
+ send2(client,(short) ((xClearAreaReq *)rp)->width);
+ send2(client,(short) ((xClearAreaReq *)rp)->height);
+ break;
+ case X_CopyArea:
+ send1(client,(long) ((xCopyAreaReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xCopyAreaReq *)rp)->length);
+ send4(client,(long) ((xCopyAreaReq *)rp)->srcDrawable);
+ send4(client,(long) ((xCopyAreaReq *)rp)->dstDrawable);
+ send4(client,(long) ((xCopyAreaReq *)rp)->gc);
+ send2(client,(short) ((xCopyAreaReq *)rp)->srcX);
+ send2(client,(short) ((xCopyAreaReq *)rp)->srcY);
+ send2(client,(short) ((xCopyAreaReq *)rp)->dstX);
+ send2(client,(short) ((xCopyAreaReq *)rp)->dstY);
+ send2(client,(short) ((xCopyAreaReq *)rp)->width);
+ send2(client,(short) ((xCopyAreaReq *)rp)->height);
+ break;
+ case X_CopyPlane:
+ send1(client,(long) ((xCopyPlaneReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xCopyPlaneReq *)rp)->length);
+ send4(client,(long) ((xCopyPlaneReq *)rp)->srcDrawable);
+ send4(client,(long) ((xCopyPlaneReq *)rp)->dstDrawable);
+ send4(client,(long) ((xCopyPlaneReq *)rp)->gc);
+ send2(client,(short) ((xCopyPlaneReq *)rp)->srcX);
+ send2(client,(short) ((xCopyPlaneReq *)rp)->srcY);
+ send2(client,(short) ((xCopyPlaneReq *)rp)->dstX);
+ send2(client,(short) ((xCopyPlaneReq *)rp)->dstY);
+ send2(client,(short) ((xCopyPlaneReq *)rp)->width);
+ send2(client,(short) ((xCopyPlaneReq *)rp)->height);
+ send4(client,(long) ((xCopyPlaneReq *)rp)->bitPlane);
+ break;
+ case X_PolyPoint:
+ send1(client,(long) ((xPolyPointReq *)rp)->reqType);
+ send1(client,(long) ((xPolyPointReq *)rp)->coordMode);
+ send2(client,(short) ((xPolyPointReq *)rp)->length);
+ send4(client,(long) ((xPolyPointReq *)rp)->drawable);
+ send4(client,(long) ((xPolyPointReq *)rp)->gc);
+ Send_Value_List(client, rp, sizeof (xPolyPointReq),16);
+ break;
+ case X_PolyLine:
+ send1(client,(long) ((xPolyLineReq *)rp)->reqType);
+ send1(client,(long) ((xPolyLineReq *)rp)->coordMode);
+ send2(client,(short) ((xPolyLineReq *)rp)->length);
+ send4(client,(long) ((xPolyLineReq *)rp)->drawable);
+ send4(client,(long) ((xPolyLineReq *)rp)->gc);
+ Send_Value_List(client, rp, sizeof (xPolyLineReq),16);
+ break;
+ case X_PolySegment:
+ send1(client,(long) ((xPolySegmentReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xPolySegmentReq *)rp)->length);
+ send4(client,(long) ((xPolySegmentReq *)rp)->drawable);
+ send4(client,(long) ((xPolySegmentReq *)rp)->gc);
+ Send_Value_List(client, rp, sizeof (xPolySegmentReq), 16);
+ break;
+ case X_PolyRectangle:
+ send1(client,(long) ((xPolyRectangleReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xPolyRectangleReq *)rp)->length);
+ send4(client,(long) ((xPolyRectangleReq *)rp)->drawable);
+ send4(client,(long) ((xPolyRectangleReq *)rp)->gc);
+ Send_Value_List(client, rp, sizeof (xPolyRectangleReq),16);
+ break;
+ case X_PolyArc:
+ send1(client,(long) ((xPolyArcReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xPolyArcReq *)rp)->length);
+ send4(client,(long) ((xPolyArcReq *)rp)->drawable);
+ send4(client,(long) ((xPolyArcReq *)rp)->gc);
+ Send_Value_List(client, rp, sizeof (xPolyArcReq),16);
+ break;
+ case X_FillPoly:
+ send1(client,(long) ((xFillPolyReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xFillPolyReq *)rp)->length);
+ send4(client,(long) ((xFillPolyReq *)rp)->drawable);
+ send4(client,(long) ((xFillPolyReq *)rp)->gc);
+ send1(client,(long) ((xFillPolyReq *)rp)->shape);
+ send1(client,(long) ((xFillPolyReq *)rp)->coordMode);
+ sendpad(client,2);
+ Send_Value_List(client, rp, sizeof (xFillPolyReq),16);
+ break;
+ case X_PolyFillRectangle:
+ send1(client,(long) ((xPolyFillRectangleReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xPolyFillRectangleReq *)rp)->length);
+ send4(client,(long) ((xPolyFillRectangleReq *)rp)->drawable);
+ send4(client,(long) ((xPolyFillRectangleReq *)rp)->gc);
+ Send_Value_List(client, rp, sizeof (xPolyFillRectangleReq), 16);
+ break;
+ case X_PolyFillArc:
+ send1(client,(long) ((xPolyFillArcReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xPolyFillArcReq *)rp)->length);
+ send4(client,(long) ((xPolyFillArcReq *)rp)->drawable);
+ send4(client,(long) ((xPolyFillArcReq *)rp)->gc);
+ Send_Value_List(client, rp, sizeof (xPolyFillArcReq), 16);
+ break;
+ case X_PutImage:
+ {
+/*
+ * Images are stored in the test programs in client byte order and
+ * unpadded. This allows images to be independent of the server.
+ * However the server will expect images in server byte order and
+ * padded. This routine sends an altered xPutImageReq which the server
+ * will like. Note that we're assuming client-normal form means that
+ * rows are padded to a byte boundary; otherwise the translation is
+ * more complex. Similarly, left-pad must be zero.
+ */
+
+ int row, col = 1;
+ unsigned char my_sex = *((unsigned char *) &col) ^ 1;
+ unsigned char server_sex =
+ (Xst_clients[client].cl_dpy) -> byte_order;
+ long flip = my_sex ^ server_sex; /* assume MSBFirst == 1 */
+ int server_pad = (Xst_clients[client].cl_dpy) -> bitmap_pad;
+ int server_unit = (Xst_clients[client].cl_dpy) -> bitmap_unit;
+ int server_bitorder =
+ (Xst_clients[client].cl_dpy) -> bitmap_bit_order;
+ int src_width /*in bytes*/ =
+ (int)(((xPutImageReq *)rp)->width + 7) >> 3;
+ int dst_width /*in bytes*/ = src_width +
+ ((src_width % (server_pad>>3)) == 0 ? 0 :
+ (server_pad>>3) - src_width % (server_pad>>3));
+ char *src = (char *)rp + sizeof(xPutImageReq);
+ char **dst = (&(Get_Display(client)->bufptr));
+ char *drop;
+
+/*****
+ if (server_bitorder != MSBFirst) {
+ Log_Err("LSBFirst bit ordering not supported in Send_Req()\n");
+ Abort();
+ }
+*****/
+ if (((xPutImageReq *)rp)->leftPad != 0) {
+ Log_Err("leftPad != 0; not supported in Send_Req()\n");
+ Abort();
+ }
+
+ send1(client,(long) ((xPutImageReq *)rp)->reqType);
+ send1(client,(long) ((xPutImageReq *)rp)->format);
+ send2(client,(short) (bytes_out >> 2));
+ send4(client,(long) ((xPutImageReq *)rp)->drawable);
+ send4(client,(long) ((xPutImageReq *)rp)->gc);
+ send2(client,(short) ((xPutImageReq *)rp)->width);
+ send2(client,(short) ((xPutImageReq *)rp)->height);
+ send2(client,(short) ((xPutImageReq *)rp)->dstX);
+ send2(client,(short) ((xPutImageReq *)rp)->dstY);
+ send1(client,(long) ((xPutImageReq *)rp)->leftPad);
+ send1(client,(long) ((xPutImageReq *)rp)->depth);
+ sendpad(client,2);
+
+ switch (Get_Test_Type(client)) {
+ case TOO_LONG:
+ case BAD_LENGTH:
+ n = 0;
+ break;
+ default:
+ n = bytes_out - sizeof(xPutImageReq);
+ break;
+ }
+ squeeze_me_in(client, (long)n);
+ for (row = 0; n > 0 && row < (int)((xPutImageReq *)rp)->height; row++)
+ for(col = 0; col < dst_width; col++) {
+ if (col < src_width) {
+ drop = (char *)((long)(*dst)++ ^ flip);
+ *drop = *(src++);
+ } else {
+ (*dst)++;
+ }
+ n--;
+ }
+ }
+ break;
+ case X_GetImage:
+ send1(client,(long) ((xGetImageReq *)rp)->reqType);
+ send1(client,(long) ((xGetImageReq *)rp)->format);
+ send2(client,(short) ((xGetImageReq *)rp)->length);
+ send4(client,(long) ((xGetImageReq *)rp)->drawable);
+ send2(client,(short) ((xGetImageReq *)rp)->x);
+ send2(client,(short) ((xGetImageReq *)rp)->y);
+ send2(client,(short) ((xGetImageReq *)rp)->width);
+ send2(client,(short) ((xGetImageReq *)rp)->height);
+ send4(client,(long) ((xGetImageReq *)rp)->planeMask);
+ Xst_clients[client].cl_imagewidth = ((xGetImageReq *)rp)->width;
+ Xst_clients[client].cl_imageheight = ((xGetImageReq *)rp)->height;
+ break;
+ case X_PolyText8:
+ send1(client,(long) ((xPolyText8Req *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xPolyText8Req *)rp)->length);
+ send4(client,(long) ((xPolyText8Req *)rp)->drawable);
+ send4(client,(long) ((xPolyText8Req *)rp)->gc);
+ send2(client,(short) ((xPolyText8Req *)rp)->x);
+ send2(client,(short) ((xPolyText8Req *)rp)->y);
+ Send_TextItem8(client, rp, sizeof (xPolyText8Req));
+ break;
+ case X_PolyText16:
+ send1(client,(long) ((xPolyText16Req *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xPolyText16Req *)rp)->length);
+ send4(client,(long) ((xPolyText16Req *)rp)->drawable);
+ send4(client,(long) ((xPolyText16Req *)rp)->gc);
+ send2(client,(short) ((xPolyText16Req *)rp)->x);
+ send2(client,(short) ((xPolyText16Req *)rp)->y);
+ Send_TextItem16(client, rp, sizeof (xPolyText16Req));
+ break;
+ case X_ImageText8:
+ send1(client,(long) ((xImageText8Req *)rp)->reqType);
+ send1(client,(long) ((xImageText8Req *)rp)->nChars);
+ send2(client,(short) ((xImageText8Req *)rp)->length);
+ send4(client,(long) ((xImageText8Req *)rp)->drawable);
+ send4(client,(long) ((xImageText8Req *)rp)->gc);
+ send2(client,(short) ((xImageText8Req *)rp)->x);
+ send2(client,(short) ((xImageText8Req *)rp)->y);
+ Send_Value_List(client, rp, sizeof (xImageText8Req), 8);
+ break;
+ case X_ImageText16:
+ send1(client,(long) ((xImageText16Req *)rp)->reqType);
+ send1(client,(long) ((xImageText16Req *)rp)->nChars);
+ send2(client,(short) ((xImageText16Req *)rp)->length);
+ send4(client,(long) ((xImageText16Req *)rp)->drawable);
+ send4(client,(long) ((xImageText16Req *)rp)->gc);
+ send2(client,(short) ((xImageText16Req *)rp)->x);
+ send2(client,(short) ((xImageText16Req *)rp)->y);
+ Send_CHAR2B(client, rp, sizeof (xImageText16Req));
+ break;
+ case X_CreateColormap:
+ send1(client,(long) ((xCreateColormapReq *)rp)->reqType);
+ send1(client,(long) ((xCreateColormapReq *)rp)->alloc);
+ send2(client,(short) ((xCreateColormapReq *)rp)->length);
+ send4(client,(long) ((xCreateColormapReq *)rp)->mid);
+ send4(client,(long) ((xCreateColormapReq *)rp)->window);
+ send4(client,(long) ((xCreateColormapReq *)rp)->visual);
+ break;
+ case X_FreeColormap:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_CopyColormapAndFree:
+ send1(client,(long) ((xCopyColormapAndFreeReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xCopyColormapAndFreeReq *)rp)->length);
+ send4(client,(long) ((xCopyColormapAndFreeReq *)rp)->mid);
+ send4(client,(long) ((xCopyColormapAndFreeReq *)rp)->srcCmap);
+ break;
+ case X_InstallColormap:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_UninstallColormap:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_ListInstalledColormaps:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_AllocColor:
+ send1(client,(long) ((xAllocColorReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xAllocColorReq *)rp)->length);
+ send4(client,(long) ((xAllocColorReq *)rp)->cmap);
+ send2(client,(short) ((xAllocColorReq *)rp)->red);
+ send2(client,(short) ((xAllocColorReq *)rp)->green);
+ send2(client,(short) ((xAllocColorReq *)rp)->blue);
+ sendpad(client,2);
+ break;
+ case X_AllocNamedColor:
+ send1(client,(long) ((xAllocNamedColorReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xAllocNamedColorReq *)rp)->length);
+ send4(client,(long) ((xAllocNamedColorReq *)rp)->cmap);
+ send2(client,(short) ((xAllocNamedColorReq *)rp)->nbytes);
+ sendpad(client,2);
+ Send_Value_List(client, rp, sizeof (xAllocNamedColorReq), 8);
+ break;
+ case X_AllocColorCells:
+ send1(client,(long) ((xAllocColorCellsReq *)rp)->reqType);
+ send1(client,(long) ((xAllocColorCellsReq *)rp)->contiguous);
+ send2(client,(short) ((xAllocColorCellsReq *)rp)->length);
+ send4(client,(long) ((xAllocColorCellsReq *)rp)->cmap);
+ send2(client,(short) ((xAllocColorCellsReq *)rp)->colors);
+ send2(client,(short) ((xAllocColorCellsReq *)rp)->planes);
+ break;
+ case X_AllocColorPlanes:
+ send1(client,(long) ((xAllocColorPlanesReq *)rp)->reqType);
+ send1(client,(long) ((xAllocColorPlanesReq *)rp)->contiguous);
+ send2(client,(short) ((xAllocColorPlanesReq *)rp)->length);
+ send4(client,(long) ((xAllocColorPlanesReq *)rp)->cmap);
+ send2(client,(short) ((xAllocColorPlanesReq *)rp)->colors);
+ send2(client,(short) ((xAllocColorPlanesReq *)rp)->red);
+ send2(client,(short) ((xAllocColorPlanesReq *)rp)->green);
+ send2(client,(short) ((xAllocColorPlanesReq *)rp)->blue);
+ break;
+ case X_FreeColors:
+ send1(client,(long) ((xFreeColorsReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xFreeColorsReq *)rp)->length);
+ send4(client,(long) ((xFreeColorsReq *)rp)->cmap);
+ send4(client,(long) ((xFreeColorsReq *)rp)->planeMask);
+ Send_Value_List(client, rp, sizeof (xFreeColorsReq), 32);
+ break;
+ case X_StoreColors:
+ send1(client,(long) ((xStoreColorsReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xStoreColorsReq *)rp)->length);
+ send4(client,(long) ((xStoreColorsReq *)rp)->cmap);
+ Send_Value_List(client, rp, sizeof (xStoreColorsReq), 32);
+ break;
+ case X_StoreNamedColor:
+ send1(client,(long) ((xStoreNamedColorReq *)rp)->reqType);
+ send1(client,(long) ((xStoreNamedColorReq *)rp)->flags);
+ send2(client,(short) ((xStoreNamedColorReq *)rp)->length);
+ send4(client,(long) ((xStoreNamedColorReq *)rp)->cmap);
+ send4(client,(long) ((xStoreNamedColorReq *)rp)->pixel);
+ send2(client,(short) ((xStoreNamedColorReq *)rp)->nbytes);
+ sendpad(client,2);
+ Send_Value_List(client, rp, sizeof (xStoreNamedColorReq), 8);
+ break;
+ case X_QueryColors:
+ send1(client,(long) ((xQueryColorsReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xQueryColorsReq *)rp)->length);
+ send4(client,(long) ((xQueryColorsReq *)rp)->cmap);
+ Send_Value_List(client, rp, sizeof (xQueryColorsReq), 32);
+ break;
+ case X_LookupColor:
+ send1(client,(long) ((xLookupColorReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xLookupColorReq *)rp)->length);
+ send4(client,(long) ((xLookupColorReq *)rp)->cmap);
+ send2(client,(short) ((xLookupColorReq *)rp)->nbytes);
+ sendpad(client,2);
+ Send_Value_List(client, rp, sizeof (xLookupColorReq), 8);
+ break;
+ case X_CreateCursor:
+ send1(client,(long) ((xCreateCursorReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xCreateCursorReq *)rp)->length);
+ send4(client,(long) ((xCreateCursorReq *)rp)->cid);
+ send4(client,(long) ((xCreateCursorReq *)rp)->source);
+ send4(client,(long) ((xCreateCursorReq *)rp)->mask);
+ send2(client,(short) ((xCreateCursorReq *)rp)->foreRed);
+ send2(client,(short) ((xCreateCursorReq *)rp)->foreGreen);
+ send2(client,(short) ((xCreateCursorReq *)rp)->foreBlue);
+ send2(client,(short) ((xCreateCursorReq *)rp)->backRed);
+ send2(client,(short) ((xCreateCursorReq *)rp)->backGreen);
+ send2(client,(short) ((xCreateCursorReq *)rp)->backBlue);
+ send2(client,(short) ((xCreateCursorReq *)rp)->x);
+ send2(client,(short) ((xCreateCursorReq *)rp)->y);
+ break;
+ case X_CreateGlyphCursor:
+ send1(client,(long) ((xCreateGlyphCursorReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xCreateGlyphCursorReq *)rp)->length);
+ send4(client,(long) ((xCreateGlyphCursorReq *)rp)->cid);
+ send4(client,(long) ((xCreateGlyphCursorReq *)rp)->source);
+ send4(client,(long) ((xCreateGlyphCursorReq *)rp)->mask);
+ send2(client,(short) ((xCreateGlyphCursorReq *)rp)->sourceChar);
+ send2(client,(short) ((xCreateGlyphCursorReq *)rp)->maskChar);
+ send2(client,(short) ((xCreateGlyphCursorReq *)rp)->foreRed);
+ send2(client,(short) ((xCreateGlyphCursorReq *)rp)->foreGreen);
+ send2(client,(short) ((xCreateGlyphCursorReq *)rp)->foreBlue);
+ send2(client,(short) ((xCreateGlyphCursorReq *)rp)->backRed);
+ send2(client,(short) ((xCreateGlyphCursorReq *)rp)->backGreen);
+ send2(client,(short) ((xCreateGlyphCursorReq *)rp)->backBlue);
+ break;
+ case X_FreeCursor:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_RecolorCursor:
+ send1(client,(long) ((xRecolorCursorReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xRecolorCursorReq *)rp)->length);
+ send4(client,(long) ((xRecolorCursorReq *)rp)->cursor);
+ send2(client,(short) ((xRecolorCursorReq *)rp)->foreRed);
+ send2(client,(short) ((xRecolorCursorReq *)rp)->foreGreen);
+ send2(client,(short) ((xRecolorCursorReq *)rp)->foreBlue);
+ send2(client,(short) ((xRecolorCursorReq *)rp)->backRed);
+ send2(client,(short) ((xRecolorCursorReq *)rp)->backGreen);
+ send2(client,(short) ((xRecolorCursorReq *)rp)->backBlue);
+ break;
+ case X_QueryBestSize:
+ send1(client,(long) ((xQueryBestSizeReq *)rp)->reqType);
+ send1(client,(long) ((xQueryBestSizeReq *)rp)->class);
+ send2(client,(short) ((xQueryBestSizeReq *)rp)->length);
+ send4(client,(long) ((xQueryBestSizeReq *)rp)->drawable);
+ send2(client,(short) ((xQueryBestSizeReq *)rp)->width);
+ send2(client,(short) ((xQueryBestSizeReq *)rp)->height);
+ break;
+ case X_QueryExtension:
+ send1(client,(long) ((xQueryExtensionReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xQueryExtensionReq *)rp)->length);
+ send2(client,(short) ((xQueryExtensionReq *)rp)->nbytes);
+ sendpad(client,2);
+ Send_Value_List(client, rp, sizeof (xQueryExtensionReq), 8);
+ break;
+ case X_ListExtensions:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ break;
+ case X_ChangeKeyboardMapping:
+ send1(client,(long) ((xChangeKeyboardMappingReq *)rp)->reqType);
+ send1(client,(long) ((xChangeKeyboardMappingReq *)rp)->keyCodes);
+ send2(client,(short) ((xChangeKeyboardMappingReq *)rp)->length);
+ send1(client,(long) ((xChangeKeyboardMappingReq *)rp)->firstKeyCode);
+ send1(client,(long) ((xChangeKeyboardMappingReq *)rp)->keySymsPerKeyCode);
+ sendpad(client,2);
+ Send_Value_List(client, rp, sizeof (xChangeKeyboardMappingReq), 32);
+ break;
+ case X_GetKeyboardMapping:
+ send1(client,(long) ((xGetKeyboardMappingReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xGetKeyboardMappingReq *)rp)->length);
+ send1(client,(long) ((xGetKeyboardMappingReq *)rp)->firstKeyCode);
+ send1(client,(long) ((xGetKeyboardMappingReq *)rp)->count);
+ sendpad(client,2);
+ break;
+ case X_ChangeKeyboardControl:
+ send1(client,(long) ((xChangeKeyboardControlReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xChangeKeyboardControlReq *)rp)->length);
+ send4(client,(long) ((xChangeKeyboardControlReq *)rp)->mask);
+ Send_Value_List(client, rp, sizeof (xChangeKeyboardControlReq), 32);
+ break;
+ case X_GetKeyboardControl:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ break;
+ case X_Bell:
+ send1(client,(long) ((xBellReq *)rp)->reqType);
+ send1(client,(long) ((xBellReq *)rp)->percent);
+ send2(client,(short) ((xBellReq *)rp)->length);
+ break;
+ case X_ChangePointerControl:
+ send1(client,(long) ((xChangePointerControlReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xChangePointerControlReq *)rp)->length);
+ send2(client,(short) ((xChangePointerControlReq *)rp)->accelNum);
+ send2(client,(short) ((xChangePointerControlReq *)rp)->accelDenum);
+ send2(client,(short) ((xChangePointerControlReq *)rp)->threshold);
+ send1(client,(long) ((xChangePointerControlReq *)rp)->doAccel);
+ send1(client,(long) ((xChangePointerControlReq *)rp)->doThresh);
+ break;
+ case X_GetPointerControl:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ break;
+ case X_SetScreenSaver:
+ send1(client,(long) ((xSetScreenSaverReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xSetScreenSaverReq *)rp)->length);
+ send2(client,(short) ((xSetScreenSaverReq *)rp)->timeout);
+ send2(client,(short) ((xSetScreenSaverReq *)rp)->interval);
+ send1(client,(long) ((xSetScreenSaverReq *)rp)->preferBlank);
+ send1(client,(long) ((xSetScreenSaverReq *)rp)->allowExpose);
+ sendpad(client,2);
+ break;
+ case X_GetScreenSaver:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ break;
+ case X_ChangeHosts:
+ send1(client,(long) ((xChangeHostsReq *)rp)->reqType);
+ send1(client,(long) ((xChangeHostsReq *)rp)->mode);
+ send2(client,(short) ((xChangeHostsReq *)rp)->length);
+ send1(client,(long) ((xChangeHostsReq *)rp)->hostFamily);
+ sendpad(client,1);
+ send2(client,(short) ((xChangeHostsReq *)rp)->hostLength);
+debug(3,"before Send_Value_List length is %d, req at 0x%lx\n",rp->length,(unsigned long)rp);
+ Send_Value_List(client, rp, sizeof (xChangeHostsReq), 8);
+debug(3,"after Send_Value_List length is %d, req at 0x%lx\n",rp->length,(unsigned long)rp);
+ break;
+ case X_ListHosts:
+ send1(client,(long) ((xListHostsReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xListHostsReq *)rp)->length);
+ break;
+ case X_SetAccessControl:
+ send1(client,(long) ((xSetAccessControlReq *)rp)->reqType);
+ send1(client,(long) ((xSetAccessControlReq *)rp)->mode);
+ send2(client,(short) ((xSetAccessControlReq *)rp)->length);
+ break;
+ case X_SetCloseDownMode:
+ send1(client,(long) ((xSetCloseDownModeReq *)rp)->reqType);
+ send1(client,(long) ((xSetCloseDownModeReq *)rp)->mode);
+ send2(client,(short) ((xSetCloseDownModeReq *)rp)->length);
+ break;
+ case X_KillClient:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ send4(client,(long) ((xResourceReq *)rp)->id);
+ break;
+ case X_RotateProperties:
+ send1(client,(long) ((xRotatePropertiesReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xRotatePropertiesReq *)rp)->length);
+ send4(client,(long) ((xRotatePropertiesReq *)rp)->window);
+ send2(client,(short) ((xRotatePropertiesReq *)rp)->nAtoms);
+ send2(client,(short) ((xRotatePropertiesReq *)rp)->nPositions);
+ Send_Value_List(client, rp, sizeof (xRotatePropertiesReq), 32);
+ break;
+ case X_ForceScreenSaver:
+ send1(client,(long) ((xForceScreenSaverReq *)rp)->reqType);
+ send1(client,(long) ((xForceScreenSaverReq *)rp)->mode);
+ send2(client,(short) ((xForceScreenSaverReq *)rp)->length);
+ break;
+ case X_SetPointerMapping:
+ send1(client,(long) ((xSetPointerMappingReq *)rp)->reqType);
+ send1(client,(long) ((xSetPointerMappingReq *)rp)->nElts);
+ send2(client,(short) ((xSetPointerMappingReq *)rp)->length);
+ Send_Value_List(client, rp, sizeof (xSetPointerMappingReq), 8);
+ break;
+ case X_GetPointerMapping:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ break;
+ case X_SetModifierMapping:
+ send1(client,(long) ((xSetModifierMappingReq *)rp)->reqType);
+ send1(client,(long) ((xSetModifierMappingReq *)rp)->numKeyPerModifier);
+ send2(client,(short) ((xSetModifierMappingReq *)rp)->length);
+ Send_Value_List(client, rp, sizeof (xSetModifierMappingReq), 8);
+ break;
+ case X_GetModifierMapping:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ break;
+ case X_NoOperation:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ break;
+ case Xst_BadType:
+ send1(client,(long) ((xResourceReq *)rp)->reqType);
+ sendpad(client,1);
+ send2(client,(short) ((xResourceReq *)rp)->length);
+ break;
+ case Xst_BadLength:
+ send1(client,(long) X_CreateWindow);
+ send1(client,(long) ((xCreateWindowReq *)rp)->depth);
+ send2(client,(short) ((xCreateWindowReq *)rp)->length);
+ send4(client,(long) ((xCreateWindowReq *)rp)->wid);
+ send4(client,(long) ((xCreateWindowReq *)rp)->parent);
+ send2(client,(short) ((xCreateWindowReq *)rp)->x);
+ send2(client,(short) ((xCreateWindowReq *)rp)->y);
+ send2(client,(short) ((xCreateWindowReq *)rp)->width);
+ send2(client,(short) ((xCreateWindowReq *)rp)->height);
+ send2(client,(short) ((xCreateWindowReq *)rp)->borderWidth);
+ send2(client,(short) ((xCreateWindowReq *)rp)->class);
+ send4(client,(long) ((xCreateWindowReq *)rp)->visual);
+ send4(client,(long) ((xCreateWindowReq *)rp)->mask);
+#ifdef notdef
+ bytes_out = /* must fake out SendIt to let us go! */
+ dpy->bufptr - dpy->buffer;
+#endif
+ break;
+ default:
+ DEFAULT_ERROR;
+ break;
+ }
+ SendIt(client,bytes_out,oldlen);
+
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/SendSup.c b/xc/test/xsuite/xtest/src/libproto/SendSup.c
new file mode 100644
index 000000000..90d4c2506
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/SendSup.c
@@ -0,0 +1,333 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: SendSup.c 1.5 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: SendSup.c 1.5 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+#include "DataMove.h"
+
+#define SEMI_IMPLEMENTED(str) \
+ {\
+ char ebuf[132];\
+ sprintf(ebuf,"\tSEMI_IMPLEMENTED (%s)\n",str);\
+ Log_Debug(ebuf);\
+ }
+
+#define CHUNK 1024 /* allocation chunk for o/p buffer, power of 2 */
+
+void
+squeeze_me_in(cl, len)
+ int cl;
+ long len;
+{
+ unsigned long remaining, used;
+ XstDisplay *dpy = Get_Display(cl);
+
+ if (dpy->bufptr < dpy->buffer) {
+ Log_Msg ("INTERNAL ERROR: Client %d has bufptr before buffer\n", cl);
+ Delete ();
+ /* NOTREACHED */
+ }
+ if (dpy->bufptr > dpy->bufmax) {
+ Log_Msg ("INTERNAL ERROR: Client %d has bufptr off end of buffer\n", cl);
+ Delete ();
+ /* NOTREACHED */
+ }
+ used = dpy->bufptr - dpy->buffer;
+ remaining = dpy->bufmax - dpy->bufptr;
+ if (len > (long)remaining) {
+ unsigned long total = ((used + len) + (CHUNK-1)) & (~(CHUNK-1));
+
+ debug(3,"buffer expansion required: used = %ld, remaining = %ld, required = %ld, total = %ld\n", used, remaining, len, total);
+ if ((dpy->buffer = (char *)Xstrealloc(dpy->buffer, total)) == NULL) {
+ Log_Msg ("Could not expand o/p buffer to %d bytes\n", total);
+ Delete ();
+ /* NOTREACHED */
+ }
+ dpy->bufptr = dpy->buffer + used;
+ dpy->bufmax = dpy->buffer + total;
+ }
+}
+
+void
+Send_Value_List(cl,rp,size,format)
+int cl;
+xReq *rp;
+int size;
+int format;
+{
+ int i;
+
+ switch (format) {
+ case 8:
+ {
+ unsigned char * valuePtr;
+ int valueLen;
+
+ valuePtr = (unsigned char *) (((unsigned char *) rp) + size);
+ valueLen = ((int)(rp->length<<2)) - size; /* bytes extra */
+ if (valueLen < 0) {
+ if (Get_Test_Type(cl) != BAD_LENGTH) {
+ Log_Msg("Send_Value_List: FATAL REQUEST LENGTH ERROR!!!\n");
+ Log_Msg("\trequest type = %d, length = %d\n",rp->reqType,rp->length);
+ Show_Req(rp);
+ Delete();
+ /*NOTREACHED*/
+ } else
+ valueLen = 0;
+ } else {
+ squeeze_me_in(cl, (long)valueLen);
+ bcopy(valuePtr,Get_Display(cl)->bufptr,valueLen);
+ }
+ Get_Display(cl)->bufptr += valueLen;
+ }
+ break;
+ case 16:
+ {
+ unsigned short * valuePtr;
+ int valueLen;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (((int)(rp->length<<2)) - size)/2; /* shorts extra */
+
+ squeeze_me_in(cl, ((long)valueLen) * 2L);
+ for(i=0;i<valueLen;i++) {
+ send2(cl,*valuePtr);
+ valuePtr++;
+ }
+ }
+ break;
+ case 32:
+ {
+ unsigned long * valuePtr;
+ int valueLen;
+
+ valuePtr = (unsigned long *) ((unsigned char *) rp + size);
+ valueLen = (((int)(rp->length<<2)) - size)/4; /* longs extra */
+ squeeze_me_in(cl, ((long)valueLen) * 4L);
+ for(i=0;i<valueLen;i++) {
+ send4(cl,*valuePtr);
+ valuePtr++;
+ }
+ }
+ break;
+ default:
+ DEFAULT_ERROR;
+ break;
+ }
+}
+
+void
+Send_String16(cl,rp,size)
+int cl;
+xReq *rp;
+int size;
+{
+ unsigned char *valuePtr;
+ int valueLen;
+
+ valuePtr = (unsigned char *) ((unsigned char *) rp + size);
+ valueLen = ((int)(rp->length<<2)) - size; /* bytes extra */
+ if(valueLen < 1)
+ return;
+ squeeze_me_in(cl, (long)valueLen);
+ bcopy((char *)valuePtr,Get_Display(cl)->bufptr,valueLen);
+ Get_Display(cl)->bufptr += valueLen;
+}
+
+/*
+ * Routine: Send_CHAR2B - stuffs CHAR2B's in lsb format into a buffer
+ * holding the bits for a request. This is needed for 16
+ * bit font operations.
+ *
+ * Input: cl - client
+ * rp - pointer to the request
+ * size - basic size of request
+ *
+ * Output: output buffer has CHAR2B's in lsb format
+ *
+ * Returns: nothing
+ *
+ * Globals used:
+ *
+ * Side Effects:
+ *
+ * Methods:
+ *
+ */
+
+void
+Send_CHAR2B (cl, rp, size)
+ int cl;
+ xReq *rp;
+ int size;
+{
+ unsigned short * valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (((int)(rp->length<<2)) - size)/2; /* shorts extra */
+
+ squeeze_me_in(cl, ((long)valueLen) * 2L);
+ for (i = 0; i < valueLen; i++) {
+ send2_lsb(cl,*valuePtr);
+ valuePtr++;
+ }
+}
+
+void
+Send_TextItem8(cl,rp,size)
+int cl;
+xReq *rp;
+int size;
+{
+ unsigned char *valuePtr;
+ int valueLen;
+
+ valuePtr = (unsigned char *) ((unsigned char *) rp + size);
+ valueLen = ((int)(rp->length<<2)) - size; /* bytes extra */
+ if(valueLen < 1)
+ return;
+ squeeze_me_in(cl, (long)valueLen);
+ bcopy((char *)valuePtr,Get_Display(cl)->bufptr,valueLen);
+ Get_Display(cl)->bufptr += valueLen;
+}
+
+void
+Send_TextItem16(cl,rp,size)
+int cl;
+xReq *rp;
+int size;
+ {
+ unsigned char *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned char *) ((unsigned char *) rp + size);
+ valueLen = ((int)(rp->length<<2)) - size; /* bytes extra */
+ if(valueLen < 4)
+ return;
+ squeeze_me_in(cl, (long)valueLen); /* Still needed? XXX ..sr */
+ send1(cl,*valuePtr); /* n */
+ valuePtr++;
+ send1(cl,*valuePtr); /* delta */
+ valuePtr++;
+ for (i = 0; i < (valueLen-2)/2; i ++) {
+ send2_lsb(cl, *((short *) valuePtr)); /* force it to send lsb order */
+ valuePtr += 2;
+ }
+ }
+
+void
+SendIt(cl,expected_bytes,length)
+int cl;
+int expected_bytes;
+int length;
+{
+ int writelen;
+ int actual_bytes;
+ XstDisplay *dpy = Get_Display(cl);
+
+ writelen = dpy->bufptr - dpy->buffer; /* number of bytes to write */
+ actual_bytes = max(expected_bytes, sizeof(xReq)); /* ensure something sent */
+ if (Get_Test_Type(cl) == JUST_TOO_LONG) {
+ /* try not to confuse servers too much on badly framed things */
+ actual_bytes = max(writelen, actual_bytes);
+ }
+ Log_Debug2("SendIt: writelen is %d; actual bytes is %d; expected_bytes is %d.\n",
+ writelen, actual_bytes, expected_bytes);
+ /*
+ * Next few lines altered as part of an effort to allow comprehensive
+ * testing of BadLength errors.
+ * We now write what's expected - this may be what was requested in the length
+ * field on the call to Send_Req - but make sure it's at least something.
+ */
+ /*
+ * Sanity check
+ */
+ switch (Get_Test_Type(cl)) {
+ case OPEN_DISPLAY:
+ case SETUP:
+ case GOOD:
+ if (writelen != expected_bytes)
+ Log_Trace("SendIt: size of buffer (%d) doesn't agree with request length(%d)!\n",
+ writelen, actual_bytes);
+ break;
+ case TOO_LONG:
+ {
+ Log_Debug3 ("TOO_LONG test, length field was %ld, %ld in buffer, but really send %d bytes\n",
+ length, writelen, actual_bytes);
+ }
+ break;
+ }
+
+ if (dpy->fd < 0) Log_Trace("SendIt: fd closed");
+
+ /* ensure that we've got the required number of bytes in the buffer.
+ * Only likely to be required on TOO_LONG tests but useful check anyway.
+ */
+ squeeze_me_in(cl, actual_bytes);
+
+ {
+ long wrote;
+ long leftbytes=actual_bytes;
+ char *buf=dpy->buffer;
+ while (leftbytes>0) {
+ wrote=write(ConnectionNumber(dpy),buf,leftbytes);
+ if (wrote == -1) {
+ if (errno==EINTR || errno==EWOULDBLOCK || errno==EAGAIN)
+ continue;
+ else
+ break;
+ }
+ leftbytes -= wrote;
+ buf += wrote;
+ }
+ }
+ dpy->bufptr = dpy->buffer;
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/ShowErr.c b/xc/test/xsuite/xtest/src/libproto/ShowErr.c
new file mode 100644
index 000000000..b50d37057
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/ShowErr.c
@@ -0,0 +1,177 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: ShowErr.c 1.7 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: ShowErr.c 1.7 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+
+void
+Show_Err(mp)
+xError *mp;
+{
+ switch (mp->errorCode) {
+ case BadRequest:
+ BPRINTF1("Request:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadValue:
+ BPRINTF1("Value:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tresourceID = 0x%08x\n",(long) mp->resourceID);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadWindow:
+ BPRINTF1("Window:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tresourceID = 0x%08x\n",mp->resourceID);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadPixmap:
+ BPRINTF1("Pixmap:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tresourceID = 0x%08x\n",mp->resourceID);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadAtom:
+ BPRINTF1("Atom:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tresourceID = 0x%08x\n",mp->resourceID);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadCursor:
+ BPRINTF1("Cursor:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tresourceID = 0x%08x\n",mp->resourceID);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadFont:
+ BPRINTF1("Font:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tresourceID = 0x%08x\n",mp->resourceID);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadMatch:
+ BPRINTF1("Match:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadDrawable:
+ BPRINTF1("Drawable:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tresourceID = 0x%08x\n",mp->resourceID);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadAccess:
+ BPRINTF1("Access:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadAlloc:
+ BPRINTF1("Alloc:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadColor:
+ BPRINTF1("Color:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tresourceID = 0x%08x\n",mp->resourceID);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadGC:
+ BPRINTF1("GC:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tresourceID = 0x%08x\n",mp->resourceID);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadIDChoice:
+ BPRINTF1("IDChoice:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tresourceID = 0x%08x\n",mp->resourceID);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadName:
+ BPRINTF1("Name:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadLength:
+ BPRINTF1("Length:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ case BadImplementation:
+ BPRINTF1("Implementation:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ default:
+ BPRINTF1("UNKNOWN ERROR TYPE:\n");
+ BPRINTF2("\terrorCode = %ld\n",(long) mp->errorCode);
+ BPRINTF2("\tsequenceNumber = %d\n",mp->sequenceNumber);
+ BPRINTF2("\tminorCode = %d\n",mp->minorCode);
+ BPRINTF2("\tmajorCode = %d\n",mp->majorCode);
+ break;
+ }
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/ShowEvt.c b/xc/test/xsuite/xtest/src/libproto/ShowEvt.c
new file mode 100644
index 000000000..e028dec6d
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/ShowEvt.c
@@ -0,0 +1,438 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: ShowEvt.c 1.6 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: ShowEvt.c 1.6 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+
+void
+Show_Evt(mmp)
+xEvent *mmp;
+{
+ xEvent *mp = (xEvent *)Xstmalloc((unsigned)sizeof(xEvent));
+
+ bcopy((char *)mmp, (char *)mp, (unsigned)sizeof(xEvent));
+ /* always ensure we've got enough room */
+
+ switch (real_type(mp->u.u.type)) {
+ case KeyPress:
+ BPRINTF1("KeyPress:\n");
+ BPRINTF2("\tdetail = %ld\n", (long) mp -> u.u.detail);
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\ttime = %ld\n",(long) mp->u.keyButtonPointer.time);
+ BPRINTF2("\troot = %ld\n",(long) mp->u.keyButtonPointer.root);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.keyButtonPointer.event);
+ BPRINTF2("\tchild = %ld\n",(long) mp->u.keyButtonPointer.child);
+ BPRINTF2("\trootX = %ld\n",(long) mp->u.keyButtonPointer.rootX);
+ BPRINTF2("\trootY = %ld\n",(long) mp->u.keyButtonPointer.rootY);
+ BPRINTF2("\teventX = %ld\n",(long) mp->u.keyButtonPointer.eventX);
+ BPRINTF2("\teventY = %ld\n",(long) mp->u.keyButtonPointer.eventY);
+ BPRINTF2("\tstate = %ld\n",(long) mp->u.keyButtonPointer.state);
+ BPRINTF2("\tsameScreen = %ld\n",(long) mp->u.keyButtonPointer.sameScreen);
+ break;
+ case KeyRelease:
+ BPRINTF1("KeyRelease:\n");
+ BPRINTF2("\tdetail = %ld\n", (long) mp -> u.u.detail);
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\ttime = %ld\n",(long) mp->u.keyButtonPointer.time);
+ BPRINTF2("\troot = %ld\n",(long) mp->u.keyButtonPointer.root);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.keyButtonPointer.event);
+ BPRINTF2("\tchild = %ld\n",(long) mp->u.keyButtonPointer.child);
+ BPRINTF2("\trootX = %ld\n",(long) mp->u.keyButtonPointer.rootX);
+ BPRINTF2("\trootY = %ld\n",(long) mp->u.keyButtonPointer.rootY);
+ BPRINTF2("\teventX = %ld\n",(long) mp->u.keyButtonPointer.eventX);
+ BPRINTF2("\teventY = %ld\n",(long) mp->u.keyButtonPointer.eventY);
+ BPRINTF2("\tstate = %ld\n",(long) mp->u.keyButtonPointer.state);
+ BPRINTF2("\tsameScreen = %ld\n",(long) mp->u.keyButtonPointer.sameScreen);
+ break;
+ case ButtonPress:
+ BPRINTF1("ButtonPress:\n");
+ BPRINTF2("\tdetail = %ld\n", (long) mp -> u.u.detail);
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\ttime = %ld\n",(long) mp->u.keyButtonPointer.time);
+ BPRINTF2("\troot = %ld\n",(long) mp->u.keyButtonPointer.root);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.keyButtonPointer.event);
+ BPRINTF2("\tchild = %ld\n",(long) mp->u.keyButtonPointer.child);
+ BPRINTF2("\trootX = %ld\n",(long) mp->u.keyButtonPointer.rootX);
+ BPRINTF2("\trootY = %ld\n",(long) mp->u.keyButtonPointer.rootY);
+ BPRINTF2("\teventX = %ld\n",(long) mp->u.keyButtonPointer.eventX);
+ BPRINTF2("\teventY = %ld\n",(long) mp->u.keyButtonPointer.eventY);
+ BPRINTF2("\tstate = %ld\n",(long) mp->u.keyButtonPointer.state);
+ BPRINTF2("\tsameScreen = %ld\n",(long) mp->u.keyButtonPointer.sameScreen);
+ break;
+ case ButtonRelease:
+ BPRINTF1("ButtonRelease:\n");
+ BPRINTF2("\tdetail = %ld\n", (long) mp -> u.u.detail);
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\ttime = %ld\n",(long) mp->u.keyButtonPointer.time);
+ BPRINTF2("\troot = %ld\n",(long) mp->u.keyButtonPointer.root);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.keyButtonPointer.event);
+ BPRINTF2("\tchild = %ld\n",(long) mp->u.keyButtonPointer.child);
+ BPRINTF2("\trootX = %ld\n",(long) mp->u.keyButtonPointer.rootX);
+ BPRINTF2("\trootY = %ld\n",(long) mp->u.keyButtonPointer.rootY);
+ BPRINTF2("\teventX = %ld\n",(long) mp->u.keyButtonPointer.eventX);
+ BPRINTF2("\teventY = %ld\n",(long) mp->u.keyButtonPointer.eventY);
+ BPRINTF2("\tstate = %ld\n",(long) mp->u.keyButtonPointer.state);
+ BPRINTF2("\tsameScreen = %ld\n",(long) mp->u.keyButtonPointer.sameScreen);
+ break;
+ case MotionNotify:
+ BPRINTF1("MotionNotify:\n");
+ BPRINTF2("\tdetail = %ld\n", (long) mp -> u.u.detail);
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\ttime = %ld\n",(long) mp->u.keyButtonPointer.time);
+ BPRINTF2("\troot = %ld\n",(long) mp->u.keyButtonPointer.root);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.keyButtonPointer.event);
+ BPRINTF2("\tchild = %ld\n",(long) mp->u.keyButtonPointer.child);
+ BPRINTF2("\trootX = %ld\n",(long) mp->u.keyButtonPointer.rootX);
+ BPRINTF2("\trootY = %ld\n",(long) mp->u.keyButtonPointer.rootY);
+ BPRINTF2("\teventX = %ld\n",(long) mp->u.keyButtonPointer.eventX);
+ BPRINTF2("\teventY = %ld\n",(long) mp->u.keyButtonPointer.eventY);
+ BPRINTF2("\tstate = %ld\n",(long) mp->u.keyButtonPointer.state);
+ BPRINTF2("\tsameScreen = %ld\n",(long) mp->u.keyButtonPointer.sameScreen);
+ break;
+ case EnterNotify:
+ BPRINTF1("EnterNotify:\n");
+ BPRINTF2("\tdetail = %ld\n", (long) mp -> u.u.detail);
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\ttime = %ld\n",(long) mp->u.enterLeave.time);
+ BPRINTF2("\troot = %ld\n",(long) mp->u.enterLeave.root);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.enterLeave.event);
+ BPRINTF2("\tchild = %ld\n",(long) mp->u.enterLeave.child);
+ BPRINTF2("\trootX = %ld\n",(long) mp->u.enterLeave.rootX);
+ BPRINTF2("\trootY = %ld\n",(long) mp->u.enterLeave.rootY);
+ BPRINTF2("\teventX = %ld\n",(long) mp->u.enterLeave.eventX);
+ BPRINTF2("\teventY = %ld\n",(long) mp->u.enterLeave.eventY);
+ BPRINTF2("\tstate = %ld\n",(long) mp->u.enterLeave.state);
+ BPRINTF2("\tmode = %ld\n",(long) mp->u.enterLeave.mode);
+ BPRINTF2("\tsame-screen, focus = %ld\n",(long) mp->u.enterLeave.flags);
+ break;
+ case LeaveNotify:
+ BPRINTF1("LeaveNotify:\n");
+ BPRINTF2("\tdetail = %ld\n", (long) mp -> u.u.detail);
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\ttime = %ld\n",(long) mp->u.enterLeave.time);
+ BPRINTF2("\troot = %ld\n",(long) mp->u.enterLeave.root);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.enterLeave.event);
+ BPRINTF2("\tchild = %ld\n",(long) mp->u.enterLeave.child);
+ BPRINTF2("\trootX = %ld\n",(long) mp->u.enterLeave.rootX);
+ BPRINTF2("\trootY = %ld\n",(long) mp->u.enterLeave.rootY);
+ BPRINTF2("\teventX = %ld\n",(long) mp->u.enterLeave.eventX);
+ BPRINTF2("\teventY = %ld\n",(long) mp->u.enterLeave.eventY);
+ BPRINTF2("\tstate = %ld\n",(long) mp->u.enterLeave.state);
+ BPRINTF2("\tmode = %ld\n",(long) mp->u.enterLeave.mode);
+ BPRINTF2("\tsame-screen, focus = %ld\n",(long) mp->u.enterLeave.flags);
+ break;
+ case FocusIn:
+ BPRINTF1("FocusIn:\n");
+ BPRINTF2("\tdetail = %ld\n", (long) mp -> u.u.detail);
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.focus.window);
+ BPRINTF2("\tmode = %ld\n",(long) mp->u.focus.mode);
+ break;
+ case FocusOut:
+ BPRINTF1("FocusOut:\n");
+ BPRINTF2("\tdetail = %ld\n", (long) mp -> u.u.detail);
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.focus.window);
+ BPRINTF2("\tmode = %ld\n",(long) mp->u.focus.mode);
+ break;
+ case KeymapNotify:
+ BPRINTF1("KeymapNotify:\n");
+ CANT_SHOW("\tXXX","map");
+ break;
+ case Expose:
+ BPRINTF1("Expose:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.expose.window);
+ BPRINTF2("\tx = %ld\n",(long) mp->u.expose.x);
+ BPRINTF2("\ty = %ld\n",(long) mp->u.expose.y);
+ BPRINTF2("\twidth = %ld\n",(long) mp->u.expose.width);
+ BPRINTF2("\theight = %ld\n",(long) mp->u.expose.height);
+ BPRINTF2("\tcount = %ld\n",(long) mp->u.expose.count);
+ break;
+ case GraphicsExpose:
+ BPRINTF1("GraphicsExpose:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\tdrawable = %ld\n",(long) mp->u.graphicsExposure.drawable);
+ BPRINTF2("\tx = %ld\n",(long) mp->u.graphicsExposure.x);
+ BPRINTF2("\ty = %ld\n",(long) mp->u.graphicsExposure.y);
+ BPRINTF2("\twidth = %ld\n",(long) mp->u.graphicsExposure.width);
+ BPRINTF2("\theight = %ld\n",(long) mp->u.graphicsExposure.height);
+ BPRINTF2("\tminorEvent = %ld\n",(long) mp->u.graphicsExposure.minorEvent);
+ BPRINTF2("\tcount = %ld\n",(long) mp->u.graphicsExposure.count);
+ BPRINTF2("\tmajorEvent = %ld\n",(long) mp->u.graphicsExposure.majorEvent);
+ break;
+ case NoExpose:
+ BPRINTF1("NoExpose:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\tdrawable = %ld\n",(long) mp->u.noExposure.drawable);
+ BPRINTF2("\tminorEvent = %ld\n",(long) mp->u.noExposure.minorEvent);
+ BPRINTF2("\tmajorEvent = %ld\n",(long) mp->u.noExposure.majorEvent);
+ break;
+ case VisibilityNotify:
+ BPRINTF1("VisibilityNotify:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.visibility.window);
+ BPRINTF2("\tstate = %ld\n",(long) mp->u.visibility.state);
+ break;
+ case CreateNotify:
+ BPRINTF1("CreateNotify:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\tparent = %ld\n",(long) mp->u.createNotify.parent);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.createNotify.window);
+ BPRINTF2("\tx = %ld\n",(long) mp->u.createNotify.x);
+ BPRINTF2("\ty = %ld\n",(long) mp->u.createNotify.y);
+ BPRINTF2("\twidth = %ld\n",(long) mp->u.createNotify.width);
+ BPRINTF2("\theight = %ld\n",(long) mp->u.createNotify.height);
+ BPRINTF2("\tborderWidth = %ld\n",(long) mp->u.createNotify.borderWidth);
+ BPRINTF2("\toverride = %ld\n",(long) mp->u.createNotify.override);
+ break;
+ case DestroyNotify:
+ BPRINTF1("DestroyNotify:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.destroyNotify.event);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.destroyNotify.window);
+ break;
+ case UnmapNotify:
+ BPRINTF1("UnmapNotify:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.unmapNotify.event);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.unmapNotify.window);
+ BPRINTF2("\tfromConfigure = %ld\n",(long) mp->u.unmapNotify.fromConfigure);
+ break;
+ case MapNotify:
+ BPRINTF1("MapNotify:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.mapNotify.event);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.mapNotify.window);
+ BPRINTF2("\toverride = %ld\n",(long) mp->u.mapNotify.override);
+ break;
+ case MapRequest:
+ BPRINTF1("MapRequest:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\tparent = %ld\n",(long) mp->u.mapRequest.parent);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.mapRequest.window);
+ break;
+ case ReparentNotify:
+ BPRINTF1("ReparentNotify:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.reparent.event);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.reparent.window);
+ BPRINTF2("\tparent = %ld\n",(long) mp->u.reparent.parent);
+ BPRINTF2("\tx = %ld\n",(long) mp->u.reparent.x);
+ BPRINTF2("\ty = %ld\n",(long) mp->u.reparent.y);
+ BPRINTF2("\toverride = %ld\n",(long) mp->u.reparent.override);
+ break;
+ case ConfigureNotify:
+ BPRINTF1("ConfigureNotify:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.configureNotify.event);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.configureNotify.window);
+ BPRINTF2("\taboveSibling = %ld\n",(long) mp->u.configureNotify.aboveSibling);
+ BPRINTF2("\tx = %ld\n",(long) mp->u.configureNotify.x);
+ BPRINTF2("\ty = %ld\n",(long) mp->u.configureNotify.y);
+ BPRINTF2("\twidth = %ld\n",(long) mp->u.configureNotify.width);
+ BPRINTF2("\theight = %ld\n",(long) mp->u.configureNotify.height);
+ BPRINTF2("\tborderWidth = %ld\n",(long) mp->u.configureNotify.borderWidth);
+ BPRINTF2("\toverride = %ld\n",(long) mp->u.configureNotify.override);
+ break;
+ case ConfigureRequest:
+ BPRINTF1("ConfigureRequest:\n");
+ BPRINTF2("\tstack-mode = %ld\n", (long) mp -> u.u.detail);
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\tparent = %ld\n",(long) mp->u.configureRequest.parent);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.configureRequest.window);
+ BPRINTF2("\tsibling = %ld\n",(long) mp->u.configureRequest.sibling);
+ BPRINTF2("\tx = %ld\n",(long) mp->u.configureRequest.x);
+ BPRINTF2("\ty = %ld\n",(long) mp->u.configureRequest.y);
+ BPRINTF2("\twidth = %ld\n",(long) mp->u.configureRequest.width);
+ BPRINTF2("\theight = %ld\n",(long) mp->u.configureRequest.height);
+ BPRINTF2("\tborderWidth = %ld\n",(long) mp->u.configureRequest.borderWidth);
+ BPRINTF2("\tvalueMask = %ld\n",(long) mp->u.configureRequest.valueMask);
+ break;
+ case GravityNotify:
+ BPRINTF1("GravityNotify:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.gravity.event);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.gravity.window);
+ BPRINTF2("\tx = %ld\n",(long) mp->u.gravity.x);
+ BPRINTF2("\ty = %ld\n",(long) mp->u.gravity.y);
+ break;
+ case ResizeRequest:
+ BPRINTF1("ResizeRequest:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.resizeRequest.window);
+ BPRINTF2("\twidth = %ld\n",(long) mp->u.resizeRequest.width);
+ BPRINTF2("\theight = %ld\n",(long) mp->u.resizeRequest.height);
+ break;
+ case CirculateNotify:
+ BPRINTF1("CirculateNotify:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\tevent = %ld\n",(long) mp->u.circulate.event);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.circulate.window);
+ BPRINTF2("\tparent = %ld\n",(long) mp->u.circulate.parent);
+ BPRINTF2("\tplace = %ld\n",(long) mp->u.circulate.place);
+ break;
+ case CirculateRequest:
+ BPRINTF1("CirculateRequest:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\tparent = %ld\n",(long) mp->u.circulate.parent);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.circulate.window);
+ BPRINTF2("\tplace = %ld\n",(long) mp->u.circulate.place);
+ break;
+ case PropertyNotify:
+ BPRINTF1("PropertyNotify:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.property.window);
+ BPRINTF2("\tatom = %ld\n",(long) mp->u.property.atom);
+ BPRINTF2("\ttime = %ld\n",(long) mp->u.property.time);
+ BPRINTF2("\tstate = %ld\n",(long) mp->u.property.state);
+ break;
+ case SelectionClear:
+ BPRINTF1("SelectionClear:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\ttime = %ld\n",(long) mp->u.selectionClear.time);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.selectionClear.window);
+ BPRINTF2("\tatom = %ld\n",(long) mp->u.selectionClear.atom);
+ break;
+ case SelectionRequest:
+ BPRINTF1("SelectionRequest:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\ttime = %ld\n",(long) mp->u.selectionRequest.time);
+ BPRINTF2("\towner = %ld\n",(long) mp->u.selectionRequest.owner);
+ BPRINTF2("\trequestor = %ld\n",(long) mp->u.selectionRequest.requestor);
+ BPRINTF2("\tselection = %ld\n",(long) mp->u.selectionRequest.selection);
+ BPRINTF2("\ttarget = %ld\n",(long) mp->u.selectionRequest.target);
+ BPRINTF2("\tproperty = %ld\n",(long) mp->u.selectionRequest.property);
+ break;
+ case SelectionNotify:
+ BPRINTF1("SelectionNotify:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\ttime = %ld\n",(long) mp->u.selectionNotify.time);
+ BPRINTF2("\trequestor = %ld\n",(long) mp->u.selectionNotify.requestor);
+ BPRINTF2("\tselection = %ld\n",(long) mp->u.selectionNotify.selection);
+ BPRINTF2("\ttarget = %ld\n",(long) mp->u.selectionNotify.target);
+ BPRINTF2("\tproperty = %ld\n",(long) mp->u.selectionNotify.property);
+ break;
+ case ColormapNotify:
+ BPRINTF1("ColormapNotify:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.colormap.window);
+ BPRINTF2("\tcolormap = %ld\n",(long) mp->u.colormap.colormap);
+ BPRINTF2("\tnew = %ld\n",(long) mp->u.colormap.new);
+ BPRINTF2("\tstate = %ld\n",(long) mp->u.colormap.state);
+ break;
+ case ClientMessage: {
+ int i;
+
+ BPRINTF1("ClientMessage:\n");
+ BPRINTF2("\tformat = %ld\n", (long) mp -> u.u.detail);
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\twindow = %ld\n",(long) mp->u.clientMessage.window);
+ BPRINTF2("\ttype = %ld\n",(long) mp->u.clientMessage.u.b.type);
+ if (mp->u.u.detail == 8)
+ for (i = 0; i < 20; i++) {
+ BPRINTF2("\tdata[%d] = ", i);
+ BPRINTF2("%x\n",mp->u.clientMessage.u.b.bytes[i]);
+ }
+ else if (mp->u.u.detail == 16) {
+ BPRINTF1("\tdata[0] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.s.shorts0);
+ BPRINTF1("\tdata[1] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.s.shorts1);
+ BPRINTF1("\tdata[2] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.s.shorts2);
+ BPRINTF1("\tdata[3] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.s.shorts3);
+ BPRINTF1("\tdata[4] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.s.shorts4);
+ BPRINTF1("\tdata[5] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.s.shorts5);
+ BPRINTF1("\tdata[6] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.s.shorts6);
+ BPRINTF1("\tdata[7] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.s.shorts7);
+ BPRINTF1("\tdata[8] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.s.shorts8);
+ BPRINTF1("\tdata[9] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.s.shorts9);
+ }
+ else if (mp->u.u.detail == 32) {
+ BPRINTF1("\tdata[0] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.l.longs0);
+ BPRINTF1("\tdata[1] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.l.longs1);
+ BPRINTF1("\tdata[2] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.l.longs2);
+ BPRINTF1("\tdata[3] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.l.longs3);
+ BPRINTF1("\tdata[4] = ");
+ BPRINTF2("%x\n",mp->u.clientMessage.u.l.longs4);
+ }
+ else {
+ BPRINTF2("\tData is unknown format %d; cannot show",mp->u.u.detail);
+ DEFAULT_ERROR;
+ }
+ BPRINTF1("\n");
+ break;
+ }
+ case MappingNotify:
+ BPRINTF1("MappingNotify:\n");
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\trequest = %ld\n",(long) mp->u.mappingNotify.request);
+ BPRINTF2("\tfirstKeyCode = %ld\n",(long) mp->u.mappingNotify.firstKeyCode);
+ BPRINTF2("\tcount = %ld\n",(long) mp->u.mappingNotify.count);
+ break;
+ default:
+ BPRINTF1("UNKNOWN EVENT TYPE:\n");
+ BPRINTF2("\ttype = %ld\n", (long) mp -> u.u.type);
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) mp -> u.u.sequenceNumber);
+ BPRINTF2("\trequest = %ld\n",(long) mp->u.mappingNotify.request);
+ break;
+ }
+ Free_Event(mp);
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/ShowRep.c b/xc/test/xsuite/xtest/src/libproto/ShowRep.c
new file mode 100644
index 000000000..5079c4393
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/ShowRep.c
@@ -0,0 +1,545 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: ShowRep.c 1.13 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: ShowRep.c 1.13 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+#include "DataMove.h"
+
+void
+Show_Rep(mmp,type,bytes_given)
+xReply *mmp;
+int type;
+long bytes_given;
+{
+ unsigned long rep_says = (long)(mmp->generic.length<<2) + sizeof(xReply);
+ unsigned long bytes_needed = (unsigned long)bytes_given;
+ xReply *mp;
+ char *valuePtr, *endPtr;
+ int free_it = False;
+
+ if (rep_says != bytes_needed) { /* ensure we've got enough room */
+ unsigned int reqd = max(rep_says, bytes_needed);
+ unsigned int cpyd = min(rep_says, bytes_needed);
+
+ mp = (xReply *)Xstmalloc(reqd);
+ bcopy((char *)mmp, (char *)mp, cpyd);
+ bytes_needed = cpyd;
+ free_it = True;
+ } else
+ mp = mmp;
+
+ valuePtr = (char *) ((char *) mp + sizeof(xReply));
+ endPtr = ((char *) mp) + bytes_needed;
+
+ switch (type) {
+ case X_GetWindowAttributes:
+ BPRINTF1("GetWindowAttributes:\n");
+ BPRINTF2("\tbackingStore = %ld\n",(long) ((xGetWindowAttributesReply *)mp)->backingStore);
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetWindowAttributesReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetWindowAttributesReply *)mp)->length);
+ BPRINTF2("\tvisualID = %ld\n",((xGetWindowAttributesReply *)mp)->visualID);
+ BPRINTF2("\tclass = %ld\n",(long) ((xGetWindowAttributesReply *)mp)->class);
+ BPRINTF2("\tbitGravity = %d\n",((xGetWindowAttributesReply *)mp)->bitGravity);
+ BPRINTF2("\twinGravity = %d\n",((xGetWindowAttributesReply *)mp)->winGravity);
+ BPRINTF2("\tbackingBitPlanes = %ld\n",((xGetWindowAttributesReply *)mp)->backingBitPlanes);
+ BPRINTF2("\tbackingPixel = %ld\n",((xGetWindowAttributesReply *)mp)->backingPixel);
+ BPRINTF2("\tsaveUnder = %d\n",((xGetWindowAttributesReply *)mp)->saveUnder);
+ BPRINTF2("\tmapInstalled = %d\n",((xGetWindowAttributesReply *)mp)->mapInstalled);
+ BPRINTF2("\tmapState = %ld\n",(long) ((xGetWindowAttributesReply *)mp)->mapState);
+ BPRINTF2("\toverride = %d\n",((xGetWindowAttributesReply *)mp)->override);
+ BPRINTF2("\tcolormap = %ld\n",((xGetWindowAttributesReply *)mp)->colormap);
+ BPRINTF2("\tallEventMasks = 0x%08x\n",((xGetWindowAttributesReply *)mp)->allEventMasks);
+ BPRINTF2("\tyourEventMask = 0x%08x\n",((xGetWindowAttributesReply *)mp)->yourEventMask);
+ BPRINTF2("\tdoNotPropagateMask = 0x08x\n",((xGetWindowAttributesReply *)mp)->doNotPropagateMask);
+ break;
+ case X_GetGeometry:
+ BPRINTF1("GetGeometry:\n");
+ BPRINTF2("\tdepth = %d\n",((xGetGeometryReply *)mp)->depth);
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetGeometryReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetGeometryReply *)mp)->length);
+ BPRINTF2("\troot = %ld\n",((xGetGeometryReply *)mp)->root);
+ BPRINTF2("\tx = %d\n",((xGetGeometryReply *)mp)->x);
+ BPRINTF2("\ty = %d\n",((xGetGeometryReply *)mp)->y);
+ BPRINTF2("\twidth = %d\n",((xGetGeometryReply *)mp)->width);
+ BPRINTF2("\theight = %d\n",((xGetGeometryReply *)mp)->height);
+ BPRINTF2("\tborderWidth = %d\n",((xGetGeometryReply *)mp)->borderWidth);
+ break;
+ case X_QueryTree:
+ BPRINTF1("QueryTree:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xQueryTreeReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xQueryTreeReply *)mp)->length);
+ BPRINTF2("\troot = %ld\n",((xQueryTreeReply *)mp)->root);
+ BPRINTF2("\tparent = %ld\n",((xQueryTreeReply *)mp)->parent);
+ BPRINTF2("\tnChildren = %ld\n",(long) ((xQueryTreeReply *)mp)->nChildren);
+ Show_Value_List_Rep(mp,sizeof(xQueryTreeReply),FORMAT32);
+ break;
+ case X_InternAtom:
+ BPRINTF1("InternAtom:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xInternAtomReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xInternAtomReply *)mp)->length);
+ BPRINTF2("\tatom = %ld\n",((xInternAtomReply *)mp)->atom);
+ break;
+ case X_GetAtomName:
+ BPRINTF1("GetAtomName:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetAtomNameReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetAtomNameReply *)mp)->length);
+ BPRINTF2("\tnameLength = %ld\n",(long) ((xGetAtomNameReply *)mp)->nameLength);
+ Show_String8(mp,sizeof(xGetAtomNameReply),((xGetAtomNameReply *)mp)->nameLength);
+ break;
+ case X_GetProperty:
+ BPRINTF1("GetProperty:\n");
+ BPRINTF2("\tformat = %d\n",((xGetPropertyReply *)mp)->format);
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetPropertyReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetPropertyReply *)mp)->length);
+ BPRINTF2("\tbytesAfter = %ld\n",((xGetPropertyReply *)mp)->bytesAfter);
+ BPRINTF2("\tnItems = %ld\n",((xGetPropertyReply *)mp)->nItems);
+ Show_Value_List_Rep(mp,sizeof(xGetPropertyReply),((xGetPropertyReply *)mp)->format);
+ break;
+ case X_ListProperties:
+ BPRINTF1("ListProperties:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xListPropertiesReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xListPropertiesReply *)mp)->length);
+ BPRINTF2("\tnProperties = %ld\n",(long) ((xListPropertiesReply *)mp)->nProperties);
+ Show_Value_List_Rep(mp,sizeof(xListPropertiesReply),FORMAT32);
+ break;
+ case X_GetSelectionOwner:
+ BPRINTF1("GetSelectionOwner:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetSelectionOwnerReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetSelectionOwnerReply *)mp)->length);
+ BPRINTF2("\towner = %ld\n",((xGetSelectionOwnerReply *)mp)->owner);
+ break;
+ case X_GrabPointer:
+ BPRINTF1("GrabPointer:\n");
+ BPRINTF2("\tstatus = %ld\n",(long) ((xGrabPointerReply *)mp)->status);
+ BPRINTF2("\tsequenceNumber = %d\n",((xGrabPointerReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGrabPointerReply *)mp)->length);
+ break;
+ case X_GrabKeyboard:
+ BPRINTF1("GrabKeyboard:\n");
+ BPRINTF2("\tstatus = %ld\n",(long) ((xGrabKeyboardReply *)mp)->status);
+ BPRINTF2("\tsequenceNumber = %d\n",((xGrabKeyboardReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGrabKeyboardReply *)mp)->length);
+ break;
+ case X_QueryPointer:
+ BPRINTF1("QueryPointer:\n");
+ BPRINTF2("\tsameScreen = %d\n",((xQueryPointerReply *)mp)->sameScreen);
+ BPRINTF2("\tsequenceNumber = %d\n",((xQueryPointerReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xQueryPointerReply *)mp)->length);
+ BPRINTF2("\troot = %ld\n",((xQueryPointerReply *)mp)->root);
+ BPRINTF2("\tchild = %ld\n",((xQueryPointerReply *)mp)->child);
+ BPRINTF2("\trootX = %d\n",((xQueryPointerReply *)mp)->rootX);
+ BPRINTF2("\trootY = %d\n",((xQueryPointerReply *)mp)->rootY);
+ BPRINTF2("\twinX = %d\n",((xQueryPointerReply *)mp)->winX);
+ BPRINTF2("\twinY = %d\n",((xQueryPointerReply *)mp)->winY);
+ BPRINTF2("\tmask = 0x%04x\n",((xQueryPointerReply *)mp)->mask);
+ break;
+ case X_GetMotionEvents:
+ BPRINTF1("GetMotionEvents:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetMotionEventsReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetMotionEventsReply *)mp)->length);
+ BPRINTF2("\tnEvents = %ld\n",(long) ((xGetMotionEventsReply *)mp)->nEvents);
+ Show_Value_List_Rep((xReq *)mp,sizeof(xGetMotionEventsReply), FORMATtimecoord);
+ break;
+ case X_TranslateCoords:
+ BPRINTF1("TranslateCoords:\n");
+ BPRINTF2("\tsameScreen = %d\n",((xTranslateCoordsReply *)mp)->sameScreen);
+ BPRINTF2("\tsequenceNumber = %d\n",((xTranslateCoordsReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xTranslateCoordsReply *)mp)->length);
+ BPRINTF2("\tchild = %ld\n",((xTranslateCoordsReply *)mp)->child);
+ BPRINTF2("\tdstX = %d\n",((xTranslateCoordsReply *)mp)->dstX);
+ BPRINTF2("\tdstY = %d\n",((xTranslateCoordsReply *)mp)->dstY);
+ break;
+ case X_GetInputFocus:
+ BPRINTF1("GetInputFocus:\n");
+ BPRINTF2("\trevertTo = %ld\n",(long) ((xGetInputFocusReply *)mp)->revertTo);
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetInputFocusReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetInputFocusReply *)mp)->length);
+ BPRINTF2("\tfocus = %ld\n",((xGetInputFocusReply *)mp)->focus);
+ break;
+ case X_QueryKeymap:
+ BPRINTF1("QueryKeymap:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xQueryKeymapReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xQueryKeymapReply *)mp)->length);
+ Show_Value_List_Rep(mp,sizeof(xQueryKeymapReply)-sizeof(((xQueryKeymapReply *)mp)->map),FORMAT8);
+ break;
+ case X_QueryFont: {
+ long nfontprops;
+ long ncharinfos;
+
+ BPRINTF1("QueryFont:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xQueryFontReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xQueryFontReply *)mp)->length);
+ /* print the CHARINFO structure found at min-bounds */
+
+ BPRINTF1("\tmin-bounds:\n");
+ BPRINTF2("\t\tleft-side-bearing = %d\n",((xQueryFontReply *)mp)->minBounds.leftSideBearing);
+ BPRINTF2("\t\tright-side-bearing = %d\n",((xQueryFontReply *)mp)->minBounds.rightSideBearing);
+ BPRINTF2("\t\tcharacter-width = %d\n",((xQueryFontReply *)mp)->minBounds.characterWidth);
+ BPRINTF2("\t\tascent = %d\n",((xQueryFontReply *)mp)->minBounds.ascent);
+ BPRINTF2("\t\tdescent = %d\n",((xQueryFontReply *)mp)->minBounds.descent);
+ BPRINTF2("\t\tattributes = 0x%x\n",((xQueryFontReply *)mp)->minBounds.attributes);
+
+ /* end of CHARINFO structure */
+ /* print the CHARINFO structure found at max-bounds */
+
+ BPRINTF1("\tmax-bounds:\n");
+ BPRINTF2("\t\tleft-side-bearing = %d\n",((xQueryFontReply *)mp)->maxBounds.leftSideBearing);
+ BPRINTF2("\t\tright-side-bearing = %d\n",((xQueryFontReply *)mp)->maxBounds.rightSideBearing);
+ BPRINTF2("\t\tcharacter-width = %d\n",((xQueryFontReply *)mp)->maxBounds.characterWidth);
+ BPRINTF2("\t\tascent = %d\n",((xQueryFontReply *)mp)->maxBounds.ascent);
+ BPRINTF2("\t\tdescent = %d\n",((xQueryFontReply *)mp)->maxBounds.descent);
+ BPRINTF2("\t\tattributes = 0x%x\n",((xQueryFontReply *)mp)->maxBounds.attributes);
+
+ /* end of CHARINFO structure */
+ BPRINTF2("\tminCharOrByte2 = %d\n",((xQueryFontReply *)mp)->minCharOrByte2);
+ BPRINTF2("\tmaxCharOrByte2 = %d\n",((xQueryFontReply *)mp)->maxCharOrByte2);
+ BPRINTF2("\tdefaultChar = %d\n",((xQueryFontReply *)mp)->defaultChar);
+ BPRINTF2("\tnFontProps = %ld\n",(long) ((xQueryFontReply *)mp)->nFontProps);
+ BPRINTF2("\tdrawDirection = %ld\n",(long) ((xQueryFontReply *)mp)->drawDirection);
+ BPRINTF2("\tminByte1 = %d\n",((xQueryFontReply *)mp)->minByte1);
+ BPRINTF2("\tmaxByte1 = %d\n",((xQueryFontReply *)mp)->maxByte1);
+ BPRINTF2("\tallCharsExist = %d\n",((xQueryFontReply *)mp)->allCharsExist);
+ BPRINTF2("\tfontAscent = %d\n",((xQueryFontReply *)mp)->fontAscent);
+ BPRINTF2("\tfontDescent = %d\n",((xQueryFontReply *)mp)->fontDescent);
+ BPRINTF2("\tnCharInfos = %ld\n",(long) ((xQueryFontReply *)mp)->nCharInfos);
+ nfontprops = (long) ((xQueryFontReply *)mp)->nFontProps;
+ ncharinfos = (long) ((xQueryFontReply *)mp)->nCharInfos;
+ Show_Value_List_nRep ( mp, nfontprops, sizeof(xQueryFontReply), FORMATfontprop);
+ Show_Value_List_nRep ( mp, ncharinfos, sizeof(xQueryFontReply) + (nfontprops * 8), FORMATcharinfo);
+ }
+ break;
+ case X_QueryTextExtents:
+ BPRINTF1("QueryTextExtents:\n");
+ BPRINTF2("\tdrawDirection = %ld\n",(long) ((xQueryTextExtentsReply *)mp)->drawDirection);
+ BPRINTF2("\tsequenceNumber = %d\n",((xQueryTextExtentsReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xQueryTextExtentsReply *)mp)->length);
+ BPRINTF2("\tfontAscent = %d\n",((xQueryTextExtentsReply *)mp)->fontAscent);
+ BPRINTF2("\tfontDescent = %d\n",((xQueryTextExtentsReply *)mp)->fontDescent);
+ BPRINTF2("\toverallAscent = %d\n",((xQueryTextExtentsReply *)mp)->overallAscent);
+ BPRINTF2("\toverallDescent = %d\n",((xQueryTextExtentsReply *)mp)->overallDescent);
+ BPRINTF2("\toverallWidth = %ld\n",((xQueryTextExtentsReply *)mp)->overallWidth);
+ BPRINTF2("\toverallLeft = %ld\n",((xQueryTextExtentsReply *)mp)->overallLeft);
+ BPRINTF2("\toverallRight = %ld\n",((xQueryTextExtentsReply *)mp)->overallRight);
+ break;
+ case X_ListFonts:
+ BPRINTF1("ListFonts:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xListFontsReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xListFontsReply *)mp)->length);
+ BPRINTF2("\tnFonts = %d\n",((xListFontsReply *)mp)->nFonts);
+ Show_String8(mp,sizeof(xListFontsReply),((xListFontsReply *)mp)->nFonts);
+ break;
+ case X_ListFontsWithInfo: {
+ long nfontprops;
+
+ BPRINTF1("ListFontsWithInfo:\n");
+ BPRINTF2("\tnameLength = %ld\n",(long) ((xListFontsWithInfoReply *)mp)->nameLength);
+
+ BPRINTF2("\tsequenceNumber = %d\n",((xListFontsWithInfoReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xListFontsWithInfoReply *)mp)->length);
+ if (((xListFontsWithInfoReply *)mp)->nameLength == 0)
+ break; /* last reply, so rest of structure unused */
+
+ /* print the CHARINFO structure found at min-bounds */
+
+ BPRINTF1("\tmin-bounds, ");
+ BPRINTF2("left-side-bearing = %d, ",((xListFontsWithInfoReply *)mp)->minBounds.leftSideBearing);
+ BPRINTF2("right-side-bearing = %d, ",((xListFontsWithInfoReply *)mp)->minBounds.rightSideBearing);
+ BPRINTF2("character-width = %d, ",((xListFontsWithInfoReply *)mp)->minBounds.characterWidth);
+ BPRINTF2("ascent = %d, ",((xListFontsWithInfoReply *)mp)->minBounds.ascent);
+ BPRINTF2("descent = %d, ",((xListFontsWithInfoReply *)mp)->minBounds.descent);
+ BPRINTF2("attributes = 0x%x\n",((xListFontsWithInfoReply *)mp)->minBounds.attributes);
+
+ /* end of CHARINFO structure */
+
+ /* print the CHARINFO structure found at max-bounds */
+
+ BPRINTF1("\tmax-bounds, ");
+ BPRINTF2("left-side-bearing = %d, ",((xListFontsWithInfoReply *)mp)->maxBounds.leftSideBearing);
+ BPRINTF2("right-side-bearing = %d, ",((xListFontsWithInfoReply *)mp)->maxBounds.rightSideBearing);
+ BPRINTF2("character-width = %d, ",((xListFontsWithInfoReply *)mp)->maxBounds.characterWidth);
+ BPRINTF2("ascent = %d, ",((xListFontsWithInfoReply *)mp)->maxBounds.ascent);
+ BPRINTF2("descent = %d, ",((xListFontsWithInfoReply *)mp)->maxBounds.descent);
+ BPRINTF2("attributes = 0x%x\n",((xListFontsWithInfoReply *)mp)->maxBounds.attributes);
+
+ /* end of CHARINFO structure */
+
+ BPRINTF2("\tminCharOrByte2 = %d\n",((xListFontsWithInfoReply *)mp)->minCharOrByte2);
+ BPRINTF2("\tmaxCharOrByte2 = %d\n",((xListFontsWithInfoReply *)mp)->maxCharOrByte2);
+ BPRINTF2("\tdefaultChar = %d\n",((xListFontsWithInfoReply *)mp)->defaultChar);
+ BPRINTF2("\tnFontProps = %ld\n",(long) ((xListFontsWithInfoReply *)mp)->nFontProps);
+ BPRINTF2("\tdrawDirection = %ld\n",(long) ((xListFontsWithInfoReply *)mp)->drawDirection);
+ BPRINTF2("\tminByte1 = %d\n",((xListFontsWithInfoReply *)mp)->minByte1);
+ BPRINTF2("\tmaxByte1 = %d\n",((xListFontsWithInfoReply *)mp)->maxByte1);
+ BPRINTF2("\tallCharsExist = %d\n",((xListFontsWithInfoReply *)mp)->allCharsExist);
+ BPRINTF2("\tfontAscent = %d\n",((xListFontsWithInfoReply *)mp)->fontAscent);
+ BPRINTF2("\tfontDescent = %d\n",((xListFontsWithInfoReply *)mp)->fontDescent);
+ BPRINTF2("\tnReplies = %ld\n",((xListFontsWithInfoReply *)mp)->nReplies);
+ nfontprops = (long) ((xListFontsWithInfoReply *)mp)->nFontProps;
+ Show_Value_List_nRep ( mp, nfontprops, sizeof(xListFontsWithInfoReply), FORMATfontprop);
+ Show_String8 ( mp, sizeof(xListFontsWithInfoReply) + (nfontprops * 8), ((xListFontsWithInfoReply *)mp)->nameLength);
+ }
+ break;
+ case X_GetFontPath:
+ BPRINTF1("GetFontPath:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetFontPathReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetFontPathReply *)mp)->length);
+ BPRINTF2("\tnPaths = %d\n",((xGetFontPathReply *)mp)->nPaths);
+ Show_Strs(valuePtr,((xGetFontPathReply *)mp)->nPaths,
+ ((xGetFontPathReply *)mp)->length<<2,"path");
+ break;
+ case X_GetImage:
+ BPRINTF1("GetImage:\n");
+ BPRINTF2("\tdepth = %d\n",((xGetImageReply *)mp)->depth);
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetImageReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetImageReply *)mp)->length);
+ BPRINTF2("\tvisual = %ld\n",((xGetImageReply *)mp)->visual);
+ Show_Value_List_Rep(mp,sizeof(xGetImageReply),FORMAT8);
+ break;
+ case X_ListInstalledColormaps:
+ BPRINTF1("ListInstalledColormaps:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xListInstalledColormapsReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xListInstalledColormapsReply *)mp)->length);
+ BPRINTF2("\tnColormaps = %ld\n",(long) ((xListInstalledColormapsReply *)mp)->nColormaps);
+ Show_Value_List_Rep(mp,sizeof(xListInstalledColormapsReply),FORMAT32);
+ break;
+ case X_AllocColor:
+ BPRINTF1("AllocColor:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xAllocColorReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xAllocColorReply *)mp)->length);
+ BPRINTF2("\tred = %d\n",((xAllocColorReply *)mp)->red);
+ BPRINTF2("\tgreen = %d\n",((xAllocColorReply *)mp)->green);
+ BPRINTF2("\tblue = %d\n",((xAllocColorReply *)mp)->blue);
+ BPRINTF2("\tpixel = %ld\n",((xAllocColorReply *)mp)->pixel);
+ break;
+ case X_AllocNamedColor:
+ BPRINTF1("AllocNamedColor:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xAllocNamedColorReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xAllocNamedColorReply *)mp)->length);
+ BPRINTF2("\tpixel = %ld\n",((xAllocNamedColorReply *)mp)->pixel);
+ BPRINTF2("\texactRed = %d\n",((xAllocNamedColorReply *)mp)->exactRed);
+ BPRINTF2("\texactGreen = %d\n",((xAllocNamedColorReply *)mp)->exactGreen);
+ BPRINTF2("\texactBlue = %d\n",((xAllocNamedColorReply *)mp)->exactBlue);
+ BPRINTF2("\tscreenRed = %d\n",((xAllocNamedColorReply *)mp)->screenRed);
+ BPRINTF2("\tscreenGreen = %d\n",((xAllocNamedColorReply *)mp)->screenGreen);
+ BPRINTF2("\tscreenBlue = %d\n",((xAllocNamedColorReply *)mp)->screenBlue);
+ break;
+ case X_AllocColorCells:
+ BPRINTF1("AllocColorCells:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xAllocColorCellsReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xAllocColorCellsReply *)mp)->length);
+ BPRINTF2("\tnPixels = %ld\n",(long) ((xAllocColorCellsReply *)mp)->nPixels);
+ BPRINTF2("\tnMasks = %ld\n",(long) ((xAllocColorCellsReply *)mp)->nMasks);
+ BPRINTF1("\tPixels and Masks:\n");
+ Show_Value_List_Rep( mp, sizeof(xAllocColorCellsReply), FORMAT32);
+ break;
+ case X_AllocColorPlanes:
+ BPRINTF1("AllocColorPlanes:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xAllocColorPlanesReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xAllocColorPlanesReply *)mp)->length);
+ BPRINTF2("\tnPixels = %ld\n",(long) ((xAllocColorPlanesReply *)mp)->nPixels);
+ BPRINTF2("\tredMask = %ld\n",((xAllocColorPlanesReply *)mp)->redMask);
+ BPRINTF2("\tgreenMask = %ld\n",((xAllocColorPlanesReply *)mp)->greenMask);
+ BPRINTF2("\tblueMask = %ld\n",((xAllocColorPlanesReply *)mp)->blueMask);
+ Show_Value_List_Rep(mp,sizeof(xAllocColorPlanesReply),FORMAT32);
+ break;
+ case X_QueryColors:
+ BPRINTF1("QueryColors:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xQueryColorsReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xQueryColorsReply *)mp)->length);
+ BPRINTF2("\tnColors = %ld\n",(long) ((xQueryColorsReply *)mp)->nColors);
+ Show_Value_List_Rep((xReq *)mp,sizeof(xQueryColorsReply),FORMATrgb);
+ break;
+ case X_LookupColor:
+ BPRINTF1("LookupColor:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xLookupColorReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xLookupColorReply *)mp)->length);
+ BPRINTF2("\texactRed = %d\n",((xLookupColorReply *)mp)->exactRed);
+ BPRINTF2("\texactGreen = %d\n",((xLookupColorReply *)mp)->exactGreen);
+ BPRINTF2("\texactBlue = %d\n",((xLookupColorReply *)mp)->exactBlue);
+ BPRINTF2("\tscreenRed = %d\n",((xLookupColorReply *)mp)->screenRed);
+ BPRINTF2("\tscreenGreen = %d\n",((xLookupColorReply *)mp)->screenGreen);
+ BPRINTF2("\tscreenBlue = %d\n",((xLookupColorReply *)mp)->screenBlue);
+ break;
+ case X_QueryBestSize:
+ BPRINTF1("QueryBestSize:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xQueryBestSizeReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xQueryBestSizeReply *)mp)->length);
+ BPRINTF2("\twidth = %d\n",((xQueryBestSizeReply *)mp)->width);
+ BPRINTF2("\theight = %d\n",((xQueryBestSizeReply *)mp)->height);
+ break;
+ case X_QueryExtension:
+ BPRINTF1("QueryExtension:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xQueryExtensionReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xQueryExtensionReply *)mp)->length);
+ BPRINTF2("\tpresent = %d\n",((xQueryExtensionReply *)mp)->present);
+ BPRINTF2("\tmajor_opcode = %d\n",((xQueryExtensionReply *)mp)->major_opcode);
+ BPRINTF2("\tfirst_event = %d\n",((xQueryExtensionReply *)mp)->first_event);
+ BPRINTF2("\tfirst_error = %d\n",((xQueryExtensionReply *)mp)->first_error);
+ break;
+ case X_ListExtensions:
+ BPRINTF1("ListExtensions:\n");
+ BPRINTF2("\tnExtensions = %d\n",((xListExtensionsReply *)mp)->nExtensions);
+ BPRINTF2("\tsequenceNumber = %d\n",((xListExtensionsReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xListExtensionsReply *)mp)->length);
+ Show_Strs(valuePtr,((xListExtensionsReply *)mp)->nExtensions,
+ ((xListExtensionsReply *)mp)->length<<2,"extension");
+ break;
+ case X_GetKeyboardMapping:
+ BPRINTF1("GetKeyboardMapping:\n");
+ BPRINTF2("\tkeySymsPerKeyCode = %ld\n",(long) ((xGetKeyboardMappingReply *)mp)->keySymsPerKeyCode);
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetKeyboardMappingReply *)mp)->sequenceNumber);
+ BPRINTF2("\treply length = %ld\n",(long) ((xGetKeyboardMappingReply *)mp)->length);
+ Show_Value_List_Rep(mp,sizeof(xGetKeyboardMappingReply),FORMAT32);
+ break;
+ case X_GetKeyboardControl:
+ BPRINTF1("GetKeyboardControl:\n");
+ BPRINTF2("\tglobalAutoRepeat = %ld\n",(long) ((xGetKeyboardControlReply *)mp)->globalAutoRepeat);
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetKeyboardControlReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetKeyboardControlReply *)mp)->length);
+ BPRINTF2("\tledMask = %ld\n",((xGetKeyboardControlReply *)mp)->ledMask);
+ BPRINTF2("\tkeyClickPercent = %d\n",((xGetKeyboardControlReply *)mp)->keyClickPercent);
+ BPRINTF2("\tbellPercent = %d\n",((xGetKeyboardControlReply *)mp)->bellPercent);
+ BPRINTF2("\tbellPitch = %d\n",((xGetKeyboardControlReply *)mp)->bellPitch);
+ BPRINTF2("\tbellDuration = %d\n",((xGetKeyboardControlReply *)mp)->bellDuration);
+ BPRINTF1("\tauto-repeats:\n");
+ Show_Value_List_Rep( mp, sizeof(xGetKeyboardControlReply)-sizeof(((xGetKeyboardControlReply *)mp)->map), FORMAT8);
+ break;
+ case X_GetPointerControl:
+ BPRINTF1("GetPointerControl:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetPointerControlReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetPointerControlReply *)mp)->length);
+ BPRINTF2("\taccelNumerator = %d\n",((xGetPointerControlReply *)mp)->accelNumerator);
+ BPRINTF2("\taccelDenominator = %d\n",((xGetPointerControlReply *)mp)->accelDenominator);
+ BPRINTF2("\tthreshold = %d\n",((xGetPointerControlReply *)mp)->threshold);
+ break;
+ case X_GetScreenSaver:
+ BPRINTF1("GetScreenSaver:\n");
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetScreenSaverReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetScreenSaverReply *)mp)->length);
+ BPRINTF2("\ttimeout = %d\n",((xGetScreenSaverReply *)mp)->timeout);
+ BPRINTF2("\tinterval = %d\n",((xGetScreenSaverReply *)mp)->interval);
+ BPRINTF2("\tpreferBlanking = %ld\n",(long) ((xGetScreenSaverReply *)mp)->preferBlanking);
+ BPRINTF2("\tallowExposures = %ld\n",(long) ((xGetScreenSaverReply *)mp)->allowExposures);
+ break;
+ case X_ListHosts:
+ {
+ unsigned short nhosts;
+ xHostEntry *hp;
+ char scratch[132];
+ unsigned long hostname;
+ int i;
+
+ BPRINTF1("ListHosts:\n");
+ BPRINTF2("\tenabled = %ld\n",(long) ((xListHostsReply *)mp)->enabled);
+ BPRINTF2("\tsequenceNumber = %d\n",((xListHostsReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xListHostsReply *)mp)->length);
+ BPRINTF2("\tnHosts = %d\n",((xListHostsReply *)mp)->nHosts);
+ nhosts = ((xListHostsReply *)mp)->nHosts;
+ for(i=0;i<(int)nhosts;i++) {
+ if (valuePtr + sizeof(xHostEntry) > endPtr)
+ break;
+ hp = (xHostEntry *) valuePtr;
+ if (valuePtr + hp->length > endPtr)
+ break;
+ BPRINTF2("\thost[%d]:\t",i);
+ BPRINTF2("family = %d\t",hp->family);
+ BPRINTF2("length = %d\t",hp->length);
+ valuePtr += sizeof(xHostEntry);
+ hostname = 0x0;
+ bcopy(valuePtr, (char *)&hostname,
+ min(sizeof(unsigned long),hp->length));
+ BPRINTF2("\tFirst 4 bytes: 0x%08x\n",hostname);
+ valuePtr += padup((int)hp->length);
+ }
+ if (i < (int)nhosts)
+ BPRINTF2("\t.... INCOMPLETE, another %d entries expected\n", nhosts - i);
+ }
+ break;
+ case X_SetPointerMapping:
+ BPRINTF1("SetPointerMapping:\n");
+ BPRINTF2("\tsuccess = %ld\n",(long) ((xSetPointerMappingReply *)mp)->success);
+ BPRINTF2("\tsequenceNumber = %d\n",((xSetPointerMappingReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xSetPointerMappingReply *)mp)->length);
+ break;
+ case X_GetPointerMapping:
+ BPRINTF1("GetPointerMapping:\n");
+ BPRINTF2("\tnElts = %ld\n",(long) ((xGetPointerMappingReply *)mp)->nElts);
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetPointerMappingReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetPointerMappingReply *)mp)->length);
+ Show_Value_List_Rep(mp,sizeof(xGetPointerMappingReply),FORMAT8);
+ break;
+ case X_SetModifierMapping:
+ BPRINTF1("SetModifierMapping:\n");
+ BPRINTF2("\tsuccess = %ld\n",(long) ((xSetModifierMappingReply *)mp)->success);
+ BPRINTF2("\tsequenceNumber = %d\n",((xSetModifierMappingReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xSetModifierMappingReply *)mp)->length);
+ break;
+ case X_GetModifierMapping:
+ BPRINTF1("GetModifierMapping:\n");
+ BPRINTF2("\tnumKeyPerModifier = %ld\n",(long) ((xGetModifierMappingReply *)mp)->numKeyPerModifier);
+ BPRINTF2("\tsequenceNumber = %d\n",((xGetModifierMappingReply *)mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetModifierMappingReply *)mp)->length);
+ Show_Value_List_Rep(mp,sizeof(xGetModifierMappingReply),FORMAT32);
+ break;
+ default:
+ BPRINTF1("UNKNOWN REPLY TYPE:\n");
+ BPRINTF2("\tstated type = %d\n",type);
+ BPRINTF2("\tdata1 = %ld\n", (long) ((xGenericReply *) mp)->data1);
+ BPRINTF2("\tsequenceNumber = %ld\n", (long) ((xGenericReply *) mp)->sequenceNumber);
+ BPRINTF2("\tlength = %ld\n", (long) ((xGenericReply *) mp)->length);
+ BPRINTF2("\tdata00 = %ld\n", (long) ((xGenericReply *) mp)->data00);
+ BPRINTF2("\tdata01 = %ld\n", (long) ((xGenericReply *) mp)->data01);
+ BPRINTF2("\tdata02 = %ld\n", (long) ((xGenericReply *) mp)->data02);
+ BPRINTF2("\tdata03 = %ld\n", (long) ((xGenericReply *) mp)->data03);
+ BPRINTF2("\tdata04 = %ld\n", (long) ((xGenericReply *) mp)->data04);
+ BPRINTF2("\tdata05 = %ld\n", (long) ((xGenericReply *) mp)->data05);
+ break;
+ }
+ if (free_it)
+ Free_Reply(mp);
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/ShowReq.c b/xc/test/xsuite/xtest/src/libproto/ShowReq.c
new file mode 100644
index 000000000..b15b09c86
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/ShowReq.c
@@ -0,0 +1,1064 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: ShowReq.c 1.10 89/02/23 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: ShowReq.c 1.10 89/02/23 $";
+#endif
+
+#include "XstlibInt.h"
+
+void
+Show_Req(mp)
+xReq *mp;
+{
+ /*
+ * This is really one switch, it is split up here to accomodate
+ * compilers that cannot cope with large switches properly.
+ */
+ switch (mp->reqType) {
+ case X_CreateWindow:
+ BPRINTF1("CreateWindow:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xCreateWindowReq *)mp)->reqType);
+ BPRINTF2("\tdepth = %d\n",((xCreateWindowReq *)mp)->depth);
+ BPRINTF2("\tlength = %ld\n",(long) ((xCreateWindowReq *)mp)->length);
+ BPRINTF2("\twid = %ld\n",((xCreateWindowReq *)mp)->wid);
+ BPRINTF2("\tparent = %ld\n",((xCreateWindowReq *)mp)->parent);
+ BPRINTF2("\tx = %d\n",((xCreateWindowReq *)mp)->x);
+ BPRINTF2("\ty = %d\n",((xCreateWindowReq *)mp)->y);
+ BPRINTF2("\twidth = %d\n",((xCreateWindowReq *)mp)->width);
+ BPRINTF2("\theight = %d\n",((xCreateWindowReq *)mp)->height);
+ BPRINTF2("\tborderWidth = %d\n",((xCreateWindowReq *)mp)->borderWidth);
+ BPRINTF2("\tclass = %ld\n",(long) ((xCreateWindowReq *)mp)->class);
+ BPRINTF2("\tvisual = %ld\n",((xCreateWindowReq *)mp)->visual);
+ BPRINTF2("\tvalue-mask (has n 1-bits) = 0x%08x\n",((xCreateWindowReq *)mp)->mask);
+ Show_Value_List_Req(mp,sizeof(xCreateWindowReq),FORMAT32);
+ break;
+ case X_ChangeWindowAttributes:
+ BPRINTF1("ChangeWindowAttributes:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xChangeWindowAttributesReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xChangeWindowAttributesReq *)mp)->length);
+ BPRINTF2("\twindow = %ld\n",((xChangeWindowAttributesReq *)mp)->window);
+ BPRINTF2("\tvalue-mask (has n 1-bits) = 0x%08x\n",((xChangeWindowAttributesReq *)mp)->valueMask);
+ Show_Value_List_Req(mp,sizeof(xChangeWindowAttributesReq),FORMAT32);
+ break;
+ case X_GetWindowAttributes:
+ BPRINTF1("GetWindowAttributes:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_DestroyWindow:
+ BPRINTF1("DestroyWindow:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_DestroySubwindows:
+ BPRINTF1("DestroySubwindows:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_ChangeSaveSet:
+ BPRINTF1("ChangeSaveSet:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xChangeSaveSetReq *)mp)->reqType);
+ BPRINTF2("\tmode = %ld\n",(long) ((xChangeSaveSetReq *)mp)->mode);
+ BPRINTF2("\tlength = %ld\n",(long) ((xChangeSaveSetReq *)mp)->length);
+ BPRINTF2("\twindow = %ld\n",((xChangeSaveSetReq *)mp)->window);
+ break;
+ case X_ReparentWindow:
+ BPRINTF1("ReparentWindow:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xReparentWindowReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xReparentWindowReq *)mp)->length);
+ BPRINTF2("\twindow = %ld\n",((xReparentWindowReq *)mp)->window);
+ BPRINTF2("\tparent = %ld\n",((xReparentWindowReq *)mp)->parent);
+ BPRINTF2("\tx = %d\n",((xReparentWindowReq *)mp)->x);
+ BPRINTF2("\ty = %d\n",((xReparentWindowReq *)mp)->y);
+ break;
+ case X_MapWindow:
+ BPRINTF1("MapWindow:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_MapSubwindows:
+ BPRINTF1("MapSubwindows:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_UnmapWindow:
+ BPRINTF1("UnmapWindow:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_UnmapSubwindows:
+ BPRINTF1("UnmapSubwindows:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_ConfigureWindow:
+ BPRINTF1("ConfigureWindow:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xConfigureWindowReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xConfigureWindowReq *)mp)->length);
+ BPRINTF2("\twindow = %ld\n",((xConfigureWindowReq *)mp)->window);
+ BPRINTF2("\tvalue-mask (has n 1-bits) = 0x%08x\n",((xConfigureWindowReq *)mp)->mask);
+ Show_Value_List_Req(mp,sizeof(xConfigureWindowReq),FORMAT32);
+ break;
+ case X_CirculateWindow:
+ BPRINTF1("CirculateWindow:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xCirculateWindowReq *)mp)->reqType);
+ BPRINTF2("\tdirection = %ld\n",(long) ((xCirculateWindowReq *)mp)->direction);
+ BPRINTF2("\tlength = %ld\n",(long) ((xCirculateWindowReq *)mp)->length);
+ BPRINTF2("\twindow = %ld\n",((xCirculateWindowReq *)mp)->window);
+ break;
+ case X_GetGeometry:
+ BPRINTF1("GetGeometry:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_QueryTree:
+ BPRINTF1("QueryTree:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_InternAtom:
+ BPRINTF1("InternAtom:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xInternAtomReq *)mp)->reqType);
+ BPRINTF2("\tonlyIfExists = %d\n",((xInternAtomReq *)mp)->onlyIfExists);
+ BPRINTF2("\tlength = %ld\n",(long) ((xInternAtomReq *)mp)->length);
+ BPRINTF2("\tnbytes = %ld\n",(long) ((xInternAtomReq *)mp)->nbytes);
+ Show_String8(mp,sizeof(xInternAtomReq),((xInternAtomReq *)mp)->nbytes);
+ break;
+ case X_GetAtomName:
+ BPRINTF1("GetAtomName:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_ChangeProperty:
+ BPRINTF1("ChangeProperty:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xChangePropertyReq *)mp)->reqType);
+ BPRINTF2("\tmode = %ld\n",(long) ((xChangePropertyReq *)mp)->mode);
+ BPRINTF2("\tlength = %ld\n",(long) ((xChangePropertyReq *)mp)->length);
+ BPRINTF2("\twindow = %ld\n",((xChangePropertyReq *)mp)->window);
+ BPRINTF2("\tproperty = %ld\n",((xChangePropertyReq *)mp)->property);
+ BPRINTF2("\ttype = %ld\n",((xChangePropertyReq *)mp)->type);
+ BPRINTF2("\tformat = %d\n",((xChangePropertyReq *)mp)->format);
+ BPRINTF2("\tnUnits = %ld\n",((xChangePropertyReq *)mp)->nUnits);
+ Show_Value_List_Req(mp,sizeof(xChangePropertyReq),((xChangePropertyReq *)mp)->format);
+ break;
+ case X_DeleteProperty:
+ BPRINTF1("DeleteProperty:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xDeletePropertyReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xDeletePropertyReq *)mp)->length);
+ BPRINTF2("\twindow = %ld\n",((xDeletePropertyReq *)mp)->window);
+ BPRINTF2("\tproperty = %ld\n",((xDeletePropertyReq *)mp)->property);
+ break;
+ case X_GetProperty:
+ BPRINTF1("GetProperty:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xGetPropertyReq *)mp)->reqType);
+ BPRINTF2("\tdelete = %d\n",((xGetPropertyReq *)mp)->delete);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetPropertyReq *)mp)->length);
+ BPRINTF2("\twindow = %ld\n",((xGetPropertyReq *)mp)->window);
+ BPRINTF2("\tproperty = %ld\n",((xGetPropertyReq *)mp)->property);
+ BPRINTF2("\ttype = %ld\n",((xGetPropertyReq *)mp)->type);
+ BPRINTF2("\tlongOffset = %ld\n",((xGetPropertyReq *)mp)->longOffset);
+ BPRINTF2("\tlongLength = %ld\n",((xGetPropertyReq *)mp)->longLength);
+ break;
+ case X_ListProperties:
+ BPRINTF1("ListProperties:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_SetSelectionOwner:
+ BPRINTF1("SetSelectionOwner:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xSetSelectionOwnerReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xSetSelectionOwnerReq *)mp)->length);
+ BPRINTF2("\twindow = %ld\n",((xSetSelectionOwnerReq *)mp)->window);
+ BPRINTF2("\tselection = %ld\n",((xSetSelectionOwnerReq *)mp)->selection);
+ BPRINTF2("\ttime = %ld\n",((xSetSelectionOwnerReq *)mp)->time);
+ break;
+ case X_GetSelectionOwner:
+ BPRINTF1("GetSelectionOwner:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_ConvertSelection:
+ BPRINTF1("ConvertSelection:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xConvertSelectionReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xConvertSelectionReq *)mp)->length);
+ BPRINTF2("\trequestor = %ld\n",((xConvertSelectionReq *)mp)->requestor);
+ BPRINTF2("\tselection = %ld\n",((xConvertSelectionReq *)mp)->selection);
+ BPRINTF2("\ttarget = %ld\n",((xConvertSelectionReq *)mp)->target);
+ BPRINTF2("\tproperty = %ld\n",((xConvertSelectionReq *)mp)->property);
+ BPRINTF2("\ttime = %ld\n",((xConvertSelectionReq *)mp)->time);
+ break;
+ case X_SendEvent:
+ BPRINTF1("SendEvent:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xSendEventReq *)mp)->reqType);
+ BPRINTF2("\tpropagate = %d\n",((xSendEventReq *)mp)->propagate);
+ BPRINTF2("\tlength = %ld\n",(long) ((xSendEventReq *)mp)->length);
+ BPRINTF2("\tdestination = %ld\n",((xSendEventReq *)mp)->destination);
+ BPRINTF2("\teventMask = 0x%08x\n",((xSendEventReq *)mp)->eventMask);
+ Show_Evt(&(((xSendEventReq *)mp)->event));
+ break;
+ }
+ switch (mp->reqType) {
+ case X_GrabPointer:
+ BPRINTF1("GrabPointer:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xGrabPointerReq *)mp)->reqType);
+ BPRINTF2("\townerEvents = %d\n",((xGrabPointerReq *)mp)->ownerEvents);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGrabPointerReq *)mp)->length);
+ BPRINTF2("\tgrabWindow = %ld\n",((xGrabPointerReq *)mp)->grabWindow);
+ BPRINTF2("\teventMask = 0x%04x\n",((xGrabPointerReq *)mp)->eventMask);
+ BPRINTF2("\tpointerMode = %ld\n",(long) ((xGrabPointerReq *)mp)->pointerMode);
+ BPRINTF2("\tkeyboardMode = %ld\n",(long) ((xGrabPointerReq *)mp)->keyboardMode);
+ BPRINTF2("\tconfineTo = %ld\n",((xGrabPointerReq *)mp)->confineTo);
+ BPRINTF2("\tcursor = %ld\n",((xGrabPointerReq *)mp)->cursor);
+ BPRINTF2("\ttime = %ld\n",((xGrabPointerReq *)mp)->time);
+ break;
+ case X_UngrabPointer:
+ BPRINTF1("UngrabPointer:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_GrabButton:
+ BPRINTF1("GrabButton:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xGrabButtonReq *)mp)->reqType);
+ BPRINTF2("\townerEvents = %d\n",((xGrabButtonReq *)mp)->ownerEvents);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGrabButtonReq *)mp)->length);
+ BPRINTF2("\tgrabWindow = %ld\n",((xGrabButtonReq *)mp)->grabWindow);
+ BPRINTF2("\teventMask = 0x%04x\n",((xGrabButtonReq *)mp)->eventMask);
+ BPRINTF2("\tpointerMode = %ld\n",(long) ((xGrabButtonReq *)mp)->pointerMode);
+ BPRINTF2("\tkeyboardMode = %ld\n",(long) ((xGrabButtonReq *)mp)->keyboardMode);
+ BPRINTF2("\tconfineTo = %ld\n",((xGrabButtonReq *)mp)->confineTo);
+ BPRINTF2("\tcursor = %ld\n",((xGrabButtonReq *)mp)->cursor);
+ BPRINTF2("\tbutton = %d\n",((xGrabButtonReq *)mp)->button);
+ BPRINTF2("\tmodifiers = 0x%04x\n",((xGrabButtonReq *)mp)->modifiers);
+ break;
+ case X_UngrabButton:
+ BPRINTF1("UngrabButton:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xUngrabButtonReq *)mp)->reqType);
+ BPRINTF2("\tbutton = %d\n",((xUngrabButtonReq *)mp)->button);
+ BPRINTF2("\tlength = %ld\n",(long) ((xUngrabButtonReq *)mp)->length);
+ BPRINTF2("\tgrabWindow = %ld\n",((xUngrabButtonReq *)mp)->grabWindow);
+ BPRINTF2("\tmodifiers = 0x%04x\n",((xUngrabButtonReq *)mp)->modifiers);
+ break;
+ case X_ChangeActivePointerGrab:
+ BPRINTF1("ChangeActivePointerGrab:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xChangeActivePointerGrabReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xChangeActivePointerGrabReq *)mp)->length);
+ BPRINTF2("\tcursor = %ld\n",((xChangeActivePointerGrabReq *)mp)->cursor);
+ BPRINTF2("\ttime = %ld\n",((xChangeActivePointerGrabReq *)mp)->time);
+ BPRINTF2("\teventMask = 0x%04x\n",((xChangeActivePointerGrabReq *)mp)->eventMask);
+ break;
+ case X_GrabKeyboard:
+ BPRINTF1("GrabKeyboard:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xGrabKeyboardReq *)mp)->reqType);
+ BPRINTF2("\townerEvents = %d\n",((xGrabKeyboardReq *)mp)->ownerEvents);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGrabKeyboardReq *)mp)->length);
+ BPRINTF2("\tgrabWindow = %ld\n",((xGrabKeyboardReq *)mp)->grabWindow);
+ BPRINTF2("\ttime = %ld\n",((xGrabKeyboardReq *)mp)->time);
+ BPRINTF2("\tpointerMode = %ld\n",(long) ((xGrabKeyboardReq *)mp)->pointerMode);
+ BPRINTF2("\tkeyboardMode = %ld\n",(long) ((xGrabKeyboardReq *)mp)->keyboardMode);
+ break;
+ case X_UngrabKeyboard:
+ BPRINTF1("UngrabKeyboard:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_GrabKey:
+ BPRINTF1("GrabKey:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xGrabKeyReq *)mp)->reqType);
+ BPRINTF2("\townerEvents = %d\n",((xGrabKeyReq *)mp)->ownerEvents);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGrabKeyReq *)mp)->length);
+ BPRINTF2("\tgrabWindow = %ld\n",((xGrabKeyReq *)mp)->grabWindow);
+ BPRINTF2("\tmodifiers = 0x%04x\n",((xGrabKeyReq *)mp)->modifiers);
+ BPRINTF2("\tkey = %d\n",((xGrabKeyReq *)mp)->key);
+ BPRINTF2("\tpointerMode = %ld\n",(long) ((xGrabKeyReq *)mp)->pointerMode);
+ BPRINTF2("\tkeyboardMode = %ld\n",(long) ((xGrabKeyReq *)mp)->keyboardMode);
+ break;
+ case X_UngrabKey:
+ BPRINTF1("UngrabKey:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xUngrabKeyReq *)mp)->reqType);
+ BPRINTF2("\tkey = %d\n",((xUngrabKeyReq *)mp)->key);
+ BPRINTF2("\tlength = %ld\n",(long) ((xUngrabKeyReq *)mp)->length);
+ BPRINTF2("\tgrabWindow = %ld\n",((xUngrabKeyReq *)mp)->grabWindow);
+ BPRINTF2("\tmodifiers = 0x%04x\n",((xUngrabKeyReq *)mp)->modifiers);
+ break;
+ case X_AllowEvents:
+ BPRINTF1("AllowEvents:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xAllowEventsReq *)mp)->reqType);
+ BPRINTF2("\tmode = %ld\n",(long) ((xAllowEventsReq *)mp)->mode);
+ BPRINTF2("\tlength = %ld\n",(long) ((xAllowEventsReq *)mp)->length);
+ BPRINTF2("\ttime = %ld\n",((xAllowEventsReq *)mp)->time);
+ break;
+ case X_GrabServer:
+ BPRINTF1("GrabServer:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ break;
+ case X_UngrabServer:
+ BPRINTF1("UngrabServer:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ break;
+ case X_QueryPointer:
+ BPRINTF1("QueryPointer:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_GetMotionEvents:
+ BPRINTF1("GetMotionEvents:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xGetMotionEventsReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetMotionEventsReq *)mp)->length);
+ BPRINTF2("\twindow = %ld\n",((xGetMotionEventsReq *)mp)->window);
+ BPRINTF2("\tstart = %ld\n",((xGetMotionEventsReq *)mp)->start);
+ BPRINTF2("\tstop = %ld\n",((xGetMotionEventsReq *)mp)->stop);
+ break;
+ case X_TranslateCoords:
+ BPRINTF1("TranslateCoords:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xTranslateCoordsReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xTranslateCoordsReq *)mp)->length);
+ BPRINTF2("\tsrcWid = %ld\n",((xTranslateCoordsReq *)mp)->srcWid);
+ BPRINTF2("\tdstWid = %ld\n",((xTranslateCoordsReq *)mp)->dstWid);
+ BPRINTF2("\tsrcX = %d\n",((xTranslateCoordsReq *)mp)->srcX);
+ BPRINTF2("\tsrcY = %d\n",((xTranslateCoordsReq *)mp)->srcY);
+ break;
+ case X_WarpPointer:
+ BPRINTF1("WarpPointer:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xWarpPointerReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xWarpPointerReq *)mp)->length);
+ BPRINTF2("\tsrcWid = %ld\n",((xWarpPointerReq *)mp)->srcWid);
+ BPRINTF2("\tdstWid = %ld\n",((xWarpPointerReq *)mp)->dstWid);
+ BPRINTF2("\tsrcX = %d\n",((xWarpPointerReq *)mp)->srcX);
+ BPRINTF2("\tsrcY = %d\n",((xWarpPointerReq *)mp)->srcY);
+ BPRINTF2("\tsrcWidth = %d\n",((xWarpPointerReq *)mp)->srcWidth);
+ BPRINTF2("\tsrcHeight = %d\n",((xWarpPointerReq *)mp)->srcHeight);
+ BPRINTF2("\tdstX = %d\n",((xWarpPointerReq *)mp)->dstX);
+ BPRINTF2("\tdstY = %d\n",((xWarpPointerReq *)mp)->dstY);
+ break;
+ case X_SetInputFocus:
+ BPRINTF1("SetInputFocus:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xSetInputFocusReq *)mp)->reqType);
+ BPRINTF2("\trevertTo = %ld\n",(long) ((xSetInputFocusReq *)mp)->revertTo);
+ BPRINTF2("\tlength = %ld\n",(long) ((xSetInputFocusReq *)mp)->length);
+ BPRINTF2("\tfocus = %ld\n",((xSetInputFocusReq *)mp)->focus);
+ BPRINTF2("\ttime = %ld\n",((xSetInputFocusReq *)mp)->time);
+ break;
+ case X_GetInputFocus:
+ BPRINTF1("GetInputFocus:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ break;
+ case X_QueryKeymap:
+ BPRINTF1("QueryKeymap:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ break;
+ case X_OpenFont:
+ BPRINTF1("OpenFont:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xOpenFontReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xOpenFontReq *)mp)->length);
+ BPRINTF2("\tfid = %ld\n",((xOpenFontReq *)mp)->fid);
+ BPRINTF2("\tnbytes = %ld\n",(long) ((xOpenFontReq *)mp)->nbytes);
+ Show_String8(mp,sizeof(xOpenFontReq),((xOpenFontReq *)mp)->nbytes);
+ break;
+ case X_CloseFont:
+ BPRINTF1("CloseFont:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_QueryFont:
+ BPRINTF1("QueryFont:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_QueryTextExtents:
+ BPRINTF1("QueryTextExtents:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xQueryTextExtentsReq *)mp)->reqType);
+ BPRINTF2("\todd length, True if p = 2 = %d\n",((xQueryTextExtentsReq *)mp)->oddLength);
+ BPRINTF2("\tlength = %ld\n",(long) ((xQueryTextExtentsReq *)mp)->length);
+ BPRINTF2("\tfid = %ld\n",((xQueryTextExtentsReq *)mp)->fid);
+ Show_Value_List_Req(mp,sizeof(xQueryTextExtentsReq),FORMAT16);
+ break;
+ case X_ListFonts:
+ BPRINTF1("ListFonts:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xListFontsReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xListFontsReq *)mp)->length);
+ BPRINTF2("\tmaxNames = %d\n",((xListFontsReq *)mp)->maxNames);
+ BPRINTF2("\tnbytes = %ld\n",(long) ((xListFontsReq *)mp)->nbytes);
+ Show_String8(mp,sizeof(xListFontsReq),((xListFontsReq *)mp)->nbytes);
+ break;
+ case X_ListFontsWithInfo:
+ BPRINTF1("ListFontsWithInfo:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xListFontsWithInfoReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xListFontsWithInfoReq *)mp)->length);
+ BPRINTF2("\tmaxNames = %d\n",((xListFontsWithInfoReq *)mp)->maxNames);
+ BPRINTF2("\tnbytes = %ld\n",(long) ((xListFontsWithInfoReq *)mp)->nbytes);
+ Show_String8(mp,sizeof(xListFontsWithInfoReq),((xListFontsWithInfoReq *)mp)->nbytes);
+ break;
+ }
+ switch (mp->reqType) {
+ case X_SetFontPath:
+ BPRINTF1("SetFontPath:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xSetFontPathReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xSetFontPathReq *)mp)->length);
+ BPRINTF2("\tnFonts = %d\n",((xSetFontPathReq *)mp)->nFonts);
+ Show_Strs((unsigned char *)((unsigned char *)mp)+sizeof(xSetFontPathReq),((xSetFontPathReq *)mp)->nFonts,0/*unused*/,NULL/*unused*/);
+ break;
+ case X_GetFontPath:
+ BPRINTF1("GetFontPath:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tid = %ld\n",(long) ((xResourceReq *)mp)->id);
+ break;
+ case X_CreatePixmap:
+ BPRINTF1("CreatePixmap:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xCreatePixmapReq *)mp)->reqType);
+ BPRINTF2("\tdepth = %d\n",((xCreatePixmapReq *)mp)->depth);
+ BPRINTF2("\tlength = %ld\n",(long) ((xCreatePixmapReq *)mp)->length);
+ BPRINTF2("\tpid = %ld\n",((xCreatePixmapReq *)mp)->pid);
+ BPRINTF2("\tdrawable = %ld\n",((xCreatePixmapReq *)mp)->drawable);
+ BPRINTF2("\twidth = %d\n",((xCreatePixmapReq *)mp)->width);
+ BPRINTF2("\theight = %d\n",((xCreatePixmapReq *)mp)->height);
+ break;
+ case X_FreePixmap:
+ BPRINTF1("FreePixmap:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_CreateGC:
+ BPRINTF1("CreateGC:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xCreateGCReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xCreateGCReq *)mp)->length);
+ BPRINTF2("\tgc = %ld\n",((xCreateGCReq *)mp)->gc);
+ BPRINTF2("\tdrawable = %ld\n",((xCreateGCReq *)mp)->drawable);
+ BPRINTF2("\tvalue-mask (has n 1-bits) = 0x%08x\n",((xCreateGCReq *)mp)->mask);
+ Show_Value_List_Req(mp,sizeof(xCreateGCReq),FORMAT32);
+ break;
+ case X_ChangeGC:
+ BPRINTF1("ChangeGC:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xChangeGCReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xChangeGCReq *)mp)->length);
+ BPRINTF2("\tgc = %ld\n",((xChangeGCReq *)mp)->gc);
+ BPRINTF2("\tvalue-mask (has n 1-bits) = 0x%08x\n",((xChangeGCReq *)mp)->mask);
+ Show_Value_List_Req(mp,sizeof(xChangeGCReq),FORMAT32);
+ break;
+ case X_CopyGC:
+ BPRINTF1("CopyGC:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xCopyGCReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xCopyGCReq *)mp)->length);
+ BPRINTF2("\tsrcGC = %ld\n",((xCopyGCReq *)mp)->srcGC);
+ BPRINTF2("\tdstGC = %ld\n",((xCopyGCReq *)mp)->dstGC);
+ BPRINTF2("\tmask = 0x%08x\n",((xCopyGCReq *)mp)->mask);
+ break;
+ case X_SetDashes:
+ BPRINTF1("SetDashes:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xSetDashesReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xSetDashesReq *)mp)->length);
+ BPRINTF2("\tgc = %ld\n",((xSetDashesReq *)mp)->gc);
+ BPRINTF2("\tdashOffset = %d\n",((xSetDashesReq *)mp)->dashOffset);
+ BPRINTF2("\tnDashes = %ld\n",(long) ((xSetDashesReq *)mp)->nDashes);
+ Show_Value_List_Req(mp,sizeof(xSetDashesReq),FORMAT8);
+ break;
+ case X_SetClipRectangles:
+ BPRINTF1("SetClipRectangles:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xSetClipRectanglesReq *)mp)->reqType);
+ BPRINTF2("\tordering = %ld\n",(long) ((xSetClipRectanglesReq *)mp)->ordering);
+ BPRINTF2("\tlength = %ld\n",(long) ((xSetClipRectanglesReq *)mp)->length);
+ BPRINTF2("\tgc = %ld\n",((xSetClipRectanglesReq *)mp)->gc);
+ BPRINTF2("\txOrigin = %d\n",((xSetClipRectanglesReq *)mp)->xOrigin);
+ BPRINTF2("\tyOrigin = %d\n",((xSetClipRectanglesReq *)mp)->yOrigin);
+ Show_Value_List_Req(mp,sizeof(xSetClipRectanglesReq),FORMATrectangle);
+ break;
+ case X_FreeGC:
+ BPRINTF1("FreeGC:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_ClearArea:
+ BPRINTF1("ClearArea:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xClearAreaReq *)mp)->reqType);
+ BPRINTF2("\texposures = %d\n",((xClearAreaReq *)mp)->exposures);
+ BPRINTF2("\tlength = %ld\n",(long) ((xClearAreaReq *)mp)->length);
+ BPRINTF2("\twindow = %ld\n",((xClearAreaReq *)mp)->window);
+ BPRINTF2("\tx = %d\n",((xClearAreaReq *)mp)->x);
+ BPRINTF2("\ty = %d\n",((xClearAreaReq *)mp)->y);
+ BPRINTF2("\twidth = %d\n",((xClearAreaReq *)mp)->width);
+ BPRINTF2("\theight = %d\n",((xClearAreaReq *)mp)->height);
+ break;
+ case X_CopyArea:
+ BPRINTF1("CopyArea:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xCopyAreaReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xCopyAreaReq *)mp)->length);
+ BPRINTF2("\tsrcDrawable = %ld\n",((xCopyAreaReq *)mp)->srcDrawable);
+ BPRINTF2("\tdstDrawable = %ld\n",((xCopyAreaReq *)mp)->dstDrawable);
+ BPRINTF2("\tgc = %ld\n",((xCopyAreaReq *)mp)->gc);
+ BPRINTF2("\tsrcX = %d\n",((xCopyAreaReq *)mp)->srcX);
+ BPRINTF2("\tsrcY = %d\n",((xCopyAreaReq *)mp)->srcY);
+ BPRINTF2("\tdstX = %d\n",((xCopyAreaReq *)mp)->dstX);
+ BPRINTF2("\tdstY = %d\n",((xCopyAreaReq *)mp)->dstY);
+ BPRINTF2("\twidth = %d\n",((xCopyAreaReq *)mp)->width);
+ BPRINTF2("\theight = %d\n",((xCopyAreaReq *)mp)->height);
+ break;
+ case X_CopyPlane:
+ BPRINTF1("CopyPlane:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xCopyPlaneReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xCopyPlaneReq *)mp)->length);
+ BPRINTF2("\tsrcDrawable = %ld\n",((xCopyPlaneReq *)mp)->srcDrawable);
+ BPRINTF2("\tdstDrawable = %ld\n",((xCopyPlaneReq *)mp)->dstDrawable);
+ BPRINTF2("\tgc = %ld\n",((xCopyPlaneReq *)mp)->gc);
+ BPRINTF2("\tsrcX = %d\n",((xCopyPlaneReq *)mp)->srcX);
+ BPRINTF2("\tsrcY = %d\n",((xCopyPlaneReq *)mp)->srcY);
+ BPRINTF2("\tdstX = %d\n",((xCopyPlaneReq *)mp)->dstX);
+ BPRINTF2("\tdstY = %d\n",((xCopyPlaneReq *)mp)->dstY);
+ BPRINTF2("\twidth = %d\n",((xCopyPlaneReq *)mp)->width);
+ BPRINTF2("\theight = %d\n",((xCopyPlaneReq *)mp)->height);
+ BPRINTF2("\tbitPlane = %ld\n",((xCopyPlaneReq *)mp)->bitPlane);
+ break;
+ case X_PolyPoint:
+ BPRINTF1("PolyPoint:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xPolyPointReq *)mp)->reqType);
+ BPRINTF2("\tcoordMode = %ld\n",(long) ((xPolyPointReq *)mp)->coordMode);
+ BPRINTF2("\tlength = %ld\n",(long) ((xPolyPointReq *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xPolyPointReq *)mp)->drawable);
+ BPRINTF2("\tgc = %ld\n",((xPolyPointReq *)mp)->gc);
+ Show_Value_List_Req(mp,sizeof(xPolyPointReq),FORMATpoint);
+ break;
+ case X_PolyLine:
+ BPRINTF1("PolyLine:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xPolyLineReq *)mp)->reqType);
+ BPRINTF2("\tcoordMode = %ld\n",(long) ((xPolyLineReq *)mp)->coordMode);
+ BPRINTF2("\tlength = %ld\n",(long) ((xPolyLineReq *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xPolyLineReq *)mp)->drawable);
+ BPRINTF2("\tgc = %ld\n",((xPolyLineReq *)mp)->gc);
+ Show_Value_List_Req(mp,sizeof(xPolyLineReq),FORMATpoint);
+ break;
+ case X_PolySegment:
+ BPRINTF1("PolySegment:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xPolySegmentReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xPolySegmentReq *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xPolySegmentReq *)mp)->drawable);
+ BPRINTF2("\tgc = %ld\n",((xPolySegmentReq *)mp)->gc);
+ Show_Value_List_Req(mp,sizeof(xPolySegmentReq),FORMATpoint);
+ break;
+ case X_PolyRectangle:
+ BPRINTF1("PolyRectangle:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xPolyRectangleReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xPolyRectangleReq *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xPolyRectangleReq *)mp)->drawable);
+ BPRINTF2("\tgc = %ld\n",((xPolyRectangleReq *)mp)->gc);
+ Show_Value_List_Req(mp,sizeof(xPolyRectangleReq),FORMATrectangle);
+ break;
+ case X_PolyArc:
+ BPRINTF1("PolyArc:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xPolyArcReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xPolyArcReq *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xPolyArcReq *)mp)->drawable);
+ BPRINTF2("\tgc = %ld\n",((xPolyArcReq *)mp)->gc);
+ Show_Value_List_Req(mp,sizeof(xPolyArcReq),FORMATarc);
+ break;
+ case X_FillPoly:
+ BPRINTF1("FillPoly:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xFillPolyReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xFillPolyReq *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xFillPolyReq *)mp)->drawable);
+ BPRINTF2("\tgc = %ld\n",((xFillPolyReq *)mp)->gc);
+ BPRINTF2("\tshape = %ld\n",(long) ((xFillPolyReq *)mp)->shape);
+ BPRINTF2("\tcoordMode = %ld\n",(long) ((xFillPolyReq *)mp)->coordMode);
+ Show_Value_List_Req(mp,sizeof(xFillPolyReq),FORMATpoint);
+ break;
+ case X_PolyFillRectangle:
+ BPRINTF1("PolyFillRectangle:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xPolyFillRectangleReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xPolyFillRectangleReq *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xPolyFillRectangleReq *)mp)->drawable);
+ BPRINTF2("\tgc = %ld\n",((xPolyFillRectangleReq *)mp)->gc);
+ Show_Value_List_Req(mp,sizeof(xPolyFillRectangleReq),FORMATrectangle);
+ break;
+ case X_PolyFillArc:
+ BPRINTF1("PolyFillArc:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xPolyFillArcReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xPolyFillArcReq *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xPolyFillArcReq *)mp)->drawable);
+ BPRINTF2("\tgc = %ld\n",((xPolyFillArcReq *)mp)->gc);
+ Show_Value_List_Req(mp,sizeof(xPolyFillArcReq),FORMATarc);
+ break;
+ case X_PutImage:
+ BPRINTF1("PutImage:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xPutImageReq *)mp)->reqType);
+ BPRINTF2("\tformat = %ld\n",(long) ((xPutImageReq *)mp)->format);
+ BPRINTF2("\tlength = %ld\n",(long) ((xPutImageReq *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xPutImageReq *)mp)->drawable);
+ BPRINTF2("\tgc = %ld\n",((xPutImageReq *)mp)->gc);
+ BPRINTF2("\twidth = %d\n",((xPutImageReq *)mp)->width);
+ BPRINTF2("\theight = %d\n",((xPutImageReq *)mp)->height);
+ BPRINTF2("\tdstX = %d\n",((xPutImageReq *)mp)->dstX);
+ BPRINTF2("\tdstY = %d\n",((xPutImageReq *)mp)->dstY);
+ BPRINTF2("\tleftPad = %d\n",((xPutImageReq *)mp)->leftPad);
+ BPRINTF2("\tdepth = %d\n",((xPutImageReq *)mp)->depth);
+ Show_Value_List_Req(mp,sizeof(xPutImageReq),FORMAT8);
+ break;
+ }
+ switch (mp->reqType) {
+ case X_GetImage:
+ BPRINTF1("GetImage:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xGetImageReq *)mp)->reqType);
+ BPRINTF2("\tformat = %ld\n",(long) ((xGetImageReq *)mp)->format);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetImageReq *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xGetImageReq *)mp)->drawable);
+ BPRINTF2("\tx = %d\n",((xGetImageReq *)mp)->x);
+ BPRINTF2("\ty = %d\n",((xGetImageReq *)mp)->y);
+ BPRINTF2("\twidth = %d\n",((xGetImageReq *)mp)->width);
+ BPRINTF2("\theight = %d\n",((xGetImageReq *)mp)->height);
+ BPRINTF2("\tplaneMask = %ld\n",((xGetImageReq *)mp)->planeMask);
+ break;
+ case X_PolyText8:
+ BPRINTF1("PolyText8:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xPolyText8Req *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xPolyText8Req *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xPolyText8Req *)mp)->drawable);
+ BPRINTF2("\tgc = %ld\n",((xPolyText8Req *)mp)->gc);
+ BPRINTF2("\tx = %d\n",((xPolyText8Req *)mp)->x);
+ BPRINTF2("\ty = %d\n",((xPolyText8Req *)mp)->y);
+ { xTextElt *xte;
+
+ xte = (xTextElt *)(((char *)mp) + sizeof(xPolyText8Req));
+ if (xte->len == 255) {
+ BPRINTF1("\tFont change....\n");
+ } else {
+ BPRINTF2("\tfirst delta = %d\n", xte->delta);
+ BPRINTF2("\t%d length string:\n\t", xte->len);
+ Show_String8(mp,sizeof(xPolyText8Req)+sizeof(xTextElt),xte->len);
+ }
+ }
+ break;
+ case X_PolyText16:
+ BPRINTF1("PolyText16:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xPolyText16Req *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xPolyText16Req *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xPolyText16Req *)mp)->drawable);
+ BPRINTF2("\tgc = %ld\n",((xPolyText16Req *)mp)->gc);
+ BPRINTF2("\tx = %d\n",((xPolyText16Req *)mp)->x);
+ BPRINTF2("\ty = %d\n",((xPolyText16Req *)mp)->y);
+ { xTextElt *xte;
+
+ xte = (xTextElt *)(((char *)mp) + sizeof(xPolyText8Req));
+ if (xte->len == 255) {
+ BPRINTF1("\tFont change....\n");
+ } else {
+ BPRINTF2("\tfirst delta = %d\n", xte->delta);
+ BPRINTF2("\t%d length string:\n\t", xte->len);
+ Show_String8(mp,sizeof(xPolyText8Req)+sizeof(xTextElt),xte->len);
+ }
+ }
+ break;
+ case X_ImageText8:
+ BPRINTF1("ImageText8:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xImageText8Req *)mp)->reqType);
+ BPRINTF2("\tnChars = %ld\n",(long) ((xImageText8Req *)mp)->nChars);
+ BPRINTF2("\tlength = %ld\n",(long) ((xImageText8Req *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xImageText8Req *)mp)->drawable);
+ BPRINTF2("\tgc = %ld\n",((xImageText8Req *)mp)->gc);
+ BPRINTF2("\tx = %d\n",((xImageText8Req *)mp)->x);
+ BPRINTF2("\ty = %d\n",((xImageText8Req *)mp)->y);
+ Show_String8(mp,sizeof(xImageText8Req),((xImageText8Req *)mp)->nChars);
+ break;
+ case X_ImageText16:
+ BPRINTF1("ImageText16:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xImageText16Req *)mp)->reqType);
+ BPRINTF2("\tnChars = %ld\n",(long) ((xImageText16Req *)mp)->nChars);
+ BPRINTF2("\tlength = %ld\n",(long) ((xImageText16Req *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xImageText16Req *)mp)->drawable);
+ BPRINTF2("\tgc = %ld\n",((xImageText16Req *)mp)->gc);
+ BPRINTF2("\tx = %d\n",((xImageText16Req *)mp)->x);
+ BPRINTF2("\ty = %d\n",((xImageText16Req *)mp)->y);
+ Show_Value_List_Req(mp,sizeof(xImageText16Req),FORMAT16);
+ break;
+ case X_CreateColormap:
+ BPRINTF1("CreateColormap:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xCreateColormapReq *)mp)->reqType);
+ BPRINTF2("\talloc = %ld\n",(long) ((xCreateColormapReq *)mp)->alloc);
+ BPRINTF2("\tlength = %ld\n",(long) ((xCreateColormapReq *)mp)->length);
+ BPRINTF2("\tmid = %ld\n",((xCreateColormapReq *)mp)->mid);
+ BPRINTF2("\twindow = %ld\n",((xCreateColormapReq *)mp)->window);
+ BPRINTF2("\tvisual = %ld\n",((xCreateColormapReq *)mp)->visual);
+ break;
+ case X_FreeColormap:
+ BPRINTF1("FreeColormap:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_CopyColormapAndFree:
+ BPRINTF1("CopyColormapAndFree:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xCopyColormapAndFreeReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xCopyColormapAndFreeReq *)mp)->length);
+ BPRINTF2("\tmid = %ld\n",((xCopyColormapAndFreeReq *)mp)->mid);
+ BPRINTF2("\tsrcCmap = %ld\n",((xCopyColormapAndFreeReq *)mp)->srcCmap);
+ break;
+ case X_InstallColormap:
+ BPRINTF1("InstallColormap:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_UninstallColormap:
+ BPRINTF1("UninstallColormap:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_ListInstalledColormaps:
+ BPRINTF1("ListInstalledColormaps:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_AllocColor:
+ BPRINTF1("AllocColor:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xAllocColorReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xAllocColorReq *)mp)->length);
+ BPRINTF2("\tcmap = %ld\n",((xAllocColorReq *)mp)->cmap);
+ BPRINTF2("\tred = %d\n",((xAllocColorReq *)mp)->red);
+ BPRINTF2("\tgreen = %d\n",((xAllocColorReq *)mp)->green);
+ BPRINTF2("\tblue = %d\n",((xAllocColorReq *)mp)->blue);
+ break;
+ case X_AllocNamedColor:
+ BPRINTF1("AllocNamedColor:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xAllocNamedColorReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xAllocNamedColorReq *)mp)->length);
+ BPRINTF2("\tcmap = %ld\n",((xAllocNamedColorReq *)mp)->cmap);
+ BPRINTF2("\tnbytes = %ld\n",(long) ((xAllocNamedColorReq *)mp)->nbytes);
+ Show_String8(mp,sizeof(xAllocNamedColorReq),((xAllocNamedColorReq *)mp)->nbytes);
+ break;
+ case X_AllocColorCells:
+ BPRINTF1("AllocColorCells:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xAllocColorCellsReq *)mp)->reqType);
+ BPRINTF2("\tcontiguous = %d\n",((xAllocColorCellsReq *)mp)->contiguous);
+ BPRINTF2("\tlength = %ld\n",(long) ((xAllocColorCellsReq *)mp)->length);
+ BPRINTF2("\tcmap = %ld\n",((xAllocColorCellsReq *)mp)->cmap);
+ BPRINTF2("\tcolors = %d\n",((xAllocColorCellsReq *)mp)->colors);
+ BPRINTF2("\tplanes = %d\n",((xAllocColorCellsReq *)mp)->planes);
+ break;
+ case X_AllocColorPlanes:
+ BPRINTF1("AllocColorPlanes:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xAllocColorPlanesReq *)mp)->reqType);
+ BPRINTF2("\tcontiguous = %d\n",((xAllocColorPlanesReq *)mp)->contiguous);
+ BPRINTF2("\tlength = %ld\n",(long) ((xAllocColorPlanesReq *)mp)->length);
+ BPRINTF2("\tcmap = %ld\n",((xAllocColorPlanesReq *)mp)->cmap);
+ BPRINTF2("\tcolors = %d\n",((xAllocColorPlanesReq *)mp)->colors);
+ BPRINTF2("\tred = %d\n",((xAllocColorPlanesReq *)mp)->red);
+ BPRINTF2("\tgreen = %d\n",((xAllocColorPlanesReq *)mp)->green);
+ BPRINTF2("\tblue = %d\n",((xAllocColorPlanesReq *)mp)->blue);
+ break;
+ case X_FreeColors:
+ BPRINTF1("FreeColors:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xFreeColorsReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xFreeColorsReq *)mp)->length);
+ BPRINTF2("\tcmap = %ld\n",((xFreeColorsReq *)mp)->cmap);
+ BPRINTF2("\tplaneMask = %ld\n",((xFreeColorsReq *)mp)->planeMask);
+ Show_Value_List_Req(mp,sizeof(xFreeColorsReq),FORMAT32);
+ break;
+ case X_StoreColors:
+ BPRINTF1("StoreColors:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xStoreColorsReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xStoreColorsReq *)mp)->length);
+ BPRINTF2("\tcmap = %ld\n",((xStoreColorsReq *)mp)->cmap);
+ Show_Value_List_Req(mp,sizeof(xStoreColorsReq),FORMATcoloritem);
+ break;
+ case X_StoreNamedColor:
+ BPRINTF1("StoreNamedColor:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xStoreNamedColorReq *)mp)->reqType);
+ BPRINTF2("\tdo-red, do-green, do-blue = %ld\n",(long) ((xStoreNamedColorReq *)mp)->flags);
+ BPRINTF2("\tlength = %ld\n",(long) ((xStoreNamedColorReq *)mp)->length);
+ BPRINTF2("\tcmap = %ld\n",((xStoreNamedColorReq *)mp)->cmap);
+ BPRINTF2("\tpixel = %ld\n",((xStoreNamedColorReq *)mp)->pixel);
+ BPRINTF2("\tnbytes = %ld\n",(long) ((xStoreNamedColorReq *)mp)->nbytes);
+ Show_String8(mp,sizeof(xStoreNamedColorReq),((xStoreNamedColorReq *)mp)->nbytes);
+ break;
+ case X_QueryColors:
+ BPRINTF1("QueryColors:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xQueryColorsReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xQueryColorsReq *)mp)->length);
+ BPRINTF2("\tcmap = %ld\n",((xQueryColorsReq *)mp)->cmap);
+ Show_Value_List_Req(mp,sizeof(xQueryColorsReq),FORMAT32);
+ break;
+ case X_LookupColor:
+ BPRINTF1("LookupColor:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xLookupColorReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xLookupColorReq *)mp)->length);
+ BPRINTF2("\tcmap = %ld\n",((xLookupColorReq *)mp)->cmap);
+ BPRINTF2("\tnbytes = %ld\n",(long) ((xLookupColorReq *)mp)->nbytes);
+ Show_String8(mp,sizeof(xLookupColorReq),((xLookupColorReq *)mp)->nbytes);
+ break;
+ }
+ switch (mp->reqType) {
+ case X_CreateCursor:
+ BPRINTF1("CreateCursor:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xCreateCursorReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xCreateCursorReq *)mp)->length);
+ BPRINTF2("\tcid = %ld\n",((xCreateCursorReq *)mp)->cid);
+ BPRINTF2("\tsource = %ld\n",((xCreateCursorReq *)mp)->source);
+ BPRINTF2("\tmask = %ld\n",((xCreateCursorReq *)mp)->mask);
+ BPRINTF2("\tforeRed = %d\n",((xCreateCursorReq *)mp)->foreRed);
+ BPRINTF2("\tforeGreen = %d\n",((xCreateCursorReq *)mp)->foreGreen);
+ BPRINTF2("\tforeBlue = %d\n",((xCreateCursorReq *)mp)->foreBlue);
+ BPRINTF2("\tbackRed = %d\n",((xCreateCursorReq *)mp)->backRed);
+ BPRINTF2("\tbackGreen = %d\n",((xCreateCursorReq *)mp)->backGreen);
+ BPRINTF2("\tbackBlue = %d\n",((xCreateCursorReq *)mp)->backBlue);
+ BPRINTF2("\tx = %d\n",((xCreateCursorReq *)mp)->x);
+ BPRINTF2("\ty = %d\n",((xCreateCursorReq *)mp)->y);
+ break;
+ case X_CreateGlyphCursor:
+ BPRINTF1("CreateGlyphCursor:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xCreateGlyphCursorReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xCreateGlyphCursorReq *)mp)->length);
+ BPRINTF2("\tcid = %ld\n",((xCreateGlyphCursorReq *)mp)->cid);
+ BPRINTF2("\tsource = %ld\n",((xCreateGlyphCursorReq *)mp)->source);
+ BPRINTF2("\tmask = %ld\n",((xCreateGlyphCursorReq *)mp)->mask);
+ BPRINTF2("\tsourceChar = %d\n",((xCreateGlyphCursorReq *)mp)->sourceChar);
+ BPRINTF2("\tmaskChar = %d\n",((xCreateGlyphCursorReq *)mp)->maskChar);
+ BPRINTF2("\tforeRed = %d\n",((xCreateGlyphCursorReq *)mp)->foreRed);
+ BPRINTF2("\tforeGreen = %d\n",((xCreateGlyphCursorReq *)mp)->foreGreen);
+ BPRINTF2("\tforeBlue = %d\n",((xCreateGlyphCursorReq *)mp)->foreBlue);
+ BPRINTF2("\tbackRed = %d\n",((xCreateGlyphCursorReq *)mp)->backRed);
+ BPRINTF2("\tbackGreen = %d\n",((xCreateGlyphCursorReq *)mp)->backGreen);
+ BPRINTF2("\tbackBlue = %d\n",((xCreateGlyphCursorReq *)mp)->backBlue);
+ break;
+ case X_FreeCursor:
+ BPRINTF1("FreeCursor:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_RecolorCursor:
+ BPRINTF1("RecolorCursor:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xRecolorCursorReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xRecolorCursorReq *)mp)->length);
+ BPRINTF2("\tcursor = %ld\n",((xRecolorCursorReq *)mp)->cursor);
+ BPRINTF2("\tforeRed = %d\n",((xRecolorCursorReq *)mp)->foreRed);
+ BPRINTF2("\tforeGreen = %d\n",((xRecolorCursorReq *)mp)->foreGreen);
+ BPRINTF2("\tforeBlue = %d\n",((xRecolorCursorReq *)mp)->foreBlue);
+ BPRINTF2("\tbackRed = %d\n",((xRecolorCursorReq *)mp)->backRed);
+ BPRINTF2("\tbackGreen = %d\n",((xRecolorCursorReq *)mp)->backGreen);
+ BPRINTF2("\tbackBlue = %d\n",((xRecolorCursorReq *)mp)->backBlue);
+ break;
+ case X_QueryBestSize:
+ BPRINTF1("QueryBestSize:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xQueryBestSizeReq *)mp)->reqType);
+ BPRINTF2("\tclass = %ld\n",(long) ((xQueryBestSizeReq *)mp)->class);
+ BPRINTF2("\tlength = %ld\n",(long) ((xQueryBestSizeReq *)mp)->length);
+ BPRINTF2("\tdrawable = %ld\n",((xQueryBestSizeReq *)mp)->drawable);
+ BPRINTF2("\twidth = %d\n",((xQueryBestSizeReq *)mp)->width);
+ BPRINTF2("\theight = %d\n",((xQueryBestSizeReq *)mp)->height);
+ break;
+ case X_QueryExtension:
+ BPRINTF1("QueryExtension:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xQueryExtensionReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xQueryExtensionReq *)mp)->length);
+ BPRINTF2("\tnbytes = %ld\n",(long) ((xQueryExtensionReq *)mp)->nbytes);
+ Show_String8(mp,sizeof(xQueryExtensionReq),((xQueryExtensionReq *)mp)->nbytes);
+ break;
+ case X_ListExtensions:
+ BPRINTF1("ListExtensions:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ break;
+ case X_ChangeKeyboardMapping:
+ BPRINTF1("ChangeKeyboardMapping:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xChangeKeyboardMappingReq *)mp)->reqType);
+ BPRINTF2("\tkeyCodes = %ld\n",(long) ((xChangeKeyboardMappingReq *)mp)->keyCodes);
+ BPRINTF2("\tlength = %ld\n",(long) ((xChangeKeyboardMappingReq *)mp)->length);
+ BPRINTF2("\tfirstKeyCode = %d\n",((xChangeKeyboardMappingReq *)mp)->firstKeyCode);
+ BPRINTF2("\tkeySymsPerKeyCode = %ld\n",(long) ((xChangeKeyboardMappingReq *)mp)->keySymsPerKeyCode);
+ Show_Value_List_Req(mp,sizeof(xChangeKeyboardMappingReq),FORMAT32);
+ break;
+ case X_GetKeyboardMapping:
+ BPRINTF1("GetKeyboardMapping:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xGetKeyboardMappingReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xGetKeyboardMappingReq *)mp)->length);
+ BPRINTF2("\tfirstKeyCode = %d\n",((xGetKeyboardMappingReq *)mp)->firstKeyCode);
+ BPRINTF2("\tcount = %d\n",((xGetKeyboardMappingReq *)mp)->count);
+ break;
+ case X_ChangeKeyboardControl:
+ BPRINTF1("ChangeKeyboardControl:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xChangeKeyboardControlReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xChangeKeyboardControlReq *)mp)->length);
+ BPRINTF2("\tvalue-mask (has n 1-bits) = 0x%08x\n",((xChangeKeyboardControlReq *)mp)->mask);
+ Show_Value_List_Req(mp,sizeof(xChangeKeyboardControlReq),FORMAT32);
+ break;
+ case X_GetKeyboardControl:
+ BPRINTF1("GetKeyboardControl:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ break;
+ case X_Bell:
+ BPRINTF1("Bell:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xBellReq *)mp)->reqType);
+ BPRINTF2("\tpercent = %d\n",((xBellReq *)mp)->percent);
+ BPRINTF2("\tlength = %ld\n",(long) ((xBellReq *)mp)->length);
+ break;
+ case X_ChangePointerControl:
+ BPRINTF1("ChangePointerControl:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xChangePointerControlReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xChangePointerControlReq *)mp)->length);
+ BPRINTF2("\taccelNum = %d\n",((xChangePointerControlReq *)mp)->accelNum);
+ BPRINTF2("\taccelDenum = %d\n",((xChangePointerControlReq *)mp)->accelDenum);
+ BPRINTF2("\tthreshold = %d\n",((xChangePointerControlReq *)mp)->threshold);
+ BPRINTF2("\tdoAccel = %d\n",((xChangePointerControlReq *)mp)->doAccel);
+ BPRINTF2("\tdoThresh = %d\n",((xChangePointerControlReq *)mp)->doThresh);
+ break;
+ case X_GetPointerControl:
+ BPRINTF1("GetPointerControl:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ break;
+ case X_SetScreenSaver:
+ BPRINTF1("SetScreenSaver:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xSetScreenSaverReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xSetScreenSaverReq *)mp)->length);
+ BPRINTF2("\ttimeout = %d\n",((xSetScreenSaverReq *)mp)->timeout);
+ BPRINTF2("\tinterval = %d\n",((xSetScreenSaverReq *)mp)->interval);
+ BPRINTF2("\tpreferBlank = %ld\n",(long) ((xSetScreenSaverReq *)mp)->preferBlank);
+ BPRINTF2("\tallowExpose = %ld\n",(long) ((xSetScreenSaverReq *)mp)->allowExpose);
+ break;
+ case X_GetScreenSaver:
+ BPRINTF1("GetScreenSaver:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ break;
+ case X_ChangeHosts:
+ BPRINTF1("ChangeHosts:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xChangeHostsReq *)mp)->reqType);
+ BPRINTF2("\tmode = %ld\n",(long) ((xChangeHostsReq *)mp)->mode);
+ BPRINTF2("\tlength = %ld\n",(long) ((xChangeHostsReq *)mp)->length);
+ BPRINTF2("\thostFamily = %ld\n",(long) ((xChangeHostsReq *)mp)->hostFamily);
+ BPRINTF2("\thostLength = %d\n",((xChangeHostsReq *)mp)->hostLength);
+ Show_String8(mp,sizeof(xChangeHostsReq),((xChangeHostsReq *)mp)->hostLength);
+ break;
+ case X_ListHosts:
+ BPRINTF1("ListHosts:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xListHostsReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xListHostsReq *)mp)->length);
+ break;
+ case X_SetAccessControl:
+ BPRINTF1("SetAccessControl:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xSetAccessControlReq *)mp)->reqType);
+ BPRINTF2("\tmode = %ld\n",(long) ((xSetAccessControlReq *)mp)->mode);
+ BPRINTF2("\tlength = %ld\n",(long) ((xSetAccessControlReq *)mp)->length);
+ break;
+ case X_SetCloseDownMode:
+ BPRINTF1("SetCloseDownMode:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xSetCloseDownModeReq *)mp)->reqType);
+ BPRINTF2("\tmode = %ld\n",(long) ((xSetCloseDownModeReq *)mp)->mode);
+ BPRINTF2("\tlength = %ld\n",(long) ((xSetCloseDownModeReq *)mp)->length);
+ break;
+ case X_KillClient:
+ BPRINTF1("KillClient:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ BPRINTF2("\tid = %ld\n",((xResourceReq *)mp)->id);
+ break;
+ case X_RotateProperties:
+ BPRINTF1("RotateProperties:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xRotatePropertiesReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xRotatePropertiesReq *)mp)->length);
+ BPRINTF2("\twindow = %ld\n",((xRotatePropertiesReq *)mp)->window);
+ BPRINTF2("\tnAtoms = %ld\n",(long) ((xRotatePropertiesReq *)mp)->nAtoms);
+ BPRINTF2("\tnPositions = %d\n",((xRotatePropertiesReq *)mp)->nPositions);
+ Show_Value_List_Req(mp,sizeof(xRotatePropertiesReq),FORMAT32);
+ break;
+ case X_ForceScreenSaver:
+ BPRINTF1("ForceScreenSaver:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xForceScreenSaverReq *)mp)->reqType);
+ BPRINTF2("\tmode = %ld\n",(long) ((xForceScreenSaverReq *)mp)->mode);
+ BPRINTF2("\tlength = %ld\n",(long) ((xForceScreenSaverReq *)mp)->length);
+ break;
+ case X_SetPointerMapping:
+ BPRINTF1("SetPointerMapping:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xSetPointerMappingReq *)mp)->reqType);
+ BPRINTF2("\tnElts = %ld\n",(long) ((xSetPointerMappingReq *)mp)->nElts);
+ BPRINTF2("\tlength = %ld\n",(long) ((xSetPointerMappingReq *)mp)->length);
+ Show_Value_List_Req(mp,sizeof(xSetPointerMappingReq),FORMAT8);
+ break;
+ case X_GetPointerMapping:
+ BPRINTF1("GetPointerMapping:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ break;
+ case X_SetModifierMapping:
+ BPRINTF1("SetModifierMapping:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xSetModifierMappingReq *)mp)->reqType);
+ BPRINTF2("\tnumKeyPerModifier = %ld\n",(long) ((xSetModifierMappingReq *)mp)->numKeyPerModifier);
+ BPRINTF2("\tlength = %ld\n",(long) ((xSetModifierMappingReq *)mp)->length);
+ Show_Value_List_Req(mp,sizeof(xSetModifierMappingReq),FORMAT8);
+ break;
+ case X_GetModifierMapping:
+ BPRINTF1("GetModifierMapping:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ break;
+ case X_NoOperation:
+ BPRINTF1("NoOperation:\n");
+ BPRINTF2("\treqType = %ld\n",(long) ((xResourceReq *)mp)->reqType);
+ BPRINTF2("\tlength = %ld\n",(long) ((xResourceReq *)mp)->length);
+ break;
+ }
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/ShowSup.c b/xc/test/xsuite/xtest/src/libproto/ShowSup.c
new file mode 100644
index 000000000..eab73ec0c
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/ShowSup.c
@@ -0,0 +1,534 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: ShowSup.c 1.9 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: ShowSup.c 1.9 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+
+static char scratchbuf[PRTBUFSIZ]; /* ? */
+
+/*
+ intent: format value list of request for output
+ input:
+ rp - pointer to request
+ size - size of basic request type (without size of
+ value list).
+ format - one of
+ FORMAT8 - 8 bit quantity
+ FORMAT16 - 16 bit quantity
+ FORMAT32 - 32 bit quantity
+ FORMATtimecoord - TIMECOORD from protocol spec
+ FORMATrgb - RGB from protocol spec
+ FORMATpoint - POINT from protocol spec
+ FORMATrectangle - RECTANGLE from protocol spec
+ FORMATarc - ARC from protocol spec
+ FORMATcoloritem - COLORITEM from protocol spec
+ output:
+ global input:
+ side effects: value list is formatted for output in nice human-readable
+ form.
+ methods: Compute number of bytes to print: length<<2 - size.
+ Bytes per item is implicit in FORMAT type.
+ Then the number of items to print is:
+ (bytes to print) / (bytes per item)
+
+*/
+
+Show_Value_List_Req (rp, size, format)
+xReq * rp;
+int size;
+int format;
+{
+ Reset_Some();
+ switch (format) {
+ case FORMAT8: {
+ unsigned char *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned char *) ((unsigned char *) rp + size);
+ valueLen = (rp -> length << 2) - size;/* bytes extra */
+ for (i = 0; i < (valueLen); i++) {
+ Log_Some("\tvalue[%d] = 0x%x, %d\n", i, *valuePtr, *valuePtr);
+ valuePtr++;
+ }
+ }
+ break;
+ case FORMAT16: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp -> length << 2) - size;/* bytes extra */
+ for (i = 0; i < (valueLen / 2); i++) {
+ Log_Some("\tvalue[%d] = 0x%x, %d\n", i, *valuePtr, *valuePtr);
+ valuePtr++;
+ }
+ }
+ break;
+ case FORMAT32: {
+ unsigned long *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned long *) ((unsigned long) rp + size);
+ valueLen = (rp -> length << 2) - size;/* bytes extra */
+ for (i = 0; i < (valueLen / 4); i++) {
+ Log_Some("\tvalue[%d] = 0x%lx, %ld\n", i, *valuePtr, *valuePtr);
+ valuePtr++;
+ }
+ }
+ break;
+ case FORMATtimecoord: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp -> length << 2) - size;/* bytes extra */
+ for (i = 0; i < (valueLen / 8); i++) {
+ Log_Some("\ttime[%d] = %d\tx[%d] = %d\ty[%d] = %d\n", i, (unsigned long)*valuePtr, i, *(valuePtr+2), i, *(valuePtr+3));
+ valuePtr += 4;
+ }
+ }
+ break;
+ case FORMATrgb: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp -> length << 2) - size;/* bytes extra */
+ for (i = 0; i < (valueLen / 8); i++) {
+ Log_Some("\tred[%d] = %d\tgreen[%d] = %d\tblue[%d] = %d\n", i, *valuePtr, i, *(valuePtr+1), i, *(valuePtr+2));
+ valuePtr += 4;
+ }
+ }
+ break;
+ case FORMATpoint: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp -> length << 2) - size;/* bytes extra */
+ for (i = 0; i < (valueLen / 4); i++) {
+ Log_Some("\tx, y [%d] = %d, %d\n",
+ i, *valuePtr, *(valuePtr+1));
+ valuePtr += 2;
+ }
+ }
+ break;
+ case FORMATrectangle: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp -> length << 2) - size;/* bytes extra */
+ for (i = 0; i < (valueLen / 8); i++) {
+ Log_Some("\tx, y, width, height [%d] = %d, %d, %d, %d\n", i, *valuePtr, *(valuePtr+1), *(valuePtr+2), *(valuePtr+3));
+ valuePtr += 4;
+ }
+ }
+ break;
+ case FORMATarc: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp -> length << 2) - size;/* bytes extra */
+ for (i = 0; i < (valueLen / 12); i++) {
+ Log_Some("\tx, y, width, height,angle1, angle2 [%d] = %d, %d, %d, %d, %d, %d\n", i, *valuePtr, *(valuePtr+1), *(valuePtr+2), *(valuePtr+3), *(valuePtr+4), *(valuePtr+5));
+ valuePtr += 6;
+ }
+ }
+ break;
+ case FORMATcoloritem: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp -> length << 2) - size;/* bytes extra */
+ for (i = 0; i < (valueLen / 12); i++) {
+ Log_Some("\tpixel, red, grn, blue, rest [%d] = %d, %d, %d, %d, %d\n", i, (unsigned long)*valuePtr, *(valuePtr+2), *(valuePtr+3), *(valuePtr+4), *(valuePtr+5));
+ valuePtr += 6;
+ }
+ }
+ break;
+ default:
+ DEFAULT_ERROR;
+ }
+}
+
+
+/*
+ intent: format value list of reply for output
+ input:
+ rp - pointer to reply
+ size - size of basic reply type (without size of
+ value list).
+ format - one of
+ FORMAT8 - 8 bit quantity
+ FORMAT16 - 16 bit quantity
+ FORMAT32 - 32 bit quantity
+ FORMATtimecoord - TIMECOORD from protocol spec
+ FORMATrgb - RGB from protocol spec
+ FORMATpoint - POINT from protocol spec
+ FORMATrectangle - RECTANGLE from protocol spec
+ FORMATarc - ARC from protocol spec
+ FORMATcoloritem - COLORITEM from protocol spec
+ output:
+ global input:
+ side effects: value list is formatted for output in nice human-readable
+ form.
+ methods: Compute number of bytes to print: length<<2, since
+ all replies are the same length, so the length field
+ just tells you the size of the value list.
+ Bytes per item is implicit in FORMAT type.
+ Then the number of items to print is:
+ (bytes to print) / (bytes per item)
+
+
+*/
+
+Show_Value_List_Rep (rp, size, format)
+xReply *rp;
+int size;
+int format;
+{
+ Reset_Some();
+ switch(format){
+ case FORMAT8: {
+ unsigned char *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned char *) ((unsigned char *) rp + size);
+ valueLen = (rp->generic.length << 2); /* bytes extra */
+ for (i = 0; i < (valueLen); i++) {
+ Log_Some("\tvalue[%d] = 0x%x, %d\n", i, *valuePtr, *valuePtr);
+ valuePtr++;
+ }
+ }
+ break;
+ case FORMAT16: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp->generic.length << 2); /* bytes extra */
+ for (i = 0; i < (valueLen / 2); i++) {
+ Log_Some("\tvalue[%d] = 0x%x, %d\n", i, *valuePtr, *valuePtr);
+ valuePtr++;
+ }
+ }
+ break;
+ case FORMAT32: {
+ unsigned long *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned long *) ((unsigned long) rp + size);
+ valueLen = (rp->generic.length << 2); /* bytes extra */
+ for (i = 0; i < (valueLen / 4); i++) {
+ Log_Some("\tvalue[%d] = 0x%lx, %ld\n", i, *valuePtr, *valuePtr);
+ valuePtr++;
+ }
+ }
+ break;
+ case FORMATtimecoord: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp->generic.length << 2); /* bytes extra */
+ for (i = 0; i < (valueLen / 8); i++) {
+ Log_Some("\ttime[%d] = %d\tx[%d] = %d\ty[%d] = %d\n", i, (unsigned long)*valuePtr, i, *(valuePtr+2), i, *(valuePtr+3));
+ valuePtr += 4;
+ }
+ }
+ break;
+ case FORMATrgb: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp->generic.length << 2); /* bytes extra */
+ for (i = 0; i < (valueLen / 8); i++) {
+ Log_Some("\tred[%d] = %d\tgreen[%d] = %d\tblue[%d] = %d\n", i, *valuePtr, i, *(valuePtr+1), i, *(valuePtr+2));
+ valuePtr += 4;
+ }
+ }
+ break;
+ case FORMATpoint: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp->generic.length << 2); /* bytes extra */
+ for (i = 0; i < (valueLen / 4); i++) {
+ Log_Some("\tx, y [%d] = %d, %d\n",
+ i, *valuePtr, *(valuePtr+1));
+ valuePtr += 2;
+ }
+ }
+ break;
+ case FORMATrectangle: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp->generic.length << 2); /* bytes extra */
+ for (i = 0; i < (valueLen / 8); i++) {
+ Log_Some("\tx, y, width, height [%d] = %d, %d, %d, %d\n", i, *valuePtr, *(valuePtr+1), *(valuePtr+2), *(valuePtr+3));
+ valuePtr += 4;
+ }
+ }
+ break;
+ case FORMATarc: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp->generic.length << 2); /* bytes extra */
+ for (i = 0; i < (valueLen / 12); i++) {
+ Log_Some("\tx, y, width, height,angle1, angle2 [%d] = %d, %d, %d, %d, %d, %d\n", i, *valuePtr, *(valuePtr+1), *(valuePtr+2), *(valuePtr+3), *(valuePtr+4), *(valuePtr+5));
+ valuePtr += 6;
+ }
+ }
+ break;
+ case FORMATcoloritem: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp->generic.length << 2); /* bytes extra */
+ for (i = 0; i < (valueLen / 12); i++) {
+ Log_Some("\tpixel, red, grn, blue, rest [%d] = %d, %d, %d, %d, %d\n", i, (unsigned long)*valuePtr, *(valuePtr+2), *(valuePtr+3), *(valuePtr+4), *(valuePtr+5));
+ valuePtr += 6;
+ }
+ }
+ break;
+ case FORMATcharinfo: {
+ unsigned short *valuePtr;
+ int valueLen;
+ int i;
+
+ valuePtr = (unsigned short *) ((unsigned char *) rp + size);
+ valueLen = (rp->generic.length << 2); /* bytes extra */
+ for (i = 0; i < (valueLen / 12); i++) {
+ Log_Some("\tcharinfo %d, left-side-bearing = %d, right-side-bearing = %d, character-width = %d, ascent = %d, descent = %d, attributes = 0x%x\n", i, *valuePtr, *(valuePtr+1), *(valuePtr+2), *(valuePtr+3), *(valuePtr+4), *(valuePtr+5));
+ valuePtr += 6;
+ }
+ }
+ break;
+ default:
+ DEFAULT_ERROR;
+ }
+}
+
+
+/*
+ intent: display a counted string in a value list
+ input:
+ rp - pointer to reply
+ size - size of basic reply type (without size of
+ value list).
+ length - number of characters in the string
+ output:
+ global input:
+ side effects: value list is formatted for output in nice human-readable
+ form.
+ methods: would be good to think through how to optimize the way
+ it's done now, since it's a little silly.
+*/
+
+Show_String8 (rp, size, length)
+xReq * rp;
+int size;
+int length;
+{
+ unsigned char *valuePtr;
+ int i;
+
+ Reset_Some();
+ valuePtr = (unsigned char *) ((unsigned char *) rp + size);
+ Log_Some("\tvalue = \"");
+ for (i = 0; i < length; i++) {
+ Log_Some("%c", *valuePtr);
+ valuePtr++;
+ }
+ Log_Some("\"\n");
+}
+
+/*
+ intent: display a set of counted strings in a value list
+ input:
+ cp - pointer to first of counted strings
+ nstrs - number of counted strings
+ nbytes - total number of bytes passed in (not yet used) -
+ put in for possible consistency check, by adding
+ up bytes as you cycle through the strings.
+ label - string describing what each counted string is,
+ e.g. "FontName"
+ output:
+ global input:
+ side effects: value list is formatted for output in nice human-readable
+ form.
+ methods: buffer that's passed in is expected to look like:
+
+ +---+--------------+---+--------------+-----+
+ | n | n characters | m | m characters | ... |
+ +---+--------------+---+--------------+-----+
+
+ method is to copy each chunk into a temporary buffer,
+ copy \0 to end, for example
+
+ +-----------------+
+ | n characters \0 |
+ +-----------------+
+
+ and print it to scratchbuf
+
+*/
+
+void
+Show_Strs(cp, nstrs, nbytes, label)
+unsigned char *cp;
+int nstrs;
+int nbytes;
+char *label;
+{
+ int i;
+ int len;
+
+ Reset_Some();
+ for(i = 0; i < nstrs; i++) {
+ len = *cp;
+ bcopy (cp + 1, scratchbuf, len);
+ scratchbuf[len] = '\0';
+ Log_Some( "\t%s[%d] = \"%s\"\n", label, i, scratchbuf);
+ cp += len + 1;
+ }
+ return;
+}
+
+/*
+ intent: format value list of reply for output, for case where
+ there is at least one more value list following this one.
+ input:
+ rp - pointer to reply
+ nval - number of values in value list
+ size - size of basic reply type (without size of
+ value list).
+ format - one of
+ FORMATfontprop - FONTPROP from protocol spec
+ FORMATcharinfo - CHARINFO from protocol spec
+ output:
+ global input:
+ side effects: value list is formatted for output in nice human-readable
+ form.
+ methods: Bytes per item is implicit in FORMAT type.
+*/
+
+Show_Value_List_nRep (rp, nval, size, format)
+xReply *rp;
+int nval;
+int size;
+int format;
+{
+ Reset_Some();
+ switch(format){
+ case FORMATfontprop: {
+ unsigned long *valuePtr;
+ int i;
+
+ if (nval > 0) {
+ valuePtr = (unsigned long *) ((unsigned long *) rp + size);
+ for (i = 0; i < nval; i++) {
+ Log_Some("\tfontprop %d, name = 0x%x, value = 0x%x\n", i, *valuePtr, *(valuePtr+1));
+ valuePtr += 2;
+ }
+ }
+ else if (nval == 0)
+ Log_Some( "\tno fontprops\n");
+ else
+ Log_Some( "\tERROR - number of fontprops is less than 0\n");
+ }
+ break;
+ case FORMATcharinfo: {
+ unsigned short *valuePtr;
+ int i;
+
+ if (nval > 0) {
+ valuePtr = (unsigned short *) ((unsigned short *) rp + size);
+ for (i = 0; i < nval; i++) {
+ Log_Some("\tcharinfo %d, left-side-bearing = %d, right-side-bearing = %d, character-width = %d, ascent = %d, descent = %d, attributes = 0x%x\n", i, *valuePtr, *(valuePtr+1), *(valuePtr+2), *(valuePtr+3), *(valuePtr+4), *(valuePtr+5));
+ valuePtr += 6;
+ }
+ }
+ else if (nval == 0)
+ Log_Some( "\tno charinfos\n");
+ else
+ Log_Some( "\tERROR - number of charinfos is less than 0\n");
+ break;
+ default:
+ DEFAULT_ERROR;
+ }
+ }
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/TestMng.c b/xc/test/xsuite/xtest/src/libproto/TestMng.c
new file mode 100644
index 000000000..4547583e7
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/TestMng.c
@@ -0,0 +1,232 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ * ***************************************************************************
+ */
+
+#include "XstlibInt.h"
+#include "setjmp.h"
+#include "stdlib.h"
+#include "tet_api.h"
+#include "xtest.h"
+
+extern char *TestName;
+
+/*
+ * Variables set from TET execution configuration parameters.
+ */
+char *Xst_server_node = SERVER_DEF;/* the X server */
+int Xst_required_byte_sex = SEX_BOTH; /* byte sex wanted */
+int Xst_timeout_value = 10; /* seconds that Expect will wait */
+int Xst_visual_check = 0; /* seconds to delay at Visual_Check calls */
+int Xst_protocol_version = X_PROTOCOL;
+int Xst_protocol_revision = X_PROTOCOL_REVISION;
+int Xst_override = False;
+
+/*
+ * Other test-wide globals variables.
+ */
+int Xst_byte_sex = SEX_NATIVE; /* client byte sex for this connection */
+int Xst_error_count = 0; /* number of calls to Log_Error */
+int Xst_delete_count = 0; /* number of calls to Log_Del */
+int Xst_untested_count = 0; /* indicates that Untested has been called */
+char *Xst_def_font8 = "xtfont0";/* default 8-bit font to use */
+char *Xst_def_font16 = "xtfont2";/* default 16-bit font to use */
+
+static struct {
+ char *name;
+ int code;
+} Sexes[] = {
+ { "NATIVE", SEX_NATIVE } ,
+ { "native", SEX_NATIVE } ,
+ { "REVERSE", SEX_REVERSE } ,
+ { "reverse", SEX_REVERSE } ,
+ { "MSB", SEX_MSB } ,
+ { "msb", SEX_MSB } ,
+ { "LSB", SEX_LSB } ,
+ { "lsb", SEX_LSB } ,
+ { NULL, 0 }
+};
+
+int
+Required_Byte_Sex()
+{
+ return(Xst_required_byte_sex);
+}
+
+void
+Set_Byte_Sex(set_to)
+int set_to;
+{
+ Xst_byte_sex = set_to;
+}
+
+void
+Exit_OK ()
+{
+ /*
+ * This routine is called if the test reaches a conclusion and passes
+ * all path check points.
+ * Log_Close() is called to ensure there have been no other errors.
+ */
+ exit(Log_Close());
+}
+
+void
+Exit () {
+ /*
+ * This routine is called when the test wishes to exit
+ * on encountering an error.
+ * Log_Close() is called to report the number of errors.
+ */
+ if(Log_Close() != EXIT_FAILURE) {
+ report("Exit() was called when the error count was zero.");
+ tet_result(TET_UNRESOLVED);
+ }
+ exit(EXIT_FAILURE);
+}
+
+void
+Abort () {
+ if (Xst_error_count <= 0)
+ Xst_error_count++;
+ Exit();
+}
+
+void
+Delete () {
+ if (Xst_delete_count <= 0)
+ Xst_delete_count++;
+ Exit();
+}
+
+void
+Untested () {
+ if (Xst_untested_count <= 0)
+ Xst_untested_count++;
+ Exit();
+}
+
+void
+Finish(client)
+int client;
+{
+ if (Get_Test_Type(client) == SETUP)
+ Delete();
+ else
+ Abort();
+}
+
+void
+checkconfig ()
+{
+ int j;
+
+ /*
+ * Initialise X Protocol test suite variables to values obtained
+ * from TET execution configuration parameters.
+ */
+ Xst_server_node = config.display;
+ Xst_timeout_value = 10 * ((config.speedfactor<=0)?1:config.speedfactor);
+ Xst_visual_check = config.debug_visual_check;
+ Xst_protocol_version = config.protocol_version;
+ Xst_protocol_revision = config.protocol_revision;
+ Xst_override = config.debug_override_redirect;
+
+ /*
+ * The byte sex to be tested includes, by default, both cases
+ * SEX_NATIVE and SEX_REVERSE. So each test purpose makes a separate
+ * connection in each mode.
+ */
+ Xst_required_byte_sex = SEX_BOTH;
+
+ /*
+ * For debugging purposes, just one mode can be requested by setting
+ * XT_DEBUG_BYTE_SEX to NATIVE, REVERSE, MSB or LSB.
+ */
+ if (config.debug_byte_sex != NULL)
+ for (j = 0; Sexes[j].name != NULL; j++) {
+ if (strcmp (Sexes[j].name, config.debug_byte_sex) != 0)
+ continue;
+ Xst_required_byte_sex = Sexes[j].code;
+ }
+
+ /*
+ * To keep the test purposes simple, the SEX_MSB and SEX_LSB cases
+ * are here mapped onto either SEX_NATIVE or SEX_REVERSE.
+ */
+ if(Xst_required_byte_sex == SEX_MSB)
+ Xst_required_byte_sex = native_byte_sex() ? SEX_NATIVE : SEX_REVERSE;
+ if(Xst_required_byte_sex == SEX_LSB)
+ Xst_required_byte_sex = native_byte_sex() ? SEX_REVERSE : SEX_NATIVE;
+}
+
+void
+testfunc(func)
+void (*func)();
+{
+int pass = 0;
+int fail = 0;
+
+ if(Required_Byte_Sex() != SEX_REVERSE) {
+ Set_Byte_Sex(SEX_NATIVE);
+ Log_Trace("About to test with Native byte-sex (%s)\n",
+ native_byte_sex() ? "MSB" : "LSB");
+ if(tet_fork(func, TET_NULLFP, 0, 0xFF) == EXIT_SUCCESS)
+ CHECK;
+ else
+ fail++;
+ } else
+ CHECK;
+
+ if(Required_Byte_Sex() != SEX_NATIVE) {
+ Set_Byte_Sex(SEX_REVERSE);
+ Log_Trace("About to test with Reverse byte-sex (%s)\n",
+ native_byte_sex() ? "LSB" : "MSB");
+ if(tet_fork(func, TET_NULLFP, 0, 0xFF) == EXIT_SUCCESS)
+ CHECK;
+ else
+ fail++;
+ } else
+ CHECK;
+
+ if (fail == 0)
+ CHECKPASS(2);
+ /* only expect path-check to succeed if no failures occurred */
+ /* if func() didn't register the failure then the api will complain. */
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/TestSup.c b/xc/test/xsuite/xtest/src/libproto/TestSup.c
new file mode 100644
index 000000000..9a16b713b
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/TestSup.c
@@ -0,0 +1,167 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: TestSup.c 1.9 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: TestSup.c 1.9 89/04/17 $";
+#endif
+
+#include <stdio.h>
+#include "Xstlib.h"
+
+void
+Map_Window(client,win) /* use this routine only when exposure events are */
+ int client; /* being accepted */
+ Window win;
+{
+ xResourceReq *mwr;
+ xEvent *ev;
+
+ mwr = (xResourceReq *) Make_Req(client, X_MapWindow);
+ mwr->id = win;
+ Send_Req(client, (xReq *) mwr);
+ Log_Trace("sent default MapWindow\n");
+
+ if ((ev = (xEvent *) Expect_Event(client,Expose)) == NULL) {
+ Log_Err("failed to receive an Expose event\n");
+ Exit();
+ } else {
+ Log_Trace("received an Expose event\n");
+ /* do any event checking here */
+ Free_Event(ev);
+ }
+ Expect_Nothing(client);
+ Free_Req(mwr);
+}
+
+
+void
+Map_a_Window(client, win) /* use when no expose events are expected */
+ int client;
+ Window win;
+{
+ xResourceReq *req;
+
+ req = (xResourceReq *) Make_Req(client, X_MapWindow);
+ req->id = win;
+ Send_Req(client, (xReq *) req);
+ Log_Trace("client %d MapWindow request on window %d\n", client, win);
+ (void) Expect_Nothing(client);
+ Free_Req(req);
+}
+
+void
+Unmap_Window(client, win)
+ int client;
+ Window win;
+{
+ xResourceReq *req;
+ xEvent *ev;
+
+ req = (xResourceReq *) Make_Req(client, X_UnmapWindow);
+ req->id = win;
+ Send_Req(client, (xReq *) req);
+ Log_Trace("client %d UnmapWindow request on window %d\n", client, win);
+
+ if ((ev = (xEvent *) Expect_Event(client,Expose)) == NULL) {
+ Log_Err("failed to receive an Expose event\n");
+ Exit();
+ } else {
+ Log_Trace("received an Expose event\n");
+ /* do any event checking here */
+ Free_Event(ev);
+ }
+ (void) Expect_Nothing(client);
+ Free_Req(req);
+}
+
+void
+Unmap_a_Window(client, win)
+ int client;
+ Window win;
+{
+ xResourceReq *req;
+
+ req = (xResourceReq *) Make_Req(client, X_UnmapWindow);
+ req->id = win;
+ Send_Req(client, (xReq *) req);
+ Log_Trace("client %d UnmapWindow request on window %d\n", client, win);
+ (void) Expect_Nothing(client);
+ Free_Req(req);
+}
+
+void
+Set_Event_Mask(client, win, mask)
+ int client;
+ Window win;
+ unsigned long mask;
+{
+ xChangeWindowAttributesReq *cwar;
+
+ cwar = (xChangeWindowAttributesReq *) Make_Req(client, X_ChangeWindowAttributes);
+ cwar = (xChangeWindowAttributesReq *) Clear_Masked_Value(cwar);
+ cwar = (xChangeWindowAttributesReq *) Add_Masked_Value(cwar, CWEventMask, mask);
+ cwar->window = win;
+ Send_Req(client, (xReq *) cwar);
+ Log_Trace("client %d sent ChangeWindowAttributes setting event mask for\n", client);
+ Log_Trace(" window %d to 0x%x\n", win, mask);
+
+ Expect_Nothing(client);
+ Free_Req(cwar);
+}
+
+void
+Destroy_Window(client, win)
+ int client;
+ Window win;
+{
+ xResourceReq *req;
+
+ req = (xResourceReq *) Make_Req(client, X_DestroyWindow);
+ req->id = win;
+ Send_Req(client, (xReq *) req);
+ Log_Trace("client %d DestroyWindow request on window %d\n", client, win);
+ (void) Expect_Nothing(client);
+ Free_Req(req);
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/Timer.c b/xc/test/xsuite/xtest/src/libproto/Timer.c
new file mode 100644
index 000000000..2bca0845a
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/Timer.c
@@ -0,0 +1,284 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: Timer.c 1.8 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[] = "$Header: Timer.c 1.8 89/04/17 $";
+#endif
+
+/* UNIX/DYNIX library for X Server tests.
+ *
+ * Contains routines useful for isolating operating system dependencies.
+ * DYNIX routines should be identical to UNIX in general. VMS or other
+ * operating systems will need an equivalent library.
+ * Set_Timer, Get_Timer, and Stop_Timer handle a set of interval timers.
+ * NOTE: The implementation of these timers uses the interval timer and
+ * SIGALRM. They are thus not available for other purposes, such as sleep(3).
+ */
+
+#include "XstlibInt.h"
+#include <signal.h>
+
+/*
+ * Data structures and variables
+ */
+
+/*
+ * "head" is the head of a linked list of timers. it contains the "current"
+ * time and points to the first timer in the list. "Current" time is zero
+ * until the first timer is set, at which time it starts getting incremented
+ * by 1 every second. The list is kept in order, with the timer having the
+ * least time left to go being first after the head.
+ */
+
+static struct timer {
+ int timer; /* timer id */
+ int time; /* time until expiration */
+ void (*routine) (); /* routine to call at expiration */
+ struct timer *next; /* keeps a linked list in expiration order */
+} head;
+
+static init = 0; /* Have we set the ALRM signal handler? */
+static inwork = 0; /* Are we fussing with the queue? */
+
+/*ARGSUSED*/
+static void
+dispatch (sig)
+int sig;
+{
+ struct timer *next = NULL;
+
+ head.time++;
+ signal(SIGALRM,dispatch); /* need to re-establish handler */
+
+ /* We'd rather expire this timer a second late than be messing with the
+ queue while another routine is also */
+ if ((inwork) || (head.next == NULL)) {
+ alarm(1); /* make sure we wake again */
+ return;
+ }
+
+ next = head.next;
+ while ((next != NULL) && (head.time >= next -> time)) {
+ head.next = next -> next; /* delink this entry */
+ (*(next -> routine)) ();
+ free ((char *) next);
+ next = head.next;
+ }
+ if (head.next != NULL) {
+ alarm(1);
+ }
+}
+
+/*
+ * This function sets the signal handler for SIGALRM signals.
+ * This is done on initialisation in Set_Timer(), and
+ * should also be called directly after tet_fork() when it has
+ * already been done BEFORE the fork(). This only affects
+ * test cases which use tpfontstartup() at present.
+ */
+
+int
+Set_Init_Timer()
+{
+ Log_Debug("Set_Init_Timer called");
+ if (signal (SIGALRM, dispatch) == (void (*)())-1) {
+ Log_Del ("SIGNAL FAILED in Set_Timer, errno=%d\n", errno);
+ return (-1);
+ }
+ head.next = NULL;
+ return(0);
+}
+
+int
+Set_Timer (timer, time, routine)
+ int timer; /* unique non-zero timer id */
+ int time; /* number of seconds until expiration */
+ void (*routine) (); /* routine to call when the timer expires */
+{
+ struct timer *prev = NULL; /* pointer to previous timer on list */
+ struct timer *next = NULL; /* pointer to next timer on list */
+
+ if (timer <= 0) { /* non-zero, positive ids only */
+ return (-1);
+ }
+
+ /* initialization: set signal handler, nothing on the list */
+
+ Log_Debug("Set_Timer called");
+ if (!init) {
+ if(Set_Init_Timer() != 0)
+ return(-1);
+ init = 1;
+ }
+
+ time += head.time; /* assumes head of the list has the "current" time */
+
+ if (head.next == NULL) {
+ alarm(1); /* start ticking */
+ }
+
+ inwork = 1; /* let the signal handler know we're
+ fussing */
+
+ prev = &head;
+ next = prev -> next;
+
+ /* find this timer in the list (next gets NULL if not found) */
+
+ while ((next != NULL) &&
+ (next -> timer != timer)) {/* existing entry for this id? */
+ prev = next;
+ next = next -> next;
+ }
+
+ /* if found, take it out of the list */
+
+ if (next != NULL) { /* found an existing */
+ prev -> next = next -> next;/* unlink this entry */
+ }
+ else { /* need a new node */
+ if ((next = (struct timer *) Xstmalloc (sizeof (struct timer))) == NULL) {
+ Log_Del ("MALLOC FAILED in Set_Timer, errno=%d\n", errno);
+ inwork = 0;
+ return (-1);
+ }
+ }
+
+/*
+ * Now find where this entry should be in time order
+ */
+
+ prev = &head;
+ while ((prev -> next != NULL) && ((prev -> next) -> time < time)) {
+ prev = prev -> next;
+ }
+/*
+ * Link it in here
+ */
+ next -> next = prev -> next;
+ prev -> next = next;
+ next -> timer = timer;
+ next -> time = time;
+ next -> routine = routine;
+ inwork = 0;
+ return (0);
+}
+
+int
+Get_Timer (timer)
+int timer;
+{
+ struct timer *prev;
+ struct timer *next;
+
+ prev = &head;
+ next = prev -> next;
+
+ while ((next != NULL) && (next -> timer != timer)) {
+ prev = next;
+ next = prev -> next;
+ }
+
+ if (next != NULL) {
+ return (next -> time - head.time);
+ }
+ else {
+ return (-1);
+ }
+}
+
+int
+ Stop_Timer (timer)
+int timer;
+{
+ struct timer *prev = NULL;
+ struct timer *next = NULL;
+
+ inwork = 1;
+
+ prev = &head;
+ next = prev -> next;
+ while ((next != NULL) &&
+ (next -> timer != timer)) {/* existing entry for this id? */
+ prev = next;
+ next = next -> next;
+ }
+
+ if (next == NULL) {
+ return (-1);
+ }
+
+ prev -> next = next -> next; /* delink this entry */
+ free ((char *) next);
+
+ if (head.next == NULL) {
+ alarm(0); /* stop ticking */
+ }
+ inwork = 0;
+ return (0);
+}
+
+
+static int ringring;
+
+static void
+vis_chk_exp()
+{
+ ringring = 1;
+}
+
+void
+Visual_Check()
+{
+ if (Xst_visual_check <= 0)
+ return;
+
+ if (Set_Timer(VISUAL_CHECK_TIMER, Xst_visual_check, vis_chk_exp) < 0)
+ return;
+
+ ringring = 0;
+ while (!ringring)
+ pause();
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/Utils.c b/xc/test/xsuite/xtest/src/libproto/Utils.c
new file mode 100644
index 000000000..c88d8d8a4
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/Utils.c
@@ -0,0 +1,149 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: Utils.c 1.4 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: Utils.c 1.4 89/04/17 $";
+#endif
+
+/* UNIX/DYNIX library for X Server tests.
+ *
+ * Contains routines useful for isolating operating system dependencies.
+ * DYNIX routines should be identical to UNIX in general. VMS or other
+ * operating systems will need an equivalent library.
+ *
+ */
+
+#include "XstlibInt.h"
+#include <signal.h>
+
+char * asctime();
+
+
+/*
+ * Return a character string with the current date and time.
+ */
+
+char *
+Get_Date()
+{
+ struct tm *tp;
+ struct tm *localtime();
+ time_t tim;
+ static char buf[26];
+
+ tim = time(0);
+ tp = localtime(&tim);
+ (void) strcpy(buf, asctime(tp));
+ buf[24] = '\0';
+ return(buf);
+}
+
+
+/*
+ * These are routines found in BSD and not found in SYSV.
+ */
+
+void
+bcopy (b1, b2, length)
+register unsigned char *b1, *b2;
+register length;
+{
+ if (b1 < b2) {
+ b2 += length;
+ b1 += length;
+ while (length--) {
+ *--b2 = *--b1;
+ }
+ }
+ else {
+ while (length--) {
+ *b2++ = *b1++;
+ }
+ }
+}
+
+bcmp (b1, b2, length)
+register unsigned char *b1, *b2;
+register length;
+{
+ while (length--) {
+ if (*b1++ != *b2++) return 1;
+ }
+ return 0;
+}
+
+void
+bzero (b, length)
+register unsigned char *b;
+register length;
+{
+ while (length--) {
+ *b++ = '\0';
+ }
+}
+
+/* Find the first set bit
+ * i.e. least signifigant 1 bit:
+ * 0 => 0
+ * 1 => 1
+ * 2 => 2
+ * 3 => 1
+ * 4 => 3
+ */
+
+int
+ffs(mask)
+unsigned int mask;
+{
+ register i;
+
+ if ( ! mask ) return 0;
+ i = 1;
+ while (! (mask & 1)) {
+ i++;
+ mask = mask >> 1;
+ }
+ return i;
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/ValListMng.c b/xc/test/xsuite/xtest/src/libproto/ValListMng.c
new file mode 100644
index 000000000..0851ca081
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/ValListMng.c
@@ -0,0 +1,1095 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * Purpose: routines to edit value lists in requests
+ *
+ *
+ * $Log: ValueListMng.c,v $
+ * Revision 1.6 89/04/17 14:13:49 lizh
+ * *** empty log message ***
+ *
+ *
+ *
+ *
+ */
+
+/*
+ * $Copyright: $
+ * Copyright (c) 1984, 1985, 1986, 1987, 1988, 1989
+ * Sequent Computer Systems, Inc. All rights reserved.
+ *
+ * This software is furnished under a license and may be used
+ * only in accordance with the terms of that license and with the
+ * inclusion of the above copyright notice. This software may not
+ * be provided or otherwise made available to, or used by, any
+ * other person. No title to or ownership of the software is
+ * hereby transferred.
+ */
+
+#include "XstlibInt.h"
+#include "DataMove.h"
+
+static int Ones();
+static xReq * _Add_Masked_Value();
+static xReq * _Del_Masked_Value();
+
+/*
+ * Routine: Clear_Masked_Value - clears mask and deallocates value list
+ *
+ * Input: reqp - pointer to original request
+ *
+ * Output:
+ *
+ * Returns: pointer to modified request
+ *
+ * Globals used:
+ *
+ * Side Effects: invalidates pointer to original request
+ *
+ * Methods:
+ *
+ */
+
+xReq *
+Clear_Masked_Value (reqp)
+xReq * reqp;
+{
+ unsigned long nominal_size;
+
+ switch (reqp -> reqType) {
+ case X_CreateWindow:
+ nominal_size = sizeof (xCreateWindowReq);
+ ((xCreateWindowReq *) reqp) -> length = nominal_size / 4;
+ ((xCreateWindowReq *) reqp) -> mask = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ChangeWindowAttributes:
+ nominal_size = sizeof (xChangeWindowAttributesReq);
+ ((xChangeWindowAttributesReq *) reqp) -> length = nominal_size / 4;
+ ((xChangeWindowAttributesReq *) reqp) -> valueMask = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ConfigureWindow:
+ nominal_size = sizeof (xConfigureWindowReq);
+ ((xConfigureWindowReq *) reqp) -> length = nominal_size / 4;
+ ((xConfigureWindowReq *) reqp) -> mask = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_CreateGC:
+ nominal_size = sizeof (xCreateGCReq);
+ ((xCreateGCReq *) reqp) -> length = nominal_size / 4;
+ ((xCreateGCReq *) reqp) -> mask = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ChangeGC:
+ nominal_size = sizeof (xChangeGCReq);
+ ((xChangeGCReq *) reqp) -> length = nominal_size / 4;
+ ((xChangeGCReq *) reqp) -> mask = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ChangeKeyboardControl:
+ nominal_size = sizeof (xChangeKeyboardControlReq);
+ ((xChangeKeyboardControlReq *) reqp) -> length = nominal_size / 4;
+ ((xChangeKeyboardControlReq *) reqp) -> mask = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ default:
+ DEFAULT_ERROR;
+ break;
+ }
+ return(reqp);
+}
+
+/*
+ * Routine: Add_Masked_Value - appends a value to a value list
+ *
+ * Input: reqp - pointer to original request
+ * mask - mask with one bit set to indicate which value to add
+ * value - the value to add
+ *
+ * Output:
+ *
+ * Returns: pointer to modified request
+ *
+ * Globals used:
+ *
+ * Side Effects: invalidates pointer to original request
+ * ORs mask into mask field in request
+ *
+ * Methods:
+ *
+ */
+
+xReq *
+Add_Masked_Value (reqp, mask, value)
+xReq * reqp;
+unsigned long mask;
+unsigned long value;
+{
+ unsigned long nominal_size;
+
+ if (Ones(mask) != 1) {
+ Log_Msg("Add_Masked_Value called with bad mask = 0x%08x\n",mask);
+ Abort();
+ }
+
+ switch (reqp -> reqType) {
+ case X_CreateWindow:
+ nominal_size = sizeof (xCreateWindowReq);
+ reqp = _Add_Masked_Value(reqp,nominal_size,
+ &((xCreateWindowReq *)reqp)->mask, NULL,
+ mask,value);
+ break;
+ case X_ChangeWindowAttributes:
+ nominal_size = sizeof (xChangeWindowAttributesReq);
+ reqp = _Add_Masked_Value(reqp,nominal_size,
+ &((xChangeWindowAttributesReq *)reqp)->valueMask, NULL,
+ mask,value);
+ break;
+ case X_ConfigureWindow: /* 16-bit mask! */
+ nominal_size = sizeof (xConfigureWindowReq);
+ reqp = _Add_Masked_Value(reqp,nominal_size,
+ NULL, &((xConfigureWindowReq *)reqp)->mask,
+ mask,value);
+ break;
+ case X_CreateGC:
+ nominal_size = sizeof (xCreateGCReq);
+ reqp = _Add_Masked_Value(reqp,nominal_size,
+ &((xCreateGCReq *)reqp)->mask, NULL,
+ mask,value);
+ break;
+ case X_ChangeGC:
+ nominal_size = sizeof (xChangeGCReq);
+ reqp = _Add_Masked_Value(reqp,nominal_size,
+ &((xChangeGCReq *)reqp)->mask, NULL,
+ mask,value);
+ break;
+ case X_ChangeKeyboardControl:
+ nominal_size = sizeof (xChangeKeyboardControlReq);
+ reqp = _Add_Masked_Value(reqp,nominal_size,
+ &((xChangeKeyboardControlReq *)reqp)->mask, NULL,
+ mask,value);
+ break;
+ default:
+ DEFAULT_ERROR;
+ break;
+ }
+ return(reqp);
+}
+
+/*
+ * Routine: _Add_Masked_Value - generic routine to add a single value
+ * to any request
+ *
+ * Input: reqp - pointer to request
+ * nominal_size - size of the basic request (without value list)
+ * rmaskp32 - pointer to 32 bit mask of interest in request
+ * rmaskp16 - pointer to 16 bit mask in interest in request
+ * mask - mask with one bit set to indicate which value to add
+ * value - the value to add
+ *
+ * Output:
+ *
+ * Returns: pointer to modified request
+ *
+ * Globals used:
+ *
+ * Side Effects: invalidates pointer to original request
+ *
+ * Methods: note: can only pass in ONE OF rmaskp32, rmaskp16
+ *
+ */
+
+static xReq *
+_Add_Masked_Value(reqp,nominal_size,rmaskp32,rmaskp16,mask,value)
+xReq *reqp;
+unsigned long nominal_size;
+unsigned long *rmaskp32;
+unsigned short *rmaskp16;
+unsigned long mask;
+unsigned long value;
+{
+ unsigned long rmask;
+ unsigned long new_size;
+ unsigned long *valuePtr;
+ int before; /* number of values before this one */
+ int after; /* number of values after this one */
+ int thisindex; /* index of this mask value */
+ int numvals; /* total number of values */
+ unsigned long bmask; /* mask for the values before */
+ unsigned long amask; /* mask for the values after */
+
+ rmask = (rmaskp32 != NULL) ? *rmaskp32 : (unsigned long) *rmaskp16;
+
+ numvals = Ones(rmask); /* how many are there already? */
+ thisindex = ffs(mask);
+
+ bmask = mask - 1;
+ before = Ones(rmask&bmask);
+
+ amask = ~(mask | bmask);
+ after = Ones(rmask&amask);
+
+ if ((rmask&mask)==0) { /* this mask not there now */
+ reqp->length += 1; /* we're adding a new value */
+ if (rmaskp32 != NULL) *rmaskp32 |= mask;
+ else *rmaskp16 |= (unsigned short) mask;
+
+ reqp = (xReq *) Xstrealloc((char *)reqp,reqp->length<<2);
+
+ valuePtr = (unsigned long *) (((char *) reqp) + nominal_size);
+ valuePtr += before; /* index down to this position */
+ bcopy((char *)valuePtr,(char *)(valuePtr+1),(after<<2));
+ }
+
+ valuePtr = (unsigned long *) (((char *) reqp) + nominal_size);
+ valuePtr += before; /* index down to this position */
+ *valuePtr = value;
+ return(reqp);
+}
+
+/*
+ * Routine: Del_Masked_Value - deletes a value from a value list
+ *
+ * Input: reqp - pointer to original request
+ * mask - mask with one bit set to indicate which value to delete
+ *
+ * Output:
+ *
+ * Returns: pointer to modified request
+ *
+ * Globals used:
+ *
+ * Side Effects: invalidates pointer to original request
+ *
+ * Methods:
+ *
+ */
+
+xReq *
+Del_Masked_Value (reqp, mask)
+xReq * reqp;
+unsigned long mask;
+{
+ unsigned long nominal_size;
+
+ if (Ones(mask) != 1) {
+ Log_Msg("Del_Masked_Value called with bad mask = 0x%08x\n",mask);
+ Abort();
+ }
+
+ switch (reqp -> reqType) {
+ case X_CreateWindow:
+ nominal_size = sizeof (xCreateWindowReq);
+ _Del_Masked_Value(reqp,nominal_size,
+ &((xCreateWindowReq *)reqp)->mask, NULL, mask);
+ break;
+ case X_ChangeWindowAttributes:
+ nominal_size = sizeof (xChangeWindowAttributesReq);
+ _Del_Masked_Value(reqp,nominal_size,
+ &((xChangeWindowAttributesReq *)reqp)->valueMask, NULL, mask);
+ break;
+ case X_ConfigureWindow: /* 16-bit mask! */
+ nominal_size = sizeof (xConfigureWindowReq);
+ _Del_Masked_Value(reqp,nominal_size,
+ NULL, &((xConfigureWindowReq *)reqp)->mask, mask);
+ break;
+ case X_CreateGC:
+ nominal_size = sizeof (xCreateGCReq);
+ _Del_Masked_Value(reqp,nominal_size,
+ &((xCreateGCReq *)reqp)->mask, NULL, mask);
+ break;
+ case X_ChangeGC:
+ nominal_size = sizeof (xChangeGCReq);
+ _Del_Masked_Value(reqp,nominal_size,
+ &((xChangeGCReq *)reqp)->mask, NULL, mask);
+ break;
+ case X_ChangeKeyboardControl:
+ nominal_size = sizeof (xChangeKeyboardControlReq);
+ _Del_Masked_Value(reqp,nominal_size,
+ &((xChangeKeyboardControlReq *)reqp)->mask, NULL, mask);
+ break;
+ default:
+ DEFAULT_ERROR;
+ break;
+ }
+ return(reqp);
+}
+
+/*
+ * Routine: _Del_Masked_Value - generic routine to delete a single value
+ * from any request
+ *
+ * Input: reqp - pointer to original request
+ * nominal_size - size of the basic request (without value list)
+ * rmaskp32 - pointer to 32 bit mask of interest in request
+ * rmaskp16 - pointer to 16 bit mask of interest in request
+ * mask - mask with one bit set to indicate which value to delete
+ *
+ * Output:
+ *
+ * Returns: pointer to modified request
+ *
+ * Globals used:
+ *
+ * Side Effects: invalidates pointer to original request
+ *
+ * Methods: note: can only pass in ONE OF rmaskp32, rmaskp16
+ *
+ */
+
+static xReq *
+_Del_Masked_Value(reqp,nominal_size,rmaskp32,rmaskp16,mask)
+xReq *reqp;
+unsigned long nominal_size;
+unsigned long *rmaskp32;
+unsigned short *rmaskp16;
+unsigned long mask;
+{
+ unsigned long rmask;
+ unsigned long new_size;
+ unsigned long *valuePtr;
+ int before; /* number of values before this one */
+ int after; /* number of values after this one */
+ int thisindex; /* index of this mask value */
+ int numvals; /* total number of values */
+ unsigned long bmask; /* mask for the values before */
+ unsigned long amask; /* mask for the values after */
+
+ rmask = (rmaskp32 != NULL) ? *rmaskp32 : (unsigned long) *rmaskp16;
+
+ if ((rmask&mask)==0) { /* not there to zap */
+ return(reqp);
+ }
+
+ numvals = Ones(rmask); /* how many are there already? */
+ thisindex = ffs(mask);
+
+ bmask = mask - 1;
+ before = Ones(rmask&bmask);
+
+ amask = ~(mask | bmask);
+ after = Ones(rmask&amask);
+
+ reqp->length -= 1; /* we're deleting a value */
+ if (rmaskp32 != NULL) *rmaskp32 &= ~mask;
+ else *rmaskp16 &= ~((unsigned short) mask);
+
+ valuePtr = (unsigned long *) (((char *) reqp) + nominal_size);
+ valuePtr += before; /* index down to this position */
+ bcopy((char *)(valuePtr+1),(char *)valuePtr,(after<<2));
+ reqp = (xReq *) Xstrealloc((char *)reqp,reqp->length<<2);
+ return(reqp);
+}
+
+/*
+ * Routine: Clear_Counted_Value - clears count of values in list and
+ * deallocates value list
+ *
+ * Input: reqp - pointer to original request
+ *
+ * Output:
+ *
+ * Returns: pointer to modified request
+ *
+ * Globals used:
+ *
+ * Side Effects: invalidates pointer to original request
+ *
+ * Methods:
+ *
+ */
+
+xReq *
+Clear_Counted_Value (reqp)
+xReq * reqp;
+{
+ unsigned long nominal_size;
+
+ switch (reqp -> reqType) {
+ case X_InternAtom:
+ nominal_size = sizeof (xInternAtomReq);
+ ((xInternAtomReq *) reqp) -> length = nominal_size / 4;
+ ((xInternAtomReq *) reqp) -> nbytes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ChangeProperty:
+ nominal_size = sizeof (xChangePropertyReq);
+ ((xChangePropertyReq *) reqp) -> length = nominal_size / 4;
+ ((xChangePropertyReq *) reqp) -> nUnits = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_OpenFont:
+ nominal_size = sizeof (xOpenFontReq);
+ ((xOpenFontReq *) reqp) -> length = nominal_size / 4;
+ ((xOpenFontReq *) reqp) -> nbytes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_QueryTextExtents:
+ nominal_size = sizeof (xQueryTextExtentsReq);
+ ((xQueryTextExtentsReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ListFonts:
+ nominal_size = sizeof (xListFontsReq);
+ ((xListFontsReq *) reqp) -> length = nominal_size / 4;
+ ((xListFontsReq *) reqp) -> nbytes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ListFontsWithInfo:
+ nominal_size = sizeof (xListFontsWithInfoReq);
+ ((xListFontsWithInfoReq *) reqp) -> length = nominal_size / 4;
+ ((xListFontsWithInfoReq *) reqp) -> nbytes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_SetFontPath:
+ nominal_size = sizeof (xSetFontPathReq);
+ ((xSetFontPathReq *) reqp) -> length = nominal_size / 4;
+ ((xSetFontPathReq *) reqp) -> nFonts = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_SetDashes:
+ nominal_size = sizeof (xSetDashesReq);
+ ((xSetDashesReq *) reqp) -> length = nominal_size / 4;
+ ((xSetDashesReq *) reqp) -> nDashes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_SetClipRectangles:
+ nominal_size = sizeof (xSetClipRectanglesReq);
+ ((xSetClipRectanglesReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyPoint:
+ nominal_size = sizeof (xPolyPointReq);
+ ((xPolyPointReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyLine:
+ nominal_size = sizeof (xPolyLineReq);
+ ((xPolyLineReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolySegment:
+ nominal_size = sizeof (xPolySegmentReq);
+ ((xPolySegmentReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyRectangle:
+ nominal_size = sizeof (xPolyRectangleReq);
+ ((xPolyRectangleReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyArc:
+ nominal_size = sizeof (xPolyArcReq);
+ ((xPolyArcReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_FillPoly:
+ nominal_size = sizeof (xFillPolyReq);
+ ((xFillPolyReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyFillRectangle:
+ nominal_size = sizeof (xPolyFillRectangleReq);
+ ((xPolyFillRectangleReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyFillArc:
+ nominal_size = sizeof (xPolyFillArcReq);
+ ((xPolyFillArcReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PutImage:
+ nominal_size = sizeof (xPutImageReq);
+ ((xPutImageReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyText8:
+ nominal_size = sizeof (xPolyText8Req);
+ ((xPolyText8Req *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyText16:
+ nominal_size = sizeof (xPolyText16Req);
+ ((xPolyText16Req *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ImageText8:
+ nominal_size = sizeof (xImageText8Req);
+ ((xImageText8Req *) reqp) -> length = nominal_size / 4;
+ ((xImageText8Req *) reqp) -> nChars = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ImageText16:
+ nominal_size = sizeof (xImageText16Req);
+ ((xImageText16Req *) reqp) -> length = nominal_size / 4;
+ ((xImageText16Req *) reqp) -> nChars = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_AllocNamedColor:
+ nominal_size = sizeof (xAllocNamedColorReq);
+ ((xAllocNamedColorReq *) reqp) -> length = nominal_size / 4;
+ ((xAllocNamedColorReq *) reqp) -> nbytes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_FreeColors:
+ nominal_size = sizeof (xFreeColorsReq);
+ ((xFreeColorsReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_StoreColors:
+ nominal_size = sizeof (xStoreColorsReq);
+ ((xStoreColorsReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_StoreNamedColor:
+ nominal_size = sizeof (xStoreNamedColorReq);
+ ((xStoreNamedColorReq *) reqp) -> length = nominal_size / 4;
+ ((xStoreNamedColorReq *) reqp) -> nbytes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_QueryColors:
+ nominal_size = sizeof (xQueryColorsReq);
+ ((xQueryColorsReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_LookupColor:
+ nominal_size = sizeof (xLookupColorReq);
+ ((xLookupColorReq *) reqp) -> length = nominal_size / 4;
+ ((xLookupColorReq *) reqp) -> nbytes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_QueryExtension:
+ nominal_size = sizeof (xQueryExtensionReq);
+ ((xQueryExtensionReq *) reqp) -> length = nominal_size / 4;
+ ((xQueryExtensionReq *) reqp) -> nbytes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ChangeKeyboardMapping:
+ nominal_size = sizeof (xChangeKeyboardMappingReq);
+ ((xChangeKeyboardMappingReq *) reqp) -> length = nominal_size / 4;
+ ((xChangeKeyboardMappingReq *) reqp) -> keyCodes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ChangeHosts:
+ nominal_size = sizeof (xChangeHostsReq);
+ ((xChangeHostsReq *) reqp) -> length = nominal_size / 4;
+ ((xChangeHostsReq *) reqp) -> hostLength = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_RotateProperties:
+ nominal_size = sizeof (xRotatePropertiesReq);
+ ((xRotatePropertiesReq *) reqp) -> length = nominal_size / 4;
+ ((xRotatePropertiesReq *) reqp) -> nAtoms = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_SetPointerMapping:
+ nominal_size = sizeof (xSetPointerMappingReq);
+ ((xSetPointerMappingReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_SetModifierMapping:
+ nominal_size = sizeof (xSetModifierMappingReq);
+ ((xSetModifierMappingReq *) reqp) -> length = nominal_size / 4;
+ ((xSetModifierMappingReq *) reqp) -> numKeyPerModifier = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ default:
+ DEFAULT_ERROR;
+ break;
+ }
+ return(reqp);
+}
+
+
+/*
+ * Routine: Add_Counted_Value - increments count of values in list and
+ * adds one value to list
+ *
+ * Input: reqp - pointer to original request
+ * value - the value to add
+ *
+ * Output:
+ *
+ * Returns: pointer to modified request
+ *
+ * Globals used:
+ *
+ * Side Effects: invalidates pointer to original request
+ *
+ * Methods:
+ *
+ */
+
+xReq *
+Add_Counted_Value (reqp, value)
+xReq * reqp;
+unsigned long value;
+{
+ unsigned long nominal_size;
+ unsigned char *valuePtr;
+ unsigned long valueLen;
+
+
+ switch (reqp -> reqType) {
+ case X_InternAtom:
+ nominal_size = sizeof (xInternAtomReq);
+ ((xInternAtomReq *) reqp) -> nbytes++;
+ valueLen = ((xInternAtomReq *) reqp)->nbytes;
+
+ if (padup(nominal_size+valueLen) >
+ (reqp->length<<2)) { /* this causes overflow */
+ reqp->length++;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, reqp->length<<2);
+ }
+
+ valuePtr = (unsigned char *) (((char *) reqp) + nominal_size);
+ valuePtr += ((((xInternAtomReq *) reqp)->nbytes)-1);
+ *valuePtr = (unsigned char) value;
+ break;
+ case X_ChangeProperty:
+ nominal_size = sizeof (xChangePropertyReq);
+ ((xChangePropertyReq *) reqp) -> nUnits++;
+ valueLen = ((xChangePropertyReq *) reqp)->nUnits *
+ (((xChangePropertyReq *) reqp)->format/8);
+
+ if (padup(nominal_size+valueLen) >
+ (reqp->length<<2)) { /* this causes overflow */
+ reqp->length++;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, reqp->length<<2);
+ }
+
+ valuePtr = (unsigned char *) (((char *) reqp) + nominal_size);
+ valuePtr += (valueLen - (((xChangePropertyReq *)reqp)->format/8));
+ switch(((xChangePropertyReq *)reqp)->format) {
+ case 8:
+ Set_Value1(&valuePtr,value);
+ break;
+ case 16:
+ Set_Value2(&valuePtr,value);
+ break;
+ case 32:
+ Set_Value4(&valuePtr,value);
+ break;
+ }
+ break;
+ case X_OpenFont:
+ nominal_size = sizeof (xOpenFontReq);
+ ((xOpenFontReq *) reqp) -> nbytes++;
+ valueLen = ((xOpenFontReq *) reqp)->nbytes;
+ if (padup(nominal_size+valueLen) >
+ (reqp->length<<2)) { /* this causes overflow */
+ reqp->length++;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, reqp->length<<2);
+ }
+
+ valuePtr = (unsigned char *) (((char *) reqp) + nominal_size);
+ valuePtr += (valueLen - 1);
+ Set_Value1(&valuePtr,value);
+ break;
+ case X_QueryTextExtents:
+ nominal_size = sizeof (xQueryTextExtentsReq);
+ valueLen = (reqp->length<<2) -
+ (((xQueryTextExtentsReq *) reqp)->oddLength << 1);
+ valueLen += 2;
+
+ if (padup(nominal_size+valueLen) >
+ (reqp->length<<2)) { /* this causes overflow */
+ reqp->length++;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, reqp->length<<2);
+ }
+
+ valuePtr = (unsigned char *) (((char *) reqp) + nominal_size);
+ valuePtr += (valueLen - 2);
+ Set_Value2(&valuePtr,value);
+ if ((valueLen % 4) == 2) {
+ ((xQueryTextExtentsReq *) reqp)->oddLength = 1;
+ }
+ else {
+ ((xQueryTextExtentsReq *) reqp)->oddLength = 0;
+ }
+ break;
+ case X_ListFonts:
+ nominal_size = sizeof (xListFontsReq);
+ ((xListFontsReq *) reqp) -> nbytes++;
+ valueLen = ((xListFontsReq *) reqp)->nbytes;
+
+ if (padup(nominal_size+valueLen) >
+ (reqp->length<<2)) { /* this causes overflow */
+ reqp->length++;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, reqp->length<<2);
+ }
+
+ valuePtr = (unsigned char *) (((char *) reqp) + nominal_size);
+ valuePtr += (valueLen - 1);
+ Set_Value1(&valuePtr,value);
+ break;
+ case X_ListFontsWithInfo:
+ nominal_size = sizeof (xListFontsWithInfoReq);
+ ((xListFontsWithInfoReq *) reqp) -> nbytes++;
+ valueLen = ((xListFontsWithInfoReq *) reqp)->nbytes;
+
+ if (padup(nominal_size+valueLen) >
+ (reqp->length<<2)) { /* this causes overflow */
+ reqp->length++;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, reqp->length<<2);
+ }
+
+ valuePtr = (unsigned char *) (((char *) reqp) + nominal_size);
+ valuePtr += (valueLen - 1);
+ Set_Value1(&valuePtr,value);
+ break;
+ case X_SetFontPath:
+ /* BEWARE --- this leaves nFonts as a count of the CARD8's
+ that were added. Caller has to reset nFonts to correct
+ value.
+ */
+ nominal_size = sizeof (xSetFontPathReq);
+ ((xSetFontPathReq *) reqp) -> nFonts++;
+ valueLen = ((xSetFontPathReq *) reqp)->nFonts;
+
+ if (padup(nominal_size+valueLen) >
+ (reqp->length<<2)) { /* this causes overflow */
+ reqp->length++;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, reqp->length<<2);
+ }
+
+ valuePtr = (unsigned char *) (((char *) reqp) + nominal_size);
+ valuePtr += (valueLen - 1);
+ Set_Value1(&valuePtr,value);
+ break;
+ case X_SetDashes:
+ nominal_size = sizeof (xSetDashesReq);
+ ((xSetDashesReq *) reqp) -> nDashes++;
+ valueLen = ((xSetDashesReq *) reqp)->nDashes;
+
+ if (padup(nominal_size+valueLen) >
+ (reqp->length<<2)) { /* this causes overflow */
+ reqp->length++;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, reqp->length<<2);
+ }
+
+ valuePtr = (unsigned char *) (((char *) reqp) + nominal_size);
+ valuePtr += (valueLen - 1);
+ Set_Value1(&valuePtr,value);
+ break;
+ case X_SetClipRectangles:
+ nominal_size = sizeof (xSetClipRectanglesReq);
+ ((xSetClipRectanglesReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyPoint:
+ nominal_size = sizeof (xPolyPointReq);
+ ((xPolyPointReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyLine:
+ nominal_size = sizeof (xPolyLineReq);
+ ((xPolyLineReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolySegment:
+ nominal_size = sizeof (xPolySegmentReq);
+ ((xPolySegmentReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyRectangle:
+ nominal_size = sizeof (xPolyRectangleReq);
+ ((xPolyRectangleReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyArc:
+ nominal_size = sizeof (xPolyArcReq);
+ ((xPolyArcReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_FillPoly:
+ nominal_size = sizeof (xFillPolyReq);
+ ((xFillPolyReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyFillRectangle:
+ nominal_size = sizeof (xPolyFillRectangleReq);
+ ((xPolyFillRectangleReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyFillArc:
+ nominal_size = sizeof (xPolyFillArcReq);
+ ((xPolyFillArcReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PutImage:
+ nominal_size = sizeof (xPutImageReq);
+ ((xPutImageReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyText8:
+ nominal_size = sizeof (xPolyText8Req);
+ ((xPolyText8Req *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_PolyText16:
+ nominal_size = sizeof (xPolyText16Req);
+ ((xPolyText16Req *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ImageText8:
+ nominal_size = sizeof (xImageText8Req);
+ ((xImageText8Req *) reqp) -> length = nominal_size / 4;
+ ((xImageText8Req *) reqp) -> nChars = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ImageText16:
+ nominal_size = sizeof (xImageText16Req);
+ ((xImageText16Req *) reqp) -> length = nominal_size / 4;
+ ((xImageText16Req *) reqp) -> nChars = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_AllocNamedColor:
+ nominal_size = sizeof (xAllocNamedColorReq);
+ ((xAllocNamedColorReq *) reqp) -> length = nominal_size / 4;
+ ((xAllocNamedColorReq *) reqp) -> nbytes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_FreeColors:
+ nominal_size = sizeof (xFreeColorsReq);
+ ((xFreeColorsReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_StoreColors:
+ nominal_size = sizeof (xStoreColorsReq);
+ ((xStoreColorsReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_StoreNamedColor:
+ nominal_size = sizeof (xStoreNamedColorReq);
+ ((xStoreNamedColorReq *) reqp) -> length = nominal_size / 4;
+ ((xStoreNamedColorReq *) reqp) -> nbytes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_QueryColors:
+ nominal_size = sizeof (xQueryColorsReq);
+ ((xQueryColorsReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_LookupColor:
+ nominal_size = sizeof (xLookupColorReq);
+ ((xLookupColorReq *) reqp) -> length = nominal_size / 4;
+ ((xLookupColorReq *) reqp) -> nbytes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_QueryExtension:
+ nominal_size = sizeof (xQueryExtensionReq);
+ ((xQueryExtensionReq *) reqp) -> length = nominal_size / 4;
+ ((xQueryExtensionReq *) reqp) -> nbytes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ChangeKeyboardMapping:
+ nominal_size = sizeof (xChangeKeyboardMappingReq);
+ ((xChangeKeyboardMappingReq *) reqp) -> length = nominal_size / 4;
+ ((xChangeKeyboardMappingReq *) reqp) -> keyCodes = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_ChangeHosts:
+ nominal_size = sizeof (xChangeHostsReq);
+ ((xChangeHostsReq *) reqp) -> length = nominal_size / 4;
+ ((xChangeHostsReq *) reqp) -> hostLength = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_RotateProperties:
+ nominal_size = sizeof (xRotatePropertiesReq);
+ ((xRotatePropertiesReq *) reqp) -> length = nominal_size / 4;
+ ((xRotatePropertiesReq *) reqp) -> nAtoms = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_SetPointerMapping:
+ nominal_size = sizeof (xSetPointerMappingReq);
+ ((xSetPointerMappingReq *) reqp) -> length = nominal_size / 4;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ case X_SetModifierMapping:
+ nominal_size = sizeof (xSetModifierMappingReq);
+ ((xSetModifierMappingReq *) reqp) -> length = nominal_size / 4;
+ ((xSetModifierMappingReq *) reqp) -> numKeyPerModifier = 0;
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, nominal_size);
+ break;
+ default:
+ DEFAULT_ERROR;
+ break;
+ }
+ return(reqp);
+}
+/*
+ * swiped from the sample server code!!!
+ *
+ * obscure but useful
+ */
+/*
+ * Routine: Ones - figures out number of ones set in a mask
+ *
+ * Input: mask -
+ *
+ * Output:
+ *
+ * Returns: number of ones set
+ *
+ * Globals used:
+ *
+ * Side Effects:
+ *
+ * Methods:
+ *
+ */
+
+static int
+Ones(mask) /* HACKMEM 169 */
+Mask mask;
+{
+ register int y;
+
+ y = (mask >> 1) &033333333333;
+ y = mask - y - ((y >>1) & 033333333333);
+ return (((y + (y >> 3)) & 030707070707) % (unsigned int)077);
+}
+
+
+/*
+ * Routine: Add_Counted_Bytes - appends byte string to end of value
+ * list and stuffs length of byte string into appropriate field
+ * in request.
+ *
+ * Input: reqp - pointer to original request
+ * bytep - pointer to the byte string
+ * nbytes - number of bytes in *bytep
+ *
+ * Output:
+ *
+ * Returns: pointer to modified request
+ *
+ * Globals used:
+ *
+ * Side Effects: invalidates pointer to original request
+ *
+ * Methods:
+ *
+ */
+
+xReq *
+Add_Counted_Bytes (reqp, bytep, nbytes)
+ xReq * reqp;
+ unsigned char *bytep;
+ int nbytes;
+{
+ unsigned long nominal_size;
+ unsigned char *valuePtr;
+ unsigned long valueLen;
+
+ switch (reqp -> reqType) {
+ case X_ChangeHosts:
+ nominal_size = sizeof(xChangeHostsReq);
+ ((xChangeHostsReq *) reqp) -> hostLength = nbytes;
+
+ if (padup(nominal_size + nbytes) >
+ (reqp->length<<2)) { /* this causes overflow */
+ reqp =
+ (xReq *) Xstrealloc ((char *) reqp, padup(nominal_size + nbytes));
+ }
+
+ reqp->length += (padup(nbytes))/4;
+ valuePtr = (unsigned char *) (((char *) reqp) + nominal_size);
+ bcopy(bytep, valuePtr, nbytes);
+ break;
+ default:
+ DEFAULT_ERROR;
+ break;
+ }
+ return(reqp);
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/Validate.c b/xc/test/xsuite/xtest/src/libproto/Validate.c
new file mode 100644
index 000000000..6586dbed7
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/Validate.c
@@ -0,0 +1,75 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: Validate.c 1.1 89/02/23 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: Validate.c 1.1 89/02/23 $";
+#endif
+
+#include "Xstlib.h"
+#include <X11/X.h>
+
+
+/*
+ intent: return True if the client's visual is of a class that
+ permits allocating color cells
+ input: client - integer from 0 to MAX_CLIENTS
+ output:
+ global input:
+ side effects:
+ methods:
+*/
+
+int
+Allocatable (client)
+int client;
+{
+ int visual_class;
+ XstDisplay *dsp;
+
+ dsp = Get_Display(client);
+ visual_class = Get_Visual_Class(Get_Visual(client,XstDefaultScreen(dsp)));
+
+ return ((visual_class == GrayScale) || (visual_class == PseudoColor) || (visual_class == DirectColor));
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/XlibNoXtst.c b/xc/test/xsuite/xtest/src/libproto/XlibNoXtst.c
new file mode 100644
index 000000000..13d5e756e
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/XlibNoXtst.c
@@ -0,0 +1,663 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ * ***************************************************************************
+ */
+
+/*
+ * THIS IS AN OS DEPENDENT FILE! It should work on 4.2BSD derived
+ * systems. VMS and System V should plan to have their own version.
+ * More portable functionality is available in XlibWithXTest.c if your
+ * Xlib has the post R5 release patches to move auth/conn handling from
+ * XOpenDis.c into XConDis.c and hence returned by _XConnectDisplay().
+ * If not you can portably do client-native only testing with XlibOpaque.c
+ * which uses XOpenDisplay to make the connection and then ConnectionNumber()
+ * to get the fd. This route is also appropriate if your Xlib has a different
+ * internal interface to the MIT release or else you don't have source.
+ * See the documentation of the build parameter XP_OPEN_DIS for more details.
+ */
+#include <stdio.h>
+#include <string.h>
+#include "XstlibInt.h"
+#include "XstosInt.h"
+#include "DataMove.h"
+#include <fcntl.h>
+#include <sys/file.h>
+#include <sys/socket.h>
+
+
+#ifdef UNIXCONN
+#include <sys/un.h>
+#define X_UNIX_PATH "/tmp/.X11-unix/X"
+#endif /* UNIXCONN */
+
+/* time_proc used to set timeout routines and on error in Xst_EINTR_Read */
+static void (*time_proc)() = 0;
+
+#define Xst_EINTR_Read(dpy, buffer, len) \
+ while (errno=0, *(char *)buffer=xFalse, 0 > Xst_Read (dpy, (char *) buffer, (long) len)) \
+ if (errno != EINTR) { \
+ if (time_proc) \
+ (*time_proc)(); \
+ else { \
+ Log_Msg ("read failed with errno = %d\n", errno); \
+ Delete(); \
+ } \
+ /*NOTREACHED*/ \
+ }
+
+/*
+ * Attempts to connect to server, given display name. Returns file descriptor
+ * (network socket) or -1 if connection fails. The expanded display name
+ * of the form hostname:number.screen ("::" if DECnet) is returned in a result
+ * parameter. The screen number to use is also returned.
+ */
+int XstConnectDisplay (display_name, expanded_name, screen_num,
+ auth_proto, auth_length, auth_string, auth_strlen,
+ xlib_dpy)
+ char *display_name;
+ char *expanded_name; /* return */
+ int *screen_num; /* return */
+ char **auth_proto; /* return */
+ int *auth_length; /* return */
+ char **auth_string; /* return */
+ int *auth_strlen; /* return */
+ Display **xlib_dpy; /* return */
+{
+ char displaybuf[256]; /* Display string buffer */
+ register char *display_ptr; /* Display string buffer pointer */
+ register char *numbuf_ptr; /* Server number buffer pointer */
+ char *screen_ptr; /* Pointer for locating screen num */
+ int display_num; /* Display number */
+ struct sockaddr_in inaddr; /* INET socket address. */
+#ifdef UNIXCONN
+ struct sockaddr_un unaddr; /* UNIX socket address. */
+#endif
+ struct sockaddr *addr; /* address to connect to */
+ struct hostent *host_ptr;
+ int addrlen; /* length of address */
+ extern char *getenv();
+ extern struct hostent *gethostbyname();
+ int fd; /* Network socket */
+ char numberbuf[16];
+ char *dot_ptr = NULL; /* Pointer to . before screen num */
+#ifdef DNETCONN
+ int dnet = 0;
+ char objname[20];
+ extern int dnet_conn();
+#endif
+
+ *auth_proto = "";
+ *auth_length = 0;
+ *auth_string = "";
+ *auth_strlen = 0;
+ *xlib_dpy = (Display *)NULL;
+ /*
+ * Find the ':' seperator and extract the hostname and the
+ * display number.
+ * NOTE - if DECnet is to be used, the display name is formatted
+ * as "host::number"
+ */
+ (void) strncpy(displaybuf, display_name, sizeof(displaybuf));
+ if ((display_ptr = SearchString(displaybuf,':')) == (char *)NULL)
+ return (-1);
+#ifdef DNETCONN
+ if (*(display_ptr + 1) == ':') {
+ dnet++;
+ *(display_ptr++) = '\0';
+ }
+#endif
+ *(display_ptr++) = '\0';
+
+ /* displaybuf now contains only a null-terminated host name, and
+ * display_ptr points to the display number.
+ * If the display number is missing there is an error. */
+
+ if (*display_ptr == '\0') return(-1);
+
+ /*
+ * Build a string of the form <display-number>.<screen-number> in
+ * numberbuf, using ".0" as the default.
+ */
+ screen_ptr = display_ptr;
+ numbuf_ptr = numberbuf;
+ while (*screen_ptr != '\0') {
+ if (*screen_ptr == '.') {
+ dot_ptr = numbuf_ptr;
+ *(screen_ptr++) = '\0';
+ *(numbuf_ptr++) = '.';
+ } else {
+ *(numbuf_ptr++) = *(screen_ptr++);
+ }
+ }
+
+ /*
+ * If the spec doesn't include a screen number, add ".0" (or "0" if
+ * only "." is present.)
+ */
+ if (dot_ptr == NULL) {
+ dot_ptr = numbuf_ptr;
+ *(numbuf_ptr++) = '.';
+ *(numbuf_ptr++) = '0';
+ } else {
+ if (*(numbuf_ptr - 1) == '.')
+ *(numbuf_ptr++) = '0';
+ }
+ *numbuf_ptr = '\0';
+
+ /*
+ * Return the screen number in the result parameter
+ */
+ *screen_num = atoi(dot_ptr + 1);
+
+ /*
+ * Convert the server number string to an integer.
+ */
+ display_num = atoi(display_ptr);
+
+ /*
+ * If the display name is missing, use current host.
+ */
+ if (displaybuf[0] == '\0')
+#ifdef DNETCONN
+ if (dnet)
+ (void) strcpy (displaybuf, "0");
+ else
+#endif
+#ifdef UNIXCONN
+ ; /* Do nothing if UNIX DOMAIN. Will be handled below. */
+#else
+ (void) gethostname (displaybuf, sizeof(displaybuf));
+#endif
+
+#ifdef DNETCONN
+ if (dnet) {
+ /*
+ * build the target object name.
+ */
+ sprintf(objname, "X%d", display_num);
+ /*
+ * Attempt to open the DECnet connection, return -1 if fails.
+ */
+ if ((fd = dnet_conn(displaybuf,
+ objname, SOCK_STREAM, 0, 0, 0, 0)) < 0)
+ return(-1); /* errno set by dnet_conn. */
+ } else
+#endif
+ {
+#ifdef UNIXCONN
+ if ((displaybuf[0] == '\0') ||
+ (strcmp("unix", displaybuf) == 0)) {
+ /* Connect locally using Unix domain. */
+ unaddr.sun_family = AF_UNIX;
+ (void) strcpy(unaddr.sun_path, X_UNIX_PATH);
+ strcat(unaddr.sun_path, display_ptr);
+ addr = (struct sockaddr *) &unaddr;
+ addrlen = strlen(unaddr.sun_path) + 2;
+ /*
+ * Open the network connection.
+ */
+ if ((fd = socket((int) addr->sa_family, SOCK_STREAM, 0)) < 0)
+ return(-1); /* errno set by system call. */
+ } else
+#endif
+ {
+ /* Get the statistics on the specified host. */
+ if ((inaddr.sin_addr.s_addr = inet_addr(displaybuf)) == -1) {
+ if ((host_ptr = gethostbyname(displaybuf)) == NULL) {
+ /* No such host! */
+ errno = EINVAL;
+ return(-1);
+ }
+ /* Check the address type for an internet host. */
+ if (host_ptr->h_addrtype != AF_INET) {
+ /* Not an Internet host! */
+ errno = EPROTOTYPE;
+ return(-1);
+ }
+
+ /* Set up the socket data. */
+ inaddr.sin_family = host_ptr->h_addrtype;
+ bcopy((char *)host_ptr->h_addr,
+ (char *)&inaddr.sin_addr,
+ sizeof(inaddr.sin_addr));
+ } else {
+ inaddr.sin_family = AF_INET;
+ }
+ addr = (struct sockaddr *) &inaddr;
+ addrlen = sizeof (struct sockaddr_in);
+ inaddr.sin_port = display_num;
+ inaddr.sin_port += X_TCP_PORT;
+ inaddr.sin_port = htons(inaddr.sin_port);
+ /*
+ * Open the network connection.
+ */
+
+ if ((fd = socket((int) addr->sa_family, SOCK_STREAM, 0)) < 0)
+ return(-1); /* errno set by system call. */
+ /* make sure to turn off TCP coalescence */
+#ifdef TCP_NODELAY
+ {
+ int mi;
+ setsockopt (fd, IPPROTO_TCP, TCP_NODELAY, &mi, sizeof (int));
+ }
+#endif
+ }
+
+
+ if (connect(fd, addr, addrlen) == -1) {
+ (void) close (fd);
+ return(-1); /* errno set by system call. */
+ }
+#ifdef FIOSNBIO
+ {
+ int arg = 1;
+ ioctl (fd, FIOSNBIO, &arg);
+ }
+#else
+ (void) fcntl (fd, F_SETFL, FNDELAY);
+#endif /* FIOSNBIO */
+
+ }
+ /*
+ * Return the id if the connection succeeded. Rebuild the expanded
+ * spec and return it in the result parameter.
+ */
+ display_ptr = displaybuf;
+ while (*(++display_ptr) != '\0')
+ ;
+ *(display_ptr++) = ':';
+#ifdef DNETCONN
+ if (dnet)
+ *(display_ptr++) = ':';
+#endif
+ numbuf_ptr = numberbuf;
+ while (*numbuf_ptr != '\0')
+ *(display_ptr++) = *(numbuf_ptr++);
+ *display_ptr = '\0';
+ (void) strcpy(expanded_name, displaybuf);
+ return(fd);
+}
+
+/*
+ * Disconnect from server.
+ */
+
+int XstDisconnectDisplay (server)
+
+ int server;
+
+{
+ (void) close(server);
+}
+
+#undef NULL
+#define NULL ((char *) 0)
+
+_XstWaitForReadable(dpy)
+ XstDisplay *dpy;
+{
+ int r_mask[MSKCNT];
+ int result;
+
+ CLEARBITS(r_mask);
+ do {
+ BITSET(r_mask, dpy->fd);
+ result = select(dpy->fd + 1, r_mask, (int *) 0, (int *) 0, (struct timeval *)NULL);
+ if (result == -1 && errno != EINTR) {
+ XstIOError(dpy,"_XstWaitForReadable",1);
+ }
+ } while (result <= 0);
+}
+
+static unsigned int padlength[4] = {0, 3, 2, 1};
+
+XstSendClientPrefix (dpy, client, auth_proto, auth_string, needswap)
+ XstDisplay *dpy;
+ xConnClientPrefix *client;
+ int needswap;
+{
+ /*
+ * Authorization string stuff.... Must always transmit multiple of 4
+ * bytes.
+ */
+
+ int auth_length, auth_strlen;
+ char pad[3];
+ char buffer[BUFSIZ], *bptr;
+
+ int bytes=0;
+
+ auth_length = client->nbytesAuthProto;
+ auth_strlen = client->nbytesAuthString;
+
+ bytes = (sizeof(xConnClientPrefix) +
+ auth_length + padlength[auth_length & 3] +
+ auth_strlen + padlength[auth_strlen & 3]);
+
+ /* bcopy(client, buffer, sizeof(xConnClientPrefix)); */
+ bptr = buffer;
+ BPRINTF1 ("OpenDisplay message:\n");
+ pack1(&bptr,client->byteOrder);
+ BPRINTF2 ("\tbyteOrder = 0x%x\n", (unsigned) client->byteOrder);
+ packpad(&bptr,sizeof(client->pad));
+ BPRINTF2 ("\tpad = %d\n", (int) *(bptr-1));
+ pack2(&bptr,(short)client->majorVersion,needswap);
+ BPRINTF2 ("\tmajorVersion = %d\n", client->majorVersion);
+ pack2(&bptr,(short)client->minorVersion,needswap);
+ BPRINTF2 ("\tminorVersion = %d\n", client->minorVersion);
+ pack2(&bptr,(short)client->nbytesAuthProto,needswap);
+ BPRINTF2 ("\tnbytesAuthProto = %d\n", client->nbytesAuthProto);
+ pack2(&bptr,(short)client->nbytesAuthString,needswap);
+ BPRINTF2 ("\tnbytesAuthString = %d\n", client->nbytesAuthString);
+ packpad(&bptr,sizeof(client->pad2));
+ BPRINTF2 ("\tpad2 = %d\n", (int) *(bptr-1));
+
+ /* bptr = buffer + sizeof(xConnClientPrefix); */
+ BPRINTF2 ("\tAuthProtoName = %d bytes\n", auth_length);
+ if (auth_length)
+ {
+ bcopy(auth_proto, bptr, auth_length);
+ bptr += auth_length;
+ if (padlength[auth_length & 3])
+ {
+ bcopy(pad, bptr, padlength[auth_length & 3]);
+ bptr += padlength[auth_length & 3];
+ BPRINTF2 ("\tAuthProtoName pad = %d bytes\n", padlength[auth_length & 3]);
+ }
+ }
+ BPRINTF2 ("\tAuthProtoData = %d bytes\n", auth_strlen);
+ if (auth_strlen)
+ {
+ bcopy(auth_string, bptr, auth_strlen);
+ bptr += auth_strlen;
+ if (padlength[auth_strlen & 3])
+ {
+ bcopy(pad, bptr, padlength[auth_strlen & 3]);
+ bptr += padlength[auth_strlen & 3];
+ BPRINTF2 ("\tAuthProtoData pad = %d bytes\n", padlength[auth_strlen & 3]);
+ }
+ }
+ BPRINTF2 ("\tTotal OpenDisplay message length = %d bytes\n", bytes);
+ BPRINTF2 ("\t\ton fd %d\n", dpy->fd);
+ BPRINTF2 ("\t\t%d bytes used of buffer\n", bptr - buffer);
+ (void) WriteToServer(dpy->fd, buffer, bytes);
+ return;
+}
+
+/*
+ * The Timeout function(s) must all exit -- we don't want to get
+ * into longjmp from out of signal (SIGALARM) handlers etc. So
+ * we have to use the test type and request type to work out
+ * what messages to put out and what exit code to give back to the TET.
+ *
+ * Behaviour is as follows:
+ *
+ * Request Type: OPEN_DISPLAY_REQUEST_TYPE || anything else
+ * Test Type: OPEN_DISPLAY | anything else || anything at all
+ * __________(bad byte order)| (0x42 or 0x6C) || (0x42 or 0x6C)
+ * Getting: \---------------+----------------++------------------
+ * | | ||
+ * SetupPrefix| PASS(Exit_OK)| FAIL(Abort) || Delete
+ * | | ||
+ * SetupData | Not Reached | FAIL(Abort) || Delete
+ * | (Delete) | ||
+ *
+ */
+
+
+#define PASS_action 1
+#define FAIL_action 2
+#define DELETE_action 3
+
+static char *nothing = "No reply from server when trying to connect to %s\n";
+
+static void
+Timeout_Func(action)
+int action;
+{
+ char *server = Xst_server_node == NULL ? "Default Server" : Xst_server_node;
+
+ switch(action) {
+ case PASS_action:
+ Log_Trace("No prefix sent in response to bad byte order open request.");
+ Exit_OK ();
+ /*NOTREACHED*/
+ break;
+ case FAIL_action:
+ Log_Msg(nothing, server);
+ Abort ();
+ /*NOTREACHED*/
+ break;
+ case DELETE_action:
+ Log_Msg(nothing, server);
+ Delete ();
+ /*NOTREACHED*/
+ break;
+ default:
+ Log_Msg("INTERNAL TEST SUITE ERROR: bad action (%d) in Timeout_Func with server %s.", action, server);
+ Delete ();
+ /*NOTREACHED*/
+ break;
+ }
+}
+
+static void
+Normal_Timeout_Func() {
+ Timeout_Func(DELETE_action);
+}
+
+static void
+Good_Open_Timeout_Func() {
+ Timeout_Func(FAIL_action);
+}
+
+static void
+Bad_Open_Timeout_Func() {
+ Timeout_Func(PASS_action);
+}
+
+GetConnSetupPrefix (client, prefixp, needswap)
+int client;
+xConnSetupPrefix * prefixp;
+int needswap;
+{
+ XstDisplay * dpy;
+ char buffer[OBUFSIZE];
+ char *bptr;
+
+ dpy = Get_Display(client);
+
+ if (Get_Req_Type(client) == OPEN_DISPLAY_REQUEST_TYPE) {
+ if (Get_Test_Type(client) == OPEN_DISPLAY)
+ time_proc = Bad_Open_Timeout_Func;
+ else
+ time_proc = Good_Open_Timeout_Func;
+ } else
+ time_proc = Normal_Timeout_Func;
+
+ Set_Timer (CONNECT_TIMER_ID, Xst_timeout_value, time_proc);
+
+ Xst_EINTR_Read (dpy, (char *) buffer, (long) sizeof (xConnSetupPrefix));
+
+ Stop_Timer (CONNECT_TIMER_ID);
+
+ BPRINTF1 ("Connection setup prefix:\n");
+ bptr = buffer;
+ prefixp -> success = unpack1 (&bptr);
+ BPRINTF2 ("\tsuccess = %s\n", boolname(prefixp->success));
+ prefixp -> lengthReason = unpack1 (&bptr);
+ BPRINTF2 ("\tlengthReason = %d\n", prefixp->lengthReason);
+ prefixp -> majorVersion = unpack2 (&bptr, needswap);
+ BPRINTF2 ("\tmajorVersion = %d\n", prefixp->majorVersion);
+ prefixp -> minorVersion = unpack2 (&bptr, needswap);
+ BPRINTF2 ("\tminorVersion = %d\n", prefixp->minorVersion);
+ prefixp -> length = unpack2 (&bptr, needswap);
+ BPRINTF2 ("\tlength = %d\n", prefixp->length);
+}
+
+/*
+ * GetConnSetupData - reads & byte swaps (as appropriate)
+ * the rest of the connection setup data
+ * (Note this is somewhat redundant with logic
+ * in XOpenDisplay - might merge later)
+ */
+
+GetConnSetupData (client, setupdp, len, needswap)
+int client;
+xConnSetup * setupdp;
+int len;
+int needswap;
+{
+ XstDisplay * dpy;
+ char buffer[OBUFSIZE];
+ char *bptr;
+ char *sptr; /* pointer into setup data area */
+ int pad;
+ int i;
+ int d;
+ int s;
+ int v;
+ int f;
+ int ndepths;
+ int nvisuals;
+
+ dpy = Get_Display(client);
+
+ if (Get_Req_Type(client) == OPEN_DISPLAY_REQUEST_TYPE) {
+ if (Get_Test_Type(client) == OPEN_DISPLAY) {
+ Log_Msg ("INTERNAL ERROR: should not be getting SetupData with TestType == OPEN_DISPLAY.");
+ Delete();
+ /*NOTREACHED*/
+ }
+ time_proc = Good_Open_Timeout_Func;
+ } else
+ time_proc = Normal_Timeout_Func;
+
+ Set_Timer (CONNECT_TIMER_ID, Xst_timeout_value, time_proc);
+
+ if (!needswap) {
+ Xst_EINTR_Read (dpy, (char *) setupdp, len);
+ Stop_Timer (CONNECT_TIMER_ID);
+ return;
+ }
+ else {
+ Xst_EINTR_Read (dpy, (char *) buffer, len);
+ Stop_Timer (CONNECT_TIMER_ID);
+ bptr = buffer;
+
+ setupdp -> release = unpack4 (&bptr, needswap);
+ setupdp -> ridBase = unpack4 (&bptr, needswap);
+ setupdp -> ridMask = unpack4 (&bptr, needswap);
+ setupdp -> motionBufferSize = unpack4 (&bptr, needswap);
+ setupdp -> nbytesVendor = unpack2 (&bptr, needswap);
+ setupdp -> maxRequestSize = unpack2 (&bptr, needswap);
+ setupdp -> numRoots = unpack1 (&bptr);
+ setupdp -> numFormats = unpack1 (&bptr);
+ setupdp -> imageByteOrder = unpack1 (&bptr);
+ setupdp -> bitmapBitOrder = unpack1 (&bptr);
+ setupdp -> bitmapScanlineUnit = unpack1 (&bptr);
+ setupdp -> bitmapScanlinePad = unpack1 (&bptr);
+ setupdp -> minKeyCode = unpack1 (&bptr);
+ setupdp -> maxKeyCode = unpack1 (&bptr);
+ setupdp -> pad2 = unpack4 (&bptr, needswap);
+
+ sptr = (char *) (setupdp + 1);
+
+/* get the vendor string */
+ bcopy (bptr, sptr, setupdp -> nbytesVendor);
+ pad = (setupdp -> nbytesVendor + 3) & ~3;
+ bptr += pad;
+ sptr += pad;
+
+ /* Z axis screen format info */
+ /* NOTE - this counts on only 1 byte quantities in the format!! */
+ for (f = 0; f < setupdp->numFormats; f++) {
+ bcopy (bptr, sptr, sizeof (xPixmapFormat));
+ bptr += sizeof (xPixmapFormat);
+ sptr += sizeof (xPixmapFormat);
+ }
+ /* Screen structures */
+ for (s = 0; s < setupdp->numRoots; s++) {
+ for (i = 0; i < 5; i++) {
+ swapcplp (bptr, sptr);
+ bptr += 4;
+ sptr += 4;
+ }
+ for (i = 0; i < 6; i++) {
+ swapcpsp (bptr, sptr);
+ bptr += 2;
+ sptr += 2;
+ }
+ swapcplp (bptr, sptr); /* visualID */
+ bptr += 4;
+ sptr += 4;
+ bcopy (bptr, sptr, 4);
+ ndepths = bptr[3]; /* pull out nDepths */
+ bptr += 4;
+ sptr += 4;
+ for (d = 0; d < ndepths; d++) {
+ *sptr++ = *bptr++;
+ *sptr++ = *bptr++;
+ swapcpsp (bptr, sptr);/* nVisuals */
+ nvisuals = * (short *) sptr;
+ bptr += 2;
+ sptr += 2;
+
+ bptr += 4; /* pad */
+ sptr += 4;
+
+ for (v = 0; v < nvisuals; v++) {
+ swapcplp (bptr, sptr);/* visualid */
+ bptr += 4;
+ sptr += 4;
+ *sptr++ = *bptr++;
+ *sptr++ = *bptr++;
+ swapcpsp (bptr, sptr);/* colormapEntries */
+ bptr += 2;
+ sptr += 2;
+ for (i = 0; i < 4; i++) {
+ swapcplp (bptr, sptr);
+ bptr += 4;
+ sptr += 4;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/XlibOpaque.c b/xc/test/xsuite/xtest/src/libproto/XlibOpaque.c
new file mode 100644
index 000000000..736f08ee3
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/XlibOpaque.c
@@ -0,0 +1,347 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ * ***************************************************************************
+ */
+
+/*
+ * You can portably do client-native only testing with XlibOpaque.c
+ * which uses XOpenDisplay to make the connection and then ConnectionNumber()
+ * to get the fd. This route is also appropriate if your Xlib has a different
+ * internal interface to the MIT release or else you don't have source.
+ * More, and portable, functionality is available in XlibWithXTest.c if your
+ * Xlib has the post R5 release patches to move auth/conn handling from
+ * XOpenDis.c into XConDis.c and hence returned by _XConnectDisplay().
+ * All byte-sexes can be tested with XlibNoXTest.c but that file is only
+ * really for BSD type environments and may represent a portability constraint.
+ * See the documentation of the build parameter XP_OPEN_DIS for more details.
+ */
+#include <stdio.h>
+#include <string.h>
+#include "Xlib.h"
+#include "Xutil.h"
+#include "XstlibInt.h"
+#include "XstosInt.h"
+#include "Xstos.h"
+#include "DataMove.h"
+
+/*
+ * Attempts to connect to server, given display name. Returns file descriptor
+ * (network socket) or -1 if connection fails. The expanded display name
+ * of the form hostname:number.screen ("::" if DECnet) is returned in a result
+ * parameter. The screen number to use is also returned.
+ */
+int XstConnectDisplay (display_name, expanded_name, screen_num,
+ auth_proto, auth_length, auth_string, auth_strlen,
+ xlib_dpy)
+ char *display_name;
+ char *expanded_name; /* return */
+ int *screen_num; /* return */
+ char **auth_proto; /* return */
+ int *auth_length; /* return */
+ char **auth_string; /* return */
+ int *auth_strlen; /* return */
+ Display **xlib_dpy; /* return */
+{
+ *expanded_name = '\0';
+ *auth_proto = "";
+ *auth_length = 0;
+ *auth_string = "";
+ *auth_strlen = 0;
+ *xlib_dpy = XOpenDisplay(display_name);
+ if (*xlib_dpy == (Display *)NULL)
+ return -1;
+ (void)strcpy(expanded_name, display_name);
+ *screen_num = DefaultScreen(*xlib_dpy);
+ return ConnectionNumber(*xlib_dpy);
+}
+
+/*
+ * Disconnect from server.
+ */
+
+int XstDisconnectDisplay (server)
+
+ int server;
+
+{
+ (void) close(server);
+}
+
+#undef NULL
+#define NULL ((char *) 0)
+
+_XstWaitForReadable(dpy)
+ XstDisplay *dpy;
+{
+ int r_mask[MSKCNT];
+ int result;
+
+ CLEARBITS(r_mask);
+ do {
+ BITSET(r_mask, dpy->fd);
+ result = select(dpy->fd + 1, r_mask, (int *) 0, (int *) 0, (struct timeval *)NULL);
+ if (result == -1 && errno != EINTR) {
+ XstIOError(dpy,"_XstWaitForReadable",1);
+ }
+ } while (result <= 0);
+}
+
+static unsigned int padlength[4] = {0, 3, 2, 1};
+
+XstSendClientPrefix (dpy, client, auth_proto, auth_string, needswap)
+ XstDisplay *dpy;
+ xConnClientPrefix *client;
+ int needswap;
+{
+ BPRINTF1 ("OpenDisplay already done by Xlib XOpenDisplay()\n");
+ return;
+}
+
+static int num_formats(xdpy)
+Display *xdpy;
+{
+ int nf = 0;
+ XPixmapFormatValues *xpfvp = XListPixmapFormats(xdpy, &nf);
+
+ if (xpfvp != (XPixmapFormatValues *)NULL)
+ XFree((char*)xpfvp);
+ return nf;
+}
+
+static int calc_length(xdpy)
+Display *xdpy;
+{
+ int total, nb, s;
+ int nf = num_formats(xdpy);
+
+ total = 8 + 2*nf;
+ nb = padup((int)strlen(ServerVendor(xdpy)));
+ for(s=0; s < ScreenCount(xdpy); s++) {
+ int nd = 0, d;
+ int *depths;
+
+ depths = XListDepths(xdpy, s, &nd);
+ nb += sizeof(xWindowRoot);
+ for(d=0; d < nd; d++) {
+ int nv = 0;
+ XVisualInfo template,
+ *xvip;
+
+ template.screen = s;
+ template.depth = depths[d];
+ xvip = XGetVisualInfo(xdpy,
+ VisualScreenMask|VisualDepthMask,
+ &template, &nv);
+ nb += sizeof(xDepth) + nv * sizeof(xVisualType);
+ if (xvip != (XVisualInfo *)NULL)
+ XFree((char*)xvip);
+ }
+ if (depths)
+ XFree((char*)depths);
+ }
+ total += nb/4;
+ return total;
+}
+
+GetConnSetupPrefix (client, prefixp, needswap)
+int client;
+xConnSetupPrefix * prefixp;
+int needswap;
+{
+ XstDisplay * dpy;
+ Display *xdpy;
+
+ dpy = Get_Display(client);
+ xdpy = dpy->xlib_dpy;
+
+ BPRINTF1 ("Connection setup prefix:\n");
+ prefixp -> success = True;
+ BPRINTF2 ("\tsuccess = %s\n", boolname(prefixp->success));
+ prefixp -> lengthReason = 0;
+ BPRINTF2 ("\tlengthReason = %d\n", prefixp->lengthReason);
+ prefixp -> majorVersion = ProtocolVersion(xdpy);
+ BPRINTF2 ("\tmajorVersion = %d\n", prefixp->majorVersion);
+ prefixp -> minorVersion = ProtocolRevision(xdpy);
+ BPRINTF2 ("\tminorVersion = %d\n", prefixp->minorVersion);
+ prefixp -> length = calc_length(xdpy);
+ BPRINTF2 ("\tlength = %d\n", prefixp->length);
+}
+
+/*
+ * GetConnSetupData - steals
+ * the rest of the connection setup data
+ * from out of the Xlib Display and makes it look
+ * as if it all came from the conection.
+ */
+
+static unsigned long infer_mask(xdpy)
+Display *xdpy;
+{
+ int i;
+ unsigned long mask = 0;
+
+ for (i=0; i<256; i++) /* we don't need millions, per test */
+ mask |= XAllocID(xdpy);
+
+ return mask;
+}
+
+GetConnSetupData (client, setupdp, len, needswap)
+int client;
+xConnSetup * setupdp;
+int len;
+int needswap;
+{
+ XstDisplay * dpy;
+ char *sptr; /* pointer into setup data area */
+ int pad;
+ int i;
+ int d;
+ int s;
+ int v;
+ int f;
+ int nvisuals;
+ Display *xdpy;
+ XPixmapFormatValues *xpfvp;
+
+ dpy = Get_Display(client);
+ xdpy = dpy->xlib_dpy;
+
+ {
+ int mink, maxk, junk;
+
+ setupdp -> release = VendorRelease(xdpy);
+ setupdp -> ridBase = XAllocID(xdpy);
+ setupdp -> ridMask = infer_mask(xdpy);
+ setupdp -> motionBufferSize = 0;
+ setupdp -> nbytesVendor = strlen(ServerVendor(xdpy));
+ setupdp -> maxRequestSize = XMaxRequestSize(xdpy);
+ setupdp -> numRoots = ScreenCount(xdpy);
+ setupdp -> numFormats = num_formats(xdpy);
+ setupdp -> imageByteOrder = ImageByteOrder(xdpy);
+ setupdp -> bitmapBitOrder = BitmapBitOrder(xdpy);
+ setupdp -> bitmapScanlineUnit = BitmapUnit(xdpy);
+ setupdp -> bitmapScanlinePad = BitmapPad(xdpy);
+ XDisplayKeycodes(xdpy, &mink, &maxk);
+ setupdp -> minKeyCode = mink;
+ setupdp -> maxKeyCode = maxk;
+ setupdp -> pad2 = 0;
+
+ sptr = (char *) (setupdp + 1);
+
+/* get the vendor string */
+ bcopy (ServerVendor(xdpy), sptr, setupdp -> nbytesVendor);
+ pad = (setupdp -> nbytesVendor + 3) & ~3;
+ sptr += pad;
+
+ /* Z axis screen format info */
+ /* NOTE - this counts on only 1 byte quantities in the format!! */
+ xpfvp = XListPixmapFormats(xdpy, &junk);
+ for (f = 0; f < (int)setupdp->numFormats; f++) {
+ xPixmapFormat *pp = (xPixmapFormat *)sptr;
+
+ pp->depth = xpfvp[f].depth;
+ pp->bitsPerPixel = xpfvp[f].bits_per_pixel;
+ pp->scanLinePad = xpfvp[f].scanline_pad;
+ sptr += sizeof (xPixmapFormat);
+ }
+ if (xpfvp != (XPixmapFormatValues *)NULL)
+ XFree((char*)xpfvp);
+ /* Screen structures */
+ for (s = 0; s < (int)setupdp->numRoots; s++) {
+ XID *ip = (XID *)sptr;
+ xWindowRoot *xwp = (xWindowRoot *)sptr;
+ Screen *scr = ScreenOfDisplay(xdpy, s);
+ int ndepths;
+ int *depths;
+
+ *ip++ = RootWindow(xdpy, s); sptr += 4;
+ *ip++ = DefaultColormap(xdpy, s); sptr += 4;
+ *ip++ = WhitePixel(xdpy, s); sptr += 4;
+ *ip++ = BlackPixel(xdpy, s); sptr += 4;
+ *ip++ = 0L; sptr += 4;
+ xwp->pixWidth = DisplayWidth(xdpy, s); sptr += 2;
+ xwp->pixHeight = DisplayHeight(xdpy, s); sptr += 2;
+ xwp->mmWidth = DisplayWidthMM(xdpy, s); sptr += 2;
+ xwp->mmHeight = DisplayHeightMM(xdpy, s); sptr += 2;
+ xwp->minInstalledMaps = MinCmapsOfScreen(scr); sptr += 2;
+ xwp->maxInstalledMaps = MaxCmapsOfScreen(scr); sptr += 2;
+ ip += 3;
+ *ip++ = XVisualIDFromVisual(DefaultVisualOfScreen(scr)); sptr += 4;
+ xwp->backingStore = DoesBackingStore(scr); sptr++;
+ xwp->saveUnders = DoesSaveUnders(scr); sptr++;
+ xwp->rootDepth = PlanesOfScreen(scr); sptr++;
+ depths = XListDepths(xdpy, s, &ndepths);
+ xwp->nDepths = ndepths; sptr++;
+ ip++;
+ for (d = 0; d < ndepths; d++) {
+ int nvisuals;
+ XVisualInfo template,
+ *xvip;
+ xDepth *xdp = (xDepth *)sptr;
+
+ template.screen = s;
+ template.depth = depths[d];
+ xvip = XGetVisualInfo(xdpy, VisualScreenMask|VisualDepthMask,
+ &template, &nvisuals);
+
+ xdp->depth = template.depth;
+ xdp->nVisuals = nvisuals;
+ sptr += sizeof(xDepth);
+ for (v = 0; v < nvisuals; v++) {
+ xVisualType *xvp = (xVisualType *)sptr;
+
+ xvp->visualID = xvip[v].visualid;
+ xvp->class = xvip[v].class;
+ xvp->bitsPerRGB = xvip[v].bits_per_rgb;
+ xvp->colormapEntries = xvip[v].colormap_size;
+ xvp->redMask = xvip[v].red_mask;
+ xvp->greenMask = xvip[v].green_mask;
+ xvp->blueMask = xvip[v].blue_mask;
+
+ sptr += sizeof(xVisualType);
+ }
+ if (xvip != (XVisualInfo *)NULL)
+ XFree((char*)xvip);
+ }
+ if (depths)
+ XFree((char*)depths);
+ }
+ }
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/XlibXtst.c b/xc/test/xsuite/xtest/src/libproto/XlibXtst.c
new file mode 100644
index 000000000..bd2d42883
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/XlibXtst.c
@@ -0,0 +1,499 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ * ***************************************************************************
+ */
+
+
+/*
+ * Full, and portable, functionality is available in XlibWithXTest.c if your
+ * Xlib has the post R5 release patches to move auth/conn handling from
+ * XOpenDis.c into XConDis.c and hence returned by _XConnectDisplay().
+ * You can portably do client-native only testing with XlibOpaque.c
+ * which uses XOpenDisplay to make the connection and then ConnectionNumber()
+ * to get the fd. This route is also appropriate if your Xlib has a different
+ * internal interface to the MIT release or else you don't have source.
+ * All byte-sexes can also be tested with XlibNoXTest.c but that file is only
+ * really for BSD type environments and may represent a portability constraint.
+ * See the documentation of the build parameter XP_OPEN_DIS for more details.
+ */
+#include <stdio.h>
+#include <string.h>
+#include "XstlibInt.h"
+#include "XstosInt.h"
+#include "DataMove.h"
+
+#ifdef notdef
+#include <stdio.h>
+#include <string.h>
+#include "Xlib.h"
+#include "Xutil.h"
+#include "XstlibInt.h"
+#include "XstosInt.h"
+#include "Xstos.h"
+#include "DataMove.h"
+#endif /* notdef */
+
+
+/* use of _XConnectDisplay to get the fd for us may give us one with NBIO set */
+#ifdef EWOULDBLOCK
+#define MAYBE_BLOCK(d) if (errno == EWOULDBLOCK) \
+ { _XstWaitForReadable(d); continue; }
+#else
+#define MAYBE_BLOCK(d)
+#endif
+
+#ifdef EAGAIN
+#define MAYBE_AGAIN(d) if (errno == EAGAIN) \
+ { _XstWaitForReadable(d); continue; }
+#else
+#define MAYBE_AGAIN(d)
+#endif
+
+/* time_proc used to set timeout routines and on error in Xst_EINTR_Read */
+static void (*time_proc)() = 0;
+
+/* assume that connection info always fits in one read's worth XXX - CAREFUL */
+
+#define Xst_EINTR_Read(dpy, buffer, len) \
+ while (errno=0, *(char *)buffer=xFalse, 0 > Xst_Read (dpy, (char *) buffer, (long) len)) { \
+ MAYBE_BLOCK(dpy); \
+ MAYBE_AGAIN(dpy); \
+ if (errno != EINTR) { \
+ if (time_proc) \
+ (*time_proc)(); \
+ else { \
+ Log_Msg ("read failed with errno = %d\n", errno); \
+ Delete(); \
+ } \
+ /*NOTREACHED*/ \
+ } \
+ }
+
+static int complain(dpy)
+Display *dpy; /* Yes, an Xlib display */
+{
+ static char buf[256];
+
+ sprintf(buf, "Connection error to server '%s'\n\t", DisplayString(dpy));
+ /* pass the Xlib Display secure in the knowledge that XstIOError
+ * never uses it. THIS BETTER NOT CHANGE without a change here too!
+ */
+ XstIOError((XstDisplay *)dpy, buf, 1);
+
+ /*NOTREACHED*/ /* we hope */
+ Delete(); /* just in case */
+
+ /*NOTREACHED*/ /* definite */
+ return 1; /* never */
+}
+
+/*
+ * Attempts to connect to server, given display name. Returns file descriptor
+ * (network socket) or -1 if connection fails. The expanded display name
+ * of the form hostname:number.screen ("::" if DECnet) is returned in a result
+ * parameter. The screen number to use is also returned.
+ */
+int XstConnectDisplay (display_name, expanded_name, screen_num,
+ auth_proto, auth_length, auth_string, auth_strlen,
+ xlib_dpy)
+ char *display_name;
+ char *expanded_name; /* return */
+ int *screen_num; /* return */
+ char **auth_proto; /* return */
+ int *auth_length; /* return */
+ char **auth_string; /* return */
+ int *auth_strlen; /* return */
+ Display **xlib_dpy; /* return */
+{
+ int idisplay;
+
+ *xlib_dpy = (Display *)NULL;
+ XSetIOErrorHandler(complain);
+ return _XConnectDisplay(display_name, expanded_name, &idisplay, screen_num,
+ auth_proto, auth_length, auth_string, auth_strlen);
+}
+
+/*
+ * Disconnect from server.
+ */
+
+int XstDisconnectDisplay (server)
+
+ int server;
+
+{
+ (void) close(server);
+}
+
+#undef NULL
+#define NULL ((char *) 0)
+
+_XstWaitForReadable(dpy)
+ XstDisplay *dpy;
+{
+ int r_mask[MSKCNT];
+ int result;
+
+ CLEARBITS(r_mask);
+ do {
+ BITSET(r_mask, dpy->fd);
+ result = select(dpy->fd + 1, r_mask, (int *) 0, (int *) 0, (struct timeval *)NULL);
+ if (result == -1 && errno != EINTR) {
+ XstIOError(dpy,"_XstWaitForReadable",1);
+ }
+ } while (result <= 0);
+}
+
+static unsigned int padlength[4] = {0, 3, 2, 1};
+
+XstSendClientPrefix (dpy, client, auth_proto, auth_string, needswap)
+ XstDisplay *dpy;
+ xConnClientPrefix *client;
+ int needswap;
+{
+ /*
+ * Authorization string stuff.... Must always transmit multiple of 4
+ * bytes.
+ */
+
+ int auth_length, auth_strlen;
+ char pad[3];
+ char buffer[BUFSIZ], *bptr;
+
+ int bytes=0;
+
+ auth_length = client->nbytesAuthProto;
+ auth_strlen = client->nbytesAuthString;
+
+ bytes = (sizeof(xConnClientPrefix) +
+ auth_length + padlength[auth_length & 3] +
+ auth_strlen + padlength[auth_strlen & 3]);
+
+ /* bcopy(client, buffer, sizeof(xConnClientPrefix)); */
+ bptr = buffer;
+ BPRINTF1 ("OpenDisplay message:\n");
+ pack1(&bptr,client->byteOrder);
+ BPRINTF2 ("\tbyteOrder = 0x%x\n", (unsigned) client->byteOrder);
+ packpad(&bptr,sizeof(client->pad));
+ BPRINTF2 ("\tpad = %d\n", (int) *(bptr-1));
+ pack2(&bptr,(short)client->majorVersion,needswap);
+ BPRINTF2 ("\tmajorVersion = %d\n", client->majorVersion);
+ pack2(&bptr,(short)client->minorVersion,needswap);
+ BPRINTF2 ("\tminorVersion = %d\n", client->minorVersion);
+ pack2(&bptr,(short)client->nbytesAuthProto,needswap);
+ BPRINTF2 ("\tnbytesAuthProto = %d\n", client->nbytesAuthProto);
+ pack2(&bptr,(short)client->nbytesAuthString,needswap);
+ BPRINTF2 ("\tnbytesAuthString = %d\n", client->nbytesAuthString);
+ packpad(&bptr,sizeof(client->pad2));
+ BPRINTF2 ("\tpad2 = %d\n", (int) *(bptr-1));
+
+ /* bptr = buffer + sizeof(xConnClientPrefix); */
+ BPRINTF2 ("\tAuthProtoName = %d bytes\n", auth_length);
+ if (auth_length)
+ {
+ bcopy(auth_proto, bptr, auth_length);
+ bptr += auth_length;
+ if (padlength[auth_length & 3])
+ {
+ bcopy(pad, bptr, padlength[auth_length & 3]);
+ bptr += padlength[auth_length & 3];
+ BPRINTF2 ("\tAuthProtoName pad = %d bytes\n", padlength[auth_length & 3]);
+ }
+ }
+ BPRINTF2 ("\tAuthProtoData = %d bytes\n", auth_strlen);
+ if (auth_strlen)
+ {
+ bcopy(auth_string, bptr, auth_strlen);
+ bptr += auth_strlen;
+ if (padlength[auth_strlen & 3])
+ {
+ bcopy(pad, bptr, padlength[auth_strlen & 3]);
+ bptr += padlength[auth_strlen & 3];
+ BPRINTF2 ("\tAuthProtoData pad = %d bytes\n", padlength[auth_strlen & 3]);
+ }
+ }
+ BPRINTF2 ("\tTotal OpenDisplay message length = %d bytes\n", bytes);
+ BPRINTF2 ("\t\ton fd %d\n", dpy->fd);
+ BPRINTF2 ("\t\t%d bytes used of buffer\n", bptr - buffer);
+ (void) WriteToServer(dpy->fd, buffer, bytes);
+ return;
+}
+
+/*
+ * The Timeout function(s) must all exit -- we don't want to get
+ * into longjmp from out of signal (SIGALARM) handlers etc. So
+ * we have to use the test type and request type to work out
+ * what messages to put out and what exit code to give back to the TET.
+ * NOTE that we use the timeout functions on Xst_EINTR_Read fails, as well.
+ *
+ * Behaviour is as follows:
+ *
+ * Request Type: OPEN_DISPLAY_REQUEST_TYPE || anything else
+ * Test Type: OPEN_DISPLAY | anything else || anything at all
+ * __________(bad byte order)| (0x42 or 0x6C) || (0x42 or 0x6C)
+ * Getting: \---------------+----------------++------------------
+ * | | ||
+ * SetupPrefix| PASS(Exit_OK)| FAIL(Abort) || Delete
+ * | | ||
+ * SetupData | Not Reached | FAIL(Abort) || Delete
+ * | (Delete) | ||
+ *
+ */
+
+
+#define PASS_action 1
+#define FAIL_action 2
+#define DELETE_action 3
+
+static char *nothing = "No reply from server when trying to connect to %s\n";
+
+static void
+Timeout_Func(action)
+int action;
+{
+ char *server = Xst_server_node == NULL ? "Default Server" : Xst_server_node;
+
+ switch(action) {
+ case PASS_action:
+ Log_Trace("No prefix sent in response to bad byte order open request.");
+ Exit_OK ();
+ /*NOTREACHED*/
+ break;
+ case FAIL_action:
+ Log_Msg(nothing, server);
+ Abort ();
+ /*NOTREACHED*/
+ break;
+ case DELETE_action:
+ Log_Msg(nothing, server);
+ Delete ();
+ /*NOTREACHED*/
+ break;
+ default:
+ Log_Msg("INTERNAL TEST SUITE ERROR: bad action (%d) in Timeout_Func with server %s.", action, server);
+ Delete ();
+ /*NOTREACHED*/
+ break;
+ }
+}
+
+static void
+Normal_Timeout_Func() {
+ Timeout_Func(DELETE_action);
+}
+
+static void
+Good_Open_Timeout_Func() {
+ Timeout_Func(FAIL_action);
+}
+
+static void
+Bad_Open_Timeout_Func() {
+ Timeout_Func(PASS_action);
+}
+
+GetConnSetupPrefix (client, prefixp, needswap)
+int client;
+xConnSetupPrefix * prefixp;
+int needswap;
+{
+ XstDisplay * dpy;
+ char buffer[OBUFSIZE];
+ char *bptr;
+
+ dpy = Get_Display(client);
+
+ if (Get_Req_Type(client) == OPEN_DISPLAY_REQUEST_TYPE) {
+ if (Get_Test_Type(client) == OPEN_DISPLAY)
+ time_proc = Bad_Open_Timeout_Func;
+ else
+ time_proc = Good_Open_Timeout_Func;
+ } else
+ time_proc = Normal_Timeout_Func;
+
+ Set_Timer (CONNECT_TIMER_ID, Xst_timeout_value, time_proc);
+
+ Xst_EINTR_Read (dpy, (char *) buffer, (long) sizeof (xConnSetupPrefix));
+
+ Stop_Timer (CONNECT_TIMER_ID);
+
+ BPRINTF1 ("Connection setup prefix:\n");
+ bptr = buffer;
+ prefixp -> success = unpack1 (&bptr);
+ BPRINTF2 ("\tsuccess = %s\n", boolname(prefixp->success));
+ prefixp -> lengthReason = unpack1 (&bptr);
+ BPRINTF2 ("\tlengthReason = %d\n", prefixp->lengthReason);
+ prefixp -> majorVersion = unpack2 (&bptr, needswap);
+ BPRINTF2 ("\tmajorVersion = %d\n", prefixp->majorVersion);
+ prefixp -> minorVersion = unpack2 (&bptr, needswap);
+ BPRINTF2 ("\tminorVersion = %d\n", prefixp->minorVersion);
+ prefixp -> length = unpack2 (&bptr, needswap);
+ BPRINTF2 ("\tlength = %d\n", prefixp->length);
+}
+
+/*
+ * GetConnSetupData - reads & byte swaps (as appropriate)
+ * the rest of the connection setup data
+* (Note this is somewhat redundant with logic
+ * in XOpenDisplay - might merge later)
+ */
+
+GetConnSetupData (client, setupdp, len, needswap)
+int client;
+xConnSetup * setupdp;
+int len;
+int needswap;
+{
+ XstDisplay * dpy;
+ char buffer[OBUFSIZE];
+ char *bptr;
+ char *sptr; /* pointer into setup data area */
+ int pad;
+ int i;
+ int d;
+ int s;
+ int v;
+ int f;
+ int ndepths;
+ int nvisuals;
+
+ dpy = Get_Display(client);
+
+ if (Get_Req_Type(client) == OPEN_DISPLAY_REQUEST_TYPE) {
+ if (Get_Test_Type(client) == OPEN_DISPLAY) {
+ Log_Msg ("INTERNAL ERROR: should not be getting SetupData with TestType == OPEN_DISPLAY.");
+ Delete();
+ /*NOTREACHED*/
+ }
+ time_proc = Good_Open_Timeout_Func;
+ } else
+ time_proc = Normal_Timeout_Func;
+
+ Set_Timer (CONNECT_TIMER_ID, Xst_timeout_value, time_proc);
+
+ if (!needswap) {
+ Xst_EINTR_Read (dpy, (char *) setupdp, len);
+ Stop_Timer (CONNECT_TIMER_ID);
+ return;
+ }
+ else {
+ Xst_EINTR_Read (dpy, (char *) buffer, len);
+ Stop_Timer (CONNECT_TIMER_ID);
+ bptr = buffer;
+
+ setupdp -> release = unpack4 (&bptr, needswap);
+ setupdp -> ridBase = unpack4 (&bptr, needswap);
+ setupdp -> ridMask = unpack4 (&bptr, needswap);
+ setupdp -> motionBufferSize = unpack4 (&bptr, needswap);
+ setupdp -> nbytesVendor = unpack2 (&bptr, needswap);
+ setupdp -> maxRequestSize = unpack2 (&bptr, needswap);
+ setupdp -> numRoots = unpack1 (&bptr);
+ setupdp -> numFormats = unpack1 (&bptr);
+ setupdp -> imageByteOrder = unpack1 (&bptr);
+ setupdp -> bitmapBitOrder = unpack1 (&bptr);
+ setupdp -> bitmapScanlineUnit = unpack1 (&bptr);
+ setupdp -> bitmapScanlinePad = unpack1 (&bptr);
+ setupdp -> minKeyCode = unpack1 (&bptr);
+ setupdp -> maxKeyCode = unpack1 (&bptr);
+ setupdp -> pad2 = unpack4 (&bptr, needswap);
+
+ sptr = (char *) (setupdp + 1);
+
+/* get the vendor string */
+ bcopy (bptr, sptr, setupdp -> nbytesVendor);
+ pad = (setupdp -> nbytesVendor + 3) & ~3;
+ bptr += pad;
+ sptr += pad;
+
+ /* Z axis screen format info */
+ /* NOTE - this counts on only 1 byte quantities in the format!! */
+ for (f = 0; f < setupdp->numFormats; f++) {
+ bcopy (bptr, sptr, sizeof (xPixmapFormat));
+ bptr += sizeof (xPixmapFormat);
+ sptr += sizeof (xPixmapFormat);
+ }
+ /* Screen structures */
+ for (s = 0; s < setupdp->numRoots; s++) {
+ for (i = 0; i < 5; i++) {
+ swapcplp (bptr, sptr);
+ bptr += 4;
+ sptr += 4;
+ }
+ for (i = 0; i < 6; i++) {
+ swapcpsp (bptr, sptr);
+ bptr += 2;
+ sptr += 2;
+ }
+ swapcplp (bptr, sptr); /* visualID */
+ bptr += 4;
+ sptr += 4;
+ bcopy (bptr, sptr, 4);
+ ndepths = bptr[3]; /* pull out nDepths */
+ bptr += 4;
+ sptr += 4;
+ for (d = 0; d < ndepths; d++) {
+ *sptr++ = *bptr++;
+ *sptr++ = *bptr++;
+ swapcpsp (bptr, sptr);/* nVisuals */
+ nvisuals = * (short *) sptr;
+ bptr += 2;
+ sptr += 2;
+
+ bptr += 4; /* pad */
+ sptr += 4;
+
+ for (v = 0; v < nvisuals; v++) {
+ swapcplp (bptr, sptr);/* visualid */
+ bptr += 4;
+ sptr += 4;
+ *sptr++ = *bptr++;
+ *sptr++ = *bptr++;
+ swapcpsp (bptr, sptr);/* colormapEntries */
+ bptr += 2;
+ sptr += 2;
+ for (i = 0; i < 4; i++) {
+ swapcplp (bptr, sptr);
+ bptr += 4;
+ sptr += 4;
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/XstIO.c b/xc/test/xsuite/xtest/src/libproto/XstIO.c
new file mode 100644
index 000000000..9a7322697
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/XstIO.c
@@ -0,0 +1,169 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: XstIO.c 1.6 89/04/17 $
+ */
+
+#ifndef lint
+static char rcsid[]="$Header: XstIO.c 1.6 89/04/17 $";
+#endif
+
+#include "XstlibInt.h"
+#include "XstosInt.h"
+
+extern int errno;
+extern int sys_nerr;
+extern char *sys_errlist[];
+
+/*
+ * The following routines are internal routines used by Xst for protocol
+ * packet transmission and reception.
+ *
+ * XstIOError() will be called if any sort of system call error occurs.
+ * This is assumed to be a fatal condition, i.e., XstIOError should not return.
+ *
+ * Routines declared with a return type of 'Status' return 0 on failure,
+ * and non 0 on success. Routines with no declared return type don't
+ * return anything. Whenever possible routines that create objects return
+ * the object they have created.
+ */
+
+
+long Xst_br;
+long Xst_tr;
+long Xst_size;
+
+/*
+ * Xst_Read - Read bytes from the socket taking into account incomplete
+ * reads. This routine may have to be reworked if int < long.
+ * This routine MUST be bracketted by Start/Stop_Timer calls as some
+ * SVR4 systems erroneously return EAGAIN from closed connections so
+ * we rely on the timer to rescue us.
+ */
+int
+Xst_Read (dpy, data, size)
+register XstDisplay * dpy;
+register char *data;
+register long size;
+{
+ long bytes_read = 0;
+ long this_read;
+
+
+ if (size == 0) {
+ return(0);
+ }
+
+ Xst_br = 0;
+ Xst_tr = 0;
+ Xst_size = size;
+
+ Reset_Some();
+ while (1) {
+ Xst_tr = this_read = ReadFromServer (dpy -> fd, data, (int) size);
+ Log_Some("Xst_Read(%d, 0x%x, %d) -> %d, errno = %d\n",dpy->fd,(unsigned)data,(int)size,(int)this_read,(int)errno);
+ if (this_read == size)
+ break;
+ if (this_read > 0) {
+ size -= this_read;
+ data += this_read;
+ bytes_read += this_read;
+ Xst_size = size;
+ Xst_br = bytes_read;
+ }
+
+ else if (this_read == 0) {
+ _XstWaitForReadable(dpy);
+ }
+ else {
+ /* if we would block then round again, rely on timer to
+ * rescue us from spinning forever (known SVR4 bug).
+ */
+#ifdef EWOULDBLOCK
+ if (errno == EWOULDBLOCK)
+ _XstWaitForReadable(dpy);
+ else
+#endif
+#ifdef EAGAIN
+ if (errno == EAGAIN)
+ _XstWaitForReadable(dpy);
+ else
+#endif
+ {
+ Reset_Some();
+ Log_Debug("Xst_Read(%d, 0x%x, %d) returning %d, errno = %d\n",
+ dpy->fd,(unsigned)data,(int)size,(int)this_read,(int)errno);
+ return(this_read);
+ }
+ }
+ }
+ bytes_read += this_read;
+ Xst_br = bytes_read;
+ Xst_tr = this_read;
+ Reset_Some();
+ Log_Debug("Xst_Read(%d, 0x%x, %d) returning %d, errno = OK\n",
+ dpy->fd,(unsigned)data,(int)size,(int)this_read);
+ return(bytes_read);
+}
+
+/*ARGSUSED*/
+void XstIOError (dpy,str,incperror)
+XstDisplay * dpy;
+char *str;
+int incperror; /* include system error info */
+{
+ char emsg[132];
+
+ if (incperror) {
+ if ((errno >= 0) && (errno < sys_nerr)) {
+ (void) strcpy(emsg,sys_errlist[errno]);
+ }
+ else {
+ sprintf(emsg,"UNKNOWN ERROR - %d",errno);
+ }
+ }
+ else {
+ emsg[0]='\0';
+ }
+ Log_Msg ("%s %s\n",str,emsg);
+ Delete ();
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/XstlibInt.h b/xc/test/xsuite/xtest/src/libproto/XstlibInt.h
new file mode 100644
index 000000000..db06eedb1
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/XstlibInt.h
@@ -0,0 +1,191 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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: XstlibInt.h 1.23 89/04/17 $
+ */
+
+#include "Xstlib.h"
+#include <stdio.h>
+#include <errno.h>
+
+#ifndef NULL
+#define NULL 0
+#endif
+
+void Copy_Padded_String16();
+void Copy_Padded_String8();
+void SendIt();
+void Send_String16();
+void Send_TextItem16();
+void Send_TextItem8();
+void Send_Value_List();
+unsigned char unpack1();
+unsigned short unpack2();
+unsigned long unpack4();
+void pack1();
+void pack2();
+void pack4();
+void packpad();
+void XstIOError();
+int Xst_Read();
+void squeeze_me_in();
+
+/* 128 bytes per reply plus 32736 longwords for reply data (just big enough
+to do GetRootImage on NCD terminal) */
+
+#define OBUFSIZE (4*32768+128) /* Output buffer size (for sending on the wire) */
+#define IBUFSIZE OBUFSIZE /* input buffer size (max reply size) */
+
+/* the following magic number makes the GetImage reply able to be shown */
+/* this is a temporary quick fix */
+
+#define PRTBUFSIZ 1024 /* Print buffer size (for Show_* routines) */
+
+#define XTESTKNOBS "XTestKnobs" /* file to change default test
+ reporting parameters */
+#define SERVER_DEF "" /* the X server */
+
+/*
+ * Macros for sending messages to the display server via the
+ * 'Display' structure buffer
+ *
+ */
+
+#define send1(cl,val) *((Get_Display(cl)->bufptr)++) = (unsigned char) val
+
+#define send2(cl,val) pack2(&(Get_Display(cl)->bufptr),(short)val,Xst_clients[cl].cl_swap)
+
+#define send4(cl,val) pack4(&(Get_Display(cl)->bufptr),(long)val,Xst_clients[cl].cl_swap)
+
+#define send2_lsb(cl,val) pack2_lsb(&(Get_Display(cl)->bufptr),(short)val)
+
+#define sendpad(cl,cnt) bzero(Get_Display(cl)->bufptr,cnt);\
+ Get_Display(cl)->bufptr += cnt
+
+
+/*
+ * Defines used in Show_* for creating a print buffer.
+ */
+
+#define BPRINTF1(fmt) Log_Debug2(fmt);
+#define VBPRINTF1(fmt) Log_Debug3(fmt);
+
+#define BPRINTF2(fmt,var) Log_Debug2((fmt),(var));
+#define VBPRINTF2(fmt,var) Log_Debug3((fmt),(var));
+
+#define FORMAT8 8
+#define FORMAT16 16
+#define FORMAT32 32
+#define FORMATtimecoord 1
+#define FORMATrgb 2
+#define FORMATpoint 3
+#define FORMATrectangle 4
+#define FORMATarc 5
+#define FORMATcoloritem 6
+#define FORMATfontprop 7
+#define FORMATcharinfo 9
+
+/*
+ * Defines used to indicate unimplemented functions - their
+ * appearance in the log file indicates use of a portion of
+ * a library routine which has not been completely fleshed out.
+ */
+
+#define CANT_MAKE(structname,eltname) \
+ {\
+ char ebuf[132];\
+ sprintf(ebuf,"\tCANT_MAKE (%s->%s)\n",structname,eltname);\
+ Log_Debug(ebuf);\
+ }
+
+#define CANT_SEND(structname,eltname) \
+ {\
+ char ebuf[132];\
+ sprintf(ebuf,"\tCANT_SEND (%s->%s)\n",structname,eltname);\
+ Log_Debug(ebuf);\
+ }
+
+#define CANT_SHOW(structname,eltname) \
+ {\
+ char ebuf[132];\
+ sprintf(ebuf,"\tCANT_SHOW (%s->%s)\n",structname,eltname);\
+ Log_Debug(ebuf);\
+ }
+
+/*
+ * Safety net for all defaults in switch statements - this indicates
+ * an internal error in the library
+ */
+
+#define DEFAULT_ERROR \
+ {\
+ char ebuf[132];\
+ sprintf(ebuf,"\tDEFAULT_ERROR(file = %s, line = %d)\n",__FILE__,__LINE__);\
+ Log_Msg(ebuf);\
+ Delete();\
+ }
+
+/*
+ * Externs for test-wide globals
+ */
+extern char *Xst_server_node; /* the X server */
+extern int Xst_required_byte_sex;/* byte sex wanted */
+extern int Xst_timeout_value; /* seconds that Expect will wait */
+extern int Xst_visual_check; /* seconds to delay at Visual_Check calls */
+
+extern int Xst_byte_sex; /* client byte sex for this connection */
+extern int Xst_error_count; /* number of calls to Log_Error */
+extern int Xst_delete_count; /* number of calls to Log_Del */
+extern int Xst_untested_count; /* indicates to Log_Close that Untested called */
+extern char *Xst_def_font8; /* default 8-bit font to use */
+extern char *Xst_def_font16; /* default 16-bit font to use */
+extern int Xst_protocol_version;
+extern int Xst_protocol_revision;
+extern int Xst_override;
+
+/*
+ * Timer assignments
+ */
+
+#define EXPECT_TIMER_ID 1
+#define VISUAL_CHECK_TIMER 2
+#define CONNECT_TIMER_ID 3
diff --git a/xc/test/xsuite/xtest/src/libproto/XstosInt.h b/xc/test/xsuite/xtest/src/libproto/XstosInt.h
new file mode 100644
index 000000000..629f9c330
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/XstosInt.h
@@ -0,0 +1,137 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/* Header file for UNIX library for X Server tests.
+ *
+ */
+
+/*
+ * ***************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ * ***************************************************************************
+ */
+
+/*
+ * System header files.
+ */
+
+#include <netinet/in.h>
+#include <sys/ioctl.h>
+#include <netdb.h>
+
+#include <sys/uio.h>
+#include <sys/param.h>
+
+
+#ifdef SVR4
+#include <sys/select.h>
+#define MAXSOCKS FD_SETSIZE
+#else
+#define MAXSOCKS ( NOFILE - 1 )
+#endif
+#define MSKCNT ((MAXSOCKS + 31) / 32) /* size of bit array */
+
+#if (MSKCNT==1)
+#define BITMASK(i) (1 << (i))
+#define MASKIDX(i) 0
+#endif
+#if (MSKCNT>1)
+#define BITMASK(i) (1 << ((i) & 31))
+#define MASKIDX(i) ((i) >> 5)
+#endif
+
+#define MASKWORD(buf, i) buf[MASKIDX(i)]
+#define BITSET(buf, i) MASKWORD(buf, i) |= BITMASK(i)
+#define BITCLEAR(buf, i) MASKWORD(buf, i) &= ~BITMASK(i)
+#define GETBIT(buf, i) (MASKWORD(buf, i) & BITMASK(i))
+
+#if (MSKCNT==1)
+#define COPYBITS(src, dst) dst[0] = src[0]
+#define CLEARBITS(buf) buf[0] = 0
+#define MASKANDSETBITS(dst, b1, b2) dst[0] = (b1[0] & b2[0])
+#define ORBITS(dst, b1, b2) dst[0] = (b1[0] | b2[0])
+#define UNSETBITS(dst, b1) (dst[0] &= ~b1[0])
+#define ANYSET(src) (src[0])
+#endif
+#if (MSKCNT==2)
+#define COPYBITS(src, dst) { dst[0] = src[0]; dst[1] = src[1]; }
+#define CLEARBITS(buf) { buf[0] = 0; buf[1] = 0; }
+#define MASKANDSETBITS(dst, b1, b2) {\
+ dst[0] = (b1[0] & b2[0]);\
+ dst[1] = (b1[1] & b2[1]); }
+#define ORBITS(dst, b1, b2) {\
+ dst[0] = (b1[0] | b2[0]);\
+ dst[1] = (b1[1] | b2[1]); }
+#define UNSETBITS(dst, b1) {\
+ dst[0] &= ~b1[0]; \
+ dst[1] &= ~b1[1]; }
+#define ANYSET(src) (src[0] || src[1])
+#endif
+#if (MSKCNT==3)
+#define COPYBITS(src, dst) { dst[0] = src[0]; dst[1] = src[1]; dst[2] = src[2]; }
+#define CLEARBITS(buf) { buf[0] = 0; buf[1] = 0; buf[2] = 0; }
+#define MASKANDSETBITS(dst, b1, b2) {\
+ dst[0] = (b1[0] & b2[0]);\
+ dst[1] = (b1[1] & b2[1]);\
+ dst[2] = (b1[2] & b2[2]); }
+#define ORBITS(dst, b1, b2) {\
+ dst[0] = (b1[0] | b2[0]);\
+ dst[1] = (b1[1] | b2[1]);\
+ dst[2] = (b1[2] | b2[2]); }
+#define UNSETBITS(dst, b1) {\
+ dst[0] &= ~b1[0]; \
+ dst[1] &= ~b1[1]; \
+ dst[2] &= ~b1[2]; }
+#define ANYSET(src) (src[0] || src[1] || src[2])
+#endif
+#if (MSKCNT>3)
+#define COPYBITS(src, dst) bcopy((caddr_t) src, (caddr_t) dst,\
+ MSKCNT*sizeof(long))
+#define CLEARBITS(buf) bzero((caddr_t) buf, MSKCNT*sizeof(long))
+#define MASKANDSETBITS(dst, b1, b2) { int cri;\
+ for (cri=0; i<MSKCNT; cri++) \
+ dst[cri] = (b1[cri] & b2[cri]); }
+#define ORBITS(dst, b1, b2) { int cri;\
+ for (cri=0; i<MSKCNT; cri++) \
+ dst[cri] = (b1[cri] | b2[cri]); }
+#define UNSETBITS(dst, b1) { int cri;\
+ for (cri=0; i<MSKCNT; cri++) \
+ dst[cri] &= ~b1[cri]; }
+#define ANYSET(src) (src[0] || src[1] || src[2])
+#endif
+
+#define BytesReadable(fd, ptr) ioctl ((fd), FIONREAD, (ptr))
+#define ReadFromServer(dpy, data, size) read((dpy), (data), (size))
+#define WriteToServer(dpy, data, size) write((dpy), (data), (size))
diff --git a/xc/test/xsuite/xtest/src/libproto/delete.c b/xc/test/xsuite/xtest/src/libproto/delete.c
new file mode 100644
index 000000000..d3c6e08f3
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/delete.c
@@ -0,0 +1,121 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*LINTLIBRARY*/
+
+#include "stdio.h"
+#include "xtest.h"
+#include "tet_api.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "pixval.h"
+#include "XstlibInt.h"
+
+#if TEST_ANSI
+#include <stdarg.h>
+#else
+#include <varargs.h>
+#endif
+
+#define LINELEN 1024
+
+/*
+ * Routines to control deleting of tests.
+ *
+ * xproto lib version to avoid pulling in Xlib functions like XSync or
+ * the connection opening stuff along with references to Dsp etc.
+ * (refer to libxtest versions of same to see what's happening)
+ * Use Xst_delete_count instead of a static boolean.
+ */
+
+extern int tet_thistest;
+
+/*
+ * Call this routine to delete the current test. If there is a message
+ * it is output using report(). If not then a generic message is output
+ * as a fail safe measure.
+ */
+/*VARARGS1*/
+
+void
+#if TEST_ANSI
+delete(char *mess, ... )
+#else
+delete(mess, va_alist)
+char *mess;
+va_dcl
+#endif
+{
+char buf[LINELEN];
+va_list args;
+
+#if TEST_ANSI
+ va_start(args, mess);
+#else
+ va_start(args);
+#endif
+
+ Xst_delete_count++;
+
+ if (mess && *mess) {
+ (void) vsprintf(buf, mess, args);
+ report(buf);
+ } else
+ report("Test deleted");
+
+ /*
+ * Can not call tet_result from within a startup routine.
+ */
+ if (tet_thistest)
+ tet_result(TET_UNRESOLVED);
+}
+
+/*
+ * Return True if deleted, False if not.
+ */
+int
+isdeleted()
+{
+ return(Xst_delete_count > 0);
+}
+
+/*
+ * Reset the delete count back to 0.
+ */
+void
+resetdelete()
+{
+ Xst_delete_count = 0;
+}
+
+/*
+ * Cancel all remaining tests in this test case. They will
+ * not be initiated by the TCM. The current test is not affected,
+ * that should be marked as deleted with delete() if that is desired.
+ * Can also be called from startup routines - none of the tests will be
+ * run.
+ */
+void
+cancelrest(reason)
+char *reason;
+{
+extern int ntests;
+int i;
+
+ for (i = tet_thistest+1; i <= ntests; i++)
+ tet_delete(i, reason);
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/linkstart.c b/xc/test/xsuite/xtest/src/libproto/linkstart.c
new file mode 100644
index 000000000..2f902c141
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/linkstart.c
@@ -0,0 +1,167 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+#include "tet_api.h"
+#include "stdlib.h"
+#include <stdio.h>
+#include <string.h>
+
+#define MAXTPS 1000
+#define TLI nullfn,1
+#define TLI10 TLI, TLI, TLI, TLI, TLI, TLI, TLI, TLI, TLI, TLI
+#define TLI50 TLI10, TLI10, TLI10, TLI10, TLI10
+
+static void
+nullfn()
+{
+ return;
+}
+
+/*
+ * Define the TET interface variables here. This module will be
+ * brought into the executable by the references to these variables.
+ */
+int tet_thistest;
+
+struct tet_testlist tet_testlist[MAXTPS+1] = {
+ TLI50, TLI50, TLI50, TLI50, TLI50,
+ TLI50, TLI50, TLI50, TLI50, TLI50,
+ TLI50, TLI50, TLI50, TLI50, TLI50,
+ TLI50, TLI50, TLI50, TLI50, TLI50,
+ NULL, 0 };
+
+void linkstart();
+void linkclean();
+
+void (*tet_startup)() = linkstart;
+void (*tet_cleanup)() = linkclean;
+
+char *TestName;
+int ntests;
+
+extern char *tet_pname;
+
+extern struct linkinfo *linktbl[];
+
+/*
+ * The startup routine for the linked executables case. We have
+ * to make some assumptions about the TET that are not officialy in
+ * the spec.
+ * - It is valid to change the contents of tet_testlist[] in the
+ * startup routine.
+ *
+ * Get the name of the routine and set up the interface to
+ * point to the tests for that routine.
+ */
+void
+linkstart()
+{
+struct linkinfo *lp;
+struct linkinfo **lpp;
+struct tet_testlist *tlp;
+char *name;
+int i;
+
+ lp = (struct linkinfo *)0;
+
+ /*
+ * Get the basename part of tet_pname.
+ */
+ name = strrchr(tet_pname, '/');
+ if (name)
+ name++;
+ else
+ name = tet_pname;
+
+ for (lpp = linktbl; *lpp; lpp++) {
+ if (strcmp((*lpp)->name, name) == 0) {
+ lp = *lpp;
+ break;
+ }
+ }
+
+ if (lp == (struct linkinfo *)0) {
+ /*
+ * If this happens if probably means that the executable
+ * has been built incorrectly.
+ */
+ report("Name (%s) not found in link table, aborting test\n", name);
+ fprintf(stderr, "Name (%s) not found in link table, aborting test\n", name);
+ exit(EXIT_FAILURE);
+ }
+
+ TestName = lp->testname;
+ ntests = *lp->ntests;
+
+ tlp = lp->testlist;
+ for (i = 0; tlp[i].testfunc != 0; i++) {
+ tet_testlist[i] = tlp[i];
+ }
+ /* Copy the final null entry */
+ tet_testlist[i] = tlp[i];
+
+ if (lp->localstartup)
+ (*lp->localstartup)();
+ else
+ protostartup();
+
+}
+
+/*
+ * Cleanup function for linked executables.
+ */
+void
+linkclean()
+{
+struct linkinfo *lp;
+struct linkinfo **lpp;
+char *name;
+
+ lp = (struct linkinfo *)0;
+
+ /*
+ * Get the basename part of tet_pname.
+ */
+ name = strrchr(tet_pname, '/');
+ if (name)
+ name++;
+ else
+ name = tet_pname;
+
+ for (lpp = linktbl; *lpp; lpp++) {
+ if (strcmp((*lpp)->name, name) == 0) {
+ lp = *lpp;
+ break;
+ }
+ }
+
+ if (lp == (struct linkinfo *)0) {
+ /*
+ * If this happens here, something has gone VERY BADLY WRONG
+ * and I'm not certain what we can do about it.
+ */
+ report("Name (%s) not found in link table in linkclean!\n", name);
+ fprintf(stderr, "Name (%s) not found in link table in linkclean!\n", name);
+ exit(EXIT_FAILURE);
+ }
+
+ if (lp->localcleanup)
+ (*lp->localcleanup)();
+ else
+ protocleanup();
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/startup.c b/xc/test/xsuite/xtest/src/libproto/startup.c
new file mode 100644
index 000000000..d74231a9d
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/startup.c
@@ -0,0 +1,136 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdio.h"
+#include "unistd.h"
+#include "string.h"
+#include "tet_api.h"
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "XstlibInt.h"
+
+/*
+ * Generic startup routine for tests. All tests in general call
+ * this routine unless there is a good reason not to.
+ *
+ * This version of startup.c is for the X protocol test suite.
+ */
+
+#define LINELEN 1024
+char buf[LINELEN];
+
+Display *Dsp;
+
+extern int ntests;
+
+void
+protostartup()
+{
+int i;
+char *disp;
+char *cp;
+extern char *TestName;
+extern struct tet_testlist tet_testlist[];
+
+/* error handlers from libxtest */
+extern int io_err(), unexp_err();
+
+ /*
+ * Set the debug level first (it is used in initconfig).
+ */
+ if ((cp = tet_getvar("XT_DEBUG")) != NULL) {
+ extern int DebugLevel;
+
+ setdblev(atoi(cp));
+ } else {
+ setdblev(0);
+ }
+
+ /*
+ * Obtain and check all configuration parameters.
+ */
+ initconfig();
+
+ /*
+ * Set local variables from configuration parameters.
+ */
+ checkconfig();
+
+ /*
+ * Put out the NAME info line for the report generator.
+ */
+ (void) sprintf(buf, "TRACE:NAME: %s", TestName);
+ tet_infoline(buf);
+
+ /*
+ * Pause a while in case the X server is resetting.
+ */
+ reset_delay();
+
+ /*
+ * Get the display to use and open it.
+ */
+ disp = tet_getvar("XT_DISPLAY");
+
+ if (disp == (char*)0) {
+ cancelrest("XT_DISPLAY not set");
+ return;
+ }
+
+ /*
+ * In the X Protocol tests, Dsp is not used - the main reason for
+ * opening a connection here is to prevent further server resets
+ * between test purposes.
+ */
+ (void) XSetErrorHandler(unexp_err); /* unexp_err() can rely
+ on Dsp as not called unless set */
+ (void) XSetIOErrorHandler(io_err); /* io_err() mustn't & doesn't.... */
+ Dsp = XOpenDisplay(disp);
+
+ if (Dsp == (Display *)0) {
+ report("Could not open display. Can not continue.");
+ for (i = 0; i < ntests; i++)
+ tet_testlist[i].testfunc = aborttest;
+ return;
+ }
+
+ /* Make sure that screen saver hasn't cut in */
+ XResetScreenSaver(Dsp);
+
+ /*
+ * Sync and clear out queue.
+ */
+ XSync(Dsp, True);
+
+}
+
+/*
+ * Cleanup function called at the end of the test purposes.
+ */
+void
+protocleanup()
+{
+ if (Dsp) {
+ /* At present this causes needless problems... */
+#ifndef GENERATE_PIXMAPS
+ /* about to exit anyway... */
+ (void) close(ConnectionNumber(Dsp));
+#endif
+ }
+}
diff --git a/xc/test/xsuite/xtest/src/libproto/tpstartup.c b/xc/test/xsuite/xtest/src/libproto/tpstartup.c
new file mode 100644
index 000000000..21b88c4b7
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/libproto/tpstartup.c
@@ -0,0 +1,213 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdio.h"
+#include "unistd.h"
+#include "string.h"
+#include "tet_api.h"
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "xtestlib.h"
+#include "XstlibInt.h"
+
+/*
+ * Actions to take at the beginning of a test purpose.
+ * This version of tpstartup.c is for the X protocol test suite.
+ */
+void
+tpstartup()
+{
+}
+
+/*
+ * Actions to take at the end of a test purpose.
+ */
+void
+tpcleanup()
+{
+}
+
+static char *savedfontpath = NULL;
+
+static char *
+put_in_commas(rep)
+xGetFontPathReply *rep;
+{
+ char *p = NULL; /* for now, need Xstrealloc() etc. */
+ unsigned int total_len;
+ int npaths;
+ char *endptr;
+ CARD8 *fromptr;
+ char *toptr;
+ int reqlen = sizeof(xGetFontPathReply) + (int) (rep->length << 2);
+
+ if (reqlen < sizeof(xGetFontPathReply)) {
+ Log_Del ("Current server fontpath returned with bad length (%d)\n", reqlen);
+ Free_Reply(rep);
+ return NULL;
+ }
+ for (total_len=npaths=0,
+ fromptr=(CARD8 *)(((char *)rep)+sizeof(xGetFontPathReply));
+ npaths < (int)rep->nPaths;
+ npaths++) {
+ total_len += *fromptr;
+ fromptr += *fromptr + 1;
+ }
+ total_len += (npaths * sizeof(char)); /* commas + final nul */
+ Log_Debug("Server's initial fontpath required %d bytes and had %d components\n", total_len, npaths);
+ if (total_len <= 1 || npaths == 0) {
+ Free_Reply(rep);
+ return NULL;
+ }
+ p = (char *) Xstmalloc(total_len);
+ if (p == NULL) {
+ Log_Del ("Could not allocate %d bytes to store server's initial fontpath\n", total_len);
+ Free_Reply(rep);
+ return NULL;
+ }
+ endptr = p + total_len - 1;
+ for (toptr=p,fromptr=(CARD8 *)(((char *)rep)+sizeof(xGetFontPathReply));
+ npaths > 0;
+ npaths--) {
+ CARD8 len = *fromptr;
+
+ bcopy(fromptr+1, toptr, (unsigned int)len);
+ fromptr += len + 1;
+ toptr += len;
+ *toptr++ = ',';
+ }
+ *endptr = '\0'; /* stamp on last comma to terminate the string. */
+
+ Free_Reply(rep);
+ return p;
+}
+
+static char *
+getfontpath(client)
+int client;
+{
+ xReq *req;
+ xGetFontPathReply *rep;
+
+ req = (xReq *) Make_Req(client, X_GetFontPath);
+ Send_Req(client, (xReq *) req);
+ Log_Trace("client %d sent startup GetFontPath request\n", client);
+ if ((rep = (xGetFontPathReply *) Expect_Reply(client, X_GetFontPath)) == NULL) {
+ Log_Del("Failed to receive startup GetFontPath reply\n");
+ Free_Req(req);
+ return NULL;
+ } else {
+ Log_Trace("client %d received startup GetFontPath reply\n", client);
+ }
+ (void) Expect_Nothing(client);
+ Free_Req(req);
+
+ return put_in_commas(rep);
+}
+
+static void
+setfontpath(client,prevpath)
+int client;
+char *prevpath;
+{
+ xReq *req;
+ char *commaptr;
+ CARD8 n;
+ CARD16 nf;
+
+ req = (xReq *) Make_Req(client, X_SetFontPath);
+ req = Clear_Counted_Value(req);
+ ((xSetFontPathReq *)req)->nFonts = 0;
+ /* don't touch nFonts until all Add_Counted_Value calls done
+ as it uses nFonts as a count of bytes added. We must start
+ with it zero and only set it to the actual value after all of
+ value bytes added.
+ */
+
+ for (n=nf=0, commaptr=prevpath; commaptr && *commaptr;) {
+ char *p = SearchString(commaptr, ',');
+ int i;
+
+ if (p != NULL)
+ *p = '\0';
+ n = strlen(commaptr);
+ if (n > 0) {
+ req = Add_Counted_Value(req, n);
+ for (i=n; i-- > 0; commaptr++)
+ req = Add_Counted_Value(req, *commaptr);
+ nf++;
+ }
+ if (p != NULL) {
+ if (commaptr != p) {
+ Log_Del("INTERNAL ERROR in fontsetting\n");
+ return;
+ }
+ *commaptr++ = ',';
+ }
+ }
+ /* must do this as Add_Counted_Value uses nFonts as byte count */
+ ((xSetFontPathReq *)req)->nFonts = nf;
+ Log_Debug("Set font path to '%s': %d components\n", prevpath, nf);
+
+ Send_Req(client, (xReq *) req);
+ Log_Trace("client %d sent startup SetFontPath request\n", client);
+ (void) Expect_Nothing(client);
+
+ Free_Req(req);
+}
+
+/*
+ * Actions to take at the beginning of a test purpose.
+ * This version of tpstartup.c is for the X protocol test suite.
+ * Special version to set font path and create long lived client.
+ */
+void
+tpfontstartup()
+{
+ /*
+ * Reset SIGALRM signals to be caught in case the TCM has messed
+ * with the signal settings. This only needs to be done in
+ * tpfontstartup(), not in startup(), because in the default case
+ * we don't make any protocol requests in this process (parent),
+ * so the timer is not even switched on in the parent.
+ * Normally, all the action happens only in the child process.
+ */
+ Set_Init_Timer();
+ Create_Client(LONG_LIVED_CLIENT);
+ savedfontpath = getfontpath(LONG_LIVED_CLIENT);
+ Log_Trace("Server's initial fontpath was '%s'\n",
+ (savedfontpath == NULL) ? "<Nothing>" : savedfontpath);
+ if (config.fontpath == NULL || *config.fontpath == '\0') {
+ Log_Del("No, or empty, XT_FONTPATH set\n");
+ return;
+ }
+ setfontpath(LONG_LIVED_CLIENT, config.fontpath);
+}
+
+/*
+ * Actions to take at the end of a test purpose.
+ * Special version to reset font path and destroy long lived client.
+ */
+void
+tpfontcleanup()
+{
+ setfontpath(LONG_LIVED_CLIENT, savedfontpath);
+ if (savedfontpath != NULL)
+ free(savedfontpath);
+ Destroy_Client(LONG_LIVED_CLIENT);
+}
diff --git a/xc/test/xsuite/xtest/src/pixval/blowup/Makefile b/xc/test/xsuite/xtest/src/pixval/blowup/Makefile
new file mode 100644
index 000000000..e0dfede59
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/pixval/blowup/Makefile
@@ -0,0 +1,34 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+CFILES=ajax.c vblowup_c.c
+OFILES=ajax.o vblowup_c.o
+RM_FILES=*.o blowup core
+
+blowup: $(OFILES)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(PORTLIB) $(SYSLIBS) $(SYSMATHLIB)
+
+install: blowup
+ $(CP) blowup $(XTESTBIN)
+
+clean:
+ $(RM) $(RM_FILES)
+
+lint:
+ $(LINT) $(LINTFLAGS) $(CFILES)
+
+doc:
+ ctodoc $(CFILES) > $$TET_ROOT/../doc/blowupraw.mm
diff --git a/xc/test/xsuite/xtest/src/pixval/blowup/ajax.c b/xc/test/xsuite/xtest/src/pixval/blowup/ajax.c
new file mode 100644
index 000000000..863bbcc03
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/pixval/blowup/ajax.c
@@ -0,0 +1,503 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "stdlib.h"
+#include "xtest.h"
+#include "stdio.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include <string.h>
+
+#ifndef EXIT_FAILURE
+#define EXIT_FAILURE 1
+#endif
+
+#define FGPIX BlackPixel(disp, DefaultScreen(disp))
+#define BGPIX WhitePixel(disp, DefaultScreen(disp))
+
+int Zoom = 4;
+int Width, Height;
+int depth;
+
+static Pixmap Shadepm = None;
+static Pixmap Crosspm = None;
+static int LastZoom = -1;
+static int Colour = 0;
+static char *font_name = NULL;
+
+int readimage();
+
+/* Is this an error or dat file */
+int FileType;
+#define TYPE_ERROR 1
+#define TYPE_DATA 2
+
+main(argc, argv)
+int argc;
+char **argv;
+{
+Display *disp;
+Window win;
+GC gc;
+char *ps;
+char *file = NULL;
+char *disp_name = NULL;
+char *prog_name = argv[0];
+int errs = 0;
+
+ font_name = NULL;
+ while (--argc > 0) {
+ ps = *++argv;
+ if (*ps++ == '-') {
+ switch (*ps) {
+ case 'c':
+ Colour = 1;
+ break;
+ case 'z':
+ if (argc-- <= 0 || (Zoom=atoi(*++argv)) <= 0)
+ errs++;
+ break;
+ case 'd':
+ if (argc-- > 0)
+ disp_name = *++argv;
+ else
+ errs++;
+ break;
+ case 'f':
+ if (argc-- > 0)
+ font_name = *++argv;
+ else
+ errs++;
+ break;
+ default:
+ printf("Bad flag (%c)\n", *ps);
+ errs++;
+ break;
+ }
+ } else {
+ file = *argv;
+ break;
+ }
+ }
+
+ if (errs > 0) {
+ printf("USAGE: %s [-z zoom_factor] [-d display] [-colour] [-f font] file(s)\n",
+ prog_name);
+ exit(EXIT_FAILURE);
+ }
+ if (file == NULL) {
+ printf("No file name given\n");
+ exit(EXIT_FAILURE);
+ }
+
+ if ((disp = XOpenDisplay(disp_name)) == NULL) {
+ printf("Can't open display '%s'\n", XDisplayName(disp_name));
+ exit(EXIT_FAILURE);
+ }
+
+
+ win = XCreateSimpleWindow(disp, DefaultRootWindow(disp),
+ 200, 0,
+ (unsigned)1, (unsigned)1,
+ (unsigned)1,
+ (unsigned long)1, (unsigned long)0
+ );
+ XSelectInput(disp, win,
+ StructureNotifyMask|ExposureMask|ButtonPressMask|KeyPressMask);
+
+ gc = XCreateGC(disp, win, 0L, (XGCValues *)0);
+ XSetForeground(disp, gc, FGPIX);
+ XSetBackground(disp, gc, BGPIX);
+ XSetFunction(disp, gc, GXcopy);
+ LastZoom = -1; /* force setzoom to do something first time */
+ setzoom(disp, win, gc);
+
+ do {
+ if (processfile(disp, win, gc, file) == -1)
+ break;
+ file = *++argv;
+ } while (--argc > 0);
+}
+
+processfile(disp, win, gc, file)
+Display *disp;
+Window win;
+GC gc;
+char *file;
+{
+FILE *fp;
+int ret;
+
+ fp = fopen(file, "r");
+ if (fp == NULL) {
+ fprintf(stderr, "Can't open %s\n", file);
+ exit(EXIT_FAILURE);
+ }
+
+ /*
+ * TEMP XXX
+ * This should be from info in the file -- note this will not work
+ * if a file name of foo/Err is used
+ */
+ if (*file == 'E')
+ FileType = TYPE_ERROR;
+ else
+ FileType = TYPE_DATA;
+
+ /* setzoom(disp, win, gc); */
+
+ while ((ret=proc(disp, win, gc, fp)) == 1)
+ ;
+ fclose(fp);
+ return ret;
+}
+
+proc(disp, win, gc, fp)
+Display *disp;
+Window win;
+GC gc;
+FILE *fp;
+{
+static int mapped = 0;
+XImage *images[2];
+int nim;
+int ret;
+
+ nim = readimage(fp, images, disp);
+ if (nim <= 0)
+ return 0;
+
+ if (Width && Height)
+ XResizeWindow(disp, win, Width*Zoom, Height*Zoom);
+
+ if (!mapped) {
+ XEvent event;
+ mapped++;
+ XMapWindow(disp, win);
+ XWindowEvent(disp, win, ExposureMask, &event);
+ while (XCheckMaskEvent(disp, StructureNotifyMask, &event))
+ ;
+ } else {
+ XClearWindow(disp, win);
+ }
+ ret = dispimage(disp, win, gc, images, nim) ? 1 : -1;
+ while(nim-- > 0)
+ XDestroyImage(images[nim]);
+ return ret;
+}
+
+
+dispimage(disp, win, gc, images, nim)
+Display *disp;
+Window win;
+GC gc;
+XImage *images[2];
+int nim;
+{
+int w, h, size;
+static XImage *lastim1, *lastim2;
+XImage *image;
+void repaint();
+
+ /*
+ * Use the last image(s) if this one is NULL XXX
+ */
+ if (images == NULL || nim <= 0) {
+ if (lastim1 == NULL)
+ return 0;
+ image = lastim1;
+ nim = 1;
+ } else
+ image = images[0];
+
+ lastim1 = image;
+ if (nim >= 2)
+ lastim2 = images[1];
+
+ XSetState(disp, gc, FGPIX^BGPIX, 0, GXxor, FGPIX|BGPIX);
+
+ w = Width*Zoom;
+ h = Height*Zoom;
+ size = (Width < Height) ? Width : Height;
+ size = (size < 250) ? 250 : size;
+ return VBlowup(disp, win, gc, 0, 0, w, h, size, 2, None,
+ image, (nim>=2)?images[1]:NULL,
+ 0, 0, W_BG, w/2, h/2, 1, Colour, repaint, &Zoom, font_name);
+}
+
+void repaint(disp, win, gc, image1, image2, compare_colour, evp, which)
+Display *disp;
+Window win;
+GC gc;
+XImage *image1, *image2;
+int compare_colour;
+unsigned int which;
+{
+ int x,y;
+ unsigned long pix1, pix2, mask, bg = W_BG;
+
+ if (image2 == NULL)
+ which = 0x1; /* "bad" one only */
+ else if (which == 0x2) {/* "good" only */
+ image1 = image2;
+ image2 = NULL;
+ }
+ if (image1 == NULL) {
+ printf("No image file to display\n");
+ return;
+ }
+ if (which == 0x3 && image2 == NULL) {
+ printf("expected to be given two image files\n");
+ return;
+ }
+ XClearWindow(disp, win);
+ setzoom(disp, win, gc);
+ mask = DEPTHMASK(image1->depth) & DEPTHMASK( image2 ? image2->depth : 32 );
+
+#ifdef DEBUG
+printf("repaint: W=%d, H=%d\n",Width, Height);
+printf("image1: w=%d, h=%d\n",image1->width, image1->height);
+if(image2) printf("image2: w=%d, h=%d\n",image2->width, image2->height);
+#endif /* DEBUG */
+ for (y = 0; y < Height; y++) {
+ for (x = 0; x < Width; x++) {
+ pix2 = pix1 = XGetPixel(image1, x, y);
+ if (image2 != NULL) {
+ pix2 = XGetPixel(image2, x, y);
+ }
+ pix1 &= mask;
+ pix2 &= mask;
+ if (which == 0x3) { /* show both */
+ /*** Need to keep colour table in file, really to
+ ensure different values for Black/WhitePixel
+ on server and pixval library don't confuse.
+ ***/
+ /*** pix1 = (pix1 != bg); ***/
+ if (pix1 == pix2) {
+ if (pix1)
+ XFillRectangle(disp, win, gc,
+ x*Zoom, y*Zoom, Zoom, Zoom);
+ } else if (pix1) {
+#ifdef DEBUG
+printf("Cross at (%d,%d), pix1=%lx, pix2=%lx\n",x,y,pix1,pix2);
+#endif /* DEBUG */
+ XCopyPlane(disp, Crosspm, win, gc, 0, 0,
+ Zoom, Zoom, x*Zoom, y*Zoom, 1);
+ } else {
+#ifdef DEBUG
+printf("Shade at (%d,%d), pix1=%lx, pix2=%lx\n",x,y,pix1,pix2);
+#endif /* DEBUG */
+ XCopyPlane(disp, Shadepm, win, gc, 0, 0,
+ Zoom, Zoom, x*Zoom, y*Zoom, 1);
+ }
+ } else if ((pix1&0x1) != (bg&0x1)) {
+ XFillRectangle(disp, win, gc, x*Zoom, y*Zoom, Zoom, Zoom);
+ }
+ }
+ }
+#ifdef DEBUG
+printf("repaint: Done\n");
+#endif /* DEBUG */
+}
+
+int
+readimage(fp, images, disp)
+FILE *fp;
+XImage *images[2];
+Display *disp;
+{
+char buf[512];
+unsigned long *ip;
+int r1im();
+XImage *ximage;
+int i = 0;
+int scrn;
+Visual *visual;
+unsigned int bitmap_pad; /* debugging only */
+
+ images[0] = images[1] = NULL;
+
+ do {
+ if (fgets(buf, 512, fp) == NULL)
+ return 0;
+ } while (buf[0] == '!');
+
+ if (sscanf(buf, "%d %d %d", &Width, &Height, &depth) < 3)
+ return 0;
+
+ scrn = DefaultScreen(disp); /* XXX */
+ visual = DefaultVisual(disp, scrn);
+
+ /* at least one to do... */
+ ximage = XCreateImage(disp,visual,depth,ZPixmap,0,NULL,
+ Width, Height, bitmap_pad=32/* 8/16/32 */,0); /** XXX **/
+ if (ximage == NULL)
+ return 0;
+ ip = (unsigned long*)calloc(ximage->bytes_per_line*ximage->height, 1);
+ if (ip == NULL) {
+ XDestroyImage(ximage);
+ printf("Out of memory\n");
+ return 0;
+ }
+ ximage->data = (char *)ip;
+
+ if (FileType == TYPE_ERROR) {
+ /* actually two to do */
+ if (!r1im(fp, ximage, 1)) {
+ XDestroyImage(ximage);
+ return 0;
+ }
+ images[i++] = ximage;
+
+ /* now next one */
+ if (fgets(buf, 512, fp) == NULL) {
+ XDestroyImage(images[i-1]);
+ return 0;
+ }
+ sscanf(buf, "%d %d %d", &Width, &Height, &depth); /* XXX */
+ ximage = XCreateImage(disp,visual,depth,ZPixmap,0,NULL,
+ Width, Height, bitmap_pad=32/* 8/16/32 */,0); /** XXX **/
+ if (ximage == NULL) {
+ XDestroyImage(images[i-1]);
+ return 0;
+ }
+ ip = (unsigned long*)calloc(ximage->bytes_per_line*ximage->height, 1);
+ if (ip == NULL) {
+ printf("Out of memory\n");
+ XDestroyImage(images[i-1]);
+ XDestroyImage(ximage);
+ return 0;
+ }
+ ximage->data = (char *)ip;
+ if (!r1im(fp, ximage, 2)) {
+ XDestroyImage(images[i-1]);
+ XDestroyImage(ximage);
+ return 0;
+ }
+ } else {
+ if (!r1im(fp, ximage, 3)) {
+ XDestroyImage(ximage);
+ return 0;
+ }
+ }
+ images[i++] = ximage;
+ return i;
+}
+
+int
+r1im(fp, image, val)
+FILE *fp;
+XImage *image;
+int val;
+{
+char buf[512];
+int count;
+unsigned long pix;
+int x, y;
+
+ x = 0; y = 0;
+ while (fgets(buf, 512, fp) != NULL) {
+ if (strchr(buf, ',') != NULL) {
+ sscanf(buf, "%x,%lx", &count, &pix);
+ } else {
+ count = 1;
+ sscanf(buf, "%lx", &pix);
+ }
+ if (depth != 32)
+ pix &= (1<<depth)-1;
+
+ for (; count; count--) {
+ if (pix) {
+ XPutPixel(image, x, y, pix);
+ }
+ if (++x >=Width) {
+ x = 0;
+ y++;
+ }
+ if (y >= Height)
+ return 1;
+ }
+ }
+ printf("ERROR\n");
+ return 0;
+}
+
+setzoom(disp, win, gc)
+Display *disp;
+Window win;
+GC gc;
+{
+Pixmap pm;
+GC gc1;
+GC gc2;
+int i, j;
+
+ if (LastZoom == Zoom)
+ return;
+ LastZoom = Zoom;
+ pm = XCreatePixmap(disp, win, Zoom*2, Zoom*2, DefaultDepth(disp, DefaultScreen(disp)));
+ if (Crosspm != None)
+ XFreePixmap(disp, Crosspm);
+ Crosspm = XCreatePixmap(disp, win, Zoom, Zoom, 1);
+ if (Shadepm != None)
+ XFreePixmap(disp, Shadepm);
+ Shadepm = XCreatePixmap(disp, win, Zoom, Zoom, 1);
+
+ gc1 = XCreateGC(disp, Crosspm, 0L, (XGCValues *)0);
+ gc2 = XCreateGC(disp, DefaultRootWindow(disp), 0L, (XGCValues *)0);
+
+ XSetForeground(disp, gc2, BGPIX);
+ XFillRectangle(disp, pm, gc2, 0, 0, Zoom*2+1, Zoom*2+1);
+ XSetForeground(disp, gc2, FGPIX);
+
+ XSetForeground(disp, gc1, (unsigned long)0);
+ XFillRectangle(disp, Crosspm, gc1, 0, 0, Zoom+1, Zoom+1);
+ XFillRectangle(disp, Shadepm, gc1, 0, 0, Zoom+1, Zoom+1);
+
+ XSetForeground(disp, gc1, (unsigned long)1);
+ XSetBackground(disp, gc1, (unsigned long)0);
+
+ XSetDashes(disp, gc2, 0, "\1", 1);
+ XSetLineAttributes(disp, gc2, 0, LineOnOffDash, CapButt, JoinRound);
+ XSetFunction(disp, gc2, GXcopy);
+
+ XDrawLine(disp, pm, gc2, 0, 0, 0, Zoom*2);
+ XDrawLine(disp, pm, gc2, Zoom, 0, Zoom, Zoom*2);
+ XDrawLine(disp, pm, gc2, 0, 0, Zoom*2, 0);
+ XDrawLine(disp, pm, gc2, 0, Zoom, Zoom*2, Zoom);
+
+ XSetWindowBackgroundPixmap(disp, win, pm);
+ XFreePixmap(disp, pm);
+
+ for (i = 0; i < Zoom; i++) {
+ XDrawPoint(disp, Crosspm, gc1, i, i);
+ XDrawPoint(disp, Crosspm, gc1, i, Zoom-i);
+ }
+ for (i = 0; i < Zoom; i++) {
+ for (j = 0; j < Zoom; j++) {
+ if ((i-j) & 1) {
+ XDrawPoint(disp, Shadepm, gc1, i, j);
+ }
+ }
+ }
+ XFreeGC(disp, gc1);
+ XFreeGC(disp, gc2);
+
+ if (Width && Height)
+ XResizeWindow(disp, win, Width*Zoom, Height*Zoom);
+}
+
diff --git a/xc/test/xsuite/xtest/src/pixval/blowup/vblowup_c.c b/xc/test/xsuite/xtest/src/pixval/blowup/vblowup_c.c
new file mode 100644
index 000000000..0ebdcb2ab
--- /dev/null
+++ b/xc/test/xsuite/xtest/src/pixval/blowup/vblowup_c.c
@@ -0,0 +1,990 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+/*************************************************************
+Copyright 1988, 1989 by Digital Equipment Corporation, Maynard, Massachusetts,
+
+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.
+
+******************************************************************/
+/**
+* FACILITY: Regression Test Library
+*
+* ABSTRACT:
+*
+* This module contains code for the blowup (pixel expander) program.
+* There are two routines, blowup and makebig. makebig serves to
+* get the image from the root window, expand it and draw the expanded
+* picture on the blowup window. blowup serves to setup the initial
+* environment, handle all mouse and button events and call makebig.
+* Vblowup differs from blowup in that it compares the window pixmap
+* against a known good pixmap and displays the erroneously lit bits
+* by putting an 'X' through them. This serves as a first pass at
+* attempting to provide interactive screen validation tools.
+*
+* Written by Erik Morse, November 1987
+*
+* MODIFIED BY:
+*
+* X-12 kieron Kieron Drake 27-Feb-1991
+* Almost completely revamped - not enough time to rewrite
+* this horrible stuff completely, unfortunately - but
+* removed dependencies on root window. Instead use TWO images,
+* one "known good image" (kgi) and one "probably bad image" (pbi)
+* - which is sometimes referred to as "ximage", in vmakebig() in
+* particular, for historical reasons. Add support for an Expose
+* handler for other window, with its own zoom and image select
+* (parameters are expose_handler, egc, winzoomp, while "which"
+* is passed to expose_handler to select which to show:
+* 0x1 = bad, 0x2 = good, 0x3 = both ).
+* Lots of tidying up, refresh, h_light, exposure handling....
+* Jeez! This is now huge! Oh for a rewrite with Xt/Xaw/Motif
+* or whatever.
+*
+* kieron (c) UniSoft Ltd. 27/02/91
+*
+*
+* X-11 EJM008 Erik Morse 23-Nov-1988
+* Add include for portable.h for opaque structure
+* access macros.
+*
+* X-10 TAT001 Todd A. Trimble 12-May-1988
+* Add ability to warp pointer to first erroneous pixel.
+* Fixed button picks inside blowup window.
+*
+* X-9 PCV001 Peter C. Vinsel 19-Apr-1988
+* fixed position of target window relative to root. allowed
+* button picks inside blowup window.
+*
+* X-8 TAT001 Todd A. Trimble 10-Apr-1988
+* Modify to force color displays to show
+* monochrome pixels during monochrome tests.
+*
+* X-7 EJM007 Erik Morse 01-Mar-1988
+* Allow additional parameters: good_image, and the
+* corresponding x and y offsets describing where the
+* good_image is to be located on the window.
+*
+* X-6 EJM006 Erik J. Morse 17-Feb-1988
+* Change XSetFunction calls to XSetState to set up a
+* plane mask so that GXinvert really inverts on multi
+* plane systems.
+*
+* X-5 EJM005 Erik J. Morse 09-Feb-1988
+* Remove #define lines, add #include regrdef.h
+*
+* X-4 EJM004 Erik J. Morse 11-Jan-1988
+* Include a colormap parameter so that we can blow up
+* color images
+*
+* X-3 EJM003 Erik J. Morse 08-Jan-1988
+* Use XDefaultGC for window foreground and backgrounds
+*
+* X-2 EJM002 Erik J. Morse 03-DEC-1987
+* Fix calls to XMapSubwindows
+*
+* X-1 EJM001 Erik J. Morse 01-DEC-1987
+* Add code to deallocate resources.
+*
+* CALLING SEQUENCE:
+*
+* Vblowup(display, window, init_x, init_y, size, granularity,good_image,x_offset,y_offset,background_color)
+*
+* FORMAL PARAMETERS:
+*
+* display
+* Pointer to current display connection structure
+*
+* window
+* target window for blowups - blowup uses this window to
+* adjust the current x, y coordinate readings
+*
+* init_x
+* x coord of upper left hand corner of blowup window relative to the
+* root window origin
+*
+* init_y
+* y coord of upper left hand corner of blowup window relative to the
+* root window origin
+*
+* size
+* size of the blowup window expansion area in pixels
+*
+* granularity
+* coarseness of the zoom - this number indicates by how many pixels
+* an expanded pixel will grow or shrink when the zoom in or zoom out
+* option is chosen
+*
+* cmap
+* colormap installed on target window or None
+*
+* good_image
+* image for comparison against window contents.
+*
+* x_offset,y_offset
+* coordinate offset of good_image's upper left corner from the upper left
+* corner of the root_window in which the test window resides.
+*
+* background_color
+* color of background used during create_window operation.
+*
+* IMPLICIT INPUTS:
+*
+* NONE
+*
+* IMPLICIT OUTPUTS:
+*
+* NONE
+*
+* COMPLETION STATUS: (or ROUTINE VALUE:)
+*
+* NONE
+*
+* SIDE EFFECTS:
+*
+* NONE
+*
+**/
+#include <stdio.h>
+#include "Xlib.h" /* xlib defs */
+#include "cursorfont.h" /* cursor info */
+/* #include "drawutil.h" // color thingys */
+
+/******** module globals **********/
+
+static short pixel_wrong;
+static unsigned long expected_pixel;
+static int windx,windy,wind_width,wind_height,scrn_width,scrn_height;
+static int key_win_width = 68, x_win_height = 17; /* depends on font used */
+static validate_color = 1; /* 0 = position only */
+
+#define DEPTHMASK(n) (((n) >= 32) ? 0xffffffff : ((0x1 << (n)) - 1))
+
+/*
+ * get the image and blow it up
+ */
+/*******
+ This is called within the event loop of VBlowup, which may have, nay
+ will have, pushed back events onto the event-Q. The only type expected
+ to survive across a call of vmakebig() are Expose events, though, so
+ as long as we don't eat (all of) these we are safe. - kieron
+*******/
+
+void vmakebig(display, window, blowup_win, x, y, zoom_factor,pixels_across,
+ size, format, gc, gcback, gcfore, kgi, ximage, ix, iy,
+ background, view_color, test_color)
+Display *display;
+Window window;
+Window blowup_win;
+int x, y, zoom_factor;
+int pixels_across;
+int format;
+GC gc;
+unsigned long gcback,gcfore;
+XImage *kgi; /* known good image */
+XImage *ximage; /* possibly bad image */
+int ix, iy; /* origin of known good image relative to the screen */
+unsigned long background; /* background color */
+int view_color,test_color;
+{
+ int across,down,e,f, azf;
+ unsigned long pixel, old_pixel, testpixel, goodpixel, mask;
+ XSegment h_lines[200];
+ XSegment v_lines[200];
+ int half_pixels_across = pixels_across>>1;
+ XEvent junk, save;
+
+#ifdef DEBUG
+(void)printf("makebig: x=%d, y=%d, z_f=%d, p_a=%d, size=%d, ix=%d, iy=%d\n",
+ x, y, zoom_factor, pixels_across, size, ix, iy);
+(void)printf("windx=%d,windy=%d,wind_width=%d,wind_height=%d,scrn_width=%d,scrn_height=%d\n",
+ windx,windy,wind_width,wind_height,scrn_width,scrn_height);
+#endif /* DEBUG */
+
+ mask = DEPTHMASK(ximage->depth) & ( (kgi==None) ? DEPTHMASK(32) :
+ DEPTHMASK(kgi->depth) );
+ pixel_wrong = 0;
+
+ old_pixel = XWhitePixel(display, XDefaultScreen(display));
+
+ XSetForeground(display, gc, XBlackPixel(display,XDefaultScreen(display))); /* put in for monochrome case */
+ XSetBackground(display, gc, XWhitePixel(display,XDefaultScreen(display)));
+
+ for (across = 0; across < pixels_across; across++) {
+ azf = (across * zoom_factor) + key_win_width + 2;
+ for (down = 0; down < pixels_across; down++) {
+ int xx = across + x - ix - windx;
+ int yy = down + y - iy - windy;
+
+#ifdef DEBUG
+(void)printf("makebig: try for BAD at (%d, %d) - in [0..%d, 0..%d]?\n",
+ xx, yy, ximage->width, ximage->height);
+#endif /* DEBUG */
+ if (xx < ximage->width && yy < ximage->height)
+ pixel = XGetPixel(ximage,xx,yy);
+ else
+ pixel = background;
+ if (pixel != background) {
+ if (view_color)
+ XSetForeground(display, gc, pixel);
+ else
+ XSetForeground(display, gc, gcfore);
+ XFillRectangle(display, blowup_win, gc, azf,
+ ((down * zoom_factor) + x_win_height + 1), zoom_factor, zoom_factor);
+ }
+/*************/
+ if (kgi != None) {
+ testpixel = pixel;
+#ifdef DEBUG
+(void)printf("makebig: try for GOOD at (%d, %d) - in [0..%d, 0..%d]?\n",
+ xx, yy, kgi->width, kgi->height);
+#endif /* DEBUG */
+ if ((xx < kgi->width) && (yy < kgi->height) &&
+ (xx >= 0) && (yy >= 0)) {
+ goodpixel = XGetPixel(kgi,xx,yy);
+ if ((testpixel&mask) != (goodpixel&mask)) {
+ if ((across == half_pixels_across)&&(down == half_pixels_across))
+ {
+ pixel_wrong = 1;
+ expected_pixel = goodpixel;
+ }
+ XSetForeground(display, gc, validate_color?1:XWhitePixel(display, XDefaultScreen(display)));
+ XDrawLine(display, blowup_win, gc, azf, ((down * zoom_factor) + x_win_height + 1),
+ azf + zoom_factor, ((down * zoom_factor) + x_win_height + 1) + zoom_factor);
+ XDrawLine(display, blowup_win, gc, azf + zoom_factor + 1, ((down * zoom_factor) + x_win_height + 1),
+ azf + 1, ((down * zoom_factor) + x_win_height + 1) + zoom_factor);
+ XSetForeground(display, gc, validate_color?0:XBlackPixel(display, XDefaultScreen(display)));
+ XDrawLine(display, blowup_win, gc, azf + zoom_factor, ((down * zoom_factor) + x_win_height + 1),
+ azf, ((down * zoom_factor) + x_win_height + 1) + zoom_factor);
+ XDrawLine(display, blowup_win, gc, azf + 1, ((down * zoom_factor) + x_win_height + 1),
+ azf + zoom_factor + 1, ((down * zoom_factor) + x_win_height + 1) + zoom_factor);
+ }
+ }
+ } /* if (kgi != None) .... */
+/*************/
+ } /* down loop */
+ } /* across loop */
+/*
+ * setup and draw the pixel boundaries
+ */
+ for (e = zoom_factor,f = 0; f < pixels_across; e += zoom_factor, f++) {
+ v_lines[f].x1 = e + key_win_width + 2;
+ v_lines[f].y1 = x_win_height + 1;
+ v_lines[f].x2 = e + key_win_width + 2;
+ v_lines[f].y2 = size + x_win_height + 1;
+ h_lines[f].x1 = key_win_width + 2;
+ h_lines[f].y1 = e + x_win_height + 1;
+ h_lines[f].x2 = size + key_win_width + 2;
+ h_lines[f].y2 = e + x_win_height + 1;
+ }
+
+ /* add highlights to middle pair of lines */
+
+ f = pixels_across;
+ v_lines[f].x1 = (pixels_across>>1)*zoom_factor + key_win_width + 2 + 1;
+ v_lines[f].y1 = x_win_height + 1;
+ v_lines[f].x2 = v_lines[f].x1;
+ v_lines[f].y2 = size + x_win_height + 1;
+ h_lines[f].x1 = key_win_width + 2;
+ h_lines[f].y1 = (pixels_across>>1)*zoom_factor + x_win_height + 1 + 1;
+ h_lines[f].x2 = size + key_win_width + 2;
+ h_lines[f].y2 = h_lines[f].y1;
+ f++;
+ v_lines[f].x1 = ((pixels_across>>1)+1)*zoom_factor + key_win_width + 2 + 1;
+ v_lines[f].y1 = x_win_height + 1;
+ v_lines[f].x2 = v_lines[f].x1;
+ v_lines[f].y2 = size + x_win_height + 1;
+ h_lines[f].x1 = key_win_width + 2;
+ h_lines[f].y1 = ((pixels_across>>1)+1)*zoom_factor + x_win_height + 1 + 1;
+ h_lines[f].x2 = size + key_win_width + 2;
+ h_lines[f].y2 = h_lines[f].y1;
+
+ /* set the plane mask to the low order bit to really invert black and white on multi plane systems */
+ XSetState(display, gc, XWhitePixel(display, XDefaultScreen(display)), XBlackPixel(display, XDefaultScreen(display)),
+ GXinvert, (unsigned long)1);
+ XDrawSegments(display, blowup_win, gc, v_lines, pixels_across+2);
+ XDrawSegments(display, blowup_win, gc, h_lines, pixels_across+2);
+ XSetState(display, gc, XWhitePixel(display, XDefaultScreen(display)), XBlackPixel(display, XDefaultScreen(display)),
+ GXcopy, (unsigned long)XAllPlanes());
+ /* munge events - see comment at head of routine and at call point */
+ while (XCheckMaskEvent(display, ButtonPressMask | PointerMotionMask,
+ &junk))
+ ; /* donothing */
+ save.type = ButtonPress; /* any non Expose will do */
+ while (XCheckWindowEvent(display, blowup_win, ExposureMask, &junk))
+ if (junk.xexpose.count == 0)
+ save = junk;
+ if (save.type == Expose)
+ XPutBackEvent(display, &save); /* restore one of many */
+}
+
+/* delta used as vertical, rather than horiz, here! */
+/* font misused as well; indicates kgi required to draw! */
+XTextItem labels[] = {
+ { " X ", 11, 11, None},
+ { " Y ", 11, 11, None},
+ { " B/G/both ", 11, 11, None},
+ { " color/mono", 11, 11, None},
+ { " next error", 11, 11, 1},
+ { " sub-zoom +", 11, 11, None},
+ { " sub-zoom -", 11, 11, None},
+ { " quit ", 11, 11, None},
+ { " big-zoom +", 11, 11, None},
+ { " big-zoom -", 11, 11, None},
+ { " next ", 11, 11, None}
+};
+
+h_light(display, wins, nwins, gc, labs, target, kgi)
+Display *display;
+Window *wins;
+int nwins;
+GC gc;
+XTextItem *labs;
+Window target;
+XImage *kgi;
+{
+ int i;
+
+ for(i=0; i<nwins; i++)
+ if ( (target == None || target == wins[i]) &&
+ (kgi != None || labs[i].font == None) )
+ XDrawImageString(display, wins[i], gc,
+ 0, labs[i].delta, labs[i].chars, labs[i].nchars);
+ /* delta used as vertical, rather than horiz, here! */
+}
+
+refresh(display, wins, nwins, gc, labs, kgi)
+Display *display;
+Window *wins;
+int nwins;
+GC gc;
+XTextItem *labs;
+XImage *kgi;
+{
+ h_light(display, wins, nwins, gc, labs, None, kgi);
+}
+
+char *whiches[] = {
+ " ERROR ", /* 0x0 => shouldn't happen */
+ "Server Data", /* 0x1 => "bad" image file */
+ "Pixval Data", /* 0x2 => "good" image file */
+ "Comparison " /* 0x3 => both of the above */
+};
+
+
+
+
+/*
+ * do initialization and handle events
+ */
+
+
+VBlowup(display, window, egc, init_x, init_y, w, h, size, granularity, cmap,
+ pbi, kgi, ix, iy,
+ background, warp_pointer_x, warp_pointer_y,show_banner,
+ compare_color, expose_handler, winzoomp, font_name)
+Display *display;
+Window window; /* window in bg with >=1:1 version of pbi in it */
+GC egc;
+int init_x, init_y;
+int size, w, h;
+int granularity;
+Colormap cmap;
+XImage *pbi,*kgi;
+int ix, iy;
+unsigned long background;
+int warp_pointer_x, warp_pointer_y;
+int show_banner;
+int compare_color;
+void (*expose_handler)();
+int *winzoomp;
+char *font_name;
+{
+ extern void free();
+ extern char *malloc();
+ int show_color = compare_color;
+
+ Font fid;
+ Window highlight = 0, head_win, pix_win, exp_win, blowup_win, tar_win, key_win, key[11];
+ GC textgc, gc, dgc, rect_gc;
+ XGCValues xgcv;
+ XEvent xev, fake;
+ int zoom_factor = 10, size2;
+ int pixels_across = 20;
+ int start_x = 0, start_y = 0;
+ int old_start_x = -9999, old_start_y = -9999, old_pixels_across = -9999;
+ int max_x, max_y;
+ char xypair[80];
+ Cursor curse;
+ int format;
+ unsigned long gcfore, gcback;
+ Window tracewind;
+ XWindowAttributes win_attr;
+ unsigned int which;
+ int x,y,i;
+ XImage *real_kgi = kgi, *real_pbi = pbi;
+ int retval = 0;
+/*****
+ Window window;
+
+ window = XCreateSimpleWindow(display, window, init_x, init_y, w, h,
+ validate_color ? 0 : XBlackPixel(display, XDefaultScreen(display)),
+ background);
+ XMapWindow(display, window);
+*****/
+
+ if (kgi == NULL)
+ which = 0x1; /* "bad" only */
+ else
+ which = 0x3; /* both. 0x2 is "good" only */
+ XStoreName(display, window, whiches[which]);
+
+ /* XXX */
+ validate_color = compare_color; /* should have come from image file? */
+
+#ifdef DEBUG
+(void)printf(
+ "VBlowup: init_x=%d,init_y=%d,w=%d,h=%d,size=%d,granularity=%d,ix=%d,\
+iy=%d,warp_pointer_x=%d,warp_pointer_y=%d\n",
+ init_x, init_y, w, h, size, granularity, ix, iy,
+ warp_pointer_x, warp_pointer_y);
+#endif /* DEBUG */
+ /* initialize rectangle pixmap overlay gc */
+
+ rect_gc = XCreateGC(display,window,(unsigned long)0,(XGCValues *)NULL);
+ XSetForeground(display,rect_gc,1L); /* this works well with xor function */
+ XSetBackground(display,rect_gc,0L);
+ XSetFunction(display,rect_gc,GXxor);
+ XSetLineAttributes(display,rect_gc,2,LineSolid,CapButt,JoinBevel); /* specify line width */
+
+ /* find window offset from root window */
+
+ tracewind = window;
+ windx = 0;
+ windy = 0;
+
+ scrn_width = wind_width = w;
+ scrn_height = wind_height = h;
+
+ {
+ XWindowAttributes Xwatt;
+
+ XGetWindowAttributes(display,tracewind,&Xwatt);
+
+ wind_width = Xwatt.width;
+ wind_height = Xwatt.height;
+ }
+
+ if (XDefaultDepth(display, XDefaultScreen(display)) == 1) /* check for color */
+ format = XYPixmap;
+ else
+ format = ZPixmap;
+/*
+ dgc = XDefaultGC(display, XDefaultScreen(display));
+ gcfore = GetGCVforeground(dgc);
+ gcback = GetGCVbackground(dgc);
+*/
+
+ gcfore = XBlackPixel(display,XDefaultScreen(display));
+ gcback = XWhitePixel(display,XDefaultScreen(display));
+
+ size2 = size / 2;
+ blowup_win = XCreateSimpleWindow(display,(Window)XRootWindow(display,XDefaultScreen(display)),init_x,init_y,
+ (size + 4 + key_win_width),(size + 2 + x_win_height),1, gcfore, gcback);
+ XSelectInput(display, blowup_win, ExposureMask);
+ XMapWindow(display,blowup_win);
+ XSync(display, 0);
+ XWindowEvent(display, blowup_win, ExposureMask, &xev);
+
+ if (cmap != None)
+ XSetWindowColormap(display, blowup_win, cmap);
+ head_win = XCreateSimpleWindow(display,blowup_win,0,0,
+ x=(size + 2 + key_win_width), y=(x_win_height - 2),1, gcfore, gcback);
+ key_win = XCreateSimpleWindow(display,blowup_win,0,x_win_height,
+ key_win_width, size, 1, gcfore, gcback);
+ XMapSubwindows(display, blowup_win);
+
+ for(i=0;i<=10;i++)
+ key[i] = XCreateSimpleWindow(display,key_win,0,i*(y+1),
+ key_win_width,y,0,gcfore, gcback);
+
+ XMapSubwindows(display, key_win);
+ pix_win = XCreateSimpleWindow(display,head_win,0,0,
+ x/2,y,0,gcfore, gcback);
+ exp_win = XCreateSimpleWindow(display,head_win,size2,0,
+ x/2,y,0,gcfore, gcback);
+ XMapSubwindows(display, head_win);
+ XSync(display, 0);
+
+ xgcv.function = GXcopy;
+ xgcv.background = gcback;
+ xgcv.foreground = gcfore;
+ fid = xgcv.font = XLoadFont(display,
+ font_name != NULL ? font_name : "6x10");
+ /* lots of "6"s in code
+ that depend on this! Aaagh! */
+ xgcv.graphics_exposures = False;
+ textgc = XCreateGC(display, window,
+ GCFunction | GCForeground | GCBackground | GCFont, &xgcv);
+ gc = XCreateGC(display, (Window)XRootWindow(display, XDefaultScreen(display)),
+ GCFunction | GCForeground | GCBackground | GCGraphicsExposures, &xgcv);
+ XSetGraphicsExposures(display, egc, False);
+ /* avoid filling event queue with unwanted garbage */
+
+ max_x = XDisplayWidth(display, XDefaultScreen(display)) - 1;
+ max_y = XDisplayHeight(display, XDefaultScreen(display)) - 1;
+
+ curse = XCreateFontCursor(display, XC_sb_right_arrow);
+ XSync(display,0);
+ XDefineCursor(display, window, curse);
+ XSync(display,0);
+ XStoreName(display, blowup_win, "Blowup");
+ XSync(display,0);
+
+/*
+ * select the event inputs. Note we will do highlight events with pointer motion not enter and leave events,
+ * this is because the user interface across the net appears much smoother and only slightly slower with
+ * this approach
+ */
+ XSelectInput(display, window, ButtonPressMask | ExposureMask);
+ XSelectInput(display, blowup_win, ButtonPressMask | ExposureMask);
+ for(i=1;i<=3;i++)
+ XSelectInput(display, key[i], ExposureMask | ButtonPressMask | PointerMotionMask);
+ if (real_kgi)
+ XSelectInput(display, key[4], ExposureMask | ButtonPressMask | PointerMotionMask);
+ for(i=5;i<=10;i++)
+ XSelectInput(display, key[i], ExposureMask | ButtonPressMask | PointerMotionMask);
+ XSync(display, 0);
+
+ XGetWindowAttributes(display,window,&win_attr);
+
+/***************/
+ /* draw window before entering loop or putting things on event-Q so
+ caller supplied exposure_handler need not respect Q. - kieron
+ */
+ if (expose_handler != NULL) {
+ /* now eat any other Expose events left */
+ while (XCheckWindowEvent(display, window,
+ ExposureMask, &fake))
+ ; /* donothing */
+ expose_handler(display, window, egc, pbi, kgi,
+ compare_color, &xev, which);
+ old_start_x = -9999; /* assume old rectangle drawn on */
+ }
+ /* Expose events will safely survive across calls of vmakebig(). See
+ the remarks about event ordering below. - kieron
+ */
+ fake.type = Expose;
+ fake.xexpose.count = 0;
+ fake.xexpose.window = blowup_win;
+ XPutBackEvent(display, &fake);
+#ifdef DEBUG
+printf("XPending() = %d\n", XPending(display));
+#endif /* DEBUG */
+
+ if (kgi != None)
+ {
+ /* fake up a "next error" request, was a move to warp_pointer_x/y */
+ fake.xbutton.display = display;
+ fake.xbutton.window = key[4]; /* was window */
+ fake.xbutton.root = win_attr.root;
+ fake.xbutton.time = CurrentTime;
+ fake.xbutton.x = warp_pointer_x;
+ fake.xbutton.y = warp_pointer_y;
+ fake.xbutton.x_root = warp_pointer_x+windx;
+ fake.xbutton.y_root = warp_pointer_y+windy;
+ fake.type = ButtonPress;
+ fake.xbutton.state = Button1Mask;
+ XPutBackEvent(display, &fake);
+
+ /* now have 2 events, ordering is:
+ Expose(blowup_win); ButtonPress(key[4]);
+ Last Read -----^ First Read -----^
+
+ The ButtonPress MUST be before Expose(b_w) as it won't survive
+ across a call on vmakebig(). - kieron
+ */
+
+#ifdef DEBUG
+printf("XPending() = %d\n", XPending(display));
+#endif /* DEBUG */
+ XSync(display,0);
+ if (fake.xbutton.window == window) { /* need a warp... */
+ XWarpPointer(display,None,
+ XRootWindow(display,XDefaultScreen(display)),0,0,0,0,
+ warp_pointer_x+windx,warp_pointer_y+windy);
+ XSync(display,0);
+ XWarpPointer(display,
+ XRootWindow(display,XDefaultScreen(display)),
+ window,warp_pointer_x+windx,warp_pointer_y+windy,
+ XDisplayWidth(display,0),XDisplayHeight(display,0),
+ warp_pointer_x,warp_pointer_y);
+ XSync(display,0);
+ }
+#ifdef DEBUG
+printf("XPending() after flushes = %d\n", XPending(display));
+#endif /* DEBUG */
+ }
+/***************/
+
+/*
+ * now get events until the user requests a quit
+ */
+ while (1) {
+ XNextEvent(display, &xev);
+
+ if (xev.type == NoExpose || xev.type == GraphicsExpose)
+ continue; /* junk these */
+ if (xev.type == Expose) {
+ if (xev.xexpose.count != 0)
+ continue; /* round for next event */
+ if (xev.xexpose.window == window && expose_handler != NULL) {
+ /* now eat any other Expose events left */
+ while (XCheckWindowEvent(display, window,
+ ExposureMask, &fake))
+ ; /* donothing */
+ expose_handler(display, window, egc, pbi, kgi,
+ compare_color, &xev, which);
+ old_start_x = -9999; /* assume old rectangle drawn on */
+ continue; /* round for next event, respect event-Q */
+ }
+ else /*if (xev.xexpose.window == blowup_win)*/ {
+#ifdef DEBUG
+printf("expose in blowup_win\n");
+#endif /* DEBUG */
+ /* labels etc... */
+ if (kgi == None) {
+ if (show_banner)
+ XDrawString(display, head_win, textgc, ((size2 +(key_win_width/2))-25*6/2), 11, " Blowup - Pixmap Correct ",25);
+ else
+ XDrawString(display, head_win, textgc, ((size2 +(key_win_width/2))-10*6/2), 11, " Blowup ",10);
+ }
+ else
+ XDrawString(display, head_win, textgc, ((size2 +(key_win_width/2))-25*6/2), 11, "Blowup - Pixmap Incorrect", 25);
+ XDrawString(display, pix_win, textgc, 0, 11, " Pixel ", 7);
+ XSetForeground(display, textgc, gcfore);
+ XSetBackground(display, textgc, gcback);
+ refresh(display, key, 11, textgc, labels, kgi);
+ XFlush(display);
+ while (XCheckMaskEvent(display, ExposureMask, &fake))
+ ; /* do nothing */
+ }
+ xev.xbutton.window = None;
+ xev.type = ButtonPress; /* fall through to redisplay stuff */
+ }
+
+ if (xev.type != MotionNotify) { /* not a highlight event */
+ if (xev.xbutton.window == key[7]) /* quit */
+ break; /* retval = 0 => bye */
+ else if (xev.xbutton.window == key[10]) /* next */
+ {
+ retval = 1; /* process next file chunk */
+ break;
+ }
+ else if (xev.xbutton.window == key[6]) { /* zoom out */
+ if (zoom_factor > (granularity + 1)) {
+ zoom_factor -= granularity;
+ start_x += (pixels_across / 2);
+ start_y += (pixels_across / 2);
+ pixels_across = size / zoom_factor;
+ start_x -= (pixels_across / 2);
+ start_y -= (pixels_across / 2);
+ }
+ }
+ else if (xev.xbutton.window == key[5]) { /* zoom in */
+ if (zoom_factor < (size - granularity)) {
+ zoom_factor += granularity;
+ start_x += (pixels_across / 2);
+ start_y += (pixels_across / 2);
+ pixels_across = size / zoom_factor;
+ start_x -= (pixels_across / 2);
+ start_y -= (pixels_across / 2);
+ }
+ }
+ else if (xev.xbutton.window == key[8]) /* zoom window in */
+ {
+ *winzoomp += granularity;
+
+ fake.type = Expose;
+ fake.xexpose.count = 0;
+ fake.xexpose.window = window;
+ XPutBackEvent(display, &fake);
+ continue; /* round again to pick up faked event(s) */
+ }
+ else if (xev.xbutton.window == key[9]) /* zoom window out */
+ {
+ if (*winzoomp > granularity)
+ *winzoomp -= granularity;
+ fake.type = Expose;
+ fake.xexpose.count = 0;
+ fake.xexpose.window = window;
+ XPutBackEvent(display, &fake);
+ continue; /* round again to pick up faked event(s) */
+ }
+ else if (xev.xbutton.window == key[2]) /* which */
+ {
+ /* good/bad toggling? both....? set "which" */
+ /* ...... here ....., which =0x1,0x2,0x3.... */
+ if (real_kgi == None)
+ continue; /* nothing doing */
+ which++; which &= 0x3;
+ switch (which) {
+ case 0x0: which++; /* fall through to 1 */
+ case 0x1: kgi = None; pbi = real_pbi; break;
+ case 0x2: kgi = None; pbi = real_kgi; break;
+ case 0x3: kgi = real_kgi; pbi = real_pbi; break;
+ }
+ XStoreName(display, window, whiches[which]);
+ fake.type = Expose;
+ fake.xexpose.count = 0;
+ fake.xexpose.window = blowup_win;
+ XPutBackEvent(display, &fake);
+ fake.xexpose.window = window;
+ XPutBackEvent(display, &fake); /* order is inportant */
+ continue; /* round again to pick up faked event(s) */
+ }
+ else if (xev.xbutton.window == key[3]) /* color/mono */
+ show_color = (!show_color);
+ else if ((kgi) &&(xev.xbutton.window == key[4])) /* move to next error */
+ {
+ int x_scan,y_scan;
+ unsigned long test_pixel, good_pixel;
+ int begin_x;
+ short found_mismatch;
+ int old_x_scan,old_y_scan;
+ int lox,loy,hix,hiy;
+ short done;
+ unsigned long mask = (DEPTHMASK(pbi->depth) & DEPTHMASK(kgi->depth));
+ lox = ix + windx;
+ if (lox < 0)
+ lox = 0;
+
+ hix = ix + windx + kgi->width;
+ if (hix > scrn_width)
+ hix = scrn_width;
+
+ loy = iy + windy;
+ if (loy < 0)
+ loy = 0;
+
+ hiy = iy + windy + kgi->height;
+ if (hiy > scrn_height)
+ hiy = scrn_height;
+/******
+ if (old_start_x != -9999) {
+ x = (old_start_x-windx) * (*winzoomp);
+ y = (old_start_y-windy) * (*winzoomp);
+ i = old_pixels_across * (*winzoomp);
+ XDrawRectangle(display,window,rect_gc, x,y,i,i);
+ }
+ old_start_x = -9999;
+******/
+ x_scan = start_x + (pixels_across>>1) + 1;
+ y_scan = start_y + (pixels_across>>1);
+ if (y_scan < loy) {
+ y_scan = loy;
+ x_scan = lox;
+ }
+ else if (y_scan > hiy) {
+ y_scan = loy;
+ x_scan = lox;
+ }
+
+ if (x_scan > hix) {
+ x_scan = lox;
+ y_scan++;
+ }
+ else if (x_scan < lox)
+ x_scan = lox;
+
+ old_x_scan = x_scan;
+ old_y_scan = y_scan;
+
+ found_mismatch = done = 0;
+ while (!done && (y_scan < hiy)) {
+ begin_x = x_scan;
+ while (!done && (x_scan < hix)) {
+#ifdef DEBUG
+(void)printf("VBlowup: try for both at (%d,%d) - in [0..%d,0..%d]?\n",
+ x_scan-ix-windx, y_scan-iy-windy, pbi->width, pbi->height);
+#endif /* DEBUG */
+ /* test_pixel = XGetPixel(ximage,x_scan-begin_x,0); */
+ test_pixel = XGetPixel(pbi,x_scan-ix-windx,y_scan-iy-windy);
+ good_pixel = XGetPixel(kgi,x_scan-ix-windx,y_scan-iy-windy);
+ if ((good_pixel&mask) != (test_pixel&mask))
+ found_mismatch = done = 1;
+ else {
+ x_scan++;
+ if ((x_scan == old_x_scan)&&(y_scan == old_y_scan))
+ done = 1;
+ }
+ }
+ if (!done) {
+ x_scan = lox;
+ y_scan++;
+ if (y_scan >= hiy)
+ y_scan = loy;
+ }
+ }
+ if (found_mismatch) {
+ start_x = x_scan - (pixels_across>>1);
+ start_x = (start_x < 0) ? 0 : start_x;
+ start_y = y_scan - (pixels_across>>1);
+ start_y = (start_y < 0) ? 0 : start_y;
+ }
+ }
+ else if (xev.xbutton.window == blowup_win)
+ {
+ start_x += (xev.xbutton.x - key_win_width - 2) / zoom_factor - (pixels_across>>1);
+ start_y += (xev.xbutton.y - x_win_height - 1) / zoom_factor - (pixels_across>>1);
+ }
+ else if (xev.xbutton.window == window) {
+ tar_win = 1; /* current window is target window */
+ pixels_across = size / zoom_factor;
+ x = (xev.xbutton.x/*_root*/) / (*winzoomp);
+ y = (xev.xbutton.y/*_root*/) / (*winzoomp);
+ start_x = x - (pixels_across / 2);
+ start_y = y - (pixels_across / 2);
+ }
+
+ XSetForeground(display, textgc, gcfore);
+ XSetBackground(display, textgc, gcback);
+ if (show_color)
+ XSetWindowBackground(display,blowup_win,background);
+ else
+ XSetWindowBackground(display,blowup_win,gcback);
+ XClearWindow(display, blowup_win);
+ XClearWindow(display, pix_win);
+ XClearWindow(display, exp_win);
+ XClearWindow(display, key[0]);
+ XClearWindow(display, key[1]);
+ if (start_x > (max_x - pixels_across)) start_x = max_x - pixels_across;
+ if (start_x < 0) start_x = 0;
+ if (start_y > (max_y - pixels_across)) start_y = max_y - pixels_across;
+ if (start_y < 0) start_y = 0;
+
+#ifdef DEBUG
+(void)printf("Picked BAD pixel at (%d,%d) - in [0..%d, 0..%d]?\n",
+ start_x + (pixels_across>>1), start_y + (pixels_across>>1),
+ pbi->width, pbi->height);
+#endif /* DEBUG */
+ (void)sprintf(xypair, " Pixel = %lx ",
+ XGetPixel(pbi,
+ start_x + (pixels_across>>1),
+ start_y + (pixels_across>>1)));
+ XDrawString(display, pix_win, textgc, 2, 10, xypair, strlen(xypair));
+ if (tar_win)
+ {
+ (void)sprintf(xypair, " X = %dW ",start_x - windx + (pixels_across>>1));
+ XDrawString(display, key[0], textgc, 2, 10, xypair, strlen(xypair));
+ (void)sprintf(xypair, " Y = %dW ",start_y - windy + (pixels_across>>1));
+ XDrawString(display, key[1], textgc, 2, 10, xypair, strlen(xypair));
+ }
+ else
+ {
+ (void)sprintf(xypair, " X = %dR ",start_x + (pixels_across>>1));
+ XDrawString(display, key[0], textgc, 2, 10, xypair, strlen(xypair));
+ (void)sprintf(xypair, " Y = %dR ",start_y + (pixels_across>>1));
+ XDrawString(display, key[1], textgc, 2, 10, xypair, strlen(xypair));
+ }
+ /* undraw old rectangle on window, if there was one */
+ if (old_start_x != -9999)
+ {
+ x = (old_start_x-windx) * (*winzoomp);
+ y = (old_start_y-windy) * (*winzoomp);
+ i = old_pixels_across * (*winzoomp);
+ XDrawRectangle(display,window,rect_gc, x,y,i,i);
+ }
+
+ /* If we've got any events put-back on Q then vmakebig() must
+ not loose them. In practice this only matters with Expose
+ events. All others are on the head of the Q before entering
+ the main loop. Don't put any non-expose events onto the Q
+ in any of the "if (xev.xbutton.window == ..." clauses
+ above, as they (nearly) all drop through to here and would
+ get munched by vmakebig(). - kieron
+ */
+ vmakebig(display, window, blowup_win, start_x, start_y,
+ zoom_factor, pixels_across, size, format, gc, gcback, gcfore, kgi, pbi, ix, iy, background,
+ show_color,compare_color);
+
+ /* draw new rectangle on window, remebering it for subsequent
+ undrawing.
+ */
+ old_start_x = start_x;
+ old_start_y = start_y;
+ old_pixels_across = pixels_across;
+ x = (start_x-windx) * (*winzoomp);
+ y = (start_y-windy) * (*winzoomp);
+ i = pixels_across * (*winzoomp);
+ XDrawRectangle(display,window,rect_gc,x,y,i,i);
+
+ if ((pixel_wrong)&&(show_color))
+ {
+ (void)sprintf(xypair, " Expect = %X ",expected_pixel);
+ XDrawImageString(display, exp_win, textgc, 2, 10, xypair, 18);
+ }
+ else
+ {
+ sprintf(xypair," ");
+ XDrawImageString(display, exp_win, textgc, 2, 10, xypair, strlen(xypair));
+ }
+ }
+ else { /* highlight movement option */
+ if (highlight != xev.xmotion.window) {
+ if (highlight != None) { /* if someone is currently highlighted, unhighlight them */
+ XSetForeground(display, textgc, gcfore);
+ XSetBackground(display, textgc, gcback);
+ h_light(display, key+2, 9, textgc, labels+2, highlight, kgi);
+ } /* now highlight the requestor */
+ XSetBackground(display, textgc, gcfore);
+ XSetForeground(display, textgc, gcback);
+ highlight = xev.xmotion.window;
+ h_light(display, key+2, 9, textgc, labels+2, highlight, kgi);
+ /* munch any highlight events left around... see caveat
+ before call on vmakebig() above.
+ */
+ while (XCheckMaskEvent(display, PointerMotionMask, &fake))
+ ; /* donothing */
+ } /* end not current selection */
+ } /* end highlight */
+ } /* end while(1) */
+ x = (start_x-windx) * (*winzoomp);
+ y = (start_y-windy) * (*winzoomp);
+ i = pixels_across * (*winzoomp);
+ XDrawRectangle(display,window,rect_gc,x,y,i,i);
+ XDestroyWindow(display, blowup_win);
+ XFreeCursor(display, curse);
+ XUnloadFont(display, fid);
+ XFreeGC(display, textgc);
+ XFreeGC(display, gc);
+ XSync(display, 0);
+ return retval;
+}
diff --git a/xc/test/xsuite/xtest/tet_code b/xc/test/xsuite/xtest/tet_code
new file mode 100644
index 000000000..4ff4d260e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tet_code
@@ -0,0 +1,3 @@
+101 "WARNING" Continue
+102 "FIP" Continue
+103 "ABORT" Abort
diff --git a/xc/test/xsuite/xtest/tet_scen b/xc/test/xsuite/xtest/tet_scen
new file mode 100644
index 000000000..465799610
--- /dev/null
+++ b/xc/test/xsuite/xtest/tet_scen
@@ -0,0 +1,650 @@
+#
+# This scenario can build or run all tests in sections 2 to 10 of the
+# X11R4 Xlib specifications and touch tests for the X Protocol (version 11).
+#
+
+all
+#
+# section 2.1-2.6
+#
+ /tset/CH02/allplns/Test{all}
+ /tset/CH02/blckpxl/Test{all}
+ /tset/CH02/blckpxlofs/Test{all}
+ /tset/CH02/btmpbtordr/Test{all}
+ /tset/CH02/btmppd/Test{all}
+ /tset/CH02/btmpunt/Test{all}
+ /tset/CH02/cllsofscrn/Test{all}
+ /tset/CH02/clsdsply/Test{all}
+ /tset/CH02/cnnctnnmbr/Test{all}
+ /tset/CH02/dfltclrmp/Test{all}
+ /tset/CH02/dfltclrmpo/Test{all}
+ /tset/CH02/dfltdpth/Test{all}
+ /tset/CH02/dfltdpthof/Test{all}
+ /tset/CH02/dfltgc/Test{all}
+ /tset/CH02/dfltgcofsc/Test{all}
+ /tset/CH02/dfltrtwdw/Test{all}
+ /tset/CH02/dfltscrn/Test{all}
+ /tset/CH02/dfltscrnof/Test{all}
+ /tset/CH02/dfltvsl/Test{all}
+ /tset/CH02/dfltvslofs/Test{all}
+ /tset/CH02/dsbckngstr/Test{all}
+ /tset/CH02/dsplyclls/Test{all}
+ /tset/CH02/dsplyhght/Test{all}
+ /tset/CH02/dsplyhghtm/Test{all}
+ /tset/CH02/dsplyofscr/Test{all}
+ /tset/CH02/dsplyplns/Test{all}
+ /tset/CH02/dsplystr/Test{all}
+ /tset/CH02/dsplywdth/Test{all}
+ /tset/CH02/dsplywdthm/Test{all}
+ /tset/CH02/dssvundrs/Test{all}
+ /tset/CH02/evntmskofs/Test{all}
+ /tset/CH02/fr/Test{all}
+ /tset/CH02/hghtmmofsc/Test{all}
+ /tset/CH02/hghtofscrn/Test{all}
+ /tset/CH02/imgbytordr/Test{all}
+ /tset/CH02/lstdpths/Test{all}
+ /tset/CH02/lstknwnrqs/Test{all}
+ /tset/CH02/lstpxmpfrm/Test{all}
+ /tset/CH02/mncmpsofsc/Test{all}
+ /tset/CH02/mxcmpsofsc/Test{all}
+ /tset/CH02/nop/Test{all}
+ /tset/CH02/nxtrqst/Test{all}
+ /tset/CH02/opndsply/Test{all}
+ /tset/CH02/plnsofscrn/Test{all}
+ /tset/CH02/prtclrvsn/Test{all}
+ /tset/CH02/prtclvrsn/Test{all}
+ /tset/CH02/qlngth/Test{all}
+ /tset/CH02/rtwdw/Test{all}
+ /tset/CH02/rtwdwofscr/Test{all}
+ /tset/CH02/scrncnt/Test{all}
+ /tset/CH02/scrnnmbrof/Test{all}
+ /tset/CH02/scrnofdspl/Test{all}
+ /tset/CH02/srvrvndr/Test{all}
+ /tset/CH02/vndrrls/Test{all}
+ /tset/CH02/wdthmmofsc/Test{all}
+ /tset/CH02/wdthofscrn/Test{all}
+ /tset/CH02/whtpxl/Test{all}
+ /tset/CH02/whtpxlofsc/Test{all}
+#
+# section 2.1-2.6 macro versions
+#
+ /tset/CH02/blckpxl/MTest{all}
+ /tset/CH02/blckpxlofs/MTest{all}
+ /tset/CH02/btmpbtordr/MTest{all}
+ /tset/CH02/btmppd/MTest{all}
+ /tset/CH02/btmpunt/MTest{all}
+ /tset/CH02/cllsofscrn/MTest{all}
+ /tset/CH02/cnnctnnmbr/MTest{all}
+ /tset/CH02/dfltclrmp/MTest{all}
+ /tset/CH02/dfltclrmpo/MTest{all}
+ /tset/CH02/dfltdpth/MTest{all}
+ /tset/CH02/dfltdpthof/MTest{all}
+ /tset/CH02/dfltgc/MTest{all}
+ /tset/CH02/dfltgcofsc/MTest{all}
+ /tset/CH02/dfltrtwdw/MTest{all}
+ /tset/CH02/dfltscrn/MTest{all}
+ /tset/CH02/dfltscrnof/MTest{all}
+ /tset/CH02/dfltvsl/MTest{all}
+ /tset/CH02/dfltvslofs/MTest{all}
+ /tset/CH02/dsbckngstr/MTest{all}
+ /tset/CH02/dsplyclls/MTest{all}
+ /tset/CH02/dsplyhght/MTest{all}
+ /tset/CH02/dsplyhghtm/MTest{all}
+ /tset/CH02/dsplyofscr/MTest{all}
+ /tset/CH02/dsplyplns/MTest{all}
+ /tset/CH02/dsplystr/MTest{all}
+ /tset/CH02/dsplywdth/MTest{all}
+ /tset/CH02/dsplywdthm/MTest{all}
+ /tset/CH02/dssvundrs/MTest{all}
+ /tset/CH02/evntmskofs/MTest{all}
+ /tset/CH02/hghtmmofsc/MTest{all}
+ /tset/CH02/hghtofscrn/MTest{all}
+ /tset/CH02/imgbytordr/MTest{all}
+ /tset/CH02/lstknwnrqs/MTest{all}
+ /tset/CH02/mncmpsofsc/MTest{all}
+ /tset/CH02/mxcmpsofsc/MTest{all}
+ /tset/CH02/nxtrqst/MTest{all}
+ /tset/CH02/plnsofscrn/MTest{all}
+ /tset/CH02/prtclrvsn/MTest{all}
+ /tset/CH02/prtclvrsn/MTest{all}
+ /tset/CH02/qlngth/MTest{all}
+ /tset/CH02/rtwdw/MTest{all}
+ /tset/CH02/rtwdwofscr/MTest{all}
+ /tset/CH02/scrncnt/MTest{all}
+ /tset/CH02/scrnofdspl/MTest{all}
+ /tset/CH02/srvrvndr/MTest{all}
+ /tset/CH02/vndrrls/MTest{all}
+ /tset/CH02/wdthmmofsc/MTest{all}
+ /tset/CH02/wdthofscrn/MTest{all}
+ /tset/CH02/whtpxl/MTest{all}
+ /tset/CH02/whtpxlofsc/MTest{all}
+#
+# section 3.1-3.10
+#
+ /tset/CH03/chngwdwatt/Test{all}
+ /tset/CH03/cnfgrwdw/Test{all}
+ /tset/CH03/crcltsbws/Test{all}
+ /tset/CH03/crcltsbwsd/Test{all}
+ /tset/CH03/crcltsbwsu/Test{all}
+ /tset/CH03/crtsmplwdw/Test{all}
+ /tset/CH03/crtwdw/Test{all}
+ /tset/CH03/dstrysbws/Test{all}
+ /tset/CH03/dstrywdw/Test{all}
+ /tset/CH03/lwrwdw/Test{all}
+ /tset/CH03/mprsd/Test{all}
+ /tset/CH03/mpsbws/Test{all}
+ /tset/CH03/mpwdw/Test{all}
+ /tset/CH03/mvrszwdw/Test{all}
+ /tset/CH03/mvwdw/Test{all}
+ /tset/CH03/rstckwdws/Test{all}
+ /tset/CH03/rswdw/Test{all}
+ /tset/CH03/rszwdw/Test{all}
+ /tset/CH03/stwdwbg/Test{all}
+ /tset/CH03/stwdwbgpxm/Test{all}
+ /tset/CH03/stwdwbrdr/Test{all}
+ /tset/CH03/stwdwbrdrp/Test{all}
+ /tset/CH03/stwdwbrdrw/Test{all}
+ /tset/CH03/trnsltcrdn/Test{all}
+ /tset/CH03/unmpsbws/Test{all}
+ /tset/CH03/unmpwdw/Test{all}
+ /tset/CH03/vslidfrmvs/Test{all}
+#
+# section 4.1-4.4
+#
+ /tset/CH04/chngprprty/Test{all}
+ /tset/CH04/cnvrtslctn/Test{all}
+ /tset/CH04/dltprprty/Test{all}
+ /tset/CH04/gtatmnm/Test{all}
+ /tset/CH04/gtgmtry/Test{all}
+ /tset/CH04/gtslctnown/Test{all}
+ /tset/CH04/gtwdwattrb/Test{all}
+ /tset/CH04/gtwdwprprt/Test{all}
+ /tset/CH04/intrnatm/Test{all}
+ /tset/CH04/lstprprts/Test{all}
+ /tset/CH04/qrypntr/Test{all}
+ /tset/CH04/qrytr/Test{all}
+ /tset/CH04/rttwdwprpr/Test{all}
+ /tset/CH04/stslctnown/Test{all}
+#
+# section 5.1-5.4
+#
+ /tset/CH05/allcclr/Test{all}
+ /tset/CH05/allcclrcll/Test{all}
+ /tset/CH05/allcclrpln/Test{all}
+ /tset/CH05/allcnmdclr/Test{all}
+ /tset/CH05/chnggc/Test{all}
+ /tset/CH05/cpyclrmpan/Test{all}
+ /tset/CH05/cpygc/Test{all}
+ /tset/CH05/crtclrmp/Test{all}
+ /tset/CH05/crtgc/Test{all}
+ /tset/CH05/crtpxmp/Test{all}
+ /tset/CH05/frclrmp/Test{all}
+ /tset/CH05/frclrs/Test{all}
+ /tset/CH05/frgc/Test{all}
+ /tset/CH05/frpxmp/Test{all}
+ /tset/CH05/gcntxtfrmg/Test{all}
+ /tset/CH05/gtgcvls/Test{all}
+ /tset/CH05/lkpclr/Test{all}
+ /tset/CH05/qrybststpp/Test{all}
+ /tset/CH05/qrybstsz/Test{all}
+ /tset/CH05/qrybsttl/Test{all}
+ /tset/CH05/qryclr/Test{all}
+ /tset/CH05/qryclrs/Test{all}
+ /tset/CH05/starcmd/Test{all}
+ /tset/CH05/stbg/Test{all}
+ /tset/CH05/stclpmsk/Test{all}
+ /tset/CH05/stclporgn/Test{all}
+ /tset/CH05/stclprctng/Test{all}
+ /tset/CH05/stdshs/Test{all}
+ /tset/CH05/stfllrl/Test{all}
+ /tset/CH05/stfllstyl/Test{all}
+ /tset/CH05/stfnctn/Test{all}
+ /tset/CH05/stfnt/Test{all}
+ /tset/CH05/stfrgrnd/Test{all}
+ /tset/CH05/stgrphcsex/Test{all}
+ /tset/CH05/stlnattrbt/Test{all}
+ /tset/CH05/stplnmsk/Test{all}
+ /tset/CH05/strclr/Test{all}
+ /tset/CH05/strclrs/Test{all}
+ /tset/CH05/strnmdclr/Test{all}
+ /tset/CH05/stsbwmd/Test{all}
+ /tset/CH05/ststppl/Test{all}
+ /tset/CH05/ststt/Test{all}
+ /tset/CH05/sttl/Test{all}
+ /tset/CH05/sttsorgn/Test{all}
+ /tset/CH05/stwdwclrmp/Test{all}
+#
+# section 6.1-6.8
+#
+ /tset/CH06/clrar/Test{all}
+ /tset/CH06/clrwdw/Test{all}
+ /tset/CH06/cpyar/Test{all}
+ /tset/CH06/cpypln/Test{all}
+ /tset/CH06/crtfntcrsr/Test{all}
+ /tset/CH06/crtglyphcr/Test{all}
+ /tset/CH06/crtpxmpcrs/Test{all}
+ /tset/CH06/dfncrsr/Test{all}
+ /tset/CH06/drwarc/Test{all}
+ /tset/CH06/drwarcs/Test{all}
+ /tset/CH06/drwimgst16/Test{all}
+ /tset/CH06/drwimgstr/Test{all}
+ /tset/CH06/drwln/Test{all}
+ /tset/CH06/drwlns/Test{all}
+ /tset/CH06/drwpnt/Test{all}
+ /tset/CH06/drwpnts/Test{all}
+ /tset/CH06/drwrctngl/Test{all}
+ /tset/CH06/drwrctngls/Test{all}
+ /tset/CH06/drwsgmnts/Test{all}
+ /tset/CH06/drwstr/Test{all}
+ /tset/CH06/drwstr16/Test{all}
+ /tset/CH06/drwtxt/Test{all}
+ /tset/CH06/drwtxt16/Test{all}
+ /tset/CH06/fllarc/Test{all}
+ /tset/CH06/fllarcs/Test{all}
+ /tset/CH06/fllplygn/Test{all}
+ /tset/CH06/fllrctngl/Test{all}
+ /tset/CH06/fllrctngls/Test{all}
+ /tset/CH06/frcrsr/Test{all}
+ /tset/CH06/frfnt/Test{all}
+ /tset/CH06/frfntinf/Test{all}
+ /tset/CH06/frfntnms/Test{all}
+ /tset/CH06/frfntpth/Test{all}
+ /tset/CH06/gtfntprprt/Test{all}
+ /tset/CH06/gtfntpth/Test{all}
+ /tset/CH06/gtimg/Test{all}
+ /tset/CH06/gtsbimg/Test{all}
+ /tset/CH06/ldfnt/Test{all}
+ /tset/CH06/ldqryfnt/Test{all}
+ /tset/CH06/lstfnts/Test{all}
+ /tset/CH06/lstfntswth/Test{all}
+ /tset/CH06/ptimg/Test{all}
+ /tset/CH06/qrybstcrsr/Test{all}
+ /tset/CH06/qryfnt/Test{all}
+ /tset/CH06/qrytxtex16/Test{all}
+ /tset/CH06/qrytxtextn/Test{all}
+ /tset/CH06/rclrcrsr/Test{all}
+ /tset/CH06/stfntpth/Test{all}
+ /tset/CH06/txtextnt16/Test{all}
+ /tset/CH06/txtextnts/Test{all}
+ /tset/CH06/txtwdth/Test{all}
+ /tset/CH06/txtwdth16/Test{all}
+ /tset/CH06/undfncrsr/Test{all}
+ /tset/CH06/unldfnt/Test{all}
+#
+# section 7.1-7.11
+#
+ /tset/CH07/actvtscrns/Test{all}
+ /tset/CH07/addhst/Test{all}
+ /tset/CH07/addhsts/Test{all}
+ /tset/CH07/addtsvst/Test{all}
+ /tset/CH07/allwevnts/Test{all}
+ /tset/CH07/atrptoff/Test{all}
+ /tset/CH07/atrpton/Test{all}
+ /tset/CH07/bll/Test{all}
+ /tset/CH07/chngactvpn/Test{all}
+ /tset/CH07/chngkybrdc/Test{all}
+ /tset/CH07/chngkybrdm/Test{all}
+ /tset/CH07/chngpntrcn/Test{all}
+ /tset/CH07/chngsvst/Test{all}
+ /tset/CH07/dltmdfrmpe/Test{all}
+ /tset/CH07/dsblaccssc/Test{all}
+ /tset/CH07/dsplykycds/Test{all}
+ /tset/CH07/enblaccssc/Test{all}
+ /tset/CH07/frcscrnsvr/Test{all}
+ /tset/CH07/frmdfrmp/Test{all}
+ /tset/CH07/grbbttn/Test{all}
+ /tset/CH07/grbky/Test{all}
+ /tset/CH07/grbkybrd/Test{all}
+ /tset/CH07/grbpntr/Test{all}
+ /tset/CH07/grbsrvr/Test{all}
+ /tset/CH07/gtinptfcs/Test{all}
+ /tset/CH07/gtkybrdcnt/Test{all}
+ /tset/CH07/gtkybrdmpp/Test{all}
+ /tset/CH07/gtmdfrmppn/Test{all}
+ /tset/CH07/gtpntrcntr/Test{all}
+ /tset/CH07/gtpntrmppn/Test{all}
+ /tset/CH07/gtscrnsvr/Test{all}
+ /tset/CH07/insrtmdfrm/Test{all}
+ /tset/CH07/instllclrm/Test{all}
+ /tset/CH07/kllclnt/Test{all}
+ /tset/CH07/lsthsts/Test{all}
+ /tset/CH07/lstinstlld/Test{all}
+ /tset/CH07/nwmdfrmp/Test{all}
+ /tset/CH07/qrykymp/Test{all}
+ /tset/CH07/rmvfrmsvst/Test{all}
+ /tset/CH07/rmvhst/Test{all}
+ /tset/CH07/rmvhsts/Test{all}
+ /tset/CH07/rprntwdw/Test{all}
+ /tset/CH07/rstscrnsvr/Test{all}
+ /tset/CH07/staccsscnt/Test{all}
+ /tset/CH07/stclsdwnmd/Test{all}
+ /tset/CH07/stinptfcs/Test{all}
+ /tset/CH07/stmdfrmppn/Test{all}
+ /tset/CH07/stpntrmppn/Test{all}
+ /tset/CH07/stscrnsvr/Test{all}
+ /tset/CH07/ungrbbttn/Test{all}
+ /tset/CH07/ungrbky/Test{all}
+ /tset/CH07/ungrbkybrd/Test{all}
+ /tset/CH07/ungrbpntr/Test{all}
+ /tset/CH07/ungrbsrvr/Test{all}
+ /tset/CH07/unnstllclr/Test{all}
+ /tset/CH07/wrppntr/Test{all}
+#
+# section 8.1-8.4
+#
+ /tset/CH08/bttnprss/Test{all}
+ /tset/CH08/bttnrls/Test{all}
+ /tset/CH08/clntmssg/Test{all}
+ /tset/CH08/clrmpntfy/Test{all}
+ /tset/CH08/cnfgrntfy/Test{all}
+ /tset/CH08/cnfgrrqst/Test{all}
+ /tset/CH08/crcltntfy/Test{all}
+ /tset/CH08/crcltrqst/Test{all}
+ /tset/CH08/crtntfy/Test{all}
+ /tset/CH08/dstryntfy/Test{all}
+ /tset/CH08/entrntfy/Test{all}
+ /tset/CH08/exps/Test{all}
+ /tset/CH08/fcsin/Test{all}
+ /tset/CH08/fcsot/Test{all}
+ /tset/CH08/grphcsexps/Test{all}
+ /tset/CH08/grvtyntfy/Test{all}
+ /tset/CH08/kympntfy/Test{all}
+ /tset/CH08/kyprss/Test{all}
+ /tset/CH08/kyrls/Test{all}
+ /tset/CH08/lvntfy/Test{all}
+ /tset/CH08/mpntfy/Test{all}
+ /tset/CH08/mppngntfy/Test{all}
+ /tset/CH08/mprqst/Test{all}
+ /tset/CH08/mtnntfy/Test{all}
+ /tset/CH08/nexps/Test{all}
+ /tset/CH08/prprtyntfy/Test{all}
+ /tset/CH08/rprntntfy/Test{all}
+ /tset/CH08/rszrqst/Test{all}
+ /tset/CH08/slctnclr/Test{all}
+ /tset/CH08/slctnntfy/Test{all}
+ /tset/CH08/slctnrqst/Test{all}
+ /tset/CH08/unmpntfy/Test{all}
+ /tset/CH08/vsbltyntfy/Test{all}
+#
+# section 8.5-8.12
+#
+ /tset/CH08/chckifevnt/Test{all}
+ /tset/CH08/chckmskevn/Test{all}
+ /tset/CH08/chcktypdev/Test{all}
+ /tset/CH08/chcktypdwd/Test{all}
+ /tset/CH08/chckwdwevn/Test{all}
+ /tset/CH08/dsplymtnbf/Test{all}
+ /tset/CH08/dsplynm/Test{all}
+ /tset/CH08/evntsqd/Test{all}
+ /tset/CH08/flsh/Test{all}
+ /tset/CH08/gterrrdtbs/Test{all}
+ /tset/CH08/gterrrtxt/Test{all}
+ /tset/CH08/gtmtnevnts/Test{all}
+ /tset/CH08/ifevnt/Test{all}
+ /tset/CH08/mskevnt/Test{all}
+ /tset/CH08/nxtevnt/Test{all}
+ /tset/CH08/pkevnt/Test{all}
+ /tset/CH08/pkifevnt/Test{all}
+ /tset/CH08/pndng/Test{all}
+ /tset/CH08/ptbckevnt/Test{all}
+ /tset/CH08/slctinpt/Test{all}
+ /tset/CH08/sndevnt/Test{all}
+ /tset/CH08/staftrfnct/Test{all}
+ /tset/CH08/sterrrhndl/Test{all}
+ /tset/CH08/stioerrrhn/Test{all}
+ /tset/CH08/sync/Test{all}
+ /tset/CH08/synchrnz/Test{all}
+ /tset/CH08/wdwevnt/Test{all}
+#
+# section 9.1-9.3
+#
+ /tset/CH09/allcclsshn/Test{all}
+ /tset/CH09/allcicnsz/Test{all}
+ /tset/CH09/allcstndrd/Test{all}
+ /tset/CH09/allcszhnts/Test{all}
+ /tset/CH09/allcwmhnts/Test{all}
+ /tset/CH09/frstrlst/Test{all}
+ /tset/CH09/ftchnm/Test{all}
+ /tset/CH09/gtclsshnt/Test{all}
+ /tset/CH09/gtcmmnd/Test{all}
+ /tset/CH09/gticnnm/Test{all}
+ /tset/CH09/gticnszs/Test{all}
+ /tset/CH09/gtrgbclrmp/Test{all}
+ /tset/CH09/gttrnsntfr/Test{all}
+ /tset/CH09/gttxtprprt/Test{all}
+ /tset/CH09/gtwmclntmc/Test{all}
+ /tset/CH09/gtwmclrmpw/Test{all}
+ /tset/CH09/gtwmhnts/Test{all}
+ /tset/CH09/gtwmicnnm/Test{all}
+ /tset/CH09/gtwmnm/Test{all}
+ /tset/CH09/gtwmnrmlhn/Test{all}
+ /tset/CH09/gtwmprtcls/Test{all}
+ /tset/CH09/gtwmszhnts/Test{all}
+ /tset/CH09/icnfywdw/Test{all}
+ /tset/CH09/rcnfgrwmwd/Test{all}
+ /tset/CH09/stclsshnt/Test{all}
+ /tset/CH09/stcmmnd/Test{all}
+ /tset/CH09/sticnnm/Test{all}
+ /tset/CH09/sticnszs/Test{all}
+ /tset/CH09/strgbclrmp/Test{all}
+ /tset/CH09/strlstttxt/Test{all}
+ /tset/CH09/strnm/Test{all}
+ /tset/CH09/sttrnsntfr/Test{all}
+ /tset/CH09/sttxtprprt/Test{all}
+ /tset/CH09/stwmclntmc/Test{all}
+ /tset/CH09/stwmclrmpw/Test{all}
+ /tset/CH09/stwmhnts/Test{all}
+ /tset/CH09/stwmicnnm/Test{all}
+ /tset/CH09/stwmnm/Test{all}
+ /tset/CH09/stwmnrmlhn/Test{all}
+ /tset/CH09/stwmprprts/Test{all}
+ /tset/CH09/stwmprtcls/Test{all}
+ /tset/CH09/stwmszhnts/Test{all}
+ /tset/CH09/txtprprtyt/Test{all}
+ /tset/CH09/wmgmtry/Test{all}
+ /tset/CH09/wthdrwwdw/Test{all}
+#
+# section 10.1-10.12
+#
+ /tset/CH10/addpxl/Test{all}
+ /tset/CH10/clpbx/Test{all}
+ /tset/CH10/crtbtmpfrm/Test{all}
+ /tset/CH10/crtimg/Test{all}
+ /tset/CH10/crtpxmpfrm/Test{all}
+ /tset/CH10/crtrgn/Test{all}
+ /tset/CH10/dltcntxt/Test{all}
+ /tset/CH10/dstryimg/Test{all}
+ /tset/CH10/dstryrgn/Test{all}
+ /tset/CH10/emptyrgn/Test{all}
+ /tset/CH10/eqlrgn/Test{all}
+ /tset/CH10/fndcntxt/Test{all}
+ /tset/CH10/ftchbffr/Test{all}
+ /tset/CH10/ftchbyts/Test{all}
+ /tset/CH10/gtdflt/Test{all}
+ /tset/CH10/gtpxl/Test{all}
+ /tset/CH10/gtvslinf/Test{all}
+ /tset/CH10/intrsctrgn/Test{all}
+ /tset/CH10/iscrsrky/Test{all}
+ /tset/CH10/isfnctnky/Test{all}
+ /tset/CH10/iskypdky/Test{all}
+ /tset/CH10/ismdfrky/Test{all}
+ /tset/CH10/ismscfnctn/Test{all}
+ /tset/CH10/ispfky/Test{all}
+ /tset/CH10/kycdtkysym/Test{all}
+ /tset/CH10/kysymtkycd/Test{all}
+ /tset/CH10/kysymtstr/Test{all}
+ /tset/CH10/lkpkysym/Test{all}
+ /tset/CH10/lkpstr/Test{all}
+ /tset/CH10/mtchvslinf/Test{all}
+ /tset/CH10/offstrgn/Test{all}
+ /tset/CH10/plygnrgn/Test{all}
+ /tset/CH10/pntinrgn/Test{all}
+ /tset/CH10/prmllc/Test{all}
+ /tset/CH10/prsclr/Test{all}
+ /tset/CH10/prsgmtry/Test{all}
+ /tset/CH10/ptpxl/Test{all}
+ /tset/CH10/rbndkysym/Test{all}
+ /tset/CH10/rctinrgn/Test{all}
+ /tset/CH10/rdbtmpfl/Test{all}
+ /tset/CH10/rfrshkybrd/Test{all}
+ /tset/CH10/rmdstrydtb/Test{all}
+ /tset/CH10/rmgtfldtbs/Test{all}
+ /tset/CH10/rmgtrsrc/Test{all}
+ /tset/CH10/rmgtstrdtb/Test{all}
+ /tset/CH10/rmintlz/Test{all}
+ /tset/CH10/rmmrgdtbss/Test{all}
+ /tset/CH10/rmprscmmnd/Test{all}
+ /tset/CH10/rmptfldtbs/Test{all}
+ /tset/CH10/rmptlnrsrc/Test{all}
+ /tset/CH10/rmptrsrc/Test{all}
+ /tset/CH10/rmptstrrsr/Test{all}
+ /tset/CH10/rmqgtrsrc/Test{all}
+ /tset/CH10/rmqgtsrchl/Test{all}
+ /tset/CH10/rmqgtsrchr/Test{all}
+ /tset/CH10/rmqptrsrc/Test{all}
+ /tset/CH10/rmqptstrrs/Test{all}
+ /tset/CH10/rmqrktstr/Test{all}
+ /tset/CH10/rmstrtbndn/Test{all}
+ /tset/CH10/rmstrtqrk/Test{all}
+ /tset/CH10/rmstrtqrkl/Test{all}
+ /tset/CH10/rmunqqrk/Test{all}
+ /tset/CH10/rsrcmngrst/Test{all}
+ /tset/CH10/rttbffrs/Test{all}
+ /tset/CH10/sbimg/Test{all}
+ /tset/CH10/sbtrctrgn/Test{all}
+ /tset/CH10/shrnkrgn/Test{all}
+ /tset/CH10/strbffr/Test{all}
+ /tset/CH10/strbyts/Test{all}
+ /tset/CH10/strgn/Test{all}
+ /tset/CH10/strtkysym/Test{all}
+ /tset/CH10/svcntxt/Test{all}
+ /tset/CH10/unnrctwthr/Test{all}
+ /tset/CH10/unnrgn/Test{all}
+ /tset/CH10/unqcntxt/Test{all}
+ /tset/CH10/wrtbtmpfl/Test{all}
+ /tset/CH10/xrrgn/Test{all}
+#
+# X Protocol section
+#
+ /tset/XPROTO/allcclr/Test{all}
+ /tset/XPROTO/allcclrcll/Test{all}
+ /tset/XPROTO/allcclrpln/Test{all}
+ /tset/XPROTO/allcnmdclr/Test{all}
+ /tset/XPROTO/allwevnts/Test{all}
+ /tset/XPROTO/bdrqst/Test{all}
+ /tset/XPROTO/bll/Test{all}
+ /tset/XPROTO/chngactvpn/Test{all}
+ /tset/XPROTO/chnggc/Test{all}
+ /tset/XPROTO/chnghsts/Test{all}
+ /tset/XPROTO/chngkybrdc/Test{all}
+ /tset/XPROTO/chngkybrdm/Test{all}
+ /tset/XPROTO/chngpntrcn/Test{all}
+ /tset/XPROTO/chngprprty/Test{all}
+ /tset/XPROTO/chngsvst/Test{all}
+ /tset/XPROTO/chngwdwatt/Test{all}
+ /tset/XPROTO/clrar/Test{all}
+ /tset/XPROTO/clsfnt/Test{all}
+ /tset/XPROTO/cnfgrwdw/Test{all}
+ /tset/XPROTO/cnvrtslctn/Test{all}
+ /tset/XPROTO/cpyar/Test{all}
+ /tset/XPROTO/cpyclrmpan/Test{all}
+ /tset/XPROTO/cpygc/Test{all}
+ /tset/XPROTO/cpypln/Test{all}
+ /tset/XPROTO/crcltwdw/Test{all}
+ /tset/XPROTO/crtclrmp/Test{all}
+ /tset/XPROTO/crtcrsr/Test{all}
+ /tset/XPROTO/crtgc/Test{all}
+ /tset/XPROTO/crtglyphcr/Test{all}
+ /tset/XPROTO/crtpxmp/Test{all}
+ /tset/XPROTO/crtwdw/Test{all}
+ /tset/XPROTO/dltprprty/Test{all}
+ /tset/XPROTO/dstrysbws/Test{all}
+ /tset/XPROTO/dstrywdw/Test{all}
+ /tset/XPROTO/fllply/Test{all}
+ /tset/XPROTO/frclrmp/Test{all}
+ /tset/XPROTO/frclrs/Test{all}
+ /tset/XPROTO/frcrsr/Test{all}
+ /tset/XPROTO/frcscrnsvr/Test{all}
+ /tset/XPROTO/frgc/Test{all}
+ /tset/XPROTO/frpxmp/Test{all}
+ /tset/XPROTO/grbbttn/Test{all}
+ /tset/XPROTO/grbky/Test{all}
+ /tset/XPROTO/grbkybrd/Test{all}
+ /tset/XPROTO/grbpntr/Test{all}
+ /tset/XPROTO/grbsrvr/Test{all}
+ /tset/XPROTO/gtatmnm/Test{all}
+ /tset/XPROTO/gtfntpth/Test{all}
+ /tset/XPROTO/gtgmtry/Test{all}
+ /tset/XPROTO/gtimg/Test{all}
+ /tset/XPROTO/gtinptfcs/Test{all}
+ /tset/XPROTO/gtkybrdcnt/Test{all}
+ /tset/XPROTO/gtkybrdmpp/Test{all}
+ /tset/XPROTO/gtmdfrmppn/Test{all}
+ /tset/XPROTO/gtmtnevnts/Test{all}
+ /tset/XPROTO/gtpntrcntr/Test{all}
+ /tset/XPROTO/gtpntrmppn/Test{all}
+ /tset/XPROTO/gtprprty/Test{all}
+ /tset/XPROTO/gtscrnsvr/Test{all}
+ /tset/XPROTO/gtslctnown/Test{all}
+ /tset/XPROTO/gtwdwattrb/Test{all}
+ /tset/XPROTO/imgtxt16/Test{all}
+ /tset/XPROTO/imgtxt8/Test{all}
+ /tset/XPROTO/instllclrm/Test{all}
+ /tset/XPROTO/intrnatm/Test{all}
+ /tset/XPROTO/kllclnt/Test{all}
+ /tset/XPROTO/lkpclr/Test{all}
+ /tset/XPROTO/lstextnsns/Test{all}
+ /tset/XPROTO/lstfnts/Test{all}
+ /tset/XPROTO/lstfntswth/Test{all}
+ /tset/XPROTO/lsthsts/Test{all}
+ /tset/XPROTO/lstinstlld/Test{all}
+ /tset/XPROTO/lstprprts/Test{all}
+ /tset/XPROTO/mpsbws/Test{all}
+ /tset/XPROTO/mpwdw/Test{all}
+ /tset/XPROTO/noprtn/Test{all}
+ /tset/XPROTO/opndsply/Test{all}
+ /tset/XPROTO/opnfnt/Test{all}
+ /tset/XPROTO/plyarc/Test{all}
+ /tset/XPROTO/plyfllarc/Test{all}
+ /tset/XPROTO/plyfllrctn/Test{all}
+ /tset/XPROTO/plyln/Test{all}
+ /tset/XPROTO/plypnt/Test{all}
+ /tset/XPROTO/plyrctngl/Test{all}
+ /tset/XPROTO/plysgmnt/Test{all}
+ /tset/XPROTO/plytxt16/Test{all}
+ /tset/XPROTO/plytxt8/Test{all}
+ /tset/XPROTO/ptimg/Test{all}
+ /tset/XPROTO/qrybstsz/Test{all}
+ /tset/XPROTO/qryclrs/Test{all}
+ /tset/XPROTO/qryextnsn/Test{all}
+ /tset/XPROTO/qryfnt/Test{all}
+ /tset/XPROTO/qrykymp/Test{all}
+ /tset/XPROTO/qrypntr/Test{all}
+ /tset/XPROTO/qrytr/Test{all}
+ /tset/XPROTO/qrytxtextn/Test{all}
+ /tset/XPROTO/rclrcrsr/Test{all}
+ /tset/XPROTO/rprntwdw/Test{all}
+ /tset/XPROTO/rttprprts/Test{all}
+ /tset/XPROTO/sndevnt/Test{all}
+ /tset/XPROTO/staccsscnt/Test{all}
+ /tset/XPROTO/stclprctng/Test{all}
+ /tset/XPROTO/stclsdwnmd/Test{all}
+ /tset/XPROTO/stdshs/Test{all}
+ /tset/XPROTO/stfntpth/Test{all}
+ /tset/XPROTO/stinptfcs/Test{all}
+ /tset/XPROTO/stmdfrmppn/Test{all}
+ /tset/XPROTO/stpntrmppn/Test{all}
+ /tset/XPROTO/strclrs/Test{all}
+ /tset/XPROTO/strnmdclr/Test{all}
+ /tset/XPROTO/stscrnsvr/Test{all}
+ /tset/XPROTO/stslctnown/Test{all}
+ /tset/XPROTO/trnsltcrds/Test{all}
+ /tset/XPROTO/ungrbbttn/Test{all}
+ /tset/XPROTO/ungrbky/Test{all}
+ /tset/XPROTO/ungrbkybrd/Test{all}
+ /tset/XPROTO/ungrbpntr/Test{all}
+ /tset/XPROTO/ungrbsrvr/Test{all}
+ /tset/XPROTO/unmpsbws/Test{all}
+ /tset/XPROTO/unmpwdw/Test{all}
+ /tset/XPROTO/unnstllclr/Test{all}
+ /tset/XPROTO/wrppntr/Test{all}
diff --git a/xc/test/xsuite/xtest/tetbuild.cfg b/xc/test/xsuite/xtest/tetbuild.cfg
new file mode 100644
index 000000000..868804440
--- /dev/null
+++ b/xc/test/xsuite/xtest/tetbuild.cfg
@@ -0,0 +1,345 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+#########################
+# Note
+#########################
+
+# For certain variables, there are lines of the form:
+# # System: CONFIGVAR=foo
+#
+# These are suggested values for these options, and may not
+# always be correct and up-to-date for any given system.
+
+#########################
+# TET Parameters
+#########################
+
+# TET_BUILD_TOOL - The program to use as the build tool.
+# This should normally be the pmake program supplied as part
+# of the test suite.
+TET_BUILD_TOOL=pmake
+
+# TET_BUILD_FILE - This is intended to be used for the arguments to the TET
+# build tool - this should be empty, since no arguments are accepted by pmake.
+TET_BUILD_FILE=
+
+# TET_CLEAN_TOOL - The program to use as the TET clean tool.
+# This should normally be the pclean program supplied as part
+# of the test suite.
+TET_CLEAN_TOOL=pclean
+
+# TET_CLEAN_FILE - This is intended to be used for the arguments to the TET
+# clean tool - this should be empty, since no arguments are accepted by pclean.
+TET_CLEAN_FILE=
+
+# TET_OUTPUT_CAPTURE - This must be set to True.
+TET_OUTPUT_CAPTURE=True
+
+##########################
+# Commands
+##########################
+
+# SHELL - The following line should cause the Bourne shell to be used
+# by make.
+SHELL=/bin/sh
+
+# CC - C compiler
+# AIXV3 : CC=xlc
+CC=cc
+
+# RM - Comamnd to remove files
+RM=rm -f
+
+# AR - command to generate an archive
+AR=ar crv
+
+# LD - command to link object files.
+LD=ld
+
+# LN - command to make hard links to files. This could be a copy command
+# if no link command exists.
+LN=ln
+
+# RANLIB - If the system requires ranlib then this is set to
+# ranlib else set to echo
+# SunOS : RANLIB=ranlib
+# ULTRIX: RANLIB=ranlib
+# HP-UX : RANLIB=echo
+# DYNIX : RANLIB=ranlib
+# A/UX : RANLIB=echo
+# AIXV3 : RANLIB=ranlib
+# SVR4 : RANLIB=echo
+RANLIB=ranlib
+
+# TSORT - Set to cat if archiver inserts its own symbol table
+# or the system uses ranlib
+TSORT=cat
+
+# LORDER - Set to echo if archiver inserts its own symbol table
+# or the system uses ranlib
+LORDER=echo
+
+# CP - copy file
+CP=cp
+
+# CODEMAKER - this is the utility supplied with the test suite
+# to extract the code from the combined source files.
+CODEMAKER=mc
+
+##################
+# TET locations
+##################
+
+# The location of TET_ROOT. This must not contain variable expansions.
+TET_ROOT=/tree/Xtest/x/root
+
+# TETBASE - The location of the TET directories
+TETBASE=${TET_ROOT}/tet
+
+# PORTINC - A directory where headers to allow portability to non-POSIX
+# systems are kept
+# SunOS : PORTINC=
+# ULTRIX: PORTINC=
+# HP-UX : PORTINC=
+# DYNIX : PORTINC=-I${TET_ROOT}/port/INC
+# A/UX : PORTINC=
+# AIXV3 : PORTINC=
+# SVR4 : PORTINC=
+PORTINC=
+
+# PORTLIB - A library to allow portability to non-POSIX systems
+# SunOS : PORTLIB=
+# ULTRIX: PORTLIB=
+# HP-UX : PORTLIB=
+# DYNIX : PORTLIB=${TET_ROOT}/port/libport.a
+# A/UX : PORTLIB=
+# AIXV3 : PORTLIB=
+# SVR4 : PORTLIB=
+PORTLIB=
+
+# TETINCDIR - The directory containing the TET API headers.
+TETINCDIR=${TETBASE}/inc/posix_c
+
+# TETLIB - The library containing the TET API library
+TETLIB=${TETBASE}/lib/posix_c
+
+# TCM - The Test Control Manager
+TCM=${TETLIB}/tcm.o
+
+# TCMCHILD - The Test Control Manager for files executed by tet_exec.
+TCMCHILD=${TETLIB}/tcmchild.o
+
+# APILIB - The TET API library
+APILIB=${TETLIB}/libapi.a
+
+####################
+# Xtest variables
+####################
+
+# XTESTHOST - name of host on which test suite clients are to be executed.
+# This may be set to the value returned by a command which can be executed
+# using the PATH you have set on your host, or may be set to a specific name.
+# This is used to produce a resource file named .Xdefaults-$(XTESTHOST) in the
+# test execution directory.
+# The resource file is created when building the test for XGetDefault.
+# This parameter is only used in the Makefile of the test for XGetDefault.
+# Examples are:
+# XTESTHOST=`hostname`
+# XTESTHOST=`uname -n`
+# XTESTHOST=triton
+#
+# SVR4 : XTESTHOST=`uname -n`
+XTESTHOST=`hostname`
+
+# XTESTROOT
+XTESTROOT=${TET_ROOT}/xtest
+
+# XTESTLIBDIR - location of the xtest library files
+XTESTLIBDIR=${XTESTROOT}/lib
+
+# XTESTLIB - the xtest library
+XTESTLIB=${XTESTLIBDIR}/libxtest.a
+
+# XSTLIB - library for linking the X Protocol tests
+XSTLIB=${XTESTLIBDIR}/libXst.a
+
+# XTESTFONTLIB - supplementary library with font metrics.
+XTESTFONTLIB=${XTESTLIBDIR}/libfont.a
+
+# XTESTINCDIR - the xtest header file directory
+XTESTINCDIR=${XTESTROOT}/include
+
+# XTESTBIN - location for xtest binaries.
+XTESTBIN=${XTESTROOT}/bin
+
+####################
+# System files
+####################
+
+# SYSLIBS - Any system libraries that are needed, will almost certainly
+# include Xlib.
+# If you wish to build the tests to make use of the XTEST extension, you
+# will need to include the X extension library and the XTEST library.
+# These are usually included by adding -lXtst -lXext before -lX11.
+# SVR4 : SYSLIBS=-lX11 -lnsl
+SYSLIBS=-lX11
+
+# XP_SYSLIBS - Any system libraries that are needed, to link the
+# X Protocol tests. This will include Xlib, since libXst.a
+# (which is part of the test suite) will include at least a call
+# on XOpenDisplay.
+# SVR4 : XP_SYSLIBS=-lX11 -lnsl
+XP_SYSLIBS=-lX11
+
+# SYSINC - Any commands that should be given to the C compiler
+# to cause all relevant system libraries to search. May well
+# need to include /usr/include/X11
+SYSINC=-I/usr/include/X11
+
+################################
+##### C compiler Directives Section
+################################
+
+# COPTS - Option to C compiler
+# SunOS : COPTS=-O
+# ULTRIX: COPTS=-O
+# HP-UX : COPTS=-O -Aa
+# DYNIX : COPTS=-O
+# A/UX : COPTS=-A4 -O
+# SVR4 : COPTS=-O -Xc
+COPTS=
+
+# DEFINES - C compiler defines.
+# If you wish to build the tests to make use of the XTEST extension, you
+# will need to define XTESTEXTENSION.
+# SunOS : DEFINES=-DNSIG=32 -DEXIT_FAILURE=1 -DEXIT_SUCCESS=0
+# ULTRIX: DEFINES=
+# HP-UX : DEFINES=-D_POSIX_SOURCE -D_XOPEN_SOURCE -D_HPUX_SOURCE
+# DYNIX : DEFINES=
+# A/UX : DEFINES=-D_POSIX_SOURCE -DNSIG=32 -DEXIT_FAILURE=1 -DEXIT_SUCCESS=0
+# AIXV3 : DEFINES=-D_POSIX_SOURCE -D_XOPEN_SOURCE -D_ALL_SOURCE
+# SVR4 : DEFINES=-D_POSIX_SOURCE -D_XOPEN_SOURCE -DNSIG=32
+DEFINES=-D_POSIX_SOURCE
+
+# XP_DEFINES - C compiler defines specific to the X Protocol tests.
+# This can be set as DEFINES, but you can build support for additional
+# connection methods beyond TCP/IP, using the following defines,
+# if XP_OPEN_DIS is XlibNoXTest.c (R4/R5 XOpenDisplay emulation):
+# -DDNETCONN - Connections can also use DECnet.
+# -DUNIXCONN - Connections can also use UNIX domain sockets.
+# Refer to your documentation for building and installing Xlib on
+# your platform.
+# If XP_OPEN_DIS is one of XlibWithXTest.c or XlibOpaque.c then none of
+# the defines listed above will be required.
+#
+# SunOS : XP_DEFINES=-DUNIXCONN -DEXIT_FAILURE=1 -DEXIT_SUCCESS=0
+# ULTRIX: XP_DEFINES=-DUNIXCONN
+# HP-UX : XP_DEFINES=-D_POSIX_SOURCE -D_XOPEN_SOURCE -D_HPUX_SOURCE -DUNIXCONN
+# DYNIX : XP_DEFINES=-D_POSIX_SOURCE -DUNIXCONN
+# A/UX : XP_DEFINES=-D_POSIX_SOURCE -DUNIXCONN -DEXIT_FAILURE=1 -DEXIT_SUCCESS=0
+# AIXV3 : XP_DEFINES=-D_POSIX_SOURCE -D_XOPEN_SOURCE -D_ALL_SOURCE
+# SVR4 : XP_DEFINES=
+XP_DEFINES=
+
+# LINKOBJOPTS - options to give to the LD program to link object
+# files together into one object file that can be further linked.
+LINKOBJOPTS=-r
+
+# INCLUDES - Options to cause C compiler to search correct directories
+# for headers.
+INCLUDES=-I. ${PORTINC} -I${TETINCDIR} -I${XTESTINCDIR} ${SYSINC}
+
+# CFLAGS - Flags for C compiler
+CFLAGS=$(CFLOCAL) $(COPTS) $(INCLUDES) $(DEFINES)
+
+# XP_CFLAGS - Flags for C compiler specific to the X Protocol tests.
+XP_CFLAGS=$(CFLOCAL) $(COPTS) $(INCLUDES) $(XP_DEFINES)
+
+# LDFLAGS - Flags for the loader.
+# SunOS : LDFLAGS=
+# ULTRIX: LDFLAGS=
+# HP-UX : LDFLAGS=
+# DYNIX : LDFLAGS=
+# A/UX : LDFLAGS=-ZP
+# AIXV3 : LDFLAGS=
+# SVR4 : LDFLAGS=-Xc -L/usr/lib/X11
+LDFLAGS=
+
+# LIBS - List of libraries.
+LIBS=${XTESTLIB} ${XTESTFONTLIB} ${APILIB} ${PORTLIB}
+
+# XP_LIBS - List of libraries specific to the X Protocol tests.
+XP_LIBS=${XSTLIB} ${XTESTLIB} ${XTESTFONTLIB} ${APILIB} ${PORTLIB}
+
+# XP_OPEN_DIS - A choice of which code to build in the X Protocol library
+# to make an X server connection.
+# This must be set to one of three possible values:
+#
+# XlibWithXTest.c Your Xlib includes enhancements to _XConnectDisplay
+# ensuring maximum portable protocol test coverage.
+# XlibOpaque.c You have a normal R4 Xlib or early R5 Xlib which you
+# cannot patch to include the enhancements to
+# _XConnectDisplay, and you cannot emulate these by
+# building XlibNoXTest.c, so only client-native testing
+# can be done portably, and no failure testing of
+# XOpenDisplay can be done.
+# This option uses XOpenDisplay to make the connection,
+# from which the file descriptor is recovered for
+# our own use. XCloseDisplay shuts down the connection.
+# XlibNoXTest.c As for XlibOpaque.c but you can use the R4/R5
+# connection emulation supplied. (Note: R4/R5 independent)
+# This will ensure maximum protocol test coverage
+# but may not be portable to all platforms.
+#
+# Reasons for not being able to build XlibNoXTest.c might include:
+# i) different interfaces to connection setup and connection read/write;
+# ii) different access control mechanisms.
+# Refer to your Xlib documentation for further details.
+#
+#XP_OPEN_DIS=XlibWithXTest.c
+#XP_OPEN_DIS=XlibNoXTest.c
+#XP_OPEN_DIS=XlibOpaque.c
+XP_OPEN_DIS=XlibOpaque.c
+
+################################
+##### Pixel Validation Section.
+################################
+
+PVXTESTLIB=${XTESTLIBDIR}/libxtstpv.a
+PIXLIB=${XTESTLIBDIR}/libpvt.a
+PVLIBS=${PVXTESTLIB} ${XTESTFONTLIB} ${PIXLIB} ${APILIB} ${PORTLIB}
+
+# SYSMATHLIB - system math library. Directive to be given to the C compiler
+# to cause the maths routines to be available.
+SYSMATHLIB=-lm
+
+################################
+##### Lint Section.
+################################
+
+LINT=lint
+LINTFLAGS=$(INCLUDES) $(DEFINES) -u -n
+LINTXTEST=$(XTESTLIBDIR)/llib-lxtest.ln
+LINTXST=$(XTESTLIBDIR)/llib-lXst.ln
+LINTFONTS=$(XTESTLIBDIR)/llib-lfonts.ln
+LINTTCM=$(XTESTLIBDIR)/llib-ltcm.ln
+LINTTCMC=$(XTESTLIBDIR)/llib-ltcmc.ln
+LINTLIBS=$(LINTXTEST) $(LINTFONTS)
+
+XP_LINTFLAGS=$(INCLUDES) $(XP_DEFINES) -u -n
+XP_LINTLIBS=$(LINTXST) $(LINTXTEST) $(LINTFONTS)
diff --git a/xc/test/xsuite/xtest/tetclean.cfg b/xc/test/xsuite/xtest/tetclean.cfg
new file mode 100644
index 000000000..868804440
--- /dev/null
+++ b/xc/test/xsuite/xtest/tetclean.cfg
@@ -0,0 +1,345 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+#########################
+# Note
+#########################
+
+# For certain variables, there are lines of the form:
+# # System: CONFIGVAR=foo
+#
+# These are suggested values for these options, and may not
+# always be correct and up-to-date for any given system.
+
+#########################
+# TET Parameters
+#########################
+
+# TET_BUILD_TOOL - The program to use as the build tool.
+# This should normally be the pmake program supplied as part
+# of the test suite.
+TET_BUILD_TOOL=pmake
+
+# TET_BUILD_FILE - This is intended to be used for the arguments to the TET
+# build tool - this should be empty, since no arguments are accepted by pmake.
+TET_BUILD_FILE=
+
+# TET_CLEAN_TOOL - The program to use as the TET clean tool.
+# This should normally be the pclean program supplied as part
+# of the test suite.
+TET_CLEAN_TOOL=pclean
+
+# TET_CLEAN_FILE - This is intended to be used for the arguments to the TET
+# clean tool - this should be empty, since no arguments are accepted by pclean.
+TET_CLEAN_FILE=
+
+# TET_OUTPUT_CAPTURE - This must be set to True.
+TET_OUTPUT_CAPTURE=True
+
+##########################
+# Commands
+##########################
+
+# SHELL - The following line should cause the Bourne shell to be used
+# by make.
+SHELL=/bin/sh
+
+# CC - C compiler
+# AIXV3 : CC=xlc
+CC=cc
+
+# RM - Comamnd to remove files
+RM=rm -f
+
+# AR - command to generate an archive
+AR=ar crv
+
+# LD - command to link object files.
+LD=ld
+
+# LN - command to make hard links to files. This could be a copy command
+# if no link command exists.
+LN=ln
+
+# RANLIB - If the system requires ranlib then this is set to
+# ranlib else set to echo
+# SunOS : RANLIB=ranlib
+# ULTRIX: RANLIB=ranlib
+# HP-UX : RANLIB=echo
+# DYNIX : RANLIB=ranlib
+# A/UX : RANLIB=echo
+# AIXV3 : RANLIB=ranlib
+# SVR4 : RANLIB=echo
+RANLIB=ranlib
+
+# TSORT - Set to cat if archiver inserts its own symbol table
+# or the system uses ranlib
+TSORT=cat
+
+# LORDER - Set to echo if archiver inserts its own symbol table
+# or the system uses ranlib
+LORDER=echo
+
+# CP - copy file
+CP=cp
+
+# CODEMAKER - this is the utility supplied with the test suite
+# to extract the code from the combined source files.
+CODEMAKER=mc
+
+##################
+# TET locations
+##################
+
+# The location of TET_ROOT. This must not contain variable expansions.
+TET_ROOT=/tree/Xtest/x/root
+
+# TETBASE - The location of the TET directories
+TETBASE=${TET_ROOT}/tet
+
+# PORTINC - A directory where headers to allow portability to non-POSIX
+# systems are kept
+# SunOS : PORTINC=
+# ULTRIX: PORTINC=
+# HP-UX : PORTINC=
+# DYNIX : PORTINC=-I${TET_ROOT}/port/INC
+# A/UX : PORTINC=
+# AIXV3 : PORTINC=
+# SVR4 : PORTINC=
+PORTINC=
+
+# PORTLIB - A library to allow portability to non-POSIX systems
+# SunOS : PORTLIB=
+# ULTRIX: PORTLIB=
+# HP-UX : PORTLIB=
+# DYNIX : PORTLIB=${TET_ROOT}/port/libport.a
+# A/UX : PORTLIB=
+# AIXV3 : PORTLIB=
+# SVR4 : PORTLIB=
+PORTLIB=
+
+# TETINCDIR - The directory containing the TET API headers.
+TETINCDIR=${TETBASE}/inc/posix_c
+
+# TETLIB - The library containing the TET API library
+TETLIB=${TETBASE}/lib/posix_c
+
+# TCM - The Test Control Manager
+TCM=${TETLIB}/tcm.o
+
+# TCMCHILD - The Test Control Manager for files executed by tet_exec.
+TCMCHILD=${TETLIB}/tcmchild.o
+
+# APILIB - The TET API library
+APILIB=${TETLIB}/libapi.a
+
+####################
+# Xtest variables
+####################
+
+# XTESTHOST - name of host on which test suite clients are to be executed.
+# This may be set to the value returned by a command which can be executed
+# using the PATH you have set on your host, or may be set to a specific name.
+# This is used to produce a resource file named .Xdefaults-$(XTESTHOST) in the
+# test execution directory.
+# The resource file is created when building the test for XGetDefault.
+# This parameter is only used in the Makefile of the test for XGetDefault.
+# Examples are:
+# XTESTHOST=`hostname`
+# XTESTHOST=`uname -n`
+# XTESTHOST=triton
+#
+# SVR4 : XTESTHOST=`uname -n`
+XTESTHOST=`hostname`
+
+# XTESTROOT
+XTESTROOT=${TET_ROOT}/xtest
+
+# XTESTLIBDIR - location of the xtest library files
+XTESTLIBDIR=${XTESTROOT}/lib
+
+# XTESTLIB - the xtest library
+XTESTLIB=${XTESTLIBDIR}/libxtest.a
+
+# XSTLIB - library for linking the X Protocol tests
+XSTLIB=${XTESTLIBDIR}/libXst.a
+
+# XTESTFONTLIB - supplementary library with font metrics.
+XTESTFONTLIB=${XTESTLIBDIR}/libfont.a
+
+# XTESTINCDIR - the xtest header file directory
+XTESTINCDIR=${XTESTROOT}/include
+
+# XTESTBIN - location for xtest binaries.
+XTESTBIN=${XTESTROOT}/bin
+
+####################
+# System files
+####################
+
+# SYSLIBS - Any system libraries that are needed, will almost certainly
+# include Xlib.
+# If you wish to build the tests to make use of the XTEST extension, you
+# will need to include the X extension library and the XTEST library.
+# These are usually included by adding -lXtst -lXext before -lX11.
+# SVR4 : SYSLIBS=-lX11 -lnsl
+SYSLIBS=-lX11
+
+# XP_SYSLIBS - Any system libraries that are needed, to link the
+# X Protocol tests. This will include Xlib, since libXst.a
+# (which is part of the test suite) will include at least a call
+# on XOpenDisplay.
+# SVR4 : XP_SYSLIBS=-lX11 -lnsl
+XP_SYSLIBS=-lX11
+
+# SYSINC - Any commands that should be given to the C compiler
+# to cause all relevant system libraries to search. May well
+# need to include /usr/include/X11
+SYSINC=-I/usr/include/X11
+
+################################
+##### C compiler Directives Section
+################################
+
+# COPTS - Option to C compiler
+# SunOS : COPTS=-O
+# ULTRIX: COPTS=-O
+# HP-UX : COPTS=-O -Aa
+# DYNIX : COPTS=-O
+# A/UX : COPTS=-A4 -O
+# SVR4 : COPTS=-O -Xc
+COPTS=
+
+# DEFINES - C compiler defines.
+# If you wish to build the tests to make use of the XTEST extension, you
+# will need to define XTESTEXTENSION.
+# SunOS : DEFINES=-DNSIG=32 -DEXIT_FAILURE=1 -DEXIT_SUCCESS=0
+# ULTRIX: DEFINES=
+# HP-UX : DEFINES=-D_POSIX_SOURCE -D_XOPEN_SOURCE -D_HPUX_SOURCE
+# DYNIX : DEFINES=
+# A/UX : DEFINES=-D_POSIX_SOURCE -DNSIG=32 -DEXIT_FAILURE=1 -DEXIT_SUCCESS=0
+# AIXV3 : DEFINES=-D_POSIX_SOURCE -D_XOPEN_SOURCE -D_ALL_SOURCE
+# SVR4 : DEFINES=-D_POSIX_SOURCE -D_XOPEN_SOURCE -DNSIG=32
+DEFINES=-D_POSIX_SOURCE
+
+# XP_DEFINES - C compiler defines specific to the X Protocol tests.
+# This can be set as DEFINES, but you can build support for additional
+# connection methods beyond TCP/IP, using the following defines,
+# if XP_OPEN_DIS is XlibNoXTest.c (R4/R5 XOpenDisplay emulation):
+# -DDNETCONN - Connections can also use DECnet.
+# -DUNIXCONN - Connections can also use UNIX domain sockets.
+# Refer to your documentation for building and installing Xlib on
+# your platform.
+# If XP_OPEN_DIS is one of XlibWithXTest.c or XlibOpaque.c then none of
+# the defines listed above will be required.
+#
+# SunOS : XP_DEFINES=-DUNIXCONN -DEXIT_FAILURE=1 -DEXIT_SUCCESS=0
+# ULTRIX: XP_DEFINES=-DUNIXCONN
+# HP-UX : XP_DEFINES=-D_POSIX_SOURCE -D_XOPEN_SOURCE -D_HPUX_SOURCE -DUNIXCONN
+# DYNIX : XP_DEFINES=-D_POSIX_SOURCE -DUNIXCONN
+# A/UX : XP_DEFINES=-D_POSIX_SOURCE -DUNIXCONN -DEXIT_FAILURE=1 -DEXIT_SUCCESS=0
+# AIXV3 : XP_DEFINES=-D_POSIX_SOURCE -D_XOPEN_SOURCE -D_ALL_SOURCE
+# SVR4 : XP_DEFINES=
+XP_DEFINES=
+
+# LINKOBJOPTS - options to give to the LD program to link object
+# files together into one object file that can be further linked.
+LINKOBJOPTS=-r
+
+# INCLUDES - Options to cause C compiler to search correct directories
+# for headers.
+INCLUDES=-I. ${PORTINC} -I${TETINCDIR} -I${XTESTINCDIR} ${SYSINC}
+
+# CFLAGS - Flags for C compiler
+CFLAGS=$(CFLOCAL) $(COPTS) $(INCLUDES) $(DEFINES)
+
+# XP_CFLAGS - Flags for C compiler specific to the X Protocol tests.
+XP_CFLAGS=$(CFLOCAL) $(COPTS) $(INCLUDES) $(XP_DEFINES)
+
+# LDFLAGS - Flags for the loader.
+# SunOS : LDFLAGS=
+# ULTRIX: LDFLAGS=
+# HP-UX : LDFLAGS=
+# DYNIX : LDFLAGS=
+# A/UX : LDFLAGS=-ZP
+# AIXV3 : LDFLAGS=
+# SVR4 : LDFLAGS=-Xc -L/usr/lib/X11
+LDFLAGS=
+
+# LIBS - List of libraries.
+LIBS=${XTESTLIB} ${XTESTFONTLIB} ${APILIB} ${PORTLIB}
+
+# XP_LIBS - List of libraries specific to the X Protocol tests.
+XP_LIBS=${XSTLIB} ${XTESTLIB} ${XTESTFONTLIB} ${APILIB} ${PORTLIB}
+
+# XP_OPEN_DIS - A choice of which code to build in the X Protocol library
+# to make an X server connection.
+# This must be set to one of three possible values:
+#
+# XlibWithXTest.c Your Xlib includes enhancements to _XConnectDisplay
+# ensuring maximum portable protocol test coverage.
+# XlibOpaque.c You have a normal R4 Xlib or early R5 Xlib which you
+# cannot patch to include the enhancements to
+# _XConnectDisplay, and you cannot emulate these by
+# building XlibNoXTest.c, so only client-native testing
+# can be done portably, and no failure testing of
+# XOpenDisplay can be done.
+# This option uses XOpenDisplay to make the connection,
+# from which the file descriptor is recovered for
+# our own use. XCloseDisplay shuts down the connection.
+# XlibNoXTest.c As for XlibOpaque.c but you can use the R4/R5
+# connection emulation supplied. (Note: R4/R5 independent)
+# This will ensure maximum protocol test coverage
+# but may not be portable to all platforms.
+#
+# Reasons for not being able to build XlibNoXTest.c might include:
+# i) different interfaces to connection setup and connection read/write;
+# ii) different access control mechanisms.
+# Refer to your Xlib documentation for further details.
+#
+#XP_OPEN_DIS=XlibWithXTest.c
+#XP_OPEN_DIS=XlibNoXTest.c
+#XP_OPEN_DIS=XlibOpaque.c
+XP_OPEN_DIS=XlibOpaque.c
+
+################################
+##### Pixel Validation Section.
+################################
+
+PVXTESTLIB=${XTESTLIBDIR}/libxtstpv.a
+PIXLIB=${XTESTLIBDIR}/libpvt.a
+PVLIBS=${PVXTESTLIB} ${XTESTFONTLIB} ${PIXLIB} ${APILIB} ${PORTLIB}
+
+# SYSMATHLIB - system math library. Directive to be given to the C compiler
+# to cause the maths routines to be available.
+SYSMATHLIB=-lm
+
+################################
+##### Lint Section.
+################################
+
+LINT=lint
+LINTFLAGS=$(INCLUDES) $(DEFINES) -u -n
+LINTXTEST=$(XTESTLIBDIR)/llib-lxtest.ln
+LINTXST=$(XTESTLIBDIR)/llib-lXst.ln
+LINTFONTS=$(XTESTLIBDIR)/llib-lfonts.ln
+LINTTCM=$(XTESTLIBDIR)/llib-ltcm.ln
+LINTTCMC=$(XTESTLIBDIR)/llib-ltcmc.ln
+LINTLIBS=$(LINTXTEST) $(LINTFONTS)
+
+XP_LINTFLAGS=$(INCLUDES) $(XP_DEFINES) -u -n
+XP_LINTLIBS=$(LINTXST) $(LINTXTEST) $(LINTFONTS)
diff --git a/xc/test/xsuite/xtest/tetexec.cfg b/xc/test/xsuite/xtest/tetexec.cfg
new file mode 100644
index 000000000..2c1e36ff7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tetexec.cfg
@@ -0,0 +1,349 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+###########################################################################
+# This file contains run-time parameters for the test suite.
+# They are accessed with the tet_getvar() function.
+###########################################################################
+
+##############################################
+# Configuration parameters defined by the TET
+##############################################
+
+# TET_EXEC_IN_PLACE - Setting this variable to False indicates that
+# files will be executed in a temporary execution directory.
+# Use of a temporary execution directory for each test enables
+# parallel execution of the test suite against multiple servers.
+# Setting this variable to True will give you improved performance if
+# you are not attempting parallel execution of the test suite against
+# multiple servers.
+TET_EXEC_IN_PLACE=False
+
+# TET_SAVE_FILES - This indicates which files generated during execution of
+# tests are to be saved for later examination.
+# This line should not be altered.
+TET_SAVE_FILES=Err*.err,*.sav
+
+###########################################################
+# General configuration parameters
+###########################################################
+
+# XT_DISPLAY - A string that identifies the display and screen to
+# run the tests for.
+XT_DISPLAY=ariel:0.0
+
+# XT_ALT_SCREEN - If the display supports more than one screen then
+# this parameter should be set to one that is not under test.
+# Set to the string UNSUPPORTED if only one screen is available.
+XT_ALT_SCREEN=UNSUPPORTED
+
+# XT_FONTPATH -
+# This should be set to a comma separated list that is a valid font path
+# for the X server.
+# It should include at least the components of the default font path
+# for the X server enabling the cursor font to be accessed.
+# One of the entries in the list must be the directory in which
+# the test fonts were installed.
+XT_FONTPATH=/usr/lib/X11/fonts/xtest/,/usr/lib/X11/fonts/misc/
+
+# XT_SPEEDFACTOR - Specifies a multiplier used for timing.
+# This should be set >= 1.
+# This is a speedfactor which should be set to reflect the relative delay
+# in response of the underlying operating system and X server combined.
+# Co-operating processes which must synchronize allow a time delay in
+# proportion to this speedfactor, to account for scheduling delays in the
+# underlying operating system and X server.
+# There should be no need to change the default unless the round trip
+# time to the X server can be very long ( >15 seconds); in this case set this
+# parameter to a value larger than the maximum round trip time divided
+# by 3.
+XT_SPEEDFACTOR=5
+
+# XT_RESET_DELAY - Specifies a delay time in seconds.
+# Set this to be a time which is greater than or equal to the maximum time
+# required by your server to reset when the last client is closed.
+# The test suite pauses for this time whenever a connection is about to be
+# opened and the server may be resetting.
+# The server may be resetting when the test case is entered (in startup())
+# as a result of closing the last connection in the previous test case.
+# The server also resets in a few places in the test for XCloseDisplay().
+XT_RESET_DELAY=1
+
+# XT_EXTENSIONS - Specifies whether you wish to test the extended assertions
+# which require the XTEST extension.
+# Set this to Yes if the XTEST extension is available on your system,
+# and you have configured the test suite to use the XTEST extension,
+# and you want to execute these tests, otherwise set to No.
+XT_EXTENSIONS=No
+
+###########################################################
+# Configuration parameters for specific tests
+###########################################################
+
+# XT_VISUAL_CLASSES - A space separated list of the visual classes that
+# are supported for the screen given by XT_DISPLAY. Each visual class
+# is followed by a list of depths at which the class is supported
+# (enclosed by brackets and separated by commas with no spaces).
+# Visual classes and depths that are supported only by other screens
+# should not be included.
+# Note - this parameter is used to check the correctness of the information
+# returned by XMatchVisualInfo and XGetVisualInfo. Other tests which loop
+# over visuals obtain the visuals by calling these functions.
+# Example values are:
+XT_VISUAL_CLASSES=StaticGray(1,8) GrayScale(1,8) StaticColor(8) PseudoColor(8) TrueColor(8) DirectColor(8)
+
+# XT_FONTCURSOR_GOOD - This specifies the number of a glyph in the
+# default cursor font known to exist.
+# XT_FONTCURSOR_GOOD+2 should also be a glyph in the default cursor font.
+# Neither of these should be the same as the X server's default cursor.
+XT_FONTCURSOR_GOOD=2
+
+# XT_FONTCURSOR_BAD - This specifies the number of a glyph in the
+# default cursor font known not to exist. If there is no such
+# number then set this parameter to UNSUPPORTED.
+XT_FONTCURSOR_BAD=9999
+
+# XT_FONTPATH_GOOD -
+# This should be set to a comma separated list that is a valid font path
+# for the X server. It should be different to the list specified by
+# XT_FONTPATH. It need not contain the test fonts.
+XT_FONTPATH_GOOD=/usr/lib/X11/fonts/100dpi/,/usr/lib/X11/fonts/75dpi/
+
+# XT_FONTPATH_BAD - This should be set to a comma separated list that
+# is an invalid font path for the X server.
+XT_FONTPATH_BAD=/no-such-path-name
+
+# XT_BAD_FONT_NAME - This should be set to a non-existent font name.
+XT_BAD_FONT_NAME=non-existent-font-name
+
+# XT_GOOD_COLORNAME - This should be set to the name of a colour
+# which exists in the colour database for the X server.
+XT_GOOD_COLORNAME=red
+
+# XT_BAD_COLORNAME - This should be set to the name of a colour
+# which does not exist in the colour database for the X server.
+XT_BAD_COLORNAME=nosuchcolor
+
+# XT_DISPLAYMOTIONBUFFERSIZE - specifies size of pointer motion buffer
+# This should be set to a non-zero value (the value returned by
+# XDisplayMotionBufferSize) if the X server supports a more complete
+# history of pointer motion than that provided by event notification, or
+# zero otherwise.
+XT_DISPLAYMOTIONBUFFERSIZE=0
+
+###########################################################
+# Configuration parameters for Display functions
+###########################################################
+
+# XT_SCREEN_COUNT - This parameter should be set to the number of screens
+# available on the display, as returned by XScreenCount.
+XT_SCREEN_COUNT=1
+
+# XT_PIXMAP_DEPTHS - A space separated list of depths supported by
+# the specified screen of the display that can be used for pixmaps.
+XT_PIXMAP_DEPTHS=1 8
+
+# XT_BLACK_PIXEL - This parameter should be set to the black pixel value
+# of the specified screen of the display.
+XT_BLACK_PIXEL=0x0
+
+# XT_WHITE_PIXEL - This parameter should be set to the white pixel value
+# of the specified screen of the display.
+XT_WHITE_PIXEL=0x1
+
+# XT_HEIGHT_MM - This parameter should be set to the height in millimeters
+# of the specified screen of the display.
+XT_HEIGHT_MM=224
+
+# XT_WIDTH_MM - This parameter should be set to the width in millimeters
+# of the specified screen of the display.
+XT_WIDTH_MM=288
+
+# XT_PROTOCOL_VERSION - This should be set to the major version number (11)
+# of the X protocol as returned by XProtocolVersion.
+XT_PROTOCOL_VERSION=11
+
+# XT_PROTOCOL_REVISION - This should be set to the minor protocol
+# revision number as returned by XProtocolRevision.
+XT_PROTOCOL_REVISION=0
+
+# XT_SERVER_VENDOR - This should be set to the X server vendor string
+# as returned by XServerVendor.
+XT_SERVER_VENDOR=
+
+# XT_VENDOR_RELEASE - This should be set to the X server vendor's release
+# number as returned by XVendorRelease.
+XT_VENDOR_RELEASE=1
+
+# XT_DOES_SAVE_UNDERS - Set this to Yes if the specified screen of the display
+# supports save unders (indicated by XDoesSaveUnders returning True)
+# otherwise set to No.
+XT_DOES_SAVE_UNDERS=Yes
+
+# XT_DOES_BACKING_STORE - Set this to the following value:
+# - 0 if the way the specified screen supports backing store is NotUseful
+# - 1 if the way the specified screen supports backing store is WhenMapped
+# - 2 if the way the specified screen supports backing store is Always
+# The way the specified screen supports backing store is indicated by the
+# return value of XDoesBackingStore.
+XT_DOES_BACKING_STORE=2
+
+###########################################################
+# Configuration parameters for connection tests
+###########################################################
+
+# XT_POSIX_SYSTEM - This may be set to Yes to indicate that the
+# underlying operating system is a POSIX system. If this parameter is
+# set to Yes, some extended assertions which describe implementation
+# dependent functionality will be tested assuming POSIX concepts.
+XT_POSIX_SYSTEM=Yes
+
+# XT_DECNET - Set this to yes if clients can connect to the X server under
+# test using DECnet. This will be used (on a POSIX system)
+# in the tests for XOpenDisplay.
+XT_DECNET=No
+
+# XT_TCP - Set this to yes if clients can connect to the X server under
+# test using TCP streams. This will be used (on a POSIX system)
+# in the tests for XOpenDisplay.
+XT_TCP=Yes
+
+# XT_DISPLAYHOST - Set this to the hostname of the machine on which
+# the display is physically attached. This will be used instead of
+# XT_DISPLAY (on a POSIX system) in the tests for XOpenDisplay which
+# specifically test the hostname component of the display name.
+# Note that this may not be the same as the machine on which the
+# test suite clients execute (XTESTHOST).
+XT_DISPLAYHOST=ariel
+
+# XT_LOCAL - Set this to yes if clients can connect to a local X server
+# without passing a hostname to XOpenDisplay. This will be used
+# (on a POSIX system) in the tests for XOpenDisplay.
+# This is usually the case when the X server under test is running on the
+# same platform as the X test suite.
+# When a hostname is omitted, the Xlib implementation of XOpenDisplay
+# can use the fastest available transport mechanism to make local connections.
+XT_LOCAL=No
+
+###########################################################################
+# The following variables are options which do not affect test results.
+# They only alter the accompanying output from the test suite.
+# They are accessed with the tet_getvar() function.
+###########################################################################
+
+# XT_SAVE_SERVER_IMAGE - When set to Yes, the image produced by the server
+# that is compared with the known good image is dumped to a file
+# with suffix .sav.
+XT_SAVE_SERVER_IMAGE=No
+
+# XT_OPTION_NO_CHECK - This may be set to Yes to suppress the journal file
+# records containing CHECK keywords.
+XT_OPTION_NO_CHECK=No
+
+# XT_OPTION_NO_TRACE - This may be set to Yes to suppress the journal file
+# records containing TRACE keywords.
+XT_OPTION_NO_TRACE=No
+
+###########################################################################
+# The following variables are intended for use in debugging. They should
+# not be used when running verification tests.
+# They are accessed with the tet_getvar() function.
+###########################################################################
+
+# XT_DEBUG - This may be set to a debugging level between 0 and 9.
+# A higher level produces more debugging output. Output is only
+# produced by the test suite at levels 1, 2 and 3 at present. So setting
+# this variable to 0 produces no debug output.
+XT_DEBUG=0
+
+# XT_DEBUG_OVERRIDE_REDIRECT - When set to Yes, windows are created with
+# override_redirect set. Otherwise windows are not created with
+# override_redirect set. This enables tests to be run more easily with a
+# window manager running on the same screen.
+# This should not be set to Yes for verification tests.
+XT_DEBUG_OVERRIDE_REDIRECT=No
+
+# XT_DEBUG_PAUSE_AFTER - When set to Yes, the test pauses before calls to
+# the function being tested, until Carriage Return is entered.
+# This should not be set to Yes for verification tests.
+XT_DEBUG_PAUSE_AFTER=No
+
+# XT_DEBUG_PIXMAP_ONLY - When set to Yes, tests which would normally loop over
+# both windows and pixmaps are restricted to loop over just pixmaps.
+# This should not be set to Yes for verification tests.
+# If XT_DEBUG_WINDOW_ONLY is also set, some tests will report UNRESOLVED due
+# to the fact that nothing has been tested.
+XT_DEBUG_PIXMAP_ONLY=No
+
+# XT_DEBUG_WINDOW_ONLY - When set to Yes, tests which would normally loop over
+# both windows and pixmaps are restricted to loop over just windows.
+# This should not be set to Yes for verification tests.
+# If XT_DEBUG_PIXMAP_ONLY is also set, some tests will report UNRESOLVED due
+# to the fact that nothing has been tested.
+XT_DEBUG_WINDOW_ONLY=No
+
+# XT_DEBUG_DEFAULT_DEPTHS - When set to Yes, tests which would normally loop
+# over multiple depths are restricted to test just the first visual
+# returned by XGetVisualInfo and/or the first pixmap depth returned by
+# XListDepths (depending on whether XT_DEBUG_PIXMAP_ONLY or
+# XT_DEBUG_WINDOW_ONLY is also set).
+# This should not be set to Yes for verification tests.
+# Note that the first visual returned by XGetVisualInfo may not be
+# the default visual for the screen.
+XT_DEBUG_DEFAULT_DEPTHS=No
+
+# XT_DEBUG_VISUAL_IDS - When set to a non-empty string, tests which would
+# normally loop over multiple depths are restricted to test just the
+# visuals ID's listed. Note that visual ID's for visuals on more than
+# one screen may be entered, but those used will depend on whether the test
+# being executed uses visuals on the default screen or alternate screen.
+# The visuals ID's should be entered in decimal, octal or hexadecimal
+# and separated with commas and with no intervening spaces.
+# This should not be set to a non-empty string for verification tests.
+XT_DEBUG_VISUAL_IDS=
+
+# XT_DEBUG_NO_PIXCHECK - When set to Yes, tests which would normally
+# perform pixmap verification omit this (all other processing is
+# performed in those tests as normal).
+# Pixmap verification is a scheme which compares the image produced by
+# the X server with a known good image file which is part of the test
+# suite.
+# This should not be set to Yes for verification tests.
+XT_DEBUG_NO_PIXCHECK=No
+
+# XT_DEBUG_BYTE_SEX - When set to NATIVE, REVERSE, MSB or LSB,
+# the X Protocol tests will only be executed with the specified byte sex.
+# By default, the X Protocol tests make connections to the X server using
+# both the native and reversed byte sex.
+XT_DEBUG_BYTE_SEX=NATIVE
+
+# XT_DEBUG_VISUAL_CHECK - When set to a non-zero value, the X Protocol tests
+# will pause for the specified time interval (in seconds) to enable a visual
+# check to be performed on the displayed screen contents.
+XT_DEBUG_VISUAL_CHECK=0
+
+###########################################################################
+# The following variables are intended for use only in generating known good
+# image files.
+###########################################################################
+
+# XT_FONTDIR - The directory in which the xtest fonts are supplied (before
+# being installed).
+# This must be set such that appending a string gives a valid file name.
+# This is normally set to $TET_ROOT/xtest/fonts/
+# This is only used by the PV library which is not part of the test suite.
+XT_FONTDIR=/tree/Xtest/x/root/xtest/fonts/
+
diff --git a/xc/test/xsuite/xtest/tset/CH02/Makefile b/xc/test/xsuite/xtest/tset/CH02/Makefile
new file mode 100644
index 000000000..e85329455
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/Makefile
@@ -0,0 +1,200 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+#
+# This Makefile can be used to compile all the tests in this
+# section of the X test suite in such a way that they are all links to
+# a single executable file. This normally allows a considerable
+# reduction in the disc space requirements for the X test suite
+# when fully built.
+#
+# There are two ways this can be done:
+# 1) Using the TET. Execute the command:
+# tcc -b -s link_exec xtest linkbuild
+# in the directory $TET_ROOT/xtest.
+# This will execute the TET build tool (which is normally pmake)
+# in the top level directory of each section of the test suite
+# (including this directory).
+#
+# 2) Directly without using the TET. Execute the command:
+# pmake
+# in this directory.
+#
+# For more details, refer to the User Guide
+#
+
+CAT=cat
+
+ALLTESTS=Tests
+
+TESTOFILES=\
+allplns.o \
+blckpxl.o \
+blckpxlofs.o \
+btmpbtordr.o \
+btmppd.o \
+btmpunt.o \
+cllsofscrn.o \
+clsdsply.o \
+cnnctnnmbr.o \
+dfltclrmp.o \
+dfltclrmpo.o \
+dfltdpth.o \
+dfltdpthof.o \
+dfltgc.o \
+dfltgcofsc.o \
+dfltrtwdw.o \
+dfltscrn.o \
+dfltscrnof.o \
+dfltvsl.o \
+dfltvslofs.o \
+dsbckngstr.o \
+dsplyclls.o \
+dsplyhght.o \
+dsplyhghtm.o \
+dsplyofscr.o \
+dsplyplns.o \
+dsplystr.o \
+dsplywdth.o \
+dsplywdthm.o \
+dssvundrs.o \
+evntmskofs.o \
+fr.o \
+hghtmmofsc.o \
+hghtofscrn.o \
+imgbytordr.o \
+lstdpths.o \
+lstknwnrqs.o \
+lstpxmpfrm.o \
+mncmpsofsc.o \
+mxcmpsofsc.o \
+nop.o \
+nxtrqst.o \
+opndsply.o \
+plnsofscrn.o \
+prtclrvsn.o \
+prtclvrsn.o \
+qlngth.o \
+rtwdw.o \
+rtwdwofscr.o \
+scrncnt.o \
+scrnnmbrof.o \
+scrnofdspl.o \
+srvrvndr.o \
+vndrrls.o \
+wdthmmofsc.o \
+wdthofscrn.o \
+whtpxl.o \
+whtpxlofsc.o
+
+LINKOFILE=linktbl.o
+OFILES = $(TESTOFILES) $(LINKOFILE)
+
+DIRLIST=\
+allplns \
+blckpxl \
+blckpxlofs \
+btmpbtordr \
+btmppd \
+btmpunt \
+cllsofscrn \
+clsdsply \
+cnnctnnmbr \
+dfltclrmp \
+dfltclrmpo \
+dfltdpth \
+dfltdpthof \
+dfltgc \
+dfltgcofsc \
+dfltrtwdw \
+dfltscrn \
+dfltscrnof \
+dfltvsl \
+dfltvslofs \
+dsbckngstr \
+dsplyclls \
+dsplyhght \
+dsplyhghtm \
+dsplyofscr \
+dsplyplns \
+dsplystr \
+dsplywdth \
+dsplywdthm \
+dssvundrs \
+evntmskofs \
+fr \
+hghtmmofsc \
+hghtofscrn \
+imgbytordr \
+lstdpths \
+lstknwnrqs \
+lstpxmpfrm \
+mncmpsofsc \
+mxcmpsofsc \
+nop \
+nxtrqst \
+opndsply \
+plnsofscrn \
+prtclrvsn \
+prtclvrsn \
+qlngth \
+rtwdw \
+rtwdwofscr \
+scrncnt \
+scrnnmbrof \
+scrnofdspl \
+srvrvndr \
+vndrrls \
+wdthmmofsc \
+wdthofscrn \
+whtpxl \
+whtpxlofsc
+
+all: subdirs test
+
+test:$P $(OFILES) $(LIBS) $(TCM)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(TCM) $(LIBS) $(SYSLIBS)
+ $(CAT) test > $(ALLTESTS)
+ $(RM) test
+
+subdirs:
+ if [ ! -f $(ALLTESTS) ]; then $(CAT) /dev/null > $(ALLTESTS); \
+ chmod a+x $(ALLTESTS); else : ; fi
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then \
+ (cd $$i; echo Compiling in $$i; $(TET_BUILD_TOOL) linkexec); \
+ fi; \
+ done
+
+# The xtestlib is made if it doesn't exist
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
+clean: cletests clesubdirs
+
+cletests:
+ $(RM) test $(OFILES) $(ALLTESTS) core
+
+clesubdirs:
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then (cd $$i; $(TET_CLEAN_TOOL) ); fi; done
+
+clobber: clean
diff --git a/xc/test/xsuite/xtest/tset/CH02/allplns/allplns.m b/xc/test/xsuite/xtest/tset/CH02/allplns/allplns.m
new file mode 100644
index 000000000..3f0c7287e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/allplns/allplns.m
@@ -0,0 +1,55 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAllPlanes CH02
+unsigned long
+XAllPlanes()
+>>ASSERTION Good A
+A call to xname returns an unsigned long value with all bits set to 1.
+>>STRATEGY
+Call XAllPlanes.
+Verify result was ~0L.
+>>CODE
+unsigned long result;
+
+ result = XCALL;
+ if ( result != ~0L ) {
+ report("%s() returned %lu instead of %lu", result, ~0L);
+ FAIL;
+ } else
+ PASS;
+
+>>#
+>># Note - the next assertion cannot be automatically derived from the
+>># previous one, using the >>SET macro command, because mc can only produce
+>># automatically generated tests for macros which have arguments.
+>># So, it is included here separately.
+>># Note - the assertion is really for AllPlanes, not XAllPlanes.
+>>#
+>>ASSERTION Good A
+AllPlanes returns an unsigned long value with all bits set to 1.
+>>STRATEGY
+Invoke AllPlanes.
+Verify result was ~0L.
+>>CODE
+unsigned long result;
+
+ result = AllPlanes;
+ if ( result != ~0L ) {
+ report("%s() returned %lu instead of %lu", result, ~0L);
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH02/blckpxl/blckpxl.m b/xc/test/xsuite/xtest/tset/CH02/blckpxl/blckpxl.m
new file mode 100644
index 000000000..93c32f71b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/blckpxl/blckpxl.m
@@ -0,0 +1,45 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XBlackPixel CH02
+unsigned long
+XBlackPixel(display, screen_number)
+Display *display = Dsp;
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good A
+A call to xname returns the black pixel value for
+>># comments subsequent to the review period resulted in the extra words ...
+the default colourmap of
+the screen
+.A screen_number .
+>>STRATEGY
+Obtain the value of the black pixel using xname.
+Verify that the value is that given in parameter XT_BLACK_PIXEL.
+>>CODE
+unsigned long pixl;
+
+ pixl = XCALL;
+ if(pixl != config.black_pixel) {
+ report("%s() returns incorrect value for black pixel",
+ TestName);
+ report("Expected value 0x%lx; Observed value 0x%lx",
+ config.black_pixel, pixl);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH02/blckpxlofs/blckpxlofs.m b/xc/test/xsuite/xtest/tset/CH02/blckpxlofs/blckpxlofs.m
new file mode 100644
index 000000000..b910706cf
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/blckpxlofs/blckpxlofs.m
@@ -0,0 +1,44 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XBlackPixelOfScreen CH02
+unsigned long
+XBlackPixelOfScreen(screen)
+Screen *screen = XDefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the black pixel value of
+>># comments subsequent to the review period resulted in the extra words ...
+the default colourmap of
+the screen
+.A screen .
+>>STRATEGY
+Obtain the black pixel value of the default screen using xname.
+Verify that the value is that given in parameter XT_BLACK_PIXEL.
+>>CODE
+unsigned long pixl;
+
+ pixl = XCALL;
+ if(pixl != config.black_pixel) {
+ report("%s() returns incorrect value for black pixel",
+ TestName);
+ report("Expected value 0x%lx; Observed value 0x%lx",
+ config.black_pixel, pixl);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH02/btmpbtordr/btmpbtordr.m b/xc/test/xsuite/xtest/tset/CH02/btmpbtordr/btmpbtordr.m
new file mode 100644
index 000000000..943699f58
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/btmpbtordr/btmpbtordr.m
@@ -0,0 +1,66 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XBitmapBitOrder CH02
+int
+XBitmapBitOrder(display)
+Display *display = Dsp;
+>>EXTERN
+static char *msbstr = "MSBFirst";
+static char *lsbstr = "LSBFirst";
+static char errstr[9];
+
+static
+char *
+sorder(order)
+int order;
+{
+ switch (order) {
+
+ case MSBFirst:
+ return msbstr;
+ case LSBFirst:
+ return lsbstr;
+ default:
+ sprintf(errstr, "%d", order);
+ return errstr;
+ }
+}
+>>ASSERTION Good A
+A call to xname returns the bitorder, either
+.S LSBFirst
+or
+.S MSBFirst ,
+for a scanline unit.
+>>STRATEGY
+Obtain an XImage structure using XGetImage.
+Obtain the bitmap bit order using xname.
+Verify that the bitmap bit orders are the same.
+>>CODE
+int border;
+XImage *xi;
+
+ border = XCALL;
+ xi = XGetImage(display, DRW(display), 0,0, 1,1, XAllPlanes(), ZPixmap);
+
+ if(border != xi->bitmap_bit_order) {
+ report("%s() returned %s instead of %s.", TestName, sorder(border), sorder(xi->bitmap_bit_order));
+ FAIL;
+ } else
+ PASS;
+
+ XFree((char *) xi);
diff --git a/xc/test/xsuite/xtest/tset/CH02/btmppd/btmppd.m b/xc/test/xsuite/xtest/tset/CH02/btmppd/btmppd.m
new file mode 100644
index 000000000..d1444b756
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/btmppd/btmppd.m
@@ -0,0 +1,45 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XBitmapPad CH02
+int
+XBitmapPad(display)
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname returns the quantum of a scanline which is 8, 16, or 32.
+>>STRATEGY
+Obtain the bitmap pad from an XImage structure using XGetImage.
+Obtain the bitmap pad using xname.
+Verify the bitmap pad values are the same.
+>>CODE
+int bpad;
+XImage *xi;
+
+ bpad = XCALL;
+ xi = XGetImage(display, DRW(display), 0,0, 1,1, XAllPlanes(), ZPixmap);
+
+ if( (xi->bitmap_pad != 8) && (xi->bitmap_pad != 16) && (xi->bitmap_pad != 32) ) {
+ report("%s() returned invalid value %d.", TestName, xi->bitmap_pad);
+ FAIL;
+ } else
+ if(xi->bitmap_pad != bpad) {
+ report("%s() returned %d instead of %d.", TestName, bpad, xi->bitmap_pad);
+ FAIL;
+ } else
+ PASS;
+
+ XFree((char *) xi);
diff --git a/xc/test/xsuite/xtest/tset/CH02/btmpunt/btmpunt.m b/xc/test/xsuite/xtest/tset/CH02/btmpunt/btmpunt.m
new file mode 100644
index 000000000..e3cfeeed9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/btmpunt/btmpunt.m
@@ -0,0 +1,60 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XBitmapUnit CH02
+int
+XBitmapUnit(display)
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname returns an integer 8, 16, or 32 which is less than the
+bitmap pad value and which is the size in bits of a scanline unit belonging to bitmaps.
+>>STRATEGY
+Obtain the bitmap unit from a XImage structure using XGetImage.
+Obtain the bitmap unit using xname.
+Verify that the values are the same.
+>>CODE
+int bunt;
+int pad;
+XImage *xi;
+
+ bunt = XCALL;
+
+ if( (bunt != 8) && (bunt != 16) && (bunt != 32) ) {
+ report("%s() returned illegal value %d.", TestName, bunt);
+ FAIL;
+ } else
+ CHECK;
+
+ pad = XBitmapPad(display);
+
+ if( bunt > pad ) {
+ report("%s() returned %d which is not less than the bitmap pad of %d.", TestName, bunt, pad);
+ FAIL;
+ } else
+ CHECK;
+
+ xi = XGetImage(display, DRW(display), 0,0, 1,1, XAllPlanes(), ZPixmap);
+
+ if(xi->bitmap_unit != bunt) {
+ report("%s() returned %d instead of %d.", TestName, bunt, xi->bitmap_unit);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+ XFree((char *) xi);
diff --git a/xc/test/xsuite/xtest/tset/CH02/cllsofscrn/cllsofscrn.m b/xc/test/xsuite/xtest/tset/CH02/cllsofscrn/cllsofscrn.m
new file mode 100644
index 000000000..5aa30d5ff
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/cllsofscrn/cllsofscrn.m
@@ -0,0 +1,57 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XCellsOfScreen CH02
+int
+XCellsOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the number of colourmap cells in the default
+colourmap of the screen
+.A screen .
+>>STRATEGY
+Obtain the default visual using XDefaultVisual.
+Obtain the XVisualInfo structure corresponding to the DefaultVisual using XGetVisualInfo.
+Obtain the number of colourmap entries in the default visual from the structure.
+Obtain the number of colourmap entries in the default colourmap using xname.
+Verify that the number of cells is the same.
+>>CODE
+Visual *dv;
+int nv;
+int dnc;
+XVisualInfo vit;
+XVisualInfo *vil;
+
+ dv = XDefaultVisual(Dsp, DefaultScreen(Dsp));
+ vit.visualid = XVisualIDFromVisual(dv);
+
+ if((vil = XGetVisualInfo(Dsp, VisualIDMask, &vit, &nv)) == (XVisualInfo *) NULL) {
+ delete("XGetVisualInfo() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ dnc = XCALL;
+
+ if(dnc != vil->colormap_size) {
+ report("%s() returned %d colourmap cells instead of %d.", TestName, dnc, vil->colormap_size);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char *) vil);
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/clsdsply/clsdsply.m b/xc/test/xsuite/xtest/tset/CH02/clsdsply/clsdsply.m
new file mode 100644
index 000000000..e31ef9eb3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/clsdsply/clsdsply.m
@@ -0,0 +1,1848 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCloseDisplay CH02
+
+XCloseDisplay(display)
+Display *display = Dsp;
+>>EXTERN
+
+#include "string.h"
+#include "Xatom.h"
+
+#define PROTECT(x) _startcall(display);\
+ x;\
+ _endcall(display);\
+ if(geterr() != Success) {\
+ report("Got %s, Expecting %s.", errorname(geterr()), errorname(Success));\
+ FAIL;\
+ } else\
+ CHECK;
+
+#define OPEN(disp, closemode) \
+ if((disp = XOpenDisplay(config.display)) == (Display *) NULL) { \
+ delete("XOpenDisplay() returned NULL."); \
+ return; \
+ } else \
+ CHECK; \
+ XSetCloseDownMode(disp, closemode);
+
+#define DELETE_ONERR(line, errstr) \
+ startcall(display); \
+ line; \
+ endcall(display); \
+ if(geterr() != Success) { \
+ delete("%s() generated a %s error.", errstr, errorname(geterr())); \
+ return; \
+ } else \
+ CHECK;
+
+#define FAIL_ONERR(line, errstr, id) \
+ startcall(Dsp); \
+ line; \
+ endcall(Dsp); \
+ if(geterr() == Success) { \
+ report(errstr, TestName, (long) id); \
+ FAIL; \
+ } else \
+ CHECK;
+
+#define FAIL_ONERR2(line, errstr, id, mode) \
+ startcall(Dsp); \
+ line; \
+ endcall(Dsp); \
+ if(geterr() != Success) { \
+ report(errstr, TestName, (long) id, mode); \
+ report("Error was %s instead of Success", errorname(geterr())); \
+ FAIL; \
+ } else \
+ CHECK;
+
+#define FAIL_ONERR3(line, err, errstr, id) \
+ startcall(Dsp); \
+ line; \
+ endcall(Dsp); \
+ if(geterr() != err) { \
+ report("Got error %s instead of %s.", errorname(geterr()), errorname(err)); \
+ report(errstr, TestName, (long) id); \
+ FAIL; \
+ } else \
+ CHECK;
+
+#define FAIL_ONERR4(line, err, errstr, id, mode) \
+ startcall(Dsp); \
+ line; \
+ endcall(Dsp); \
+ if(geterr() != err) { \
+ report(errstr, TestName, (long) id, mode); \
+ report("Got error %s instead of %s", errorname(geterr()), errorname(err)); \
+ FAIL; \
+ } else \
+ CHECK;
+
+char *cmode[2] = { " for a client with a closedown mode of RetainPermanent",
+ " for a client with a closedown mode of RetainTemporary" };
+
+int closemodes[2] = { RetainPermanent, RetainTemporary };
+
+>># COMMENT : See XSync - also B 3.
+>>ASSERTION Good B 3
+A call to xname flushes the output buffer and waits until each flushed request has
+been received and processed by the X server.
+>>ASSERTION Good B 3
+A call to xname closes the connection specified by the
+.A display
+argument.
+>>STRATEGY
+If the system is POSIX compliant:
+ Open a display using XOpenDisplay.
+ Obtain the file descriptor of the connection using XConnectionNumber.
+ Close the display using xname.
+ Close the file descriptor using close.
+ Verify that the call returned -1.
+Otherwise:
+ UNTESTED.
+>>CODE
+int fd;
+
+ if(config.posix_system == 0) {
+ untested("This assertion can only be tested on a POSIX system.");
+ return;
+ } else
+ CHECK;
+
+ if((display = XOpenDisplay(config.display)) == (Display *) NULL) {
+ delete("XOpenDisplay() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ fd = XConnectionNumber(display);
+
+ PROTECT(XCloseDisplay(display))
+
+ if( close(fd) != -1) {
+ report("%s() did not close file descriptor %d.", TestName, fd);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+A call to xname disowns all selections made by the client.
+>>STRATEGY
+Open a display using XOpenDisplay.
+Create a client window using XCreateWindow.
+Acquire the XA_PRIMARY selection using XSetSelectionOwner.
+Verify that the client owns the selection with XGetSelectionOwner.
+Close the display using xname.
+Verify that the XA_PRIMARY selection is not owned with XGetSelectionOwner.
+>>CODE
+Window client;
+Atom selection = XA_PRIMARY;
+
+ if((display = XOpenDisplay(config.display)) == (Display *) NULL) {
+ delete("XOpenDisplay() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ client = defwin(display);
+
+ XSetSelectionOwner(display, selection, client, CurrentTime);
+
+ if(XGetSelectionOwner(display, selection) != client) {
+ delete("Failed to get selection XA_PRIMARY.");
+ XCloseDisplay(display);
+ return;
+ } else
+ CHECK;
+
+ PROTECT(XCloseDisplay(display))
+
+ if(XGetSelectionOwner(Dsp, selection) != (Window) None) {
+ report("%s() did not disown selection XA_PRIMARY.", TestName);
+ return;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+
+>>ASSERTION Good A
+When the client has actively grabbed the pointer, then a call to xname
+performs a
+.S XUngrabPointer .
+>>STRATEGY
+Open a display using XOpenDisplay.
+Grab the pointer using XGrabPointer.
+Verify that the call returned GrabSuccess.
+Close the display using xname.
+Grab the pointer using XGrabPointer.
+Verify that the call returned GrabSuccess.
+>>CODE
+Window gw, ow;
+
+ if( (display = XOpenDisplay(config.display)) == (Display *) NULL) {
+ delete("XOpenDisplay() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ gw = defwin(display);
+ ow = defwin(Dsp);
+
+ if(XGrabPointer(display, gw, True, 0L, GrabModeAsync, GrabModeAsync, None, None, CurrentTime) != GrabSuccess) {
+ delete("XGrabPointer did not return GrabSuccess.");
+ XCloseDisplay(display);
+ return;
+ } else
+ CHECK;
+
+ XSync(display, False);
+
+ if(XGrabPointer(Dsp, ow, True, 0L, GrabModeAsync, GrabModeAsync, None, None, CurrentTime) != AlreadyGrabbed) {
+ delete("XGrabPointer did not return AlreadyGrabbed.");
+ XCloseDisplay(display);
+ return;
+ } else
+ CHECK;
+
+ PROTECT(XCloseDisplay(display))
+
+ if(XGrabPointer(Dsp, ow, True, 0L, GrabModeAsync, GrabModeAsync, None, None, CurrentTime) != GrabSuccess) {
+ report("%s() did not ungrab the pointer.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+ XUngrabPointer(Dsp, CurrentTime);
+
+>>ASSERTION Good A
+When the client has actively grabbed the keyboard, then a call to xname
+performs a
+.S XUngrabKeyboard .
+>>STRATEGY
+Open a display using XOpenDisplay.
+Grab the keyboard using XGrabKeyboard.
+Verify that the call returned GrabSuccess.
+Close the display using xname.
+Grab the keyboard using XGrabKeyboard.
+Verify that the call returned GrabSuccess.
+>>CODE
+Window gw, ow;
+
+ if( (display = XOpenDisplay(config.display)) == (Display *) NULL) {
+ delete("XOpenDisplay() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ gw = defwin(display);
+ ow = defwin(Dsp);
+
+ if(XGrabKeyboard(display, gw, True, GrabModeAsync, GrabModeAsync, CurrentTime) != GrabSuccess) {
+ delete("XGrabKeyboard did not return GrabSuccess.");
+ XCloseDisplay(display);
+ return;
+ } else
+ CHECK;
+
+ XSync(display, False);
+
+ if(XGrabKeyboard(Dsp, ow, True, GrabModeAsync, GrabModeAsync, CurrentTime) != AlreadyGrabbed) {
+ delete("XGrabKeyboard did not return AlreadyGrabbed.");
+ XCloseDisplay(display);
+ return;
+ } else
+ CHECK;
+
+ PROTECT(XCloseDisplay(display))
+
+ if(XGrabKeyboard(Dsp, ow, True, GrabModeAsync, GrabModeAsync, CurrentTime) != GrabSuccess) {
+ report("%s() did not ungrab the keyboard.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+ XUngrabKeyboard(Dsp, CurrentTime);
+
+>>ASSERTION Good A
+When the client has grabbed the server, then
+a call to xname performs a
+.S XUngrabServer .
+>>STRATEGY
+Create a connection for client1 using XOpenDisplay.
+Create a connection for client2 using XOpenDisplay.
+Create a window using XCreateWindow.
+Grab the server for the default display using XGrabServer.
+Create a process using tet_fork.
+In child process:
+ Generate a ChangeProperty request using XChangeProperty.
+Wait sufficient time for the ChangeProperty request to be processed.
+Verify that no PropertyChange event has been generated by client2 using XCheckWindowEvent.
+Close the client1 connection using xname.
+Wait suffient time for the ChangeProperty request to be processed.
+Verify that a ChangeProperty request was generated by client2.
+>>EXTERN
+int waittime = -1;
+Atom at;
+Window win;
+Display *client2;
+char *atname = "XT_TEST_Atom";
+static void
+t006p()
+{
+XEvent ev;
+int pass=0, fail=0;
+
+ sleep(waittime);
+
+ if(XCheckWindowEvent(display, win, PropertyChangeMask, &ev) == True) {
+ delete("A request was processed for a non-grabbing client.");
+ return;
+ } else
+ CHECK;
+
+ XCloseDisplay(display);
+
+ sleep(waittime);
+
+ if(XCheckWindowEvent(client2, win, PropertyChangeMask, &ev) == False) {
+ report("%s() did not ungrab the server.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+}
+
+static void
+t006c()
+{
+long val;
+
+ val = 666;
+ settimeout(waittime * 3);
+ XChangeProperty(client2, win, at, XA_INTEGER, 32, PropModeReplace, (unsigned char *) &val, 1);
+ XFlush(client2);
+ cleartimeout();
+ exit(0);
+}
+>>CODE
+
+ waittime = 2*config.speedfactor + 5;
+
+ win = defwin(Dsp);
+
+
+ if((display = XOpenDisplay(config.display)) == (Display *) NULL) {
+ delete("XOpenDisplay() returned NULL.");
+ return;
+ }
+
+ client2 = opendisplay();
+
+ if(client2 == (Display *) NULL) {
+ delete("XOpenDisplay() returned NULL.");
+ XCloseDisplay(display);
+ return;
+ }
+
+ XSelectInput(client2, win, PropertyChangeMask);
+ XSelectInput(display, win, PropertyChangeMask);
+ at = XInternAtom(display, atname, False);
+ XGrabServer(display);
+ XSync(display, False);
+
+
+ if(tet_fork(t006c, t006p, waittime, 1) == TIMEOUT_EXIT)
+ delete("Child process timed out.");
+
+>>ASSERTION Good B 1
+A call to xname releases all passive grabs made by the client.
+>>ASSERTION Good A
+A call to xname frees the default GC for the client.
+>>STRATEGY
+Open a connection using XOpenDisplay.
+Obtain the default gc id using XDefaultGC.
+Close the display using xname.
+Call XDrawPoint using the default gc id.
+Verify that a BadGC error occurred.
+>>CODE
+GC gc;
+
+ if((display = XOpenDisplay(config.display)) == (Display *) NULL) {
+ delete("XOpenDisplay() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ gc = XDefaultGC(display, DefaultScreen(display));
+
+ PROTECT(XCloseDisplay(display))
+
+ startcall(Dsp);
+ XDrawPoint(Dsp, DRW(Dsp), gc, 0,0);
+ endcall(Dsp);
+
+ if(geterr() != BadGC) {
+ report("%s() did not free the default GC.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good B 1
+When the closedown mode of the client is
+.S RetainPermanent ,
+then all resources allocated by the client are marked as permanent.
+>>ASSERTION Good B 1
+When the closedown mode of the client is
+.S RetainTemporary ,
+then all resources allocated by the client are marked as temporary.
+>>#
+>># Close-down mode of DestroyAll section.
+>>#
+>>ASSERTION Good A
+When the closedown mode of the client is
+.S DestroyAll ,
+then on a call to xname all windows in the client's save-set that are
+inferiors of a window created by the client are reparented,
+with no change in position relative to the root window,
+to the closest ancestor such that it is not an inferior of a client's window.
+>>STRATEGY
+Open a display using XOpenDisplay.
+Set the closedown mode of the display to DestroyAll using XSetCloseDownMode.
+Create save set with setupsaveset.
+Close the display using xname.
+Verify reparenting for the save-set occurs and positioning is correct.
+>>EXTERN
+/*
+ * This code is identical to that in addtsvst.m, and should stay that way.
+ */
+
+/*
+ * These windows are created by client1.
+ */
+char *T1[] = {
+ "base borders",
+ "client1-A base (10,40) 9x4",
+ "client1-C base (50,60) 60x60",
+ "client1-D base (5,50) 35x70",
+ "client1-B base (30,6) 60x30",
+};
+
+/*
+ * These windows are created by client2 using client1's windows as parent.
+ * This will lead to some windows being clipped by their (client1) parent,
+ * when the client2 windows are reparented then these should reappear.
+ */
+char *T2[] = {
+ ". borders",
+ "client2-a-noadd-nomap . (15, 5) 12x4 unmap",
+ "client2-b-noadd . (10, 10) 12x6",
+#define NOADD 2 /* Number not added */
+ "client2-c-unmap . (30, 28) 14x7 unmap",
+ "client2-d . (45, 15) 9x7",
+ "client2-e . (15, 23) 9x7",
+};
+
+/*
+ * The number of windows that should be reparented. NOADD of the client2
+ * windows is not added to the save set.
+ */
+#define NUM_REPARENT ((NELEM(T1)-1)*(NELEM(T2)-NOADD-1))
+
+/* Flags used in uflags */
+#define IN_SAVE_SET 0x01
+#define CLIENT1_INFERIOR 0x02
+#define ON_PARENT 0x04
+#define ON_WINDOW 0x10
+
+/*
+ * Create a bunch of windows. Some are created by client1. Others are
+ * created by client2. Of the latter some are inferiors of client1 and
+ * are marked CLIENT1_INFERIOR. Some of client2's windows are added to
+ * client1's save-set - these are marked IN_SAVE_SET.
+ * Client2 windows that are originally unmapped will be marked BT_UNMAP.
+ * Structure events are selected for on display Dsp for all appropriate
+ * windows.
+ * Before returning, client1 is destroyed.
+ */
+void
+setupsaveset(btret, client1, client2)
+struct buildtree *btret[NELEM(T1)];
+Display *client1;
+Display *client2;
+{
+Window base;
+Window w;
+XWindowAttributes batts;
+struct buildtree *bt1;
+struct buildtree *btp;
+int i, j;
+int pass = 0, fail = 0;
+
+ display = client1;
+ base = defwin(Dsp);
+ XSync(Dsp, False);
+
+ /*
+ * Build a tree for client1, build a tree for client2 on each of
+ * the client1 windows + the base window.
+ */
+ bt1 = buildtree(client1, base, T1, NELEM(T1));
+ for (i = 0; i < NELEM(T1); i++) {
+ btret[i] = buildtree(client2, bt1[i].wid, T2, NELEM(T2));
+ /*
+ * Transfer some of the information down from the client1 windows
+ * into the returned array. This means that all the positions
+ * in the returned array will be relative to base.
+ */
+ btret[i][0].x = bt1[i].x;
+ btret[i][0].y = bt1[i].y;
+ btret[i][0].borderwidth = bt1[i].borderwidth;
+ }
+
+ XSync(client2, False);
+
+ for (i = 0; i < NELEM(T1); i++) {
+ for (j = 0; j < NELEM(T2); j++) {
+
+ btp = &btret[i][j];
+ w = btp->wid;
+
+ /*
+ * For j==0 --> client1 window.
+ * The window at j==1 is not added to the save-set;
+ * the rest are.
+ */
+ if (j > NOADD) {
+ btp->uflags |= IN_SAVE_SET;
+ XAddToSaveSet(display, w);
+ } /* else not added to save set */
+
+ /*
+ * The windows with i=0 are inferiors of the base window
+ * and not one of client1's window.
+ */
+ if (i != 0)
+ btp->uflags |= CLIENT1_INFERIOR;
+
+ XSelectInput(Dsp, w, StructureNotifyMask);
+ }
+ }
+ XSelectInput(Dsp, base, SubstructureNotifyMask);
+
+/* Store base window coordinates to allow for absolute coordinate checking */
+ XGetWindowAttributes(Dsp, base, &batts);
+ btret[0][0].x = batts.x;
+ btret[0][0].y = batts.y;
+ btret[0][0].borderwidth = batts.border_width;
+
+ XSync(Dsp, False);
+
+ PROTECT(XCloseDisplay(display));
+
+ XSync(Dsp, False);
+ XSync(client2, False);
+
+}
+>>CODE
+Display *client1, *client2;
+struct buildtree *bt[NELEM(T1)];
+struct buildtree *btp;
+Window parent;
+Window dummy;
+Window *children;
+Window base;
+unsigned int nchild;
+int i, j;
+struct buildtree *cli1btp;
+int oldx, oldy;
+int newx, newy;
+XWindowAttributes atts, batts;
+
+
+ client1 = XOpenDisplay(config.display);
+ client2 = opendisplay();
+
+ if(client1 == (Display *) NULL || client2 == (Display *) NULL) {
+ delete("Could not open the display.");
+ if(client1)
+ XCloseDisplay(client1);
+ return;
+ } else
+ CHECK;
+
+ XSetCloseDownMode(client1, DestroyAll);
+ setupsaveset(bt, client1, client2);
+
+ /*
+ * Base will be stored in bt[0][0] all the windows should be reparented
+ * to there.
+ */
+ base = bt[0][0].wid;
+
+/* Get the current base window coordinates for absolute calculations */
+ XGetWindowAttributes(Dsp, base, &batts);
+ if (batts.x != bt[0][0].x || batts.y != bt[0][0].y) {
+ report("Window reparenting caused the base window to move");
+ report("Pre-reparenting (%d,%d)" , bt[0][0].x, bt[0][0].y);
+ report("Post-reparenting (%d,%d)" , batts.x, batts.y);
+ FAIL;
+ } else
+ CHECK;
+
+ for (i = 0; i < NELEM(T1); i++) {
+ for (j = 1; j < NELEM(T2); j++) {
+
+ btp = bt[i] + j;
+
+ /*
+ * Skip if it shouldn't have been reparented.
+ */
+ btp->uflags &= (IN_SAVE_SET|CLIENT1_INFERIOR);
+ if (btp->uflags != (IN_SAVE_SET|CLIENT1_INFERIOR))
+ continue;
+
+ /* Get new parent */
+ XQueryTree(Dsp, btp->wid, &dummy, &parent, &children, &nchild);
+ if (children && nchild > 0)
+ XFree((char*)children);
+
+ if (parent != base) {
+ report("Window not reparented to correct parent");
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+ for (i = 0; i < NELEM(T1); i++) {
+
+ /*
+ * Get the information relating to the original client1 window
+ * (that no longer exists).
+ */
+ cli1btp = bt[i];
+
+ for (j = 1; j < NELEM(T2); j++) {
+ btp = bt[i] + j;
+
+ /*
+ * Skip if it shouldn't have been reparented.
+ */
+ btp->uflags &= (IN_SAVE_SET|CLIENT1_INFERIOR);
+ if (btp->uflags != (IN_SAVE_SET|CLIENT1_INFERIOR))
+ continue;
+
+ debug(1, "window %s", btp->name);
+
+ oldx = bt[0][0].x + bt[0][0].borderwidth + cli1btp->x + cli1btp->borderwidth + btp->x;
+ oldy = bt[0][0].y + bt[0][0].borderwidth + cli1btp->y + cli1btp->borderwidth + btp->y;
+
+ (void) XGetWindowAttributes(Dsp, btp->wid, &atts);
+
+ newx = batts.x + batts.border_width + atts.x;
+ newy = batts.y + batts.border_width + atts.y;
+
+ /*
+ * Most R4 servers seem to have a bug here. When the window
+ * to which the windows are being reparented is not at the
+ * origin, then the windows get displaced by an amount equal
+ * to the position of the window.
+ */
+ if (oldx != newx || oldy != newy) {
+ report("Coords relative to root changed after reparenting");
+ report(" (%d, %d), expecting (%d, %d)"
+ , newx, newy, oldx, oldy);
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+
+ CHECKPASS(2 + NUM_REPARENT + NUM_REPARENT);
+
+>>ASSERTION Good A
+When the closedown mode of the client is
+.S DestroyAll ,
+then a call to xname performs a
+.S XMapWindow
+request on all unmapped windows in the client's save-set.
+>># The strategy and code is very similar to a test for addtsvst.m, and it
+>># should stay that way.
+>>STRATEGY
+Open a display using XOpenDisplay.
+Create save set with setupsaveset.
+Close the display using xname.
+Get all map events.
+Compare each event against expected values.
+Verify that map events were received for all save-set windows that
+were inferiors of client1 or were not originally mapped.
+Verify that map events were received for the parents of all save-set
+windows that were inferiors of client1 or were not originally mapped.
+>>CODE
+Display *client1, *client2;
+XEvent ev;
+XMapEvent good;
+XMapEvent *mp;
+Window base;
+struct buildtree *bt[NELEM(T1)];
+struct buildtree *btp;
+int loop;
+int i, j;
+
+
+ client1 = XOpenDisplay(config.display);
+ client2 = opendisplay();
+
+ if(client1 == (Display *) NULL || client1 == (Display *) NULL) {
+ delete("Could not open the display.");
+ if(client1)
+ XCloseDisplay(client1);
+ return;
+ } else
+ CHECK;
+
+ XSetCloseDownMode(client1, DestroyAll);
+ setupsaveset(bt, client1, client2);
+
+ base = bt[0][0].wid;
+
+ defsetevent(good, Dsp, MapNotify);
+ good.override_redirect = False;
+
+ loop = 0;
+ while (getevent(Dsp, &ev)) {
+ if (ev.type != MapNotify)
+ continue;
+ mp = (XMapEvent*)&ev;
+
+ /*
+ * Find the window that this event refers to.
+ */
+ for (i = 0, btp = NULL; btp == NULL && i < NELEM(T1); i++)
+ btp = btwtobtp(bt[i], mp->window);
+
+ if (btp == NULL) {
+ report("Map event received for unrecognised window");
+ FAIL;
+ XCloseDisplay(client1);
+ return;
+ }
+
+ if (mp->event == mp->window) {
+ /* On window itself */
+ if (btp->uflags & ON_WINDOW) {
+ report("Repeated map event on window");
+ FAIL;
+ } else if (loop == 0)
+ CHECK;
+ btp->uflags |= ON_WINDOW;
+ good.event = btp->wid;
+ } else {
+ if (btp->uflags & ON_PARENT) {
+ report("Repeated map event on parent of window");
+ FAIL;
+ } else if (loop == 0)
+ CHECK;
+ btp->uflags |= ON_PARENT;
+ good.event = base;
+ }
+
+ good.window = btp->wid;
+
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else if (loop == 0)
+ CHECK;
+
+ loop++;
+ }
+
+ for (i = 0; i < NELEM(T1); i++) {
+ for (j = 1; j < NELEM(T2); j++) {
+ btp = bt[i] + j;
+
+ debug(1, "window %s", btp->name);
+
+ /*
+ * A map should be received when:
+ * IN_SAVE_SET && CLIENT1_INFERIOR
+ * || IN_SAVE_SET && BT_UNMAP
+ */
+ if (( (btp->uflags & IN_SAVE_SET) &&
+ (btp->uflags & CLIENT1_INFERIOR) )
+ || ( (btp->uflags & IN_SAVE_SET) &&
+ (btp->opts & BT_UNMAP) ))
+ {
+
+ if (btp->uflags & ON_WINDOW) {
+ CHECK;
+ } else {
+ report("Map event was not received on window");
+ FAIL;
+ }
+ if (btp->uflags & ON_PARENT) {
+ CHECK;
+ } else {
+ report("Map event was not received on parent of window");
+ FAIL;
+ }
+ } else if (btp->uflags & (ON_WINDOW|ON_PARENT)) {
+
+ if ((btp->uflags & IN_SAVE_SET) == 0) {
+ report("Map event was received for window that was not in save-set");
+ FAIL;
+ }
+ if ((btp->opts & BT_UNMAP) == 0) {
+ report("Map event was received for window that was already mapped");
+ FAIL;
+ }
+ } else {
+ CHECK;
+ CHECK; /* For balance with above */
+ }
+
+ }
+ }
+
+ CHECKPASS(1 + 2 + (2*NELEM(T1)*(NELEM(T2)-1)));
+
+>>SET startup fontfocusstartup
+>>SET cleanup fontfocuscleanup
+>>ASSERTION Good A
+When the closedown mode of the client is
+.S DestroyAll ,
+then a call to xname destroys all
+.S Window ,
+.S Font ,
+.S Pixmap ,
+>># COMMENT : .S Bitmap ,
+>># COMMENT : Removed since Pixmap is a bitmap.
+>># - Cal.
+.S Colormap ,
+.S Cursor
+and
+.S GContext
+resources allocated by the client.
+>>STRATEGY
+Open a display using XOpenDisplay.
+Set the closedown mode of the display to DestroyAll using XSetCloseDownMode.
+Create a font using XLoadFont.
+Create a window using XCreateSimpleWindow.
+Create a pixmap using XCreatePixmap.
+Create a colormap using XCreateColormap.
+Create a cursor using XCreateFontCursor.
+Create a GC using XCreateGC.
+Close the display using xname.
+Free the GC using XFreeGC.
+Verify that a BadGC error occurred.
+Free the cursor using XFreeCursor.
+Verify that a BadCursor error occurred.
+Free the colormap using XFreeColormap.
+Verify that a BadColor error occurred.
+Draw on the pixmap with XDrawPoint.
+Verify that a BadDrawable error occurred.
+Draw on the window using XDrawPoint.
+Verify that a BadDrawable error occurred.
+Free the font using XUnloadFont.
+Verify that a BadFont error occurred.
+>>CODE
+Font font;
+Window win;
+Pixmap pm;
+Colormap cmap;
+Cursor curse;
+GC gc;
+char *fontname = "xtfont1";
+
+ /*
+ * Only really need to set up test font path if a later test purpose
+ * (which resets font path on close of last client with mode DestroyAll)
+ * has been executed before this test purpose.
+ */
+ setxtfontpath();
+
+ OPEN(display, DestroyAll)
+
+
+ DELETE_ONERR(font = XLoadFont(display, fontname),
+ "XLoadFont");
+
+ DELETE_ONERR(win = XCreateSimpleWindow(display, DRW(display), 0,0, 5,5, 1, 1, 1),
+ "XCreateSimpleWindow");
+
+ DELETE_ONERR(pm = XCreatePixmap(display, DRW(display), 5,6, DefaultDepth(display, DefaultScreen(display))),
+ "XCreatePixmap");
+
+ DELETE_ONERR(cmap = XCreateColormap(display, DRW(display), DefaultVisual(display, DefaultScreen(display)), AllocNone),
+ "XCreateColormap");
+
+ DELETE_ONERR(curse = XCreateFontCursor(display, config.fontcursor_good),
+ "XCreateFontCursor");
+
+ DELETE_ONERR(gc = XCreateGC(display, DRW(display), 0L, 0L),
+ "XCreateGC.");
+
+ PROTECT(XCloseDisplay(display))
+
+ FAIL_ONERR3(XFreeGC(Dsp, gc), BadGC,
+ "%s() did not destroy GC id %lx", gc);
+
+ FAIL_ONERR3(XFreeCursor(Dsp, curse), BadCursor,
+ "%s() did not destroy cursor id %lx", curse);
+
+ FAIL_ONERR3(XFreeColormap(Dsp, cmap), BadColor,
+ "%s() did not destroy colormap id %lx.", cmap);
+
+
+ FAIL_ONERR3(XDrawPoint(Dsp, pm, DefaultGC(Dsp, DefaultScreen(Dsp)), 0,0), BadDrawable,
+ "%s() did not destroy pixmap id %lx.", pm)
+
+
+ FAIL_ONERR3(XDrawPoint(Dsp, win, DefaultGC(Dsp, DefaultScreen(Dsp)), 0,0), BadDrawable,
+ "%s() did not destroy window id %lx.", win)
+
+ FAIL_ONERR3(XUnloadFont(Dsp, font), BadFont,
+ "%s() did not unload font id %ld.", font)
+
+ CHECKPASS(14);
+
+>>ASSERTION Good A
+When the last connection to the X server closes with a closedown mode of
+.S DestroyAll ,
+then the server destroys all lingering resources from clients that have
+terminated in
+.S RetainPermanent
+or
+.S RetainTemporary
+mode.
+>>STRATEGY
+Set the closedown mode of client Dsp to DestroyAll using XSetCloseDownMode.
+Open 2 clients with XOpenDisplay.
+Set the closedown mode of the first to RetainPermanent using XSetCloseDownMode.
+Set the closedown mode of the second to RetainTemporary using XSetCloseDownMode.
+Create a font for each client using XLoadFont.
+Create a window for each client using XCreateSimpleWindow.
+Create a pixmap for each client using XCreatePixmap.
+Create a colormap for each client using XCreateColormap.
+Create a cursor for each client using XCreateFontCursor.
+Create a gc for each client using XCreateGC.
+Close the 2 clients.
+Close client Dsp using xname.
+
+Open client Dsp using XOpenDisplay.
+Free the GCs using XFreeGC.
+Verify that a BadGC error occurred.
+Free the cursors using XFreeCursor.
+Verify that a BadCursor error occurred.
+Free the colormaps using XFreeColormap.
+Verify that a BadColor occurred.
+Draw on the pixmaps with XDrawPoint.
+Verify that a BadDrawable error occurred.
+Draw on the windows using XDrawPoint.
+Verify that a BadDrawable error occurred.
+Free the fonts using XUnloadFont.
+Verify that a BadFont error occurred.
+>>CODE
+Display *d[2];
+Font font[2];
+Window win[2];
+Pixmap pm[2];
+Colormap cm[2];
+Cursor curse[2];
+GC gc[2];
+int i;
+char *fontname = "xtfont1";
+
+ /*
+ * Only really need to set up test font path if a later test purpose
+ * (which resets font path on close of last client with mode DestroyAll)
+ * has been executed before this test purpose.
+ */
+ setxtfontpath();
+
+ XSetCloseDownMode(Dsp, DestroyAll);
+
+ OPEN(d[0], RetainPermanent); /* CHECK */
+ OPEN(d[1], RetainTemporary); /* CHECK */
+
+ for(i=0; i<2; i++) {
+ display = d[i];
+ DELETE_ONERR(font[i] = XLoadFont(display, fontname), "XLoadFont");
+ DELETE_ONERR(win[i] = XCreateSimpleWindow(display, DRW(display), 0,0, 5,5, 1, 1, 1), "XCreateSimpleWindow");
+ DELETE_ONERR(pm[i] = XCreatePixmap(display, DRW(display), 5,6, DefaultDepth(display, DefaultScreen(display))), "XCreatePixmap");
+ DELETE_ONERR(cm[i] = XCreateColormap(d[i], DRW(d[i]), DefaultVisual(d[i], DefaultScreen(d[i])), AllocNone), "XCreateColormap");
+ DELETE_ONERR(curse[i] = XCreateFontCursor(display, config.fontcursor_good), "XCreateFontCursor");
+ DELETE_ONERR(gc[i] = XCreateGC(display, DRW(display), 0L, 0L), "XCreateGC.");
+ }
+ /* 12 CHECKS */
+
+ PROTECT(XCloseDisplay(d[0])); /* CHECK */
+ PROTECT(XCloseDisplay(d[1])); /* CHECK */
+ PROTECT(XCloseDisplay(Dsp)); /* CHECK */
+
+ /*
+ * Pause whilst the X server is resetting.
+ */
+ reset_delay();
+
+ OPEN(Dsp, DestroyAll); /* CHECK */
+
+ for(i=0; i<2; i++) {
+
+ FAIL_ONERR4(XUnloadFont(Dsp, font[i]), BadFont,
+ "%s() did not unload font id %lx%s.", font[i], cmode[i])
+
+ FAIL_ONERR4(XDrawPoint(Dsp, pm[i], DefaultGC(Dsp, DefaultScreen(Dsp)), 0,0), BadDrawable,
+ "%s() did not destroy pixmap id %lx%s.", pm[i], cmode[i])
+
+ FAIL_ONERR4(XDrawPoint(Dsp, win[i], DefaultGC(Dsp, DefaultScreen(Dsp)), 0,0), BadDrawable,
+ "%s() did not destroy window id %lx%s.", win[i], cmode[i])
+
+ FAIL_ONERR4(XFreeColormap(Dsp, cm[i]), BadColor,
+ "%s() did not destroy colourmap %lx%s.", cm[i], cmode[i]);
+
+ FAIL_ONERR4(XFreeCursor(Dsp, curse[i]), BadCursor,
+ "%s() did not destroy cursor id %lx%s.", curse[i], cmode[i]);
+
+ FAIL_ONERR4(XFreeGC(Dsp, gc[i]), BadGC,
+ "%s() did not destroy GC id %lx%s", gc[i], cmode[i]);
+
+ }
+
+ /* 12 CHECKS */
+
+ CHECKPASS(2 + 12 + 4 + 12);
+
+>>EXTERN
+Atom predefd[] = { XA_PRIMARY,
+ XA_SECONDARY,
+ XA_ARC,
+ XA_ATOM,
+ XA_BITMAP,
+ XA_CARDINAL,
+ XA_COLORMAP,
+ XA_CURSOR,
+ XA_CUT_BUFFER0,
+ XA_CUT_BUFFER1,
+ XA_CUT_BUFFER2,
+ XA_CUT_BUFFER3,
+ XA_CUT_BUFFER4,
+ XA_CUT_BUFFER5,
+ XA_CUT_BUFFER6,
+ XA_CUT_BUFFER7,
+ XA_DRAWABLE,
+ XA_FONT,
+ XA_INTEGER,
+ XA_PIXMAP,
+ XA_POINT,
+ XA_RECTANGLE,
+ XA_RESOURCE_MANAGER,
+ XA_RGB_COLOR_MAP,
+ XA_RGB_BEST_MAP,
+ XA_RGB_BLUE_MAP,
+ XA_RGB_DEFAULT_MAP,
+ XA_RGB_GRAY_MAP,
+ XA_RGB_GREEN_MAP,
+ XA_RGB_RED_MAP,
+ XA_STRING,
+ XA_VISUALID,
+ XA_WINDOW,
+ XA_WM_COMMAND,
+ XA_WM_HINTS,
+ XA_WM_CLIENT_MACHINE,
+ XA_WM_ICON_NAME,
+ XA_WM_ICON_SIZE,
+ XA_WM_NAME,
+ XA_WM_NORMAL_HINTS,
+ XA_WM_SIZE_HINTS,
+ XA_WM_ZOOM_HINTS,
+ XA_MIN_SPACE,
+ XA_NORM_SPACE,
+ XA_MAX_SPACE,
+ XA_END_SPACE,
+ XA_SUPERSCRIPT_X,
+ XA_SUPERSCRIPT_Y,
+ XA_SUBSCRIPT_X,
+ XA_SUBSCRIPT_Y,
+ XA_UNDERLINE_POSITION,
+ XA_UNDERLINE_THICKNESS,
+ XA_STRIKEOUT_ASCENT,
+ XA_STRIKEOUT_DESCENT,
+ XA_ITALIC_ANGLE,
+ XA_X_HEIGHT,
+ XA_QUAD_WIDTH,
+ XA_WEIGHT,
+ XA_POINT_SIZE,
+ XA_RESOLUTION,
+ XA_COPYRIGHT,
+ XA_NOTICE,
+ XA_FONT_NAME,
+ XA_FAMILY_NAME,
+ XA_FULL_NAME,
+ XA_CAP_HEIGHT,
+ XA_WM_CLASS,
+ XA_WM_TRANSIENT_FOR,
+ XA_LAST_PREDEFINED
+};
+
+>>ASSERTION Good A
+When the last connection to the X server closes with a closedown mode of
+.S DestroyAll ,
+then the server deletes all but the predefined atom IDs.
+>>STRATEGY
+Set the closedown mode to DestroyAll using XSetCloseDownMode.
+Create and intern the atom XT_TEST_Atom using XInternAtom.
+Close all the server displays.
+Open the display.
+Verify that the atom XT_TEST_Atom no longer exists.
+Verify that each of the predefined atoms exists.
+>>CODE
+int i;
+
+ display = Dsp;
+ XSetCloseDownMode(display, DestroyAll);
+ (void) XInternAtom(display, atname, False);
+ PROTECT(XCloseDisplay(display));
+
+ /*
+ * Pause whilst the X server is resetting.
+ */
+ reset_delay();
+
+ OPEN(Dsp, DestroyAll);
+ display = Dsp;
+
+ if(XInternAtom(display, atname, True) != None) {
+ report("The atom XT_TEST_Atom was not destroyed.");
+ FAIL;
+ } else
+ CHECK;
+
+ for(i = 0; i< NELEM(predefd); i++) {
+ char *name;
+
+ startcall(display);
+ name = XGetAtomName(display, predefd[i]);
+ endcall(display);
+ if((name == (char *) NULL) || (geterr() != Success)) {
+ report("Predefined atom number %ld was destroyed.", (long) predefd[i]);
+ FAIL;
+ } else {
+ CHECK;
+ XFree((char*)name);
+ }
+ }
+
+ CHECKPASS(3 + NELEM(predefd));
+>>ASSERTION Good A
+When the last connection to the server closes with a closedown mode of
+.S DestroyAll ,
+then the server deletes all properties on all the root windows.
+>>STRATEGY
+For each screen:
+ Obtain the root window of the screen using RootWindow.
+ Set the XA_PRIMARY property on the window using XChangeProperty.
+Close all connections to the server using xname.
+Open a server connection using XOpenDisplay.
+For each screen:
+ Obtain the value of the XA_PRIMARY property using XGetWindowProperty.
+ Verify that returned type was None, the returned format was 0 and
+ that the bytes_after_return was 0.
+>>CODE
+int i;
+int scount;
+Atom at;
+unsigned char *data = (unsigned char *) "XT_property data.";
+unsigned char *rprop= (unsigned char *) ".................";
+int len = 1 + strlen((char*)data);
+Atom type;
+int format = -1;
+unsigned long nitems;
+unsigned long ba;
+
+ scount = ScreenCount(Dsp);
+ XSetCloseDownMode(Dsp, DestroyAll);
+ if((at = XInternAtom(Dsp, atname, False)) == None) {
+ delete("XInternAtom() returned None.");
+ return;
+ }
+
+ at = XA_PRIMARY;
+
+ for(i=0; i< scount; i++)
+ XChangeProperty(Dsp, RootWindow(Dsp, i), at, XA_STRING, 8, PropModeReplace, data, len);
+
+
+ PROTECT(XCloseDisplay(Dsp));
+
+ /*
+ * Pause whilst the X server is resetting.
+ */
+ reset_delay();
+
+ OPEN(Dsp, DestroyAll);
+
+ for(i=0; i<scount; i++) {
+ /* Set to non-zero values to show that they are being written to */
+ type = None+1;
+ format = 1;
+ ba = 1;
+ if( XGetWindowProperty(Dsp, RootWindow(Dsp, i), at , 0L, (long) len, False, AnyPropertyType, &type, &format, &nitems, &ba, &rprop) != Success ) {
+ delete("XGetWindowProperty() did not return Success for atom XA_PRIMARY.");
+ return;
+ } else
+ CHECK;
+
+ if((type != None) || (format != 0) || (ba != 0) ) {
+ report("%s() did not destroy all properties on root window of screen %d.", TestName, i);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS( 2 * scount + 2);
+
+
+>>ASSERTION Good B 1
+When the last connection to the server closes with a closedown mode of
+.S DestroyAll ,
+then the server resets all device maps, attributes and the access control list.
+>>ASSERTION Good B 1
+When the last connection to the server closes with a closedown mode of
+.S DestroyAll ,
+then the server restores the standard root tiles and cursors.
+>>ASSERTION Good A
+When the last connection to the server closes with a closedown mode of
+.S DestroyAll ,
+then the server restores the default font path.
+>>STRATEGY
+Set the closedown mode of a connection to DestroyAll.
+Set the font path to XT_FONTPATH using XSetFontPath
+Close all connections to the server using xname.
+Open a connection using XOpenDisplay.
+Set the closedown mode of the connection to DestroyAll.
+Set the font path to XT_FONTPATH_GOOD using XSetFontPath
+Close all connections to the server using xname.
+Verify that the font path is restored in each case to the same font path.
+Set the font path to the restored font path using XSetFontPath.
+Verify that no error occurs.
+Verify that the cursor font can be accessed.
+>>EXTERN
+int
+setfontpath(disp, fpathlist, var)
+Display *disp;
+char *fpathlist;
+char *var;
+{
+char *fpathtmp;
+char *ndir_array[MAX_DIRS];
+char *strtok();
+int ndirs;
+int i;
+
+ /*
+ * Set font path to specified list.
+ */
+ if (fpathlist == NULL || *fpathlist == '\0') {
+ delete("%s not set in config file", var);
+ return(0);
+ }
+ fpathtmp = (char *)calloc(strlen(fpathlist)+1, sizeof(char));
+ strcpy(fpathtmp, fpathlist);
+
+ for (i = 0; i < MAX_DIRS; i++) {
+ ndir_array[i] = strtok((i==0)? fpathtmp: (char*)0, SEP);
+ if (ndir_array[i] == NULL)
+ break;
+ debug(1, "ndir_array entry %d - '%s'", i, ndir_array[i]);
+ }
+ ndirs = i;
+
+ if (ndirs <= 0) {
+ delete("No components in supplied parameter %s", var);
+ return(0);
+ }
+ XSetFontPath(disp, ndir_array, ndirs);
+
+ /*
+ * Sync and clear out queue.
+ */
+ XSync(disp, True);
+ return(1);
+}
+>>CODE
+char **path1;
+char **path2;
+int nret1;
+int nret2;
+int i;
+Cursor qstat;
+unsigned int shape;
+
+ shape = config.fontcursor_good;
+ if (shape == -1) {
+ delete("A value of UNSUPPORTED is not allowed for XT_FONTCURSOR_GOOD");
+ return;
+ }
+ if (config.fontpath == NULL || *config.fontpath == '\0') {
+ delete("XT_FONTPATH not set");
+ return;
+ }
+ if (config.fontpath_good == NULL || *config.fontpath_good == '\0') {
+ delete("XT_FONTPATH_GOOD not set");
+ return;
+ }
+ if(!strcmp(config.fontpath, config.fontpath_good)) {
+ delete("XT_FONTPATH and XT_FONTPATH_GOOD must not be identical");
+ return;
+ }
+ XSetCloseDownMode(Dsp, DestroyAll);
+ if(!setfontpath(Dsp, config.fontpath, "XT_FONTPATH"))
+ return;
+ PROTECT(XCloseDisplay(Dsp));
+
+ /*
+ * Pause whilst the X server is resetting.
+ */
+ reset_delay();
+
+ OPEN(Dsp, DestroyAll);
+
+ /* Save font path, hypothesise that this is the default */
+ path1 = XGetFontPath(Dsp, &nret1);
+
+ XSetCloseDownMode(Dsp, DestroyAll);
+ if(!setfontpath(Dsp, config.fontpath_good, "XT_FONTPATH_GOOD"))
+ return;
+ PROTECT(XCloseDisplay(Dsp));
+
+ /*
+ * Pause whilst the X server is resetting.
+ */
+ reset_delay();
+
+ OPEN(Dsp, DestroyAll);
+
+ /* Check saved fontpaths are the same */
+ path2 = XGetFontPath(Dsp, &nret2);
+
+ if (nret1 == nret2)
+ CHECK;
+ else {
+ report("Number of directories was not set to default");
+ report(" was %d, expecting %d", nret2, nret1);
+ FAIL;
+ }
+
+ if(nret1 < nret2)
+ nret2 = nret1;
+ for (i = 0; i < nret2; i++) {
+ debug(1, "Using XT_FONTPATH, got list item '%s'", path1[i]);
+ debug(1, "Using XT_FONTPATH_GOOD, got list item '%s'", path2[i]);
+ if (strcmp(path1[i], path2[i]) == 0)
+ CHECK;
+ else {
+ report("Font path component was not set to default");
+ report(" was '%s', expecting '%s'", path2[i], path1[i]);
+ FAIL;
+ }
+ }
+
+ startcall(Dsp);
+ XSetFontPath(Dsp, path1, nret1);
+ endcall(Dsp);
+ if (geterr() != Success) {
+ report("When XSetFontPath() is used with restored font path,");
+ report("got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ startcall(Dsp);
+ qstat = XCreateFontCursor(Dsp, shape);
+ endcall(Dsp);
+
+ /* Verify that XCreateFontCursor returns non-zero. */
+ if (qstat == 0) {
+ report("When XCreateFontCursor() is used with restored font path,");
+ report("returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+ if (geterr() != Success) {
+ report("When XCreateFontCursor() is used with restored font path,");
+ report("got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ XFreeFontPath(path1);
+ XFreeFontPath(path2);
+ CHECKPASS(8+nret1);
+
+>>ASSERTION Good A
+When the last connection to the server closes with a closedown mode of
+.S DestroyAll ,
+then the server restores the input focus to
+.S PointerRoot .
+>>STRATEGY
+Set the closedown mode of a connection to DestroyAll.
+Set the input focus of a connection to None with XSetInputFocus.
+Close all connections to the server using xname.
+Open a connection using XOpenDisplay.
+Obtain the current input focus using XGetInputFocus.
+Verify that the input focus is PointerRoot.
+>>CODE
+Window fr;
+int rr;
+
+ XSetCloseDownMode(Dsp, DestroyAll);
+ XSetInputFocus(Dsp, None, RevertToNone, CurrentTime);
+ PROTECT(XCloseDisplay(Dsp));
+
+ /*
+ * Pause whilst the X server is resetting.
+ */
+ reset_delay();
+
+ OPEN(Dsp, DestroyAll);
+ XGetInputFocus(Dsp, &fr, &rr);
+
+ if(fr != PointerRoot) {
+ report("%s() set the input focus to %lx instead of PointerRoot (%lx).", TestName, (long) fr, (long) PointerRoot);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>#
+>># Retain
+>>#
+>>ASSERTION Good A
+When the last connection to the server closes with a closedown mode of
+.S RetainPermanent
+or
+.S RetainTemporary ,
+then a call to xname does not affect any
+window in the client's save-set.
+>>STRATEGY
+Open a display using XOpenDisplay.
+Set the closedown mode of the display to RetainPermanent using XSetCloseDownMode.
+Create save set with setupsaveset.
+Close the display using xname.
+Verify parents and positions of the save-set members stay the same.
+Open a display using XOpenDisplay.
+Set the closedown mode of the display to RetainTemporary using XSetCloseDownMode.
+Create save set with setupsaveset.
+Close the display using xname.
+Verify parents and positions of the save-set members stay the same.
+>>CODE
+Display *client1, *client2;
+struct buildtree *bt[NELEM(T1)];
+struct buildtree *btp;
+Window parent;
+Window dummy;
+Window *children;
+Window base;
+char *modestr[2];
+unsigned int nchild;
+int i, j, k;
+struct buildtree *cli1btp;
+int oldx, oldy;
+int newx, newy;
+XWindowAttributes atts;
+
+
+ modestr[0] = "RetainPermanent";
+ modestr[1] = "RetainTemporary";
+
+ for(k=0; k<2; k++) {
+
+ client1 = XOpenDisplay(config.display);
+ client2 = opendisplay();
+
+ if(client1 == (Display *) NULL || client1 == (Display *) NULL) {
+ delete("Could not open the display.");
+ if(client1)
+ XCloseDisplay(client1);
+ return;
+ } else
+ CHECK;
+
+ XSetCloseDownMode(client1, closemodes[k]);
+ setupsaveset(bt, client1, client2);
+
+ /*
+ * Base will be stored in bt[0][0] all the windows should be reparented
+ * to there.
+ */
+ base = bt[0][0].wid;
+
+ for (i = 0; i < NELEM(T1); i++) {
+ for (j = 1; j < NELEM(T2); j++) {
+
+ btp = bt[i] + j;
+
+ /*
+ * Skip if it shouldn't have been reparented.
+ */
+ btp->uflags &= (IN_SAVE_SET|CLIENT1_INFERIOR);
+ if (btp->uflags != (IN_SAVE_SET|CLIENT1_INFERIOR))
+ continue;
+
+ /* Get new parent */
+ XQueryTree(Dsp, btp->wid, &dummy, &parent, &children, &nchild);
+ if (children && nchild > 0)
+ XFree((char*)children);
+
+ if (parent != btp->parent->wid) {
+ report("Closedown mode %s:", modestr[k]);
+ report("Window did not retain its original parent.");
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+
+ for (i = 0; i < NELEM(T1); i++) {
+
+ /*
+ * Get the information relating to the original client1 window
+ */
+ cli1btp = bt[i];
+
+ for (j = 1; j < NELEM(T2); j++) {
+ btp = bt[i] + j;
+
+ /*
+ * Skip if it shouldn't have been reparented.
+ */
+ btp->uflags &= (IN_SAVE_SET|CLIENT1_INFERIOR);
+ if (btp->uflags != (IN_SAVE_SET|CLIENT1_INFERIOR))
+ continue;
+
+ debug(1, "window %s", btp->name);
+
+ oldx = btp->x;
+ oldy = btp->y;
+
+ (void) XGetWindowAttributes(Dsp, btp->wid, &atts);
+
+ newx = atts.x;
+ newy = atts.y;
+
+ if (oldx != newx || oldy != newy) {
+ report("Closedown mode %s:", modestr[k]);
+ report("Coords relative to parent changed");
+ report(" (relative to parent win got (%d, %d), expecting (%d, %d)"
+ , newx, newy, oldx, oldy);
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+ }
+
+ CHECKPASS(2 * (1 + NUM_REPARENT + NUM_REPARENT));
+
+>>ASSERTION Good A
+When the last connection to the server closes with a closedown mode of
+.S RetainPermanent
+or
+.S RetainTemporary ,
+then a call to xname does not delete any
+.S Window ,
+.S Font ,
+.S Pixmap ,
+>># .S Bitmap ,
+>># Pixmap === Bitmap, anyhow!
+.S Colormap ,
+.S Cursor
+and
+.S GContext
+resources allocated by the client.
+>>STRATEGY
+Set the closedown mode of the display to RetainPermanent using XSetCloseDownMode.
+Create a font using XLoadFont.
+Create a window using XCreateSimpleWindow.
+Create a pixmap using XCreatePixmap.
+Create a colormap using XCreateColormap.
+Create a cursor using XCreateFontCursor.
+Create a GC using XCreateGC.
+
+Close the display using xname.
+Open the display using XOpenDisplay.
+Free the GC using XFreeGC.
+Verify that no errors occurred.
+Free the cursor using XFreeCursor.
+Verify that no errors occurred.
+Free the colormap using XFreeColormap.
+Verify that no errors occurred.
+Draw on the pixmap with XDrawPoint.
+Verify that no errors occurred.
+Draw on the window using XDrawPoint.
+Verify that no errors occurred.
+Free the font using XUnloadFont.
+Verify that no errors occurred.
+
+Set the closedown mode of the display to RetainTemporary using XSetCloseDownMode.
+Create a font using XLoadFont.
+Create a window using XCreateSimpleWindow.
+Create a pixmap using XCreatePixmap.
+Create a colormap using XCreateColormap.
+Create a cursor using XCreateFontCursor.
+Create a GC using XCreateGC.
+
+Close the display using xname.
+Open the display using XOpenDisplay.
+Free the GC using XFreeGC.
+Verify that no errors occurred.
+Free the cursor using XFreeCursor.
+Verify that no errors occurred.
+Free the colormap using XFreeColormap.
+Verify that no errors occurred.
+Draw on the pixmap with XDrawPoint.
+Verify that no errors occurred.
+Draw on the window using XDrawPoint.
+Verify that no errors occurred.
+Free the font using XUnloadFont.
+Verify that no errors occurred.
+>>CODE
+int k;
+Font font;
+Window win;
+Pixmap pm;
+Colormap cmap;
+Cursor curse;
+GC gc;
+char *fontname = "xtfont1";
+
+ /*
+ * Need to set up test font path - when test purposes are all
+ * executed in default order, an earlier test purpose will have
+ * reset font path on close of last client with mode DestroyAll.
+ */
+ setxtfontpath();
+
+ for(k=0; k<2; k++) {
+
+ XSetCloseDownMode(display, closemodes[k]);
+
+ DELETE_ONERR(font = XLoadFont(display, fontname),
+ "XLoadFont");
+
+ DELETE_ONERR(win = XCreateSimpleWindow(display, DRW(display), 0,0, 5,5, 1, 1, 1),
+ "XCreateSimpleWindow");
+
+ DELETE_ONERR(pm = XCreatePixmap(display, DRW(display), 5,6, DefaultDepth(display, DefaultScreen(display))),
+ "XCreatePixmap");
+
+ DELETE_ONERR(cmap = XCreateColormap(display, DRW(display), DefaultVisual(display, DefaultScreen(display)), AllocNone),
+ "XCreateColormap");
+
+ DELETE_ONERR(curse = XCreateFontCursor(display, config.fontcursor_good),
+ "XCreateFontCursor");
+
+ DELETE_ONERR(gc = XCreateGC(display, DRW(display), 0L, 0L),
+ "XCreateGC");
+
+ PROTECT(XCloseDisplay(display))
+
+ /*
+ * Pause whilst the X server is resetting.
+ */
+ reset_delay();
+
+ OPEN(display, DestroyAll);
+ /*
+ * The next line is important - Dsp is used in the macros
+ * for example. Although we could use `display' below,
+ * rather than Dsp, I think its clearer to use Dsp.
+ */
+ Dsp = display;
+
+ FAIL_ONERR2(XFreeGC(Dsp, gc),
+ "%s() destroyed GC id %lx%s.", gc, cmode[k]);
+
+ FAIL_ONERR2(XFreeCursor(Dsp, curse),
+ "%s() destroyed cursor id %lx%s.", curse, cmode[k]);
+
+ FAIL_ONERR2(XFreeColormap(Dsp, cmap),
+ "%s() destroyed colormap id %lx%s.", cmap, cmode[k]);
+
+
+ FAIL_ONERR2(XDrawPoint(Dsp, pm, DefaultGC(Dsp, DefaultScreen(Dsp)), 0,0),
+ "%s() destroyed pixmap id %lx%s.", pm, cmode[k])
+
+ FAIL_ONERR2(XDrawPoint(Dsp, win, DefaultGC(Dsp, DefaultScreen(Dsp)), 0,0),
+ "%s() destroyed window id %lx%s.", win, cmode[k])
+
+ FAIL_ONERR2(XUnloadFont(Dsp, font),
+ "%s() unloaded font id %ld%s.", font, cmode[k])
+ }
+
+ CHECKPASS(2 * 14);
+
+>>ASSERTION Good A
+When the last connection to the server closes with a closedown mode of
+.S RetainPermanent
+or
+.S RetainTemporary ,
+then a call to xname does not delete any of the atom IDs.
+>>STRATEGY
+Set the closedown mode to RetainPermanent using XSetCloseDownMode.
+Create and intern the atom XT_TEST_Atom using XInternAtom.
+Close all connections to the server using xname.
+Open a server connection using XOpenDisplay.
+Verify that the atom XT_TEST_Atom is still interned.
+Verify that all the predefined atoms still exist.
+
+Set the closedown mode to RetainTemporary using XSetCloseDownMode.
+Create and intern the atom XT_TEST_Atom using XInternAtom.
+Close all connections to the server using xname.
+Open a server connection using XOpenDisplay.
+Verify that the atom XT_TEST_Atom is still interned.
+Verify that all the predefined atoms still exist.
+>>CODE
+int i;
+int k;
+char *name;
+
+ for(k=0; k<2; k++) {
+
+ XSetCloseDownMode(Dsp, closemodes[k]);
+ (void) XInternAtom(Dsp, atname, False);
+ PROTECT(XCloseDisplay(Dsp));
+
+ /*
+ * Pause whilst the X server is resetting.
+ */
+ reset_delay();
+
+ OPEN(Dsp, closemodes[k]);
+
+ if(XInternAtom(Dsp, atname, True) == None) {
+ report("The atom XT_TEST_Atom was destroyed.");
+ FAIL;
+ } else
+ CHECK;
+
+ for(i = 0; i< NELEM(predefd); i++) {
+
+ startcall(Dsp);
+ name = XGetAtomName(Dsp, predefd[i]);
+ endcall(Dsp);
+ if((name == (char *) NULL) || (geterr() == BadAtom)) {
+ report("%s() %s destroyed predefined atom number %ld.",TestName, cmode[k], (long) predefd[i]);
+ FAIL;
+ } else {
+ CHECK;
+ XFree((char*)name);
+ }
+ }
+
+ }
+
+ CHECKPASS(2 * (3 + NELEM(predefd)));
+
+>>ASSERTION Good B 1
+When the last connection to the server closes with a closedown mode of
+.S RetainPermanent
+or
+.S RetainTemporary ,
+then a call to xname does not delete any property on any root window.
+>>ASSERTION Good B 1
+When the last connection to the server closes with a closedown mode of
+.S RetainPermanent
+or
+.S RetainTemporary ,
+then a call to xname does not affect any device map, any attributes or the access control list.
+>>ASSERTION Good B 1
+When the last connection to the server closes with a closedown mode of
+.S RetainPermanent
+or
+.S RetainTemporary ,
+then a call to xname does not affect the standard root tiles and cursors.
+>>ASSERTION Good B 1
+When the last connection to the server closes with a closedown mode of
+.S RetainPermanent
+or
+.S RetainTemporary ,
+then a call to xname does not affect the default font path.
+>>ASSERTION Good A
+When the last connection to the server closes with a closedown mode of
+.S RetainPermanent
+or
+.S RetainTemporary ,
+then a call to xname does not affect the input focus.
+>>STRATEGY
+Set the closedown mode to RetainPermanent using XSetCloseDownMode.
+Set the input focus to None with XSetInputFocus.
+Close all connections to the server using xname.
+Open a connection using XOpenDisplay.
+Obtain the current input focus using XGetInputFocus.
+Verify that the input focus is None.
+
+Set the closedown mode to RetainTemporary using XSetCloseDownMode.
+Set the input focus to None with XSetInputFocus.
+Close all connections to the server using xname.
+Open a connection using XOpenDisplay.
+Obtain the current input focus using XGetInputFocus.
+Verify that the input focus is None.
+>>CODE
+Window fr;
+int rr;
+int k;
+
+ for(k=0; k<2; k++) {
+
+ XSetCloseDownMode(Dsp, closemodes[k]);
+ XSetInputFocus(Dsp, None, RevertToNone, CurrentTime);
+ PROTECT(XCloseDisplay(Dsp));
+
+ /*
+ * Pause whilst the X server is resetting.
+ */
+ reset_delay();
+
+ OPEN(Dsp, DestroyAll);
+ XGetInputFocus(Dsp, &fr, &rr);
+
+ if(fr != None) {
+ report("%s() set the input focus to %lx instead of None (%lx)%s.",
+ TestName, (long) fr, (long) None, cmode[k]);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2 * 3);
+
diff --git a/xc/test/xsuite/xtest/tset/CH02/cnnctnnmbr/cnnctnnmbr.m b/xc/test/xsuite/xtest/tset/CH02/cnnctnnmbr/cnnctnnmbr.m
new file mode 100644
index 000000000..de409d5cd
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/cnnctnnmbr/cnnctnnmbr.m
@@ -0,0 +1,121 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XConnectionNumber CH02
+int
+XConnectionNumber(display)
+Display *display = Dsp;
+>>EXTERN
+static Display *client;
+static int exit_status = -1;
+static int path_checker = -1;
+
+static int
+errorhandler(display)
+Display *display;
+{
+ /* Handler exits with exit status of exit_status. */
+ if(path_checker == 2)
+ exit(exit_status);
+ else
+ exit(exit_status - 1);
+}
+
+/*
+ * Child exits with exit_status on success.
+ * Child exits with exit_status+1 to indicate TET_DELETE.
+ * Child exits with exit_status-1 to indicate close failure.
+ */
+static void
+closer()
+{
+Window w;
+int cnn;
+
+ path_checker = 0;
+ XSetIOErrorHandler( errorhandler );
+ client = opendisplay();
+
+ if (client == (Display *) NULL) {
+ report("Cannot open display.");
+ exit(exit_status + 1);
+ } else
+ path_checker++;
+
+ cnn = XConnectionNumber(client);
+
+ if (close(cnn)) {
+ report("Close failed on ConnectionNumber %d.", cnn);
+ exit(exit_status + 1);
+ } else
+ path_checker++;
+
+ XNoOp(client);
+ XFlush(client);
+ report("Handler not invoked or did not exit");
+ exit(exit_status - 1);
+}
+
+>>ASSERTION Good D 1
+If the system is POSIX compliant:
+A call to xname returns the file descriptor of the display
+specified by the
+.A display
+argument.
+Otherwise:
+A call to xname returns the connection number of the display
+specified by the
+.A display
+argument.
+>>STRATEGY
+If the system is POSIX compliant:
+ Open a display using XOpenDisplay.
+ Create a child process.
+ In Child :
+ Set IOErrorHandler to an errorhandler function which exits immediately.
+ Obtain the connection number of the display using xname.
+ Close the connection using close.
+ Perform a XNoOp request on the display.
+ Flush the O/P using using XFlush.
+ In parent:
+ Obtain child's exit status.
+ Verify that the child exited from the error handler.
+Otherwise:
+ UNTESTED
+>>CODE
+char *posix;
+int child_exit;
+
+ if(config.posix_system == 1) {
+ exit_status = 1;
+ child_exit = tet_fork(closer, TET_NULLFP, 0, ~0);
+
+ if (child_exit == exit_status+1) {
+ delete("Child process experienced unexpected problem.");
+ return;
+ } else {
+ CHECK;
+
+ if (child_exit != exit_status) {
+ report("The IOError handler was not invoked (got %d exit status, expected %d).", child_exit, exit_status);
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(2);
+ } else
+ untested("The assertion can only be tested on a POSIX compliant system.");
diff --git a/xc/test/xsuite/xtest/tset/CH02/dfltclrmp/dfltclrmp.m b/xc/test/xsuite/xtest/tset/CH02/dfltclrmp/dfltclrmp.m
new file mode 100644
index 000000000..fe59d72ca
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dfltclrmp/dfltclrmp.m
@@ -0,0 +1,49 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDefaultColormap CH02
+int
+XDefaultColormap(display, screen_number)
+Display *display = Dsp;
+int screen_number;
+>>ASSERTION Good A
+A call to xname returns the ID of the default colourmap for
+the screen
+.A screen_number .
+>>STRATEGY
+Obtain the colourmap associated with the root window of the default screen using XGetWindowAttributes.
+Verify that the returned colourmap is the default colourmap using xname.
+>>CODE
+Colormap rtcmap;
+XWindowAttributes atts;
+
+ screen_number = DefaultScreen(display);
+ rtcmap = XCALL;
+
+ if(XGetWindowAttributes(display, RootWindow(display, screen_number), &atts) == 0) {
+ delete("XGetWindowAttributes() returned zero.");
+ return;
+ } else
+ CHECK;
+
+ if(rtcmap != atts.colormap) {
+ report("%s returned ID %lx instead of %lx for the default colourmap", TestName, (long) rtcmap, (long) atts.colormap);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dfltclrmpo/dfltclrmpo.m b/xc/test/xsuite/xtest/tset/CH02/dfltclrmpo/dfltclrmpo.m
new file mode 100644
index 000000000..b52097c99
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dfltclrmpo/dfltclrmpo.m
@@ -0,0 +1,46 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDefaultColormapOfScreen CH02
+Colormap
+XDefaultColormapOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the colourmap ID of the default colourmap of the screen
+.A screen .
+>>STRATEGY
+Obtain the colourmap associated with the root window of the default screen using XGetWindowAttributes.
+Verify that the returned colourmap is the default colourmap using xname.
+>>CODE
+Colormap rtcmap;
+XWindowAttributes atts;
+
+ rtcmap = XCALL;
+
+ if(XGetWindowAttributes(Dsp, DefaultRootWindow(Dsp), &atts) == 0) {
+ delete("XGetWindowAttributes() returned zero.");
+ return;
+ } else
+ CHECK;
+
+ if(rtcmap != atts.colormap) {
+ report("%s returned ID %lx instead of %lx for the default colourmap", TestName, (long) rtcmap, (long) atts.colormap);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dfltdpth/dfltdpth.m b/xc/test/xsuite/xtest/tset/CH02/dfltdpth/dfltdpth.m
new file mode 100644
index 000000000..a9978ab2c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dfltdpth/dfltdpth.m
@@ -0,0 +1,50 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDefaultDepth CH02
+int
+XDefaultDepth(display, screen_number)
+Display *display = Dsp;
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good A
+A call to xname returns the depth of the
+>># comments subsequent to the review period removed the following words ...
+>>#default
+root window of the screen
+.A screen_number .
+>>STRATEGY
+Obtain the default depth using xname.
+Obtain the depth of the default root window using XGetWindowAttributes.
+Verify that the depths are equal.
+>>CODE
+int ddepth;
+XWindowAttributes atts;
+
+ ddepth = XCALL;
+ if(XGetWindowAttributes(display, RootWindow(display, screen_number), &atts) == 0) {
+ delete("XGetWindowAttributes returned zero.");
+ return;
+ } else
+ CHECK;
+
+ if(ddepth != atts.depth) {
+ report("Default depth was %ld instead of %ld", ddepth, atts.depth);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dfltdpthof/dfltdpthof.m b/xc/test/xsuite/xtest/tset/CH02/dfltdpthof/dfltdpthof.m
new file mode 100644
index 000000000..09e660b16
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dfltdpthof/dfltdpthof.m
@@ -0,0 +1,46 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDefaultDepthOfScreen CH02
+int
+XDefaultDepthOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the depth of the root window of the screen
+.A screen .
+>>STRATEGY
+Obtain the default depth using xname.
+Obtain the depth of the default root window using XGetWindowAttributes.
+Verify that the depths are equal.
+>>CODE
+int ddepth;
+XWindowAttributes atts;
+
+ ddepth = XCALL;
+ if(XGetWindowAttributes(Dsp, DefaultRootWindow(Dsp), &atts) == 0) {
+ delete("XGetWindowAttributes returned zero.");
+ return;
+ } else
+ CHECK;
+
+ if(ddepth != atts.depth) {
+ report("Default depth was %ld instead of %ld", ddepth, atts.depth);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dfltgc/dfltgc.m b/xc/test/xsuite/xtest/tset/CH02/dfltgc/dfltgc.m
new file mode 100644
index 000000000..604731328
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dfltgc/dfltgc.m
@@ -0,0 +1,35 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDefaultGC CH02
+GC
+XDefaultGC(display, screen_number)
+Display *display = Dsp;
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good B 1
+A call to xname returns the default graphics context ID for the root window
+of the screen
+.A screen_number .
+>>STRATEGY
+Obtain the ID of the default GC using xname.
+>>CODE
+GC dgc;
+
+ dgc = XCALL;
+ report("Default GC has ID %lx", (long) dgc);
+ CHECK;
+ CHECKUNTESTED(1);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dfltgcofsc/dfltgcofsc.m b/xc/test/xsuite/xtest/tset/CH02/dfltgcofsc/dfltgcofsc.m
new file mode 100644
index 000000000..93e59bde7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dfltgcofsc/dfltgcofsc.m
@@ -0,0 +1,65 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDefaultGCOfScreen CH02
+GC
+XDefaultGCOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good B 1
+A call to xname returns the ID of the default GC of the screen
+.A screen .
+>>STRATEGY
+Obtain the ID of the default GC of the default screen.
+>>CODE
+GC dgc;
+
+ dgc = XCALL;
+ report("Default GC has ID %lx", (long) dgc);
+ CHECK;
+ CHECKUNTESTED(1);
+
+>>ASSERTION Good A
+The default GC has the same depth as the root window of the screen
+.A screen .
+>>STRATEGY
+Draw the point (0,0) using the default GC on the default root window.
+Verify that a BadMatch error did not occur.
+>>CODE
+XWindowAttributes atts;
+GC dgc;
+
+ dgc = XCALL;
+
+ startcall(Dsp);
+ XDrawPoint(Dsp, RootWindowOfScreen(screen), dgc, 0, 0);
+ endcall(Dsp);
+
+
+ if(geterr() == BadMatch) {
+ report("%s() returned a GC which was not of the correct depth.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if(geterr() != Success) {
+ delete("XDrawPoint() failed with a %s error.", errorname(geterr()));
+ return;
+ } else
+ CHECK;
+
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dfltrtwdw/dfltrtwdw.m b/xc/test/xsuite/xtest/tset/CH02/dfltrtwdw/dfltrtwdw.m
new file mode 100644
index 000000000..61531ad12
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dfltrtwdw/dfltrtwdw.m
@@ -0,0 +1,48 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDefaultRootWindow CH02
+Window
+XDefaultRootWindow(display)
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname returns the root window of the default screen.
+>>STRATEGY
+Obtain the root window ID of the default screen using xname.
+Obtain the root window ID of the default screen using XGetWindowAttributes.
+Verify that the two IDs are the same.
+>>CODE
+Window dwin;
+XWindowAttributes atts;
+int screen_number;
+
+ screen_number = DefaultScreen(display);
+
+ dwin = XCALL;
+ if(XGetWindowAttributes(display, RootWindow(display, screen_number), &atts) == 0) {
+ delete("XGetWindowAttributes() returned 0.");
+ return;
+ } else
+ CHECK;
+
+ if(dwin != atts.root) {
+ report("The default root window ID was %lx instead of %lx.", (long) dwin, (long) atts.root);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dfltscrn/dfltscrn.m b/xc/test/xsuite/xtest/tset/CH02/dfltscrn/dfltscrn.m
new file mode 100644
index 000000000..39c03a2ce
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dfltscrn/dfltscrn.m
@@ -0,0 +1,48 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDefaultScreen CH02
+int
+XDefaultScreen(display)
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname returns the screen number which was passed to the
+.S XOpenDisplay
+call that returned the
+.A display
+argmuent.
+>>STRATEGY
+Obtain the default screen number using xname.
+Obtain the default screen using XScreenOfDisplay.
+Obtain the root window ID of the default screen using XRootWindowOfScreen.
+Obtain the root window ID of the default display using XDefaultRootWindow.
+Verify that the root window IDs are the same.
+>>CODE
+Window drw, srw;
+Screen *scr;
+int scrn;
+
+ scrn = XCALL;
+ scr = XScreenOfDisplay(Dsp, scrn);
+ srw = XRootWindowOfScreen(scr);
+ drw = XDefaultRootWindow(Dsp);
+
+ if(drw != srw) {
+ report("%s() returns a screen number whose root window is not the same as that of the associated display.",TestName);
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH02/dfltscrnof/dfltscrnof.m b/xc/test/xsuite/xtest/tset/CH02/dfltscrnof/dfltscrnof.m
new file mode 100644
index 000000000..7ac47a49c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dfltscrnof/dfltscrnof.m
@@ -0,0 +1,41 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDefaultScreenOfDisplay CH02
+Screen *
+XDefaultScreenOfDisplay(display);
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname returns a pointer to the default screen structure.
+>>STRATEGY
+Obtain the default screen using xname.
+Obtain the root window ID of the default screen using XRootWindowOfScreen.
+Obtain the root window ID of the default display using XDefaultRootWindow.
+Verify that the two IDs are the same.
+>>CODE
+Window drw, srw;
+Screen *scr;
+
+ scr = XCALL;
+ srw = XRootWindowOfScreen(scr);
+ drw = XDefaultRootWindow(display);
+
+ if(drw != srw) {
+ report("%s() returns a screen whose root window is not the same as that of the associated display.",TestName);
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH02/dfltvsl/dfltvsl.m b/xc/test/xsuite/xtest/tset/CH02/dfltvsl/dfltvsl.m
new file mode 100644
index 000000000..7bb4fd939
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dfltvsl/dfltvsl.m
@@ -0,0 +1,59 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDefaultVisual CH02
+Visual *
+XDefaultVisual(display, screen_number)
+Display *display = Dsp;
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good A
+A call to xname returns the
+>># comments subsequent to the review period removed the following words ...
+>>#default
+visual for
+>># comments subsequent to the review period resulted in the extra words ...
+the root window of
+the screen specified by the
+.A screen_number
+argument.
+>>STRATEGY
+Obtain the attributes of the default root window using XGetWindowAttributes.
+Obtain the default visual using xname.
+Verify that the visual IDs are the same using XVisualIDFromVisual.
+>>CODE
+XWindowAttributes atts;
+Visual *dv;
+VisualID dvid, rvid;
+
+ if(XGetWindowAttributes(display, RootWindow(display, screen_number), &atts) == 0) {
+ delete("XGetWindowAttributes() returned zero.");
+ return;
+ } else
+ CHECK;
+
+ dv = XCALL;
+
+ dvid = XVisualIDFromVisual(dv);
+ rvid = XVisualIDFromVisual(atts.visual);
+
+ if(dvid != rvid) {
+ report("%s() returned a visual of ID %lx instead of %lx.", TestName, (long) dvid, (long) rvid);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dfltvslofs/dfltvslofs.m b/xc/test/xsuite/xtest/tset/CH02/dfltvslofs/dfltvslofs.m
new file mode 100644
index 000000000..b9d3d78c5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dfltvslofs/dfltvslofs.m
@@ -0,0 +1,57 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDefaultVisualOfScreen CH02
+Visual *
+XDefaultVisualOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the
+>># comments subsequent to the review period removed the following words ...
+>>#default
+visual of
+>># comments subsequent to the review period resulted in the extra words ...
+the root window of
+the screen
+.A screen .
+>>STRATEGY
+Obtain the attributes of the default root window using XGetWindowAttributes.
+Obtain the default visual using xname.
+Verify that the visual IDs are the same using XVisualIDFromVisual.
+>>CODE
+XWindowAttributes atts;
+Visual *dv;
+VisualID dvid, rvid;
+
+ if(XGetWindowAttributes(Dsp, RootWindowOfScreen(screen), &atts) == 0) {
+ delete("XGetWindowAttributes() returned zero.");
+ return;
+ } else
+ CHECK;
+
+ dv = XCALL;
+
+ dvid = XVisualIDFromVisual(dv);
+ rvid = XVisualIDFromVisual(atts.visual);
+
+ if(dvid != rvid) {
+ report("%s() returned a visual of ID %lx instead of %lx.", TestName, (long) dvid, (long) rvid);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dsbckngstr/dsbckngstr.m b/xc/test/xsuite/xtest/tset/CH02/dsbckngstr/dsbckngstr.m
new file mode 100644
index 000000000..6d8d3a59c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dsbckngstr/dsbckngstr.m
@@ -0,0 +1,78 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDoesBackingStore CH02
+int
+XDoesBackingStore(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>EXTERN
+static char *wm = "WhenMapped";
+static char *al = "Always";
+static char *nu = "NotUseful";
+static char er[9];
+static char *
+bs(bs)
+int bs;
+{
+ switch(bs) {
+ case WhenMapped :
+ return wm;
+ case Always :
+ return al;
+ case NotUseful :
+ return nu;
+ default :
+ sprintf(er, "%d", bs);
+ return er;
+ }
+}
+>>ASSERTION Good A
+A call to xname returns
+.S WhenMapped ,
+.S NotUseful ,
+or
+.S Always
+to indicate whether the screen
+.A screen
+supports backing stores.
+>>STRATEGY
+Obtain the level of support for backing store using xname.
+>>CODE
+int dbs;
+int cdbs;
+
+ switch(config.does_backing_store) {
+ case 0:
+ cdbs = NotUseful;
+ break;
+ case 1:
+ cdbs = WhenMapped;
+ break;
+ case 2:
+ cdbs = Always;
+ break;
+ default:
+ delete("XT_DOES_BACKING_STORE was not set to 0, 1 or 2");
+ return;
+ }
+
+ dbs = XCALL;
+ if(cdbs != dbs) {
+ report("%s() returned %s (%d) instead of %s (%d).\n", TestName, bs(dbs), dbs, bs(cdbs), cdbs);
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH02/dsplyclls/dsplyclls.m b/xc/test/xsuite/xtest/tset/CH02/dsplyclls/dsplyclls.m
new file mode 100644
index 000000000..c67abf5f6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dsplyclls/dsplyclls.m
@@ -0,0 +1,59 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDisplayCells CH02
+int
+XDisplayCells(display, screen_number)
+Display *display = Dsp;
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good A
+A call to xname returns the number of colour cells in the default colourmap
+of the screen specified by the
+.A screen_number
+argument.
+>>STRATEGY
+Obtain the default visual using XDefaultVisual.
+Obtain the XVisualInfo structure corresponding to the DefaultVisual using XGetVisualInfo.
+Obtain the number of colormap entries in the default visual from the structure.
+Obtain the number of colormap entries in the default colormap using xname.
+Verify that the number of cells is the same.
+>>CODE
+Visual *dv;
+int nv;
+int dnc;
+XVisualInfo vit;
+XVisualInfo *vil;
+
+ dv = XDefaultVisual(display, screen_number);
+ vit.visualid = XVisualIDFromVisual(dv);
+
+ if((vil = XGetVisualInfo(display, VisualIDMask, &vit, &nv)) == (XVisualInfo *) NULL) {
+ delete("XGetVisualInfo() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ dnc = XCALL;
+
+ if(dnc != vil->colormap_size) {
+ report("%s() returned %d colourmap cells instead of %d.", TestName, dnc, vil->colormap_size);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char *) vil);
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dsplyhght/dsplyhght.m b/xc/test/xsuite/xtest/tset/CH02/dsplyhght/dsplyhght.m
new file mode 100644
index 000000000..f989e89f8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dsplyhght/dsplyhght.m
@@ -0,0 +1,48 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDisplayHeight CH02
+int
+XDisplayHeight(display, screen_number)
+Display *display = Dsp;
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good A
+A call to xname returns the height in pixels of the screen
+.A screen_number .
+>>STRATEGY
+Obtain the height of the root window using XGetWindowAttributes.
+Obtain the pixel height of the screen using xname.
+Verify that the heights are the same.
+>>CODE
+XWindowAttributes atts;
+int height;
+
+ if(XGetWindowAttributes(display, RootWindow(display, screen_number), &atts) == 0) {
+ report("XGetWindowAttributes() returned zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ height = XCALL;
+
+ if(height != atts.height) {
+ report("%s() returned %d instead of %d.", TestName, height, atts.height);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dsplyhghtm/dsplyhghtm.m b/xc/test/xsuite/xtest/tset/CH02/dsplyhghtm/dsplyhghtm.m
new file mode 100644
index 000000000..ac890ef5e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dsplyhghtm/dsplyhghtm.m
@@ -0,0 +1,42 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDisplayHeightMM CH02
+int
+XDisplayHeightMM(display, screen_number)
+Display *display = Dsp;
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good A
+A call to xname returns the height in millimeters of the screen
+.A screen_number .
+>>STRATEGY
+Obtain the height of the screen in millimeters using xname.
+Verify that the value is that given in parameter XT_HEIGHT_MM.
+>>CODE
+int hmm;
+
+ hmm = XCALL;
+ if(hmm != config.height_mm) {
+ report("%s() returns incorrect value for screen height",
+ TestName);
+ report("Expected value 0x%lx; Observed value 0x%lx",
+ config.height_mm, hmm);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dsplyofscr/dsplyofscr.m b/xc/test/xsuite/xtest/tset/CH02/dsplyofscr/dsplyofscr.m
new file mode 100644
index 000000000..c2485d7f2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dsplyofscr/dsplyofscr.m
@@ -0,0 +1,42 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDisplayOfScreen CH02
+Display *
+XDisplayOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the display of the screen
+.A screen .
+>>STRATEGY
+Obtain the root window of the screen using XRootWindowOfScreen.
+Obtain the display of the screen using xname.
+Obtain the root window of the display using XDefaultRootWindow.
+Verify that the two IDs are the same.
+>>CODE
+Display *display;
+Window dw, sw;
+
+ display = XCALL;
+ sw = XRootWindowOfScreen(screen);
+ dw = DefaultRootWindow(display);
+
+ if( sw != dw ) {
+ report("The associated root windows of the screen and display are not the same.");
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH02/dsplyplns/dsplyplns.m b/xc/test/xsuite/xtest/tset/CH02/dsplyplns/dsplyplns.m
new file mode 100644
index 000000000..8cf912aac
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dsplyplns/dsplyplns.m
@@ -0,0 +1,49 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDisplayPlanes CH02
+int
+XDisplayPlanes(display, screen_number)
+Display *display = Dsp;
+int screen_number = DefaultScreen(display);
+>>ASSERTION Good A
+A call to xname returns the depth of the root window of the screen
+specified by the
+.A screen_number
+argument.
+>>STRATEGY
+Obtain the depth of the root window of the default screen using xname.
+Obtain the depth of the root window of the default screen using XGetWindowAttributes.
+Verify that the depths are the same.
+>>CODE
+int plns;
+XWindowAttributes atts;
+
+ plns = XCALL;
+ if(XGetWindowAttributes(display, RootWindow(display, screen_number), &atts) == 0) {
+ delete("XGetWindowAttributes() returned zero.");
+ return;
+ } else
+ CHECK;
+
+ if(atts.depth != plns) {
+ report("Depth of the default root window was %d instead of %d.", atts.depth, plns);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dsplystr/Test1.c b/xc/test/xsuite/xtest/tset/CH02/dsplystr/Test1.c
new file mode 100644
index 000000000..da1ebf413
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dsplystr/Test1.c
@@ -0,0 +1,87 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include <stdlib.h>
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+
+extern Display *Dsp;
+
+/*
+ * Dummy declarations which are normally inserted by mc.
+ * Needed to prevent linkstart.c being included.
+ */
+char *TestName = "XDisplayString";
+int tet_thistest;
+struct tet_testlist tet_testlist[] = {
+ NULL, 0
+};
+int ntests = sizeof(tet_testlist)/sizeof(struct tet_testlist)-1;
+
+tet_main(argc, argv, envp)
+int argc;
+char *argv[];
+char *envp[];
+{
+int pass = 0, fail = 0;
+char *res_name;
+char *dispstr;
+char *rdispstr;
+Display *display;
+
+ exec_startup();
+ tpstartup();
+ trace("Exec'd file ./Test1.");
+
+ if((dispstr = getenv("DISPLAY")) == (char *) NULL) {
+ delete("Environment variable DISPLAY is not set.");
+ return;
+ } else
+ CHECK;
+
+ if((display = XOpenDisplay("")) == (Display *) NULL) {
+ delete("XOpenDisplay() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ startcall(display);
+ rdispstr = XDisplayString(display);
+ endcall(display);
+
+ if(rdispstr == (char *) NULL) {
+ report("%s() returned NULL.", TestName);
+ FAIL;
+ } else {
+ CHECK;
+ if(strcmp(rdispstr, dispstr) != 0) {
+ report("%s() returned \"%s\" instead of \"%s\".", TestName, rdispstr, dispstr);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XCloseDisplay(display);
+ CHECKPASS(4);
+ tpcleanup();
+ exec_cleanup();
+}
diff --git a/xc/test/xsuite/xtest/tset/CH02/dsplystr/dsplystr.m b/xc/test/xsuite/xtest/tset/CH02/dsplystr/dsplystr.m
new file mode 100644
index 000000000..9e3cbdb6a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dsplystr/dsplystr.m
@@ -0,0 +1,139 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDisplayString CH02
+char *
+XDisplayString(display);
+Display *display = Dsp;
+>>MAKE
+>>#
+>>#
+>># Plant some rules in the Makefile to construct
+>># stand-alone executable Test1 to allow the setting
+>># of environment variables.
+>>#
+>># Cal 22/6/91
+>>#
+#
+# The following lines are copied from the .m file by mc
+# under control of the >>MAKE directive
+# to create rules for the executable file Test1.
+#
+AUXFILES=Test1
+AUXCLEAN=Test1.o Test1
+
+all: Test
+
+Test1 : Test1.o $(LIBS) $(TCMCHILD)
+ $(CC) $(LDFLAGS) -o $@ Test1.o $(TCMCHILD) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+#
+# End of section copied from the .m file.
+#
+>>ASSERTION Good A
+A call to xname returns the string that was used as the argument to the
+.S XOpenDisplay
+call that returned the value used as the
+.A display
+argument.
+>>STRATEGY
+Open a connection using XOpenDisplay.
+Obtain the display string using xname.
+Verify that the value of the string is the parameter used in XOpenDisplay.
+Close the display using XCloseDisplay.
+>>CODE
+char *dispstr;
+char *rdispstr;
+
+ rdispstr = XCALL;
+
+ if(rdispstr == (char *) NULL) {
+ report("%s() returned NULL.", TestName);
+ FAIL;
+ } else {
+ CHECK;
+ if(strcmp(rdispstr, config.display) != 0) {
+ report("%s() returned \"%s\" instead of \"%s\".", TestName, rdispstr, config.display);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good C
+If the system is POSIX compliant:
+When the argument passed to the
+.S XOpenDisplay
+call that returned the value used as the
+.A display
+argument was NULL, then a call to xname returns the value of
+the DISPLAY environment variable when
+.S XOpenDisplay
+was called.
+>>STRATEGY
+Fork a child process using tet_fork.
+In child :
+ Exec the file "./Test1" with the environment variable DISPLAY set to the value of XT_DISPLAY config variable.
+ Open the display "" using XOpenDisplay.
+ Obtain the value of the display string using xname.
+ Obtain the value of the DISPLAY environment variable.
+ Verify that the two strings are identical.
+>>CODE
+
+ if(config.posix_system == 0) {
+ unsupported("This assertion can only be tested on a POSIX system.");
+ } else
+ (void) tet_fork(t002exec, TET_NULLFP, 0, 0xFF);
+
+>>EXTERN
+extern char **environ;
+
+static void
+t002exec()
+{
+char *argv[2];
+char *str;
+char *dstr;
+char *mstr = "DISPLAY=%s";
+int pass = 0, fail = 0;
+
+ if((dstr = tet_getvar("XT_DISPLAY")) == (char *) NULL) {
+ delete("XT_DISPLAY configuration variable is not defined.");
+ return;
+ }
+
+ if((str = (char *) malloc( strlen(dstr) + strlen(mstr) + 1)) == (char *) NULL) {
+ delete("malloc() failed.");
+ return;
+ }
+
+ sprintf(str, mstr, dstr);
+
+ argv[0] = "./Test1";
+ argv[1] = (char *) NULL;
+
+ if (xtest_putenv( str ) ) {
+ delete("xtest_putenv failed");
+ return;
+ }
+
+ (void) tet_exec("./Test1", argv, environ);
+
+ delete("Exec of file ./Test1 failed");
+ free( (char *) str);
+}
diff --git a/xc/test/xsuite/xtest/tset/CH02/dsplywdth/dsplywdth.m b/xc/test/xsuite/xtest/tset/CH02/dsplywdth/dsplywdth.m
new file mode 100644
index 000000000..77a911b7a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dsplywdth/dsplywdth.m
@@ -0,0 +1,47 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of th * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDisplayWidth CH02
+int
+XDisplayWidth(display, screen_number)
+Display *display = Dsp;
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good A
+A call to xname returns the width in pixels of the screen
+.A screen_number .
+>>STRATEGY
+Obtain the width of the root window using XGetWindowAttributes.
+Obtain the pixel width of the screen using xname.
+Verify that the two numbers are the same.
+>>CODE
+XWindowAttributes atts;
+int width;
+
+ if(XGetWindowAttributes(display, RootWindow(display, screen_number), &atts) == 0) {
+ report("XGetWindowAttributes() returned zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ width = XCALL;
+
+ if(width != atts.width) {
+ report("%s() returned %d instead of %d.", TestName, width, atts.width);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dsplywdthm/dsplywdthm.m b/xc/test/xsuite/xtest/tset/CH02/dsplywdthm/dsplywdthm.m
new file mode 100644
index 000000000..a737442e8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dsplywdthm/dsplywdthm.m
@@ -0,0 +1,42 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDisplayWidthMM CH02
+int
+XDisplayWidthMM(display, screen_number)
+Display *display = Dsp;
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good A
+A call to xname returns the width in millimeters of the screen
+.A screen_number .
+>>STRATEGY
+Obtain the width of the screen in millimeters using xname.
+Verify that the value is that given in parameter XT_WIDTH_MM.
+>>CODE
+int wmm;
+
+ wmm = XCALL;
+ if(wmm != config.width_mm) {
+ report("%s() returns incorrect value for screen width",
+ TestName);
+ report("Expected value 0x%lx; Observed value 0x%lx",
+ config.width_mm, wmm);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH02/dssvundrs/dssvundrs.m b/xc/test/xsuite/xtest/tset/CH02/dssvundrs/dssvundrs.m
new file mode 100644
index 000000000..07b9b5f53
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/dssvundrs/dssvundrs.m
@@ -0,0 +1,67 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XDoesSaveUnders CH02
+Bool
+XDoesSaveUnders(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>EXTERN
+static char *ts = "True";
+static char *fs = "False";
+static char es[9];
+
+static char *
+tfs(tf)
+int tf;
+{
+ switch(tf) {
+ case True:
+ return ts;
+ case False:
+ return fs;
+ default:
+ sprintf(es, "%d", tf);
+ return es;
+ }
+}
+>>ASSERTION Good C
+If the screen
+.A screen
+supports save unders:
+A call to xname returns True.
+Otherwise:
+A call to xname returns False.
+>>STRATEGY
+Determine whether the screen supports save unders using xname.
+>>CODE
+Bool dsu;
+
+ dsu = XCALL;
+ if(config.does_save_unders == 1)
+ if(dsu != True) {
+ report("%s() returned %s instead of True (%d).", TestName, tfs(dsu), True);
+ FAIL;
+ } else
+ CHECK;
+ else
+ if(dsu != False) {
+ report("%s() returned %s instead of False (%d).", TestName, tfs(dsu), False);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH02/evntmskofs/evntmskofs.m b/xc/test/xsuite/xtest/tset/CH02/evntmskofs/evntmskofs.m
new file mode 100644
index 000000000..e8223bf8a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/evntmskofs/evntmskofs.m
@@ -0,0 +1,48 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XEventMaskOfScreen CH02
+long
+XEventMaskOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the event mask of the root window of the screen
+.A screen
+at the time the connection was established.
+>>STRATEGY
+Obtain the all_events_mask of the root window using XGetWindowAttributes.
+Obtain the event mask of the root window using xname.
+Verify that the masks are the same.
+>>CODE
+XWindowAttributes atts;
+long em;
+
+ if( XGetWindowAttributes(Dsp, XRootWindowOfScreen(screen), &atts) == 0) {
+ delete("XGetWindowAttributes() returned zero.");
+ return;
+ } else
+ CHECK;
+
+ em = XCALL;
+
+ if( em != atts.all_event_masks) {
+ report("%s() returned 0x%lx instead of 0x%lx.", TestName, em, atts.all_event_masks);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/fr/fr.m b/xc/test/xsuite/xtest/tset/CH02/fr/fr.m
new file mode 100644
index 000000000..0bf407ab5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/fr/fr.m
@@ -0,0 +1,32 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFree CH02
+>>ASSERTION Good A
+There are no specific assertions in section 2 for xname.
+Assertions for other Xlib functions refer to xname
+(as in the Xlib specification).
+>>STRATEGY
+Put out a message explaining that there are no assertions in
+section 2 for xname, and that assertions for other Xlib functions
+refer to xname.
+>>CODE
+
+ report("There are no specific assertions in section 2 for %s.",
+ TestName);
+ report("Assertions for other Xlib functions refer to %s.",
+ TestName);
+ tet_result(TET_NOTINUSE);
diff --git a/xc/test/xsuite/xtest/tset/CH02/hghtmmofsc/hghtmmofsc.m b/xc/test/xsuite/xtest/tset/CH02/hghtmmofsc/hghtmmofsc.m
new file mode 100644
index 000000000..af1b4a871
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/hghtmmofsc/hghtmmofsc.m
@@ -0,0 +1,41 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XHeightMMOfScreen CH02
+int
+XHeightMMOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the height in millimeters of the screen
+.A screen .
+>>STRATEGY
+Obtain the height of the screen in millimeters using xname.
+Verify that the value is that given in parameter XT_HEIGHT_MM.
+>>CODE
+int hmm;
+
+ hmm = XCALL;
+ if(hmm != config.height_mm) {
+ report("%s() returns incorrect value for screen height",
+ TestName);
+ report("Expected value 0x%lx; Observed value 0x%lx",
+ config.height_mm, hmm);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH02/hghtofscrn/hghtofscrn.m b/xc/test/xsuite/xtest/tset/CH02/hghtofscrn/hghtofscrn.m
new file mode 100644
index 000000000..eb5240088
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/hghtofscrn/hghtofscrn.m
@@ -0,0 +1,47 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XHeightOfScreen CH02
+int
+XHeightOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the height in pixels of the screen
+.A screen .
+>>STRATEGY
+Obtain the height of the root window using XGetWindowAttributes.
+Obtain the pixel height of the screen using xname.
+Verify that heights are the same.
+>>CODE
+XWindowAttributes atts;
+int height;
+
+ if(XGetWindowAttributes(Dsp, DefaultRootWindow(Dsp), &atts) == 0) {
+ report("XGetWindowAttributes() returned zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ height = XCALL;
+
+ if(height != atts.height) {
+ report("%s() returned %d instead of %d.", TestName, height, atts.height);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/imgbytordr/imgbytordr.m b/xc/test/xsuite/xtest/tset/CH02/imgbytordr/imgbytordr.m
new file mode 100644
index 000000000..7c9062616
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/imgbytordr/imgbytordr.m
@@ -0,0 +1,67 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XImageByteOrder CH02
+int
+XImageByteOrder(display)
+Display *display = Dsp;
+>>EXTERN
+static char *msbstr = "MSBFirst";
+static char *lsbstr = "LSBFirst";
+static char errstr[9];
+
+static
+char *
+sorder(order)
+int order;
+{
+ switch (order) {
+
+ case MSBFirst:
+ return msbstr;
+ case LSBFirst:
+ return lsbstr;
+ default:
+ sprintf(errstr, "%d", order);
+ return errstr;
+ }
+}
+>>ASSERTION Good A
+A call to xname returns the byte order, either
+.S LSBFirst
+or
+.S MSBFirst ,
+for images for each scanline unit in
+XY format or for each pixel value in Z format.
+>>STRATEGY
+Obtain an XImage structure using XGetImage.
+Obtain the byte order using xname.
+Verify that the byte orders are the same.
+>>CODE
+int iorder;
+XImage *xi;
+
+ iorder = XCALL;
+ xi = XGetImage(display, DRW(display), 0,0, 1,1, XAllPlanes(), ZPixmap);
+
+ if(iorder != xi->byte_order) {
+ report("%s() returned %s instead of %s.", TestName, sorder(iorder), sorder(xi->byte_order));
+ FAIL;
+ } else
+ PASS;
+
+ XFree((char *) xi);
diff --git a/xc/test/xsuite/xtest/tset/CH02/linktbl.c b/xc/test/xsuite/xtest/tset/CH02/linktbl.c
new file mode 100644
index 000000000..bd8ccce1b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/linktbl.c
@@ -0,0 +1,227 @@
+/* $XConsortium$ */
+
+#include "xtest.h"
+
+extern struct linkinfo EXAllPlns;
+extern struct linkinfo EXBtmpBtOrdr;
+extern struct linkinfo EXBtmpPd;
+extern struct linkinfo EXBtmpUnt;
+extern struct linkinfo EXBlckPxl;
+extern struct linkinfo EXBlckPxlOfSc;
+extern struct linkinfo EXCllsOfScrn;
+extern struct linkinfo EXClsDsply;
+extern struct linkinfo EXCnnctnNmbr;
+extern struct linkinfo EXDfltClrmp;
+extern struct linkinfo EXDfltClrmpOf;
+extern struct linkinfo EXDfltDpth;
+extern struct linkinfo EXDfltDpthOfS;
+extern struct linkinfo EXDfltGC;
+extern struct linkinfo EXDfltGCOfScr;
+extern struct linkinfo EXDfltRtWdw;
+extern struct linkinfo EXDfltScrn;
+extern struct linkinfo EXDfltScrnOfD;
+extern struct linkinfo EXDfltVsl;
+extern struct linkinfo EXDfltVslOfSc;
+extern struct linkinfo EXDsplyClls;
+extern struct linkinfo EXDsplyHght;
+extern struct linkinfo EXDsplyHghtMM;
+extern struct linkinfo EXDsplyOfScrn;
+extern struct linkinfo EXDsplyPlns;
+extern struct linkinfo EXDsplyStr;
+extern struct linkinfo EXDsplyWdth;
+extern struct linkinfo EXDsplyWdthMM;
+extern struct linkinfo EXDsBckngStr;
+extern struct linkinfo EXDsSvUndrs;
+extern struct linkinfo EXEvntMskOfSc;
+extern struct linkinfo EXFr;
+extern struct linkinfo EXHghtMMOfScr;
+extern struct linkinfo EXHghtOfScrn;
+extern struct linkinfo EXImgBytOrdr;
+extern struct linkinfo EXLstKnwnRqst;
+extern struct linkinfo EXLstDpths;
+extern struct linkinfo EXLstPxmpFrmt;
+extern struct linkinfo EXMxCmpsOfScr;
+extern struct linkinfo EXMnCmpsOfScr;
+extern struct linkinfo EXNxtRqst;
+extern struct linkinfo EXNOp;
+extern struct linkinfo EXOpnDsply;
+extern struct linkinfo EXPlnsOfScrn;
+extern struct linkinfo EXPrtclRvsn;
+extern struct linkinfo EXPrtclVrsn;
+extern struct linkinfo EXQLngth;
+extern struct linkinfo EXRtWdw;
+extern struct linkinfo EXRtWdwOfScrn;
+extern struct linkinfo EXScrnCnt;
+extern struct linkinfo EXScrnNmbrOfS;
+extern struct linkinfo EXScrnOfDsply;
+extern struct linkinfo EXSrvrVndr;
+extern struct linkinfo EXVndrRls;
+extern struct linkinfo EXWhtPxl;
+extern struct linkinfo EXWhtPxlOfScr;
+extern struct linkinfo EXWdthMMOfScr;
+extern struct linkinfo EXWdthOfScrn;
+
+extern struct linkinfo EBtmpBtOrdr;
+extern struct linkinfo EBtmpPd;
+extern struct linkinfo EBtmpUnt;
+extern struct linkinfo EBlckPxl;
+extern struct linkinfo EBlckPxlOfScr;
+extern struct linkinfo ECllsOfScrn;
+extern struct linkinfo ECnnctnNmbr;
+extern struct linkinfo EDfltClrmp;
+extern struct linkinfo EDfltClrmpOfS;
+extern struct linkinfo EDfltDpth;
+extern struct linkinfo EDfltDpthOfSc;
+extern struct linkinfo EDfltGC;
+extern struct linkinfo EDfltGCOfScrn;
+extern struct linkinfo EDfltRtWdw;
+extern struct linkinfo EDfltScrn;
+extern struct linkinfo EDfltScrnOfDs;
+extern struct linkinfo EDfltVsl;
+extern struct linkinfo EDfltVslOfScr;
+extern struct linkinfo EDsplyClls;
+extern struct linkinfo EDsplyHght;
+extern struct linkinfo EDsplyHghtMM;
+extern struct linkinfo EDsplyOfScrn;
+extern struct linkinfo EDsplyPlns;
+extern struct linkinfo EDsplyStr;
+extern struct linkinfo EDsplyWdth;
+extern struct linkinfo EDsplyWdthMM;
+extern struct linkinfo EDsBckngStr;
+extern struct linkinfo EDsSvUndrs;
+extern struct linkinfo EEvntMskOfScr;
+extern struct linkinfo EHghtMMOfScrn;
+extern struct linkinfo EHghtOfScrn;
+extern struct linkinfo EImgBytOrdr;
+extern struct linkinfo ELstKnwnRqstP;
+extern struct linkinfo EMxCmpsOfScrn;
+extern struct linkinfo EMnCmpsOfScrn;
+extern struct linkinfo ENxtRqst;
+extern struct linkinfo EPlnsOfScrn;
+extern struct linkinfo EPrtclRvsn;
+extern struct linkinfo EPrtclVrsn;
+extern struct linkinfo EQLngth;
+extern struct linkinfo ERtWdw;
+extern struct linkinfo ERtWdwOfScrn;
+extern struct linkinfo EScrnCnt;
+extern struct linkinfo EScrnOfDsply;
+extern struct linkinfo ESrvrVndr;
+extern struct linkinfo EVndrRls;
+extern struct linkinfo EWhtPxl;
+extern struct linkinfo EWhtPxlOfScrn;
+extern struct linkinfo EWdthMMOfScrn;
+extern struct linkinfo EWdthOfScrn;
+
+struct linkinfo *linktbl[] = {
+ &EXAllPlns,
+ &EXBtmpBtOrdr,
+ &EXBtmpPd,
+ &EXBtmpUnt,
+ &EXBlckPxl,
+ &EXBlckPxlOfSc,
+ &EXCllsOfScrn,
+ &EXClsDsply,
+ &EXCnnctnNmbr,
+ &EXDfltClrmp,
+ &EXDfltClrmpOf,
+ &EXDfltDpth,
+ &EXDfltDpthOfS,
+ &EXDfltGC,
+ &EXDfltGCOfScr,
+ &EXDfltRtWdw,
+ &EXDfltScrn,
+ &EXDfltScrnOfD,
+ &EXDfltVsl,
+ &EXDfltVslOfSc,
+ &EXDsplyClls,
+ &EXDsplyHght,
+ &EXDsplyHghtMM,
+ &EXDsplyOfScrn,
+ &EXDsplyPlns,
+ &EXDsplyStr,
+ &EXDsplyWdth,
+ &EXDsplyWdthMM,
+ &EXDsBckngStr,
+ &EXDsSvUndrs,
+ &EXEvntMskOfSc,
+ &EXFr,
+ &EXHghtMMOfScr,
+ &EXHghtOfScrn,
+ &EXImgBytOrdr,
+ &EXLstKnwnRqst,
+ &EXLstDpths,
+ &EXLstPxmpFrmt,
+ &EXMxCmpsOfScr,
+ &EXMnCmpsOfScr,
+ &EXNxtRqst,
+ &EXNOp,
+ &EXOpnDsply,
+ &EXPlnsOfScrn,
+ &EXPrtclRvsn,
+ &EXPrtclVrsn,
+ &EXQLngth,
+ &EXRtWdw,
+ &EXRtWdwOfScrn,
+ &EXScrnCnt,
+ &EXScrnNmbrOfS,
+ &EXScrnOfDsply,
+ &EXSrvrVndr,
+ &EXVndrRls,
+ &EXWhtPxl,
+ &EXWhtPxlOfScr,
+ &EXWdthMMOfScr,
+ &EXWdthOfScrn,
+
+ &EBtmpBtOrdr,
+ &EBtmpPd,
+ &EBtmpUnt,
+ &EBlckPxl,
+ &EBlckPxlOfScr,
+ &ECllsOfScrn,
+ &ECnnctnNmbr,
+ &EDfltClrmp,
+ &EDfltClrmpOfS,
+ &EDfltDpth,
+ &EDfltDpthOfSc,
+ &EDfltGC,
+ &EDfltGCOfScrn,
+ &EDfltRtWdw,
+ &EDfltScrn,
+ &EDfltScrnOfDs,
+ &EDfltVsl,
+ &EDfltVslOfScr,
+ &EDsplyClls,
+ &EDsplyHght,
+ &EDsplyHghtMM,
+ &EDsplyOfScrn,
+ &EDsplyPlns,
+ &EDsplyStr,
+ &EDsplyWdth,
+ &EDsplyWdthMM,
+ &EDsBckngStr,
+ &EDsSvUndrs,
+ &EEvntMskOfScr,
+ &EHghtMMOfScrn,
+ &EHghtOfScrn,
+ &EImgBytOrdr,
+ &ELstKnwnRqstP,
+ &EMxCmpsOfScrn,
+ &EMnCmpsOfScrn,
+ &ENxtRqst,
+ &EPlnsOfScrn,
+ &EPrtclRvsn,
+ &EPrtclVrsn,
+ &EQLngth,
+ &ERtWdw,
+ &ERtWdwOfScrn,
+ &EScrnCnt,
+ &EScrnOfDsply,
+ &ESrvrVndr,
+ &EVndrRls,
+ &EWhtPxl,
+ &EWhtPxlOfScrn,
+ &EWdthMMOfScrn,
+ &EWdthOfScrn,
+
+ 0,
+};
diff --git a/xc/test/xsuite/xtest/tset/CH02/lstdpths/lstdpths.m b/xc/test/xsuite/xtest/tset/CH02/lstdpths/lstdpths.m
new file mode 100644
index 000000000..31bf6f72a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/lstdpths/lstdpths.m
@@ -0,0 +1,130 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XListDepths CH02
+int *
+XListDepths(display, screen_number, count_return)
+Display *display = Dsp;
+int screen_number = DefaultScreen(Dsp);
+int *count_return;
+>>ASSERTION Good B 1
+A call to xname returns an array which can be freed with
+.S XFree ,
+of all depths which are available on the screen
+.A screen_number
+and whose size is returned through the
+.A count_return
+argument.
+>>STRATEGY
+Obtain the list of supported depths using xname.
+For each number in the list:
+ Create a pixmap of that depth.
+ Verify that no error occurred.
+For numbers not in the list of depths:
+ Create a pixmap of the depth.
+ Verify that it was not successful.
+Free the list using XFree.
+>>CODE
+int number;
+int *dlst;
+int *dptr;
+int i;
+XVisualInfo vp;
+Pixmap pixm;
+long notmem[NM_LEN];
+
+ count_return = &number;
+ dptr = dlst = XCALL;
+ for(; dptr < &dlst[number] ; dptr++) {
+ trace("Depth %d", *dptr);
+ startcall(display);
+ if (isdeleted())
+ return;
+ pixm = XCreatePixmap(display, DRW(display), 1 , 1, *dptr);
+ endcall(display);
+ if(geterr() != Success) {
+ report("Got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ } else {
+ CHECK;
+ XFreePixmap(display, pixm);
+ }
+ }
+
+ if(notmember(dlst, number, notmem) == 0) {
+ delete("notmember failed.");
+ return;
+ } else
+ CHECK;
+
+ for (i = 0; i < NM_LEN; i++) {
+ startcall(display);
+ if (isdeleted())
+ return;
+ /* notmem is a long, and is being cast to an int */
+ pixm = XCreatePixmap(display, DRW(display), 1 , 1, (int)notmem[i]);
+ endcall(display);
+ if(geterr() == Success) {
+ XFreePixmap(display, pixm);
+ report("Got Success unexpectedly for depth %d.", (int)notmem[i]);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XFree((char*)dlst);
+ CHECKPASS(1+number+NM_LEN);
+
+>>ASSERTION Good A
+When
+.A screen_number
+is not a valid screen, then a call to xname
+does not set the
+.A count_return
+argument and returns NULL.
+>>STRATEGY
+List the depths of an invalid screen using XListDepths.
+Verify that the function returns NULL.
+Verify that the count_return argument was unchanged.
+>>CODE
+int number = -1;
+int *dlst;
+
+ count_return = &number;
+ screen_number = -1;
+ dlst = XCALL;
+
+ if(dlst != (int *) NULL) {
+ report("%s() did not return NULL.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if( number != -1) {
+ report("The count_return argument was modified.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+
+>>ASSERTION Bad B 1
+When sufficient memory cannot be allocated for the
+returned array, then a call to xname
+does not set the
+.A count_return
+argument and returns NULL.
diff --git a/xc/test/xsuite/xtest/tset/CH02/lstknwnrqs/lstknwnrqs.m b/xc/test/xsuite/xtest/tset/CH02/lstknwnrqs/lstknwnrqs.m
new file mode 100644
index 000000000..e5b067f28
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/lstknwnrqs/lstknwnrqs.m
@@ -0,0 +1,43 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XLastKnownRequestProcessed CH02
+unsigned long
+XLastKnownRequestProcessed(display)
+Display *display = Dsp;
+>>ASSERTION Good B 1
+A call to xname returns the serial number of the last request known to have
+been processed by the server over the connection specified by the
+.A display
+argument .
+>>STRATEGY
+Obtain the serial number of the last request processed by the server using xname.
+Obtain the serial number of the next request to be sent using XNextRequest.
+Verify that the two serial numbers are not the same.
+>>CODE
+unsigned long sno, nno;
+
+ sno = XCALL;
+ nno = XNextRequest(display);
+ report("Last processed serial number was %lu, next serial number is %lu.", sno, nno);
+ if(sno == nno) {
+ report("The next serial number (%lu) was not different to the current serial number.", nno);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
diff --git a/xc/test/xsuite/xtest/tset/CH02/lstpxmpfrm/lstpxmpfrm.m b/xc/test/xsuite/xtest/tset/CH02/lstpxmpfrm/lstpxmpfrm.m
new file mode 100644
index 000000000..d9e2a014f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/lstpxmpfrm/lstpxmpfrm.m
@@ -0,0 +1,115 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XListPixmapFormats CH02
+XPixmapFormatValues *
+XListPixmapFormats(display, count_return)
+Display *display = Dsp;
+int *count_return;
+>>EXTERN
+#include <string.h>
+#define SEPS " "
+>>ASSERTION Good A
+A call to xname returns an array of
+.S XPixampFormatValues
+structures which can be freed with
+.S XFree
+of length returned in the
+.A count_return
+argument that describe the types of Z format images that are supported
+by the display specified by the
+.A display
+argument.
+>>STRATEGY
+Obtain a list of pixmap formats using xname.
+Verify the depths match those specified in XT_PIXMAP_DEPTHS.
+Free the list using XFree.
+>>CODE
+XPixmapFormatValues *plst = (XPixmapFormatValues *) NULL;
+XPixmapFormatValues *pt = (XPixmapFormatValues *) NULL;
+char *tok;
+char *dp;
+int *Pdepth;
+int Ndepth;
+int nr=0;
+int i;
+int j;
+int found;
+
+ count_return = &nr;
+ pt = plst = XCALL;
+ if(plst == (XPixmapFormatValues *) NULL) {
+ delete("%s() returned NULL", TestName);
+ return;
+ } else
+ CHECK;
+
+ dp = config.pixmap_depths;
+ if (dp == (char*)0) {
+ delete("XT_PIXMAP_DEPTHS not set");
+ return;
+ } else
+ CHECK;
+
+ /*
+ * The number of pixmap depths in the string is less than the
+ * length of the string.
+ */
+ Pdepth = (int*)malloc(strlen(dp) * sizeof(int));
+ if (Pdepth == (int*)0) {
+ delete("Could not allocate memory for pixmap depth array");
+ return;
+ } else
+ CHECK;
+
+ Ndepth = 0;
+ for (tok = strtok(dp, SEPS); tok; tok = strtok((char*)0, SEPS))
+ Pdepth[Ndepth++] = atov(tok);
+
+ if(nr != Ndepth) {
+ report("%s() returned %d structures", TestName, nr);
+ report("Expected %d structures", Ndepth);
+ FAIL;
+ } else
+ CHECK;
+
+ for(j = 0; j < Ndepth; j++) {
+ trace("pixmap depth expected %d", Pdepth[j]);
+ found = 0;
+ for(pt = plst, i = 0; i < nr; i++, pt++) {
+ trace("pixmap depth found %d", pt->depth);
+ if(pt->depth == Pdepth[j]) {
+ found = 1;
+ break;
+ }
+ }
+ if(!found) {
+ report("Pixmap depth %d not returned by %s", Pdepth[j],
+ TestName);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ for(pt = plst, i = 0; i < nr; pt++) {
+ trace("Pixmap format %d : depth %d, bits_per_pixel %d, scanline_pad %d.", ++i,
+ pt->depth, pt-> bits_per_pixel, pt->scanline_pad);
+ }
+ XFree( (char *) plst);
+ CHECKPASS(4+Ndepth);
+
+>>ASSERTION Bad B 1
+When insufficient memory is available, then a call to xname returns NULL.
diff --git a/xc/test/xsuite/xtest/tset/CH02/mncmpsofsc/mncmpsofsc.m b/xc/test/xsuite/xtest/tset/CH02/mncmpsofsc/mncmpsofsc.m
new file mode 100644
index 000000000..b5e94327a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/mncmpsofsc/mncmpsofsc.m
@@ -0,0 +1,51 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XMinCmapsOfScreen CH02
+int
+XMinCmapsOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good B 1
+A call to xname returns the minimum number of installed colourmaps supported by
+the screen
+.A screen .
+>>STRATEGY
+Obtain the minimum allowed number of installed colourmaps using xname.
+Obtain the list of installed colourmaps on the default screen using XListInstalledColormaps.
+Verify that the number of installed colourmaps is greater or equal to the minimum.
+>>CODE
+int n;
+int minm;
+Colormap *clist;
+
+ if((clist = XListInstalledColormaps(Dsp, DefaultRootWindow(Dsp), &n)) == (Colormap *) NULL) {
+ delete("XListInstalledColormaps() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ XFree((char *) clist);
+
+ minm = XCALL;
+
+ if(n < minm) {
+ report("%s() returns %d, but %d colourmaps are installed.", TestName, minm, n);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/mxcmpsofsc/mxcmpsofsc.m b/xc/test/xsuite/xtest/tset/CH02/mxcmpsofsc/mxcmpsofsc.m
new file mode 100644
index 000000000..3ab8b4f73
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/mxcmpsofsc/mxcmpsofsc.m
@@ -0,0 +1,62 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XMaxCmapsOfScreen CH02
+int
+XMaxCmapsOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the maximum number of installed colourmaps supported by the screen
+.A screen .
+>>STRATEGY
+Obtain the maximum allowed number of installed colourmaps using xname.
+Install the maximum+2 colourmaps using XInstallColormap.
+Obtain the number of installed colourmaps using XListInstalledColormaps.
+Verify that the maximum was not exceeded.
+>>CODE
+int maxm;
+int minm;
+int i;
+int n;
+Colormap cmap;
+Colormap *clist;
+
+ maxm = XCALL;
+
+ for(i=1; i< maxm+2 ;i++) {
+ if(i == maxm)
+ CHECK;
+
+ cmap = makecolmap(Dsp, DefaultVisual(Dsp, DefaultScreen(Dsp)), AllocNone);
+ XInstallColormap(Dsp, cmap);
+ }
+
+ if((clist=XListInstalledColormaps(Dsp, RootWindowOfScreen(screen), &n)) == (Colormap *) NULL) {
+ delete("XListInstalledColormaps() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ XFree((char *) clist);
+
+ if(n != maxm) {
+ report("%s() returns %d, but %d colourmaps can be installed.", TestName, maxm, n);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
diff --git a/xc/test/xsuite/xtest/tset/CH02/nop/nop.m b/xc/test/xsuite/xtest/tset/CH02/nop/nop.m
new file mode 100644
index 000000000..00e706379
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/nop/nop.m
@@ -0,0 +1,52 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XNoOp CH02
+
+XNoOp(display)
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname sends a
+.S NoOperation
+protocol request to the server.
+>>STRATEGY
+Obtain the serial number of the next request using XNextRequest.
+Issue a NoOperation protocol request using XNoOp.
+Obtain the serial number of the next request using XNextRequest.
+Verify that the serial number has changed.
+>>CODE
+int nr, lr;
+
+ lr = XNextRequest(display);
+ _startcall(display);
+ XNoOp(display);
+ _endcall(display);
+
+ if( geterr() != Success) {
+ report("Got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ nr = XNextRequest(display);
+
+ if(nr == lr) {
+ report("%s() did not cause the next serial number to change.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/nxtrqst/nxtrqst.m b/xc/test/xsuite/xtest/tset/CH02/nxtrqst/nxtrqst.m
new file mode 100644
index 000000000..69b96e471
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/nxtrqst/nxtrqst.m
@@ -0,0 +1,125 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XNextRequest CH02
+unsigned long
+XNextRequest(display)
+Display *display = Dsp;
+>>ASSERTION Good B 1
+A call to xname returns the serial number of the next request over the
+connection specified by the
+.A display
+argument.
+>>STRATEGY
+Obtain the serial number of the last request processed by the server using XLastKnownRequestProcessed.
+Obtain the serial number of the next request to be sent using xname.
+Verify that the two serial numbers are not the same.
+>>CODE
+unsigned long sno, nno;
+
+ sno = XLastKnownRequestProcessed(display);
+ nno = XCALL;
+ report("Last processed serial number was %lu, next serial number is %lu.", sno, nno);
+ if(sno == nno) {
+ report("The next serial number (%lu) was not different to the current serial number.", nno);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+
+>>ASSERTION Good B 1
+Serial numbers are maintained separately for each display connection.
+>>STRATEGY
+Open two displays using XOpenDisplay.
+Obtain the next serial number for each display using xname.
+Perform an XNoOp request on the first display.
+Verify that the next serial number for that display is not the same.
+Verify that the next serial number for the second display is the same.
+>>#
+>># COMMENT : The mad posturing with _startcall and _endcall is to
+>># avoid the XSync calls which are planted by XCALL as
+>># these call increment the serial number.
+>>#
+>># Cal 23/07/91
+>>#
+>>CODE
+unsigned long nr1, nr2, nar1, nar2;
+Display *disp2;
+
+ disp2 = opendisplay();
+
+ _startcall(display);
+ nr1 = XNextRequest(display);
+ _endcall(display);
+ if (geterr() != Success) {
+ report("Got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ _startcall(disp2);
+ nr2 = XNextRequest(disp2);
+ _endcall(disp2);
+ if (geterr() != Success) {
+ report("Got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ XNoOp(display);
+
+ _startcall(display);
+ nar1 = XNextRequest(display);
+ _endcall(display);
+ if (geterr() != Success) {
+ report("Got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ _startcall(disp2);
+ nar2 = XNextRequest(disp2);
+ _endcall(disp2);
+
+ if (geterr() != Success) {
+ report("Got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ if(nr1 == nar1) {
+ delete("The next serial number (%lu) was the same after a XNoOp request.", nr1);
+ return;
+ } else
+ CHECK;
+
+
+ if(nr2 != nar2) {
+ report("The next serial number changed without a request.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(6);
+
+
+
+
+
+
+
diff --git a/xc/test/xsuite/xtest/tset/CH02/opndsply/Test1.c b/xc/test/xsuite/xtest/tset/CH02/opndsply/Test1.c
new file mode 100644
index 000000000..a0fa65bde
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/opndsply/Test1.c
@@ -0,0 +1,87 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include <stdlib.h>
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+
+extern Display *Dsp;
+
+/*
+ * Dummy declarations which are normally inserted by mc.
+ * Needed to prevent linkstart.c being included.
+ */
+char *TestName = "XDisplayString";
+int tet_thistest;
+struct tet_testlist tet_testlist[] = {
+ NULL, 0
+};
+int ntests = sizeof(tet_testlist)/sizeof(struct tet_testlist)-1;
+
+tet_main(argc, argv, envp)
+int argc;
+char *argv[];
+char *envp[];
+{
+int pass = 0, fail = 0;
+char *res_name;
+char *dispstr;
+char *rdispstr;
+Display *display;
+
+ exec_startup();
+ tpstartup();
+ trace("Exec'd file ./Test1.");
+
+ if((dispstr = getenv("DISPLAY")) == (char *) NULL) {
+ delete("Environment variable DISPLAY is not set.");
+ return;
+ } else
+ CHECK;
+
+ if((display = XOpenDisplay((char *) NULL)) == (Display *) NULL) {
+ report("%s() returned NULL.", TestName);
+ FAIL;
+ } else {
+ CHECK;
+
+ rdispstr = XDisplayString(display);
+
+ if(rdispstr == (char *) NULL) {
+ delete("%s() returned NULL.", TestName);
+ return;
+ } else {
+ CHECK;
+ if(strcmp(rdispstr, dispstr) != 0) {
+ report("%s() opened display \"%s\" instead of \"%s\".", TestName, rdispstr, dispstr);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XCloseDisplay(display);
+ CHECKPASS(4);
+ }
+
+ tpcleanup();
+ exec_cleanup();
+}
diff --git a/xc/test/xsuite/xtest/tset/CH02/opndsply/opndsply.m b/xc/test/xsuite/xtest/tset/CH02/opndsply/opndsply.m
new file mode 100644
index 000000000..21cedc361
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/opndsply/opndsply.m
@@ -0,0 +1,1013 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XOpenDisplay CH02
+Display *
+XOpenDisplay(display_name)
+char *display_name = config.display;
+>>MAKE
+>>#
+>>#
+>># Plant some rules in the Makefile to construct
+>># stand-alone executable Test1 to allow the setting
+>># of environment variables.
+>>#
+>># Cal 5/8/91
+>>#
+#
+# The following lines are copied from the .m file by mc
+# under control of the >>MAKE directive
+# to create rules for the executable file Test1.
+#
+AUXFILES=Test1
+AUXCLEAN=Test1.o Test1
+
+all: Test
+
+Test1 : Test1.o $(LIBS) $(TCMCHILD)
+ $(CC) $(LDFLAGS) -o $@ Test1.o $(TCMCHILD) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+#
+# End of section copied from the .m file.
+#
+>>EXTERN
+#include "ctype.h"
+#include "Xatom.h"
+static char *copystring (src, len) /* Courtesy of Xlib. */
+ char *src;
+ int len;
+{
+ char *dst = (char *) malloc (len + 1);
+
+ if (dst) {
+ strncpy (dst, src, len);
+ dst[len] = '\0';
+ }
+
+ return dst;
+}
+
+>>ASSERTION Good C
+If the system is POSIX compliant and supports DECnet:
+When the
+.A display_name
+argument is a string of the form
+.A hostname::number.screen_num ,
+then a call to xname returns a pointer to a
+.S display
+structure and opens a connection to
+display server number
+.A number
+on
+.A hostname
+with default screen
+.A screen_number .
+>>STRATEGY
+If the system is POSIX compliant and supports DECnet transport:
+ Obtain the display and screen numbers by parsing the XT_DISPLAY config variable.
+ Open a connection using xname.
+ Verify that the call did not return NULL.
+ Issue a NoOperation request using XNoOp.
+ Flush the Output buffer using XFlush.
+ Close the display using XCloseDisplay.
+>>CODE
+Display *display;
+char *cptr, *sptr, *dnop, *snop;
+int dno;
+int sno;
+char ssno[9], sdno[9];
+
+ if(config.posix_system == 0) {
+ unsupported("This assertion can only be tested on a POSIX system.");
+ return;
+ } else
+ CHECK;
+
+ if(config.decnet == 0) {
+ unsupported("This assertion can only be tested on a system with support for DECnet.");
+ return;
+ } else
+ CHECK;
+
+ for(cptr = config.display; (*cptr) && (*cptr != ':'); cptr++)
+ ;
+
+ if(*cptr == '\0') {
+ delete("XT_DISPLAY does not specify a display.");
+ return;
+ } else {
+ CHECK;
+ if(*++cptr != ':') {
+ delete("XT_DISPLAY does not contain a valid display name.");
+ return;
+ } else
+ CHECK;
+
+ for(sptr = ++cptr; *sptr && isascii(*sptr) && isdigit(*sptr); sptr++)
+ ;
+ if( (sptr == cptr) || (*sptr != '\0' && *sptr != '.') ) {
+ delete("Bad display number in XT_DISPLAY.");
+ return;
+ } else
+ CHECK;
+
+ if( (dnop = copystring(cptr, sptr - cptr)) == (char *) 0) {
+ delete("malloc failed,");
+ return;
+ } else
+ CHECK;
+
+ dno = atoi(dnop);
+
+ if(*sptr) {
+ for(cptr = ++sptr; *sptr && isascii(*sptr) && isdigit(*sptr); sptr++)
+ ;
+ if(*sptr) {
+ delete("Bad screen number in XT_DISPLAY.");
+ return;
+ } else
+ CHECK;
+
+ if((snop = copystring(cptr, sptr - cptr)) == (char *) NULL) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ sno = atoi(snop);
+ free(snop);
+
+ } else {
+ CHECK; CHECK;
+ sno = 0; /* No screen number in XT_DISPLAY, assume zero. */
+ }
+ }
+
+ sprintf(ssno, "%d", sno);
+ sprintf(sdno, "%d", dno);
+
+ if((display_name = (char *) malloc(1 + 3 + strlen(ssno) + strlen(sdno) + strlen(config.displayhost))) == (char *) 0) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ sprintf(display_name, "%s::%s.%s", config.displayhost, sdno, ssno);
+
+ display = XOpenDisplay(display_name);
+ if(display == (Display *) NULL) {
+ report("%s() returned NULL with argument \"%s\".", TestName, display_name);
+ FAIL;
+ } else {
+ CHECK;
+ XNoOp(display);
+ XFlush(display);
+ XCloseDisplay(display);
+ }
+
+ free(display_name);
+ CHECKPASS(10);
+
+>>ASSERTION Good C
+If the system is POSIX compliant and supports DECnet:
+When the
+.A display_name
+argument is a string of the form
+.A hostname::number ,
+then a call to xname returns a pointer to a
+.S display
+structure and opens a connection to
+display server number
+.A number
+on
+.A hostname
+with default screen
+.A 0 .
+>>STRATEGY
+If the system is POSIX compliant and supports DECnet transport:
+ Obtain the display numbers by parsing the XT_DISPLAY config variable.
+ Open a connection of the form host::number using xname.
+ Verify that the call did not return NULL.
+ Obtain the screen number using XDefaultScreen.
+ Verify that the screen number is 0.
+ Close the display using XCloseDisplay.
+>>CODE
+Display *display;
+char *cptr, *sptr, *dnop, *snop;
+int rsno;
+int dno;
+char sdno[9];
+
+ if(config.posix_system == 0) {
+ unsupported("This assertion can only be tested on a POSIX system.");
+ return;
+ } else
+ CHECK;
+
+ if(config.decnet == 0) {
+ unsupported("This assertion can only be tested on a system with support for DECnet.");
+ return;
+ } else
+ CHECK;
+
+ for(cptr = config.display; (*cptr) && (*cptr != ':'); cptr++)
+ ;
+
+ if(*cptr == '\0') {
+ delete("XT_DISPLAY does not specify a display.");
+ return;
+ } else {
+ CHECK;
+ if(*++cptr != ':') {
+ delete("XT_DISPLAY does not contain a valid display name.");
+ return;
+ } else
+ CHECK;
+
+ for(sptr = ++cptr; *sptr && isascii(*sptr) && isdigit(*sptr); sptr++)
+ ;
+ if( (sptr == cptr) || (*sptr != '\0' && *sptr != '.') ) {
+ delete("Bad display number in XT_DISPLAY.");
+ return;
+ } else
+ CHECK;
+
+ if( (dnop = copystring(cptr, sptr - cptr)) == (char *) 0) {
+ delete("malloc failed,");
+ return;
+ } else
+ CHECK;
+
+ dno = atoi(dnop);
+ free(dnop);
+
+ if(*sptr) {
+ for(cptr = ++sptr; *sptr && isascii(*sptr) && isdigit(*sptr); sptr++)
+ ;
+ if(*sptr) {
+ delete("Bad screen number in XT_DISPLAY.");
+ return;
+ } else
+ CHECK;
+
+ if((snop = copystring(cptr, sptr - cptr)) == (char *) NULL) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ } else {
+ CHECK; CHECK;
+ }
+ }
+
+ sprintf(sdno, "%d", dno);
+
+ if((display_name = (char *) malloc(1 + 2 + strlen(sdno) + strlen(config.displayhost))) == (char *) 0) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ sprintf(display_name, "%s::%s", config.displayhost, sdno);
+ free(snop);
+ free(dnop);
+
+ display = XOpenDisplay(display_name);
+ if(display == (Display *) NULL) {
+ report("%s() returned NULL with argument \"%s\".", TestName, display_name);
+ FAIL;
+ } else {
+ CHECK;
+ if( (rsno=XDefaultScreen(display)) != 0 ) {
+ report("%s() with argument \"%s\" opened screen %d instead of screen 0.", TestName, display_name, rsno);
+ FAIL;
+ } else
+ CHECK;
+
+ XNoOp(display);
+ XFlush(display);
+ XCloseDisplay(display);
+ }
+
+ free(display_name);
+ CHECKPASS(11);
+
+>>ASSERTION Good C
+If the system is POSIX compliant and supports TCP:
+When the
+.A display_name
+argument is a string of the form
+.A hostname:number.screen_num ,
+then a call to xname returns a pointer to a
+.S display
+structure and opens a connection to
+display server number
+.A number
+on
+.A hostname
+with default screen
+.A screen_number .
+>>STRATEGY
+If the system is POSIX compliant and supports TCP transport:
+ Obtain the display and screen numbers by parsing the XT_DISPLAY config variable.
+ Open a connection using xname.
+ Verify that the call did not return NULL.
+ Issue a NoOperation request using XNoOp.
+ Flush the Output buffer using XFlush.
+ Close the display using XCloseDisplay.
+>>CODE
+Display *display;
+char *cptr, *sptr, *dnop, *snop;
+int dno;
+int sno;
+char ssno[9], sdno[9];
+
+ if(config.posix_system == 0) {
+ unsupported("This assertion can only be tested on a POSIX system.");
+ return;
+ } else
+ CHECK;
+
+ if(config.tcp == 0) {
+ unsupported("This assertion can only be tested on a system with support for TCP.");
+ return;
+ } else
+ CHECK;
+
+ for(cptr = config.display; (*cptr) && (*cptr != ':'); cptr++)
+ ;
+
+ if(*cptr == '\0') {
+ delete("XT_DISPLAY does not specify a display.");
+ return;
+ } else {
+ CHECK;
+ for(sptr = ++cptr; *sptr && isascii(*sptr) && isdigit(*sptr); sptr++)
+ ;
+ if( (sptr == cptr) || (*sptr != '\0' && *sptr != '.') ) {
+ delete("Bad display number in XT_DISPLAY.");
+ return;
+ } else
+ CHECK;
+
+ if( (dnop = copystring(cptr, sptr - cptr)) == (char *) 0) {
+ delete("malloc failed,");
+ return;
+ } else
+ CHECK;
+
+ dno = atoi(dnop);
+ free(dnop);
+
+ if(*sptr) {
+ for(cptr = ++sptr; *sptr && isascii(*sptr) && isdigit(*sptr); sptr++)
+ ;
+ if(*sptr) {
+ delete("Bad screen number in XT_DISPLAY.");
+ return;
+ } else
+ CHECK;
+
+ if((snop = copystring(cptr, sptr - cptr)) == (char *) NULL) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ sno = atoi(snop);
+ free(snop);
+
+ } else {
+ CHECK; CHECK;
+ sno = 0; /* No screen number in XT_DISPLAY, assume zero. */
+ }
+ }
+
+ sprintf(ssno, "%d", sno);
+ sprintf(sdno, "%d", dno);
+
+ if((display_name = (char *) malloc(1 + 2 + strlen(ssno) + strlen(sdno) + strlen(config.displayhost))) == (char *) 0) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ sprintf(display_name, "%s:%s.%s", config.displayhost, sdno, ssno);
+
+ display = XOpenDisplay(display_name);
+ if(display == (Display *) NULL) {
+ report("%s() returned NULL with argument \"%s\".", TestName, display_name);
+ FAIL;
+ } else {
+ CHECK;
+ XNoOp(display);
+ XFlush(display);
+ XCloseDisplay(display);
+ }
+
+ free(display_name);
+ CHECKPASS(9);
+
+>>ASSERTION Good C
+If the system is POSIX compliant and supports TCP:
+When the
+.A display_name
+argument is a string of the form
+.A hostname:number ,
+then a call to xname returns a pointer to a
+.S display
+structure and opens a connection to
+display server number
+.A number
+on
+.A hostname
+with default screen
+.A 0 .
+>>STRATEGY
+If the system is POSIX compliant and supports TCP transport:
+ Obtain the display numbers by parsing the XT_DISPLAY config variable.
+ Open a connection of the form host:number using xname.
+ Verify that the call did not return NULL.
+ Obtain the screen number using XDefaultScreen.
+ Verify that the screen number is 0.
+ Close the display using XCloseDisplay.
+>>CODE
+Display *display;
+char *cptr, *sptr, *dnop, *snop;
+int rsno;
+int dno;
+char sdno[9];
+
+ if(config.posix_system == 0) {
+ unsupported("This assertion can only be tested on a POSIX system.");
+ return;
+ } else
+ CHECK;
+
+ if(config.tcp == 0) {
+ unsupported("This assertion can only be tested on a system with support for TCP.");
+ return;
+ } else
+ CHECK;
+
+ for(cptr = config.display; (*cptr) && (*cptr != ':'); cptr++)
+ ;
+
+ if(*cptr == '\0') {
+ delete("XT_DISPLAY does not specify a display.");
+ return;
+ } else {
+ CHECK;
+
+ for(sptr = ++cptr; *sptr && isascii(*sptr) && isdigit(*sptr); sptr++)
+ ;
+ if( (sptr == cptr) || (*sptr != '\0' && *sptr != '.') ) {
+ delete("Bad display number in XT_DISPLAY.");
+ return;
+ } else
+ CHECK;
+
+ if( (dnop = copystring(cptr, sptr - cptr)) == (char *) 0) {
+ delete("malloc failed,");
+ return;
+ } else
+ CHECK;
+
+ dno = atoi(dnop);
+ free(dnop);
+
+ if(*sptr) {
+ for(cptr = ++sptr; *sptr && isascii(*sptr) && isdigit(*sptr); sptr++)
+ ;
+ if(*sptr) {
+ delete("Bad screen number in XT_DISPLAY.");
+ return;
+ } else
+ CHECK;
+
+ if((snop = copystring(cptr, sptr - cptr)) == (char *) NULL) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ free(snop);
+
+ } else {
+ CHECK; CHECK;
+ }
+ }
+
+ sprintf(sdno, "%d", dno);
+
+ if((display_name = (char *) malloc(1 + 1 + strlen(sdno) + strlen(config.displayhost))) == (char *) 0) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ sprintf(display_name, "%s:%s", config.displayhost, sdno);
+
+ display = XOpenDisplay(display_name);
+ if(display == (Display *) NULL) {
+ report("%s() returned NULL with argument \"%s\".", TestName, display_name);
+ FAIL;
+ } else {
+ CHECK;
+ if( (rsno=XDefaultScreen(display)) != 0 ) {
+ report("%s() with argument \"%s\" opened screen %d instead of screen 0.", TestName, display_name, rsno);
+ FAIL;
+ } else
+ CHECK;
+
+ XNoOp(display);
+ XFlush(display);
+ XCloseDisplay(display);
+ }
+
+ free(display_name);
+ CHECKPASS(10);
+
+>>ASSERTION Good C
+If the system is POSIX compliant:
+When the
+.A display_name
+argument is NULL, then a call to xname opens a connection specified by
+the value of the DISPLAY environment variable.
+>>STRATEGY
+Fork a child process using tet_fork.
+In child:
+ Exec the file "./Test1" with the environment variable DISPLAY set to the value of XT_DISPLAY config variable.
+ Open the display NULL using xname.
+ Obtain the actual display string used using XDisplayString.
+ Obtain the value of the DISPLAY environment variable using getvar.
+ Verify that these values are the same.
+>>CODE
+
+ if(config.posix_system == 0) {
+ unsupported("This assertion can only be tested on a POSIX system.");
+ } else
+ (void) tet_fork(t005exec, TET_NULLFP, 0 , ~0);
+
+>>EXTERN
+extern char **environ;
+
+static void
+t005exec()
+{
+char *argv[2];
+char *str;
+char *mstr = "DISPLAY=%s";
+
+ if((str = (char *) malloc( strlen(config.display) + strlen(mstr) - 1)) == (char *) NULL) {
+ delete("malloc() failed.");
+ return;
+ }
+
+ sprintf(str, mstr, config.display);
+
+ argv[0] = "./Test1";
+ argv[1] = (char *) NULL;
+
+ if (xtest_putenv(str)) {
+ delete("xtest_putenv failed");
+ return;
+ }
+
+ (void) tet_exec("./Test1", argv, environ);
+
+ delete("Exec of file ./Test1 failed");
+ free( (char *) str);
+}
+
+>>ASSERTION Good D 1
+If the system is POSIX compliant and supports DECnet and a local display server:
+When the
+.A display_name
+argument is a string of the form
+.A ::number.screen_num
+or
+.A ::number ,
+then a call to xname opens the most efficient transport connection
+available to the specified display server and default screen on the client machine.
+>>STRATEGY
+If the system is POSIX compliant and supports DECnet and a local display server:
+ Obtain the display and screen numbers from XT_DISPLAY.
+ Open a connection of the form ::number.display.
+ Verify that the call did not return NULL.
+ Issue a NoOperation request using XNoOp.
+ Flush the Output buffer using XFlush.
+ Close the display using XCloseDisplay.
+ Open a connection of the form ::number .
+ Verify that the call did not return NULL.
+ Issue a NoOperation request using XNoOp.
+ Flush the Output buffer using XFlush.
+ Close the display using XCloseDisplay.
+>>CODE
+Display *display;
+char *cptr, *sptr, *dnop, *snop;
+int dno;
+int sno;
+char ssno[9], sdno[9];
+
+ if(config.posix_system == 0) {
+ unsupported("This assertion can only be tested on a POSIX system.");
+ return;
+ } else
+ CHECK;
+
+ if(config.decnet == 0) {
+ unsupported("This assertion can only be tested on a system with support for DECnet.");
+ return;
+ } else
+ CHECK;
+
+ if(config.local == 0) {
+ unsupported("This assertion can only be tested on a system with a local display server.");
+ return;
+ } else
+ CHECK;
+
+ for(cptr = config.display; (*cptr) && (*cptr != ':'); cptr++)
+ ;
+
+ if(*cptr == '\0') {
+ delete("XT_DISPLAY does not specify a display.");
+ return;
+ } else {
+ CHECK;
+ if(*++cptr != ':') {
+ delete("XT_DISPLAY does not contain a valid display name.");
+ return;
+ } else
+ CHECK;
+
+ for(sptr = ++cptr; *sptr && isascii(*sptr) && isdigit(*sptr); sptr++)
+ ;
+ if( (sptr == cptr) || (*sptr != '\0' && *sptr != '.') ) {
+ delete("Bad display number in XT_DISPLAY.");
+ return;
+ } else
+ CHECK;
+
+ if( (dnop = copystring(cptr, sptr - cptr)) == (char *) 0) {
+ delete("malloc failed,");
+ return;
+ } else
+ CHECK;
+
+ dno = atoi(dnop);
+ free(dnop);
+
+ if(*sptr) {
+ for(cptr = ++sptr; *sptr && isascii(*sptr) && isdigit(*sptr); sptr++)
+ ;
+ if(*sptr) {
+ delete("Bad screen number in XT_DISPLAY.");
+ return;
+ } else
+ CHECK;
+
+ if((snop = copystring(cptr, sptr - cptr)) == (char *) NULL) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ sno = atoi(snop);
+ free(snop);
+
+ } else {
+ CHECK; CHECK;
+ sno = 0; /* No screen number in XT_DISPLAY, assume zero. */
+ }
+ }
+
+ sprintf(ssno, "%d", sno);
+ sprintf(sdno, "%d", dno);
+
+ if((display_name = (char *) malloc(1 + 3 + strlen(ssno) + strlen(sdno))) == (char *) 0) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ sprintf(display_name, "::%s.%s", sdno, ssno);
+
+ display = XOpenDisplay(display_name);
+ if(display == (Display *) NULL) {
+ report("%s() returned NULL with argument \"%s\".", TestName, display_name);
+ FAIL;
+ } else {
+ CHECK;
+ XNoOp(display);
+ XFlush(display);
+ XCloseDisplay(display);
+ }
+
+ free(display_name);
+/* added :: */
+
+ if((display_name = (char *) malloc(1 + 2 + strlen(sdno))) == (char *) 0) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ sprintf(display_name, "::%s", sdno);
+
+ display = XOpenDisplay(display_name);
+ if(display == (Display *) NULL) {
+ report("%s() returned NULL with argument \"%s\".", TestName, display_name);
+ FAIL;
+ } else {
+ CHECK;
+ XNoOp(display);
+ XFlush(display);
+ XCloseDisplay(display);
+ }
+
+ free(display_name);
+
+ CHECKUNTESTED(13);
+
+
+>>ASSERTION Good D 1
+If the system is POSIX compliant and supports TCP and a local display server:
+When the
+.A display_name
+argument is a string of the form
+.A :number.screen_num
+or
+.A :number ,
+then a call to xname opens the most efficient transport connection
+available to the specified display server and default screen on the client machine.
+>>STRATEGY
+If the system is POSIX compliant and supports TCP and a local display server:
+ Obtain the display and screen numbers from XT_DISPLAY.
+ Open a connection of the form :number.display.
+ Verify that the call did not return NULL.
+ Issue a NoOperation request using XNoOp.
+ Flush the Output buffer using XFlush.
+ Close the display using XCloseDisplay.
+ Open a connection of the form :number .
+ Verify that the call did not return NULL.
+ Issue a NoOperation request using XNoOp.
+ Flush the Output buffer using XFlush.
+ Close the display using XCloseDisplay.
+>>CODE
+Display *display;
+char *cptr, *sptr, *dnop, *snop;
+int dno;
+int sno;
+char ssno[9], sdno[9];
+
+ if(config.posix_system == 0) {
+ unsupported("This assertion can only be tested on a POSIX system.");
+ return;
+ } else
+ CHECK;
+
+ if(config.tcp == 0) {
+ unsupported("This assertion can only be tested on a system with support for TCP.");
+ return;
+ } else
+ CHECK;
+
+ if(config.local == 0) {
+ unsupported("This assertion can only be tested on a system with a local display server.");
+ return;
+ } else
+ CHECK;
+
+ for(cptr = config.display; (*cptr) && (*cptr != ':'); cptr++)
+ ;
+
+ if(*cptr == '\0') {
+ delete("XT_DISPLAY does not specify a display.");
+ return;
+ } else {
+ CHECK;
+
+ for(sptr = ++cptr; *sptr && isascii(*sptr) && isdigit(*sptr); sptr++)
+ ;
+ if( (sptr == cptr) || (*sptr != '\0' && *sptr != '.') ) {
+ delete("Bad display number in XT_DISPLAY.");
+ return;
+ } else
+ CHECK;
+
+ if( (dnop = copystring(cptr, sptr - cptr)) == (char *) 0) {
+ delete("malloc failed,");
+ return;
+ } else
+ CHECK;
+
+ dno = atoi(dnop);
+ free(dnop);
+
+ if(*sptr) {
+ for(cptr = ++sptr; *sptr && isascii(*sptr) && isdigit(*sptr); sptr++)
+ ;
+ if(*sptr) {
+ delete("Bad screen number in XT_DISPLAY.");
+ return;
+ } else
+ CHECK;
+
+ if((snop = copystring(cptr, sptr - cptr)) == (char *) NULL) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ sno = atoi(snop);
+ free(snop);
+
+ } else {
+ CHECK; CHECK;
+ sno = 0; /* No screen number in XT_DISPLAY, assume zero. */
+ }
+ }
+
+ sprintf(ssno, "%d", sno);
+ sprintf(sdno, "%d", dno);
+
+ if((display_name = (char *) malloc(1 + 2 + strlen(ssno) + strlen(sdno))) == (char *) 0) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ sprintf(display_name, ":%s.%s", sdno, ssno);
+
+ display = XOpenDisplay(display_name);
+ if(display == (Display *) NULL) {
+ report("%s() returned NULL with argument \"%s\".", TestName, display_name);
+ FAIL;
+ } else {
+ CHECK;
+ XNoOp(display);
+ XFlush(display);
+ XCloseDisplay(display);
+ }
+
+ free(display_name);
+/* added : */
+
+ if((display_name = (char *) malloc(1 + 1 + strlen(sdno))) == (char *) 0) {
+ delete("malloc failed.");
+ return;
+ } else
+ CHECK;
+
+ sprintf(display_name, ":%s", sdno);
+
+ display = XOpenDisplay(display_name);
+ if(display == (Display *) NULL) {
+ report("%s() returned NULL with argument \"%s\".", TestName, display_name);
+ FAIL;
+ } else {
+ CHECK;
+ XNoOp(display);
+ XFlush(display);
+ XCloseDisplay(display);
+ }
+
+ free(display_name);
+
+ CHECKUNTESTED(12);
+
+
+>>ASSERTION Good A
+When a call to xname is successful, then
+all of the screens in the display can be used by the client.
+>>STRATEGY
+For each screen:
+ Obtain the root window ID of the alternate screen.
+ Obtain the window attributes of that window using XGetWindowAttributes.
+ Verify that the call returned non zero.
+>>CODE
+int scount;
+int i;
+Window aroot;
+XWindowAttributes atts;
+
+ scount = ScreenCount(Dsp);
+
+ for(i=0; i< scount; i++) {
+
+ aroot = RootWindow(Dsp, i);
+
+ if(XGetWindowAttributes(Dsp, aroot, &atts) == 0) {
+ report("Unable to access the attributes of the root window of screen %d.", i);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(scount);
+
+>>ASSERTION Good A
+On a call to xname the RESOURCE_MANAGER property of the root window
+of screen 0 is read and stored.
+>>STRATEGY
+Get the RESOURCE_MANAGER property of the root window on screen 0
+ using XGetWindowProperty.
+Open a display using xname.
+Verify that the call did not return NULL.
+Obtain the value of the RESOURCE_MANAGER property using XResourceManagerString.
+Verify that the value of the property is correct.
+>>CODE
+Window root0;
+unsigned char *rmstr;
+char *rstr;
+Display *display;
+Atom type_ret;
+int format_ret;
+unsigned long nitems_ret;
+unsigned long bytes_after_ret;
+
+ root0 = XRootWindow(Dsp, 0);
+
+ if(XGetWindowProperty(Dsp, root0, XA_RESOURCE_MANAGER, 0L, -1L, False,
+ XA_STRING, &type_ret, &format_ret, &nitems_ret,
+ &bytes_after_ret, &rmstr) != Success) {
+ delete("XGetWindowProperty did not return Success");
+ return;
+ }
+ if(type_ret != XA_STRING || format_ret != 8 ||
+ nitems_ret == 0 || rmstr == (unsigned char *)NULL) {
+ trace("nitems was %ld", nitems_ret);
+ trace("type was %d", type_ret);
+ trace("format was %d", format_ret);
+ rmstr = (unsigned char *)NULL;
+ }
+ trace("Config.display is %s", config.display);
+ display = XOpenDisplay(config.display);
+
+ if(display == (Display *) NULL) {
+ report("%s() returned NULL with argument %s.", TestName, config.display);
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ rstr = XResourceManagerString(display);
+
+ if(rmstr == (unsigned char *)NULL) {
+ if(rstr != (char *)NULL && *rstr != '\0') {
+ report("After calling %s", TestName);
+ report("XResourceManagerString returned a value :");
+ report(" \"%s\",", rstr);
+ report("although the RESOURCE_MANAGER property of the");
+ report("root window of screen zero was unset.");
+ FAIL;
+ } else
+ CHECK;
+ } else {
+ if((rstr == (char *) NULL) || (strcmp(rstr, rmstr) != 0)) {
+ report("After calling %s", TestName);
+ report("XResourceManagerString returned a value :");
+ report(" \"%s\",", rstr == (char *) NULL ? "<NULL_POINTER>" : rstr);
+ report("instead of:");
+ report(" \"%s\".", rmstr);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XCloseDisplay(display);
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When a call to xname is not successful, then it returns NULL.
+>>STRATEGY
+Open a display with hostname as the argument using xname.
+Verify that the call returned NULL.
+>>CODE
+Display *display;
+
+ display_name = config.displayhost;
+ display = XCALL;
+
+ if(display != (Display *) NULL) {
+ report("%s() did not return NULL with argument \"%s\".", TestName, display_name);
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH02/plnsofscrn/plnsofscrn.m b/xc/test/xsuite/xtest/tset/CH02/plnsofscrn/plnsofscrn.m
new file mode 100644
index 000000000..84e5e526b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/plnsofscrn/plnsofscrn.m
@@ -0,0 +1,46 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XPlanesOfScreen CH02
+int
+XPlanesOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the depth of the root window of the screen
+.A screen .
+>>STRATEGY
+Obtain the depth of the root window of the default screen using xname.
+Obtain the depth of the root window of the default screen using XGetWindowAttributes.
+Verify that the depths are the same.
+>>CODE
+int plns;
+XWindowAttributes atts;
+
+ plns = XCALL;
+ if(XGetWindowAttributes(Dsp, RootWindowOfScreen(screen), &atts) == 0) {
+ delete("XGetWindowAttributes() returned zero.");
+ return;
+ } else
+ CHECK;
+
+ if(atts.depth != plns) {
+ report("Depth of the default root window was %d instead of %d.", atts.depth, plns);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/prtclrvsn/prtclrvsn.m b/xc/test/xsuite/xtest/tset/CH02/prtclrvsn/prtclrvsn.m
new file mode 100644
index 000000000..287c7b612
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/prtclrvsn/prtclrvsn.m
@@ -0,0 +1,34 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XProtocolRevision CH02
+int
+XProtocolRevision(display)
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname returns the minor protocol revision number of the X server.
+>>STRATEGY
+Obtain the minor protocol revision using xname.
+>>CODE
+int rev;
+
+ rev = XCALL;
+ if(rev != config.protocol_revision) {
+ report("%s() returned %d instead of %d.", TestName, rev, config.protocol_revision);
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH02/prtclvrsn/prtclvrsn.m b/xc/test/xsuite/xtest/tset/CH02/prtclvrsn/prtclvrsn.m
new file mode 100644
index 000000000..0fcb56ea8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/prtclvrsn/prtclvrsn.m
@@ -0,0 +1,37 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XProtocolVersion CH02
+int
+XProtocolVersion(display)
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname returns the major version number (11) of the X protocol associated with
+the display specified by the
+.A display
+argument.
+>>STRATEGY
+Obtain the protocol version of the connection using xname.
+>>CODE
+int version;
+
+ version = XCALL;
+ if(version != config.protocol_version) {
+ report("%s() returned %d instead of %d.",TestName, version, config.protocol_version);
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH02/qlngth/qlngth.m b/xc/test/xsuite/xtest/tset/CH02/qlngth/qlngth.m
new file mode 100644
index 000000000..6e0ad273f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/qlngth/qlngth.m
@@ -0,0 +1,54 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XQLength CH02
+int
+XQLength(display)
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname returns the length of the event queue for connection
+specified by the
+.A display
+argument.
+>>STRATEGY
+Discard all events on the event queue using XSync.
+Put 3 events on the event queue using XPutBackEvent.
+Verify that xname returned 3 events.
+Empty the event queue using XSync.
+>>CODE
+int eventsput;
+int event_count;
+XEvent event;
+
+ XSync(display, True);
+ event.type = MapNotify;
+ eventsput = 0;
+ XPutBackEvent(display, &event), eventsput++;
+ XPutBackEvent(display, &event), eventsput++;
+ XPutBackEvent(display, &event), eventsput++;
+
+ _startcall(display);
+ event_count = XQLength(display);
+ _endcall(display);
+
+ if (event_count != eventsput) {
+ report("Returned %d, expected %d", event_count, eventsput);
+ FAIL;
+ } else
+ PASS;
+
+ XSync(display, True);
diff --git a/xc/test/xsuite/xtest/tset/CH02/rtwdw/rtwdw.m b/xc/test/xsuite/xtest/tset/CH02/rtwdw/rtwdw.m
new file mode 100644
index 000000000..af2927b65
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/rtwdw/rtwdw.m
@@ -0,0 +1,49 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XRootWindow CH02
+Window
+XRootWindow(display, screen_number)
+Display *display = Dsp;
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good A
+A call to xname returns the root window of the screen specified by the
+.A screen_number
+argument.
+>>STRATEGY
+Obtain the attributes of the root window of the default screen using XGetWindowAttributes.
+Obtain the root window attribute of the default screen using xname.
+Verify that the window IDs are the same.
+>>CODE
+XWindowAttributes atts;
+Window rootw;
+
+ if(XGetWindowAttributes(display, DefaultRootWindow(display), &atts) == 0) {
+ delete("XGetWindowAttributes() returned 0.");
+ return;
+ } else
+ CHECK;
+
+ rootw = XCALL;
+
+ if( atts.root != rootw) {
+ report("%s() returned ID %lx instead of %lx.", TestName, (long) rootw, (long) atts.root);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/rtwdwofscr/rtwdwofscr.m b/xc/test/xsuite/xtest/tset/CH02/rtwdwofscr/rtwdwofscr.m
new file mode 100644
index 000000000..4773eac8e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/rtwdwofscr/rtwdwofscr.m
@@ -0,0 +1,40 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XRootWindowOfScreen CH02
+Window
+XRootWindowOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the Window ID of the root window of the screen
+.A screen .
+>>STRATEGY
+Obtain the root window ID of the default display using XDefaultRootWindow.
+Obtain the root window ID of the default screen using xname.
+Verify that the two window IDs are the same.
+>>CODE
+Window srw, drw;
+
+ drw = XDefaultRootWindow(Dsp);
+ srw = XCALL;
+
+ if( drw != srw) {
+ report("%s() did not return the same root window as the associated display.", TestName);
+ report("(0x%lx instead of 0x%lx)", (long) srw, (long) drw);
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH02/scrncnt/scrncnt.m b/xc/test/xsuite/xtest/tset/CH02/scrncnt/scrncnt.m
new file mode 100644
index 000000000..158aae1b9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/scrncnt/scrncnt.m
@@ -0,0 +1,58 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XScreenCount CH02
+int
+XScreenCount(display)
+Display *display = Dsp;
+>>#
+>># COMMENT: Could maybe assume numbering scheme for screen to be 0,1,2...
+>># then try to open each one using XOpenDisplay with a modified
+>># XT_DISPLAY value.
+>>#
+>># Cal 24/7/91
+>># REPLY: This is now done in the appropriate test for XOpenDisplay.
+>># Dave 20/9/91
+>>#
+>>ASSERTION Good A
+A call to xname returns the number of available screens on the server connection
+specified by the
+.A display
+argument.
+>>STRATEGY
+Obtain the number of available screens using xname.
+Verify that the number of screens is that given in parameter XT_SCREEN_COUNT.
+>>CODE
+int scrn;
+int s = config.screen_count;
+
+ if (s < 0) {
+ delete("Parameter XT_SCREEN_COUNT not set.");
+ return;
+ }
+
+ scrn = XCALL;
+ if (scrn != s) {
+ report("%s() returns %d available screen%s.",
+ TestName, scrn, scrn > 1 ? "s" : "");
+ report("Expected %d available screen%s.",
+ s, s > 1 ? "s" : "");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH02/scrnnmbrof/scrnnmbrof.m b/xc/test/xsuite/xtest/tset/CH02/scrnnmbrof/scrnnmbrof.m
new file mode 100644
index 000000000..72fbfc8be
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/scrnnmbrof/scrnnmbrof.m
@@ -0,0 +1,42 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XScreenNumberOfScreen CH02
+int
+XScreenNumberOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the screen number of the screen
+.A screen .
+>>STRATEGY
+Obtain the screen number of the screen using xname.
+Obtain the root window ID of the screen number using XRootWindow.
+Obtain the root window ID of the display using XDefaultRootWindow.
+Verify that the root window IDs are the same.
+>>CODE
+Window sw, dw;
+int sn;
+
+ sn = XCALL;
+ sw = XRootWindow(Dsp, sn);
+ dw = XDefaultRootWindow(Dsp);
+
+ if(sw != dw) {
+ report("%s() returns a screen number whose root window is not the same as that of the associated display.", TestName);
+ report("(0x%lx instead of 0x%lx)", (long) sw, (long) dw);
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH02/scrnofdspl/scrnofdspl.m b/xc/test/xsuite/xtest/tset/CH02/scrnofdspl/scrnofdspl.m
new file mode 100644
index 000000000..9694a72cd
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/scrnofdspl/scrnofdspl.m
@@ -0,0 +1,47 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XScreenOfDisplay CH02
+Screen *
+XScreenOfDisplay(display, screen_number)
+Display *display = Dsp;
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good A
+A call to xname returns a pointer to the
+.S Screen
+structure indicated by the
+.A screen_number
+argument.
+>>STRATEGY
+Obtain the default screen using xname.
+Obtain the root window ID of the default screen using XRootWindowOfScreen.
+Obtain the root window ID of the default display using XDefaultRootWindow.
+Verify that the two IDs are the same.
+>>CODE
+Window drw, srw;
+Screen *scr;
+
+ scr = XCALL;
+ srw = XRootWindowOfScreen(scr);
+ drw = XDefaultRootWindow(display);
+
+ if(drw != srw) {
+ report("%s() returns a screen whose root window is not the same as that of the associated display.",TestName);
+ report("(0x%lx instead of 0x%lx)", (long) srw, (long) drw);
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH02/srvrvndr/srvrvndr.m b/xc/test/xsuite/xtest/tset/CH02/srvrvndr/srvrvndr.m
new file mode 100644
index 000000000..ae3da0493
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/srvrvndr/srvrvndr.m
@@ -0,0 +1,49 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XServerVendor CH02
+char *
+XServerVendor(display)
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname returns a pointer to a null-terminated string that
+identifies the owner of the X server implementation.
+>>STRATEGY
+Obtain the server vendor string using xname.
+Verify that the value is that given in parameter XT_SERVER_VENDOR.
+>>CODE
+char *sv;
+
+ if(!config.server_vendor) {
+ delete("Parameter XT_SERVER_VENDOR not set.");
+ return;
+ }
+
+ sv = XCALL;
+ if(!sv) {
+ report("%s() returned NULL", TestName);
+ FAIL;
+ } else if(strcmp(config.server_vendor, sv)) {
+ report("%s() returns incorrect value for server vendor string",
+ TestName);
+ report("Expected value \"%s\"", config.server_vendor);
+ report("Observed value \"%s\"", sv);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH02/vndrrls/vndrrls.m b/xc/test/xsuite/xtest/tset/CH02/vndrrls/vndrrls.m
new file mode 100644
index 000000000..e032d8b43
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/vndrrls/vndrrls.m
@@ -0,0 +1,34 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XVendorRelease CH02
+char *
+XVendorRelease(display)
+Display *display = Dsp;
+>>ASSERTION Good B 1
+A call to xname returns a number related to a vendor's release of the X server.
+>>STRATEGY
+Obtain the value of the vendor's X server release using xname.
+>>CODE
+int vr;
+
+ vr = XCALL;
+ if(vr != config.vendor_release) {
+ report("%s() returned %d instead of %d.", TestName, vr, config.vendor_release);
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH02/wdthmmofsc/wdthmmofsc.m b/xc/test/xsuite/xtest/tset/CH02/wdthmmofsc/wdthmmofsc.m
new file mode 100644
index 000000000..da8effb4d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/wdthmmofsc/wdthmmofsc.m
@@ -0,0 +1,41 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XWidthMMOfScreen CH02
+int
+XWidthMMOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the width in millimeters of the screen
+.A screen .
+>>STRATEGY
+Obtain the width of the screen in millimeters using xname.
+Verify that the value is that given in parameter XT_WIDTH_MM.
+>>CODE
+int wmm;
+
+ wmm = XCALL;
+ if(wmm != config.width_mm) {
+ report("%s() returns incorrect value for screen width",
+ TestName);
+ report("Expected value 0x%lx; Observed value 0x%lx",
+ config.width_mm, wmm);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH02/wdthofscrn/wdthofscrn.m b/xc/test/xsuite/xtest/tset/CH02/wdthofscrn/wdthofscrn.m
new file mode 100644
index 000000000..17c454594
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/wdthofscrn/wdthofscrn.m
@@ -0,0 +1,47 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XWidthOfScreen CH02
+int
+XWidthOfScreen(screen)
+Screen *screen = DefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the width in pixels of the screen
+.A screen .
+>>STRATEGY
+Obtain the Width of the root window using XGetWindowAttributes.
+Obtain the pixel width of the screen using xname.
+Verify that the two numbers are the same.
+>>CODE
+XWindowAttributes atts;
+int width;
+
+ if(XGetWindowAttributes(Dsp, DefaultRootWindow(Dsp), &atts) == 0) {
+ report("XGetWindowAttributes() returned zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ width = XCALL;
+
+ if(width != atts.width) {
+ report("%s() returned %d instead of %d.", TestName, width, atts.width);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH02/whtpxl/whtpxl.m b/xc/test/xsuite/xtest/tset/CH02/whtpxl/whtpxl.m
new file mode 100644
index 000000000..99cfcb7d0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/whtpxl/whtpxl.m
@@ -0,0 +1,45 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XWhitePixel CH02
+unsigned long
+XWhitePixel(display, screen_number)
+Display *display = Dsp;
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good A
+A call to xname returns the white pixel value for
+>># comments subsequent to the review period resulted in the extra words ...
+the default colourmap of
+the screen
+.A screen_number .
+>>STRATEGY
+Obtain the value of the white pixel using xname.
+Verify that the value is that given in parameter XT_WHITE_PIXEL.
+>>CODE
+unsigned long pixl;
+
+ pixl = XCALL;
+ if(pixl != config.white_pixel) {
+ report("%s() returns incorrect value for white pixel",
+ TestName);
+ report("Expected value 0x%lx; Observed value 0x%lx",
+ config.white_pixel, pixl);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH02/whtpxlofsc/whtpxlofsc.m b/xc/test/xsuite/xtest/tset/CH02/whtpxlofsc/whtpxlofsc.m
new file mode 100644
index 000000000..34e56f66c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH02/whtpxlofsc/whtpxlofsc.m
@@ -0,0 +1,44 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>SET macro
+>>TITLE XWhitePixelOfScreen CH02
+unsigned long
+XWhitePixelOfScreen(screen)
+Screen *screen = XDefaultScreenOfDisplay(Dsp);
+>>ASSERTION Good A
+A call to xname returns the white pixel value of
+>># comments subsequent to the review period resulted in the extra words ...
+the default colourmap of
+the screen
+.A screen .
+>>STRATEGY
+Obtain the white pixel value of the default screen using xname.
+Verify that the value is that given in parameter XT_WHITE_PIXEL.
+>>CODE
+unsigned long pixl;
+
+ pixl = XCALL;
+ if(pixl != config.white_pixel) {
+ report("%s() returns incorrect value for white pixel",
+ TestName);
+ report("Expected value 0x%lx; Observed value 0x%lx",
+ config.white_pixel, pixl);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH03/Makefile b/xc/test/xsuite/xtest/tset/CH03/Makefile
new file mode 100644
index 000000000..3668d1c21
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/Makefile
@@ -0,0 +1,138 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+#
+# This Makefile can be used to compile all the tests in this
+# section of the X test suite in such a way that they are all links to
+# a single executable file. This normally allows a considerable
+# reduction in the disc space requirements for the X test suite
+# when fully built.
+#
+# There are two ways this can be done:
+# 1) Using the TET. Execute the command:
+# tcc -b -s link_exec xtest linkbuild
+# in the directory $TET_ROOT/xtest.
+# This will execute the TET build tool (which is normally pmake)
+# in the top level directory of each section of the test suite
+# (including this directory).
+#
+# 2) Directly without using the TET. Execute the command:
+# pmake
+# in this directory.
+#
+# For more details, refer to the User Guide
+#
+
+CAT=cat
+
+ALLTESTS=Tests
+
+TESTOFILES=\
+chngwdwatt.o \
+cnfgrwdw.o \
+crcltsbws.o \
+crcltsbwsd.o \
+crcltsbwsu.o \
+crtsmplwdw.o \
+crtwdw.o \
+dstrysbws.o \
+dstrywdw.o \
+lwrwdw.o \
+mprsd.o \
+mpsbws.o \
+mpwdw.o \
+mvrszwdw.o \
+mvwdw.o \
+rstckwdws.o \
+rswdw.o \
+rszwdw.o \
+stwdwbg.o \
+stwdwbgpxm.o \
+stwdwbrdr.o \
+stwdwbrdrp.o \
+stwdwbrdrw.o \
+trnsltcrdn.o \
+unmpsbws.o \
+unmpwdw.o \
+vslidfrmvs.o
+
+LINKOFILE=linktbl.o
+OFILES = $(TESTOFILES) $(LINKOFILE)
+
+DIRLIST=\
+chngwdwatt \
+cnfgrwdw \
+crcltsbws \
+crcltsbwsd \
+crcltsbwsu \
+crtsmplwdw \
+crtwdw \
+dstrysbws \
+dstrywdw \
+lwrwdw \
+mprsd \
+mpsbws \
+mpwdw \
+mvrszwdw \
+mvwdw \
+rstckwdws \
+rswdw \
+rszwdw \
+stwdwbg \
+stwdwbgpxm \
+stwdwbrdr \
+stwdwbrdrp \
+stwdwbrdrw \
+trnsltcrdn \
+unmpsbws \
+unmpwdw \
+vslidfrmvs
+
+all: subdirs test
+
+test:$P $(OFILES) $(LIBS) $(TCM)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(TCM) $(LIBS) $(SYSLIBS)
+ $(CAT) test > $(ALLTESTS)
+ $(RM) test
+
+subdirs:
+ if [ ! -f $(ALLTESTS) ]; then $(CAT) /dev/null > $(ALLTESTS); \
+ chmod a+x $(ALLTESTS); else : ; fi
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then \
+ (cd $$i; echo Compiling in $$i; $(TET_BUILD_TOOL) linkexec); \
+ fi; \
+ done
+
+# The xtestlib is made if it doesn't exist
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
+clean: cletests clesubdirs
+
+cletests:
+ $(RM) test $(OFILES) $(ALLTESTS) core
+
+clesubdirs:
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then (cd $$i; $(TET_CLEAN_TOOL) ); fi; done
+
+clobber: clean
diff --git a/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a13.dat b/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a13.dat
new file mode 100644
index 000000000..1721f0068
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a13.dat
@@ -0,0 +1,3604 @@
+! $XConsortium$
+100 90 32
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+18,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+18,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+18,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+18,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a17.dat b/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a17.dat
new file mode 100644
index 000000000..3218880c4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a17.dat
@@ -0,0 +1,99 @@
+! $XConsortium$
+100 90 32
+17a3,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+4d,0
+3,1
+4,0
+3,1
+4,0
+3,1
+4,0
+3,1
+4d,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+116,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+4d,0
+2,1
+14,0
+2,1
+4d,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+116,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+4d,0
+2,1
+14,0
+2,1
+4d,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+b6,0
+1
+6,0
+1
+6,0
+1
+51,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+39f,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a2.dat b/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a2.dat
new file mode 100644
index 000000000..87cf6311a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a2.dat
@@ -0,0 +1,79 @@
+! $XConsortium$
+100 90 32
+17a2,0
+18,1
+4c,0
+18,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+2,1
+14,0
+2,1
+4c,0
+18,1
+4c,0
+18,1
+39e,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a3.dat b/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a3.dat
new file mode 100644
index 000000000..3218880c4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/a3.dat
@@ -0,0 +1,99 @@
+! $XConsortium$
+100 90 32
+17a3,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+4d,0
+3,1
+4,0
+3,1
+4,0
+3,1
+4,0
+3,1
+4d,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+116,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+4d,0
+2,1
+14,0
+2,1
+4d,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+116,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+4d,0
+2,1
+14,0
+2,1
+4d,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+b6,0
+1
+6,0
+1
+6,0
+1
+51,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+39f,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/chngwdwatt.m b/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/chngwdwatt.m
new file mode 100644
index 000000000..7ba8d17b2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/chngwdwatt/chngwdwatt.m
@@ -0,0 +1,1143 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XChangeWindowAttributes CH03
+void
+
+Display *display = Dsp;
+Window w = DRW(Dsp);
+unsigned long valuemask = 0;
+XSetWindowAttributes *attributes = &Atts;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>EXTERN
+
+static XSetWindowAttributes Atts;
+static Window parent;
+static int x = 50;
+static int y = 60;
+static unsigned int border_width = 2;
+static int depth;
+static Visual *visual;
+
+>>ASSERTION Good A
+A call to xname changes the window attributes specified in
+.A valuemask
+to the values in the
+.A attributes
+structure.
+>>STRATEGY
+Create window with default attributes.
+Change the window attributes to non-default values.
+Get the window attributes with XGetWindowAttributes.
+Verify that they are the same as the ones set.
+>>EXTERN
+#include "cursorfont.h"
+>>CODE
+XWindowAttributes getatts;
+Colormap cm;
+Cursor curs;
+int n;
+
+ cm = XCreateColormap(display, DRW(display), DefaultVisual(display, DefaultScreen(display)), AllocNone);
+ curs = XCreateFontCursor(display, XC_coffee_mug);
+
+ attributes->bit_gravity = SouthEastGravity;
+ attributes->win_gravity = EastGravity;
+ attributes->backing_store = WhenMapped;
+ attributes->backing_planes = 0xaaaaaaaa;
+ attributes->backing_pixel = 1;
+ attributes->save_under = True;
+ attributes->event_mask = PropertyChangeMask;
+ attributes->do_not_propagate_mask = KeyPressMask;
+ attributes->override_redirect = True;
+ attributes->colormap = cm;
+ attributes->cursor = curs;
+
+ valuemask = CWBitGravity|CWWinGravity|CWBackingStore|CWBackingPlanes|
+ CWBackingPixel|CWSaveUnder|CWEventMask|CWDontPropagate|
+ CWOverrideRedirect|CWColormap|CWCursor;
+
+ w = makeinout( DRW(display), (Visual *) CopyFromParent,
+ CopyFromParent, XCWA_NORMAL);
+
+ XCALL;
+
+ XGetWindowAttributes(display, w, &getatts);
+ if (isdeleted())
+ return;
+
+ XDestroyWindow(display, w);
+
+ n = checkatts(attributes, &getatts, valuemask);
+ if (n > 0) {
+ report("There %s %d incorrect attribute%s",
+ (n>1)?"were":"was", n, (n>1)?"s":"");
+ FAIL;
+ } else if (n < 0) {
+ /* already reported a path check error in checkatts */
+ return;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>EXTERN
+>># This is a copy of the identical function in crtwdw.m
+>># Perhaps it should be in a library (or in commattr.mc)
+>># stuart
+
+static int
+checkatts(setatts, getatts, vmask)
+XSetWindowAttributes *setatts;
+XWindowAttributes *getatts;
+unsigned long vmask;
+{
+int pass = 0, fail = 0;
+
+ /*
+ * Maybe we should alway check everything??? (No vmask)
+ */
+ if ((vmask&CWBitGravity) && setatts->bit_gravity != getatts->bit_gravity) {
+ report("bit_gravity got %s, expected %s",
+ bitgravityname(getatts->bit_gravity),
+ bitgravityname(setatts->bit_gravity));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWWinGravity) && setatts->win_gravity != getatts->win_gravity) {
+ report("window_gravity got %s, expected %s",
+ wingravityname(getatts->win_gravity),
+ wingravityname(setatts->win_gravity));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWBackingStore) && setatts->backing_store != getatts->backing_store) {
+ report("backing_store got %s, expected %s",
+ backingstorename(getatts->backing_store),
+ backingstorename(setatts->backing_store));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWBackingPlanes) && setatts->backing_planes != getatts->backing_planes) {
+ report("backing_planes got 0x%x, expected 0x%x",
+ getatts->backing_planes,
+ setatts->backing_planes);
+ FAIL;
+ } else
+ CHECK;
+
+ if (setatts->backing_pixel != getatts->backing_pixel) {
+ report("backing_pixel got 0x%x, expected 0x%x",
+ getatts->backing_pixel,
+ setatts->backing_pixel);
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWSaveUnder) && setatts->save_under != getatts->save_under) {
+ report("save_under got %s, expected %s",
+ boolname(getatts->save_under),
+ boolname(setatts->save_under));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWEventMask) && setatts->event_mask != getatts->your_event_mask) {
+ report("event_mask got %s, expected %s",
+ eventmaskname(getatts->your_event_mask),
+ eventmaskname(setatts->event_mask));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWDontPropagate) && setatts->do_not_propagate_mask != getatts->do_not_propagate_mask) {
+ report("do_not_propagate_mask got %s, expected %s",
+ eventmaskname(getatts->do_not_propagate_mask),
+ eventmaskname(setatts->do_not_propagate_mask));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWOverrideRedirect) && setatts->override_redirect != getatts->override_redirect) {
+ report("override_redirect got %s, expected %s",
+ boolname(getatts->override_redirect),
+ boolname(setatts->override_redirect));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWColormap) && setatts->colormap != getatts->colormap) {
+ report("colormap got 0x%x, expected 0x%x",
+ getatts->colormap,
+ setatts->colormap);
+ FAIL;
+ } else
+ CHECK;
+
+ if (fail == 0 && pass == 10)
+ return(0);
+ else {
+ if (fail)
+ return(fail);
+ else
+ delete("Path check error in checkatts");
+ }
+ return(-1);
+}
+
+>>ASSERTION Good A
+When the background is changed, then the window contents do not change.
+>># Until the next Expose event? kieron
+>>#
+>># I am assuming that PIXCHECK does not cause such an event.
+>># stuart
+>>STRATEGY
+Create a window.
+Set the background-pixmap
+Map window over a plain background.
+Change background-pixmap to a patterned tile.
+Verify that background has not changed.
+>>CODE
+XEvent event;
+XVisualInfo *vp;
+
+ for(resetvinf(VI_WIN); nextvinf(&vp); ) {
+ Pixmap pm;
+ parent = makedrawable(display, vp);
+
+ w = makeinout(parent, (Visual *)CopyFromParent,
+ CopyFromParent, XCWA_NORMAL);
+
+ XSelectInput(display, w, ExposureMask);
+ pm = makepixm(display,vp);
+ XSetWindowBackgroundPixmap(display, w, pm);
+ XMapWindow(display, w);
+ /* Wait for window to be exposed */
+ XWindowEvent(display,w,ExposureMask, &event);
+
+ valuemask = CWBackPixmap;
+ attributes->background_pixmap = maketile(display, w);
+
+ XCALL;
+
+ if ( isdeleted() )
+ continue;
+
+ PIXCHECK(display, parent);
+
+ }
+
+ if (getevent(display, &event) != 0)
+ delete("Unexpected event: %s", eventname(event.type));
+ else
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When the border is changed
+>># What does the next bit mean?
+>># Answer: The border tile orgin == backround tile origin so changing
+>># the latter (to the parent's tile origin iff background_pixmap
+>># == ParentRelative, else to the window's origin) may cause
+>># may cause a retiling. kieron
+or the background set such that the border tile origin changes,
+then the border is repainted.
+>>STRATEGY
+Create a window.
+Set the border-pixmap
+Map window over a patterned background.
+Change border-pixmap
+Verify that border has changed by pixel checking.
+Create a window, with no border, and a tiled background.
+Create a child window, with a parent relative background and a border pixmap.
+Map windows.
+Save image.
+Change the child window background causing the border pixmap to be retiled
+because the border_tile origin will change.
+Verify the border changed.
+>>CODE
+struct area child_pos;
+unsigned int tile_width, tile_height, t3_border_width;
+Pixmap bpm, tpm;
+XVisualInfo *vp;
+XImage *i_before;
+
+ t3_border_width = 10;
+
+/* This tests the border changing, but not the second condition */
+ for(resetvinf(VI_WIN); nextvinf(&vp); ) {
+ parent = makedrawable(display,vp);
+
+ w = makeinout(parent, (Visual *)CopyFromParent,
+ CopyFromParent, XCWA_NORMAL);
+
+ XMapWindow(display,w);
+ bpm = makepixm(display, vp);
+ XSetWindowBorderPixmap(display, w, bpm);
+
+ attributes->border_pixmap = maketile(display,parent);
+ valuemask = CWBorderPixmap;
+
+ XCALL;
+
+ if ( isdeleted() )
+ continue;
+
+ PIXCHECK(display, parent);
+
+/* Now check change of background causes border retiling */
+
+/* Make a 1 border width parent, with tpm as the tile */
+
+ parent = makewin(display, vp);
+ XUnmapWindow(display, parent);
+
+ tpm = maketile(display, parent);
+ getsize(display, tpm, &tile_width, &tile_height);
+
+ valuemask = CWBackPixmap;
+ attributes->background_pixmap = tpm;
+ w = parent;
+ XCALL;
+
+ XMapWindow(display, parent);
+
+ /*This numerical offset is the amount we expect the border pm to move by */
+ child_pos.x = tile_width + 2;
+ child_pos.y = tile_height+ 2;
+
+ while(child_pos.x <= t3_border_width) {
+ child_pos.x += tile_width;
+ }
+ while(child_pos.y <= t3_border_width) {
+ child_pos.y += tile_height;
+ }
+ child_pos.width = 30;
+ child_pos.height= 30;
+
+ w = crechild(display, parent, &child_pos);
+ XUnmapWindow(display, w);
+ XSetWindowBorderWidth(display, w, t3_border_width);
+ valuemask = CWBorderPixmap | CWBackPixmap;
+ attributes->background_pixmap = ParentRelative;
+ attributes->border_pixmap = tpm;
+
+ XCALL;
+ XMapWindow(display, w);
+ XSync(display,True);
+
+ i_before = savimage(display, parent);
+ valuemask = CWBackPixmap;
+ attributes->background_pixmap = tpm;
+ XCALL;
+/* Window contents are expected to have changed */
+ if(diffsavimage(display, parent, i_before))
+ {
+ report("Changing the border tile origin by changing");
+ report("the background pixmap from ParentRelative");
+ report("did not cause a border retiling.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ }
+
+ CHECKPASS(nvinf()*2);
+>>ASSERTION Good B 1
+When the background-pixmap attribute of a root window is set to
+.S None ,
+then the default background pixmap is restored.
+>>ASSERTION Good B 1
+When the background-pixmap attribute of a root window is set to
+.S ParentRelative ,
+then the default background pixmap is restored.
+>>ASSERTION Good B 1
+When the border-pixmap attribute of a root window is set to
+.S CopyFromParent ,
+then the default border pixmap is restored.
+>>ASSERTION Good A
+When the win-gravity attribute is changed, then the current position of the
+window is not changed.
+>>STRATEGY
+Create window
+Ascertain window position by calling XGetWindowAttributes
+Change win-gravity by calling XChangeWindowAttributes
+Ascertain window position by calling XGetWindowAttributes
+Verify window position is unchanged.
+>>CODE
+XWindowAttributes before,after;
+
+ w = makeinout((Drawable)None, (Visual *)CopyFromParent,
+ CopyFromParent, XCWA_GRAVITY);
+
+ XGetWindowAttributes(display, w, &before);
+
+ valuemask = CWWinGravity;
+ attributes->win_gravity = SouthWestGravity;
+
+ XCALL;
+
+ XGetWindowAttributes(display, w, &after);
+
+ if( (before.x != after.x) || (before.y != before.y) )
+ {
+ report("Changing win_gravity changed window positon");
+ report("Before: x=%d y=%d", before.x, before.y);
+ report("After : x=%d y=%d", after.x, after.y);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When the colormap attribute of a window is changed, then a
+.S ColormapNotify
+event is generated.
+>>STRATEGY
+Create window
+Select ColormapNotify event
+Create Colormap for the window
+Change the window colormap by calling xname
+Verify that a ColormapNotify event was generated
+>>CODE
+Colormap cm;
+XEvent ev;
+int events;
+
+ w = makeinout((Drawable)None, (Visual *)CopyFromParent,
+ CopyFromParent, XCWA_NORMAL);
+
+ XSelectInput(display, w, ColormapChangeMask);
+
+ cm = makecolmap(display,
+ XDefaultVisual( display, XDefaultScreen(display) ),
+ AllocNone);
+
+ valuemask = CWColormap;
+ attributes->colormap = cm;
+
+ XCALL;
+
+ events = getevent(display, &ev);
+
+ if (events != 1)
+ {
+ report("Expected one event on the event queue (ColormapNotify)");
+ report("Got: %d events.", events);
+ report("The first event was of type %s", eventname(ev.type));
+ FAIL;
+ }
+ else
+ if( ev.type != ColormapNotify )
+ {
+ report("Unexpected event received upon changing Colormap");
+ report("Expecting: ColormapNotify");
+ report("Received: %s", eventname(ev.type));
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+>># Tested elsewhere, in Chapter 8 I believe. Kieron.
+>>#
+>># It is tested elsewhere but only for XSelectInput. I guess its
+>># important enough that it should be tested here too.
+>># The wording used in XSelectInput is better in that it gets rid of the
+>># word "can" and says what actually happens, but it would need altering
+>># for use here. Here it is anyway :
+>>#
+>>#When multiple clients make a call to xname
+>>#requesting the same event on the same window
+>>#and
+>>#that window is the event window for the requested event,
+>>#then the event is reported to each client.
+>># Dave
+>># Also there are assertions for XSelectInput for the three that should
+>># give errors -but again we need to keep those here (they're all in one
+>># assertion at the moment, that doesn't really matter I suppose.)
+>>#
+>>#Multiple clients can select the same events on the same window
+>>#apart from the event masks
+>>#.S SubstructureRedirectMask ,
+>>#.S ResizeRedirectMask ,
+>>#and
+>>#.S ButtonPressMask .
+>>#>>>
+When more than one client sets a mask other than
+.S SubstructureRedirectMask ,
+.S ResizeRedirectMask ,
+and
+.S ButtonPressMask
+in the event-mask attribute, then the selected events are delivered
+to each such client.
+>>STRATEGY
+Create client1.
+Create window with client1.
+Select MapNotify events with client1 on this window.
+Create client2.
+Select MapNotify events with client2 on this window.
+Map window.
+Verify that client1 received a single MapNotify event for this window.
+Verify that client1 received no other events.
+Verify that client2 received a single MapNotify event for this window.
+Verify that client2 received no other events.
+>>CODE
+int num;
+Display *client1;
+Display *client2;
+XEvent event;
+
+/* Create client1. */
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create window with client1. */
+ w = mkwin(client1, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select MapNotify events with client1 on this window. */
+ valuemask = CWEventMask;
+ attributes->event_mask = StructureNotifyMask;
+ BASIC_STARTCALL(client1);
+ XChangeWindowAttributes(client1, w, valuemask, attributes);
+ BASIC_ENDCALL(client1, Success);
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Select MapNotify events with client2 on this window. */
+ valuemask = CWEventMask;
+ attributes->event_mask = StructureNotifyMask;
+ BASIC_STARTCALL(client2);
+ XChangeWindowAttributes(client2, w, valuemask, attributes);
+ BASIC_ENDCALL(client2, Success);
+/* Map window. */
+ XSync(client1, True);
+ XSync(client2, True);
+ XMapWindow(client1, w);
+ XSync(client1, False);
+ XSync(client2, False);
+/* Verify that client1 received a single MapNotify event for this window. */
+
+ if((num = getevent(client1, &event)) == 0)
+ {
+ report("No events were delivered to client1.");
+ report("Expecting a single MapNotify event.");
+ FAIL;
+ }
+ else
+ if (event.type != MapNotify)
+ {
+ report("Selected event was not delivered to client1.");
+ report("Delivered event was: %s", eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that client1 received no other events. */
+ if (num > 1) {
+ report("Unexpected events were delivered to client1.");
+ report("Expecting a single MapNotify event.");
+ report("Got %d events", num);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that client2 received a single MapNotify event for this window. */
+ if((num = getevent(client2, &event)) == 0)
+ {
+ report("No events were delivered to client2.");
+ report("Expecting a single MapNotify event.");
+ FAIL;
+ }
+ else
+ if (event.type != MapNotify)
+ {
+ report("Selected event was not delivered to client2.");
+ report("Delivered event was: %s", eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that client2 received no other events. */
+ if (num > 1) {
+ report("Unexpected events were delivered to client2.");
+ report("Expecting a single MapNotify event.");
+ report("Got %d events", num);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(6);
+>>ASSERTION Good A
+When the event-mask attribute is changed, then the event-mask attribute
+does not change for other clients.
+>>STRATEGY
+Create client1.
+Create window with client1.
+Select NoEventMask events with client1 on this window.
+Call XGetWindowAttributes to get event mask for client1 for window.
+Verify event mask is as expected.
+Create client2.
+Select ALLEVENTS events with client2 on this window.
+Call XGetWindowAttributes to get event mask for client2 for window.
+Verify event mask is as expected.
+Call XGetWindowAttributes to get event mask for client1 for window.
+Verify event mask has not changed.
+Select KeyPressMask events with client1 on this window.
+Call XGetWindowAttributes to get event mask for client1 for window.
+Verify event mask is as expected.
+Call XGetWindowAttributes to get event mask for client2 for window.
+Verify event mask has not changed.
+>>CODE
+Display *client1;
+Display *client2;
+XWindowAttributes attrs;
+
+/* Create client1. */
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create window with client1. */
+ w = mkwin(client1, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select NoEventMask events with client1 on this window. */
+ valuemask = CWEventMask;
+ attributes->event_mask = NoEventMask;
+ display = client1;
+
+ XCALL;
+
+/* Call XGetWindowAttributes to get event mask for client1 for window. */
+ if (!XGetWindowAttributes(client1, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask is as expected. */
+ if (attrs.your_event_mask != NoEventMask) {
+ delete("Unexpected event mask value.");
+ return;
+ }
+ else
+ CHECK;
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Select ALLEVENTS events with client2 on this window. */
+ valuemask = CWEventMask;
+ attributes->event_mask = ALLEVENTS;
+ display = client2;
+
+ XCALL;
+
+/* Call XGetWindowAttributes to get event mask for client2 for window. */
+ if (!XGetWindowAttributes(client2, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask is as expected. */
+ if (attrs.your_event_mask != ALLEVENTS) {
+ delete("Unexpected event mask value.");
+ return;
+ }
+ else
+ CHECK;
+/* Call XGetWindowAttributes to get event mask for client1 for window. */
+ if (!XGetWindowAttributes(client1, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask has not changed. */
+ if (attrs.your_event_mask != NoEventMask) {
+ report("Event mask incorrect.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Select KeyPressMask events with client1 on this window. */
+ valuemask = CWEventMask;
+ attributes->event_mask = KeyPressMask;
+ display = client1;
+
+ XCALL;
+
+/* Call XGetWindowAttributes to get event mask for client1 for window. */
+ if (!XGetWindowAttributes(client1, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask is as expected. */
+ if (attrs.your_event_mask != KeyPressMask) {
+ delete("Unexpected event mask value.");
+ return;
+ }
+ else
+ CHECK;
+/* Call XGetWindowAttributes to get event mask for client2 for window. */
+ if (!XGetWindowAttributes(client2, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask has not changed. */
+ if (attrs.your_event_mask != ALLEVENTS) {
+ report("Event mask incorrect.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(12);
+
+>>ASSERTION Good B 1
+When the cursor attribute of a root window is changed to
+.S None ,
+then the default cursor is restored.
+>>STRATEGY
+If extended testing is required:
+ If the server supports two screens with the same default cursor:
+ Set the root window cursor to a non-default cursor.
+ Verify that the cursor was set correctly.
+ Warp the pointer into the root window.
+ Verify that the current cursor is that of the root window.
+ Warp the pointer to the alternate root window.
+ Verify that the current cursor is not the same as that of the default root window.
+ Reset the cursor of the root window to the default cursor using xname.
+ Verify that the current cursor is the same as that of the default root window.
+ Otherwise :
+ Set the root window cursor to a non-default cursor.
+ Verify that the cursor was set correctly.
+ Warp the pointer to the root window.
+ Verify that the current cursor is that of the root window.
+ Reset the cursor of the root window to the default cursor using xname.
+ Verify that the root window cursor is no longer the non-default cursor.
+>>CODE
+Window altroot;
+Cursor cursor;
+Bool samedefcursor;
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+
+ if(config.alt_screen != -1) {
+ (void) warppointer(display, DRW(display), 0,0);
+ altroot = RootWindow(display, config.alt_screen);
+ samedefcursor = spriteiswin(display, altroot);
+ }
+
+ /* If the server supports two screens with the same default cursor: */
+ if(config.alt_screen != -1 && samedefcursor) {
+
+ /* Set the root window cursor to a non-default cursor. */
+ cursor = makecur(display);
+ w = DRW(display);
+ XDefineCursor(display, w, cursor);
+
+ /* Verify that the cursor was set correctly. */
+ if(curofwin(display, cursor, w) == False) {
+ delete("XDefineCursor() did not set the root window's cursor correctly.");
+ return;
+ } else
+ CHECK;
+
+ /* Warp the pointer into the root window. */
+ (void) warppointer(display, w, 0,0);
+
+ /* Verify that the current cursor is that of the root window. */
+ if(spriteiswin(display, w) == False) {
+ delete("Current cursor is not that of the root window.");
+ return;
+ } else
+ CHECK;
+
+ /* Warp the pointer to the alternate root window. */
+ (void) warppointer(display, altroot, 0,0);
+
+ /* Verify that the current cursor is not the same as that of the default root window. */
+ if(spriteiswin(display, DRW(display)) != False) {
+ delete("The alternate root window's cursor was not set to the default cursor.");
+ return;
+ } else
+ CHECK;
+
+ /* Reset the cursor of the root window to the default cursor using xname. */
+ valuemask = CWCursor;
+ attributes->cursor = None;
+ XCALL;
+
+ /* Verify that the current cursor is the same as that of the default root window. */
+ if(spriteiswin(display, DRW(display)) == False) {
+ report("Root window's cursor was not set to the default cursor.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+ } else {
+
+ /* Otherwise : */
+
+ /* Set the root window cursor to a non-default cursor. */
+ cursor = makecur2(display);
+ w = DRW(display);
+ XDefineCursor(display, w, cursor);
+
+ /* Verify that the cursor was set correctly. */
+ if(curofwin(display, cursor, w) == False) {
+ delete("XDefineCursor() did not set the root window's cursor correctly.");
+ return;
+ } else
+ CHECK;
+
+ /* Warp the pointer to the root window. */
+ (void) warppointer(display, w, 0,0);
+
+ /* Verify that the current cursor is that of the root window. */
+ if(spriteiswin(display, w) == False) {
+ delete("Current cursor is not that of the root window.");
+ return;
+ } else
+ CHECK;
+
+ /* Reset the cursor of the root window to the default cursor using xname. */
+ valuemask = CWCursor;
+ attributes->cursor = None;
+ XCALL;
+
+ /* Verify that the root window cursor is no longer the non-default cursor. */
+ if(curofwin(display, cursor, w) != False) {
+ report("%s() did not set the root window's cursor to the default cursor.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(3);
+ }
+
+>>ASSERTION Good A
+When the do-not-propagate-mask attribute is changed, then the change is
+effective for all clients.
+>>STRATEGY
+Create client1.
+Create window with client1.
+Call XGetWindowAttributes to get do-not-propagate-mask for client1 for window.
+Verify do-not-propagate-mask is as expected.
+Create client2.
+Call XGetWindowAttributes to get do-not-propagate-mask for client2 for window.
+Verify do-not-propagate-mask is as expected.
+Set do-not-propagate-mask to KeyPressMask events with client1 on this window.
+Call XGetWindowAttributes to get do-not-propagate-mask for client1 for window.
+Verify do-not-propagate-mask has changed.
+Call XGetWindowAttributes to get do-not-propagate-mask for client2 for window.
+Verify do-not-propagate-mask has changed.
+>>CODE
+Display *client1;
+Display *client2;
+XWindowAttributes attrs;
+unsigned long dont_all;
+
+ dont_all = ALLEVENTS & (!0xffffc0b0); /* This defines the
+ SETofDEVICEEVENT */
+
+/* Create client1. */
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create window with client1. */
+ w = mkwin(client1, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ valuemask = CWDontPropagate;
+ attributes->do_not_propagate_mask = dont_all;
+ display = client1;
+
+ XCALL;
+
+/* Call XGetWindowAttributes to get do-not-propagate-mask for client1 for window. */
+ if (!XGetWindowAttributes(client1, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify do-not-propagate-mask is as expected. */
+ if (attrs.do_not_propagate_mask != dont_all) {
+ delete("Unexpected do-not-propagate-mask value.");
+ report("Expecting: %s", eventmaskname(dont_all));
+ report("Got: %s", eventmaskname(attrs.do_not_propagate_mask));
+ return;
+ }
+ else
+ CHECK;
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Call XGetWindowAttributes to get do-not-propagate-mask for client2 for window. */
+ if (!XGetWindowAttributes(client2, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify do-not-propagate-mask is as expected. */
+ if (attrs.do_not_propagate_mask != dont_all) {
+ delete("Unexpected do-not-propagate-mask value.");
+ report("Expecting: %s", eventmaskname(dont_all));
+ report("Got: %s", eventmaskname(attrs.do_not_propagate_mask));
+ return;
+ }
+ else
+ CHECK;
+
+/* Set do-not-propagate-mask to KeyPressMask events with client1 on this window. */
+ valuemask = CWDontPropagate;
+ attributes->do_not_propagate_mask = KeyPressMask;
+ display = client1;
+
+ XCALL;
+
+/* Call XGetWindowAttributes to get do-not-propagate-mask for client1 for window. */
+ if (!XGetWindowAttributes(client1, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify do-not-propagate-mask has changed. */
+ if (attrs.do_not_propagate_mask != KeyPressMask) {
+ report("Incorrect do-not-propagate-mask.");
+ report("Expecting: %s", eventmaskname(KeyPressMask));
+ report("Got: %s", eventmaskname(attrs.do_not_propagate_mask));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XGetWindowAttributes to get do-not-propagate-mask for client2 for window. */
+ if (!XGetWindowAttributes(client2, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify do-not-propagate-mask has changed. */
+ if (attrs.do_not_propagate_mask != KeyPressMask) {
+ report("Incorrect do-not-propagate-mask.");
+ report("Expecting: %s", eventmaskname(KeyPressMask));
+ report("Got: %s", eventmaskname(attrs.do_not_propagate_mask));
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(10);
+>>INCLUDE ../crtwdw/commattr.mc
+>>ASSERTION Bad A
+When another client has selected with an event mask
+.S SubstructureRedirectMask ,
+then on a call to xname
+with
+.S SubstructureRedirectMask
+bits set in
+.A event_mask
+a
+.S BadAccess
+error occurs.
+>>STRATEGY
+Create window with client1.
+Select SubstructureRedirectMask event mask with client1 on this window.
+Create client2.
+Call xname with an event_mask set to SubstructureRedirectMask using client2
+on this window.
+Verify that a BadAccess error was generated.
+>>CODE BadAccess
+Display *client1;
+Display *client2;
+
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ } else
+ CHECK;
+
+ w = defwin(client1);
+ XSelectInput(client1, w, SubstructureRedirectMask);
+ XSync(client1, False);
+
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ } else
+ CHECK;
+
+ valuemask = CWEventMask;
+ attributes->event_mask = SubstructureRedirectMask;
+ display = client2;
+
+ XCALL;
+
+ if (geterr() != BadAccess) {
+ report("A call to %s did not generate a BadAccess error", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Bad A
+When another client has selected with an event mask
+.S ResizeRedirectMask ,
+then on a call to xname
+with
+.S ResizeRedirectMask
+bits set in
+.A event_mask
+a
+.S BadAccess
+error occurs.
+>>STRATEGY
+Create client1.
+Create window with client1.
+Select ResizeRedirectMask event mask with client1 on this window.
+Create client2.
+Call xname with an event_mask of ResizeRedirectMask using client2 on
+this window.
+Verify that a BadAccess error was generated.
+>>CODE BadAccess
+Display *client1;
+Display *client2;
+
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ } else
+ CHECK;
+
+ w = defwin(client1);
+ XSelectInput(client1, w, ResizeRedirectMask);
+ XSync(client1, False);
+
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ } else
+ CHECK;
+
+ valuemask= CWEventMask;
+ attributes->event_mask = ResizeRedirectMask ;
+ display = client2;
+ XCALL;
+
+ if (geterr() != BadAccess) {
+ report("A call to %s did not generate a BadAccess error", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Bad A
+When another client has selected with an event mask
+.S ButtonPressMask ,
+then on a call to xname
+with
+.S ButtonPressMask
+bits set in
+.A event_mask
+a
+.S BadAccess
+error occurs.
+>>STRATEGY
+Create client1.
+Create window with client1.
+Select ButtonPressMask event mask with client1 on this window.
+Create client2.
+Call xname with event_mask ButtonPressMask using client2 on this window.
+Verify that a BadAccess error was generated.
+>>CODE BadAccess
+Display *client1;
+Display *client2;
+
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ } else
+ CHECK;
+
+ w = defwin(client1);
+ XSelectInput(client1, w, ButtonPressMask);
+ XSync(client1, False);
+
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ } else
+ CHECK;
+
+ valuemask= CWEventMask;
+ attributes->event_mask = ButtonPressMask ;
+ display = client2;
+ XCALL;
+
+ if (geterr() != BadAccess) {
+ report("A call to %s did not generate a BadAccess error", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a10.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a10.dat
new file mode 100644
index 000000000..2a21034d7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a10.dat
@@ -0,0 +1,857 @@
+! $XConsortium$
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+43,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+6,1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+6,1
+4,4
+1
+1e,5
+24,1
+b,0
+17,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+21,1
+4,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+43,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+6,1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+6,1
+4,4
+1
+1e,5
+24,1
+b,0
+17,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+21,1
+4,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a11.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a11.dat
new file mode 100644
index 000000000..3a676ac7f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a11.dat
@@ -0,0 +1,429 @@
+! $XConsortium$
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+43,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+6,1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+17,0
+6,1
+4,4
+1
+1e,5
+24,1
+b,0
+17,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+24,1
+b,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+21,1
+4,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a12.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a12.dat
new file mode 100644
index 000000000..872d08b66
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a12.dat
@@ -0,0 +1,415 @@
+! $XConsortium$
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+1
+4,4
+29,1
+12,0
+1
+4,2
+1
+1e,3
+1
+4,4
+29,1
+12,0
+1
+4,2
+1
+1e,3
+1
+4,4
+29,1
+12,0
+1
+4,2
+1
+1e,3
+1
+4,4
+29,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+1
+9,5
+24,1
+12,0
+1
+4,2
+1
+1e,3
+1
+9,5
+24,1
+12,0
+1
+4,2
+1
+1e,3
+1
+9,5
+24,1
+12,0
+1
+4,2
+1
+1e,3
+1
+9,5
+24,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+6,1
+1e,3
+1
+e,6
+1f,1
+17,0
+1
+1e,3
+1
+e,6
+1f,1
+17,0
+1
+1e,3
+1
+e,6
+1f,1
+17,0
+1
+1e,3
+1
+e,6
+1f,1
+17,0
+1
+1e,3
+1
+e,6
+1f,1
+17,0
+20,1
+e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a13.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a13.dat
new file mode 100644
index 000000000..b312deea1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a13.dat
@@ -0,0 +1,437 @@
+! $XConsortium$
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+6,1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+6,1
+1e,4
+1
+9,6
+1f,1
+b,0
+12,1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+20,1
+9,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a14.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a14.dat
new file mode 100644
index 000000000..e7d5fa8aa
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a14.dat
@@ -0,0 +1,421 @@
+! $XConsortium$
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+9,3
+43,1
+12,0
+1
+4,2
+1
+9,3
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+9,3
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+9,3
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+9,3
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+9,3
+1
+4,5
+3e,1
+12,0
+6,1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+b,1
+4,5
+1
+1e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a15.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a15.dat
new file mode 100644
index 000000000..b312deea1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a15.dat
@@ -0,0 +1,437 @@
+! $XConsortium$
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+6,1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+6,1
+1e,4
+1
+9,6
+1f,1
+b,0
+12,1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+20,1
+9,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a16.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a16.dat
new file mode 100644
index 000000000..e7d5fa8aa
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a16.dat
@@ -0,0 +1,421 @@
+! $XConsortium$
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+9,3
+43,1
+12,0
+1
+4,2
+1
+9,3
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+9,3
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+9,3
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+9,3
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+9,3
+1
+4,5
+3e,1
+12,0
+6,1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+b,1
+4,5
+1
+1e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a17.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a17.dat
new file mode 100644
index 000000000..dbf1ca11b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a17.dat
@@ -0,0 +1,461 @@
+! $XConsortium$
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+43,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+4,5
+3e,1
+12,0
+6,1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+6,1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+b,0
+12,1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+10,8
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+10,8
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+10,8
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+10,8
+6,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a18.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a18.dat
new file mode 100644
index 000000000..bb5df8e4e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a18.dat
@@ -0,0 +1,411 @@
+! $XConsortium$
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+1
+4,3
+2e,1
+12,0
+1
+1e,2
+1
+4,3
+2e,1
+12,0
+1
+1e,2
+1
+4,3
+2e,1
+12,0
+1
+1e,2
+1
+4,3
+2e,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+1
+9,4
+29,1
+12,0
+1
+1e,2
+1
+9,4
+29,1
+12,0
+1
+1e,2
+1
+9,4
+29,1
+12,0
+1
+1e,2
+1
+9,4
+29,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+1
+e,5
+24,1
+12,0
+1
+1e,2
+1
+e,5
+24,1
+12,0
+1
+1e,2
+1
+e,5
+24,1
+12,0
+1
+1e,2
+1
+e,5
+24,1
+12,0
+1
+1e,2
+33,1
+12,0
+20,1
+13,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+6,1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a19.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a19.dat
new file mode 100644
index 000000000..e7d5fa8aa
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a19.dat
@@ -0,0 +1,421 @@
+! $XConsortium$
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+9,3
+43,1
+12,0
+1
+4,2
+1
+9,3
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+9,3
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+9,3
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+9,3
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+9,3
+1
+4,5
+3e,1
+12,0
+6,1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+b,1
+4,5
+1
+1e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a3.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a3.dat
new file mode 100644
index 000000000..739bf7f64
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a3.dat
@@ -0,0 +1,3561 @@
+! $XConsortium$
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1
+6,0
+1
+9,0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+6,0
+1
+9,0
+b,1
+9,0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+d,0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+9,0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+d,0
+2b,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+10,1
+6,0
+1
+9,0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+6,0
+1
+9,0
+b,1
+9,0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+e,0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+e,0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+d,0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+9,0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+d,0
+1c,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1f,1
+6,0
+1
+9,0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+6,0
+1
+9,0
+b,1
+9,0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+e,0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+e,0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+d,0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+9,0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+d,0
+d,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1
+6,0
+1
+9,0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+6,0
+1
+9,0
+b,1
+9,0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+d,0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+9,0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+d,0
+2b,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+10,1
+6,0
+1
+9,0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+6,0
+1
+9,0
+b,1
+9,0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+e,0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+e,0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+d,0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+9,0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+d,0
+1c,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1f,1
+6,0
+1
+9,0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+6,0
+1
+9,0
+b,1
+9,0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+e,0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+e,0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+d,0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+9,0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+d,0
+d,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1
+6,0
+1
+9,0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+6,0
+1
+9,0
+b,1
+9,0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+d,0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+9,0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+d,0
+2b,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+10,1
+6,0
+1
+9,0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+6,0
+1
+9,0
+b,1
+9,0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+e,0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+e,0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+d,0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+9,0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+d,0
+1c,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1f,1
+6,0
+1
+9,0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+6,0
+1
+9,0
+b,1
+9,0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+e,0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+e,0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+d,0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+9,0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+d,0
+d,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1
+6,0
+1
+9,0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+6,0
+1
+9,0
+b,1
+9,0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+d,0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+9,0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+d,0
+2b,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a6.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a6.dat
new file mode 100644
index 000000000..220d4a893
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a6.dat
@@ -0,0 +1,1276 @@
+! $XConsortium$
+100 90 32
+32a,0
+19,1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+19,1
+1bfd,0
+100 90 32
+32a,0
+1b,1
+49,0
+1b,1
+49,0
+2,1
+17,0
+2,1
+49,0
+2,1
+17,0
+2,1
+49,0
+2,1
+17,0
+2,1
+49,0
+2,1
+17,0
+2,1
+49,0
+2,1
+17,0
+2,1
+49,0
+2,1
+17,0
+2,1
+49,0
+2,1
+17,0
+2,1
+49,0
+2,1
+17,0
+2,1
+49,0
+2,1
+17,0
+2,1
+49,0
+1b,1
+49,0
+1b,1
+1b33,0
+100 90 32
+32a,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+3,1
+17,0
+3,1
+47,0
+3,1
+17,0
+3,1
+47,0
+3,1
+17,0
+3,1
+47,0
+3,1
+17,0
+3,1
+47,0
+3,1
+17,0
+3,1
+47,0
+3,1
+17,0
+3,1
+47,0
+3,1
+17,0
+3,1
+47,0
+3,1
+17,0
+3,1
+47,0
+3,1
+17,0
+3,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+1a69,0
+100 90 32
+32a,0
+1f,1
+45,0
+1f,1
+45,0
+1f,1
+45,0
+1f,1
+45,0
+4,1
+17,0
+4,1
+45,0
+4,1
+17,0
+4,1
+45,0
+4,1
+17,0
+4,1
+45,0
+4,1
+17,0
+4,1
+45,0
+4,1
+17,0
+4,1
+45,0
+4,1
+17,0
+4,1
+45,0
+4,1
+17,0
+4,1
+45,0
+4,1
+17,0
+4,1
+45,0
+4,1
+17,0
+4,1
+45,0
+1f,1
+45,0
+1f,1
+45,0
+1f,1
+45,0
+1f,1
+199f,0
+100 90 32
+32a,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+5,1
+17,0
+5,1
+43,0
+5,1
+17,0
+5,1
+43,0
+5,1
+17,0
+5,1
+43,0
+5,1
+17,0
+5,1
+43,0
+5,1
+17,0
+5,1
+43,0
+5,1
+17,0
+5,1
+43,0
+5,1
+17,0
+5,1
+43,0
+5,1
+17,0
+5,1
+43,0
+5,1
+17,0
+5,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+18d5,0
+100 90 32
+32a,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+a,1
+17,0
+a,1
+39,0
+a,1
+17,0
+a,1
+39,0
+a,1
+17,0
+a,1
+39,0
+a,1
+17,0
+a,1
+39,0
+a,1
+17,0
+a,1
+39,0
+a,1
+17,0
+a,1
+39,0
+a,1
+17,0
+a,1
+39,0
+a,1
+17,0
+a,1
+39,0
+a,1
+17,0
+a,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+39,0
+2b,1
+14e3,0
+100 90 32
+32a,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+11,1
+17,0
+11,1
+2b,0
+11,1
+17,0
+11,1
+2b,0
+11,1
+17,0
+11,1
+2b,0
+11,1
+17,0
+11,1
+2b,0
+11,1
+17,0
+11,1
+2b,0
+11,1
+17,0
+11,1
+2b,0
+11,1
+17,0
+11,1
+2b,0
+11,1
+17,0
+11,1
+2b,0
+11,1
+17,0
+11,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+f5d,0
+100 90 32
+32a,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+1d,1
+17,0
+1d,1
+13,0
+1d,1
+17,0
+1d,1
+13,0
+1d,1
+17,0
+1d,1
+13,0
+1d,1
+17,0
+1d,1
+13,0
+1d,1
+17,0
+1d,1
+13,0
+1d,1
+17,0
+1d,1
+13,0
+1d,1
+17,0
+1d,1
+13,0
+1d,1
+17,0
+1d,1
+13,0
+1d,1
+17,0
+1d,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+13,0
+51,1
+5e5,0
+100 90 32
+32a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+22,1
+17,0
+21,1
+a,0
+22,1
+17,0
+21,1
+a,0
+22,1
+17,0
+21,1
+a,0
+22,1
+17,0
+21,1
+a,0
+22,1
+17,0
+21,1
+a,0
+22,1
+17,0
+21,1
+a,0
+22,1
+17,0
+21,1
+a,0
+22,1
+17,0
+21,1
+a,0
+22,1
+17,0
+21,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+1f4,0
+100 90 32
+32a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+33,1
+17,0
+10,1
+a,0
+33,1
+17,0
+10,1
+a,0
+33,1
+17,0
+10,1
+a,0
+33,1
+17,0
+10,1
+a,0
+33,1
+17,0
+10,1
+a,0
+33,1
+17,0
+10,1
+a,0
+33,1
+17,0
+10,1
+a,0
+33,1
+17,0
+10,1
+a,0
+33,1
+17,0
+10,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+100 90 32
+32a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+100 90 32
+32a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
+a,0
+5a,1
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a7.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a7.dat
new file mode 100644
index 000000000..7f30ce9be
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a7.dat
@@ -0,0 +1,2973 @@
+! $XConsortium$
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+e,3
+3e,1
+12,0
+1
+4,2
+1
+e,3
+3e,1
+12,0
+1
+4,2
+1
+e,3
+3e,1
+12,0
+1
+4,2
+1
+e,3
+3e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+9,4
+3e,1
+12,0
+1
+4,2
+1
+4,3
+1
+9,4
+3e,1
+12,0
+1
+4,2
+1
+4,3
+1
+9,4
+3e,1
+12,0
+1
+4,2
+1
+4,3
+1
+9,4
+3e,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+43,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+4,5
+3e,1
+12,0
+6,1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+6,1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+e,2
+43,1
+12,0
+1
+e,2
+1
+1e,5
+24,1
+12,0
+1
+e,2
+1
+1e,5
+24,1
+12,0
+1
+e,2
+1
+1e,5
+24,1
+12,0
+1
+e,2
+1
+1e,5
+24,1
+12,0
+1
+e,2
+1
+4,5
+3e,1
+12,0
+10,1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+6,1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+e,2
+43,1
+12,0
+1
+e,2
+1
+1e,5
+24,1
+12,0
+1
+e,2
+1
+1e,5
+24,1
+12,0
+1
+e,2
+1
+1e,5
+24,1
+12,0
+1
+e,2
+1
+1e,5
+24,1
+12,0
+1
+e,2
+1
+4,5
+3e,1
+12,0
+10,1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+9,3
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+b,1
+4,5
+1
+1e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+15,1
+1e,6
+1f,1
+17,0
+1
+e,3
+1
+1e,6
+1f,1
+17,0
+1
+e,3
+1
+1e,6
+1f,1
+17,0
+1
+e,3
+1
+1e,6
+1f,1
+17,0
+1
+e,3
+1
+1e,6
+1f,1
+17,0
+10,1
+1e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+52,1
+17,0
+1
+e,3
+3e,1
+17,0
+1
+e,3
+3e,1
+17,0
+1
+e,3
+3e,1
+17,0
+1
+e,3
+3e,1
+17,0
+4d,1
+b,0
+17,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+21,1
+4,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+52,1
+17,0
+1
+e,3
+3e,1
+17,0
+1
+e,3
+3e,1
+17,0
+1
+e,3
+3e,1
+17,0
+1
+e,3
+3e,1
+17,0
+4d,1
+b,0
+17,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+21,1
+4,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+52,1
+17,0
+1
+e,3
+3e,1
+17,0
+1
+e,3
+3e,1
+17,0
+1
+e,3
+3e,1
+17,0
+1
+e,3
+3e,1
+17,0
+4d,1
+b,0
+17,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+21,1
+4,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+52,1
+17,0
+1
+e,3
+3e,1
+17,0
+1
+e,3
+3e,1
+17,0
+1
+e,3
+3e,1
+17,0
+1
+e,3
+3e,1
+17,0
+4d,1
+b,0
+17,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+4,5
+3e,1
+b,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+2,1
+1e,5
+1
+4,6
+1
+29,0
+1
+14,8
+21,1
+4,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a8.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a8.dat
new file mode 100644
index 000000000..6ee2a277a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a8.dat
@@ -0,0 +1,3505 @@
+! $XConsortium$
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+13,2
+3e,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+e,3
+3e,1
+12,0
+1
+4,2
+1
+e,3
+3e,1
+12,0
+1
+4,2
+1
+e,3
+3e,1
+12,0
+1
+4,2
+1
+e,3
+3e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+43,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+4,5
+3e,1
+12,0
+6,1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+6,1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+9,2
+48,1
+12,0
+1
+9,2
+1
+1e,4
+29,1
+12,0
+1
+9,2
+1
+1e,4
+29,1
+12,0
+1
+9,2
+1
+1e,4
+29,1
+12,0
+1
+9,2
+1
+1e,4
+29,1
+12,0
+1
+9,2
+1
+4,4
+43,1
+12,0
+1
+9,2
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+9,2
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+9,2
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+9,2
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+9,2
+1
+4,4
+1
+4,5
+3e,1
+12,0
+b,1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+6,1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+43,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+1e,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+4,4
+1
+4,5
+3e,1
+12,0
+6,1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+17,0
+6,1
+4,4
+1
+4,5
+1
+1e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+9,4
+3e,1
+12,0
+6,1
+4,3
+1
+9,4
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+9,4
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+9,4
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+9,4
+1
+1e,6
+1f,1
+17,0
+1
+4,3
+1
+9,4
+1
+1e,6
+1f,1
+17,0
+6,1
+9,4
+1
+1e,6
+1f,1
+b,0
+16,1
+5,4
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+1
+5,4
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+1
+5,4
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+1
+5,4
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+7,1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+6,1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+6,1
+1e,4
+1
+9,6
+1f,1
+b,0
+16,1
+1a,4
+1
+9,6
+1f,1
+b,0
+1
+14,8
+1
+1a,4
+1
+9,6
+1f,1
+b,0
+1
+14,8
+1
+1a,4
+1
+9,6
+1f,1
+b,0
+1
+14,8
+1
+1a,4
+1
+9,6
+1f,1
+b,0
+1
+14,8
+1c,1
+9,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+6,1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+6,1
+1e,4
+1
+9,6
+1f,1
+b,0
+16,1
+1a,4
+1
+9,6
+1f,1
+b,0
+1
+14,8
+1
+1a,4
+1
+9,6
+1f,1
+b,0
+1
+14,8
+1
+1a,4
+1
+9,6
+1f,1
+b,0
+1
+14,8
+1
+1a,4
+1
+9,6
+1f,1
+b,0
+1
+14,8
+1c,1
+9,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+6,1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+6,1
+1e,4
+1
+9,6
+1f,1
+b,0
+12,1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+20,1
+9,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+4,3
+48,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+1
+4,5
+24,1
+12,0
+1
+4,2
+1
+4,3
+1
+1e,4
+29,1
+12,0
+6,1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+1
+4,3
+1
+1e,4
+1
+9,6
+1f,1
+17,0
+6,1
+1e,4
+1
+9,6
+1f,1
+b,0
+12,1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+1
+1e,4
+1
+9,6
+1f,1
+b,0
+1
+10,8
+20,1
+9,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a9.dat b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a9.dat
new file mode 100644
index 000000000..b2c89e2f8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/a9.dat
@@ -0,0 +1,829 @@
+! $XConsortium$
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+1
+4,4
+29,1
+12,0
+1
+4,2
+1
+1e,3
+1
+4,4
+29,1
+12,0
+1
+4,2
+1
+1e,3
+1
+4,4
+29,1
+12,0
+1
+4,2
+1
+1e,3
+1
+4,4
+29,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+1
+9,5
+24,1
+12,0
+1
+4,2
+1
+1e,3
+1
+9,5
+24,1
+12,0
+1
+4,2
+1
+1e,3
+1
+9,5
+24,1
+12,0
+1
+4,2
+1
+1e,3
+1
+9,5
+24,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+6,1
+1e,3
+1
+e,6
+1f,1
+17,0
+1
+1e,3
+1
+e,6
+1f,1
+17,0
+1
+1e,3
+1
+e,6
+1f,1
+17,0
+1
+1e,3
+1
+e,6
+1f,1
+17,0
+1
+1e,3
+1
+e,6
+1f,1
+17,0
+20,1
+e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
+100 90 32
+e6,0
+3e,1
+26,0
+3e,1
+26,0
+3e,1
+12,0
+52,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+1e,2
+33,1
+12,0
+1
+4,2
+4d,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+1
+4,4
+29,1
+12,0
+1
+4,2
+1
+1e,3
+1
+4,4
+29,1
+12,0
+1
+4,2
+1
+1e,3
+1
+4,4
+29,1
+12,0
+1
+4,2
+1
+1e,3
+1
+4,4
+29,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+1
+4,2
+1
+1e,3
+1
+9,5
+24,1
+12,0
+1
+4,2
+1
+1e,3
+1
+9,5
+24,1
+12,0
+1
+4,2
+1
+1e,3
+1
+9,5
+24,1
+12,0
+1
+4,2
+1
+1e,3
+1
+9,5
+24,1
+12,0
+1
+4,2
+1
+1e,3
+2e,1
+12,0
+6,1
+1e,3
+1
+e,6
+1f,1
+17,0
+1
+1e,3
+1
+e,6
+1f,1
+17,0
+1
+1e,3
+1
+e,6
+1f,1
+17,0
+1
+1e,3
+1
+e,6
+1f,1
+17,0
+1
+1e,3
+1
+e,6
+1f,1
+17,0
+20,1
+e,6
+1f,1
+b,0
+17,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1f,1
+b,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+2,1
+4,5
+1
+1e,6
+1
+29,0
+1
+14,8
+7,1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+1
+1e,6
+1
+29,0
+1
+14,8
+1
+5,0
+20,1
+29,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+4e,0
+1
+14,8
+1
+19,0
+16,1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+1
+14,8
+1
+19,0
+1
+14,7
+1
+1f,0
+16,1
+19,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+1
+14,7
+1
+4e,0
+16,1
+341,0
+15,1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+1
+13,9
+1
+4f,0
+15,1
+1da,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/cnfgrwdw.m b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/cnfgrwdw.m
new file mode 100644
index 000000000..58eefea34
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/cnfgrwdw/cnfgrwdw.m
@@ -0,0 +1,2100 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XConfigureWindow CH03
+void
+xname(display, w, value_mask, values)
+Display *display = Dsp;
+Window w;
+unsigned int value_mask = 0;
+XWindowChanges *values = &winchng;
+>>EXTERN
+
+/* The structure that is used as the default argument to the function. */
+static XWindowChanges winchng;
+
+/*
+ * Convenience routine that sets the 'w' argument to be simple window
+ * with a background of W_FG at position (10,8) and * size 10x9.
+ * The border width is 0.
+ */
+#define OW_X 10
+#define OW_Y 8
+#define OW_WIDTH 23
+#define OW_HEIGHT 9
+
+static Window
+onewin()
+{
+Window base;
+struct area area;
+
+ base = defwin(display);
+ setarea(&area, OW_X, OW_Y, OW_WIDTH, OW_HEIGHT);
+
+ w = crechild(display, base, &area);
+ XSetWindowBackground(display, w, W_FG);
+ XClearWindow(display, w);
+
+ return(base);
+}
+
+/*
+ * A window with subwindows.
+ */
+static char *Tsub[] = {
+ ".",
+ "top . (5, 5) 40x40",
+ "sub1 top (1,3) 4x6",
+ "sub2 top (8,3) 7x6",
+ "sub3 top (3,14) 12x9",
+ "sub4 top (28,10) 7x20",
+ "sub5 top (14,25) 11x12",
+};
+#define NTsub (NELEM(Tsub))
+#define NTsubInf (NTsub-1) /* Number of inferiors excluding base */
+
+>>ASSERTION Good A
+When the
+.S CWX
+or the
+.S CWY
+bits are set in
+.A value_mask ,
+then a call to xname
+moves the window so that the
+coordinates of the upper-left outer corner of the window
+are
+.M x ,
+.M y
+relative to the origin of the parent window.
+>>STRATEGY
+Create test window with background of W_FG.
+Set x and y.
+Call xname.
+Verify that window has moved on screen with checkarea().
+>>CODE
+Window base;
+struct area area;
+
+ base = onewin();
+
+ setarea(&area, 20, 50, OW_WIDTH, OW_HEIGHT);
+ values->x = area.x;
+ values->y = area.y;
+
+ value_mask = CWX|CWY;
+
+ XCALL;
+
+ if (checkarea(display, base, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Error in moving window");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When the
+.S CWWidth
+or
+.S CWHeight
+bits are set in
+.A value_mask ,
+then on a call to xname the width and height of the inside
+size of the window are set to
+.M width
+and
+.M height .
+>>STRATEGY
+Create test window with background of W_FG.
+Set width and height.
+Call xname.
+Verify new size on screen with checkarea().
+>>CODE
+Window base;
+struct area area;
+
+ base = onewin();
+
+ setarea(&area, OW_X, OW_Y, 23, 47);
+ values->width = area.width;
+ values->height = area.height;
+
+ value_mask = CWWidth|CWHeight;
+
+ XCALL;
+
+ if (checkarea(display, base, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Error in resizing window");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When a call to xname resizes the window, then
+the subwindows of the window are repositioned according to their win-gravity
+attribute and a
+.S GravityNotify
+event is generated for each repositioned subwindow after the
+.S ConfigureNotify
+event.
+>>STRATEGY
+For each win-gravity attribute (apart from UnmapGravity)
+ Create window with subwindows.
+ Enable SubstructureNotify|StructureNotify events on all windows.
+ Set win-gravity on window.
+ Call xname to resize window.
+ Verify window positions by pixel check.
+ Verify ConfigureNotify on resized window.
+ Verify ConfigureNotify on parent of resized window.
+ If NorthWestGravity || StaticGravity
+ Verify that no gravity events are received.
+ else
+ Verify GravityNotify events received on each repositioned subwindow.
+ Verify gravity events are received on the parent of each subwindow.
+ Verify that configure events arrive before gravity events.
+>>EXTERN
+
+extern struct valname S_wingravity[];
+extern int NS_wingravity;
+
+/* Values to resize onewin to (odd and even) */
+#define NEW_X OW_X+5
+#define NEW_Y OW_Y+5
+#define NEW_WIDTH 70
+#define NEW_HEIGHT 61
+
+#define BORDERW 1
+
+>>CODE
+Window base;
+struct buildtree *bt;
+struct buildtree *topbtp;
+struct valname *wgrav;
+XSetWindowAttributes setatts;
+int i;
+
+ values->width = NEW_WIDTH;
+ values->height = NEW_HEIGHT;
+ value_mask = CWWidth|CWHeight;
+
+ for (wgrav = S_wingravity; wgrav < S_wingravity+NS_wingravity; wgrav++) {
+
+ if (wgrav->val == UnmapGravity)
+ continue;
+
+ trace("-- Testing win-gravity %s", wgrav->name);
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tsub, NTsub);
+
+ topbtp = btntobtp(bt, "top");
+
+ /* Select for all structure events on all windows */
+ for (i = 0; i < NTsub; i++) {
+ XSelectInput(display, bt[i].wid,
+ SubstructureNotifyMask|StructureNotifyMask);
+ }
+
+ /*
+ * Set the win_gravity on windows below 'top'. Also set the
+ * borderwidths to make things more interesting, esp on mono
+ * displays.
+ */
+ setatts.win_gravity = wgrav->val;
+ for (i = 2; i < NTsub; i++) {
+ XChangeWindowAttributes(display, bt[i].wid, CWWinGravity, &setatts);
+ XSetWindowBorderWidth(display, bt[i].wid, BORDERW);
+ XSetWindowBorder(display, bt[i].wid, W_BG); /* to show up */
+ }
+
+ w = topbtp->wid;
+ XCALL;
+
+ PIXCHECK(display, base);
+
+#ifndef GENERATE_PIXMAPS
+ if (wingravevents(display, bt, wgrav->val))
+ CHECK;
+#endif
+ }
+
+ /*
+ * In the GENERATE_PIXMAPS case there will be a path-check error here,
+ * this is intentional. (To prove that wingravevents() is used in
+ * the verification case)
+ */
+ CHECKPASS(2*(NS_wingravity-1)); /* -1 for UnmapGravity */
+>>EXTERN
+
+/*
+ * Flags to say that we received particular events.
+ */
+#define WIN_CONFIG 001
+#define WIN_GRAVITY 002
+#define PAR_CONFIG 004
+#define PAR_GRAVITY 010
+
+static void calcxy();
+
+/*
+ * Routine that does the event checking for the gravity notify
+ * test.
+ */
+static
+wingravevents(display, bt, evtype)
+Display *display;
+struct buildtree *bt;
+int evtype;
+{
+XEvent ev;
+XConfigureEvent confgood;
+XGravityEvent gravgood;
+XConfigureEvent *cnp;
+XGravityEvent *gnp;
+struct buildtree *btp;
+struct buildtree *top;
+int gotgrav = 0;
+int i;
+int pass = 0, fail = 0;
+
+ top = btntobtp(bt, "top");
+
+ /* Set up events */
+ confgood.type = ConfigureNotify;
+ confgood.serial = 0L;
+ confgood.send_event = False;
+ confgood.display = display;
+ confgood.above = None; /* XXX */
+ confgood.override_redirect = False;
+
+ confgood.x = top->x;
+ confgood.y = top->y;
+ confgood.width = NEW_WIDTH;
+ confgood.height = NEW_HEIGHT;
+ confgood.border_width = 0;
+
+ gravgood.type = GravityNotify;
+ gravgood.serial = 0L;
+ gravgood.send_event = False;
+ gravgood.display = display;
+
+ while (getevent(display, &ev) > 0) {
+
+ switch (ev.type) {
+ case ConfigureNotify:
+ cnp = (XConfigureEvent*)&ev;
+
+ btp = btwtobtp(bt, cnp->window);
+ if (btp == NULL) {
+ report("Event received on unknown window");
+ FAIL;
+ continue;
+ }
+ trace("Event received for window '%s'", btp->name);
+
+ if (gotgrav) {
+ report("Configure event received after gravity event");
+ FAIL;
+ } else
+ CHECK;
+
+ /*
+ * Work out if this event occurred on the parent or the window.
+ */
+ if (cnp->window != cnp->event) {
+ if (!btp->parent || btp->parent->wid != cnp->event) {
+ report("Event received on other than the parent window");
+ FAIL;
+ } else
+ btp->uflags |= PAR_CONFIG;
+ } else {
+ btp->uflags |= WIN_CONFIG;
+ }
+
+ confgood.event = cnp->event;
+ confgood.window = cnp->window;
+
+ if (checkevent((XEvent*)&confgood, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ break;
+ case GravityNotify:
+ gnp = (XGravityEvent*)&ev;
+ gotgrav = 1;
+
+ btp = btwtobtp(bt, gnp->window);
+ if (btp == NULL) {
+ report("Event received on unknown window");
+ FAIL;
+ continue;
+ }
+ trace("Event received for window '%s'", btp->name);
+
+ /*
+ * Work out if this event occurred on the parent or the window.
+ */
+ if (gnp->window != gnp->event) {
+ if (!btp->parent || btp->parent->wid != gnp->event) {
+ report("Event received on other than the parent window");
+ FAIL;
+ } else
+ btp->uflags |= PAR_GRAVITY;
+ } else {
+ btp->uflags |= WIN_GRAVITY;
+ }
+
+ gravgood.event = gnp->event;
+ gravgood.window = gnp->window;
+ gravgood.x = btp->x;
+ gravgood.y = btp->y;
+ (void) calcxy(top, evtype, &gravgood.x, &gravgood.y);
+
+ if (checkevent((XEvent*)&gravgood, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ break;
+ default:
+ report("Unexpected event type %s", eventname(ev.type));
+ FAIL;
+ }
+ }
+
+ /*
+ * Since the previous loop is executed a variable number of times
+ * check that it was executed at least once and reset the pass count.
+ */
+ if (pass > 0)
+ pass = 1;
+ else
+ delete("No CHECK marks in wingravevents() loop");
+
+ /*
+ * Check correct events on the top (resized) window.
+ */
+ if (top->uflags & WIN_CONFIG)
+ CHECK;
+ else {
+ report("Configure event not received on window 'top'");
+ FAIL;
+ }
+ if (top->uflags & PAR_CONFIG)
+ CHECK;
+ else {
+ report("Configure event not received on parent of window 'top'");
+ FAIL;
+ }
+ if (top->uflags & (PAR_GRAVITY|WIN_GRAVITY)) {
+ report("Gravity events unexpectedly received on window 'top'");
+ FAIL;
+ } else
+ CHECK;
+
+ for (i = 2; i < NTsub; i++) {
+ if (evtype == NorthWestGravity || evtype == StaticGravity) {
+ if (bt[i].uflags & WIN_GRAVITY) {
+ report("Gravity event unexpectedly received on window '%s'", bt[i].name);
+ FAIL;
+ } else
+ CHECK;
+ if (bt[i].uflags & PAR_GRAVITY) {
+ report("Gravity event unexpectedly received on parent of window '%s'", bt[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ } else {
+
+ if (bt[i].uflags & WIN_GRAVITY)
+ CHECK;
+ else {
+ report("Gravity event not received on window '%s'", bt[i].name);
+ FAIL;
+ }
+ if (bt[i].uflags & PAR_GRAVITY)
+ CHECK;
+ else {
+ report("Gravity event not received on parent of window '%s'", bt[i].name);
+ FAIL;
+ }
+ }
+ if (bt[i].uflags & (PAR_CONFIG|WIN_CONFIG)) {
+ report("Configure event unexpectedly received on window '%s'", bt[i].name);
+ FAIL;
+ }
+ }
+ if (fail == 0 && pass != 14)
+ delete("Path check error in wingravevents got %d, expecting 14", pass);
+
+ if (fail == 0)
+ return(True);
+ else
+ return(False);
+}
+
+static void
+calcxy(top, evtype, x, y)
+struct buildtree *top;
+int evtype;
+int *x;
+int *y;
+{
+int dx = NEW_WIDTH-top->width;
+int dy = NEW_HEIGHT-top->height;
+
+ switch (evtype) {
+ case NorthWestGravity:
+ break;
+ case NorthGravity:
+ *x += dx/2;
+ break;
+ case NorthEastGravity:
+ *x += dx;
+ break;
+ case WestGravity:
+ *y += dy/2;
+ break;
+ case CenterGravity:
+ *x += dx/2;
+ *y += dy/2;
+ break;
+ case EastGravity:
+ *x += dx;
+ *y += dy/2;
+ break;
+ case SouthWestGravity:
+ *y += dy;
+ break;
+ case SouthGravity:
+ *x += dx/2;
+ *y += dy;
+ break;
+ case SouthEastGravity:
+ *x += dx;
+ *y += dy;
+ break;
+ case StaticGravity:
+ break;
+ default:
+ delete("Internal error -- Unknown gravity in calcxy");
+ }
+}
+
+>>ASSERTION Good A
+When a call to xname resizes the window and the
+win-gravity of a subwindow is
+.S UnmapGravity
+and the subwindow is already mapped,
+then the subwindow is unmapped without being moved and an
+.S UnmapNotify
+event is generated.
+>>STRATEGY
+Create window with subwindows.
+Enable events on all subwindows.
+Enable events on window.
+Set win-gravity to UnmapGravity.
+Call xname to resize window.
+Verify windows are removed from screen.
+Verify window positions are unchanged.
+Verify that UnmapNotify events received on each subwindow.
+Verify that UnmapNotify events received on parent of each subwindow.
+>>EXTERN
+
+#define ON_PARENT 0x01
+#define ON_WINDOW 0x02
+
+>>CODE
+Window base;
+struct buildtree *bt;
+struct buildtree *topbtp;
+struct buildtree *btp;
+XEvent ev;
+XUnmapEvent good;
+XUnmapEvent *ump;
+XSetWindowAttributes setatts;
+XWindowAttributes atts;
+int i;
+
+ /* Set up good unmap event struct */
+ good.type = UnmapNotify;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = display;
+ good.from_configure = True;
+
+ values->width = NEW_WIDTH;
+ values->height = NEW_HEIGHT;
+ value_mask = CWWidth|CWHeight;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tsub, NTsub);
+
+ topbtp = btntobtp(bt, "top");
+
+ /* Select for all structure events on all windows */
+ for (i = 0; i < NTsub; i++) {
+ XSelectInput(display, bt[i].wid,
+ SubstructureNotifyMask|StructureNotifyMask);
+ }
+
+ /*
+ * Set the win_gravity on windows below 'top'. Also set the
+ * borderwidths to make things more interesting, esp on mono
+ * displays.
+ */
+ setatts.win_gravity = UnmapGravity;
+ for (i = 2; i < NTsub; i++) {
+ XChangeWindowAttributes(display, bt[i].wid, CWWinGravity, &setatts);
+ XSetWindowBorderWidth(display, bt[i].wid, BORDERW);
+ }
+
+ w = topbtp->wid;
+ XCALL;
+
+ if (checkarea(display, w, (struct area *)0, W_FG, W_FG, CHECK_ALL))
+ CHECK;
+ else {
+ report("UnmapGravity did not appear to remove subwindows");
+ FAIL;
+ }
+
+ while (getevent(display, &ev) > 0) {
+
+ if (ev.type != UnmapNotify)
+ continue;
+
+ ump = (XUnmapEvent*)&ev;
+
+ btp = btwtobtp(bt, ump->window);
+ if (btp == NULL) {
+ report("Event received on unknown window");
+ FAIL;
+ continue;
+ }
+ trace("Event received for window '%s'", btp->name);
+
+ /*
+ * Work out if this event occurred on the parent or the window.
+ */
+ if (ump->window != ump->event) {
+ if (!btp->parent || btp->parent->wid != ump->event) {
+ report("Event received on other than the parent window");
+ FAIL;
+ } else
+ btp->uflags |= ON_PARENT;
+ } else {
+ btp->uflags |= ON_WINDOW;
+ }
+
+ good.event = ump->event;
+ good.window = ump->window;
+
+ if (checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+ }
+
+ /*
+ * Go through the subwindows below top and check for events received
+ * and map_state and position unchanged.
+ */
+ for (i = 2; i < NTsub; i++) {
+ if (bt[i].uflags & ON_WINDOW)
+ CHECK;
+ else {
+ report("Unmap event not received on window '%s'", bt[i].name);
+ FAIL;
+ }
+ if (bt[i].uflags & ON_PARENT)
+ CHECK;
+ else {
+ report("Unmap event not received on parent of window '%s'", bt[i].name);
+ FAIL;
+ }
+
+ XGetWindowAttributes(display, bt[i].wid, &atts);
+ if (atts.map_state != IsUnmapped) {
+ report("map_state was %s, expecting IsUnmapped",
+ mapstatename(atts.map_state));
+ FAIL;
+ } else
+ CHECK;
+
+ if (atts.x != bt[i].x || atts.y != bt[i].y) {
+ report("Subwindow was moved after UnmapGravity used");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(1+6*(NTsub-2));
+>>ASSERTION Good A
+>># This assumes that the server either always does this or not.
+>># I believe this is the case. kieron
+>># If the server is allowed to do this on some windows and not on
+>># others then the assertion needs re-wording.
+>># If it does ignore bit-gravity then it will also generate Expose
+>># events. kieron.
+If the server uses the window's bit-gravity attribute:
+When a call to xname resizes the window, then
+the contents of the window are repositioned or discarded
+according to the bit-gravity attribute.
+Otherwise:
+When a call to xname resizes the window, then the
+contents of the window are discarded.
+>>STRATEGY
+For each value of bit-gravity.
+ Create window.
+ Draw into window.
+ Call xname to resize window.
+ Verify that either:
+ Window is clear.
+ else
+ Contents have been repositioned correctly.
+>>CODE
+struct valname *bitgrav;
+Window base;
+XSetWindowAttributes setatts;
+struct area area;
+extern struct valname S_bitgravity[];
+extern int NS_bitgravity;
+
+
+ for (bitgrav = S_bitgravity; bitgrav < S_bitgravity+NS_bitgravity; bitgrav++) {
+
+ trace("-- Trying bitgravity of %s", bitgrav->name);
+ setarea(&area, OW_X, OW_Y, OW_WIDTH, OW_HEIGHT);
+
+ base = onewin();
+ XSetWindowBackground(display, w, W_BG);
+ dset(display, w, W_FG);
+
+ setatts.bit_gravity = bitgrav->val;
+ XChangeWindowAttributes(display, w, CWBitGravity, &setatts);
+
+ values->width = NEW_WIDTH;
+ values->height = NEW_HEIGHT;
+ value_mask = CWWidth|CWHeight;
+
+ XCALL;
+
+ switch (bitgrav->val) {
+ case NorthGravity: case CenterGravity: case SouthGravity:
+ area.x += (NEW_WIDTH-OW_WIDTH)/2;
+ break;
+ case NorthEastGravity: case EastGravity: case SouthEastGravity:
+ area.x += (NEW_WIDTH-OW_WIDTH);
+ break;
+ }
+ switch (bitgrav->val) {
+ case CenterGravity: case WestGravity: case EastGravity:
+ area.y += (NEW_HEIGHT-OW_HEIGHT)/2;
+ break;
+ case SouthGravity: case SouthEastGravity: case SouthWestGravity:
+ area.y += (NEW_HEIGHT-OW_HEIGHT);
+ break;
+ }
+
+ if (checkarea(display, base, (struct area *)0, W_BG, W_BG, CHECK_ALL|CHECK_DIFFER)) {
+
+ /*
+ * The whole base window was clear, the server is not using
+ * bit-gravity, or else we are trying ForgetGravity.
+ */
+ if (bitgrav->val != ForgetGravity)
+ trace("server not using bit-gravity");
+ CHECK;
+ } else {
+ /*
+ * For ForgetGravity then we must not get here.
+ */
+ if (bitgrav->val == ForgetGravity) {
+ report("Contents were not discarded with ForgetGravity");
+ FAIL;
+ } else if (checkarea(display, base, &area, W_FG, W_BG, CHECK_ALL)) {
+ CHECK;
+ } else {
+ report("bits positioned incorrectly for bit-gravity of %s",
+ bitgrav->name);
+ FAIL;
+ }
+ }
+ }
+
+ CHECKPASS(NS_bitgravity);
+
+>>ASSERTION Good A
+When the
+.S CWBorderWidth
+bit is set in
+.A value_mask ,
+then the width of the border is set to
+.M border_width
+pixels.
+>>STRATEGY
+Create window.
+Call xname to change border width.
+Verify border by pixmap check.
+>>CODE
+int i;
+Window base;
+static int bords[] = {
+ 1, 2, 3, 4, 5, 10, 17, 29, 34, 51, 90, 234
+};
+
+ base = onewin();
+
+ /*
+ * Set the background and border to highlight the border.
+ */
+ XSetWindowBackground(display, w, W_BG);
+ XClearWindow(display, w);
+ XSetWindowBorder(display, w, W_FG);
+
+ for (i = 0; i < NELEM(bords); i++) {
+
+ values->border_width = bords[i];
+ value_mask = CWBorderWidth;
+
+ XCALL;
+
+ PIXCHECK(display, base);
+ }
+
+ CHECKPASS(NELEM(bords));
+>>EXTERN
+
+/*
+ * Window tree for the restacking operations.
+ */
+static char *Tstack[] = {
+ ". borders",
+ "bottom . (30,2) 60x34",
+ "A . (10,5) 30x20",
+ "B . (15, 10) 30x20",
+ "mid . (20, 15) 30x20",
+ "C . (25, 20) 30x20",
+ "D . (30, 25) 30x20",
+ "alone . (50,50) 20x20", /* does not overlap with any window */
+ "olmid . (3,32) 20x20", /* Overlaps mid */
+ "top . (5,80) 19x4",
+};
+#define NTstack (NELEM(Tstack))
+#define NTstackInf (NELEM(Tstack)-1)
+#define TstackTOS (NTstackInf-1) /* Top of stacking order number */
+
+#ifdef GENERATE_PIXMAPS
+#define stackorder(a,b) (0)
+#endif
+
+>>ASSERTION Good A
+When the
+.S CWSibling
+and
+.S CWStackMode
+bits are set in
+.A value_mask
+and
+.M stack_mode
+is
+.S Above ,
+then the window is placed just above the sibling.
+>>STRATEGY
+Create stack of windows.
+Set value to Above.
+Set sibling to a window in the middle of the stacking order.
+For each sibling of 'mid'.
+ Call xname on the window.
+ Verify that window is now one above sibling in stacking order.
+ Verify screen contents by pixmap checking.
+>>CODE
+Window base;
+struct buildtree *bt;
+struct buildtree *mid;
+int sibso;
+int winso;
+int i;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ mid = btntobtp(bt, "mid");
+
+ values->stack_mode = Above;
+ values->sibling = mid->wid;
+ value_mask = CWStackMode|CWSibling;
+
+ for (i = 1; i < NTstack; i++) {
+
+ if (bt+i == mid)
+ continue;
+
+ trace("Restacking '%s'", bt[i].name);
+ w = bt[i].wid;
+
+ XCALL;
+
+ winso = stackorder(display, w);
+ sibso = stackorder(display, mid->wid);
+ if (winso != sibso+1) {
+ report("Window not restacked to one above, got %d, expecting %d",
+ winso, sibso+1);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+ }
+
+ CHECKPASS(2*(NTstackInf-1));
+
+>>ASSERTION Good A
+When the
+.S CWSibling
+and
+.S CWStackMode
+bits are set in
+.A value_mask
+and
+.M stack_mode
+is
+.S Below ,
+then the window is placed just below the sibling.
+>>STRATEGY
+Create stack of windows.
+Set value to Below.
+Set sibling to a window in the middle of the stacking order.
+For each sibling window.
+ Call xname on a window.
+ Verify that window in now one below sibling in stacking order.
+ Verify screen contents by pixmap checking.
+>>CODE
+Window base;
+struct buildtree *bt;
+struct buildtree *mid;
+int sibso;
+int winso;
+int i;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ mid = btntobtp(bt, "mid");
+
+ values->stack_mode = Below;
+ values->sibling = mid->wid;
+ value_mask = CWStackMode|CWSibling;
+
+ for (i = 1; i < NTstack; i++) {
+
+ if (bt+i == mid)
+ continue;
+
+ trace("Restacking '%s'", bt[i].name);
+ w = bt[i].wid;
+
+ XCALL;
+
+ winso = stackorder(display, w);
+ sibso = stackorder(display, mid->wid);
+ if (winso != sibso-1) {
+ report("Window not restacked to one below, got %d, expecting %d",
+ winso, sibso+1);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+ }
+
+ CHECKPASS(2*(NTstackInf-1));
+
+>>ASSERTION Good A
+When the
+.S CWSibling
+and
+.S CWStackMode
+bits are set in
+.A value_mask ,
+.M stack_mode
+is
+.S TopIf
+and the sibling occludes the window,
+then the window is placed at the top of the stack.
+>>STRATEGY
+Create stack of windows.
+Set value to TopIf.
+Set sibling to a window in the middle of the stacking order.
+Call xname on a window that is occluded by the sibling.
+Verify that window in now at top of the stack.
+Verify screen contents by pixmap checking.
+Call xname on a window that is not occluded by the sibling.
+Verify that window stacking position is unchanged.
+>>CODE
+Window base;
+struct buildtree *bt;
+struct buildtree *mid;
+int oldso;
+int winso;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ mid = btntobtp(bt, "mid");
+
+ values->stack_mode = TopIf;
+ values->sibling = mid->wid;
+ value_mask = CWStackMode|CWSibling;
+
+ w = btntow(bt, "B");
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != TstackTOS) {
+ report("Window not at top of stacking order (pos=%d)", winso);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ /* Now a window that is not occluded */
+ w = btntow(bt, "D");
+ oldso = stackorder(display, w);
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != oldso) {
+ report("Window stacking order changed from %d to %d", oldso, winso);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When the
+.S CWSibling
+and
+.S CWStackMode
+bits are set in
+.A value_mask ,
+.M stack_mode
+is
+.S BottomIf
+and the window
+occludes the sibling, then the window is placed at the bottom of the stack.
+>>STRATEGY
+Create stack of windows.
+Set value to BottomIf.
+Set sibling to a window in the middle of the stacking order.
+Call xname on a window that occludes the sibling.
+Verify that window in now at bottom of the stack.
+Verify screen contents by pixmap checking.
+Call xname on a window that does not occlude the sibling.
+Verify that window position is unchanged.
+>>CODE
+Window base;
+struct buildtree *bt;
+struct buildtree *mid;
+int oldso;
+int winso;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ mid = btntobtp(bt, "mid");
+
+ values->stack_mode = BottomIf;
+ values->sibling = mid->wid;
+ value_mask = CWStackMode|CWSibling;
+
+ w = btntow(bt, "D");
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != 0) {
+ report("Window not at bottom of stacking order (pos=%d)", winso);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ /* Now a window that does not occlude */
+ w = btntow(bt, "B");
+ oldso = stackorder(display, w);
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != oldso) {
+ report("Window stacking order changed from %d to %d", oldso, winso);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When the
+.S CWSibling
+and
+.S CWStackMode
+bits are set in
+.A value_mask ,
+.M stack_mode
+is
+.S Opposite
+and the window occludes the sibling,
+then the window is placed at the bottom of the stack.
+>>STRATEGY
+Create stack of windows.
+Set value to Opposite.
+Set sibling to a window in the middle of the stacking order.
+Call xname on a window that occludes the sibling.
+Verify that window is now at bottom of stack.
+Verify screen contents by pixmap checking.
+>>CODE
+Window base;
+struct buildtree *bt;
+struct buildtree *mid;
+int winso;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ mid = btntobtp(bt, "mid");
+
+ values->stack_mode = Opposite;
+ values->sibling = mid->wid;
+ value_mask = CWStackMode|CWSibling;
+
+ w = btntow(bt, "D");
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != 0) {
+ report("Window not at bottom of stacking order (pos=%d)", winso);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the
+.S CWSibling
+and
+.S CWStackMode
+bits are set in
+.A value_mask ,
+.M stack_mode
+is
+.S Opposite
+and the sibling occludes the window,
+then the window is placed at the top of the stack.
+>>STRATEGY
+Create stack of windows.
+Set value to Opposite.
+Set sibling to a window in the middle of the stacking order.
+Call xname on a window that is occluded by the sibling.
+Verify that window is at the top of the stack.
+Verify screen contents by pixmap checking.
+>>CODE
+Window base;
+struct buildtree *bt;
+struct buildtree *mid;
+int winso;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ mid = btntobtp(bt, "mid");
+
+ values->stack_mode = Opposite;
+ values->sibling = mid->wid;
+ value_mask = CWStackMode|CWSibling;
+
+ /* A window that is occluded by sibling */
+ w = btntow(bt, "B");
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != TstackTOS) {
+ report("Window not brought to top of stack (pos=%d)", winso);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the
+.S CWStackMode
+bit is set and the
+.S CWSibling
+bit is not set in
+.A value_mask
+and
+.M stack_mode
+is
+.S Above ,
+then the window is placed at the top of the stack.
+>>STRATEGY
+Create stack of windows.
+Set value to Above.
+Call xname on a window.
+Verify that window is at top of stack.
+Verify screen contents by pixmap checking.
+>>CODE
+Window base;
+struct buildtree *bt;
+int winso;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ values->stack_mode = Above;
+ value_mask = CWStackMode;
+
+ w = btntow(bt, "mid");
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != TstackTOS) {
+ report("Window not at top of stacking order (pos=%d)", winso);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the
+.S CWStackMode
+bit is set and the
+.S CWSibling
+bit is not set in
+.A value_mask
+and
+.M stack_mode
+is
+.S Below ,
+then the window is placed at the bottom of the stack.
+>>STRATEGY
+Create stack of windows.
+Set value to Below.
+Call xname on a window.
+Verify that window is at the bottom of the stack.
+Verify screen contents by pixmap checking.
+>>CODE
+Window base;
+struct buildtree *bt;
+int winso;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ values->stack_mode = Below;
+ value_mask = CWStackMode;
+
+ w = btntow(bt, "mid");
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != 0) {
+ report("Window not at bottom of stacking order (pos=%d)", winso);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the
+.S CWStackMode
+bit is set and the
+.S CWSibling
+bit is not set in
+.A value_mask ,
+.M stack_mode
+is
+.S TopIf
+and a sibling occludes the window, then the window is placed at
+the top of the stack.
+>>STRATEGY
+Create stack of windows.
+Set value to TopIf.
+Call xname on a window that is occluded by a sibling.
+Verify that window is at the top of the stack.
+Verify screen contents by pixmap checking.
+Call xname on a window that is not occluded by a sibling.
+Verify that window stacking position is unchanged.
+>>CODE
+Window base;
+struct buildtree *bt;
+int oldso;
+int winso;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ values->stack_mode = TopIf;
+ value_mask = CWStackMode;
+
+ w = btntow(bt, "mid");
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != TstackTOS) {
+ report("Window not at top of stacking order (pos=%d)", winso);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ w = btntow(bt, "alone");
+ oldso = stackorder(display, w);
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != oldso) {
+ report("Window stacking order changed from %d to %d", oldso, winso);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the
+.S CWStackMode
+bit is set and the
+.S CWSibling
+bit is not set in
+.A value_mask ,
+.M stack_mode
+is
+.S BottomIf
+and the window occludes a sibling,
+then the window is placed at the bottom of the stack.
+>>STRATEGY
+Create stack of windows.
+Set value to BottomIf.
+Call xname on a window that occludes a sibling.
+Verify that window is at the bottom of the stack.
+Verify screen contents by pixmap checking.
+Call xname on a window that does not occlude a sibling.
+Verify that window stacking position is unchanged.
+>>CODE
+Window base;
+struct buildtree *bt;
+int oldso;
+int winso;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ values->stack_mode = BottomIf;
+ value_mask = CWStackMode;
+
+ w = btntow(bt, "mid");
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != 0) {
+ report("Window not at bottom of stacking order (pos=%d)", winso);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ w = btntow(bt, "alone");
+ oldso = stackorder(display, w);
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != oldso) {
+ report("Window stacking order changed from %d to %d", oldso, winso);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the
+.S CWStackMode
+bit is set and the
+.S CWSibling
+bit is not set in
+.A value_mask ,
+.M stack_mode
+is
+.S Opposite
+and the window occludes a sibling,
+then the window is placed at the bottom of the stack.
+>>STRATEGY
+Create stack of windows.
+Set value to Opposite.
+Call xname on a window that occludes a sibling.
+Verify that window is at the bottom of the stack.
+Verify screen contents by pixmap checking.
+>>CODE
+Window base;
+struct buildtree *bt;
+int winso;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ values->stack_mode = Opposite;
+ value_mask = CWStackMode;
+
+ w = btntow(bt, "olmid");
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != 0) {
+ report("Window not at bottom of stacking order (pos=%d)", winso);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the
+.S CWStackMode
+bit is set and the
+.S CWSibling
+bit is not set in
+.A value_mask ,
+.M stack_mode
+is
+.S Opposite
+and a sibling occludes the window,
+then the window is placed at the top of the stack.
+>>STRATEGY
+Create stack of windows.
+Set value to Opposite.
+Call xname on a window that is occluded by a sibling.
+Verify that window is at the top of the stack.
+Verify screen contents by pixmap checking.
+>>CODE
+Window base;
+struct buildtree *bt;
+int winso;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ values->stack_mode = Opposite;
+ value_mask = CWStackMode;
+
+ w = btntow(bt, "A");
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != NTstackInf-1) {
+ report("Window not at top of stacking order (pos=%d)", winso);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the geometry of the window is changed as well as a restacking
+operation performed, then the window's final geometry is used to determine
+whether the window occludes or is occluded by siblings.
+>>STRATEGY
+Create stack of windows.
+Set sibling to a window in the middle of the stack.
+Choose window that is below sibling but is not currently occluded by it.
+Set stack_mode to TopIf
+Call xname to resize window so that it is now occluded by sibling.
+Verify that the window is at the top of the stack.
+>>CODE
+Window base;
+struct buildtree *bt;
+int winso;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ values->sibling = btntow(bt, "mid");
+ values->stack_mode = Below;
+ value_mask = CWStackMode;
+
+ w = btntow(bt, "mid");
+ XCALL;
+
+ winso = stackorder(display, w);
+ if (winso != 0) {
+ report("Window not at top of stacking order (pos=%d)", winso);
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ CHECKPASS(2);
+
+>>ASSERTION def
+>># t020
+Values not specified are taken from the existing geometry of the window.
+>># Since we have been only changing a few things at a time
+>># if this was false then other tests would have failed.
+>>ASSERTION Good A
+When the window
+is a root window, then a call to xname has no effect.
+>>STRATEGY
+Call xname on root window.
+Touch test only.
+>>CODE
+
+ values->x = NEW_X;
+ values->y = NEW_Y;
+ values->width = NEW_WIDTH;
+ values->height = NEW_HEIGHT;
+ values->stack_mode = Above;
+ value_mask = CWX|CWY|CWWidth|CWHeight|CWStackMode;
+
+ w = DefaultRootWindow(display);
+
+ XCALL;
+
+ if (fail == 0)
+ PASS;
+>>ASSERTION Good A
+When the override-redirect attribute of the window is
+.S False
+and some
+other client has selected
+.S SubstructureRedirectMask
+on the parent window, then a
+.S ConfigureRequest
+event is generated, and the window configuration is not changed.
+>>STRATEGY
+Create windows.
+Set override-redirect to False.
+Create second client.
+Select SubstructureRedirectMask for second client on parent of window.
+Set some parameters.
+Call xname.
+Verify that a ConfigureRequest event is generated.
+Verify that window configuration has not changed on the screen.
+>>CODE
+Window base;
+XConfigureRequestEvent good;
+XSetWindowAttributes setatts;
+Display *client2;
+XEvent ev;
+XImage *imp;
+int n;
+
+ base = onewin();
+
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+
+ client2 = opendisplay();
+ XSelectInput(client2, base, SubstructureRedirectMask);
+ XSync(client2, False);
+
+ values->x = NEW_X;
+ values->y = NEW_Y;
+ values->width = NEW_WIDTH;
+ values->height = NEW_HEIGHT;
+
+ value_mask = CWX|CWY|CWWidth|CWHeight;
+
+ good.type = ConfigureRequest;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = base;
+ good.window = w;
+ good.x = NEW_X;
+ good.y = NEW_Y;
+ good.width = NEW_WIDTH;
+ good.height = NEW_HEIGHT;
+ good.border_width = 0;
+ good.above = None;
+ good.detail = Above;
+ good.value_mask = value_mask;
+
+ imp = savimage(display, base);
+
+ XCALL;
+ XSync(client2, False);
+
+ n = getevent(client2, &ev);
+ if (n != 1) {
+ report("Expecting 1 event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ if (compsavimage(display, base, imp))
+ CHECK;
+ else {
+ report("Screen contents changed");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When another client has selected
+.S ResizeRedirectMask
+on the window and the size is being changed, then a
+.S ResizeRequest
+event is generated and the size is not changed.
+>># Other changes take place though.
+>>STRATEGY
+Create windows.
+Set override-redirect to False.
+Create second client.
+Select ResizeRedirectMask for second client on window.
+Set parameters to move and resize window.
+Call xname.
+Verify that a ResizeRequest event is generated.
+Verify that window has not changed size but that other changes have occurred.
+>>CODE
+Window base;
+XResizeRequestEvent good;
+XSetWindowAttributes setatts;
+Display *client2;
+XEvent ev;
+struct area area;
+int n;
+
+ base = onewin();
+
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+
+ client2 = opendisplay();
+ XSelectInput(client2, w, ResizeRedirectMask);
+ XSync(client2, False);
+
+ values->x = NEW_X;
+ values->y = NEW_Y;
+ values->width = NEW_WIDTH;
+ values->height = NEW_HEIGHT;
+
+ value_mask = CWX|CWY|CWWidth|CWHeight;
+
+ good.type = ResizeRequest;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = client2;
+ good.window = w;
+ good.width = NEW_WIDTH;
+ good.height = NEW_HEIGHT;
+
+ XCALL;
+ XSync(client2, False);
+
+ n = getevent(client2, &ev);
+ if (n != 1) {
+ report("Expecting 1 event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ /* Window moves, but does not change size */
+ setarea(&area, NEW_X, NEW_Y, OW_WIDTH, OW_HEIGHT);
+ if (checkarea(display, base, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("New location and size of window not as expected");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When another client has selected
+.S ResizeRedirectMask
+on the window and another client has selected
+.S SubstructureRedirectMask
+on the parent window
+and the override-redirect attribute of the window is
+.S False ,
+then a
+.S ConfigureRequest
+event is generated, and the window configuration is not changed.
+>>STRATEGY
+Create windows.
+Set override-redirect to False.
+Create second client.
+Select ResizeRedirectMask for second client on window.
+Create third client.
+Select SubstructureRedirectMask for third client on parent of window.
+Call xname.
+Verify that a ConfigureRequest event is generated for client 3.
+Verify that no ResizeRequest event is generated for client 2.
+Verify that window configuration is not changed.
+>>CODE
+Window base;
+XConfigureRequestEvent good;
+XSetWindowAttributes setatts;
+Display *client2;
+Display *client3;
+XEvent ev;
+XImage *imp;
+int n;
+
+ base = onewin();
+
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+
+ client2 = opendisplay();
+ XSelectInput(client2, w, ResizeRedirectMask);
+ XSync(client2, False);
+
+ client3 = opendisplay();
+ XSelectInput(client3, base, SubstructureRedirectMask);
+ XSync(client3, False);
+
+ values->x = NEW_X;
+ values->y = NEW_Y;
+ values->width = NEW_WIDTH;
+ values->height = NEW_HEIGHT;
+
+ value_mask = CWX|CWY|CWWidth|CWHeight;
+
+ imp = savimage(display, base);
+
+ XCALL;
+ XSync(client2, False);
+ XSync(client3, False);
+
+ n = getevent(client2, &ev);
+ if (n != 0) {
+ report("Got an event unexpectedly for client selecting ResizeRedirect");
+ report(" Event type was %s", eventname(ev.type));
+ FAIL;
+ } else
+ CHECK;
+
+ good.type = ConfigureRequest;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = client3;
+ good.parent = base;
+ good.window = w;
+ good.x = NEW_X;
+ good.y = NEW_Y;
+ good.width = NEW_WIDTH;
+ good.height = NEW_HEIGHT;
+ good.border_width = 0;
+ good.above = None;
+ good.detail = Above;
+ good.value_mask = value_mask;
+
+ n = getevent(client3, &ev);
+ if (n != 1) {
+ report("Expecting one configure events");
+ FAIL;
+ } else
+ CHECK;
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ if (compsavimage(display, base, imp))
+ CHECK;
+ else {
+ report("Window changed when client was selecting SubstructureRedirect");
+ FAIL;
+ }
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When the configuration actually changes, then a
+.S ConfigureNotify
+event is generated.
+>>STRATEGY
+Create windows.
+Enable SubstructureNotify events.
+Call xname such that the window configuration changes.
+Verify that a ConfigureNotify event is generated.
+Call xname again with the same parameters.
+Verify that no ConfigureNotify event is generated.
+>>CODE
+XConfigureEvent good;
+XEvent ev;
+int n;
+
+ (void) onewin();
+
+ XSelectInput(display, w, StructureNotifyMask);
+
+ values->x = NEW_X;
+ values->y = NEW_Y;
+ values->width = NEW_WIDTH;
+ values->height = NEW_HEIGHT;
+
+ value_mask = CWX|CWY|CWWidth|CWHeight;
+
+ XCALL;
+
+ good.type = ConfigureNotify;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = display;
+ good.event = w;
+ good.window = w;
+ good.x = NEW_X;
+ good.y = NEW_Y;
+ good.width = NEW_WIDTH;
+ good.height = NEW_HEIGHT;
+ good.border_width = 0;
+ good.above = None;
+ good.override_redirect = False;
+
+ n = getevent(display, &ev);
+ if (n != 1) {
+ report("Expecting 1 event, got %d", n);
+ FAIL;
+ } else
+ CHECK;
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ /* Call again */
+ XCALL;
+ if ((n = XPending(display)) == 0)
+ CHECK;
+ else {
+ report("Received event when configuration was not changed");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>># ASSERTION Good A
+>># There are Expose events to consider here.
+>># Also any window that is uncovered etc.
+>>ASSERTION Good A
+When a call to xname changes the size of the window, then
+.S Expose
+events are generated for regions that are newly visible or for
+which the contents have been lost.
+>>STRATEGY
+Create windows.
+Set test window background to W_BG.
+Set up window with setforexpose().
+Enable expose events.
+Resize window with xname.
+Verify that correct expose events were received with exposecheck().
+>>CODE
+
+ (void) onewin();
+
+ XSetWindowBackground(display, w, W_BG);
+ XClearWindow(display, w);
+ setforexpose(display, w);
+
+ XSelectInput(display, w, ExposureMask);
+
+ values->width = NEW_WIDTH;
+ values->height = NEW_HEIGHT;
+ value_mask = CWWidth|CWHeight;
+
+ XCALL;
+
+ if (exposecheck(display, w))
+ CHECK;
+ else {
+ report("Correct expose events not received after resize");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create windows.
+Create second client to receive events on.
+Call setforexpose() on unobscured window.
+Create other windows to partially obscure this window.
+Reconfigure window with xname, ensuring that first window is now unobscured.
+Verify for correct expose or backing store behaviour with exposecheck().
+>>CODE
+Window base;
+Display *client2;
+struct buildtree *bt;
+int i;
+
+ base = defwin(display);
+ setforexpose(display, base);
+
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ client2 = opendisplay();
+ XSelectInput(client2, base, ExposureMask);
+ XSync(client2, False);
+
+ /*
+ * This loop will throw all the subwindows outside the borders of the
+ * parent window.
+ */
+ values->x = W_STDWIDTH+9000;
+ value_mask = CWX;
+ for (i = 1; i < NTstack; i++) {
+ w = bt[i].wid;
+ XCALL;
+ }
+ XSync(client2, False);
+
+ if (exposecheck(client2, base))
+ CHECK;
+ else {
+ report("Neither Expose events or backing store processing");
+ report(" could correctly restore the window contents.");
+ FAIL;
+ }
+ CHECKPASS(1);
+>>ASSERTION Good A
+>># I complicated this one slightly and then split it into two. - kieron
+When the window is moved without changing its size
+and the window is mapped
+and the window is not obscured by non-children,
+then the current window contents are not lost.
+>>STRATEGY
+Create window.
+Draw pattern in window.
+Move window without a size change.
+Verify that window contents are unchanged.
+>>CODE
+XImage *imp;
+
+ (void) onewin();
+
+ pattern(display, w);
+
+ values->x = NEW_X;
+ values->y = NEW_Y;
+ value_mask = CWX|CWY;
+
+ imp = savimage(display, w);
+
+ XCALL;
+
+ if (compsavimage(display, w, imp))
+ CHECK;
+ else {
+ report("Window contents affected by moving window");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good D 3
+>># I complicated this one slightly and then split it into two. - kieron
+>># "backing store exists" is untestable, I reckon. - kieron
+If backing-store is supported when mapped:
+When the window is moved without changing its size
+and the window is mapped
+and backing store exists,
+then the current window contents are not lost.
+>># ASSERTION Good A
+>># -- I don't know when this applies ..sr Ignore it, kieron.
+>># When backing store is being maintained for the window, its
+>># inferiors, or other newly visible windows, then the contents
+>># are either discarded or changed to reflect the current screen contents.
+>>ASSERTION Bad A
+When
+.S CWSibling
+is set and
+.S CWStackMode
+is not set, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Set CWSibling only.
+Call xname.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+Window base;
+Window win;
+struct area area;
+
+ base = defwin(display);
+
+ setarea(&area, 2, 4, 9, 8);
+ win = crechild(display, base, &area);
+ w = crechild(display, base, &area);
+
+ values->sibling = win;
+ value_mask = CWSibling;
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL; /* already done */
+>>ASSERTION Bad A
+When sibling is specified and it is not
+actually a sibling, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create windows.
+Set sibling to parent of the child window.
+Set stack_mode to Above.
+Call xname.
+Verify BadMatch error occurs.
+>>CODE BadMatch
+Window base;
+
+ base = onewin();
+
+ values->sibling = base;
+ values->stack_mode = Above;
+ value_mask = CWSibling|CWStackMode;
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL; /* again */
+>>ASSERTION Bad A
+When
+.M width
+or
+.M height
+is zero, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set width to zero.
+Call xname.
+Verify BadValue error.
+Set height to zero.
+Call xname.
+Verify BadValue error.
+Set both width and height to zero.
+Call xname.
+Verify BadValue error.
+>>CODE BadValue
+
+ (void) onewin();
+
+ values->width = 0;
+ values->height = 0;
+
+ value_mask = CWWidth;
+ XCALL;
+ if (geterr() == BadValue)
+ CHECK;
+
+ value_mask = CWHeight;
+ XCALL;
+ if (geterr() == BadValue)
+ CHECK;
+
+ value_mask = CWWidth|CWHeight;
+ XCALL;
+ if (geterr() == BadValue)
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Bad A
+When an attempt is made to set the border-width attribute of an
+.S InputOnly
+window to a non-zero value, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create input only window.
+Attempt to set border-width.
+Verify BadMatch error.
+>>CODE BadMatch
+
+ /*
+ * It would be better for iponlywin to have a parent arg, how
+ * might this test interact with window managers.
+ */
+ w = iponlywin(display);
+
+ values->border_width = 21;
+ value_mask = CWBorderWidth;
+
+ XCALL;
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL; /* again */
+
+>># This assertion has been removed at the request of MIT, because there
+>># is no requirement for the Xlib implementation to generate protocol
+>># errors for illegal maske bits in this case. (Bug report 58)
+>># >>ASSERTION Bad A
+>># .ER BadValue value_mask mask CWX CWY CWWidth CWHeight CWBorderWidth CWSibling CWStackMode
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/crcltsbws/a1.dat b/xc/test/xsuite/xtest/tset/CH03/crcltsbws/a1.dat
new file mode 100644
index 000000000..01e044eba
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/crcltsbws/a1.dat
@@ -0,0 +1,323 @@
+! $XConsortium$
+100 90 32
+3fc,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+3f2,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/crcltsbws/a2.dat b/xc/test/xsuite/xtest/tset/CH03/crcltsbws/a2.dat
new file mode 100644
index 000000000..b8a7d197e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/crcltsbws/a2.dat
@@ -0,0 +1,323 @@
+! $XConsortium$
+100 90 32
+3fc,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+3f2,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/crcltsbws/crcltsbws.m b/xc/test/xsuite/xtest/tset/CH03/crcltsbws/crcltsbws.m
new file mode 100644
index 000000000..9301bc030
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/crcltsbws/crcltsbws.m
@@ -0,0 +1,517 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCirculateSubwindows CH03
+void
+
+Display *display = Dsp;
+Window w;
+int direction;
+>>EXTERN
+
+static char *SimpleTemplate[] = {
+ ".",
+ "zero . (20,10) 40x40",
+ "one . (30,20) 40x40",
+ "two . (10,30) 40x40",
+ "other1 . (75,10) 15x70",
+};
+static int NSimpleTemplate = NELEM(SimpleTemplate);
+
+static char *Expose1Template[] = {
+ ".",
+ "zero . (20,10) 40x40",
+ "other1 . (75,10) 15x70",
+};
+static int NExpose1Template = NELEM(Expose1Template);
+
+static char *Expose2Template[] = {
+ ".",
+ "one . (30,20) 40x40",
+ "two . (10,30) 40x40",
+};
+static int NExpose2Template = NELEM(Expose2Template);
+
+>>ASSERTION Good A
+When
+.A direction
+is
+.S RaiseLowest
+and there is a mapped child that is occluded by another child,
+then a call to xname raises the lowest
+such mapped child to the top of the stack.
+>>STRATEGY
+Create a window hierarchy using buildtree.
+Call xname with direction of RaiseLowest upon parent.
+Verify that the lowest occluded mapped child window was raised
+>>CODE
+Window parent;
+
+/* Create a window hierarchy using buildtree. */
+ parent = defwin(display);
+ (void) buildtree(display, parent, SimpleTemplate, NSimpleTemplate);
+
+/* Call xname with direction of RaiseLowest upon parent. */
+ w = parent;
+ direction = RaiseLowest;
+ XCALL;
+
+/* Verify that the lowest occluded mapped child window was raised */
+ PIXCHECK(display, parent);
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When
+.A direction
+is
+.S LowerHighest
+and there is a mapped child that occludes another child,
+then a call to xname lowers the highest such mapped child
+to the bottom of the stack.
+>>STRATEGY
+Create a window hierarchy using buildtree.
+Call xname with direction of LowerHighest upon parent.
+Verify that the highest occluding mapped child window was lowered
+>>CODE
+Window parent;
+
+/* Create a window hierarchy using buildtree. */
+ parent = defwin(display);
+ (void) buildtree(display, parent, SimpleTemplate, NSimpleTemplate);
+
+/* Call xname with direction of LowerHighest upon parent. */
+ w = parent;
+ direction = LowerHighest;
+ XCALL;
+
+/* Verify that the highest occluding mapped child window was lowered */
+ PIXCHECK(display, parent);
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create a window hierarchy using buildtree.
+Call setforexpose on window 'zero' to allow Expose event checking.
+Select Expose events on window 'zero'.
+Call xname in order to expose window 'zero'.
+Use exposecheck to ensure that the window 'zero' was restored correctly.
+>>CODE
+struct buildtree *tree1;
+Window parent, zero;
+
+/* Create a window hierarchy using buildtree. */
+ parent = defwin(display);
+ tree1= buildtree(display, parent, Expose1Template, NExpose1Template);
+ zero = btntow(tree1, "zero");
+
+/* Call setforexpose on window 'zero' to allow Expose event checking. */
+ setforexpose(display, zero);
+ (void) buildtree(display, parent, Expose2Template, NExpose2Template);
+
+/* Select Expose events on window 'zero'. */
+ XSelectInput(display, zero, ExposureMask);
+
+/* Call xname in order to expose window 'zero'. */
+ w = parent;
+ direction = RaiseLowest;
+ XCALL;
+
+/* Use exposecheck to ensure that the window 'zero' was restored correctly. */
+ if (!exposecheck(display, zero)) {
+ report("Neither Expose events or backing store processing");
+ report("could correctly restore the window contents.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When some other client has selected
+.S SubstructureRedirectMask
+on the window, then a
+.S CirculateRequest
+event is generated, and no further processing is performed.
+>>STRATEGY
+Create client1 and client2 with a window on client1
+Create a window hierarchy for client1.
+Save parent window image as reference image.
+Select all events other than SubstructureRedirectMask events on all the windows for client1, to catch rogue events.
+Select SubstructureRedirectMask on the parent window for client2.
+Call xname with direction RaiseLowest on client1 in order to raise window zero.
+Verify that no events were delivered to client1 using getevent.
+Verify that a correct CirculateRequest event was delievered to client2 using getevent and checkevent.
+Verify that no further processing occurred by comparing the window and our reference image.
+Call xname with direction LowerHighest on client1 in order to lower window two.
+Verify that no events were delivered to client1 using getevent.
+Verify that a correct CirculateRequest event was delievered to client2 using getevent and checkevent.
+Verify that no further processing occurred by comparing the window and our reference image.
+>>CODE
+Display *client1,*client2;
+struct buildtree *c1tree;
+XImage *image;
+Window parent, zero, one, two;
+XEvent ev;
+int numevent;
+
+/* Create client1 and client2 with a window on client1 */
+ client1 = opendisplay();
+ if (client1 == NULL) {
+ delete("could not create client1");
+ return;
+ }
+ else
+ CHECK;
+ client2 = opendisplay();
+ if (client2 == NULL) {
+ delete("could not create client2");
+ return;
+ }
+ else
+ CHECK;
+
+/* Create a window hierarchy for client1. */
+ parent = defwin(client1);
+ c1tree = buildtree(client1, parent, SimpleTemplate, NSimpleTemplate);
+ zero = btntow(c1tree, "zero");
+ one = btntow(c1tree, "one");
+ two = btntow(c1tree, "two");
+
+/* Save parent window image as reference image. */
+ image= savimage(client1, parent);
+
+/* Select all events other than SubstructureRedirectMask events on all the windows for client1, to catch rogue events. */
+ XSelectInput(client1, parent, ALLEVENTS & ~(SubstructureRedirectMask));
+ XSelectInput(client1, zero, ALLEVENTS & ~(SubstructureRedirectMask));
+ XSelectInput(client1, one, ALLEVENTS & ~(SubstructureRedirectMask));
+ XSelectInput(client1, two, ALLEVENTS & ~(SubstructureRedirectMask));
+
+/* Select SubstructureRedirectMask on the parent window for client2. */
+ XSelectInput(client2, parent, SubstructureRedirectMask);
+ XSync(client2, True);
+
+/* Call xname with direction RaiseLowest on client1 in order to raise window zero. */
+ display = client1;
+ w = parent;
+ direction = RaiseLowest;
+ XCALL;
+ XSync(client2, False);
+
+/* Verify that no events were delivered to client1 using getevent. */
+ numevent = getevent(client1, &ev);
+ if( numevent != 0 ) {
+ FAIL;
+ report("%d unexpected %s delivered to client1",
+ numevent, (numevent==1)?"event was":"events were");
+ report("%sevent was %s", (numevent!=1)?"first ":"",
+ eventname(ev.type));
+ while(getevent(client1, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ } else
+ CHECK;
+
+/* Verify that a correct CirculateRequest event was delievered to client2 using getevent and checkevent. */
+ numevent = getevent(client2, &ev);
+ if( numevent != 1 ) {
+ FAIL;
+ report("Expecting a single CirculateRequest event");
+ report("Received %d events", numevent);
+ if(numevent != 0) {
+ report("First event was %s", eventname(ev.type));
+ while(getevent(client2, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ }
+ } else {
+ XCirculateRequestEvent good;
+
+ good.type = CirculateRequest;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = parent;
+ good.window = zero;
+ good.place = PlaceOnTop;
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Verify that no further processing occurred by comparing the window and our reference image. */
+ if(!compsavimage(client1, parent, image)) {
+ FAIL;
+ } else {
+ CHECK;
+ }
+
+/* Call xname with direction LowerHighest on client1 in order to lower window two. */
+ display = client1;
+ w = parent;
+ direction = LowerHighest;
+ XCALL;
+ XSync(client2, False);
+
+/* Verify that no events were delivered to client1 using getevent. */
+ numevent = getevent(client1, &ev);
+ if( numevent != 0 ) {
+ FAIL;
+ report("%d unexpected %s delivered to client1",
+ numevent, (numevent==1)?"event was":"events were");
+ report("%sevent was %s", (numevent!=1)?"first ":"",
+ eventname(ev.type));
+ while(getevent(client1, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ } else
+ CHECK;
+
+/* Verify that a correct CirculateRequest event was delievered to client2 using getevent and checkevent. */
+ numevent = getevent(client2, &ev);
+ if( numevent != 1 ) {
+ FAIL;
+ report("Expecting a single CirculateRequest event");
+ report("Received %d events", numevent);
+ if(numevent != 0) {
+ report("First event was %s", eventname(ev.type));
+ while(getevent(client2, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ }
+ } else {
+ XCirculateRequestEvent good;
+
+ good.type = CirculateRequest;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = parent;
+ good.window = two;
+ good.place = PlaceOnBottom;
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Verify that no further processing occurred by comparing the window and our reference image. */
+ if(!compsavimage(client1, parent, image)) {
+ FAIL;
+ } else {
+ CHECK;
+ }
+ CHECKPASS(8);
+
+>>ASSERTION Good A
+When a child is actually restacked,
+then a
+.S CirculateNotify
+event is generated.
+>>STRATEGY
+Create client1, client2, and client3, with a window on client1
+Create a window hierarchy using buildtree.
+Select StructureNotifyMask events on the windows zero on client2
+Select SubstructureNotifyMask events on the parent window on client3
+Call xname in order to raise window zero with direction RaiseLowest.
+Verify that a correct CirculateNotify event was delivered to window zero
+Verify that a correct CirculateNotify event was delivered to the
+ parent window on client3 using getevent and checkevent.
+Call xname in order to lower window zero with direction LowerHighest
+Verify that a correct CirculateNotify event was delivered to
+ window zero on client2 using getevent and checkevent.
+Verify that a correct CirculateNotify event was delivered to the
+ parent window on client3 using getevent and checkevent.
+>>CODE
+Display *client1, *client2, *client3;
+struct buildtree *tree;
+Window parent, zero, one, two;
+XEvent ev;
+int numevent;
+
+/* Create client1, client2, and client3, with a window on client1 */
+ client1 = opendisplay();
+ if (client1 == NULL) {
+ delete("could not create client1");
+ return;
+ }
+ else
+ CHECK;
+ client2 = opendisplay();
+ if (client2 == NULL) {
+ delete("could not create client2");
+ return;
+ }
+ else
+ CHECK;
+ client3 = opendisplay();
+ if (client3 == NULL) {
+ delete("could not create client3");
+ return;
+ }
+ else
+ CHECK;
+ parent = defwin(client1);
+
+/* Create a window hierarchy using buildtree. */
+ tree = buildtree(client1, parent, SimpleTemplate, NSimpleTemplate);
+ zero = btntow(tree, "zero"); trace("window zero is %0x", zero);
+ one = btntow(tree, "one"); trace("window one is %0x", one);
+ two = btntow(tree, "two"); trace("window two is %0x", two);
+
+/* Select StructureNotifyMask events on the windows zero on client2 */
+ XSelectInput(client2, zero, StructureNotifyMask);
+ XSync(client2, True);
+
+/* Select SubstructureNotifyMask events on the parent window on client3 */
+ XSelectInput(client3, parent, SubstructureNotifyMask);
+ XSync(client3 , True);
+
+/* Call xname in order to raise window zero with direction RaiseLowest. */
+ display = client1;
+ w = parent;
+ direction = RaiseLowest;
+ XCALL;
+ XSync(client2, False);
+ XSync(client3, False);
+
+/* Verify that a correct CirculateNotify event was delivered to window zero */
+/* on client2 using getevent and checkevent. */
+ numevent = getevent(client2, &ev);
+ trace("%d events were queued on client2", numevent);
+ if (numevent == 0) {
+ FAIL;
+ report("No event was delivered to client2 when the child windows");
+ report("were restacked. Expecting a CirculateNotify event");
+ } else {
+ XCirculateEvent good;
+
+ trace("Checking that:");
+ trace("display==client2, event==zero, window==zero,");
+ trace("place==PlaceOnTop");
+
+ good.type = CirculateNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.event = zero;
+ good.window = zero;
+ good.place = PlaceOnTop;
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Verify that a correct CirculateNotify event was delivered to the */
+/* parent window on client3 using getevent and checkevent. */
+ numevent = getevent(client3, &ev);
+ trace("%d events were queued on client3", numevent);
+ if (numevent == 0) {
+ FAIL;
+ report("No event was delivered to client3 when the child windows");
+ report("were restacked. Expecting a CirculateNotify event");
+ } else {
+ XCirculateEvent good;
+
+ trace("Checking that:");
+ trace("display==client3, event==parent, window==zero,");
+ trace("place==PlaceOnTop");
+
+ good.type = CirculateNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client3;
+ good.event = parent;
+ good.window = zero;
+ good.place = PlaceOnTop;
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Call xname in order to lower window zero with direction LowerHighest */
+ display = client1;
+ w = parent;
+ direction = LowerHighest;
+ XCALL;
+ XSync(client2, False);
+ XSync(client3, False);
+
+/* Verify that a correct CirculateNotify event was delivered to */
+/* window zero on client2 using getevent and checkevent. */
+ numevent = getevent(client2, &ev);
+ trace("%d events were queued on client2", numevent);
+ if (numevent == 0) {
+ FAIL;
+ report("No event was delivered to client2 when the child windows");
+ report("were restacked. Expecting a CirculateNotify event");
+ } else {
+ XCirculateEvent good;
+
+ trace("Checking that:");
+ trace("display==client2, event==zero, window==zero,");
+ trace("place==PlaceOnBottom");
+ good.type = CirculateNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.event = zero;
+ good.window = zero;
+ good.place = PlaceOnBottom;
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Verify that a correct CirculateNotify event was delivered to the */
+/* parent window on client3 using getevent and checkevent. */
+ numevent = getevent(client3, &ev);
+ trace("%d events were queued on client3", numevent);
+ if (numevent == 0) {
+ FAIL;
+ report("No event was delivered to client3 when the child windows");
+ report("were restacked. Expecting a CirculateNotify event");
+ } else {
+ XCirculateEvent good;
+
+ trace("Checking that:");
+ trace("display==client3, event==parent, window==zero,");
+ trace("place==PlaceOnBottom");
+ good.type = CirculateNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client3;
+ good.event = parent;
+ good.window = zero;
+ good.place = PlaceOnBottom;
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+ CHECKPASS(7);
+
+>>ASSERTION Bad A
+.ER BadValue direction RaiseLowest LowerHighest
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/crcltsbwsd/a1.dat b/xc/test/xsuite/xtest/tset/CH03/crcltsbwsd/a1.dat
new file mode 100644
index 000000000..b8a7d197e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/crcltsbwsd/a1.dat
@@ -0,0 +1,323 @@
+! $XConsortium$
+100 90 32
+3fc,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+a,3
+a,1
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+3f2,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/crcltsbwsd/crcltsbwsd.m b/xc/test/xsuite/xtest/tset/CH03/crcltsbwsd/crcltsbwsd.m
new file mode 100644
index 000000000..6a2b9775f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/crcltsbwsd/crcltsbwsd.m
@@ -0,0 +1,350 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCirculateSubwindowsDown CH03
+void
+
+Display *display = Dsp;
+Window w;
+>>EXTERN
+
+static char *SimpleTemplate[] = {
+ ".",
+ "zero . (20,10) 40x40",
+ "one . (30,20) 40x40",
+ "two . (10,30) 40x40",
+ "other1 . (75,10) 15x70",
+};
+static int NSimpleTemplate = NELEM(SimpleTemplate);
+
+static char *Expose1Template[] = {
+ ".",
+ "zero . (20,10) 40x40",
+ "one . (30,20) 40x40",
+ "other1 . (75,10) 15x70",
+};
+static int NExpose1Template = NELEM(Expose1Template);
+
+static char *Expose2Template[] = {
+ ".",
+ "two . (40,30) 40x40",
+};
+static int NExpose2Template = NELEM(Expose2Template);
+
+>>ASSERTION Good A
+When there is a mapped child that occludes another child,
+then a call to xname lowers the highest such mapped child
+to the bottom of the stack.
+>>STRATEGY
+Create a window hierarchy using buildtree.
+Call xname upon the parent window.
+Verify that the highest occluding mapped child window was lowered.
+>>CODE
+Window parent;
+
+/* Create a window hierarchy using buildtree. */
+ parent = defwin(display);
+ (void) buildtree(display, parent, SimpleTemplate, NSimpleTemplate);
+
+/* Call xname upon the parent window. */
+ w = parent;
+ XCALL;
+
+/* Verify that the highest occluding mapped child window was lowered. */
+ PIXCHECK(display, parent);
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create a window hierarchy using buildtree.
+Call setforexpose on window 'one' to allow Expose event checking.
+Select Expose events on window 'one'.
+Call xname in order to expose window 'one' by lowering window 'two'.
+Use exposecheck to ensure that the window 'one' was restored correctly.
+>>CODE
+struct buildtree *tree1;
+Window parent, one;
+
+/* Create a window hierarchy using buildtree. */
+ parent = defwin(display);
+ tree1= buildtree(display, parent, Expose1Template, NExpose1Template);
+ one = btntow(tree1, "one");
+
+/* Call setforexpose on window 'one' to allow Expose event checking. */
+ setforexpose(display, one);
+ (void) buildtree(display, parent, Expose2Template, NExpose2Template);
+
+/* Select Expose events on window 'one'. */
+ XSelectInput(display, one, ExposureMask);
+
+/* Call xname in order to expose window 'one' by lowering window 'two'. */
+ w = parent;
+ XCALL;
+
+/* Use exposecheck to ensure that the window 'one' was restored correctly. */
+ if (!exposecheck(display, one)) {
+ report("Neither Expose events or backing store processing");
+ report("could correctly restore the window contents.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When some other client has selected
+.S SubstructureRedirectMask
+on the window, then a
+.S CirculateRequest
+event is generated, and no further processing is performed.
+>>STRATEGY
+Create client1 and client2 with a window on client1
+Create a window hierarchy for client1.
+Save parent window image as reference image.
+Select all events other than SubstructureRedirectMask events on
+ all the windows for client1, to catch rogue events.
+Select SubstructureRedirectMask on the parent window for client2.
+Call xname on client1 in order to lower window two.
+Verify that no events were delivered to client1 using getevent.
+Verify that a correct CirculateRequest event was delievered to client2 using getevent and checkevent.
+Verify that no further processing occurred by comparing the window and our reference image.
+>>CODE
+Display *client1,*client2;
+struct buildtree *c1tree;
+XImage *image;
+Window parent, zero, one, two;
+XEvent ev;
+int numevent;
+
+/* Create client1 and client2 with a window on client1 */
+ client1 = opendisplay();
+ if (client1 == NULL) {
+ delete("could not create client1");
+ return;
+ }
+ else
+ CHECK;
+ client2 = opendisplay();
+ if (client2 == NULL) {
+ delete("could not create client2");
+ return;
+ }
+ else
+ CHECK;
+
+/* Create a window hierarchy for client1. */
+ parent = defwin(client1);
+ c1tree = buildtree(client1, parent, SimpleTemplate, NSimpleTemplate);
+ zero = btntow(c1tree, "zero");
+ one = btntow(c1tree, "one");
+ two = btntow(c1tree, "two");
+
+/* Save parent window image as reference image. */
+ image= savimage(client1, parent);
+
+/* Select all events other than SubstructureRedirectMask events on */
+/* all the windows for client1, to catch rogue events. */
+ XSelectInput(client1, parent, ALLEVENTS & ~(SubstructureRedirectMask));
+ XSelectInput(client1, zero, ALLEVENTS & ~(SubstructureRedirectMask));
+ XSelectInput(client1, one, ALLEVENTS & ~(SubstructureRedirectMask));
+ XSelectInput(client1, two, ALLEVENTS & ~(SubstructureRedirectMask));
+
+/* Select SubstructureRedirectMask on the parent window for client2. */
+ XSelectInput(client2, parent, SubstructureRedirectMask);
+ XSync(client2, True);
+
+/* Call xname on client1 in order to lower window two. */
+ display = client1;
+ w = parent;
+ XCALL;
+ XSync(client2, False);
+
+/* Verify that no events were delivered to client1 using getevent. */
+ numevent = getevent(client1, &ev);
+ if( numevent != 0 ) {
+ FAIL;
+ report("%d unexpected %s delivered to client1",
+ numevent, (numevent==1)?"event was":"events were");
+ report("%sevent was %s", (numevent!=1)?"first ":"",
+ eventname(ev.type));
+ while(getevent(client1, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ } else
+ CHECK;
+
+/* Verify that a correct CirculateRequest event was delievered to client2 using getevent and checkevent. */
+ numevent = getevent(client2, &ev);
+ if( numevent != 1 ) {
+ FAIL;
+ report("Expecting a single CirculateRequest event");
+ report("Received %d events", numevent);
+ if(numevent != 0) {
+ report("First event was %s", eventname(ev.type));
+ while(getevent(client2, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ }
+ } else {
+ XCirculateRequestEvent good;
+
+ good.type = CirculateRequest;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = parent;
+ good.window = two;
+ good.place = PlaceOnBottom;
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Verify that no further processing occurred by comparing the window and our reference image. */
+ if(!compsavimage(client1, parent, image)) {
+ FAIL;
+ } else {
+ CHECK;
+ }
+ CHECKPASS(5);
+>>ASSERTION Good A
+When a child is actually restacked, then a
+.S CirculateNotify
+event is generated.
+>>STRATEGY
+Create client1, client2, and client3, with a window on client1
+Create a window hierarchy using buildtree.
+Select StructureNotifyMask events on the window zero on client2.
+Select SubstructureNotifyMask events on the parent window on client3.
+Call xname in order to lower window zero.
+Verify that a correct CirculateNotify event was delivered to
+ window two on client2 using getevent and checkevent.
+Verify that a correct CirculateNotify event was delivered to the
+ parent window on client3 using getevent and checkevent.
+>>CODE
+Display *client1, *client2, *client3;
+struct buildtree *tree;
+Window parent, zero, one, two;
+XEvent ev;
+int numevent;
+
+/* Create client1, client2, and client3, with a window on client1 */
+ client1 = opendisplay();
+ if (client1 == NULL) {
+ delete("could not create client1");
+ return;
+ }
+ else
+ CHECK;
+ client2 = opendisplay();
+ if (client2 == NULL) {
+ delete("could not create client2");
+ return;
+ }
+ else
+ CHECK;
+ client3 = opendisplay();
+ if (client3 == NULL) {
+ delete("could not create client3");
+ return;
+ }
+ else
+ CHECK;
+ parent = defwin(client1);
+
+/* Create a window hierarchy using buildtree. */
+ tree = buildtree(client1, parent, SimpleTemplate, NSimpleTemplate);
+ zero = btntow(tree, "zero"); trace("window zero is %0x", zero);
+ one = btntow(tree, "one"); trace("window one is %0x", one);
+ two = btntow(tree, "two"); trace("window two is %0x", two);
+
+/* Select StructureNotifyMask events on the window zero on client2. */
+ XSelectInput(client2, two, StructureNotifyMask);
+ XSync(client2, True);
+
+/* Select SubstructureNotifyMask events on the parent window on client3. */
+ XSelectInput(client3, parent, SubstructureNotifyMask);
+ XSync(client3 , True);
+
+/* Call xname in order to lower window zero. */
+ display = client1;
+ w = parent;
+ XCALL;
+ XSync(client2, False);
+ XSync(client3, False);
+
+/* Verify that a correct CirculateNotify event was delivered to */
+/* window two on client2 using getevent and checkevent. */
+ numevent = getevent(client2, &ev);
+ trace("%d events were queued on client2", numevent);
+ if (numevent == 0) {
+ FAIL;
+ report("No event was delivered to client2 when the child windows");
+ report("were restacked. Expecting a CirculateNotify event");
+ } else {
+ XCirculateEvent good;
+
+ trace("Checking that:");
+ trace("display==client2, event==two, window==two,");
+ trace("place==PlaceOnBottom");
+ good.type = CirculateNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.event = two;
+ good.window = two;
+ good.place = PlaceOnBottom;
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Verify that a correct CirculateNotify event was delivered to the */
+/* parent window on client3 using getevent and checkevent. */
+ numevent = getevent(client3, &ev);
+ trace("%d events were queued on client3", numevent);
+ if (numevent == 0) {
+ FAIL;
+ report("No event was delivered to client3 when the child windows");
+ report("were restacked. Expecting a CirculateNotify event");
+ } else {
+ XCirculateEvent good;
+
+ trace("Checking that:");
+ trace("display==client3, event==parent, window==two,");
+ trace("place==PlaceOnBottom");
+ good.type = CirculateNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client3;
+ good.event = parent;
+ good.window = two;
+ good.place = PlaceOnBottom;
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+ CHECKPASS(5);
+
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/crcltsbwsu/a1.dat b/xc/test/xsuite/xtest/tset/CH03/crcltsbwsu/a1.dat
new file mode 100644
index 000000000..01e044eba
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/crcltsbwsu/a1.dat
@@ -0,0 +1,323 @@
+! $XConsortium$
+100 90 32
+3fc,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+a,3
+28,1
+a,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+3f2,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/crcltsbwsu/crcltsbwsu.m b/xc/test/xsuite/xtest/tset/CH03/crcltsbwsu/crcltsbwsu.m
new file mode 100644
index 000000000..7855d2c89
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/crcltsbwsu/crcltsbwsu.m
@@ -0,0 +1,351 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCirculateSubwindowsUp CH03
+void
+
+Display *display = Dsp;
+Window w;
+>>EXTERN
+
+static char *SimpleTemplate[] = {
+ ".",
+ "zero . (20,10) 40x40",
+ "one . (30,20) 40x40",
+ "two . (10,30) 40x40",
+ "other1 . (75,10) 15x70",
+};
+static int NSimpleTemplate = NELEM(SimpleTemplate);
+
+static char *Expose1Template[] = {
+ ".",
+ "zero . (20,10) 40x40",
+ "other1 . (75,10) 15x70",
+};
+static int NExpose1Template = NELEM(Expose1Template);
+
+static char *Expose2Template[] = {
+ ".",
+ "one . (30,20) 40x40",
+ "two . (10,30) 40x40",
+};
+static int NExpose2Template = NELEM(Expose2Template);
+
+>>ASSERTION Good A
+When there is a mapped child that is occluded by another child,
+then a call to xname raises the lowest
+such mapped child to the top of the stack.
+>>STRATEGY
+Create a window hierarchy using buildtree.
+Call xname upon the parent.
+Verify that the lowest occluded mapped child window was raised to the top.
+>>CODE
+Window parent;
+
+/* Create a window hierarchy using buildtree. */
+ parent = defwin(display);
+ (void) buildtree(display, parent, SimpleTemplate, NSimpleTemplate);
+
+/* Call xname upon the parent. */
+ w = parent;
+ XCALL;
+
+/* Verify that the lowest occluded mapped child window was raised to the top. */
+ PIXCHECK(display, parent);
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create a window hierarchy using buildtree.
+Call setforexpose on window 'zero' to allow Expose event checking.
+Select Expose events on window 'zero'.
+Call xname in order to expose window 'zero'.
+Use exposecheck to ensure that the window 'zero' was restored correctly.
+>>CODE
+struct buildtree *tree1;
+Window parent, zero;
+
+/* Create a window hierarchy using buildtree. */
+ parent = defwin(display);
+ tree1= buildtree(display, parent, Expose1Template, NExpose1Template);
+ zero = btntow(tree1, "zero");
+
+/* Call setforexpose on window 'zero' to allow Expose event checking. */
+ setforexpose(display, zero);
+ (void) buildtree(display, parent, Expose2Template, NExpose2Template);
+
+/* Select Expose events on window 'zero'. */
+ XSelectInput(display, zero, ExposureMask);
+
+/* Call xname in order to expose window 'zero'. */
+ w = parent;
+ XCALL;
+
+/* Use exposecheck to ensure that the window 'zero' was restored correctly. */
+ if (!exposecheck(display, zero)) {
+ report("Neither Expose events or backing store processing");
+ report("could correctly restore the window contents.");
+ FAIL;
+ } else
+ CHECK;
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When some other client has selected
+.S SubstructureRedirectMask
+on the window, then a
+.S CirculateRequest
+event is generated, and no further processing is performed.
+>>STRATEGY
+Create client1 and client2 with a window on client1
+Create a window hierarchy for client1.
+Save parent window image as reference image.
+Select all events other than SubstructureRedirectMask events on all the windows for client1, to catch rogue events.
+Select SubstructureRedirectMask on the parent window for client2.
+Call xname on client1 in order to raise window zero.
+Verify that no events were delivered to client1 using getevent.
+Verify that a correct CirculateRequest event was delievered to client2 using getevent and checkevent.
+Verify that no further processing occurred by comparing the window and our reference image.
+>>CODE
+Display *client1,*client2;
+struct buildtree *c1tree;
+XImage *image;
+Window parent, zero, one, two;
+XEvent ev;
+int numevent;
+
+/* Create client1 and client2 with a window on client1 */
+ client1 = opendisplay();
+ if (client1 == NULL) {
+ delete("could not create client1");
+ return;
+ }
+ else
+ CHECK;
+ client2 = opendisplay();
+ if (client2 == NULL) {
+ delete("could not create client2");
+ return;
+ }
+ else
+ CHECK;
+
+/* Create a window hierarchy for client1. */
+ parent = defwin(client1);
+ c1tree = buildtree(client1, parent, SimpleTemplate, NSimpleTemplate);
+ zero = btntow(c1tree, "zero");
+ one = btntow(c1tree, "one");
+ two = btntow(c1tree, "two");
+
+/* Save parent window image as reference image. */
+ image= savimage(client1, parent);
+
+/* Select all events other than SubstructureRedirectMask events on all the windows for client1, to catch rogue events. */
+ XSelectInput(client1, parent, ALLEVENTS & ~(SubstructureRedirectMask));
+ XSelectInput(client1, zero, ALLEVENTS & ~(SubstructureRedirectMask));
+ XSelectInput(client1, one, ALLEVENTS & ~(SubstructureRedirectMask));
+ XSelectInput(client1, two, ALLEVENTS & ~(SubstructureRedirectMask));
+
+/* Select SubstructureRedirectMask on the parent window for client2. */
+ XSelectInput(client2, parent, SubstructureRedirectMask);
+ XSync(client2, True);
+
+/* Call xname on client1 in order to raise window zero. */
+ display = client1;
+ w = parent;
+ XCALL;
+ XSync(client2, False);
+
+/* Verify that no events were delivered to client1 using getevent. */
+ numevent = getevent(client1, &ev);
+ if( numevent != 0 ) {
+ FAIL;
+ report("%d unexpected %s delivered to client1",
+ numevent, (numevent==1)?"event was":"events were");
+ report("%sevent was %s", (numevent!=1)?"first ":"",
+ eventname(ev.type));
+ while(getevent(client1, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ } else
+ CHECK;
+
+/* Verify that a correct CirculateRequest event was delievered to client2 using getevent and checkevent. */
+ numevent = getevent(client2, &ev);
+ if( numevent != 1 ) {
+ FAIL;
+ report("Expecting a single CirculateRequest event");
+ report("Received %d events", numevent);
+ if(numevent != 0) {
+ report("First event was %s", eventname(ev.type));
+ while(getevent(client2, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ }
+ } else {
+ XCirculateRequestEvent good;
+
+ good.type = CirculateRequest;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = parent;
+ good.window = zero;
+ good.place = PlaceOnTop;
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Verify that no further processing occurred by comparing the window and our reference image. */
+ if(!compsavimage(client1, parent, image)) {
+ FAIL;
+ } else {
+ CHECK;
+ }
+ CHECKPASS(5);
+
+>>ASSERTION Good A
+When a child is actually restacked,
+then a
+.S CirculateNotify
+event is generated.
+>>STRATEGY
+Create client1, client2, and client3, with a window on client1
+Create a window hierarchy using buildtree.
+Select StructureNotifyMask events on the windows zero on client2
+Select SubstructureNotifyMask events on the parent window on client3
+Call xname in order to raise window zero
+Verify that a correct CirculateNotify event was delivered to window zero
+ on client2 using getevent and checkevent.
+Verify that a correct CirculateNotify event was delivered to the
+ parent window on client3 using getevent and checkevent.
+>>CODE
+Display *client1, *client2, *client3;
+struct buildtree *tree;
+Window parent, zero, one, two;
+XEvent ev;
+int numevent;
+
+/* Create client1, client2, and client3, with a window on client1 */
+ client1 = opendisplay();
+ if (client1 == NULL) {
+ delete("could not create client1");
+ return;
+ }
+ else
+ CHECK;
+ client2 = opendisplay();
+ if (client2 == NULL) {
+ delete("could not create client2");
+ return;
+ }
+ else
+ CHECK;
+ client3 = opendisplay();
+ if (client3 == NULL) {
+ delete("could not create client3");
+ return;
+ }
+ else
+ CHECK;
+ parent = defwin(client1);
+
+/* Create a window hierarchy using buildtree. */
+ tree = buildtree(client1, parent, SimpleTemplate, NSimpleTemplate);
+ zero = btntow(tree, "zero"); trace("window zero is %0x", zero);
+ one = btntow(tree, "one"); trace("window one is %0x", one);
+ two = btntow(tree, "two"); trace("window two is %0x", two);
+
+/* Select StructureNotifyMask events on the windows zero on client2 */
+ XSelectInput(client2, zero, StructureNotifyMask);
+ XSync(client2, True);
+
+/* Select SubstructureNotifyMask events on the parent window on client3 */
+ XSelectInput(client3, parent, SubstructureNotifyMask);
+ XSync(client3 , True);
+
+/* Call xname in order to raise window zero */
+ display = client1;
+ w = parent;
+ XCALL;
+ XSync(client2, False);
+ XSync(client3, False);
+
+/* Verify that a correct CirculateNotify event was delivered to window zero */
+/* on client2 using getevent and checkevent. */
+ numevent = getevent(client2, &ev);
+ trace("%d events were queued on client2", numevent);
+ if (numevent == 0) {
+ FAIL;
+ report("No event was delivered to client2 when the child windows");
+ report("were restacked. Expecting a CirculateNotify event");
+ } else {
+ XCirculateEvent good;
+
+ trace("Checking that:");
+ trace("display==client2, event==zero, window==zero,");
+ trace("place==PlaceOnTop");
+
+ good.type = CirculateNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.event = zero;
+ good.window = zero;
+ good.place = PlaceOnTop;
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Verify that a correct CirculateNotify event was delivered to the */
+/* parent window on client3 using getevent and checkevent. */
+ numevent = getevent(client3, &ev);
+ trace("%d events were queued on client3", numevent);
+ if (numevent == 0) {
+ FAIL;
+ report("No event was delivered to client3 when the child windows");
+ report("were restacked. Expecting a CirculateNotify event");
+ } else {
+ XCirculateEvent good;
+
+ trace("Checking that:");
+ trace("display==client3, event==parent, window==zero,");
+ trace("place==PlaceOnTop");
+
+ good.type = CirculateNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client3;
+ good.event = parent;
+ good.window = zero;
+ good.place = PlaceOnTop;
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+ CHECKPASS(5);
+
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/crtsmplwdw/a4.dat b/xc/test/xsuite/xtest/tset/CH03/crtsmplwdw/a4.dat
new file mode 100644
index 000000000..b81e7b90f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/crtsmplwdw/a4.dat
@@ -0,0 +1,43 @@
+! $XConsortium$
+100 90 32
+9dd,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+11cb,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/crtsmplwdw/crtsmplwdw.m b/xc/test/xsuite/xtest/tset/CH03/crtsmplwdw/crtsmplwdw.m
new file mode 100644
index 000000000..ac2e8ad95
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/crtsmplwdw/crtsmplwdw.m
@@ -0,0 +1,543 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCreateSimpleWindow CH03
+Window
+XCreateSimpleWindow(display, parent, x, y, width, height, border_width, border, background)
+Display *display = Dsp;
+Window parent = DefaultRootWindow(Dsp);
+int x = 10;
+int y = 20;
+unsigned int width = 5;
+unsigned int height = 5;
+unsigned int border_width = 3;
+unsigned long border = 1;
+unsigned long background = 0;
+>>ASSERTION Good A
+A call to
+.S XCreateSimpleWindow
+creates an unmapped
+.S InputOutput
+subwindow
+with a parent window of
+.A parent
+and returns the window ID of the created window.
+>>STRATEGY
+Call XCreateSimpleWindow.
+Get window attributes.
+Verify that map_state is IsUnmapped.
+Verify that the class is InputOutput.
+Call XQueryTree and check parent is parent.
+>>CODE
+Window w;
+XWindowAttributes atts;
+Status s;
+Window junk;
+Window father;
+Window *children;
+unsigned int nchildren;
+
+ w = XCALL;
+
+ s = XGetWindowAttributes(Dsp, w, &atts);
+ if (s == False) {
+ delete("XGetWindowAttributes failed");
+ return;
+ } else
+ CHECK;
+
+ trace("Window created with class %s", classname(atts.class));
+
+ if (atts.class == InputOutput) {
+ CHECK;
+ } else {
+ report("expected class InputOutput got %s", classname(atts.class));
+ FAIL;
+ }
+
+ trace("Window created with map_state %s", mapstatename(atts.map_state));
+
+ if (atts.map_state == IsUnmapped) {
+ CHECK;
+ } else {
+ report("expected map_state IsUnmapped got %s", mapstatename(atts.map_state));
+ FAIL;
+ }
+
+ s = XQueryTree(Dsp, w, &junk, &father, &children, &nchildren);
+ if (s == False) {
+ delete("XQueryTree failed");
+ return;
+ } else
+ CHECK;
+
+ if (father != parent) {
+ report("expected parent to be %lx but was %lx", parent, father);
+ FAIL;
+ } else
+ CHECK;
+
+ if (nchildren != 0)
+ XFree((char*)children);
+ XDestroyWindow(Dsp, w);
+ CHECKPASS(5);
+
+>>ASSERTION Good A
+On a call to xname a
+.S CreateNotify
+event is generated on the parent window.
+>>STRATEGY
+Call XCreateSimpleWindow.
+Verify that a CreateNotify event is received with correct values.
+>>CODE event
+Window w;
+XEvent event;
+XCreateWindowEvent ge;
+int n;
+
+ /*
+ * Create a window as the parent for this test just to insulate
+ * us from window managers a bit.
+ */
+ parent = defdraw(display, VI_WIN);
+ if (isdeleted())
+ return;
+ else
+ CHECK;
+
+ XSelectInput(Dsp, parent, ALLEVENTS);
+
+ w = XCALL;
+
+ XSelectInput(Dsp, parent, NoEventMask);
+
+ if (getevent(Dsp, &event) != 1 || event.type != CreateNotify) {
+ report("Expecting one CreateNotify event");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ /* Set up a good event structure of what we are expecting */
+ ge.type = CreateNotify;
+ ge.display = display;
+ ge.parent = parent;
+ ge.window = w;
+ ge.x = x;
+ ge.y = y;
+ ge.width = width;
+ ge.height = height;
+ ge.border_width = border_width;
+ ge.override_redirect = False;
+
+ n = checkevent((XEvent *)&ge, &event);
+ if (n == 0) {
+ CHECK;
+ } else {
+ report("error in %d field%s of event", n, (n!=1)?"s":"");
+ FAIL;
+ }
+
+ XDestroyWindow(Dsp, w);
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+The created window is placed on top in the stacking order with respect to
+siblings.
+>>STRATEGY
+Create a parent window.
+Create two overlapping sibling windows.
+Verify that second window is at top of stacking order.
+Verify that first sibling is next in the stacking order.
+>>CODE
+Window w1, w2;
+int n;
+
+ parent = defdraw(display, VI_WIN);
+ if (isdeleted())
+ return;
+ else
+ CHECK;
+
+ w1 = XCALL;
+ w2 = XCALL;
+
+ if ((n = stackorder(Dsp, w1)) != 0) {
+ report("Stacking order for w1 was %d, expected 0", n);
+ FAIL;
+ } else if ((n = stackorder(Dsp, w2)) != 1) {
+ report("Stacking order for w2 was %d, expected 1", n);
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyWindow(Dsp, w1);
+ XDestroyWindow(Dsp, w2);
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+>># This probably shouldn't be here.
+Any part of the window that extends outside its parent window is clipped.
+>>STRATEGY
+Create window to use as parent.
+Create a subwindow on that with crechild.
+Create a window that would extend outside previous window.
+Set background to W_FG.
+Map all windows.
+Pixmap verify that window is clipped.
+>>CODE
+Window top;
+Window clipwin;
+Window w;
+XVisualInfo *vp;
+struct area area;
+
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ top = (Window)makedrawable(display, vp);
+ setarea(&area, 5, 5, 40, 40);
+ clipwin = crechild(display, top, &area);
+
+ parent = clipwin;
+ x = 20; y = 20;
+ width = 100; height = 100;
+ background = W_FG;
+ w = XCALL;
+
+ XMapWindow(display, w);
+ if (isdeleted())
+ return;
+ else
+ CHECK;
+
+ PIXCHECK(display, top);
+ XDestroyWindow(Dsp, w);
+ }
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+The created window is not displayed.
+>>STRATEGY
+Create window to use as parent.
+Set background to other than W_BG.
+Create window with xname.
+Verify that parent window is still clear.
+>>CODE
+XVisualInfo *vp;
+Window w;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ parent = (Window)makedrawable(display, vp);
+
+ background = W_FG;
+ w = XCALL;
+
+ if (checkclear(display, parent))
+ CHECK;
+ else {
+ report("Created window was visible");
+ FAIL;
+ }
+ XDestroyWindow(Dsp, w);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+The depth, class and visual are inherited from the parent window.
+>>STRATEGY
+Create window.
+Verify that values of depth, class and visual are same as in parent.
+>>CODE
+Status s;
+Window w;
+XWindowAttributes childatts;
+XWindowAttributes parentatts;
+
+ w = XCALL;
+
+ s = XGetWindowAttributes(Dsp, w, &childatts);
+ if (s == False) {
+ delete("XGetWindowAttributes failed");
+ return;
+ } else
+ CHECK;
+
+ s = XGetWindowAttributes(Dsp, DefaultRootWindow(Dsp), &parentatts);
+ if (s == False) {
+ delete("XGetWindowAttributes failed");
+ return;
+ } else
+ CHECK;
+
+ if (childatts.visual != parentatts.visual) { /* XXX have to compare */
+ report("Visual is different to parent");
+ FAIL;
+ } else if (childatts.class != parentatts.class) {
+ report("Class was different to parent");
+ FAIL;
+ } else if (childatts.depth != parentatts.depth) {
+ report("Depth was different to parent");
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyWindow(Dsp, w);
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+All window attributes, other than depth, class, visual, background
+and border,
+have their default values.
+>>STRATEGY
+Call XCreateSimpleWindow.
+Get the window attributes
+Verify that these are the default values
+>>CODE
+Window w;
+XWindowAttributes atts;
+XWindowAttributes parentatts;
+Status s;
+
+ w = XCALL;
+ s = XGetWindowAttributes(Dsp, w, &atts);
+ if (s == False) {
+ delete("XGetWindowAttributes failed");
+ return;
+ } else
+ CHECK;
+
+ s = XGetWindowAttributes(Dsp, DefaultRootWindow(Dsp), &parentatts);
+ if (s == False) {
+ delete("XGetWindowAttributes failed");
+ return;
+ } else
+ CHECK;
+
+ /* background-pixmap - None */
+ /* border-pixmap - CopyFromParent */
+
+ if (atts.bit_gravity != ForgetGravity) {
+ report("bit_gravity was %s, expecting ForgetGravity"
+ , bitgravityname(atts.bit_gravity));
+ FAIL;
+ } else
+ CHECK;
+
+ if (atts.win_gravity != NorthWestGravity) {
+ report("win_gravity was %s, expecting NorthWestGravity"
+ , wingravityname(atts.win_gravity)
+ );
+ FAIL;
+ } else
+ CHECK;
+
+ if (atts.backing_store != NotUseful) {
+ report("backing_store was %s, expecting NotUseful"
+ , backingstorename(atts.backing_store));
+ FAIL;
+ } else
+ CHECK;
+
+ if (atts.backing_planes != ~0) {
+ report("backing_planes was 0x%x, expecting all ones", atts.backing_planes);
+ FAIL;
+ } else
+ CHECK;
+
+ if (atts.backing_pixel != 0) {
+ report("backing_pixel was 0x%x, expecting 0", atts.backing_pixel);
+ FAIL;
+ } else
+ CHECK;
+
+ if (atts.save_under != False) {
+ report("save_under was 0x%x, expecting False", atts.save_under);
+ FAIL;
+ } else
+ CHECK;
+
+ if (atts.your_event_mask != NoEventMask) {
+ report("your_event_mask was %s, expecting NoEventMask"
+ , eventmaskname(atts.your_event_mask));
+ FAIL;
+ } else
+ CHECK;
+
+ if (atts.do_not_propagate_mask != NoEventMask) {
+ report("do_not_propagate_mask was %s, expecting NoEventMask"
+ , eventmaskname(atts.do_not_propagate_mask));
+ FAIL;
+ } else
+ CHECK;
+
+ if (atts.override_redirect != False) {
+ report("override_redirect was %d, expecting False"
+ , atts.override_redirect);
+ FAIL;
+ } else
+ CHECK;
+
+ if (atts.colormap != parentatts.colormap) {
+ report("colormap was 0x%x, expecting 0x%x"
+ , atts.colormap, parentatts.colormap);
+ FAIL;
+ } else
+ CHECK;
+
+ /* Cursor -- None */
+
+ XDestroyWindow(Dsp, w);
+ CHECKPASS(12);
+
+>>ASSERTION Good B 1
+The cursor is taken from the parent window.
+>>STRATEGY
+If extended testing is required:
+ Create a parent window.
+ Set the parents cursor to a non-default cursor.
+ Verify that the parent's cursor was set correctly.
+ Create a child window using xname.
+ Map the child window.
+ Warp the pointer to the child window.
+ Verify that the current cursor is that of the parent.
+ Set the parents cursor to a different cursor.
+ Verify that the parent's cursor was set correctly.
+ Verify that the current cursor has changed to that of the parent.
+>>CODE
+Window w;
+Cursor pcur;
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+
+ pcur = makecur(display);
+
+ /* Create a parent window. */
+ parent = defwin(display);
+
+ /* Set the parents cursor to a non-default cursor. */
+ XDefineCursor(display, parent, pcur);
+
+ /* Verify that the parent's cursor was set correctly. */
+ if(curofwin(display, pcur, parent) == False) {
+ delete("XDefineCursor() did not set the parent's window correctly.");
+ return;
+ } else
+ CHECK;
+
+ /* Create a child window using xname. */
+ x = 10;
+ y = 10;
+ w = XCALL;
+ /* Map the child window. */
+ XMapWindow(display, w);
+
+ /* Warp the pointer to the child window. */
+ (void) warppointer(display, w, 0,0);
+
+ /* Verify that the current cursor is that of the parent. */
+ if(spriteiswin(display, parent) == False) {
+ report("The cursor used for the child window was not that of its parent.");
+ FAIL;
+ } else
+ CHECK;
+
+ pcur = makecur2(display);
+
+ /* Set the parents cursor to a different cursor. */
+ XDefineCursor(display, parent, pcur);
+
+ /* Verify that the parent's cursor was set correctly. */
+ if(curofwin(display, pcur, parent) == False) {
+ delete("XDefineCursor() did not set the parent's window correctly.");
+ return;
+ } else
+ CHECK;
+
+ /* Verify that the current cursor has changed to that of the parent. */
+ if(spriteiswin(display, parent) == False) {
+ report("The cursor used for the child window was not that of its parent.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+When
+.A width
+or
+.A height
+is zero, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create window with width of 0
+Verify that BadValue error occurs
+Create window with height of 0
+Verify that BadValue error occurs
+Create window with height of 0 and width of 0
+Verify that BadValue error occurs
+>>CODE BadValue
+Window w;
+
+ /* First check for width 0 */
+ width = 0;
+ height = 10;
+
+ w = XCALL;
+ if (geterr() == BadValue) {
+ CHECK;
+ } else {
+ report("Width 0 did not give BadValue.");
+ FAIL;
+ }
+
+ /* Now check for height 0 */
+ width = 10;
+ height = 0;
+
+ w = XCALL;
+
+ if (geterr() == BadValue) {
+ CHECK;
+ } else {
+ report("Height 0 did not give BadValue.");
+ FAIL;
+ }
+
+ /* Now check for height 0 && width 0 */
+ width = 0;
+ height = 0;
+
+ w = XCALL;
+
+ if (geterr() == BadValue) {
+ CHECK;
+ } else {
+ report("Height 0 and width 0 did not give BadValue.");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/crtwdw/a11.dat b/xc/test/xsuite/xtest/tset/CH03/crtwdw/a11.dat
new file mode 100644
index 000000000..1721f0068
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/crtwdw/a11.dat
@@ -0,0 +1,3604 @@
+! $XConsortium$
+100 90 32
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+18,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+18,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+2,1
+3,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+0
+2,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+18,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+18,1
+0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
+1
+4,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/crtwdw/a15.dat b/xc/test/xsuite/xtest/tset/CH03/crtwdw/a15.dat
new file mode 100644
index 000000000..3218880c4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/crtwdw/a15.dat
@@ -0,0 +1,99 @@
+! $XConsortium$
+100 90 32
+17a3,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+4d,0
+3,1
+4,0
+3,1
+4,0
+3,1
+4,0
+3,1
+4d,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+116,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+4d,0
+2,1
+14,0
+2,1
+4d,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+116,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+4d,0
+2,1
+14,0
+2,1
+4d,0
+1
+14,0
+1
+4e,0
+1
+14,0
+1
+b6,0
+1
+6,0
+1
+6,0
+1
+51,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+39f,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/crtwdw/commattr.mc b/xc/test/xsuite/xtest/tset/CH03/crtwdw/commattr.mc
new file mode 100644
index 000000000..adac3c3e4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/crtwdw/commattr.mc
@@ -0,0 +1,1837 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>EXTERN
+
+#if defined(T_XCreateWindow)
+static Window w;
+#endif
+
+static void
+setinonly()
+{
+#if defined(T_XCreateWindow)
+ class = InputOnly;
+ depth = 0;
+ visual = CopyFromParent;
+ border_width = 0;
+#else
+ w = iponlywin(Dsp);
+#endif
+}
+
+
+#define XCWA_NORMAL 0
+#define XCWA_DEFCOLMAP 1
+#define XCWA_GRAVITY 2
+
+static Window
+makeinout(mio_parent, mio_visual, mio_depth, mio_mode)
+Window mio_parent;
+Visual *mio_visual;
+int mio_depth;
+int mio_mode;
+{
+ Display *mio_display;
+ int mio_x, mio_y;
+ unsigned int mio_width, mio_height;
+ unsigned int mio_border_width;
+ unsigned int mio_class;
+ unsigned long mio_valuemask;
+ XSetWindowAttributes *mio_aptr;
+ XSetWindowAttributes mio_a;
+
+
+/* If we are passed a parent of None, then we need to set it ourselves. */
+ if(mio_parent == None)
+ {
+ mio_parent = DRW(Dsp);
+ }
+
+ mio_display = Dsp;
+ mio_x = 50;
+ mio_y = 60;
+ mio_width = 20;
+ mio_height = 17;
+ mio_border_width = 2;
+ mio_class = InputOutput;
+ mio_valuemask = 0;
+ mio_aptr = &mio_a;
+
+ switch(mio_mode)
+ {
+ case XCWA_DEFCOLMAP:
+ mio_valuemask = CWColormap;
+ mio_a.colormap = makecolmap(mio_display, mio_visual, AllocNone);
+ break;
+ case XCWA_GRAVITY:
+ mio_valuemask = CWWinGravity;
+ mio_a.win_gravity = NorthWestGravity;
+ case XCWA_NORMAL:
+ default:
+ break;
+ }
+ return(XCreateWindow(mio_display, mio_parent, mio_x, mio_y, mio_width,
+ mio_height, mio_border_width, mio_depth, mio_class,
+ mio_visual, mio_valuemask, mio_aptr));
+}
+
+>>ASSERTION Good A
+When the background-pixmap
+attribute is set to
+.S None
+and the
+.M background_pixel
+attribute is not being set at the same time,
+then the window has no defined background.
+>>STRATEGY
+Set background-pixmap attribute to None.
+Map window over a patterned background.
+Verify that contents of the window are the same as the parent's.
+>>CODE
+XVisualInfo *vp;
+
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ parent = makedrawable(display, vp);
+ pattern(display, parent);
+
+ visual = vp->visual;
+ depth = vp->depth;
+ valuemask = CWBackPixmap;
+ attributes->background_pixmap = None;
+
+#if defined(T_XCreateWindow)
+ w = XCALL;
+#else
+ w = makeinout( parent , visual, depth, XCWA_NORMAL );
+ XCALL;
+#endif
+ XMapWindow(display, w);
+ if (isdeleted())
+ continue;
+ /*
+ * Use pixmap checking here because we want to check the border
+ * to prove that the window is really there, but transparent.
+ */
+ PIXCHECK(display, parent);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+>># ### This should go in XClearWindow etc.
+When the background-pixmap attribute is set to
+.S ParentRelative ,
+then each time the background pixmap is required it is taken from the
+parent window at the time that it is required,
+>>#the background pixmap of the parent window is used
+with the background tile origin aligned with the origin of
+the parent window.
+>># This is not 'the background is set to the background of the parent window'
+>>STRATEGY
+Set background-pixmap to ParentRelative.
+For a variety of parent backgrounds
+ Clear child window.
+ Verify that background changes to that set for the parent.
+>>CODE
+Pixmap pm;
+
+ visual = CopyFromParent;
+ depth = CopyFromParent;
+ valuemask = CWBackPixmap;
+ attributes->background_pixmap = ParentRelative;
+
+ parent = defdraw(display, VI_WIN);
+#if defined(T_XCreateWindow)
+ w = XCALL;
+ XMapWindow(display, w);
+#else
+ w = makeinout(parent, visual, depth, XCWA_NORMAL);
+ XMapWindow(display, w);
+ XCALL;
+#endif
+
+ pm = maketile(display, parent);
+ XSetWindowBackgroundPixmap(display, parent, pm);
+ XClearWindow(display, w);
+
+ if (checktile(display, w, (struct area *)0, -x-border_width, -y-border_width, pm))
+ CHECK;
+ else {
+ report("ParentRelative check failed for 'maketile' background");
+ FAIL;
+ }
+
+ pm = XCreatePixmap(display, parent, 10, 17, (int)getdepth(display, w));
+ dclear(display, pm);
+ pattern(display, pm);
+ XSetWindowBackgroundPixmap(display, parent, pm);
+ XClearWindow(display, w);
+ if (checktile(display, w, (struct area *)0, -x-border_width, -y-border_width, pm))
+ CHECK;
+ else {
+ report("ParentRelative check failed for 'pattern' background");
+ FAIL;
+ }
+
+ XSetWindowBackground(display, parent, W_FG);
+ XClearWindow(display, w);
+ if (checkarea(display, w, (struct area *)0, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("ParentRelative check failed for plain background set to W_FG");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When both
+.M background_pixel
+and
+.M background_pixmap
+are specified, then
+.M background_pixel
+overrides
+.M background_pixmap .
+>>STRATEGY
+Set both the background-pixel attribute and the background-pixmap attribute.
+Map and clear window to ensure background is refreshed.
+Verify that background is set to the pixel value.
+>>CODE
+Pixmap pm;
+
+ parent = defdraw(display, VI_WIN);
+
+ pm = maketile(display, parent);
+ attributes->background_pixel = W_FG;
+ attributes->background_pixmap = pm;
+ valuemask = CWBackPixel|CWBackPixmap;
+
+ /*
+ * For running with window managers during debugging, testing etc.
+ */
+ if (config.debug_override_redirect) {
+ attributes->override_redirect = True;
+ valuemask |= CWOverrideRedirect;
+ }
+
+#if defined(T_XCreateWindow)
+ w = XCALL;
+ XMapWindow(display, w);
+#else
+ w = makeinout(parent, (Visual *)CopyFromParent,
+ CopyFromParent, XCWA_NORMAL);
+ XMapWindow(display, w);
+ XCALL;
+#endif
+ XClearWindow(display, w);
+
+ if (checkarea(display, w, (struct area *)0, W_FG, W_FG, CHECK_ALL))
+ CHECK;
+ else {
+ report("background pixel did not override background pixmap");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When
+.M background_pixel
+is specified,
+then it is truncated to the depth of the window.
+>># Spec says 'of the visual', but what about depth arg?
+>>STRATEGY
+For each visual
+ Try variety of background pixel values.
+ Verify that they are truncated to depth using checkarea.
+>>CODE
+XVisualInfo *vp;
+static int pixlist[] = {
+ 0, 1, 3, 4, 17, 18, 200, 300, 303,
+ 0x1234, 0x12345, 0x123456, 0x1234567, 0x12345678};
+long pix;
+int i;
+
+ visual = CopyFromParent;
+ depth = CopyFromParent;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ parent = makedrawable(display, vp);
+
+ for (i = 0; i < NELEM(pixlist); i++) {
+ pix = pixlist[i];
+
+ visual = vp->visual;
+ depth = vp->depth;
+ valuemask = CWBackPixel;
+ attributes->background_pixel = pix;
+
+#if defined(T_XCreateWindow)
+ w = XCALL;
+#else
+ w = makeinout(parent, visual, depth, XCWA_NORMAL);
+ XCALL;
+#endif
+ XMapWindow(display, w);
+ XClearWindow(display, w);
+
+ /*
+ * Check the whole background. If the background was not all
+ * set to the same value then the error message could be
+ * confusing.
+ */
+ debug(3, " pix 0x%x", pix);
+ debug(3, " vp->depth 0x%x", vp->depth);
+ debug(3, " DEPTHMASK(vp->depth) 0x%x", DEPTHMASK(vp->depth));
+ if (checkarea(display, w, (struct area *)0, pix&DEPTHMASK(vp->depth), 0, CHECK_ALL))
+ CHECK;
+ else {
+ report("Background pixel was not truncated (value 0x%x)", pix);
+ report(" Was 0x%x, expecting 0x%x", getpixel(display, w, 0, 0),
+ pix&DEPTHMASK(vp->depth));
+ FAIL;
+ }
+ }
+ }
+
+ CHECKPASS(nvinf() * NELEM(pixlist));
+
+>>ASSERTION Good A
+When
+.M border_pixmap
+is
+.S CopyFromParent ,
+then the border-pixmap attribute
+is copied from the parent window.
+>>STRATEGY
+Create parent window.
+Set parent border-pixmap attribute.
+Set child window border-pixmap to CopyFromParent.
+Ensure that window is mapped.
+Pixmap verify to check that border is correct.
+>>CODE
+Pixmap pm;
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ parent = makedrawable(display, vp);
+ pm = maketile(display, parent);
+ XSetWindowBorderPixmap(display, parent, pm);
+
+ visual = vp->visual;
+ depth = vp->depth;
+ valuemask = CWBorderPixmap;
+ attributes->border_pixmap = CopyFromParent;
+
+#if defined(T_XCreateWindow)
+ w = XCALL;
+ XMapWindow(display, w);
+#else
+ w = makeinout(parent, visual, depth, XCWA_NORMAL);
+ XMapWindow(display, w);
+ XCALL;
+#endif
+
+ PIXCHECK(display, parent);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When
+.M border_pixel
+is specified, then the value is truncated to the depth of the window.
+>>STRATEGY
+For each visual
+ Set border-pixel to various values.
+ Read one pixel back from the border.
+ Verify that this pixel has been truncated to depth of window.
+>>CODE
+XVisualInfo *vp;
+static int pixlist[] = {
+ 0, 1, 3, 4, 17, 18, 200, 300, 303,
+ 0x1234, 0x12345, 0x123456, 0x1234567, 0x12345678};
+long pix;
+long borderpix;
+int i;
+
+ visual = CopyFromParent;
+ depth = CopyFromParent;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ parent = makedrawable(display, vp);
+
+ for (i = 0; i < NELEM(pixlist); i++) {
+ pix = pixlist[i];
+
+ attributes->border_pixel = pix;
+ valuemask = CWBorderPixel;
+
+#if defined(T_XCreateWindow)
+ w = XCALL;
+ XMapWindow(display, w);
+#else
+ w = makeinout(parent, visual, depth, XCWA_NORMAL);
+ XMapWindow(display, w);
+ XCALL;
+#endif
+ XClearWindow(display, w);
+
+ borderpix = getpixel(display, w, -1, -1);
+ debug(3, " pix 0x%x", pix);
+ debug(3, " vp->depth 0x%x", vp->depth);
+ debug(3, " DEPTHMASK(vp->depth) 0x%x", DEPTHMASK(vp->depth));
+ if (borderpix == (pix & DEPTHMASK(vp->depth)))
+ CHECK;
+ else {
+ report("Border pixel was not truncated (value 0x%x)", pix);
+ report(" Was 0x%x, expecting 0x%x", borderpix,
+ pix & DEPTHMASK(vp->depth));
+ FAIL;
+ }
+ }
+ }
+
+ CHECKPASS(nvinf() * NELEM(pixlist));
+
+>>ASSERTION Good A
+When
+.M colormap
+is
+.S CopyFromParent ,
+then the colormap attribute is copied from the parent window.
+>>STRATEGY
+Set colormap attribute to CopyFromParent.
+Get attribute values.
+Verify that colormap is same as for parent.
+>>CODE
+XVisualInfo *vp;
+XWindowAttributes getatts;
+XWindowAttributes parentatts;
+
+ depth = CopyFromParent;
+ visual = CopyFromParent;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ parent = makedrawable(display, vp);
+ XGetWindowAttributes(display, parent, &parentatts);
+
+ attributes->colormap = CopyFromParent;
+ valuemask = CWColormap;
+
+#if defined(T_XCreateWindow)
+ w = XCALL;
+#else
+ w = makeinout(parent, visual, depth, XCWA_NORMAL);
+ XCALL;
+#endif
+
+ XGetWindowAttributes(display, w, &getatts);
+
+ if (getatts.colormap != parentatts.colormap) {
+ report("Colormap CopyFromParent: Got 0x%x, expecting 0x%x",
+ getatts.colormap, parentatts.colormap);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION Good B 1
+When the cursor attribute is set to
+.S None ,
+then the cursor of the parent window is used for the window
+and any change in the parent window's cursor will cause an
+immediate change in the window's cursor.
+>>STRATEGY
+If extended testing is required:
+ Create a parent window.
+ Set the parent's cursor to a non-default cursor.
+ Verify that the parent's cursor was set correctly.
+ If XCreateWindow:
+ Create a child window using xname.
+ Otherwise:
+ Create and map a child window.
+ Change the cursor attribute of the window to None using xname.
+ Warp the pointer to the child window.
+ Verify that the current cursor is that of the parent.
+ Verify that the child's cursor was set correctly.
+ Set the parent's cursor to a different cursor.
+ Verify that the parent's cursor was set correctly.
+ Verify that the current cursor has changed to that of the parent.
+>>CODE
+Cursor pcur;
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+
+ pcur = makecur(display);
+ valuemask = CWCursor;
+ attributes->cursor = None;
+ x = 10;
+ y = 10;
+
+ /* Create a parent window. */
+ parent = defwin(display);
+
+ /* Set the parent's cursor to a non-default cursor. */
+ XDefineCursor(display, parent, pcur);
+
+ /* Verify that the parent's cursor was set correctly. */
+ if(curofwin(display, pcur, parent) == False) {
+ delete("XDefineCursor() did not set the parent window's cursor correctly.");
+ return;
+ } else
+ CHECK;
+
+#if defined(T_XCreatWindow)
+ /* Create a child window using xname. */
+ w = XCALL;
+#else
+ /* Create and map a child window. */
+ w = makeinout( parent , visual, depth, XCWA_NORMAL );
+ XMapWindow(display, w);
+ /* Change the cursor attribute of the window to None using XChangeWindowAttributes. */
+ XCALL;
+#endif
+
+ /* Warp the pointer to the child window. */
+ (void) warppointer(display, w, 0,0);
+
+ /* Verify that the current cursor is that of the parent. */
+ if(spriteiswin(display, parent) == False) {
+ report("The cursor used for the child window was not that of its parent.");
+ FAIL;
+ } else
+ CHECK;
+
+ /* Verify that the child's cursor was set correctly. */
+ if(curofwin(display, None, w) == False) {
+ report("Window's cursor was not set to None.");
+ FAIL;
+ } else
+ CHECK;
+
+ pcur = makecur2(display);
+
+ /* Set the parent's cursor to a different cursor. */
+ XDefineCursor(display, parent, pcur);
+
+ /* Verify that the parent's cursor was set correctly. */
+ if(curofwin(display, pcur, parent) == False) {
+ delete("XDefineCursor() did not set the parent window's cursor correctly.");
+ return;
+ } else
+ CHECK;
+
+ /* Verify that the current cursor has changed to that of the parent. */
+ if(spriteiswin(display, parent) == False) {
+ report("The cursor used for the child window was not that of its parent.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>>ASSERTION Bad A
+When
+.M background_pixmap
+is not a valid pixmap,
+.S None ,
+or
+.S ParentRelative ,
+then a
+.S BadPixmap
+error occurs.
+>>STRATEGY
+Call xname with background_pixmap set to an invalid value.
+Verify that a BadPixmap error occurs.
+>>CODE BadPixmap
+
+ seterrdef();
+
+
+ attributes->background_pixmap = badpixm(display);
+ valuemask = CWBackPixmap;
+
+#if defined(T_XCreateWindow)
+ XCALL;
+#else
+ parent = defdraw(display, VI_WIN); /* Needed for XCreateWindow? */
+ w = makeinout(None, (Visual *)CopyFromParent,
+ CopyFromParent, XCWA_NORMAL);
+ XCALL;
+#endif
+
+ if (geterr() == BadPixmap)
+ PASS;
+ else
+ FAIL; /* Already reported */
+>>ASSERTION Bad A
+When
+.M border_pixmap
+is not a valid pixmap
+or
+.S CopyFromParent ,
+then a
+.S BadPixmap
+error occurs.
+>>STRATEGY
+Call xname with border_pixmap set to an invalid value.
+Verify that a BadPixmap error occurs.
+>>CODE BadPixmap
+
+ seterrdef();
+
+ attributes->border_pixmap = badpixm(display);
+ valuemask = CWBorderPixmap;
+
+#if defined(T_XCreateWindow)
+ XCALL;
+#else
+ parent = defdraw(display, VI_WIN); /* Needed for XCreateWindow? */
+ w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+ XCALL;
+#endif
+
+ if (geterr() == BadPixmap)
+ PASS;
+ else
+ FAIL; /* Already reported */
+>>ASSERTION Bad A
+When
+.M colormap
+is not a valid Colormap resource
+or
+.S CopyFromParent ,
+then a
+.S BadColor
+error occurs.
+>>STRATEGY
+Call xname with colormap set to an invalid value.
+Verify that a BadColor error occurs.
+>>CODE BadColor
+
+ seterrdef();
+
+ attributes->colormap = badcolormap(display, DRW(display)); /* XXX */
+ valuemask = CWColormap;
+
+#if defined(T_XCreateWindow)
+ XCALL;
+#else
+ parent = defdraw(display, VI_WIN); /* Needed for XCreateWindow? */
+ w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+ XCALL;
+#endif
+
+ if (geterr() == BadColor)
+ PASS;
+ else
+ FAIL; /* Already reported */
+>>ASSERTION Bad A
+When
+.M cursor
+is not a valid Cursor resource
+or
+.S None ,
+then a
+.S BadCursor
+error occurs.
+>>STRATEGY
+Call xname with cursor set to an invalid value.
+Verify that a BadCursor error occurs.
+>>CODE BadCursor
+
+ seterrdef();
+
+ /* Set to a pixmap */
+ attributes->cursor = maketile(display, DRW(display));
+ valuemask = CWCursor;
+
+#if defined(T_XCreateWindow)
+ XCALL;
+#else
+ parent = defdraw(display, VI_WIN); /* Needed for XCreateWindow? */
+ w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+ XCALL;
+#endif
+
+ if (geterr() == BadCursor)
+ PASS;
+ else
+ FAIL; /* Already reported */
+>>ASSERTION Bad A
+When the window has class
+.S InputOnly
+and
+.A valuemask
+contains a bit set other than
+.S CWWinGravity ,
+.S CWEventMask ,
+.S CWDontPropagate ,
+.S CWOverrideRedirect
+and
+.S CWCursor ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Set value mask to contain invalid bits.
+Verify in each case, that a BadMatch error occurs.
+>>CODE BadMatch
+int i;
+int n;
+unsigned long vals[NM_LEN];
+static unsigned long validbits[] = {
+ CWWinGravity,
+ CWEventMask,
+ CWDontPropagate,
+ CWOverrideRedirect,
+ CWCursor,
+ };
+
+ seterrdef();
+ setinonly();
+
+ n = notmaskmember(validbits, NELEM(validbits), vals);
+
+ for (i = 0; i < n; i++) {
+
+ debug(1, "Trying arg of %d", vals[i]);
+
+ valuemask = vals[i];
+#if defined(T_XCreateWindow)
+ XCALL;
+#else
+ XCALL;
+#endif
+
+ if (geterr() == BadMatch)
+ CHECK;
+ else {
+ trace("Value of %d did not give BadMatch", vals[i]);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(n);
+>>ASSERTION Bad C
+If windows with depth other than one are supported:
+When
+.M background_pixmap
+and the window do not have the same depth, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Use depth of 1 for the pixmap.
+Find a visual not of depth 1.
+If not such a visual
+ UNSUPPORTED
+else
+ Attempt to set background_pixmap to the depth 1 pixmap.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+Pixmap pm;
+XVisualInfo *vp;
+int found = 0;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ if (vp->depth != 1) {
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found) {
+ unsupported("Only windows with depth one are supported");
+ return;
+ }
+
+ depth = vp->depth;
+ visual = vp->visual;
+ pm = XCreatePixmap(display, DRW(display), 2, 2, 1);
+ attributes->background_pixmap = pm;
+ valuemask = CWBackPixmap;
+
+#if defined(T_XCreateWindow)
+ (void)XCALL;
+#else
+ parent = defdraw(display, VI_WIN);
+ w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+ (void)XCALL;
+#endif
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+ XFreePixmap(display, pm);
+>>ASSERTION Bad C
+If multiple screens are supported:
+When
+.M background_pixmap
+and the window are not created for the same screen, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If there is a pixmap depth on the alternate screen that has the same
+depth as a visual on the test screen then
+ Create pixmap on alternate screen.
+ Attempt to set background-pixmap with the pixmap
+ Verify that a BadMatch error occurs.
+else
+ UNSUPPORTED
+>>CODE BadMatch
+XVisualInfo *vp;
+Pixmap pm;
+int *depths;
+int count;
+int found = 0;
+int i;
+
+ if (config.alt_screen == -1) {
+ unsupported("No alternate screen supported");
+ return;
+ }
+
+ depths = XListDepths(display, config.alt_screen, &count);
+
+ for (resetvinf(VI_WIN); (!found && nextvinf(&vp)); ) {
+ for (i = 0; i < count; i++) {
+ if (depths[i] == vp->depth)
+ {
+ found = 1;
+ break;
+ }
+ }
+ }
+
+ if (!found) {
+ unsupported("Pixmaps of same depth as a window not supported on alt screen");
+ return;
+ }
+
+ pm = XCreatePixmap(display, RootWindow(display, config.alt_screen),
+ 2, 3, vp->depth);
+
+ attributes->background_pixmap = pm;
+ valuemask = CWBackPixmap;
+
+#if defined(T_XCreateWindow)
+ XCALL;
+#else
+ parent = defdraw(display, VI_WIN);
+ w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+ XCALL;
+#endif
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+ XFreePixmap(display, pm);
+>>ASSERTION Bad C
+If multiple window depths are supported:
+When
+.M background_pixmap
+is
+.S ParentRelative
+and the window and the parent window do not have the same depth, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If two different depth windows are supported.
+ Create window with different depth to parent.
+ Attempt to set background_pixmap to ParentRelative.
+ Verify that a BadMatch error occurs.
+else
+ UNSUPPORTED.
+>>CODE BadMatch
+XVisualInfo *vp;
+XVisualInfo *vp2 = 0;
+int found = 0;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ if (vp2 == 0) {
+ vp2 = vp;
+ } else if (vp->depth != vp2->depth) {
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found) {
+ unsupported("Only one depth of window is supported");
+ return;
+ }
+
+ parent = makedrawable(display, vp2);
+ visual = vp->visual;
+ depth = vp->depth;
+
+ attributes->background_pixmap = ParentRelative;
+ valuemask = CWBackPixmap;
+
+#if defined(T_XCreateWindow)
+ (void)XCALL;
+#else
+ w = makeinout(parent, visual, depth, XCWA_NORMAL);
+ (void)XCALL;
+#endif
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+When
+.M colormap
+and the window are not created for the same screen, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If multiple screens are supported:
+ Obtain visual information about the alternate screen.
+ Determine a visual type shared between the main and alternate screen.
+ Create a colormap on the alternate screen.
+ Attempt to set the colormap.
+ Verify that a BadMatch error occurs.
+else
+ UNSUPPORTED
+>># In order to avoid a BadMatch because the visual
+>># types do not match, we should attempt to create a colormap and window
+>># of the same visual type, on different screens.
+>># Of course, I don't know how many platforms will allow this. Stuart
+>>CODE BadMatch
+Colormap cm;
+XVisualInfo *vp,*vp1, *vinfo, vi;
+int count;
+int found = 0;
+int i;
+
+ if (config.alt_screen == -1) {
+ unsupported("No alternate screen supported");
+ return;
+ }
+
+ vi.screen = config.alt_screen;
+ vinfo = XGetVisualInfo(Dsp, VisualScreenMask, &vi, &count);
+
+ for (resetvinf(VI_WIN); (!found && nextvinf(&vp)); ) {
+ for (i = 0; i < count; i++) {
+ vp1 = &vinfo[i];
+ if (vp1->visual == vp->visual)
+ {
+ found = 1;
+ break;
+ }
+ }
+ }
+
+ if (!found) {
+ unsupported("Cannot create a colormap on the alternate screen of the same visual type as a window on the main screen");
+ return;
+ }
+
+ cm = XCreateColormap(display, RootWindow(display, config.alt_screen),
+ vp1->visual, AllocNone);
+
+ attributes->colormap = cm;
+ valuemask = CWColormap;
+
+#if defined(T_XChangeWindowAttributes)
+ w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+#endif
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+ XFreeColormap(display, cm);
+ for(i=0; i<count; i++)
+ XFree((char*)&vinfo[i]);
+>>ASSERTION Bad A
+When
+.M colormap
+and the window do not have the same visual type, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If two different visual types are supported:
+ Create colour map of different visual to window.
+ Attempt to set colourmap to created colour map.
+ Verify that a BadMatch error occurs.
+else
+ UNSUPPORTED.
+>>CODE BadMatch
+XWindowAttributes p_attributes;
+Colormap cm;
+int found = 0;
+XVisualInfo *vp;
+
+#if defined(T_XChangeWindowAttributes)
+ /* This is set for XCreateWindow, but not for XChangeWindowAttributes */
+ parent = DRW(Dsp);
+#endif
+
+ XGetWindowAttributes(display, parent, &p_attributes);
+
+ visual = p_attributes.visual;
+ depth = p_attributes.depth;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ if (vp->visual != visual)
+ {
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found) {
+ unsupported("Only one visual type supported");
+ return;
+ }
+
+
+ cm = XCreateColormap(display, DRW(display) , vp->visual, AllocNone);
+
+ attributes->colormap = cm;
+ valuemask = CWColormap;
+
+#if defined(T_XCreateWindow)
+ (void)XCALL;
+#else
+ w = makeinout(parent, visual, depth, XCWA_NORMAL);
+ (void)XCALL;
+#endif
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+ XFreeColormap(display, cm);
+>>ASSERTION Bad A
+When
+.M colormap
+is
+.S CopyFromParent
+and the parent window has a
+.M colormap
+of
+.S None ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create a window with a colormap.
+Free the colormap the window.
+Call function with colormap of CopyFromParent.
+Verify BadMatch error occurred.
+>>CODE BadMatch
+Colormap cm;
+
+ parent = makeinout( DRW(display),
+ XDefaultVisual(display, XDefaultScreen(display) ) ,
+ CopyFromParent, XCWA_NORMAL);
+
+ cm = XCreateColormap(display, parent ,
+ XDefaultVisual(display, XDefaultScreen(display)),
+ AllocNone);
+
+ XSetWindowColormap(display, parent, cm);
+
+ attributes->colormap = CopyFromParent;
+ valuemask = CWColormap;
+
+#if defined(T_XChangeWindowAttributes)
+ w = makeinout(parent, (Visual *)CopyFromParent,
+ CopyFromParent, XCWA_NORMAL);
+#endif
+ XFreeColormap(display, cm);
+ (void)XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+>>ASSERTION Bad A
+When the window has class
+.S InputOnly
+and
+.M border_width
+is not zero, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Set border_width to contain non zero.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+
+#if defined(T_XCreateWindow)
+ seterrdef();
+ setinonly();
+
+ border_width = 1;
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+#else
+ notinuse("%s cannot be used to change the border_width",TestName);
+#endif
+>>ASSERTION Bad A
+When
+.M bit_gravity
+is other than
+.S ForgetGravity ,
+.S NorthWestGravity ,
+.S NorthGravity ,
+.S NorthEastGravity ,
+.S WestGravity ,
+.S CenterGravity ,
+.S EastGravity ,
+.S SouthWestGravity ,
+.S SouthGravity ,
+.S SouthEastGravity or
+.S StaticGravity ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set bit_gravity to a bad value.
+Verify that BadValue is generated.
+>>CODE BadValue
+int i;
+int n;
+unsigned long vals[NM_LEN];
+static unsigned long validbits[] = {
+ ForgetGravity ,
+ NorthWestGravity ,
+ NorthGravity ,
+ NorthEastGravity ,
+ WestGravity ,
+ CenterGravity ,
+ EastGravity ,
+ SouthWestGravity ,
+ SouthGravity ,
+ SouthEastGravity ,
+ StaticGravity };
+
+ seterrdef();
+
+
+#if defined(T_XChangeWindowAttributes)
+ w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+#endif
+
+ valuemask = CWBitGravity;
+
+ n = notmaskmember(validbits, NELEM(validbits), vals);
+
+ for (i = 0; i < n ; i++)
+ {
+ debug(1, "Trying bit_gravity of %d", vals[i]);
+
+ attributes->bit_gravity = vals[i];
+
+ (void) XCALL;
+
+ if(geterr() == BadValue)
+ CHECK;
+ else {
+ trace("Value of %d did not give BadValue", vals[i]);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(n);
+>>ASSERTION Bad A
+When
+.M win_gravity
+is other than
+.S UnmapGravity ,
+.S NorthWestGravity ,
+.S NorthGravity ,
+.S NorthEastGravity ,
+.S WestGravity ,
+.S CenterGravity ,
+.S EastGravity ,
+.S SouthWestGravity ,
+.S SouthGravity ,
+.S SouthEastGravity or
+.S StaticGravity ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set win_gravity to a bad value.
+Verify that BadValue is generated.
+>>CODE BadValue
+int i;
+int n;
+unsigned long vals[NM_LEN];
+static unsigned long validbits[] = {
+ UnmapGravity ,
+ NorthWestGravity ,
+ NorthGravity ,
+ NorthEastGravity ,
+ WestGravity ,
+ CenterGravity ,
+ EastGravity ,
+ SouthWestGravity ,
+ SouthGravity ,
+ SouthEastGravity ,
+ StaticGravity };
+
+ seterrdef();
+
+
+#if defined(T_XChangeWindowAttributes)
+ w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+#endif
+
+ valuemask = CWWinGravity;
+
+ n = notmaskmember(validbits, NELEM(validbits), vals);
+
+ for (i = 0; i < n ; i++)
+ {
+ debug(1, "Trying win_gravity of %d", vals[i]);
+
+ attributes->win_gravity = vals[i];
+
+ (void) XCALL;
+
+ if(geterr() == BadValue)
+ CHECK;
+ else {
+ trace("Value of %d did not give BadValue", vals[i]);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(n);
+>>ASSERTION Bad A
+When
+.M backing_store
+is other than
+.S NotUseful ,
+.S WhenMapped
+or
+.S Always ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set backing_store to a bad value.
+Verify that BadValue is generated.
+>>CODE BadValue
+int i;
+int n;
+long vals[NM_LEN];
+static int validvalues[] = {
+ NotUseful,
+ WhenMapped,
+ Always };
+
+ seterrdef();
+
+
+#if defined(T_XChangeWindowAttributes)
+ w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+#endif
+
+ valuemask = CWBackingStore;
+
+ n = notmember(validvalues, NELEM(validvalues), vals);
+
+ for (i = 0; i < n ; i++)
+ {
+ debug(1, "Trying backing_store of %d", vals[i]);
+
+ attributes->backing_store = vals[i];
+
+ (void) XCALL;
+
+ if(geterr() == BadValue)
+ CHECK;
+ else {
+ trace("Value of %d did not give BadValue", vals[i]);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(n);
+>>ASSERTION Bad A
+When
+.M save_under
+is other than
+.S True
+or
+.S False ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set save_under to a bad value.
+Verify that BadValue is generated.
+>>CODE BadValue
+int i;
+int n;
+long vals[NM_LEN];
+static int validvalues[] = {
+ True,
+ False };
+
+ seterrdef();
+
+#if defined(T_XChangeWindowAttributes)
+ w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+#endif
+
+ valuemask = CWSaveUnder;
+
+ n = notmember(validvalues, NELEM(validvalues), vals);
+
+ for (i = 0; i < n ; i++)
+ {
+ debug(1, "Trying save_under of %d", vals[i]);
+
+ attributes->save_under= vals[i];
+
+ (void) XCALL;
+
+ if(geterr() == BadValue)
+ CHECK;
+ else {
+ trace("Value of %d did not give BadValue", vals[i]);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(n);
+>>ASSERTION Bad A
+When
+.M event_mask
+is other than a bitwise OR of any
+of
+.S NoEventMask ,
+.S KeyPressMask ,
+.S KeyReleaseMask ,
+.S ButtonPressMask ,
+.S ButtonReleaseMask ,
+.S EnterWindowMask ,
+.S LeaveWindowMask ,
+.S PointerMotionMask ,
+.S PointerMotionHintMask ,
+.S Button1MotionMask ,
+.S Button2MotionMask ,
+.S Button3MotionMask ,
+.S Button4MotionMask ,
+.S Button5MotionMask ,
+.S ButtonMotionMask ,
+.S KeymapStateMask ,
+.S ExposureMask ,
+.S VisibilityChangeMask ,
+.S StructureNotifyMask ,
+.S ResizeRedirectMask ,
+.S SubstructureNotifyMask ,
+.S SubstructureRedirectMask ,
+.S FocusChangeMask ,
+.S PropertyChangeMask ,
+.S ColormapChangeMask
+or
+.S OwnerGrabButtonMask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set event_mask to a bad value.
+Verify that BadValue is generated.
+>>CODE BadValue
+int i;
+int n;
+unsigned long vals[NM_LEN];
+static unsigned long validbits[] = {
+ NoEventMask ,
+ KeyPressMask ,
+ KeyReleaseMask ,
+ ButtonPressMask ,
+ ButtonReleaseMask ,
+ EnterWindowMask ,
+ LeaveWindowMask ,
+ PointerMotionMask ,
+ PointerMotionHintMask ,
+ Button1MotionMask ,
+ Button2MotionMask ,
+ Button3MotionMask ,
+ Button4MotionMask ,
+ Button5MotionMask ,
+ ButtonMotionMask ,
+ KeymapStateMask ,
+ ExposureMask ,
+ VisibilityChangeMask ,
+ StructureNotifyMask ,
+ ResizeRedirectMask ,
+ SubstructureNotifyMask ,
+ SubstructureRedirectMask ,
+ FocusChangeMask ,
+ PropertyChangeMask ,
+ ColormapChangeMask ,
+ OwnerGrabButtonMask };
+
+ seterrdef();
+
+#if defined(T_XChangeWindowAttributes)
+ w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+#endif
+
+ valuemask = CWEventMask;
+
+ n = notmaskmember(validbits, NELEM(validbits), vals);
+
+ for (i = 0; i < n ; i++)
+ {
+ debug(1, "Trying event_mask of %d", vals[i]);
+
+ attributes->event_mask = vals[i];
+
+ (void) XCALL;
+
+ if(geterr() == BadValue)
+ CHECK;
+ else {
+ trace("Value of %d did not give BadValue", vals[i]);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(n);
+>>ASSERTION Bad A
+When
+.M do_not_propagate_mask
+is other than a bitwise OR of any
+of
+.S NoEventMask ,
+.S KeyPressMask ,
+.S KeyReleaseMask ,
+.S ButtonPressMask ,
+.S ButtonReleaseMask ,
+.S EnterWindowMask ,
+.S LeaveWindowMask ,
+.S PointerMotionMask ,
+.S PointerMotionHintMask ,
+.S Button1MotionMask ,
+.S Button2MotionMask ,
+.S Button3MotionMask ,
+.S Button4MotionMask ,
+.S Button5MotionMask ,
+.S ButtonMotionMask ,
+.S KeymapStateMask ,
+.S ExposureMask ,
+.S VisibilityChangeMask ,
+.S StructureNotifyMask ,
+.S ResizeRedirectMask ,
+.S SubstructureNotifyMask ,
+.S SubstructureRedirectMask ,
+.S FocusChangeMask ,
+.S PropertyChangeMask ,
+.S ColormapChangeMask
+or
+.S OwnerGrabButtonMask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set do_not_propagate_mask to a bad value.
+Verify that BadValue is generated.
+>>CODE BadValue
+int i;
+int n;
+unsigned long vals[NM_LEN];
+static unsigned long validbits[] = {
+ NoEventMask ,
+ KeyPressMask ,
+ KeyReleaseMask ,
+ ButtonPressMask ,
+ ButtonReleaseMask ,
+ EnterWindowMask ,
+ LeaveWindowMask ,
+ PointerMotionMask ,
+ PointerMotionHintMask ,
+ Button1MotionMask ,
+ Button2MotionMask ,
+ Button3MotionMask ,
+ Button4MotionMask ,
+ Button5MotionMask ,
+ ButtonMotionMask ,
+ KeymapStateMask ,
+ ExposureMask ,
+ VisibilityChangeMask ,
+ StructureNotifyMask ,
+ ResizeRedirectMask ,
+ SubstructureNotifyMask ,
+ SubstructureRedirectMask ,
+ FocusChangeMask ,
+ PropertyChangeMask ,
+ ColormapChangeMask ,
+ OwnerGrabButtonMask };
+
+ seterrdef();
+
+#if defined(T_XChangeWindowAttributes)
+ w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+#endif
+
+ valuemask = CWDontPropagate ;
+
+ n = notmaskmember(validbits, NELEM(validbits), vals);
+
+ for (i = 0; i < n ; i++)
+ {
+ debug(1, "Trying do_not_propagate_mask of %d", vals[i]);
+
+ attributes->do_not_propagate_mask = vals[i];
+
+ (void) XCALL;
+
+ if(geterr() == BadValue)
+ CHECK;
+ else {
+ trace("Value of %d did not give BadValue", vals[i]);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(n);
+>>ASSERTION Bad A
+When
+.M override_redirect
+is other than
+.S True
+or
+.S False ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set override_redirect to a bad value.
+Verify that BadValue is generated.
+>>CODE BadValue
+int i;
+int n;
+long vals[NM_LEN];
+static int validvalues[] = {
+ True,
+ False };
+
+ seterrdef();
+
+#if defined(T_XChangeWindowAttributes)
+ w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+#endif
+
+ valuemask = CWOverrideRedirect;
+
+ n = notmember(validvalues, NELEM(validvalues), vals);
+
+ for (i = 0; i < n ; i++)
+ {
+ debug(1, "Trying override_redirect of %d", vals[i]);
+
+ attributes->override_redirect= vals[i];
+
+ (void) XCALL;
+
+ if(geterr() == BadValue)
+ CHECK;
+ else {
+ trace("Value of %d did not give BadValue", vals[i]);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(n);
+>># This assertion has been removed at the request of MIT, because there
+>># is no requirement for the Xlib implementation to generated protocol
+>># errors for illegal mask bits in this case. (Bug reports 57,59)
+>># >>ASSERTION Bad A
+>># When the window has class
+>># .S InputOutput
+>># and
+>># .A valuemask
+>># contains a bit set other than
+>># .S CWBackPixmap ,
+>># .S CWBackPixel ,
+>># .S CWBorderPixmap ,
+>># .S CWBorderPixel ,
+>># .S CWBitGravity ,
+>># .S CWWinGravity ,
+>># .S CWBackingStore ,
+>># .S CWBackingPlanes ,
+>># .S CWBackingPixel ,
+>># .S CWOverrideRedirect ,
+>># .S CWSaveUnder ,
+>># .S CWEventMask ,
+>># .S CWDontPropagate ,
+>># .S CWColormap ,
+>># .S CWCursor ,
+>># .S CWX ,
+>># .S CWY ,
+>># .S CWWidth ,
+>># .S CWHeight ,
+>># .S CWBorderWidth ,
+>># .S CWSibling or
+>># .S CWStackMode ,
+>># then a
+>># .S BadValue
+>># error occurs.
+>># >>STRATEGY
+>># Set valuemask to a bad value.
+>># Verify that BadValue is generated.
+>># >>CODE BadValue
+>># int i;
+>># int n;
+>># unsigned long vals[NM_LEN];
+>># static unsigned long validbits[] = {
+>># CWBackPixmap ,
+>># CWBackPixel ,
+>># CWBorderPixmap ,
+>># CWBorderPixel ,
+>># CWBitGravity ,
+>># CWWinGravity ,
+>># CWBackingStore ,
+>># CWBackingPlanes ,
+>># CWBackingPixel ,
+>># CWOverrideRedirect ,
+>># CWSaveUnder ,
+>># CWEventMask ,
+>># CWDontPropagate ,
+>># CWColormap ,
+>># CWCursor ,
+>># CWX ,
+>># CWY ,
+>># CWWidth ,
+>># CWHeight ,
+>># CWBorderWidth ,
+>># CWSibling ,
+>># CWStackMode };
+>>#
+>># seterrdef();
+>>#
+>># #if defined(T_XChangeWindowAttributes)
+>># w = makeinout(None, (Visual *)CopyFromParent, CopyFromParent, XCWA_NORMAL);
+>># #endif
+>># n = notmaskmember(validbits, NELEM(validbits), vals);
+>>#
+>># for (i = 0; i < n ; i++)
+>># {
+>># debug(1, "Trying valuemask of %d", vals[i]);
+>>#
+>># valuemask = vals[i];
+>>#
+>># (void) XCALL;
+>>#
+>># if(geterr() == BadValue)
+>># CHECK;
+>># else {
+>># trace("Value of %d did not give BadValue", vals[i]);
+>># FAIL;
+>># }
+>># }
+>>#
+>># CHECKPASS(n);
+>>#
+>>ASSERTION Bad C
+If windows with depth other than one are supported:
+When
+.M border_pixmap
+and the window do not have the same depth, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If a window with depth other than one is supported:
+ Attempt to set border_pixmap with depth one.
+ Verify that a BadMatch error occurs with a window depth other than one.
+else
+ UNSUPPORTED.
+>>CODE BadMatch
+Pixmap pm;
+XVisualInfo *vp;
+int found = 0;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ if (vp->depth != 1) {
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found) {
+ unsupported("Only windows with depth one are supported");
+ return;
+ }
+
+ parent = defdraw(display, VI_WIN);
+ pm = XCreatePixmap(display, parent, 1, 1, 1);
+
+ visual = vp->visual;
+ depth = vp->depth;
+ attributes->border_pixmap = pm ;
+ valuemask = CWBorderPixmap;
+
+#if defined(T_XChangeWindowAttributes)
+ w = makeinout(parent, visual, depth, XCWA_NORMAL);
+#endif
+ (void)XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+ XFreePixmap(display, pm);
+>>ASSERTION Bad C
+>>#Subsequent changes to the parent window's border attribute do not affect
+>>#the window.
+If multiple window depths are supported:
+When
+.M border_pixmap
+is
+.S CopyFromParent ,
+and the window does not have the same depth as the parent window,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If two different depth windows are supported.
+ Create window with different depth to parent.
+ Attempt to set border_pixmap to CopyFromParent.
+ Verify that a BadMatch error occurs.
+else
+ UNSUPPORTED.
+>>CODE BadMatch
+XVisualInfo *vp;
+XVisualInfo *vp2 = 0;
+int found = 0;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ if (vp2 == 0) {
+ vp2 = vp;
+ } else if (vp->depth != vp2->depth) {
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found) {
+ unsupported("Only one depth of window is supported");
+ return;
+ }
+
+ parent = makedrawable(display, vp2);
+ visual = vp->visual;
+ depth = vp->depth;
+
+ attributes->border_pixmap = CopyFromParent;
+ valuemask = CWBorderPixmap;
+
+#if defined(T_XCreateWindow)
+ (void)XCALL;
+#else
+ w = makeinout(parent, visual, depth, XCWA_NORMAL);
+ (void)XCALL;
+#endif
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+When
+.M colormap
+is
+.S CopyFromParent
+and the window does not have the same visual type as the parent window,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If two different visual types are supported:
+ Create a parent of one visual type
+ Attempt to set colourmap to CopyFromParent on window of different visual type.
+ Verify that a BadMatch error occurs.
+else
+ UNSUPPORTED.
+>>CODE BadMatch
+int found = 0;
+XVisualInfo *vp;
+XVisualInfo *vp2;
+
+
+ vp2 = 0;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ if(vp2 == 0)
+ {
+ vp2 = vp;
+ }
+ else if (vp->visual != vp2->visual)
+ {
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found) {
+ unsupported("Only one visual type supported");
+ return;
+ }
+
+ parent = (Window)makedrawable( display, vp2 );
+
+ visual = vp->visual;
+ depth = vp->depth;
+
+ attributes->colormap = CopyFromParent;
+ valuemask = CWColormap;
+
+#if defined(T_XCreateWindow)
+ (void)XCALL;
+#else
+ w = makeinout(parent, visual, depth, XCWA_DEFCOLMAP);
+ (void)XCALL;
+#endif
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
diff --git a/xc/test/xsuite/xtest/tset/CH03/crtwdw/crtwdw.m b/xc/test/xsuite/xtest/tset/CH03/crtwdw/crtwdw.m
new file mode 100644
index 000000000..2cbae3b0d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/crtwdw/crtwdw.m
@@ -0,0 +1,790 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCreateWindow CH03
+Window
+
+Display *display = Dsp;
+Window parent = DRW(Dsp);
+int x = 50;
+int y = 60;
+unsigned int width = 20;
+unsigned int height = 17;
+unsigned int border_width = 2;
+int depth = DefaultDepth(Dsp, DefaultScreen(Dsp));
+unsigned int class = InputOutput;
+Visual *visual = DefaultVisual(Dsp, DefaultScreen(Dsp));
+unsigned long valuemask = 0;
+XSetWindowAttributes *attributes = &Atts;
+>>SET fail-return
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>EXTERN
+
+static XSetWindowAttributes Atts;
+
+static Window
+interceptXCW(display, parent, x, y, width, height, border_width, depth, class, visual, valuemask, attributes)
+Display *display;
+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 *attributes;
+{
+Colormap cm;
+Visual *vis;
+XWindowAttributes atts;
+
+ /*
+ * Problem: The colormap has to match the visual, however the default
+ * is CopyFromParent which is of no use when the parent has a different
+ * type to the window that is being created.
+ * If parent, visual, depths are not default and the test is not already
+ * setting the colormap and class is InputOutput then set an appropriate
+ * one here.
+ */
+ if ((valuemask & CWColormap) == 0 &&
+ (
+ visual != DefaultVisual(Dsp, DefaultScreen(Dsp)) ||
+ parent != DefaultRootWindow(Dsp) ||
+ depth != DefaultDepth(Dsp, DefaultScreen(Dsp))
+ )
+ ) {
+
+ if (visual == CopyFromParent || class == CopyFromParent)
+ XGetWindowAttributes(display, parent, &atts);
+
+ if (visual == CopyFromParent) {
+ vis = atts.visual;
+ } else
+ vis = visual;
+
+ if (class == InputOutput || (class == CopyFromParent && atts.class == InputOutput)) {
+ cm = makecolmap(display, vis, AllocNone);
+ attributes->colormap = cm;
+ valuemask |= CWColormap;
+ }
+ }
+
+ return XCreateWindow(display, parent, x, y, width, height, border_width, depth, class, visual, valuemask, attributes);
+}
+#define XCreateWindow interceptXCW
+
+>>ASSERTION Good A
+A call to xname creates an unmapped subwindow for a specified parent window
+and returns the window ID of the created window.
+>>STRATEGY
+Call xname.
+Do simple checks on returned id.
+>>CODE
+Window win;
+
+ win = XCALL;
+ if (win & 0xe0000000) {
+ report("Window ID has some of top three bits set");
+ FAIL;
+ } else {
+ XDestroyWindow(display, win);
+ PASS;
+ }
+
+
+>>ASSERTION Good A
+The window attributes specified in
+.A valuemask
+are set to the values in the
+.A attributes
+structure.
+>>STRATEGY
+Create window with all attributes set to non-default values.
+Get the window attributes with XGetWindowAttributes.
+Verify that they are the same as the ones set.
+The attributes that can't be checked in this way are the subject of other
+ assertions.
+>>EXTERN
+#include "cursorfont.h"
+>>CODE
+XSetWindowAttributes atts;
+XWindowAttributes getatts;
+Window win;
+Colormap cm;
+Cursor curs;
+int n;
+
+ cm = XCreateColormap(display, DRW(display), DefaultVisual(display, DefaultScreen(display)), AllocNone);
+ curs = XCreateFontCursor(display, XC_coffee_mug);
+
+ atts.bit_gravity = SouthEastGravity;
+ atts.win_gravity = EastGravity;
+ atts.backing_store = WhenMapped;
+ atts.backing_planes = 0xaaaaaaaa;
+ atts.backing_pixel = 1;
+ atts.save_under = True;
+ atts.event_mask = PropertyChangeMask;
+ atts.do_not_propagate_mask = KeyPressMask;
+ atts.override_redirect = True;
+ atts.colormap = cm;
+ atts.cursor = curs;
+
+ attributes = &atts;
+ valuemask = CWBitGravity|CWWinGravity|CWBackingStore|CWBackingPlanes|
+ CWBackingPixel|CWSaveUnder|CWEventMask|CWDontPropagate|
+ CWOverrideRedirect|CWColormap|CWCursor;
+
+ win = XCALL;
+
+ XGetWindowAttributes(display, win, &getatts);
+ if (isdeleted())
+ return;
+
+ n = checkatts(attributes, &getatts, valuemask);
+ if (n > 0) {
+ report("There %s %d incorrect attribute%s",
+ (n>1)?"were":"was", n, (n>1)?"s":"");
+ FAIL;
+ } else if (n < 0) {
+ /* already reported a path check error in checkatts */
+ return;
+ } else
+ CHECK;
+
+ XDestroyWindow(display, win);
+ CHECKPASS(1);
+
+>>EXTERN
+
+static int
+checkatts(setatts, getatts, vmask)
+XSetWindowAttributes *setatts;
+XWindowAttributes *getatts;
+unsigned long vmask;
+{
+int pass = 0, fail = 0;
+
+ /*
+ * Maybe we should alway check everything??? (No vmask)
+ */
+ if ((vmask&CWBitGravity) && setatts->bit_gravity != getatts->bit_gravity) {
+ report("bit_gravity got %s, expected %s",
+ bitgravityname(getatts->bit_gravity),
+ bitgravityname(setatts->bit_gravity));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWWinGravity) && setatts->win_gravity != getatts->win_gravity) {
+ report("window_gravity got %s, expected %s",
+ wingravityname(getatts->win_gravity),
+ wingravityname(setatts->win_gravity));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWBackingStore) && setatts->backing_store != getatts->backing_store) {
+ report("backing_store got %s, expected %s",
+ backingstorename(getatts->backing_store),
+ backingstorename(setatts->backing_store));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWBackingPlanes) && setatts->backing_planes != getatts->backing_planes) {
+ report("backing_planes got 0x%x, expected 0x%x",
+ getatts->backing_planes,
+ setatts->backing_planes);
+ FAIL;
+ } else
+ CHECK;
+
+ if (setatts->backing_pixel != getatts->backing_pixel) {
+ report("backing_pixel got 0x%x, expected 0x%x",
+ getatts->backing_pixel,
+ setatts->backing_pixel);
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWSaveUnder) && setatts->save_under != getatts->save_under) {
+ report("save_under got %s, expected %s",
+ boolname(getatts->save_under),
+ boolname(setatts->save_under));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWEventMask) && setatts->event_mask != getatts->your_event_mask) {
+ report("event_mask got %s, expected %s",
+ eventmaskname(getatts->your_event_mask),
+ eventmaskname(setatts->event_mask));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWDontPropagate) && setatts->do_not_propagate_mask != getatts->do_not_propagate_mask) {
+ report("do_not_propagate_mask got %s, expected %s",
+ eventmaskname(getatts->do_not_propagate_mask),
+ eventmaskname(setatts->do_not_propagate_mask));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWOverrideRedirect) && setatts->override_redirect != getatts->override_redirect) {
+ report("override_redirect got %s, expected %s",
+ boolname(getatts->override_redirect),
+ boolname(setatts->override_redirect));
+ FAIL;
+ } else
+ CHECK;
+
+ if ((vmask&CWColormap) && setatts->colormap != getatts->colormap) {
+ report("colormap got 0x%x, expected 0x%x",
+ getatts->colormap,
+ setatts->colormap);
+ FAIL;
+ } else
+ CHECK;
+
+ if (fail == 0 && pass == 10)
+ return(0);
+ else {
+ if (fail)
+ return(fail);
+ else
+ delete("Path check error in checkatts");
+ }
+ return(-1);
+}
+
+>>ASSERTION Good A
+Window attributes that are not specified in
+.A valuemask
+are set to their default values.
+>>STRATEGY
+Create window.
+Check default values:
+bit-gravity: Forget
+win-gravity: NorthWest
+backing-store: NotUseful
+backing-planes: all ones
+backing-pixel: zero
+save-under: False
+event-mask: empty set
+do-not-propagate-mask: empty set
+override-redirect: False
+colormap: CopyFromParent
+>>CODE
+XSetWindowAttributes atts;
+XWindowAttributes getatts;
+Window win;
+int n;
+
+ valuemask = 0;
+ win = XCALL;
+
+ /* For the parent colormap */
+ XGetWindowAttributes(display, DRW(display), &getatts);
+
+ atts.bit_gravity = ForgetGravity;
+ atts.win_gravity = NorthWestGravity;
+ atts.backing_store = NotUseful;
+ atts.backing_planes = ~0;
+ atts.backing_pixel = 0;
+ atts.save_under = False;
+ atts.event_mask = 0;
+ atts.do_not_propagate_mask = 0;
+ atts.override_redirect = False;
+ atts.colormap = getatts.colormap;
+
+ if (XGetWindowAttributes(display, win, &getatts) == False) {
+ delete("Could not get window attributes");
+ return;
+ } else
+ CHECK;
+
+ n = checkatts(&atts, &getatts, (long)~0);
+ if (n > 0) {
+ report("There %s %d incorrect attribute%s",
+ (n>1)?"were":"was", n, (n>1)?"s":"");
+ FAIL;
+ } else if (n < 0) {
+ /* already reported a path check error in checkatts */
+ return;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+On a call to xname a
+.S CreateNotify
+event is generated on the parent window.
+>>STRATEGY
+Create parent window.
+Select SubstructureNotifyMask on parent window.
+Create window.
+Select NoEventMask on parent window.
+Verify that a single CreateNotify event was generated.
+Verify that the returned event structure was correct.
+>>CODE
+XSetWindowAttributes atts;
+XCreateWindowEvent ge;
+XEvent event;
+Window win;
+int n;
+
+ parent = defdraw(display, VI_WIN);
+
+ XSelectInput(display, parent, SubstructureNotifyMask);
+
+ trace("depth is %d", depth);
+ trace("visual class is %s", displayclassname(visual->class));
+ win = XCALL;
+
+ XSelectInput(display, parent, NoEventMask);
+
+ if (getevent(Dsp, &event) != 1) {
+ report("Expecting one event");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ /* Set up a good event structure of what we are expecting */
+ ge.type = CreateNotify;
+ ge.send_event = False;
+ ge.display = display;
+ ge.parent = parent;
+ ge.window = win;
+ ge.x = x;
+ ge.y = y;
+ ge.width = width;
+ ge.height = height;
+ ge.border_width = border_width;
+ ge.override_redirect = False;
+
+ n = checkevent((XEvent*)&ge, &event);
+ if (n == 0) {
+ CHECK;
+ } else {
+ report("Event incorrect");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+The created window is placed on top in the stacking order
+with respect to siblings.
+>>STRATEGY
+Create a parent window.
+Create two overlapping sibling windows.
+Verify that second window is at top of stacking order.
+Verify that first sibling is next in the stacking order.
+>>CODE
+Window w1, w2;
+int n;
+
+ parent = defdraw(display, VI_WIN);
+ if (isdeleted())
+ return;
+ else
+ CHECK;
+
+ trace("depth is %d", depth);
+ trace("visual class is %s", displayclassname(visual->class));
+ w1 = XCALL;
+ w2 = XCALL;
+
+ if ((n = stackorder(display, w1)) != 0) {
+ report("Stacking order for w1 was %d, expected 0", n);
+ FAIL;
+ } else if ((n = stackorder(display, w2)) != 1) {
+ report("Stacking order for w2 was %d, expected 1", n);
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyWindow(display, w1);
+ XDestroyWindow(display, w2);
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+The created window is not displayed.
+>>STRATEGY
+Create window to use as parent.
+Set background to other than W_BG.
+Create window with xname.
+Verify that parent window is still clear.
+>>CODE
+XVisualInfo *vp;
+Window win;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ parent = (Window)makedrawable(display, vp);
+
+ attributes->background_pixel = W_FG;
+ valuemask = CWBackPixel;
+ win = XCALL;
+
+ if (checkclear(display, parent))
+ CHECK;
+ else {
+ report("Created window was visible");
+ FAIL;
+ }
+ XDestroyWindow(display, win);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When
+.A class
+is
+.S CopyFromParent ,
+then the class is taken from the parent window.
+>>STRATEGY
+Create InputOutput window to use as parent.
+Create window with class CopyFromParent.
+Verify that class of created window is InputOutput.
+Create InputOnly window to use as parent.
+Create window with class CopyFromParent.
+Verify that class of created window is InputOnly.
+>>CODE
+Status s;
+Window win;
+XWindowAttributes atts;
+
+ class = CopyFromParent;
+ /*
+ * Have to set depth and border_width to zero as well,
+ * otherwise BadMatch errors will occur.
+ */
+ depth = 0;
+ border_width = 0;
+ parent = defdraw(display, VI_WIN);
+ win = XCALL;
+
+ s = XGetWindowAttributes(display, win, &atts);
+ if (s == False) {
+ delete("XGetWindowAttributes failed");
+ return;
+ } else
+ CHECK;
+
+ if (atts.class != InputOutput) {
+ report("Class was %s, expecting InputOutput", classname(atts.class));
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyWindow(display, win);
+
+ /* Now Input Only */
+ parent = iponlywin(display);
+ win = XCALL;
+
+ s = XGetWindowAttributes(display, win, &atts);
+ if (s == False) {
+ delete("XGetWindowAttributes failed");
+ return;
+ } else
+ CHECK;
+
+ if (atts.class != InputOnly) {
+ report("Class was %s, expecting InputOnly", classname(atts.class));
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyWindow(display, win);
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When
+.A depth
+is
+.S CopyFromParent
+and
+.A class
+is
+.S InputOutput ,
+then the depth is taken from the parent window.
+>>STRATEGY
+Create InputOutput window to use as parent.
+Create window with depth CopyFromParent.
+Verify that depth of created window is same as the parent.
+>>CODE
+Status s;
+Window win;
+XWindowAttributes atts;
+int parentdepth;
+
+ depth = CopyFromParent;
+ parent = defdraw(display, VI_WIN);
+ win = XCALL;
+
+ parentdepth = getdepth(display, parent);
+
+ s = XGetWindowAttributes(display, win, &atts);
+ if (s == False) {
+ delete("XGetWindowAttributes failed");
+ return;
+ } else
+ CHECK;
+
+ if (atts.depth != parentdepth) {
+ report("Depth was %d, expecting %d", atts.depth, parentdepth);
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyWindow(display, win);
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When
+.A visual
+is
+.S CopyFromParent ,
+then the visual is taken from the parent window.
+>>STRATEGY
+Create window to use as parent.
+Create window with visual CopyFromParent.
+Verify that visual of created window is same as the parent.
+>>CODE
+Status s;
+Window win;
+XWindowAttributes atts;
+XVisualInfo *vp;
+
+ depth = CopyFromParent;
+ visual = CopyFromParent;
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ parent = makewin(display, vp);
+
+ win = XCALL;
+
+ s = XGetWindowAttributes(display, win, &atts);
+ if (s == False) {
+ delete("XGetWindowAttributes failed");
+ return;
+ } else
+ CHECK;
+
+ if (atts.visual != vp->visual) {
+ report("Visual was not same as parent");
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyWindow(display, win);
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+The window is located such that
+the upper left outer corner is at the
+co-ordinate specified by
+.A x
+and
+.A y
+relative to the inside of the border of the parent window.
+>>STRATEGY
+Create window with border and background pixel W_FG.
+Map created window.
+Verify position by direct check with checkarea.
+>>CODE
+Window win;
+struct area area;
+
+ border_width = 5;
+ parent = defdraw(display, VI_WIN);
+ attributes->border_pixel = W_FG;
+ attributes->background_pixel = W_FG;
+ valuemask = CWBackPixel|CWBorderPixel;
+
+ win = XCALL;
+
+ XMapWindow(display, win);
+ if (isdeleted())
+ return;
+
+ setarea(&area, x, y, width+2*border_width, height+2*border_width);
+
+ if (checkarea(display, parent, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Window created in wrong position or with wrong size");
+ FAIL;
+ }
+
+ XDestroyWindow(display, win);
+ CHECKPASS(1);
+
+>>INCLUDE commattr.mc
+>>ASSERTION Bad A
+When
+.A class
+is
+.S InputOutput
+and the specified visual type and depth are not supported for the screen,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Find depth not supported by screen.
+Set depth to the unsupported depth.
+Set visual to a supported type
+(doesn't seem possible to test unsupported visual portably)
+Set class to InputOutput.
+Attempt to create window.
+Verify that BadMatch error occurs.
+>>CODE BadMatch
+XVisualInfo *vp;
+int supported;
+
+ for (depth = 1; ; depth++) {
+ supported = 0;
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ if (vp->depth == depth)
+ supported = 1;
+ }
+ if (!supported)
+ break;
+ }
+
+ class = InputOutput;
+
+ (void) XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL; /* Already reported */
+
+>>ASSERTION Bad A
+When
+.A class
+is
+.S InputOutput
+and the parent window has class
+.S InputOnly ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create input only window with iponlywin().
+Set class to InputOutput.
+Create window with the input only window as parent.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+
+ parent = iponlywin(display);
+ class = InputOutput;
+
+ (void) XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+>>ASSERTION Bad A
+When
+.A class
+is
+.S InputOnly
+and the depth is not zero,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Set class to InputOnly.
+Set depth to 1.
+Set border_width to 0 to avoid BadMatch error due to border width.
+Call xname.
+Verify that BadMatch error occurs.
+>>CODE BadMatch
+
+ class = InputOnly;
+ depth = 1;
+ border_width = 0;
+
+ (void) XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+>>ASSERTION Bad B 1
+When
+.A class
+is
+.S InputOnly
+and the specified visual type is not supported by the screen, then a
+.S BadMatch
+error occurs.
+>>ASSERTION Bad A
+When the
+.A width
+or
+.A height
+is zero, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set width and height in turn to be zero.
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ width = 0;
+ height = 10;
+
+ (void) XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ width = 10;
+ height = 0;
+
+ (void) XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(2);
+>>ASSERTION Bad B 1
+When the specified visual type is invalid, then a
+.S BadValue
+error occurs.
+>>ASSERTION Bad A
+.ER BadValue class InputOutput InputOnly CopyFromParent
+>>ASSERTION Bad B 3
+.ER BadAlloc
diff --git a/xc/test/xsuite/xtest/tset/CH03/dstrysbws/dstrysbws.m b/xc/test/xsuite/xtest/tset/CH03/dstrysbws/dstrysbws.m
new file mode 100644
index 000000000..8face93dd
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/dstrysbws/dstrysbws.m
@@ -0,0 +1,462 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDestroySubwindows CH03
+void
+
+Display *display = Dsp;
+Window w;
+>>EXTERN
+
+#define ON_WINDOW 0x0001
+#define ON_PARENT 0x0002
+
+>>ASSERTION Good A
+A call to xname destroys all inferior windows of the specified window,
+>># This ordering seem dubious, since it is not the same as the ordering
+>># for the events.
+in bottom-to-top stacking order.
+>>STRATEGY
+Create stack of windows.
+Call xname on window.
+Verify that this window still exists.
+Verify that all inferiors no longer exist.
+Verify by pixel checking that all traces of the windows have been removed from
+the parent.
+>>EXTERN
+extern char *STreeGen[];
+extern int NSTreeGen;
+extern char *STreeOlsib[];
+extern int NSTreeOlsib;
+>>CODE
+struct buildtree *btp;
+int i;
+
+ w = defdraw(display, VI_WIN);
+ btp = buildtree(display, w, STreeGen, NSTreeGen);
+
+ /*
+ * Check that each window exists.
+ * Touch each window with MapWindow, check for no error.
+ */
+ for (i = 0; i < NSTreeGen; i++) {
+ CATCH_ERROR(display);
+ XMapWindow(display, btp[i].wid);
+ RESTORE_ERROR(display);
+ if (GET_ERROR(display) != Success) {
+ delete("Error in setting up window tree");
+ return;
+ } else
+ CHECK;
+ }
+
+ XCALL;
+
+ /* Check that parent window is now clear */
+ if (checkclear(display, w))
+ CHECK;
+ else {
+ report("Parent window was not clear after destroying its inferiors");
+ FAIL;
+ }
+
+ /*
+ * Check that we now get a BadWindow on all the subwindows.
+ * (and not on the parent)
+ */
+ for (i = 0; i < NSTreeGen; i++) {
+ CATCH_ERROR(display);
+ XMapWindow(display, btp[i].wid);
+ RESTORE_ERROR(display);
+ if (i == 0) {
+ if (GET_ERROR(display) == BadWindow) {
+ report("The parent window was destroyed");
+ FAIL;
+ } else
+ CHECK;
+ } else {
+ if (GET_ERROR(display) != BadWindow) {
+ report("An inferior was still accessible");
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+ CHECKPASS(2*NSTreeGen+1);
+
+>>ASSERTION Good A
+When a call to xname destroys a subwindow and the
+subwindow is mapped, then the subwindow is unmapped first and an
+.S UnmapNotify
+event is generated.
+>>STRATEGY
+Create stack of windows.
+Unmap one window.
+Enable events on each window.
+Call xname on window.
+Verify that an UnmapNotify event is generated for each mapped subwindow.
+Verify that an UnmapNotify event is generated on the parent of each mapped
+subwindow.
+Verify that no UnmapNotify event is generated for the unmapped window.
+Verify all fields of events.
+>>CODE
+XEvent ev;
+XUnmapEvent good;
+XUnmapEvent *ump;
+struct buildtree *btlist;
+struct buildtree *btp;
+int i;
+
+ w = defdraw(display, VI_WIN);
+ btlist = buildtree(display, w, STreeGen, NSTreeGen);
+
+ /*
+ * Unmap window and make sure that everything has happened before we
+ * enable events.
+ */
+ btp = btntobtp(btlist, "A");
+ btp->opts |= BT_UNMAP;
+ XUnmapWindow(display, btp->wid);
+ XSync(display, False);
+
+ for (i = 0; i < NSTreeGen; i++)
+ XSelectInput(display, btlist[i].wid, ALLEVENTS);
+
+ XCALL;
+
+ /*
+ * Set up the known good event.
+ */
+ good.type = UnmapNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = display;
+ good.from_configure = False;
+
+ /*
+ * Loop until no events left. Should go round twice, for window B only.
+ */
+ for (i = 0; ; i++) {
+ if (XCheckTypedEvent(display, UnmapNotify, &ev) == False)
+ break;
+ ump = (XUnmapEvent*)&ev;
+
+ debug(1, "event=0x%x, window=0x%x", ump->event, ump->window);
+
+ /*
+ * If window == event then this is the event from StructureNotify,
+ * if they are different then this is the event from the
+ * SubstructureNotify. Keep track of events received and check
+ * that event is actually set to the parent of window when they
+ * are different.
+ * Finally check the other members of the Event.
+ */
+
+ btp = btwtobtp(btlist, ump->window);
+ if (btp == (struct buildtree *)0) {
+ report("Event received on window that was not part of test");
+ report(" Window ID is 0x%x", ump->window);
+ FAIL;
+ break;
+ }
+ debug(1, "Unmap received for window '%s'", btp->name);
+
+ if (ump->window == ump->event) {
+ /* Event received on window itself */
+ if (btp->uflags & ON_WINDOW) {
+ report("Repeat UnmapNotify event received on window '%s'",
+ btp->name);
+ FAIL;
+ } else
+ CHECK;
+ btp->uflags |= ON_WINDOW;
+ } else {
+
+ /* Check event was received on the parent */
+ if (btp->parent->wid != ump->event) {
+ report("UnmapNotify event was reported on a window that was not the parent");
+ FAIL;
+ } else if (btp->uflags & ON_PARENT) {
+ report("Repeat UnmapNotify event received on parent for window '%s'",
+ btp->name);
+ FAIL;
+ } else
+ CHECK;
+ btp->uflags |= ON_PARENT;
+ }
+
+ /*
+ * Event and window have been dealt with - now check the other
+ * fields in the event.
+ */
+ good.event = ump->event;
+ good.window = ump->window;
+
+ if (checkevent((XEvent*)&good, &ev)) {
+ report("Error in event");
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ /* Verify that no unmaps were recorded for the parent window */
+ if (btlist[0].uflags != 0) {
+ report("Unmap events reported on parent window");
+ FAIL;
+ } else
+ CHECK;
+
+ /* Verify that all subwindows had both notifications */
+ for (i = 1; i < NSTreeGen; i++) {
+
+ /*
+ * Check that windows that were already unmapped did not get
+ * an event.
+ */
+ if (btlist[i].opts & BT_UNMAP) {
+ if (btlist[i].uflags & ON_WINDOW) {
+ report("Unmap event received for unmapped window '%s'",
+ btlist[i].name);
+ FAIL;
+ } else
+ CHECK;
+ if (btlist[i].uflags & ON_PARENT) {
+ report("Unmap event received on parent for unmapped window '%s'"
+ , btlist[i].name);
+ FAIL;
+ } else
+ CHECK;
+ continue;
+ }
+
+ /*
+ * Check that Unmap events are received on the expected window.
+ */
+ if (btlist[i].parent->wid == w) {
+ if ((btlist[i].uflags & ON_WINDOW) == 0) {
+ report("Unmap event was not received on subwindow '%s'",
+ btlist[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ if ((btlist[i].uflags & ON_PARENT) == 0) {
+ report("Unmap event was not received on the parent of subwindow '%s'",
+ btlist[i].name);
+ FAIL;
+ } else
+ CHECK;
+ } else {
+ if (btlist[i].uflags & ON_WINDOW) {
+ report("Unexpected Unmap event was received on subwindow '%s'",
+ btlist[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ if (btlist[i].uflags & ON_PARENT) {
+ report("Unexpected Unmap event was received on the parent of subwindow '%s'",
+ btlist[i].name);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ }
+
+ CHECKPASS((2*2) + 1 + 2*(NSTreeGen-1));
+
+>>ASSERTION Good A
+On a call to xname a
+.S DestroyNotify
+event is generated for each window that is destroyed
+with events being generated for all inferiors of that window before being
+generated for the given window.
+>>STRATEGY
+Create stack of windows.
+Enable events on each window.
+Call xname on window.
+Verify that a DestroyNotify event is generated for each subwindow.
+Verify that a DestroyNotify event is generated on the parent of each subwindow.
+>>CODE
+XEvent ev;
+XDestroyWindowEvent good;
+XDestroyWindowEvent *dnp;
+struct buildtree *btlist;
+struct buildtree *btp;
+int i;
+
+ w = defdraw(display, VI_WIN);
+ btlist = buildtree(display, w, STreeGen, NSTreeGen);
+
+ /*
+ * Unmap a window and make sure that everything has happened before we
+ * enable events.
+ */
+ btp = btntobtp(btlist, "A1");
+ btp->opts |= BT_UNMAP;
+ XUnmapWindow(display, btp->wid);
+ XSync(display, False);
+
+ for (i = 0; i < NSTreeGen; i++)
+ XSelectInput(display, btlist[i].wid, ALLEVENTS);
+
+ XCALL;
+
+ good.type = DestroyNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = display;
+
+ /*
+ * This loop continues until there are no more events left. (In case
+ * there are extra or repeated events). The loop should be traversed
+ * 2*(NSTreeGen-1) times.
+ */
+ for (i = 0; ; i++) {
+ if (XCheckTypedEvent(display, DestroyNotify, &ev) == False)
+ break;
+ dnp = (XDestroyWindowEvent*)&ev;
+
+ debug(1, "event=0x%x, window=0x%x", dnp->event, dnp->window);
+
+ /*
+ * If window == event then this is the event from StructureNotify,
+ * if they are different then this is the event from the
+ * SubstructureNotify. Keep track of events received and check
+ * that event is actually set to the parent of window when they
+ * are different.
+ * Check that a destroy event has not yet been received on the
+ * parent window.
+ * Finally check the other members of the Event.
+ */
+
+ btp = btwtobtp(btlist, dnp->window);
+ if (btp == (struct buildtree *)0) {
+ report("Event received for a window that was not part of the test");
+ report(" Window ID was 0x%x", dnp->window);
+ FAIL;
+ break;
+ }
+
+ debug(1, "DestroyNotify received for window %s", btp->name);
+
+ if (dnp->window == dnp->event) {
+ if (btp->uflags & ON_WINDOW) {
+ report("Repeat DestroyNotify event received on window '%s'",
+ btp->name);
+ FAIL;
+ } else if (btp->parent->uflags & ON_WINDOW) {
+ /* Test ordering */
+ report("DestroyNotify event received on parent before child");
+ FAIL;
+ } else
+ CHECK;
+ btp->uflags |= ON_WINDOW;
+ } else {
+
+ /* Check event was received on the parent */
+ if (btp->parent->wid != dnp->event) {
+ report("DestroyNotify event was reported on a window that was not the parent");
+ FAIL;
+ } else if (btp->uflags & ON_PARENT) {
+ report("DestroyNotify event already received on parent for window '%s'",
+ btp->name);
+ FAIL;
+ } else
+ CHECK;
+ btp->uflags |= ON_PARENT;
+ }
+
+ /* Check other fields in event */
+ good.event = dnp->event;
+ good.window = dnp->window;
+
+ if (checkevent((XEvent*)&good, &ev)) {
+ report("Error in event");
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ /* Verify that no destroy events were recorded for the parent window */
+ if (btlist[0].uflags != 0) {
+ report("DestroyNotify events reported on parent window");
+ FAIL;
+ } else
+ CHECK;
+
+ /* Verify that all subwindows had both notifications */
+ for (i = 1; i < NSTreeGen; i++) {
+
+ if ((btlist[i].uflags & ON_WINDOW) == 0) {
+ report("DestroyNotify event was not received on subwindow '%s'",
+ btlist[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ if ((btlist[i].uflags & ON_PARENT) == 0) {
+ report("DestroyNotify event was not received on the parent of subwindow '%s'",
+ btlist[i].name);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS((2*2*(NSTreeGen-1)) + 1 + 2*(NSTreeGen-1));
+
+>>ASSERTION Good A
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create stack of windows.
+Set up window with setforexpose().
+Enable events on parent window.
+Call xname on window.
+Verify that window was restored from backing store, or that expose events were
+generated, using exposecheck().
+>>CODE
+
+ w = defdraw(display, VI_WIN);
+ setforexpose(display, w);
+
+ buildtree(display, w, STreeOlsib, NSTreeOlsib);
+ if (isdeleted())
+ return;
+
+ XSelectInput(display, w, ALLEVENTS);
+
+ XCALL;
+
+ XSelectInput(display, w, NoEventMask);
+
+ if (exposecheck(display, w))
+ CHECK;
+ else {
+ report("Neither Expose events or backing store processing");
+ report("could correctly restore the window contents.");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/dstrywdw/dstrywdw.m b/xc/test/xsuite/xtest/tset/CH03/dstrywdw/dstrywdw.m
new file mode 100644
index 000000000..eca91570b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/dstrywdw/dstrywdw.m
@@ -0,0 +1,470 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDestroyWindow CH03
+void
+
+Display *display = Dsp;
+Window w;
+>>EXTERN
+
+#define ON_WINDOW 0x0001
+#define ON_PARENT 0x0002
+
+extern char *STreeSgl[];
+extern int NSTreeSgl;
+
+>>ASSERTION Good A
+A call to xname destroys the specified window and all of its
+subwindows.
+>>STRATEGY
+Create base window.
+Create window with inferiors on base window to destroy.
+Call xname on window.
+Verify that the window no longer exists.
+Verify that all inferiors of the window no longer exist.
+Verify by pixel checking that all traces of the windows have been removed from
+the base window.
+>>CODE
+Window parent;
+struct buildtree *btlist;
+int i;
+
+ parent = defdraw(display, VI_WIN);
+ btlist = buildtree(display, parent, STreeSgl, NSTreeSgl);
+
+ /*
+ * Get the window that we are going to destroy and draw a pattern
+ * on it.
+ */
+ w = btlist[1].wid;
+ pattern(display, w);
+
+ /*
+ * Check that each window exists.
+ * Touch each window with MapWindow, check for no error.
+ */
+ for (i = 1; i < NSTreeSgl; i++) {
+ CATCH_ERROR(display);
+ XMapWindow(display, btlist[i].wid);
+ RESTORE_ERROR(display);
+ if (GET_ERROR(display) != Success) {
+ delete("Error in setting up window tree");
+ return;
+ } else
+ CHECK;
+ }
+
+ XCALL;
+
+ /*
+ * Check that parent window is now clear, all traces of the window
+ * have gone.
+ */
+ if (checkclear(display, parent))
+ CHECK;
+ else {
+ report("Parent window was not clear after destroying its inferior");
+ FAIL;
+ }
+
+ /*
+ * Check that we now get a BadWindow on the window and all its inferiors.
+ */
+ for (i = 1; i < NSTreeSgl; i++) {
+ CATCH_ERROR(display);
+ XMapWindow(display, btlist[i].wid);
+ RESTORE_ERROR(display);
+ if (GET_ERROR(display) != BadWindow) {
+ report("The window '%s' was still accessible", btlist[i].name);
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(2*(NSTreeSgl-1)+1);
+
+>>ASSERTION Good A
+When a call to xname destroys a window and the
+window is mapped, then the window is unmapped first and an
+.S UnmapNotify
+event is generated.
+>>STRATEGY
+Create a base window and a window with inferiors on the base window.
+Enable events on each window.
+Call xname to destroy a window.
+Check that an UnmapNotify event was generated on the destroyed window
+ and it's the parent window.
+Verify that the correct windows had notifications
+>>CODE
+XEvent ev;
+XUnmapEvent good;
+XUnmapEvent *ump;
+Window parent;
+struct buildtree *btlist;
+struct buildtree *btp;
+int i;
+
+/* Create a base window and a window with inferiors on the base window. */
+ parent = defdraw(display, VI_WIN);
+ btlist = buildtree(display, parent, STreeSgl, NSTreeSgl);
+
+ /* Set window that we are to destroy */
+ w = btlist[1].wid;
+
+/* Enable events on each window. */
+ for (i = 0; i < NSTreeSgl; i++)
+ XSelectInput(display, btlist[i].wid, ALLEVENTS);
+ XSelectInput(display, parent, ALLEVENTS);
+
+/* Call xname to destroy a window. */
+ XCALL;
+
+ good.type = UnmapNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = display;
+ good.from_configure = False;
+
+/* Check that an UnmapNotify event was generated on the destroyed window */
+/* and it's the parent window only. */
+ while(XCheckTypedEvent(display, UnmapNotify, &ev)) {
+ ump = (XUnmapEvent *)&ev;
+ debug(1,"event=0x%x, window=0x%x", ump->event, ump->window);
+
+ btp = btwtobtp(btlist, ump->window);
+ if (btp == (struct buildtree *)0) {
+ FAIL;
+ report("Event received on window that was not part of the test");
+ report("Window ID is %x0x", ump->window);
+ continue;
+ } else
+ CHECK;
+
+ if (ump->window == ump->event) {
+ /* Event received on window itself */
+ if (btp->uflags & ON_WINDOW) {
+ report("Repeat UnmapNotify event received on window '%s'",
+ btp->name);
+ FAIL;
+ } else
+ CHECK;
+ btp->uflags |= ON_WINDOW;
+ } else {
+
+ /* Check event was received on the parent */
+ if (ump->event == parent) {
+ /*
+ * This is the Unmap reported to the parent because it was
+ * selecting SubstructureNotifyMask.
+ */
+ if (ump->window != w) {
+ report("UnmapNotify event was reported to the parent that on as not on the test window");
+ FAIL;
+ } else
+ CHECK;
+ } else if (btp->parent->wid != ump->event) {
+ report("UnmapNotify event was reported on a window that was not the parent");
+ FAIL;
+ } else if (btp->uflags & ON_PARENT) {
+ report("Repeat UnmapNotify event received on parent for window '%s'",
+ btp->name);
+ FAIL;
+ } else
+ CHECK;
+ btp->uflags |= ON_PARENT;
+ }
+
+ /*
+ * Event and window have been dealt with - now check the other
+ * fields in the event.
+ */
+ good.event = ump->event;
+ good.window = ump->window;
+
+ if (checkevent((XEvent*)&good, &ev)) {
+ report("Error in event");
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ for (i = 1; i < NSTreeSgl; i++) {
+
+ debug(2, "Checking window %s",btlist[i].name);
+
+ if (btlist[i].wid == w) {
+ if ((btlist[i].uflags & ON_WINDOW)==0) {
+ FAIL;
+ report("Unmap event was not received on window '%s'",
+ btlist[i].name);
+ } else
+ CHECK;
+
+ if ((btlist[i].uflags & ON_PARENT)==0) {
+ FAIL;
+ report("Unmap event was not received on the parent of window '%s'",
+ btlist[i].name);
+ } else
+ CHECK;
+ } else {
+ if (btlist[i].uflags & ON_WINDOW) {
+ FAIL;
+ report("Unmap event was received on window '%s'",
+ btlist[i].name);
+ } else
+ CHECK;
+
+ if (btlist[i].uflags & ON_PARENT) {
+ FAIL;
+ report("Unmap event was received on the parent of window '%s'",
+ btlist[i].name);
+ } else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(2*3 + 2*(NSTreeSgl-1));
+
+>>ASSERTION Good A
+On a call to xname a
+.S DestroyNotify
+event is generated for each window that is destroyed
+such that for any given window being destroyed,
+.S DestroyNotify
+is generated on any inferiors of that window before being generated on
+the given window itself.
+>>STRATEGY
+Create base window.
+Create window on base window to destroy.
+Create stack of windows on this window.
+Enable events on each window.
+Call xname on window.
+Verify that a DestroyNotify event is generated for each window.
+Verify that a DestroyNotify event is generated on the parent of each window.
+>>CODE
+XEvent ev;
+XDestroyWindowEvent good;
+XDestroyWindowEvent *dnp;
+Window parent;
+struct buildtree *btlist;
+struct buildtree *btp;
+int i;
+
+ parent = defdraw(display, VI_WIN);
+ btlist = buildtree(display, parent, STreeSgl, NSTreeSgl);
+
+ /* Window to be destroyed */
+ w = btlist[1].wid;
+
+ /*
+ * Unmap a window and make sure that everything has happened before we
+ * enable events.
+ */
+ btp = btntobtp(btlist, "A1");
+ btp->opts |= BT_UNMAP;
+ XUnmapWindow(display, btp->wid);
+ XSync(display, False);
+
+ for (i = 0; i < NSTreeSgl; i++)
+ XSelectInput(display, btlist[i].wid, ALLEVENTS);
+ XSelectInput(display, parent, ALLEVENTS);
+
+ XCALL;
+
+ good.type = DestroyNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = display;
+
+ /*
+ * This loop continues until there are no more events left. (In case
+ * there are extra or repeated events). The loop should be traversed
+ * 2*(NSTreeSgl-1) times.
+ */
+ for (i = 0; ; i++) {
+ if (XCheckTypedEvent(display, DestroyNotify, &ev) == False)
+ break;
+ dnp = (XDestroyWindowEvent*)&ev;
+
+ debug(1, "event=0x%x, window=0x%x", dnp->event, dnp->window);
+
+ /*
+ * If window == event then this is the event from StructureNotify,
+ * if they are different then this is the event from the
+ * SubstructureNotify. Keep track of events received and check
+ * that event is actualy set to the parent of window when they
+ * are different.
+ * Check that a destroy event has not yet been received on the
+ * parent window.
+ * Finally check the other members of the Event.
+ */
+
+ btp = btwtobtp(btlist, dnp->window);
+ if (btp == (struct buildtree *)0) {
+ report("Event received for a window that was not part of the test");
+ report(" Window ID was 0x%x", dnp->window);
+ FAIL;
+ break;
+ }
+
+ debug(1, "DestroyNotify received for window %s", btp->name);
+
+ if (dnp->window == dnp->event) {
+ if (btp->uflags & ON_WINDOW) {
+ report("Repeat DestroyNotify event received on window '%s'",
+ btp->name);
+ FAIL;
+ } else if (btp->parent->uflags & ON_WINDOW) {
+ /* Test ordering */
+ report("DestroyNotify event received on parent before child");
+ FAIL;
+ } else
+ CHECK;
+ btp->uflags |= ON_WINDOW;
+ } else {
+
+ /* Check event was received on the parent */
+ if (dnp->event == parent) {
+ /*
+ * This is the Unmap reported to the parent because it was
+ * selecting SubstructureNotifyMask.
+ */
+ if (dnp->window != w) {
+ report("UnmapNotify event was reported on a window that was not the parent");
+ FAIL;
+ } else
+ CHECK;
+ } else if (btp->parent->wid != dnp->event) {
+ report("DestroyNotify event was reported on a window that was not the parent");
+ FAIL;
+ } else if (btp->uflags & ON_PARENT) {
+ report("DestroyNotify event already received on parent for window '%s'",
+ btp->name);
+ FAIL;
+ } else
+ CHECK;
+ btp->uflags |= ON_PARENT;
+ }
+
+ /* Check other fields in event */
+ good.event = dnp->event;
+ good.window = dnp->window;
+
+ if (checkevent((XEvent*)&good, &ev)) {
+ report("Error in event");
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ /* Verify that the window and all subwindows had both notifications */
+ for (i = 1; i < NSTreeSgl; i++) {
+
+ if ((btlist[i].uflags & ON_WINDOW) == 0) {
+ report("DestroyNotify event was not received on subwindow '%s'",
+ btlist[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ if ((btlist[i].uflags & ON_PARENT) == 0) {
+ report("DestroyNotify event was not received on the parent of subwindow '%s'",
+ btlist[i].name);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS((2*2*(NSTreeSgl-1)) + 2*(NSTreeSgl-1));
+
+>>ASSERTION Good A
+When the specified window is a root window, then no windows are destroyed.
+>>STRATEGY
+Create a window.
+Attempt to destroy root window.
+Verify that the root and our window are still valid.
+>>CODE
+Window ourwin;
+XWindowAttributes atts;
+
+ /*
+ * What would happen if the root really was destroyed?!
+ * Just do a couple of simple checks to make sure that nothing
+ * bad has happened.
+ */
+ ourwin = defdraw(display, VI_WIN);
+ w = DefaultRootWindow(display);
+
+ XCALL;
+
+ CATCH_ERROR(display);
+ XGetWindowAttributes(display, DRW(display), &atts);
+ RESTORE_ERROR(display);
+ if (GET_ERROR(display) == BadWindow) {
+ report("Root window was destroyed"); /* ! */
+ FAIL;
+ } else
+ CHECK;
+
+ CATCH_ERROR(display);
+ XGetWindowAttributes(display, ourwin, &atts);
+ RESTORE_ERROR(display);
+ if (GET_ERROR(display) == BadWindow) {
+ report("A child of the root window was destroyed when attempting to destroy root window");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create base window.
+Call setforexpose() on base window.
+Create window on base to destroy.
+Destroy window.
+Verify expose processing or backing store with exposecheck().
+>>CODE
+Window parent;
+struct area area;
+
+ parent = defdraw(display, VI_WIN);
+ setforexpose(display, parent);
+ XSelectInput(display, parent, ExposureMask);
+
+ setarea(&area, 25, 35, 17, 46);
+ w = crechild(display, parent, &area);
+
+ XCALL;
+
+ if (exposecheck(display, parent))
+ CHECK;
+ else {
+ report("Neither Expose events or backing store processing");
+ report("could correctly restore the window contents.");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/linktbl.c b/xc/test/xsuite/xtest/tset/CH03/linktbl.c
new file mode 100644
index 000000000..608643c12
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/linktbl.c
@@ -0,0 +1,77 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+
+extern struct linkinfo EXChngWdwAttr;
+extern struct linkinfo EXCrcltSbws;
+extern struct linkinfo EXCrcltSbwsDw;
+extern struct linkinfo EXCrcltSbwsUp;
+extern struct linkinfo EXCnfgrWdw;
+extern struct linkinfo EXCrtSmplWdw;
+extern struct linkinfo EXCrtWdw;
+extern struct linkinfo EXDstrySbws;
+extern struct linkinfo EXDstryWdw;
+extern struct linkinfo EXLwrWdw;
+extern struct linkinfo EXMpRsd;
+extern struct linkinfo EXMpSbws;
+extern struct linkinfo EXMpWdw;
+extern struct linkinfo EXMvRszWdw;
+extern struct linkinfo EXMvWdw;
+extern struct linkinfo EXRsWdw;
+extern struct linkinfo EXRszWdw;
+extern struct linkinfo EXRstckWdws;
+extern struct linkinfo EXStWdwBg;
+extern struct linkinfo EXStWdwBgPxmp;
+extern struct linkinfo EXStWdwBrdr;
+extern struct linkinfo EXStWdwBrdrPx;
+extern struct linkinfo EXStWdwBrdrWd;
+extern struct linkinfo EXTrnsltCrdnt;
+extern struct linkinfo EXUnmpSbws;
+extern struct linkinfo EXUnmpWdw;
+extern struct linkinfo EXVslIDFrmVsl;
+
+struct linkinfo *linktbl[] = {
+ &EXChngWdwAttr,
+ &EXCrcltSbws,
+ &EXCrcltSbwsDw,
+ &EXCrcltSbwsUp,
+ &EXCnfgrWdw,
+ &EXCrtSmplWdw,
+ &EXCrtWdw,
+ &EXDstrySbws,
+ &EXDstryWdw,
+ &EXLwrWdw,
+ &EXMpRsd,
+ &EXMpSbws,
+ &EXMpWdw,
+ &EXMvRszWdw,
+ &EXMvWdw,
+ &EXRsWdw,
+ &EXRszWdw,
+ &EXRstckWdws,
+ &EXStWdwBg,
+ &EXStWdwBgPxmp,
+ &EXStWdwBrdr,
+ &EXStWdwBrdrPx,
+ &EXStWdwBrdrWd,
+ &EXTrnsltCrdnt,
+ &EXUnmpSbws,
+ &EXUnmpWdw,
+ &EXVslIDFrmVsl,
+ 0,
+};
diff --git a/xc/test/xsuite/xtest/tset/CH03/lwrwdw/a1.dat b/xc/test/xsuite/xtest/tset/CH03/lwrwdw/a1.dat
new file mode 100644
index 000000000..1b855d20f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/lwrwdw/a1.dat
@@ -0,0 +1,323 @@
+! $XConsortium$
+100 90 32
+3fc,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+1e,0
+28,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+a,1
+a,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+14,2
+5,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+3f2,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/lwrwdw/lwrwdw.m b/xc/test/xsuite/xtest/tset/CH03/lwrwdw/lwrwdw.m
new file mode 100644
index 000000000..0519e2936
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/lwrwdw/lwrwdw.m
@@ -0,0 +1,233 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XLowerWindow CH03
+void
+
+Display *display = Dsp;
+Window w;
+>>EXTERN
+
+static char *SimpleTemplate[] = {
+ ".",
+ "zero . (20,10) 40x40",
+ "one . (30,20) 40x40",
+ "two . (10,30) 40x40",
+ "other1 . (75,10) 15x70",
+};
+static int NSimpleTemplate = NELEM(SimpleTemplate);
+
+static char *Expose1Template[] = {
+ ".",
+ "zero . (20,10) 40x40",
+ "other1 . (75,10) 15x70",
+};
+static int NExpose1Template = NELEM(Expose1Template);
+
+static char *Expose2Template[] = {
+ ".",
+ "one . (30,30) 40x40",
+ "two . (50,60) 40x40",
+};
+static int NExpose2Template = NELEM(Expose2Template);
+
+>>ASSERTION Good A
+A call to xname lowers the specified window to the bottom of the stack
+so that it does not obscure any sibling windows.
+>>STRATEGY
+Create a window hierarchy using buildtree.
+Call xname on window 'one' to lower it
+Verify that window 'one' became the lowest sibling window.
+>>CODE
+struct buildtree *tree;
+Window parent;
+
+/* Create a window hierarchy using buildtree. */
+ parent = defwin(display);
+ tree = buildtree(display, parent, SimpleTemplate, NSimpleTemplate);
+/* Call xname on window 'one' to lower it */
+ w = btntow(tree, "one");
+ XCALL;
+/* Verify that window 'one' became the lowest sibling window. */
+ PIXCHECK(display, parent);
+ CHECKPASS(1);
+>>ASSERTION Good A
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create a window hierarchy using buildtree.
+Call setforexpose on window 'zero' to allow Expose event checking.
+Select Expose events on window 'zero'.
+Call xname on windows 'one' and 'two' in order to expose window 'zero'.
+Use exposecheck to ensure that the window 'zero' was restored correctly.
+>>CODE
+struct buildtree *tree1, *tree2;
+Window parent, zero, one;
+
+/* Create a window hierarchy using buildtree. */
+ parent = defwin(display);
+ tree1= buildtree(display, parent, Expose1Template, NExpose1Template);
+ zero = btntow(tree1, "zero");
+
+/* Call setforexpose on window 'zero' to allow Expose event checking. */
+ setforexpose(display, zero);
+ tree2= buildtree(display, parent, Expose2Template, NExpose2Template);
+ one = btntow(tree2, "one");
+
+/* Select Expose events on window 'zero'. */
+ XSelectInput(display, zero, ExposureMask);
+
+/* Call xname on windows 'one' and 'two' in order to expose window 'zero'. */
+ w = one;
+ XCALL;
+
+/* Use exposecheck to ensure that the window 'zero' was restored correctly. */
+ if (!exposecheck(display, zero)) {
+ report("Neither Expose events or backing store processing");
+ report("could correctly restore the window contents.");
+ FAIL;
+ } else
+ CHECK;
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When the override-redirect attribute of the window is
+.S False
+and some other client has selected
+.S SubstructureRedirectMask
+on the parent window, then a
+.S ConfigureRequest
+event is generated, and no further processing is performed.
+>>STRATEGY
+Create client1 and client2.
+Create a window hierarchy for client1.
+Save parent window image as reference image.
+Set override-redirect on window one to False.
+Select SubstructureRedirectMask events on the parent window for client2.
+Call xname on window one for client1.
+Verify that no events were delivered to client1.
+Verify that a correct ConfigureRequest event was delivered to client2.
+Verify that no further processing occurred by comparing the window
+ to our reference window.
+>>CODE
+Display *client1, *client2;
+Window parent, one;
+struct buildtree *c1tree;
+XImage *image;
+XSetWindowAttributes attr;
+XEvent ev;
+int numevent;
+
+/* Create client1 and client2. */
+ client1 = opendisplay();
+ if (client1 == NULL) {
+ delete("could not create client1");
+ return;
+ }
+ else
+ CHECK;
+ client2 = opendisplay();
+ if (client2 == NULL) {
+ delete("could not create client2");
+ return;
+ }
+ else
+ CHECK;
+
+/* Create a window hierarchy for client1. */
+ parent = defwin(client1);
+ c1tree = buildtree(client1, parent, SimpleTemplate, NSimpleTemplate);
+ one = btntow(c1tree, "one");
+
+/* Save parent window image as reference image. */
+ image = savimage(client1, parent);
+
+/* Set override-redirect on window one to False. */
+ attr.override_redirect = False;
+ XChangeWindowAttributes(client1, one, CWOverrideRedirect, &attr);
+
+/* Select SubstructureRedirectMask events on the parent window for client2. */
+ XSelectInput(client2, parent, SubstructureRedirectMask);
+ XSync(client2, True);
+
+/* Call xname on window one for client1. */
+ display = client1;
+ w = one;
+ XCALL;
+ XSync(client2, False);
+
+/* Verify that no events were delivered to client1. */
+ numevent = getevent(client1, &ev);
+ if (numevent != 0) {
+ FAIL;
+ report("%d unexpected %s delivered to client1",
+ numevent, (numevent==1)?"event was":"events were");
+ report("%sevent was %s", (numevent!=1)?"first ":"",
+ eventname(ev.type));
+ while(getevent(client1, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ } else
+ CHECK;
+
+/* Verify that a correct ConfigureRequest event was delivered to client2. */
+ numevent = getevent(client2, &ev);
+ if (numevent != 1) {
+ FAIL;
+ report("Expecting a single ConfigureRequest event");
+ report("Received %d events", numevent);
+ if (numevent != 0) {
+ report("First event was %s", eventname(ev.type));
+ while(getevent(client2, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ }
+ } else {
+ XConfigureRequestEvent good;
+
+ good.type = ConfigureRequest;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = parent;
+ good.window = one;
+ good.x = ev.xconfigure.x;
+ good.y = ev.xconfigure.y;
+ good.width = ev.xconfigure.width;
+ good.height = ev.xconfigure.height;
+ good.border_width = ev.xconfigure.border_width;
+ good.above = Above;
+ good.detail= Below;
+ good.value_mask = CWStackMode;
+
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Verify that no further processing occurred by comparing the window */
+/* to our reference window. */
+ if (!compsavimage(client1, parent, image)) {
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/mprsd/a1.dat b/xc/test/xsuite/xtest/tset/CH03/mprsd/a1.dat
new file mode 100644
index 000000000..3f4865878
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/mprsd/a1.dat
@@ -0,0 +1,233 @@
+! $XConsortium$
+100 90 32
+3f2,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+5,1
+28,2
+37,0
+5,1
+28,2
+37,0
+5,1
+28,2
+37,0
+5,1
+28,2
+37,0
+5,1
+28,2
+37,0
+5,1
+5,2
+28,3
+32,0
+5,1
+5,2
+28,3
+32,0
+5,1
+5,2
+28,3
+32,0
+5,1
+5,2
+28,3
+32,0
+5,1
+5,2
+28,3
+32,0
+5,1
+5,2
+28,3
+5,4
+2d,0
+5,1
+5,2
+28,3
+5,4
+2d,0
+5,1
+5,2
+28,3
+5,4
+2d,0
+5,1
+5,2
+28,3
+5,4
+2d,0
+5,1
+5,2
+28,3
+5,4
+2d,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+28,0
+5,1
+5,2
+28,3
+a,5
+2d,0
+5,2
+28,3
+a,5
+2d,0
+5,2
+28,3
+a,5
+2d,0
+5,2
+28,3
+a,5
+2d,0
+5,2
+28,3
+a,5
+2d,0
+5,2
+28,3
+a,5
+32,0
+28,3
+a,5
+32,0
+28,3
+a,5
+32,0
+28,3
+a,5
+32,0
+28,3
+a,5
+32,0
+28,3
+a,5
+37,0
+5,4
+28,5
+37,0
+5,4
+28,5
+37,0
+5,4
+28,5
+37,0
+5,4
+28,5
+37,0
+5,4
+28,5
+3c,0
+28,5
+3c,0
+28,5
+3c,0
+28,5
+3c,0
+28,5
+3c,0
+28,5
+7ee,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/mprsd/a4.dat b/xc/test/xsuite/xtest/tset/CH03/mprsd/a4.dat
new file mode 100644
index 000000000..bb1a8161e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/mprsd/a4.dat
@@ -0,0 +1,151 @@
+! $XConsortium$
+100 90 32
+7e4,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+9,2
+5,3
+6,2
+f,1
+3c,0
+5,1
+9,2
+5,3
+6,2
+f,1
+3c,0
+5,1
+9,2
+5,3
+6,2
+f,1
+3c,0
+5,1
+9,2
+5,3
+6,2
+f,1
+3c,0
+5,1
+9,2
+5,3
+6,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+5,1
+14,2
+f,1
+3c,0
+28,1
+5,0
+9,4
+2e,0
+28,1
+5,0
+9,4
+2e,0
+28,1
+5,0
+9,4
+2e,0
+28,1
+5,0
+9,4
+2e,0
+28,1
+5,0
+9,4
+2e,0
+28,1
+5,0
+9,4
+2e,0
+28,1
+5,0
+9,4
+2e,0
+28,1
+5,0
+9,4
+2e,0
+28,1
+5,0
+9,4
+2e,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+be0,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/mprsd/mprsd.m b/xc/test/xsuite/xtest/tset/CH03/mprsd/mprsd.m
new file mode 100644
index 000000000..6b97306f1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/mprsd/mprsd.m
@@ -0,0 +1,1070 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XMapRaised CH03
+void
+
+Display *display = Dsp;
+Window w;
+>>EXTERN
+
+static char *T1[] = {
+ ".",
+ "A . (10,10) 40x40",
+ "B . (15,15) 40x40",
+ "C . (20,20) 40x40 unmap",
+ "D . (25,25) 40x40",
+ "E . (30,30) 40x40",
+};
+/* Number of direct children of parent in T1 */
+#define NT1CHILD 5
+
+static char *T2[] = {
+ ".",
+ "A . (20,20) 40x40 unmap",
+ "B A (5,5) 20x20",
+ "C B (9,4) 5x5",
+ "sib . (65, 45) 9x9",
+};
+#define NT2CHILD 2
+
+>>ASSERTION Good A
+A call to xname maps the specified
+window and raises it to the top of the stacking order.
+>>STRATEGY
+Create windows, one of which is unmapped in the middle of the stacking order.
+Map window.
+Verify map state is IsViewable.
+Verify that window shows on screen.
+Verify that window is at top of stacking order.
+>>CODE
+int so;
+Window base;
+struct buildtree *btp;
+struct buildtree *btlist;
+XWindowAttributes atts;
+
+ base = defwin(display);
+
+ btlist = buildtree(display, base, T1, NELEM(T1));
+
+ w = btntow(btlist, "C");
+ if (isdeleted())
+ return;
+
+ XCALL;
+ (void) XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsViewable));
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ so = stackorder(display, w);
+ if (so != NT1CHILD-1) {
+ report("Window was not raised to the top, stack pos %d, expecting %d",
+ so, NT1CHILD-1);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION def
+When a call to xname is made on a window that has no unmapped
+ancestors, then the window becomes viewable.
+>>ASSERTION Good A
+When a call to xname is made on a window that
+has an unmapped ancestor, then the window does not become
+viewable.
+>>STRATEGY
+Create windows with an unmapped ancestor.
+Map one of these window that has an unmapped ancestor.
+Verify map state is IsUnviewable.
+Verify that nothing new becomes visible.
+>>CODE
+Window base;
+XImage *imp;
+struct buildtree *btp;
+XWindowAttributes atts;
+
+ base = defwin(display);
+ btp = buildtree(display, base, T2, NELEM(T2));
+
+ /* We shall map window B which has A as an unmapped ancestor */
+ w = btntow(btp, "B");
+
+ imp = savimage(display, base);
+
+ XCALL;
+
+ (void) XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsUnviewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsUnviewable));
+ FAIL;
+ } else
+ CHECK;
+
+ if (compsavimage(display, base, imp))
+ CHECK;
+ else {
+ report("Somthing became visible after mapping window with unmapped ancestors");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When a call to xname is made on a window that is the only unmapped ancestor
+of an inferior window that has previously been mapped,
+then that inferior window becomes viewable.
+>>STRATEGY
+Create stack of windows with mapped windows as inferiors of an unmapped window.
+Check that map-state of inferiors is IsUnviewable.
+Map the ancestor window.
+Verify that map-state of inferiors is IsViewable.
+Verify that windows become visible on the screen.
+>>CODE
+Window base;
+struct buildtree *ch1;
+struct buildtree *ch2;
+struct buildtree *btp;
+XWindowAttributes atts;
+
+ base = defwin(display);
+ btp = buildtree(display, base, T2, NELEM(T2));
+
+ ch1 = btntobtp(btp, "B");
+ ch2 = btntobtp(btp, "C");
+
+ XGetWindowAttributes(display, ch1->wid, &atts);
+ if (atts.map_state != IsUnviewable) {
+ report("map state for inferior %s was %s, expecting %s",
+ ch1->name,mapstatename(atts.map_state), mapstatename(IsUnviewable));
+ FAIL;
+ } else
+ CHECK;
+
+ XGetWindowAttributes(display, ch2->wid, &atts);
+ if (atts.map_state != IsUnviewable) {
+ report("map state for inferior %s was %s, expecting %s",
+ ch2->name,mapstatename(atts.map_state), mapstatename(IsUnviewable));
+ FAIL;
+ } else
+ CHECK;
+
+ w = btntow(btp, "A");
+
+ XCALL;
+
+ XGetWindowAttributes(display, ch1->wid, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state for inferior %s was %s, expecting %s",
+ ch1->name, mapstatename(atts.map_state), mapstatename(IsViewable));
+ FAIL;
+ } else
+ CHECK;
+
+ XGetWindowAttributes(display, ch2->wid, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state for inferior %s was %s, expecting %s",
+ ch2->name, mapstatename(atts.map_state), mapstatename(IsViewable));
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ CHECKPASS(5);
+>># ** The following passed the review but appears bogus - the window is
+>># still raised.
+>># ASSERTION Good A
+>># When the window is already mapped, then a call to xname has no effect.
+>>ASSERTION Good A
+When the override-redirect attribute of the window is
+.S False
+and some other client has selected
+.S SubstructureRedirectMask
+on the parent window, then a
+.S MapRequest
+event is generated, and the call to xname does not map the window.
+>>STRATEGY
+Create base window.
+Create unmapped window on base window.
+Set override-redirect attribute to False.
+Create second client.
+Select SubstructureRedirect for second client on base window.
+Map window.
+Verify that the MapRequest event is generated on second client.
+Verify that map-state is still IsUnmapped.
+>>CODE
+Display *client2;
+Window base;
+XSetWindowAttributes setatts;
+XWindowAttributes atts;
+XMapRequestEvent good;
+XEvent ev;
+struct area area;
+int n;
+
+ base = defwin(display);
+ setarea(&area, 20, 20, 40, 40);
+ w = creunmapchild(display, base, &area);
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+ if (isdeleted())
+ return;
+
+ client2 = opendisplay();
+ XSelectInput(client2, base, SubstructureRedirectMask);
+ XSync(client2, True);
+
+ XCALL;
+ XSync(client2, False);
+
+ good.type = MapRequest;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = base;
+ good.window = w;
+
+ /* There is also a configure request */
+ ev.type = -1;
+ while (getevent(client2, &ev) > 0) {
+ if (ev.type == MapRequest) {
+ if (checkevent((XEvent *)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+ break;
+ }
+ }
+ if (ev.type != MapRequest) {
+ report("No MapRequest event generated");
+ FAIL;
+ } else
+ CHECK;
+
+ (void) XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsUnmapped) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsUnmapped));
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the override-redirect attribute of the window is
+.S False
+and some other client has selected
+.S SubstructureRedirectMask
+on the parent window, then a
+.S ConfigureRequest
+event is generated, and the call to xname does not restack the window.
+>>STRATEGY
+Create base window.
+Create unmapped window on base window.
+Set override-redirect attribute to False.
+Create sibling to test window so that stacking order test is meaningful.
+Create second client.
+Select SubstructureRedirect for second client on base window.
+Map window.
+Verify that a ConfigureRequest event is generated on second client.
+Verify that stacking order is unchanged.
+>>CODE
+Window base;
+Window ch;
+Display *client2;
+XSetWindowAttributes setatts;
+XConfigureRequestEvent good;
+struct area area;
+struct area charea;
+int origso;
+XEvent ev;
+int n;
+
+ base = defwin(display);
+ setarea(&area, 20, 20, 40, 40);
+ w = creunmapchild(display, base, &area);
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+
+ setarea(&charea, 65, 45, 9, 9);
+ ch = crechild(display, base, &charea);
+
+ origso = stackorder(display, w);
+ if (isdeleted())
+ return;
+
+ client2 = opendisplay();
+ XSelectInput(client2, base, SubstructureRedirectMask);
+ XSync(client2, True);
+
+ XCALL;
+ XSync(client2, False);
+
+ good.type = ConfigureRequest;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = base;
+ good.window = w;
+ good.x = area.x;
+ good.y = area.y;
+ good.width = area.width;
+ good.height = area.height;
+ good.border_width = 0;
+
+ good.above = None;
+ good.detail = Above;
+ good.value_mask = CWStackMode;
+
+ /* There is also a map request */
+ ev.type = -1;
+ while (getevent(client2, &ev) > 0) {
+ if (ev.type == ConfigureRequest) {
+ if (checkevent((XEvent *)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+ break;
+ }
+ }
+ if (ev.type != ConfigureRequest) {
+ report("No ConfigureRequest event generated");
+ FAIL;
+ } else
+ CHECK;
+
+ if (stackorder(display, w) != origso) {
+ report("Stacking order changed");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the
+.M override-redirect
+attribute of the window is
+.S True ,
+then the window is mapped and a
+.S MapNotify
+event is generated.
+>>STRATEGY
+Create base window.
+Create unmapped window on base window.
+Set override-redirect attribute to True.
+Select StructureNotify events on window.
+Create second client.
+Select SubstructureRedirect and SubstructureNotify for second client on base window.
+Map window.
+Verify that a MapNotify event is generated on parent.
+Verify that a MapNotify event is generated on window.
+Verify that a ConfigureNotify event is generated on parent.
+Verify that a ConfigureNotify event is generated on window.
+Verify that the map_state of the window is IsViewable.
+>>CODE
+Window base;
+Display *client2;
+XSetWindowAttributes setatts;
+XWindowAttributes atts;
+XConfigureEvent confgood;
+XMapEvent mapgood;
+struct buildtree *btlist;
+struct buildtree *btp;
+struct area area;
+XEvent ev;
+int gotmap;
+int gotconf;
+int n;
+
+ base = defwin(display);
+ btlist = buildtree(display, base, T2, NELEM(T2));
+
+ w = btntow(btlist, "A");
+ setatts.override_redirect = True;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+ /*
+ * Would normally select ALLEVENTS to test for spurious events.
+ * This cannot be done here, since we would possibly get valid
+ * EnterNotify's etc.
+ */
+ XSelectInput(display, w, StructureNotifyMask);
+ if (isdeleted())
+ return;
+
+ client2 = opendisplay();
+ XSelectInput(client2, base,SubstructureRedirectMask|SubstructureNotifyMask);
+ XSync(client2, True);
+
+ XCALL;
+ XSync(client2, False);
+
+ mapgood.type = MapNotify;
+ mapgood.serial = 0;
+ mapgood.send_event = False;
+ mapgood.display = client2;
+ mapgood.event = base;
+ mapgood.window = w;
+ mapgood.override_redirect = True;
+
+ btp = btwtobtp(btlist, w);
+ confgood.type = ConfigureNotify;
+ confgood.serial = 0;
+ confgood.send_event = False;
+ confgood.display = client2;
+ confgood.event = base;
+ confgood.window = w;
+ confgood.x = btp->x;
+ confgood.y = btp->y;
+ confgood.width = btp->width;
+ confgood.height = btp->height;
+ confgood.border_width = 0;
+
+ confgood.above = btntow(btlist, "sib");
+ confgood.override_redirect = True;
+
+ n = XPending(client2);
+ if (n != 2) {
+ report("Expecting two events on second client, received %d", n);
+ FAIL;
+ } else
+ CHECK;
+
+ gotmap = 0;
+ gotconf = 0;
+ while (getevent(client2, &ev) > 0) {
+ if (ev.type == MapNotify) {
+ gotmap++;
+ if (checkevent((XEvent*)&mapgood, &ev))
+ FAIL;
+ else
+ CHECK;
+ } else if (ev.type == ConfigureNotify) {
+ gotconf++;
+ if (checkevent((XEvent*)&confgood, &ev))
+ FAIL;
+ else
+ CHECK;
+ } else {
+ report("Unexpected event (%s) received", eventname(ev.type));
+ FAIL;
+ }
+ }
+ if ((gotconf != 1 || gotmap != 1) && fail == 0) {
+ report("Repeated events received");
+ FAIL;
+ } else
+ CHECK;
+
+ /*
+ * Now check for map notify on the window itself.
+ */
+ mapgood.display = display;
+ mapgood.event = w;
+
+ confgood.display = display;
+ confgood.event = w;
+
+ n = XPending(display);
+ if (n != 2) {
+ report("Expecting two events on window, received %d", n);
+ FAIL;
+ } else
+ CHECK;
+
+ gotmap = 0;
+ gotconf = 0;
+ while (getevent(display, &ev) > 0) {
+ if (ev.type == MapNotify) {
+ gotmap++;
+ if (checkevent((XEvent*)&mapgood, &ev))
+ FAIL;
+ else
+ CHECK;
+ } else if (ev.type == ConfigureNotify) {
+ gotconf++;
+ if (checkevent((XEvent*)&confgood, &ev))
+ FAIL;
+ else
+ CHECK;
+ } else {
+ report("Unexpected event (%s) received", eventname(ev.type));
+ FAIL;
+ }
+ }
+ if ((gotconf != 1 || gotmap != 1) && fail == 0) {
+ report("Repeated events received");
+ FAIL;
+ } else
+ CHECK;
+
+ (void) XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsViewable));
+ FAIL;
+ } else
+ CHECK;
+
+ if (stackorder(display, w) != NT2CHILD-1) {
+ report("Window not raised to the top of the stacking order");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(10);
+
+>>ASSERTION Good A
+When no other client has selected
+.S SubstructureRedirectMask
+on the parent window, then on a call to xname
+the window is mapped and a
+.S MapNotify
+event is generated.
+>>STRATEGY
+Create base window.
+Create unmapped window on base window.
+Set override-redirect attribute to False.
+Select StructureNotify events on window.
+Create second client.
+Select SubstructureNotify for second client on base window.
+Map window.
+Verify that a MapNotify event is generated on parent.
+Verify that a MapNotify event is generated on window.
+Verify that a ConfigureNotify event is generated on parent.
+Verify that a ConfigureNotify event is generated on window.
+Verify that the map_state of the window is IsViewable.
+Verify that window is at top of stacking order.
+>>CODE
+Window base;
+Display *client2;
+XSetWindowAttributes setatts;
+XWindowAttributes atts;
+XConfigureEvent confgood;
+XMapEvent mapgood;
+struct buildtree *btlist;
+struct buildtree *btp;
+struct area area;
+XEvent ev;
+int gotmap;
+int gotconf;
+int n;
+
+ base = defwin(display);
+ btlist = buildtree(display, base, T2, NELEM(T2));
+
+ w = btntow(btlist, "A");
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+ /*
+ * Would normally select ALLEVENTS to test for spurious events.
+ * This cannot be done here, since we would possibly get valid
+ * EnterNotify's etc.
+ */
+ XSelectInput(display, w, StructureNotifyMask);
+ if (isdeleted())
+ return;
+
+ client2 = opendisplay();
+ XSelectInput(client2, base, SubstructureNotifyMask);
+ XSync(client2, True);
+
+ XCALL;
+ XSync(client2, False);
+
+ mapgood.type = MapNotify;
+ mapgood.serial = 0;
+ mapgood.send_event = False;
+ mapgood.display = client2;
+ mapgood.event = base;
+ mapgood.window = w;
+ mapgood.override_redirect = False;
+
+ btp = btwtobtp(btlist, w);
+ confgood.type = ConfigureNotify;
+ confgood.serial = 0;
+ confgood.send_event = False;
+ confgood.display = client2;
+ confgood.event = base;
+ confgood.window = w;
+ confgood.x = btp->x;
+ confgood.y = btp->y;
+ confgood.width = btp->width;
+ confgood.height = btp->height;
+ confgood.border_width = 0;
+
+ confgood.above = btntow(btlist, "sib");
+ confgood.override_redirect = False;
+
+ n = XPending(client2);
+ if (n != 2) {
+ report("Expecting two events on second client, received %d", n);
+ FAIL;
+ } else
+ CHECK;
+
+ gotmap = 0;
+ gotconf = 0;
+ while (getevent(client2, &ev) > 0) {
+ if (ev.type == MapNotify) {
+ gotmap++;
+ if (checkevent((XEvent*)&mapgood, &ev))
+ FAIL;
+ else
+ CHECK;
+ } else if (ev.type == ConfigureNotify) {
+ gotconf++;
+ if (checkevent((XEvent*)&confgood, &ev))
+ FAIL;
+ else
+ CHECK;
+ } else {
+ report("Unexpected event (%s) received", eventname(ev.type));
+ FAIL;
+ }
+ }
+ if ((gotconf != 1 || gotmap != 1) && fail == 0) {
+ report("Repeated events received");
+ FAIL;
+ } else
+ CHECK;
+
+ /*
+ * Now check for map notify on the window itself.
+ */
+ mapgood.display = display;
+ mapgood.event = w;
+
+ confgood.display = display;
+ confgood.event = w;
+
+ n = XPending(display);
+ if (n != 2) {
+ report("Expecting two events on window, received %d", n);
+ FAIL;
+ } else
+ CHECK;
+
+ gotmap = 0;
+ gotconf = 0;
+ while (getevent(display, &ev) > 0) {
+ if (ev.type == MapNotify) {
+ gotmap++;
+ if (checkevent((XEvent*)&mapgood, &ev))
+ FAIL;
+ else
+ CHECK;
+ } else if (ev.type == ConfigureNotify) {
+ gotconf++;
+ if (checkevent((XEvent*)&confgood, &ev))
+ FAIL;
+ else
+ CHECK;
+ } else {
+ report("Unexpected event (%s) received", eventname(ev.type));
+ FAIL;
+ }
+ }
+ if ((gotconf != 1 || gotmap != 1) && fail == 0) {
+ report("Repeated events received");
+ FAIL;
+ } else
+ CHECK;
+
+ (void) XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsViewable));
+ FAIL;
+ } else
+ CHECK;
+
+ if (stackorder(display, w) != NT2CHILD-1) {
+ report("Window not raised to the top of the stacking order");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(10);
+>>ASSERTION Good A
+When the window or one of its inferiors becomes viewable after a call to xname
+and no earlier contents for it are remembered, then
+the window is tiled with its background.
+>>STRATEGY
+>># Have already tested this with a plain background, but take the
+>># opportunity to test with a background tile.
+Create window.
+Set background to tile.
+Map window.
+Verify that window is tiled.
+Re-run with an inferior window.
+>>CODE
+Window base;
+Window win;
+Pixmap tile;
+
+ base = defwin(display);
+
+ w = creunmapchild(display, base, (struct area *)0);
+
+ tile = maketile(display, w);
+ XSetWindowBackgroundPixmap(display, w, tile);
+
+ XCALL;
+
+ if (checktile(display, w, (struct area *)0, 0, 0, tile))
+ CHECK;
+ else {
+ report("Window not tiled with its background correctly");
+ FAIL;
+ }
+
+ /*
+ * Create an unmapped window and a mapped inferior of that window.
+ * When we map the window the inferior becomes viewable and so it
+ * should be tiled.
+ */
+ base = defwin(display);
+ w = creunmapchild(display, base, (struct area *)0);
+ win = crechild(display, w, (struct area *)0);
+ XSetWindowBackgroundPixmap(display, win, tile);
+
+ XCALL;
+
+ if (checktile(display, win, (struct area *)0, 0, 0, tile))
+ CHECK;
+ else {
+ report("Inferior window not tiled with its background correctly");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+>># This is inconsistant with other stuff? In create.
+When the background of the window is undefined
+then the existing screen contents
+from the parent or an inferior of the parent are not altered,
+and zero or more
+.S Expose
+events are generated.
+>>STRATEGY
+Create window as parent.
+Draw pattern on parent.
+Create inferior window and draw pattern on that too.
+Create unmapped inferior that overlaps other inferior.
+Set background pixmap to None to undefine background.
+Map window.
+Verify that screen contents have not been altered.
+
+Unmap window.
+Select for expose events.
+Call setforexpose() to draw into window (only effective if backing store in use)
+Call xname to map window.
+Verify that window was restored from backing store or received expose
+events to cover the window with exposecheck().
+>>CODE
+Window base;
+Window ch1;
+XImage *imp;
+struct area area;
+
+ base = defwin(display);
+ pattern(display, base);
+
+ setarea(&area, 7, 7, 50, 50);
+ ch1 = crechild(display, base, &area);
+ pattern(display, ch1);
+
+ /* Save original contents */
+ imp = savimage(display, base);
+
+ setarea(&area, 5, 5, 70, 40);
+ w = creunmapchild(display, base, &area);
+ XSetWindowBackgroundPixmap(display, w, None);
+
+ XCALL;
+
+ if (compsavimage(display, base, imp))
+ CHECK;
+ else {
+ report("Screen contents altered by mapping window with undefined background");
+ FAIL;
+ }
+
+ /*
+ * Check expose events. Unmap the window and draw into it with
+ * setforexpose(), (this will normally have no effect unless backing
+ * store is active). Map the window and check that either
+ * - there are zero expose events and backing store has preserved the
+ * contents.
+ * - there are enough expose events to cover the window.
+ */
+ XUnmapWindow(display, w);
+
+ XSelectInput(display, w, ExposureMask);
+ setforexpose(display, w);
+ /* because setforexpose() changes the background */
+ XSetWindowBackgroundPixmap(display, w, None);
+
+ XCALL;
+
+ if (exposecheck(display, w))
+ CHECK;
+ else {
+ report("Neither Expose events or backing store processing");
+ report("could correctly restore the window contents.");
+ FAIL;
+ }
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When the background of the window is undefined
+then the existing screen contents
+not from the parent or an inferior of the parent are undefined,
+and zero or more
+.S Expose
+events are generated.
+>>ASSERTION Good D 3
+If backing store is supported:
+When backing store has been maintained while a particular
+window was unmapped, then no
+.S Expose
+events are generated for that window.
+>>STRATEGY
+If backing store is supported
+ Create window.
+ Set backing store hint to Always.
+ Write into window.
+ Unmap window.
+ Enable Expose events.
+ Map window.
+ If window contents are unaltered.
+ Backing store was maintained.
+ Verify that no Expose events were received.
+ else
+ Backing store was not maintained.
+ Test result is UNTESTED.
+else
+ Test result is UNSUPPORTED.
+>>CODE
+XSetWindowAttributes setatts;
+XEvent ev;
+
+ if (DoesBackingStore(DefaultScreenOfDisplay(display)) != Always) {
+ unsupported("Backing store not supported while unmapped");
+ return;
+ }
+
+ w = defwin(display);
+ setatts.backing_store = Always;
+ XChangeWindowAttributes(display, w, CWBackingStore, &setatts);
+
+ dset(display, w, W_FG);
+ XUnmapWindow(display, w);
+ XSelectInput(display, w, ExposureMask);
+
+ XCALL;
+
+ XSelectInput(display, w, NoEventMask);
+
+ if (checkarea(display, w, (struct area *)0, W_FG, W_FG, CHECK_ALL|CHECK_DIFFER)) {
+ /*
+ * Backing store apeared to be active during the unmap.
+ */
+ if (XCheckTypedWindowEvent(display, w, Expose, &ev)) {
+ /* Received Exposes */
+ report("Expose received when backing store was active");
+ FAIL;
+ } else
+ CHECK;
+ } else {
+ /*
+ * There is nothing wrong here, but it is possibly of interest.
+ */
+ trace("NOTE: Server claims to support backing store but it was not active in the test");
+ UNTESTED;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good D 3
+When the server elects to now maintain backing store for a window,
+then an
+.S Expose
+event for the whole window is generated.
+>>STRATEGY
+If backing store is supported.
+ Create small window.
+ Ask for backing store when mapped.
+ Create (and map) windows that would obscure the test window.
+ Enable Expose events.
+ Map window.
+ If no Expose
+ Untested - maybe got backing store always.
+ Verify Expose event is for whole window.
+else
+ Untested.
+>>CODE
+int n;
+Window base;
+Window ch1;
+XEvent ev;
+struct area area;
+struct area charea;
+XExposeEvent *ep;
+XSetWindowAttributes setatts;
+
+ if (DoesBackingStore(DefaultScreenOfDisplay(display)) == NotUseful) {
+ unsupported("Backing store is not supported");
+ return;
+ }
+
+ base = defwin(display);
+
+ setarea(&area, 0, 0, 70, 70);
+ w = creunmapchild(display, base, &area);
+ setatts.backing_store = WhenMapped;
+ XChangeWindowAttributes(display, w, CWBackingStore, &setatts);
+
+ /* Create a child that will cover the test window */
+ setarea(&charea, 0, 0, 20, 20);
+ ch1 = crechild(display, base, &charea);
+
+ XSelectInput(display, w, ExposureMask);
+ XCALL;
+ XSelectInput(display, w, NoEventMask);
+
+ n = XPending(display);
+ if (n == 0) {
+ trace("No Expose events on mapping window with backing-store WhenMapped");
+ UNTESTED;
+ } else
+ CHECK;
+
+ if (n == 1) {
+ (void) getevent(display, &ev);
+ if (ev.type != Expose) {
+ /* Only Expose events were enabled */
+ delete("Unexpected event received (%s)", eventname(ev.type));
+ } else {
+ ep = (XExposeEvent*)&ev;
+ if (ep->x == area.x && ep->y == area.y && ep->width == area.width && ep->height == area.height) {
+ /* Full window Expose received */
+ CHECK;
+ } else {
+ /*
+ * Since there was only one event and it does not cover
+ * the whole window then it is incorrect.
+ */
+ report("Expose event covered wrong area");
+ report("x=%d, y=%d, width=%d, height=%d", ep->x, ep->y, ep->width, ep->height);
+ FAIL;
+ }
+ }
+ } else {
+ trace("Did not appear to get backing store");
+ UNTESTED;
+ }
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the server elects to not maintain backing store for a
+window, then
+.S Expose
+events are generated only for visible regions.
+>># NOTE: 'are' reported is from ANSI. Spec says 'may be' reported.
+>># I'd try with 'are' and see if anyone notices. - kieron
+>>STRATEGY
+Create small window.
+Create child covering this window for use as the test window.
+Ask for no backing store.
+Create (and map) window that would obscure the test window.
+Map window.
+If Expose event is for whole window.
+ Untested - maybe got backing store.
+else
+ Verify that only visible regions got Expose events.
+>>CODE
+int n;
+Window base;
+Window ch1;
+struct area area;
+struct area charea;
+XSetWindowAttributes setatts;
+
+ base = defwin(display);
+
+ /*
+ * Because the window is raised to the top of the stacking order
+ * then we must ensure that the test window is not a sibling of
+ * the window used to obscure it. This is done by working with a
+ * grandchild of the base.
+ */
+ setarea(&area, 0, 0, 70, 70);
+ w = crechild(display, base, &area);
+ w = creunmapchild(display, w, (struct area *)0);
+ setatts.backing_store = NotUseful;
+ XChangeWindowAttributes(display, w, CWBackingStore, &setatts);
+
+ /* Create a child that will cover the test window */
+ setarea(&charea, 0, 0, 20, 20);
+ ch1 = crechild(display, base, &charea);
+
+ XSelectInput(display, w, ExposureMask);
+ XCALL;
+ XSelectInput(display, w, NoEventMask);
+
+ n = XPending(display);
+ if (n == 0) {
+ trace("No Expose events on mapping window with backing-store NotUseful");
+ UNTESTED;
+ } else
+ CHECK;
+
+ if (n == 1) {
+ trace("Appeared to get backing store when asked for NotUseful");
+ UNTESTED;
+ } else {
+ /*
+ * Remove the child window. Clear the test window, and then
+ * redraw it according to the Expose events. This should leave
+ * the part that was not visible after the map in the background
+ * pixel.
+ */
+ XUnmapWindow(display, ch1);
+ dclear(display, w);
+ exposefill(display, w);
+ if (checkarea(display, w, &charea, W_BG, W_FG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Some part of non-visible regions received Expose events");
+ report(" or not all visible regions exposed");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/mpsbws/a1.dat b/xc/test/xsuite/xtest/tset/CH03/mpsbws/a1.dat
new file mode 100644
index 000000000..152986270
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/mpsbws/a1.dat
@@ -0,0 +1,263 @@
+! $XConsortium$
+100 90 32
+3f2,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+28,1
+3c,0
+a,1
+28,3
+32,0
+a,1
+19,3
+28,4
+19,0
+a,1
+19,3
+28,4
+19,0
+a,1
+19,3
+28,4
+19,0
+a,1
+19,3
+28,4
+19,0
+a,1
+19,3
+28,4
+19,0
+a,1
+19,3
+28,4
+19,0
+a,1
+19,3
+28,4
+19,0
+a,1
+a,3
+28,5
+f,4
+19,0
+a,1
+a,3
+28,5
+f,4
+19,0
+a,1
+a,3
+28,5
+f,4
+19,0
+a,1
+a,3
+28,5
+f,4
+19,0
+a,1
+a,3
+28,5
+f,4
+19,0
+a,1
+a,3
+28,5
+f,4
+19,0
+a,1
+a,3
+28,5
+f,4
+19,0
+a,1
+a,3
+28,5
+f,4
+19,0
+a,1
+a,3
+28,5
+f,4
+19,0
+a,1
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+11,2
+a,3
+28,5
+f,4
+12,0
+1b,2
+28,5
+f,4
+12,0
+1b,2
+28,5
+21,0
+1b,2
+28,5
+21,0
+1b,2
+28,5
+21,0
+1b,2
+28,5
+21,0
+1b,2
+28,5
+21,0
+1b,2
+28,5
+21,0
+1b,2
+28,5
+21,0
+28,2
+3c,0
+28,2
+3c,0
+28,2
+3c,0
+28,2
+3c,0
+28,2
+3c,0
+28,2
+3c,0
+28,2
+3c,0
+28,2
+3c,0
+28,2
+3c,0
+28,2
+421,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/mpsbws/mpsbws.m b/xc/test/xsuite/xtest/tset/CH03/mpsbws/mpsbws.m
new file mode 100644
index 000000000..bdc6bb87e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/mpsbws/mpsbws.m
@@ -0,0 +1,982 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XMapSubwindows CH03
+void
+
+Display *display = Dsp;
+Window w;
+>>EXTERN
+
+>># "A1 A (15, 5) 5x5 unmap",
+>># "A2 A (3, 15) 5x5 unmap",
+>># "E1 E (10,10) 20x20 unmap",
+>># "E1a E1 (10,10) 5x5 unmap",
+
+#define WINDOW_NOTIFY 001
+#define PARENT_NOTIFY 002
+
+char *T1[] = {
+ ".",
+ "A . (10,10) 40x40 unmap",
+ "B . (3,40) 40x40 unmap",
+ "C . (20,22) 40x40 unmap",
+ "D . (45,23) 40x40 unmap",
+ "E . (30,30) 40x40 unmap",
+};
+
+>>ASSERTION Good A
+A call to xname maps all subwindows of the specified window in
+top to bottom stacking order.
+>>STRATEGY
+Create unmapped subwindows of a window.
+Map subwindows.
+Verify map state of each subwindow is IsViewable.
+Verify that windows show on screen.
+>>CODE
+XWindowAttributes atts;
+struct buildtree *btlist;
+int i;
+
+ w = defwin(display);
+ btlist = buildtree(display, w, T1, NELEM(T1));
+
+ XCALL;
+
+ for (i = 1; i < NELEM(T1); i++) {
+ (void) XGetWindowAttributes(display, btlist[i].wid, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsViewable));
+ report(" Window name was %s", btlist[i].name);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ PIXCHECK(display, w);
+
+ CHECKPASS(1+NELEM(T1)-1);
+
+>>ASSERTION def
+When a call to xname is made on a window that is mapped and
+has no unmapped ancestors, then the
+subwindows become viewable.
+>>ASSERTION Good A
+When a call to xname is made on a window that is unmapped or
+has an unmapped ancester,
+then the subwindows do not become viewable.
+>>STRATEGY
+Create stack of unmapped windows.
+Call xname on one of these window that has an unmapped ancestor.
+Verify map state of each subwindow is IsUnviewable.
+Verify that nothing becomes visible.
+>>CODE
+Window base;
+struct buildtree *btp;
+XWindowAttributes atts;
+int i;
+
+ base = defwin(display);
+
+ /* Create an unmapped test window */
+ w = creunmapchild(display, base, (struct area *)0);
+ btp = buildtree(display, w, T1, NELEM(T1));
+
+ XCALL;
+
+ for (i = 1; i < NELEM(T1); i++) {
+ (void) XGetWindowAttributes(display, btp[i].wid, &atts);
+ if (atts.map_state != IsUnviewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsUnviewable));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ if (checkarea(display, base, (struct area *)0, W_BG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Somthing became visible after mapping subwindows with unmapped ancestors");
+ FAIL;
+ }
+
+ CHECKPASS(1+NELEM(T1)-1);
+
+>>ASSERTION Good A
+When all the subwindows are already mapped,
+then a call to xname has no effect.
+>>STRATEGY
+Create subwindows.
+Map subwindow.
+Enable events.
+Attempt to map subwindows again.
+Verify that no difference occurred on screen.
+Verify that map-state is still IsViewable.
+Verify that no events are generated.
+>>CODE
+Window base;
+XWindowAttributes atts;
+struct buildtree *bt;
+XImage *imp;
+int i;
+
+ base = defwin(display);
+ bt = buildtree(display, base, T1, NELEM(T1));
+
+ w = base;
+ XCALL;
+
+ imp = savimage(display, base);
+
+ for (i = 0; i < NELEM(T1); i++)
+ XSelectInput(display, bt[i].wid, ALLEVENTS);
+
+ XCALL;
+
+ for (i = 0; i < NELEM(T1); i++)
+ XSelectInput(display, bt[i].wid, NoEventMask);
+
+ if (compsavimage(display, base, imp))
+ CHECK;
+ else {
+ report("Difference occurred on screen after re-mapping subwindows");
+ FAIL;
+ }
+
+ for (i = 1; i < NELEM(T1); i++) {
+ (void) XGetWindowAttributes(display, bt[i].wid, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsViewable));
+ report(" window name %s", bt[i].name);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ if (XPending(display) != 0) {
+ report("Re-mapping subwindow produced event");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2+NELEM(T1)-1);
+
+>>ASSERTION Good A
+When the
+.M override_redirect
+attribute of a subwindow is
+.S False
+and some other client has selected
+.S SubstructureRedirectMask
+on its parent window, then a
+.S MapRequest
+event is generated, and the call to xname does not map the subwindow.
+>>STRATEGY
+Create base window.
+Create unmapped subwindows on base window.
+Set override-redirect attribute to False on each subwindow.
+Create second client.
+Select SubstructureRedirectMask for second client on base window.
+Call xname on base window.
+Verify that the MapRequest event is generated for each subwindow.
+Verify that map-state is still IsUnmapped.
+>>CODE
+Display *client2;
+XSetWindowAttributes setatts;
+XWindowAttributes atts;
+XMapRequestEvent good;
+XMapRequestEvent *mrp;
+struct buildtree *bt;
+struct buildtree *btp;
+XEvent ev;
+int i;
+
+ w = defwin(display);
+ bt = buildtree(display, w, T1, NELEM(T1));
+
+ for (i = 1; i < NELEM(T1); i++) {
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, bt[i].wid, CWOverrideRedirect, &setatts);
+ }
+
+ if (isdeleted())
+ return;
+
+ client2 = opendisplay();
+ XSelectInput(client2, w, SubstructureRedirectMask);
+ XSync(client2, True);
+
+ XCALL;
+ XSync(client2, False);
+
+ good.type = MapRequest;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = w;
+
+ /* Should go through this loop NELEM(T1)-1 times */
+ while (getevent(client2, &ev)) {
+
+ mrp = (XMapRequestEvent*)&ev;
+ btp = btwtobtp(bt, mrp->window);
+ if (btp == NULL) {
+ report("Event received for unknown window");
+ FAIL;
+ continue;
+ }
+ if (mrp->parent != w) {
+ report("Map request received on a window other than the parent");
+ FAIL;
+ } else
+ CHECK;
+
+ btp->uflags++;
+ good.window = btp->wid;
+
+ if (checkevent((XEvent *)&good, &ev)) {
+ report("Bad event on window '%s'", btp->name);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ for (i = 1; i < NELEM(T1); i++) {
+
+ if (bt[i].uflags == 0) {
+ report("No map request for window '%s'", bt[i].name);
+ FAIL;
+ } else if (bt[i].uflags > 1) {
+ report("Repeat map request for window '%s'", bt[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ (void) XGetWindowAttributes(display, bt[i].wid, &atts);
+ if (atts.map_state != IsUnmapped) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsUnmapped));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(4*(NELEM(T1)-1));
+>>ASSERTION Good A
+When the
+.M override-redirect
+attribute of a subwindow is
+.S True
+and the subwindow is not already mapped,
+then the window is mapped and a
+.S MapNotify
+event is generated.
+>>STRATEGY
+Create base window.
+Create unmapped subwindows on base window.
+Set override-redirect attribute to True on each subwindow.
+Select StructureNotify events on each subwindow.
+Create second client.
+Select SubstructureRedirect and SubstructureNotify for second client on base window.
+Call xname on base window.
+Verify that a MapNotify event is generated on parent for each subwindow.
+Verify that a MapNotify event is generated on each subwindow.
+Verify that the map_state of each subwindow is IsViewable.
+>>CODE
+Display *client2;
+Window base;
+XSetWindowAttributes setatts;
+XWindowAttributes atts;
+XMapEvent good;
+XMapEvent *mp;
+struct buildtree *bt;
+struct buildtree *btp;
+XEvent ev;
+int i;
+
+ base = defwin(display);
+ bt = buildtree(display, base, T1, NELEM(T1));
+
+ w = base;
+
+ for (i = 1; i < NELEM(T1); i++) {
+ setatts.override_redirect = True;
+ XChangeWindowAttributes(display, bt[i].wid, CWOverrideRedirect, &setatts);
+ /*
+ * Would normally select ALLEVENTS to test for spurious events.
+ * This cannot be done here, since we would possibly get valid
+ * EnterNotify's etc.
+ */
+ XSelectInput(display, bt[i].wid, StructureNotifyMask);
+ }
+
+ if (isdeleted())
+ return;
+
+ client2 = opendisplay();
+ XSelectInput(client2, base,SubstructureRedirectMask|SubstructureNotifyMask);
+ XSync(client2, True);
+
+ XCALL;
+ XSync(client2, False);
+
+ /*
+ * Check for Map event on parent.
+ */
+ good.type = MapNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.event = base;
+ good.window = w;
+ good.override_redirect = True;
+
+ /* Should go through this loop NELEM(T1)-1 times */
+ while (getevent(client2, &ev)) {
+
+ mp = (XMapEvent*)&ev;
+ btp = btwtobtp(bt, mp->window);
+ if (btp == NULL) {
+ report("Event received for unknown window");
+ FAIL;
+ continue;
+ }
+ if (mp->event != base) {
+ report("Map request received on a window other than the parent");
+ FAIL;
+ } else
+ CHECK;
+
+ if (btp->uflags & PARENT_NOTIFY) {
+ report("Repeat event received on parent for window '%s'", btp->name);
+ FAIL;
+ } else {
+ btp->uflags |= PARENT_NOTIFY;
+ CHECK;
+ }
+
+ good.window = btp->wid;
+
+ if (checkevent((XEvent *)&good, &ev)) {
+ report("Bad event on window '%s'", btp->name);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /*
+ * Now check for map notify on the window itself.
+ */
+ good.display = display;
+
+ /* Should go through this loop NELEM(T1)-1 times */
+ while (getevent(display, &ev)) {
+
+ mp = (XMapEvent*)&ev;
+ btp = btwtobtp(bt, mp->window);
+ if (btp == NULL) {
+ report("Event received for unknown window");
+ FAIL;
+ continue;
+ }
+
+ if (btp->uflags & WINDOW_NOTIFY) {
+ report("Repeat map notify event received on window '%s'", btp->name);
+ FAIL;
+ } else {
+ btp->uflags |= WINDOW_NOTIFY;
+ CHECK;
+ }
+
+ good.window = btp->wid;
+ good.event = btp->wid;
+
+ if (checkevent((XEvent *)&good, &ev)) {
+ report("Bad event on window '%s'", btp->name);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ for (i = 1; i < NELEM(T1); i++) {
+
+ if (bt[i].uflags & WINDOW_NOTIFY)
+ CHECK;
+ else {
+ report("No map notify received on window '%s'", bt[i].name);
+ FAIL;
+ }
+ if (bt[i].uflags & PARENT_NOTIFY)
+ CHECK;
+ else {
+ report("No map notify received on parent of window '%s'", bt[i].name);
+ FAIL;
+ }
+ (void) XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsViewable));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(8*(NELEM(T1)-1));
+>>ASSERTION Good A
+When no other client has selected
+.S SubstructureRedirectMask
+on the parent window and the window is not already mapped,
+then the window is mapped and a
+.S MapNotify
+event is generated.
+>>STRATEGY
+Create base window.
+Create unmapped subwindows on base window.
+Set override-redirect attribute to False on each subwindow.
+Select StructureNotify events on each subwindow.
+Create second client.
+Select SubstructureNotify for second client on base window.
+Call xname on base window.
+Verify that a MapNotify event is generated on parent for each subwindow.
+Verify that a MapNotify event is generated on each subwindow.
+Verify that the map_state of each subwindow is IsViewable.
+>>CODE
+Display *client2;
+Window base;
+XSetWindowAttributes setatts;
+XWindowAttributes atts;
+XMapEvent good;
+XMapEvent *mp;
+struct buildtree *bt;
+struct buildtree *btp;
+XEvent ev;
+int i;
+
+ base = defwin(display);
+ bt = buildtree(display, base, T1, NELEM(T1));
+
+ w = base;
+
+ for (i = 1; i < NELEM(T1); i++) {
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, bt[i].wid, CWOverrideRedirect, &setatts);
+ /*
+ * Would normally select ALLEVENTS to test for spurious events.
+ * This cannot be done here, since we would possibly get valid
+ * EnterNotify's etc.
+ */
+ XSelectInput(display, bt[i].wid, StructureNotifyMask);
+ }
+
+ if (isdeleted())
+ return;
+
+ client2 = opendisplay();
+ XSelectInput(client2, base, SubstructureNotifyMask);
+ XSync(client2, True);
+
+ XCALL;
+ XSync(client2, False);
+
+ /*
+ * Check for Map event on parent.
+ */
+ good.type = MapNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.event = base;
+ good.window = w;
+ good.override_redirect = False;
+
+ /* Should go through this loop NELEM(T1)-1 times */
+ while (getevent(client2, &ev)) {
+
+ mp = (XMapEvent*)&ev;
+ btp = btwtobtp(bt, mp->window);
+ if (btp == NULL) {
+ report("Event received for unknown window");
+ FAIL;
+ continue;
+ }
+ if (mp->event != base) {
+ report("Map request received on a window other than the parent");
+ FAIL;
+ } else
+ CHECK;
+
+ if (btp->uflags & PARENT_NOTIFY) {
+ report("Repeat event received on parent for window '%s'", btp->name);
+ FAIL;
+ } else {
+ btp->uflags |= PARENT_NOTIFY;
+ CHECK;
+ }
+
+ good.window = btp->wid;
+
+ if (checkevent((XEvent *)&good, &ev)) {
+ report("Bad event on window '%s'", btp->name);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /*
+ * Now check for map notify on the window itself.
+ */
+ good.display = display;
+
+ /* Should go through this loop NELEM(T1)-1 times */
+ while (getevent(display, &ev)) {
+
+ mp = (XMapEvent*)&ev;
+ btp = btwtobtp(bt, mp->window);
+ if (btp == NULL) {
+ report("Event received for unknown window");
+ FAIL;
+ continue;
+ }
+
+ if (btp->uflags & WINDOW_NOTIFY) {
+ report("Repeat map notify event received on window '%s'", btp->name);
+ FAIL;
+ } else {
+ btp->uflags |= WINDOW_NOTIFY;
+ CHECK;
+ }
+
+ good.window = btp->wid;
+ good.event = btp->wid;
+
+ if (checkevent((XEvent *)&good, &ev)) {
+ report("Bad event on window '%s'", btp->name);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ for (i = 1; i < NELEM(T1); i++) {
+
+ if (bt[i].uflags & WINDOW_NOTIFY)
+ CHECK;
+ else {
+ report("No map notify received on window '%s'", bt[i].name);
+ FAIL;
+ }
+ if (bt[i].uflags & PARENT_NOTIFY)
+ CHECK;
+ else {
+ report("No map notify received on parent of window '%s'", bt[i].name);
+ FAIL;
+ }
+ (void) XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsViewable));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(8*(NELEM(T1)-1));
+>>ASSERTION Good A
+When one of the subwindows becomes viewable after a call to xname
+and no earlier contents for it are remembered, then
+the subwindow is tiled with its background.
+>>STRATEGY
+>># Have already tested this with a plain background, but take the
+>># opportunity to test with a background tile.
+Create subwindows.
+Create tile.
+Set background of each subwindow to tile.
+Map subwindows.
+Verify that subwindows are tiled.
+Re-run with an inferior window.
+>>CODE
+Window base;
+Window win;
+Window win2;
+Pixmap tile;
+
+ base = defwin(display);
+
+ win = creunmapchild(display, base, (struct area *)0);
+
+ w = base;
+
+ tile = maketile(display, win);
+ XSetWindowBackgroundPixmap(display, win, tile);
+
+ XCALL;
+
+ if (checktile(display, win, (struct area *)0, 0, 0, tile))
+ CHECK;
+ else {
+ report("Window not tiled with its background correctly");
+ FAIL;
+ }
+
+ /*
+ * Create an unmapped window and a mapped inferior of that window.
+ * When we map the window the inferior becomes viewable and so it
+ * should be tiled.
+ */
+ base = defwin(display);
+ win = creunmapchild(display, base, (struct area *)0);
+ win2 = crechild(display, win, (struct area *)0);
+ w = base;
+ XSetWindowBackgroundPixmap(display, win2, tile);
+
+ XCALL;
+
+ if (checktile(display, win2, (struct area *)0, 0, 0, tile))
+ CHECK;
+ else {
+ report("Inferior window not tiled with its background correctly");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+>># This is inconsistant with other stuff? In create.
+When the background of the subwindow is undefined then the existing screen
+contents from the parent or an inferior of the parent are not altered,
+and zero or more
+.S Expose
+events are generated.
+>>STRATEGY
+Create window as parent.
+Draw pattern on parent.
+Create inferior window and draw pattern on that too.
+Create unmapped subwindows that overlap inferior.
+Set background pixmap to None on each subwindow.
+Map subwindows.
+Verify that screen contents have not been altered.
+
+Unmap subwindows.
+For each subwindow
+ Select for expose events.
+ Call setforexpose() to draw into window (for if backing store in use)
+Call xname to map subwindows.
+For each window
+ Verify that window was restored from backing store or received expose
+ events that cover the window with exposecheck().
+>>CODE
+Window base;
+Window ch1;
+struct buildtree *bt;
+struct area area;
+XImage *imp;
+int i;
+
+ base = defwin(display);
+ pattern(display, base);
+
+ w = base;
+
+ setarea(&area, 7, 7, 50, 50);
+ ch1 = crechild(display, base, &area);
+ pattern(display, ch1);
+
+ /* Save original contents */
+ imp = savimage(display, base);
+
+ bt = buildtree(display, base, T1, NELEM(T1));
+
+ for (i = 1; i < NELEM(T1); i++)
+ XSetWindowBackgroundPixmap(display, bt[i].wid, None);
+
+ XCALL;
+
+ if (compsavimage(display, base, imp))
+ CHECK;
+ else {
+ report("Screen contents altered by mapping window with undefined background");
+ FAIL;
+ }
+
+ /*
+ * Check expose events. Unmap the windows and draw into them with
+ * setforexpose(), (this will normally have no effect unless backing
+ * store is active). Map the window and check that either
+ * - there are zero expose events and backing store has preserved the
+ * contents.
+ * - there are enough expose events to cover the window.
+ */
+ XUnmapSubwindows(display, w);
+
+ for (i = 1; i < NELEM(T1); i++) {
+ XSelectInput(display, bt[i].wid, ExposureMask);
+ setforexpose(display, bt[i].wid);
+ /* because setforexpose() changes the background */
+ XSetWindowBackgroundPixmap(display, bt[i].wid, None);
+ /*
+ * Border width is set to zero, because otherwise the border potentialy
+ * confuses things.
+ */
+ XSetWindowBorderWidth(display, bt[i].wid, None);
+ }
+
+ XCALL;
+
+ for (i = 1; i < NELEM(T1); i++)
+ exposefill(display, bt[i].wid);
+ for (i = 1; i < NELEM(T1); i++) {
+ if (exposecheck(display, bt[i].wid))
+ CHECK;
+ else {
+ report("Neither Expose events or backing store processing");
+ report("could correctly restore the window contents.");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(1 + (NELEM(T1)-1));
+>>ASSERTION Good B 3
+When the background of the subwindow is undefined then the existing screen
+contents not from the parent or an inferior of the parent are undefined,
+and zero or more
+.S Expose
+events are generated.
+>>ASSERTION Good D 3
+If backing store is supported:
+When backing store has been maintained while a particular
+subwindow was unmapped, then no
+.S Expose
+events are generated for that subwindow.
+>>STRATEGY
+If backing store is supported
+ Create base window.
+ Create child of this window to unmap.
+ Set backing store hint of child to Always.
+ Write into child window.
+ Unmap child window.
+ Enable Expose events.
+ Map child window by calling xname on base window.
+ If child window contents are unaltered.
+ Backing store was maintained.
+ Verify that no Expose events were received.
+ else
+ Backing store was not maintained.
+ Test result is UNTESTED.
+else
+ Test result is UNSUPPORTED.
+>>CODE
+XSetWindowAttributes setatts;
+XEvent ev;
+Window base;
+Window ch;
+
+ if (DoesBackingStore(DefaultScreenOfDisplay(display)) != Always) {
+ unsupported("Backing store not supported while unmapped");
+ return;
+ }
+
+ base = defwin(display);
+ ch = crechild(display, base, (struct area *)0);
+
+ setatts.backing_store = Always;
+ XChangeWindowAttributes(display, ch, CWBackingStore, &setatts);
+
+ dset(display, ch, W_FG);
+ XUnmapWindow(display, ch);
+ XSelectInput(display, ch, ExposureMask);
+
+ w = base;
+ XCALL;
+
+ XSelectInput(display, ch, NoEventMask);
+
+ if (checkarea(display, ch, (struct area *)0, W_FG, W_FG, CHECK_ALL|CHECK_DIFFER)) {
+ /*
+ * Backing store apeared to be active during the unmap.
+ */
+ if (XCheckTypedWindowEvent(display, ch, Expose, &ev)) {
+ /* Received Exposes */
+ report("Expose received when backing store was active");
+ FAIL;
+ } else
+ CHECK;
+ } else {
+ /*
+ * There is nothing wrong here, but it is possibly of interest.
+ */
+ trace("NOTE: Server claims to support backing store but it was not active in the test");
+ UNTESTED;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good D 3
+If backing store is supported:
+When the server elects to now maintain backing store for a subwindow,
+then an
+.S Expose
+event for the whole window is generated.
+>>STRATEGY
+If backing store is supported.
+ Create small window.
+ Ask for backing store when mapped.
+ Create (and map) windows that would obscure the test window.
+ Enable Expose events.
+ Map window.
+ If no Expose
+ Untested - maybe got backing store always.
+ Verify Expose event is for whole window.
+else
+ Untested.
+>>CODE
+int n;
+Window base;
+Window ch;
+Window ch1;
+XEvent ev;
+struct area area;
+struct area charea;
+XExposeEvent *ep;
+XSetWindowAttributes setatts;
+
+ if (DoesBackingStore(DefaultScreenOfDisplay(display)) == NotUseful) {
+ unsupported("Backing store is not supported");
+ return;
+ }
+
+ base = defwin(display);
+
+ setarea(&area, 0, 0, 70, 70);
+ ch = creunmapchild(display, base, &area);
+ setatts.backing_store = WhenMapped;
+ XChangeWindowAttributes(display, ch, CWBackingStore, &setatts);
+
+ /* Create a child that will cover the test window */
+ setarea(&charea, 0, 0, 20, 20);
+ ch1 = crechild(display, base, &charea);
+
+ XSelectInput(display, ch, ExposureMask);
+ w = base;
+ XCALL;
+ XSelectInput(display, ch, NoEventMask);
+
+ n = XPending(display);
+ if (n == 0) {
+ trace("No Expose events on mapping window with backing-store WhenMapped");
+ UNTESTED;
+ } else
+ CHECK;
+
+ if (n == 1) {
+ (void) getevent(display, &ev);
+ if (ev.type != Expose) {
+ /* Only Expose events were enabled */
+ delete("Unexpected event received (%s)", eventname(ev.type));
+ } else {
+ ep = (XExposeEvent*)&ev;
+ if (ep->x == area.x && ep->y == area.y && ep->width == area.width && ep->height == area.height) {
+ /* Full window Expose received */
+ CHECK;
+ } else {
+ /*
+ * Since there was only one event and it does not cover
+ * the whole window then it is incorrect.
+ */
+ report("Expose event covered wrong area");
+ report("x=%d, y=%d, width=%d, height=%d", ep->x, ep->y, ep->width, ep->height);
+ FAIL;
+ }
+ }
+ } else {
+ trace("Did not appear to get backing store");
+ UNTESTED;
+ }
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the server elects to not maintain backing store for a
+subwindow, then
+.S Expose
+events are generated only for visible regions.
+>># NOTE: 'are' reported is from ANSI. Spec says 'may be' reported.
+>># stick with 'are'. kieron
+>>STRATEGY
+Create small window.
+Ask for no backing store.
+Create (and map) windows that would obscure the test window.
+Map window.
+If Expose event is for whole window.
+ Untested - maybe got backing store.
+else
+ Verify that only visible regions got Expose events.
+>>CODE
+int n;
+Window base;
+Window ch;
+Window ch1;
+struct area area;
+struct area charea;
+XSetWindowAttributes setatts;
+
+ base = defwin(display);
+
+ setarea(&area, 0, 0, 70, 70);
+ ch = creunmapchild(display, base, &area);
+ setatts.backing_store = NotUseful;
+ XChangeWindowAttributes(display, ch, CWBackingStore, &setatts);
+
+ /* Create a child that will cover the test window */
+ setarea(&charea, 0, 0, 20, 20);
+ ch1 = crechild(display, base, &charea);
+
+ XSelectInput(display, ch, ExposureMask);
+ w = base;
+ XCALL;
+ XSelectInput(display, ch, NoEventMask);
+
+ n = XPending(display);
+ if (n == 0) {
+ trace("No Expose events on mapping window with backing-store NotUseful");
+ UNTESTED;
+ } else
+ CHECK;
+
+ if (n == 1) {
+ trace("Appeared to get backing store when asked for NotUseful");
+ UNTESTED;
+ } else {
+ /*
+ * Remove the child window. Clear the test window, and then
+ * redraw it according to the Expose events. This should leave
+ * the part that was not visible after the map in the background
+ * pixel.
+ */
+ XUnmapWindow(display, ch1);
+ dclear(display, ch);
+ exposefill(display, ch);
+ if (checkarea(display, ch, &charea, W_BG, W_FG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Some part of non-visible regions received Expose events");
+ report(" or not all visible regions exposed");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/mpwdw/a4.dat b/xc/test/xsuite/xtest/tset/CH03/mpwdw/a4.dat
new file mode 100644
index 000000000..237f3e0f5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/mpwdw/a4.dat
@@ -0,0 +1,159 @@
+! $XConsortium$
+100 90 32
+3f2,0
+46,1
+1e,0
+46,1
+1e,0
+14,1
+14,2
+1e,1
+1e,0
+14,1
+a,2
+5,3
+5,2
+1e,1
+1e,0
+14,1
+a,2
+5,3
+5,2
+1e,1
+1e,0
+14,1
+a,2
+5,3
+5,2
+1e,1
+1e,0
+14,1
+14,2
+1e,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+3fc,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/mpwdw/mpwdw.m b/xc/test/xsuite/xtest/tset/CH03/mpwdw/mpwdw.m
new file mode 100644
index 000000000..8cf990904
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/mpwdw/mpwdw.m
@@ -0,0 +1,835 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XMapWindow CH03
+void
+
+Display *display = Dsp;
+Window w;
+>>EXTERN
+
+static char *T1[] = {
+ ".",
+ "A . (10, 10) 70x70 unmap",
+ "A1 A (20, 2) 20x5",
+ "A1a A1 (10,1) 5x3",
+ "B A (10, 10) 50x50 unmap",
+ "C B (10, 10) 30x30 unmap",
+};
+
+>>ASSERTION Good A
+A call to xname maps the specified window.
+>>STRATEGY
+Create unmapped window.
+Set window background to W_FG.
+Map window.
+Verify map state is IsViewable.
+Verify that window shows on screen.
+>>CODE
+Window base;
+XWindowAttributes atts;
+struct area area;
+
+ base = defwin(display);
+
+ setarea(&area, 10, 10, 30, 30);
+ w = creunmapchild(display, base, &area);
+ XSetWindowBackground(display, w, W_FG);
+
+ XCALL;
+
+ (void) XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsViewable));
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkarea(display, base, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Mapped window was displayed incorrectly or was not seen on screen");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION def
+When a call to xname is made on a window that has no unmapped
+ancestors, then the window becomes viewable.
+>>ASSERTION Good A
+When a call to xname is made on a window that has an unmapped ancestor,
+then the window does not become viewable.
+>>STRATEGY
+Create stack of unmapped windows.
+Map one of these window that has an unmapped ancestor.
+Verify map state is IsUnviewable.
+Verify that nothing becomes visible.
+>>CODE
+Window base;
+struct buildtree *btp;
+XWindowAttributes atts;
+
+ base = defwin(display);
+ btp = buildtree(display, base, T1, NELEM(T1));
+
+ /* We shall map window B which has A as an unmapped ancestor */
+ w = btntow(btp, "B");
+
+ XCALL;
+
+ (void) XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsUnviewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsUnviewable));
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkarea(display, base, (struct area *)0, W_BG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Somthing became visible after mapping window with unmapped ancestors");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When a call to xname is made on a window that is the only unmapped ancestor
+of an inferior window that has previously been mapped,
+then that inferior window becomes viewable.
+>>STRATEGY
+Create stack of windows with mapped windows as inferiors of an unmapped window.
+Check that map-state of inferiors is IsUnviewable.
+Map the ancestor window.
+Verify that map-state of inferiors is IsViewable.
+Verify that windows become visible on the screen.
+>>CODE
+Window base;
+Window ch1;
+Window ch2;
+struct buildtree *btp;
+XWindowAttributes atts;
+
+ base = defwin(display);
+ btp = buildtree(display, base, T1, NELEM(T1));
+
+ ch1 = btntow(btp, "A1");
+ ch2 = btntow(btp, "A1a");
+
+ XGetWindowAttributes(display, ch1, &atts);
+ if (atts.map_state != IsUnviewable) {
+ report("map state for A1 was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsUnviewable));
+ FAIL;
+ } else
+ CHECK;
+
+ XGetWindowAttributes(display, ch2, &atts);
+ if (atts.map_state != IsUnviewable) {
+ report("map state for A1a was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsUnviewable));
+ FAIL;
+ } else
+ CHECK;
+
+ w = btntow(btp, "A");
+
+ XCALL;
+
+ XGetWindowAttributes(display, ch1, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state for A1 was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsViewable));
+ FAIL;
+ } else
+ CHECK;
+
+ XGetWindowAttributes(display, ch2, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state for A1a was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsViewable));
+ FAIL;
+ } else
+ CHECK;
+
+ PIXCHECK(display, base);
+
+ CHECKPASS(5);
+>>ASSERTION Good A
+When the window is already mapped,
+then a call to xname has no effect.
+>>STRATEGY
+Create window.
+Map window.
+Enable events.
+Attempt to map window again.
+Verify that no difference occurred on screen.
+Verify that map-state is still IsViewable.
+Verify that no events are generated.
+>>CODE
+Window base;
+struct area area;
+XWindowAttributes atts;
+XImage *imp;
+
+ base = defwin(display);
+ setarea(&area, 10, 10, 40, 40);
+ w = creunmapchild(display, base, &area);
+ XSetWindowBackground(display, w, W_FG);
+
+ XCALL;
+
+ imp = savimage(display, w);
+
+ XSelectInput(display, w, ALLEVENTS);
+
+ XCALL;
+
+ XSelectInput(display, w, NoEventMask);
+
+ if (compsavimage(display, w, imp))
+ CHECK;
+ else {
+ report("Difference occurred on screen after re-mapping window");
+ FAIL;
+ }
+
+ (void) XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsViewable));
+ FAIL;
+ } else
+ CHECK;
+
+ if (XPending(display) != 0) {
+ report("Re-mapping window produced event");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the
+.M override_redirect
+attribute of the window is
+.S False
+and some other client has selected
+.S SubstructureRedirectMask
+on the parent window, then a
+.S MapRequest
+event is generated, and the call to xname does not map the window.
+>>STRATEGY
+Create base window.
+Create unmapped window on base window.
+Set override-redirect attribute to False.
+Create second client.
+Select SubstructureRedirect for second client on base window.
+Map window.
+Verify that the MapRequest event is generated on second client.
+Verify that map-state is still IsUnmapped.
+>>CODE
+Display *client2;
+Window base;
+XSetWindowAttributes setatts;
+XWindowAttributes atts;
+XMapRequestEvent good;
+XEvent ev;
+struct area area;
+int n;
+
+ base = defwin(display);
+ setarea(&area, 20, 20, 40, 40);
+ w = creunmapchild(display, base, &area);
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+ if (isdeleted())
+ return;
+
+ client2 = opendisplay();
+ XSelectInput(client2, base, SubstructureRedirectMask);
+ XSync(client2, True);
+
+ XCALL;
+ XSync(client2, False);
+
+ good.type = MapRequest;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = base;
+ good.window = w;
+
+ n = getevent(client2, &ev);
+ if (n != 1) {
+ report("Expecting one event on second client, received %d", n);
+ FAIL;
+ } else if (checkevent((XEvent *)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ (void) XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsUnmapped) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsUnmapped));
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When the override-redirect attribute of the window is
+.S True ,
+then on a call to xname the window is mapped and a
+.S MapNotify
+event is generated.
+>>STRATEGY
+Create base window.
+Create unmapped window on base window.
+Set override-redirect attribute to True.
+Select StructureNotify events on window.
+Create second client.
+Select SubstructureRedirect and SubstructureNotify for second client on base window.
+Map window.
+Verify that a MapNotify event is generated on parent.
+Verify that a MapNotify event is generated on window.
+Verify that the map_state of the window is IsViewable.
+>>CODE
+Display *client2;
+Window base;
+XSetWindowAttributes setatts;
+XWindowAttributes atts;
+XMapEvent good;
+XEvent ev;
+struct area area;
+int n;
+
+ base = defwin(display);
+ setarea(&area, 20, 20, 40, 40);
+ w = creunmapchild(display, base, &area);
+ setatts.override_redirect = True;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+ /*
+ * Would normally select ALLEVENTS to test for spurious events.
+ * This cannot be done here, since we would possibly get valid
+ * EnterNotify's etc.
+ */
+ XSelectInput(display, w, StructureNotifyMask);
+ if (isdeleted())
+ return;
+
+ client2 = opendisplay();
+ XSelectInput(client2, base,SubstructureRedirectMask|SubstructureNotifyMask);
+ XSync(client2, True);
+
+ XCALL;
+ XSync(client2, False);
+
+ /*
+ * Check for Map event on parent.
+ */
+ good.type = MapNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.event = base;
+ good.window = w;
+ good.override_redirect = True;
+
+ n = getevent(client2, &ev);
+ if (n != 1) {
+ report("Expecting one event on second client, received %d", n);
+ FAIL;
+ } else if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ /*
+ * Now check for map notify on the window itself.
+ */
+ good.display = display;
+ good.event = w;
+
+ n = getevent(display, &ev);
+ if (n != 1) {
+ report("Expecting one Map notify event, received %d events", n);
+ FAIL;
+ } else if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ (void) XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsViewable));
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+When no other client has selected
+.S SubstructureRedirectMask
+on the parent window, then on a call to xname the window is
+mapped and a
+.S MapNotify
+event is generated.
+>>STRATEGY
+Create base window.
+Create unmapped window on base window.
+Set override-redirect attribute to False.
+Select StructureNotify events on window.
+Create second client.
+Select SubstructureNotify for second client on base window.
+Map window.
+Verify that a MapNotify event is generated on parent.
+Verify that a MapNotify event is generated on window.
+Verify that the map_state of the window is IsViewable.
+>>CODE
+Display *client2;
+Window base;
+XSetWindowAttributes setatts;
+XWindowAttributes atts;
+XMapEvent good;
+XEvent ev;
+struct area area;
+int n;
+
+ base = defwin(display);
+ setarea(&area, 20, 20, 40, 40);
+ w = creunmapchild(display, base, &area);
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+ /*
+ * Would normally select ALLEVENTS to test for spurious events.
+ * This cannot be done here, since we would possibly get valid
+ * EnterNotify's etc.
+ */
+ XSelectInput(display, w, StructureNotifyMask);
+ if (isdeleted())
+ return;
+
+ client2 = opendisplay();
+ XSelectInput(client2, base, SubstructureNotifyMask);
+ XSync(client2, True);
+
+ XCALL;
+ XSync(client2, False);
+
+ /*
+ * Check for Map event on parent.
+ */
+ good.type = MapNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.event = base;
+ good.window = w;
+ good.override_redirect = False;
+
+ n = getevent(client2, &ev);
+ if (n != 1) {
+ report("Expecting one event on second client, received %d", n);
+ FAIL;
+ } else if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ /*
+ * Now check for map notify on the window itself.
+ */
+ good.display = display;
+ good.event = w;
+
+ n = getevent(display, &ev);
+ if (n != 1) {
+ report("Expecting one Map notify event, received %d events", n);
+ FAIL;
+ } else if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ (void) XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsViewable) {
+ report("map state after map was %s, expecting %s",
+ mapstatename(atts.map_state), mapstatename(IsViewable));
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+When the window or one of its inferiors becomes viewable after a call to xname
+and no earlier contents for it are remembered, then
+the window is tiled with its background.
+>>STRATEGY
+>># Have already tested this with a plain background, but take the
+>># opportunity to test with a background tile.
+Create window.
+Set background to tile.
+Map window.
+Verify that window is tiled.
+Re-run with an inferior window.
+>>CODE
+Window base;
+Window win;
+Pixmap tile;
+
+ base = defwin(display);
+
+ w = creunmapchild(display, base, (struct area *)0);
+
+ tile = maketile(display, w);
+ XSetWindowBackgroundPixmap(display, w, tile);
+
+ XCALL;
+
+ if (checktile(display, w, (struct area *)0, 0, 0, tile))
+ CHECK;
+ else {
+ report("Window not tiled with its background correctly");
+ FAIL;
+ }
+
+ /*
+ * Create an unmapped window and a mapped inferior of that window.
+ * When we map the window the inferior becomes viewable and so it
+ * should be tiled.
+ */
+ base = defwin(display);
+ w = creunmapchild(display, base, (struct area *)0);
+ win = crechild(display, w, (struct area *)0);
+ XSetWindowBackgroundPixmap(display, win, tile);
+
+ XCALL;
+
+ if (checktile(display, win, (struct area *)0, 0, 0, tile))
+ CHECK;
+ else {
+ report("Inferior window not tiled with its background correctly");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+>># This is inconsistant with other stuff? In create.
+>># (I think that if the depth is different from the parent, then the
+>># screen contents are undefined. From ANSI. ..sr)
+When the background of the window is undefined then the existing screen
+contents from the parent or an inferior of the parent are not altered,
+and zero or more
+.S Expose
+events are generated.
+>>STRATEGY
+Create window as parent.
+Draw pattern on parent.
+Create inferior window and draw pattern on that too.
+Create unmapped inferior that overlaps other inferior.
+Set background pixmap to None to undefine background.
+Map window.
+Verify that screen contents have not been altered.
+
+Unmap window.
+Select for expose events.
+Call setforexpose() to draw into window (only effective if backing store in use)
+Call xname to map window.
+Verify that window was restored from backing store or received expose
+events to cover the window with exposecheck().
+>>CODE
+Window base;
+Window ch1;
+XImage *imp;
+struct area area;
+
+ base = defwin(display);
+ pattern(display, base);
+
+ setarea(&area, 7, 7, 50, 50);
+ ch1 = crechild(display, base, &area);
+ pattern(display, ch1);
+
+ /* Save original contents */
+ imp = savimage(display, base);
+
+ setarea(&area, 5, 5, 70, 40);
+ w = creunmapchild(display, base, &area);
+ XSetWindowBackgroundPixmap(display, w, None);
+
+ XCALL;
+
+ if (compsavimage(display, base, imp))
+ CHECK;
+ else {
+ report("Screen contents altered by mapping window with undefined background");
+ FAIL;
+ }
+
+ /*
+ * Check expose events. Unmap the window and draw into it with
+ * setforexpose(), (this will normally have no effect unless backing
+ * store is active). Map the window and check that either
+ * - there are zero expose events and backing store has preserved the
+ * contents.
+ * - there are enough expose events to cover the window.
+ */
+ XUnmapWindow(display, w);
+
+ XSelectInput(display, w, ExposureMask);
+ setforexpose(display, w);
+ /* because setforexpose() changes the background */
+ XSetWindowBackgroundPixmap(display, w, None);
+
+ XCALL;
+
+ if (exposecheck(display, w))
+ CHECK;
+ else {
+ report("Neither Expose events or backing store processing");
+ report("could correctly restore the window contents.");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When the background of the window is undefined then the existing screen
+contents not from the parent or an inferior of the parent are undefined,
+and zero or more
+.S Expose
+events are generated.
+>>ASSERTION Good D 3
+If backing store is supported:
+When backing store has been maintained while a particular
+window was unmapped, then no
+.S Expose
+events are generated for that window.
+>>STRATEGY
+If backing store is supported
+ Create window.
+ Set backing store hint to Always.
+ Write into window.
+ Unmap window.
+ Enable Expose events.
+ Map window.
+ If window contents are unaltered.
+ Backing store was maintained.
+ Verify that no Expose events were received.
+ else
+ Backing store was not maintained.
+ Test result is UNTESTED.
+else
+ Test result is UNSUPPORTED.
+>>CODE
+XSetWindowAttributes setatts;
+XEvent ev;
+
+ if (DoesBackingStore(DefaultScreenOfDisplay(display)) != Always) {
+ unsupported("Backing store not supported while unmapped");
+ return;
+ }
+
+ w = defwin(display);
+ setatts.backing_store = Always;
+ XChangeWindowAttributes(display, w, CWBackingStore, &setatts);
+
+ dset(display, w, W_FG);
+ XUnmapWindow(display, w);
+ XSelectInput(display, w, ExposureMask);
+
+ XCALL;
+
+ XSelectInput(display, w, NoEventMask);
+
+ if (checkarea(display, w, (struct area *)0, W_FG, W_FG, CHECK_ALL|CHECK_DIFFER)) {
+ /*
+ * Backing store apeared to be active during the unmap.
+ */
+ if (XCheckTypedWindowEvent(display, w, Expose, &ev)) {
+ /* Received Exposes */
+ report("Expose received when backing store was active");
+ FAIL;
+ } else
+ CHECK;
+ } else {
+ /*
+ * There is nothing wrong here, but it is possibly of interest.
+ */
+ trace("NOTE: Server claims to support backing store but it was not active in the test");
+ UNTESTED;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good D 3
+If backing store is supported:
+When the server elects to now maintain backing store for a window,
+then an
+.S Expose
+event for the whole window is generated.
+>>STRATEGY
+If backing store is supported.
+ Create small window.
+ Ask for backing store when mapped.
+ Create (and map) windows that would obscure the test window.
+ Enable Expose events.
+ Map window.
+ If no Expose
+ Untested - maybe got backing store always.
+ Verify Expose event is for whole window.
+else
+ Untested.
+>>CODE
+int n;
+Window base;
+Window ch1;
+XEvent ev;
+struct area area;
+struct area charea;
+XExposeEvent *ep;
+XSetWindowAttributes setatts;
+
+ if (DoesBackingStore(DefaultScreenOfDisplay(display)) == NotUseful) {
+ unsupported("Backing store is not supported");
+ return;
+ }
+
+ base = defwin(display);
+
+ setarea(&area, 0, 0, 70, 70);
+ w = creunmapchild(display, base, &area);
+ setatts.backing_store = WhenMapped;
+ XChangeWindowAttributes(display, w, CWBackingStore, &setatts);
+
+ /* Create a child that will cover the test window */
+ setarea(&charea, 0, 0, 20, 20);
+ ch1 = crechild(display, base, &charea);
+
+ XSelectInput(display, w, ExposureMask);
+ XCALL;
+ XSelectInput(display, w, NoEventMask);
+
+ n = XPending(display);
+ if (n == 0) {
+ trace("No Expose events on mapping window with backing-store WhenMapped");
+ UNTESTED;
+ } else
+ CHECK;
+
+ if (n == 1) {
+ (void) getevent(display, &ev);
+ if (ev.type != Expose) {
+ /* Only Expose events were enabled */
+ delete("Unexpected event received (%s)", eventname(ev.type));
+ } else {
+ ep = (XExposeEvent*)&ev;
+ if (ep->x == area.x && ep->y == area.y && ep->width == area.width && ep->height == area.height) {
+ /* Full window Expose received */
+ CHECK;
+ } else {
+ /*
+ * Since there was only one event and it does not cover
+ * the whole window then it is incorrect.
+ */
+ report("Expose event covered wrong area");
+ report("x=%d, y=%d, width=%d, height=%d", ep->x, ep->y, ep->width, ep->height);
+ FAIL;
+ }
+ }
+ } else {
+ trace("Did not appear to get backing store");
+ UNTESTED;
+ }
+ CHECKPASS(2);
+
+>>ASSERTION Good B 3
+When the server elects to not maintain backing store for a
+window, then
+.S Expose
+events are generated only for visible regions.
+>># NOTE: 'are' reported is from ANSI. Spec says 'may be' reported.
+>># stick with 'are'. kieron
+>>STRATEGY
+Create small window.
+Ask for no backing store.
+Create (and map) windows that would obscure the test window.
+Map window.
+If Expose event is for whole window.
+ Untested - maybe got backing store.
+else
+ Verify that only visible regions got Expose events.
+>>CODE
+int n;
+Window base;
+Window ch1;
+struct area area;
+struct area charea;
+XSetWindowAttributes setatts;
+
+ base = defwin(display);
+
+ setarea(&area, 0, 0, 70, 70);
+ w = creunmapchild(display, base, &area);
+ setatts.backing_store = NotUseful;
+ XChangeWindowAttributes(display, w, CWBackingStore, &setatts);
+
+ /* Create a child that will cover the test window */
+ setarea(&charea, 0, 0, 20, 20);
+ ch1 = crechild(display, base, &charea);
+
+ XSelectInput(display, w, ExposureMask);
+ XCALL;
+ XSelectInput(display, w, NoEventMask);
+
+ n = XPending(display);
+ if (n == 0) {
+ trace("No Expose events on mapping window with backing-store NotUseful");
+ UNTESTED;
+ } else
+ CHECK;
+
+ if (n == 1) {
+ trace("Appeared to get backing store when asked for NotUseful");
+ UNTESTED;
+ } else {
+ /*
+ * Remove the child window. Clear the test window, and then
+ * redraw it according to the Expose events. This should leave
+ * the part that was not visible after the map in the background
+ * pixel.
+ */
+ XUnmapWindow(display, ch1);
+ dclear(display, w);
+ exposefill(display, w);
+ if (checkarea(display, w, &charea, W_BG, W_FG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Some part of non-visible regions received Expose events");
+ report(" or not all visible regions exposed");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/mvrszwdw/a2.dat b/xc/test/xsuite/xtest/tset/CH03/mvrszwdw/a2.dat
new file mode 100644
index 000000000..3137a8bb6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/mvrszwdw/a2.dat
@@ -0,0 +1,4833 @@
+! $XConsortium$
+100 90 32
+82,0
+10,1
+54,0
+10,1
+54,0
+10,1
+54,0
+10,1
+361,0
+48,1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+2
+6,1
+2
+9,1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+6,1
+2
+9,1
+b,2
+9,1
+21,2
+1
+1c,0
+1
+1c,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+1c,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+1c,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+e,1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+e,1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+d,1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+9,1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+d,1
+2b,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+48,1
+589,0
+100 90 32
+82,0
+10,1
+54,0
+10,1
+54,0
+10,1
+54,0
+10,1
+361,0
+48,1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+10,2
+6,1
+2
+9,1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+6,1
+2
+9,1
+b,2
+9,1
+12,2
+1
+1c,0
+1
+2b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+2b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+2b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+e,1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+e,1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+d,1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+9,1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+d,1
+1c,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+48,1
+589,0
+100 90 32
+82,0
+10,1
+54,0
+10,1
+54,0
+10,1
+54,0
+10,1
+361,0
+48,1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+1f,2
+6,1
+2
+9,1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+6,1
+2
+9,1
+b,2
+9,1
+3,2
+1
+1c,0
+1
+3a,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+3a,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+3a,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+e,1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+e,1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+d,1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+9,1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+d,1
+d,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+48,1
+589,0
+100 90 32
+82,0
+10,1
+54,0
+10,1
+54,0
+10,1
+54,0
+10,1
+361,0
+48,1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+2
+6,1
+2
+9,1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+6,1
+2
+9,1
+b,2
+9,1
+21,2
+1
+1c,0
+1
+1c,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+1c,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+1c,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+e,1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+e,1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+d,1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+9,1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+d,1
+2b,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+48,1
+589,0
+100 90 32
+82,0
+10,1
+54,0
+10,1
+54,0
+10,1
+54,0
+10,1
+361,0
+48,1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+10,2
+6,1
+2
+9,1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+6,1
+2
+9,1
+b,2
+9,1
+12,2
+1
+1c,0
+1
+2b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+2b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+2b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+e,1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+e,1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+d,1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+9,1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+d,1
+1c,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+48,1
+589,0
+100 90 32
+82,0
+10,1
+54,0
+10,1
+54,0
+10,1
+54,0
+10,1
+361,0
+48,1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+1f,2
+6,1
+2
+9,1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+6,1
+2
+9,1
+b,2
+9,1
+3,2
+1
+1c,0
+1
+3a,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+3a,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+3a,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+e,1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+e,1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+d,1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+9,1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+d,1
+d,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+48,1
+589,0
+100 90 32
+82,0
+10,1
+54,0
+10,1
+54,0
+10,1
+54,0
+10,1
+361,0
+48,1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+2
+6,1
+2
+9,1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+1
+4,3
+1
+2
+1
+7,4
+1
+35,2
+1
+1c,0
+1
+2
+6,1
+2
+9,1
+b,2
+9,1
+21,2
+1
+1c,0
+1
+1c,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+1c,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+1c,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+e,1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+3,2
+e,1
+b,2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+d,1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+1
+7,6
+1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2
+9,1
+21,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+1
+b,7
+1
+2b,2
+1
+1c,0
+1
+e,2
+d,1
+2b,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+48,1
+589,0
+100 90 32
+82,0
+10,1
+54,0
+10,1
+54,0
+10,1
+54,0
+10,1
+361,0
+48,1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+10,2
+6,1
+2
+9,1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+1
+4,3
+1
+2
+1
+7,4
+1
+26,2
+1
+1c,0
+1
+10,2
+6,1
+2
+9,1
+b,2
+9,1
+12,2
+1
+1c,0
+1
+2b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+2b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+2b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+e,1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+12,2
+e,1
+b,2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+d,1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+1
+7,6
+1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+2
+9,1
+12,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+1
+b,7
+1
+1c,2
+1
+1c,0
+1
+1d,2
+d,1
+1c,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+48,1
+589,0
+100 90 32
+82,0
+10,1
+54,0
+10,1
+54,0
+10,1
+54,0
+10,1
+361,0
+48,1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+1f,2
+6,1
+2
+9,1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+1
+4,3
+1
+2
+1
+7,4
+1
+17,2
+1
+1c,0
+1
+1f,2
+6,1
+2
+9,1
+b,2
+9,1
+3,2
+1
+1c,0
+1
+3a,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+3a,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+3a,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+e,1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+1
+c,5
+1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+21,2
+e,1
+b,2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+d,1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+1
+7,6
+1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+2
+9,1
+3,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+1
+b,7
+1
+d,2
+1
+1c,0
+1
+2c,2
+d,1
+d,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+48,1
+589,0
+100 90 32
+82,0
+10,1
+54,0
+10,1
+54,0
+10,1
+54,0
+10,1
+361,0
+48,1
+1c,0
+2,1
+2
+1
+7,4
+1
+3b,2
+1
+1c,0
+2,1
+2
+1
+7,4
+1
+3b,2
+1
+1c,0
+2,1
+2
+9,1
+b,2
+9,1
+27,2
+1
+1c,0
+1
+16,2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+16,2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+16,2
+1
+7,6
+1
+27,2
+1
+1c,0
+c,1
+b,2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+a,5
+1
+b,2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+a,5
+1
+b,2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+a,5
+1
+b,2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+a,5
+1
+b,2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+a,5
+1
+b,2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+a,5
+1
+b,2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+a,5
+1
+b,2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+a,5
+1
+b,2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+a,5
+1
+b,2
+1
+7,6
+1
+27,2
+1
+1c,0
+c,1
+b,2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+8,2
+d,1
+2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+8,2
+1
+b,7
+1
+2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+8,2
+1
+b,7
+1
+2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+8,2
+1
+b,7
+1
+2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+8,2
+1
+b,7
+1
+2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+8,2
+1
+b,7
+1
+2
+1
+7,6
+1
+27,2
+1
+1c,0
+1
+8,2
+1
+b,7
+1
+2
+9,1
+27,2
+1
+1c,0
+1
+8,2
+1
+b,7
+1
+31,2
+1
+1c,0
+1
+8,2
+1
+b,7
+1
+31,2
+1
+1c,0
+1
+8,2
+1
+b,7
+1
+31,2
+1
+1c,0
+1
+8,2
+1
+b,7
+1
+31,2
+1
+1c,0
+1
+8,2
+1
+b,7
+1
+31,2
+1
+1c,0
+1
+8,2
+1
+b,7
+1
+31,2
+1
+1c,0
+1
+8,2
+d,1
+31,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+1
+46,2
+1
+1c,0
+48,1
+589,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/mvrszwdw/mvrszwdw.m b/xc/test/xsuite/xtest/tset/CH03/mvrszwdw/mvrszwdw.m
new file mode 100644
index 000000000..de9fc98f4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/mvrszwdw/mvrszwdw.m
@@ -0,0 +1,1175 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XMoveResizeWindow CH03
+void
+
+Display *display = Dsp;
+Window w;
+int x = NEW_X;
+int y = NEW_Y;
+unsigned int width = NEW_WIDTH;
+unsigned int height= NEW_HEIGHT;
+>>EXTERN
+/*
+ * Convenience routine that sets the 'w' argument to be simple window
+ * with a background of W_FG at position and size given by OW_*
+ * The border width is 0.
+ */
+#define OW_X 6
+#define OW_Y 8
+#define OW_WIDTH 23
+#define OW_HEIGHT 9
+
+/* Values to resize onewin to (odd and even) */
+#define NEW_X OW_X+5
+#define NEW_Y OW_Y+5
+#define NEW_WIDTH 70
+#define NEW_HEIGHT 61
+
+static Window
+onewin()
+{
+Window base;
+struct area area;
+
+ base = defwin(display);
+ setarea(&area, OW_X, OW_Y, OW_WIDTH, OW_HEIGHT);
+
+ w = crechild(display, base, &area);
+ XSetWindowBackground(display, w, W_FG);
+ XClearWindow(display, w);
+
+ return(base);
+}
+
+>>ASSERTION Good A
+A call to xname
+moves the window so that the
+coordinates of the upper-left outer corner of the window
+are
+.M x ,
+.M y
+relative to the origin of the parent window,
+and changes the inside size of the window to
+.A width
+and
+.A height .
+>>STRATEGY
+Create window.
+Move and resize with xname.
+Verify correct size and position with checkarea().
+>>CODE
+Window base;
+struct area area;
+
+ base = onewin();
+
+ XCALL;
+
+ setarea(&area, x, y, width, height);
+ if (checkarea(display, base, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Window not sized/positioned correctly");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When a call to xname resizes the window, then
+the subwindows of the window are repositioned according to their win-gravity
+attribute and a
+.S GravityNotify
+event is generated for each repositioned subwindow after the
+.S ConfigureNotify
+event.
+>>STRATEGY
+For each win-gravity attribute (apart from UnmapGravity)
+ Create window with subwindows.
+ Enable SubstructureNotify|StructureNotify events on all windows.
+ Set win-gravity on window.
+ Call xname to move and resize window.
+ Verify window positions by pixel check.
+ Verify ConfigureNotify on resized window.
+ Verify ConfigureNotify on parent of resized window.
+ If NorthWestGravity
+ Verify that no gravity events are received.
+ else
+ Verify GravityNotify events received on each repositioned subwindow.
+ Verify gravity events are received on the parent of each subwindow.
+ Verify that configure events arrive before gravity events.
+>>EXTERN
+
+extern struct valname S_wingravity[];
+extern int NS_wingravity;
+
+/*
+ * Window tree.
+ */
+char *Tree[] = {
+ ". borders",
+ "spare . (30, 1) 14x2",
+ "top . (5, 5) 40x40",
+ "sub1 top (1,3) 4x6",
+ "sub2 top (8,3) 7x6",
+ "sub3 top (3,14) 12x9",
+ "sub4 top (28,10) 7x20",
+ "sub5 top (14,25) 11x12",
+
+};
+#define NTree (NELEM(Tree))
+#define NTreeInf (NELEM(Tree)-1)
+
+#define BORDERW 1
+
+>>CODE
+Window base;
+struct buildtree *bt;
+struct buildtree *topbtp;
+struct valname *wgrav;
+XSetWindowAttributes setatts;
+int i;
+
+ for (wgrav = S_wingravity; wgrav < S_wingravity+NS_wingravity; wgrav++) {
+
+ if (wgrav->val == UnmapGravity)
+ continue;
+
+ trace("-- Testing win-gravity %s", wgrav->name);
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tree, NTree);
+
+ topbtp = btntobtp(bt, "top");
+
+ /* Select for all structure events on all windows */
+ for (i = 0; i < NTree; i++) {
+ XSelectInput(display, bt[i].wid,
+ SubstructureNotifyMask|StructureNotifyMask);
+ }
+
+ /*
+ * Set the win_gravity on windows below 'top'. Also set the
+ * borderwidths to make things more interesting, esp on mono
+ * displays.
+ */
+ setatts.win_gravity = wgrav->val;
+ for (i = topbtp-bt+1; i < NTree; i++)
+ XChangeWindowAttributes(display, bt[i].wid, CWWinGravity, &setatts);
+
+ w = topbtp->wid;
+ XCALL;
+
+ PIXCHECK(display, base);
+
+#ifndef GENERATE_PIXMAPS
+ if (wingravevents(display, bt, wgrav->val))
+ CHECK;
+#endif
+ }
+
+ /*
+ * In the GENERATE_PIXMAPS case there will be a path-check error here,
+ * this is intentional. (To prove that wingravevents() is used in
+ * the verification case)
+ */
+ CHECKPASS(2*(NS_wingravity-1)); /* -1 for UnmapGravity */
+>>EXTERN
+
+/*
+ * Flags to say that we received particular events.
+ */
+#define WIN_CONFIG 001
+#define WIN_GRAVITY 002
+#define PAR_CONFIG 004
+#define PAR_GRAVITY 010
+
+static void calcxy();
+
+/*
+ * Routine that does the event checking for the gravity notify
+ * test.
+ */
+static
+wingravevents(display, bt, evtype)
+Display *display;
+struct buildtree *bt;
+int evtype;
+{
+XEvent ev;
+XConfigureEvent confgood;
+XGravityEvent gravgood;
+XConfigureEvent *cnp;
+XGravityEvent *gnp;
+struct buildtree *btp;
+struct buildtree *top;
+int gotgrav = 0;
+int i;
+int pass = 0, fail = 0;
+
+ top = btntobtp(bt, "top");
+
+ /* Set up events */
+ confgood.type = ConfigureNotify;
+ confgood.serial = 0L;
+ confgood.send_event = False;
+ confgood.display = display;
+ confgood.above = (top-1)->wid;
+ confgood.override_redirect = False;
+
+ confgood.x = NEW_X;
+ confgood.y = NEW_Y;
+ confgood.width = NEW_WIDTH;
+ confgood.height = NEW_HEIGHT;
+ confgood.border_width = 1;
+
+ gravgood.type = GravityNotify;
+ gravgood.serial = 0L;
+ gravgood.send_event = False;
+ gravgood.display = display;
+
+ while (getevent(display, &ev) > 0) {
+
+ switch (ev.type) {
+ case ConfigureNotify:
+ cnp = (XConfigureEvent*)&ev;
+
+ btp = btwtobtp(bt, cnp->window);
+ if (btp == NULL) {
+ report("Event received on unknown window");
+ FAIL;
+ continue;
+ }
+ trace("Event received for window '%s'", btp->name);
+
+ if (gotgrav) {
+ report("Configure event received after gravity event");
+ FAIL;
+ } else
+ CHECK;
+
+ /*
+ * Work out if this event occurred on the parent or the window.
+ */
+ if (cnp->window != cnp->event) {
+ if (!btp->parent || btp->parent->wid != cnp->event) {
+ report("Event received on other than the parent window");
+ FAIL;
+ } else
+ btp->uflags |= PAR_CONFIG;
+ } else {
+ btp->uflags |= WIN_CONFIG;
+ }
+
+ confgood.event = cnp->event;
+ confgood.window = cnp->window;
+
+ if (checkevent((XEvent*)&confgood, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ break;
+ case GravityNotify:
+ gnp = (XGravityEvent*)&ev;
+ gotgrav = 1;
+
+ btp = btwtobtp(bt, gnp->window);
+ if (btp == NULL) {
+ report("Event received on unknown window");
+ FAIL;
+ continue;
+ }
+ trace("Event received for window '%s'", btp->name);
+
+ /*
+ * Work out if this event occurred on the parent or the window.
+ */
+ if (gnp->window != gnp->event) {
+ if (!btp->parent || btp->parent->wid != gnp->event) {
+ report("Event received on other than the parent window");
+ FAIL;
+ } else
+ btp->uflags |= PAR_GRAVITY;
+ } else {
+ btp->uflags |= WIN_GRAVITY;
+ }
+
+ gravgood.event = gnp->event;
+ gravgood.window = gnp->window;
+ gravgood.x = btp->x;
+ gravgood.y = btp->y;
+ (void) calcxy(top, evtype, &gravgood.x, &gravgood.y);
+
+ if (checkevent((XEvent*)&gravgood, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ break;
+ default:
+ report("Unexpected event type %s", eventname(ev.type));
+ FAIL;
+ }
+ }
+
+ /*
+ * Since the previous loop is executed a variable number of times
+ * check that it was executed at least once and reset the pass count.
+ */
+ if (pass > 0)
+ pass = 1;
+ else
+ delete("No CHECK marks in wingravevents() loop");
+
+ /*
+ * Check correct events on the top (resized) window.
+ */
+ if (top->uflags & WIN_CONFIG)
+ CHECK;
+ else {
+ report("Configure event not received on window 'top'");
+ FAIL;
+ }
+ if (top->uflags & PAR_CONFIG)
+ CHECK;
+ else {
+ report("Configure event not received on parent of window 'top'");
+ FAIL;
+ }
+ if (top->uflags & (PAR_GRAVITY|WIN_GRAVITY)) {
+ report("Gravity events unexpectedly received on window 'top'");
+ FAIL;
+ } else
+ CHECK;
+
+ /*
+ * Now loop through all the windows and report all problems.
+ */
+ for (i = top-bt+1; i < NTree; i++) {
+ if (evtype == NorthWestGravity) {
+ if (bt[i].uflags & WIN_GRAVITY) {
+ report("Gravity event unexpectedly received on window '%s'", bt[i].name);
+ FAIL;
+ } else
+ CHECK;
+ if (bt[i].uflags & PAR_GRAVITY) {
+ report("Gravity event unexpectedly received on parent of window '%s'", bt[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ } else {
+
+ if (bt[i].uflags & WIN_GRAVITY)
+ CHECK;
+ else {
+ report("Gravity event not received on window '%s'", bt[i].name);
+ FAIL;
+ }
+ if (bt[i].uflags & PAR_GRAVITY)
+ CHECK;
+ else {
+ report("Gravity event not received on parent of window '%s'", bt[i].name);
+ FAIL;
+ }
+ }
+ if (bt[i].uflags & (PAR_CONFIG|WIN_CONFIG)) {
+ report("Configure event unexpectedly received on window '%s'", bt[i].name);
+ FAIL;
+ }
+ }
+ if (fail == 0 && pass != 14)
+ delete("Path check error in wingravevents got %d, expecting 14", pass);
+
+ if (fail == 0)
+ return(True);
+ else
+ return(False);
+}
+
+static void
+calcxy(top, evtype, x, y)
+struct buildtree *top;
+int evtype;
+int *x;
+int *y;
+{
+int dx = NEW_WIDTH-top->width;
+int dy = NEW_HEIGHT-top->height;
+
+ switch (evtype) {
+ case NorthWestGravity:
+ break;
+ case NorthGravity:
+ *x += dx/2;
+ break;
+ case NorthEastGravity:
+ *x += dx;
+ break;
+ case WestGravity:
+ *y += dy/2;
+ break;
+ case CenterGravity:
+ *x += dx/2;
+ *y += dy/2;
+ break;
+ case EastGravity:
+ *x += dx;
+ *y += dy/2;
+ break;
+ case SouthWestGravity:
+ *y += dy;
+ break;
+ case SouthGravity:
+ *x += dx/2;
+ *y += dy;
+ break;
+ case SouthEastGravity:
+ *x += dx;
+ *y += dy;
+ break;
+ case StaticGravity:
+ *x -= (NEW_X - top->x);
+ *y -= (NEW_Y - top->y);
+ break;
+ default:
+ delete("Internal error -- Unknown gravity in calcxy");
+ }
+}
+
+>>ASSERTION Good A
+When a call to xname resizes the window and the
+win-gravity of a subwindow is
+.S UnmapGravity
+and the subwindow is already mapped,
+then the subwindow is unmapped without being moved and an
+.S UnmapNotify
+event is generated.
+>>STRATEGY
+Create window with subwindows.
+Enable events on all subwindows.
+Enable events on window.
+Set win-gravity to UnmapGravity.
+Call xname to resize window.
+Verify windows are removed from screen.
+Verify window positions are unchanged.
+Verify that UnmapNotify events received on each subwindow.
+Verify that UnmapNotify events received on parent of each subwindow.
+>>EXTERN
+
+#define ON_PARENT 0x01
+#define ON_WINDOW 0x02
+
+>>CODE
+Window base;
+struct buildtree *bt;
+struct buildtree *topbtp;
+struct buildtree *btp;
+XEvent ev;
+XUnmapEvent good;
+XUnmapEvent *ump;
+XSetWindowAttributes setatts;
+XWindowAttributes atts;
+int i;
+
+ /* Set up good unmap event struct */
+ good.type = UnmapNotify;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = display;
+ good.from_configure = True;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tree, NTree);
+
+ topbtp = btntobtp(bt, "top");
+
+ /* Select for all structure events on all windows */
+ for (i = 0; i < NTree; i++) {
+ XSelectInput(display, bt[i].wid,
+ SubstructureNotifyMask|StructureNotifyMask);
+ }
+
+ /*
+ * Set the win_gravity on windows below 'top'.
+ */
+ setatts.win_gravity = UnmapGravity;
+ for (i = topbtp-bt; i < NTree; i++) {
+ XChangeWindowAttributes(display, bt[i].wid, CWWinGravity, &setatts);
+ }
+
+ w = topbtp->wid;
+ XCALL;
+
+ {
+ /*
+ * TEMP fix. The pixel is known to be (2&DPETHMASK). This should
+ * be saved as topbtp->pixel.
+ */
+ int depth = getdepth(display, w);
+
+ if (checkarea(display, w, (struct area *)0, 2&DEPTHMASK(depth), 2&DEPTHMASK(depth), CHECK_ALL))
+ CHECK;
+ else {
+ report("UnmapGravity did not appear to remove subwindows");
+ FAIL;
+ }
+ }
+
+ while (getevent(display, &ev) > 0) {
+
+ if (ev.type != UnmapNotify)
+ continue;
+
+ ump = (XUnmapEvent*)&ev;
+
+ btp = btwtobtp(bt, ump->window);
+ if (btp == NULL) {
+ report("Event received on unknown window");
+ FAIL;
+ continue;
+ }
+ trace("Event received for window '%s'", btp->name);
+
+ /*
+ * Work out if this event occurred on the parent or the window.
+ */
+ if (ump->window != ump->event) {
+ if (!btp->parent || btp->parent->wid != ump->event) {
+ report("Event received on other than the parent window");
+ FAIL;
+ } else
+ btp->uflags |= ON_PARENT;
+ } else {
+ btp->uflags |= ON_WINDOW;
+ }
+
+ good.event = ump->event;
+ good.window = ump->window;
+
+ if (checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+ }
+
+ /*
+ * Go through the subwindows below top and check for events received
+ * and map_state and position unchanged.
+ */
+ for (i = topbtp-bt+1; i < NTree; i++) {
+ if (bt[i].uflags & ON_WINDOW)
+ CHECK;
+ else {
+ report("Unmap event not received on window '%s'", bt[i].name);
+ FAIL;
+ }
+ if (bt[i].uflags & ON_PARENT)
+ CHECK;
+ else {
+ report("Unmap event not received on parent of window '%s'", bt[i].name);
+ FAIL;
+ }
+
+ XGetWindowAttributes(display, bt[i].wid, &atts);
+ if (atts.map_state != IsUnmapped) {
+ report("map_state was %s, expecting IsUnmapped",
+ mapstatename(atts.map_state));
+ FAIL;
+ } else
+ CHECK;
+
+ if (atts.x != bt[i].x || atts.y != bt[i].y) {
+ report("Subwindow was moved after UnmapGravity used");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(1+6*(NTree-(topbtp-bt+1)));
+>>ASSERTION Good A
+>># This assumes that the server either always does this or not.
+>># If the server is allowed to do this on some windows and not on
+>># others then the assertion needs re-wording. sr
+>># True. kieron
+If the server uses the window's bit-gravity attribute:
+When a call to xname resizes the window, then
+the contents of the window are repositioned or discarded
+according to the bit-gravity attribute.
+Otherwise:
+When a call to xname resizes the window, then
+contents of the window are discarded.
+>>STRATEGY
+For each value of bit-gravity.
+ Create window.
+ Draw into window.
+ Call xname to resize window.
+ Verify that either:
+ Window is clear.
+ else
+ Contents have been repositioned correctly.
+>>CODE
+struct valname *bitgrav;
+Window base;
+XSetWindowAttributes setatts;
+struct area area;
+extern struct valname S_bitgravity[];
+extern int NS_bitgravity;
+
+
+ for (bitgrav = S_bitgravity; bitgrav < S_bitgravity+NS_bitgravity; bitgrav++) {
+
+ trace("-- Trying bitgravity of %s", bitgrav->name);
+ setarea(&area, OW_X, OW_Y, OW_WIDTH, OW_HEIGHT);
+
+ base = onewin();
+ XSetWindowBackground(display, w, W_BG);
+ dset(display, w, W_FG);
+
+ setatts.bit_gravity = bitgrav->val;
+ XChangeWindowAttributes(display, w, CWBitGravity, &setatts);
+
+ x = OW_X;
+ y = OW_Y;
+
+ XCALL;
+
+ switch (bitgrav->val) {
+ case NorthGravity: case CenterGravity: case SouthGravity:
+ area.x += (NEW_WIDTH-OW_WIDTH)/2;
+ break;
+ case NorthEastGravity: case EastGravity: case SouthEastGravity:
+ area.x += (NEW_WIDTH-OW_WIDTH);
+ break;
+ }
+ switch (bitgrav->val) {
+ case CenterGravity: case WestGravity: case EastGravity:
+ area.y += (NEW_HEIGHT-OW_HEIGHT)/2;
+ break;
+ case SouthGravity: case SouthEastGravity: case SouthWestGravity:
+ area.y += (NEW_HEIGHT-OW_HEIGHT);
+ break;
+ }
+
+ if (checkarea(display, base, (struct area *)0, W_BG, W_BG, CHECK_ALL|CHECK_DIFFER)) {
+
+ /*
+ * The whole base window was clear, the server is not using
+ * bit-gravity, or else we are trying ForgetGravity.
+ */
+ if (bitgrav->val != ForgetGravity)
+ trace("server not using bit-gravity");
+ CHECK;
+ } else {
+ /*
+ * For ForgetGravity then we must not get here.
+ */
+ if (bitgrav->val == ForgetGravity) {
+ report("Contents were not discarded with ForgetGravity");
+ FAIL;
+ } else if (checkarea(display, base, &area, W_FG, W_BG, CHECK_ALL)) {
+ CHECK;
+ } else {
+ report("bits positioned incorrectly for bit-gravity of %s",
+ bitgrav->name);
+ FAIL;
+ }
+ }
+ }
+
+ CHECKPASS(NS_bitgravity);
+
+>>ASSERTION Good A
+When
+the window
+is a root window, then a call to xname has no effect.
+>>STRATEGY
+Call xname on root window.
+Touch test only.
+>>CODE
+
+ w = DefaultRootWindow(display);
+
+ XCALL;
+
+ if (fail == 0)
+ PASS;
+>>ASSERTION Good A
+When the override-redirect attribute of the window is
+.S False
+and some
+other client has selected
+.S SubstructureRedirectMask
+on the parent window, then a
+.S ConfigureRequest
+event is generated, and the window configuration is not changed.
+>>STRATEGY
+Create windows.
+Set override-redirect to False.
+Create second client.
+Select SubstructureRedirectMask for second client on parent of window.
+Set some parameters.
+Call xname.
+Verify that a ConfigureRequest event is generated.
+Verify that window configuration has not changed on the screen.
+>>CODE
+Window base;
+XConfigureRequestEvent good;
+XSetWindowAttributes setatts;
+Display *client2;
+XEvent ev;
+XImage *imp;
+int n;
+
+ base = onewin();
+
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+
+ client2 = opendisplay();
+ XSelectInput(client2, base, SubstructureRedirectMask);
+ XSync(client2, False);
+
+ good.type = ConfigureRequest;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = base;
+ good.window = w;
+ good.x = NEW_X;
+ good.y = NEW_Y;
+ good.width = NEW_WIDTH;
+ good.height = NEW_HEIGHT;
+ good.border_width = 0;
+ good.above = None;
+ good.detail = Above;
+ good.value_mask = CWX|CWY|CWWidth|CWHeight;
+
+ imp = savimage(display, base);
+
+ XCALL;
+ XSync(client2, False);
+
+ n = getevent(client2, &ev);
+ if (n != 1) {
+ report("Expecting 1 event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ if (compsavimage(display, base, imp))
+ CHECK;
+ else {
+ report("Screen contents changed");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When another client has selected
+.S ResizeRedirectMask
+on the window and the size would be changed, then a
+.S ResizeRequest
+event is generated and the size is not changed.
+>># Other changes take place though.
+>>STRATEGY
+Create windows.
+Set override-redirect to False.
+Create second client.
+Select ResizeRedirectMask for second client on window.
+Set parameters to move and resize window.
+Call xname.
+Verify that a ResizeRequest event is generated.
+Verify that window has not changed size but that other changes have occurred.
+>>CODE
+Window base;
+XResizeRequestEvent good;
+XSetWindowAttributes setatts;
+Display *client2;
+XEvent ev;
+struct area area;
+int n;
+
+ base = onewin();
+
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+
+ client2 = opendisplay();
+ XSelectInput(client2, w, ResizeRedirectMask);
+ XSync(client2, False);
+
+ good.type = ResizeRequest;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = client2;
+ good.window = w;
+ good.width = NEW_WIDTH;
+ good.height = NEW_HEIGHT;
+
+ XCALL;
+ XSync(client2, False);
+
+ n = getevent(client2, &ev);
+ if (n != 1) {
+ report("Expecting 1 event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ /* Window moves, but does not change size */
+ setarea(&area, NEW_X, NEW_Y, OW_WIDTH, OW_HEIGHT);
+ if (checkarea(display, base, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("New location and size of window not as expected");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When another client has selected
+.S ResizeRedirectMask
+on the window and another client has selected
+.S SubstructureRedirectMask
+on the parent window
+and the override-redirect attribute of the window is
+.S False ,
+then a
+.S ConfigureRequest
+event is generated, and the window configuration is not changed.
+>>STRATEGY
+Create windows.
+Set override-redirect to False.
+Create second client.
+Select ResizeRedirectMask for second client on window.
+Create third client.
+Select SubstructureRedirectMask for third client on parent of window.
+Call xname.
+Verify that a ConfigureRequest event is generated for client 3.
+Verify that no ResizeRequest event is generated for client 2.
+Verify that window configuration is not changed.
+>>CODE
+Window base;
+XConfigureRequestEvent good;
+XSetWindowAttributes setatts;
+Display *client2;
+Display *client3;
+XEvent ev;
+XImage *imp;
+int n;
+
+ base = onewin();
+
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+
+ client2 = opendisplay();
+ XSelectInput(client2, w, ResizeRedirectMask);
+ XSync(client2, False);
+
+ client3 = opendisplay();
+ XSelectInput(client3, base, SubstructureRedirectMask);
+ XSync(client3, False);
+
+ imp = savimage(display, base);
+
+ XCALL;
+ XSync(client2, False);
+ XSync(client3, False);
+
+ n = getevent(client2, &ev);
+ if (n != 0) {
+ report("Got an event unexpectedly for client selecting ResizeRedirect");
+ report(" Event type was %s", eventname(ev.type));
+ FAIL;
+ } else
+ CHECK;
+
+ good.type = ConfigureRequest;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = client3;
+ good.parent = base;
+ good.window = w;
+ good.x = NEW_X;
+ good.y = NEW_Y;
+ good.width = NEW_WIDTH;
+ good.height = NEW_HEIGHT;
+ good.border_width = 0;
+ good.above = None;
+ good.detail = Above;
+ good.value_mask = CWX|CWY|CWWidth|CWHeight;
+
+ n = getevent(client3, &ev);
+ if (n != 1) {
+ report("Expecting one configure events");
+ FAIL;
+ } else
+ CHECK;
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ if (compsavimage(display, base, imp))
+ CHECK;
+ else {
+ report("Window changed when client was selecting SubstructureRedirect");
+ FAIL;
+ }
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When the configuration actually changes, then a
+.S ConfigureNotify
+event is generated.
+>>STRATEGY
+Create windows.
+Enable SubstructureNotify events.
+Call xname such that the window configuration changes.
+Verify that a ConfigureNotify event is generated.
+Call xname again with the same parameters.
+Verify that no ConfigureNotify event is generated.
+>>CODE
+Window base;
+XConfigureEvent good;
+XEvent ev;
+int n;
+
+ base = onewin();
+
+ XSelectInput(display, w, StructureNotifyMask);
+
+ XCALL;
+
+ good.type = ConfigureNotify;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = display;
+ good.event = w;
+ good.window = w;
+ good.x = NEW_X;
+ good.y = NEW_Y;
+ good.width = NEW_WIDTH;
+ good.height = NEW_HEIGHT;
+ good.border_width = 0;
+ good.above = None;
+ good.override_redirect = False;
+
+ n = getevent(display, &ev);
+ if (n != 1) {
+ report("Expecting 1 event, got %d", n);
+ FAIL;
+ } else
+ CHECK;
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ /* Call again */
+ XCALL;
+ if ((n = XPending(display)) == 0)
+ CHECK;
+ else {
+ report("Received event when configuration was not changed");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>># ASSERTION Good A
+>># There are Expose events to consider here.
+>># Also any window that is uncovered etc.
+>>ASSERTION Good A
+When a call to xname changes the size of the window, then
+.S Expose
+events are generated for regions that are newly visible or for
+which the contents have been lost.
+>>STRATEGY
+Create windows.
+Set test window background to W_BG.
+Set up window with setforexpose().
+Enable expose events.
+Resize window with xname.
+Verify that correct expose events were received with exposecheck().
+>>CODE
+Window base;
+
+ base = onewin();
+
+ XSetWindowBackground(display, w, W_BG);
+ XClearWindow(display, w);
+ setforexpose(display, w);
+
+ XSelectInput(display, w, ExposureMask);
+
+ x = OW_X;
+ y = OW_Y;
+
+ XCALL;
+
+ if (exposecheck(display, w))
+ CHECK;
+ else {
+ report("Correct expose events not received after resize");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create windows.
+Create second client to receive events on.
+Call setforexpose() on unobscured window.
+Create other windows to partially obscure this window.
+Reconfigure window with xname, ensuring that first window is now unobscured.
+Verify for correct expose or backing store behaviour with exposecheck().
+>>CODE
+Window base;
+Display *client2;
+struct buildtree *bt;
+int i;
+
+ base = defwin(display);
+ setforexpose(display, base);
+
+ bt = buildtree(display, base, Tree, NTree);
+
+ client2 = opendisplay();
+ XSelectInput(client2, base, ExposureMask);
+ XSync(client2, False);
+
+ /*
+ * This loop will throw all the subwindows outside the borders of the
+ * parent window.
+ */
+ x = W_STDWIDTH+9000;
+ for (i = 1; i < NTree; i++) {
+ w = bt[i].wid;
+ XCALL;
+ }
+ XSync(client2, False);
+
+ if (exposecheck(client2, base))
+ CHECK;
+ else {
+ report("Neither Expose events or backing store processing");
+ report(" could correctly restore the window contents.");
+ FAIL;
+ }
+ CHECKPASS(1);
+>>ASSERTION Good A
+When the window is moved without changing its size
+and the window is mapped
+and the window is not obscured by non-child windows, then the current window
+contents are not lost.
+>>STRATEGY
+Create window.
+Draw pattern in window.
+Move window without a size change.
+Verify that window contents are unchanged.
+>>CODE
+Window base;
+XImage *imp;
+
+ base = onewin();
+
+ pattern(display, w);
+
+ imp = savimage(display, w);
+
+ width = OW_WIDTH;
+ height = OW_HEIGHT;
+ XCALL;
+
+ if (compsavimage(display, w, imp))
+ CHECK;
+ else {
+ report("Window contents affected by moving window");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good D 3
+When the window is moved without changing its size
+and the window is mapped
+and backing store is being maintained for the window, then the current window
+contents are not lost.
+>>ASSERTION Bad A
+When
+.M width
+or
+.M height
+is zero, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set width to zero.
+Call xname.
+Verify BadValue error.
+Set height to zero.
+Call xname.
+Verify BadValue error.
+Set both width and height to zero.
+Call xname.
+Verify BadValue error.
+>>CODE BadValue
+Window base;
+
+ base = onewin();
+
+ width = 0;
+ XCALL;
+ if (geterr() == BadValue)
+ CHECK;
+
+ width = NEW_WIDTH;
+ height = 0;
+ XCALL;
+ if (geterr() == BadValue)
+ CHECK;
+
+ width = 0;
+ height = 0;
+ XCALL;
+ if (geterr() == BadValue)
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/mvwdw/mvwdw.m b/xc/test/xsuite/xtest/tset/CH03/mvwdw/mvwdw.m
new file mode 100644
index 000000000..090a8019b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/mvwdw/mvwdw.m
@@ -0,0 +1,350 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XMoveWindow CH03
+void
+
+Display *display = Dsp;
+Window w;
+int x;
+int y;
+>>EXTERN
+
+/* The structure that is used as the default argument to the function. */
+static XWindowChanges winchng;
+
+/*
+ * Convenience routine that sets the 'w' argument to be simple window
+ * with a background of W_FG at position (10,8) and * size 10x9.
+ * The border width is 0.
+ */
+#define OW_X 10
+#define OW_Y 8
+#define OW_WIDTH 23
+#define OW_HEIGHT 9
+
+#define NEW_X OW_X+5
+#define NEW_Y OW_Y+5
+
+
+static Window
+onewin()
+{
+Window base;
+struct area area;
+
+ base = defwin(display);
+ setarea(&area, OW_X, OW_Y, OW_WIDTH, OW_HEIGHT);
+
+ w = crechild(display, base, &area);
+ XSetWindowBackground(display, w, W_FG);
+ XClearWindow(display, w);
+
+ return(base);
+}
+
+
+/*
+ * Window tree for the restacking operations.
+ */
+static char *Tstack[] = {
+ ". borders",
+ "bottom . (30,2) 60x34",
+ "A . (10,5) 30x20",
+ "B . (15, 10) 30x20",
+ "mid . (20, 15) 30x20",
+ "C . (25, 20) 30x20",
+ "D . (30, 25) 30x20",
+ "alone . (50,50) 20x20", /* does not overlap with any window */
+ "olmid . (3,32) 20x20", /* Overlaps mid */
+ "top . (5,80) 19x4",
+};
+#define NTstack (NELEM(Tstack))
+>>ASSERTION Good A
+A call to xname moves the window so that the
+coordinates of the upper-left outer corner of the window
+are
+.M x ,
+.M y
+relative to the origin of the parent window.
+>>STRATEGY
+Create test window with background of W_FG.
+Set x and y.
+Call xname.
+Verify that window has moved on screen with checkarea().
+>>CODE
+Window base;
+struct area area;
+
+ base = onewin();
+
+ setarea(&area, 20, 50, OW_WIDTH, OW_HEIGHT);
+ x = area.x;
+ y = area.y;
+
+ XCALL;
+
+ if (checkarea(display, base, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Error in moving window");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When the window is moved
+and the window is mapped
+and the window is not obscured by non-children, then the current window
+contents are not lost.
+>>STRATEGY
+Create window.
+Draw pattern in window.
+Move window without a size change.
+Verify that window contents are unchanged.
+>>CODE
+XImage *imp;
+
+ (void) onewin();
+
+ pattern(display, w);
+
+ x = NEW_X;
+ y = NEW_Y;
+
+ imp = savimage(display, w);
+
+ XCALL;
+
+ if (compsavimage(display, w, imp))
+ CHECK;
+ else {
+ report("Window contents affected by moving window");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good D 3
+When the window is moved
+and the window is mapped
+and backing store is being maintained for the window, then the current window
+contents are not lost.
+>># Kieron reckoned a sibling assertion to this in XConfigureWindow
+>># was D 3. I have no reason to doubt this! stuart.
+>>ASSERTION Good A
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create windows.
+Create second client to receive events on.
+Call setforexpose() on unobscured window.
+Create other windows to partially obscure this window.
+Reconfigure window with xname, ensuring that first window is now unobscured.
+Verify for correct expose or backing store behaviour with exposecheck().
+>>CODE
+Window base;
+Display *client2;
+struct buildtree *bt;
+int i;
+
+ base = defwin(display);
+ setforexpose(display, base);
+
+ bt = buildtree(display, base, Tstack, NTstack);
+
+ client2 = opendisplay();
+ XSelectInput(client2, base, ExposureMask);
+ XSync(client2, False);
+
+ /*
+ * This loop will throw all the subwindows outside the borders of the
+ * parent window.
+ */
+ x = W_STDWIDTH+9000;
+ for (i = 1; i < NTstack; i++) {
+ w = bt[i].wid;
+ XCALL;
+ }
+ XSync(client2, False);
+
+ if (exposecheck(client2, base))
+ CHECK;
+ else {
+ report("Neither Expose events or backing store processing");
+ report(" could correctly restore the window contents.");
+ FAIL;
+ }
+ CHECKPASS(1);
+>>ASSERTION Good A
+When the window
+is a root window, then a call to xname has no effect.
+>>STRATEGY
+Call xname on root window.
+Touch test only.
+>>CODE
+
+ w = DefaultRootWindow(display);
+
+ XCALL;
+
+ if (fail == 0)
+ PASS;
+>>ASSERTION Good A
+When the override-redirect flag of the window is
+.S False
+and some
+other client has selected
+.S SubstructureRedirectMask
+on the parent window, then a
+.S ConfigureRequest
+event is generated, and the window position is not changed.
+>>STRATEGY
+Create windows.
+Set override-redirect to False.
+Create second client.
+Select SubstructureRedirectMask for second client on parent of window.
+Set some parameters.
+Call xname.
+Verify that a ConfigureRequest event is generated.
+Verify that window configuration has not changed on the screen.
+>>CODE
+Window base;
+XConfigureRequestEvent good;
+XSetWindowAttributes setatts;
+Display *client2;
+XEvent ev;
+XImage *imp;
+int n;
+
+ base = onewin();
+
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+
+ client2 = opendisplay();
+ XSelectInput(client2, base, SubstructureRedirectMask);
+ XSync(client2, False);
+
+ x = NEW_X;
+ y = NEW_Y;
+
+ good.type = ConfigureRequest;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = base;
+ good.window = w;
+ good.x = NEW_X;
+ good.y = NEW_Y;
+ good.width = OW_WIDTH;
+ good.height = OW_HEIGHT;
+ good.border_width = 0;
+ good.above = None;
+ good.detail = Above;
+ good.value_mask = CWX | CWY;
+
+ imp = savimage(display, base);
+
+ XCALL;
+ XSync(client2, False);
+
+ n = getevent(client2, &ev);
+ if (n != 1) {
+ report("Expecting 1 event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ if (compsavimage(display, base, imp))
+ CHECK;
+ else {
+ report("Screen contents changed");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the position actually changes, then a
+.S ConfigureNotify
+event is generated.
+>>STRATEGY
+Create windows.
+Enable SubstructureNotify events.
+Call xname such that the window configuration changes.
+Verify that a ConfigureNotify event is generated.
+Call xname again with the same parameters.
+Verify that no ConfigureNotify event is generated.
+>>CODE
+XConfigureEvent good;
+XEvent ev;
+int n;
+
+ (void) onewin();
+
+ XSelectInput(display, w, StructureNotifyMask);
+
+ x = NEW_X;
+ y = NEW_Y;
+
+ XCALL;
+
+ good.type = ConfigureNotify;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = display;
+ good.event = w;
+ good.window = w;
+ good.x = NEW_X;
+ good.y = NEW_Y;
+ good.width = OW_WIDTH;
+ good.height = OW_HEIGHT;
+ good.border_width = 0;
+ good.above = None;
+ good.override_redirect = False;
+
+ n = getevent(display, &ev);
+ if (n != 1) {
+ report("Expecting 1 event, got %d", n);
+ FAIL;
+ } else
+ CHECK;
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ /* Call again */
+ XCALL;
+ if ((n = XPending(display)) == 0)
+ CHECK;
+ else {
+ report("Received event when configuration was not changed");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/rstckwdws/a1.dat b/xc/test/xsuite/xtest/tset/CH03/rstckwdws/a1.dat
new file mode 100644
index 000000000..542db4991
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/rstckwdws/a1.dat
@@ -0,0 +1,368 @@
+! $XConsortium$
+100 90 32
+3f2,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+5,5
+5,6
+5,5
+14,0
+1e,1
+19,4
+a,0
+5,5
+5,6
+5,5
+14,0
+1e,1
+19,4
+a,0
+5,5
+5,6
+5,5
+14,0
+1e,1
+19,4
+a,0
+5,5
+5,6
+5,5
+14,0
+1e,1
+19,4
+a,0
+5,5
+5,6
+5,5
+14,0
+1e,1
+19,4
+a,0
+5,5
+5,6
+5,5
+14,0
+1e,1
+19,4
+a,0
+5,5
+5,6
+5,5
+14,0
+1e,1
+19,4
+a,0
+5,5
+5,6
+5,5
+14,0
+1e,1
+19,4
+a,0
+5,5
+5,6
+5,5
+14,0
+1e,1
+19,4
+a,0
+5,5
+5,6
+5,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,1
+19,4
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+3f2,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/rstckwdws/a2.dat b/xc/test/xsuite/xtest/tset/CH03/rstckwdws/a2.dat
new file mode 100644
index 000000000..2e938cc02
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/rstckwdws/a2.dat
@@ -0,0 +1,368 @@
+! $XConsortium$
+100 90 32
+3f2,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+3f2,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/rstckwdws/a3.dat b/xc/test/xsuite/xtest/tset/CH03/rstckwdws/a3.dat
new file mode 100644
index 000000000..1dbc2d0b8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/rstckwdws/a3.dat
@@ -0,0 +1,368 @@
+! $XConsortium$
+100 90 32
+3f2,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+5,5
+5,6
+5,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,1
+1e,4
+a,0
+f,5
+14,0
+19,3
+1e,4
+a,0
+f,5
+14,0
+19,3
+1e,4
+a,0
+f,5
+14,0
+19,3
+1e,4
+a,0
+f,5
+14,0
+19,3
+1e,4
+a,0
+f,5
+14,0
+19,3
+1e,4
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+5,5
+5,7
+5,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+14,0
+1e,3
+19,2
+a,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+55,0
+f,5
+3f2,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/rstckwdws/rstckwdws.m b/xc/test/xsuite/xtest/tset/CH03/rstckwdws/rstckwdws.m
new file mode 100644
index 000000000..41b41de50
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/rstckwdws/rstckwdws.m
@@ -0,0 +1,393 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XRestackWindows CH03
+void
+
+Display *display = Dsp;
+Window *windows = array;
+int nwindows;
+>>EXTERN
+
+static Window array[8];
+
+static char *SimpleTemplate[] = {
+ ".",
+ "zero . (10,10) 30x30",
+ "one . (35,35) 30x30",
+ "two . (10,35) 30x30",
+ "three . (35,10) 30x30",
+ "other1 . (75,10) 15x70",
+ "other2 other1 (5,5) 5x10",
+ "other3 . (80,40) 5x20",
+};
+static int NSimpleTemplate = NELEM(SimpleTemplate);
+
+>>ASSERTION Good A
+A call to xname restacks the windows in the
+.A windows
+array in the order specified, from top to bottom.
+>>STRATEGY
+Create a window hierarchy.
+Assign members of the window array
+Call xname to restack the windows
+Verify that the windows were restacked in the order two, one, zero, three using pixchecking
+>>CODE
+struct buildtree *tree;
+Window parent, zero, one, two, three ;
+
+/* Create a window hierarchy. */
+ parent = defwin(display);
+ tree = buildtree(display, parent, SimpleTemplate, NSimpleTemplate);
+ zero = btntow(tree, "zero");
+ one = btntow(tree, "one");
+ two = btntow(tree, "two");
+ three = btntow(tree, "three");
+
+/* Assign members of the window array */
+ array[0] = two; /* top window */
+ array[1] = one;
+ array[2] = zero;
+ array[3] = three;
+
+/* Call xname to restack the windows */
+ nwindows = 4;
+ XCALL;
+
+/* Verify that the windows were restacked in the order two, one, zero, three using pixchecking */
+ PIXCHECK(display, parent);
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+The stacking order of the first window in the
+.A windows
+array is unaffected
+with respect to other windows not in the array.
+>>STRATEGY
+Create a window hierarchy.
+Assign members of the window array
+Call xname to restack the windows
+Verify that the windows were restacked such that the order became two, one, three, zero by pixchecking
+>>CODE
+struct buildtree *tree;
+Window parent, one, three ;
+
+/* Create a window hierarchy. */
+ parent = defwin(display);
+ tree = buildtree(display, parent, SimpleTemplate, NSimpleTemplate);
+ one = btntow(tree, "one");
+ three = btntow(tree, "three");
+
+/* Assign members of the window array */
+ array[0] = one;
+ array[1] = three;
+
+/* Call xname to restack the windows */
+ nwindows = 2;
+ XCALL;
+
+/* Verify that the windows were restacked such that the order became two, one, three, zero by pixchecking */
+ PIXCHECK(display, parent);
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+The stacking order of any windows not in the
+.A windows
+array is not affected.
+>>STRATEGY
+Create a window hierarchy.
+Assign members of the window array
+Call xname to restack the windows
+Verify that the windows were restacked such that the windows zero, one, two and three were unaffected
+>>CODE
+struct buildtree *tree;
+Window parent, other1, other3;
+
+/* Create a window hierarchy. */
+ parent = defwin(display);
+ tree = buildtree(display, parent, SimpleTemplate, NSimpleTemplate);
+ other1= btntow(tree, "other1");
+ other3= btntow(tree, "other3");
+
+/* Assign members of the window array */
+ array[0] = other3;
+ array[1] = other1;
+
+/* Call xname to restack the windows */
+ nwindows = 2;
+ XCALL;
+
+/* Verify that the windows were restacked such that the windows zero, one, two and three were unaffected */
+ PIXCHECK(display, parent);
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When the override-redirect attribute of a window in the
+.A windows
+array is
+.S False
+and some other client has selected
+.S SubstructureRedirectMask
+on the parent window, then a
+.S ConfigureRequest
+event is generated for each such window
+and no further processing is performed on that window.
+>>STRATEGY
+Create client1 and client2.
+Create a window hierarchy for client1.
+Save parent window image as reference image.
+Ensure override-redirect on window one is False.
+Select SubstructureRedirectMask events on the parent window for client2.
+Call xname to restack window one.
+Verify that no events were delivered to client1.
+Verify that a correct ConfigureRequest event was delivered to client2.
+Verify that no further processing occurred by comparing the window to our reference window.
+>>CODE
+Display *client1, *client2;
+Window parent, zero, one, two, three;
+struct buildtree *c1tree;
+XImage *image;
+XSetWindowAttributes attr;
+XEvent ev;
+int numevent;
+
+/* Create client1 and client2. */
+ client1 = opendisplay();
+ if (client1 == NULL) {
+ delete("could not create client1");
+ return;
+ }
+ else
+ CHECK;
+ client2 = opendisplay();
+ if (client2 == NULL) {
+ delete("could not create client2");
+ return;
+ }
+ else
+ CHECK;
+
+/* Create a window hierarchy for client1. */
+ parent = defwin(client1); trace("window parent %d", parent);
+ c1tree = buildtree(client1, parent, SimpleTemplate, NSimpleTemplate);
+ zero= btntow(c1tree, "zero"); trace("window zero %d", zero);
+ one = btntow(c1tree, "one"); trace("window one %d", one);
+ two = btntow(c1tree, "two"); trace("window two %d", two);
+ three=btntow(c1tree, "three"); trace("window three %d", three);
+
+/* Save parent window image as reference image. */
+ image = savimage(client1, parent);
+
+/* Ensure override-redirect on window one is False. */
+ attr.override_redirect = False;
+ XChangeWindowAttributes(client1, one, CWOverrideRedirect, &attr);
+
+/* Select SubstructureRedirectMask events on the parent window for client2. */
+ XSelectInput(client2, parent, SubstructureRedirectMask);
+ XSync(client2, True);
+
+/* Call xname to restack window one. */
+ array[0] = zero;
+ array[1] = one;
+ nwindows = 2;
+ XCALL;
+ XSync(client2, False);
+
+/* Verify that no events were delivered to client1. */
+ numevent = getevent(client1, &ev);
+ if (numevent != 0) {
+ FAIL;
+ report("%d unexpected %s delivered to client1",
+ numevent, (numevent==1)?"event was":"events were");
+ report("%sevent was %s", (numevent!=1)?"first ":"",
+ eventname(ev.type));
+ trace("Window field was %d", ev.xany.window);
+ while(getevent(client1, &ev) != 0) {
+ report("next event was %s", eventname(ev.type));
+ trace("Window field was %d", ev.xany.window);
+ }
+ } else
+ CHECK;
+
+/* Verify that a correct ConfigureRequest event was delivered to client2. */
+ numevent = getevent(client2, &ev);
+ if (numevent != 1) {
+ FAIL;
+ report("Expecting a single ConfigureRequest event");
+ report("Received %d events", numevent);
+ if (numevent != 0) {
+ report("First event was %s", eventname(ev.type));
+ trace("Window field was %d", ev.xany.window);
+ while(getevent(client2, &ev) != 0) {
+ report("next event was %s", eventname(ev.type));
+ trace("Window field was %d", ev.xany.window);
+ }
+ }
+ } else {
+ XConfigureRequestEvent good;
+
+ good.type = ConfigureRequest;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = parent;
+ good.window = one;
+ good.x = ev.xconfigure.x;
+ good.y = ev.xconfigure.y;
+ good.width = ev.xconfigure.width;
+ good.height = ev.xconfigure.height;
+ good.border_width = ev.xconfigure.border_width;
+ good.above = zero;
+ good.detail= Below;
+ good.value_mask = CWStackMode | CWSibling;
+
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Verify that no further processing occurred by comparing the window to our reference window. */
+ if (!compsavimage(client1, parent, image)) {
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+>>ASSERTION Bad A
+When a window in the
+.A windows
+array is not
+a sibling of the previous window in the array, then for each such pair
+of windows a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create two window hierarchies
+Assign members of the windows array, with one element not a sibling
+Verify that a BadMatch error occurred.
+Assign members of the windows array, with an element as the parent window
+Verify that a BadMatch error occurred.
+Assign members of the windows array, with an element as an unrelated window
+Verify that a BadMatch error occurred.
+>>CODE BadMatch
+struct buildtree *tree;
+Window parent, one, two, three, other1, other2, parent2;
+
+/* Create two window hierarchies */
+ parent = defwin(display);
+ tree = buildtree(display, parent, SimpleTemplate, NSimpleTemplate);
+ one = btntow(tree, "one");
+ two = btntow(tree, "two");
+ three = btntow(tree, "three");
+ other1 = btntow(tree, "other1");
+ other2 = btntow(tree, "other2");
+
+ parent2 = defwin(display);
+
+/* Assign members of the windows array, with one element not a sibling */
+ array[0] = one;
+ array[1] = other1;
+ array[2] = other2; /* This is a child of other1, not a sibling */
+ array[3] = two;
+ array[4] = three;
+
+/* Verify that a BadMatch error occurred. */
+ nwindows = 5;
+ XCALL;
+ if (geterr() != BadMatch)
+ {
+ FAIL;
+ report("child window of previous member window did not cause a BadMatch");
+ } else
+ CHECK;
+
+/* Assign members of the windows array, with an element as the parent window */
+ array[0] = one;
+ array[1] = other1;
+ array[2] = parent; /* this is the parent window */
+ array[3] = two;
+ array[4] = three;
+
+/* Verify that a BadMatch error occurred. */
+ nwindows = 5;
+ XCALL;
+ if (geterr() != BadMatch)
+ {
+ FAIL;
+ report("parent window of a previous window did not cause a BadMatch");
+ } else
+ CHECK;
+
+/* Assign members of the windows array, with an element as an unrelated window */
+ array[0] = one;
+ array[1] = other1;
+ array[2] = parent2; /* this is an unrelated window */
+ array[3] = two;
+ array[4] = three;
+
+/* Verify that a BadMatch error occurred. */
+ nwindows = 5;
+ XCALL;
+ if (geterr() != BadMatch)
+ {
+ FAIL;
+ report("unrelated window of a previous window did not cause a BadMatch");
+ }
+ else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Bad A
+When one or more entries in the
+.A windows
+array do not name valid windows,
+then a
+>># This was .S BadMatch, but I think it ought to be BadWindow... stuart
+.S BadWindow
+error occurs for each such window.
+>>STRATEGY
+Create a window hierarchy.
+Assign members of the windows array, with one element as a bad window id.
+Verify that a BadWindow error occurred.
+>>CODE BadWindow
+struct buildtree *tree;
+Window parent, zero, one, two, three ;
+
+/* Create a window hierarchy. */
+ parent = defwin(display);
+ tree = buildtree(display, parent, SimpleTemplate, NSimpleTemplate);
+ zero = btntow(tree, "zero");
+ one = btntow(tree, "one");
+ two = btntow(tree, "two");
+ three = btntow(tree, "three");
+
+/* Assign members of the windows array, with one element as a bad window id. */
+ array[0] = zero;
+ array[1] = three;
+ array[2] = badwin(display);
+ array[3] = one;
+ array[4] = two;
+
+/* Verify that a BadWindow error occurred. */
+ nwindows = 5;
+ XCALL;
+ if (geterr() != BadWindow)
+ FAIL;
+ else
+ CHECK;
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH03/rswdw/a1.dat b/xc/test/xsuite/xtest/tset/CH03/rswdw/a1.dat
new file mode 100644
index 000000000..07adf392d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/rswdw/a1.dat
@@ -0,0 +1,303 @@
+! $XConsortium$
+100 90 32
+3fc,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+28,1
+f,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+1e,0
+a,1
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+14,3
+28,2
+5,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+14,0
+28,3
+19,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+55,0
+f,4
+3f2,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/rswdw/rswdw.m b/xc/test/xsuite/xtest/tset/CH03/rswdw/rswdw.m
new file mode 100644
index 000000000..09ff76941
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/rswdw/rswdw.m
@@ -0,0 +1,234 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XRaiseWindow CH03
+void
+
+Display *display = Dsp;
+Window w;
+>>EXTERN
+
+static char *SimpleTemplate[] = {
+ ".",
+ "zero . (20,10) 40x40",
+ "one . (30,20) 40x40",
+ "two . (10,30) 40x40",
+ "other1 . (75,10) 15x70",
+};
+static int NSimpleTemplate = NELEM(SimpleTemplate);
+
+static char *Expose1Template[] = {
+ ".",
+ "zero . (20,10) 40x40",
+ "one . (30,20) 40x40",
+ "other1 . (75,10) 15x70",
+};
+static int NExpose1Template = NELEM(Expose1Template);
+
+static char *Expose2Template[] = {
+ ".",
+ "two . (10,30) 40x40",
+};
+static int NExpose2Template = NELEM(Expose2Template);
+
+>>ASSERTION Good A
+A call to xname raises the specified window to the top
+of the stack so that no sibling window obscures it.
+>>STRATEGY
+Create a window hierarchy using buildtree.
+Call xname on window 'one' to raise it
+Verify that window 'one' became the highest sibling window.
+>>CODE
+struct buildtree *tree;
+Window parent;
+
+/* Create a window hierarchy using buildtree. */
+ parent = defwin(display);
+ tree = buildtree(display, parent, SimpleTemplate, NSimpleTemplate);
+
+/* Call xname on window 'one' to raise it */
+ w = btntow(tree, "one");
+ XCALL;
+
+/* Verify that window 'one' became the highest sibling window. */
+ PIXCHECK(display, parent);
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create a window hierarchy using buildtree.
+Call setforexpose on window 'one' to allow Expose event checking.
+Select Expose events on window 'one'.
+Call xname on window 'one' in order to expose window 'one'.
+Use exposecheck to ensure that the window 'one' was restored correctly.
+>>CODE
+struct buildtree *tree1;
+Window parent, one;
+
+/* Create a window hierarchy using buildtree. */
+ parent = defwin(display);
+ tree1= buildtree(display, parent, Expose1Template, NExpose1Template);
+ one = btntow(tree1, "zero");
+
+/* Call setforexpose on window 'one' to allow Expose event checking. */
+ setforexpose(display, one);
+ (void) buildtree(display, parent, Expose2Template, NExpose2Template);
+
+/* Select Expose events on window 'one'. */
+ XSelectInput(display, one, ExposureMask);
+
+/* Call xname on window 'one' in order to expose window 'one'. */
+ w = one;
+ XCALL;
+
+/* Use exposecheck to ensure that the window 'one' was restored correctly. */
+ if (!exposecheck(display, one)) {
+ report("Neither Expose events or backing store processing");
+ report("could correctly restore the window contents.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When the override-redirect attribute of the window is
+.S False
+and some other client has selected
+.S SubstructureRedirectMask
+on the parent window, then a
+.S ConfigureRequest
+event is generated, and no further processing is performed.
+>>STRATEGY
+Create client1 and client2.
+Create a window hierarchy for client1.
+Save parent window image as reference image.
+Set override-redirect on window one to False.
+Select SubstructureRedirectMask events on the parent window for client2.
+Call xname on window one for client1.
+Verify that no events were delivered to client1.
+Verify that a correct ConfigureRequest event was delivered to client2.
+Verify that no further processing occurred by comparing the window
+ to our reference window.
+>>CODE
+Display *client1, *client2;
+Window parent, one;
+struct buildtree *c1tree;
+XImage *image;
+XSetWindowAttributes attr;
+XEvent ev;
+int numevent;
+
+/* Create client1 and client2. */
+ client1 = opendisplay();
+ if (client1 == NULL) {
+ delete("could not create client1");
+ return;
+ }
+ else
+ CHECK;
+ client2 = opendisplay();
+ if (client2 == NULL) {
+ delete("could not create client2");
+ return;
+ }
+ else
+ CHECK;
+
+/* Create a window hierarchy for client1. */
+ parent = defwin(client1);
+ c1tree = buildtree(client1, parent, SimpleTemplate, NSimpleTemplate);
+ one = btntow(c1tree, "one");
+
+/* Save parent window image as reference image. */
+ image = savimage(client1, parent);
+
+/* Set override-redirect on window one to False. */
+ attr.override_redirect = False;
+ XChangeWindowAttributes(client1, one, CWOverrideRedirect, &attr);
+
+/* Select SubstructureRedirectMask events on the parent window for client2. */
+ XSelectInput(client2, parent, SubstructureRedirectMask);
+ XSync(client2, True);
+
+/* Call xname on window one for client1. */
+ display = client1;
+ w = one;
+ XCALL;
+ XSync(client2, False);
+
+/* Verify that no events were delivered to client1. */
+ numevent = getevent(client1, &ev);
+ if (numevent != 0) {
+ FAIL;
+ report("%d unexpected %s delivered to client1",
+ numevent, (numevent==1)?"event was":"events were");
+ report("%sevent was %s", (numevent!=1)?"first ":"",
+ eventname(ev.type));
+ while(getevent(client1, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ } else
+ CHECK;
+
+/* Verify that a correct ConfigureRequest event was delivered to client2. */
+ numevent = getevent(client2, &ev);
+ if (numevent != 1) {
+ FAIL;
+ report("Expecting a single ConfigureRequest event");
+ report("Received %d events", numevent);
+ if (numevent != 0) {
+ report("First event was %s", eventname(ev.type));
+ while(getevent(client2, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ }
+ } else {
+ XConfigureRequestEvent good;
+
+ good.type = ConfigureRequest;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = parent;
+ good.window = one;
+ good.x = ev.xconfigure.x;
+ good.y = ev.xconfigure.y;
+ good.width = ev.xconfigure.width;
+ good.height = ev.xconfigure.height;
+ good.border_width = ev.xconfigure.border_width;
+ good.above = ev.xconfigure.above;
+ good.detail= Above;
+ good.value_mask = CWStackMode;
+
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Verify that no further processing occurred by comparing the window */
+/* to our reference window. */
+ if (!compsavimage(client1, parent, image)) {
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/rszwdw/a2.dat b/xc/test/xsuite/xtest/tset/CH03/rszwdw/a2.dat
new file mode 100644
index 000000000..739bf7f64
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/rszwdw/a2.dat
@@ -0,0 +1,3561 @@
+! $XConsortium$
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1
+6,0
+1
+9,0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+6,0
+1
+9,0
+b,1
+9,0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+d,0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+9,0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+d,0
+2b,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+10,1
+6,0
+1
+9,0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+6,0
+1
+9,0
+b,1
+9,0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+e,0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+e,0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+d,0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+9,0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+d,0
+1c,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1f,1
+6,0
+1
+9,0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+6,0
+1
+9,0
+b,1
+9,0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+e,0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+e,0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+d,0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+9,0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+d,0
+d,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1
+6,0
+1
+9,0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+6,0
+1
+9,0
+b,1
+9,0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+d,0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+9,0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+d,0
+2b,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+10,1
+6,0
+1
+9,0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+6,0
+1
+9,0
+b,1
+9,0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+e,0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+e,0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+d,0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+9,0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+d,0
+1c,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1f,1
+6,0
+1
+9,0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+6,0
+1
+9,0
+b,1
+9,0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+e,0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+e,0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+d,0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+9,0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+d,0
+d,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1
+6,0
+1
+9,0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+6,0
+1
+9,0
+b,1
+9,0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+d,0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+9,0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+d,0
+2b,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+10,1
+6,0
+1
+9,0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+0
+4,2
+0
+1
+0
+7,3
+0
+26,1
+1e,0
+10,1
+6,0
+1
+9,0
+b,1
+9,0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+2b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+e,0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+12,1
+e,0
+b,1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+d,0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+0
+7,5
+0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1
+9,0
+12,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+0
+b,6
+0
+1c,1
+1e,0
+1d,1
+d,0
+1c,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1f,1
+6,0
+1
+9,0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+0
+4,2
+0
+1
+0
+7,3
+0
+17,1
+1e,0
+1f,1
+6,0
+1
+9,0
+b,1
+9,0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+3a,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+e,0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+21,1
+e,0
+b,1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+d,0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+0
+7,5
+0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+1
+9,0
+3,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+0
+b,6
+0
+d,1
+1e,0
+2c,1
+d,0
+d,1
+1e,0
+46,1
+979,0
+100 90 32
+1f9,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+1
+6,0
+1
+9,0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+0
+4,2
+0
+1
+0
+7,3
+0
+35,1
+1e,0
+1
+6,0
+1
+9,0
+b,1
+9,0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+1c,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+0
+c,4
+0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+3,1
+e,0
+b,1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+d,0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+0
+7,5
+0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+1
+9,0
+21,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+0
+b,6
+0
+2b,1
+1e,0
+e,1
+d,0
+2b,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+979,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/rszwdw/rszwdw.m b/xc/test/xsuite/xtest/tset/CH03/rszwdw/rszwdw.m
new file mode 100644
index 000000000..4f66bcf98
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/rszwdw/rszwdw.m
@@ -0,0 +1,1156 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XResizeWindow CH03
+void
+
+Display *display = Dsp;
+Window w;
+unsigned int width;
+unsigned int height;
+>>EXTERN
+
+/*
+ * Convenience routine that sets the 'w' argument to be simple window
+ * with a background of W_FG at position (10,8) and * size 23x9.
+ * The border width is 0.
+ */
+#define OW_X 10
+#define OW_Y 8
+#define OW_WIDTH 23
+#define OW_HEIGHT 9
+
+static Window
+onewin()
+{
+Window base;
+struct area area;
+
+ base = defwin(display);
+ setarea(&area, OW_X, OW_Y, OW_WIDTH, OW_HEIGHT);
+
+ w = crechild(display, base, &area);
+ XSetWindowBackground(display, w, W_FG);
+ XClearWindow(display, w);
+
+ return(base);
+}
+
+/*
+ * A window with subwindows.
+ */
+static char *Tsub[] = {
+ ".",
+ "top . (5, 5) 40x40",
+ "sub1 top (1,3) 4x6",
+ "sub2 top (8,3) 7x6",
+ "sub3 top (3,14) 12x9",
+ "sub4 top (28,10) 7x20",
+ "sub5 top (14,25) 11x12",
+};
+#define NTsub (NELEM(Tsub))
+#define NTsubInf (NTsub-1) /* Number of inferiors excluding base */
+
+>>ASSERTION Good A
+A call to xname changes the inside size of the specified window
+to
+.A width
+and
+.A height .
+>>STRATEGY
+Create test window with background of W_FG.
+Set width and height.
+Call xname.
+Verify new size on screen with checkarea().
+>>CODE
+Window base;
+struct area area;
+
+ base = onewin();
+
+ setarea(&area, OW_X, OW_Y, 23, 47);
+ width = area.width;
+ height = area.height;
+
+ XCALL;
+
+ if (checkarea(display, base, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Error in resizing window");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When a call to xname actually changes the size of the window, then
+the subwindows of the window are repositioned according to their win-gravity
+attribute and a
+.S GravityNotify
+event is generated for each repositioned subwindow after the
+.S ConfigureNotify
+event.
+>>STRATEGY
+For each win-gravity attribute (apart from UnmapGravity)
+ Create window with subwindows.
+ Enable SubstructureNotify|StructureNotify events on all windows.
+ Set win-gravity on window.
+ Call xname to resize window.
+ Verify window positions by pixel check.
+ Verify ConfigureNotify on resized window.
+ Verify ConfigureNotify on parent of resized window.
+ If NorthWestGravity || StaticGravity
+ Verify that no gravity events are received.
+ else
+ Verify GravityNotify events received on each repositioned subwindow.
+ Verify gravity events are received on the parent of each subwindow.
+ Verify that configure events arrive before gravity events.
+>>EXTERN
+
+extern struct valname S_wingravity[];
+extern int NS_wingravity;
+
+/* Values to resize onewin to (odd and even) */
+#define NEW_WIDTH 70
+#define NEW_HEIGHT 61
+
+#define BORDERW 1
+
+>>CODE
+Window base;
+struct buildtree *bt;
+struct buildtree *topbtp;
+struct valname *wgrav;
+XSetWindowAttributes setatts;
+int i;
+
+ width = NEW_WIDTH;
+ height = NEW_HEIGHT;
+
+ for (wgrav = S_wingravity; wgrav < S_wingravity+NS_wingravity; wgrav++) {
+
+ if (wgrav->val == UnmapGravity)
+ continue;
+
+ trace("-- Testing win-gravity %s", wgrav->name);
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tsub, NTsub);
+
+ topbtp = btntobtp(bt, "top");
+
+ /* Select for all structure events on all windows */
+ for (i = 0; i < NTsub; i++) {
+ XSelectInput(display, bt[i].wid,
+ SubstructureNotifyMask|StructureNotifyMask);
+ }
+
+ /*
+ * Set the win_gravity on windows below 'top'. Also set the
+ * borderwidths to make things more interesting, esp on mono
+ * displays.
+ */
+ setatts.win_gravity = wgrav->val;
+ for (i = 2; i < NTsub; i++) {
+ XChangeWindowAttributes(display, bt[i].wid, CWWinGravity, &setatts);
+ XSetWindowBorderWidth(display, bt[i].wid, BORDERW);
+ XSetWindowBorder(display, bt[i].wid, W_BG); /* to show up */
+ }
+
+ w = topbtp->wid;
+ XCALL;
+
+ PIXCHECK(display, base);
+
+#ifndef GENERATE_PIXMAPS
+ if (wingravevents(display, bt, wgrav->val))
+ CHECK;
+#endif
+ }
+
+ /*
+ * In the GENERATE_PIXMAPS case there will be a path-check error here,
+ * this is intentional. (To prove that wingravevents() is used in
+ * the verification case)
+ */
+ CHECKPASS(2*(NS_wingravity-1)); /* -1 for UnmapGravity */
+>>EXTERN
+
+/*
+ * Flags to say that we received particular events.
+ */
+#define WIN_CONFIG 001
+#define WIN_GRAVITY 002
+#define PAR_CONFIG 004
+#define PAR_GRAVITY 010
+
+
+static void
+calcxy(top, evtype, x, y)
+struct buildtree *top;
+int evtype;
+int *x;
+int *y;
+{
+int dx = NEW_WIDTH-top->width;
+int dy = NEW_HEIGHT-top->height;
+
+ switch (evtype) {
+ case NorthWestGravity:
+ break;
+ case NorthGravity:
+ *x += dx/2;
+ break;
+ case NorthEastGravity:
+ *x += dx;
+ break;
+ case WestGravity:
+ *y += dy/2;
+ break;
+ case CenterGravity:
+ *x += dx/2;
+ *y += dy/2;
+ break;
+ case EastGravity:
+ *x += dx;
+ *y += dy/2;
+ break;
+ case SouthWestGravity:
+ *y += dy;
+ break;
+ case SouthGravity:
+ *x += dx/2;
+ *y += dy;
+ break;
+ case SouthEastGravity:
+ *x += dx;
+ *y += dy;
+ break;
+ case StaticGravity:
+ break;
+ default:
+ delete("Internal error -- Unknown gravity in calcxy");
+ }
+}
+/*
+ * Routine that does the event checking for the gravity notify
+ * test.
+ */
+static
+wingravevents(display, bt, evtype)
+Display *display;
+struct buildtree *bt;
+int evtype;
+{
+XEvent ev;
+XConfigureEvent confgood;
+XGravityEvent gravgood;
+XConfigureEvent *cnp;
+XGravityEvent *gnp;
+struct buildtree *btp;
+struct buildtree *top;
+int gotgrav = 0;
+int i;
+int pass = 0, fail = 0;
+
+ top = btntobtp(bt, "top");
+
+ /* Set up events */
+ confgood.type = ConfigureNotify;
+ confgood.serial = 0L;
+ confgood.send_event = False;
+ confgood.display = display;
+ confgood.above = None; /* XXX */
+ confgood.override_redirect = False;
+
+ confgood.x = top->x;
+ confgood.y = top->y;
+ confgood.width = NEW_WIDTH;
+ confgood.height = NEW_HEIGHT;
+ confgood.border_width = 0;
+
+ gravgood.type = GravityNotify;
+ gravgood.serial = 0L;
+ gravgood.send_event = False;
+ gravgood.display = display;
+
+ while (getevent(display, &ev) > 0) {
+
+ switch (ev.type) {
+ case ConfigureNotify:
+ cnp = (XConfigureEvent*)&ev;
+
+ btp = btwtobtp(bt, cnp->window);
+ if (btp == NULL) {
+ report("Event received on unknown window");
+ FAIL;
+ continue;
+ }
+ trace("Event received for window '%s'", btp->name);
+
+ if (gotgrav) {
+ report("Configure event received after gravity event");
+ FAIL;
+ } else
+ CHECK;
+
+ /*
+ * Work out if this event occurred on the parent or the window.
+ */
+ if (cnp->window != cnp->event) {
+ if (!btp->parent || btp->parent->wid != cnp->event) {
+ report("Event received on other than the parent window");
+ FAIL;
+ } else
+ btp->uflags |= PAR_CONFIG;
+ } else {
+ btp->uflags |= WIN_CONFIG;
+ }
+
+ confgood.event = cnp->event;
+ confgood.window = cnp->window;
+
+ if (checkevent((XEvent*)&confgood, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ break;
+ case GravityNotify:
+ gnp = (XGravityEvent*)&ev;
+ gotgrav = 1;
+
+ btp = btwtobtp(bt, gnp->window);
+ if (btp == NULL) {
+ report("Event received on unknown window");
+ FAIL;
+ continue;
+ }
+ trace("Event received for window '%s'", btp->name);
+
+ /*
+ * Work out if this event occurred on the parent or the window.
+ */
+ if (gnp->window != gnp->event) {
+ if (!btp->parent || btp->parent->wid != gnp->event) {
+ report("Event received on other than the parent window");
+ FAIL;
+ } else
+ btp->uflags |= PAR_GRAVITY;
+ } else {
+ btp->uflags |= WIN_GRAVITY;
+ }
+
+ gravgood.event = gnp->event;
+ gravgood.window = gnp->window;
+ gravgood.x = btp->x;
+ gravgood.y = btp->y;
+ (void) calcxy(top, evtype, &gravgood.x, &gravgood.y);
+
+ if (checkevent((XEvent*)&gravgood, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ break;
+ default:
+ report("Unexpected event type %s", eventname(ev.type));
+ FAIL;
+ }
+ }
+
+ /*
+ * Since the previous loop is executed a variable number of times
+ * check that it was executed at least once and reset the pass count.
+ */
+ if (pass > 0)
+ pass = 1;
+ else
+ delete("No CHECK marks in wingravevents() loop");
+
+ /*
+ * Check correct events on the top (resized) window.
+ */
+ if (top->uflags & WIN_CONFIG)
+ CHECK;
+ else {
+ report("Configure event not received on window 'top'");
+ FAIL;
+ }
+ if (top->uflags & PAR_CONFIG)
+ CHECK;
+ else {
+ report("Configure event not received on parent of window 'top'");
+ FAIL;
+ }
+ if (top->uflags & (PAR_GRAVITY|WIN_GRAVITY)) {
+ report("Gravity events unexpectedly received on window 'top'");
+ FAIL;
+ } else
+ CHECK;
+
+ for (i = 2; i < NTsub; i++) {
+ if (evtype == NorthWestGravity || evtype == StaticGravity) {
+ if (bt[i].uflags & WIN_GRAVITY) {
+ report("Gravity event unexpectedly received on window '%s'", bt[i].name);
+ FAIL;
+ } else
+ CHECK;
+ if (bt[i].uflags & PAR_GRAVITY) {
+ report("Gravity event unexpectedly received on parent of window '%s'", bt[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ } else {
+
+ if (bt[i].uflags & WIN_GRAVITY)
+ CHECK;
+ else {
+ report("Gravity event not received on window '%s'", bt[i].name);
+ FAIL;
+ }
+ if (bt[i].uflags & PAR_GRAVITY)
+ CHECK;
+ else {
+ report("Gravity event not received on parent of window '%s'", bt[i].name);
+ FAIL;
+ }
+ }
+ if (bt[i].uflags & (PAR_CONFIG|WIN_CONFIG)) {
+ report("Configure event unexpectedly received on window '%s'", bt[i].name);
+ FAIL;
+ }
+ }
+ if (fail == 0 && pass != 14)
+ delete("Path check error in wingravevents got %d, expecting 14", pass);
+
+ if (fail == 0)
+ return(True);
+ else
+ return(False);
+}
+
+>>ASSERTION Good A
+When a call to xname actually changes the size of the window
+and the win-gravity of a subwindow is
+.S UnmapGravity
+and the subwindow is already mapped,
+then the subwindow is unmapped without being moved and an
+.S UnmapNotify
+event is generated.
+>>STRATEGY
+Create window with subwindows.
+Enable events on all subwindows.
+Enable events on window.
+Set win-gravity to UnmapGravity.
+Call xname to resize window.
+Verify windows are removed from screen.
+Verify window positions are unchanged.
+Verify that UnmapNotify events received on each subwindow.
+Verify that UnmapNotify events received on parent of each subwindow.
+>>EXTERN
+
+#define ON_PARENT 0x01
+#define ON_WINDOW 0x02
+
+>>CODE
+Window base;
+struct buildtree *bt;
+struct buildtree *topbtp;
+struct buildtree *btp;
+XEvent ev;
+XUnmapEvent good;
+XUnmapEvent *ump;
+XSetWindowAttributes setatts;
+XWindowAttributes atts;
+int i;
+
+ /* Set up good unmap event struct */
+ good.type = UnmapNotify;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = display;
+ good.from_configure = True;
+
+ width = NEW_WIDTH;
+ height = NEW_HEIGHT;
+
+ base = defwin(display);
+ bt = buildtree(display, base, Tsub, NTsub);
+
+ topbtp = btntobtp(bt, "top");
+
+ /* Select for all structure events on all windows */
+ for (i = 0; i < NTsub; i++) {
+ XSelectInput(display, bt[i].wid,
+ SubstructureNotifyMask|StructureNotifyMask);
+ }
+
+ /*
+ * Set the win_gravity on windows below 'top'. Also set the
+ * borderwidths to make things more interesting, esp on mono
+ * displays.
+ */
+ setatts.win_gravity = UnmapGravity;
+ for (i = 2; i < NTsub; i++) {
+ XChangeWindowAttributes(display, bt[i].wid, CWWinGravity, &setatts);
+ XSetWindowBorderWidth(display, bt[i].wid, BORDERW);
+ }
+
+ w = topbtp->wid;
+ XCALL;
+
+ if (checkarea(display, w, (struct area *)0, W_FG, W_FG, CHECK_ALL))
+ CHECK;
+ else {
+ report("UnmapGravity did not appear to remove subwindows");
+ FAIL;
+ }
+
+ while (getevent(display, &ev) > 0) {
+
+ if (ev.type != UnmapNotify)
+ continue;
+
+ ump = (XUnmapEvent*)&ev;
+
+ btp = btwtobtp(bt, ump->window);
+ if (btp == NULL) {
+ report("Event received on unknown window");
+ FAIL;
+ continue;
+ }
+ trace("Event received for window '%s'", btp->name);
+
+ /*
+ * Work out if this event occurred on the parent or the window.
+ */
+ if (ump->window != ump->event) {
+ if (!btp->parent || btp->parent->wid != ump->event) {
+ report("Event received on other than the parent window");
+ FAIL;
+ } else
+ btp->uflags |= ON_PARENT;
+ } else {
+ btp->uflags |= ON_WINDOW;
+ }
+
+ good.event = ump->event;
+ good.window = ump->window;
+
+ if (checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+ }
+
+ /*
+ * Go through the subwindows below top and check for events received
+ * and map_state and position unchanged.
+ */
+ for (i = 2; i < NTsub; i++) {
+ if (bt[i].uflags & ON_WINDOW)
+ CHECK;
+ else {
+ report("Unmap event not received on window '%s'", bt[i].name);
+ FAIL;
+ }
+ if (bt[i].uflags & ON_PARENT)
+ CHECK;
+ else {
+ report("Unmap event not received on parent of window '%s'", bt[i].name);
+ FAIL;
+ }
+
+ XGetWindowAttributes(display, bt[i].wid, &atts);
+ if (atts.map_state != IsUnmapped) {
+ report("map_state was %s, expecting IsUnmapped",
+ mapstatename(atts.map_state));
+ FAIL;
+ } else
+ CHECK;
+
+ if (atts.x != bt[i].x || atts.y != bt[i].y) {
+ report("Subwindow was moved after UnmapGravity used");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(1+6*(NTsub-2));
+>>ASSERTION Good A
+>># This assumes that the server either always does this or not.
+>># If the server is allowed to do this on some windows and not on
+>># others then the assertion needs re-wording.
+If the server uses the window's bit-gravity attribute:
+When a call to xname actually changes the size of the window, then
+the contents of the window are repositioned or discarded
+according to the bit-gravity attribute.
+Otherwise:
+When a call to xname actually changes the size of the window, then
+the contents of the window are discarded.
+>>STRATEGY
+For each value of bit-gravity.
+ Create window.
+ Draw into window.
+ Call xname to resize window.
+ Verify that either:
+ Window is clear.
+ else
+ Contents have been repositioned correctly.
+>>CODE
+struct valname *bitgrav;
+Window base;
+XSetWindowAttributes setatts;
+struct area area;
+extern struct valname S_bitgravity[];
+extern int NS_bitgravity;
+
+
+ for (bitgrav = S_bitgravity; bitgrav < S_bitgravity+NS_bitgravity; bitgrav++) {
+
+ trace("-- Trying bitgravity of %s", bitgrav->name);
+ setarea(&area, OW_X, OW_Y, OW_WIDTH, OW_HEIGHT);
+
+ base = onewin();
+ XSetWindowBackground(display, w, W_BG);
+ dset(display, w, W_FG);
+
+ setatts.bit_gravity = bitgrav->val;
+ XChangeWindowAttributes(display, w, CWBitGravity, &setatts);
+
+ width = NEW_WIDTH;
+ height = NEW_HEIGHT;
+
+ XCALL;
+
+ switch (bitgrav->val) {
+ case NorthGravity: case CenterGravity: case SouthGravity:
+ area.x += (NEW_WIDTH-OW_WIDTH)/2;
+ break;
+ case NorthEastGravity: case EastGravity: case SouthEastGravity:
+ area.x += (NEW_WIDTH-OW_WIDTH);
+ break;
+ }
+ switch (bitgrav->val) {
+ case CenterGravity: case WestGravity: case EastGravity:
+ area.y += (NEW_HEIGHT-OW_HEIGHT)/2;
+ break;
+ case SouthGravity: case SouthEastGravity: case SouthWestGravity:
+ area.y += (NEW_HEIGHT-OW_HEIGHT);
+ break;
+ }
+
+ if (checkarea(display, base, (struct area *)0, W_BG, W_BG, CHECK_ALL|CHECK_DIFFER)) {
+
+ /*
+ * The whole base window was clear, the server is not using
+ * bit-gravity, or else we are trying ForgetGravity.
+ */
+ if (bitgrav->val != ForgetGravity)
+ trace("server not using bit-gravity");
+ CHECK;
+ } else {
+ /*
+ * For ForgetGravity then we must not get here.
+ */
+ if (bitgrav->val == ForgetGravity) {
+ report("Contents were not discarded with ForgetGravity");
+ FAIL;
+ } else if (checkarea(display, base, &area, W_FG, W_BG, CHECK_ALL)) {
+ CHECK;
+ } else {
+ report("bits positioned incorrectly for bit-gravity of %s",
+ bitgrav->name);
+ FAIL;
+ }
+ }
+ }
+
+ CHECKPASS(NS_bitgravity);
+
+>>ASSERTION Good A
+When the window
+is a root window, then a call to xname has no effect.
+>>STRATEGY
+Call xname on root window.
+Touch test only.
+>>CODE
+
+ w = DefaultRootWindow(display);
+ width = NEW_WIDTH;
+ height = NEW_HEIGHT;
+
+ XCALL;
+
+ if (fail == 0)
+ PASS;
+>>ASSERTION Good A
+When the override-redirect attribute of the window is
+.S False
+and some
+other client has selected
+.S SubstructureRedirectMask
+on the parent window, then a
+.S ConfigureRequest
+event is generated, and the window size is not changed.
+>>STRATEGY
+Create windows.
+Set override-redirect to False.
+Create second client.
+Select SubstructureRedirectMask for second client on parent of window.
+Call xname.
+Verify that a ConfigureRequest event is generated.
+Verify that window configuration has not changed on the screen.
+>>CODE
+Window base;
+XConfigureRequestEvent good;
+XSetWindowAttributes setatts;
+Display *client2;
+XEvent ev;
+XImage *imp;
+int n;
+
+ base = onewin();
+
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+
+ client2 = opendisplay();
+ XSelectInput(client2, base, SubstructureRedirectMask);
+ XSync(client2, False);
+
+ width = NEW_WIDTH;
+ height = NEW_HEIGHT;
+
+ good.type = ConfigureRequest;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = base;
+ good.window = w;
+ good.x = OW_X;
+ good.y = OW_Y;
+ good.width = NEW_WIDTH;
+ good.height = NEW_HEIGHT;
+ good.border_width = 0;
+ good.above = None;
+ good.detail = Above;
+ good.value_mask = CWWidth | CWHeight;
+
+ imp = savimage(display, base);
+
+ XCALL;
+ XSync(client2, False);
+
+ n = getevent(client2, &ev);
+ if (n != 1) {
+ report("Expecting 1 event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ if (compsavimage(display, base, imp))
+ CHECK;
+ else {
+ report("Screen contents changed");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When another client has selected
+.S ResizeRedirectMask
+on the window and the size would be changed, then a
+.S ResizeRequest
+event is generated and the size is not changed.
+>># Other changes take place though.
+>>STRATEGY
+Create windows.
+Set override-redirect to False.
+Create second client.
+Select ResizeRedirectMask for second client on window.
+Set parameters to move and resize window.
+Call xname.
+Verify that a ResizeRequest event is generated.
+Verify that window has not changed size but that other changes have occurred.
+>>CODE
+Window base;
+XResizeRequestEvent good;
+XSetWindowAttributes setatts;
+Display *client2;
+XEvent ev;
+struct area area;
+int n;
+
+ base = onewin();
+
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+
+ client2 = opendisplay();
+ XSelectInput(client2, w, ResizeRedirectMask);
+ XSync(client2, False);
+
+ width = NEW_WIDTH;
+ height = NEW_HEIGHT;
+
+ good.type = ResizeRequest;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = client2;
+ good.window = w;
+ good.width = NEW_WIDTH;
+ good.height = NEW_HEIGHT;
+
+ XCALL;
+ XSync(client2, False);
+
+ n = getevent(client2, &ev);
+ if (n != 1) {
+ report("Expecting 1 event");
+ report("Received %d", n);
+ FAIL;
+ } else
+ CHECK;
+
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ /* Window does not change size */
+ setarea(&area, OW_X, OW_Y, OW_WIDTH, OW_HEIGHT);
+ if (checkarea(display, base, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Size of window not as expected");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When another client has selected
+.S ResizeRedirectMask
+on the window and another client has selected
+.S SubstructureRedirectMask
+on the parent window
+and the override-redirect attribute of the window is
+.S False ,
+then a
+.S ConfigureRequest
+event is generated, and the window size is not changed.
+>>STRATEGY
+Create windows.
+Set override-redirect to False.
+Create second client.
+Select ResizeRedirectMask for second client on window.
+Create third client.
+Select SubstructureRedirectMask for third client on parent of window.
+Call xname.
+Verify that a ConfigureRequest event is generated for client 3.
+Verify that no ResizeRequest event is generated for client 2.
+Verify that window configuration is not changed.
+>>CODE
+Window base;
+XConfigureRequestEvent good;
+XSetWindowAttributes setatts;
+Display *client2;
+Display *client3;
+XEvent ev;
+XImage *imp;
+int n;
+
+ base = onewin();
+
+ setatts.override_redirect = False;
+ XChangeWindowAttributes(display, w, CWOverrideRedirect, &setatts);
+
+ client2 = opendisplay();
+ XSelectInput(client2, w, ResizeRedirectMask);
+ XSync(client2, False);
+
+ client3 = opendisplay();
+ XSelectInput(client3, base, SubstructureRedirectMask);
+ XSync(client3, False);
+
+ width = NEW_WIDTH;
+ height = NEW_HEIGHT;
+
+ imp = savimage(display, base);
+
+ XCALL;
+ XSync(client2, False);
+ XSync(client3, False);
+
+ n = getevent(client2, &ev);
+ if (n != 0) {
+ report("Got an event unexpectedly for client selecting ResizeRedirect");
+ report(" Event type was %s", eventname(ev.type));
+ FAIL;
+ } else
+ CHECK;
+
+ good.type = ConfigureRequest;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = client3;
+ good.parent = base;
+ good.window = w;
+ good.x = OW_X;
+ good.y = OW_Y;
+ good.width = NEW_WIDTH;
+ good.height = NEW_HEIGHT;
+ good.border_width = 0;
+ good.above = None;
+ good.detail = Above;
+ good.value_mask = CWWidth | CWHeight;
+
+ n = getevent(client3, &ev);
+ if (n != 1) {
+ report("Expecting one configure events");
+ FAIL;
+ } else
+ CHECK;
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ if (compsavimage(display, base, imp))
+ CHECK;
+ else {
+ report("Window changed when client was selecting SubstructureRedirect");
+ FAIL;
+ }
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When the size actually changes, then a
+.S ConfigureNotify
+event is generated.
+>>STRATEGY
+Create windows.
+Enable SubstructureNotify events.
+Call xname such that the window configuration changes.
+Verify that a ConfigureNotify event is generated.
+Call xname again with the same parameters.
+Verify that no ConfigureNotify event is generated.
+>>CODE
+XConfigureEvent good;
+XEvent ev;
+int n;
+
+ (void) onewin();
+
+ XSelectInput(display, w, StructureNotifyMask);
+
+ width = NEW_WIDTH;
+ height = NEW_HEIGHT;
+
+
+ XCALL;
+
+ good.type = ConfigureNotify;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = display;
+ good.event = w;
+ good.window = w;
+ good.x = OW_X;
+ good.y = OW_Y;
+ good.width = NEW_WIDTH;
+ good.height = NEW_HEIGHT;
+ good.border_width = 0;
+ good.above = None;
+ good.override_redirect = False;
+
+ n = getevent(display, &ev);
+ if (n != 1) {
+ report("Expecting 1 event, got %d", n);
+ FAIL;
+ } else
+ CHECK;
+ if (n > 0 && checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ /* Call again */
+ XCALL;
+ if ((n = XPending(display)) == 0)
+ CHECK;
+ else {
+ report("Received event when configuration was not changed");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>># ASSERTION
+>># There are Expose events to consider here.
+>># Also any window that is uncovered etc.
+>>ASSERTION Good A
+When a call to xname actually changes the size of the window, then
+.S Expose
+events are generated for regions that are newly visible or for
+which the contents have been lost.
+>>STRATEGY
+Create windows.
+Set test window background to W_BG.
+Set up window with setforexpose().
+Enable expose events.
+Resize window with xname.
+Verify that correct expose events were received with exposecheck().
+>>CODE
+
+ (void) onewin();
+
+ XSetWindowBackground(display, w, W_BG);
+ XClearWindow(display, w);
+ setforexpose(display, w);
+
+ XSelectInput(display, w, ExposureMask);
+
+ width = NEW_WIDTH;
+ height = NEW_HEIGHT;
+
+ XCALL;
+
+ if (exposecheck(display, w))
+ CHECK;
+ else {
+ report("Correct expose events not received after resize");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create window.
+Call setforexpose() on unobscured window.
+Create second window to partially obscure this window.
+Create second client to receive events on.
+Resize window with xname, ensuring that first window is now unobscured.
+Verify for correct expose or backing store behaviour with exposecheck().
+>>CODE
+Window base, one , two;
+struct area area;
+Display *client2;
+
+/* Create windows. */
+ base = defwin(display);
+
+ setarea(&area, OW_X+5, OW_Y+5, OW_WIDTH, OW_HEIGHT);
+ one = crechild(display, base, &area);
+ setforexpose(display, one);
+
+ setarea(&area, OW_X, OW_Y, OW_WIDTH, OW_HEIGHT);
+ two = crechild(display, base, &area);
+
+ client2 = opendisplay();
+ XSelectInput(client2, one, ExposureMask);
+ XSync(client2, False);
+
+ w = two;
+ width = 3;
+ height = 3;
+ XCALL;
+ XSync(client2, False);
+
+ if (exposecheck(client2, one))
+ CHECK;
+ else {
+ report("Neither Expose events or backing store processing");
+ report(" could correctly restore the window contents.");
+ FAIL;
+ }
+ CHECKPASS(1);
+>># ASSERTION
+>># -- I don't know when this applies ..sr
+>># When backing store is being maintained for the window, its
+>># inferiors, or other newly visible windows, then the contents
+>># are either discarded or changed to reflect the current screen contents.
+>>ASSERTION Bad A
+When
+.M width
+or
+.M height
+is zero, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a test window.
+Call xname with width of zero.
+Verify a BadValue error occurred.
+Call xname with height of zero.
+Verify a BadValue error occurred.
+Call xname with height and width of zero.
+Verify a BadValue error occurred.
+>>CODE BadValue
+
+/* Create a test window. */
+ w = defwin(display);
+
+/* Call xname with width of zero. */
+ width = 0;
+ height = OW_HEIGHT;
+ XCALL;
+
+/* Verify a BadValue error occurred. */
+ if (geterr() != BadValue)
+ FAIL;
+ else
+ CHECK;
+
+/* Call xname with height of zero. */
+ width = OW_WIDTH;
+ height = 0;
+ XCALL;
+
+/* Verify a BadValue error occurred. */
+ if (geterr() != BadValue)
+ FAIL;
+ else
+ CHECK;
+
+/* Call xname with height and width of zero. */
+ width = 0;
+ height = 0;
+ XCALL;
+
+/* Verify a BadValue error occurred. */
+ if (geterr() != BadValue)
+ FAIL;
+ else
+ CHECK;
+ CHECKPASS(3);
+
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/stwdwbg/stwdwbg.m b/xc/test/xsuite/xtest/tset/CH03/stwdwbg/stwdwbg.m
new file mode 100644
index 000000000..6302a6f3a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/stwdwbg/stwdwbg.m
@@ -0,0 +1,112 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWindowBackground CH03
+void
+
+Display *display = Dsp;
+Window w;
+unsigned long background_pixel = W_FG;
+>>EXTERN
+static Window parent;
+static struct area ap;
+
+static void
+inittp()
+{
+ tpstartup();
+
+ ap.x = 50;
+ ap.y = 60;
+ ap.width = 20;
+ ap.height= 20;
+}
+>>SET tpstartup inittp
+>>ASSERTION Good A
+A call to xname sets the background of the window to the pixel value
+specified by
+.A background_pixel .
+>>STRATEGY
+Create a window.
+Set the background_pixel by calling xname.
+Verify the background pixel was set to background_pixel using XGetPixel.
+>>CODE
+XEvent event;
+
+ parent = defdraw(display, VI_WIN);
+
+ w = creunmapchild(display, parent, &ap);
+
+ XCALL;
+
+ XSelectInput(display, w, ExposureMask);
+ XMapWindow(display, w);
+ XWindowEvent(display,w,ExposureMask, &event); /* Await exposure */
+
+ if(getpixel(display, w, 1, 1) != W_FG) {
+ report("%s did not set the background pixel to W_FG.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When the background is changed, then the
+window contents are not changed.
+>>STRATEGY
+Create a window.
+Set the background-pixmap
+Map window over a plain background.
+Change background pixel.
+Verify that background has not changed.
+>>CODE
+Pixmap pm;
+XEvent event;
+XVisualInfo *vp;
+XSetWindowAttributes attributes;
+
+ for(resetvinf(VI_WIN); nextvinf(&vp); ) {
+ parent = makewin(display, vp);
+
+ w = creunmapchild(display, parent, &ap);
+
+ pm = maketile(display, w);
+ XSetWindowBackgroundPixmap(display, w, pm);
+
+ XSelectInput(display, w, ExposureMask);
+ XMapWindow(display, w);
+ /* Wait for window to be exposed */
+ XWindowEvent(display,w,ExposureMask, &event);
+
+ background_pixel = W_BG;
+ XCALL;
+
+ if ( isdeleted() )
+ continue;
+
+ if (checktile(display, w, NULL, 0, 0, pm))
+ CHECK;
+ else
+ FAIL;
+
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Bad A
+.ER BadMatch wininputonly
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/stwdwbgpxm/stwdwbgpxm.m b/xc/test/xsuite/xtest/tset/CH03/stwdwbgpxm/stwdwbgpxm.m
new file mode 100644
index 000000000..5abdcaba6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/stwdwbgpxm/stwdwbgpxm.m
@@ -0,0 +1,347 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWindowBackgroundPixmap CH03
+void
+
+Display *display = Dsp;
+Window w;
+Pixmap background_pixmap;
+>>EXTERN
+static struct area ap;
+static Window parent;
+
+static void inittp()
+{
+ tpstartup();
+
+ ap.x = 50;
+ ap.y = 60;
+ ap.width = 20;
+ ap.height= 20;
+}
+
+static void
+perform_map(display, w)
+Display *display;
+Window w;
+{
+ XEvent event;
+/* Await visibilty */
+ XSelectInput(display, w , ExposureMask);
+ XMapWindow(display, w);
+ XWindowEvent(display, w, ExposureMask, &event);
+}
+
+>>SET tpstartup inittp
+>>ASSERTION Good A
+A call to xname sets the background pixmap of the window
+to the pixmap specified by
+.A background_pixmap .
+>>STRATEGY
+Create a window with a background pixel.
+Change the background-pixmap using xname.
+Verify the background-pixmap was set.
+>>CODE
+
+ parent = defdraw(display, VI_WIN);
+
+ w = creunmapchild(display, parent, &ap);
+ XSetWindowBackground(display, w, W_FG);
+ perform_map(display, w);
+
+ background_pixmap = maketile(display, w);
+ XCALL;
+
+ XUnmapWindow(display, w);
+ perform_map(display, w);
+
+ if (checktile( display, w, NULL, 0, 0, background_pixmap))
+ CHECK;
+ else {
+ report("%s did not set the background pixmap correctly",
+ TestName);
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+>># ### This should go in XClearWindow etc.
+When
+.A background_pixmap
+is
+.S ParentRelative ,
+then each time the background pixmap is required it is taken from the
+parent window at the time that it is required,
+>>#the background pixmap of the parent window is used
+with the background tile origin aligned with the origin of
+the parent window.
+>># This is not 'the background is set to the background of the parent window'
+>>STRATEGY
+Set background-pixmap to ParentRelative.
+For a variety of parent backgrounds
+ Clear child window.
+ Verify that background changes to that set for the parent.
+>>CODE
+Pixmap pm;
+unsigned int border_width = 2;
+
+ background_pixmap = ParentRelative;
+
+ parent = defdraw(display, VI_WIN);
+ w = creunmapchild(display, parent, &ap);
+ XSetWindowBorderWidth(display, w, border_width);
+ perform_map(display, w);
+ XCALL;
+
+ pm = maketile(display, parent);
+ XSetWindowBackgroundPixmap(display, parent, pm);
+ XClearWindow(display, w);
+
+ if (checktile(display, w, (struct area *)0, -ap.x-border_width, -ap.y-border_width, pm))
+ CHECK;
+ else {
+ report("ParentRelative check failed for 'maketile' background");
+ FAIL;
+ }
+
+ pm = XCreatePixmap(display, parent, 10, 17, (int)getdepth(display, w));
+ dclear(display, pm);
+ pattern(display, pm);
+ XSetWindowBackgroundPixmap(display, parent, pm);
+ XClearWindow(display, w);
+ if (checktile(display, w, (struct area *)0, -ap.x-border_width, -ap.y-border_width, pm))
+ CHECK;
+ else {
+ report("ParentRelative check failed for 'pattern' background");
+ FAIL;
+ }
+
+ XSetWindowBackground(display, parent, W_FG);
+ XClearWindow(display, w);
+ if (checkarea(display, w, (struct area *)0, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("ParentRelative check failed for plain background set to W_FG");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Good B 1
+When the background pixmap of a root window is set to
+.S ParentRelative ,
+then the default background is restored.
+>>ASSERTION Good A
+When the background pixmap is set to
+.S None ,
+then the window has no defined background.
+>>STRATEGY
+Set window-pixmap to None by calling xname.
+Map window over a patterned background.
+Verify that contents of the window are the same as the parent's.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ parent = makedrawable(display, vp);
+ pattern(display, parent);
+
+ w = mkwinchild(display, vp, &ap, False, parent, 0);
+
+/* Set the background to ensure it gets unset */
+ XSetWindowBackground(display, w, W_FG);
+
+ background_pixmap = None;
+ XCALL;
+
+ perform_map(display, w);
+
+ if (isdeleted())
+ continue;
+
+ if( !checkpattern(display, parent, &ap))
+ {
+ report("%s did not leave the child", TestName);
+ report("window background transparent");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good B 1
+When the background pixmap of
+a root window is set to
+.S None ,
+then the default background is restored.
+>>ASSERTION Good A
+.ER BadPixmap ParentRelative None
+>>ASSERTION Bad C
+If windows with depth other than one are supported:
+When
+.A background_pixmap
+and the window do not have the same depth, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Use depth of 1 for the pixmap.
+Find a visual not of depth 1.
+If not such a visual
+ UNSUPPORTED
+else
+ Attempt to set background_pixmap to the depth 1 pixmap.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+Pixmap pm;
+XVisualInfo *vp;
+int found = 0;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ if (vp->depth != 1) {
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found) {
+ unsupported("Only windows with depth one are supported");
+ return;
+ }
+
+ pm = XCreatePixmap(display, DRW(display), 2, 2, 1);
+ background_pixmap = pm;
+
+ parent = defdraw(display, VI_WIN);
+ w = mkwinchild(display, vp, &ap, False, parent, 2);
+
+ XCALL;
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+ XFreePixmap(display, pm);
+>>ASSERTION Bad C
+If multiple screens are supported:
+When
+.A background_pixmap
+and the window are not created for the same screen, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If there is a pixmap depth on the alternate screen that has the same
+depth as a visual on the test screen then
+ Create pixmap on alternate screen.
+ Attempt to set background-pixmap with the pixmap
+ Verify that a BadMatch error occurs.
+else
+ UNSUPPORTED
+>>CODE BadMatch
+XVisualInfo *vp;
+Pixmap pm;
+int *depths;
+int count;
+int found = 0;
+int i;
+
+ if (config.alt_screen == -1) {
+ unsupported("No alternate screen supported");
+ return;
+ }
+
+ depths = XListDepths(display, config.alt_screen, &count);
+
+ for (resetvinf(VI_WIN); (!found && nextvinf(&vp)); ) {
+ for (i = 0; i < count; i++) {
+ if (depths[i] == vp->depth)
+ {
+ found = 1;
+ break;
+ }
+ }
+ }
+
+ if (!found) {
+ unsupported("Pixmaps of same depth as a window not supported on alt screen");
+ return;
+ }
+
+ parent = defdraw(display, VI_WIN);
+ w = creunmapchild(display, parent, &ap);
+
+ pm = XCreatePixmap(display, RootWindow(display, config.alt_screen),
+ 2, 3, vp->depth);
+ background_pixmap = pm;
+
+ XCALL;
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+ XFreePixmap(display, pm);
+>>ASSERTION Bad C
+If multiple window depths are supported:
+When
+.A background_pixmap
+is
+.S ParentRelative
+and the window and the parent window do not have the same depth, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If two different depth windows are supported.
+ Create window with different depth to parent.
+ Attempt to set background_pixmap to ParentRelative.
+ Verify that a BadMatch error occurs.
+else
+ UNSUPPORTED.
+>>CODE BadMatch
+XVisualInfo *vp;
+XVisualInfo *vp2 = 0;
+int found = 0;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ if (vp2 == 0) {
+ vp2 = vp;
+ } else if (vp->depth != vp2->depth) {
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found) {
+ unsupported("Only one depth of window is supported");
+ return;
+ }
+
+ parent = makedrawable(display, vp2);
+ w = mkwinchild(display, vp, &ap, False, parent, 1);
+
+ background_pixmap = ParentRelative;
+ (void)XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+.ER BadMatch wininputonly
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/stwdwbrdr/stwdwbrdr.m b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdr/stwdwbrdr.m
new file mode 100644
index 000000000..5acd30c0d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdr/stwdwbrdr.m
@@ -0,0 +1,185 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWindowBorder CH03
+void
+
+Display *display = Dsp;
+Window w;
+unsigned long border_pixel;
+>>EXTERN
+static Window parent;
+static struct area ap;
+
+static void
+inittp()
+{
+ tpstartup();
+
+ ap.x = 50;
+ ap.y = 60;
+ ap.width = 20;
+ ap.height= 20;
+}
+>>SET tpstartup inittp
+>>ASSERTION Good A
+A call to xname sets the border of the window to the pixel value
+specified by
+.A border_pixel .
+>>STRATEGY
+Create a window, with a wide, tiled, border.
+Set the border-pixel by calling xname.
+Unmap then remap the window, to ensure the border change occurs.
+Get the border-pixel.
+Verify the border pixel was set.
+Reset the border-pixel by calling xname.
+>># The unmap/remap is to allow this test to pass, even if the borders
+>># are not being repainted as soon as the pixel is changed. stu
+Unmap then remap the window, to ensure the border change occurs.
+Get the border-pixel.
+Verify the border pixel was set.
+>>CODE
+unsigned long pixel;
+Pixmap pm;
+XEvent event;
+
+ parent = defdraw(display, VI_WIN);
+
+ w = creunmapchild(display, parent, &ap);
+
+ XSetWindowBorderWidth(display, w, 5);
+ XSetWindowBorderPixmap(display, w, maketile(display,w));
+
+ XSelectInput(display, w, ExposureMask);
+ XMapWindow(display, w);
+ XWindowEvent(display,w,ExposureMask, &event); /* Await exposure */
+
+ pixel = getpixel(display, parent, ap.x, ap.y);
+ border_pixel = (pixel == W_FG) ? W_BG:W_FG;
+ trace("pixel at ap.x,ap.y: %d . Setting to %d", pixel, border_pixel);
+
+ XCALL;
+ XUnmapWindow(display, w);
+ XMapWindow(display, w);
+ XWindowEvent(display,w,ExposureMask, &event); /* Await exposure */
+
+ if(getpixel(display, parent, ap.x, ap.y) != border_pixel) {
+ report("%s did not set the border pixel to %d",
+ TestName, border_pixel);
+ FAIL;
+ } else
+ CHECK;
+
+ border_pixel = pixel;
+ trace("Now setting border to %d", border_pixel);
+
+ XCALL;
+ XUnmapWindow(display, w);
+ XMapWindow(display, w);
+ XWindowEvent(display,w,ExposureMask, &event); /* Await exposure */
+
+ if(getpixel(display, parent, ap.x, ap.y) != border_pixel) {
+ report("%s did not set the border pixel to %d",
+ TestName, border_pixel);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When the border pixel value is changed, then the border is repainted.
+>>STRATEGY
+Create a window with a wide, tiled border.
+Set the border-pixel by calling xname.
+Unmap then remap the window, to ensure the border change occurs.
+Get the border-pixel.
+Verify the border pixel was set.
+>>CODE
+unsigned long pixel;
+Pixmap pm;
+XEvent event;
+
+/* Create windows */
+ parent = defdraw(display, VI_WIN);
+ w = creunmapchild(display, parent, &ap);
+/* Set up child window border for test */
+ XSetWindowBorderWidth(display, w, 5);
+ XSetWindowBorderPixmap(display, w, maketile(display,w));
+/* Ensure the window is mapped and visible */
+ XSelectInput(display, w, ExposureMask);
+ XMapWindow(display, w);
+ XWindowEvent(display,w,ExposureMask, &event); /* Await exposure */
+
+ pixel = getpixel(display, parent, ap.x, ap.y);
+ border_pixel = (pixel == W_FG) ? W_BG:W_FG;
+ trace("pixel at ap.x,ap.y: %d . Setting to %d", pixel, border_pixel);
+
+ XCALL;
+
+ if(getpixel(display, parent, ap.x, ap.y) != border_pixel) {
+ report("%s did not cause a repaint of the border", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+The border pixel value is truncated to the depth of the window.
+>>STRATEGY
+For each visual
+ Set border-pixel to various values.
+ Read one pixel back from the border.
+ Verify that this pixel has been truncated to depth of window.
+>>CODE
+XVisualInfo *vp;
+static int pixlist[] = {
+ 0, 1, 3, 4, 17, 18, 200, 300, 303,
+ 0x1234, 0x12345, 0x123456, 0x1234567, 0x12345678};
+long pix;
+long borderpix;
+int i;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ parent = makedrawable(display, vp);
+
+ for (i = 0; i < NELEM(pixlist); i++) {
+ pix = pixlist[i];
+
+ border_pixel = pix;
+
+ w = crechild(display, parent, &ap);
+ XSetWindowBorderWidth(display, w, 3);
+
+ XCALL;
+
+ borderpix = getpixel(display, parent, ap.x, ap.y);
+ if (borderpix == (pix & DEPTHMASK(vp->depth)))
+ CHECK;
+ else {
+ report("Border pixel was not truncated (value 0x%x)", pix);
+ report(" Was 0x%x, expecting 0x%x", borderpix,
+ pix & DEPTHMASK(vp->depth));
+ FAIL;
+ }
+ }
+ }
+
+ CHECKPASS(nvinf() * NELEM(pixlist));
+
+>>ASSERTION Bad A
+.ER BadMatch wininputonly
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/a1.dat b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/a1.dat
new file mode 100644
index 000000000..d548c3cbc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/a1.dat
@@ -0,0 +1,271 @@
+! $XConsortium$
+100 90 32
+17a2,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+48,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+48,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+48,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+49,0
+3,1
+4,0
+3,1
+4,0
+3,1
+4,0
+3,1
+49,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+49,0
+2,1
+14,0
+2,1
+49,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+49,0
+2,1
+14,0
+2,1
+49,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+49,0
+3,1
+4,0
+3,1
+4,0
+3,1
+4,0
+3,1
+49,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+48,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+48,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+48,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+14,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/a2.dat b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/a2.dat
new file mode 100644
index 000000000..d548c3cbc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/a2.dat
@@ -0,0 +1,271 @@
+! $XConsortium$
+100 90 32
+17a2,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+48,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+48,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+48,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+49,0
+3,1
+4,0
+3,1
+4,0
+3,1
+4,0
+3,1
+49,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+49,0
+2,1
+14,0
+2,1
+49,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+49,0
+2,1
+14,0
+2,1
+49,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+49,0
+3,1
+4,0
+3,1
+4,0
+3,1
+4,0
+3,1
+49,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+48,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+48,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+48,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+14,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/a3.dat b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/a3.dat
new file mode 100644
index 000000000..d548c3cbc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/a3.dat
@@ -0,0 +1,271 @@
+! $XConsortium$
+100 90 32
+17a2,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+48,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+48,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+48,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+49,0
+3,1
+4,0
+3,1
+4,0
+3,1
+4,0
+3,1
+49,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+49,0
+2,1
+14,0
+2,1
+49,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+49,0
+2,1
+14,0
+2,1
+49,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+0
+1
+14,0
+1
+0
+1
+48,0
+2,1
+2,0
+1
+14,0
+1
+2,0
+2,1
+49,0
+3,1
+4,0
+3,1
+4,0
+3,1
+4,0
+3,1
+49,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+48,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+48,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+48,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+14,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/stwdwbrdrp.m b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/stwdwbrdrp.m
new file mode 100644
index 000000000..b7cb6c311
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrp/stwdwbrdrp.m
@@ -0,0 +1,245 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWindowBorderPixmap CH03
+void
+
+Display *display = Dsp;
+Window w;
+Pixmap border_pixmap;
+>>EXTERN
+static struct area ap;
+static Window parent;
+
+static void
+inittp()
+{
+ tpstartup();
+
+ ap.x = 50;
+ ap.y = 60;
+ ap.width = 20;
+ ap.height= 20;
+}
+
+static void
+perform_map(display, w)
+Display *display;
+Window w;
+{
+ XEvent event;
+/* Await visibilty */
+ XSelectInput(display, w , ExposureMask);
+ XMapWindow(display, w);
+ XWindowEvent(display, w, ExposureMask, &event);
+}
+
+>>SET tpstartup inittp
+>>ASSERTION Good A
+A call to xname sets the border pixmap of the window to the pixmap
+specified by
+.A border_pixmap .
+>>STRATEGY
+Create a window, with a wide border.
+Set the border-pixel by calling xname.
+Unmap then remap the window, to ensure the border change occurs.
+Get the border-pixel.
+Verify the border pixel was set.
+Reset the border-pixel by calling xname.
+>># The unmap/remap is to allow this test to pass, even if the borders
+>># are not being repainted as soon as the pixel is changed. stu
+Unmap then remap the window, to ensure the border change occurs.
+Get the border-pixel.
+Verify the border pixel was set.
+>>CODE
+
+ parent = defdraw(display, VI_WIN);
+
+ w = creunmapchild(display, parent, &ap);
+
+ XSetWindowBorderWidth(display, w, 5);
+ XSetWindowBorder(display, w, W_FG);
+
+ perform_map(display, w);
+
+ border_pixmap = maketile(display, w);
+ XCALL;
+
+ XUnmapWindow(display, w);
+ perform_map(display,w);
+
+ PIXCHECK(display, parent);
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When the border pixmap is changed, then the border is repainted.
+>>STRATEGY
+Create a mapped window with a wide border.
+Set the border-pixmap by calling xname.
+Verify the border pixmap was repainted.
+>>CODE
+
+/* Create windows */
+ parent = defdraw(display, VI_WIN);
+ w = creunmapchild(display, parent, &ap);
+/* Set up child window border for test */
+ XSetWindowBorderWidth(display, w, 5);
+ XSetWindowBorder(display, w, W_FG);
+
+ perform_map(display, w);
+
+ border_pixmap = maketile(display,w);
+ XCALL;
+
+ PIXCHECK(display, parent);
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When
+.A border_pixmap
+is
+.S CopyFromParent ,
+then the border-pixmap attribute is copied from the parent window.
+>>STRATEGY
+Create parent window.
+Set parent border-pixmap attribute.
+Set child window border-pixmap to CopyFromParent.
+Ensure that window is mapped.
+Pixmap verify to check that border is correct.
+>>CODE
+Pixmap pm;
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ parent = makedrawable(display, vp);
+
+ w = parent;
+ border_pixmap = maketile(display, parent);
+ XCALL;
+
+ w = mkwinchild(display, vp, &ap, False, parent, 5);
+ perform_map(display, w);
+
+ border_pixmap = CopyFromParent;
+ XCALL;
+
+ PIXCHECK(display, parent);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good B 1
+When
+.A border_pixmap
+is
+.S CopyFromParent
+and the window is a root window, then the default border pixmap is restored.
+>>ASSERTION Bad A
+.ER BadPixmap CopyFromParent
+>>ASSERTION Bad C
+If windows with depth other than one are supported:
+When
+.A border_pixmap
+and the window do not have the same depth, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Use depth of 1 for the pixmap.
+Find a visual not of depth 1.
+If not such a visual
+ UNSUPPORTED
+else
+ Attempt to set border_pixmap to the depth 1 pixmap.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+Pixmap pm;
+XVisualInfo *vp;
+int found = 0;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ if (vp->depth != 1) {
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found) {
+ unsupported("Only windows with depth one are supported");
+ return;
+ }
+
+ pm = XCreatePixmap(display, DRW(display), 2, 2, 1);
+ border_pixmap = pm;
+
+ parent = defdraw(display, VI_WIN);
+ w = mkwinchild(display, vp, &ap, False, parent, 2);
+
+ XCALL;
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+ XFreePixmap(display, pm);
+>>ASSERTION Bad C
+If multiple window depths are supported:
+When
+.A border_pixmap
+is
+.S CopyFromParent ,
+and the window does not have the same depth as the parent window,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If two different depth windows are supported.
+ Create window with different depth to parent.
+ Attempt to set border_pixmap to ParentRelative.
+ Verify that a BadMatch error occurs.
+else
+ UNSUPPORTED.
+>>CODE BadMatch
+XVisualInfo *vp;
+XVisualInfo *vp2 = 0;
+int found = 0;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ if (vp2 == 0) {
+ vp2 = vp;
+ } else if (vp->depth != vp2->depth) {
+ found = 1;
+ break;
+ }
+ }
+
+ if (!found) {
+ unsupported("Only one depth of window is supported");
+ return;
+ }
+
+ parent = makedrawable(display, vp2);
+ w = mkwinchild(display, vp, &ap, False, parent, 1);
+
+ border_pixmap = CopyFromParent;
+ (void)XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+.ER BadMatch wininputonly
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrw/a1.dat b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrw/a1.dat
new file mode 100644
index 000000000..855bb5016
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrw/a1.dat
@@ -0,0 +1,301 @@
+! $XConsortium$
+100 90 32
+5eb,0
+26,1
+3e,0
+26,1
+3e,0
+26,1
+3e,0
+26,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+4,1
+1e,0
+4,1
+3e,0
+26,1
+3e,0
+26,1
+3e,0
+26,1
+3e,0
+26,1
+ea3,0
+100 90 32
+5eb,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+a,1
+1e,0
+a,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+32,0
+32,1
+9e7,0
diff --git a/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrw/stwdwbrdrw.m b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrw/stwdwbrdrw.m
new file mode 100644
index 000000000..0f0908a8d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/stwdwbrdrw/stwdwbrdrw.m
@@ -0,0 +1,388 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWindowBorderWidth CH03
+void
+
+Display *display = Dsp;
+Window w;
+unsigned int width = 4;
+>>EXTERN
+
+struct area area;
+
+void
+tpXSWBWstart()
+{
+ tpstartup();
+
+ area.x = 15;
+ area.y = 15;
+ area.width = 30;
+ area.height= 30;
+
+}
+>>SET tpstartup tpXSWBWstart
+>>ASSERTION Good A
+A call to xname sets the border width of the specified
+window to
+.A width .
+>>STRATEGY
+Create parent window with a child.
+Call xname to set the window border width to 4.
+Verify that window border width was set using Pixchecking
+Call xname to set the window border width to 10.
+Verify that window border width was set using Pixchecking
+>>CODE
+Window parent, child;
+
+ trace("Starting");
+/* Create parent window with a child. */
+ parent = defwin(display);
+ trace("Parent made");
+ child = crechild(display, parent, &area);
+ trace("Child made");
+
+/* Call xname to set the window border width to 4. */
+ w = child;
+ width = 4;
+ XCALL;
+ trace("Called %s first time", TestName);
+
+/* Verify that window border width was set using Pixchecking */
+ PIXCHECK(display, parent);
+ trace("Pixchecked");
+
+/* Call xname to set the window border width to 10. */
+ w = child;
+ width = 10;
+ XCALL;
+ trace("Called %s second time", TestName);
+
+/* Verify that window border width was set using Pixchecking */
+ PIXCHECK(display, parent);
+ trace("Pixchecked");
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+When the window
+is a root window, then a call to xname has no affect.
+>>ASSERTION Good A
+When the override-redirect attribute of the window is
+.S False
+and some
+other client has selected
+.S SubstructureRedirectMask
+on the parent window, then a
+.S ConfigureRequest
+event is generated, and the window configuration is not changed.
+>>STRATEGY
+Create client1 and client2.
+Create a window and child window one
+Save parent window image as reference image.
+Set override-redirect on window one to False.
+Select SubstructureRedirectMask events on the parent window for client2.
+Call xname on window one for client1.
+Verify that no events were delivered to client1.
+Verify that a correct ConfigureRequest event was delivered to client2.
+Verify that no further processing occurred by comparing the window
+ to our reference window.
+>>CODE
+Display *client1, *client2;
+Window parent, one;
+XImage *image;
+XSetWindowAttributes attr;
+XEvent ev;
+int numevent;
+
+/* Create client1 and client2. */
+ client1 = opendisplay();
+ if (client1 == NULL) {
+ delete("could not create client1");
+ return;
+ }
+ else
+ CHECK;
+ client2 = opendisplay();
+ if (client2 == NULL) {
+ delete("could not create client2");
+ return;
+ }
+ else
+ CHECK;
+
+/* Create a window and child window one */
+ parent = defwin(client1);
+ one = crechild(client1, parent, &area);
+
+/* Save parent window image as reference image. */
+ image = savimage(client1, parent);
+
+/* Set override-redirect on window one to False. */
+ attr.override_redirect = False;
+ XChangeWindowAttributes(client1, one, CWOverrideRedirect, &attr);
+
+/* Select SubstructureRedirectMask events on the parent window for client2. */
+ XSelectInput(client2, parent, SubstructureRedirectMask);
+ XSync(client2, True);
+
+/* Call xname on window one for client1. */
+ display = client1;
+ w = one;
+ XCALL;
+ XSync(client2, False);
+
+/* Verify that no events were delivered to client1. */
+ numevent = getevent(client1, &ev);
+ if (numevent != 0) {
+ FAIL;
+ report("%d unexpected %s delivered to client1",
+ numevent, (numevent==1)?"event was":"events were");
+ report("%sevent was %s", (numevent!=1)?"first ":"", eventname(ev.type));
+ while(getevent(client1, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ } else
+ CHECK;
+
+/* Verify that a correct ConfigureRequest event was delivered to client2. */
+ numevent = getevent(client2, &ev);
+ if (numevent != 1) {
+ FAIL;
+ report("Expecting a single ConfigureRequest event");
+ report("Received %d events", numevent);
+ if (numevent != 0) {
+ report("First event was %s", eventname(ev.type));
+ while(getevent(client2, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ }
+ } else {
+ XConfigureRequestEvent good;
+
+ good.type = ConfigureRequest;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.parent = parent;
+ good.window = one;
+ good.x = area.x;
+ good.y = area.y;
+ good.width = area.width;
+ good.height = area.height;
+ good.border_width = width;
+ good.above = None;
+ good.detail= None;
+ good.value_mask = CWBorderWidth;
+
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Verify that no further processing occurred by comparing the window */
+/* to our reference window. */
+ if (!compsavimage(client1, parent, image)) {
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>>ASSERTION Good A
+When the border width actually changes, then a
+.S ConfigureNotify
+event is generated.
+>>STRATEGY
+Create client1 and client2.
+Create a window and child window one
+Select StructureNotifyMask events on the window one for client1.
+Select SubstructureNotifyMask events on the parent window for client2.
+Call xname on window one for client1.
+Verify that a single ConfigureNotify event was delivered to client1.
+Verify that a single ConfigureNotify event was delivered to client2.
+>>CODE
+Display *client1, *client2;
+Window parent, one;
+XEvent ev;
+int numevent;
+
+/* Create client1 and client2. */
+ client1 = opendisplay();
+ if (client1 == NULL) {
+ delete("could not create client1");
+ return;
+ }
+ else
+ CHECK;
+ client2 = opendisplay();
+ if (client2 == NULL) {
+ delete("could not create client2");
+ return;
+ }
+ else
+ CHECK;
+
+/* Create a window and child window one */
+ parent = defwin(client1);
+ one = crechild(client1, parent, &area);
+
+/* Select StructureNotifyMask events on the window one for client1. */
+ XSelectInput(client1, one, StructureNotifyMask);
+ XSync(client1, True);
+
+/* Select SubstructureNotifyMask events on the parent window for client2. */
+ XSelectInput(client2, parent, SubstructureNotifyMask);
+ XSync(client2, True);
+
+/* Call xname on window one for client1. */
+ display = client1;
+ w = one;
+ XCALL;
+ XSync(client2, False);
+
+/* Verify that a single ConfigureNotify event was delivered to client1. */
+ numevent = getevent(client1, &ev);
+ if (numevent != 1) {
+ FAIL;
+ report("Expecting a single ConfigureNotify event on client1");
+ report("Received %d events", numevent);
+ if (numevent != 0) {
+ report("First event was %s", eventname(ev.type));
+ while(getevent(client1, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ }
+ } else {
+ XConfigureEvent good;
+
+ good.type = ConfigureNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client1;
+ good.event = one;
+ good.window = one;
+ good.x = area.x;
+ good.y = area.y;
+ good.width = area.width;
+ good.height = area.height;
+ good.border_width = width;
+ good.above = None;
+ good.override_redirect = ev.xconfigure.override_redirect;
+
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+
+/* Verify that a single ConfigureNotify event was delivered to client2. */
+ numevent = getevent(client2, &ev);
+ if (numevent != 1) {
+ FAIL;
+ report("Expecting a single ConfigureNotify event on client2");
+ report("Received %d events", numevent);
+ if (numevent != 0) {
+ report("First event was %s", eventname(ev.type));
+ while(getevent(client2, &ev) != 0)
+ report("next event was %s", eventname(ev.type));
+ }
+ } else {
+ XConfigureEvent good;
+
+ good.type = ConfigureNotify;
+ good.serial = 0;
+ good.send_event = False;
+ good.display = client2;
+ good.event = parent;
+ good.window = one;
+ good.x = area.x;
+ good.y = area.y;
+ good.width = area.width;
+ good.height = area.height;
+ good.border_width = width;
+ good.above = None;
+ good.override_redirect = ev.xconfigure.override_redirect;
+
+ if ( checkevent((XEvent *)&good, &ev) )
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+>># I didn't see this anywhere, but it seems like it should happen.
+>># I agree. well spotted steve. kieron
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create a parent window, and the test windows win1 and win2.
+Select ExposureMask events on win1
+Set window border on win2 to cover some of win1
+Set window border on win2 to expose some of win1
+Verify that Expose events were generated or that win2 was
+ recovered from Backing Store.
+>>CODE
+Window parent, win1, win2;
+struct area area2;
+
+/* Create a parent window, and the test windows win1 and win2. */
+ parent = defwin(display);
+ win1 = crechild(display, parent, &area);
+ setforexpose(display, win1);
+
+ area2.x = area.x + area.width + 5;
+ area2.y = area.y + 5;
+ area2.width = 10;
+ area2.height= 10;
+ win2 = crechild(display, parent, &area2);
+
+/* Select ExposureMask events on win1 */
+ XSelectInput(display, win1, ExposureMask);
+
+/* Set window border on win2 to cover some of win1 */
+ w = win2;
+ width = 10;
+ XCALL;
+
+/* Set window border on win2 to expose some of win1 */
+ w = win2;
+ width = 2;
+ XCALL;
+
+/* Verify that Expose events were genereated or that win2 was */
+/* recovered from Backing Store. */
+ if (!exposecheck(display, win1)) {
+ report("Neither Expose events or backing store procesing");
+ report("could correctly restore the window contents.");
+ FAIL;
+ } else
+ CHECK;
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+>># This did read:
+>># When an attempt is made to set the border-width attribute of an
+>># .S InputOnly
+>># window to a non-zero value, then a
+>># .S BadMatch
+>># error occurs.
+>># stuart.
+.ER BadMatch wininputonly
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/trnsltcrdn/trnsltcrdn.m b/xc/test/xsuite/xtest/tset/CH03/trnsltcrdn/trnsltcrdn.m
new file mode 100644
index 000000000..37272cd75
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/trnsltcrdn/trnsltcrdn.m
@@ -0,0 +1,346 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XTranslateCoordinates CH03
+Bool
+
+Display *display = Dsp;
+Window src_w;
+Window dest_w;
+int src_x = c_ap.x + 10;
+int src_y = c_ap.y + 8;
+int *dest_x_return = &dest_x;
+int *dest_y_return = &dest_y;
+Window *child_return = &child;
+>>EXTERN
+static struct area c_ap;
+static int dest_x;
+static int dest_y;
+static Window child;
+
+void transinit()
+{
+ tpstartup();
+
+/* struct area of the child window */
+ c_ap.x = 50;
+ c_ap.y = 60;
+ c_ap.width = 20;
+ c_ap.height= 17;
+
+ dest_x = -1;
+ dest_y = -1;
+ child = ~0;
+}
+
+>>SET tpstartup transinit
+>>ASSERTION Good A
+A call to xname takes the
+.A src_x
+and
+.A src_y
+coordinates relative to the source window's origin and
+converts them to be
+relative to the destination window's origin and
+returns these translated coordinates in
+.A dest_x_return
+and
+.A dest_y_return .
+>># Note that I'm testing over a loop of border_widths. This is to ensure
+>># the border width is taken into account in the calculation. stuart
+>>STRATEGY
+For some values of border_width:
+ Create a window to be the source window.
+ Create a child window to be the destination window.
+ Map both windows.
+ Translate coordinates of the parent window to the child using xname.
+ Verify the returned coordinates were as expected.
+>>CODE
+Bool ret;
+int exp_x, exp_y;
+int border_width;
+
+/* Set up child window position coordinates */
+
+ for(border_width = 0; border_width < 5; border_width++) {
+ src_w = defdraw(display, VI_WIN);
+ XMapWindow(display, src_w);
+
+ /* Child window: visual = CopyFromParent, and is mapped */
+ dest_w = crechild(display, src_w, &c_ap);
+ XSetWindowBorderWidth(display, dest_w, border_width);
+ XSetWindowBorder(display, dest_w, W_FG);
+ XMapWindow(display, dest_w);
+
+/* Calculate expected return values */
+ exp_x = src_x - c_ap.x - border_width;
+ exp_y = src_y - c_ap.y - border_width;
+
+ ret = XCALL;
+
+ if (ret == False)
+ {
+ report("%s returned False when expecting True.",
+ TestName);
+ report("src_x=%d", src_x); delete("src_y=%d", src_y);
+ report("exp_x=%d", exp_x); delete("exp_y=%d", exp_y);
+ report("border_width=%d", border_width);
+ FAIL;
+ } else
+ if ((dest_x != exp_x) || (dest_y != exp_y)) {
+ report("%s did not return expected coordinates",
+ TestName);
+ report("Expected: (*dest_x_return)=%d, (*dest_y_return)=%d",
+ exp_x, exp_y);
+ report("Got: (*dest_x_return)=%d, (*dest_y_return)=%d",
+ dest_x, dest_y);
+ if( (dest_x == -1) || (dest_y == -1) )
+ report("(*dest_x_return) and (*dest_y_return) were probably not set");
+
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(5);
+>>ASSERTION Good C
+When
+.A src_w
+and
+.A dest_w
+were not created on the same screen,
+then a call to xname returns zero and
+.A dest_x_return
+and
+.A dest_y_return
+are set to zero.
+>>STRATEGY
+If an alternate screen is supported:
+ Create a mapped window on the default screen.
+ Create a mapped window on the alternate screen.
+ Verify xname returns zero.
+ Verify that *dest_x_return is zero.
+ Verify that *dest_y_return is zero.
+>>CODE
+int ret;
+
+ if (config.alt_screen == -1) {
+ unsupported("No alternate screen supported");
+ return;
+ }
+
+ src_w = defdraw(display, VI_WIN);
+ XMapWindow(display, src_w);
+ dest_w = defdraw(display, VI_ALT_WIN);
+ XMapWindow(display, dest_w);
+
+ ret = XCALL;
+
+ if (ret != 0)
+ {
+ report("%s did not return zero when", TestName);
+ report("src_w and dest_w were on different screens.");
+ report("Expecting: 0");
+ report("Returned : %d", ret);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ if ( dest_x != 0 || dest_y != 0 )
+ {
+ report("%s did not set the dest_x and dest_y as expected.",
+ TestName);
+ report("Expecting: (*dest_x_return)=0, (*dest_y_return)=0");
+ report("Returned : (*dest_x_return)=%d, (*dest_y_return)=%d",
+ dest_x, dest_y);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When the coordinates are contained in a mapped child of
+.A dest_w ,
+then that child is returned in
+.A child_return .
+>>STRATEGY
+For some values of border_width:
+ Create a window to be the source and destination windows.
+ Create a sub window.
+ Map both windows.
+ Translate coordinates of the window to the child using xname.
+ Verify the child_return window was the sub window.
+>>CODE
+Window exp_w;
+Bool ret;
+int border_width;
+
+/* Set up child window position coordinates */
+
+ for(border_width = 0; border_width < 5; border_width++) {
+ src_w = defdraw(display, VI_WIN);
+ XMapWindow(display, src_w);
+
+ dest_w = src_w;
+
+ exp_w = crechild(display, src_w, &c_ap);
+
+ XSetWindowBorderWidth(display, exp_w, border_width);
+ XSetWindowBorder(display, exp_w, W_FG);
+ XMapWindow(display, exp_w);
+
+/* Calculate expected return values */
+ ret = XCALL;
+
+ if (ret == False)
+ {
+ report("%s returned False when expecting True.",
+ TestName);
+ report("border_width=%d", border_width);
+ FAIL;
+ } else
+ if (child != exp_w)
+ {
+ report("%s did not return the expected window in (*child_return)",
+ TestName);
+ report("(*child_return) = %0x", child);
+ report("expected window = %0x", exp_w);
+ report("border_width=%d", border_width);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ }
+
+ CHECKPASS(5);
+>>ASSERTION Good A
+When the coordinates are not contained in a mapped child of
+.A dest_w ,
+then
+.A child_return
+is set to
+.S None .
+>>STRATEGY
+Create a mapped window to be the source and destination windows.
+Create an overlapping mapped sibling window.
+Translate coordinates of the window using xname.
+Verify the child_return window was None.
+Verify the returned coordinates were as expected.
+>>CODE
+XVisualInfo *vp;
+XWindowAttributes winatt;
+Window exp_w;
+Bool ret;
+
+ src_w = defdraw(display, VI_WIN);
+ XMapWindow(display, src_w);
+ dest_w = src_w;
+
+/* Get the root window relative postion of the first window */
+ XGetWindowAttributes(display, src_w, &winatt);
+
+/* Set the coordinates of the sibling window */
+ c_ap.x += winatt.x;
+ c_ap.y += winatt.y;
+
+/* Make sibling window: mapped */
+ resetvinf(VI_WIN); nextvinf(&vp);
+ exp_w = makewinpos(display, vp, c_ap.x, c_ap.y);
+
+ ret = XCALL;
+
+ if (ret == False)
+ {
+ report("%s returned False when expecting True.",
+ TestName);
+ FAIL;
+ } else
+ if (child != None)
+ {
+ report("When the source coordinates refered to a sibling window");
+ report("%s did not set child_return to None",
+ TestName);
+ report("Window id returned: %0x", child);
+ report("Source/Dest window: %0x", src_w);
+ report("Sibling window : %0x", exp_w);
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Now test for a point on dest_w itself */
+ src_x = 5;
+ src_y = 5;
+ child = ~0; /* We must make sure xname actually sets this */
+
+ ret = XCALL;
+
+ if (ret == False)
+ {
+ report("%s returned False when expecting True.",
+ TestName);
+ FAIL;
+ } else
+ if (child != None)
+ {
+ report("When the source coordinates refered to the dest_w");
+ report("%s did not set child_return to None",
+ TestName);
+ report("child_return : %0x", child);
+ report("Source/Dest window: %0x", src_w);
+ report("Sibling window : %0x", exp_w);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+When a window argument does not name a valid window, then a
+.S BadWindow
+error occurs.
+>>STRATEGY
+For src_w and dest_w:
+ Set the argument to a bad window.
+ Verify a BadWindow error occurs.
+>>CODE BadWindow
+Window goodwin;
+
+ seterrdef();
+
+ goodwin = defdraw(display, VI_WIN);
+
+ src_w = badwin(display);
+ dest_w = goodwin;
+ XCALL;
+ if (geterr() == BadWindow)
+ CHECK;
+ else
+ FAIL;
+
+ src_w = goodwin;
+ dest_w = badwin(display);
+ XCALL;
+ if (geterr() == BadWindow)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH03/unmpsbws/unmpsbws.m b/xc/test/xsuite/xtest/tset/CH03/unmpsbws/unmpsbws.m
new file mode 100644
index 000000000..4b2123b09
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/unmpsbws/unmpsbws.m
@@ -0,0 +1,327 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUnmapSubwindows CH03
+void
+
+Display *display = Dsp;
+Window w;
+>>EXTERN
+
+/*
+ * Tree of children (which are unmapped) and other descendents (which are
+ * not). One window is already unmapped.
+ */
+static char *T1[] = {
+ ".",
+ "A . (5,5) 30x10",
+ "A1 A (2,2) 12x4",
+ "B . (10,20) 10x26",
+ "B1 B (1,5) 5x4",
+ "C . (66,16) 17x45",
+ "C1 C (4,10) 10x5",
+ "C2 C (4,30) 10x5",
+ "D . (37,32) 15x8 unmap",
+ "E . (30,58) 9x14",
+ "F . (2,70) 21x19",
+ "F1 F (3,3) 8x7",
+};
+#define NT1 (NELEM(T1)) /* Number of windows */
+#define NT1SUB (NELEM(T1)-1) /* Number of subwindows */
+#define NT1MAPSUB 5 /* A, B, C, E, F */
+
+>>ASSERTION Good A
+A call to xname unmaps all subwindows of the specified window in bottom to top
+stacking order.
+>>STRATEGY
+Create subwindows.
+Draw on subwindows.
+Unmap subwindows.
+Verify that map state of each child is IsUnmapped.
+Verify that map state of inferiors of children is IsUnviewable.
+Verify that subwindow have disappeared from screen.
+>>CODE
+struct buildtree *bt;
+XWindowAttributes atts;
+int i;
+
+ w = defwin(display);
+ bt = buildtree(display, w, T1, NT1);
+
+ for (i = 1; i < NT1; i++)
+ pattern(display, bt[i].wid);
+
+ XCALL;
+
+ for (i = 1; i < NT1; i++) {
+ XGetWindowAttributes(display, bt[i].wid, &atts);
+
+ if (bt[i].parent == bt) {
+ /* This is a direct child of the test window */
+ if (atts.map_state != IsUnmapped) {
+ report("After unmap of window '%s', map-state was %s, expecting IsUnmapped",
+ bt[i].name, mapstatename(atts.map_state));
+ FAIL;
+ } else
+ CHECK;
+ } else {
+ /* This is an inferior of a child */
+ if (atts.map_state != IsUnviewable) {
+ report("After unmap of window '%s', map-state was %s, expecting IsUnviewable",
+ bt[i].name, mapstatename(atts.map_state));
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+ if (checkclear(display, w))
+ CHECK;
+ else {
+ report("Window did not disappear after unmapping");
+ FAIL;
+ }
+
+ CHECKPASS(NT1SUB+1);
+>>ASSERTION Good A
+>># QUESTION: Are the UnmapNotify events ordered? c.f. XMapSubwindows
+>># kieron
+A call to xname generates an
+.S UnmapNotify
+event on each subwindow that was originally mapped.
+>>STRATEGY
+Create parent window.
+Create inferior windows.
+Select SubstructureNotify on parent.
+Select StructureNotify on inferiors.
+Call xname.
+Verify that UnmapNotify is received on child windows.
+Verify that UnmapNotify is received on parent for each child.
+Verify that not events are received for other inferiors.
+>>EXTERN
+
+#define GOT_WINDOW 01
+#define GOT_PARENT 02
+
+>>CODE
+XEvent ev;
+XUnmapEvent *ump;
+XUnmapEvent good;
+struct buildtree *bt;
+struct buildtree *btp;
+int i;
+
+ w = defwin(display);
+ bt = buildtree(display, w, T1, NT1);
+
+ for (i = 1; i < NT1; i++) {
+ pattern(display, bt[i].wid);
+ XSelectInput(display, bt[i].wid, StructureNotifyMask);
+ }
+
+ XSelectInput(display, w, SubstructureNotifyMask);
+
+ XCALL;
+
+ for (i = 1; i < NT1; i++)
+ XSelectInput(display, bt[i].wid, NoEventMask);
+ XSelectInput(display, w, NoEventMask);
+
+ /* This loop is traversed twice for each mapped child */
+ while (getevent(display, &ev)) {
+ if (ev.type != UnmapNotify) {
+ report("Event of type %s was received unexpectedly", eventname(ev.type));
+ FAIL;
+ continue;
+ } else
+ CHECK;
+
+ ump = (XUnmapEvent*)&ev;
+ btp = btwtobtp(bt, ump->window);
+ if (btp == NULL) {
+ report("Event received for a window that was not in the test");
+ FAIL;
+ continue;
+ }
+
+ /*
+ * This checks the window and event fields. As events arrive they
+ * are recorded in the bt structure.
+ */
+ if (ump->event == ump->window) {
+ /* Event arrived on the window */
+ if (btp->uflags & GOT_WINDOW) {
+ report("Repeat event received on window '%s'", btp->name);
+ FAIL;
+ } else {
+ btp->uflags |= GOT_WINDOW;
+ CHECK;
+ }
+ } else if (ump->event != w) {
+ /* Event arrived somewhere unexpected */
+ report("Event received for window '%s' on a window other than the parent", btp->name);
+ FAIL;
+ } else {
+ /* Event arrived on the parent */
+ if (btp->uflags & GOT_PARENT) {
+ report("Repeat event received on parent for window '%s'", btp->name);
+ FAIL;
+ } else {
+ btp->uflags |= GOT_PARENT;
+ CHECK;
+ }
+ }
+
+ /* Check the rest of the fields */
+ good.type = UnmapNotify;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = display;
+ good.event = ump->event;
+ good.window = ump->window;
+ good.from_configure = False;
+
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+ }
+
+ for (i = 1; i < NT1; i++) {
+ /*
+ * If this is a mapped child then should have events for
+ * window and parent.
+ * Otherwise and for other inferiors - no events.
+ */
+ if (bt[i].parent == bt && !(bt[i].opts & BT_UNMAP)) {
+ /* child */
+ if (bt[i].uflags & GOT_WINDOW)
+ CHECK;
+ else {
+ report("Did not receive unmap event for window '%s'", bt[i].name);
+ FAIL;
+ }
+
+ if (bt[i].uflags & GOT_PARENT)
+ CHECK;
+ else {
+ report("Did not receive unmap event on parent for window '%s'", bt[i].name);
+ FAIL;
+ }
+ } else {
+ /* Other inferior or unmapped */
+ if (bt[i].uflags & GOT_WINDOW) {
+ report("Received unexpected unmap event for window '%s'", bt[i].name);
+ if (bt[i].opts & BT_UNMAP)
+ report(" window was already unmapped");
+ FAIL;
+ } else
+ CHECK;
+
+ if (bt[i].uflags & GOT_PARENT) {
+ /* Getting here is very wrong */
+ report("Received unexpected unmap event on parent of window '%s'", bt[i].name);
+ if (bt[i].opts & BT_UNMAP)
+ report(" window was already unmapped");
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(3*2*NT1MAPSUB+2*NT1SUB);
+>>ASSERTION Good A
+When all the subwindows are already unmapped, then a call to xname
+has no effect.
+>>STRATEGY
+Create parent window.
+Create inferiors.
+Unmap all children.
+Select StructureNotify on inferiors.
+Call xname to unmap subwindows again.
+Verify that no UnmapNotify event is received on window.
+Verify that no change occurs on screen.
+>>CODE
+struct buildtree *bt;
+XImage *imp;
+int n;
+int i;
+
+ w = defwin(display);
+ bt = buildtree(display, w, T1, NT1);
+
+ XCALL;
+
+ for (i = 1; i < NT1; i++) {
+ pattern(display, bt[i].wid);
+ XSelectInput(display, bt[i].wid, StructureNotifyMask);
+ }
+ imp = savimage(display, w);
+
+ XCALL;
+
+ for (i = 1; i < NT1; i++)
+ XSelectInput(display, bt[i].wid, NoEventMask);
+
+ n = XPending(display);
+ if (n != 0) {
+ report("Received event when subwindows already unmapped");
+ FAIL;
+ } else
+ CHECK;
+
+ if (compsavimage(display, w, imp))
+ CHECK;
+ else {
+ report("Screen contents changed when unmapped windows were unmapped again");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create base window.
+Call setforexpose() on base window.
+Enable expose events.
+Create subwindows to unmap.
+Call xname to unmap subwindows.
+Verify expose or backing store restore occurred with exposecheck().
+>>CODE
+
+ w = defwin(display);
+ (void) buildtree(display, w, T1, NT1);
+
+ setforexpose(display, w);
+ XSelectInput(display, w, ExposureMask);
+
+ XCALL;
+
+ if (exposecheck(display, w))
+ CHECK;
+ else {
+ report("Neither Expose events or backing store processing");
+ report("could correctly restore the window contents.");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/unmpwdw/unmpwdw.m b/xc/test/xsuite/xtest/tset/CH03/unmpwdw/unmpwdw.m
new file mode 100644
index 000000000..0a61f0187
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/unmpwdw/unmpwdw.m
@@ -0,0 +1,307 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUnmapWindow CH03
+void
+
+Display *display = Dsp;
+Window w;
+>>ASSERTION Good A
+A call to xname unmaps the specified window.
+>>STRATEGY
+Create window.
+Draw on window.
+Unmap window.
+Verify that map state is IsUnmapped.
+Verify that window has disappeared from screen.
+>>CODE
+Window base;
+struct area area;
+XWindowAttributes atts;
+
+ base = defwin(display);
+ setarea(&area, 10, 10, 50, 50);
+ w = crechild(display, base, &area);
+ pattern(display, w);
+
+ XCALL;
+
+ XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsUnmapped) {
+ report("After unmap map-state was %s, expecting IsUnmapped",
+ mapstatename(atts.map_state));
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkclear(display, base))
+ CHECK;
+ else {
+ report("Window did not disappear after unmapping");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When the specified window is mapped, then a call to xname generates an
+.S UnmapNotify
+event.
+>>STRATEGY
+Create parent window.
+Create child window.
+Select SubstructureNotify on parent.
+Select StructureNotify on child.
+Call xname to unmap child window.
+Verify that UnmapNotify is received on window.
+Verify that UnmapNotify is received on parent.
+>>CODE
+Window base;
+struct area area;
+XWindowAttributes atts;
+XEvent ev;
+XUnmapEvent *ump;
+XUnmapEvent good;
+int got_parent = 0;
+int got_window = 0;
+int n;
+
+ base = defwin(display);
+ setarea(&area, 10, 10, 50, 50);
+ w = crechild(display, base, &area);
+ pattern(display, w);
+
+ XSelectInput(display, base, SubstructureNotifyMask);
+ XSelectInput(display, w, StructureNotifyMask);
+
+ XCALL;
+
+ XSelectInput(display, base, NoEventMask);
+ XSelectInput(display, w, NoEventMask);
+
+ n = XPending(display);
+ if (n != 2) {
+ report("Wrong number of events received got %d, expecting 2", n);
+ FAIL;
+ } else
+ CHECK;
+
+ got_window = 0;
+ got_parent = 0;
+ while (getevent(display, &ev)) {
+ if (ev.type != UnmapNotify) {
+ report("Event of type %s was received unexpectedly", eventname(ev.type));
+ FAIL;
+ continue;
+ } else
+ CHECK;
+
+ ump = (XUnmapEvent*)&ev;
+
+ if (ump->event == ump->window) {
+ got_window++;
+ } else if (ump->event != base) {
+ report("Event received on a window other than the parent");
+ FAIL;
+ } else {
+ got_parent++;
+ }
+ good.type = UnmapNotify;
+ good.serial = 0L;
+ good.send_event = False;
+ good.display = display;
+ good.event = ump->event;
+ good.window = w;
+ good.from_configure = False;
+
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+ }
+
+ if (got_window > 1) {
+ report("Repeat unmap notify event on window");
+ FAIL;
+ } else if (got_window == 0) {
+ report("UnmapNotify event was not received on window");
+ FAIL;
+ } else
+ CHECK;
+
+ if (got_parent > 1) {
+ report("Repeat unmap notify event on parent window");
+ FAIL;
+ } else if (got_parent == 0) {
+ report("UnmapNotify event was not received on parent window");
+ FAIL;
+ } else
+ CHECK;
+
+ XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsUnmapped) {
+ report("After unmap map-state was %s, expecting IsUnmapped",
+ mapstatename(atts.map_state));
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkclear(display, base))
+ CHECK;
+ else {
+ report("Window did not disappear after unmapping");
+ FAIL;
+ }
+
+ CHECKPASS(1+2*2+4);
+>>ASSERTION Good A
+When the specified window is already unmapped, then a call to xname
+has no effect.
+>>STRATEGY
+Create parent window.
+Create child window.
+Select StructureNotify on child.
+Call xname to unmap child window.
+Verify that no UnmapNotify event is received on window.
+>>CODE
+Window base;
+struct area area;
+XWindowAttributes atts;
+int n;
+
+ base = defwin(display);
+ setarea(&area, 10, 10, 50, 50);
+ w = creunmapchild(display, base, &area);
+ pattern(display, w);
+
+ XSelectInput(display, w, StructureNotifyMask);
+
+ XCALL;
+
+ XSelectInput(display, w, NoEventMask);
+
+ n = XPending(display);
+ if (n != 0) {
+ report("Received event when window already unmapped");
+ FAIL;
+ } else
+ CHECK;
+
+ XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsUnmapped) {
+ report("After unmap map-state was %s, expecting IsUnmapped",
+ mapstatename(atts.map_state));
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When there is a viewable child of
+.A window ,
+then after a call to xname the child window is no longer viewable.
+>>STRATEGY
+Create base window.
+Create parent window as inferior of base.
+Create child window as inferior of parent.
+Check it is Viewable.
+Unmap parent window.
+Verify that map-state of child window is IsUnviewable.
+>>CODE
+Window base;
+Window ch;
+struct area area;
+XWindowAttributes atts;
+
+ base = defwin(display);
+ setarea(&area, 10, 10, 50, 50);
+ w = crechild(display, base, &area);
+ pattern(display, w);
+
+ setarea(&area, 5, 5, 10, 10);
+ ch = crechild(display, w, &area);
+
+ (void) XGetWindowAttributes(display, ch, &atts);
+ if (atts.map_state != IsViewable) {
+ delete("Before unmapping parent map-state of child was %s, expecting IsViewable", mapstatename(atts.map_state));
+ return;
+ } else
+ CHECK;
+
+ XCALL;
+
+ (void) XGetWindowAttributes(display, ch, &atts);
+ if (atts.map_state != IsUnviewable) {
+ report("After unmap map-state was %s, expecting IsUnviewable",
+ mapstatename(atts.map_state));
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkclear(display, base))
+ CHECK;
+ else {
+ report("Window did not disappear after unmapping");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+When a call to xname
+uncovers part of any window that was formerly obscured, then
+either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Create base window.
+Call setforexpose() on base window.
+Create child window to unmap.
+Call xname to unmap window.
+Verify expose or backing store restore occurred with exposecheck().
+>>CODE
+Window base;
+struct area area;
+XWindowAttributes atts;
+
+ base = defwin(display);
+
+ setarea(&area, 10, 10, 50, 50);
+ w = crechild(display, base, &area);
+ pattern(display, w);
+
+ setforexpose(display, base);
+ XSelectInput(display, base, ExposureMask);
+
+ XCALL;
+
+ XGetWindowAttributes(display, w, &atts);
+ if (atts.map_state != IsUnmapped) {
+ report("After unmap map-state was %s, expecting IsUnmapped",
+ mapstatename(atts.map_state));
+ FAIL;
+ } else
+ CHECK;
+
+ if (exposecheck(display, base))
+ CHECK;
+ else {
+ report("Neither Expose events or backing store processing");
+ report("could correctly restore the window contents.");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH03/vslidfrmvs/vslidfrmvs.m b/xc/test/xsuite/xtest/tset/CH03/vslidfrmvs/vslidfrmvs.m
new file mode 100644
index 000000000..8fcf74464
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH03/vslidfrmvs/vslidfrmvs.m
@@ -0,0 +1,47 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XVisualIDFromVisual CH03
+VisualID
+
+Visual *visual;
+>>ASSERTION Good A
+A call to xname returns the visual ID for the specified visual.
+>>STRATEGY
+Call xname
+Do simple checks on returned id.
+>>CODE
+VisualID vid;
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ visual = vp->visual;
+
+ vid = XCALL;
+ trace("Returned visual id was %ld", (long)vid);
+
+ /*
+ * VisualID is a 32 bit value with the top three bits 0
+ */
+ if (vid & 0xe0000000) {
+ report("Some of top three bits of VisualID were set");
+ report("value was 0x%lx", vid);
+ FAIL;
+ } else {
+ CHECK;
+ }
+ }
+ CHECKPASS(nvinf());
diff --git a/xc/test/xsuite/xtest/tset/CH04/Makefile b/xc/test/xsuite/xtest/tset/CH04/Makefile
new file mode 100644
index 000000000..68deb33b8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/Makefile
@@ -0,0 +1,112 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+#
+# This Makefile can be used to compile all the tests in this
+# section of the X test suite in such a way that they are all links to
+# a single executable file. This normally allows a considerable
+# reduction in the disc space requirements for the X test suite
+# when fully built.
+#
+# There are two ways this can be done:
+# 1) Using the TET. Execute the command:
+# tcc -b -s link_exec xtest linkbuild
+# in the directory $TET_ROOT/xtest.
+# This will execute the TET build tool (which is normally pmake)
+# in the top level directory of each section of the test suite
+# (including this directory).
+#
+# 2) Directly without using the TET. Execute the command:
+# pmake
+# in this directory.
+#
+# For more details, refer to the User Guide
+#
+
+CAT=cat
+
+ALLTESTS=Tests
+
+TESTOFILES=\
+chngprprty.o \
+cnvrtslctn.o \
+dltprprty.o \
+gtatmnm.o \
+gtgmtry.o \
+gtslctnown.o \
+gtwdwattrb.o \
+gtwdwprprt.o \
+intrnatm.o \
+lstprprts.o \
+qrypntr.o \
+qrytr.o \
+rttwdwprpr.o \
+stslctnown.o
+
+LINKOFILE=linktbl.o
+OFILES = $(TESTOFILES) $(LINKOFILE)
+
+DIRLIST=\
+chngprprty \
+cnvrtslctn \
+dltprprty \
+gtatmnm \
+gtgmtry \
+gtslctnown \
+gtwdwattrb \
+gtwdwprprt \
+intrnatm \
+lstprprts \
+qrypntr \
+qrytr \
+rttwdwprpr \
+stslctnown
+
+all: subdirs test
+
+test:$P $(OFILES) $(LIBS) $(TCM)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(TCM) $(LIBS) $(SYSLIBS)
+ $(CAT) test > $(ALLTESTS)
+ $(RM) test
+
+subdirs:
+ if [ ! -f $(ALLTESTS) ]; then $(CAT) /dev/null > $(ALLTESTS); \
+ chmod a+x $(ALLTESTS); else : ; fi
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then \
+ (cd $$i; echo Compiling in $$i; $(TET_BUILD_TOOL) linkexec); \
+ fi; \
+ done
+
+# The xtestlib is made if it doesn't exist
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
+clean: cletests clesubdirs
+
+cletests:
+ $(RM) test $(OFILES) $(ALLTESTS) core
+
+clesubdirs:
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then (cd $$i; $(TET_CLEAN_TOOL) ); fi; done
+
+clobber: clean
diff --git a/xc/test/xsuite/xtest/tset/CH04/chngprprty/chngprprty.m b/xc/test/xsuite/xtest/tset/CH04/chngprprty/chngprprty.m
new file mode 100644
index 000000000..eb81deea6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/chngprprty/chngprprty.m
@@ -0,0 +1,804 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XChangeProperty CH04
+void
+
+Display *display = Dsp;
+Window w = defwin(display);
+Atom property = xcp_list[0];
+Atom type = XA_INTEGER;
+int format = 32;
+int mode = PropModeReplace;
+unsigned char *data = (unsigned char *)NULL;
+int nelements = 0;
+>>EXTERN
+#include "Xatom.h"
+
+static Atom xcp_list[] = {
+ XA_COPYRIGHT, XA_INTEGER };
+
+static int xcp_num_list = NELEM(xcp_list);
+
+static void
+xcp_add_property(prop, data)
+Atom prop;
+unsigned long data;
+{
+ XChangeProperty(display, w, prop, XA_INTEGER, 32,
+ PropModeReplace, (unsigned char *)&data, 1);
+ XSync(display, True);
+}
+
+static int
+xcp_get_property(prop, length, ret)
+Atom prop;
+int length;
+unsigned char **ret;
+{
+Atom type;
+int format;
+unsigned long nitems;
+unsigned long after;
+
+ XGetWindowProperty(display, w, prop, 0, (long)length, False,
+ XA_INTEGER, &type, &format, &nitems, &after, ret);
+
+ if ( type != XA_INTEGER || format != 32 ) {
+ delete("XGetWindowProperty returned unexpected values");
+ report("type is %s (expected XA_INTEGER)", atomname(type));
+ report("format is %d (expected 32)",format);
+ return(0);
+ } else {
+ if (nitems != length) {
+ report("%s did not change the", TestName);
+ report("window property as expected");
+ report("Expected %d items", length);
+ report("Returned %d items", nitems);
+ return(0);
+ } else {
+ if (after != 0) {
+ report("%s did not change the", TestName);
+ report("window property as expected");
+ report("Expected after: 0");
+ report("Returned after: %d", after);
+ return(0);
+ }
+ }
+ }
+ return(1);
+}
+
+>>ASSERTION Good A
+A call to xname alters the
+.A property
+for the specified window
+.A w
+and
+generates a
+.S PropertyNotify
+event on that window.
+>>STRATEGY
+Create a window without properties and with PropertyChangeMask events selected.
+Call xname to replace a property value.
+Verify that a PropertyNotify event occurred.
+Verify that the property was updated as expected.
+>>CODE
+unsigned long newdata;
+unsigned long retdata;
+unsigned char *retptr;
+int num_ev;
+XEvent ev, good;
+
+/* Create a window without properties and with PropertyChangeMask events selected. */
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* Call xname to replace a property value. */
+ mode = PropModeReplace;
+ newdata = xcp_num_list;
+ data = (unsigned char *)&newdata;
+ nelements = 1;
+ XCALL;
+
+/* Verify that a PropertyNotify event occurred. */
+ num_ev = getevent(display, &ev);
+ if(num_ev == 0) {
+ FAIL;
+ report("A call to %s caused no events", TestName);
+ } else {
+ if(num_ev != 1) {
+ FAIL;
+ report("A call to %s caused %d events, expecting 1",
+ TestName, num_ev);
+ do {
+ report("Event %s", eventname(ev.type));
+ } while(getevent(display, &ev));
+ } else {
+ good.type = PropertyNotify;
+ good.xproperty.type = PropertyNotify;
+ good.xproperty.atom = property;
+ good.xproperty.display = display;
+ good.xproperty.window = w;
+ good.xproperty.state = PropertyNewValue;
+ if (checkevent(&good, &ev)) {
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+/* Verify that the property was updated as expected. */
+ if(!xcp_get_property(property, 1, &retptr)) {
+ FAIL;
+ } else {
+ retdata = *(unsigned long *)retptr;
+ if(retdata != newdata) {
+ FAIL;
+ report("%s did not assign the property value",TestName);
+ report("as expected");
+ report("Expected value: %u", newdata);
+ report("Returned value: %u", retdata);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When
+.A mode
+is
+.S PropModeReplace ,
+then a call to xname discards the previous value of
+.A property
+and stores the new
+.A data ,
+in the specified
+.A format
+and
+.A type ,
+and a
+.S PropertyNotify
+event is generated.
+>>STRATEGY
+Create a window with properties and PropertyChangeMask events selected.
+Call xname to replace a property value.
+Verify that a PropertyNotify event occurred.
+Verify that the property was updated as expected.
+>>CODE
+int loop;
+unsigned long newdata;
+unsigned long retdata;
+unsigned char *retptr;
+int num_ev;
+XEvent ev, good;
+
+/* Create a window with properties and PropertyChangeMask events selected. */
+ for(loop=0; loop < xcp_num_list; loop++)
+ xcp_add_property(xcp_list[loop], (unsigned long)loop);
+
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* Call xname to replace a property value. */
+ mode = PropModeReplace;
+ newdata = xcp_num_list;
+ data = (unsigned char *)&newdata;
+ nelements = 1;
+ XCALL;
+
+/* Verify that a PropertyNotify event occurred. */
+ num_ev = getevent(display, &ev);
+ if(num_ev == 0) {
+ FAIL;
+ report("A call to %s caused no events", TestName);
+ } else {
+ if(num_ev != 1) {
+ FAIL;
+ report("A call to %s caused %d events, expecting 1",
+ TestName, num_ev);
+ do {
+ report("Event %s", eventname(ev.type));
+ } while(getevent(display, &ev));
+ } else {
+ good.type = PropertyNotify;
+ good.xproperty.type = PropertyNotify;
+ good.xproperty.atom = property;
+ good.xproperty.display = display;
+ good.xproperty.window = w;
+ good.xproperty.state = PropertyNewValue;
+ if (checkevent(&good, &ev)) {
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+/* Verify that the property was updated as expected. */
+ if(!xcp_get_property(property, 1, &retptr)) {
+ FAIL;
+ } else {
+ retdata = *(unsigned long *)retptr;
+ if(retdata != newdata) {
+ FAIL;
+ report("%s did not change the property value",TestName);
+ report("as expected");
+ report("Expected value: %u", newdata);
+ report("Returned value: %u", retdata);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When
+.A mode
+is
+.S PropModePrepend ,
+then a call to xname inserts the specified
+.A data
+before the beginning
+of the existing data for
+.A property ,
+and a
+.S PropertyNotify
+event is generated.
+>>STRATEGY
+Create a window with properties and PropertyChangeMask events selected.
+Call xname to replace a property value.
+Verify that a PropertyNotify event occurred.
+Verify that the property was updated as expected.
+>>CODE
+int loop;
+unsigned long newdata;
+unsigned long *retdata;
+unsigned char *retptr;
+int num_ev;
+XEvent ev, good;
+
+/* Create a window with properties and PropertyChangeMask events selected. */
+ for(loop=0; loop < xcp_num_list; loop++)
+ xcp_add_property(xcp_list[loop], (unsigned long)loop);
+
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* Call xname to replace a property value. */
+ mode = PropModePrepend;
+ newdata = xcp_num_list;
+ data = (unsigned char *)&newdata;
+ nelements = 1;
+ XCALL;
+
+/* Verify that a PropertyNotify event occurred. */
+ num_ev = getevent(display, &ev);
+ if(num_ev == 0) {
+ FAIL;
+ report("A call to %s caused no events", TestName);
+ } else {
+ if(num_ev != 1) {
+ FAIL;
+ report("A call to %s caused %d events, expecting 1",
+ TestName, num_ev);
+ do {
+ report("Event %s", eventname(ev.type));
+ } while(getevent(display, &ev));
+ } else {
+ good.type = PropertyNotify;
+ good.xproperty.type = PropertyNotify;
+ good.xproperty.atom = property;
+ good.xproperty.display = display;
+ good.xproperty.window = w;
+ good.xproperty.state = PropertyNewValue;
+ if (checkevent(&good, &ev)) {
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+/* Verify that the property was updated as expected. */
+ if(!xcp_get_property(property, 2, &retptr)) {
+ FAIL;
+ } else {
+ retdata = (unsigned long *)retptr;
+ if(retdata[0] != newdata || retdata[1] != 0) {
+ FAIL;
+ report("%s did not change the property value",TestName);
+ report("as expected");
+ report("Expected value: %u,%u", newdata, 0);
+ report("Returned value: %u,%u", retdata[0], retdata[1]);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When
+.A mode
+is
+.S PropModeAppend ,
+then a call to xname inserts the specified
+.A data
+onto the end of the existing data for
+.A property ,
+and a
+.S PropertyNotify
+event is generated.
+>>STRATEGY
+Create a window with properties and PropertyChangeMask events selected.
+Call xname to replace a property value.
+Verify that a PropertyNotify event occurred.
+Verify that the property was updated as expected.
+>>CODE
+int loop;
+unsigned long newdata;
+unsigned long *retdata;
+unsigned char *retptr;
+int num_ev;
+XEvent ev, good;
+
+/* Create a window with properties and PropertyChangeMask events selected. */
+ for(loop=0; loop < xcp_num_list; loop++)
+ xcp_add_property(xcp_list[loop], (unsigned long)loop);
+
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* Call xname to replace a property value. */
+ mode = PropModeAppend;
+ newdata = xcp_num_list;
+ data = (unsigned char *)&newdata;
+ nelements = 1;
+ XCALL;
+
+/* Verify that a PropertyNotify event occurred. */
+ num_ev = getevent(display, &ev);
+ if(num_ev == 0) {
+ FAIL;
+ report("A call to %s caused no events", TestName);
+ } else {
+ if(num_ev != 1) {
+ FAIL;
+ report("A call to %s caused %d events, expecting 1",
+ TestName, num_ev);
+ do {
+ report("Event %s", eventname(ev.type));
+ } while(getevent(display, &ev));
+ } else {
+ good.type = PropertyNotify;
+ good.xproperty.type = PropertyNotify;
+ good.xproperty.atom = property;
+ good.xproperty.display = display;
+ good.xproperty.window = w;
+ good.xproperty.state = PropertyNewValue;
+ if (checkevent(&good, &ev)) {
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+/* Verify that the property was updated as expected. */
+ if(!xcp_get_property(property, 2, &retptr)) {
+ FAIL;
+ } else {
+ retdata = (unsigned long *)retptr;
+ if(retdata[0] != 0 || retdata[1] != newdata) {
+ FAIL;
+ report("%s did not change the property value",TestName);
+ report("as expected");
+ report("Expected values: %u,%u", 0, newdata);
+ report("Returned values: %u,%u", retdata[0], retdata[1]);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When
+.A mode
+is
+.S PropModeAppend
+or
+.S PropModePrepend
+and the
+.A property
+is undefined for window
+.A w ,
+then on a call to xname the
+.A property
+is treated as if it were defined with the correct
+.A type
+and
+.A format
+and had zero length data.
+>>STRATEGY
+Create a window without properties and with PropertyChangeMask events selected.
+Call xname to prepend to a non-existant property value.
+Verify that a PropertyNotify event occurred.
+Verify that the property was updated as expected.
+Call xname to append to a non-existant property value.
+Verify that a PropertyNotify event occurred.
+Verify that the property was updated as expected.
+>>CODE
+unsigned long newdata;
+unsigned long retdata;
+unsigned char *retptr;
+int num_ev;
+XEvent ev, good;
+
+/* Create a window without properties and with PropertyChangeMask events selected. */
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* Call xname to prepend to a non-existant property value. */
+ mode = PropModePrepend;
+ newdata = xcp_num_list;
+ data = (unsigned char *)&newdata;
+ nelements = 1;
+ XCALL;
+
+/* Verify that a PropertyNotify event occurred. */
+ num_ev = getevent(display, &ev);
+ if(num_ev == 0) {
+ FAIL;
+ report("A call to %s caused no events", TestName);
+ } else {
+ if(num_ev != 1) {
+ FAIL;
+ report("A call to %s caused %d events, expecting 1",
+ TestName, num_ev);
+ do {
+ report("Event %s", eventname(ev.type));
+ } while(getevent(display, &ev));
+ } else {
+ good.type = PropertyNotify;
+ good.xproperty.type = PropertyNotify;
+ good.xproperty.atom = property;
+ good.xproperty.display = display;
+ good.xproperty.window = w;
+ good.xproperty.state = PropertyNewValue;
+ if (checkevent(&good, &ev)) {
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+/* Verify that the property was updated as expected. */
+ if(!xcp_get_property(property, 1, &retptr)) {
+ FAIL;
+ } else {
+ retdata = *(unsigned long *)retptr;
+ if(retdata != newdata) {
+ FAIL;
+ report("%s did not assign the property value",TestName);
+ report("as expected");
+ report("Expected value: %u", newdata);
+ report("Returned value: %u", retdata);
+ } else
+ CHECK;
+ }
+
+/* Call xname to append to a non-existant property value. */
+ property = xcp_list[1];
+ mode = PropModeAppend;
+ newdata = xcp_num_list;
+ data = (unsigned char *)&newdata;
+ nelements = 1;
+ XCALL;
+
+/* Verify that a PropertyNotify event occurred. */
+ num_ev = getevent(display, &ev);
+ if(num_ev == 0) {
+ FAIL;
+ report("A call to %s caused no events", TestName);
+ } else {
+ if(num_ev != 1) {
+ FAIL;
+ report("A call to %s caused %d events, expecting 1",
+ TestName, num_ev);
+ do {
+ report("Event %s", eventname(ev.type));
+ } while(getevent(display, &ev));
+ } else {
+ good.type = PropertyNotify;
+ good.xproperty.type = PropertyNotify;
+ good.xproperty.atom = property;
+ good.xproperty.display = display;
+ good.xproperty.window = w;
+ good.xproperty.state = PropertyNewValue;
+ if (checkevent(&good, &ev)) {
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+/* Verify that the property was updated as expected. */
+ if(!xcp_get_property(property, 1, &retptr)) {
+ FAIL;
+ } else {
+ retdata = *(unsigned long *)retptr;
+ if(retdata != newdata) {
+ FAIL;
+ report("%s did not assign the property value",TestName);
+ report("as expected");
+ report("Expected value: %u", newdata);
+ report("Returned value: %u", retdata);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+>># The lifetime of a property is not tied to the storing client.
+>># Split into two new ones......
+When the storing client closes its connection to the server and
+the window
+.A w
+is not destroyed, then the
+.A format ,
+.A data
+and
+.A type
+of the
+.A property
+remain associated with the window.
+>>STRATEGY
+Create a new client.
+Call xname to add a property to the window on the new client.
+Close client2.
+Allow time for the client to close.
+Verify that the property is still defined.
+>>CODE
+Display *client2;
+unsigned long newdata;
+unsigned long retdata;
+unsigned char *retptr;
+
+/* Create a new client. */
+ client2 = XOpenDisplay(config.display);
+ if(client2 == (Display *)NULL) {
+ delete("could not create new client");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add a property to the window on the new client. */
+ display = client2;
+ mode = PropModeReplace;
+ newdata = xcp_num_list;
+ data = (unsigned char *)&newdata;
+ nelements = 1;
+ XCALL;
+
+/* Close client2. */
+ XCloseDisplay(client2);
+
+/* Allow time for the client to close. */
+ reset_delay();
+
+/* Verify that the property is still defined. */
+ display = Dsp;
+ if(!xcp_get_property(property, 1, &retptr)) {
+ FAIL;
+ } else {
+ retdata = *(unsigned long *)retptr;
+ if(retdata != newdata) {
+ FAIL;
+ report("The property value was not",TestName);
+ report("as expected");
+ report("Expected value: %u", newdata);
+ report("Returned value: %u", retdata);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+>># This assertion kinda slipped through the net. It would
+>># catch if some bizarre implementation actually damaged
+>># the property atom.
+When the storing client closes its connection to the server and
+the server does not reset, then the atom
+.A property
+remains.
+>>STRATEGY
+Create a new client.
+Call xname to change a property on a window on the new client.
+Close new client.
+Allow time for the client to close.
+Verify that atom property remains defined.
+>>CODE
+Display *display2;
+unsigned long newdata;
+Atom atm;
+
+/* Create a new client. */
+ if (config.display == (char *)NULL) {
+ delete("config.display not set");
+ return;
+ } else
+ CHECK;
+
+ display2 = XOpenDisplay(config.display);
+ if (display2 == (Display *)NULL) {
+ delete("Could not open display for display2");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to change a property on a window on the new client. */
+ display = display2;
+ newdata = 255;
+ data = (unsigned char *)&newdata;
+ XCALL;
+
+/* Close new client. */
+ (void) XCloseDisplay(display2);
+
+/* Allow time for the client to close. */
+ reset_delay();
+
+/* Verify that atom property remains defined. */
+ atm = XInternAtom(Dsp, "INTEGER", True);
+
+ if (atm != XA_INTEGER) {
+ FAIL;
+ report("%s caused INTEGER atom to become undefined.",
+ TestName);
+ report("Expected atom %u", (unsigned long)XA_INTEGER);
+ report("Returned atom %u", (unsigned long)atm);
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Bad A
+When
+.A mode
+is
+.S PropModePrepend
+or
+.S PropModeAppend
+and the
+.A type
+or
+.A format
+do not match the existing
+.A property
+value, then on a call to xname a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create a window with properties and PropertyChangeMask events selected.
+Call xname to append a property value, with incorrect type information.
+Verify that no PropertyNotify event occurred.
+Verify that the property was unchanged.
+Call xname to prepend a property value, with incorrect format information.
+Verify that no PropertyNotify event occurred.
+Verify that the property was unchanged.
+>>CODE BadMatch
+int loop;
+unsigned long newdata;
+unsigned long retdata;
+unsigned char *retptr;
+int num_ev;
+XEvent ev;
+
+/* Create a window with properties and PropertyChangeMask events selected. */
+ for(loop=0; loop < xcp_num_list; loop++)
+ xcp_add_property(xcp_list[loop], (unsigned long)loop);
+
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* Call xname to append a property value, with incorrect type information. */
+ format = 32;
+ type = XA_BITMAP;
+ mode = PropModeAppend;
+ newdata = xcp_num_list;
+ data = (unsigned char *)&newdata;
+ nelements = 1;
+ XCALL;
+
+ if(geterr()!= BadMatch) {
+ FAIL;
+ } else
+ CHECK;
+
+/* Verify that no PropertyNotify event occurred. */
+ num_ev = getevent(display, &ev);
+ if(num_ev != 0) {
+ FAIL;
+ report("A call to %s caused %d events, expecting 0",
+ TestName, num_ev);
+ do {
+ report("Event %s", eventname(ev.type));
+ } while(getevent(display, &ev));
+ } else
+ CHECK;
+
+/* Verify that the property was unchanged. */
+ if(!xcp_get_property(property, 1, &retptr)) {
+ FAIL;
+ } else {
+ retdata = *(unsigned long *)retptr;
+ if(retdata != 0) {
+ FAIL;
+ report("%s changed the property value",TestName);
+ report("unexpectedly");
+ report("Expected value: %u", 0);
+ report("Returned value: %u", retdata);
+ } else
+ CHECK;
+ }
+
+/* Call xname to prepend a property value, with incorrect format information. */
+ format = 16;
+ type = XA_INTEGER;
+ mode = PropModePrepend;
+ newdata = xcp_num_list;
+ data = (unsigned char *)&newdata;
+ nelements = 1;
+ XCALL;
+
+ if(geterr()!= BadMatch) {
+ FAIL;
+ } else
+ CHECK;
+
+/* Verify that no PropertyNotify event occurred. */
+ num_ev = getevent(display, &ev);
+ if(num_ev != 0) {
+ FAIL;
+ report("A call to %s caused %d events, expecting 0",
+ TestName, num_ev);
+ do {
+ report("Event %s", eventname(ev.type));
+ } while(getevent(display, &ev));
+ } else
+ CHECK;
+
+/* Verify that the property was unchanged. */
+ if(!xcp_get_property(property, 1, &retptr)) {
+ FAIL;
+ } else {
+ retdata = *(unsigned long *)retptr;
+ if(retdata != 0) {
+ FAIL;
+ report("%s changed the property value",TestName);
+ report("unexpectedly");
+ report("Expected value: %u", 0);
+ report("Returned value: %u", retdata);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(6);
+
+>>ASSERTION Bad B
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadAtom
+>>ASSERTION Bad A
+.ER BadWindow
+>>ASSERTION Bad A
+.ER BadValue format 8 16 32
+>>ASSERTION Bad A
+.ER BadValue mode PropModeReplace PropModePrepend PropModeAppend
diff --git a/xc/test/xsuite/xtest/tset/CH04/cnvrtslctn/cnvrtslctn.m b/xc/test/xsuite/xtest/tset/CH04/cnvrtslctn/cnvrtslctn.m
new file mode 100644
index 000000000..9aa6f9d8f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/cnvrtslctn/cnvrtslctn.m
@@ -0,0 +1,212 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XConvertSelection CH04
+void
+
+Display *display = Dsp;
+Atom selection = XA_COPYRIGHT;
+Atom target = XA_NOTICE;
+Atom property = XA_INTEGER;
+Window requestor = defwin(display);
+Time time = CurrentTime;
+>>EXTERN
+#include "Xatom.h"
+>>ASSERTION Good A
+When the specified
+.A selection
+has an owner, then a call to xname generates a
+.S SelectionRequest
+event to the selection owner, with
+.A selection ,
+.A target ,
+.A property ,
+.A requestor ,
+and
+.A time
+arguments passed unchanged as event structure members.
+>>STRATEGY
+Create a new client.
+Create a window with a selection which it owns on client2.
+Call xname to convert the selection.
+Verify that the correct SelectionNotify event was delivered to client2
+Verify no events were delivered to client1.
+>>CODE
+Display *client1, *client2;
+Window owner;
+int num_ev;
+XEvent ev;
+
+/* Create a new client. */
+ client1 = display;
+ client2 = opendisplay();
+ if (client2 == (Display *)NULL) {
+ delete("Could not create client2");
+ return;
+ } else
+ CHECK;
+
+/* Create a window with a selection which it owns on client2. */
+ owner = defwin(client2);
+ XSetSelectionOwner(client2, selection, owner, CurrentTime);
+ XSync(client2, True);
+
+/* Call xname to convert the selection. */
+ XCALL;
+ XSync(client1, False);
+ XSync(client2, False);
+
+/* Verify that the correct SelectionNotify event was delivered to client2 */
+ num_ev = getevent(client2, &ev);
+ if (num_ev != 1) {
+ FAIL;
+ report("%s did not cause a single SelectionNotify event",
+ TestName);
+ trace("Received %d events", num_ev);
+ while (num_ev > 0) {
+ trace("Event %s", eventname(ev.type));
+ num_ev = getevent(client2, &ev);
+ }
+ } else {
+ XEvent good;
+
+ good.type = SelectionRequest;
+ good.xselectionrequest.type = SelectionRequest;
+ good.xselectionrequest.display = client2;
+ good.xselectionrequest.owner = owner;
+ good.xselectionrequest.requestor = requestor;
+ good.xselectionrequest.selection = selection;
+ good.xselectionrequest.target = target;
+ good.xselectionrequest.property = property;
+ good.xselectionrequest.time = -1;
+
+ if (checkevent(&good, &ev)) {
+ FAIL;
+ report("SelectionNotify event was incorrect");
+ } else
+ CHECK;
+ }
+
+/* Verify no events were delivered to client1. */
+ num_ev = getevent(client1, &ev);
+ if (num_ev != 0) {
+ FAIL;
+ report("%s generated unexpected events on client1",
+ TestName);
+ trace("Expected 0 events");
+ trace("Received %d events", num_ev);
+ do {
+ trace("Event: %s", eventname(ev.type));
+ } while(getevent(client1, &ev));
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the specified
+.A selection
+has no owner, then a call to xname generates a
+.S SelectionNotify
+event to the
+.A requestor
+window with
+.A selection ,
+.A target
+and
+.A time
+arguments passed unchanged as event structure members, and with
+.A property
+set to
+.S None .
+>>STRATEGY
+Call xname to convert the selection.
+Verify that the correct SelectionNotify event was delivered to display.
+>>CODE
+int num_ev;
+XEvent ev;
+
+/* Call xname to convert the selection. */
+ XCALL;
+ XSync(display, False);
+
+/* Verify that the correct SelectionNotify event was delivered to display. */
+ num_ev = getevent(display, &ev);
+ if (num_ev != 1) {
+ FAIL;
+ report("%s did not cause a single SelectionNotify event",
+ TestName);
+ trace("Received %d events", num_ev);
+ while (num_ev > 0) {
+ trace("Event %s", eventname(ev.type));
+ num_ev = getevent(display, &ev);
+ }
+ } else {
+ XEvent good;
+
+ good.type = SelectionNotify;
+ good.xselection.type = SelectionNotify;
+ good.xselection.display = display;
+ good.xselection.requestor = requestor;
+ good.xselection.selection = selection;
+ good.xselection.target = target;
+ good.xselection.property = None; /* is passed with no owner */
+ good.xselection.time = -1;
+
+ if (checkevent(&good, &ev)) {
+ FAIL;
+ report("SelectionNotify event was incorrect");
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+The atoms
+.S PRIMARY
+and
+.S SECONDARY
+are predefined selection atoms.
+>>STRATEGY
+Obtain the server representation for the PRIMARY and SECONDARY atoms.
+Verify that the atoms were defined.
+>>CODE
+Atom primary, secondary;
+
+/* Obtain the server representation for the PRIMARY and SECONDARY atoms. */
+ primary = XInternAtom(display, "PRIMARY", True);
+ secondary = XInternAtom(display, "SECONDARY", True);
+
+/* Verify that the atoms were defined. */
+ if (primary == None) {
+ FAIL;
+ report("PRIMARY was not defined");
+ } else
+ CHECK;
+
+ if (secondary == None) {
+ FAIL;
+ report("SECONDARY was not defined");
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>>ASSERTION Bad A
+.ER BadAtom
diff --git a/xc/test/xsuite/xtest/tset/CH04/dltprprty/dltprprty.m b/xc/test/xsuite/xtest/tset/CH04/dltprprty/dltprprty.m
new file mode 100644
index 000000000..da68dfe5d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/dltprprty/dltprprty.m
@@ -0,0 +1,155 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDeleteProperty CH04
+void
+
+Display *display = Dsp;
+Window w = defwin(display);
+Atom property = XA_COPYRIGHT;
+>>EXTERN
+#include "Xatom.h"
+>>ASSERTION Good A
+When the specified
+.A property
+exists on the specified window
+.A w ,
+then
+a call to xname deletes the
+.A property
+and a
+.S PropertyNotify
+event is generated on the window
+.A w .
+>>STRATEGY
+Create a window with a property and PropertyChangeMask events selected.
+Call xname to delete the property.
+Verify that a good PropertyNotify event occurred.
+Verify that the window property was deleted.
+>>CODE
+char *data="a tested property";
+int num = 0;
+XEvent ev;
+
+/* Create a window with a property and PropertyChangeMask events selected. */
+ XChangeProperty(display, w, property, XA_STRING, 8,
+ PropModeReplace,(unsigned char *)data, strlen(data));
+ XSync(display, True);
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* Call xname to delete the property. */
+ XCALL;
+
+/* Verify that a good PropertyNotify event occurred. */
+
+ num = getevent(display, &ev);
+ if (num != 1) {
+ FAIL;
+ report("%s caused %d events", num);
+ trace("Expecting a single PropertyNotify event");
+ } else {
+ XEvent good;
+
+ good.type = PropertyNotify;
+ good.xproperty.type = PropertyNotify;
+ good.xproperty.display= display;
+ good.xproperty.serial = 0;
+ good.xproperty.send_event = False;
+ good.xproperty.window = w;
+ good.xproperty.atom = property;
+ good.xproperty.time = 0;
+ good.xproperty.state = PropertyDelete;
+
+#ifdef TESTING
+ good.xproperty.atom--;
+#endif
+
+ if (checkevent(&good, &ev)) {
+ FAIL;
+ } else
+ CHECK;
+ }
+
+/* Verify that the window property was deleted. */
+ (void)XListProperties(display, w, &num);
+ if (num != 0) {
+ FAIL;
+ report("%s did not delete a window property", TestName);
+ trace("Expected: 0 properties");
+ trace("Returned: %d propert%s", num, (num==1?"y":"ies"));
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When the specified
+.A property
+does not exist on the specified window
+.A w ,
+then a call to xname deletes no property of the window
+.A w
+and no
+.S PropertyNotify
+event is generated.
+>>STRATEGY
+Create a window with a property and PropertyChangeMask events selected.
+Call xname to delete a non-existant property.
+Verify that no PropertyNotify events occurred.
+Verify that the window property was not deleted.
+>>CODE
+char *data="a tested property";
+int num = 0;
+XEvent ev;
+
+/* Create a window with a property and PropertyChangeMask events selected. */
+ XChangeProperty(display, w, XA_NOTICE, XA_STRING, 8,
+ PropModeReplace,(unsigned char *)data, strlen(data));
+ XSync(display, True);
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* Call xname to delete a non-existant property. */
+#ifdef TESTING
+ property = XA_NOTICE;
+#endif
+ XCALL;
+
+/* Verify that no PropertyNotify events occurred. */
+ if (getevent(display, &ev) != 0) {
+ FAIL;
+ report("%s caused unexpected event(s)", TestName);
+ do {
+ trace("Event: %s", eventname(ev.type));
+ } while(getevent(display, &ev));
+ } else
+ CHECK;
+
+/* Verify that the window property was not deleted. */
+ (void)XListProperties(display, w, &num);
+ if (num != 1) {
+ FAIL;
+ report("%s unexpectedly changed the window properties",
+ TestName);
+ trace("Expected: 1 property");
+ trace("Returned: %d properties", num);
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER BadAtom
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH04/gtatmnm/gtatmnm.m b/xc/test/xsuite/xtest/tset/CH04/gtatmnm/gtatmnm.m
new file mode 100644
index 000000000..3a2f0ed54
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/gtatmnm/gtatmnm.m
@@ -0,0 +1,77 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetAtomName CH04
+char *
+
+Display *display = Dsp;
+Atom atom;
+>>EXTERN
+#include "Xatom.h"
+
+static struct xga_struct {
+ char *name;
+ Atom atom;
+} xga_list[] = {
+ "PRIMARY", XA_PRIMARY,
+ "CUT_BUFFER0", XA_CUT_BUFFER0,
+ "RECTANGLE", XA_RECTANGLE,
+ "COPYRIGHT", XA_COPYRIGHT,
+};
+static int xga_nlist = NELEM(xga_list);
+
+>>ASSERTION Good A
+A call to xname returns the name, which can be freeed with XFree,
+associated with the specified
+.A atom .
+>>STRATEGY
+For some predefined atoms:
+ Call xname to obtain the name associated with the atom.
+ Verify the strings returned were as expected.
+>>CODE
+char *ret_str;
+int l;
+
+/* For some predefined atoms: */
+ for(l=0; l<xga_nlist; l++) {
+
+/* Call xname to obtain the name associated with the atom. */
+ atom = xga_list[l].atom;
+ trace("checking atom %d (%s)", atom, atomname(atom));
+ ret_str = XCALL;
+
+ if (ret_str == NULL) {
+ FAIL;
+ report("%s returned a null string with atom name %s",
+ TestName, xga_list[l].name);
+ continue;
+ } else
+ CHECK;
+
+/* Verify the strings returned were as expected. */
+ if (strcmp(xga_list[l].name, ret_str) != 0 ) {
+ FAIL;
+ report("%s returned an unexpected string");
+ report("Expected: '%s'", xga_list[l].name);
+ report("Returned: '%s'", ret_str);
+ } else
+ CHECK;
+ XFree(ret_str);
+ }
+
+ CHECKPASS(2*xga_nlist);
+>>ASSERTION Bad A
+.ER BadAtom
diff --git a/xc/test/xsuite/xtest/tset/CH04/gtgmtry/gtgmtry.m b/xc/test/xsuite/xtest/tset/CH04/gtgmtry/gtgmtry.m
new file mode 100644
index 000000000..349ada015
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/gtgmtry/gtgmtry.m
@@ -0,0 +1,403 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetGeometry CH04
+Status
+
+Display *display = Dsp;
+Drawable d;
+Window *root_return = &root;
+int *x_return = &x;
+int *y_return = &y;
+unsigned int *width_return = &width;
+unsigned int *height_return = &height;
+unsigned int *border_width_return = &border_width;
+unsigned int *depth_return = &depth;
+>>EXTERN
+#define XGG_BorderWidth 5
+#define XGG_X 25
+#define XGG_Y 35
+#define XGG_Width 20
+#define XGG_Height 15
+
+Window root;
+int x;
+int y;
+unsigned int width;
+unsigned int height;
+unsigned int border_width;
+unsigned int depth;
+>>ASSERTION Good A
+When the
+.A drawable
+is an
+.S InputOutput
+window, then a call to xname returns the root window in
+.A root_return ,
+the x and y coordinates of the upper-left outer corner relative to
+the parent window origin in
+.A x_return
+and
+.A y_return ,
+the inside width and height in
+.A width_return
+and
+.A height_return ,
+the border width in
+.A border_width_return ,
+and the depth of the window in
+.A depth_return .
+>>STRATEGY
+For each visual and depth:
+ Create a parent window
+ Create a test window
+ Call xname to obtain the test window geometry
+ Verify that the values returned were as expected
+>>CODE
+XVisualInfo *vp;
+struct area ap;
+
+/* For each visual and depth: */
+ for(resetvinf(VI_WIN); nextvinf(&vp); ) {
+ Window parent, w;
+
+/* Create a parent window */
+ ap.x = 7;
+ ap.y = 11;
+ ap.width = 9;
+ ap.height = 13;
+
+ parent = makewin(display, vp);
+
+/* Create a test window */
+ w = mkwinchild(display, vp, &ap, 0, parent, XGG_BorderWidth);
+
+/* Call xname to obtain the test window geometry */
+ root = (Window)0;
+ x = -1;
+ y = -1;
+ width = 255;
+ height = 255;
+ border_width = 255;
+ depth = 255;
+
+ d = (Drawable)w;
+ XCALL;
+
+/* Verify that the values returned were as expected */
+ if (root != DefaultRootWindow(display)) {
+ FAIL;
+ report("%s did not return the expected root window",
+ TestName);
+ trace("Expected root=%0x", DefaultRootWindow(display));
+ trace("Returned root=%0x", root);
+ } else
+ CHECK;
+
+ if (x != ap.x) {
+ FAIL;
+ report("%s did not return the expected x coordinate",
+ TestName);
+ trace("Expected x=%d", ap.x);
+ trace("Returned x=%d", x);
+ } else
+ CHECK;
+
+ if (y != ap.y) {
+ FAIL;
+ report("%s did not return the expected y coordinate",
+ TestName);
+ trace("Expected y=%d", ap.y);
+ trace("Returned y=%d", y);
+ } else
+ CHECK;
+
+ if (width != ap.width) {
+ FAIL;
+ report("%s did not return the expected width",
+ TestName);
+ trace("Expected width=%u", ap.width);
+ trace("Returned width=%u", width);
+ } else
+ CHECK;
+
+ if (height != ap.height) {
+ FAIL;
+ report("%s did not return the expected height",
+ TestName);
+ trace("Expected height=%u", ap.height);
+ trace("Returned height=%u", height);
+ } else
+ CHECK;
+
+ if (border_width != XGG_BorderWidth) {
+ FAIL;
+ report("%s did not return the expected border_width",
+ TestName);
+ trace("Expected border_width=%u", XGG_BorderWidth);
+ trace("Returned border_width=%u", border_width);
+ } else
+ CHECK;
+
+ if (depth != vp->depth) {
+ FAIL;
+ report("%s did not return the expected depth",
+ TestName);
+ trace("Expected depth=%u", vp->depth);
+ trace("Returned depth=%u", depth);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(7*nvinf());
+>>ASSERTION Good A
+When the
+.A drawable
+is an
+.S InputOnly
+window, then a call to xname returns the root window in
+.A root_return ,
+the x and y coordinates of the upper-left outer corner relative to
+the parent window origin in
+.A x_return
+and
+.A y_return ,
+the inside width and height of the window in
+.A width_return
+and
+.A height_return ,
+and sets
+.A border_width_return
+and
+.A depth_return
+to zero.
+>>STRATEGY
+Create a parent window
+Create an InputOnly test window
+Call xname to obtain the test window geometry
+Verify that the returned values were as expected
+>>CODE
+Window parent, w;
+XSetWindowAttributes atts;
+
+/* Create a parent window */
+ parent = defwin(display);
+
+/* Create an InputOnly test window */
+ atts.override_redirect = config.debug_override_redirect;
+ w = XCreateWindow(display, parent, XGG_X, XGG_Y, XGG_Width, XGG_Height,
+ 0, 0, InputOnly, CopyFromParent,
+ CWOverrideRedirect, &atts);
+ regid(display, (union regtypes *)&w, REG_WINDOW);
+
+/* Call xname to obtain the test window geometry */
+ root = (Window)0;
+ x = -1;
+ y = -1;
+ width = 255;
+ height = 255;
+ border_width = 255;
+ depth = 255;
+
+ d = (Drawable)w;
+ XCALL;
+
+/* Verify that the returned values were as expected */
+ if (root != DefaultRootWindow(display)) {
+ FAIL;
+ report("%s did not return the expected root window",
+ TestName);
+ trace("Expected root=%0x", DefaultRootWindow(display));
+ trace("Returned root=%0x", root);
+ } else
+ CHECK;
+
+ if (x != XGG_X) {
+ FAIL;
+ report("%s did not return the expected x coordinate",
+ TestName);
+ trace("Expected x=%d", XGG_X);
+ trace("Returned x=%d", x);
+ } else
+ CHECK;
+
+ if (y != XGG_Y) {
+ FAIL;
+ report("%s did not return the expected y coordinate",
+ TestName);
+ trace("Expected y=%d", XGG_Y);
+ trace("Returned y=%d", y);
+ } else
+ CHECK;
+
+ if (width != XGG_Width) {
+ FAIL;
+ report("%s did not return the expected width",
+ TestName);
+ trace("Expected width=%u", XGG_Width);
+ trace("Returned width=%u", width);
+ } else
+ CHECK;
+
+ if (height != XGG_Height) {
+ FAIL;
+ report("%s did not return the expected height",
+ TestName);
+ trace("Expected height=%u", XGG_Height);
+ trace("Returned height=%u", height);
+ } else
+ CHECK;
+
+ if (border_width != 0) {
+ FAIL;
+ report("%s did not return the expected border_width",
+ TestName);
+ trace("Expected border_width=%u", 0);
+ trace("Returned border_width=%u", border_width);
+ } else
+ CHECK;
+
+ if (depth != 0) {
+ FAIL;
+ report("%s did not return the expected depth",
+ TestName);
+ trace("Expected depth=%u", 0);
+ trace("Returned depth=%u", depth);
+ } else
+ CHECK;
+
+ CHECKPASS(7);
+>>ASSERTION Good A
+When the
+.A drawable
+is a
+.S pixmap ,
+then a call to xname returns the root window in
+.A root_return ,
+the inside width and height in
+.A width_return
+and
+.A height_return ,
+the depth of the pixmap in
+.A depth_return ,
+and sets
+.A x_return ,
+.A y_return ,
+and
+.A border_width_return
+to zero.
+>>STRATEGY
+For each depth:
+ Create a parent window
+ Create a test pixmap
+ Call xname to obtain the test pixmap geometry
+ Verify that the values returned were as expected
+>>CODE
+XVisualInfo *vp;
+
+/* For each depth: */
+ for(resetvinf(VI_PIX); nextvinf(&vp); ) {
+ Window parent;
+ Pixmap pm;
+
+/* Create a parent window */
+ parent = makewin(display, vp);
+
+/* Create a test pixmap */
+ pm = XCreatePixmap(display, parent,
+ XGG_Width, XGG_Height, vp->depth);
+ regid(display, (union regtypes *)&pm, REG_PIXMAP);
+
+/* Call xname to obtain the test pixmap geometry */
+ root = (Window)0;
+ x = -1;
+ y = -1;
+ width = 255;
+ height = 255;
+ border_width = 255;
+ depth = 255;
+
+ d = (Drawable)pm;
+ XCALL;
+
+/* Verify that the values returned were as expected */
+ if (root != DefaultRootWindow(display)) {
+ FAIL;
+ report("%s did not return the expected root window",
+ TestName);
+ trace("Expected root=%0x", DefaultRootWindow(display));
+ trace("Returned root=%0x", root);
+ } else
+ CHECK;
+
+ if (x != 0) {
+ FAIL;
+ report("%s did not return the expected x coordinate",
+ TestName);
+ trace("Expected x=%d", 0);
+ trace("Returned x=%d", x);
+ } else
+ CHECK;
+
+ if (y != 0) {
+ FAIL;
+ report("%s did not return the expected y coordinate",
+ TestName);
+ trace("Expected y=%d", 0);
+ trace("Returned y=%d", y);
+ } else
+ CHECK;
+
+ if (width != XGG_Width) {
+ FAIL;
+ report("%s did not return the expected width",
+ TestName);
+ trace("Expected width=%u", XGG_Width);
+ trace("Returned width=%u", width);
+ } else
+ CHECK;
+
+ if (height != XGG_Height) {
+ FAIL;
+ report("%s did not return the expected height",
+ TestName);
+ trace("Expected height=%u", XGG_Height);
+ trace("Returned height=%u", height);
+ } else
+ CHECK;
+
+ if (border_width != 0) {
+ FAIL;
+ report("%s did not return the expected border_width",
+ TestName);
+ trace("Expected border_width=%u", 0);
+ trace("Returned border_width=%u", border_width);
+ } else
+ CHECK;
+
+ if (depth != vp->depth) {
+ FAIL;
+ report("%s did not return the expected depth",
+ TestName);
+ trace("Expected depth=%u", vp->depth);
+ trace("Returned depth=%u", depth);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(7*nvinf());
+>>ASSERTION Bad A
+.ER BadDrawable
diff --git a/xc/test/xsuite/xtest/tset/CH04/gtslctnown/gtslctnown.m b/xc/test/xsuite/xtest/tset/CH04/gtslctnown/gtslctnown.m
new file mode 100644
index 000000000..66a1e6ab7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/gtslctnown/gtslctnown.m
@@ -0,0 +1,84 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetSelectionOwner CH04
+Window
+
+Display *display = Dsp;
+Atom selection = XA_COPYRIGHT;
+>>EXTERN
+#include "Xatom.h"
+>>ASSERTION Good A
+A call to xname returns the window ID associated with the window that
+currently owns the specified
+.A selection .
+>>STRATEGY
+Create a window with a selection.
+Call xname to obtain the window ID of the selection owner.
+Verify the window ID returned was that of the selection owner.
+>>CODE
+Window owner, ret;
+
+/* Create a window with a selection. */
+ owner = defwin(display);
+ XSetSelectionOwner(display, selection, owner, CurrentTime);
+
+/* Call xname to obtain the window ID of the selection owner. */
+ ret = XCALL;
+
+/* Verify the window ID returned was that of the selection owner. */
+ if (ret != owner) {
+ FAIL;
+ report("%s did not return the window ID of the selection owner",
+ TestName);
+ trace("Expected window ID: %0x", owner);
+ trace("Returned window ID: %0x", ret);
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When the
+.A selection
+is not owned by a window, then a call to xname returns
+.S None .
+>>STRATEGY
+Ensure the selection has no owner.
+Call xname to obtain selection owner.
+Verify that xname returned None.
+>>CODE
+Window ret;
+
+/* Ensure the selection has no owner. */
+ XSetSelectionOwner(display, selection, None, CurrentTime);
+
+/* Call xname to obtain selection owner. */
+ ret = XCALL;
+
+/* Verify that xname returned None. */
+ if(ret != None) {
+ FAIL;
+ report("%s returned %0x on a selection with no owner.",
+ TestName);
+ report("Expecting None.");
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+.ER BadAtom
diff --git a/xc/test/xsuite/xtest/tset/CH04/gtwdwattrb/gtwdwattrb.m b/xc/test/xsuite/xtest/tset/CH04/gtwdwattrb/gtwdwattrb.m
new file mode 100644
index 000000000..e70aa9eda
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/gtwdwattrb/gtwdwattrb.m
@@ -0,0 +1,313 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetWindowAttributes CH04
+Status
+
+Display *display = Dsp;
+Window w;
+XWindowAttributes *window_attributes_return = &w_a;
+>>EXTERN
+XWindowAttributes w_a;
+>># There is only one assertion here. The rational for this is that
+>># this is a fundemental function, and that many of our tests rely
+>># on the correct working of this to succeed. If there is
+>># a problem with the function it will manifest itself elsewhere.
+>># -stuart.
+>>ASSERTION Good A
+A call to xname on an existing window
+.A w
+returns
+.S True ,
+and the current attributes for the specified window
+.A w
+to the
+.A window_attributes_return
+structure.
+>>STRATEGY
+Create a window.
+Call xname to obtain the window attributes.
+Verify the window attributes were returned as expected.
+>>CODE
+Window parent;
+int x, y, depth;
+unsigned int width, height, border_width, class;
+XVisualInfo *vinf;
+Visual *visual;
+unsigned long valuemask;
+XSetWindowAttributes attributes;
+
+/* Create a window. */
+ resetvinf(VI_WIN);
+ if( !nextvinf(&vinf) ) {
+ delete("nextvinf call returned false");
+ return;
+ } else
+ CHECK;
+
+ parent = DefaultRootWindow(Dsp);
+ x = 5;
+ y = 10;
+ width = 15;
+ height = 20;
+ border_width = 3;
+ depth = vinf->depth;
+ class = InputOutput;
+ visual= vinf->visual;
+ valuemask = CWBitGravity | CWWinGravity | CWBackingStore |
+ CWBackingPlanes | CWBackingPixel | CWSaveUnder | CWColormap |
+ CWOverrideRedirect ;
+
+ attributes.bit_gravity = NorthGravity;
+ attributes.win_gravity = SouthGravity;
+ attributes.backing_store = WhenMapped;
+ attributes.backing_planes= 3;
+ attributes.backing_pixel = 1;
+ attributes.save_under = True;
+ attributes.colormap =
+ DefaultColormap(display, DefaultScreen(display)) ;
+ attributes.override_redirect = True;
+
+ w = XCreateWindow(display, parent, x, y, width, height, border_width,
+ depth, class, visual, valuemask, &attributes);
+ regid(display, (union regtypes *)&w, REG_WINDOW);
+
+/* Call xname to obtain the window attributes. */
+ XCALL;
+
+/* Verify the window attributes were returned as expected. */
+#ifdef TESTING
+ x--; y--; width--; height--; class--; depth--;
+ attributes.bit_gravity = EastGravity;
+ attributes.win_gravity = WestGravity;
+ attributes.backing_store = NotUseful;
+ attributes.backing_planes= 5;
+ attributes.backing_pixel = 0;
+ attributes.save_under = False;
+ attributes.colormap = CopyFromParent;
+ attributes.all_event_masks = StructureNotifyMask;
+ attributes.your_event_mask = StructureNotifyMask;
+ attributes.do_not_propagate_mask = StructureNotifyMask;
+ attributes.override_redirect = False;
+#endif
+ if (w_a.x != x || w_a.y != y) {
+ FAIL;
+ report("%s did not return expected x,y coordinates", TestName);
+ trace("Expected x=%d, y=%d", x, y);
+ trace("Returned x=%d, y=%d", w_a.x, w_a.y);
+ } else
+ CHECK;
+
+ if (w_a.width != width) {
+ FAIL;
+ report("%s did not return expected width", TestName);
+ trace("Expected width=%u", width);
+ trace("Returned width=%u", w_a.width);
+ } else
+ CHECK;
+
+ if (w_a.height != height) {
+ FAIL;
+ report("%s did not return expected height", TestName);
+ trace("Expected height=%u", height);
+ trace("Returned height=%u", w_a.height);
+ } else
+ CHECK;
+
+ if (w_a.border_width != border_width) {
+ FAIL;
+ report("%s did not return expected border width", TestName);
+ trace("Expected border_width=%u", border_width);
+ trace("Returned border_width=%u", w_a.border_width);
+ } else
+ CHECK;
+
+ if (w_a.depth != depth) {
+ FAIL;
+ report("%s did not return expected depth", TestName);
+ trace("Expected depth=%d", depth);
+ trace("Returned depth=%d", w_a.depth);
+ } else
+ CHECK;
+
+ if (XVisualIDFromVisual(w_a.visual) != XVisualIDFromVisual(visual)) {
+ FAIL;
+ report("%s did not return expected visual", TestName);
+ trace("Expected visual=%d", XVisualIDFromVisual(visual));
+ trace("Returned visual=%d", XVisualIDFromVisual(w_a.visual));
+ } else
+ CHECK;
+
+ if (w_a.root != parent) {
+ FAIL;
+ report("%s did not return expected root window", TestName);
+ trace("Expected root window=%d", parent);
+ trace("Returned root window=%d", w_a.root);
+ } else
+ CHECK;
+
+ if (w_a.class != class) {
+ FAIL;
+ report("%s did not return expected class", TestName);
+ trace("Expected class=%u", class);
+ trace("Returned class=%u", w_a.class);
+ } else
+ CHECK;
+
+ if (w_a.bit_gravity != attributes.bit_gravity) {
+ FAIL;
+ report("%s did not return expected bit gravity", TestName);
+ trace("Expected bit_gravity=%s",
+ bitgravityname(attributes.bit_gravity));
+ trace("Returned bit_gravity=%s",
+ bitgravityname(w_a.bit_gravity));
+ } else
+ CHECK;
+
+ if (w_a.win_gravity != attributes.win_gravity) {
+ FAIL;
+ report("%s did not return expected win gravity", TestName);
+ trace("Expected win_gravity=%s",
+ wingravityname(attributes.win_gravity));
+ trace("Returned win_gravity=%s",
+ wingravityname(w_a.win_gravity));
+ } else
+ CHECK;
+
+ if (w_a.backing_store != attributes.backing_store) {
+ FAIL;
+ report("%s did not return expected backing store", TestName);
+ trace("Expected backing_store=%s",
+ backingstorename(attributes.backing_store));
+ trace("Returned backing_store=%s",
+ backingstorename(w_a.backing_store));
+ } else
+ CHECK;
+
+ if (w_a.backing_planes != attributes.backing_planes) {
+ FAIL;
+ report("%s did not return expected backing planes", TestName);
+ trace("Expected backing_planes=%u", attributes.backing_planes);
+ trace("Returned backing_planes=%u", w_a.backing_planes);
+ } else
+ CHECK;
+
+ if (w_a.backing_pixel != attributes.backing_pixel) {
+ FAIL;
+ report("%s did not return expected backing pixel", TestName);
+ trace("Expected backing_pixel=%u", attributes.backing_pixel);
+ trace("Returned backing_pixel=%u", w_a.backing_pixel);
+ } else
+ CHECK;
+
+ if (w_a.save_under != attributes.save_under) {
+ FAIL;
+ report("%s did not return expected save under", TestName);
+ trace("Expected save_under=%s",
+ boolname(attributes.save_under));
+ trace("Returned save_under=%s",
+ boolname(w_a.save_under));
+ } else
+ CHECK;
+
+ if (w_a.colormap != attributes.colormap) {
+ FAIL;
+ report("%s did not return expected colormap", TestName);
+ trace("Expected colormap=%d", attributes.colormap);
+ trace("Returned colormap=%d", w_a.colormap);
+ } else
+ CHECK;
+
+ if (w_a.map_installed != True) {
+ FAIL;
+ report("%s did not return expected map_installed", TestName);
+ trace("Expected map_installed=%s",
+ boolname(True));
+ trace("Returned map_installed=%s",
+ boolname(w_a.map_installed));
+ } else
+ CHECK;
+
+ if (w_a.map_state != IsUnmapped ) {
+ FAIL;
+ report("%s did not return expected map_state", TestName);
+ trace("Expected map_state=%s",
+ mapstatename(IsUnmapped));
+ trace("Returned map_state=%s",
+ mapstatename(w_a.map_state));
+ } else
+ CHECK;
+
+ if (w_a.all_event_masks != NoEventMask ) {
+ FAIL;
+ report("%s did not return expected all_event_masks", TestName);
+ trace("Expected all_event_masks=%s",
+ eventmaskname(NoEventMask));
+ trace("Returned all_event_masks=%s",
+ eventmaskname((unsigned long)w_a.all_event_masks));
+ } else
+ CHECK;
+
+ if (w_a.your_event_mask != NoEventMask ) {
+ FAIL;
+ report("%s did not return expected your_event_mask", TestName);
+ trace("Expected your_event_mask=%s",
+ eventmaskname(NoEventMask));
+ trace("Returned your_event_mask=%s",
+ eventmaskname((unsigned long)w_a.your_event_mask));
+ } else
+ CHECK;
+
+ if (w_a.do_not_propagate_mask != NoEventMask ) {
+ FAIL;
+ report("%s did not return expected do_not_propagate_mask",
+ TestName);
+ trace("Expected do_not_propagate_mask=%s",
+ eventmaskname(NoEventMask));
+ trace("Returned do_not_propagate_mask=%s",
+ eventmaskname((unsigned long)w_a.do_not_propagate_mask));
+ } else
+ CHECK;
+
+ if (w_a.override_redirect != True) {
+ FAIL;
+ report("%s did not return expected override_redirect",
+ TestName);
+ trace("Expected override_redirect=%s",
+ boolname(attributes.override_redirect));
+ trace("Returned override_redirect=%s",
+ boolname(w_a.override_redirect));
+ } else
+ CHECK;
+
+ if (w_a.screen != DefaultScreenOfDisplay(display) ) {
+ FAIL;
+ report("%s did not return expected screen pointer",
+ TestName);
+ } else
+ CHECK;
+
+ CHECKPASS(23);
+
+>>ASSERTION Bad B 1
+>># The bad drawable could occur if the window is destroyed whilst the
+>># request is being processed. The Prize for the most original, working
+>># implementation is two Milky Ways..... -stuart.
+When xname is called, then a
+.S BadDrawable
+error can occur.
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH04/gtwdwprprt/gtwdwprprt.m b/xc/test/xsuite/xtest/tset/CH04/gtwdwprprt/gtwdwprprt.m
new file mode 100644
index 000000000..ebac7d798
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/gtwdwprprt/gtwdwprprt.m
@@ -0,0 +1,931 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetWindowProperty CH04
+int
+
+Display *display = Dsp;
+Window w = defwin(display);
+Atom property = XA_COPYRIGHT;
+long long_offset = 2;
+long long_length = 2;
+Bool delete_prop = False;
+Atom req_type = XA_STRING;
+Atom *actual_type_return = &actual_type;
+int *actual_format_return = &actual_format;
+unsigned long *nitems_return = &nitems;
+unsigned long *bytes_after_return = &bytes_after;
+unsigned char **prop_return = &prop;
+>>EXTERN
+#include "Xatom.h"
+
+static Atom actual_type;
+static int actual_format;
+static unsigned long nitems;
+static unsigned long bytes_after;
+static unsigned char *prop;
+
+static void
+set_vars()
+{
+ actual_type = 0;
+ actual_format = -1;
+ nitems = -1;
+ bytes_after = -1;
+ prop = (unsigned char *)NULL;
+}
+
+static int
+check_values( ex_actual_type, ex_actual_format, ex_nitems, ex_bytes_after )
+Atom ex_actual_type;
+int ex_actual_format;
+unsigned long ex_nitems;
+unsigned long ex_bytes_after;
+{
+ int fail;
+ int pass;
+
+ fail=0;
+ pass=0;
+
+#ifdef TESTING_CHECK
+ ex_actual_type = XA_RESOLUTION;
+ ex_actual_format = 6;
+ ex_nitems=256;
+ ex_bytes_after=256;
+#endif
+ if (actual_type != ex_actual_type) {
+ FAIL;
+ report("%s returned an incorrect actual_type_return",
+ TestName);
+ report("Expected actual_type_return: %u (%s)", ex_actual_type,
+ (ex_actual_type==None?"None":atomname(ex_actual_type)));
+ report("Returned actual_type_return: %u (%s)",
+ actual_type, atomname(actual_type));
+ } else
+ pass++;
+
+ if (actual_format != ex_actual_format) {
+ FAIL;
+ report("%s returned an incorrect actual_format_return",
+ TestName);
+ report("Expected actual_format_return: %d", ex_actual_format);
+ report("Returned actual_format_return: %d", actual_format);
+ } else
+ pass++;
+
+ if (nitems != ex_nitems) {
+ FAIL;
+ report("%s returned an incorrect nitems_return",
+ TestName);
+ report("Expected nitems_return: %d", ex_nitems);
+ report("Returned nitems_return: %d", nitems);
+ } else
+ pass++;
+
+ if (bytes_after != ex_bytes_after) {
+ FAIL;
+ report("%s returned an incorrect bytes_after_return",
+ TestName);
+ report("Expected bytes_after_return: %d", ex_bytes_after);
+ report("Returned bytes_after_return: %d", bytes_after);
+ } else
+ pass++;
+
+ return((fail==0 && pass==4?1:0));
+}
+
+>>ASSERTION Good A
+A successful call to xname returns
+.A Success
+and the actual type of the property, the actual format of the property,
+the number of 8-bit, 16-bit, or 32-bit items transferred,
+the number of bytes remaining to be read in the property,
+and a pointer to the data actually returned.
+>>STRATEGY
+Create a window with a property.
+Call xname to obtain the property information.
+Verify that the returned information was correct.
+>>CODE
+int ret;
+unsigned char cbuf[5];
+char *data = "a tested property";
+
+/* Create a window with a property. */
+ XChangeProperty(display, w, property, XA_STRING, 8,
+ PropModeReplace,(unsigned char *)data, strlen(data));
+
+/* Call xname to obtain the property information. */
+ set_vars();
+ long_offset = 3;
+ long_length = 1;
+ delete_prop = False;
+ ret = XCALL;
+
+/* Verify that the returned information was correct. */
+ if (ret != Success) {
+ FAIL;
+ report("%s returned %d (expecting Success (%d))", TestName,
+ ret, Success);
+ } else
+ CHECK;
+
+ if (check_values( XA_STRING, 8, (unsigned long)4, (unsigned long)1 )) {
+ CHECK;
+ } else
+ FAIL;
+
+ (void) strncpy(cbuf, &(data[12]), 4);
+ cbuf[4] = '\0';
+
+ if (prop == (unsigned char *)NULL) {
+ FAIL;
+ report("%s returned an incorrect prop_return",
+ TestName);
+ report("Expected prop_return: unsigned char * pointer");
+ report("Returned prop_return: NULL pointer");
+ } else
+ if (strncmp(prop, (char *)cbuf, 5) != 0) {
+ FAIL;
+ report("%s returned an incorrect prop_return",
+ TestName);
+ report("Expected prop_return: '%s'", cbuf);
+ report("Returned prop_return: '%s'", prop);
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+>># Test for both delete True/False
+>># Ensure no PropertyNotify events were generated. -stuart.
+When the specified
+.A property
+does not exist for the specified window
+.A w ,
+then a call to xname returns
+.S None
+to
+.A actual_type_return ,
+zero to
+.A actual_format_return
+and
+.A bytes_after_return ,
+the
+.A nitems_return
+argument is empty, and the
+.A delete
+argument is ignored.
+>>STRATEGY
+Create a window with PropertyChangeMask events selected and no properties.
+For delete_prop of True and False:
+ Call xname to obtain the property information.
+ Verify that the returned values were correct.
+ Verify that no PropertyNotify events were generated.
+>>CODE
+int mode;
+int ret;
+XEvent ev;
+
+/* Create a window with PropertyChangeMask events selected and no properties. */
+ XDeleteProperty(display, w, property); /* ENSURE property is nuked. */
+ XSync(display,True);
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* For delete_prop of True and False: */
+ for(mode=0; mode<2; mode++) {
+
+/* Call xname to obtain the property information. */
+ delete_prop = (mode==0?True:False);
+ trace("delete_prop is %s", boolname(delete_prop));
+ set_vars();
+ long_offset = 3;
+ long_length = 1;
+ ret = XCALL;
+ XSync(display, False);
+
+/* Verify that the returned values were correct. */
+ if (ret != Success) {
+ FAIL;
+ report("%s returned %d (expecting Success (%d))",
+ TestName, ret, Success);
+ } else
+ CHECK;
+
+ if ( check_values( None, 0,
+ (unsigned long)0, (unsigned long)0 ) ) {
+ CHECK;
+ } else
+ FAIL;
+
+/* Verify that no PropertyNotify events were generated. */
+ ret = getevent(display, &ev);
+#ifdef TESTING
+ ret++;
+ ev.type = PropertyNotify;
+#endif
+ if (ret != 0) {
+ FAIL;
+ report("%s caused %d unexpected event%s", TestName,
+ ret, (ret==1?"":"s"));
+ do {
+ report("event %s returned", eventname(ev.type));
+ } while(getevent(display, &ev) != 0) ;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2*3);
+>>ASSERTION Good A
+>># Ensure the last item by ensuring no PropertyNotify events were
+>># generated. Test for both delete True and False. -stuart.
+When the specified
+.A property
+exists for the specified window
+.A w
+and the type does not match the specified
+.A req_type ,
+then a call to xname returns the actual property type to
+.A actual_type_return ,
+the actual property format to
+.A actual_format_return ,
+and the property length in bytes to
+.A bytes_after_return ,
+the
+.A nitems_return
+argument is empty, and the
+.A delete
+argument is ignored.
+>>STRATEGY
+Create a window with a property and PropertyChangeMask events selected.
+For delete_prop of True and False:
+ Call xname to obtain the property information.
+ Verify that the returned values were correct.
+ Verify that no PropertyNotify events were generated.
+>>CODE
+int mode;
+int ret;
+char *data = "a tested property";
+XEvent ev;
+
+/* Create a window with a property and PropertyChangeMask events selected. */
+ XChangeProperty(display, w, property, XA_STRING, 8,
+ PropModeReplace,(unsigned char *)data, strlen(data));
+ XSync(display,True);
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* For delete_prop of True and False: */
+ for(mode=0; mode<2; mode++) {
+
+/* Call xname to obtain the property information. */
+ delete_prop = (mode==0?True:False);
+ trace("delete_prop is %s", boolname(delete_prop));
+ set_vars();
+ long_offset = 3;
+ long_length = 1;
+ req_type = XA_INTEGER;
+ ret = XCALL;
+ XSync(display, False);
+
+/* Verify that the returned values were correct. */
+ if (ret != Success) {
+ FAIL;
+ report("%s returned %d (expecting Success (%d))",
+ TestName, ret, Success);
+ } else
+ CHECK;
+
+ if ( check_values( XA_STRING, 8,
+ (unsigned long)0, (unsigned long)strlen(data) ) ) {
+ CHECK;
+ } else
+ FAIL;
+
+/* Verify that no PropertyNotify events were generated. */
+ ret = getevent(display, &ev);
+#ifdef TESTING
+ ret++;
+ ev.type = PropertyNotify;
+#endif
+ if (ret != 0) {
+ FAIL;
+ report("%s caused %d unexpected event%s", TestName,
+ ret, (ret==1?"":"s"));
+ do {
+ report("event %s returned", eventname(ev.type));
+ } while(getevent(display, &ev) != 0) ;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2*3);
+>>ASSERTION Good A
+>># Ensure a) No PropertyNotify events generated
+>># b) That the property can be referenced again.
+>># c) tested for req_type of type and AnyPropertyType
+>># Test this by using long_offset and long_length to test different
+>># values for bytes_after_return and nitems_return. -stuart.
+>># There might be a better way of expressing the assertion...
+When the specified
+.A property
+exists for the specified window
+.A w ,
+.A req_type
+is set to the type of the property or
+.S AnyPropertyType ,
+and
+.A delete
+is set to
+.S False ,
+then a call to xname returns the actual
+.A property
+type to
+.A actual_type_return ,
+the actual
+.A property
+format to
+.A actual_format_return ,
+the number of trailing unread bytes in the
+.A property
+in
+.A bytes_after_return ,
+the number of 8/16/32 bit items in
+.A nitems_return ,
+the data is placed in
+.A prop_return ,
+where the data is sourced from four times
+.A long_offset
+bytes into the
+.A property ,
+and is the minimum of the remaining bytes
+left in the
+.A property
+and four times
+.A long_length
+bytes long, and the
+.A property
+is not deleted.
+>>STRATEGY
+Create a window with testable properties.
+For req_type is the required type and AnyPropertyType:
+ Call xname to obtain the property information of a STRING property,
+ with delete False.
+ Verify that the returned values were correct.
+ Verify that no PropertyNotify events were generated.
+ Call xname to obtain the property information of an INTEGER property,
+ with delete False.
+ Verify that the returned values were correct.
+ Verify that no PropertyNotify events were generated.
+>>CODE
+int ret;
+int mode;
+char *cdata = "a tested property";
+>># Unsigned longs _must_ be 32 bits, or this won't work...
+unsigned long idata[4];
+XEvent ev;
+
+/* Create a window with testable properties. */
+ XChangeProperty(display, w, XA_COPYRIGHT, XA_STRING, 8,
+ PropModeReplace, (unsigned char *)cdata, strlen(cdata));
+
+ for( ret=0; ret<4; ret++ )
+ idata[ret] = ret;
+ XChangeProperty(display, w, XA_NOTICE, XA_INTEGER, 32,
+ PropModeReplace, (unsigned char *)idata, 4);
+
+ XSync(display, True);
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* For req_type is the required type and AnyPropertyType: */
+ for(mode=0; mode<2 ;mode++) {
+
+ trace("Calling %s to obtain string information", TestName);
+/* Call xname to obtain the property information of a STRING property, */
+/* with delete False. */
+ set_vars();
+ property = XA_COPYRIGHT;
+ long_length = 2; /* Attempt to read 8 bytes from */
+ long_offset = 4; /* 16 bytes into the property. */
+ /* We expect only one byte to be returned. */
+ trace("req_type is %s", (mode==0?"STRING":"AnyPropertyType"));
+ req_type=(mode==0?XA_STRING:AnyPropertyType);
+ ret = XCALL;
+ XSync(display, False);
+
+/* Verify that the returned values were correct. */
+ if (ret != Success) {
+ FAIL;
+ report("%s returned %d (expecting Success (%d))",
+ TestName, ret, Success);
+ } else
+ CHECK;
+
+ if ( check_values( XA_STRING, 8,
+ (unsigned long)1, (unsigned long)0 ) ) {
+ CHECK;
+ } else
+ FAIL;
+
+ if (prop == (unsigned char *)NULL) {
+ FAIL;
+ report("%s returned an unexpected prop_return");
+ report("Expected prop_return: unsigned char * pointer");
+ report("Returned prop_return: NULL pointer");
+ } else
+ if (strncmp(prop, "y", 1) != 0) {
+ FAIL;
+ report("%s returned an unexpected prop_return");
+ report("Expected prop_return: 'y'");
+ report("Returned prop_return: '%s'", prop);
+ } else
+ CHECK;
+
+/* Verify that no PropertyNotify events were generated. */
+ ret = getevent(display, &ev);
+ if (ret != 0) {
+ FAIL;
+ report("%s caused %d unexpected event%s", TestName,
+ ret, (ret==1?"":"s"));
+ do {
+ report("event %s returned", eventname(ev.type));
+ } while(getevent(display, &ev) != 0) ;
+ } else
+ CHECK;
+
+ trace("Calling %s to obtain integer information", TestName);
+/* Call xname to obtain the property information of an INTEGER property, */
+/* with delete False. */
+ set_vars();
+ property = XA_NOTICE;
+ long_length = 1; /* Attempt to read 4 bytes from */
+ long_offset = 1; /* 4 bytes into the property. */
+ /* We expect one integer to be returned. */
+ trace("req_type is %s", (mode==0?"INTEGER":"AnyPropertyType"));
+ req_type=(mode==0?XA_INTEGER:AnyPropertyType);
+ ret = XCALL;
+ XSync(display, False);
+
+/* Verify that the returned values were correct. */
+ if (ret != Success) {
+ FAIL;
+ report("%s returned %d (expecting Success (%d))",
+ TestName, ret, Success);
+ } else
+ CHECK;
+
+ if ( check_values( XA_INTEGER, 32,
+ (unsigned long)1, (unsigned long)8 ) ) {
+ CHECK;
+ } else
+ FAIL;
+
+ if (prop == (unsigned char *)NULL) {
+ FAIL;
+ report("%s returned an unexpected prop_return");
+ report("Expected prop_return: unsigned char * pointer");
+ report("Returned prop_return: NULL pointer");
+ } else
+ if ( *(unsigned long *)prop != idata[1] ) {
+ FAIL;
+ report("%s returned an unexpected prop_return");
+ report("Expected prop_return: %u", idata[1]);
+ report("Returned prop_return: %u",
+ *(unsigned long*)prop);
+ } else
+ CHECK;
+
+/* Verify that no PropertyNotify events were generated. */
+ ret = getevent(display, &ev);
+ if (ret != 0) {
+ FAIL;
+ report("%s caused %d unexpected event%s", TestName,
+ ret, (ret==1?"":"s"));
+ do {
+ report("event %s returned", eventname(ev.type));
+ } while(getevent(display, &ev) != 0) ;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2*8);
+
+>>ASSERTION Good A
+>># NEW, NON_MIT_REVIEWED ASSERTION
+When the specified
+.A property
+exists for the specified window
+.A w ,
+.A req_type
+is set to the type of the property or
+.S AnyPropertyType ,
+and
+.A delete
+is set to
+.S True ,
+and on a call to xname the number of unread bytes in the
+.A property
+returned to
+.A bytes_after_return
+is non-zero, then
+the actual
+.A property
+type is returned to
+.A actual_type_return ,
+the actual
+.A property
+format to
+.A actual_format_return ,
+the number of trailing unread bytes in the
+.A property
+in
+.A bytes_after_return ,
+the number of 8/16/32 bit items in
+.A nitems_return ,
+the data is placed in
+.A prop_return ,
+where the data is sourced from four times
+.A long_offset
+bytes into the
+.A property ,
+and is the minimum of the remaining bytes
+left in the
+.A property
+and four times
+.A long_length
+bytes long, and the
+.A property
+is not deleted.
+>>STRATEGY
+Create a window with testable properties.
+For req_type is the required type and AnyPropertyType:
+ Call xname to obtain the property information of a STRING property,
+ with delete True.
+ Verify that the returned values were correct.
+ Verify that no PropertyNotify events were generated.
+ Call xname to obtain the property information of an INTEGER property,
+ with delete True.
+ Verify that the returned values were correct.
+ Verify that no PropertyNotify events were generated.
+>>CODE
+int ret;
+int mode;
+char *cdata = "a tested property";
+>># Unsigned longs _must_ be 32 bits, or this won't work...
+unsigned long idata[4];
+XEvent ev;
+
+/* Create a window with testable properties. */
+ XChangeProperty(display, w, XA_COPYRIGHT, XA_STRING, 8,
+ PropModeReplace, (unsigned char *)cdata, strlen(cdata));
+
+ for( ret=0; ret<4; ret++ )
+ idata[ret] = ret;
+ XChangeProperty(display, w, XA_NOTICE, XA_INTEGER, 32,
+ PropModeReplace, (unsigned char *)idata, 4);
+
+ XSync(display, True);
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* For req_type is the required type and AnyPropertyType: */
+ for(mode=0; mode<2 ;mode++) {
+
+ trace("Calling %s to obtain string information", TestName);
+/* Call xname to obtain the property information of a STRING property, */
+/* with delete True. */
+ set_vars();
+ property = XA_COPYRIGHT;
+ long_length = 1; /* Attempt to read 4 bytes from */
+ long_offset = 1; /* 4 bytes into the property. */
+ /* We expect 4 bytes to be returned. */
+ trace("req_type is %s", (mode==0?"STRING":"AnyPropertyType"));
+ req_type=(mode==0?XA_STRING:AnyPropertyType);
+ delete_prop=True;
+ ret = XCALL;
+ XSync(display, False);
+
+/* Verify that the returned values were correct. */
+ if (ret != Success) {
+ FAIL;
+ report("%s returned %d (expecting Success (%d))",
+ TestName, ret, Success);
+ } else
+ CHECK;
+
+ if ( check_values( XA_STRING, 8,
+ (unsigned long)4, (unsigned long)9 ) ) {
+ CHECK;
+ } else
+ FAIL;
+
+ if (prop == (unsigned char *)NULL) {
+ FAIL;
+ report("%s returned an unexpected prop_return");
+ report("Expected prop_return: unsigned char * pointer");
+ report("Returned prop_return: NULL pointer");
+ } else
+ if (strncmp(prop, "sted", 1) != 0) {
+ FAIL;
+ report("%s returned an unexpected prop_return");
+ report("Expected prop_return: 'sted'");
+ report("Returned prop_return: '%s'", prop);
+ } else
+ CHECK;
+
+/* Verify that no PropertyNotify events were generated. */
+ ret = getevent(display, &ev);
+ if (ret != 0) {
+ FAIL;
+ report("%s caused %d unexpected event%s", TestName,
+ ret, (ret==1?"":"s"));
+ do {
+ report("event %s returned", eventname(ev.type));
+ } while(getevent(display, &ev) != 0) ;
+ } else
+ CHECK;
+
+ trace("Calling %s to obtain integer information", TestName);
+/* Call xname to obtain the property information of an INTEGER property, */
+/* with delete True. */
+ set_vars();
+ property = XA_NOTICE;
+ long_length = 1; /* Attempt to read 4 bytes from */
+ long_offset = 1; /* 4 bytes into the property. */
+ /* We expect one integer to be returned. */
+ trace("req_type is %s", (mode==0?"INTEGER":"AnyPropertyType"));
+ req_type=(mode==0?XA_INTEGER:AnyPropertyType);
+ delete_prop = True;
+ ret = XCALL;
+ XSync(display, False);
+
+/* Verify that the returned values were correct. */
+ if (ret != Success) {
+ FAIL;
+ report("%s returned %d (expecting Success (%d))",
+ TestName, ret, Success);
+ } else
+ CHECK;
+
+ if ( check_values( XA_INTEGER, 32,
+ (unsigned long)1, (unsigned long)8 ) ) {
+ CHECK;
+ } else
+ FAIL;
+
+ if (prop == (unsigned char *)NULL) {
+ FAIL;
+ report("%s returned an unexpected prop_return");
+ report("Expected prop_return: unsigned char * pointer");
+ report("Returned prop_return: NULL pointer");
+ } else
+ if ( *(unsigned long *)prop != idata[1] ) {
+ FAIL;
+ report("%s returned an unexpected prop_return");
+ report("Expected prop_return: %u", idata[1]);
+ report("Returned prop_return: %u",
+ *(unsigned long *)prop);
+ } else
+ CHECK;
+
+/* Verify that no PropertyNotify events were generated. */
+ ret = getevent(display, &ev);
+ if (ret != 0) {
+ FAIL;
+ report("%s caused %d unexpected event%s", TestName,
+ ret, (ret==1?"":"s"));
+ do {
+ report("event %s returned", eventname(ev.type));
+ } while(getevent(display, &ev) != 0) ;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2*8);
+
+>>ASSERTION Good A
+When the specified
+.A property
+exists for the specified window
+.A w ,
+.A req_type
+is set to the type of the property or
+.S AnyPropertyType ,
+.A delete
+is set to
+.S True ,
+and on a call to xname the number of unread bytes in the
+.A property
+returned to
+.A bytes_after_return
+is zero, then the property is deleted from the window
+.A w
+and a
+.S PropertyNotify
+event is generated on the specified window
+.A w .
+>>STRATEGY
+Create a window with PropertyChangeMask events selected.
+For req_type is the required type and AnyPropertyType:
+ Create a property on the window.
+ Call xname to obtain the property information,
+ with delete True.
+ Verify that the returned values were correct.
+ Verify that a single PropertyNotify event was generated.
+ Verify that the property has been deleted.
+>>CODE
+int mode;
+int ret;
+char *data="a tested property";
+XEvent ev;
+
+/* Create a window with PropertyChangeMask events selected. */
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* For req_type is the required type and AnyPropertyType: */
+ for(mode=0; mode<2 ;mode++) {
+
+/* Create a property on the window. */
+ XChangeProperty(display, w, XA_COPYRIGHT, XA_STRING, 8,
+ PropModeReplace, (unsigned char *)data, strlen(data));
+ XSync(display,True);
+
+/* Call xname to obtain the property information, */
+/* with delete True. */
+
+ set_vars();
+
+ delete_prop = True;
+ req_type=(mode==0?XA_STRING:AnyPropertyType);
+ long_offset = 3;
+ long_length = 2;
+
+ trace("delete_prop is %s", boolname(delete_prop));
+ trace("req_type is %s", (mode==0?"STRING":"AnyPropertyType"));
+ ret = XCALL;
+ XSync(display, False);
+
+/* Verify that the returned values were correct. */
+ if (ret != Success) {
+ FAIL;
+ report("%s returned %d (expecting Success (%d))",
+ TestName, ret, Success);
+ } else
+ CHECK;
+
+ if ( check_values( XA_STRING, 8,
+ (unsigned long)5, (unsigned long)0 ) ) {
+ CHECK;
+ } else
+ FAIL;
+
+/* Verify that a single PropertyNotify event was generated. */
+ ret = getevent(display, &ev);
+ if (ret != 1 || ev.type != PropertyNotify) {
+ FAIL;
+ report("%s caused %d events", TestName, ret);
+ report("Expecting a single PropertyNotify event");
+ while(ret != 0) {
+ report("Returned: %s event",
+ eventname(ev.type));
+ ret = getevent(display, &ev);
+ }
+ } else {
+ XEvent good;
+ good.type = PropertyNotify;
+ good.xproperty.type = PropertyNotify;
+ good.xproperty.display = display;
+ good.xproperty.serial = 0; /* Can't know */
+ good.xproperty.send_event = False;
+ good.xproperty.display = display;
+ good.xproperty.window = w;
+ good.xproperty.atom = XA_COPYRIGHT;
+ good.xproperty.time = 0 ; /* Can't know */
+ good.xproperty.state = PropertyDelete;
+
+ if (checkevent(&good, &ev) != 0) {
+ FAIL;
+ } else
+ CHECK;
+ }
+
+/* Verify that the property has been deleted. */
+ delete_prop=False;
+ ret = XCALL;
+
+ if ((ret != Success) || !check_values(None, 0,
+ (unsigned long)0, (unsigned long)0) ) {
+ FAIL;
+ report("Property was not deleted.");
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2*4);
+
+>>ASSERTION Good A
+A call to xname always allocates one extra byte in
+.A prop_return
+and sets it to ASCII
+.A NULL .
+>>STRATEGY
+Create a window with a property.
+Call xname to obtain property information.
+Verify that prop_return contained an ASCII NULL.
+>>CODE
+int ret;
+char *data = "a tested property";
+
+/* Create a window with a property. */
+ XChangeProperty(display, w, property, XA_STRING, 8, PropModeReplace,
+ (unsigned char *)data, strlen(data));
+
+/* Call xname to obtain property information. */
+ set_vars();
+ long_offset=1;
+ long_length=0;
+ ret = XCALL;
+
+ if (ret != Success) {
+ delete("%s returned %d when expecting %d", ret, Success);
+ return;
+ } else
+ CHECK;
+
+ if (!check_values( XA_STRING, 8,
+ (unsigned long)0, (unsigned long)13 )) {
+ delete("%s returned unexpected values");
+ } else
+ CHECK;
+
+/* Verify that prop_return contained an ASCII NULL. */
+
+ if (prop == (unsigned char *)NULL) {
+ FAIL;
+ report("%s returned an unexpected prop_return", TestName);
+ report("Expected prop_return: unsigned char * pointer");
+ report("Returned prop_return: NULL pointer");
+ return;
+ } else
+ CHECK;
+
+ if (*prop != (unsigned char)'\0') {
+ FAIL;
+ report("%s did not allocate an ASCII NULL character beyond");
+ report("the prop_return data.");
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+>>ASSERTION Bad A
+.ER BadWindow
+>>ASSERTION Bad A
+.ER BadAtom
+>>ASSERTION Bad A
+When xname is called with
+.A long_offset
+such that the offset lies beyond the end of the
+.A property ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a window with a property and PropertyChangeMask events selected.
+Call xname with a long_offset beyond the property end.
+Verify that a BadValue error occurred.
+>>CODE BadValue
+char *data = "a tested property";
+
+/* Create a window with a property and PropertyChangeMask events selected. */
+ XChangeProperty(display, w, property, XA_STRING, 8,
+ PropModeReplace,(unsigned char *)data, strlen(data));
+
+ seterrdef();
+
+/* Call xname with a long_offset beyond the property end. */
+ long_offset=5;
+ long_length=0;
+
+ XCALL;
+
+/* Verify that a BadValue error occurred. */
+ if (geterr() != BadValue) {
+ FAIL;
+ report("%s did not generate a BadValue when long_offset was",
+ TestName);
+ report("beyond the length of the property");
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH04/intrnatm/intrnatm.m b/xc/test/xsuite/xtest/tset/CH04/intrnatm/intrnatm.m
new file mode 100644
index 000000000..e73ba80d6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/intrnatm/intrnatm.m
@@ -0,0 +1,431 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XInternAtom CH04
+Atom
+
+Display *display = Dsp;
+char *atom_name;
+Bool only_if_exists;
+>>EXTERN
+/* Need to pick up the XA_RECTANGLE declaration */
+#include "Xatom.h"
+
+#define XIA_ATOM_NAME_1 "XTEST_ATOM_ONE"
+#define XIA_ATOM_NAME_2 "XTEST_ATOM_TWO"
+#define XIA_ATOM_NAME_3a "XTEST_ATOM_THREE"
+#define XIA_ATOM_NAME_3b "Xtest_Atom_Three"
+#define XIA_ATOM_NAME_3c "xTeSt_aToM_tHrEe"
+#define XIA_ATOM_NAME_4 "XTEST_ATOM_FOUR"
+#define XIA_ATOM_NAME_5 "XTEST_ATOM_FIVE"
+>>ASSERTION Good A
+A call to xname
+returns the atom identifier associated with the specified
+.A atom_name .
+>>STRATEGY
+Call xname to obtain the atom representation associated with "RECTANGLE".
+Verify that the atom returned was as expected.
+>>CODE
+Atom atom_return;
+
+/* Call xname to obtain the atom representation associated with "RECTANGLE". */
+ atom_name = "RECTANGLE";
+ only_if_exists = True;
+ atom_return = XCALL;
+
+/* Verify that the atom returned was as expected. */
+ if (atom_return != XA_RECTANGLE) {
+ FAIL;
+ report("%s did not return the expected value",
+ TestName);
+ report("Expected value: %u (%s)", (unsigned long)XA_RECTANGLE,
+ atomname(XA_RECTANGLE));
+ report("Returned value: %u (%s)", (unsigned long)atom_return,
+ atomname(atom_return));
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When xname is called with
+.A only_if_exists
+set to
+.S True
+and the specified
+.A atom_name
+is not associated with an atom, then
+.S None
+is returned.
+>>STRATEGY
+Call xname with an atom_name not associated with an atom,
+ with only_if_exists True.
+Verify that None was returned.
+>>CODE
+Atom atom_return;
+
+/* Call xname with an atom_name not associated with an atom, */
+/* with only_if_exists True. */
+ atom_name=XIA_ATOM_NAME_1;
+ only_if_exists = True;
+ atom_return = XCALL;
+
+/* Verify that None was returned. */
+ if (atom_return != (Atom)None) {
+ FAIL;
+ report("%s did not return the expected value", TestName);
+ report("Expected value: %u (None)", None);
+ report("Returned value: %u (%s)", (unsigned long)atom_return,
+ atomname(atom_return));
+ } else
+ CHECK;
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When xname is called with
+.A only_if_exists
+set to
+.S False
+and the specified
+.A atom_name
+is not associated with an atom, then
+an atom is created and its atom identifer is returned.
+>>STRATEGY
+Call xname to ensure that atom_name is not associated with an atom.
+Call xname with an atom_name not associated with an atom,
+ with only_if_exists False.
+Verify that None was not returned.
+Verify that the returned atom id corresponds to atom_name.
+>>CODE
+Atom atom_return;
+char *check_name;
+
+/* Call xname to ensure that atom_name is not associated with an atom. */
+ atom_name=XIA_ATOM_NAME_2;
+ only_if_exists = True;
+ atom_return = XCALL;
+
+ if(atom_return != None) {
+ delete("Atom name %s has an identifier associated with it (%u)",
+ XIA_ATOM_NAME_2, atom_return);
+ report("Possible reason: Server was not reset");
+ report("after a previous test run");
+ return;
+ } else
+ CHECK;
+
+/* Call xname with an atom_name not associated with an atom, */
+/* with only_if_exists False. */
+ atom_name=XIA_ATOM_NAME_2;
+ only_if_exists = False;
+ atom_return = XCALL;
+
+/* Verify that None was not returned. */
+ trace("Atom id returned: %u (%s)", (unsigned long)atom_return,
+ atomname(atom_return));
+
+ if (atom_return == (Atom)None) {
+ FAIL;
+ report("%s did not return the expected value", TestName);
+ report("Expected value: an atom identifier");
+ report("Returned value: %u (None)", None);
+ return;
+ } else
+ CHECK;
+
+/* Verify that the returned atom id corresponds to atom_name. */
+ check_name = XGetAtomName(display, atom_return);
+ if (check_name == NULL) {
+ delete("XGetAtomName returned NULL");
+ return;
+ } else
+ CHECK;
+
+ if(strcmp(check_name, XIA_ATOM_NAME_2) != 0) {
+ FAIL;
+ report("%s did not return an atom id associated with atom_name",
+ TestName);
+ report("Atom returned was %u", (unsigned long)atom_return);
+ report("Expected associated name: %s", XIA_ATOM_NAME_2);
+ report("Returned associated name: %s", check_name);
+ } else
+ CHECK;
+
+ XFree(check_name);
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+On a call to xname, the case of the
+.A atom_name
+string is significant for designating or identifying atoms.
+>>STRATEGY
+Call xname to ensure that atom XIA_ATOM_NAME_3a does not exist.
+Call xname to create an atom XIA_ATOM_NAME_3a.
+Call xname to create an atom XIA_ATOM_NAME_3b.
+Verify the atom identifiers are distinct.
+Call xname to obtain the atom id associated with XIA_ATOM_NAME_3c.
+Verify the atom identifier is None.
+>>CODE
+Atom atom_a, atom_b, atom_return;
+
+/* Call xname to ensure that atom XIA_ATOM_NAME_3a does not exist. */
+ atom_name=XIA_ATOM_NAME_3a;
+ only_if_exists = True;
+ atom_return = XCALL;
+
+ if(atom_return != None) {
+ delete("Atom name %s has an identifier associated with it (%u)",
+ XIA_ATOM_NAME_3a, atom_return);
+ report("Possible reason: Server was not reset");
+ report("after a previous test run");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to create an atom XIA_ATOM_NAME_3a. */
+ atom_name=XIA_ATOM_NAME_3a;
+ only_if_exists = False;
+ atom_a = XCALL;
+
+ if (atom_a == (Atom)None) {
+ delete("%s did not return the expected value", TestName);
+ report("Expected value: an atom identifier for %s",
+ XIA_ATOM_NAME_3a);
+ report("Returned value: %u (None)", None);
+ return;
+ } else
+ CHECK;
+ trace("XIA_ATOM_NAME_3a (%s) is %u", XIA_ATOM_NAME_3a,
+ (unsigned long)atom_a);
+
+/* Call xname to create an atom XIA_ATOM_NAME_3b. */
+ atom_name=XIA_ATOM_NAME_3b;
+ only_if_exists = False;
+ atom_b = XCALL;
+
+ if (atom_b == (Atom)None) {
+ delete("%s did not return the expected value", TestName);
+ report("Expected value: an atom identifier for %s",
+ XIA_ATOM_NAME_3b);
+ report("Returned value: %u (None)", None);
+ return;
+ } else
+ CHECK;
+ trace("XIA_ATOM_NAME_3b (%s) is %u", XIA_ATOM_NAME_3b,
+ (unsigned long)atom_b);
+
+/* Verify the atom identifiers are distinct. */
+ if(atom_a == atom_b) {
+ FAIL;
+ report("%s did not return distinct atom identifiers for",
+ TestName);
+ report("atom %s and atom %s.",
+ XIA_ATOM_NAME_3a, XIA_ATOM_NAME_3b);
+ } else
+ CHECK;
+
+/* Call xname to obtain the atom id associated with XIA_ATOM_NAME_3c. */
+ atom_name=XIA_ATOM_NAME_3c;
+ only_if_exists = True;
+ atom_return = XCALL;
+
+/* Verify the atom id associated with XIA_ATOM_NAME_3c is None. */
+ if (atom_return != (Atom)None) {
+ char *check_name;
+ check_name=XGetAtomName(display, atom_return);
+ FAIL;
+ report("%s did not return the expected value", TestName);
+ report("Expected value: %u (None)", None);
+ report("Returned value: %u (%s)", (unsigned long)atom_return,
+ (check_name==NULL?"NO_NAME":check_name));
+ XFree(check_name);
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>>ASSERTION Good A
+Atoms created by a call to xname will remain defined after the client's
+connection closes.
+>>STRATEGY
+Create a new client.
+Call xname to ensure that XIA_ATOM_NAME_4 is not associated with an atom.
+Call xname to create atom XIA_ATOM_NAME_4 on display2.
+Close display2.
+Allow sufficient time for the server to register the close display
+Verify that atom XIA_ATOM_NAME_4 remains defined.
+>>CODE
+Atom atom_return, atom_return2;
+Display *display2;
+
+/* Create a new client. */
+ if (config.display == (char *) NULL) {
+ delete("config.display not set");
+ return;
+ }
+ else
+ CHECK;
+
+ display2 = XOpenDisplay(config.display);
+ if (display2 == (Display *)NULL) {
+ delete("Could not open display for display2");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to ensure that atom_name is not associated with an atom. */
+ display = display2;
+ atom_name=XIA_ATOM_NAME_4;
+ only_if_exists = True;
+ atom_return = XCALL;
+
+ if(atom_return != None) {
+ delete("Atom name %s has an identifier associated with it (%u)",
+ XIA_ATOM_NAME_4, atom_return);
+ report("Possible reason: Server was not reset");
+ report("after a previous test run");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to create a new atom on display2. */
+ atom_name=XIA_ATOM_NAME_4;
+ only_if_exists = False;
+ atom_return = XCALL;
+
+ trace("Atom id %u returned for %s", (unsigned long)atom_return,
+ XIA_ATOM_NAME_4);
+
+ if (atom_return == (Atom)None) {
+ delete("%s did not return the expected value", TestName);
+ report("Expected value: an atom identifier");
+ report("Returned value: %u (None)", None);
+ return;
+ } else
+ CHECK;
+
+/* Close display2. */
+ (void) XCloseDisplay(display2);
+
+/* Allow sufficient time for the server to register the close display */
+ reset_delay();
+
+/* Verify that atom XIA_ATOM_NAME_4 remains defined. */
+ display = Dsp;
+ atom_name=XIA_ATOM_NAME_4;
+ only_if_exists = True;
+ atom_return2 = XCALL;
+
+ trace("Atom id %u returned for %s", (unsigned long)atom_return,
+ XIA_ATOM_NAME_4);
+
+ if (atom_return2 != atom_return) {
+ FAIL;
+ report("%s did not return the expected value", TestName);
+ report("Expected value: %u (%s)", atom_return,
+ XIA_ATOM_NAME_4);
+ report("Returned value: %u", (unsigned long)atom_return2);
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>>ASSERTION Good A
+When the last connection to the server closes, then atoms created by
+a call to xname will become undefined.
+>>STRATEGY
+Ensure we can open a new display.
+Create an atom by calling xname.
+Close the last connection to the server.
+Allow sufficient time for the server to register the close display
+Open a new connection to the server.
+Verify that the atom is undefined.
+>>CODE
+Atom atom_return;
+
+/* Ensure we can open a new display. */
+ if (config.display == (char *) NULL) {
+ delete("config.display not set");
+ return;
+ }
+ else
+ CHECK;
+
+/* Create an atom by calling xname. */
+ atom_name=XIA_ATOM_NAME_5;
+ only_if_exists = False;
+ atom_return = XCALL;
+
+ trace("Atom id %u returned for %s", (unsigned long)atom_return,
+ XIA_ATOM_NAME_4);
+
+#ifdef TESTING
+ atom_return = None;
+#endif
+ if (atom_return == (Atom)None) {
+ delete("%s did not return the expected value", TestName);
+ report("Expected value: an atom identifier");
+ report("Returned value: %u (None)", None);
+ return;
+ } else
+ CHECK;
+
+/* Close the last connection to the server. */
+ (void) XCloseDisplay(display);
+
+/* Allow sufficient time for the server to register the close display */
+ reset_delay();
+
+/* Open a new connection to the server. */
+ Dsp = XOpenDisplay(config.display);
+ if (Dsp == (Display *)NULL) {
+ int i;
+ delete("Could not open display");
+ cancelrest("Could not open display");
+ return;
+ } else
+ CHECK;
+
+/* Verify that the atom is undefined. */
+ display = Dsp;
+ atom_name=XIA_ATOM_NAME_5;
+ only_if_exists = True;
+ atom_return = XCALL;
+
+ trace("Atom id %u returned for %s", (unsigned long)atom_return,
+ XIA_ATOM_NAME_5);
+
+ if (atom_return != (Atom)None) {
+ char *check_name;
+ FAIL;
+ report("Closing last connection to server did not");
+ report("clear the defined atom %s", XIA_ATOM_NAME_5);
+ report("Expected value: %u (None)", (unsigned long)None);
+ check_name=XGetAtomName(display, atom_return);
+ report("Returned value: %u (%s)", (unsigned long)atom_return,
+ (check_name==NULL?"NO_NAME":check_name));
+ report("Possible reason: Other connections open to server");
+ report("during test run");
+ XFree(check_name);
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+>>ASSERTION Bad A
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadValue only_if_exists True False
diff --git a/xc/test/xsuite/xtest/tset/CH04/linktbl.c b/xc/test/xsuite/xtest/tset/CH04/linktbl.c
new file mode 100644
index 000000000..0f54d55fe
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/linktbl.c
@@ -0,0 +1,36 @@
+/* $XConsortium$ */
+
+#include "xtest.h"
+
+extern struct linkinfo EXChngPrprty;
+extern struct linkinfo EXCnvrtSlctn;
+extern struct linkinfo EXDltPrprty;
+extern struct linkinfo EXGtAtmNm;
+extern struct linkinfo EXGtGmtry;
+extern struct linkinfo EXGtSlctnOwnr;
+extern struct linkinfo EXGtWdwAttrbt;
+extern struct linkinfo EXGtWdwPrprty;
+extern struct linkinfo EXIntrnAtm;
+extern struct linkinfo EXLstPrprts;
+extern struct linkinfo EXQryPntr;
+extern struct linkinfo EXQryTr;
+extern struct linkinfo EXRttWdwPrprt;
+extern struct linkinfo EXStSlctnOwnr;
+
+struct linkinfo *linktbl[] = {
+ &EXChngPrprty,
+ &EXCnvrtSlctn,
+ &EXDltPrprty,
+ &EXGtAtmNm,
+ &EXGtGmtry,
+ &EXGtSlctnOwnr,
+ &EXGtWdwAttrbt,
+ &EXGtWdwPrprty,
+ &EXIntrnAtm,
+ &EXLstPrprts,
+ &EXQryPntr,
+ &EXQryTr,
+ &EXRttWdwPrprt,
+ &EXStSlctnOwnr,
+ 0,
+};
diff --git a/xc/test/xsuite/xtest/tset/CH04/lstprprts/lstprprts.m b/xc/test/xsuite/xtest/tset/CH04/lstprprts/lstprprts.m
new file mode 100644
index 000000000..e0b5d37a7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/lstprprts/lstprprts.m
@@ -0,0 +1,164 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XListProperties CH04
+Atom *
+
+Display *display = Dsp;
+Window w = defwin(display);
+int *num_prop_return = &num_prop;
+>>EXTERN
+#include "Xatom.h"
+
+static int num_prop;
+
+static Atom xlp_list[] = {
+ XA_PRIMARY,
+ XA_CUT_BUFFER0,
+ XA_RECTANGLE,
+ XA_COPYRIGHT,
+};
+static int xlp_nlist = NELEM(xlp_list);
+
+>>ASSERTION Good A
+When the specified window
+.A w
+has properties defined, then a call to xname
+returns a pointer to an array of atom properties that are defined for
+the specified window
+.A w
+and can be freed with XFree,
+and returns the number of properties in the
+array in
+.A num_prop_return .
+>>STRATEGY
+Create a window with properties.
+Call xname to obtain the property list for the window.
+Verify that the number of properties returned was as expected.
+Verify that the correct properties were returned.
+Verify the list may be XFree'd.
+>>CODE
+int loop,loop2;
+int found;
+char *data = "a tested property";
+Atom *ret;
+
+/* Create a window with properties. */
+ for(loop=0; loop<xlp_nlist; loop++)
+ XChangeProperty(display, w, xlp_list[loop], XA_STRING, 8,
+ PropModeReplace,(unsigned char *)data, strlen(data));
+
+/* Call xname to obtain the property list for the window. */
+ num_prop = -1;
+ ret = XCALL;
+
+/* Verify that the number of properties returned was as expected. */
+ if (num_prop != xlp_nlist) {
+ FAIL;
+ report("%s returned an unexpected num_prop_return",
+ TestName);
+ trace("Expected value: %d", xlp_nlist);
+ trace("Returned value: %d", num_prop);
+ } else
+ CHECK;
+
+ if (ret == (Atom *)NULL) {
+ FAIL;
+ report("%s returned a NULL pointer.", TestName);
+ report("Expecting a pointer to a list of atoms.");
+ return;
+ } else
+ CHECK;
+
+
+ found = 0;
+
+/* Verify that the correct properties were returned. */
+ for (loop=0; loop<num_prop; loop++) {
+ for(loop2=0; loop2<xlp_nlist; loop2++) {
+ if( ret[loop] == xlp_list[loop2] ) {
+ found++;
+ break;
+ }
+ }
+ }
+
+#ifdef TESTING
+ found = 0;
+#endif
+
+ if (found != num_prop) {
+ FAIL;
+ report("%s returned unexpected properties", TestName);
+ trace("Expected properties");
+ for (loop=0; loop<xlp_nlist; loop++)
+ trace(" %s", atomname(xlp_list[loop]));
+ trace("Returned properties");
+ for (loop=0; loop<num_prop; loop++)
+ trace(" %s", atomname(ret[loop]));
+ } else
+ CHECK;
+
+/* Verify the list may be XFree'd. */
+ if (num_prop != 0)
+ {
+ XFree((char*)ret);
+ CHECK;
+ }
+
+ CHECKPASS(4);
+>>ASSERTION Good A
+When the specified window
+.A w
+has no properties defined, then a call to xname returns
+.S NULL ,
+and zero in
+.A num_prop_return .
+>>STRATEGY
+Create a window with no properties.
+Call xname to obtain the property list for the window.
+Verify that a NULL pointer was returned.
+Verify that num_prop_return was zero.
+>>CODE
+Atom *ret;
+
+/* Create a window with no properties. */
+/* Call xname to obtain the property list for the window. */
+ num_prop = -1;
+ ret = XCALL;
+
+/* Verify that a NULL pointer was returned. */
+ if (ret != (Atom *)NULL) {
+ FAIL;
+ report("%s returned an unexpected value", TestName);
+ trace("Expected value: NULL pointer");
+ trace("Returned value: non-NULL pointer");
+ } else
+ CHECK;
+
+/* Verify that num_prop_return was zero. */
+ if (num_prop != 0) {
+ FAIL;
+ report("%s returned an unexpected num_prop_return",
+ TestName);
+ trace("Expected value: 0");
+ trace("Returned value: %d", num_prop);
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH04/qrypntr/qrypntr.m b/xc/test/xsuite/xtest/tset/CH04/qrypntr/qrypntr.m
new file mode 100644
index 000000000..d8a9d4a6e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/qrypntr/qrypntr.m
@@ -0,0 +1,330 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XQueryPointer CH04
+Bool
+
+Display *display = Dsp;
+Window w;
+Window *root_return = &root;
+Window *child_return = &child;
+int *root_x_return = &root_x;
+int *root_y_return = &root_y;
+int *win_x_return = &win_x;
+int *win_y_return = &win_y;
+unsigned int *mask_return = &mask;
+>>EXTERN
+Window root;
+Window child;
+int root_x;
+int root_y;
+int win_x;
+int win_y;
+unsigned int mask;
+
+static void
+set_variables()
+{
+ root = (Window)0;
+ child= (Window)0;
+ root_x= 0;
+ root_y= 0;
+ win_x = 0;
+ win_y =0;
+ mask = 0;
+}
+
+#define XQP_X 60
+#define XQP_Y 50
+>>ASSERTION Good A
+A call to xname returns the root window the pointer is logically on in
+.A root_return ,
+and the pointer coordinates relative to the root window's origin in
+.A root_x_return
+and
+.A root_y_return .
+>>STRATEGY
+Call XWarpPointer to move pointer to a known position
+Call xname to obtain pointer position
+Verify that the correct root window and pointer position were returned
+>>CODE
+Bool ret;
+
+/* Call XWarpPointer to move pointer to a known position */
+ (void) warppointer(display, DefaultRootWindow(display), XQP_X, XQP_Y);
+
+/* Call xname to obtain pointer position */
+ w = DefaultRootWindow(display);
+ set_variables();
+ ret = XCALL;
+ if (ret != True) {
+ delete("%s returned %s, expecting True", TestName,
+ boolname(ret));
+ } else
+ CHECK;
+
+/* Verify that the correct root window and pointer position were returned */
+ if (root != DefaultRootWindow(display)) {
+ FAIL;
+ report("%s did not return expected root window", TestName);
+ trace("Expected root window=%0x", DefaultRootWindow(display));
+ trace("Returned root window=%0x", root);
+ } else
+ CHECK;
+
+ if (root_x != XQP_X) {
+ FAIL;
+ report("%s did not return expected root_x_return", TestName);
+ trace("Expected root_x_return=%d", XQP_X);
+ trace("Returned root_x_return=%d", root_x);
+ } else
+ CHECK;
+
+ if (root_y != XQP_Y) {
+ FAIL;
+ report("%s did not return expected root_y_return", TestName);
+ trace("Expected root_y_return=%d", XQP_Y);
+ trace("Returned root_y_return=%d", root_y);
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+>>ASSERTION Good C
+If multiple screens are supported:
+When the pointer is not on the same screen as the specified window
+.A w ,
+then a call to xname returns
+.S False ,
+.A child_return
+is set to
+.S None ,
+and
+.A win_x_return
+and
+.A win_y_return
+are set to zero.
+>>STRATEGY
+If multiple screens are supported:
+ Ensure that pointer is not on the alternate screen
+ Call xname to obtain pointer position on alternate screen
+ Verify that win_x_return, win_y_return and child_return
+ were set correctly
+>>CODE
+Bool ret;
+
+/* If multiple screens are supported: */
+ if (config.alt_screen == -1) {
+ unsupported("No alternate screen supported");
+ return;
+ }
+
+/* Ensure that pointer is not on the alternate screen */
+ (void) warppointer(display, DefaultRootWindow(display), XQP_X, XQP_Y);
+
+/* Call xname to obtain pointer position on alternate screen */
+ set_variables();
+ w = RootWindow(display, config.alt_screen);
+ ret = XCALL;
+ if (ret != False) {
+ FAIL;
+ report("%s returned %s, expecting False.", TestName,
+ boolname(ret));
+ } else
+ CHECK;
+
+/* Verify that win_x_return, win_y_return and child_return */
+/* were set correctly */
+ if (child != None) {
+ FAIL;
+ report("%s returned an unexpected window in child_return",
+ TestName);
+ trace("Expected (*child_return)=%0x (None)", None);
+ trace("Returned (*child_return)=%0x", child);
+ } else
+ CHECK;
+
+ if (win_x != 0) {
+ FAIL;
+ report("%s returned an unexpected value for win_x_return",
+ TestName);
+ trace("Expected (*win_x_return)=0");
+ trace("Returned (*win_x_return)=%d", win_x);
+ } else
+ CHECK;
+
+ if (win_y != 0) {
+ FAIL;
+ report("%s returned an unexpected value for win_y_return",
+ TestName);
+ trace("Expected (*win_y_return)=0");
+ trace("Returned (*win_y_return)=%d", win_y);
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+>>ASSERTION Good A
+When the pointer is on the same screen as the specified window
+.A w
+and a child of that window contains the pointer, then a call to xname returns
+.S True ,
+.A win_x_return
+and
+.A win_y_return
+are set to the pointer coordinates relative to the origin
+of the specified window
+.A w ,
+and
+.A child_return
+is set to the child window.
+>>STRATEGY
+Create a child of the root window
+Ensure the pointer is over the child by calling warppointer()
+Call xname to obtain pointer position
+Verify that win_x_return, win_y_return and child_return
+ were set correctly
+>>CODE
+Window rc;
+XVisualInfo *vp;
+Bool ret;
+
+/* Create a child of the root window */
+ resetvinf(VI_WIN); (void)nextvinf(&vp);
+ /* makewinpos border width had better not change... */
+ rc = makewinpos(display, vp, XQP_X-1, XQP_Y-1);
+
+/* Ensure the pointer is over the child by calling warppointer() */
+ (void) warppointer(display, DefaultRootWindow(display),
+ XQP_X+10, XQP_Y+5);
+
+/* Call xname to obtain pointer position */
+ set_variables();
+ w = DefaultRootWindow(display);
+ ret = XCALL;
+ if (ret != True) {
+ FAIL;
+ report("%s returned %s, expecting True.", TestName,
+ boolname(ret));
+ } else
+ CHECK;
+
+/* Verify that win_x_return, win_y_return and child_return */
+/* were set correctly */
+ if (child != rc) {
+ FAIL;
+ report("%s returned an unexpected window in child_return",
+ TestName);
+ trace("Expected (*child_return)=%0x", rc);
+ trace("Returned (*child_return)=%0x", child);
+ } else
+ CHECK;
+
+ if (win_x != XQP_X+10) {
+ FAIL;
+ report("%s returned an unexpected value for win_x_return",
+ TestName);
+ trace("Expected (*win_x_return)=%d", XQP_X+10);
+ trace("Returned (*win_x_return)=%d", win_x);
+ } else
+ CHECK;
+
+ if (win_y != XQP_Y+5) {
+ FAIL;
+ report("%s returned an unexpected value for win_y_return",
+ TestName);
+ trace("Expected (*win_y_return)=%d", XQP_Y+5);
+ trace("Returned (*win_y_return)=%d", win_y);
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+>>ASSERTION Good A
+When the pointer is on the same screen as the specified window
+.A w
+and no child of that window contains the pointer,
+then a call to xname returns
+.S True ,
+.A win_x_return
+and
+.A win_y_return
+are set to the pointer coordinates relative to the origin
+of the specified window
+.A w ,
+and
+.A child_return
+is set to
+.S None .
+>>STRATEGY
+Create window
+Ensure the pointer is over the window by calling warppointer()
+Call xname to obtain pointer position
+Verify that win_x_return, win_y_return and child_return
+ were set correctly
+>>CODE
+Bool ret;
+
+/* Create a window */
+ w = defwin(display);
+
+/* Ensure the pointer is over the window by calling warppointer() */
+ (void) warppointer(display, w, 10, 5);
+
+/* Call xname to obtain pointer position */
+ set_variables();
+ ret = XCALL;
+ if (ret != True) {
+ FAIL;
+ report("%s returned %s, expecting True.", TestName,
+ boolname(ret));
+ } else
+ CHECK;
+
+/* Verify that win_x_return, win_y_return and child_return */
+/* were set correctly */
+ if (child != None) {
+ FAIL;
+ report("%s returned an unexpected window in child_return",
+ TestName);
+ trace("Expected child_return=%0x", None);
+ trace("Returned child_return=%0x", child);
+ } else
+ CHECK;
+
+ if (win_x != 10) {
+ FAIL;
+ report("%s returned an unexpected value for win_x_return",
+ TestName);
+ trace("Expected win_x_return=%d", 10);
+ trace("Returned win_x_return=%d", win_x);
+ } else
+ CHECK;
+
+ if (win_y != 5) {
+ FAIL;
+ report("%s returned an unexpected value for win_y_return",
+ TestName);
+ trace("Expected (*win_y_return)=%d", 5);
+ trace("Returned (*win_y_return)=%d", win_y);
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+>>ASSERTION Good B 1
+A call to xname returns the current logical state of the keyboard buttons
+and the modifier keys as the bitwise inclusive OR of one or more
+of the button or modifier key bitmasks in
+.A mask_return .
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH04/qrytr/qrytr.m b/xc/test/xsuite/xtest/tset/CH04/qrytr/qrytr.m
new file mode 100644
index 000000000..5b1b8979b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/qrytr/qrytr.m
@@ -0,0 +1,242 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XQueryTree CH04
+Status
+
+Display *display = Dsp;
+Window w;
+Window *root_return = &root;
+Window *parent_return = &parent;
+Window **children_return = &children;
+unsigned int *nchildren_return = &nchildren;
+>>EXTERN
+/* These are the store locations for the returned data */
+static Window root;
+static Window parent;
+static Window *children;
+static unsigned int nchildren;
+
+/* Window structure template */
+/* A window with three child windows, one of which has */
+/* 3 overlapping children */
+static char *QTtemplate[] = {
+ ".",
+ "one . (10,10) 80x70",
+ "onec1 one (5,5) 30x30",
+ "onec2 one (15,10) 15x15",
+ "onec3 one (10,15) 15x15",
+ "two . (20,50) 40x20",
+ "three . (55,20) 20x20",
+};
+static int NQTtemplate = NELEM(QTtemplate);
+
+static char *QT2template[] = {
+ ".",
+ "one . (10,10) 80x70",
+ "o1 one (5,5) 40x40",
+ "two . (25,25) 10x10",
+ "o2 one (30,30) 40x35",
+ "o3 one (20,50) 45x10",
+ "o4 one (60,10) 10x10",
+ "o5 one (15,35) 30x20",
+};
+static int NQT2template = NELEM(QT2template);
+
+>>ASSERTION Good A
+A successful call to xname returns non-zero, the root window ID in
+.A root_return ,
+the parent window of the specified window
+.A w
+in
+.A parent_return ,
+a pointer to the list of children windows of specified window
+.A w
+in
+.A children_return ,
+and the number of children in the list for the specified window
+.A w
+in
+.A nchildren_return .
+>># ALTERNATIVE WORDING:
+>># A call to xname returns the root window ID of the specified window
+>># .A w
+>># in
+>># .A root_return ,
+>># the parent window in
+>># .A parent_return ,
+>># a pointer to the list of child windows in
+>># .A children_return
+>># which can be freed with XFree,
+>># and the number of child windows in the list in
+>># .A nchildren_return .
+>>STRATEGY
+Create a window hierarchy.
+Call xname to query the window tree.
+Verify that the root window, parent window, number of children and
+ the children array were returned as expected.
+>>CODE
+Window realparent;
+struct buildtree *tree;
+Window one, two, three;
+Window childarray[3];
+int loop;
+
+/* Create a window hierarchy. */
+ realparent = defwin(display);
+ tree = buildtree(display, realparent, QTtemplate, NQTtemplate);
+ one = btntow(tree, "one");
+ two = btntow(tree, "two");
+ three = btntow(tree, "three");
+ childarray[0] = btntow(tree, "onec1");
+ childarray[1] = btntow(tree, "onec2");
+ childarray[2] = btntow(tree, "onec3");
+ trace("root window is %0x", DefaultRootWindow(Dsp));
+ trace("parent is %0x", realparent);
+ trace("one is %0x", one);
+ trace("two is %0x", two);
+ trace("three is %0x", three);
+ for(loop=0; loop<3; loop++)
+ trace("onec%d is %0x", loop, childarray[loop]);
+
+/* Call xname to query the window tree. */
+#ifdef TESTING
+ w = realparent;
+#else
+ w = one;
+#endif
+ parent = None;
+ root = None;
+ children = (Window *)NULL;
+ nchildren = -1;
+ XCALL;
+
+/* Verify that the root window, parent window, number of children and */
+/* the children array were returned as expected. */
+
+
+ if (root != DefaultRootWindow(Dsp)) {
+ FAIL;
+ report("%s returned an unexpected value for the root window", TestName);
+ report("Expected: %0x", DefaultRootWindow(Dsp));
+ report("Returned: %0x", root);
+ } else
+ CHECK;
+
+ if (parent != realparent) {
+ FAIL;
+ report("%s returned an unexpected value for the parent window", TestName);
+ report("Expected: %0x", realparent);
+ report("Returned: %0x", parent);
+ } else
+ CHECK;
+
+ if (nchildren != 3) {
+ FAIL;
+ report("%s returned an unexpected number of child windows", TestName);
+ report("Expected: 3");
+ report("Returned: %d", nchildren);
+ for(loop=0; loop<nchildren; loop++)
+ report("children[%d] is %0x", loop, children[loop]);
+ } else {
+ for(loop=0; loop<nchildren; loop++)
+ {
+ if(children[loop] != childarray[loop]) {
+ FAIL;
+ report("children array [%d] returned unexpected window", loop);
+ report("Expected: %0x", childarray[loop]);
+ report("Returned: %0x", children[loop]);
+ } else
+ CHECK;
+ }
+ XFree((char*)children);
+ }
+
+ CHECKPASS(5);
+
+>>ASSERTION Good A
+A call to xname returns the child windows
+of the specified window
+.A w
+in
+.A children_return
+in current stacking order from bottommost first to topmost last.
+>>STRATEGY
+Create a window hierarchy.
+Call xname to query the window tree.
+Verify that the children array was returned as expected.
+>>CODE
+Window realparent;
+struct buildtree *tree;
+Window one, two;
+Window childarray[5];
+int loop;
+
+/* Create a window hierarchy. */
+ realparent = defwin(display);
+ tree = buildtree(display, realparent, QT2template, NQT2template);
+ one = btntow(tree, "one");
+ two = btntow(tree, "two");
+ childarray[0] = btntow(tree, "o1");
+ childarray[1] = btntow(tree, "o2");
+ childarray[2] = btntow(tree, "o3");
+ childarray[3] = btntow(tree, "o4");
+ childarray[4] = btntow(tree, "o5");
+ trace("root window is %0x", DefaultRootWindow(Dsp));
+ trace("parent is %0x", realparent);
+ trace("one is %0x", one);
+ trace("two is %0x", two);
+ for(loop=0; loop<5; loop++)
+ trace("one child %d is %0x", loop, childarray[loop]);
+
+/* Call xname to query the window tree. */
+#ifdef TESTING
+ w = realparent;
+#else
+ w = one;
+#endif
+ parent = None;
+ root = None;
+ children = (Window *)NULL;
+ nchildren = -1;
+ XCALL;
+
+/* Verify that the children array was returned as expected. */
+ if (nchildren != 5) {
+ FAIL;
+ report("%s returned an unexpected number of child windows", TestName);
+ report("Expected: 5");
+ report("Returned: %d", nchildren);
+ for(loop=0; loop<nchildren; loop++)
+ report("children[%d] is %0x", loop, children[loop]);
+ } else {
+ for(loop=0; loop<nchildren; loop++)
+ {
+ if(children[loop] != childarray[loop]) {
+ FAIL;
+ report("children array [%d] returned unexpected window", loop);
+ report("Expected: %0x", childarray[loop]);
+ report("Returned: %0x", children[loop]);
+ } else
+ CHECK;
+ }
+ XFree((char*)children);
+ }
+
+ CHECKPASS(5);
+
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH04/rttwdwprpr/rttwdwprpr.m b/xc/test/xsuite/xtest/tset/CH04/rttwdwprpr/rttwdwprpr.m
new file mode 100644
index 000000000..bf4b78ed4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/rttwdwprpr/rttwdwprpr.m
@@ -0,0 +1,600 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XRotateWindowProperties CH04
+void
+
+Display *display = Dsp;
+Window w = defwin(display);
+Atom *properties = (Atom *)&(xrwp_list[0]);
+int num_prop = 4;
+int npositions = 1;
+>>EXTERN
+#include "Xatom.h"
+
+static Atom xrwp_list[5] = {
+ 0, 0, 0, 0, (unsigned)-1 };
+
+static void
+xrwp_add_property(disp, win, prop, data)
+Display *disp;
+Window win;
+Atom prop;
+unsigned long data;
+{
+ XChangeProperty(disp, win, prop, XA_INTEGER, 32,
+ PropModeReplace,(unsigned char *)&data, 1);
+ XSync(disp, True);
+}
+
+>>ASSERTION Good A
+>># This assertion is rather redundant. Perhaps we should delete it.
+>># If we don't delete it, we really ought to make the following changes.
+A call to xname rotates
+>># INSERT: the property values associated with
+.A properties
+>># DELETE next line
+on the window
+>># INSERT: of the window
+.A w
+and generates
+>># INSERT: a
+.S PropertyNotify
+>># DELETE next line
+events.
+>># INSERT: for each property.
+>>STRATEGY
+Create a window with properties, with PropertyChangeMask events selected.
+Call xname to rotate the window properties.
+Verify that PropertyNotify events were genereated.
+Verify that the property values were rotated as expected.
+>>CODE
+int num_ev;
+int loop;
+XEvent ev, good;
+
+/* Create a window with properties, with PropertyChangeMask events selected. */
+ xrwp_list[0] = XA_INTEGER;
+ xrwp_list[1] = XA_COPYRIGHT;
+ for(loop=0; loop<2; loop++)
+ xrwp_add_property(display, w, xrwp_list[loop],
+ (unsigned long)loop);
+
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* Call xname to rotate the window properties. */
+ num_prop = 2;
+ XCALL;
+
+/* Verify that PropertyNotify events were genereated. */
+ num_ev = getevent(display, &ev);
+ if(num_ev != 2) {
+ FAIL;
+ report("%s did not cause the expected events",
+ TestName);
+ trace("Expected: 2 PropertyNotify events");
+ trace("Returned: %d events", num_ev);
+ for(; num_ev>0; ) {
+ trace("Event: %s", eventname(ev.type));
+ if(ev.type==PropertyNotify)
+ trace("Property: %s",
+ atomname(ev.xproperty.atom));
+ num_ev = getevent(display, &ev);
+ }
+ return;
+ } else {
+ loop=0;
+ do {
+ good.type = PropertyNotify;
+ good.xproperty.type = PropertyNotify;
+ good.xproperty.atom = xrwp_list[loop++];
+ good.xproperty.display = display;
+ good.xproperty.window = w;
+ good.xproperty.state = PropertyNewValue;
+ if (checkevent(&good, &ev)) {
+ FAIL;
+ } else
+ CHECK;
+ } while(getevent(display, &ev));
+ }
+
+/* Verify that the property values were rotated as expected. */
+ for(loop=0; loop<2; loop++) {
+ Atom type;
+ int format;
+ unsigned long nitems;
+ unsigned long after;
+ unsigned char *value;
+
+ XGetWindowProperty(display, w, xrwp_list[loop], 0, 1, False,
+ XA_INTEGER, &type, &format, &nitems, &after,
+ &value);
+
+ if (type != XA_INTEGER || format != 32 ||
+ nitems != 1 || after != 0) {
+ delete("XGetWindowProperty returned unexpected values");
+ trace("loop is %d", loop);
+ trace("type is %s (expected XA_INTEGER)",
+ atomname(type));
+ trace("format is %d (expected 32)", format);
+ trace("nitems is %u (expected 1)", nitems);
+ trace("after is %u (expected 0)", after);
+ return;
+ } else {
+ unsigned long tmp;
+
+ tmp = *(unsigned long *)value;
+ if (tmp != ((loop+1) % 2) ) {
+ FAIL;
+ report("%s did not rotate values as expected",
+ TestName);
+ trace("expected value %u", (loop+1) %2);
+ trace("returned value %u", tmp);
+ } else {
+ CHECK;
+ trace("expected value %u returned", tmp);
+ }
+ }
+ }
+
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When
+.A npositions
+mod
+.A num_prop
+is non-zero, then a call to xname reorders the values associated with the
+.A properties
+such that the value associated with a
+.A properties
+[I] becomes the value associated with the
+.A properties
+[ I +
+.A npositions ]
+mod
+.A num_prop ,
+and a
+.S PropertyNotify
+event is generated for each member of the
+.A properties
+array in the array order.
+>>STRATEGY
+Create a window with properties, with PropertyChangeMask events selected.
+Call xname to rotate the window properties.
+Verify that PropertyNotify events were genereated.
+Verify that the property values were rotated as expected.
+>>CODE
+int num_ev;
+int loop;
+XEvent ev, good;
+
+/* Create a window with properties, with PropertyChangeMask events selected. */
+ xrwp_list[0] = XA_INTEGER;
+ xrwp_list[1] = XA_COPYRIGHT;
+ xrwp_list[2] = XA_WM_HINTS;
+ xrwp_list[3] = XA_NOTICE;
+ for(loop=0; loop<num_prop; loop++)
+ xrwp_add_property(display, w, xrwp_list[loop],
+ (unsigned long)loop);
+
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* Call xname to rotate the window properties. */
+ XCALL;
+
+/* Verify that PropertyNotify events were genereated. */
+ num_ev = getevent(display, &ev);
+ if(num_ev != num_prop) {
+ FAIL;
+ report("%s did not cause the expected events",
+ TestName);
+ trace("Expected: %d PropertyNotify events", num_prop);
+ trace("Returned: %d events", num_ev);
+ for(; num_ev>0; ) {
+ trace("Event: %s", eventname(ev.type));
+ if(ev.type==PropertyNotify)
+ trace("Property: %s",
+ atomname(ev.xproperty.atom));
+ num_ev = getevent(display, &ev);
+ }
+ return;
+ } else {
+ loop=0;
+ do {
+ good.type = PropertyNotify;
+ good.xproperty.type = PropertyNotify;
+ good.xproperty.atom = xrwp_list[loop++];
+ good.xproperty.display = display;
+ good.xproperty.window = w;
+ good.xproperty.state = PropertyNewValue;
+ if (checkevent(&good, &ev)) {
+ FAIL;
+ } else
+ CHECK;
+ } while(getevent(display, &ev));
+ }
+
+/* Verify that the property values were rotated as expected. */
+ for(loop=0; loop<num_prop; loop++) {
+ Atom type;
+ int format;
+ unsigned long nitems;
+ unsigned long after;
+ unsigned char *value;
+ XGetWindowProperty(display, w, xrwp_list[loop], 0, 1, False,
+ XA_INTEGER, &type, &format, &nitems, &after,
+ &value);
+
+ if (type != XA_INTEGER || format != 32 ||
+ nitems != 1 || after != 0) {
+ delete("XGetWindowProperty returned unexpected values");
+ trace("loop is %d", loop);
+ trace("type is %s (expected XA_INTEGER)",
+ atomname(type));
+ trace("format is %d (expected 32)", format);
+ trace("nitems is %u (expected 1)", nitems);
+ trace("after is %u (expected 0)", after);
+ return;
+ } else {
+ unsigned long tmp;
+
+ /*
+ * The new value of prop[loop] is the value of the old
+ * prop[loop-npositions mod num_prop]
+ */
+ tmp = *(unsigned long *)value;
+ if (tmp != ((loop-npositions + num_prop) % num_prop) ) {
+ FAIL;
+ report("%s did not rotate values as expected",
+ TestName);
+ trace("expected value %u",
+ (loop-npositions + num_prop) % num_prop);
+ trace("returned value %u", tmp);
+ } else {
+ CHECK;
+ trace("expected value %u returned", tmp);
+ }
+ }
+ }
+
+ CHECKPASS(2*num_prop);
+
+>>ASSERTION Bad A
+When an atom occurs more than once in the
+.A properties
+list, then a call to xname changes no window
+>># DELETE next line
+.A properties, and a
+>># INSERT: property values, and a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create a window with properties, and PropertyChangeMask events selected.
+Ensure that the properties array contains a duplicate member.
+Call xname to rotate the window properties.
+Verify that a BadMatch error occurred.
+Verify that no property notify events were raised.
+Verify that the property values were not modified.
+>>CODE BadMatch
+XEvent ev;
+int loop;
+int num_ev;
+
+/* Create a window with properties, and PropertyChangeMask events selected. */
+ xrwp_list[0] = XA_INTEGER;
+ xrwp_list[1] = XA_COPYRIGHT;
+ xrwp_list[2] = XA_WM_HINTS;
+ for(loop=0; loop<3; loop++)
+ xrwp_add_property(display, w, xrwp_list[loop],
+ (unsigned long)loop);
+
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* Ensure that the properties array contains a duplicate member. */
+ xrwp_list[3] = XA_COPYRIGHT;
+
+/* Call xname to rotate the window properties. */
+ XCALL;
+
+/* Verify that a BadMatch error occurred. */
+ if (geterr() != BadMatch) {
+ FAIL;
+ report("%s did not generate a BadMatch", TestName);
+ report("when the property list contained a duplicate");
+ } else
+ CHECK;
+
+/* Verify that no property notify events were raised. */
+ num_ev =getevent(display, &ev);
+ if(num_ev != 0) {
+ XEvent ev;
+ FAIL;
+ report("%s caused unexpected events",
+ TestName);
+ trace("Expected: no events");
+ trace("Returned: %d events", num_ev);
+ for(; num_ev>0; ) {
+ trace("Event: %s", eventname(ev.type));
+ if(ev.type==PropertyNotify)
+ trace("Property: %s",
+ atomname(ev.xproperty.atom));
+ num_ev = getevent(display, &ev);
+ }
+ return;
+ } else
+ CHECK;
+
+/* Verify that the property values were not modified. */
+ for(loop=0; loop<3; loop++) {
+ Atom type;
+ int format;
+ unsigned long nitems;
+ unsigned long after;
+ unsigned char *value;
+ XGetWindowProperty(display, w, xrwp_list[loop], 0, 1, False,
+ XA_INTEGER, &type, &format, &nitems, &after,
+ &value);
+
+ if (type != XA_INTEGER || format != 32 ||
+ nitems != 1 || after != 0) {
+ delete("XGetWindowProperty returned unexpected values");
+ trace("loop is %d", loop);
+ trace("type is %s (expected XA_INTEGER)",
+ atomname(type));
+ trace("format is %d (expected 32)", format);
+ trace("nitems is %u (expected 1)", nitems);
+ trace("after is %u (expected 0)", after);
+ return;
+ } else {
+ unsigned long tmp;
+
+ tmp = *(unsigned long *)value;
+ if (tmp != loop ) {
+ FAIL;
+ report("%s changed the property values",
+ TestName);
+ report("when no change was expected");
+ trace("expected value %u", loop);
+ trace("returned value %u", tmp);
+ } else {
+ CHECK;
+ trace("expected property value %u", tmp);
+ }
+ }
+ }
+
+ CHECKPASS(5);
+
+>>ASSERTION Bad A
+When an atom in the
+.A properties
+list is not a property of the specified window
+.A w ,
+then a call to xname
+changes no window
+>># DELETE next line
+.A propreties ,
+>># INSERT: property values,
+and a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create a window with properties, and PropertyChangeMask events selected.
+Ensure the properties array has a member that is not a window property.
+Call xname to rotate the window properties.
+Verify that a BadMatch error occurred.
+Verify that no property notify events were raised.
+Verify that the property values were not modified.
+>>CODE BadMatch
+int loop;
+XEvent ev;
+int num_ev;
+
+/* Create a window with properties, and PropertyChangeMask events selected. */
+ xrwp_list[0] = XA_INTEGER;
+ xrwp_list[1] = XA_COPYRIGHT;
+ xrwp_list[2] = XA_WM_HINTS;
+ for(loop=0; loop<3; loop++)
+ xrwp_add_property(display, w, xrwp_list[loop],
+ (unsigned long)loop);
+
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* Ensure the properties array has a member that is not a window property. */
+ xrwp_list[3] = XA_NOTICE;
+
+/* Call xname to rotate the window properties. */
+ XCALL;
+
+/* Verify that a BadMatch error occurred. */
+ if (geterr() != BadMatch) {
+ FAIL;
+ report("%s did not generate a BadMatch", TestName);
+ report("when the property list contained a duplicate");
+ } else
+ CHECK;
+
+/* Verify that no property notify events were raised. */
+ num_ev =getevent(display, &ev);
+ if(num_ev != 0) {
+ XEvent ev;
+ FAIL;
+ report("%s caused unexpected events",
+ TestName);
+ trace("Expected: no events");
+ trace("Returned: %d events", num_ev);
+ for(; num_ev>0; ) {
+ trace("Event: %s", eventname(ev.type));
+ if(ev.type==PropertyNotify)
+ trace("Property: %s",
+ atomname(ev.xproperty.atom));
+ num_ev = getevent(display, &ev);
+ }
+ return;
+ } else
+ CHECK;
+
+/* Verify that the property values were not modified. */
+ for(loop=0; loop<3; loop++) {
+ Atom type;
+ int format;
+ unsigned long nitems;
+ unsigned long after;
+ unsigned char *value;
+ XGetWindowProperty(display, w, xrwp_list[loop], 0, 1, False,
+ XA_INTEGER, &type, &format, &nitems, &after,
+ &value);
+
+ if (type != XA_INTEGER || format != 32 ||
+ nitems != 1 || after != 0) {
+ delete("XGetWindowProperty returned unexpected values");
+ trace("loop is %d", loop);
+ trace("type is %s (expected XA_INTEGER)",
+ atomname(type));
+ trace("format is %d (expected 32)", format);
+ trace("nitems is %u (expected 1)", nitems);
+ trace("after is %u (expected 0)", after);
+ return;
+ } else {
+ unsigned long tmp;
+
+ tmp = *(unsigned long *)value;
+ if (tmp != loop ) {
+ FAIL;
+ report("%s changed the property values",
+ TestName);
+ report("when no change was expected");
+ trace("expected value %u", loop);
+ trace("returned value %u", tmp);
+ } else {
+ CHECK;
+ trace("expected property value %u", tmp);
+ }
+ }
+ }
+
+ CHECKPASS(5);
+
+>>ASSERTION Bad A
+>># THIS IS NEW!!! NOT originally submitted to mit
+When an atom in the
+.A properties
+list is a bad atom,
+then a call to xname
+changes no window
+property values, and a
+.S BadAtom
+error occurs.
+>>STRATEGY
+Create a window with properties, and PropertyChangeMask events selected.
+Ensure the properties array has a member that is a bad atom (-1).
+Call xname to rotate the window properties.
+Verify that a BadMatch error occurred.
+Verify that no property notify events were raised.
+Verify that the property values were not modified.
+>>CODE BadAtom
+int loop;
+XEvent ev;
+int num_ev;
+
+/* Create a window with properties, and PropertyChangeMask events selected. */
+ xrwp_list[0] = XA_INTEGER;
+ xrwp_list[1] = XA_COPYRIGHT;
+ xrwp_list[2] = XA_WM_HINTS;
+ for(loop=0; loop<3; loop++)
+ xrwp_add_property(display, w, xrwp_list[loop],
+ (unsigned long)loop);
+
+ XSelectInput(display, w, PropertyChangeMask);
+
+/* Ensure the properties array has a member that is a bad atom (-1). */
+ xrwp_list[3] = -1L;
+
+/* Call xname to rotate the window properties. */
+ XCALL;
+
+/* Verify that a BadMatch error occurred. */
+ if (geterr() != BadAtom) {
+ FAIL;
+ report("%s did not generate a BadAtom", TestName);
+ report("when the property list contained -1");
+ } else
+ CHECK;
+
+/* Verify that no property notify events were raised. */
+ num_ev =getevent(display, &ev);
+ if(num_ev != 0) {
+ XEvent ev;
+ FAIL;
+ report("%s caused unexpected events",
+ TestName);
+ trace("Expected: no events");
+ trace("Returned: %d events", num_ev);
+ for(; num_ev>0; ) {
+ trace("Event: %s", eventname(ev.type));
+ if(ev.type==PropertyNotify)
+ trace("Property: %s",
+ atomname(ev.xproperty.atom));
+ num_ev = getevent(display, &ev);
+ }
+ return;
+ } else
+ CHECK;
+
+/* Verify that the property values were not modified. */
+ for(loop=0; loop<3; loop++) {
+ Atom type;
+ int format;
+ unsigned long nitems;
+ unsigned long after;
+ unsigned char *value;
+ XGetWindowProperty(display, w, xrwp_list[loop], 0, 1, False,
+ XA_INTEGER, &type, &format, &nitems, &after,
+ &value);
+
+ if (type != XA_INTEGER || format != 32 ||
+ nitems != 1 || after != 0) {
+ delete("XGetWindowProperty returned unexpected values");
+ trace("loop is %d", loop);
+ trace("type is %s (expected XA_INTEGER)",
+ atomname(type));
+ trace("format is %d (expected 32)", format);
+ trace("nitems is %u (expected 1)", nitems);
+ trace("after is %u (expected 0)", after);
+ return;
+ } else {
+ unsigned long tmp;
+
+ tmp = *(unsigned long *)value;
+ if (tmp != loop ) {
+ FAIL;
+ report("%s changed the property values",
+ TestName);
+ report("when no change was expected");
+ trace("expected value %u", loop);
+ trace("returned value %u", tmp);
+ } else {
+ CHECK;
+ trace("expected property value %u", tmp);
+ }
+ }
+ }
+
+ CHECKPASS(5);
+
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH04/stslctnown/stslctnown.m b/xc/test/xsuite/xtest/tset/CH04/stslctnown/stslctnown.m
new file mode 100644
index 000000000..3a50edbe1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH04/stslctnown/stslctnown.m
@@ -0,0 +1,459 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetSelectionOwner CH04
+void
+
+Display *display = Dsp;
+Atom selection = XA_COPYRIGHT;
+Window owner = defwin(display);
+Time time = CurrentTime;
+>>EXTERN
+#include "Xatom.h"
+>>ASSERTION Good A
+>># The code must test for a window, and a genuine time
+>># (not CurrentTime). -stuart.
+A call to xname changes the owner window to
+.A owner
+and
+the last-change time to
+.A time
+for the specified
+.A selection .
+>>STRATEGY
+Create a new client.
+Obtain current server time.
+Call xname to assign the owner and time for the selection.
+Call xname to clear the selection.
+Verify that the correct SelectionClear event occurred.
+>>CODE
+Display *client1, *client2;
+Time calltime;
+Window callwindow;
+int num_ev;
+XEvent ev;
+
+/* Create a new client. */
+ client1 = display;
+ client2 = opendisplay();
+ if (client2 == (Display *)NULL) {
+ delete("Could not open client2");
+ return;
+ } else
+ CHECK;
+
+/* Obtain current server time. */
+ calltime = gettime(client1);
+ callwindow = owner;
+
+/* Call xname to assign the owner and time for the selection. */
+ time = calltime;
+ XCALL;
+
+/* Call xname to clear the selection. */
+ display = client2;
+ time = CurrentTime;
+ owner = None;
+ XCALL;
+ XSync(client1, False);
+
+/* Verify that the correct SelectionClear event occurred. */
+ num_ev = getevent(client1, &ev);
+ if (num_ev != 1) {
+ delete("Expecting a single SelectionClear event");
+ report("Received %d events", num_ev);
+ while(num_ev !=0) {
+ trace("Event: %s", eventname(ev.type));
+ num_ev = getevent(client1, &ev);
+ }
+ return;
+ } else {
+ XEvent good;
+ good.type = SelectionClear;
+ good.xselectionclear.type = SelectionClear;
+ good.xselectionclear.selection = selection;
+ good.xselectionclear.display = client1;
+ good.xselectionclear.window = callwindow;
+ good.xselectionclear.time = calltime;
+ if (checkevent(&good, &ev)) {
+ FAIL;
+ report("%s did not set the selection as expected",
+ TestName);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the specified
+.A time
+is earlier than the current last-change time of the specified
+.A selection
+or is later than the current server time, then a call to xname has no effect.
+>>STRATEGY
+Create two new clients.
+Obtain current server time.
+Call xname to assign the owner and time for the selection.
+Call xname to assign the selection to a new client and owner
+ with time before last change time.
+Verify that no SelectionClear event occurred.
+Call xname to assign the selection to a new client and owner
+ with time after current server time.
+Verify that no SelectionClear event occurred.
+>>CODE
+Display *calldisplay, *client2, *client3;
+Time calltime;
+int num_ev;
+XEvent ev;
+
+/* Create two new clients. */
+ client2 = opendisplay();
+ if (client2 == (Display *)NULL) {
+ delete("Could not open client2");
+ return;
+ } else
+ CHECK;
+
+ client3 = opendisplay();
+ if (client3 == (Display *)NULL) {
+ delete("Could not open client3");
+ return;
+ } else
+ CHECK;
+
+/* Obtain current server time. */
+ calldisplay = display;
+ calltime = gettime(display);
+
+/* Call xname to assign the owner and time for the selection. */
+ display = calldisplay;
+ time = calltime;
+ XCALL;
+
+/* Call xname to assign the selection to a new client and owner */
+/* with time before last change time. */
+ display = client2;
+ owner = defwin(client2);
+ time = calltime-1;
+ XCALL;
+
+/* Verify that no SelectionClear event occurred. */
+ num_ev = getevent(calldisplay, &ev);
+ if (num_ev != 0) {
+ FAIL;
+ report("%s called with an earlier time changed the selection",
+ TestName);
+ trace("Expecting 0 events");
+ trace("Received %d events", num_ev);
+ do {
+ trace("Event: %s", eventname(ev.type));
+ } while(getevent(calldisplay, &ev));
+ } else
+ CHECK;
+
+/* Call xname to assign the selection to a new client and owner */
+/* with time after current server time. */
+ display = client3;
+ owner = defwin(client3);
+ time = gettime(client3)+(Time)100000;
+ XCALL;
+
+/* Verify that no SelectionClear event occurred. */
+ num_ev = getevent(calldisplay, &ev);
+ if (num_ev != 0) {
+ FAIL;
+ report("%s called with an earlier time changed the selection",
+ TestName);
+ trace("Expecting 0 events");
+ trace("Received %d events", num_ev);
+ do {
+ trace("Event: %s", eventname(ev.type));
+ } while(getevent(calldisplay, &ev));
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When
+.A time
+is
+.S CurrentTime ,
+then a call to xname sets the last-change time of the specified
+.A selection
+to the current server time.
+>>STRATEGY
+Create a new client.
+Obtain current server time.
+Call xname to assign the owner and time for the selection.
+Call xname to clear the selection, to obtain selection time.
+Verify that the correct SelectionClear event occurred.
+Verify the time returned was within acceptable limits.
+>>CODE
+Display *client1, *client2;
+Time calltime, rettime, maxtime;
+int num_ev;
+XEvent ev;
+
+/* Create a new client. */
+ client1 = display;
+ client2 = opendisplay();
+ if (client2 == (Display *)NULL) {
+ delete("Could not open client2");
+ return;
+ } else
+ CHECK;
+
+/* Obtain current server time. */
+ calltime = gettime(client1);
+
+/* Call xname to assign the owner and time for the selection. */
+ time = CurrentTime;
+ XCALL;
+
+/* Call xname to clear the selection, to obtain selection time. */
+ display = client2;
+ time = CurrentTime;
+ owner = None;
+ XCALL;
+ XSync(client1, False);
+
+/* Verify that the correct SelectionClear event occurred. */
+ num_ev = getevent(client1, &ev);
+ if (num_ev != 1) {
+ delete("Expecting a single SelectionClear event");
+ report("Received %d events", num_ev);
+ while(num_ev !=0) {
+ trace("Event: %s", eventname(ev.type));
+ num_ev = getevent(client1, &ev);
+ }
+ return;
+ } else {
+ if (ev.type != SelectionClear) {
+ delete("Expecting a SelectionClear event");
+ report("Returned a %s event", eventname(ev.type));
+ return;
+ } else
+ CHECK;
+ }
+
+/* Verify the time returned was within acceptable limits. */
+ rettime=ev.xselectionclear.time;
+ maxtime=calltime+5000*config.speedfactor;
+ trace("Obtained server time: %u", calltime);
+ trace("Returned server time: %u", rettime);
+ trace("Upper expected time : %u", maxtime);
+ if((rettime<calltime) || (rettime>maxtime)) {
+ FAIL;
+ report("%s did not set last modified time of selection",
+ TestName);
+ report("to within reasonable bounds");
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the
+.A owner
+window is
+.S None ,
+then a call to xname sets the specified
+.A selection
+to have no owner.
+>>STRATEGY
+Call xname to set the owner for the selection.
+Verify that the selection was set.
+Call xname to set no owner for the selection.
+Verify that the selection has no owner.
+>>CODE
+
+/* Call xname to set the owner for the selection. */
+ XCALL;
+
+/* Verify that the selection was set. */
+ if(XGetSelectionOwner(display, selection) != owner) {
+ delete("A call to %s did not set the selection for the test",
+ TestName);
+ return;
+ } else
+ CHECK;
+
+/* Call xname to set no owner for the selection. */
+ time = CurrentTime;
+ owner = None;
+ XCALL;
+
+/* Verify that the selection has no owner. */
+ if (XGetSelectionOwner(display, selection) != None) {
+ FAIL;
+ report("A call to %s with owner of None failed to set the",
+ TestName);
+ report("selection owner to None.");
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+>># This is ambiguous. In reality, the section owner must be a different
+>># client. This could be a grey area.
+When the specified
+.A selection
+has an owner, and the specified
+.A owner
+is not the same as the current owner,
+then on a call to xname the current owner is sent a
+.S SelectionClear
+event.
+>>STRATEGY
+Create one new client.
+Call xname to assign the owner and time for the selection.
+Call xname to assign the selection to a new owner.
+Verify that the correct SelectionClear event occurred.
+>>CODE
+Display *client1, *client2;
+Time calltime;
+Window callwindow;
+int num_ev;
+XEvent ev;
+
+/* Create a new client. */
+ client1 = display;
+ client2 = opendisplay();
+ if (client2 == (Display *)NULL) {
+ delete("Could not open client2");
+ return;
+ } else
+ CHECK;
+
+ calltime = gettime(client1);
+
+/* Call xname to assign the owner and time for the selection. */
+ callwindow = owner;
+ time = calltime;
+ XCALL;
+
+/* Call xname to assign the selection to a new owner. */
+ display = client2;
+ time = CurrentTime;
+ owner = defwin(client2);
+ XCALL;
+ XSync(client1, False);
+
+/* Verify that the correct SelectionClear event occurred. */
+ num_ev = getevent(client1, &ev);
+ if (num_ev != 1) {
+ delete("Expecting a single SelectionClear event");
+ report("Received %d events", num_ev);
+ while(num_ev !=0) {
+ trace("Event: %s", eventname(ev.type));
+ num_ev = getevent(client1, &ev);
+ }
+ return;
+ } else {
+ XEvent good;
+ good.type = SelectionClear;
+ good.xselectionclear.type = SelectionClear;
+ good.xselectionclear.selection = selection;
+ good.xselectionclear.display = client1;
+ good.xselectionclear.window = callwindow;
+ good.xselectionclear.time = calltime;
+ if (checkevent(&good, &ev)) {
+ FAIL;
+ report("%s did not set the selection as expected",
+ TestName);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+>># Need to split this assertion into two, one for the owner, and the
+>># other for the last-change time, which is untestable -stuart.
+When the client that is the owner of a selection is terminated, or the
+owner window is destroyed,
+then the selection reverts to having no owner, and the last-change
+time is unaffected.
+>>STRATEGY
+Create a new client.
+Call xname to assign the owner and time for the selection.
+Close the connection for client2.
+Allow time for the connection to close.
+Verify that the ownership of the selection reverted to None.
+Assign the selection to another window.
+Close the window of the selection.
+Verify that the ownership of the selection reverted to None.
+>>CODE
+Display *client1, *client2;
+
+/* Create a new client. */
+ client1 = display;
+ client2 = XOpenDisplay(config.display);
+ if (client2 == (Display *)NULL) {
+ delete("Could not open client2");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to assign the owner and time for the selection. */
+ display = client2;
+ XCALL;
+
+/* Close the connection for client2. */
+ XCloseDisplay(client2);
+
+/* Allow time for the connection to close. */
+ reset_delay();
+
+/* Verify that the ownership of the selection reverted to None. */
+ if (XGetSelectionOwner(client1, selection) != None) {
+ FAIL;
+ report("Closing the owner client did not set the selection");
+ report("owner to None.");
+ return;
+ } else
+ CHECK;
+
+/* Assign the selection to another window. */
+ display = client1;
+ owner = crechild(client1, defwin(client1), (struct area *)0);
+ XCALL;
+
+/* Close the window of the selection. */
+ XDestroyWindow(client1, owner);
+
+/* Verify that the ownership of the selection reverted to None. */
+ if (XGetSelectionOwner(client1, selection) != None) {
+ FAIL;
+ report("Closing the owner window did not set the selection");
+ report("owner to None.");
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good B 1
+>># This is meant to mean that the selection atoms are global.
+>># I hope this is a near enough approximation. -stuart.
+The status of a selection atom is accessible by any client
+of the server.
+>>ASSERTION Bad A
+.ER BadAtom
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH05/Makefile b/xc/test/xsuite/xtest/tset/CH05/Makefile
new file mode 100644
index 000000000..a9450e2a7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/Makefile
@@ -0,0 +1,174 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+#
+# This Makefile can be used to compile all the tests in this
+# section of the X test suite in such a way that they are all links to
+# a single executable file. This normally allows a considerable
+# reduction in the disc space requirements for the X test suite
+# when fully built.
+#
+# There are two ways this can be done:
+# 1) Using the TET. Execute the command:
+# tcc -b -s link_exec xtest linkbuild
+# in the directory $TET_ROOT/xtest.
+# This will execute the TET build tool (which is normally pmake)
+# in the top level directory of each section of the test suite
+# (including this directory).
+#
+# 2) Directly without using the TET. Execute the command:
+# pmake
+# in this directory.
+#
+# For more details, refer to the User Guide
+#
+
+CAT=cat
+
+ALLTESTS=Tests
+
+TESTOFILES=\
+allcclr.o \
+allcclrcll.o \
+allcclrpln.o \
+allcnmdclr.o \
+chnggc.o \
+cpyclrmpan.o \
+cpygc.o \
+crtclrmp.o \
+crtgc.o \
+crtpxmp.o \
+frclrmp.o \
+frclrs.o \
+frgc.o \
+frpxmp.o \
+gcntxtfrmg.o \
+gtgcvls.o \
+lkpclr.o \
+qrybststpp.o \
+qrybstsz.o \
+qrybsttl.o \
+qryclr.o \
+qryclrs.o \
+starcmd.o \
+stbg.o \
+stclpmsk.o \
+stclporgn.o \
+stclprctng.o \
+stdshs.o \
+stfllrl.o \
+stfllstyl.o \
+stfnctn.o \
+stfnt.o \
+stfrgrnd.o \
+stgrphcsex.o \
+stlnattrbt.o \
+stplnmsk.o \
+strclr.o \
+strclrs.o \
+strnmdclr.o \
+stsbwmd.o \
+ststppl.o \
+ststt.o \
+sttl.o \
+sttsorgn.o \
+stwdwclrmp.o
+
+LINKOFILE=linktbl.o
+OFILES = $(TESTOFILES) $(LINKOFILE)
+
+DIRLIST=\
+allcclr \
+allcclrcll \
+allcclrpln \
+allcnmdclr \
+chnggc \
+cpyclrmpan \
+cpygc \
+crtclrmp \
+crtgc \
+crtpxmp \
+frclrmp \
+frclrs \
+frgc \
+frpxmp \
+gcntxtfrmg \
+gtgcvls \
+lkpclr \
+qrybststpp \
+qrybstsz \
+qrybsttl \
+qryclr \
+qryclrs \
+starcmd \
+stbg \
+stclpmsk \
+stclporgn \
+stclprctng \
+stdshs \
+stfllrl \
+stfllstyl \
+stfnctn \
+stfnt \
+stfrgrnd \
+stgrphcsex \
+stlnattrbt \
+stplnmsk \
+strclr \
+strclrs \
+strnmdclr \
+stsbwmd \
+ststppl \
+ststt \
+sttl \
+sttsorgn \
+stwdwclrmp
+
+all: subdirs test
+
+test:$P $(OFILES) $(LIBS) $(TCM)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(TCM) $(LIBS) $(SYSLIBS)
+ $(CAT) test > $(ALLTESTS)
+ $(RM) test
+
+subdirs:
+ if [ ! -f $(ALLTESTS) ]; then $(CAT) /dev/null > $(ALLTESTS); \
+ chmod a+x $(ALLTESTS); else : ; fi
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then \
+ (cd $$i; echo Compiling in $$i; $(TET_BUILD_TOOL) linkexec); \
+ fi; \
+ done
+
+# The xtestlib is made if it doesn't exist
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
+clean: cletests clesubdirs
+
+cletests:
+ $(RM) test $(OFILES) $(ALLTESTS) core
+
+clesubdirs:
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then (cd $$i; $(TET_CLEAN_TOOL) ); fi; done
+
+clobber: clean
diff --git a/xc/test/xsuite/xtest/tset/CH05/allcclr/allcclr.m b/xc/test/xsuite/xtest/tset/CH05/allcclr/allcclr.m
new file mode 100644
index 000000000..16e73bf85
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/allcclr/allcclr.m
@@ -0,0 +1,319 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAllocColor CH05
+Status
+XAllocColor(display, colormap, screen_in_out)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+XColor *screen_in_out = &dummy;
+>>EXTERN
+XColor dummy;
+>>ASSERTION Good A
+A call to xname
+allocates a read-only entry in the
+.A colormap
+argument
+corresponding to the closest RGB value that is supported by the hardware to the
+value specified by the
+.M red ,
+.M green ,
+and
+.M blue
+components in the
+.S XColor
+structure named by the
+.A screen_in_out
+argument, returns that value in the
+.M red ,
+.M green ,
+and
+.M blue
+components in the
+.S XColor
+structure named by the
+.A screen_in_out
+argument
+and returns the colourmap entry in the
+.M pixel
+component in the
+.S XColor
+structure named by the
+.A screen_in_out
+argument.
+>>STRATEGY
+For each supported visual class:
+ Create a colormap with XCreateColormap.
+ Create a new client with XOpenDisplay.
+ Allocate one read-only colorcell with XAllocColor with the second client.
+ Reallocate a cell with the returned RGB values with the original client.
+ Verify that the returned pixel is identical to the first and that the r, g and b value argee.
+ Verify the cell is read only with the failure of XStoreColor.
+>>CODE
+Display *disp2;
+XVisualInfo *vp;
+Status status;
+XColor screencol, testcol;
+unsigned long vmask;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ if( (disp2 = opendisplay()) == (Display *) 0) {
+ delete("Could not open display");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting AllocColor() for class %s", displayclassname(vp->class));
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+
+ testcol.red = 0xf3f3;
+ testcol.green = 0xe4e4;
+ testcol.blue = 0xd5d5;
+
+ trace("Source colour : r %u g %u b %u", testcol.red, testcol.green, testcol.blue);
+ screen_in_out = &testcol;
+ display = disp2;
+ status = XCALL;
+
+ if( status == (Status) 0) {
+ report("XAllocColor() failed to return non-zero.");
+ FAIL;
+ continue;
+ }
+
+ screencol = testcol;
+ trace("Screen: pixel %lu, r %u g %u b %u", screencol.pixel , screencol.red, screencol.green, screencol.blue);
+ trace("Test : pixel %lu, r %u g %u b %u", testcol.pixel, testcol.red, testcol.green, testcol.blue);
+
+ screen_in_out = &testcol;
+ display = Dsp;
+ status = XCALL;
+
+ if(status == (Status) 0) {
+ report("XAllocColor() failed to return non-zero.");
+ FAIL;
+ continue;
+ }
+
+ if( screencol.pixel != testcol.pixel ) {
+ report("XAllocColor() return pixel value %lu instead of %lu.", testcol.pixel, screencol.pixel);
+ FAIL;
+ } else
+ CHECK;
+
+ if( (screencol.red != testcol.red) || (screencol.green != testcol.green) || (screencol.blue != testcol.blue) ) {
+ report("XAllocColor() return RGB values r %u g %u b %u instead of r %u g %u b %u.",
+ testcol.red, testcol.green, testcol.blue, screencol.red, screencol.green, screencol.blue);
+ FAIL;
+ } else
+ CHECK;
+
+ startcall(display);
+ XStoreColor(display, colormap, &testcol);
+ endcall(display);
+
+ if (geterr() == Success) {
+ report("Got success writing to a read-only cell");
+ tet_result(TET_FAIL);
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(3 * nsupvis());
+
+
+>>ASSERTION Good A
+A call to xname does not use or affect the
+.S flags
+component of the
+.S XColor
+structure named by the
+.A screen_in_out
+argument.
+>>STRATEGY
+For each supported visual class:
+ Create a colormap with XCreateColormap.
+ Allocate a colourcell with an XColor structure flags component of DoGreen,
+ and red, green and blue components of 255<<8, 63<<8 and 31 <<8.
+ Verify that the returned flags component is DoGreen.
+ Allocate a colourcell with an XColor structure flags component of DoRed | DoBlue
+ and red, green and blue components of 255<<8, 63<<8 and 31 <<8.
+ Verify that the returned flags component is DoRed | DoBlue.
+ Verify that the returned pixel and red, green and blue values are identical to
+ those initially returned.
+>>CODE
+XVisualInfo *vp;
+Status status;
+XColor screencol, testcol;
+unsigned long vmask;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting AllocColor() for class %s", displayclassname(vp->class));
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+
+ testcol.red = 255 << 8;
+ testcol.green = 63 << 8;
+ testcol.blue = 31 << 8;
+ testcol.flags = DoGreen;
+
+ screen_in_out = &testcol;
+ status = XCALL;
+
+ if( status == (Status) 0) {
+ report("XAllocColor() failed to return non-zero.");
+ FAIL;
+ continue;
+ }
+
+ if( DoGreen != testcol.flags ) {
+ report("XAllocColor() altered flags value %lu to %lu.",
+ DoGreen, testcol.flags);
+ FAIL;
+ } else
+ CHECK;
+
+ screencol = testcol;
+ trace("Screen: pixel %lu, r %u g %u b %u", screencol.pixel , screencol.red, screencol.green, screencol.blue);
+ trace("Test : pixel %lu, r %u g %u b %u", testcol.pixel, testcol.red, testcol.green, testcol.blue);
+
+ testcol.red = 255 << 8;
+ testcol.green = 63 << 8;
+ testcol.blue = 31 << 8;
+ testcol.flags = DoRed | DoBlue;
+
+ screen_in_out = &testcol;
+ status = XCALL;
+
+ if(status == (Status) 0) {
+ report("XAllocColor() failed to return non-zero.");
+ FAIL;
+ continue;
+ }
+
+ if( (DoRed | DoBlue) != testcol.flags ) {
+ report("XAllocColor() altered flags value %lu to %lu.",
+ (DoRed | DoBlue), testcol.flags);
+ FAIL;
+ } else
+ CHECK;
+
+ if( screencol.pixel != testcol.pixel ) {
+ report("XAllocColor() return pixel value %lu instead of %lu.", testcol.pixel, screencol.pixel);
+ FAIL;
+ } else
+ CHECK;
+
+ if( (screencol.red != testcol.red) || (screencol.green != testcol.green) || (screencol.blue != testcol.blue) ) {
+ report("XAllocColor() return RGB values r %u g %u b %u instead of r %u g %u b %u.",
+ testcol.red, testcol.green, testcol.blue, screencol.red, screencol.green, screencol.blue);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(4 * nsupvis());
+
+
+
+>>ASSERTION Good A
+When a call to xname has allocated a read-only entry in a colourmap,
+then a subsequent call to xname with identical
+.M red ,
+.M green
+and
+.M blue
+components in the
+.S XColor
+structure named by the
+.A screen_in_out
+argument returns an identical pixel component in the
+.S XColor
+structure.
+>>STRATEGY
+For each supported visual class:
+ Create a colormap with XCreateColormap.
+ Allocate a colourcell with an XColor structure with
+ red, green and blue components of 255<<8, 127<<8 and 63 <<8.
+ Allocate a colourcell with an XColor structure having the
+ the previously returned rgb values.
+ Verify that the returned pixel is the same as that initially returned.
+>>CODE
+XVisualInfo *vp;
+Status status;
+XColor screencol, testcol;
+unsigned long vmask;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting AllocColor() for class %s", displayclassname(vp->class));
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+
+ testcol.red = 255 << 8;
+ testcol.green = 127 << 8;
+ testcol.blue = 63 << 8;
+
+ screen_in_out = &testcol;
+ status = XCALL;
+
+ if( status == (Status) 0) {
+ report("XAllocColor() failed to return non-zero.");
+ FAIL;
+ continue;
+ }
+
+ screencol = testcol;
+ trace("Screen: pixel %lu, r %u g %u b %u", screencol.pixel , screencol.red, screencol.green, screencol.blue);
+ trace("Test : pixel %lu, r %u g %u b %u", testcol.pixel, testcol.red, testcol.green, testcol.blue);
+
+ screen_in_out = &testcol;
+ status = XCALL;
+
+ if(status == (Status) 0) {
+ report("XAllocColor() failed to return non-zero.");
+ FAIL;
+ continue;
+ }
+
+ if( screencol.pixel != testcol.pixel ) {
+ report("XAllocColor() return pixel value %lu instead of %lu.", testcol.pixel, screencol.pixel);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Bad A
+.ER BadColor
+>>ASSERTION Bad A
+.ER Alloc
+>>#HISTORY Cal Completed Written in new format and style. 4/12/90
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writting code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/allcclrcll/allcclrcll.m b/xc/test/xsuite/xtest/tset/CH05/allcclrcll/allcclrcll.m
new file mode 100644
index 000000000..f52fb9884
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/allcclrcll/allcclrcll.m
@@ -0,0 +1,728 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAllocColorCells CH05
+Status
+XAllocColorCells(display, colormap, contig, plane_masks_return, nplanes, pixels_return, npixels)
+Display *display = Dsp;
+Colormap colormap;
+Bool contig;
+unsigned long *plane_masks_return;
+unsigned int nplanes;
+unsigned long *pixels_return;
+unsigned int npixels;
+>>EXTERN
+#define lowbit(x) ((x) & (~(x) + 1))
+#define bitcontig(x) ((((x) + lowbit(x)) & (x)) == 0)
+#define bitsubset(a,b) (((a) & (b)) == (a))
+
+>>ASSERTION Good C
+If any of the visual classes
+.S DirectColor ,
+.S PseudoColor ,
+or
+.S GrayScale
+is supported:
+A call to xname allocates
+.A npixels*2pow(nplanes)
+read/write colourmap entries whose indices in the colourmap are
+obtained by ORing each pixel value returned in the
+.A pixels_return
+argument
+with zero or more of the planes returned in the
+.A plane_mask
+argument.
+>>STRATEGY
+For each visual class DirectColor, PseudoColor and GrayScale:
+ Create a colormap.
+ Allocate all colors and no planemasks with XAllocColorCells.
+ Verify the correct number of cells have been allocated by initialising
+ them with XStoreColors, and reading them with XQueryColors.
+ Allocate planes and masks such that lg(colors) + planes = lg(colormap_size)
+ Verify the correct number of cells have been allocated by initialising
+ them with XStoreColors, and reading them with XQueryColors.
+>>CODE
+XVisualInfo *vp;
+XColor color, qcolor;
+Visual *visual;
+Status status;
+Colormap cmap;
+unsigned long vmask, pmask, mask, planemask;
+int i, j, k, cells;
+int pathcnt;
+
+#define RW_COLORMAP_MASK ((1L<<DirectColor) | (1L<<PseudoColor) | (1L<<GrayScale))
+
+ if( (vmask = visualsupported(display, RW_COLORMAP_MASK)) == 0L) {
+ unsupported("DirectColor, PseudoColor and GrayScale are not supported");
+ return;
+ }
+
+ contig = False;
+ color.red = 1<<8;
+ color.green = 2<<8;
+ color.blue = 3<<8;
+ color.flags = DoRed | DoGreen | DoBlue;
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting XAllocColorCells() for class %s", displayclassname(vp->class));
+
+ /* Test that we can allocate the entire colormap, nplanes = 0 */
+
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+ nplanes = 0;
+ npixels = maxsize(vp);
+ plane_masks_return = (unsigned long *) 0;
+ pixels_return = (unsigned long *) malloc( npixels * sizeof(unsigned long));
+ trace("Testing XAllocColorCells with %u colors and %u planes", npixels, nplanes);
+ if(pixels_return == (unsigned long *) 0) {
+ delete("Malloc failed to allocate memory for pixels return value.");
+ return;
+ }
+
+ for(j=0; j<npixels; j++)
+ pixels_return[j] = npixels+1;
+
+ status = XCALL;
+ if(status == (Status) 0) {
+ report("%s failed to return non-zero", TestName);
+ report("allocating all %d cells with visual class %s.",
+ npixels, displayclassname(vp->class));
+ FAIL;
+ continue;
+ } else
+ CHECK;
+
+ for(pathcnt = 0, j=0; j < npixels; j++) {
+ color.pixel = pixels_return[j];
+ startcall(display);
+ XStoreColor(display, colormap, &color);
+ endcall(display);
+ if(geterr() != Success) {
+ report("XStoreColor() failed (%s) to store pixel value %lu in colormap of class %s", errorname(geterr()), color.pixel, displayclassname(vp->class));
+ FAIL;
+ } else {
+ qcolor.pixel = pixels_return[j];
+ startcall(display);
+ XQueryColor(display, colormap, &qcolor);
+ endcall(display);
+ if(geterr() != Success) {
+ report("XQueryColor() failed (%s) to return pixel value %lu in colormap of class %s", errorname(geterr()), qcolor.pixel, displayclassname(vp->class));
+ FAIL;
+ } else
+ pathcnt++;
+ }
+ }
+
+ if(pathcnt == npixels)
+ CHECK;
+
+ free( (char *) pixels_return);
+
+ /* Test that we can allocate planes and cells of size floor(log2(colormapsize)). */
+
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+ cells = 1<<lg(maxsize(vp));
+ npixels = (unsigned int) 1<<(lg(maxsize(vp))/2);
+ nplanes = (unsigned int) lg(maxsize(vp)) - lg(npixels);
+ plane_masks_return = (unsigned long *) malloc(nplanes * sizeof(unsigned long));
+ pixels_return = (unsigned long *) malloc(npixels * sizeof(unsigned long));
+
+ if(plane_masks_return == (unsigned long*) 0 || pixels_return == (unsigned long*) 0) {
+ delete("Malloc() failed to allocate memory for return values.");
+ return;
+ } else
+ CHECK;
+
+ for(j=0; j<npixels; j++)
+ pixels_return[j] = cells+1;
+
+ for(j=0; j<nplanes; j++)
+ plane_masks_return[j] = cells+1;
+
+ trace("Testing XAllocColorCells() with nplanes = %u, npixels = %u, cells = %d, pixels * 2 pow planes = %u", nplanes, npixels, cells, npixels * (1<<nplanes));
+
+ status = XCALL;
+ if(status == (Status) 0) {
+ report("%s failed to return non-zero", TestName);
+ report("allocating %lu pixels and %lu planes with visual class %s.",
+ npixels, nplanes, displayclassname(vp->class));
+ FAIL;
+ continue;
+ } else
+ CHECK;
+
+ for(pathcnt = 0, j=0; j < npixels; j++)
+ for(i=0; i < (1<<nplanes); i++) {
+ planemask = 0L;
+ for(k=0, mask=1; k < nplanes; k++, mask <<= 1) /* */
+ if((unsigned long) i & mask) /* Select the i th subset of plane masks. */
+ mask |= plane_masks_return[k]; /* */
+
+ color.pixel = pixels_return[j] | planemask;
+ startcall(display);
+ XStoreColor(display, colormap, &color);
+ endcall(display);
+
+ if(geterr() != Success) {
+ report("XStoreColor() failed (%s) to store pixel value %lu in colormap of class %s", errorname(geterr()), color.pixel, displayclassname(vp->class));
+ FAIL;
+ } else {
+ qcolor.pixel = pixels_return[j] | planemask;
+ startcall(display);
+ XQueryColor(display, colormap, &qcolor);
+ endcall(display);
+ if(geterr() != Success) {
+ report("XQueryColor() failed (%s) to return pixel value %lu in colormap of class %s", errorname(geterr()), qcolor.pixel, displayclassname(vp->class));
+ FAIL;
+ } else
+ pathcnt++;
+ }
+ }
+
+ if(pathcnt == npixels*(1<<nplanes))
+ CHECK;
+
+ free( (char *) pixels_return);
+ free( (char *) plane_masks_return);
+ }
+
+ CHECKPASS(5 * nsupvis());
+
+>>ASSERTION Good C
+If any of the visual classes
+.S DirectColor ,
+.S PseudoColor ,
+or
+.S GrayScale
+is supported:
+A call to xname returns
+.A nplanes
+plane masks in the
+.A plane_mask_return
+argument
+and
+.A npixels
+pixel values in the
+.A pixels_return
+argument
+such that no plane mask has a bit set in common with
+any other plane mask or with any of the pixels.
+>>STRATEGY
+For each supported visual with r/w colour cells:
+ Create a colourmap with alloc set to AllocNone.
+ Allocate planes and masks such that lg(colors) + planes = lg(colormap_size)
+ Form the bitwise OR of all the pixels.
+ For each planemask:
+ Verify that the bitwise AND of every other planemask is 0.
+ Verify that the bitwise AND of the planemask and the OR of the colours is 0.
+>>CODE
+XVisualInfo *vp;
+Visual *visual;
+Status status;
+Colormap cmap;
+unsigned long vmask, planemask, pixelmask;
+int i, j, cells, pathcnt = 0;
+
+
+ if( (vmask = visualsupported(display, RW_COLORMAP_MASK)) == 0L) {
+ unsupported("DirectColor, PseudoColor and GrayScale are not supported");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting XAllocColorCells() for class %s", displayclassname(vp->class));
+
+ contig = False;
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+ cells = 1<<lg(maxsize(vp));
+ npixels = (unsigned int) 1<<(lg(maxsize(vp))/2);
+ nplanes = (unsigned int) lg(maxsize(vp)) - lg(npixels);
+ plane_masks_return = (unsigned long *) malloc(nplanes * sizeof(unsigned long));
+ pixels_return = (unsigned long *) malloc(npixels * sizeof(unsigned long));
+ if(plane_masks_return == (unsigned long*) 0 ||
+ pixels_return == (unsigned long*) 0) {
+ delete("Malloc() failed to allocate memory for return values.");
+ return;
+ } else
+ CHECK;
+
+ pathcnt += nplanes*(nplanes+1);
+
+ for(j=0; j<npixels; j++)
+ pixels_return[j] = cells+1;
+
+ for(j=0; j<nplanes; j++)
+ plane_masks_return[j] = cells+1;
+
+ trace("Testing XAllocColorCells() with nplanes = %u, npixels = %u, cells = %d, pixels * 2 pow planes = %u",
+ nplanes, npixels, cells, npixels * (1<<nplanes));
+
+ status = XCALL;
+
+ if(status == (Status) 0) {
+ report("%s failed to return non-zero", TestName);
+ report("for visual class %s.",
+ displayclassname(vp->class));
+ FAIL;
+ } else {
+ pixelmask = 0L;
+ for(j=0; j < npixels; j++)
+ pixelmask |= pixels_return[j];
+
+ for(j=0; j < nplanes; j++) {
+ planemask = plane_masks_return[j];
+ for(i=0; i < nplanes; i++)
+ if(((planemask & plane_masks_return[i]) != 0) && (i != j)) {
+ report("Plane mask %d(%lu) has a bit in common with mask %d(%ln).", j, planemask, i, plane_masks_return[i]);
+ FAIL;
+ } else
+ CHECK;
+
+ if( (pixelmask & planemask) != 0L) {
+ report("Plane mask %d(%lu) has a bit in common with a pixel value.", j, planemask);
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+ free( (char *) plane_masks_return);
+ free( (char *) pixels_return);
+ }
+
+ CHECKPASS(pathcnt+nsupvis());
+
+>>ASSERTION Good A
+If either of the visual classes
+.S PseudoColor
+or
+.S GrayScale
+are supported:
+When the visual type of the
+.A colormap
+argument is
+.S PseudoColor
+or
+.S GrayScale ,
+then a call to xname sets exactly one bit in each plane mask in
+.A plane_mask_return .
+>>STRATEGY
+For the visuals PseudoColor and GrayScale:
+ Create a colourmap with alloc set to AllocNone.
+ Allocate 1 color and all planemasks with XAllocColorCells.
+ Verify that the number of bits set in each planemask is exactly 1.
+>>CODE
+XVisualInfo *vp;
+Visual *visual;
+Status status;
+Colormap cmap;
+unsigned long vmask;
+int j, cells, pathcnt = 0;
+
+
+ if( (vmask = visualsupported(display, (1<<PseudoColor) | (1<<GrayScale)) ) == 0L) {
+ unsupported("PseudoColor and GrayScale are not supported");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting XAllocColorCells() for class %s", displayclassname(vp->class));
+
+ contig = False;
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+ cells = 1<<lg(maxsize(vp));
+ npixels = 1;
+ nplanes = (unsigned int) lg(maxsize(vp));
+ plane_masks_return = (unsigned long *) malloc(nplanes * sizeof(unsigned long));
+ pixels_return = (unsigned long *) malloc(npixels * sizeof(unsigned long));
+ if(plane_masks_return == (unsigned long*) 0 || pixels_return == (unsigned long*) 0) {
+ delete("Malloc() failed to allocate memory for return values.");
+ return;
+ } else
+ CHECK;
+
+ pathcnt += nplanes;
+
+ for(j=0; j<npixels; j++)
+ pixels_return[j] = cells+1;
+
+ for(j=0; j<nplanes; j++)
+ plane_masks_return[j] = cells+1;
+
+ trace("Testing XAllocColorCells() with nplanes = %u, npixels = %u, cells = %d, pixels * 2 pow planes = %u", nplanes, npixels, cells, npixels * (1<<nplanes));
+
+ status = XCALL;
+
+ if(status == (Status) 0) {
+ report("%s failed to return non-zero", TestName);
+ report("for visual class %s.",
+ displayclassname(vp->class));
+ FAIL;
+ } else {
+ int bits;
+ for(j=0; j < nplanes; j++)
+ if( (bits = bitcount(plane_masks_return[j])) != 1 ) {
+ report("Plane_mask %d had %d bits set instead of 1", j, bits);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(pathcnt + nsupvis());
+
+>>ASSERTION Good A
+If the visual class
+.S DirectColor
+is supported:
+When the visual type of the
+.A colormap
+argument is
+.S DirectColor ,
+then a call to xname sets exactly three bits in each plane mask in
+.A plane_mask_return .
+>>STRATEGY
+For the visual class DirectColor:
+ Create a colormap.
+ Allocate 1 color and all planemasks with XAllocColorCells.
+ Verify that for each planemask exactly three bits are set.
+>>CODE
+XVisualInfo *vp;
+Visual *visual;
+Status status;
+Colormap cmap;
+unsigned long vmask;
+int j, cells;
+
+
+ if( (vmask = visualsupported(display, 1<<DirectColor)) == 0L) {
+ unsupported("DirectColor is not supported");
+ return;
+ }
+
+ resetsupvis(vmask);
+ nextsupvis(&vp);
+ trace("Attempting XAllocColorCells() for class %s", displayclassname(vp->class));
+ contig = False;
+ colormap = XCreateColormap(display, DRW(display), vp -> visual, AllocNone);
+ cells = 1<<lg(maxsize(vp));
+ npixels = 1;
+ nplanes = (unsigned int) lg(maxsize(vp));
+ plane_masks_return = (unsigned long *) malloc(nplanes * sizeof(unsigned long));
+ pixels_return = (unsigned long *) malloc(npixels * sizeof(unsigned long));
+ if(plane_masks_return == (unsigned long*) 0 || pixels_return == (unsigned long*) 0) {
+ delete("Malloc() failed to allocate memory for return values.");
+ return;
+ } else
+ CHECK;
+
+ for(j=0; j<npixels; j++)
+ pixels_return[j] = cells+1;
+
+ for(j=0; j<nplanes; j++)
+ plane_masks_return[j] = cells+1;
+
+ trace("Testing XAllocColorCells() with nplanes = %u, npixels = %u, cells = %d, pixels * 2 pow planes = %u", nplanes, npixels, cells, npixels * (1<<nplanes));
+
+ status = XCALL;
+
+ if(status == (Status) 0) {
+ report("%s failed to return non-zero", TestName);
+ report("for visual class %s.",
+ displayclassname(vp->class));
+ FAIL;
+ } else {
+ int bits;
+ for(j=0; j < nplanes; j++)
+ if( (bits = bitcount(plane_masks_return[j])) != 3 ) {
+ report("Plane_mask %d had %d bits set instead of 3", j, bits);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+
+ CHECKPASS(nplanes+nsupvis());
+
+
+>>ASSERTION Good A
+If either of the visual classes
+.S PseudoColor
+or
+.S GrayScale
+are supported:
+When the
+.A contig
+argument is
+.S True ,
+and the visual type of the
+.A colormap
+argument is
+.S GrayScale
+or
+.S PseudoColor ,
+then the mask formed by ORing the
+plane masks in
+.A plane_mask_return
+contains one set of contiguous bits.
+>>STRATEGY
+For the visual types PseudoColor and GreyScale:
+ Create a colourmap.
+ Allocate 1 color and some planemasks using XAllocColorCells and contig = True.
+ Form the bitwise OR of all the planemasks.
+ Verify that the returned planemasks were contiguous.
+>>CODE
+XVisualInfo *vp;
+Visual *visual;
+Status status;
+Colormap cmap;
+unsigned long vmask;
+unsigned long planeor;
+int j, cells;
+
+
+ if( (vmask = visualsupported(display, (1<<PseudoColor) | (1<<GrayScale)) ) == 0L) {
+ unsupported("PseudoColor and GrayScale are not supported");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting XAllocColorCells() for class %s", displayclassname(vp->class));
+
+ contig = True;
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+ cells = 1<<lg(maxsize(vp));
+ npixels = 1;
+ nplanes = (unsigned int) lg(maxsize(vp));
+ /*
+ * Just ask for a small number of planes if more was possible.
+ * Originally this test requested all planes - but of course this
+ * gave little scope for contig to make any difference.
+ */
+ if(nplanes > 2)
+ nplanes = 2;
+ plane_masks_return = (unsigned long *) malloc(nplanes * sizeof(unsigned long));
+ pixels_return = (unsigned long *) malloc(npixels * sizeof(unsigned long));
+ if(plane_masks_return == (unsigned long*) 0 || pixels_return == (unsigned long*) 0) {
+ delete("Malloc() failed to allocate memory for return values.");
+ return;
+ } else
+ CHECK;
+
+ for(j=0; j<npixels; j++)
+ pixels_return[j] = cells+1;
+
+ for(j=0; j<nplanes; j++)
+ plane_masks_return[j] = cells+1;
+
+ trace("Testing XAllocColorCells() with contig = True, nplanes = %u, npixels = %u, cells = %d, pixels * 2 pow planes = %u", nplanes, npixels, cells, npixels * (1<<nplanes));
+
+ status = XCALL;
+
+ if(status == (Status) 0) {
+ report("%s failed to return non-zero", TestName);
+ report("for visual class %s.",
+ displayclassname(vp->class));
+ FAIL;
+ } else {
+ planeor = 0L;
+ for(j=0; j < nplanes; j++)
+ planeor |= plane_masks_return[j];
+
+ if(bitcontig(planeor) == 0) {
+ report("The allocated planemask bits were not contiguous.");
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(2*nsupvis());
+
+>>ASSERTION Good A
+If the visual class
+.S DirectColor
+is supported:
+When the
+.A contig
+argument is
+.S True ,
+and the visual type of the
+.A colormap
+argument is
+.S DirectColor ,
+then the mask formed by ORing the
+plane masks in
+.A plane_mask_return
+contains three sets of contiguous bits set to one, one lying in each of
+the red, green and blue pixel subfields.
+>>STRATEGY
+For the visual class DirectColor:
+ Create a colormap.
+ Allocate 1 color and some planemasks using XAllocColorCells and contig = True.
+ Form the bitwise OR of all the planemasks per bit set.
+ Verify that the returned planemasks in the red, green and blue subfields
+ were contiguous and distinct.
+>>CODE
+XVisualInfo *vp;
+Visual *visual;
+Status status;
+Colormap cmap;
+unsigned long vmask;
+unsigned long planeor;
+int j, cells;
+
+
+ if( (vmask = visualsupported(display, 1<<DirectColor)) == 0L) {
+ unsupported("DirectColor is not supported");
+ return;
+ }
+
+ resetsupvis(vmask);
+ nextsupvis(&vp);
+ trace("Attempting XAllocColorCells() for class %s", displayclassname(vp->class));
+ contig = True;
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+ cells = 1<<lg(maxsize(vp));
+ npixels = 1;
+ nplanes = (unsigned int) lg(maxsize(vp));
+ trace("nplanes %d", nplanes);
+ /*
+ * Just ask for a small number of planes if more was possible.
+ * Originally this test requested all planes - but of course this
+ * gave little scope for contig to make any difference.
+ */
+ if(nplanes > 2)
+ nplanes = 2;
+ trace("nplanes %d", nplanes);
+ plane_masks_return = (unsigned long *) malloc(nplanes * sizeof(unsigned long));
+ pixels_return = (unsigned long *) malloc(npixels * sizeof(unsigned long));
+ if(plane_masks_return == (unsigned long*) 0 || pixels_return == (unsigned long*) 0) {
+ delete("Malloc() failed to allocate memory for return values.");
+ return;
+ } else
+ CHECK;
+
+
+ for(j=0; j<npixels; j++)
+ pixels_return[j] = cells+1;
+
+ for(j=0; j<nplanes; j++)
+ plane_masks_return[j] = cells+1;
+
+ for(j=0; j < nplanes; j++)
+ {
+ trace("plane_mask_return is initially %x", plane_masks_return[j]);
+ }
+
+ trace("Testing XAllocColorCells() with nplanes = %u, npixels = %u, cells = %d, pixels * 2 pow planes = %u", nplanes, npixels, cells, npixels * (1<<nplanes));
+
+ status = XCALL;
+
+ if(status == (Status) 0) {
+ report("XAllocColorCells() failed to return non-zero for visual class %s.", displayclassname(vp->class));
+ FAIL;
+ } else {
+ unsigned long planeor1 = 0L, planeor2 = 0L, planeor3 = 0L, pln;
+
+ for(j=0; j < nplanes; j++)
+ {
+ trace("plane_mask_return is %x", plane_masks_return[j]);
+ pln = plane_masks_return[j];
+ if (bitcount(pln) != 3) {
+ report("Planemask %d did not have 3 bits set (0x%lx)", j, pln);
+ FAIL;
+ } else
+ CHECK;
+ planeor1 |= lowbit(pln);
+ pln &= ~lowbit(pln);
+ planeor2 |= lowbit(pln);
+ pln &= ~lowbit(pln);
+ planeor3 |= lowbit(pln);
+ pln &= ~lowbit(pln);
+ }
+
+ trace("red_mask is %x", vp->red_mask);
+ trace("green_mask is %x", vp->green_mask);
+ trace("blue_mask is %x", vp->blue_mask);
+ if(!bitsubset(planeor1, vp->red_mask)) {
+ report("Planemasks in red subfield (0x%lx) were not subset of 0x%lx", planeor1, vp->red_mask);
+ FAIL;
+ } else
+ CHECK;
+ if(!bitsubset(planeor2, vp->green_mask)) {
+ report("Planemasks in green subfield (0x%lx) were not subset of 0x%lx", planeor2, vp->green_mask);
+ FAIL;
+ } else
+ CHECK;
+ if(!bitsubset(planeor3, vp->blue_mask)) {
+ report("Planemasks in blue subfield (0x%lx) were not subset of 0x%lx", planeor3, vp->blue_mask);
+ FAIL;
+ } else
+ CHECK;
+ if (bitcount(planeor1) != nplanes ||
+ bitcount(planeor2) != nplanes ||
+ bitcount(planeor3) != nplanes) {
+ report("Planemasks not all distinct (0x%lx, 0x%lx, 0x%lx)", planeor1, planeor2, planeor3);
+ FAIL;
+ } else
+ CHECK;
+ if (!bitcontig(planeor1) ||
+ !bitcontig(planeor2) ||
+ !bitcontig(planeor3)) {
+ report("Planemasks not all contiguous (0x%lx, 0x%lx, 0x%lx)", planeor1, planeor2, planeor3);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(6+nplanes);
+
+>>ASSERTION Bad A
+.ER BadColor
+>>ASSERTION Bad A
+When the
+.A npixels
+argument is zero, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Verify that with npixels = 0, nplanes = 0, with the DefaultColormap,
+ XAllocColorCells generates a BadValue error.
+>>CODE BadValue
+
+ colormap = DefaultColormap(display, DefaultScreen(display));
+ npixels = 0;
+ nplanes = 0;
+ plane_masks_return = (unsigned long *) 0;
+ pixels_return = (unsigned long *) 0;
+ contig = False;
+ XCALL;
+ if(geterr() != BadValue)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+.ER BadValue contig True False
+>>#HISTORY Cal Completed Written in new format and style 4/12/90.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Completed Writting code.
+>>#HISTORY Kieron Completed Bug fixes.
diff --git a/xc/test/xsuite/xtest/tset/CH05/allcclrpln/allcclrpln.m b/xc/test/xsuite/xtest/tset/CH05/allcclrpln/allcclrpln.m
new file mode 100644
index 000000000..d0d876447
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/allcclrpln/allcclrpln.m
@@ -0,0 +1,576 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAllocColorPlanes CH05
+Status
+XAllocColorPlanes(display, colormap, contig, pixels_return, ncolors, nreds, ngreens, nblues, rmask_return, gmask_return, bmask_return)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+Bool contig;
+unsigned long *pixels_return = &dummy;
+int ncolors = 1;
+int nreds;
+int ngreens;
+int nblues;
+unsigned long *rmask_return = &dummy;
+unsigned long *gmask_return = &dummy;
+unsigned long *bmask_return = &dummy;
+>>EXTERN
+static unsigned long dummy;
+
+static int contiguous(mask)
+unsigned long mask;
+{
+ if(!mask)
+ return(0L);
+
+ while((mask&1) == 0L)
+ mask>>=1;
+ mask++;
+ return( bitcount(mask) == 1);
+}
+
+static int maskshift(mask)
+unsigned long mask;
+{
+ int i = 0;
+
+ if(!mask)
+ return(0);
+
+ while((mask&1) == 0L) {
+ mask>>=1;
+ i++;
+ }
+ return(i);
+}
+
+>>ASSERTION Good A
+A call to xname allocates
+.A ncolors*2pow(nreds+ngreens+nblues)
+read/write colourmap entries whose indices in the colourmap are
+obtained by ORing each pixel value returned in the
+.A pixels_return
+argument
+with zero or more of the planes obtained by ORing the masks
+returned in the
+.A rmask_return ,
+.A gmask_return
+and
+.A bmask_return
+arguments.
+>>STRATEGY
+For visual class DirectColor:
+ Create a colormap with alloc set to AllocNone.
+ Allocate one colour and all planes with XAllocColorPlanes.
+ Verify that the function did not return zero.
+ Verify the correct number of cells have been allocated by initialising
+ them with XStoreColors, and reading them with XQueryColors.
+>>CODE
+XVisualInfo *vp;
+unsigned long vmask = (1<<DirectColor);
+unsigned long *pixm, *rr, *gr, *br;
+unsigned long rm, gm, bm, pm, rgbmask, pixel, r, g, b;
+XColor color, qcolor;
+Status status;
+int cells;
+int rshift, gshift, bshift;
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ resetsupvis(vmask);
+ nextsupvis(&vp);
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ ncolors = 1;
+ nreds = bitcount(vp->red_mask);
+ ngreens = bitcount(vp->green_mask);
+ nblues = bitcount(vp->blue_mask);
+ cells = ncolors * (1 << (nreds+ngreens+nblues));
+ contig = False;
+ pixels_return = &pm;
+ rmask_return = &rm;
+ gmask_return = &gm;
+ bmask_return = &bm;
+
+ status = XCALL;
+ if(status == (Status) 0) {
+ report("%s failed to return non-zero", TestName);
+ FAIL;
+ } else {
+ trace("%d cells allocated in the colormap", cells);
+ CHECK;
+ }
+
+ rgbmask = rm | gm | bm ;
+ rshift = maskshift(rm);
+ gshift = maskshift(gm);
+ bshift = maskshift(bm);
+ trace("rgbmask is %x", rgbmask);
+ trace("red shift is %d", rshift);
+ trace("green shift is %d", gshift);
+ trace("blue shift is %d", bshift);
+
+ /*
+ * The following code works on the assumption that for each subfield,
+ * all planes in the subfield mask are allocated (so are contiguous).
+ *
+ * (It does not assume the subfields are adjacent)
+ */
+
+ for(r = 0; r<(1<<nreds); r++) {
+ pixel = (r<<rshift) | pm;
+ debug(1, "pixel value %x", pixel);
+ color.pixel = pixel;
+ color.flags =DoRed;
+ color.red = 0xffff;
+
+ startcall(display);
+ XStoreColor(display, colormap, &color);
+ endcall(display);
+
+ if(geterr() != Success) {
+ report("XStoreColor() failed with pixel value %lu", pixel);
+ FAIL;
+ } else {
+ qcolor.pixel = pixel;
+ startcall(display);
+ XQueryColor(display, colormap, &qcolor);
+ endcall(display);
+ if(geterr() != Success) {
+ report("XQueryColor() failed with pixel value %lu", pixel);
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+ for(g = 0; g<(1<<ngreens); g++) {
+ pixel = (g<<gshift) | pm;
+ debug(1, "pixel value %x", pixel);
+ color.pixel = pixel;
+ color.flags =DoGreen;
+ color.green = 0xffff;
+
+ startcall(display);
+ XStoreColor(display, colormap, &color);
+ endcall(display);
+
+ if(geterr() != Success) {
+ report("XStoreColor() failed with pixel value %lu", pixel);
+ FAIL;
+ } else {
+ qcolor.pixel = pixel;
+ startcall(display);
+ XQueryColor(display, colormap, &qcolor);
+ endcall(display);
+ if(geterr() != Success) {
+ report("XQueryColor() failed with pixel value %lu", pixel);
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+ for(b = 0; b<(1<<nblues); b++) {
+ pixel = (b<<bshift) | pm;
+ debug(1, "pixel value %x", pixel);
+ color.pixel = pixel;
+ color.flags =DoBlue;
+ color.blue = 0xffff;
+
+ startcall(display);
+ XStoreColor(display, colormap, &color);
+ endcall(display);
+
+ if(geterr() != Success) {
+ report("XStoreColor() failed with pixel value %lu", pixel);
+ FAIL;
+ } else {
+ qcolor.pixel = pixel;
+ startcall(display);
+ XQueryColor(display, colormap, &qcolor);
+ endcall(display);
+ if(geterr() != Success) {
+ report("XQueryColor() failed with pixel value %lu", pixel);
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(1 + (1<<nreds) + (1<<ngreens) + (1<<nblues));
+>>ASSERTION Good A
+A call to xname sets
+.A nreds
+bits to one in the mask named by
+.A rmask_return ,
+.A ngreens
+bits to one in the mask named by
+.A gmask_return ,
+and
+.A nblues
+bits to one in the mask named by
+.A bmask_return
+and returns
+.A ncolors
+pixels values in the
+.A pixels_return
+argument
+such that no mask has a bit set in common with
+any other mask or with any of the pixels.
+>>STRATEGY
+For the visual class DirectColor:
+ Create a colormap with alloc set to AllocNone.
+ Allocate one colour and all planes with XAllocColorPlanes.
+ Verify the bitcount of the OR of the colourplane masks equals the
+ sum of the individual bitcounts.
+ Verify that the AND of the pixel and the OR of the colourplane masks is zero.
+ Create a colormap with alloc set to AllocNone.
+ Allocate 3 colours and 3 planes with XAllocColorPlanes.
+ Verify the bitcount of the OR of the colourplane masks equals the
+ sum of the individual bitcounts.
+ Verify that the AND of each pixel and the OR of the colourplane masks is zero.
+>>CODE
+XVisualInfo *vp;
+unsigned long vmask = (1<<DirectColor);
+unsigned long *pixm, *rr, *gr, *br;
+unsigned long rm, gm, bm, pm, rgbmask;
+unsigned long pm_array[3], i;
+Status status;
+int cells, rnreds, rngreens, rnblues;
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ resetsupvis(vmask);
+ nextsupvis(&vp);
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ ncolors = 1;
+ nreds = bitcount(vp->red_mask);
+ ngreens = bitcount(vp->green_mask);
+ nblues = bitcount(vp->blue_mask);
+ cells = ncolors * (1 << (nreds+ngreens+nblues));
+ contig = False;
+ pixels_return = &pm;
+ rmask_return = &rm;
+ gmask_return = &gm;
+ bmask_return = &bm;
+
+ status = XCALL;
+ if(status == (Status) 0) {
+ report("%s failed to return non-zero", TestName);
+ FAIL;
+ } else {
+ trace("%d cells allocated in the colormap", cells);
+ CHECK;
+ }
+
+ rnreds = bitcount(rm);
+ rngreens = bitcount(gm);
+ rnblues = bitcount(bm);
+
+ if( (rnreds != nreds) || (rngreens != ngreens) || (rnblues != nblues) ) {
+ report("Request for %d reds %d greens %d blues returned %d reds %d greens %d blues.",
+ nreds, ngreens, nblues, rnreds, rngreens, rnblues);
+ FAIL;
+ } else
+ CHECK;
+
+ rgbmask = rm | gm | bm ;
+
+ if( bitcount(rgbmask) != rnreds + rnblues + rngreens) {
+ report("The returned colourplane masks had at least one shared bit.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( (rgbmask & pm) != 0L) {
+ report("A pixel shared at least one bit with a colourplane.");
+ FAIL;
+ } else
+ CHECK;
+
+ /*
+ * Repeat requesting a number of colours and fewer planes.
+ */
+ colormap = makecolmap(display, vp->visual, AllocNone);
+
+ ncolors = 3;
+ /* Make sure that this visual is big enough to support so many colours */
+ if (ncolors > bitcount(vp->blue_mask))
+ ncolors = bitcount(vp->blue_mask);
+ if (ncolors > bitcount(vp->green_mask))
+ ncolors = bitcount(vp->green_mask);
+ if (ncolors > bitcount(vp->red_mask))
+ ncolors = bitcount(vp->red_mask);
+ debug(1, "ncolors = %d", ncolors);
+
+ nreds = 1;
+ ngreens = 1;
+ nblues = 1;
+ cells = ncolors * (1 << (nreds+ngreens+nblues));
+ contig = False;
+ pixels_return = &pm_array[0];
+ rmask_return = &rm;
+ gmask_return = &gm;
+ bmask_return = &bm;
+
+ status = XCALL;
+ if(status == (Status) 0) {
+ report("%s failed to return non-zero", TestName);
+ FAIL;
+ } else {
+ trace("%d cells allocated in the colormap", cells);
+ CHECK;
+ }
+
+ rnreds = bitcount(rm);
+ rngreens = bitcount(gm);
+ rnblues = bitcount(bm);
+
+ if( (rnreds != nreds) || (rngreens != ngreens) || (rnblues != nblues) ) {
+ report("Request for %d reds %d greens %d blues returned %d reds %d greens %d blues.",
+ nreds, ngreens, nblues, rnreds, rngreens, rnblues);
+ FAIL;
+ } else
+ CHECK;
+
+ rgbmask = rm | gm | bm ;
+
+ if( bitcount(rgbmask) != rnreds + rnblues + rngreens) {
+ report("The returned colourplane masks had at least one shared bit.");
+ FAIL;
+ } else
+ CHECK;
+
+ for (i = 0; i < ncolors; i++) {
+ pm = pm_array[i];
+ trace("pixel value of 0x%lx", pm);
+ if( (rgbmask & pm) != 0L) {
+ report("pixel value %ld shared at least one bit with a colourplane.", pm);
+ FAIL;
+ } else
+ CHECK;
+ if ((pm & ~DEPTHMASK(vp->depth)) != 0L) {
+ report("pixel value 0x%lx contained bits outside the depth", pm);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(7+2*ncolors);
+
+>>ASSERTION Good A
+If the visual class
+.S DirectColor
+is supported:
+When the visual type of the
+.A colormap
+argument is
+.S DirectColor ,
+then
+.A rmask_return
+lies within the red pixel subfield
+and
+the
+.A gmask_return
+lies within the green pixel subfield
+and
+the
+.A bmask_return
+lies within the blue pixel subfield.
+>>STRATEGY
+For the visual class DirectColor:
+ Create a colormap with alloc set to AllocNone.
+ Allocate one colour and all planes with XAllocColorPlanes.
+ Verify that the returned masks and the colour subfield masks are identical.
+>>CODE
+XVisualInfo *vp;
+unsigned long vmask = (1<<DirectColor);
+unsigned long *pixm, *rr, *gr, *br;
+unsigned long rm, gm, bm, pm, rgbmask, pixel, i;
+Status status;
+int cells;
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ resetsupvis(vmask);
+ nextsupvis(&vp);
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ ncolors = 1;
+ nreds = bitcount(vp->red_mask);
+ ngreens = bitcount(vp->green_mask);
+ nblues = bitcount(vp->blue_mask);
+ cells = ncolors * (1 << (nreds+ngreens+nblues));
+ contig = False;
+ pixels_return = &pm;
+ rmask_return = &rm;
+ gmask_return = &gm;
+ bmask_return = &bm;
+
+ status = XCALL;
+ if(status == (Status) 0) {
+ report("%s failed to return non-zero", TestName);
+ FAIL;
+ } else {
+ trace("%d cells allocated in the colormap", cells);
+ CHECK;
+ }
+
+ /*
+ * We can check the mask returned matches the pixel subfield exactly
+ * since we requested all planes to be allocated.
+ */
+ if( (vp->red_mask != rm) ) {
+ report("Returned red mask not contained in red pixel subfield");
+ FAIL;
+ } else
+ CHECK;
+ if( (vp->green_mask != gm) ) {
+ report("Returned green mask not contained in green pixel subfield");
+ FAIL;
+ } else
+ CHECK;
+ if( (vp->blue_mask != bm) ) {
+ report("Returned blue mask not contained in blue pixel subfield");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When the
+.A contig
+argument is
+.S True ,
+then
+.A rmask_return ,
+.A gmask_return
+and
+.A bmask_return
+each contains a contiguous set of bits set to one.
+>>STRATEGY
+For the visual class DirectColor:
+ Create a colormap with alloc set to AllocNone.
+ Allocate one colour and some planes with XAllocColorPlanes and contig = True.
+ Verify that the returned masks were contiguous.
+>>CODE
+XVisualInfo *vp;
+unsigned long vmask = (1<<DirectColor);
+unsigned long *pixm, *rr, *gr, *br;
+unsigned long rm, gm, bm, pm, rgbmask, pixel, i;
+XColor color;
+Status status;
+int cells;
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ resetsupvis(vmask);
+ nextsupvis(&vp);
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ ncolors = 1;
+ nreds = bitcount(vp->red_mask);
+ ngreens = bitcount(vp->green_mask);
+ nblues = bitcount(vp->blue_mask);
+ cells = ncolors * (1 << (nreds+ngreens+nblues));
+ contig = True;
+ pixels_return = &pm;
+ rmask_return = &rm;
+ gmask_return = &gm;
+ bmask_return = &bm;
+
+ /*
+ * Just ask for a small number of planes if more was possible.
+ * Originally this test requested all planes - but of course this
+ * gave little scope for contig to make any difference.
+ */
+ if(nreds > 2)
+ nreds = 2;
+ if(ngreens > 2)
+ ngreens = 2;
+ if(nblues > 2)
+ nblues = 2;
+ trace("test with %d reds %d greens %d blues", nreds, ngreens, nblues);
+
+ status = XCALL;
+ if(status == (Status) 0) {
+ report("%s failed to return non-zero", TestName);
+ FAIL;
+ } else {
+ trace("%d cells allocated in the colormap", cells);
+ CHECK;
+ }
+
+ if((contiguous(rm) && contiguous(gm) && contiguous(bm)) == 0) {
+ report("Returned colourplane masks were not contiguous");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER BadColor
+>>ASSERTION Bad A
+When the
+.A ncolors
+argument is zero, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+For all supported visual classes:
+ Create a colormap with alloc set to AllocNone.
+ Call XAllocColorPlanes with ncolors = 0.
+>>CODE BadValue
+XVisualInfo *vp;
+Visual *visual;
+unsigned long vmask = (1<<DirectColor);
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ ncolors = 0;
+ XCALL;
+ if(geterr() == BadValue)
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Bad A
+.ER BadValue contig True False
+>>#HISTORY Cal Completed Written in new style and format 4/12/90
+>>#HISTORY Cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/allcnmdclr/allcnmdclr.m b/xc/test/xsuite/xtest/tset/CH05/allcnmdclr/allcnmdclr.m
new file mode 100644
index 000000000..7c78808e3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/allcnmdclr/allcnmdclr.m
@@ -0,0 +1,357 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAllocNamedColor CH05
+Status
+XAllocNamedColor(display, colormap, color_name, screen_def_return, exact_def_return)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+char *color_name = "";
+XColor *screen_def_return = &dummycol;
+XColor *exact_def_return = &dummycol;
+>>EXTERN
+XColor dummycol;
+>>ASSERTION Good A
+A call to xname
+allocates a read-only entry in the
+.A colormap
+argument
+corresponding to the named colour specified by the
+.A color_name
+argument and
+returns the exact RGB values in the
+.M red ,
+.M green ,
+and
+.M blue
+components in the
+.S XColor
+structure named by the
+.A exact_def_return
+argument,
+returns the closest colour supported by the screen with which the
+.A colormap
+argument is associated in the
+.M red ,
+.M green ,
+and
+.M blue
+components in the
+.S XColor
+structure named by the
+.A screen_def_return
+argument
+and returns the colourmap entry in the
+.M pixel
+component in the
+.S XColor
+structure named by the
+.A screen_def_return
+argument.
+>>STRATEGY
+For each supported visual type:
+ Create a colourmap with alloc set to AllocNone.
+ Allocate a read/only cell with colour XT_GOOD_COLORNAME
+ in the colourmap with XAllocNamedColor.
+ Verify that the function returned non-zero.
+ Allocate a read/only cell using returned RGB values with XAllocColor
+ (which is assumed to return correct RGB values) .
+ Verify that the pixel value and the RBG values from both calls are identical.
+ (so XAllocNamedColor previously returned correct RGB values)
+>>CODE
+XVisualInfo *vp;
+char *goodname;
+Status status;
+XColor screencol, exactcol, testcol;
+unsigned long vmask;
+unsigned short trunc;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ if( (goodname = tet_getvar("XT_GOOD_COLORNAME")) == (char *) 0) {
+ delete("XT_GOOD_COLORNAME is not defined.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting XAllocNamedColor() for class %s, color %s", displayclassname(vp->class), goodname);
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+ color_name = goodname;
+ screen_def_return = &screencol;
+ exact_def_return = &exactcol;
+ status = XCALL;
+
+ if( status == (Status) 0) {
+ report("%s failed to return non-zero.", TestName);
+ FAIL;
+ continue;
+ } else
+ CHECK;
+
+ testcol = screencol;
+ trace("Screen: pixel %lu, r %u g %u b %u", screencol.pixel , screencol.red, screencol.green, screencol.blue);
+ trace("Exact : pixel %lu, r %u g %u b %u", exactcol.pixel, exactcol.red, exactcol.green, exactcol.blue);
+ trace("Test : pixel %lu, r %u g %u b %u", testcol.pixel, testcol.red, testcol.green, testcol.blue);
+
+ status = XAllocColor(display, colormap, &testcol);
+ if(status == (Status) 0) {
+ report("XAllocColor() failed to return non-zero.");
+ FAIL;
+ continue;
+ } else
+ CHECK;
+
+ trace("Exact : pixel %lu, r %u g %u b %u", exactcol.pixel, exactcol.red, exactcol.green, exactcol.blue);
+
+ if( screencol.pixel != testcol.pixel ) {
+ report("%s return pixel value %lu instead of %lu.",
+ TestName, screencol.pixel, testcol.pixel);
+ FAIL;
+ } else
+ CHECK;
+
+ if((screencol.red != testcol.red) ||
+ (screencol.green != testcol.green) ||
+ (screencol.blue != testcol.blue) ) {
+ report("%s return RGB values r %u g %u b %u instead of r %u g %u b %u.",
+ TestName,
+ screencol.red, screencol.green, screencol.blue,
+ testcol.red, testcol.green, testcol.blue);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(4 * nsupvis());
+
+>>ASSERTION Good A
+When the
+.A color_name
+argument refers to a colour in the colour database, then xname
+returns non-zero.
+>>STRATEGY
+For each supported visual type:
+ Create a colourmap with alloc set to AllocNone.
+ Allocate a read/only cell with colour XT_GOOD_COLORNAME
+ in the colourmap with XAllocNamedColor.
+ Verify that the function returned non-zero.
+>>CODE
+XVisualInfo *vp;
+char *goodname;
+Status status;
+XColor screencol, exactcol, testcol;
+unsigned long vmask;
+unsigned short trunc;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ if( (goodname = tet_getvar("XT_GOOD_COLORNAME")) == (char *) 0) {
+ delete("XT_GOOD_COLORNAME is not defined.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting XAllocNamedColor() for class %s, color %s", displayclassname(vp->class), goodname);
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+ color_name = goodname;
+ screen_def_return = &screencol;
+ exact_def_return = &exactcol;
+ status = XCALL;
+ if( status == (Status) 0) {
+ report("%s failed to return non-zero with color %s.",
+ TestName, goodname);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Good A
+When the
+.A color_name
+argument does not refer to a colour in the colour database, then xname
+returns zero.
+>>STRATEGY
+For each supported visual type:
+ Create a colomap with alloc set to AllocNone.
+ Allocate a read/only cell with colour XT_BAD_COLORNAME
+ in the colourmap with XAllocNamedColor.
+ Verify that the function returned zero.
+>>CODE
+XVisualInfo *vp;
+char *badname;
+Status status;
+XColor screencol, exactcol, testcol;
+unsigned long vmask;
+unsigned short trunc;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ if( (badname = tet_getvar("XT_BAD_COLORNAME")) == (char *) 0) {
+ delete("XT_BAD_COLORNAME is not defined.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting XAllocNamedColor() for class %s, color %s", displayclassname(vp->class), badname);
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+ color_name = badname;
+ screen_def_return = &screencol;
+ exact_def_return = &exactcol;
+ status = XCALL;
+ if( status != (Status) 0) {
+ report("%s failed to return zero with color %s.",
+ TestName, badname);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+
+>>ASSERTION Good A
+Upper and lower case characters in the
+.A color_name
+argument refer to the same colour.
+>>STRATEGY
+For each supported visual type:
+ Create a colomap with alloc set to AllocNone.
+ Allocate a read/only cell with colour name XT_GOOD_COLORNAME
+ in the colourmap with XAllocNamedColor.
+ Allocate a read/only cell with colour name XT_GOOD_COLORNAME,
+ with alternate characters in alternating case,
+ in the colourmap with XAllocNamedColor.
+ Verify that the function returned non-zero.
+ Verify that the exact and closest supported rbg values from both calls
+ are identical.
+ Verify that the pixel value of the cell allocated by both calls
+ is the same.
+>>CODE
+XVisualInfo *vp;
+char *cp, *goodname, *casename;
+Status status;
+XColor screencol, exactcol, alscreencol, alexactcol;
+unsigned long vmask;
+unsigned short trunc;
+int i;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ if( (goodname = tet_getvar("XT_GOOD_COLORNAME")) == (char *) 0) {
+ delete("XT_GOOD_COLORNAME is not defined.");
+ return;
+ }
+
+ casename = (char *) malloc( strlen(goodname) + 1);
+ strcpy(casename, goodname);
+
+ for(i=0, cp=casename; *cp; i++)
+ if(i&1)
+ *cp++ = tolower(*cp);
+ else
+ *cp++ = toupper(*cp);
+
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting XAllocNamedColor() for class %s, color %s", displayclassname(vp->class), goodname);
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+ color_name = goodname;
+ screen_def_return = &screencol;
+ exact_def_return = &exactcol;
+ status = XCALL;
+
+ if( status == (Status) 0) {
+ report("%s failed to return non-zero with color %s.",
+ TestName, goodname);
+ FAIL;
+ continue;
+ } else
+ CHECK;
+
+ color_name = casename;
+ trace("Testing colourname %s", color_name);
+ screen_def_return = &alscreencol;
+ exact_def_return = &alexactcol;
+ status = XCALL;
+
+ if( status == (Status) 0) {
+ report("%s failed to return non-zero with color %s.",
+ TestName, casename);
+ FAIL;
+ continue;
+ } else
+ CHECK;
+
+ if(screencol.pixel != alscreencol.pixel) {
+ report("%s for name %s", TestName, casename);
+ report("returned pixel value %lu", alscreencol.pixel);
+ report("%s for name %s", TestName, goodname);
+ report("returned pixel value %lu", screencol.pixel);
+ FAIL;
+ } else
+ CHECK;
+
+ if((exactcol.red != alexactcol.red) ||
+ (exactcol.green != alexactcol.green) ||
+ (exactcol.blue != alexactcol.blue)) {
+ report("%s for name %s", TestName, casename);
+ report("returned exact RGB values r %u g %u b %u",
+ alexactcol.red, alexactcol.green, alexactcol.blue);
+ report("%s for name %s", TestName, goodname);
+ report("returned exact RGB values r %u g %u b %u",
+ exactcol.red, exactcol.green, exactcol.blue);
+ FAIL;
+ } else
+ CHECK;
+
+ if((screencol.red != alscreencol.red) ||
+ (screencol.green != alscreencol.green) ||
+ (screencol.blue != alscreencol.blue)) {
+ report("%s for name %s", TestName, casename);
+ report("returned closest RGB values r %u g %u b %u",
+ alscreencol.red, alscreencol.green, alscreencol.blue);
+ report("%s for name %s", TestName, goodname);
+ report("returned closest RGB values r %u g %u b %u",
+ screencol.red, screencol.green, screencol.blue);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ free(casename);
+ CHECKPASS(5 * nsupvis());
+
+>>ASSERTION Bad A
+.ER BadColor
+>>ASSERTION Bad B 1
+.ER Alloc
+>>#HISTORY Cal Completed Written in new format and style.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writting code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/chnggc/chnggc.m b/xc/test/xsuite/xtest/tset/CH05/chnggc/chnggc.m
new file mode 100644
index 000000000..84c32a61a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/chnggc/chnggc.m
@@ -0,0 +1,1144 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XChangeGC CH05
+void
+XChangeGC(display, gc, valuemask, values)
+Display *display = Dsp;
+GC gc;
+unsigned long valuemask = GCTile;
+XGCValues *values = &srcgcv;
+>>EXTERN
+XGCValues srcgcv = { GXxor, AllPlanes, 0, 1, 0, LineSolid, CapButt,
+ JoinMiter, FillSolid, EvenOddRule, ArcPieSlice,
+ None, };
+>>SET need-gc-flush
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>ASSERTION Good A
+A call to xname changes the components
+specified by the
+.A valuemask
+argument
+in the specified GC
+to the values in the
+.A values
+argument.
+>>STRATEGY
+Create a GC fg = W_FG, bg = W_BG, function = GXCopy.
+Change the function component of the GC to GXxor using XChangeGC.
+Plot point (0,0) with XDrawPoint.
+Set fg to W_FG ^ W_BG using XChangeGC.
+Plot point (0,0) with XDrawPoint.
+Verify that pixel at (0,0) is W_BG.
+>>CODE
+XVisualInfo *vp;
+Window win;
+XRectangle rect;
+Pixmap pmap;
+XGCValues gcv;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ gc = makegc(display, win);
+
+ gcv.function = GXxor;
+ valuemask = GCFunction;
+ values = &gcv;
+ XCALL;
+
+ XDrawPoint(display, win, gc, 0, 0);
+ XSetForeground(display, gc, W_FG ^ W_BG);
+ XDrawPoint(display, win, gc, 0, 0);
+
+ if( ! checkpixel(display, win, 0, 0, W_BG) ) {
+ report("The GC function component was not set to GXxor");
+ report("by a call to XChangeGC");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When a call to xname changes the
+.M clip-mask
+component of
+.A gc,
+then any previous
+.S XSetClipRectangles
+request on the specified GC is overridden.
+>>STRATEGY
+Create a GC.
+Draw line from (0, 0) to (100, 0) using XDrawLine.
+Save image on drawable using XGetImage.
+Clear drawable.
+Change the clip_mask component of the GC using XSetClipRectangles.
+Draw line from (0, 0) to (100, 0) using XDrawLine.
+Verify using XGetImage that the image on the drawable is altered.
+Change the GC clip_mask component using XChangeGC to original.
+Draw line from (0, 0) to (100, 0) using XDrawLine.
+Verify using XGetImage that the image is restored.
+>>CODE
+XVisualInfo *vp;
+XGCValues srcgcv;
+GC gc;
+Window win;
+XImage *im;
+XRectangle *rectangles;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ srcgcv.foreground = W_FG;
+ srcgcv.line_width = 10;
+ srcgcv.clip_mask = None;
+
+ /* Create a GC. */
+ gc = XCreateGC(display, win, (GCClipMask | GCLineWidth | GCForeground),
+ &srcgcv);
+
+ /* Draw line from (0, 0) to (100, 0) using XDrawLine. */
+ XDrawLine(display, win, gc, 0, 0, 100, 0);
+
+ /* Save image on drawable using XGetImage. */
+ im = savimage(display, win);
+
+ /* Clear drawable. */
+ dclear(display, win);
+
+ /* Change the clip_mask component of the GC using XSetClipRectangles. */
+ XSetClipRectangles(display, gc, 0, 0, rectangles, 0, Unsorted);
+
+ /* Draw line from (0, 0) to (100, 0) using XDrawLine. */
+ XDrawLine(display, win, gc, 0, 0, 100, 0);
+
+ /* Verify using XGetImage that the image on the drawable is altered. */
+ if(diffsavimage(display, win, im)) {
+ delete("XSetClipRectangles did not set clip_mask component of GC");
+ return;
+ } else
+ CHECK;
+
+ /* Change the GC clip_mask component using XChangeGC to original. */
+ srcgcv.clip_mask = None;
+ values = &srcgcv;
+ valuemask = GCClipMask;
+ XCALL;
+
+ /* Draw line from (0, 0) to (100, 0) using XDrawLine. */
+ XDrawLine(display, win, gc, 0, 0, 100, 0);
+
+ /* Verify using XGetImage that the image is restored. */
+ if( ! compsavimage(display, win, im)) {
+ report("XChangeGC with GCClipMask did not override call to XSetClipRectangles");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When a call to xname changes the
+.M dash-offset
+or
+.M dashes
+component of
+.A gc,
+then any previous
+.S XSetDashes
+request on the specified GC is overridden.
+>>STRATEGY
+Create a GC.
+Draw dashed line from (0, 0) to (100, 0) using XDrawLine.
+Save image on drawable using XGetImage.
+
+Part 1. Verify cancelling when GCDashList is used.
+Change the dashes component of the GC
+Draw dashed line from (0, 0) to (100, 0) using XDrawLine.
+Verify using XGetImage that XSetDashes altered image on drawable.
+Change the GC dashes component using XChangeGC to original value.
+Draw dashed line from (0, 0) to (100, 0) using XDrawLine.
+Verify using XGetImage that the image is as before XSetDashes.
+
+Part 2. Verify cancelling when GCDashOffset is used.
+Change the dash_offset component of the GC using XSetDashes.
+Draw dashed line from (0, 0) to (100, 0) using XDrawLine.
+Verify using XGetImage that XSetDashes altered image on drawable.
+Change the GC dash_offset component using XChangeGC to original value.
+Draw dashed line from (0, 0) to (100, 0) using XDrawLine.
+Verify using XGetImage that the image is as before XSetDashes.
+>>CODE
+XVisualInfo *vp;
+XGCValues srcgcv;
+GC gc;
+Window win;
+XImage *im;
+static char dashes[] = {20, 10};
+static char odashes[] = {10, 10};
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ srcgcv.foreground = W_FG;
+ srcgcv.background = W_BG;
+ srcgcv.line_style = LineDoubleDash;
+ srcgcv.line_width = 10;
+ srcgcv.dashes = 10;
+ srcgcv.dash_offset = 0;
+
+ /* Create a GC. */
+ gc = XCreateGC(display, win, (GCLineWidth | GCLineStyle | GCDashOffset |
+ GCDashList | GCForeground | GCBackground), &srcgcv);
+
+ /* Draw dashed line from (0, 0) to (100, 0) using XDrawLine. */
+ XDrawLine(display, win, gc, 0, 0, 100, 0);
+
+ /* Save image on drawable using XGetImage. */
+ im = savimage(display, win);
+
+ /* Part 1. Verify cancelling when GCDashList is used. */
+ /* Change the dashes component of the GC */
+ XSetDashes(display, gc, 0, dashes, sizeof(dashes)/sizeof(char));
+
+ /* Draw dashed line from (0, 0) to (100, 0) using XDrawLine. */
+ XDrawLine(display, win, gc, 0, 0, 100, 0);
+
+ /* Verify using XGetImage that XSetDashes altered image on drawable. */
+ if(diffsavimage(display, win, im)) {
+ delete("XSetDashes did not set dashes component of GC");
+ return;
+ } else
+ CHECK;
+
+ /* Change the GC dashes component using XChangeGC to original value. */
+ srcgcv.dashes = 10;
+ values = &srcgcv;
+ valuemask = GCDashList;
+ XCALL;
+
+ /* Draw dashed line from (0, 0) to (100, 0) using XDrawLine. */
+ XDrawLine(display, win, gc, 0, 0, 100, 0);
+
+ /* Verify using XGetImage that the image is as before XSetDashes. */
+ if( ! compsavimage(display, win, im)) {
+ report("XChangeGC with GCDashList did not override call to XSetDashes");
+ FAIL;
+ } else
+ CHECK;
+
+ /* Part 2. Verify cancelling when GCDashOffset is used. */
+ /* Change the dash_offset component of the GC using XSetDashes. */
+ XSetDashes(display, gc, 5, odashes, sizeof(odashes)/sizeof(char));
+
+ /* Draw dashed line from (0, 0) to (100, 0) using XDrawLine. */
+ XDrawLine(display, win, gc, 0, 0, 100, 0);
+
+ /* Verify using XGetImage that XSetDashes altered image on drawable. */
+ if(diffsavimage(display, win, im)) {
+ delete("XSetDashes did not set dash_offset component of GC");
+ return;
+ } else
+ CHECK;
+
+ /* Change the GC dash_offset component using XChangeGC to original value. */
+ srcgcv.dash_offset = 0;
+ values = &srcgcv;
+ valuemask = GCDashOffset;
+ XCALL;
+
+ /* Draw dashed line from (0, 0) to (100, 0) using XDrawLine. */
+ XDrawLine(display, win, gc, 0, 0, 100, 0);
+
+ /* Verify using XGetImage that the image is as before XSetDashes. */
+ if( ! compsavimage(display, win, im)) {
+ report("XChangeGC with GCDashOffset did not override call to XSetDashes");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+>>ASSERTION Bad A
+.ER GC
+>>ASSERTION Bad A
+When the
+.M font
+does not name a valid font,
+and the GCFont bit is set in
+.A valuemask ,
+then a
+.S BadFont
+error occurs.
+>>STRATEGY
+Create a font for the default screen and free font with XFreeFont.
+Create a GC with root window as the drawable.
+Change GC using XChangeGC with bad font as the font component.
+Verify that a BadFont error occurs.
+>>CODE BadFont
+Window w;
+Font font;
+XGCValues vals;
+
+ vals.font = badfont(Dsp);
+
+ gc = makegc(display, DRW(display));
+ values = &vals;
+ valuemask = GCFont;
+ XCALL;
+
+ if( geterr() == BadFont)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M tile
+does not name a valid pixmap,
+and the GCTile bit is set in
+.A valuemask ,
+then a
+.A BadPixmap
+error occurs.
+>>STRATEGY
+Create a bad pixmap for the root window and free pixmap with XFreePixmap.
+Create a GC with window as the drawable.
+Change GC using XChangeGC with pixmap as the tile.
+Verify that a BadPixmap error occurs.
+>>CODE BadPixmap
+XGCValues vals;
+
+ vals.tile = badpixm(display);
+
+ gc = makegc(display, DRW(display));
+ values = &vals;
+ valuemask = GCTile;
+ XCALL;
+
+ if( geterr() == BadPixmap)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M stipple
+does not name a valid pixmap,
+and the GCStipple bit is set in
+.A valuemask ,
+then a
+.A BadPixmap
+error occurs.
+>>STRATEGY
+Create a bad pixmap for the root window and free pixmap with XFreePixmap.
+Create a GC with window as the drawable.
+Change GC using XChangeGC with pixmap as the stipple.
+Verify that a BadPixmap error occurs.
+>>CODE BadPixmap
+XGCValues vals;
+
+ vals.stipple = badpixm(display);
+
+ gc = makegc(display, DRW(display));
+ values = &vals;
+ valuemask = GCStipple;
+ XCALL;
+
+ if( geterr() == BadPixmap)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M clip-mask
+does not name a valid pixmap, or
+.S None ,
+and the GCClipMask bit is set in
+.A valuemask ,
+then a
+.A BadPixmap
+error occurs.
+>>STRATEGY
+Create a bad pixmap for the root window and free pixmap with XFreePixmap.
+Create a GC with window as the drawable.
+Change GC using XChangeGC with pixmap as the clip_mask.
+Verify that a BadPixmap error occurs.
+>>CODE BadPixmap
+Window w;
+Pixmap pm;
+XGCValues vals;
+
+ vals.clip_mask = badpixm(display);
+
+ gc = makegc(display, DRW(display));
+ values = &vals;
+ valuemask = GCClipMask;
+ XCALL;
+
+ if (geterr() == BadPixmap)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad C
+When the graphics context and the
+.M tile
+pixmap do not have the same depth,
+and the GCTile bit is set in
+.A valuemask ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+For all non-depth1 drawables:
+ Created such a drawable.
+ Create a depth 1 pixmap.
+ Create a GC with window as the drawable.
+ Change GC using XChangeGC with pixmap as the tile.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+int count;
+XGCValues vals;
+XVisualInfo *vp;
+Drawable d;
+
+ count = 0;
+ vals.tile = XCreatePixmap(display, DRW(display), 1,1,1);
+ valuemask = GCTile;
+ values = &vals;
+ for(resetvinf(VI_WIN); nextvinf(&vp);)
+ if(vp->depth != 1) {
+ trace("Testing a window of depth %d",vp->depth);
+ count++;
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XCALL;
+ if(geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+ }
+
+ for(resetvinf(VI_PIX); nextvinf(&vp);)
+ if(vp->depth != 1) {
+ trace("Testing a window of depth %d",vp->depth);
+ count++;
+ d = makepixm(display, vp);
+ gc = makegc(display, d);
+ XCALL;
+ if(geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+ }
+
+
+ if(count == 0) {
+ tet_result(TET_UNSUPPORTED);
+ report("Only depth one drawables are supported.");
+ return;
+ } else
+ CHECKPASS(count);
+
+>>ASSERTION Bad A
+When the graphics context and the
+.M tile
+pixmap were not created for the same root,
+and the GCTile bit is set in
+.A valuemask ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If multiple roots are supported:
+ Create a pixmap for one root.
+ Create a GC for another root
+ Change GC using XChangeGC with pixmap as the tile component.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+char *altroot;
+int scr_num;
+XGCValues vals;
+
+ altroot = tet_getvar("XT_ALT_SCREEN");
+ if (altroot == NULL) {
+ delete("XT_ALT_SCREEN not set");
+ return;
+ }
+ if (*altroot == 'U') {
+ report("Only one screen supported");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ scr_num = atoi(altroot);
+ if (scr_num == DefaultScreen(display)) {
+ delete("The Alternate root was the same as the one under test");
+ return;
+ }
+ if (scr_num >= ScreenCount(display)) {
+ delete("Screen given in XT_ALT_SCREEN could not be accessed");
+ return;
+ }
+
+ /*
+ * Create a 1x1 depth 1 pixmap on other screen
+ * and use it to create a gc
+ */
+
+ vals.tile = XCreatePixmap(display, RootWindow(display, scr_num), 1, 1, 1);
+ gc = makegc(display, DRW(display));
+ values = &vals;
+ valuemask = GCTile;
+ XCALL;
+
+ if (geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad C
+When the
+.M stipple
+pixmap does not have depth one,
+and the GCStipple bit is set in
+.A valuemask ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If pixmaps with depth other than one are supported:
+ Create a pixmap with depth other than one.
+ Create a GC
+ Change GC using XChangeGC with the pixmap as the stipple component.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+XGCValues vals;
+
+ if((vals.stipple = nondepth1pixmap(display, DRW(display))) == (Pixmap) 0) {
+ tet_result(TET_UNSUPPORTED);
+ report("Only depth 1 pixmaps are supported.");
+ return;
+ } else
+ CHECK;
+
+ gc = makegc(display, DRW(display));
+ values = &vals;
+ valuemask = GCStipple;
+ XCALL;
+
+ if(geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad C
+When the graphics context and the
+.M stipple
+pixmap were not created for the same root,
+and the GCStipple bit is set in
+.A valuemask ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If multiple roots are supported:
+ Create a pixmap for one root.
+ Create a GC for another root
+ Change GC using XChangeGC with pixmap as the stipple component.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+char *altroot;
+int scr_num;
+XGCValues vals;
+
+ altroot = tet_getvar("XT_ALT_SCREEN");
+ if (altroot == NULL) {
+ delete("XT_ALT_SCREEN not set");
+ return;
+ }
+ if (*altroot == 'U') {
+ report("Only one screen supported");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ scr_num = atoi(altroot);
+ if (scr_num == DefaultScreen(display)) {
+ delete("The Alternate root was the same as the one under test");
+ return;
+ }
+ if (scr_num >= ScreenCount(display)) {
+ delete("Screen given in XT_ALT_SCREEN could not be accessed");
+ return;
+ }
+
+ /*
+ * Create a 1x1 depth 1 pixmap on other screen
+ * and use it to create a gc
+ */
+
+ vals.stipple = XCreatePixmap(display, RootWindow(display, scr_num), 1, 1, 1);
+ gc = makegc(display, DRW(display));
+ values = &vals;
+ valuemask = GCStipple;
+ XCALL;
+
+ if (geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad C
+When the
+.M clip-mask
+is set to a pixmap, and
+the
+.M clip-mask
+does not have depth one,
+and the GCClipMask bit is set in
+.A valuemask ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If pixmaps with depth other than one are supported:
+ Create a pixmap with depth other than one.
+ Create a GC
+ Change GC using XChangeGC with the pixmap as the clip_mask component.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+XGCValues vals;
+
+ if((vals.clip_mask = nondepth1pixmap(display, DRW(display))) == (Pixmap) 0) {
+ tet_result(TET_UNSUPPORTED);
+ report("Only depth 1 pixmaps are supported.");
+ return;
+ } else
+ CHECK;
+
+ gc = makegc(display, DRW(display));
+ values = &vals;
+ valuemask = GCClipMask;
+ XCALL;
+
+ if(geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad C
+When the
+.M clip-mask
+is set to a pixmap, and
+the graphics context and the
+.M clip-mask
+were not created for the same root,
+and the GCClipMask bit is set in
+.A valuemask ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If multiple roots are supported:
+ Create a pixmap for one root.
+ Create a GC for another root
+ Change GC using XChangeGC with the pixmap as the clip_mask component.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+char *altroot;
+int scr_num;
+XGCValues vals;
+
+ altroot = tet_getvar("XT_ALT_SCREEN");
+ if (altroot == NULL) {
+ delete("XT_ALT_SCREEN not set");
+ return;
+ }
+ if (*altroot == 'U') {
+ report("Only one screen supported");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ scr_num = atoi(altroot);
+ if (scr_num == DefaultScreen(display)) {
+ delete("The Alternate root was the same as the one under test");
+ return;
+ }
+ if (scr_num >= ScreenCount(display)) {
+ delete("Screen given in XT_ALT_SCREEN could not be accessed");
+ return;
+ }
+
+ /*
+ * Create a 1x1 depth 1 pixmap on other screen
+ * and use it to create a gc
+ */
+
+ vals.clip_mask = XCreatePixmap(display, RootWindow(display, scr_num), 1, 1, 1);
+ gc = makegc(display, DRW(display));
+ values = &vals;
+ valuemask = GCClipMask;
+ XCALL;
+
+ if (geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When the
+.A valuemask
+argument is other than a bitwise OR of none or any of
+.S GCFunction ,
+.S GCPlaneMask ,
+.S GCForeground ,
+.S GCBackground ,
+.S GCLineWidth ,
+.S GCLineStyle ,
+.S GCCapStyle ,
+.S GCJoinStyle ,
+.S GCFillStyle ,
+.S GCFillRule ,
+.S GCTile ,
+.S GCStipple ,
+.S GCTileStipXOrigin ,
+.S GCTileStipYOrigin ,
+.S GCFont ,
+.S GCSubWindowMode ,
+.S GCGraphicsExposures ,
+.S GCClipXOrigin ,
+.S GCClipYOrigin ,
+.S GCClipMask ,
+.S GCDashOffset ,
+.S GCDashList ,
+or
+.S GCArcMode ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a gc
+Change GC using XChangeGC with function component GXcopy
+ and foreground component = 1 using a mask of GCFunction | GCForeground |
+ ~(GCFunction | GCPlaneMask | GCForeground | GCBackground |
+ GCLineWidth | GCLineStyle | GCCapStyle | GCJoinStyle |
+ GCFillStyle | GCFillRule | GCTile | GCStipple |
+ GCTileStipXOrigin | GCTileStipYOrigin | GCFont | GCSubwindowMode |
+ GCGraphicsExposures | GCClipXOrigin | GCClipYOrigin | GCClipMask |
+ GCDashOffset | GCDashList | GCArcMode)
+Verify that a bad value error occurred.
+>>CODE BadValue
+Window w;
+XGCValues srcgcv;
+int i;
+unsigned char *p;
+
+ i = sizeof(XGCValues);
+ p = (unsigned char *)&srcgcv;
+ while( i-- > 0 )
+ *p++ = 0xff;
+
+ gc = makegc(display, DRW(display));
+ values = &srcgcv;
+ srcgcv.foreground = 1;
+ srcgcv.function = ~0;
+ valuemask = GCFunction | GCForeground | ~(GCFunction | GCPlaneMask | GCForeground | GCBackground |
+ GCLineWidth | GCLineStyle | GCCapStyle | GCJoinStyle |
+ GCFillStyle | GCFillRule | GCTile | GCStipple |
+ GCTileStipXOrigin | GCTileStipYOrigin | GCFont | GCSubwindowMode |
+ GCGraphicsExposures | GCClipXOrigin | GCClipYOrigin | GCClipMask |
+ GCDashOffset | GCDashList | GCArcMode);
+ XCALL;
+
+ if(geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M function
+is other than
+.S GXclear ,
+.S GXand ,
+.S GXandReverse ,
+.S GXcopy ,
+.S GXandInverted ,
+.S GXnoop ,
+.S GXxor ,
+.S GXor ,
+.S GXnor ,
+.S GXequiv ,
+.S GXinvert ,
+.S GXorReverse ,
+.S GXcopyInverted ,
+.S GXorInverted ,
+.S GXnand
+or
+.S GXset ,
+and the GCFunction bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC.
+Change GC function to GXclear + GXand + GXandReverse + GXcopy +
+ GXandInverted + GXnoop + GXxor + GXor + GXnor +
+ GXequiv + GXinvert + GXorReverse +
+ GXcopyInverted + GXorInverted + GXnand + GXset + 1
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues srcgcv;
+
+ gc = makegc(display, DRW(display));
+ srcgcv.function = GXclear + GXand + GXandReverse + GXcopy +
+ GXandInverted + GXnoop + GXxor + GXor + GXnor +
+ GXequiv + GXinvert + GXorReverse +
+ GXcopyInverted + GXorInverted + GXnand + GXset + 1;
+ values = &srcgcv;
+ valuemask = GCFunction;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M line_style
+is other than
+.S LineSolid ,
+.S LineDoubleDash
+or
+.S LineOnOffDash ,
+and the GCLineStyle bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC.
+Change GC line_style to LineSolid + LineDoubleDash + LineOnOffDash + 1;
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues srcgcv;
+
+ gc = makegc(display, DRW(display));
+ srcgcv.line_style = LineSolid + LineDoubleDash + LineOnOffDash + 1;
+ values = &srcgcv;
+ valuemask = GCLineStyle;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M cap_style
+is other than
+.S CapNotLast ,
+.S CapButt ,
+.S CapRound
+or
+.S CapProjecting ,
+and the GCCapStyle bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC.
+Change GC cap_style to CapNotLast + CapButt + CapRound + CapProjecting + 1
+Verify that a BadValue error occurred
+>>CODE BadValue
+XGCValues srcgcv;
+
+ gc = makegc(display, DRW(display));
+ srcgcv.cap_style = CapNotLast + CapButt + CapRound + CapProjecting + 1;
+ values = &srcgcv;
+ valuemask = GCCapStyle;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M join_style
+is other than
+.S JoinMiter ,
+.S JoinRound
+or
+.S JoinBevel ,
+and the GCJoinStyle bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC.
+Change GC join_style to JoinMiter + JoinRound + JoinBevel + 1
+Verify that a BadValue error occurs
+>>CODE BadValue
+XGCValues srcgcv;
+
+ gc = makegc(display, DRW(display));
+ srcgcv.join_style = JoinMiter + JoinRound + JoinBevel + 1;
+ values = &srcgcv;
+ valuemask = GCJoinStyle;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M fill_style
+is other than
+.S FillSolid ,
+.S FillTiled ,
+.S FillStippled
+or
+.S FillOpaqueStippled ,
+and the GCFillStyle bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC.
+Change GC fill_style to FillSolid + FillTiled + FillStippled + FillOpaqueStippled + 1
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues srcgcv;
+
+ gc = makegc(display, DRW(display));
+ srcgcv.fill_style = FillSolid + FillTiled + FillStippled + FillOpaqueStippled + 1;
+ values = &srcgcv;
+ valuemask = GCFillStyle;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M fill_rule
+is other than
+.S EvenOddRule
+or
+.S WindingRule ,
+and the GCFillRule bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC.
+Change GC fill_rule to EvenOddRule + WindingRule + 1
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues srcgcv;
+
+ gc = makegc(display, DRW(display));
+ srcgcv.fill_rule = EvenOddRule + WindingRule + 1;
+ values = &srcgcv;
+ valuemask = GCFillRule;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When
+.M arc_mode
+is other than
+.S ArcChord
+or
+.S ArcPieSlice ,
+and the GCArcMode bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC.
+Change GC arc_mode to ArcChord + ArcPieSlice + 1.
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues srcgcv;
+
+ gc = makegc(display, DRW(display));
+ srcgcv.arc_mode = ArcChord + ArcPieSlice + 1;
+ values = &srcgcv;
+ valuemask = GCArcMode;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M subwindow_mode
+is other than
+.S ClipByChildren
+or
+.S IncludeInferiors ,
+and the GCSubwindowMode bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC.
+Change GC subwindow_mode to ClipByChildren + IncludeInferiors + 1
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues srcgcv;
+
+ gc = makegc(display, DRW(display));
+ srcgcv.subwindow_mode = ClipByChildren + IncludeInferiors + 1;
+ values = &srcgcv;
+ valuemask = GCSubwindowMode;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When
+.M graphics_exposure
+is other than
+.S True
+or
+.S False ,
+and the GCGraphicsExposures bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC.
+Change GC graphics_exposures component to (int) False + (int) True + 1
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues srcgcv;
+
+ gc = makegc(display,DRW(display));
+ srcgcv.graphics_exposures = (int) False + (int) True + 1;
+ values = &srcgcv;
+ valuemask = GCGraphicsExposures;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+
+>>ASSERTION Bad A
+When
+.M dashes
+is set to zero,
+and the GCDashList bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC.
+Change GC using XChangeGC with dashes component = 0
+Verify that a BadValue error occurs.
+>>CODE BadValue
+XGCValues srcgcv;
+
+ gc = makegc(display, DRW(display));
+ srcgcv.dashes = (char) 0;
+ values = &srcgcv;
+ valuemask = GCDashList;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>># HISTORY steve Completed Automatic conversion to new(ish) form.
+>># HISTORY cal Completed Checked for new style and format.
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/cpyclrmpan/cpyclrmpan.m b/xc/test/xsuite/xtest/tset/CH05/cpyclrmpan/cpyclrmpan.m
new file mode 100644
index 000000000..c1be94828
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/cpyclrmpan/cpyclrmpan.m
@@ -0,0 +1,430 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCopyColormapAndFree CH05
+Colormap
+XCopyColormapAndFree(display, colormap)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+>>ASSERTION Good A
+A call to xname creates a colourmap of the same visual type and for the same screen as the
+.A colormap
+argument and returns the new colourmap ID.
+>>STRATEGY
+For each supported visual:
+ Create a colourmap using XCreateColormap with alloc set to AllocNone.
+ Allocate one r/o cell, get it's actual rgb values
+ Allocate the rest of the cmap as r/w and store known values, read them back.
+ Create a new colourmap with XCopyColormapAndFree.
+ Check that it contains the values we know we had in the original.
+ Verify that no error occurred.
+
+>>CODE
+Colormap testcmap;
+XVisualInfo *vp;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+XColor *cellmap, *cellptr;
+XColor cell;
+unsigned long l;
+unsigned int i;
+int pathcnt = 0, size;
+XColor color, color1, color2, ncol1, ncol2;
+Display *disp2;
+
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ color1.pixel = 0xffff;
+ color1.red = 0x0ff0;
+ color1.green = 0xf0f0;
+ color1.blue = 0x0f0f;
+ color1.flags = DoRed|DoGreen|DoBlue;
+
+ color2.pixel = 1;
+ color2.red = 0xffff;
+ color2.green = 0xffff;
+ color2.blue = 0xffff;
+ color2.flags = DoRed|DoGreen|DoBlue;
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ size = maxsize(vp);
+
+ cellmap = (XColor *) malloc(size * sizeof(XColor));
+
+ if (cellmap == (XColor *)NULL) {
+ delete("malloc failure");
+ return;
+ } else
+ CHECK;
+
+ *cellmap = color1;
+
+ if( XAllocColor(display, colormap, cellmap) == False ) {
+ delete("XAllocColor() failed to allocate a r/o colourcell");
+ return;
+ }
+ XQueryColor(display, colormap, cellmap);
+
+ for(i=1, cellptr = cellmap+1; i < size; i++, cellptr++) {
+ if(XAllocColorCells(display, colormap, False, 0, 0L, &(cellptr->pixel), 1) == False ) {
+ delete("XAllocColorCells() failed to allocate a r/w colourcell (%d)",i);
+ return;
+ }
+ cellptr->red = 0xffff;
+ cellptr->green = 0xf00f;
+ cellptr->blue = 0x0ff0;
+ cellptr->flags = DoRed|DoGreen|DoBlue;
+ XStoreColor(display, colormap, cellptr);
+ XQueryColor(display, colormap, cellptr);
+ }
+ if(i == size)
+ CHECK;
+
+ testcmap = XCALL;
+
+ for(i=0, cellptr = cellmap; i< size; i++, cellptr++) {
+ cell.pixel = cellptr->pixel;
+ cell.flags = DoRed|DoGreen|DoBlue;
+ XQueryColor(display, testcmap, &cell);
+ if( (cell.red != cellptr->red) ||
+ (cell.green != cellptr->green) || (cell.blue != cellptr->blue) ){
+ report("Copied colourmap cell pixel %ld had r %u g %u b %u instead of pixel %ld r %u g %u b %u",
+ cell.pixel, cell.red, cell.green, cell.blue,
+ cellptr->pixel, cellptr->red, cellptr->green, cellptr->blue);
+ FAIL;
+ }
+
+ if(i==size)
+ CHECK;
+ }
+ }
+
+ CHECKPASS(2*nsupvis());
+
+>>ASSERTION Good C
+When the
+.A colormap
+argument
+was created by the client with
+.A alloc
+set to
+.S AllocAll ,
+then all entries from the
+argument
+.A colormap
+are moved to the new colourmap with the same colour values
+and are freed
+in
+.A colormap .
+>>STRATEGY
+For each supported visual class:
+ Create a colormap with using XCreateColormap with alloc set to AllocAll.
+ Fill with recognisable values.
+ For each of the colour cells, record the rgb value with XQueryColors.
+ Create a new colourmap with XCopyColormapAndFree.
+ Verify that colourmap entries are identical with XQueryColors.
+ Verify that all the previous cells in the original colormap are freed (i.e.
+ that they can all be reallocated again).
+>>CODE
+Colormap testcmap;
+XVisualInfo *vp;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+XColor *cellmap, *cellptr;
+XColor cell;
+unsigned long l;
+int i;
+int pathcnt = 0;
+int size;
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ for (resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocAll);
+ size = maxsize(vp);
+ cellmap = (XColor *) malloc( (size * sizeof(XColor)));
+ if(cellmap == (XColor *) 0) {
+ delete("malloc() failed to allocate memory for XColor array.");
+ return;
+ }
+
+/* fill colour map with some recognisable and distinguishable values */
+ for(l=0, cellptr=cellmap; l< size; l++, cellptr++) {
+ cellptr->pixel = l;
+ cellptr->green = cellptr->blue = cellptr->red = l << 8;
+ cellptr->flags = DoRed | DoGreen | DoBlue;
+ }
+ XStoreColors(display, colormap, cellmap, size);
+
+/* server sets to "closest available values" so find what they were */
+ XQueryColors(display, colormap, cellmap, size);
+
+ testcmap = XCALL;
+
+ pathcnt += size;
+
+ for(l=0, cellptr=cellmap; l < size; l++, cellptr++) {
+ cell.pixel = l;
+ XQueryColor(display, testcmap, &cell);
+ if((cell.pixel != cellptr->pixel) || (cell.red != cellptr->red) ||
+ (cell.green != cellptr->green) || (cell.blue != cellptr->blue)) {
+ report("Cell %lu had pixelvalue %lu (r %u g %u b %u) instead of pixelvalue %lu (r %u g %u b %u)",
+ l,
+ cell.pixel, cell.red, cell.green, cell.blue,
+ cellptr->pixel, cellptr->red, cellptr->green, cellptr->blue);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ for(l=0; l < size; l++) {
+ if (XAllocColorCells(display, colormap, False, NULL, 0, &cell.pixel, 1) == False) {
+ report("Cell %u was not deallocated.", l);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ free(cellmap);
+ }
+
+ CHECKPASS(pathcnt*2);
+
+>>ASSERTION Good C
+If any of the visual classes
+.S PseudoColor ,
+.S GrayScale ,
+or
+.S DirectColor
+are supported:
+When the
+.A colormap
+argument
+was created by the client with
+.S AllocNone ,
+then all of the entries from the
+.A colormap
+argument
+that have been
+allocated by the client using
+.S XAllocColor ,
+.S XAllocNamedColor ,
+.S XAllocColorCells ,
+or
+.S XAllocColorPlanes
+and not freed since they were allocated
+are moved to the new colourmap with the same colour values
+and the same read-only or writable characteristics and are freed
+in
+.A colormap .
+>>STRATEGY
+For each of the visual classes DirectColor, PseudoColor and GrayScale:
+ Create a colormap with XCreateColormap and AllocNone.
+ Create a new client with XOpenDisplay.
+ Allocate two ro cells for First client with XAllocColor.
+ Record their rgb values.
+ Allocate two rw cells for First client with XAllocColorCells.
+ Set their rgb values and record their rgb values.
+ Allocate the rest of the colormap for Second client with XAllocColorCells.
+ First client copies the colormap and free owned cells with with XCopyColormapAndFree.
+ Verify that the Second clients cells in copy are not allocated with XAllocColorCells.
+ Verify that the First clients four cells in copy are still there with correct rgb values.
+ Verify that the four allocated cells are freed, can be reallocated, in old cmap.
+ Verify r/o and r/w behaviour of these 4 in copy, with XStoreColors.
+
+>>EXTERN
+static Bool check_rgb(dpy, cmap, xcp)
+ Display *dpy;
+ Colormap cmap;
+ XColor *xcp;
+{
+ XColor ncol;
+
+ ncol.pixel = xcp->pixel;
+ ncol.flags = DoRed | DoGreen | DoBlue;
+ XQueryColor(dpy, cmap, &ncol);
+
+ if ( ncol.red != xcp->red || ncol.green != xcp->green || ncol.blue != xcp->blue ) {
+ report("mismatch, got rgb = 0x%x,0x%x,0x%x instead of 0x%x,0x%x,0x%x for pixel %lu",
+ ncol.red, ncol.green, ncol.blue,
+ xcp->red, xcp->green, xcp->blue, xcp->pixel);
+ return False;
+ } else
+ return True;
+}
+>>CODE
+Colormap testcmap;
+XVisualInfo *vp;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+XColor *cellmap, *cellptr;
+XColor cell;
+unsigned long l;
+int i;
+int pathcnt = 0, size;
+XColor color, ncol1, ncol2, cols[4];
+Display *disp2;
+unsigned long pix[2];
+unsigned long *copypix;
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ cols[0].pixel = 0xffff;
+ cols[0].red = 0x0ff0;
+ cols[0].green = 0xf0f0;
+ cols[0].blue = 0x0f0f;
+ cols[0].flags = DoRed|DoGreen|DoBlue;
+
+ cols[1].pixel = 1;
+ cols[1].red = 0xffff;
+ cols[1].green = 0xffff;
+ cols[1].blue = 0xffff;
+ cols[1].flags = DoRed|DoGreen|DoBlue;
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ disp2 = opendisplay();
+ colormap = makecolmap(display, vp->visual, AllocNone);
+/* Allocate 2 r/o cells for a new client */
+/* set them and find what they ended up as */
+ if (XAllocColor(display, colormap, &cols[0]) == False) {
+ delete("failed to allocate first r/o cell.");
+ return;
+ } else
+ CHECK;
+ trace("r/o Pixel value allocated was %lu", cols[0].pixel);
+ XQueryColor(display, colormap, &cols[0]);
+
+ if (XAllocColor(display, colormap, &cols[1]) == False) {
+ delete("failed to allocate second r/o cell.");
+ return;
+ } else
+ CHECK;
+ trace("r/o Pixel value allocated was %lu", cols[1].pixel);
+ XQueryColor(display, colormap, &cols[1]);
+
+/* Allocate 2 r/w cells for a new client */
+ if(XAllocColorCells(display, colormap, False, 0L, 0, pix, 2) == False) {
+ delete("XAllocColorCells() failed.");
+ return;
+ }
+/* set the 2 r/w cells to the same values as the first two. */
+ cols[2] = cols[0];
+ cols[2].pixel = pix[0];
+ cols[3] = cols[1];
+ cols[3].pixel = pix[1];
+ trace("r/w Pixel values allocated were %lu & %lu",
+ cols[2].pixel, cols[3].pixel);
+ XStoreColors(display, colormap, &cols[2], 2);
+ XQueryColors(display, colormap, &cols[2], 2);
+
+/* Allocate remaining cells to the other client */
+ size = maxsize(vp) - 4;
+ debug(1, "size=%d, maxsize=%d", size, maxsize(vp));
+ copypix = (unsigned long *) malloc( maxsize(vp) * sizeof(unsigned long));
+
+ for(i=0; i < size; i++) {
+ if( XAllocColorCells(disp2, colormap, False, 0L, 0, &copypix[i], 1) == False) {
+ delete("XAllocColorCells failed after %d cells", i);
+ return;
+ }
+ }
+
+ if( XAllocColorCells(disp2, colormap, False, 0L, 0, &copypix[i], 1) != False) {
+ trace("Did not fail as expected");
+ } else
+ CHECK;
+
+/* do copy and free with first client */
+ testcmap = XCALL;
+
+/* check remaining ones are free in copy */
+ for ( i=0; XAllocColorCells(disp2, testcmap, False, 0L, 0, &copypix[i], 1) != False; i++) {
+ ; /* do nothing */
+ }
+ if ( i != size ) {
+ report("only allocated %d cells instead of %d, in copy",
+ i, size);
+ FAIL;
+ } else
+ CHECK;
+
+/* now check the first four cells of copy are as we set them in original. */
+
+ if (!check_rgb(disp2, testcmap, &cols[0]) |
+ !check_rgb(disp2, testcmap, &cols[1]) |
+ !check_rgb(disp2, testcmap, &cols[2]) |
+ !check_rgb(disp2, testcmap, &cols[3]) ) {
+ report("RGB values not the same!");
+ FAIL;
+ } else
+ CHECK;
+/* should check that can now allocate 4 more in old cmap */
+ for(i=0; i < 4; i++) {
+ if( XAllocColorCells(disp2, colormap, False, 0L, 0, &copypix[i], 1) == False) {
+ report("Could not allocate the supposedly freed cell (%d) in original cmap", i);
+ FAIL;
+ } else {
+ trace("allocated cell %d, pixel %lu", i, copypix[i]);
+ CHECK;
+ }
+ }
+
+ if( XAllocColorCells(disp2, colormap, False, 0L, 0, &copypix[i], 1) != False) {
+ report("Allocated one more cell in original cmap than expected");
+ FAIL;
+ } else
+ CHECK;
+/* chould check that the r/w or r/o characteristics are preserved in copy */
+ startcall(disp2);
+ XStoreColors(disp2, testcmap, cols, 2);
+ endcall(disp2);
+ if (geterr() != BadAccess) {
+ report("Trying to update 2 r/o cells. Got %s, Expecting BadAccess", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ startcall(disp2);
+ XStoreColors(disp2, testcmap, &cols[2], 2);
+ endcall(disp2);
+ if (geterr() != Success) {
+ report("Trying to update 2 r/w cells. Got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(12*nsupvis());
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadColor
+>>#HISTORY Cal Completed Written in new format and style - 3/11/90.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Completed Writing code.
+>>#HISTORY Kieron Completed re-writing code and strategy.
diff --git a/xc/test/xsuite/xtest/tset/CH05/cpygc/cpygc.m b/xc/test/xsuite/xtest/tset/CH05/cpygc/cpygc.m
new file mode 100644
index 000000000..fa1ae9a98
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/cpygc/cpygc.m
@@ -0,0 +1,505 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCopyGC CH05
+void
+XCopyGC(display, src, valuemask, dest)
+Display *display = Dsp;
+GC src;
+unsigned long valuemask;
+GC dest;
+>>SET need-gc-flush
+>>ASSERTION Good A
+A call to xname copies the components
+specified by the
+.A valuemask
+argument
+from the
+.A src
+argument
+to the
+.A dest
+argument.
+>>STRATEGY
+Create a source GC with function set to GXxor.
+Create a different, destination GC.
+Copy the source GC to the destination GC with XCopyGC.
+Verify that GCValues structures are identical for the destination and source GC with XGetGCValues.
+Verify the destination GC component function is used in graphics operations:
+ Plot point (0,0) with XDrawPoint.
+ Set fg to W_FG ^ W_BG with XSetForeground.
+ Plot point (0,0) with XDrawPoint.
+ Verify that pixel at (0,0) is W_BG.
+
+>>CODE
+XVisualInfo *vp;
+Window w;
+XGCValues srcgcv, destgcv;
+unsigned long vm = (unsigned long)GCFunction | GCPlaneMask | GCForeground |
+ GCBackground | GCLineWidth | GCLineStyle | GCCapStyle |
+ GCJoinStyle | GCFillStyle | GCFillRule |
+ GCTileStipXOrigin | GCTileStipYOrigin |
+ GCSubwindowMode | GCGraphicsExposures | GCClipXOrigin |
+ GCClipYOrigin | GCDashOffset | GCArcMode;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+
+ /* set up an XGCValues struct for source GC */
+
+ srcgcv.function = (int)GXxor;
+ srcgcv.plane_mask = ~0L;
+ srcgcv.foreground = (unsigned long) W_FG;
+ srcgcv.background = (unsigned long) W_FG;
+ srcgcv.line_width = (int)0;
+ srcgcv.line_style = (int)LineSolid;
+ srcgcv.cap_style = (int)CapButt;
+ srcgcv.join_style = (int)JoinMiter;
+ srcgcv.fill_style = (int)FillSolid;
+ srcgcv.fill_rule = (int)EvenOddRule;
+ srcgcv.arc_mode = (int)ArcPieSlice;
+ srcgcv.tile = (Pixmap)0;
+ srcgcv.stipple = (Pixmap)0;
+ srcgcv.ts_x_origin = (int)0;
+ srcgcv.ts_y_origin = (int)0;
+ srcgcv.font = (Font)0;
+ srcgcv.subwindow_mode = (int)ClipByChildren;
+ srcgcv.graphics_exposures = (Bool)True;
+ srcgcv.clip_x_origin = (int)0;
+ srcgcv.clip_y_origin = (int)0;
+ srcgcv.clip_mask = (Pixmap)None;
+ srcgcv.dash_offset = (int)0;
+
+ /* create a GC using the source XGCValues struct */
+
+ src = XCreateGC(display, w, vm, &srcgcv);
+
+ if( XGetGCValues(display, src, valuemask, &srcgcv) == False ) {
+ delete("XGetGCValues failed on source GC");
+ return;
+ }
+
+ /* set up an XGCValues struct for destination GC */
+
+ destgcv.function = (int)GXnoop;
+ destgcv.plane_mask = 1L;
+ destgcv.foreground = (unsigned long)W_BG;
+ destgcv.background = (unsigned long)W_BG;
+ destgcv.line_width = (int)5;
+ destgcv.line_style = (int)LineDoubleDash;
+ destgcv.cap_style = (int)CapRound;
+ destgcv.join_style = (int)JoinRound;
+ destgcv.fill_style = (int)FillTiled;
+ destgcv.fill_rule = (int)WindingRule;
+ destgcv.arc_mode = (int)ArcChord;
+ destgcv.tile = (Pixmap)0;
+ destgcv.stipple = (Pixmap)0;
+ destgcv.ts_x_origin = (int)4;
+ destgcv.ts_y_origin = (int)4;
+ destgcv.font = (Font)0;
+ destgcv.subwindow_mode = (int)IncludeInferiors;
+ destgcv.graphics_exposures = (Bool)False;
+ destgcv.clip_x_origin = (int)0;
+ destgcv.clip_y_origin = (int)0;
+ destgcv.clip_mask = (Pixmap)None;
+ destgcv.dash_offset = (int)0;
+
+ /* create a GC using the destination XGCValues struct */
+
+ dest = XCreateGC(display, w, vm, &destgcv);
+
+ /* copy source GC into destination GC */
+
+ valuemask = vm;
+ XCALL;
+
+ /* find out what destination GC looks like */
+
+ if( XGetGCValues(display, dest, valuemask, &destgcv) == False ) {
+ delete("XGetGCValues failed on destination GC");
+ return;
+ }
+
+ /* compare the source and destination GC's */
+
+ if( destgcv.function == srcgcv.function ) {
+ CHECK;
+ } else {
+ report("dest GCValue function differs from source");
+ FAIL;
+ }
+ if( destgcv.plane_mask == srcgcv.plane_mask ) {
+ CHECK;
+ } else {
+ report("dest GCValue plane_mask differs from source");
+ FAIL;
+ }
+ if( destgcv.foreground == srcgcv.foreground ) {
+ CHECK;
+ } else {
+ report("dest GCValue foreground differs from source");
+ FAIL;
+ }
+ if( destgcv.background == srcgcv.background ) {
+ CHECK;
+ } else {
+ report("dest GCValue background differs from source");
+ FAIL;
+ }
+ if( destgcv.line_width == srcgcv.line_width ) {
+ CHECK;
+ } else {
+ report("dest GCValue line_width differs from source");
+ FAIL;
+ }
+ if( destgcv.line_style == srcgcv.line_style ) {
+ CHECK;
+ } else {
+ report("dest GCValue line_style differs from source");
+ FAIL;
+ }
+ if( destgcv.cap_style == srcgcv.cap_style ) {
+ CHECK;
+ } else {
+ report("dest GCValue cap_style differs from source");
+ FAIL;
+ }
+ if( destgcv.join_style == srcgcv.join_style ) {
+ CHECK;
+ } else {
+ report("dest GCValue join_style differs from source");
+ FAIL;
+ }
+ if( destgcv.fill_style == srcgcv.fill_style ) {
+ CHECK;
+ } else {
+ report("dest GCValue fill_style differs from source");
+ FAIL;
+ }
+ if( destgcv.fill_rule == srcgcv.fill_rule ) {
+ CHECK;
+ } else {
+ report("dest GCValue fill_rule differs from source");
+ FAIL;
+ }
+ if( destgcv.arc_mode == srcgcv.arc_mode ) {
+ CHECK;
+ } else {
+ report("dest GCValue arc_mode differs from source");
+ FAIL;
+ }
+ if( destgcv.tile == srcgcv.tile ) {
+ CHECK;
+ } else {
+ report("dest GCValue tile differs from source");
+ FAIL;
+ }
+ if( destgcv.stipple == srcgcv.stipple ) {
+ CHECK;
+ } else {
+ report("dest GCValue stipple differs from source");
+ FAIL;
+ }
+ if( destgcv.ts_x_origin == srcgcv.ts_x_origin ) {
+ CHECK;
+ } else {
+ report("dest GCValue ts_x_origin differs from source");
+ FAIL;
+ }
+ if( destgcv.ts_y_origin == srcgcv.ts_y_origin ) {
+ CHECK;
+ } else {
+ report("dest GCValue ts_y_origin differs from source");
+ FAIL;
+ }
+ if( destgcv.font == srcgcv.font ) {
+ CHECK;
+ } else {
+ report("dest GCValue font differs from source");
+ FAIL;
+ }
+ if( destgcv.subwindow_mode == srcgcv.subwindow_mode ) {
+ CHECK;
+ } else {
+ report("dest GCValue subwindow_mode differs from source");
+ FAIL;
+ }
+ if( destgcv.graphics_exposures == srcgcv.graphics_exposures ) {
+ CHECK;
+ } else {
+ report("dest GCValue graphics_exposures differs from source");
+ FAIL;
+ }
+ if( destgcv.clip_x_origin == srcgcv.clip_x_origin ) {
+ CHECK;
+ } else {
+ report("dest GCValue clip_x_origin differs from source");
+ FAIL;
+ }
+ if( destgcv.clip_y_origin == srcgcv.clip_y_origin ) {
+ CHECK;
+ } else {
+ report("dest GCValue clip_y_origin differs from source");
+ FAIL;
+ }
+ if( destgcv.clip_mask == srcgcv.clip_mask ) {
+ CHECK;
+ } else {
+ report("dest GCValue clip_mask differs from source");
+ FAIL;
+ }
+ if( destgcv.dash_offset == srcgcv.dash_offset ) {
+ CHECK;
+ } else {
+ report("dest GCValue dash_offset differs from source");
+ FAIL;
+ }
+
+ XDrawPoint(display, w, dest, 0, 0);
+ XSetForeground(display, dest, W_FG ^ W_BG);
+ XDrawPoint(display, w, dest, 0, 0);
+
+ if( checkpixel(display, w, 0, 0, W_BG) == 0) {
+ report("XCopyGC() did not set the function component of the GC.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(23);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad C
+When the
+.A src
+and
+.A dest
+arguments do not have the same depth,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If multiple pixmap depths are supported:
+ Create a pixmap with a different depth to the root window
+ Create a GC on the root window
+ Create a GC on the pixmap
+ Copy from the first GC to the second using XCopyGC.
+ Verify that a BadMatch error was generated.
+>>CODE BadMatch
+Window w;
+XWindowAttributes atts;
+Status s;
+int newdepth;
+Pixmap pm;
+int nitems, *depthlist;
+unsigned long vm = (unsigned long)GCFunction | GCPlaneMask | GCForeground |
+ GCBackground | GCLineWidth | GCLineStyle | GCCapStyle |
+ GCJoinStyle | GCFillStyle | GCFillRule |
+ GCTileStipXOrigin | GCTileStipYOrigin |
+ GCSubwindowMode | GCGraphicsExposures | GCClipXOrigin |
+ GCClipYOrigin | GCDashOffset | GCArcMode;
+
+ /* can not ask XGetGCValues for GCClipMask or GCDashList,
+ also need pixmaps for GCTile, GCStipple and GCFont */
+
+ w = DefaultRootWindow(display);
+
+ s = XGetWindowAttributes(display, w, &atts);
+ if (s == False) {
+ delete("XGetWindowAttributes failed");
+ return;
+ }
+
+ depthlist = XListDepths(display,XScreenNumberOfScreen(atts.screen),&nitems);
+
+ /* search for a different depth to create pixmap */
+
+ for( newdepth = atts.depth; nitems-- > 0 && depthlist; depthlist++ ) {
+ if( newdepth != *depthlist ) {
+ newdepth = *depthlist;
+ break;
+ }
+ }
+ if( atts.depth == newdepth ) {
+ report("Screen only supports 1 depth");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ src = XCreateGC(display, w, 0L, (XGCValues *)NULL);
+
+ pm = XCreatePixmap(display, w, 100, 100, newdepth );
+
+ dest = XCreateGC(display, pm, 0L, (XGCValues *)NULL);
+
+ valuemask = vm;
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad C
+When the
+.A src
+and
+.A dest
+arguments were not created for the same root,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If multiple roots are supported:
+ Create a GC for two different roots.
+ Copy from the first to the second.
+ Verify that a BadMatch error occurred.
+ Copy from the second to the first.
+ Verify that a BadMatch error occurred.
+>>CODE BadMatch
+XVisualInfo vi;
+char *altroot;
+int scr_num;
+
+ altroot = tet_getvar("XT_ALT_SCREEN");
+ if (altroot == NULL) {
+ delete("XT_ALT_SCREEN not set");
+ return;
+ }
+ if (*altroot == 'U') {
+ report("Only one screen supported");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ scr_num = atoi(altroot);
+ if (scr_num == DefaultScreen(display)) {
+ delete("The Alternate root was the same as the one under test");
+ return;
+ }
+ if (scr_num >= ScreenCount(display)) {
+ delete("Screen given in XT_ALT_SCREEN could not be accessed");
+ return;
+ }
+
+
+ src = XCreateGC(display, RootWindow(display,scr_num), 0L, (XGCValues*)0);
+ dest = XCreateGC(display, RootWindow(display, DefaultScreen(display)), 0L, (XGCValues*)0);
+ valuemask = (unsigned long)GCFunction | GCPlaneMask | GCForeground |
+ GCBackground | GCLineWidth | GCLineStyle | GCCapStyle |
+ GCJoinStyle | GCFillStyle | GCFillRule |
+ GCTileStipXOrigin | GCTileStipYOrigin |
+ GCSubwindowMode | GCGraphicsExposures | GCClipXOrigin |
+ GCClipYOrigin | GCDashOffset | GCArcMode;
+ XCALL;
+
+ if (geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When either the
+.A src
+or
+.A dest
+argument does not name a defined
+.S GC ,
+then a
+.S BadGC
+error occurs.
+>>STRATEGY
+Create a bad GC
+Create a good GC
+Call XCopyGC with bad source, good destination GC's
+Verify that BadGC error occurs
+Call XCopyGC with good source, bad destination GC's
+Verify that BadGC error occurs
+Call XCopyGC with bad source, bad destination GC's
+Verify that BadGC error occurs
+>>CODE BadGC
+Window w;
+GC gcgood, gcbad;
+unsigned long vm = (unsigned long)GCFunction | GCPlaneMask | GCForeground |
+ GCBackground | GCLineWidth | GCLineStyle | GCCapStyle |
+ GCJoinStyle | GCFillStyle | GCFillRule |
+ GCTileStipXOrigin | GCTileStipYOrigin |
+ GCSubwindowMode | GCGraphicsExposures | GCClipXOrigin |
+ GCClipYOrigin | GCDashOffset | GCArcMode;
+
+ w = DefaultRootWindow(display);
+
+ gcgood = XCreateGC(display, w, 0L, (XGCValues *)NULL);
+
+ gcbad = badgc(display);
+
+ /* test bad source, good destination */
+
+ src = gcbad;
+ dest = gcgood;
+ valuemask = vm;
+
+ trace("test bad source GC, good destination GC" );
+
+ XCALL;
+
+ if (geterr() == BadGC)
+ CHECK;
+ else
+ FAIL;
+
+ /* test good source, bad destination */
+
+ src = gcgood;
+ dest = gcbad;
+ valuemask = vm;
+
+ trace("test good source GC, bad destination GC" );
+
+ XCALL;
+
+ if (geterr() == BadGC)
+ CHECK;
+ else
+ FAIL;
+
+ /* test for bad source and bad destination */
+
+ src = gcbad;
+ dest = gcbad;
+ valuemask = vm;
+
+ trace("test bad source GC, bad destination GC" );
+
+ XCALL;
+
+ if (geterr() == BadGC)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(3);
+
+>>#HISTORY Steve Completed Written in old format.
+>>#HISTORY Cal Completed Written in new format and style.
+>>#HISTORY Kieron Completed <Have a look>.
+>>#HISTORY Cal Action Enhanced existing CODE sections.
diff --git a/xc/test/xsuite/xtest/tset/CH05/crtclrmp/crtclrmp.m b/xc/test/xsuite/xtest/tset/CH05/crtclrmp/crtclrmp.m
new file mode 100644
index 000000000..d47379a03
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/crtclrmp/crtclrmp.m
@@ -0,0 +1,546 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCreateColormap CH05
+Colormap
+XCreateColormap(display, win, visual, alloc)
+Display *display = Dsp;
+Window win = DRW(display);
+Visual *visual = &dummyvisual;
+int alloc = AllocNone;
+>>EXTERN
+Visual dummyvisual;
+>>ASSERTION Good A
+A call to xname
+creates a colourmap of the type
+.A visual
+on the screen for which the
+.A window
+argument was created
+and returns a colourmap ID.
+>>STRATEGY
+For each visual type
+ Create a colourmap for that visual.
+ Verify that the colourpmap is usable by Installing it.
+>>CODE
+XVisualInfo *vp;
+Colormap cmap;
+Display *d2;
+Window w2;
+int i;
+
+
+ alloc = AllocNone;
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+
+ win = makewin(display, vp);
+ visual = vp->visual;
+ cmap = XCALL;
+ /*
+ * The only way that we can really check that we have a valid colourmap
+ * is to try and use it. So try to install it. Of course it
+ * could be that the install routine is broken but the point is that
+ * something is wrong. Print out both routine names to alert the tester
+ * about possible sources of the problem.
+ */
+ CATCH_ERROR(display);
+ XInstallColormap(display, cmap);
+ RESTORE_ERROR(display);
+ if (GET_ERROR(display) != Success) {
+ report("Result of a XCreateColormap could not be used with XInstallColormap");
+ FAIL;
+ } else {
+ CATCH_ERROR(display);
+ XUninstallColormap(display, cmap);
+ RESTORE_ERROR(display);
+
+ if (GET_ERROR(display) != Success) {
+ report("Result of a XCreateColormap could not be used with XUninstallColormap");
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good D 2
+If any of the visual classes
+.S StaticGray ,
+.S StaticColor
+or
+.S TrueColor
+are supported:
+When xname is called with a visual class that is one of
+.S StaticGray ,
+.S StaticColor
+or
+.S TrueColor
+and alloc is
+.S AllocNone ,
+then the entries have defined values specific to the visual that are
+implementation defined.
+>>STRATEGY
+For the visual classes TrueColor, StaticColor and StaticGray:
+ Verify that a colormap of that class can be created with XCreateColormap.
+>>CODE
+Colormap cmap;
+XVisualInfo *vp;
+unsigned long vmask = ((1L<<TrueColor) | (1L<<StaticColor) | (1L<<StaticGray));
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ unsupported("TrueColor, StaticColor and StaticGray are not supported");
+ return;
+ }
+
+ alloc = AllocNone;
+ for ( resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ visual = vp->visual;
+ cmap = XCALL;
+ if (geterr() == Success)
+ CHECK;
+ }
+
+ CHECKUNTESTED(nsupvis());
+
+>>ASSERTION Good C
+If any of the visual classes
+.S PseudoColor ,
+.S GrayScale
+or
+.S DirectColor
+are supported:
+When xname is called with a visual class that is one of
+.S PseudoColor ,
+.S GrayScale
+or
+.S DirectColor
+and alloc is
+.S AllocNone ,
+then the colourmap has no allocated entries.
+>>STRATEGY
+For each visual class PseudoColor, GrayScale and DirectColor:
+ Create a colourmap with alloc set to AllocNone.
+ Verify that no cells were allocated by Allocating all the colourmap cells
+ with XAllocColorCells.
+>>CODE
+Colormap cmap;
+XVisualInfo *vi;
+Status status;
+unsigned long *pix;
+unsigned long vmask;
+int n;
+
+
+#define RW_COLORMAP_MASK ((1L<<DirectColor) | (1L<<PseudoColor) | (1L<<GrayScale))
+
+ if( (vmask = visualsupported(display, RW_COLORMAP_MASK)) == 0L) {
+ unsupported("DirectColor, PseudoColor and GrayScale are not supported");
+ return;
+ }
+
+ alloc = AllocNone;
+ for(resetsupvis(vmask); nextsupvis(&vi); ) {
+
+ visual = vi->visual;
+ cmap = XCALL;
+ n = maxsize(vi);
+ pix = (unsigned long *)malloc(n * sizeof(unsigned long));
+
+ if (pix == NULL) {
+ delete("malloc failed for pix array");
+ return;
+ }
+
+ trace("allocate %d colour cells", n);
+ status = XAllocColorCells(display, cmap, False, (unsigned long *)0, 0, pix, n);
+ free((void*)pix);
+ if (status == False) {
+ report("Unable to allocate all colour cells");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Good A
+If any of the visual classes
+.S PseudoColor ,
+.S GrayScale
+or
+.S DirectColor
+are supported:
+When xname is called with a visual class that is one of
+.S PseudoColor ,
+.S GrayScale
+or
+.S DirectColor
+and the argument
+.A alloc
+is
+.S AllocAll ,
+then the entire colourmap is allocated read-write.
+>>STRATEGY
+For each of the visual classes DirectColor, PseudoColor and GrayScale:
+ Create a colormap with alloc set to AllocAll.
+ Verify that the allocation of another r/w cell fails with XAllocColorCells.
+>>CODE
+XVisualInfo *vi;
+Colormap cmap;
+Status status;
+unsigned long pix;
+unsigned long vmask;
+
+#define RW_COLORMAP_MASK ((1L<<DirectColor) | (1L<<PseudoColor) | (1L<<GrayScale))
+
+ if( (vmask = visualsupported(display, RW_COLORMAP_MASK)) == 0L) {
+ unsupported("DirectColor, PseudoColor and GrayScale are not supported");
+ return;
+ }
+
+ alloc = AllocAll;
+ for (resetsupvis(vmask); nextsupvis(&vi); ) {
+
+ visual = vi->visual;
+ cmap = XCALL;
+
+ /*
+ * If the entire colourmap is allocated then it should not be
+ * possible to allocate any more entries.
+ */
+
+ status = XAllocColorCells(display, cmap, False, (unsigned long*)0, 0, &pix, 1);
+
+ if (status != (Status) 0) {
+ report("There was an unallocated colour cell");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Good C
+If either of the visual classes
+.S GrayScale
+or
+.S PseudoColor
+are supported:
+When the visual class is
+.S GrayScale
+or
+.S PseudoColor ,
+and the argument
+.A alloc
+is
+.S AllocAll ,
+then a call to xname
+allocates N read-write colourmap entries with
+pixel values from zero to N \- 1,
+where N is the number of colourmap entries value in the specified visual.
+>>STRATEGY
+For each of the visuals GrayScale and PseudoColor:
+ Create a colormap with alloc set to AllocAll.
+ For each of the 0..N-1 allocated cells:
+ Write value r 31<<8, g 63<<8, b 127<<8 with XStoreColor.
+>>CODE
+Colormap cmap;
+XVisualInfo *vi;
+XColor col;
+unsigned long pix;
+unsigned long vmask = (1L<<PseudoColor) | (1L<<GrayScale);
+int n;
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ unsupported("PseudoColor and GrayScale are not supported");
+ return;
+ }
+
+ col.red = 31<<8;
+ col.green = 63<<8;
+ col.blue = 127<<8;
+ col.flags = DoRed|DoGreen|DoBlue;
+
+ alloc = AllocAll;
+ for(resetsupvis(vmask); nextsupvis(&vi); ) {
+
+ visual = vi->visual;
+ cmap = XCALL;
+ if(geterr() != Success)
+ continue;
+
+ n = maxsize(vi);
+ for(pix = 0L; pix < n; pix++) {
+ col.pixel = pix;
+
+ CATCH_ERROR(display);
+ XStoreColor(display, cmap, &col);
+ RESTORE_ERROR(display);
+
+ if(GET_ERROR(display) != Success) {
+ report("Pixel %lu could not be written in the colourmap.", pix);
+ FAIL;
+ }
+ }
+
+ if(pix == n)
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Good C
+If the visual class
+.S DirectColor
+is supported:
+When the visual class is
+.S DirectColor
+and the argument
+.A alloc
+is
+.S AllocAll,
+then a call to xname
+allocates
+.S 2pow(nred+ngreen+nblue)
+read-write colourmap entries with
+pixel values obtained by ORing zero or more
+of the planes obtained by ORing the
+.M red_mask ,
+.M green_mask
+and
+.M blue_mask
+values in the
+.A visual
+argument,
+where
+.S nreds ,
+.S ngreens
+and
+.S nblues
+are the number of bits in the respective masks.
+>>STRATEGY
+For the visual Directcolor:
+ Create a colormap with alloc set to AllocAll.
+ For each of the 0..N-1 allocated cells:
+ Write value r 31<<8, g 63<<8, b 127<<8 with XStoreColor.
+>>CODE
+>>#
+>># WARNING.
+>># For now this test assumes that the OR of the
+>># rgb masks will form a contiguous set of bits. This makes
+>># generation of all the subsets very straightforward.
+>>#
+#define NUM_COLS 4096
+Colormap cmap;
+XVisualInfo *vi;
+XColor colarr[NUM_COLS];
+unsigned long plane, count;
+unsigned long vmask = (1L<<DirectColor), b, planemask;
+int n, i, j, bitsum;
+int bitpos[sizeof(long) * 8];
+
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ unsupported("DirectColor is not supported");
+ return;
+ }
+
+ for(i=0; i<NUM_COLS; i++) {
+ colarr[i].red = 31<<8;
+ colarr[i].green = 63<<8;
+ colarr[i].blue = 127<<8;
+ colarr[i].flags = DoRed|DoGreen|DoBlue;
+ }
+
+ resetsupvis(vmask);
+ nextsupvis(&vi);
+
+ alloc = AllocAll;
+ visual = vi->visual;
+ cmap = XCALL;
+ if(geterr() == Success) {
+ bitsum = (bitcount(vi->red_mask) + bitcount(vi->green_mask) + bitcount(vi->blue_mask));
+ n = 1<< bitsum;
+ for(count = 0L; count < n; count+=NUM_COLS) {
+ for (i=0; i<NUM_COLS; i++)
+ colarr[i].pixel = count+i;
+ CATCH_ERROR(display);
+ XStoreColors(display, cmap, colarr,
+ (count+NUM_COLS <= n) ? NUM_COLS : n-count);
+ RESTORE_ERROR(display);
+
+ if(GET_ERROR(display) != Success) {
+ report("Pixel in range [%lu-%lu] could not be written in the colourmap.", count,count+NUM_COLS);
+ FAIL;
+ }
+
+ }
+ }
+
+ if (count >= n)
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Good C
+If any of the visual classes
+.S PseudoColor ,
+.S GrayScale
+or
+.S DirectColor
+are supported:
+When xname is called with a visual class that is one of
+.S PseudoColor ,
+.S GrayScale
+or
+.S DirectColor
+and the
+.A alloc
+argument is
+.S AllocAll ,
+then none of the entries can be freed with
+.S XFreeColors().
+>>STRATEGY
+For the visual classes DirectColor, PseudoColor and GrayScale:
+ Create a colourmap with XCreateColormap with alloc set to AllocAll.
+ Deallocate a colorcell with XFreeColor.
+ Allocate a colorcell with XAllocColorCell.
+ Verify that the allocation failed.
+>>CODE
+XVisualInfo *vi;
+Colormap cmap;
+Status status;
+unsigned long pix;
+unsigned long vmask = ((1L<<DirectColor) | (1L<<PseudoColor) | (1L<<GrayScale));
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ unsupported("DirectColor, PseudoColor and GrayScale are not supported");
+ return;
+ }
+
+ alloc = AllocAll;
+ for (resetsupvis(vmask); nextsupvis(&vi); ) {
+
+ visual = vi->visual;
+ cmap = XCALL;
+
+ status = XAllocColorCells(display, cmap, False, (unsigned long*)0, 0, &pix, 1);
+
+ pix = 0;
+
+ CATCH_ERROR(display);
+ XFreeColors(display, cmap, &pix, 1, 0);
+ RESTORE_ERROR(display);
+ if( GET_ERROR(display) == Success) {
+ delete("XFreeColors() did not give an error deallocating a cell.");
+ FAIL;
+ } else
+ CHECK;
+
+ status = XAllocColorCells(display, cmap, False, (unsigned long*)0, 0, &pix, 1);
+
+ if (status != (Status) 0) {
+ report("A cell was deallocated by XFreeColors().");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2*nsupvis());
+
+>>ASSERTION Bad C
+If any of the visual classes
+.S StaticGray ,
+.S StaticColor
+or
+.S TrueColor
+are supported:
+When xname is called with a visual that is one of
+.S StaticGray ,
+.S StaticColor
+or
+.S TrueColor ,
+and the argument
+.A alloc
+is other than
+.S AllocNone ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+For each visual class in TrueColor, StaticColor and StaticGray:
+ Call XCreateColormap with Alloc set to AllocAll.
+ Verify that a BadMatch error occurred.
+>>CODE BadMatch
+Colormap cmap;
+XVisualInfo *vp;
+unsigned long vmask = (1L<<TrueColor) | (1L<<StaticColor) | (1L<<StaticGray);
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ unsupported("TrueColor, StaticColor and StaticGray are not supported");
+ return;
+ }
+
+ alloc = AllocAll;
+ for ( resetsupvis(vmask); nextsupvis(&vp); ) {
+ visual = vp->visual;
+ cmap = XCALL;
+ if (geterr() == BadMatch)
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Bad D 3
+>># Can't see how to obtain a visual that isn't
+>># supported in order to provoke the error.
+If there is a visual class that is not supported on the screen:
+When xname is called with a visual that is not supported
+on the screen for which the
+.A window
+argument was created,
+then a
+.S BadMatch
+error occurs.
+>>ASSERTION Bad A
+.ER Value alloc AllocNone AllocAll
+>>ASSERTION Bad A
+When xname is called with an invalid visual,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Make a visual structure invalid using badvis.
+Create a colourmap for this visual with XCreateColorMap.
+Verify that a BadValue error occurred.
+>>CODE BadValue
+Visual vi;
+
+ alloc = AllocNone;
+ badvis(&vi);
+ visual = &vi;
+ XCALL;
+ if(geterr() == BadValue)
+ PASS;
+>>ASSERTION Bad A
+.ER BadWindow
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>#HISTORY Steve Completed Written in old format.
+>>#HISTORY Cal Completed Re-written in new style and format.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/crtgc/crtgc.m b/xc/test/xsuite/xtest/tset/CH05/crtgc/crtgc.m
new file mode 100644
index 000000000..c96e4391e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/crtgc/crtgc.m
@@ -0,0 +1,1063 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCreateGC CH05
+GC
+XCreateGC(display, d, valuemask, values)
+Display *display = Dsp;
+Drawable d;
+unsigned long valuemask = 0L;
+XGCValues *values = 0;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>ASSERTION Good A
+A call to xname creates a graphics context and returns a GC
+which may be used with any destination drawable having the same root
+and depth as the drawable
+.A d .
+>>STRATEGY
+For pixmaps and windows:
+ Create a gc for the drawable using XCreateGC.
+ Set pixel (0,0) of the drawable.
+ Verify that the pixel was set.
+>>CODE
+XVisualInfo *vp;
+Window win;
+int nvis;
+Pixmap pmap;
+GC gc;
+
+ for(resetvinf(VI_WIN); nextvinf(&vp);) {
+ d = makewin(display, vp);
+
+ gc = XCALL;
+ XDrawPoint(display,d,gc,0,0);
+
+ /* 0 is the default foreground pixel value. */
+ if( ! checkpixel(display, d, 0, 0, 0) ) {
+ report("For window depth %d, pixel was not set to foreground",
+ vp -> depth);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ nvis = nvinf();
+ for(resetvinf(VI_PIX); nextvinf(&vp);) {
+ d = makepixm(display, vp);
+
+ gc = XCALL;
+ XDrawPoint(display,d,gc,0,0);
+
+ /* 0 is the default foreground pixel value. */
+ if( ! checkpixel(display, d, 0, 0, 0) ) {
+ report("For pixmap depth %d, pixel was not set to foreground",
+ vp -> depth);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(nvis + nvinf());
+
+>>ASSERTION Good A
+A call to xname initialises the components
+specified by the
+.A valuemask
+argument
+in the newly created GC
+to the values in the
+.A values
+argument.
+>>STRATEGY
+Create a window.
+Initialise XGCValues structure with fg W_FG, fn GXxor.
+Create a gc for the window with a valuemask of GCFunction | GCForeground.
+Plot point (0,0) with XDrawPoint.
+Verify that pixel at (0,0) is W_FG.
+Initialise XGCValues structure with fg W_FG ^ W_BG, fn GXxor.
+Create a gc for the window with a valuemask of GCFunction | GCForeground.
+Plot point (0,0) with XDrawPoint.
+Verify that pixel at (0,0) is W_BG.
+>>CODE
+GC gc;
+XWindowAttributes atts;
+Status s;
+Pixmap pm;
+XGCValues vals;
+XVisualInfo *vp;
+
+/* Function */
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ d = makewin(display, vp);
+ vals.function = GXxor;
+ vals.foreground = W_FG;
+ values = &vals;
+ valuemask = (GCFunction | GCForeground);
+ gc = XCALL;
+
+ XDrawPoint(display, d, gc, 0, 0);
+
+ if( ! checkpixel(display, d, 0, 0, W_FG)) {
+ delete("Pixel at (0, 0) was not set to foreground.");
+ return;
+ } else
+ CHECK;
+
+ vals.foreground = W_FG ^ W_BG;
+ values = &vals;
+ valuemask = (GCFunction | GCForeground);
+ gc = XCALL;
+
+ XDrawPoint(display, d, gc, 0, 0);
+
+ if( ! checkpixel(display, d, 0, 0, W_BG)) {
+ report("Pixel at (0, 0) was not set to background.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>># This assertion is incorrect - rewritten 13/4/91.
+>>#.A tile
+>>#is
+>>#.S None
+>>#and the
+>>#.M fill_style
+>>#is
+>>#.S FillTiled
+>>#and the foreground pixel value is specified, then
+>>#a call to xname creates a
+>>#.S GC
+>>#in which the foreground pixel value of the newly created
+>>#.S GC
+>>#is used for tiling.
+>>ASSERTION Good A
+When the
+.M tile
+pixmap is not set and the
+.M fill_style
+is
+.S FillTiled ,
+then a call to xname creates a
+.S GC
+in which a pixel set to the foreground value of
+.S GC
+is used for tiling.
+>>STRATEGY
+Create a gc with the fill_style FillTiled, foreground set to W_FG, tile set to NULL.
+Create a window.
+Tile entire window with XFillRectangle.
+Verify that all the window pixels were W_FG.
+Plot point (0,0) with XDrawPoint.
+Set fg to W_FG ^ W_BG.
+Plot point (0,0) with XDrawPoint.
+Verify that pixel at (0,0) is W_BG.
+>>CODE
+XVisualInfo *vp;
+XGCValues vals;
+GC gc;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ d = makewin(display, vp);
+ vals.fill_style = FillTiled;
+ vals.foreground = W_FG;
+ valuemask = GCForeground | GCFillStyle;
+ values = &vals;
+ gc = XCALL;
+
+ XFillRectangle(display, d, gc, 0, 0, W_STDWIDTH, W_STDHEIGHT);
+
+ if( checkarea(display, d, (struct area *) 0, W_FG, 0, CHECK_IN) == False) {
+ report("Window was not filled with foreground.");
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER BadDrawable
+>>STRATEGY
+Create a window and destroy the window.
+Create a GC with window as the drawable.
+Verify that a BadDrawable error occurs.
+>>CODE BadDrawable
+
+ d = badwin(Dsp);
+ valuemask = 0L;
+ values = (XGCValues *)NULL;
+ XCALL;
+ if(geterr() == BadDrawable)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M font
+does not name a valid font,
+and the GCFont bit is set in
+.A valuemask ,
+then a
+.S BadFont
+error occurs.
+>>STRATEGY
+Create a font for the default screen and free font with XFreeFont.
+Create a GC with root window as the drawable and bad font as the font component.
+Verify that a BadFont error occurs.
+>>CODE BadFont
+Window w;
+Font font;
+XGCValues vals;
+
+ w = DefaultRootWindow(Dsp);
+ font = badfont(Dsp);
+
+ vals.font = font;
+ d = w;
+ valuemask = GCFont;
+ values = &vals;
+
+ XCALL;
+
+ if( geterr() == BadFont)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M tile
+does not name a valid pixmap,
+and the GCTile bit is set in
+.A valuemask ,
+then a
+.A BadPixmap
+error occurs.
+>>STRATEGY
+Create a bad pixmap for the root window and free pixmap with XFreePixmap.
+Create a GC with window as the drawable and pixmap as the tile.
+Verify that a BadPixmap error occurs.
+>>CODE BadPixmap
+XGCValues vals;
+
+ vals.tile = badpixm(display);
+
+ values = &vals;
+ d = DRW(display);
+ valuemask = GCTile;
+
+ XCALL;
+
+ if( geterr() == BadPixmap)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M stipple
+does not name a valid pixmap,
+and the GCStipple bit is set in
+.A valuemask ,
+then a
+.A BadPixmap
+error occurs.
+>>STRATEGY
+Create a bad pixmap for the root window and free pixmap with XFreePixmap.
+Create a GC with window as the drawable and pixmap as the stipple.
+Verify that a BadPixmap error occurs.
+>>CODE BadPixmap
+XGCValues vals;
+
+ vals.stipple = badpixm(display);
+
+ values = &vals;
+ d = DRW(display);
+ valuemask = GCStipple;
+
+ XCALL;
+
+ if( geterr() == BadPixmap)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M clip-mask
+does not name a valid pixmap, or
+.S None ,
+and the GCClipMask bit is set in
+.A valuemask ,
+then a
+.A BadPixmap
+error occurs.
+>>STRATEGY
+Create a bad pixmap for the root window and free pixmap with XFreePixmap.
+Create a GC with window as the drawable and pixmap as the clip_mask.
+Verify that a BadPixmap error occurs.
+>>CODE BadPixmap
+Window w;
+Pixmap pm;
+XGCValues vals;
+
+ vals.clip_mask = badpixm(display);
+
+ values = &vals;
+ d = DRW(display);
+ valuemask = GCClipMask;
+
+ XCALL;
+
+ if (geterr() == BadPixmap)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad C
+When the graphics context and the
+.M tile
+pixmap do not have the same depth,
+and the GCTile bit is set in
+.A valuemask ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+For all non-depth1 drawables:
+ Created such a drawable.
+ Create a depth 1 pixmap.
+ Create a GC with window as the drawable and pixmap as the tile.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+int count;
+XGCValues vals;
+XVisualInfo *vp;
+
+
+ count = 0;
+ vals.tile = XCreatePixmap(display, DRW(display), 1,1,1);
+ valuemask = GCTile;
+ values = &vals;
+ for(resetvinf(VI_WIN); nextvinf(&vp);)
+ if(vp->depth != 1) {
+ trace("Testing a window of depth %d",vp->depth);
+ count++;
+ d = makewin(display, vp);
+ XCALL;
+ if(geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+ }
+
+ for(resetvinf(VI_PIX); nextvinf(&vp);)
+ if(vp->depth != 1) {
+ trace("Testing a window of depth %d",vp->depth);
+ count++;
+ d = makepixm(display, vp);
+ XCALL;
+ if(geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+ }
+
+
+ if(count == 0) {
+ tet_result(TET_UNSUPPORTED);
+ report("Only depth one drawables are supported.");
+ return;
+ } else
+ CHECKPASS(count);
+
+>>ASSERTION Bad A
+When the graphics context and the
+.M tile
+pixmap were not created for the same root,
+and the GCTile bit is set in
+.A valuemask ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If multiple roots are supported:
+ Create a pixmap for one root.
+ Create a GC for another root with pixmap as the tile component.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+char *altroot;
+int scr_num;
+XGCValues vals;
+
+ altroot = tet_getvar("XT_ALT_SCREEN");
+ if (altroot == NULL) {
+ delete("XT_ALT_SCREEN not set");
+ return;
+ }
+ if (*altroot == 'U') {
+ report("Only one screen supported");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ scr_num = atoi(altroot);
+ if (scr_num == DefaultScreen(display)) {
+ delete("The Alternate root was the same as the one under test");
+ return;
+ }
+ if (scr_num >= ScreenCount(display)) {
+ delete("Screen given in XT_ALT_SCREEN could not be accessed");
+ return;
+ }
+
+ /*
+ * Create a 1x1 depth 1 pixmap on other screen
+ * and use it to create a gc
+ */
+
+ vals.tile = XCreatePixmap(display, RootWindow(display, scr_num), 1, 1, 1);
+ values = &vals;
+ valuemask = GCTile;
+ d = DRW(display);
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+>>ASSERTION Bad C
+When the
+.M stipple
+pixmap does not have depth one,
+and the GCStipple bit is set in
+.A valuemask ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If pixmaps with depth other than one are supported:
+ Create a pixmap with depth other than one.
+ Create a GC with the pixmap as the stipple component.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+XGCValues vals;
+
+ if((vals.stipple = nondepth1pixmap(display, DRW(display))) == (Pixmap) 0) {
+ tet_result(TET_UNSUPPORTED);
+ report("Only depth 1 pixmaps are supported.");
+ return;
+ } else
+ CHECK;
+
+ d = DRW(display);
+ valuemask = GCStipple;
+ values = &vals;
+ XCALL;
+
+ if(geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad C
+When the graphics context and the
+.M stipple
+pixmap were not created for the same root,
+and the GCStipple bit is set in
+.A valuemask ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If multiple roots are supported:
+ Create a pixmap for one root.
+ Create a GC for another root with pixmap as the stipple component.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+char *altroot;
+int scr_num;
+XGCValues vals;
+
+ altroot = tet_getvar("XT_ALT_SCREEN");
+ if (altroot == NULL) {
+ delete("XT_ALT_SCREEN not set");
+ return;
+ }
+ if (*altroot == 'U') {
+ report("Only one screen supported");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ scr_num = atoi(altroot);
+ if (scr_num == DefaultScreen(display)) {
+ delete("The Alternate root was the same as the one under test");
+ return;
+ }
+ if (scr_num >= ScreenCount(display)) {
+ delete("Screen given in XT_ALT_SCREEN could not be accessed");
+ return;
+ }
+
+ /*
+ * Create a 1x1 depth 1 pixmap on other screen
+ * and use it to create a gc
+ */
+
+ d = DRW(display);
+ vals.stipple = XCreatePixmap(display, RootWindow(display, scr_num), 1, 1, 1);
+ values = &vals;
+ valuemask = GCStipple;
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+>>ASSERTION Bad C
+When the
+.M clip-mask
+is set to a pixmap, and
+the
+.M clip-mask
+does not have depth one,
+and the GCClipMask bit is set in
+.A valuemask ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If pixmaps with depth other than one are supported:
+ Create a pixmap with depth other than one.
+ Create a GC with the pixmap as the clip_mask component.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+XGCValues vals;
+
+ if((vals.clip_mask = nondepth1pixmap(display, DRW(display))) == (Pixmap) 0) {
+ tet_result(TET_UNSUPPORTED);
+ report("Only depth 1 pixmaps are supported.");
+ return;
+ } else
+ CHECK;
+
+ d = DRW(display);
+ valuemask = GCClipMask;
+ values = &vals;
+ XCALL;
+
+ if(geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad C
+When the
+.M clip-mask
+is set to a pixmap, and
+the graphics context and the
+.M clip-mask
+were not created for the same root,
+and the GCClipMask bit is set in
+.A valuemask ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If multiple roots are supported:
+ Create a pixmap for one root.
+ Create a GC for another root with the pixmap as the clip_mask component.
+ Verify that a BadMatch error occurs.
+>>CODE BadMatch
+char *altroot;
+int scr_num;
+XGCValues vals;
+
+ altroot = tet_getvar("XT_ALT_SCREEN");
+ if (altroot == NULL) {
+ delete("XT_ALT_SCREEN not set");
+ return;
+ }
+ if (*altroot == 'U') {
+ report("Only one screen supported");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ scr_num = atoi(altroot);
+ if (scr_num == DefaultScreen(display)) {
+ delete("The Alternate root was the same as the one under test");
+ return;
+ }
+ if (scr_num >= ScreenCount(display)) {
+ delete("Screen given in XT_ALT_SCREEN could not be accessed");
+ return;
+ }
+
+ /*
+ * Create a 1x1 depth 1 pixmap on other screen
+ * and use it to create a gc
+ */
+
+ d = DRW(display);
+ vals.clip_mask = XCreatePixmap(display, RootWindow(display, scr_num), 1, 1, 1);
+ valuemask = GCClipMask;
+ values = &vals;
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+>>ASSERTION Bad A
+When the
+.A valuemask
+argument is other than a bitwise OR of none or any of
+.S GCFunction ,
+.S GCPlaneMask ,
+.S GCForeground ,
+.S GCBackground ,
+.S GCLineWidth ,
+.S GCLineStyle ,
+.S GCCapStyle ,
+.S GCJoinStyle ,
+.S GCFillStyle ,
+.S GCFillRule ,
+.S GCTile ,
+.S GCStipple ,
+.S GCTileStipXOrigin ,
+.S GCTileStipYOrigin ,
+.S GCFont ,
+.S GCSubwindowMode ,
+.S GCGraphicsExposures ,
+.S GCClipXOrigin ,
+.S GCClipYOrigin ,
+.S GCClipMask ,
+.S GCDashOffset ,
+.S GCDashList ,
+or
+.S GCArcMode ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC with valuemask = GCFunction | GCForeground |
+ ~(GCFunction | GCPlaneMask | GCForeground | GCBackground |
+ GCLineWidth | GCLineStyle | GCCapStyle | GCJoinStyle |
+ GCFillStyle | GCFillRule | GCTile | GCStipple |
+ GCTileStipXOrigin | GCTileStipYOrigin | GCFont | GCSubwindowMode |
+ GCGraphicsExposures | GCClipXOrigin | GCClipYOrigin | GCClipMask |
+ GCDashOffset | GCDashList | GCArcMode.
+Verify that a BadValue error occurred.
+>>CODE BadValue
+Window w;
+XGCValues vals;
+int i;
+unsigned char *p;
+
+
+ /* first fill XGCValues with ff's and try creating that rubbish */
+
+ i = sizeof(XGCValues);
+ p = (unsigned char *)&vals;
+ while( i-- > 0 )
+ *p++ = 0xff;
+
+ d = DRW(display);
+ values = &vals;
+ vals.foreground = 1;
+ vals.function = ~0;
+ valuemask = GCFunction | GCForeground |
+ ~(GCFunction | GCPlaneMask | GCForeground | GCBackground |
+ GCLineWidth | GCLineStyle | GCCapStyle | GCJoinStyle |
+ GCFillStyle | GCFillRule | GCTile | GCStipple |
+ GCTileStipXOrigin | GCTileStipYOrigin | GCFont | GCSubwindowMode |
+ GCGraphicsExposures | GCClipXOrigin | GCClipYOrigin | GCClipMask |
+ GCDashOffset | GCDashList | GCArcMode);
+ XCALL;
+
+ if(geterr() == BadValue)
+ PASS;
+ else
+ FAIL;
+
+>>ASSERTION Bad A
+When the
+.M function
+is other than
+.S GXclear ,
+.S GXand ,
+.S GXandReverse ,
+.S GXcopy ,
+.S GXandInverted ,
+.S GXnoop ,
+.S GXxor ,
+.S GXor ,
+.S GXnor ,
+.S GXequiv ,
+.S GXinvert ,
+.S GXorReverse ,
+.S GXcopyInverted ,
+.S GXorInverted ,
+.S GXnand
+or
+.S GXset ,
+and the GCFunction bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC with function = GXclear + GXand + GXandReverse + GXcopy +
+ GXandInverted + GXnoop + GXxor + GXor + GXnor + GXequiv + GXinvert +
+ GXorReverse + GXcopyInverted + GXorInverted + GXnand + GXset + 1
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues vals;
+
+ vals.function = GXclear + GXand + GXandReverse + GXcopy +
+ GXandInverted + GXnoop + GXxor + GXor + GXnor + GXequiv + GXinvert +
+ GXorReverse + GXcopyInverted + GXorInverted + GXnand + GXset + 1;
+ values = &vals;
+ valuemask = GCFunction;
+ d = DRW(display);
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M line_style
+is other than
+.S LineSolid ,
+.S LineDoubleDash
+or
+.S LineOnOffDash ,
+and the GCLineStyle bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC with line_style = LineSolid + LineDoubleDash + LineOnOffDash + 1;
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues vals;
+
+ vals.line_style = LineSolid + LineDoubleDash + LineOnOffDash + 1;
+ values = &vals;
+ d = DRW(display);
+ valuemask = GCLineStyle;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M cap_style
+is other than
+.S CapNotLast ,
+.S CapButt ,
+.S CapRound
+or
+.S CapProjecting ,
+and the GCCapStyle bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC with cap_style = CapNotLast + CapButt + CapRound + CapProjecting + 1
+Verify that a BadValue error occurred
+>>CODE BadValue
+XGCValues vals;
+
+ vals.cap_style = CapNotLast + CapButt + CapRound + CapProjecting + 1;
+ values = &vals;
+ valuemask = GCCapStyle;
+ d = DRW(display);
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M join_style
+is other than
+.S JoinMiter ,
+.S JoinRound
+or
+.S JoinBevel ,
+and the GCJoinStyle bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC with join_style = JoinMiter + JoinRound + JoinBevel + 1
+Verify that a BadValue error occurs
+>>CODE BadValue
+XGCValues vals;
+
+ vals.join_style = JoinMiter + JoinRound + JoinBevel + 1;
+ values = &vals;
+ d = DRW(display);
+ valuemask = GCJoinStyle;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M fill_style
+is other than
+.S FillSolid ,
+.S FillTiled ,
+.S FillStippled
+or
+.S FillOpaqueStippled ,
+and the GCFillStyle bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC with fill_style = FillSolid + FillTiled + FillStippled + FillOpaqueStippled + 1
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues vals;
+
+ vals.fill_style = FillSolid + FillTiled + FillStippled + FillOpaqueStippled + 1;
+ values = &vals;
+ d = DRW(display);
+ valuemask = GCFillStyle;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M fill_rule
+is other than
+.S EvenOddRule
+or
+.S WindingRule ,
+and the GCFillRule bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a gc with fill_rule = EvenOddRule + WindingRule + 1
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues vals;
+
+ vals.fill_rule = EvenOddRule + WindingRule + 1;
+ values = &vals;
+ d = DRW(display);
+ valuemask = GCFillRule;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When
+.M arc_mode
+is other than
+.S ArcChord
+or
+.S ArcPieSlice ,
+and the GCArcMode bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a gc with arc_mode = ArcChord + ArcPieSlice + 1.
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues vals;
+
+ vals.arc_mode = ArcChord + ArcPieSlice + 1;
+ values = &vals;
+ d = DRW(display);
+ valuemask = GCArcMode;
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the
+.M subwindow_mode
+is other than
+.S ClipByChildren
+or
+.S IncludeInferiors ,
+and the GCSubwindowMode bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC with subwindow_mode = ClipByChildren + IncludeInferiors + 1
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues vals;
+
+ vals.subwindow_mode = ClipByChildren + IncludeInferiors + 1;
+ values = &vals;
+ valuemask = GCSubwindowMode;
+ d = DRW(display);
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When
+.M graphics_exposure
+is other than
+.S True
+or
+.S False ,
+and the GCGraphicsExposures bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC with graphics_exposures component set to
+ (int) False + (int) True + 1
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XGCValues vals;
+
+ vals.graphics_exposures = (int) False + (int) True + 1;
+ values = &vals;
+ valuemask = GCGraphicsExposures;
+ d = DRW(display);
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When
+.M dashes
+is set to zero,
+and the GCDashList bit is set in
+.A valuemask ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a GC with dashes component = 0
+Verify that a BadValue error occurs.
+>>CODE BadValue
+XGCValues vals;
+
+ vals.dashes = (char) 0;
+ values = &vals;
+ d = DRW(display);
+ valuemask = GCDashList;
+
+ XCALL;
+
+ if( geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+
+>># HISTORY steve/mcy Completed First prototype
+>># HISTORY steve Completed Automatic conversion to new(ish) form
+>># HISTORY kieron Completed Added dash_list assertions
+>># HISTORY Cal Completed Check and update to new format.
+>># HISTORY Kieron Completed <Have a look>
+>># HISTORY Cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/crtpxmp/crtpxmp.m b/xc/test/xsuite/xtest/tset/CH05/crtpxmp/crtpxmp.m
new file mode 100644
index 000000000..20e01c034
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/crtpxmp/crtpxmp.m
@@ -0,0 +1,197 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCreatePixmap CH05
+void
+XCreatePixmap(display, d, width, height, depth)
+Display *display = Dsp;
+Drawable d = DRW(display);
+unsigned int width = 13;
+unsigned int height = 17;
+unsigned int depth;
+>>ASSERTION Good A
+A call to xname creates a pixmap of width
+.A width ,
+height
+.A height ,
+and depth
+.A depth
+on the same screen as the drawable argument
+.A d ,
+and returns a pixmap ID.
+>>STRATEGY
+For each supported pixmap depth:
+ Create a pixmap of height 13, width 17.
+ Verify the depth, height and width with XGetGeometry.
+>>CODE
+XVisualInfo *vp;
+Status gstat;
+Window root_ret;
+int x_ret, y_ret;
+unsigned int w_ret, h_ret, bw_ret, bh_ret, dep_ret;
+Pixmap pmap;
+
+
+ for(resetvinf(VI_PIX); nextvinf(&vp); ) {
+ depth = vp->depth;
+ d = DRW(display);
+ pmap = XCALL;
+ gstat = XGetGeometry(display, pmap, &root_ret, &x_ret, &y_ret, &w_ret, &h_ret, &bw_ret, &dep_ret);
+
+ if(gstat != True) {
+ delete("XGetGeometry did not return True for pixmap ID 0x%x",pmap);
+ return;
+ } else
+ CHECK;
+
+ if(w_ret != width) {
+ report("XGetGeometry returned width of %u instead of %u for pixmap of depth %u", w_ret, width, depth);
+ FAIL;
+ } else
+ CHECK;
+
+ if(h_ret != height) {
+ report("XGetGeometry returned height of %u instead of %u for pixmap of depth %u", h_ret, height, depth);
+ FAIL;
+ } else
+ CHECK;
+
+ if(dep_ret != depth) {
+ report("XGetGeometry returned depth of %u instead of depth %u", dep_ret, depth);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(4 * nvinf());
+
+>>ASSERTION Good A
+When the drawable argument
+.A d
+is an
+.S InputOnly
+window, then no error occurs.
+>>STRATEGY
+For each supported pixmap depth:
+ Create an InputOnly window.
+ Call XCreatePixmap with the window as the drawable argument.
+ Verify that no error occurred.
+>>CODE
+XVisualInfo *vp;
+
+ for(resetvinf(VI_PIX); nextvinf(&vp); ) {
+ d = iponlywin(display);
+ depth = vp->depth;
+ XCALL;
+
+ if(geterr() != Success) {
+ report("XCreatePixmap() produced error %s with an InputOnly Window as the drawable",errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Bad A
+When either the
+.A width
+argument or
+.A height
+argument is zero, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+For each supported pixmap depth:
+ Create a pixmap with height = 17 and width = 0 with XCreatePixmap.
+ Verify that a BadValue error occurred.
+ Create a pixmap with height = 0 and width = 19 with XCreatePixmap.
+ Verify that a BadValue error occurred.
+>>CODE BadValue
+XVisualInfo *vp;
+unsigned int depth;
+
+ for(resetvinf(VI_PIX); nextvinf(&vp); ) {
+ depth = vp->depth;
+
+ d = DRW(display);
+ height = 17;
+ width = 0;
+ XCALL;
+ if(geterr() != BadValue) {
+ report("When XCreatePixmap called with zero width");
+ report("Got %s, Expecting BadValue error",
+ errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ width = 19;
+ height = 0;
+ XCALL;
+ if(geterr() != BadValue) {
+ report("When XCreatePixmap called with zero height");
+ report("Got %s, Expecting BadValue error",
+ errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(nvinf() * 2);
+
+>>ASSERTION Bad A
+When the depth
+.A depth
+is not supported by the screen of the drawable
+.A d,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Call XCreatePixmap with depth argument set to the
+ sum of all supported pixmap depths plus 1.
+Verify that a BadValue error occurred.
+>>CODE BadValue
+XVisualInfo *vp;
+unsigned int depth, nondepth;
+
+ nondepth = 1;
+ for(resetvinf(VI_PIX); nextvinf(&vp); )
+ nondepth += vp->depth;
+
+ trace("Selected unsupported depth is %u", nondepth);
+ d = DRW(display);
+ depth = nondepth;
+ XCALL;
+ if(geterr() != BadValue) {
+ report("When XCreatePixmap called with unsupported depth %d",
+ depth);
+ report("Got %s, Expecting BadValue error", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER Drawable
+>>#HISTORY Cal Completed Written in new format and style.
+>>#HISTORY Kieron Action <Have a look>
+>>#HISTORY Cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/frclrmp/frclrmp.m b/xc/test/xsuite/xtest/tset/CH05/frclrmp/frclrmp.m
new file mode 100644
index 000000000..dfc631a2b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/frclrmp/frclrmp.m
@@ -0,0 +1,225 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFreeColormap CH05
+void
+XFreeColormap(display, colormap)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+>>ASSERTION Good A
+A call to xname
+removes the association between the
+.A colormap
+argument
+and the colourmap ID, and frees the associated storage.
+>>STRATEGY
+For each supported visual type:
+ Create a colourmap with XCreateColormap.
+ Free the colourmap with XFreeColormap.
+ Verify that XAllocColor fails.
+>>CODE
+XVisualInfo *vi;
+unsigned long vmask;
+XColor col;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals are supported.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vi); ) {
+ trace("Attempting XFreeColormap() for class %s", displayclassname(vi->class));
+ colormap = XCreateColormap(display, DRW(display), vi->visual, AllocNone);
+
+ XCALL;
+
+ startcall(display);
+ XAllocColor(display, colormap, &col);
+ endcall(display);
+
+ if( geterr() == Success) {
+ report("XAllocColor() succeeded with a freed colormap");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Good A
+When the
+.A colormap
+argument is the default colourmap, then a call to xname
+does not remove the association between the
+.A colormap
+argument
+and the colourmap ID or free the associated storage.
+>>STRATEGY
+Free the default colourmap with XFreeColormap.
+Verify that XAllocColor succeeds in allocating 1 shared cell with this colormap.
+>>CODE
+XColor col;
+
+ col.red = col.green = col.blue = 0;
+ colormap = DefaultColormap(display, DefaultScreen(display));
+ XCALL;
+ if(XAllocColor(display, colormap, &col) == False) {
+ report("XAllocColor() failed to allocate a colourcell with the default colormap.");
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good A
+When the
+.A colormap
+argument is an installed colourmap, then a call to xname uninstalls the colourmap.
+>>STRATEGY
+For each visual class:
+ Create a colourmap with XCreateColormap.
+ Install the colourmap with XInstallColormap.
+ Obtain a list of installed colourmaps with XListInstalledColormaps.
+ Verify that the created colourmap is in the list.
+ Free the colourmap with XFreeColormap.
+ Obtain a list of installed colourmaps with XListInstalledColormaps.
+ Verify that the created colourmap is not in the list.
+>>CODE
+int i, len, notfound;
+XVisualInfo *vi;
+Colormap *maplist;
+unsigned long vmask;
+XColor col;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals are supported.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vi); ) {
+ trace("Attempting XFreeColormap() for class %s", displayclassname(vi->class));
+ colormap = XCreateColormap(display, DRW(display), vi->visual, AllocNone);
+
+
+ XAllocColor(display, colormap, &col);
+ XInstallColormap(display, colormap);
+ maplist = XListInstalledColormaps(display, DRW(display), &len);
+ for(i=0, notfound = 1; i<len && notfound; i++ )
+ if(maplist[i] == colormap) {
+ CHECK;
+ trace("Found map at position %d of the required list", i);
+ notfound = 0;
+ }
+
+ XFree((char*)maplist);
+ if(notfound) {
+ delete("The installed colourmap was not on the required list.");
+ return;
+ }
+
+ XCALL;
+
+ maplist = XListInstalledColormaps(display, DRW(display), &len);
+
+ for(i=0, notfound = 1 ; i<len && notfound; i++)
+ if(maplist[i] == colormap) {
+ report("Colormap is still on the required list.");
+ FAIL;
+ notfound = 0;
+ }
+
+ XFree((char*)maplist);
+
+ if(notfound == 1)
+ CHECK;
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When the specified colourmap is defined as the colourmap for a window,
+then a call to xname changes the colourmap associated with the window to
+.S None
+and generates a
+.S ColormapNotify
+event.
+>>STRATEGY
+For each supported visual class:
+ Create a colourmap with XCreateColormap.
+ Create a window with XCreateWindow.
+ Select ColormapNotify events with XSelectInput.
+ Make the colormap the colormap for the window with XSetWindowColormap.
+ Free the colormap with XFreeColormap
+ Verify that a ColorMapnotify event was generated with XNextEvent.
+ Verify that the window's colourmap is set to none with XGetWindowAttributes.
+>>CODE
+int i, len, notfound;
+XVisualInfo *vi;
+XWindowAttributes watts;
+XEvent ev;
+Colormap *maplist;
+unsigned long vmask;
+XColor col;
+Window win;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals are supported.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vi); ) {
+ trace("Attempting XFreeColormap() for class %s", displayclassname(vi->class));
+ colormap = XCreateColormap(display, DRW(display), vi->visual, AllocNone);
+ XAllocColor(display, colormap, &col);
+
+ win = makewin(display, vi);
+ XSetWindowColormap(display, win, colormap);
+ XGetWindowAttributes(display, win, &watts);
+
+ XSelectInput(display, win, ColormapChangeMask);
+
+
+ if(watts.colormap != colormap) {
+ delete("XSetWindowColormap() did not set the window colormap.");
+ return;
+ }
+
+ XInstallColormap(display, colormap);
+
+ XCALL;
+
+ XGetWindowAttributes(display, win, &watts);
+ if(watts.colormap != None) {
+ report("Colormap of window was not set to None.");
+ FAIL;
+ }
+
+ if(getevent(display, &ev) == 0) {
+ report("No Event was generated");
+ FAIL;
+ } else
+ if(ev.type != ColormapNotify) {
+ report("Event generated was not ColormapNotify");
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Bad A
+.ER BadColor
+>>#HISTORY Cal Completed Written in new format and style - Cal 4/12/90.
+>>#HISTORY Kieron Completed <Have a look>
diff --git a/xc/test/xsuite/xtest/tset/CH05/frclrs/frclrs.m b/xc/test/xsuite/xtest/tset/CH05/frclrs/frclrs.m
new file mode 100644
index 000000000..b60b690ee
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/frclrs/frclrs.m
@@ -0,0 +1,687 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFreeColors CH05
+void
+XFreeColors(display, colormap, pixels, npixels, planes)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+unsigned long *pixels = &dummypix;
+int npixels = 1;
+unsigned long planes = 0L;
+>>EXTERN
+unsigned long dummypix;
+
+#define ENOUGH_TIME 100
+
+static
+Bool munch(size_in_out, pixels, npix)
+ int *size_in_out;
+ unsigned long *pixels;
+ int npix;
+{
+ int i;
+ int sz = 0;
+ unsigned long junk;
+ int max_sz = (*size_in_out) * ENOUGH_TIME;
+
+ for(i=0; i < npix; i++, pixels++) {
+ if(XAllocColorCells(display, colormap, False, 0L, 0, pixels, 1) == False) {
+ delete("Could not allocate %d pixels with AllocColorCells (colormap size >= %d, done %d)", npix, *size_in_out, i);
+ return False;
+ }
+ }
+
+ sz = i;
+
+ for(i=0; XAllocColorCells(display, colormap, False, 0L, 0, &junk, 1); i++) {
+ if (i > max_sz) {
+ delete("Still allocating after %d cells allocated in a colormap of size %d cells.",
+ sz + i, *size_in_out);
+ return False;
+ }
+ }
+
+ trace("Rest of colormap allocated (%d + %d = %d cells. Notional size = %d cells).",
+ sz, i, sz + i, *size_in_out);
+ sz += i;
+ *size_in_out = sz;
+ return True;
+}
+
+>>ASSERTION Good C
+If any of the visual classes DirectColor, PseudoColor or GrayScale is supported:
+A call to xname function frees the colourmap entries
+obtained by ORing the
+.A npixels
+pixel values specified in the
+.A pixels
+argument
+with zero or more of the planes specified in the
+.A planes
+argument
+that have been
+allocated by the client using
+.S XAllocColor ,
+.S XAllocNamedColor ,
+.S XAllocColorCells
+or
+.S XAllocColorPlanes.
+>>STRATEGY
+For each visual class DirectColor, PseudoColor and GrayScale:
+ Create a colormap with XCreateColormap.
+ Allocate 1 colormap cell with XAllocNamedColor.
+ Allocate the remaining colourmap cells with XAllocColorCells.
+ Free the cell allocated by XAllocNamedColor with XFreeColors.
+ Allocate 1 colourmap cell with XAllocColorCells.
+ Verify that the call did not return False.
+
+For each visual class DirectColor, PseudoColor and GrayScale:
+ Create a colormap with XCreateColormap.
+ Allocate 1 colormap cell with XAllocColor.
+ Allocate the remaining colourmap cells with XAllocColorCells.
+ Free the cell allocated by XAllocColor with XFreeColors.
+ Allocate 1 colourmap cell with XAllocColorCells.
+ Verify that the call did not return False.
+
+For each visual class DirectColor, PseudoColor and GrayScale:
+ Create a colormap with XCreateColormap.
+ Allocate the entire colourmap with XAllocColorCells.
+ Free a cell allocated by XAllocColorCells with XFreeColors.
+ Allocate 1 colourmap cell with XAllocColorCells.
+ Verify that the call did not return False.
+
+>>CODE
+XVisualInfo *vp;
+XColor color1, exactcol;
+char *goodname;
+int size;
+unsigned long pixel;
+unsigned long *pixels;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+
+
+ if((vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ if((goodname = tet_getvar("XT_GOOD_COLORNAME")) == (char *) 0L) {
+ delete("XT_GOOD_COLORNAME is not defined.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp);) {
+
+ trace("XAllocNamedColor().");
+ colormap = makecolmap(display, vp->visual, AllocNone);
+
+ if(XAllocNamedColor(display, colormap, goodname, &color1, &exactcol) == False) {
+ delete("XAllocNamedColor() failed.");
+ return;
+ }
+
+ size = maxsize(vp);
+
+ if (!munch(&size, &pixel, 1)) {
+ return; /* delete() already called in munch */
+ } else
+ CHECK;
+
+ pixels = &color1.pixel;
+ npixels = 1;
+ planes = 0L;
+
+ XCALL;
+
+ if(geterr() == Success)
+ CHECK;
+
+ if(XAllocColorCells(display, colormap, False, 0L, 0, &pixel, 1) == False) {
+ report("XFreeColors() did not free a cell allocated by XAllocNamedColor().");
+ FAIL;
+ } else
+ CHECK;
+
+ freereg();
+ }
+
+
+
+ for(resetsupvis(vmask); nextsupvis(&vp);) {
+
+ trace("XAllocColor().");
+ colormap = makecolmap(display, vp->visual, AllocNone);
+
+ if(XAllocColor(display, colormap, &color1) == False) {
+ delete("XAllocColor() failed.");
+ return;
+ }
+
+ size = maxsize(vp);
+
+ if (!munch(&size, &pixel, 1)) {
+ return; /* delete() already called in munch */
+ } else
+ CHECK;
+
+ pixels = &color1.pixel;
+ npixels = 1;
+ planes = 0L;
+
+ XCALL;
+
+ if(geterr() == Success)
+ CHECK;
+
+ if(XAllocColorCells(display, colormap, False, 0L, 0, &pixel, 1) == False) {
+ report("XFreeColors() did not free a cell allocated by XAllocColor().");
+ FAIL;
+ } else
+ CHECK;
+
+ freereg();
+ }
+
+
+ for(resetsupvis(vmask); nextsupvis(&vp);) {
+ trace("XAllocColorCells().");
+ colormap = makecolmap(display, vp->visual, AllocNone);
+
+ size = maxsize(vp);
+
+ if (!munch(&size, &pixel, 1)) {
+ return; /* delete() already called in munch */
+ } else
+ CHECK;
+
+ pixels = &pixel;
+ npixels = 1;
+ planes = 0L;
+
+ XCALL;
+
+ if(geterr() == Success)
+ CHECK;
+
+ if(XAllocColorCells(display, colormap, False, 0L, 0, &pixel, 1) == False) {
+ report("XFreeColors() did not free a cell allocated by XAllocColorCells().");
+ FAIL;
+ } else
+ CHECK;
+
+ freereg();
+ }
+
+
+
+ CHECKPASS(nsupvis() * 3 * 3);
+
+>>ASSERTION Good C
+If any of the visual classes DirectColor, PseudoColor or GrayScale is supported:
+When a read-only colourmap entry has been allocated by another client,
+then the colourmap entry is not freed on a call to xname.
+>>STRATEGY
+For each of the visual classes DirectColor, PseudoColor and GrayScale:
+ Create a colormap with alloc set to AllocNone.
+ Create a second client with XOpenDisplay().
+ Allocate a r/o cell with XAllocColor for the first client.
+ Allocate a r/o cell using the returned rgb values with XAllocColor for the second client.
+ Allocate the rest of the colormap with XAllocColorCells.
+ Free the cell for the first client with XFreeColors.
+ Verify that the colormap is full with XAllocColorCell.
+ Free the cell for the second client with XFreeColors.
+ Verify that the cell was freed with XAllocColorCell.
+>>CODE
+Display *disp2;
+XVisualInfo *vp;
+XColor color1;
+int size;
+unsigned long pixel;
+unsigned long *pixels;
+unsigned long vmask = (1<<PseudoColor)|(1<<GrayScale)|(1<<DirectColor);
+
+
+ if((vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp);) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+
+ if((disp2 = opendisplay()) == (Display *) 0) {
+ delete("Could not open the display.");
+ return;
+ }
+
+ if(XAllocColor(Dsp, colormap, &color1) == False) {
+ delete("XAllocColor() failed for second client.");
+ return;
+ }
+
+ if(XAllocColor(disp2, colormap, &color1) == False) {
+ delete("XAllocColor() failed for first client.");
+ return;
+ }
+
+ size = maxsize(vp);
+
+ if (!munch(&size, &pixel, 1)) {
+ return; /* delete() already called in munch */
+ } else
+ CHECK;
+
+ display = Dsp;
+ pixels = &color1.pixel;
+ npixels = 1;
+ planes = 0L;
+
+ XCALL;
+ if(geterr() == Success)
+ CHECK;
+
+ if(XAllocColorCells(Dsp, colormap, False, 0L, 0, &pixel, 1) != False) {
+ report("Shared cell was freed while allocted to another client.");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(3*nsupvis());
+
+>>ASSERTION Good A
+If the visual class DirectColor, PseudoColor or GrayScale is supported:
+When a read-only colourmap entry has been allocated more than once by the client,
+and xname has been called one less time than the colormap entry was allocated,
+then a call to xname frees the colormap entry.
+>>STRATEGY
+For each of the visual classes DirectColor, PseudoColor and GrayScale:
+ Create a colormap with alloc set to AllocNone.
+ Allocate a cell maxsize(vp) times with XAllocColor.
+ Allocate the rest of the colourmap with XAllocColorCells.
+ Repeat maxsize(vp)-1 times:
+ Deallocate the colourcell with XFreeColours.
+ Verify that the cell is not deallocated with XAllocColorCells.
+ Deallocate the colourcell with XFreeColours.
+ Verify that the colourcell was deallocated with XAllocColors.
+>>CODE
+XVisualInfo *vp;
+XColor color1;
+int size, i, refs;
+unsigned long pixel;
+unsigned long *pixels;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+
+
+ if((vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp);) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+
+ size = maxsize(vp);
+
+ refs = size-1;
+ color1.red = color1.green = color1.blue = 0;
+ for(i=0; i < refs; i++)
+ if(XAllocColor(display, colormap, &color1) == False) {
+ delete("XAllocColor() failed (Iteration %d).", i);
+ return;
+ }
+
+ if (!munch(&size, &pixel, 1)) {
+ return; /* delete() already called in munch */
+ } else
+ CHECK;
+
+ for(i=0; i < refs-1; i++) {
+ pixels = &color1.pixel;
+ npixels = 1;
+ planes = 0L;
+ XCALL;
+ }
+
+ if(XAllocColorCells(display, colormap, False, 0L, 0, &pixel, 1) != False) {
+ delete("XAllocColorCells() did not fail with a full colourmap.");
+ return;
+ } else
+ CHECK;
+
+ pixels = &color1.pixel;
+ npixels = 1;
+ planes = 0L;
+ XCALL;
+
+ if(XAllocColorCells(display, colormap, False, 0L, 0, &pixel, 1) == False) {
+ report("XFreeColors() did not free a cell allocated by XAllocColor().");
+ FAIL;
+ } else
+ CHECK;
+
+ freereg();
+ }
+
+ CHECKPASS(3*nsupvis());
+
+>>ASSERTION Bad A
+If any of the visual classes DirectColor, PseudoColor or GrayScale is supported:
+When one or more pixels cannot be freed, and one or more pixels can be freed,
+then the pixels that are allocated by the client in the colourmap that
+can be freed are freed.
+>>STRATEGY
+For each visual class DirectColor, PseudoColor and GrayScale:
+ Create a colormap with alloc set to AllocNone.
+ Create a new client with XOpenDisplay.
+ Allocate a r/o cell for the new client with XAllocColor.
+ Allocate the rest of the colormap for the first client with XAllocColorCells.
+ Free the entire colormap with the second client with XFreeColors.
+ Verify that only one cell was freed with XAllocColorCells.
+>>CODE BadAccess
+Display *disp2;
+XVisualInfo *vp;
+XColor color;
+int size;
+unsigned long pixel;
+unsigned long *pixels, *cptr, *ptr;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+
+
+ if((vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp);) {
+
+ disp2 = opendisplay();
+ colormap = makecolmap(disp2, vp->visual, AllocNone);
+
+ size = maxsize(vp);
+
+ if((cptr = (unsigned long *) malloc(size * sizeof(unsigned long))) == (unsigned long *)0) {
+ delete("malloc(%u) failed.", size * sizeof(unsigned long));
+ return;
+ }
+
+ ptr = cptr;
+ color.red = color.green = color.blue = 0;
+ if(XAllocColor(disp2, colormap, &color) == False) {
+ delete("XAllocColor() failed for client 2");
+ return;
+ }
+
+ *ptr++ = color.pixel;
+
+ if (!munch(&size, ptr, size-1)) {
+ return; /* delete() already called in munch */
+ } else
+ CHECK;
+
+ pixels = cptr;
+ npixels = size;
+ planes = 0L;
+
+ startcall(disp2);
+ XFreeColors(disp2, colormap, pixels, npixels, planes);
+ endcall(disp2);
+ /* should be BadAccess! Often not on R4 */
+ if (geterr() != BadAccess) {
+ report("Got %s, expecting BadAccess", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ if(XAllocColorCells(display, colormap, False, 0L, 0, &pixel, 1) == False) {
+ report("XFreeColors() did not free a cell allocated by XAllocColor().");
+ FAIL;
+ } else
+ CHECK;
+
+ if(XAllocColorCells(display, colormap, False, 0L, 0, &pixel, 1) != False) {
+ report("Colormap was not completely allocated.");
+ FAIL;
+ }
+
+ free(cptr);
+ freereg();
+ }
+
+ CHECKPASS(3*nsupvis());
+
+>>ASSERTION Good A
+If the visual class
+.S DirectColor
+is supported:
+When all related colormap entries are already freed, then a call to xname
+with a particular pixel value allows that pixel value to be allocated
+by a subsequent call to
+.S XAllocColorPlanes .
+>>#
+>># No matter what the plane argument is when given to XFreeColors,
+>># a BadAccess error is always generated.
+>>#
+>>STRATEGY
+For the visual class DirectColor:
+ Create a colourmap with XCreateColormap.
+ Allocate the entire colormap with 2 pixels and red_mask-1, green_mask-1
+ and blue_mask-1 red, green and blue planes with XAllocColorPlanes.
+ Verify that further allocation does not succeed with XAllocColorPlanes.
+ Free pixel2 and red|green|blue planes.
+ Allocate 1 pixel with red_mask-1, green_mask-1 and blue_mask-1 planes.
+ Verify that the call did not return False.
+>>CODE
+XVisualInfo *vp;
+int nreds, ngreens, nblues;
+int reds, greens, blues;
+unsigned long pr[2], rr, gr, br;
+unsigned long tpr[2], trr, tgr, tbr;
+unsigned long vmask = (1<<DirectColor);
+
+ if((vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+ resetsupvis(vmask);
+ nextsupvis(&vp);
+
+ nreds = bitcount(vp->red_mask);
+ ngreens = bitcount(vp->green_mask);
+ nblues = bitcount(vp->blue_mask);
+
+ reds = nreds - 1;
+ greens = ngreens - 1;
+ blues = nblues - 1;
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+
+ if((XAllocColorPlanes(display, colormap, False, pr, 2, reds, greens, blues, &rr, &gr, &br)) == False) {
+ delete("XAllocColorPlanes failed.");
+ return;
+ } else
+ CHECK;
+
+ if((XAllocColorPlanes(display, colormap, False, tpr, 1, 0, 0, 0, &trr, &tgr, &tbr)) != False) {
+ delete("Allocated colormap was not completely filled");
+ return;
+ } else
+ CHECK;
+
+ pixels = pr+1;
+ npixels = 1;
+ planes = rr | gr | br;
+ XCALL;
+
+ if((XAllocColorPlanes(display, colormap, False, pr, 1, reds, greens, blues, &rr, &gr, &br)) == False) {
+ trace("Freed colormap cells could not be re-allocated.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Bad A
+When a specified pixel is not a valid entry in the
+.A colormap
+argument, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+For all supported visual types:
+ Create a colormap with alloc set to AllocNone.
+ Free a pixel with pixel value of 2power(longbits)-1 with XFreeColors.
+ Verify that a BadValue error occurred.
+
+ Create a colormap using XCreateColormap with alloc set to AllocNone.
+ Allocate one readonly cell in the colormap with XAllocColor.
+ Construct an array with the same pixel in both elements.
+ Deallocate the colormap cells indicated by the array with XFreeColors.
+ Verify that a BadValue error occurred.
+>>CODE BadValue
+XVisualInfo *vp;
+XColor color;
+unsigned long pixel[2];
+unsigned long vmask = 0L;
+
+ if((vmask = visualsupported(display, vmask)) == 0L) {
+ delete("No visuals reported as supported");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ pixel[0] = ~0L;
+ pixels = pixel;
+ npixels = 1;
+ planes = 0L;
+ XCALL;
+ if(geterr() == BadValue)
+ CHECK;
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ if(XAllocColor(display, colormap, &color) == False) {
+ delete("XAllocColor Failed.");
+ return;
+ }
+
+ pixel[0] = color.pixel;
+ pixel[1] = ~0L;
+ pixels = pixel;
+ npixels = 2;
+ planes = 0L;
+ XCALL;
+ if(geterr() == BadValue)
+ CHECK;
+
+ }
+
+ CHECKPASS(2*nsupvis());
+
+>>ASSERTION Bad A
+.ER BadAccess colormap-free
+>>STRATEGY
+ Create a colormap with alloc set to AllocNone.
+ Free a pixel with pixel value = 0 with XFreeColors.
+ Verify that a BadValue error occurred.
+>>CODE BadAccess
+XVisualInfo *vp;
+unsigned long pixel[1];
+unsigned long vmask = 0L;
+
+ if((vmask = visualsupported(display, vmask)) == 0L) {
+ delete("No visuals reported as supported");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ pixel[0] = 0;
+ pixels = pixel;
+ npixels = 1;
+ planes = 0L;
+ XCALL;
+ if(geterr() == BadAccess)
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Bad A
+.ER BadColor
+>>ASSERTION Bad A
+When more than one
+.M pixel
+value is not a valid entry in the
+.M colormap
+argument, then a
+.S BadValue
+error occurs which will report any one of the invalid pixel values.
+>>STRATEGY
+For each supported visual class:
+ Create a colormap using XCreateColormap with alloc set to AllocNone.
+ Allocate one readonly cell in the colormap with XAllocColor.
+ Construct an array with two invalid pixel values and one valid pixel value.
+ Deallocate the colormap cells indicated by the array with XFreeColors.
+ Verify that a BadValue error occurred.
+ Verify that the bad value reported was one of the invalid pixel array elements.
+>>CODE BadValue
+XVisualInfo *vp;
+XColor color;
+int errval;
+unsigned long pixel[3];
+unsigned long vmask = 0L;
+
+ if((vmask = visualsupported(display, vmask)) == 0L) {
+ delete("No visuals reported as supported");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ if(XAllocColor(display, colormap, &color) == False) {
+ delete("XAllocColor Failed.");
+ return;
+ }
+ pixel[0] = ~0L;
+ pixel[1] = color.pixel;
+ pixel[2] = ~0L;
+ pixels = pixel;
+ npixels = 3;
+ planes = 0L;
+ XCALL;
+ if(geterr() == BadValue) {
+ errval = getbadvalue();
+ if( (errval != -1) && (errval != -2) ) {
+ report("Erroneous value was reported as %d, instead of -1 or -2", errval);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ }
+ CHECKPASS(nsupvis());
+
+
+>>#HISTORY Cal Completed Written in new format and style.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/frgc/frgc.m b/xc/test/xsuite/xtest/tset/CH05/frgc/frgc.m
new file mode 100644
index 000000000..532d58cf7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/frgc/frgc.m
@@ -0,0 +1,55 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFreeGC CH05
+void
+XFreeGC(display, gc)
+Display *display = Dsp;
+GC gc;
+>>ASSERTION Good A
+A call to xname destroys the GC specified by the
+.A gc
+argument, and all associated storage.
+>>STRATEGY
+Create a GC with XCreateGC.
+Free the GC with XFreeGC.
+Set the clip mask of the gc with XSetClipMask.
+Verify that a BadGC error occurred.
+>>CODE
+
+ gc = XCreateGC(display, DRW(display), 0L, (XGCValues*)0);
+ XCALL;
+
+ startcall(Dsp);
+
+ XSetClipMask(display, gc, None);
+
+ endcall(Dsp);
+
+ if(geterr() != BadGC) {
+ report("After a successful call to XFreeGC, a call to XSetClipMask");
+ report("did not give a BadGC error but instead gave %s", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+.ER BadGC
+>>#HISTORY Cal Completed Written in new format and style 7/12/90.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/frpxmp/frpxmp.m b/xc/test/xsuite/xtest/tset/CH05/frpxmp/frpxmp.m
new file mode 100644
index 000000000..8f978904a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/frpxmp/frpxmp.m
@@ -0,0 +1,101 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFreePixmap CH05
+void
+XFreePixmap(display, pixmap)
+Display *display = Dsp;
+Pixmap pixmap;
+>>ASSERTION Good A
+A call to xname removes the association between the pixmap ID
+.A pixmap
+and the specified pixmap.
+>>STRATEGY
+For all supported depths of pixmap:
+ Create a pixmap.
+ Create a gc using the pixmap as the drawable.
+ Free the pixmap with XFreePixmap.
+ Plot (0,0) in the pixmap.
+ Verify that a BadDrawable error occurred.
+>>CODE
+XGCValues gcv;
+XVisualInfo *vp;
+GC gc;
+
+ for(resetvinf(VI_PIX); nextvinf(&vp); ) {
+ pixmap = XCreatePixmap(display, DRW(display), 1, 1, vp->depth);
+ gc = makegc(display, pixmap);
+ XCALL;
+
+ startcall(Dsp);
+ XDrawPoint(display, pixmap, gc, 0, 0);
+ endcall(Dsp);
+ if(geterr() != BadDrawable) {
+ report("Got %s instead of BadDrawable when drawing on a freed pixmap. ", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+The storage allocated to the pixmap is not recovered until all references to it
+have been removed.
+>>STRATEGY
+Create a window.
+Create a pixmap of the same dimensions as the window.
+Pattern the pixmap.
+Create a gc with the pixmap as the tile and the fill_mode set to FillTiled.
+Free the pixmap with XFreePixmap.
+Tile the entire window with XFillRectangle.
+Verify that the tiled pattern matches the pixmap.
+>>CODE
+Window win;
+XVisualInfo *vp;
+XGCValues gcv;
+GC gc, gc2;
+
+ for(resetvinf(VI_WIN); nextvinf(&vp);) {
+ win = makewin(display, vp);
+ pixmap = XCreatePixmap(display, DRW(display), W_STDWIDTH, W_STDHEIGHT, vp->depth);
+ dset(display, pixmap, W_BG);
+ pattern(display, pixmap);
+
+ gcv.fill_style = FillTiled;
+ gcv.tile = pixmap;
+ gcv.foreground = W_FG;
+ gcv.background = W_BG;
+ gc = XCreateGC(display, DRW(display), GCFillStyle|GCTile|GCForeground|GCBackground, &gcv);
+ XCALL;
+
+ XFillRectangle(display, win, gc, 0, 0, W_STDWIDTH+1, W_STDHEIGHT+1);
+
+ if( checkpattern(display, win, (struct area *) 0 ) != True) {
+ report("Tiled pattern on window was not correct after");
+ report("tile component in GC was freed by XFreePixmap");
+ FAIL;
+ } else
+ CHECK;
+
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Bad A
+.ER BadPixmap
+>>#HISTORY Cal Completed Written in new format and style.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/gcntxtfrmg/gcntxtfrmg.m b/xc/test/xsuite/xtest/tset/CH05/gcntxtfrmg/gcntxtfrmg.m
new file mode 100644
index 000000000..4c6059a22
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/gcntxtfrmg/gcntxtfrmg.m
@@ -0,0 +1,48 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGContextFromGC CH05
+GContext
+XGContextFromGC(gc)
+GC gc;
+>>ASSERTION Good A
+A call to xname returns the GContext resource ID for the
+.A gc
+argument.
+>>STRATEGY
+Create a GC
+Obtain the GContext ID with XGContextFromGC
+Obtain an XFontStruct from the gc with XQueryFont.
+Verify that the fid component of the XFontStruct is the GContext ID.
+>>CODE
+XFontStruct *fontstruct;
+GContext gcontext;
+
+ gc = makegc(Dsp, DRW(Dsp));
+ gcontext = XGContextFromGC(gc);
+ fontstruct = XQueryFont(Dsp, gcontext);
+
+ if(fontstruct->fid != gcontext) {
+ report("A call to XGContextFromGC returned a value which when passed to XQueryFont");
+ report("did not return a correct GContext ID in fid field of XFontStruct");
+ FAIL;
+ } else
+ PASS;
+
+
+>>#HISTORY Cal Completed Written in new style and format - 6/12/90.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/gtgcvls/gtgcvls.m b/xc/test/xsuite/xtest/tset/CH05/gtgcvls/gtgcvls.m
new file mode 100644
index 000000000..ae5b18601
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/gtgcvls/gtgcvls.m
@@ -0,0 +1,402 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetGCValues CH05
+Status
+XGetGCValues(display, gc, valuemask, values)
+Display *display = Dsp;
+GC gc;
+unsigned long valuemask;
+XGCValues *values = &rvals;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>EXTERN
+#define FONTNAME "xtfont0"
+XGCValues rvals;
+>>ASSERTION Good A
+A call to xname copies the components
+specified by the
+.A valuemask
+argument
+from the specified GC
+to the contents of the
+.A values_return
+argument.
+>>STRATEGY
+Create a GC with non-default values for function,
+ planemask, foreground, background, linewidth, linestyle,
+ capstyle, joinstyle, fillstyle, fillrule, tile, stipple,
+ stipple origin, font, subwindowmode, graphics exposures,
+ clip origin, dash offset and arcmode using XCreateGC.
+Read the GC structure components using XGetGCValues.
+Verify that the returned values match the created values.
+>>CODE
+XVisualInfo *vp;
+XGCValues vals;
+Pixmap tile, stipple;
+Status status;
+Font font;
+XFontStruct *fontinfo;
+
+ if( (fontinfo = XLoadQueryFont(display, FONTNAME)) == (XFontStruct *) 0) {
+ delete("Could not load font %s",FONTNAME);
+ return;
+ } else
+ CHECK;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ font = fontinfo -> fid;
+ tile = makepixm(display, vp);
+ stipple = XCreatePixmap(display, DRW(display), 1, 1, 1);
+ vals.function = GXxor;
+ vals.plane_mask = 42;
+ vals.foreground = 1;
+ vals.background = 0;
+ vals.line_width = 10;
+ vals.line_style = LineOnOffDash;
+ vals.cap_style = CapProjecting;
+ vals.join_style = JoinBevel;
+ vals.fill_style = FillStippled;
+ vals.fill_rule = WindingRule;
+ vals.arc_mode = ArcChord;
+ vals.tile = tile;
+ vals.stipple = stipple;
+ vals.ts_x_origin = 2000;
+ vals.ts_y_origin = -13;
+ vals.font = font;
+ vals.subwindow_mode = ClipByChildren;
+ vals.graphics_exposures = False;
+ vals.clip_x_origin = 2003;
+ vals.clip_y_origin = 78435;
+ vals.dash_offset = 14;
+
+ valuemask =
+ GCFunction | GCPlaneMask | GCForeground |
+ GCBackground | GCLineWidth | GCLineStyle |
+ GCCapStyle | GCJoinStyle | GCFillStyle |
+ GCFillRule | GCTile | GCStipple |
+ GCTileStipXOrigin | GCTileStipYOrigin | GCFont |
+ GCSubwindowMode | GCGraphicsExposures | GCClipXOrigin |
+ GCClipYOrigin | GCDashOffset | GCArcMode ;
+
+ gc = XCreateGC(display, DRW(display), valuemask, &vals);
+
+ status = XCALL;
+
+ if(status == 0) {
+ delete("XGetGCValues() unexpectedly returned zero");
+ return;
+ } else
+ CHECK;
+
+ if( vals.function == rvals.function ) {
+ CHECK;
+ } else {
+ report("Expected GCValue function differs from that observed");
+ FAIL;
+ }
+ if( vals.plane_mask == rvals.plane_mask ) {
+ CHECK;
+ } else {
+ report("Expected GCValue plane_mask differs from that observed");
+ FAIL;
+ }
+ if( vals.foreground == rvals.foreground ) {
+ CHECK;
+ } else {
+ report("Expected GCValue foreground differs from that observed");
+ FAIL;
+ }
+ if( vals.background == rvals.background ) {
+ CHECK;
+ } else {
+ report("Expected GCValue background differs from that observed");
+ FAIL;
+ }
+ if( vals.line_width == rvals.line_width ) {
+ CHECK;
+ } else {
+ report("Expected GCValue line_width differs from that observed");
+ FAIL;
+ }
+ if( vals.line_style == rvals.line_style ) {
+ CHECK;
+ } else {
+ report("Expected GCValue line_style differs from that observed");
+ FAIL;
+ }
+ if( vals.cap_style == rvals.cap_style ) {
+ CHECK;
+ } else {
+ report("Expected GCValue cap_style differs from that observed");
+ FAIL;
+ }
+ if( vals.join_style == rvals.join_style ) {
+ CHECK;
+ } else {
+ report("Expected GCValue join_style differs from that observed");
+ FAIL;
+ }
+ if( vals.fill_style == rvals.fill_style ) {
+ CHECK;
+ } else {
+ report("Expected GCValue fill_style differs from that observed");
+ FAIL;
+ }
+ if( vals.fill_rule == rvals.fill_rule ) {
+ CHECK;
+ } else {
+ report("Expected GCValue fill_rule differs from that observed");
+ FAIL;
+ }
+ if( vals.arc_mode == rvals.arc_mode ) {
+ CHECK;
+ } else {
+ report("Expected GCValue arc_mode differs from that observed");
+ FAIL;
+ }
+ if( vals.tile == rvals.tile ) {
+ CHECK;
+ } else {
+ report("Expected GCValue tile differs from that observed");
+ FAIL;
+ }
+ if( vals.stipple == rvals.stipple ) {
+ CHECK;
+ } else {
+ report("Expected GCValue stipple differs from that observed");
+ FAIL;
+ }
+ if( vals.ts_x_origin == rvals.ts_x_origin ) {
+ CHECK;
+ } else {
+ report("Expected GCValue ts_x_origin differs from that observed");
+ FAIL;
+ }
+ if( vals.ts_y_origin == rvals.ts_y_origin ) {
+ CHECK;
+ } else {
+ report("Expected GCValue ts_y_origin differs from that observed");
+ FAIL;
+ }
+ if( vals.font == rvals.font ) {
+ CHECK;
+ } else {
+ report("Expected GCValue font differs from that observed");
+ FAIL;
+ }
+ if( vals.subwindow_mode == rvals.subwindow_mode ) {
+ CHECK;
+ } else {
+ report("Expected GCValue subwindow_mode differs from that observed");
+ FAIL;
+ }
+ if( vals.graphics_exposures == rvals.graphics_exposures ) {
+ CHECK;
+ } else {
+ report("Expected GCValue graphics_exposures differs from that observed");
+ FAIL;
+ }
+ if( vals.clip_x_origin == rvals.clip_x_origin ) {
+ CHECK;
+ } else {
+ report("Expected GCValue clip_x_origin differs from that observed");
+ FAIL;
+ }
+ if( vals.clip_y_origin == rvals.clip_y_origin ) {
+ CHECK;
+ } else {
+ report("Expected GCValue clip_y_origin differs from that observed");
+ FAIL;
+ }
+ if( vals.dash_offset == rvals.dash_offset ) {
+ CHECK;
+ } else {
+ report("Expected GCValue dash_offset differs from that observed");
+ FAIL;
+ }
+
+ CHECKPASS(23);
+
+>>#Assertion added following external review 13/4/91
+>>ASSERTION Good A
+When the
+.A valuemask
+argument is a bitwise OR of any of
+.S GCFunction ,
+.S GCPlaneMask ,
+.S GCForeground ,
+.S GCBackground ,
+.S GCLineWidth ,
+.S GCLineStyle ,
+.S GCCapStyle ,
+.S GCJoinStyle ,
+.S GCFillStyle ,
+.S GCFillRule ,
+.S GCTile ,
+.S GCStipple ,
+.S GCTileStipXOrigin ,
+.S GCTileStipYOrigin ,
+.S GCFont ,
+.S GCSubwindowMode ,
+.S GCGraphicsExposures ,
+.S GCClipXOrigin ,
+.S GCCLipYOrigin ,
+.S GCDashOffset ,
+or
+.S GCArcMode,
+then a call to XGetGCValues returns a non-zero value.
+>>STRATEGY
+Call XGetGCValues with a valuemask of
+ GCFunction | GCPlaneMask | GCForeground |
+ GCBackground | GCLineWidth | GCLineStyle |
+ GCCapStyle | GCJoinStyle | GCFillStyle |
+ GCFillRule | GCTile | GCStipple |
+ GCTileStipXOrigin | GCTileStipYOrigin | GCFont |
+ GCSubwindowMode | GCGraphicsExposures | GCClipXOrigin |
+ GCClipYOrigin | GCDashOffset | GCArcMode .
+Verify that XGetGCValues returns non-zero.
+>>CODE
+XVisualInfo *vp;
+XGCValues vals;
+Pixmap tile, stipple;
+Status status;
+Font font;
+XFontStruct *fontinfo;
+
+ if( (fontinfo = XLoadQueryFont(display, FONTNAME)) == (XFontStruct *) 0) {
+ delete("Could not load font %s",FONTNAME);
+ return;
+ } else
+ CHECK;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ font = fontinfo -> fid;
+ tile = makepixm(display, vp);
+ stipple = XCreatePixmap(display, DRW(display), 1, 1, 1);
+ vals.function = GXxor;
+ vals.plane_mask = 42;
+ vals.foreground = 1;
+ vals.background = 0;
+ vals.line_width = 10;
+ vals.line_style = LineOnOffDash;
+ vals.cap_style = CapProjecting;
+ vals.join_style = JoinBevel;
+ vals.fill_style = FillStippled;
+ vals.fill_rule = WindingRule;
+ vals.arc_mode = ArcChord;
+ vals.tile = tile;
+ vals.stipple = stipple;
+ vals.ts_x_origin = 2000;
+ vals.ts_y_origin = -13;
+ vals.font = font;
+ vals.subwindow_mode = ClipByChildren;
+ vals.graphics_exposures = False;
+ vals.clip_x_origin = 2003;
+ vals.clip_y_origin = 78435;
+ vals.dash_offset = 14;
+
+ valuemask =
+ GCFunction | GCPlaneMask | GCForeground |
+ GCBackground | GCLineWidth | GCLineStyle |
+ GCCapStyle | GCJoinStyle | GCFillStyle |
+ GCFillRule | GCTile | GCStipple |
+ GCTileStipXOrigin | GCTileStipYOrigin | GCFont |
+ GCSubwindowMode | GCGraphicsExposures | GCClipXOrigin |
+ GCClipYOrigin | GCDashOffset | GCArcMode ;
+
+ gc = XCreateGC(display, DRW(display), valuemask, &vals);
+
+ status = XCALL;
+
+ if(status == 0) {
+ report("XGetGCValues() did not return non-zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the
+.A valuemask
+argument is other than a bitwise OR of any
+of
+.S GCFunction ,
+.S GCPlaneMask ,
+.S GCForeground ,
+.S GCBackground ,
+.S GCLineWidth ,
+.S GCLineStyle ,
+.S GCCapStyle ,
+.S GCJoinStyle ,
+.S GCFillStyle ,
+.S GCFillRule ,
+.S GCTile ,
+.S GCStipple ,
+.S GCTileStipXOrigin ,
+.S GCTileStipYOrigin ,
+.S GCFont ,
+.S GCSubwindowMode ,
+.S GCGraphicsExposures ,
+.S GCClipXOrigin ,
+.S GCCLipYOrigin ,
+.S GCDashOffset ,
+or
+.S GCArcMode,
+then a call to xname returns zero.
+>>STRATEGY
+Call XGetGCValues with a valuemask of GCClipmask | GCForeground.
+Verify that XGetGCValues returns zero.
+Call XGetGCValues with a valuemask of GCDashList | GCForeground.
+Verify that XGetGCValues returns zero.
+>>CODE
+XGCValues vals;
+Status status;
+
+ vals.foreground = 1;
+ vals.clip_mask = None;
+ vals.dashes = 1;
+ valuemask = GCClipMask | GCDashList | GCForeground;
+ gc = XCreateGC(display,DRW(display), valuemask, &vals);
+
+ status = XCALL;
+
+ if(status != 0) {
+ report("XGetGCValues() did not return zero with GCClipMask in valuemask.");
+ FAIL;
+ } else
+ CHECK;
+
+ valuemask = GCDashList | GCForeground;
+
+ status = XCALL;
+
+ if(status != 0) {
+ report("XGetGCValues() did not return zero with GCDashList in valuemask.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>#HISTORY Cal Completed Written in new style and format.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/linktbl.c b/xc/test/xsuite/xtest/tset/CH05/linktbl.c
new file mode 100644
index 000000000..1cb4cf38b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/linktbl.c
@@ -0,0 +1,113 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+
+extern struct linkinfo EXAllcClr;
+extern struct linkinfo EXAllcClrClls;
+extern struct linkinfo EXAllcClrPlns;
+extern struct linkinfo EXAllcNmdClr;
+extern struct linkinfo EXChngGC;
+extern struct linkinfo EXCpyClrmpAnd;
+extern struct linkinfo EXCpyGC;
+extern struct linkinfo EXCrtClrmp;
+extern struct linkinfo EXCrtGC;
+extern struct linkinfo EXCrtPxmp;
+extern struct linkinfo EXFrClrmp;
+extern struct linkinfo EXFrClrs;
+extern struct linkinfo EXFrGC;
+extern struct linkinfo EXFrPxmp;
+extern struct linkinfo EXGCntxtFrmGC;
+extern struct linkinfo EXGtGCVls;
+extern struct linkinfo EXLkpClr;
+extern struct linkinfo EXQryBstSz;
+extern struct linkinfo EXQryBstStppl;
+extern struct linkinfo EXQryBstTl;
+extern struct linkinfo EXQryClr;
+extern struct linkinfo EXQryClrs;
+extern struct linkinfo EXStArcMd;
+extern struct linkinfo EXStBg;
+extern struct linkinfo EXStClpMsk;
+extern struct linkinfo EXStClpOrgn;
+extern struct linkinfo EXStClpRctngl;
+extern struct linkinfo EXStDshs;
+extern struct linkinfo EXStFllRl;
+extern struct linkinfo EXStFllStyl;
+extern struct linkinfo EXStFnt;
+extern struct linkinfo EXStFrgrnd;
+extern struct linkinfo EXStFnctn;
+extern struct linkinfo EXStGrphcsExp;
+extern struct linkinfo EXStLnAttrbts;
+extern struct linkinfo EXStPlnMsk;
+extern struct linkinfo EXStStt;
+extern struct linkinfo EXStStppl;
+extern struct linkinfo EXStSbwMd;
+extern struct linkinfo EXStTSOrgn;
+extern struct linkinfo EXStTl;
+extern struct linkinfo EXStWdwClrmp;
+extern struct linkinfo EXStrClr;
+extern struct linkinfo EXStrClrs;
+extern struct linkinfo EXStrNmdClr;
+
+struct linkinfo *linktbl[] = {
+ &EXAllcClr,
+ &EXAllcClrClls,
+ &EXAllcClrPlns,
+ &EXAllcNmdClr,
+ &EXChngGC,
+ &EXCpyClrmpAnd,
+ &EXCpyGC,
+ &EXCrtClrmp,
+ &EXCrtGC,
+ &EXCrtPxmp,
+ &EXFrClrmp,
+ &EXFrClrs,
+ &EXFrGC,
+ &EXFrPxmp,
+ &EXGCntxtFrmGC,
+ &EXGtGCVls,
+ &EXLkpClr,
+ &EXQryBstSz,
+ &EXQryBstStppl,
+ &EXQryBstTl,
+ &EXQryClr,
+ &EXQryClrs,
+ &EXStArcMd,
+ &EXStBg,
+ &EXStClpMsk,
+ &EXStClpOrgn,
+ &EXStClpRctngl,
+ &EXStDshs,
+ &EXStFllRl,
+ &EXStFllStyl,
+ &EXStFnt,
+ &EXStFrgrnd,
+ &EXStFnctn,
+ &EXStGrphcsExp,
+ &EXStLnAttrbts,
+ &EXStPlnMsk,
+ &EXStStt,
+ &EXStStppl,
+ &EXStSbwMd,
+ &EXStTSOrgn,
+ &EXStTl,
+ &EXStWdwClrmp,
+ &EXStrClr,
+ &EXStrClrs,
+ &EXStrNmdClr,
+ 0,
+};
diff --git a/xc/test/xsuite/xtest/tset/CH05/lkpclr/lkpclr.m b/xc/test/xsuite/xtest/tset/CH05/lkpclr/lkpclr.m
new file mode 100644
index 000000000..1ae0af37e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/lkpclr/lkpclr.m
@@ -0,0 +1,314 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XLookupColor CH05
+Status
+LookupColor(display, colormap, color_name, exact_def_return, screen_def_return)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+char *color_name = "";
+XColor *exact_def_return = &dummycol;
+XColor *screen_def_return = &dummycol;
+>>EXTERN
+XColor dummycol;
+>>ASSERTION Good A
+A call to xname obtains the exact and closest available RGB
+values for the
+.A colormap
+argument to those specified for the colour named
+.A color_name
+in the database, and stores the exact values in the
+.M red ,
+.M green
+and
+.M blue
+components of the
+.S XColor
+structure named by the
+.A exact_def_return
+argument, and stores the closest available values in the
+.M red ,
+.M green
+and
+.M blue
+components of the
+.S XColor
+structure named by the
+.A screen_def_return
+argument.
+>>STRATEGY
+For each visual class:
+ Create a colourmap with alloc set to AllocNone.
+ Lookup the exact and closest supported rgb values
+ for colour XT_GOOD_COLORNAME with XLookupColor.
+ Verify that the function returned non-zero.
+ Allocate a read/only cell using returned RGB values with XAllocColor
+ (which is assumed to return correct RGB values) .
+ Verify that the RBG values from both calls are identical.
+ (so XLookupColor previously returned correct RGB values)
+>>CODE
+XVisualInfo *vp;
+Status status;
+XColor exactcol, screencol, testcol;
+unsigned long vmask;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ if( (color_name = tet_getvar("XT_GOOD_COLORNAME")) == (char *) 0) {
+ delete("XT_GOOD_COLORNAME is not defined.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ exact_def_return = &exactcol;
+ screen_def_return = &screencol;
+ status = XCALL;
+
+ if( status == (Status) 0) {
+ report("%s failed to return non-zero.", TestName);
+ FAIL;
+ continue;
+ } else
+ CHECK;
+
+ testcol = screencol;
+ trace("Screen: r %u g %u b %u", screencol.red, screencol.green, screencol.blue);
+ trace("Exact : r %u g %u b %u", exactcol.red, exactcol.green, exactcol.blue);
+ trace("Test : r %u g %u b %u", testcol.red, testcol.green, testcol.blue);
+
+ status = XAllocColor(display, colormap, &testcol);
+ if(status == (Status) 0) {
+ report("XAllocColor() failed to return non-zero.");
+ FAIL;
+ continue;
+ } else
+ CHECK;
+
+ trace("Exact : r %u g %u b %u", exactcol.red, exactcol.green, exactcol.blue);
+
+ if((screencol.red != testcol.red) ||
+ (screencol.green != testcol.green) ||
+ (screencol.blue != testcol.blue) ) {
+ report("%s return RGB values r %u g %u b %u instead of r %u g %u b %u.", TestName,
+ screencol.red, screencol.green, screencol.blue,
+ testcol.red, testcol.green, testcol.blue);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(3 * nsupvis());
+
+>>ASSERTION Good A
+Upper and lower case characters in the
+.A color_name
+argument refer to the same colour.
+>>STRATEGY
+For each supported visual type:
+ Create a colomap with alloc set to AllocNone.
+ Look up the rgb value of the colour name XT_GOOD_COLORNAME
+ in the database with XLookupNamedColor.
+ Look up the rbg value of the colour name XT_GOOD_COLORNAME,
+ with alternating characters in alternating case,
+ in the colourmap with XAllocNamedColor.
+ Verify that the function returned non-zero.
+ Verify that the exact and closest supported rbg values from both calls
+ are identical.
+>>CODE
+XVisualInfo *vp;
+char *cp, *goodname, *casename;
+Status status;
+XColor screencol, exactcol, alscreencol, alexactcol;
+unsigned long vmask;
+unsigned short trunc;
+int i;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ if( ( goodname = tet_getvar("XT_GOOD_COLORNAME")) == (char *) 0) {
+ delete("XT_GOOD_COLORNAME is not defined.");
+ return;
+ }
+
+ casename = (char *) malloc( strlen(goodname) + 1);
+ strcpy(casename, goodname);
+
+ for(i=0, cp=casename; *cp; i++)
+ if(i&1)
+ *cp++ = tolower(*cp);
+ else
+ *cp++ = toupper(*cp);
+
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ colormap = makecolmap(display, vp -> visual, AllocNone);
+ color_name = goodname;
+ screen_def_return = &screencol;
+ exact_def_return = &exactcol;
+ status = XCALL;
+
+ if( status == (Status) 0) {
+ report("%s failed to return non-zero with color %s.",
+ TestName, goodname);
+ FAIL;
+ continue;
+ } else
+ CHECK;
+
+ color_name = casename;
+ trace("Testing colourname %s", color_name);
+ screen_def_return = &alscreencol;
+ exact_def_return = &alexactcol;
+ status = XCALL;
+
+ if( status == (Status) 0) {
+ report("%s failed to return non-zero with color %s.",
+ TestName, casename);
+ FAIL;
+ continue;
+ } else
+ CHECK;
+
+ if((exactcol.red != alexactcol.red) ||
+ (exactcol.green != alexactcol.green) ||
+ (exactcol.blue != alexactcol.blue)) {
+ report("%s for name %s", TestName, casename);
+ report("returned exact RGB values r %u g %u b %u",
+ alexactcol.red, alexactcol.green, alexactcol.blue);
+ report("%s for name %s", TestName, goodname);
+ report("returned exact RGB values r %u g %u b %u",
+ exactcol.red, exactcol.green, exactcol.blue);
+ FAIL;
+ } else
+ CHECK;
+
+ if((screencol.red != alscreencol.red) ||
+ (screencol.green != alscreencol.green) ||
+ (screencol.blue != alscreencol.blue)) {
+ report("%s for name %s", TestName, casename);
+ report("returned closest RGB values r %u g %u b %u",
+ alscreencol.red, alscreencol.green, alscreencol.blue);
+ report("%s for name %s", TestName, goodname);
+ report("returned closest RGB values r %u g %u b %u",
+ screencol.red, screencol.green, screencol.blue);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ free(casename);
+ CHECKPASS(4 * nsupvis());
+
+>>ASSERTION Good A
+When the
+.A color_name
+argument refers to a colour in the colour database, then xname
+returns non-zero.
+>>STRATEGY
+For each supported visual class:
+ Create a colormap with XCreateColormap.
+ Lookup the rgb values for XT_GOOD_COLOR_NAME with XLookupColor.
+ Verify that the function returned non-zero.
+>>CODE
+XVisualInfo *vp;
+Status status;
+char *goodname;
+XColor exactcol, screencol;
+unsigned long vmask;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ if( (goodname = tet_getvar("XT_GOOD_COLORNAME")) == (char *) 0) {
+ delete("XT_GOOD_COLORNAME is not defined.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ color_name = goodname;
+ exact_def_return = &exactcol;
+ screen_def_return = &screencol;
+ status = XCALL;
+
+ if( status == (Status) 0) {
+ report("%s failed to return non-zero with color %s.",
+ TestName, goodname);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Good A
+When the
+.A color_name
+argument does not refer to a colour in the colour database, then xname
+returns zero.
+>>STRATEGY
+For each supported visual class:
+ Create a colormap with XCreateColormap.
+ Lookup the rgb values for XT_BAD_COLORNAME with XLookupColor.
+ Verify that the function returned zero.
+>>CODE
+XVisualInfo *vp;
+char *badname;
+Status status;
+XColor exactcol, screencol;
+unsigned long vmask;
+
+ if( (vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ if( (badname = tet_getvar("XT_BAD_COLORNAME")) == (char *) 0) {
+ delete("XT_BAD_COLORNAME is not defined.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ color_name = badname;
+ exact_def_return = &exactcol;
+ screen_def_return = &screencol;
+ status = XCALL;
+
+ if( status != (Status) 0) {
+ report("%s failed to return zero with color %s.",
+ TestName, badname);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>#HISTORY Cal Completed Written in new style and format.
+>>#HISTORY kieron Completed <have a look>
+>>#HISTORY Cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/qrybststpp/qrybststpp.m b/xc/test/xsuite/xtest/tset/CH05/qrybststpp/qrybststpp.m
new file mode 100644
index 000000000..1d25b9e57
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/qrybststpp/qrybststpp.m
@@ -0,0 +1,147 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XQueryBestStipple CH05
+Status
+QueryBestStipple(display, drawable, width, height, rwidth, rheight)
+Display *display = Dsp;
+Drawable drawable;
+unsigned int width;
+unsigned int height;
+unsigned int *rwidth = &bwidth;
+unsigned int *rheight = &bheight;
+>>EXTERN
+unsigned int bwidth, bheight;
+>>ASSERTION Good A
+A call to xname returns the height and width of stipple that are closest to the arguments
+.A height
+and
+.A width
+that can be stippled fastest on the specified screen.
+>>STRATEGY
+Call XQueryBestStipple with width 17 and height 13.
+Verify that XQueryBestStipple returns non zero.
+Call XQueryBestStipple with returned values of width and height.
+Verify that XQueryBestStipple returns non zero.
+Verify that XQueryBestStipple returns the previously returned values
+for width and height.
+Repeat with initial width and height both set to zero.
+>>CODE
+Status qstat;
+
+ drawable = DRW(display);
+
+ width = 17;
+ height = 13;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestStipple returned wrong value %d", qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best width (for 17) = %d",bwidth);
+ trace("Best height (for 13) = %d",bheight);
+
+ width = bwidth;
+ height = bheight;
+
+ bwidth = bheight = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestStipple returned wrong value %d", qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best width (for %d) = %d", width, bwidth);
+ trace("Best height (for %d) = %d", height, bheight);
+
+ if(width != bwidth) {
+ report("XQueryBestStipple returned best width %d", bwidth);
+ report("after previously returning best width %d", width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(height != bheight) {
+ report("XQueryBestStipple returned best height %d", bheight);
+ report("after previously returning best height %d", height);
+ FAIL;
+ } else
+ CHECK;
+
+ width = 0;
+ height = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestStipple returned wrong value %d", qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best width (for 0) = %d",bwidth);
+ trace("Best height (for 0) = %d",bheight);
+
+ width = bwidth;
+ height = bheight;
+
+ bwidth = bheight = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestStipple returned wrong value %d", qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best width (for %d) = %d", width, bwidth);
+ trace("Best height (for %d) = %d", height, bheight);
+
+ if(width != bwidth) {
+ report("XQueryBestStipple returned best width %d", bwidth);
+ report("after previously returning best width %d", width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(height != bheight) {
+ report("XQueryBestStipple returned best height %d", bheight);
+ report("after previously returning best height %d", height);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(8);
+>>ASSERTION Bad A
+.ER Drawable
+>>ASSERTION Bad A
+.ER Match inputonly
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/qrybstsz/qrybstsz.m b/xc/test/xsuite/xtest/tset/CH05/qrybstsz/qrybstsz.m
new file mode 100644
index 000000000..405f161c5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/qrybstsz/qrybstsz.m
@@ -0,0 +1,466 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XQueryBestSize CH05
+Status
+XQueryBestSize(display, class, which_screen, width, height, rwidth, rheight)
+Display *display = Dsp;
+int class;
+Drawable which_screen;
+unsigned int width;
+unsigned int height;
+unsigned int *rwidth = &cwidth;
+unsigned int *rheight = &cheight;
+>>EXTERN
+unsigned int cheight, cwidth;
+>>ASSERTION Good A
+When the
+.A class
+argument is
+.S CursorShape ,
+then a call to xname returns the largest cursor height and width
+that can be fully displayed on the specified screen.
+>>STRATEGY
+Set class to CursorShape.
+Call XQueryBestSize with width 10000 and height 10000.
+Verify that XQueryBestSize returns non zero.
+Call XQueryBestSize with returned values of width and height.
+Verify that XQueryBestSize returns non zero.
+Verify that XQueryBestSize returns the previously returned values
+for width and height.
+Repeat with initial width and height both set to zero.
+>>CODE
+Status qstat;
+
+ which_screen = DRW(display);
+ class = CursorShape;
+
+ width = 10000;
+ height = 10000;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestSize returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ width = cwidth;
+ height = cheight;
+
+ cwidth = cheight = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestSize returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ if(width != cwidth) {
+ report("XQueryBestSize returned best width %d", cwidth);
+ report("after previously returning best width %d", width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(height != cheight) {
+ report("XQueryBestSize returned best height %d", cheight);
+ report("after previously returning best height %d", height);
+ FAIL;
+ } else
+ CHECK;
+
+ width = 0;
+ height = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestSize returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ width = cwidth;
+ height = cheight;
+
+ cwidth = cheight = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestSize returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ if(width != cwidth) {
+ report("XQueryBestSize returned best width %d", cwidth);
+ report("after previously returning best width %d", width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(height != cheight) {
+ report("XQueryBestSize returned best height %d", cheight);
+ report("after previously returning best height %d", height);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(8);
+
+>>ASSERTION Good A
+When the
+.A class
+argument is
+.S TileShape ,
+then a call to xname returns the height and width of tile that are closest to the arguments
+.A height
+and
+.A width
+that can be tiled fastest on the specified screen.
+>>STRATEGY
+Set class to TileShape.
+Call XQueryBestSize with width 10000 and height 10000.
+Verify that XQueryBestSize returns non zero.
+Call XQueryBestSize with returned values of width and height.
+Verify that XQueryBestSize returns non zero.
+Verify that XQueryBestSize returns the previously returned values
+for width and height.
+Repeat with initial width and height both set to zero.
+>>CODE
+Status qstat;
+
+ which_screen = DRW(display);
+ class = TileShape;
+
+ width = 10000;
+ height = 10000;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestSize returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ width = cwidth;
+ height = cheight;
+
+ cwidth = cheight = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestSize returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ if(width != cwidth) {
+ report("XQueryBestSize returned best width %d", cwidth);
+ report("after previously returning best width %d", width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(height != cheight) {
+ report("XQueryBestSize returned best height %d", cheight);
+ report("after previously returning best height %d", height);
+ FAIL;
+ } else
+ CHECK;
+
+ width = 0;
+ height = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestSize returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ width = cwidth;
+ height = cheight;
+
+ cwidth = cheight = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestSize returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ if(width != cwidth) {
+ report("XQueryBestSize returned best width %d", cwidth);
+ report("after previously returning best width %d", width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(height != cheight) {
+ report("XQueryBestSize returned best height %d", cheight);
+ report("after previously returning best height %d", height);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(8);
+
+>>ASSERTION Good A
+When the
+.A class
+argument is
+.S StippleShape ,
+then a call to xname returns the height and width of stipple that are closest to the arguments
+.A height
+and
+.A width
+that can be stippled fastest on the specified screen.
+>>STRATEGY
+Set class to StippleShape.
+Call XQueryBestSize with width 10000 and height 10000.
+Verify that XQueryBestSize returns non zero.
+Call XQueryBestSize with returned values of width and height.
+Verify that XQueryBestSize returns non zero.
+Verify that XQueryBestSize returns the previously returned values
+for width and height.
+Repeat with initial width and height both set to zero.
+>>CODE
+Status qstat;
+
+ which_screen = DRW(display);
+ class = StippleShape;
+
+ width = 10000;
+ height = 10000;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestSize returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ width = cwidth;
+ height = cheight;
+
+ cwidth = cheight = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestSize returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ if(width != cwidth) {
+ report("XQueryBestSize returned best width %d", cwidth);
+ report("after previously returning best width %d", width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(height != cheight) {
+ report("XQueryBestSize returned best height %d", cheight);
+ report("after previously returning best height %d", height);
+ FAIL;
+ } else
+ CHECK;
+
+ width = 0;
+ height = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestSize returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ width = cwidth;
+ height = cheight;
+
+ cwidth = cheight = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestSize returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ if(width != cwidth) {
+ report("XQueryBestSize returned best width %d", cwidth);
+ report("after previously returning best width %d", width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(height != cheight) {
+ report("XQueryBestSize returned best height %d", cheight);
+ report("after previously returning best height %d", height);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(8);
+
+>>ASSERTION Bad A
+When the
+.A class
+argument is
+.S TileShape ,
+and the
+.A which_screen
+argument specifies an
+.S InputOnly
+window, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Set class to TileShape.
+Set which_screen to an InputOnly window.
+Call XQueryBestSize.
+Verify that XQueryBestSize returns zero.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+int qstat;
+
+ which_screen = iponlywin(display);
+ class = TileShape;
+ qstat = XCALL;
+ trace("Status returned is %d", qstat);
+
+ if(qstat == 0)
+ CHECK;
+ else
+ FAIL;
+
+ if(geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+When the
+.A class
+argument is
+.S StippleShape ,
+and the
+.A which_screen
+argument specifies an
+.S InputOnly
+window, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Set class to StippleShape.
+Set which_screen to an InputOnly window.
+Call XQueryBestSize.
+Verify that XQueryBestSize returns zero.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+int qstat;
+
+ which_screen = iponlywin(display);
+ class = StippleShape;
+ qstat = XCALL;
+ trace("Status returned is %d", qstat);
+
+ if(qstat == 0)
+ CHECK;
+ else
+ FAIL;
+
+ if(geterr() == BadMatch)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER Drawable
+>>ASSERTION Bad A
+.ER Value class TileShape CursorShape StippleShape
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/9
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/qrybsttl/qrybsttl.m b/xc/test/xsuite/xtest/tset/CH05/qrybsttl/qrybsttl.m
new file mode 100644
index 000000000..067b84715
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/qrybsttl/qrybsttl.m
@@ -0,0 +1,148 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XQueryBestTile CH05
+Status
+XQueryBestTile(display, drawable, width, height, rwidth, rheight)
+Display *display = Dsp;
+Drawable drawable;
+unsigned int width;
+unsigned int height;
+unsigned int *rwidth = &bwidth;
+unsigned int *rheight = &bheight;
+>>EXTERN
+unsigned int bwidth, bheight;
+>>ASSERTION Good A
+A call to xname returns the height and width of tile that are closest to the arguments
+.A height
+and
+.A width
+that can be tiled fastest on the specified screen.
+>>STRATEGY
+Call XQueryBestTile with width 17 and height 13.
+Verify that XQueryBestTile returns non zero.
+Call XQueryBestTile with returned values of width and height.
+Verify that XQueryBestTile returns non zero.
+Verify that XQueryBestTile returns the previously returned values
+for width and height.
+Repeat with initial width and height both set to zero.
+>>CODE
+Status qstat;
+
+ drawable = DRW(display);
+
+ width = 17;
+ height = 13;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestTile returned wrong value %d", qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best width (for 17) = %d", bwidth);
+ trace("Best height (for 13) = %d", bheight);
+
+ width = bwidth;
+ height = bheight;
+
+ bwidth = bheight = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestTile returned wrong value %d", qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best width (for %d) = %d", width, bwidth);
+ trace("Best height (for %d) = %d", height, bheight);
+
+ if(width != bwidth) {
+ report("XQueryBestTile returned best width %d", bwidth);
+ report("after previously returning best width %d", width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(height != bheight) {
+ report("XQueryBestTile returned best height %d", bheight);
+ report("after previously returning best height %d", height);
+ FAIL;
+ } else
+ CHECK;
+
+ width = 0;
+ height = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestTile returned wrong value %d", qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best width (for 0) = %d", bwidth);
+ trace("Best height (for 0) = %d", bheight);
+
+ width = bwidth;
+ height = bheight;
+
+ bwidth = bheight = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("XQueryBestTile returned wrong value %d", qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best width (for %d) = %d", width, bwidth);
+ trace("Best height (for %d) = %d", height, bheight);
+
+ if(width != bwidth) {
+ report("XQueryBestTile returned best width %d", bwidth);
+ report("after previously returning best width %d", width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(height != bheight) {
+ report("XQueryBestTile returned best height %d", bheight);
+ report("after previously returning best height %d", height);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(8);
+
+>>ASSERTION Bad A
+.ER Drawable
+>>ASSERTION Bad A
+.ER Match inputonly
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/qryclr/qryclr.m b/xc/test/xsuite/xtest/tset/CH05/qryclr/qryclr.m
new file mode 100644
index 000000000..6bd86227e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/qryclr/qryclr.m
@@ -0,0 +1,144 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XQueryColor CH05
+void
+XQueryColor(display, colormap, def_in_out)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+XColor *def_in_out = &dummycol;
+>>EXTERN
+XColor dummycol;
+>>ASSERTION Good A
+A call to xname obtains the RGB
+values of the colourmap entry specified by the
+.M pixel
+component of the
+.S XColor
+structure named by the
+.A def_in_out
+argument ,
+and returns the RGB values in the
+.M red ,
+.M green
+and
+.M blue
+components and sets the
+.M flags
+component to the bitwise OR of
+.S DoRed ,
+.S DoGreen
+and
+.S DoBlue .
+>>STRATEGY
+For each supported visual class:
+ Create a colormap with XCreateColormap with alloc set to AllocNone.
+ Allocate a new r/o colourmap cell with XAllocColor.
+ Obtain the rgb values and flags components with XQueryColor using the pixel returned by XAllocColor.
+ Verify that the returned flags component was set to DORed|DoGreen|DoBlue.
+ Verify that the rgb values are identical to those returned by XAllocColor.
+
+>>CODE
+XVisualInfo *vp;
+XColor qcol, qcolr;
+unsigned long vmask = 0L;
+
+ if((vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ qcol.pixel = ~0L;
+ qcol.red = 0xfefe;
+ qcol.green = 0xefef;
+ qcol.blue = 0xfeef;
+ qcol.flags = 0;
+
+ if (XAllocColor(display, colormap, &qcol) == False) {
+ delete("XAllocColor() failed.");
+ return;
+ } else
+ CHECK;
+
+ qcolr = qcol;
+ def_in_out = &qcol;
+ XCALL;
+
+ if(geterr() == Success)
+ CHECK;
+
+ if(qcol.flags != (DoRed|DoGreen|DoBlue)) {
+ report("XQueryColor() did not set the flags to (DoRed|DoGreen|DoBlue)");
+ FAIL;
+ } else
+ CHECK;
+
+ if((qcol.pixel != qcolr.pixel) || (qcol.red != qcolr.red) || (qcol.green != qcolr.green) || (qcol.blue != qcolr.blue)){
+ report("XQueryColor() returned r %u g %u b %u instead of r %u g %u b %u", qcol.red, qcol.green, qcol.blue, qcolr.red, qcolr.green, qcolr.blue);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(4*nsupvis());
+
+>>ASSERTION Bad A
+.ER BadColor
+>>ASSERTION Bad A
+When the
+.M pixel
+component in the
+.S XColor
+structure named by the
+.A def_in_out
+argument is not a valid entry in the
+.A colormap
+argument,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+For each supported visual class:
+ Create a colormap with XCreateColormap with alloc set to AllocNone.
+ Call XQueryColor with pixel component = -1.
+ Verify that a BadValue error occurs.
+>>CODE BadValue
+XVisualInfo *vp;
+XColor qcol;
+unsigned long vmask;
+
+ if((vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ def_in_out = &qcol;
+ qcol.pixel = ~0L;
+ XCALL;
+ if(geterr() == BadValue)
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+
+>>#HISTORY Cal Completed Written in new style and format.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writting code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/qryclrs/qryclrs.m b/xc/test/xsuite/xtest/tset/CH05/qryclrs/qryclrs.m
new file mode 100644
index 000000000..7be7d3822
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/qryclrs/qryclrs.m
@@ -0,0 +1,180 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XQueryColors CH05
+void
+XQueryColors(display, colormap, defs_in_out, ncolors)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+XColor *defs_in_out = &dummycol;
+int ncolors;
+>>EXTERN
+XColor dummycol;
+>>ASSERTION Good A
+A call to xname obtains the RGB values of the colourmap entries specified by the
+.M pixel
+components of the
+.S XColor
+structures named by the
+.A defs_in_out
+argument, and returns the RGB values in the
+.M red ,
+.M green ,
+and
+.M blue
+components and sets the
+.M flags
+components to the bitwise OR of
+.S DoRed ,
+.S DoGreen ,
+and
+.S DoBlue .
+>>STRATEGY
+For each supported visual class :
+ Create a colormap with XCreateColormap with alloc = AllocNone.
+ Allocate a new r/o colourmap cell with XAllocColor.
+ Obtain the rgb values and flags components with XQueryColors using the pixel returned by XAllocCOlor.
+ Verify that the returned flags component was set to DORed|DoGreen|DoBlue.
+ Verify that the rgb values are identical to those returned by XAllocColor.
+>>CODE
+XVisualInfo *vp;
+XColor *cellptr, *defptr, *refptr, *acptr;
+int size;
+unsigned long i;
+unsigned long vmask = 0L;
+
+ if((vmask = visualsupported(display, vmask)) != 0L)
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ size = vp->colormap_size;
+ if (vp->class == DirectColor)
+ size = maxsize(vp);
+ colormap = makecolmap(display, vp->visual, AllocNone);
+
+ defptr = (XColor *) malloc( size * sizeof(XColor));
+ refptr = (XColor *) malloc( size * sizeof(XColor));
+
+ if( (defptr == (XColor *) 0) || (refptr == (XColor *) 0)) {
+ delete("malloc() failed to allocate space for the colour array.");
+ return;
+ }
+
+ for(i=0, cellptr = defptr; i<size; i++, cellptr++) { /* May or may not allocate the entire colourmap */
+ cellptr->pixel = ~0L;
+ cellptr->red = i<<8;
+ cellptr->green = i<<8;
+ cellptr->blue = i<<8;
+ cellptr->flags = 0;
+
+ if(XAllocColor(display, colormap, cellptr) == False) {
+ delete("XAllocColor() failed.");
+ return;
+ }
+
+ refptr[i] = defptr[i];
+ }
+ if(i == size)
+ CHECK;
+
+ ncolors = size;
+ defs_in_out = defptr;
+ XCALL;
+
+ if(geterr() == Success)
+ for(i=0, cellptr = defptr, acptr = refptr; i<size; i++, cellptr++, acptr++) {
+ if(cellptr->flags != (DoRed|DoGreen|DoBlue)) {
+ report("XQueryColors() did not set the flags of cell %u to (DoRed|DoGreen|DoBlue)", cellptr->pixel);
+ FAIL;
+ }
+
+ if((cellptr->pixel != acptr->pixel) || (cellptr->red != acptr->red) ||
+ (cellptr->green != acptr->green) || (cellptr->blue != acptr->blue)){
+ report("XQueryColors() returned pixel %u r %u g %u b %u instead of pixel %u r %u g %u b %u",
+ cellptr->pixel, cellptr->red, cellptr->green, cellptr->blue,
+ acptr->pixel, acptr->red, acptr->green, acptr->blue);
+ FAIL;
+ }
+ }
+ else
+ FAIL;
+
+ if(i == size)
+ CHECK;
+
+ free(defptr);
+ free(refptr);
+ }
+
+ CHECKPASS(2*nsupvis());
+
+>>ASSERTION Bad A
+.ER BadColor
+>>ASSERTION Good A
+When the
+.M pixel
+component in one or more of the
+.A ncolors
+.S XColor
+structures named by the
+.A defs_in_out
+argument is not a valid entry in the
+.A colormap
+argument,
+then a
+.S BadValue
+error occurs which will report any one of the
+invalid pixel values.
+>>STRATEGY
+For each supported visual class:
+ Create a colormap with XCreateColormap with alloc set to AllocNone.
+ Allocate a r/o colormap cell with XAllocColor.
+ Call XQueryColors with pixel array comprising pixel components 0L, -1L, -2L.
+ Verify that a BadValue error occurs.
+ Verify that the reported BadValue was either -1 or -2.
+>>CODE BadValue
+XVisualInfo *vp;
+XColor tcol;
+XColor qcol[3];
+unsigned long vmask;
+
+ if((vmask = visualsupported(display, 0L)) == 0L) {
+ delete("No visuals reported as valid.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ XAllocColor(display, colormap, &tcol);
+ defs_in_out = qcol;
+ qcol[0].pixel = tcol.pixel;
+ qcol[1].pixel = (unsigned long)-1L;
+ qcol[2].pixel = (unsigned long)-2L;
+ ncolors = 3;
+ XCALL;
+ if(geterr() == BadValue) {
+ if((getbadvalue() != (unsigned long)-1) && (getbadvalue() != (unsigned long)-2)) {
+ report("BadValue reported was neither -1 or -2");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ }
+
+ CHECKPASS(nsupvis());
+
+>>#HISTORY Cal Completed Written in new style and format.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writting code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/starcmd/starcmd.m b/xc/test/xsuite/xtest/tset/CH05/starcmd/starcmd.m
new file mode 100644
index 000000000..d0361a34d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/starcmd/starcmd.m
@@ -0,0 +1,85 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetArcMode CH05
+void
+XSetArcMode(display, gc, arc_mode)
+Display *display = Dsp;
+GC gc;
+int arc_mode = ArcChord;
+>>SET need-gc-flush
+>>ASSERTION Good A
+A call to xname sets the
+.M arc_mode
+component of the specified GC to that specified by the
+.A arc_mode
+argument.
+>>STRATEGY
+Create window.
+Create GC with arc_mode = ArcPieSlice, fill_style = FillSolid, fg = WhitePixel, bg = BlackPixel.
+Draw a filled arc from 270 to 90 using XFillArc.
+Verify (arc origin-1, arc origin-1) is set to bg.
+Set arc_mode to ArcChord with XSetArcMode.
+Draw a filled arc from 270 to 90 using XFillArc.
+Verify (arc origin-1, arc origin-1) is set to fg.
+>>CODE
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+struct area ar;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.arc_mode = ArcPieSlice;
+ values.fill_style = FillSolid;
+
+ gc = XCreateGC(display, win, GCForeground | GCBackground | GCArcMode | GCFillStyle, &values);
+
+ XFillArc(display, win, gc, 0, 0, 40, 40, 90*64, -270*64);
+
+ if( ! checkpixel(display, win, 19, 19, W_BG) ) {
+ report("Pixel at (19, 19) was not set to background.");
+ return;
+ } else
+ CHECK;
+
+ arc_mode = ArcChord;
+ XCALL;
+
+ XFillArc(display, win, gc, 0, 0, 40, 40, 90* 64, - 270 * 64);
+
+ if( ! checkpixel(display, win, 19, 19, W_FG) ) {
+ report("Pixel at (19, 19) was not set to foreground.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>>ASSERTION Bad A
+.ER Value arc_mode ArcChord ArcPieSlice
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/stbg/stbg.m b/xc/test/xsuite/xtest/tset/CH05/stbg/stbg.m
new file mode 100644
index 000000000..22fd1af56
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stbg/stbg.m
@@ -0,0 +1,83 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetBackground CH05
+void
+XSetBackground(display, gc, pixel)
+Display *display = Dsp;
+GC gc;
+unsigned long pixel = 0; /* Explicitly different from the default value to force a gc flush */
+>>SET need-gc-flush
+>>ASSERTION Good A
+The xname function sets the
+.M background
+component of the specified
+GC to the pixel value supplied in the
+.A background
+argument.
+>>STRATEGY
+Create window.
+Create GC with LineStyle = LineDoubleDash, bg = BlackPixel , fg = WhitePixel, fn = GXcopy, LineWidth = 1
+Draw a horizonal line (sufficiently long for even and odd dashes)
+Verify pixel at (1, 0) is bg with XGetImage and XGetPixel.
+Set gc bg component to fg value using XSetBackground.
+Redraw same line (should fill in the gaps exactly)
+Verify pixel at (1, 0) is fg with XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+XGCValues values;
+Window win;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ values.function = GXcopy;
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.line_style = LineDoubleDash;
+ values.dashes = 1; /* [1, 1] */
+ values.line_width = 1;
+ gc = XCreateGC(display, win, (GCFunction | GCLineStyle | GCDashList | GCForeground | GCBackground | GCLineWidth), &values);
+
+ XDrawLine(display, win, gc, 0, 0, 2, 0);
+
+ if( ! checkpixel(display, win, 1, 0, W_BG)){
+ delete("Pixel at (1, 0) was not set to background.");
+ return;
+ } else
+ CHECK;
+
+ pixel = W_FG;
+ XCALL;
+
+ XDrawLine(display, win, gc, 0, 0, 2, 0);
+ if( ! checkpixel(display, win, 1, 0, W_FG)){
+ report("Pixel at (1, 0) was not set to foreground.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>># HISTORY steve Completed Written in old format and style
+>># HISTORY cal Completed New format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/stclpmsk/stclpmsk.m b/xc/test/xsuite/xtest/tset/CH05/stclpmsk/stclpmsk.m
new file mode 100644
index 000000000..4bd244e73
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stclpmsk/stclpmsk.m
@@ -0,0 +1,277 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetClipMask CH05
+void
+XSetClipMask(display, gc, pixmap)
+Display *display = Dsp;
+GC gc;
+Pixmap pixmap;
+>>ASSERTION Good A
+A call to xname sets the
+.M clip_mask
+component of the specified GC to the value of the
+.A pixmap
+argument.
+>>STRATEGY
+Create window, size W_STDWIDTHxW_STDHEIGHT (>=1x1), with
+ bg = background_pixel = W_BG.
+Create 1x1 pixmap.
+Set pixel at (0,0) in pixmap to 0.
+Create GC with fg = W_FG.
+Set clip_mask = pixmap with XSetClipMask
+ (Note, no drawing in pixmap after XSetClipMask() call as effect on
+ subsequent clipping is undefined).
+Set pixel at (0,0) to fg with XDrawPoint.
+Verify pixel at (0,0) is bg using XGetImage and XGetPixel.
+Create another 1x1 pixmap.
+Set pixel at (0,0) in pixmap to 1.
+Set clip_mask = pixmap with XSetClipMask.
+Set pixel at (0,0) to fg with XDrawPoint.
+Verify pixel at (0,0) is fg using XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+Pixmap pmap;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp); /* background_pixel = W_BG */
+ pmap = XCreatePixmap( display, win, 1, 1, 1);
+
+ values.foreground = W_FG;
+
+ gc = XCreateGC(display, win, GCForeground, &values);
+
+ dset(display, pmap, 0);
+
+ pixmap = pmap;
+ XCALL;
+
+ XDrawPoint(display,win,gc,0,0);
+
+ if( ! checkpixel(display, win, 0,0, W_BG)) {
+ delete("Pixel at (0,0) was not set to background.");
+ return;
+ } else
+ CHECK;
+
+ XFreePixmap(display, pmap);
+
+ pmap = XCreatePixmap( display, win, 1, 1, 1);
+
+ dset(display, pmap, 1);
+
+ pixmap = pmap;
+ XCALL;
+
+ XDrawPoint(display,win,gc,0,0);
+
+ if( ! checkpixel(display, win, 0,0, W_FG)) {
+ report("Pixel at (0,0) was not set to foreground.");
+ FAIL;
+ } else
+ CHECK;
+
+ XFreePixmap(display, pmap);
+ XFreeGC(display, gc);
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the
+.A pixmap
+argument is
+.S None ,
+then the
+.M clip_mask
+component of the specified
+.A gc
+has no effect on any subsequent graphics operation.
+>>STRATEGY
+Create window.
+Create pixmap of window dimensions.
+Create GC with clip_mask = pixmap.
+Fill part of pixmap with {1,} using XFillRectangle.
+Fill window using XFillRectangle.
+Verify that pixels inside/outside clipping region are set to fg/bg.
+Set the clip_mask to None with XSetClipMask.
+Fill window using XFillRectangle.
+Verify that pixels are set to fg.
+>>CODE
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+Pixmap pmap;
+GC pgc;
+struct area ar;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp); /* background_pixel = W_BG */
+
+ pmap = XCreatePixmap( display, win, W_STDWIDTH, W_STDHEIGHT,1);
+
+ dset(display, pmap, 0);
+ values.foreground = 1;
+ pgc = XCreateGC(display, pmap, GCForeground, &values);
+ XFillRectangle(display, pmap, pgc, 0,0, W_STDWIDTH/2,W_STDHEIGHT/2);
+
+ values.foreground = W_FG;
+ values.clip_mask = pmap;
+ gc = XCreateGC(display, win, GCForeground | GCClipMask, &values);
+ XFillRectangle(display, win, gc, 0,0, W_STDWIDTH, W_STDHEIGHT);
+
+
+ ar.x = ar.y = 0;
+ ar.width = W_STDWIDTH / 2;
+ ar.height = W_STDHEIGHT / 2;
+
+ if( checkarea(display, win, &ar, W_FG, W_BG, 0) == False) {
+ delete("check area failed - clipping is wrong.");
+ return;
+ } else
+ CHECK;
+
+ pixmap = None;
+ XCALL;
+
+ XFillRectangle(display, win, gc, 0,0, W_STDWIDTH, W_STDHEIGHT);
+
+ if( checkarea(display, win, (struct area *) 0, W_FG, W_BG, CHECK_IN) == False) {
+ report("Window was clipped with clip_mask = None.");
+ FAIL;
+ } else
+ CHECK;
+
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>>ASSERTION Bad A
+When the
+.A pixmap
+argument is a pixmap and the
+.A gc
+and
+.A pixmap
+arguments were not created for the same root, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If alternate root window is supported:
+ Create a pixmap(#1) of depth 1 for one root.
+ Create a pixmap(#2) of depth 1 for alternate root.
+ Created a gc for alternate root using pixmap #2.
+ Verify that a call to XSetClipMask generates a BadMatch error
+ when attempting to set gc's clip_mask to pixmap #1.
+>>CODE BadMatch
+XVisualInfo vi;
+Pixmap errpm;
+char *altroot;
+int scr_num;
+
+ altroot = tet_getvar("XT_ALT_SCREEN");
+ if (altroot == NULL) {
+ delete("XT_ALT_SCREEN not set");
+ return;
+ }
+ if (*altroot == 'U') {
+ report("Only one root window supported");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ scr_num = atoi(altroot);
+ if (scr_num == DefaultScreen(display)) {
+ delete("The alternate root window was the same as the one under test");
+ return;
+ }
+ if (scr_num >= ScreenCount(display)) {
+ delete("Screen given in XT_ALT_SCREEN could not be accessed");
+ return;
+ }
+
+ vi.visual = NULL;
+ vi.screen = DefaultScreen(display);
+ vi.depth = 1;
+ pixmap = makepixm(display, &vi);
+
+ errpm = XCreatePixmap(display, RootWindow(display, scr_num), 1, 1, 1);
+ A_GC = makegc(display, errpm);
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+ XFreePixmap(display, errpm);
+
+>>ASSERTION Bad A
+When the
+.A pixmap
+argument does not have depth 1, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If pixmap with depth other than one is supported:
+ Create pixmap with depth other than one.
+ Created gc using same root as pixmap.
+ Verify that a call to XSetClipMask generates a BadMatch error.
+>>CODE BadMatch
+
+ if((pixmap = nondepth1pixmap(display, DRW(display))) == (Pixmap) 0) {
+ report("Only depth 1 pixmaps are supported.");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ gc = XCreateGC(display, DRW(display), 0L, 0);
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+ XFreeGC(display, gc);
+
+>>ASSERTION Bad A
+.ER Pixmap
+>># DOUBT kieron Doc. has .ER BadValue as an assertion but I can't
+>># see how it can be generated with only two possibilities
+>># for error which are both already covered
+>># (naff gc -> BadGC and naff pixmap -> BadPixmap).
+>># Perhaps the BadValue could come from a previous
+>># XSet.... call that was elided with this into a
+>># single Change GC request by Xlib. In that case
+>># why doesn't XSetFont have .ER BadValue as an assertion?
+>># How much note should be taken of elision/caching
+>># and how tested, if at all?
+>># RESOLVED kieron BadValue not possible.
+>>#
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Completed Writing code.
+>># HISTORY kieron Completed checking, spot undefined ops. - 21/02/91
diff --git a/xc/test/xsuite/xtest/tset/CH05/stclporgn/stclporgn.m b/xc/test/xsuite/xtest/tset/CH05/stclporgn/stclporgn.m
new file mode 100644
index 000000000..ca41375f2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stclporgn/stclporgn.m
@@ -0,0 +1,95 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetClipOrigin CH05
+void
+XSetClipOrigin(display, gc, clip_x_origin, clip_y_origin)
+Display *display = Dsp;
+GC gc;
+int clip_x_origin = -1;
+int clip_y_origin = -1;
+>>SET need-gc-flush
+>>ASSERTION Good A
+A call to xname sets the
+.M clip_x_origin
+and
+.M clip_y_origin
+components of the specified GC to the values of the
+.A clip_x_origin
+and
+.A clip_y_origin
+arguments.
+>>STRATEGY
+Create window.
+Create 1x1 pixmap.
+Create GC with clip_origin = (0,0), clip_mask = pixmap, bg = BlackPixel, fg = WhitePixel.
+Set pixel at (2,2) to fg with XDrawPoint.
+Verify pixel at (2,2) is bg using XGetImage and XGetPixel.
+Set clip_origin to (2,2) with XSetClipOrigin.
+Set pixel at (2,2) to fg with XDrawPoint.
+Verify pixel at (2,2) is fg using XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+Pixmap pmap;
+GC pgc;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ pmap = XCreatePixmap( display, win, 1, 1, 1);
+
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.clip_mask = pmap;
+ values.clip_x_origin = 0;
+ values.clip_y_origin = 0;
+
+ pgc = XCreateGC(display, pmap, GCForeground | GCBackground, &values);
+ XFillRectangle(display, pmap, pgc, 0,0, 1,1);
+
+ gc = XCreateGC(display, win, GCForeground | GCBackground | GCClipMask | GCClipXOrigin | GCClipYOrigin, &values);
+ XDrawPoint(display,win,gc,2,2);
+
+ if( ! checkpixel(display, win, 2, 2, W_BG)) {
+ delete("Pixel at (2,2) was not set to background.");
+ return;
+ } else
+ CHECK;
+
+ clip_x_origin = 2;
+ clip_y_origin = 2;
+ XCALL;
+
+ XDrawPoint(display,win,gc,2,2);
+
+ if( ! checkpixel(display, win, 2, 2, W_FG)) {
+ report("Pixel at (2,2) was not set to foreground.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/stclprctng/stclprctng.m b/xc/test/xsuite/xtest/tset/CH05/stclprctng/stclprctng.m
new file mode 100644
index 000000000..da460d30a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stclprctng/stclprctng.m
@@ -0,0 +1,420 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetClipRectangles CH05
+void
+XSetClipRectangles(display, gc, clip_x_origin, clip_y_origin, rectangles, n, ordering)
+Display *display = Dsp;
+GC gc;
+int clip_x_origin = 1;
+int clip_y_origin = 1;
+XRectangle *rectangles = &crect;
+int n = 1;
+int ordering = Unsorted;
+>>EXTERN
+XRectangle crect;
+
+int
+bad_orderA(order_arg)
+int order_arg;
+{
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+XRectangle drects[2];
+int i, j;
+int pass = 0, fail = 0;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ win = makewin(display, vp);
+ values.foreground = W_FG;
+ values.background = W_BG;
+
+
+ drects[0].x = 0;
+ drects[0].y = 10;
+ drects[0].width = drects[0].height = 5;
+
+ drects[1].x = 10;
+ drects[1].y = 5;
+ drects[1].width = drects[1].height = 5;
+
+ gc = XCreateGC(display, win, GCForeground | GCBackground, &values);
+
+
+ rectangles = drects;
+ n = 2;
+ ordering = order_arg;
+
+ /*
+ * XCALL can't be used at the moment -
+ * it expects geterr() to have one correct return type.
+ */
+
+ startcall(Dsp);
+
+ if (isdeleted()) {
+ return;
+ }
+ XSetClipRectangles(display, gc, clip_x_origin, clip_y_origin, rectangles, n, ordering);
+
+ endcall(Dsp);
+
+ if (geterr() == BadMatch) {
+ trace("XSetClipRectangles returned BadMatch error.");
+ CHECK;
+ } else if (geterr() == Success) {
+ trace("XSetClipRectangles did not return an error.");
+ CHECK;
+ } else {
+ report("Got %s, Expecting BadMatch or Success.", errorname(geterr()));
+ FAIL;
+ }
+ return(pass);
+}
+
+int
+bad_orderB(order_arg)
+int order_arg;
+{
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+XRectangle drects[3];
+int i, j;
+int pass = 0, fail = 0;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ values.foreground = W_FG;
+ values.background = W_BG;
+
+
+ drects[0].x = 20;
+ drects[0].y = 5;
+ drects[0].width = drects[0].height = 5;
+
+ drects[1].x = 10;
+ drects[1].y = 5;
+ drects[1].width = drects[1].height = 5;
+
+ gc = XCreateGC(display, win, GCForeground | GCBackground, &values);
+
+ rectangles = drects;
+ n = 2;
+ ordering = order_arg;
+
+ /*
+ * XCALL can't be used at the moment -
+ * it expects geterr() to have one correct return type.
+ */
+
+ startcall(Dsp);
+
+ if (isdeleted()) {
+ return;
+ }
+ XSetClipRectangles(display, gc, clip_x_origin, clip_y_origin, rectangles, n, ordering);
+
+ endcall(Dsp);
+
+ if (geterr() == BadMatch) {
+ trace("XSetClipRectangles returned BadMatch error.");
+ CHECK;
+ } else if (geterr() == Success) {
+ trace("XSetClipRectangles did not return an error.");
+ CHECK;
+ } else {
+ report("Got %s, Expecting BadMatch or Success.", errorname(geterr()));
+ FAIL;
+ }
+ return(pass);
+}
+
+int
+bad_orderC(order_arg)
+int order_arg;
+{
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+XRectangle drects[3];
+int i, j;
+int pass = 0, fail = 0;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ values.foreground = W_FG;
+ values.background = W_BG;
+
+
+ drects[0].x = 20;
+ drects[0].y = 5;
+ drects[0].width = drects[0].height = 5;
+
+ drects[1].x = 30;
+ drects[1].y = 5;
+ drects[1].width = drects[1].height = 4;
+
+ gc = XCreateGC(display, win, GCForeground | GCBackground, &values);
+
+ rectangles = drects;
+ n = 2;
+ ordering = order_arg;
+
+ /*
+ * XCALL can't be used at the moment -
+ * it expects geterr() to have one correct return type.
+ */
+
+ startcall(Dsp);
+
+ if (isdeleted()) {
+ return;
+ }
+ XSetClipRectangles(display, gc, clip_x_origin, clip_y_origin, rectangles, n, ordering);
+
+ endcall(Dsp);
+
+ if (geterr() == BadMatch) {
+ trace("XSetClipRectangles returned BadMatch error.");
+ CHECK;
+ } else if (geterr() == Success) {
+ trace("XSetClipRectangles did not return an error.");
+ CHECK;
+ } else {
+ report("Got %s, Expecting BadMatch or Success.", errorname(geterr()));
+ FAIL;
+ }
+ return(pass);
+}
+
+>>ASSERTION Good A
+A call to xname sets the
+.M clip_mask
+component of the specified GC to the specified list of rectangles
+and sets the
+.M clip_x_origin
+and
+.M clip_y_origin
+components of the specified GC to the arguments
+.A clip_x_origin
+and
+.A clip_y_origin .
+>>STRATEGY
+Create window.
+Create GC bg = BlackPixel, fg = WhitePixel, fn = GXxor.
+Set pixel at (0, 0) to fg with XDrawPoint.
+Verify Pixel at (0, 0) is fg with XGetimage and GetPixel.
+Set clip mask to rectangle (1, 1) (2, 2) with XSetClipRectangles.
+Set Pixel at (2, 2) with XDrawPoint.
+Verify Pixel at (2, 2) is fg with XGetimage and GetPixel.
+Set pixel at (0, 0) to bg with XDrawPoint.
+Verify Pixel at (0, 0) is fg with XGetimage and GetPixel.
+>>CODE
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.function = GXxor;
+
+ gc = XCreateGC(display, win, GCForeground | GCBackground | GCFunction, &values);
+
+ XDrawPoint(display, win, gc, 0, 0);
+
+ if( ! checkpixel(display, win, 0, 0, W_FG)) {
+ delete("Pixel at (0, 0) was not set to foreground.");
+ return;
+ } else
+ CHECK;
+
+ crect.x = crect.y = 1;
+ crect.width = crect.height = 1;
+
+ XCALL;
+
+ XDrawPoint(display, win, gc, 2, 2);
+
+ if( ! checkpixel(display, win, 2, 2, W_FG)) {
+ delete("Pixel at (2, 2) was not set to foreground.");
+ return;
+ } else
+ CHECK;
+
+ XDrawPoint(display, win, gc, 0, 0);
+
+ if( ! checkpixel(display, win, 0, 0, W_FG)) {
+ report("Pixel at (0, 0) was not left as foreground.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good B 1
+When two or more of the
+.A rectangles
+intersect, then no error occurs.
+>>ASSERTION Good A
+When the number of rectangles specified by the argument
+.A n
+is zero, then the
+.M clip_mask
+component of the specified
+.A gc
+is set to disable output on any subsequent graphics operation.
+>>STRATEGY
+For all supported visuals:
+ Create a window
+ Verify that every window pixel is not set.
+ Call XSetClipRectangles with a meaningful rectangle and n=0;
+ Verify that every window pixel cannot be set.
+>>CODE
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+GC pgc;
+int i, j;
+
+ values.foreground = W_FG;
+ values.background = W_BG;
+
+ crect.x = 0;
+ crect.y = 0;
+ crect.width = 10;
+ crect.height = 20;
+
+ for(resetvinf(VI_WIN); nextvinf(&vp); ) {
+ win = makewin(display, vp);
+ gc = XCreateGC(display, win, GCForeground | GCBackground, &values);
+
+ if( checkarea(display, win, (struct area *) 0, W_BG, 0L, 0) == False) {
+ delete("Window contents were not initialised.");
+ return;
+ } else
+ CHECK;
+
+ n = 0;
+ XCALL;
+
+ for(j=0; j<W_STDHEIGHT; j++)
+ for(i=0; i< W_STDWIDTH; i++)
+ XDrawPoint(display, win, gc, i, j);
+
+ if( checkarea(display, win, (struct area *) 0, W_BG, 0L, 0) == False) {
+ report("Drawing was not disabled.");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2 * nvinf());
+
+>>ASSERTION Good A
+When the
+.A ordering
+argument is
+.S YSorted ,
+and the specified list of rectangles is not non-decreasing in the Y origin,
+then either a
+.S BadMatch
+error occurs or no error occurs.
+>>STRATEGY
+Create list of rectangles decreasing in Y origin.
+Call XSetClipRectangles.
+Verify that if an error occurs it is a BadMatch error.
+>>CODE
+
+ if(bad_orderA(YSorted) == 1)
+ PASS;
+
+>>ASSERTION Good A
+When the
+.A ordering
+argument is
+.S YXSorted
+and the specified list of rectangles is either not non-decreasing in
+the Y origin
+or rectangles with the same Y origin are not
+non-decreasing in the X origin,
+then either a
+.S BadMatch
+error occurs or no error occurs.
+>>STRATEGY
+Create list of rectangles decreasing in Y origin.
+Call XSetClipRectangles.
+Verify that if an error occurs it is a BadMatch error.
+Create list of rectangles with
+same Y origin and height and decreasing in X origin.
+Call XSetClipRectangles.
+Verify that if an error occurs it is a BadMatch error.
+>>CODE
+
+ if(bad_orderA(YXSorted) == 1 &&
+ bad_orderB(YXSorted) == 1)
+ PASS;
+
+>>ASSERTION Good A
+When the
+.A ordering
+argument is
+.S YXBanded
+and the specified list of rectangles is either not non-decreasing in
+the Y origin
+or rectangles with the same Y origin are not
+non-decreasing in the X origin
+or there is a Y scanline included by
+rectangles with different Y origins or extents,
+then either a
+.S BadMatch
+error occurs or no error occurs.
+>>STRATEGY
+Create list of rectangles decreasing in Y origin.
+Call XSetClipRectangles.
+Verify that if an error occurs it is a BadMatch error.
+Create list of rectangles with
+same Y origin and height and decreasing in X origin.
+Call XSetClipRectangles.
+Verify that if an error occurs it is a BadMatch error.
+Create list of rectangles with same Y origin and increasing X
+origin and differing extents.
+Call XSetClipRectangles.
+Verify that if an error occurs it is a BadMatch error.
+>>CODE
+
+ if(bad_orderA(YXBanded) == 1 &&
+ bad_orderB(YXBanded) == 1 &&
+ bad_orderC(YXBanded) == 1)
+ PASS;
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>>ASSERTION Bad A
+.ER Value ordering Unsorted YSorted YXSorted YXBanded
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/stdshs/stdshs.m b/xc/test/xsuite/xtest/tset/CH05/stdshs/stdshs.m
new file mode 100644
index 000000000..ad70f2cfc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stdshs/stdshs.m
@@ -0,0 +1,268 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetDashes CH05
+void
+XSetDashes(display, gc, dash_offset, dash_list, n)
+Display *display = Dsp;
+GC gc;
+int dash_offset;
+char *dash_list = dashes;
+int n = sizeof(dashes)/sizeof(char);
+>>EXTERN
+char dashes[] = { 2, 1};
+char odashes[] = {1, 3, 2};
+char edashes[] = {1, 3, 2, 1, 3, 2};
+char errdashes[] = {1, 0, 1};
+>>SET need-gc-flush
+>>ASSERTION Good A
+A call to xname sets the
+.M dash_offset
+and
+.M dash_list
+attributes for dashed line styles
+in the specified GC to the values of the
+.A dash_offset
+and
+.A dash_list
+arguments.
+>>STRATEGY
+Create Window.
+Create GC with dashes component = 1 , LineStyle = LineDoubleDash, fg = WhitePixel, bg = BlackPixel.
+Set pixel at (1, 0) with XDrawPoint.
+Draw line from (0, 0) to (2, 0) with XDrawLines.
+Verify pixel at (1, 0) is bg using XGetImage and XGetpixel.
+Set dashes component of GC to [2, 1] with XSetDashes.
+Draw line from (0, 0) to (2, 0) using XDrawLine.
+Verify pixel at (1, 0) is fg using XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+XGCValues values;
+GC gc;
+Window win;
+int twidth;
+
+ for(twidth = 0; twidth < 2; twidth++) {
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.line_style = LineDoubleDash;
+ values.line_width = twidth;
+ values.dashes = 1; /* [1, 1] */
+
+
+ gc = XCreateGC(display, win, (GCLineWidth |GCLineStyle | GCDashList | GCForeground | GCBackground), &values);
+
+ XDrawPoint(display, win, gc, 1, 0);
+ XDrawLine(display, win, gc, 0, 0, 2, 0);
+
+ if( ! checkpixel(display, win, 1, 0, W_BG)) {
+ delete("Pixel at (1, 0) was not set to background (width %d)", twidth);
+ return;
+ } else
+ CHECK;
+
+ dash_offset = 0;
+ dash_list= dashes;
+ n = sizeof(dashes)/sizeof(char);
+ XCALL;
+
+ XDrawLine(display, win, gc, 0, 0, 2, 0);
+
+ if( ! checkpixel(display, win, 1, 0, W_FG)) {
+ report("Pixel at (1, 0) was not set to foreground (width %d)", twidth);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+The initial and alternate elements of the
+.A dash_list
+argument specify the lengths of the even dashes and
+the second and alternate elements specify the lengths of the odd dashes.
+>>STRATEGY
+For zero width and non-zero width lines:
+ Create GC with line_style = LineDoubleDashed.
+ Set dashes component of GC to [2, 1] with XSetDashes.
+ Draw horizontal line from (0, 0) to (4, 0) using XDrawLine.
+ Verify pixels at (0, 0) and (1, 0) are fg using XGetImage and XGetPixel.
+ Verify pixel at (2, 0) is bg using XGetImage and XGetPixel.
+ Verify pixel at (3, 0) is fg using XGetImage and XGetPixel.
+ Draw vertical line from (0, 1) to (0, 5) using XDrawLine.
+ Verify pixels at (0, 1) and (0, 2) are fg using XGetImage and XGetPixel.
+ Verify pixel at (0, 3) is bg using XGetImage and XGetPixel.
+ Verify pixel at (0, 4) is fg using XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+GC gc;
+XGCValues values;
+Window win;
+int twidth;
+
+
+ for(twidth=0; twidth < 2; twidth++) {
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.line_style = LineDoubleDash;
+ values.line_width = twidth;
+
+ gc = XCreateGC(display, win, (GCLineWidth | GCLineStyle | GCForeground | GCBackground ), &values);
+
+ dash_offset = 0;
+ dash_list = dashes;
+ n = sizeof(dashes)/sizeof(char);
+
+ XCALL;
+
+ XDrawLine(display, win, gc, 0, 0, 4, 0);
+
+ if( (checkpixels(display, win, 0, 0, 1, 0, 2, W_FG) == True) &&
+ (checkpixel(display, win, 2, 0, W_BG) == True) &&
+ (checkpixel(display, win, 3, 0, W_FG) == True) )
+ CHECK;
+ else {
+ report("Horizontal dashing incorrect for width %d.", twidth);
+ FAIL;
+ }
+
+ XDrawLine(display, win, gc, 0, 1, 0, 5);
+
+ if( (checkpixels(display, win, 0, 1, 0, 1, 2, W_FG) == True) &&
+ (checkpixel(display, win, 0, 3, W_BG) == True) &&
+ (checkpixel(display, win, 0, 4, W_FG) == True) )
+ CHECK;
+ else {
+ report("Vertical dashing incorrect for width %d.", twidth);
+ FAIL;
+ }
+
+ }
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When an odd-length list is specified, then it is
+concatenated with itself to produce an even-length list.
+>>STRATEGY
+Create GC with line_style = LineDoubleDashed.
+Set dashes component of GC to [1, 3, 2] with XSetDashes.
+Draw horizontal line from (0, 0) to (10, 0) using XDrawLine.
+Set dashes component of GC to [1, 3, 2, 1, 3, 2] with XSetDashes.
+Draw horizontal line from (0, 1) to (10, 1) using XDrawLine.
+Verify that the two lines are identical using XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+XGCValues values;
+XImage *image;
+Window win;
+int i;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.line_style = LineDoubleDash;
+ gc = XCreateGC(display, win, (GCLineStyle | GCForeground | GCBackground), &values);
+
+ dash_offset = 0;
+ dash_list = odashes;
+ n = sizeof(odashes)/sizeof(char);
+ XCALL;
+
+ XDrawLine(display, win, gc, 0, 0, 10, 0);
+
+
+ dash_offset = 0;
+ dash_list = edashes;
+ n = sizeof(edashes)/sizeof(char);
+ XCALL;
+
+ XDrawLine(display, win, gc, 0, 1, 10, 1);
+
+ image = XGetImage(display, win, 0, 0, 10, 2, AllPlanes, ZPixmap);
+
+ for(i=0; i<10; i++)
+ if(XGetPixel(image, i, 0) != XGetPixel(image, i, 1)) {
+ report("Pixel at (%d,0) was not the same as pixel at (%d,1).", i, i);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(10);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>>ASSERTION Bad A
+When the specified dash list is empty, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Call XSetDashes with dash_list set to NULL and n set to 0.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ gc = XCreateGC(display, DRW(display), 0L, (XGCValues*) 0);
+
+ dash_offset = 0;
+ dash_list = (char *)NULL;
+ n = 0;
+ XCALL;
+
+ if(geterr() == BadValue)
+ PASS;
+ else
+ FAIL;
+
+>>ASSERTION Bad A
+When an element of the dash list is 0, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set dashes component of GC to [1, 0, 1] with XSetDashes.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+int screen;
+GC gc;
+
+ screen = DefaultScreen(display);
+ gc = XCreateGC(display, RootWindow(display, screen), 0L, (XGCValues*) 0);
+ dash_offset = 0;
+ dash_list = errdashes;
+ n = sizeof(errdashes)/sizeof(char);
+ XCALL;
+
+ if(geterr() == BadValue)
+ PASS;
+ else
+ FAIL;
+
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/stfllrl/stfllrl.m b/xc/test/xsuite/xtest/tset/CH05/stfllrl/stfllrl.m
new file mode 100644
index 000000000..387befca6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stfllrl/stfllrl.m
@@ -0,0 +1,87 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetFillRule CH05
+void
+XSetFillRule(display, gc, fill_rule)
+Display *display = Dsp;
+GC gc;
+int fill_rule = WindingRule;
+>>SET need-gc-flush
+>>ASSERTION Good A
+A call to xname sets the
+.M fill_rule
+component of the specified GC to the value of the
+.A fill_rule
+argument.
+>>STRATEGY
+Create a Window.
+Create GC with fill_rule = EvenOddRule, bg = BlackPixel, fg = WhitePixel.
+Draw (complex) polygon (0,0), (0,1) , (1,1), (1,0, (0,0) , (0,1) , (1,1) , (1,0) using XFillPolygon.
+Verify that pixel (0,0) is bg using XGetImage and XGetPixel.
+Set fill_rule component of GC to WindingRule using XSetFillRule.
+Draw (complex) polygon (0,0), (0,1) , (1,1), (1,0, (0,0) , (0,1) , (1,1) , (1,0) using XFillPolygon.
+Verify that pixel (0,0) is fg using XGetImage and XGetPixel.
+>>EXTERN
+XPoint poly[] = { {0,0} , {0,1}, {1,1}, {1,0}, {0,0}, {0,1}, {1,1}, {1,0} };
+>>CODE
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+Pixmap stip;
+GC sgc;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.fill_rule = EvenOddRule;
+
+ gc = XCreateGC(display, win, GCForeground | GCBackground | GCFillRule, &values);
+
+ XFillPolygon(display, win, gc, poly, sizeof(poly) / sizeof(XPoint), Complex, CoordModeOrigin);
+
+ if( ! checkpixel(display, win, 0, 0, W_BG)) {
+ delete("Pixel at (0, 0) was not set to background.");
+ return;
+ } else
+ CHECK;
+
+
+ fill_rule = WindingRule;
+ XCALL;
+
+ XFillPolygon(display, win, gc, poly, sizeof(poly) / sizeof(XPoint), Complex, CoordModeOrigin);
+
+ if( ! checkpixel(display, win, 0, 0, W_FG)) {
+ report("Pixel at (0, 0) was not set to foreground.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>>ASSERTION Bad A
+.ER Value fill_rule EvenOddRule WindingRule
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/stfllstyl/stfllstyl.m b/xc/test/xsuite/xtest/tset/CH05/stfllstyl/stfllstyl.m
new file mode 100644
index 000000000..c255f3e72
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stfllstyl/stfllstyl.m
@@ -0,0 +1,89 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetFillStyle CH05
+void
+XSetFillStyle(display, gc, fill_style)
+Display *display = Dsp;
+GC gc;
+int fill_style = FillStippled;
+>>SET need-gc-flush
+>>ASSERTION Good A
+A call to xname sets the
+.M fill_style
+component of the specified GC to the value of the
+.A fill_style
+argument.
+>>STRATEGY
+Create a window.
+Create GC with fill_style = FillSolid, stipple = {0} , fg = WhitePixel, bg = BlackPixel.
+Draw a filled rectangle (0, 0) (1, 1) with XFillRectangle.
+Verify pixel at (0, 0) is fg with XGetImage and XGetPixel.
+Set fill style to FillOpaqueStippled with XSetFillStyle.
+Draw a filled rectangle (0, 0) (1, 1) with XFillRectangle.
+Verify pixel at (0, 0) is bg with XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+Pixmap stip;
+GC sgc;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ stip = XCreatePixmap( display, win, 1, 1, 1);
+ values.foreground = 0;
+ sgc = XCreateGC(display, stip, GCForeground, &values);
+ XDrawPoint(display, stip, sgc, 0, 0);
+
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.fill_style = FillSolid;
+ values.stipple = stip;
+
+ gc = XCreateGC(display, win, GCForeground | GCBackground | GCFillStyle | GCStipple, &values);
+ XFillRectangle(display, win, gc, 0, 0, 1, 1);
+
+ if( ! checkpixel(display, win, 0, 0, W_FG)) {
+ delete("Pixel at (0, 0) was not set to foreground.");
+ return;
+ } else
+ CHECK;
+
+ fill_style = FillOpaqueStippled;
+ XCALL;
+
+ XFillRectangle(display, win, gc, 0, 0, 1, 1);
+
+ if( ! checkpixel(display, win, 0, 0, W_BG)) {
+ report("Pixel at (0, 0) was not set to background.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>>ASSERTION Bad A
+.ER Value fill_style FillSolid FillTiled FillStippled FillOpaqueStippled
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/stfnctn/stfnctn.m b/xc/test/xsuite/xtest/tset/CH05/stfnctn/stfnctn.m
new file mode 100644
index 000000000..3ffbd523a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stfnctn/stfnctn.m
@@ -0,0 +1,85 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetFunction CH05
+void
+XSetFunction(display, gc, functn)
+Display *display= Dsp;
+GC gc;
+int functn = GXset;
+>>SET need-gc-flush
+>>ASSERTION Good A
+The xname function sets the
+.M function
+component of the specified GC to the value of the
+.A function
+argument.
+>>STRATEGY
+Create window.
+Create GC with bg = BlackPixel, fg = WhitePixel, fn = GXcopy.
+Set pixel at (0, 0) to WhitePixel with XDrawPoint.
+Verify pixel at (0, 0) is WhitePixel with XGetImage and XGetPixel.
+Set fg to (BlackPixel xor WhitePixel)
+Set fn component of GC to GXxor with XSetFunction.
+Set pixel at (0, 0) to fg with XDrawPoint.
+Verify pixel at (0, 0) is BlackPixel with XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+XGCValues values;
+Window win;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ values.foreground = W_FG;
+ values.background = W_BG;
+ gc = XCreateGC(display, win, GCForeground | GCBackground, &values);
+
+ XDrawPoint(display, win, gc, 0, 0);
+
+ if( ! checkpixel(display, win, 0, 0, W_FG)) {
+ delete("Pixel at (0, 0) was not set to foreground.");
+ return;
+ } else
+ CHECK;
+
+ values.foreground = W_FG ^ W_BG;
+ XSetForeground(display, gc, values.foreground);
+
+ functn = GXxor;
+ XCALL;
+
+ XDrawPoint(display, win, gc, 0, 0);
+
+ if( ! checkpixel(display, win, 0, 0, W_BG)) {
+ report("Pixel at (0, 0) was not set to background.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>>ASSERTION Bad A
+.ER Value functn GXclear GXand GXandReverse GXcopy GXandInverted GXnoop GXxor GXor GXnor GXequiv GXinvert GXorReverse GXcopyInverted GXorInverted GXnand GXset
+>># HISTORY steve Completed Written in old format and style
+>># HISTORY cal Completed New format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/stfnt/stfnt.m b/xc/test/xsuite/xtest/tset/CH05/stfnt/stfnt.m
new file mode 100644
index 000000000..716282bf5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stfnt/stfnt.m
@@ -0,0 +1,103 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetFont CH05
+char **
+XSetFont(display, gc, font)
+Display *display = Dsp;
+GC gc;
+Font font;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>EXTERN
+#define FONT1 "xtfont0"
+#define FONT2 "xtfont1"
+>>ASSERTION Good A
+A call to xname sets the
+.M font
+component of the specified GC to the value of the
+.A font
+argument.
+>>STRATEGY
+Create window.
+Load font 1.
+Load font 2.
+Create GC with font = font1, fn = GXxor.
+Draw string with glyph differing between font 1 and 2.
+Set font component of GC to font2 with XSetFont.
+Draw string with glyph differing between font 1 and 2.
+Verify that not all pixels in the window are set to bg.
+>>CODE
+XVisualInfo *vp;
+XFontStruct *fs1, *fs2, *rfs;
+XCharStruct *cs1,*cs2,*maxchar;
+XGCValues values;
+GContext gcctxt;
+int xmin, ymax;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ Win = makewin(display, vp);
+
+ if((fs1 = XLoadQueryFont(display, FONT1)) == (XFontStruct *) 0) {
+ delete("Failed to load font %s", FONT1);
+ return;
+ } else
+ CHECK;
+
+ if((fs2 = XLoadQueryFont(display, FONT2)) == (XFontStruct *) 0) {
+ delete("Failed to load font %s", FONT2);
+ return;
+ } else
+ CHECK;
+
+ cs1 = &(fs1->max_bounds);
+ cs2 = &(fs2->max_bounds);
+
+ values.font = fs1->fid;
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.function = GXxor;
+
+ gc = XCreateGC(display, DRW(display), GCFont|GCBackground|GCForeground|GCFunction, &values);
+
+ xmin = (int) ((cs1->lbearing < cs2->lbearing) ? cs1->lbearing : cs2->lbearing);
+ ymax = (int) ((cs1->ascent > cs2->ascent) ? cs1->ascent : cs2->ascent);
+ XDrawString(display, Win, gc, -xmin, ymax ,"a", 1);
+
+ font = fs2->fid;
+ XCALL;
+
+ XDrawString(display, Win, gc, -xmin, ymax ,"a", 1);
+
+ if( checkarea(display, Win, (struct area *) 0, W_BG, W_BG, CHECK_ALL|CHECK_DIFFER) == True) {
+ report("Font was not changed by XSetFont.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER Font bad-font
+>>ASSERTION Bad A
+.ER GC
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do- 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/stfrgrnd/stfrgrnd.m b/xc/test/xsuite/xtest/tset/CH05/stfrgrnd/stfrgrnd.m
new file mode 100644
index 000000000..b2ca2f657
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stfrgrnd/stfrgrnd.m
@@ -0,0 +1,81 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetForeground CH05
+void
+XSetForeground(display, gc, pixel)
+Display *display = Dsp;
+GC gc;
+unsigned long pixel = 1;
+>>SET need-gc-flush
+>>ASSERTION Good A
+The xname function sets the
+.M foreground
+component of the specified GC to the value of the
+.A foreground
+argument.
+>>STRATEGY
+Create window.
+Create GC with bg = BlackPixel, fg = WhitePixel, fn = GXcopy.
+Set pixel at (0, 0) with XDrawPoint.
+Verify pixel at (0, 0) is fg with XGetImage and XGetPixel.
+Set fg component of GC to bg with XSetForeground.
+Set pixel at (0, 0) with XDrawPoint.
+Verify pixel at (0, 0) is bg with XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+XGCValues values;
+GC gc;
+Window win;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ values.foreground = W_FG;
+ values.background = W_BG;
+ gc = XCreateGC(display, win, GCForeground | GCBackground, &values);
+
+ XDrawPoint(display, win, gc, 0, 0);
+
+ if( ! checkpixel(display, win, 0, 0, W_FG)) {
+ delete("Pixel at (0, 0) was not set to foreground.");
+ return;
+ } else
+ CHECK;
+
+ pixel = W_BG;
+ XCALL;
+
+ XDrawPoint(display, win, gc, 0, 0);
+
+ if( ! checkpixel(display, win, 0, 0, W_BG)) {
+ report("Pixel at (0, 0) was not set to background.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>># HISTORY steve Completed Written in old format and style
+>># HISTORY cal Completed New format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing Code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/stgrphcsex/stgrphcsex.m b/xc/test/xsuite/xtest/tset/CH05/stgrphcsex/stgrphcsex.m
new file mode 100644
index 000000000..937d91384
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stgrphcsex/stgrphcsex.m
@@ -0,0 +1,98 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetGraphicsExposures CH05
+void
+XSetGraphicsExposures(display, gc, graphics_exposures)
+Display *display = Dsp;
+GC gc;
+Bool graphics_exposures = False;
+>>SET need-gc-flush
+>>ASSERTION Good A
+A call to xname sets the
+.M graphics_exposures
+component of the specified GC to the value of the
+.A graphics_exposures
+argument.
+>>STRATEGY
+Create window.
+Create child window partially obscuring parent.
+Create GC with graphics_exposures = True.
+Flush event queue with XSync.
+Copy from parent window using XCopyArea.
+Verify that a GraphicsExpose event was generated,
+Set graphics_exposures = False with XSetGraphicsExposures.
+Flush event queue with XSync.
+Copy from parent window using XCopyArea.
+Verify that no event was generated.
+>>CODE
+XEvent event;
+XVisualInfo *vp;
+Window pwin, cwin;
+XGCValues values;
+struct area ar;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ pwin = makewin(display, vp);
+ ar.x = ar.y = 10;
+ ar.width = ar.height = 10;
+ cwin = crechild(display, pwin, &ar);
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.graphics_exposures = True;
+ gc = XCreateGC(display, pwin, GCForeground | GCBackground| GCGraphicsExposures, &values);
+
+ XSync(display, True);
+ XCopyArea(display, pwin, pwin, gc, 5, 5, 10, 10, 0, 0);
+ XSync(display, False);
+
+ if( getevent(display, &event) == 0 ) {
+ delete("No graphics expose event was generated.");
+ return;
+ }
+
+ if(event.type == GraphicsExpose)
+ CHECK;
+ else {
+ delete("Event was not of type GraphicsExpose.");
+ return;
+ }
+
+ graphics_exposures = False;
+ XCALL;
+
+ XSync(display, True);
+ XCopyArea(display, pwin, pwin, gc, 5, 5, 10, 10, 0, 0);
+ XSync(display, False);
+
+ if(getevent(display, &event) != 0) {
+ report("An Event was generated.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>>ASSERTION Bad A
+.ER Value graphics_exposures True False
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/stlnattrbt/stlnattrbt.m b/xc/test/xsuite/xtest/tset/CH05/stlnattrbt/stlnattrbt.m
new file mode 100644
index 000000000..4464b53f3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stlnattrbt/stlnattrbt.m
@@ -0,0 +1,212 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetLineAttributes CH05
+void
+XSetLineAttributes(diplay, gc, line_width, line_style, cap_style, join_style)
+Display *display = Dsp;
+GC gc;
+unsigned int line_width;
+int line_style;
+int cap_style;
+int join_style;
+>>SET need-gc-flush
+>>ASSERTION Good A
+A call to xname sets the
+.M line_width ,
+.M line_style ,
+.M cap_style
+and
+.M join_style
+components of the specified GC to the values of the
+.A line_width ,
+.A line_style ,
+.A cap_style
+and
+.A join_style
+arguments.
+>>STRATEGY
+
+*Line_Width
+Create a window.
+Create a GC with line_width = 1, fg = WhitePixel, bg = BlackPixel.
+Draw horizontal line from (0, 1) to (0, 2) using XDrawLine.
+Verify pixel at 0, 2 is set to bg.
+Set line_width component of GC to 2 with XSetLineAttributes.
+Draw horizontal line from (0, 1) to (2, 1) using XDrawLine.
+Verify pixel at 0, 2 is set to WhitePixel using XGetimage and XGetPixel.
+
+*Line_Style
+Create a window.
+Create GC with line_style = LineDoubleDash, fg = WhitePixel, bg = BlackPixel, dashes = 1, fn = GXcopy.
+Draw line from (0, 0) to (1, 0) with XDrawLines.
+Draw dashed line using XDrawLine.
+Verify pixel at (1, 0) is bg with XGetImage and XGetPixel
+Set GC line_style component to LineSolid with XSetLineAttributes.
+Redraw same line.
+Verify pixel is set to bg.
+
+*Cap_Style
+Create a window.
+Create GC with cap_style = CapButt, fg = WhitePixel, bg = BlackPixel, line_width = 0.
+Draw lines from (0, 0) to (1, 0) using XDrawLines.
+Verify pixel at (2, 0) is bg using XGetImage and XGetPixel.
+Set cap_style component of GC to CapProjecting.
+Draw line from (0, 0) to (1, 0) using XDrawLines.
+Verify pixel at (2, 0) is fg using XGetImage and XGetPixel.
+
+*Join_Style
+Create a Window.
+Create GC with line_width = 3, Join_style = JoinBevel, bg =BlackPixel, fg = WhitePixel, fn = GXxor.
+Draw two joined lines (0, 1) , (2, 1) , (2, 3) using XDrawLines.
+Verify Pixel at (0, 4) is bg using XGetImage and XGetPixel.
+Set join_style component of GC to JoinMiter using XSetLineAttributes.
+Draw two joined lines (0, 1) , (2, 1) , (2, 3) using XDrawLines.
+Verify Pixel at (0, 4) is fg using XGetImage and XGetPixel.
+>>EXTERN
+XPoint Jpoints[] = { {0, 1}, {2, 1}, {2, 3} };
+>>CODE
+XVisualInfo *vp;
+XGCValues values;
+GC gc;
+Window win;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.line_width = 1;
+
+
+ gc = XCreateGC(display, win, (GCLineWidth | GCForeground | GCBackground), &values);
+
+ XDrawLine(display, win, gc, 0, 1, 2, 1);
+
+ if( ! checkpixel(display, win, 0, 2, W_BG)) {
+ delete("Pixel at (0, 2) was not set to background.");
+ return;
+ } else
+ CHECK;
+
+ line_width = 10;
+ XCALL;
+
+ XDrawLine(display, win, gc, 0, 1, 2, 1);
+
+ if( ! checkpixel(display, win, 0, 2, W_FG)) {
+ report("Pixel at (0, 2) was not set to foreground.");
+ FAIL;
+ } else
+ CHECK;
+
+/* Line Style */
+
+ values.line_style = LineDoubleDash;
+ values.dashes = 1;
+
+ gc = XCreateGC(display, win, (GCLineWidth | GCForeground | GCBackground | GCLineStyle | GCDashList), &values);
+
+ win = makewin(display, vp);
+
+ XDrawLine(display, win, gc, 0, 0, 10, 0);
+
+ if( ! checkpixel(display, win, 0, 1, W_BG)) {
+ delete("Pixel at (0, 1) was not set to background.");
+ return;
+ } else
+ CHECK;
+
+ line_style = LineSolid;
+ XCALL;
+
+ XDrawLine(display, win, gc, 0, 0, 10, 0);
+
+ if( ! checkpixel(display, win, 0, 1, W_FG)) {
+ report("Pixel at (0, 1) was not set to foreground.");
+ FAIL;
+ } else
+ CHECK;
+
+/* Cap Style */
+
+
+ values.cap_style = CapNotLast;
+ values.line_width = 0;
+
+ gc = XCreateGC(display, win, (GCLineWidth | GCForeground | GCBackground | GCCapStyle), &values);
+ win = makewin(display, vp);
+ XDrawLine(display, win, gc, 0, 0, 2, 0);
+
+ if( ! checkpixel(display, win, 2, 0, W_BG)) {
+ delete("Pixel at (2, 0) was not set to background.");
+ return;
+ } else
+ CHECK;
+
+ line_width = 0;
+ cap_style = CapButt;
+ XCALL;
+ XDrawLine(display, win, gc, 0, 0, 2, 0);
+
+ if( ! checkpixel(display, win, 2, 0, W_FG)) {
+ report("Pixel at (2, 0) was not set to foreground.");
+ FAIL;
+ } else
+ CHECK;
+
+/* Join Style */
+
+ values.join_style = JoinBevel;
+ values.line_width = 3;
+
+ gc = XCreateGC(display, win, (GCLineWidth | GCForeground | GCBackground | GCJoinStyle), &values);
+ win = makewin(display, vp);
+ XDrawLines(display, win, gc, Jpoints, sizeof(Jpoints) / sizeof(XPoint), CoordModeOrigin);
+
+ if( ! checkpixel(display, win, 3, 0, W_BG)) {
+ delete("Pixel at (3, 0) was not set to background.");
+ return;
+ } else
+ CHECK;
+
+ line_width = 3;
+ join_style = JoinMiter;
+ XCALL;
+ XDrawLines(display, win, gc, Jpoints, sizeof(Jpoints) / sizeof(XPoint), CoordModeOrigin);
+
+ if( ! checkpixel(display, win, 3, 0, W_FG)) {
+ report("Pixel at (3, 0) was not set to foreground.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(8);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>>ASSERTION Bad A
+.ER Value line_style LineSolid LineOnOffDash LineDoubleDash
+>>ASSERTION Bad A
+.ER Value cap_style CapNotLast CapButt CapRound CapProjecting
+>>ASSERTION Bad A
+.ER Value join_style JoinMiter JoinRound JoinBevel
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/stplnmsk/stplnmsk.m b/xc/test/xsuite/xtest/tset/CH05/stplnmsk/stplnmsk.m
new file mode 100644
index 000000000..01460e5c3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stplnmsk/stplnmsk.m
@@ -0,0 +1,86 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetPlaneMask CH05
+void
+XSetPlaneMask(display, gc, plane_mask)
+Display *display = Dsp;
+GC gc;
+unsigned long plane_mask;
+>>SET need-gc-flush
+>>ASSERTION Good A
+A call to xname sets the
+.M plane_mask
+component of the specified GC to the value of the
+.A plane_mask
+argument.
+>>STRATEGY
+Create window.
+Create GC with bg = BlackPixel, fg = WhitePixel, plane_mask = 0.
+Verify pixel at (0, 0) is bg with XGetImage and XGetPixel.
+Set pixel at (0, 0) with XDrawPoint.
+Verify pixel at (0, 0) is bg with XGetImage and XGetPixel.
+Set plane_mask component of GC to AllPlanes with XSetPlaneMask.
+Set pixel at (0, 0) with XDrawPoint.
+Verify pixel at (0, 0) is fg with XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+XGCValues values;
+Window win;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.plane_mask = 0;
+
+ gc = XCreateGC(display, win, (GCPlaneMask | GCForeground | GCBackground), &values);
+
+ if( ! checkpixel(display, win, 0, 0, W_BG)) {
+ delete("Pixel at (0, 0) was not set to background.");
+ return;
+ } else
+ CHECK;
+
+ XDrawPoint(display, win, gc, 0, 0);
+
+ if( ! checkpixel(display, win, 0, 0, W_BG)) {
+ delete("Pixel at (0, 0) was not left as background.");
+ return;
+ } else
+ CHECK;
+
+ plane_mask = AllPlanes;
+ XCALL;
+
+ XDrawPoint(display, win, gc, 0, 0);
+ if( ! checkpixel(display, win, 0, 0, W_FG)) {
+ report("Pixel at (0, 0) was not set to foreground.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/strclr/strclr.m b/xc/test/xsuite/xtest/tset/CH05/strclr/strclr.m
new file mode 100644
index 000000000..b6f09ee98
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/strclr/strclr.m
@@ -0,0 +1,570 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XStoreColor CH05
+void
+XStoreColor(display, colormap, color)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+XColor *color = &dummycol;
+>>EXTERN
+XColor dummycol;
+>>ASSERTION Good C
+>># TODO dave - Jan 17
+>># The X11R4 spec is vague about whether it's the closest available or
+>># or the actual values that are stored.
+>># O'Reilly Vol one page 190 has a footnote saying the actual values
+>># you tried to store may not be stored.
+If any of the visual classes DirectColor, PseudoColor or Grayscale is supported:
+A call to xname obtains the closest available RGB values for the
+.A colormap
+argument to those specified in the
+.S red ,
+.S green
+and
+.S blue
+components of the
+.S XColor
+structure named by the
+.A color
+argument, and stores those values in the read-write colourmap entry
+specified by the
+.M pixel
+components of the
+.S XColor
+structure.
+>>STRATEGY
+For each visual class DirectColor, PseudoColor and GrayScale:
+ Create a colormap with alloc set to AllocAll.
+ Store the color r = 0xffff g = 0xf1f0 b = 0x0ff8 at cell 0.
+ Obtain the rbg values of the stored color with XQueryColor.
+ Store the returned rgb values in cell 0
+ Obtain the stored values with XQueryColor.
+ Verify the rgb values stored in both cases were identical.
+>>CODE
+XVisualInfo *vp;
+XColor testcol, storedcol, savedcol;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ unsupported("DirectColor, PseudoColor and GrayScale are not supported");
+ return;
+ }
+
+ storedcol.pixel = 0L;
+ testcol.pixel = 0L;
+ testcol.red = 0xffff;
+ testcol.green = 0xf1f0;
+ testcol.blue = 0x0ff8;
+ testcol.flags = DoRed|DoGreen|DoBlue;
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ colormap = makecolmap(display, vp->visual, AllocAll);
+ color = &testcol;
+ XCALL;
+ XQueryColor(display, colormap, &storedcol);
+ savedcol = storedcol;
+ color = &storedcol;
+ XCALL;
+ XQueryColor(display, colormap, &testcol);
+
+ if( (savedcol.red != testcol.red) || (savedcol.green != testcol.green) || (savedcol.blue != testcol.blue) ) {
+ report("XStoreColor() return RGB values r %u g %u b %u instead of r %u g %u b %u.",
+ savedcol.red, savedcol.green, savedcol.blue, testcol.red, testcol.green, testcol.blue);
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Good C
+If any of the visual classes DirectColor, PseudoColor or GrayScale is supported:
+A call to xname changes the red, green and blue values
+in the read-write colourmap entry in accordance with the
+.M flags
+component of the
+.S XColor
+structure named by the
+.A color
+argument.
+>>STRATEGY
+For each supported visual class DirectColor, PseudoColor and GrayScale:
+ Create a colormap with XCreateColormap.
+ Store the color r = 0xffff g = 0xf1f0 b = 0x0ff8 at cell 0 with XStoreColor.
+ Obtain the r,g and b values with XQueryColor.
+ For each possible combination DoRed, DoGreen and DoBlue in flags:
+ Store the bitwise complementary rgb values in the same cell with XStoreColor.
+ Store the color r = 0xffff g = 0xf1f0 b = 0x0ff8 at cell 0 with XStoreColor.
+ Verify that only the components of the colourcell specified by the flags value have been altered with XQueryColor.
+
+>>CODE
+XVisualInfo *vp;
+int i;
+XColor namedcol, testcol, storedcol;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+unsigned short redval, greenval, blueval;
+char flags;
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ testcol.pixel = 0L;
+ testcol.red = 0xffff;
+ testcol.green = 0xf1f0;
+ testcol.blue = 0x0ff8;
+ testcol.flags = DoRed|DoGreen|DoBlue;
+
+ color = &testcol;
+ colormap = makecolmap(display, vp->visual, AllocAll);
+ XCALL;
+
+ namedcol.pixel = 0L;
+ XQueryColor(display, colormap, &namedcol); /* named color has expected r,g,b values.*/
+
+ testcol = namedcol;
+ testcol.red ^= 0xffff;
+ testcol.green ^= 0xffff;
+ testcol.blue ^= 0xffff;
+ testcol.flags = DoRed|DoGreen|DoBlue;
+ color = &testcol;
+ XCALL;
+ XQueryColor(display, colormap, &testcol); /* test color has the unexpected rgb vals */
+
+ for(i=0; i<8; i++) {
+
+ flags = 0;
+
+ if(i&DoRed) {
+ flags |= DoRed;
+ redval = namedcol.red;
+ } else
+ redval = testcol.red;
+
+ if(i&DoGreen) {
+ flags |= DoGreen;
+ greenval = namedcol.green;
+ } else
+ greenval = testcol.green;
+
+ if(i&DoBlue) {
+ flags |= DoBlue;
+ blueval = namedcol.blue;
+ } else
+ blueval = testcol.blue;
+
+ testcol.flags = DoRed|DoGreen|DoBlue;
+ color = &testcol;
+ XCALL; /* Sore the inv colours */
+
+ namedcol.flags = flags;
+ color = &namedcol;
+ XCALL;
+ storedcol.pixel = 0L;
+ storedcol.flags = DoRed|DoGreen|DoBlue;
+ XQueryColor(display, colormap, &storedcol);
+
+ if( (redval != storedcol.red) || (greenval != storedcol.green) || (blueval != storedcol.blue) ) {
+ report("XStoreColor() flags = %d RGB value r %u g %u b %u instead of r %u g %u b %u.",
+ (int) i,
+ storedcol.red, storedcol.green, storedcol.blue, redval, greenval, blueval);
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(i*nsupvis());
+
+>>ASSERTION Good D 1
+If any of the visual classes DirectColor, PseudoColor or GrayScale is supported:
+When the
+.A colormap
+is an installed colourmap for its screen,
+then any changes made by a call to xname are visible immediately.
+>>ASSERTION Bad C
+If any of the visual classes DirectColor, PseudoColor or GrayScale is supported:
+When the
+.M pixel
+component in the
+.S XColor
+structure named by the
+.A color
+argument is not a valid entry in the
+.A colormap
+argument,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+For each visual class DirectColor, PseudoColor and GrayScale:
+ Create a colourmap with alloc set to AllocAll.
+ Store the color r = 0xffff g = 0xf1f0 b = 0x0ff8 using XStoreColor with pixel = colormap_size.
+ Verify that a BadValue error is generated.
+>>CODE BadValue
+XVisualInfo *vp;
+XColor testcol;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ testcol.red = 0xffff;
+ testcol.green = 0xf1f0;
+ testcol.blue = 0x0ff8;
+ color = &testcol;
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ colormap = makecolmap(display, vp->visual, AllocAll);
+ testcol.pixel = maxsize(vp) + 1;
+ if (vp->class == DirectColor) {
+ testcol.pixel = (vp->red_mask | vp->blue_mask | vp->green_mask);
+ testcol.pixel |= testcol.pixel << 1;
+ }
+ trace("Testing with pixel set to > colormap_size (%ld).",testcol.pixel);
+
+ XCALL;
+ if(geterr() == BadValue)
+ CHECK;
+
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Bad A
+.ER BadAccess colormap-store
+>>STRATEGY
+>># For each visual class DirectColor, PseudoColor and GrayScale:
+For all visuals:
+ Create a colormap with alloc set to AllocNone. (Unallocated for visual
+ classes DirectColor, PseudoColor and GrayScale; R/O for visual
+ classes TrueColor, StaticColor and StaticGray: all should
+ provoke BadAccess)
+ For each colormap cell:
+ Store the color r = 0xffff g = 0xf1f0 b = 0x0ff8 using xname.
+ Verify that a BadAccess error is generated.
+ Create a new client with XOpenDisplay.
+ Allocate a readonly cell for the new client with XAllocColor.
+ Store a value in the cell with xname.
+ Verify that a BadAccess error occurred.
+ Allocate a readonly cell with XAllocColor.
+ Store a value in the cell with xname.
+ Verify that a BadAccess error occurred.
+>>CODE BadAccess
+XVisualInfo *vp;
+XColor testcol;
+Display *disp2;
+unsigned long i;
+
+ for(resetvinf(VI_WIN); nextvinf(&vp); ) {
+
+ testcol.red = 0xffff;
+ testcol.green = 0xf1f0;
+ testcol.blue = 0x0ff8;
+
+ color = &testcol;
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ trace("Testing a colormap with no allocated/just r-o cells.");
+ for(i=0; i < maxsize(vp); i++) {
+ testcol.pixel = i;
+ XCALL;
+ /* the XCALL will have done a check for geterr() ==
+ BadAccess (c.f. arg. after CODE keyword above)
+ and will FAIL if not.
+ */
+ }
+ if(i == maxsize(vp))
+ CHECK;
+
+ disp2 = opendisplay();
+
+ if(XAllocColor(disp2, colormap, &testcol) == False) {
+ delete("XAllocColor() failed to allocate a r/o cell for a second client.");
+ return;
+ } else
+ CHECK;
+
+ trace("Trying to write into a r/o cell allocated by another client.");
+ color = &testcol;
+ XCALL;
+ if(geterr() == BadAccess)
+ CHECK;
+
+ testcol.red ^= 0xffff;
+ testcol.green ^= 0xffff;
+ testcol.blue ^= 0xffff;
+
+ if(XAllocColor(display, colormap, &testcol) == False) {
+ delete("XAllocColor() failed to allocate a r/o cell");
+ return;
+ } else
+ CHECK;
+
+ trace("Trying to write into a r/o cell allocated by self.");
+ color = &testcol;
+ XCALL;
+ if(geterr() == BadAccess)
+ CHECK;
+ }
+
+ CHECKPASS(5*nvinf());
+>>ASSERTION Bad A
+.ER BadColor
+>>ASSERTION Good D 3
+When
+.A rmask_return ,
+.A gmask_return
+and
+.A bmask_return
+have been returned by
+a previous call to
+.S XAllocColorPlanes
+and a read-write colourmap entry
+for a pixel value is changed by a call to xname, then the pixel value
+is decomposed into three components using the masks and the
+independent colourmap entries are updated.
+>>ASSERTION Good C
+If the visual class
+.S DirectColor
+is supported:
+When the
+.A colormap
+argument was created with visual type
+.S DirectColor
+and with
+.A alloc
+set to
+.S AllocAll ,
+and a read-write colourmap entry for a pixel value is changed by a call to xname, then
+the pixel value is decomposed into three components using the
+.S red_mask ,
+.S green_mask
+and
+.S blue_mask
+in the visual and the independent colourmap entries are updated.
+>>STRATEGY
+If visual class DirectColor is supported:
+ Create a colourmap using makecolmap and AlocAll
+ Allocate an array of XColor's and one for each of reds, greens & blues
+ Set up each of reds, greens & blues to have a distinguishable value,
+ using xname, and make sure that's what's in the equivalent colourmaps.
+ Read back some suitably "random" triples and check their components
+ Verify that each component is the same as the corresponding entry in
+ reds, greens & blues.
+ Free the allocated storage: colors, reds, greens & blues.
+>>EXTERN
+#define lowbit(x) ((x) & (~(x) + 1))
+#define bitcontig(x) ((((x) + lowbit(x)) & (x)) == 0)
+#define bitsubset(a,b) (((a) & (b)) == (a))
+
+static int
+maskshift(mask)
+register unsigned long mask;
+{
+register int i;
+
+ for (i = 0; mask; i++) {
+ if (mask & 0x1)
+ return i;
+ mask >>= 1;
+ }
+ return i;
+}
+
+static int ncolors = 0;
+
+static
+Bool set_one_col(refp, s, flags, mask)
+ unsigned long *refp;
+ char *s;
+ char flags;
+ unsigned long mask;
+{
+ unsigned long i;
+ XColor *cp1;
+ XColor *save_col = color; /* for restoring color, later */
+ unsigned long *lrefp = refp;
+ int fail = 0; /* used in the FAIL in XCall (spelt wrong intentionally) */
+ /* expects to find color and ncolors in-scope */
+
+ for(i=0, cp1 = color; i < ncolors; i++, cp1++) {
+ unsigned long subfield_ix = i << maskshift(mask);
+
+ if (!bitsubset(subfield_ix, mask)) {
+ delete("Inconsistent maxsize() result: size of %d is too big to fit into %s mask 0x%lx (detected at index %lu, giving pixel 0x%lx)",
+ ncolors, s, mask, i, subfield_ix);
+ return False;
+ }
+ cp1->pixel = subfield_ix;
+ cp1->flags = flags;
+ switch (flags) {
+ case DoRed:
+ cp1->red = i;
+ break;
+ case DoGreen:
+ cp1->green = i;
+ break;
+ case DoBlue:
+ cp1->blue = i;
+ break;
+ default:
+ delete("Flags 0x%x has more than one colour in it.", (unsigned int)flags);
+ color = save_col;
+ return False;
+ }
+ color = cp1;
+ /* The following may generate a warning about the return; */
+ XCALL;
+ }
+ color = save_col;
+ XQueryColors(display, colormap, color, ncolors);
+ for(i=0,cp1=color,lrefp=refp; i < ncolors; i++, lrefp++, cp1++) {
+ *lrefp = (flags==DoRed) ? cp1->red :
+ ((flags==DoGreen) ? cp1->green : cp1->blue);
+ }
+ return (geterr() == Success);
+}
+>>CODE
+XVisualInfo *vp;
+unsigned long vmask = (1<<DirectColor);
+XColor *colors;
+unsigned long i;
+XColor *refp;
+unsigned long *reds, *greens, *blues;
+int pathcnt = 0;
+static XColor triples[] = {
+ (unsigned long)~0L, 0,0,0, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 1,0,0, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 0,1,0, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 0,0,1, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 3,2,1, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 1,3,0, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 7,3,1, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 7,8,5, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 15,11,12, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 42,99,13, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 112,127,64, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 255,64,33, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 64,255,33, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 64,33,255, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 255,255,255, DoRed|DoGreen|DoBlue, 0
+ };
+
+/* If visual class DirectColor is supported: */
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+/* Create a colourmap using makecolmap and AlocAll */
+ colormap = makecolmap(display, vp->visual, AllocAll);
+ ncolors = maxsize(vp);
+/* Allocate an array of XColor's and one for each of reds, greens & blues */
+ colors = (XColor *) malloc(ncolors * sizeof(XColor));
+ color = colors;
+ reds = (unsigned long *) malloc(ncolors * sizeof(unsigned long));
+ greens = (unsigned long *) malloc(ncolors * sizeof(unsigned long));
+ blues = (unsigned long *) malloc(ncolors * sizeof(unsigned long));
+ if ((colors == (XColor *) 0) || (reds == (unsigned long *) 0) ||
+ (greens == (unsigned long *) 0) ||
+ (blues == (unsigned long *) 0)) {
+ delete("malloc() couldn't allocate %d cells for the XColor array.", ncolors);
+ return;
+ } else
+ CHECK;
+
+ /* now it's safe to call set_one_col: color and ncolors are set. */
+
+
+/* Set up each of reds, greens & blues to have a distinguishable value, */
+/* using xname, and make sure that's what's in the equivalent colourmaps. */
+ /*
+ kept in reds, greens or blues. This routine expects
+ color and ncolors to be set right. It uses XCall as well.
+ */
+ if (!set_one_col(reds, "red", DoRed, vp->red_mask) ||
+ !set_one_col(greens, "green", DoGreen, vp->green_mask) ||
+ !set_one_col(blues, "blue", DoBlue, vp->blue_mask)
+ ) {
+ delete("Failed to set up colourmap for test.");
+ return;
+ } else
+ CHECK;
+
+/* Read back some suitably "random" triples and check their components */
+ for (i=0, refp=triples; i < NELEM(triples); i++, refp++) {
+ XColor testcol;
+ unsigned long r,g,b;
+
+ if (refp->red >= (unsigned)ncolors ||
+ refp->green >= (unsigned)ncolors ||
+ refp->blue >= (unsigned)ncolors)
+ continue;
+
+ r = refp->red << maskshift(vp->red_mask);
+ if (!bitsubset(r, vp->red_mask))
+ continue;
+ g = refp->green << maskshift(vp->green_mask);
+ if (!bitsubset(g, vp->green_mask))
+ continue;
+ b = refp->blue << maskshift(vp->blue_mask);
+ if (!bitsubset(b, vp->blue_mask))
+ continue;
+ testcol.pixel = r | g | b;
+
+ XQueryColor(display, colormap, &testcol);
+
+/* Verify that each component is the same as the corresponding entry in */
+/* reds, greens & blues. */
+ if (testcol.flags != (DoRed | DoGreen | DoBlue) ||
+ testcol.red != reds[refp->red] ||
+ testcol.green != greens[refp->green] ||
+ testcol.blue != blues[refp->blue]) {
+ report("Expected r,g,b = %lu, %lu, %lu but got %lu, %lu, %lu for pixel 0x%lx with r-,g-,b-masks 0x%lx, 0x%lx, 0x%lx",
+ reds[refp->red], greens[refp->green], blues[refp->blue],
+ testcol.red, testcol.green, testcol.blue,
+ testcol.pixel, vp->red_mask,
+ vp->green_mask, vp->blue_mask);
+ FAIL;
+ } else
+ CHECK;
+
+ pathcnt++;
+ }
+
+/* Free the allocated storage: colors, reds, greens & blues. */
+ free((char*)colors);
+ free((char*)reds);
+ free((char*)greens);
+ free((char*)blues);
+ }
+
+ CHECKPASS(pathcnt+2*nsupvis());
+
+
+>>#HISTORY Cal Completed Written in new style and format.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writing code.
+>>#HISTORY Cal Completed Written in new style and format.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writing Code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/strclrs/strclrs.m b/xc/test/xsuite/xtest/tset/CH05/strclrs/strclrs.m
new file mode 100644
index 000000000..13191942e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/strclrs/strclrs.m
@@ -0,0 +1,744 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XStoreColors CH05
+void
+XStoreColors(display, colormap, color, ncolors)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+XColor *color = &dummycol;
+int ncolors = 1;
+>>EXTERN
+XColor dummycol = { 0L, 0,0,0, DoRed|DoGreen|DoBlue, 0 };
+>>ASSERTION Good C
+>># TODO dave - Jan 17
+>># The X11R4 spec is vague about whether it's the closest available or
+>># or the actual values that are stored.
+>># O'Reilly Vol one page 190 has a footnote saying the actual values
+>># you tried to store may not be stored.
+If any of the visual classes DirectColor, PseudoColor or Grayscale is supported:
+A call to xname obtains the closest available RGB values for the
+.A colormap
+argument to those specified in the
+.S red ,
+.S green
+and
+.S blue
+components of the
+.S XColor
+structures named by the
+.A color
+argument, and stores those values in the read-write colourmap
+entries specified by the
+.M pixel
+components of the
+.S XColor
+structures.
+>>STRATEGY
+For each visual class DirectColor, PseudoColor and GrayScale:
+ Create a colourmap with alloc set to AllocAll;
+ Store the color r = 0xffff g = 0xf1f0 b = 0x0ff8 in each cell of the colourmap with XStoreColors.
+ Obtain the stored r,g b values with XQueryColors.
+ Store the obtained r,g b values in each cell with XStoreColors.
+ Obtain the stored r, g, b values with XQueryColors.
+ Verify that these values are identical to those originally obtained.
+>>CODE
+XVisualInfo *vp;
+XColor *colp, *cp, *testcol;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+unsigned long i;
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ colormap = makecolmap(display, vp->visual, AllocAll);
+ ncolors = maxsize(vp);
+
+ color = (XColor *) malloc(ncolors * sizeof(XColor));
+ if(color == (XColor *) 0) {
+ delete("malloc() couldn't allocate %d cells for the XColor array.", ncolors);
+ return;
+ } else
+ CHECK;
+
+ for(i=0, colp = color; i < ncolors; i++, colp++) {
+ colp->pixel = i;
+ colp->red = 0xffff ^ (i*4);
+ colp->green = 0xf1f0 ^ (i*8);
+ colp->blue = 0x0ff8 ^ (i*6);
+ colp->flags = (char) (DoRed|DoGreen|DoBlue);
+ }
+
+ XCALL;
+ if(geterr() == Success)
+ CHECK;
+
+ /* Write colormap stored values back over the original array */
+ XQueryColors(display, colormap, color, ncolors);
+
+ XCALL;
+ if(geterr() == Success)
+ CHECK;
+
+ testcol = (XColor *) malloc(ncolors * sizeof(XColor));
+ if(testcol == (XColor *) 0) {
+ delete("malloc() couldn't allocate %d cells for the XColor array.", ncolors);
+ return;
+ } else
+ CHECK;
+
+ for(i=0; i<ncolors; i++)
+ testcol[i].pixel = i;
+
+ XQueryColors(display, colormap, testcol, ncolors);
+
+ for(i=0, colp = testcol, cp = color; i < ncolors; i++, colp++, cp++)
+ if( (cp->red != colp->red) || (cp->green != colp->green) || (cp->blue != colp->blue) ) {
+ report("cell %ld: r %u g %u b %u instead of r %u g %u b %u",
+ i,
+ cp->red, cp->green, cp->blue,
+ colp->red, colp->green, colp->blue);
+ FAIL;
+ }
+
+ if( i == ncolors)
+ CHECK;
+ free((char *)color);
+ free((char *)testcol);
+ }
+ CHECKPASS(5*nsupvis());
+
+>>ASSERTION Good C
+If any of the visual classes DirectColor, PseudoColor or Grayscale is supported:
+A call to xname changes the red, green and blue values
+in each of the
+.A ncolors
+read-write colourmap entries in accordance with the
+.M flags
+components of the
+.S XColor
+structures named by the
+.A color
+argument.
+>>STRATEGY
+For each supported visual class DirectColor, PseudoColor and GrayScale:
+ Create a colormap with XCreateColormap.
+ Obtain two distinct colormap values using XStoreColors and XQueryColors.
+ For each possible combination DoRed, DoGreen and DoBlue in flags:
+ Set all colormap cells to the first value with flags = DoRed|DoGreen|DoBlue
+ Set all colormap cells to the second value with rbg components selected by the flag combination with XStoreColors.
+ Verify that only the components of the colourcell specified by the flags were altered with XQueryColor.
+>>CODE
+XVisualInfo *vp;
+XColor *colp, *cp, *testcol, *refcol, *quercol;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+unsigned long i,j;
+char flags;
+XColor *redp, *greenp, *bluep;
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ colormap = makecolmap(display, vp->visual, AllocAll);
+ ncolors = maxsize(vp);
+
+ refcol = (XColor *) malloc(ncolors * sizeof(XColor));
+ testcol = (XColor *) malloc(ncolors * sizeof(XColor));
+ quercol = (XColor *) malloc(ncolors * sizeof(XColor));
+
+ if((quercol == (XColor *) 0) || (refcol == (XColor *) 0) || (testcol == (XColor *) 0)){
+ delete("malloc() couldn't allocate %d cells for the XColor array.", ncolors);
+ return;
+ } else
+ CHECK;
+
+ for(i=0, cp = testcol, colp = refcol; i < ncolors; i++, cp++, colp++) {
+ colp->pixel = i;
+ colp->red = 0;
+ colp->green = 0;
+ colp->blue = 0;
+ colp->flags = (DoRed|DoGreen|DoBlue);
+
+ cp->pixel = i;
+ cp->red = 0xffff;
+ cp->green = 0xffff;
+ cp->blue = 0xffff;
+ cp->flags = (DoRed|DoGreen|DoBlue);
+
+ quercol[(int)i].pixel = i;
+ }
+
+ color = refcol;
+ XCALL;
+ if(geterr() == Success)
+ CHECK;
+
+ /* Write colormap stored values back over the original array */
+ XQueryColors(display, colormap, refcol, ncolors);
+
+
+ color = testcol;
+ XCALL;
+ if(geterr() == Success)
+ CHECK;
+ /* Write colormap stored values back over the original array */
+ XQueryColors(display, colormap, testcol, ncolors);
+
+
+ for(i=0; i<8; i++) {
+
+ flags = 0;
+
+ if(i&DoRed) {
+ flags |= DoRed;
+ redp = testcol;
+ } else
+ redp = refcol;
+
+ if(i&DoGreen) {
+ flags |= DoGreen;
+ greenp = testcol;
+ } else
+ greenp = refcol;
+
+ if(i&DoBlue) {
+ flags |= DoBlue;
+ bluep = testcol;
+ } else
+ bluep = refcol;
+
+ color = refcol;
+ XCALL;
+ if(geterr() == Success)
+ CHECK;
+
+ for(j=0, cp=testcol; j < ncolors; cp++, j++)
+ cp->flags = flags;
+
+ color = testcol;
+ XCALL;
+ if(geterr() == Success)
+ CHECK;
+
+
+ XQueryColors(display, colormap, quercol, ncolors);
+
+ for(j=0, cp = quercol; j < ncolors; j++, cp++, redp++, greenp++, bluep++)
+ if( (cp->red != redp->red) || (cp->green != greenp->green) || (cp->blue != bluep->blue) ) {
+ report("cell %ld) r %u g %u b %u instead of r %u g %u b %u",
+ i, cp->red, cp->green, cp->blue, redp->red, greenp->green, bluep->blue);
+ FAIL;
+ }
+ if (j == ncolors)
+ CHECK;
+ }
+
+ free((char*)quercol);
+ free((char*)testcol);
+ free((char*)refcol);
+ }
+ CHECKPASS((3 + 3*i) * nsupvis());
+
+
+>>ASSERTION Good D 1
+When the
+.A colormap
+is an installed colourmap for its screen,
+then any changes made by a call to xname are visible immediately.
+>>ASSERTION Good C
+If any of the visual classes DirectColor, PseudoColor or GrayScale is supported:
+When one or more colourmap entries cannot be changed, then all the specified
+colourmap entries that are allocated writable by any client are changed.
+>>STRATEGY
+If visual class is DirectColor, PseudoColor or GrayScale:
+ Create a colormap with AllocNone
+ Check >= 2 cells in colormap
+ Allocate first cell as r/o, second as read write
+ Update r/w cell to known value with XStoreColor.
+ Discover what it was really set to, and remember.
+ Update both cells, the r/w one to an opposite value, with xname
+ Verify BadAccess occurred, will have Failed if not -- see CODE arg.
+ Check that despite error the 2nd, r/w, cell was changed in value
+ Repeat for next matching visual.
+>>CODE BadAccess
+XVisualInfo *vp;
+XColor *cp1;
+XColor *cp2;
+XColor colors[2];
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+unsigned long i;
+unsigned long junk;
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+/* If visual class is DirectColor, PseudoColor or GrayScale: */
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+/* Create a colormap with AllocNone */
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ ncolors = maxsize(vp);
+/* Check >= 2 cells in colormap */
+ if (ncolors < 2) {
+ delete("Need at least two cells in colormap to test this assertion, only had %d available.", ncolors);
+ return;
+ } else
+ CHECK;
+
+ ncolors = 2;
+ color = colors;
+
+/* Allocate first cell as r/o, second as read write */
+ for(i=0, cp1 = color; i < 2; i++, cp1++) {
+ cp1->pixel = i;
+ cp1->green = cp1->blue = cp1->red = 0xffff ^ (i*32767);
+ cp1->flags = (DoRed|DoGreen|DoBlue);
+ }
+ if (XAllocColor(display, colormap, &color[0]) == False) {
+ delete("Could not allocate first cell as r/o.");
+ return;
+ } else
+ CHECK;
+
+ if (XAllocColorCells(display, colormap, True, &junk, 0,
+ &color[1].pixel, 1) == False) {
+ delete("Could not allocate second cell as r/w.");
+ return;
+ } else
+ CHECK;
+
+/* Update r/w cell to known value with XStoreColor. */
+ XStoreColor(display, colormap, &color[1]);
+/* Discover what it was really set to, and remember. */
+ XQueryColor(display, colormap, &color[0]);
+
+/* Update both cells, the r/w one to an opposite value, with xname */
+ color[1].red = color[1].green = color[1].blue ^= 0xffff;
+ XCALL;
+/* Verify BadAccess occurred, will have Failed if not -- see CODE arg. */
+ if (geterr() == BadAccess)
+ CHECK;
+ else
+ report("Updating 2 cells, 1st r/o & 2nd r/w, did not give expected BadAccess error.");
+
+/* Check that despite error the 2nd, r/w, cell was changed in value */
+ XQueryColor(display, colormap, cp2 = &color[1]);
+ cp1 = cp2 - 1;
+ /* now cp1 == remembered (different), cp2 == actual */
+
+ if (cp1->red == cp2->red && cp1->green == cp2->green &&
+ cp1->blue == cp2->blue) {
+ report("After error the r/w cell was not updated: got r,g,b = %lu,%lu,%lu",
+ cp2->red, cp2->green, cp2->blue);
+ FAIL;
+ } else
+ CHECK;
+
+/* Repeat for next matching visual. */
+ }
+
+ CHECKPASS(5*nsupvis());
+
+>>ASSERTION Bad C
+If any of the visual classes DirectColor, PseudoColor or GrayScale is supported:
+When the
+.M pixel
+component in more than one of the
+.S XColor
+structures named by the
+.A color
+argument is not a valid entry in the colormap
+argument, then a
+.S BadValue
+error occurs which will report any one of the
+invalid pixel values.
+>>STRATEGY
+For each visual class DirectColor, PseudoColor and GrayScale:
+ Create a colormap with alloc set to AllocAll.
+ Store an array of 3 colorvalues with pixel values -1, 0, -2.
+ Verify that a BadValue error occurs.
+ Verify that the erroneous pixel was reported as either -1 or -2.
+>>CODE BadValue
+int errval;
+XVisualInfo *vp;
+XColor *cp1;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+XColor colors[3];
+unsigned long i;
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocAll);
+ for(i=0, cp1 = colors; i < 3; i++, cp1++) {
+ cp1->pixel = 0;
+ cp1->red = 0xffff;
+ cp1->green = 0;
+ cp1->blue = 0;
+ cp1->flags = (DoRed|DoGreen|DoBlue);
+ }
+
+ colors[0].pixel = -1;
+ colors[1].pixel = 0;
+ colors[2].pixel = -2;
+ color = colors;
+ ncolors = 3;
+ XCALL;
+ if(geterr() == BadValue) {
+ errval = getbadvalue();
+ if( (errval != -1) && (errval != -2) ) {
+ report("Erroneous value was reported as %d, instead of -1 or -2", errval);
+ FAIL;
+ } else {
+ CHECK;
+ trace("Reported BadValue was %d", errval);
+ }
+ }
+ }
+
+ CHECKPASS(nsupvis());
+
+
+>>ASSERTION Bad A
+.ER BadAccess colormap-store
+>>STRATEGY
+For all visuals:
+ Create a colormap with alloc set to AllocNone. (Unallocated for visual
+ classes DirectColor, PseudoColor and GrayScale; R/O for visual
+ classes TrueColor, StaticColor and StaticGray: all should
+ provoke BadAccess)
+ If visual class is not one of DirectColor, PseudoColor or GrayScale;
+ Store distinct colors into all of the (already r/o) cells using xname.
+ Verify that a BadAccess error is generated.
+ Create a new client with XOpenDisplay.
+ Allocate a readonly cell for the new client with XAllocColor.
+ Store a value in the cell with xname.
+ Verify that a BadAccess error occurred.
+ Allocate a readonly cell with XAllocColor.
+ Store a value in the cell with xname.
+ Verify that a BadAccess error occurred.
+>>CODE BadAccess
+XVisualInfo *vp;
+XColor *cp, *testcol;
+Display *disp2;
+unsigned long i;
+
+ for(resetvinf(VI_WIN); nextvinf(&vp); ) {
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ ncolors = maxsize(vp);
+ testcol = (XColor *) malloc(ncolors * sizeof(XColor));
+
+ if(testcol == (XColor *) 0) {
+ delete("malloc() couldn't allocate %d cells for the XColor array.", ncolors);
+ return;
+ } else
+ CHECK;
+
+ for(i=0, cp = testcol; i < ncolors; i++, cp++) {
+ cp->pixel = i;
+ cp->green = cp->blue = cp->red = 0xffff ^ (i*3);
+ cp->flags = (DoRed|DoGreen|DoBlue);
+ }
+
+ if (vp->class == TrueColor || vp->class == StaticColor ||
+ vp->class == StaticGray) { /* read-only map */
+
+ trace("Testing a colormap with just r-o cells.");
+
+ color = testcol;
+ XCALL;
+ if(geterr() == BadAccess)
+ CHECK;
+ } else {
+ trace("Testing a colormap with unallocated cells.");
+ XSync(display, False);
+ CHECK;
+ }
+
+ trace("Open second client connection.");
+ disp2 = opendisplay();
+
+ if(XAllocColor(disp2, colormap, &testcol[0]) == False) {
+ delete("XAllocColor() failed to allocate a r/o cell for a second client.");
+ return;
+ } else
+ CHECK;
+
+ trace("Trying to write into a r/o cell allocated by another client.");
+ color = &testcol[0];
+ ncolors = 1;
+ XCALL;
+ if(geterr() == BadAccess)
+ CHECK;
+
+ if(XAllocColor(display, colormap, &testcol[1]) == False) {
+ delete("XAllocColor() failed to allocate a r/o cell");
+ return;
+ } else
+ CHECK;
+
+ trace("Trying to write into a r/o cell allocated by self.");
+ color = &testcol[1];
+ ncolors = 1;
+ XCALL;
+ if(geterr() == BadAccess)
+ CHECK;
+ }
+
+ CHECKPASS(6*nvinf());
+
+>>ASSERTION Bad A
+.ER BadColor
+>>ASSERTION Good D 3
+When
+.A rmask_return ,
+.A gmask_return
+and
+.A bmask_return
+have been returned by
+a previous call to
+.S XAllocColorPlanes
+and a read-write colourmap entry
+for a pixel value is changed by a call to xname, then the pixel value
+is decomposed into three components using the masks and the
+independent colourmap entries are updated.
+>>ASSERTION Good C
+If the visual class
+.S DirectColor
+is supported:
+When the
+.A colormap
+argument was created with visual type
+.S DirectColor
+and with
+.A alloc
+set to
+.S AllocAll ,
+and a read-write colourmap entry for a pixel value is changed by a call to xname, then
+the pixel value is decomposed into three components using the
+.S red_mask ,
+.S green_mask
+and
+.S blue_mask
+in the visual and the independent colourmap entries are updated.
+>>STRATEGY
+If visual class DirectColor is supported:
+ Create a colourmap using makecolmap and AlocAll
+ Allocate an array of XColor's and one for each of reds, greens & blues
+ Set up each of reds, greens & blues to have a distinguishable value,
+ using xname, and make sure that's what's in the equivalent colourmaps.
+ Read back some suitably "random" triples and check their components
+ Verify that each component is the same as the corresponding entry in
+ reds, greens & blues.
+ Free the allocated storage: colors, reds, greens & blues.
+>>EXTERN
+#define lowbit(x) ((x) & (~(x) + 1))
+#define bitcontig(x) ((((x) + lowbit(x)) & (x)) == 0)
+#define bitsubset(a,b) (((a) & (b)) == (a))
+
+static int
+maskshift(mask)
+register unsigned long mask;
+{
+register int i;
+
+ for (i = 0; mask; i++) {
+ if (mask & 0x1)
+ return i;
+ mask >>= 1;
+ }
+ return i;
+}
+
+static
+Bool set_one_col(refp, s, flags, mask)
+ unsigned long *refp;
+ char *s;
+ char flags;
+ unsigned long mask;
+{
+ unsigned long i;
+ XColor *cp1;
+ unsigned long *lrefp = refp;
+ int fail = 0; /* used in the FAIL in XCall (spelt wrong intentionally) */
+ /* expects to find color and ncolors in-scope */
+
+ for(i=0, cp1 = color; i < ncolors; i++, cp1++, lrefp++) {
+ unsigned long subfield_ix = i << maskshift(mask);
+
+ if (!bitsubset(subfield_ix, mask)) {
+ delete("Inconsistent maxsize() result: size of %d is too big to fit into %s mask 0x%lx (detected at index %lu, giving pixel 0x%lx)",
+ ncolors, s, mask, i, subfield_ix);
+ return False;
+ }
+ *lrefp = cp1->pixel = subfield_ix;
+ cp1->flags = flags;
+ switch (flags) {
+ case DoRed:
+ cp1->red = i;
+ break;
+ case DoGreen:
+ cp1->green = i;
+ break;
+ case DoBlue:
+ cp1->blue = i;
+ break;
+ default:
+ delete("Flags 0x%x has more than one colour in it.", (unsigned int)flags);
+ return False;
+ }
+ }
+ /* The following may give a warning about the return; */
+ XCALL;
+ XQueryColors(display, colormap, color, ncolors);
+ for(i=0,cp1=color,lrefp=refp; i < ncolors; i++, lrefp++, cp1++) {
+ *lrefp = (flags==DoRed) ? cp1->red :
+ ((flags==DoGreen) ? cp1->green : cp1->blue);
+ }
+ return (geterr() == Success);
+}
+>>CODE
+XVisualInfo *vp;
+unsigned long vmask = (1<<DirectColor);
+XColor *colors;
+unsigned long i;
+XColor *refp;
+unsigned long *reds, *greens, *blues;
+int pathcnt = 0;
+static XColor triples[] = {
+ (unsigned long)~0L, 0,0,0, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 1,0,0, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 0,1,0, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 0,0,1, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 3,2,1, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 1,3,0, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 7,3,1, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 7,8,5, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 15,11,12, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 42,99,13, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 112,127,64, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 255,64,33, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 64,255,33, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 64,33,255, DoRed|DoGreen|DoBlue, 0,
+ (unsigned long)~0L, 255,255,255, DoRed|DoGreen|DoBlue, 0
+ };
+
+/* If visual class DirectColor is supported: */
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+/* Create a colourmap using makecolmap and AlocAll */
+ colormap = makecolmap(display, vp->visual, AllocAll);
+ ncolors = maxsize(vp);
+/* Allocate an array of XColor's and one for each of reds, greens & blues */
+ colors = (XColor *) malloc(ncolors * sizeof(XColor));
+ color = colors;
+ reds = (unsigned long *) malloc(ncolors * sizeof(unsigned long));
+ greens = (unsigned long *) malloc(ncolors * sizeof(unsigned long));
+ blues = (unsigned long *) malloc(ncolors * sizeof(unsigned long));
+ if ((colors == (XColor *) 0) || (reds == (unsigned long *) 0) ||
+ (greens == (unsigned long *) 0) ||
+ (blues == (unsigned long *) 0)) {
+ delete("malloc() couldn't allocate %d cells for the XColor array.", ncolors);
+ return;
+ } else
+ CHECK;
+
+/* Set up each of reds, greens & blues to have a distinguishable value, */
+/* using xname, and make sure that's what's in the equivalent colourmaps. */
+ /*
+ kept in reds, greens or blues. This routine expects
+ color and ncolors to be set right. It uses XCall as well.
+ */
+ if (!set_one_col(reds, "red", DoRed, vp->red_mask) ||
+ !set_one_col(greens, "green", DoGreen, vp->green_mask) ||
+ !set_one_col(blues, "blue", DoBlue, vp->blue_mask)
+ ) {
+ delete("Failed to set up colourmap for test.");
+ return;
+ } else
+ CHECK;
+
+/* Read back some suitably "random" triples and check their components */
+ for (i=0, refp=triples; i < NELEM(triples); i++, refp++) {
+ XColor testcol;
+ unsigned long r,g,b;
+
+ if (refp->red >= (unsigned)ncolors ||
+ refp->green >= (unsigned)ncolors ||
+ refp->blue >= (unsigned)ncolors)
+ continue;
+
+ r = refp->red << maskshift(vp->red_mask);
+ if (!bitsubset(r, vp->red_mask))
+ continue;
+ g = refp->green << maskshift(vp->green_mask);
+ if (!bitsubset(g, vp->green_mask))
+ continue;
+ b = refp->blue << maskshift(vp->blue_mask);
+ if (!bitsubset(b, vp->blue_mask))
+ continue;
+ testcol.pixel = r | g | b;
+
+ XQueryColor(display, colormap, &testcol);
+
+/* Verify that each component is the same as the corresponding entry in */
+/* reds, greens & blues. */
+ if (testcol.flags != (DoRed | DoGreen | DoBlue) ||
+ testcol.red != reds[refp->red] ||
+ testcol.green != greens[refp->green] ||
+ testcol.blue != blues[refp->blue]) {
+ report("Expected r,g,b = %lu, %lu, %lu but got %lu, %lu, %lu for pixel 0x%lx with r-,g-,b-masks 0x%lx, 0x%lx, 0x%lx",
+ reds[refp->red], greens[refp->green], blues[refp->blue],
+ testcol.red, testcol.green, testcol.blue,
+ testcol.pixel, vp->red_mask,
+ vp->green_mask, vp->blue_mask);
+ FAIL;
+ } else
+ CHECK;
+
+ pathcnt++;
+ }
+
+/* Free the allocated storage: colors, reds, greens & blues. */
+ free((char*)colors);
+ free((char*)reds);
+ free((char*)greens);
+ free((char*)blues);
+ }
+
+ CHECKPASS(pathcnt+2*nsupvis());
+
+
+>>#HISTORY Cal Completed Written in new style and format.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/strnmdclr/strnmdclr.m b/xc/test/xsuite/xtest/tset/CH05/strnmdclr/strnmdclr.m
new file mode 100644
index 000000000..bac19cc14
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/strnmdclr/strnmdclr.m
@@ -0,0 +1,468 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XStoreNamedColor CH05
+void
+XStoreNamedColor(display, colormap, color, pixel, flags)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+char *color = "";
+unsigned long pixel;
+int flags = DoRed|DoGreen|DoBlue;
+>>ASSERTION Good C
+>>#
+>># TODO dave - Jan 17
+>># The X11R4 spec is vague about whether it's the closest available or
+>># or the actual values that are stored.
+>># O'Reilly Vol one page 190 has a footnote saying the actual values
+>># you tried to store may not be stored.
+>>#
+If any of the visual classes DirectColor, PseudoColor or GrayScale is supported:
+A call to xname obtains the closest available RGB values for the
+.A colormap
+argument to those specified for the colour named
+.A color
+in the database, and stores those values in the read-write colourmap entry
+specified by the
+.M pixel
+component of the
+.S XColor
+structure.
+>>STRATEGY
+For each visual class DirectColor, PseudoColor and GrayScale:
+ Create a colormap with alloc set to AllocAll.
+ Store the r,g and b colour values of XT_GOOD_COLOUR_NAME in the colourmap with XStoreNamedColor.
+ Obtain the rbg values of the stored color with XQueryColor.
+ Store those rgb values in the colormap with XStoreColor.
+ Obtain the stored rgb values with XQueryColor.
+ Verify the rgb values stored in the two cells are identical.
+>>CODE
+XVisualInfo *vp;
+char *goodname;
+XColor namedcol, testcol, storedcol;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ if((goodname = tet_getvar("XT_GOOD_COLORNAME")) == (char *) 0) {
+ delete("XT_GOOD_COLORNAME is not defined.");
+ return;
+ }
+
+ flags = DoRed|DoGreen|DoBlue;
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting XStoreNamedColor() for class %s, color %s", displayclassname(vp->class), goodname);
+ colormap = makecolmap(display, vp -> visual, AllocAll);
+ color = goodname;
+ pixel = 0L;
+
+ XCALL;
+
+ namedcol.pixel = 0L;
+ XQueryColor(display, colormap, &namedcol);
+ testcol = namedcol;
+ testcol.pixel = 1L;
+ testcol.flags = flags;
+ XStoreColor(display, colormap, &testcol);
+ storedcol.pixel = 1L;
+ storedcol.flags = flags;
+ XQueryColor(display, colormap, &storedcol);
+
+ trace("Named Color : pixel %lu, r %u g %u b %u", namedcol.pixel , namedcol.red, namedcol.green, namedcol.blue);
+ trace("Stored Color: pixel %lu, r %u g %u b %u", storedcol.pixel, storedcol.red, storedcol.green, storedcol.blue);
+
+
+ if( (namedcol.red != storedcol.red) || (namedcol.green != storedcol.green) || (namedcol.blue != storedcol.blue) ) {
+ report("XStoreNamedColor() return RGB values r %u g %u b %u instead of r %u g %u b %u.",
+ namedcol.red, namedcol.green, namedcol.blue, storedcol.red, storedcol.green, storedcol.blue);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+
+>>ASSERTION Good A
+If any of the visual classes DirectColor, PseudoColor or GrayScale is supported:
+A call to xname changes the red, green and blue values
+in the read-write colourmap entry in accordance with the
+.A flags
+argument.
+>>STRATEGY
+For each supported visual class DirectColor, PseudoColor and GrayScale:
+ Create a colormap with XCreateColormap.
+ Store XT_GOOD_COLOR_NAME r, g and b values in cell 0 with XStoreNamedColor.
+ Obtain the r,g and b values with XQueryColor.
+ For each possible combination DoRed, DoGreen and DoBlue in flags:
+ Store the bitwise complementary rgb values in the same cell with XStoreColor.
+ Store the XT_GOOD_COLOR_NAME values in the colourmap cell using XStoreNamedColor.
+ Verify that only the components of the colourcell specified by the flags value have been altered with XQueryColor.
+>>CODE
+XVisualInfo *vp;
+int i;
+char *goodname;
+XColor namedcol, testcol, storedcol;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+unsigned short redval, greenval, blueval;
+
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ if((goodname = tet_getvar("XT_GOOD_COLORNAME")) == (char *) 0) {
+ delete("XT_GOOD_COLORNAME is not defined.");
+ return;
+ }
+
+ flags = DoRed|DoGreen|DoBlue;
+ color = goodname;
+ pixel = 0L;
+ storedcol.pixel = 0L;
+ testcol.pixel = 0L;
+ namedcol.pixel = 0L;
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting XStoreNamedColor() for class %s, color %s", displayclassname(vp->class), goodname);
+ colormap = makecolmap(display, vp -> visual, AllocAll);
+ XCALL;
+ XQueryColor(display, colormap, &namedcol);
+
+ testcol = namedcol;
+ testcol.red ^= 0xffff;
+ testcol.green ^= 0xffff;
+ testcol.blue ^= 0xffff;
+ testcol.flags = DoRed | DoGreen | DoBlue;
+
+ for(i=0; i<8; i++) {
+
+ flags = 0;
+
+ if(i&DoRed) {
+ flags |= DoRed;
+ redval = namedcol.red;
+ } else
+ redval = testcol.red;
+
+ if(i&DoGreen) {
+ flags |= DoGreen;
+ greenval = namedcol.green;
+ } else
+ greenval = testcol.green;
+
+ if(i&DoBlue) {
+ flags |= DoBlue;
+ blueval = namedcol.blue;
+ } else
+ blueval = testcol.green;
+
+ XStoreColor(display, colormap, &testcol);
+ XCALL;
+ XQueryColor(display, colormap, &storedcol);
+
+ if( (redval != storedcol.red) || (greenval != storedcol.green) || (blueval != storedcol.blue) ){
+ report("XStoreNamedColor() RGB value r %u g %u b %u instead of r %u g %u b %u.",
+ storedcol.red, storedcol.green, storedcol.blue, redval, greenval, blueval);
+ FAIL;
+ }
+ }
+
+ if(i == 8)
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Good A
+If any of the visual classes DirectColor, PseudoColor or GrayScale is supported:
+Upper and lower case characters in the
+.A color
+argument refer to the same color.
+>>STRATEGY
+For each supported visual class:
+ Create a colomap with alloc set to AllocAll.
+ Store colour XT_GOOD_COLOR_NAME in the colourmap with XStoreNamedColor.
+ Obtain the stored rgb values with XQueryColor,
+ Store colour XT_GOOD_COLOR_NAME with alternating characters in alternating case with XStoreNamedColor.
+ Verify that the rgb values written by both calls was identical.
+>>CODE
+XVisualInfo *vp;
+char *cp, *goodname, *casename;
+XColor casecol, testcol;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+unsigned short trunc;
+int i;
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ if( (goodname = tet_getvar("XT_GOOD_COLORNAME")) == (char *) 0) {
+ delete("XT_GOOD_COLORNAME is not defined.");
+ return;
+ }
+
+
+ casename = (char *) malloc( strlen(goodname) + 1);
+ strcpy(casename, goodname);
+
+ for(i=0, cp=casename; *cp; i++)
+ if(i&1)
+ *cp++ = tolower(*cp);
+ else
+ *cp++ = toupper(*cp);
+
+
+ testcol.pixel = 0L;
+ casecol.pixel = 0L;
+ pixel = 0L;
+ flags = DoRed|DoGreen|DoBlue;
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp -> visual, AllocAll);
+ color = goodname;
+
+ XCALL;
+
+ XQueryColor(display, colormap, &testcol);
+
+
+ color = casename;
+ trace("Testing colourname %s", color);
+
+ XCALL;
+
+ XQueryColor(display, colormap, &casecol);
+
+ if((casecol.pixel != testcol.pixel) || (casecol.red != testcol.red) || (casecol.green != testcol.green) || (casecol.blue != testcol.blue)) {
+ report("Colour name %s pixel %lu ( r %u g %u b %u) instead of pixel %lu ( r %u g %u b %u)",
+ goodname, casecol.pixel, casecol.red, casecol.green, casecol.blue,
+ testcol.pixel, testcol.red, testcol.green, testcol.blue);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+ CHECKPASS(nsupvis());
+
+
+>>ASSERTION Bad A
+If any of the visual classes DirectColor, PseudoColor or GrayScale is supported:
+When the
+.A pixel
+argument is not a valid entry in the
+.A colormap
+argument,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+For each visual class DirectColor, PseudoColor and GrayScale:
+ Create a colourmap with alloc set to AllocAll.
+ Store the colour XT_GOOD_COLOR_NAME at pixel = colourmap_size with XStoreNamedColor.
+ Verify that a BadValue error is generated.
+>>CODE BadValue
+XVisualInfo *vp;
+char *goodname;
+XColor namedcol, testcol, storedcol;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ if((goodname = tet_getvar("XT_GOOD_COLORNAME")) == (char *) 0) {
+ delete("XT_GOOD_COLORNAME is not defined.");
+ return;
+ }
+
+ flags = DoRed|DoGreen|DoBlue;
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ trace("Attempting XStoreNamedColor() for class %s, color %s", displayclassname(vp->class), goodname);
+ colormap = makecolmap(display, vp -> visual, AllocAll);
+ color = goodname;
+ pixel = maxsize(vp) + 1;
+ if (vp->class == DirectColor) {
+ pixel = (vp->red_mask | vp->green_mask | vp->blue_mask);
+ pixel |= pixel << 1;
+ }
+ trace("Pixel set to %ld", pixel);
+ XCALL;
+ if(geterr() == BadValue)
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Bad A
+.ER BadAccess colormap-store
+>>STRATEGY
+For each visual class DirectColor, PseudoColor and GrayScale:
+ Create a colormap (r/o) with alloc set to AllocNone.
+ Store the color XT_GOOD_COLORNAME with XStoreNamedColor
+ Verify that a BadAccess error is generated.
+ Create a new client with XOpenDisplay.
+ Allocate a full red readonly cell for the new client with XAllocColor.
+ Store the color XT_GOOD_COLORNAME with XStoreNamedColor.
+ Verify that a BadAccess error occurred.
+ Allocate another readonly cell with XAllocColor.
+ Store the color XT_GOOD_COLORNAME with XStoreNamedColor.
+ Verify that a BadAccess error occurred.
+>>CODE BadAccess
+XVisualInfo *vp;
+XColor testcol;
+char *goodname;
+Display *disp2;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ UNSUPPORTED;
+ return;
+ }
+
+ if((goodname = tet_getvar("XT_GOOD_COLORNAME")) == (char *) 0) {
+ delete("XT_GOOD_COLORNAME is not defined.");
+ return;
+ }
+
+ pixel = 0L;
+ color = goodname;
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ trace("Testing a colormap with no allocated cells.");
+ XCALL;
+
+ if(geterr() == BadAccess)
+ CHECK;
+
+ disp2 = opendisplay();
+
+ testcol.flags = DoRed;
+ testcol.red = 65535;
+ if(XAllocColor(disp2, colormap, &testcol) == False) {
+ delete("XAllocColor() failed to allocate a full red r/o cell for a second client.");
+ return;
+ } else
+ CHECK;
+
+ trace("Trying to write into a r/o cell allocated by another client.");
+ pixel = testcol.pixel;
+ XCALL;
+ if(geterr() == BadAccess)
+ CHECK;
+
+ testcol.red ^= 0xffff;
+ testcol.green ^= 0xffff;
+ testcol.blue ^= 0xffff;
+ testcol.flags = flags;
+
+ if(XAllocColor(display, colormap, &testcol) == False) {
+ delete("XAllocColor() failed to allocate a r/o cell with r,g,b = 0x%x,0x%x,0x%x", testcol.red, testcol.green, testcol.blue);
+ return;
+ } else
+ CHECK;
+
+ trace("Trying to write into a r/o cell allocated by self.");
+ pixel = testcol.pixel;
+ XCALL;
+
+ if(geterr() == BadAccess)
+ CHECK;
+ }
+
+ CHECKPASS(5*nsupvis());
+
+>>ASSERTION Bad A
+.ER BadColor
+>>ASSERTION Bad A
+.ER BadName colour
+>>STRATEGY
+For the visual classes DirectColor, PseudoColor and GrayScale :
+ Create a colormap with alloc set to AllocAll.
+ Allocate a cell with colour XT_BAD_COLORNAME
+ in the colourmap with XStoreNamedColor.
+ Verify that a BadName error occurred.
+>>CODE BadName
+XVisualInfo *vp;
+char *badname;
+Status status;
+unsigned long vmask = (1<<DirectColor)|(1<<PseudoColor)|(1<<GrayScale);
+
+ if( (vmask = visualsupported(display, vmask)) == 0L) {
+ unsupported("DirectColor, PseudoColor visual classes are not supported.");
+ return;
+ }
+
+ if( (badname = tet_getvar("XT_BAD_COLORNAME")) == (char *) 0) {
+ delete("XT_BAD_COLORNAME is not defined.");
+ return;
+ }
+
+ for(resetsupvis(vmask); nextsupvis(&vp); ) {
+ colormap = makecolmap(display, vp -> visual, AllocAll);
+ color = badname;
+ XCALL;
+ if(geterr() == BadName)
+ CHECK;
+ }
+
+ CHECKPASS(nsupvis());
+
+>>ASSERTION Good D 3
+When
+.A rmask_return ,
+.A gmask_return
+and
+.A bmask_return
+have been returned by
+a previous call to
+.S XAllocColorPlanes
+and a read-write colourmap entry
+for a pixel value is changed by a call to xname, then the pixel value
+is decomposed into three components using the masks and the
+independent colourmap entries are updated.
+>>ASSERTION Good D 3
+If the visual class
+.S DirectColor
+is supported:
+When the
+.A colormap
+argument was created with visual type
+.S DirectColor
+and with
+.A alloc
+set to
+.S AllocAll ,
+and a read-write colourmap entry for a pixel value is changed by a call to xname, then
+the pixel value is decomposed into three components using the
+.S red_mask ,
+.S green_mask
+and
+.S blue_mask
+in the visual and the independent colourmap entries are updated.
+>>#HISTORY Cal Completed Written in new format and style.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Completed Writing code.
+>>#HISTORY Kieron Completed Bug-fixes and re-engineering
diff --git a/xc/test/xsuite/xtest/tset/CH05/stsbwmd/stsbwmd.m b/xc/test/xsuite/xtest/tset/CH05/stsbwmd/stsbwmd.m
new file mode 100644
index 000000000..d1a12bf1f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stsbwmd/stsbwmd.m
@@ -0,0 +1,91 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetSubwindowMode CH05
+void
+XSetSubwindowMode(display, gc, subwindow_mode);
+Display *display = Dsp;
+GC gc;
+int subwindow_mode = IncludeInferiors;
+>>SET need-gc-flush
+>>ASSERTION Good A
+A call to xname sets the
+.M subwindow_mode
+component of the specified GC to the value of the
+.A subwindow_mode
+argument.
+>>STRATEGY
+Create window.
+Create child window fully obscuring the parent.
+Create GC with subwindow_mode = IncludeInferiors, fg = WhitePixel, bg = BlackPixel.
+Draw point (0, 0) on ParentWindow.
+Verify pixel at (0, 0) is fg using XGetImage and XGetPixel.
+Verify pixel at (0, 1) is bg using XGetImage and XGetPixel.
+Set subwindow_mode of GC to ClipByChildren with XSetSubwindowMode.
+Set pixel at (0, 1) on parent window.
+Verify pixel at (0, 1) is bg using XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+Window pwin, cwin;
+XGCValues values;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ pwin = makewin(display, vp);
+ cwin = crechild(display, pwin, (struct area *) 0);
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.subwindow_mode = IncludeInferiors;
+ gc = XCreateGC(display, pwin, GCForeground | GCBackground | GCSubwindowMode, &values);
+
+ XDrawPoint(display, pwin, gc, 0, 0);
+
+ if( ! checkpixel(display, cwin, 0, 0, W_FG)) {
+ delete("Pixel at (0, 0) was not set to foreground.");
+ return;
+ } else
+ CHECK;
+
+
+ if( ! checkpixel(display, cwin, 0, 1, W_BG)) {
+ delete("Pixel at (0, 1) was not set to background.");
+ return;
+ } else
+ CHECK;
+
+ subwindow_mode = ClipByChildren;
+ XCALL;
+
+ XDrawPoint(display, pwin, gc, 0, 1);
+
+ if( ! checkpixel(display, cwin, 0, 1, W_BG)) {
+ report("Pixel at (0, 1) was not set to background.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER Value subwindow_mode ClipByChildren IncludeInferiors
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/ststppl/ststppl.m b/xc/test/xsuite/xtest/tset/CH05/ststppl/ststppl.m
new file mode 100644
index 000000000..16800e0e2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/ststppl/ststppl.m
@@ -0,0 +1,128 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetStipple CH05
+void
+XSetStipple(display, gc, stipple);
+Display *display = Dsp;
+GC gc;
+Pixmap stipple;
+>>ASSERTION Good A
+A call to xname sets the
+.M stipple
+component of the specified GC to the value of the
+.A stipple
+argument.
+>>STRATEGY
+Create window, size W_STDWIDTHxW_STDHEIGHT (>=1x1), with
+ bg = background_pixel = W_BG.
+Create GC with stipple = {1,}, fg = W_FG, bg = W_BG,
+ fill_style = FillOpaqueStippled.
+Draw a filled rectangle (0, 0) (1, 1) with XFillRectangle.
+Verify pixel at (0, 0) is W_FG with XGetImage and XGetPixel.
+Set stipple component of GC to {0,} with XSetStipple.
+Draw a filled rectangle (0, 0) (1, 1) with XFillRectangle.
+Verify pixel at (0, 0) is W_BG with XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+Pixmap stip1, stip2;
+GC sgc;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp); /* background_pixel = W_BG */
+
+ stip1 = XCreatePixmap( display, win, 1, 1, 1);
+ stip2 = XCreatePixmap( display, win, 1, 1, 1);
+
+ values.foreground = 1;
+
+ sgc = XCreateGC(display, stip1, GCForeground, &values);
+
+ XDrawPoint(display, stip1, sgc, 0, 0);
+
+ XSetForeground(display, sgc, 0);
+ XDrawPoint(display, stip2, sgc, 0, 0);
+
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.fill_style = FillOpaqueStippled;
+ values.stipple = stip1;
+
+ gc = XCreateGC(display, win, GCForeground | GCBackground | GCFillStyle | GCStipple, &values);
+ XFillRectangle(display, win, gc, 0, 0, 1, 1);
+
+ if( ! checkpixel(display, win, 0, 0, W_FG)) {
+ delete("Pixel at (0, 0) was not set to foreground.");
+ return;
+ } else
+ CHECK;
+
+ stipple = stip2;
+ XCALL;
+
+ XFillRectangle(display, win, gc, 0, 0, 1, 1);
+ if( ! checkpixel(display, win, 0, 0, W_BG)) {
+ report("Pixel at (0, 0) was not set to background.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER Match gc-drawable-screen
+>>ASSERTION Bad A
+When the
+.A stipple
+does not have depth one, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If pixmap with depth other than one is supported:
+ Create pixmap with depth other than one.
+ Created gc using pixmap.
+ Verify that a call to XSetStipple generates a BadMatch error.
+>>CODE BadMatch
+
+ if((stipple = nondepth1pixmap(display, DRW(display))) == (Pixmap) 0) {
+ report("Only depth 1 pixmaps are supported.");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ gc = XCreateGC(display, stipple, 0, 0);
+
+ XCALL;
+
+ if(geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>>ASSERTION Bad A
+.ER BadPixmap
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY kieron Completed Re-check the above NOTEd assertions please.
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/ststt/ststt.m b/xc/test/xsuite/xtest/tset/CH05/ststt/ststt.m
new file mode 100644
index 000000000..4bac203b4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/ststt/ststt.m
@@ -0,0 +1,218 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetState CH05
+void
+XSetState(display, gc, foreground, background, function, plane_mask)
+Display *display = Dsp;
+GC gc;
+unsigned long foreground = W_FG;
+unsigned long background = W_BG;
+int function = GXcopy;
+unsigned long plane_mask = AllPlanes;
+>>SET need-gc-flush
+>>ASSERTION Good A
+A call to xname sets the
+.M foreground ,
+.M background ,
+.M plane_mask
+and
+.M function
+components of the specified GC to the values of the
+.A foreground ,
+.A background ,
+.A plane_mask
+and
+.A function
+arguments.
+>>STRATEGY
+*Test background.
+Create window.
+Create GC with LineStyle = LineDoubleDash, bg = BlackPixel , fg = WhitePixel, fn = GXcopy, line_width = 1
+Draw a horizonal line (sufficiently long for even and odd dashes)
+Verify pixel at (1, 0) is bg with XGetImage and XGetPixel.
+Set gc bg component to fg value using XSetState.
+Redraw same line (should fill in the gaps exactly)
+Verify pixel at (1, 0) is fg with XGetImage and XGetPixel.
+
+*Test foreground.
+Create window.
+Create GC with bg = BlackPixel, fg = WhitePixel, fn = GXcopy.
+Set pixel at (0, 0) with XDrawPoint.
+Verify pixel at (0, 0) is fg with XGetImage and XGetPixel.
+Set fg component of GC to bg with XSetState.
+Set pixel at (0, 0) with XDrawPoint.
+Verify pixel at (0, 0) is bg with XGetImage and XGetPixel.
+
+*Test plane_mask.
+Create window.
+Create GC with bg = BlackPixel, fg = WhitePixel, plane_mask = 0.
+Verify pixel at (0, 0) is bg with XGetImage and XGetPixel.
+Set pixel at (0, 0) with XDrawPoint.
+Verify pixel at (0, 0) is bg with XGetImage and XGetPixel.
+Set plane_mask component of GC to AllPlanes with XSetState.
+Set pixel at (0, 0) with XDrawPoint.
+Verify pixel at (0, 0) is fg with XGetImage and XGetPixel.
+
+*Test function.
+Create window.
+Create GC with bg = BlackPixel, fg = WhitePixel, fn = GXcopy.
+Set pixel at (0, 0) to WhitePixel with XDrawPoint.
+Verify pixel at (0, 0) is WhitePixel with XGetImage and XGetPixel.
+Set fg to (BlackPixel xor WhitePixel)
+Set fn component of GC to GXxor with XSetState.
+Set pixel at (0, 0) to fg with XDrawPoint.
+Verify pixel at (0, 0) is BlackPixel with XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+XGCValues values;
+Window win;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ /* Test background */
+
+ win = makewin(display, vp);
+ values.function = GXcopy;
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.line_style = LineDoubleDash;
+ values.line_width = 1;
+ values.dashes = 1; /* [1, 1] */
+ gc = XCreateGC(display, win, (GCFunction | GCLineStyle | GCDashList | GCForeground | GCBackground | GCLineWidth), &values);
+
+ XDrawLine(display, win, gc, 0, 0, 2, 0);
+
+ if( ! checkpixel(display, win, 1, 0, W_BG)){
+ delete("Pixel at (1, 0) was not set to W_BG.");
+ return;
+ } else
+ CHECK;
+
+ background = W_FG;
+ XCALL;
+ background = W_BG;
+
+ XDrawLine(display, win, gc, 0, 0, 2, 0);
+ if( ! checkpixel(display, win, 1, 0, W_FG)){
+ report("Pixel at (1, 0) was not set to W_FG.");
+ FAIL;
+ } else
+ CHECK;
+
+ /* Test foreground */
+
+ win = makewin(display, vp);
+ values.foreground = W_FG;
+ values.background = W_BG;
+ gc = XCreateGC(display, win, GCForeground | GCBackground, &values);
+
+ XDrawPoint(display, win, gc, 0, 0);
+
+ if( ! checkpixel(display, win, 0, 0, W_FG)) {
+ delete("Pixel at (0, 0) was not set to W_FG.");
+ return;
+ } else
+ CHECK;
+
+ foreground = W_BG;
+ XCALL;
+ foreground = W_FG;
+
+ XDrawPoint(display, win, gc, 0, 0);
+
+ if( ! checkpixel(display, win, 0, 0, W_BG)) {
+ report("Pixel at (0, 0) was not set to W_BG.");
+ FAIL;
+ } else
+ CHECK;
+
+ /* Test plane_mask */
+
+ win = makewin(display, vp);
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.plane_mask = 0;
+
+ gc = XCreateGC(display, win, (GCPlaneMask | GCForeground | GCBackground), &values);
+
+ if( ! checkpixel(display, win, 0, 0, W_BG)) {
+ delete("Pixel at (0, 0) was not set to W_BG.");
+ return;
+ } else
+ CHECK;
+
+ XDrawPoint(display, win, gc, 0, 0);
+
+ if( ! checkpixel(display, win, 0, 0, W_BG)) {
+ delete("Pixel at (0, 0) was not left as W_BG.");
+ return;
+ } else
+ CHECK;
+
+ plane_mask = AllPlanes;
+ XCALL;
+
+ XDrawPoint(display, win, gc, 0, 0);
+ if( ! checkpixel(display, win, 0, 0, W_FG)) {
+ report("Pixel at (0, 0) was not set to W_FG.");
+ FAIL;
+ } else
+ CHECK;
+
+ /* Test function */
+
+ win = makewin(display, vp);
+ values.foreground = W_FG;
+ values.background = W_BG;
+ gc = XCreateGC(display, win, GCForeground | GCBackground, &values);
+
+ XDrawPoint(display, win, gc, 0, 0);
+
+ if( ! checkpixel(display, win, 0, 0, W_FG)) {
+ delete("Pixel at (0, 0) was not set to W_FG.");
+ return;
+ } else
+ CHECK;
+
+ values.foreground = W_FG ^ W_BG;
+ XSetForeground(display, gc, values.foreground);
+
+ function = GXxor;
+ XCALL;
+ function = GXcopy;
+
+ XDrawPoint(display, win, gc, 0, 0);
+
+ if( ! checkpixel(display, win, 0, 0, W_BG)) {
+ report("Pixel at (0, 0) was not set to W_BG.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(9);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>>ASSERTION Bad A
+.ER Value function GXclear GXand GXandReverse GXcopy GXandInverted GXnoop GXxor GXor GXnor GXequiv GXinvert GXorReverse GXcopyInverted GXorInverted GXnand GXset
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/sttl/sttl.m b/xc/test/xsuite/xtest/tset/CH05/sttl/sttl.m
new file mode 100644
index 000000000..aaa78957e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/sttl/sttl.m
@@ -0,0 +1,102 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetTile CH05
+void
+XSetTile(display, gc, tile)
+Display *display = Dsp;
+GC gc;
+Pixmap tile;
+>>ASSERTION Good A
+A call to xname sets the
+.M tile
+component of the specified GC to the value of the
+.A tile
+argument.
+>>STRATEGY
+Create window, size W_STDWIDTHxW_STDHEIGHT (>=1x1), with
+ bg = background_pixel = W_BG.
+Create 1x1 pixmap, tile1.
+Create 1x1 pixmap, tile2.
+Create GC with fg = W_BG.
+Set pixel at (0, 0) in tile2 to W_BG with XDrawPoint.
+Set GC component fg = W_FG using XSetForeground.
+Set pixel at (0, 0) in tile1 to W_FG with XDrawPoint.
+Create GC with fill_style = FillTiled, tile = tile1.
+Draw a filled rectangle (0, 0) (1, 1) with XFillRectangle.
+Verify pixel at (0, 0) is W_FG with XGetImage and XGetPixel.
+Set GC component tile = tile2 using XSetTile.
+Draw a filled rectangle (0, 0) (1, 1) with XFillRectangle.
+Verify pixel at (0, 0) is W_BG with XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+Pixmap tile1, tile2;
+GC tgc;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp); /* background_pixel = W_BG */
+ tile1 = XCreatePixmap( display, win, 1, 1, vp->depth);
+ tile2 = XCreatePixmap( display, win, 1, 1, vp->depth);
+
+ values.foreground = W_BG;
+
+ tgc = XCreateGC(display, win, GCForeground, &values);
+ XDrawPoint(display, tile2, tgc, 0, 0);
+
+ XSetForeground(display, tgc, W_FG);
+ XDrawPoint(display, tile1, tgc, 0, 0);
+
+ values.fill_style = FillTiled;
+ values.tile = tile1;
+ gc = XCreateGC(display, win, GCFillStyle | GCTile, &values);
+ XFillRectangle(display, win, gc, 0, 0, 1, 1);
+
+ if( ! checkpixel(display, win, 0, 0, W_FG)) {
+ delete("Pixel at (0, 0) was not set to foreground.");
+ return;
+ } else
+ CHECK;
+
+ tile = tile2;
+ XCALL;
+
+ XFillRectangle(display, win, gc, 0, 0, 1, 1);
+
+ if( ! checkpixel(display, win, 0, 0, W_BG)) {
+ report("Pixel at (0, 0) was not set to background.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+.ER Match gc-drawable-screen
+>>ASSERTION Bad A
+.ER Match gc-drawable-depth
+>>ASSERTION Bad A
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>>ASSERTION Bad A
+.ER BadPixmap
+>># HISTORY cal Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY kieron Completed Please re-check assertions marked NOTE.
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/sttsorgn/sttsorgn.m b/xc/test/xsuite/xtest/tset/CH05/sttsorgn/sttsorgn.m
new file mode 100644
index 000000000..38a2c658c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/sttsorgn/sttsorgn.m
@@ -0,0 +1,96 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetTSOrigin CH05
+void
+XSetTSOrigin(display, gc, ts_x_origin, ts_y_origin)
+Display *display = Dsp;
+GC gc;
+int ts_x_origin = -1;
+int ts_y_origin = -1;
+>>SET need-gc-flush
+>>ASSERTION Good A
+A call to xname sets the
+.M ts_x_origin
+and
+.M ts_y_origin
+components of the specified GC to the arguments
+.A ts_x_origin
+and
+.A ts_y_origin .
+>>STRATEGY
+Create Window.
+Create GC with fg = WhitePixel, bg = BlackPixel, fill_style = FillOpaqueTiled,
+ tile = | 0 1 |
+ | 1 1 |
+Draw a filled rectangle (0, 0) (2, 2) with XFillRectangle.
+Verify Pixel at (0, 0) is bg with XGetImage and XGetPixel.
+Set Tile/Stipple origin to (1, 1) with XSetTSOrigin.
+Draw a filled rectangle (0, 0) (2, 2) with XFillRectangle.
+Verify Pixel at (0, 0) is bg with XGetImage and XGetPixel.
+>>CODE
+XVisualInfo *vp;
+Window win;
+XGCValues values;
+Pixmap stip;
+GC sgc;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ stip = XCreatePixmap( display, win, 2, 2, 1);
+
+ values.foreground = 1;
+ sgc = XCreateGC(display, stip, GCForeground, &values);
+ XFillRectangle(display, stip, sgc, 0, 0, 2, 2);
+ XSetForeground(display, sgc, 0);
+ XDrawPoint(display, stip, sgc, 0, 0);
+
+ values.foreground = W_FG;
+ values.background = W_BG;
+ values.fill_style = FillOpaqueStippled;
+ values.stipple = stip;
+
+ gc = XCreateGC(display, win, GCForeground | GCBackground | GCFillStyle | GCStipple, &values);
+ XFillRectangle(display, win, gc, 0, 0, 2, 2);
+
+ if( ! checkpixel(display, win, 0, 0, W_BG)) {
+ delete("Pixel at (0, 0) was not set to background.");
+ return;
+ } else
+ CHECK;
+
+ ts_x_origin = 1;
+ ts_y_origin = 1;
+ XCALL;
+
+ XFillRectangle(display, win, gc, 0, 0, 2, 2);
+ if( ! checkpixel(display, win, 0, 0, W_FG)) {
+ report("Pixel at (0, 0) was not set to foreground.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad B 1
+.ER Alloc
+>>ASSERTION Bad A
+.ER GC
+>># HISTORY cal Completed Written in new format and style /tree/Xtest/x/root/xtest/lib/libxtest.a
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY cal Action Writing code.
diff --git a/xc/test/xsuite/xtest/tset/CH05/stwdwclrmp/stwdwclrmp.m b/xc/test/xsuite/xtest/tset/CH05/stwdwclrmp/stwdwclrmp.m
new file mode 100644
index 000000000..7f6d14acc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH05/stwdwclrmp/stwdwclrmp.m
@@ -0,0 +1,114 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWindowColormap CH05
+void
+XSetWindowColormap(display, w, colormap)
+Display *display = Dsp;
+Window w = DRW(display);
+Colormap colormap = DefaultColormap(display, DefaultScreen(display));
+>>ASSERTION Good A
+A call to xname sets the colourmap of the window argument
+.A w
+to the
+.A colormap
+argument.
+>>STRATEGY
+For each supported visual class:
+ Create a colormap with XCreateColormap.
+ Create a window with XCreateWindow.
+ Set the colourmap of the window to the created colormap with XSetWindowColormap.
+ Get the colourmap associated with the window with XGetWindowAttributes.
+ Verify that the created colourmap and that associated with the window are the same.
+>>CODE
+XVisualInfo *vi;
+XWindowAttributes watts;
+
+ for(resetvinf(VI_WIN); nextvinf(&vi); ) {
+
+ colormap = makecolmap(display, vi->visual, AllocNone);
+ w = makewin(display, vi);
+ XCALL;
+ if( XGetWindowAttributes(display, w, &watts) == False ) {
+ delete("XGetWindowAttributes() failed on visual class %s", displayclassname(vi->class));
+ return;
+ } else
+ CHECK;
+
+ if( watts.colormap != colormap ) {
+ report("Colormap of window was not set for visual class %s", displayclassname(vi->class));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Bad C
+If more than one type of visual is supported:
+When the
+.A colormap
+argument
+does not have the same visual type as the window
+specified by the window argument
+.A w ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+For each supported visual:
+ Create a colormap not of that visual type.
+ Create a window of that visual type.
+ Verify that a call to XSetWindowColormap generates a BadMatch error.
+>>CODE BadMatch
+XVisualInfo *vi;
+XWindowAttributes watts;
+int i, nvisuals;
+Visual **visuals;
+
+ resetvinf(VI_WIN);
+ if((nvisuals = nvinf()) <= 1) {
+ unsupported("Only one visual type is supported");
+ return;
+ }
+
+ visuals = (Visual **)malloc(nvisuals * sizeof(Visual *));
+ if (visuals == 0) {
+ delete("Could not allocate visuals");
+ return;
+ }
+ for(resetvinf(VI_WIN), i=0 ; nextvinf(&vi); i++) {
+ visuals[i] = vi->visual;
+ }
+
+ for(resetvinf(VI_WIN), i = 1; nextvinf(&vi); i++) {
+ i = i % nvisuals;
+ w = makewin(display, vi);
+ colormap = makecolmap(display, visuals[i], AllocNone);
+ XCALL;
+ if(geterr() == BadMatch)
+ CHECK;
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Bad A
+.ER BadColor
+>>ASSERTION Bad A
+.ER BadWindow
+>>#HISTORY Cal Completed Written in new format and style -4/12/90.
+>>#HISTORY Kieron Completed <Have a look>
+>>#HISTORY Cal Action Writting code.
diff --git a/xc/test/xsuite/xtest/tset/CH06/Makefile b/xc/test/xsuite/xtest/tset/CH06/Makefile
new file mode 100644
index 000000000..7f8f25aec
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/Makefile
@@ -0,0 +1,192 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+#
+# This Makefile can be used to compile all the tests in this
+# section of the X test suite in such a way that they are all links to
+# a single executable file. This normally allows a considerable
+# reduction in the disc space requirements for the X test suite
+# when fully built.
+#
+# There are two ways this can be done:
+# 1) Using the TET. Execute the command:
+# tcc -b -s link_exec xtest linkbuild
+# in the directory $TET_ROOT/xtest.
+# This will execute the TET build tool (which is normally pmake)
+# in the top level directory of each section of the test suite
+# (including this directory).
+#
+# 2) Directly without using the TET. Execute the command:
+# pmake
+# in this directory.
+#
+# For more details, refer to the User Guide
+#
+
+CAT=cat
+
+ALLTESTS=Tests
+
+TESTOFILES=\
+clrar.o \
+clrwdw.o \
+cpyar.o \
+cpypln.o \
+crtfntcrsr.o \
+crtglyphcr.o \
+crtpxmpcrs.o \
+dfncrsr.o \
+drwarc.o \
+drwarcs.o \
+drwimgst16.o \
+drwimgstr.o \
+drwln.o \
+drwlns.o \
+drwpnt.o \
+drwpnts.o \
+drwrctngl.o \
+drwrctngls.o \
+drwsgmnts.o \
+drwstr.o \
+drwstr16.o \
+drwtxt.o \
+drwtxt16.o \
+fllarc.o \
+fllarcs.o \
+fllplygn.o \
+fllrctngl.o \
+fllrctngls.o \
+frcrsr.o \
+frfnt.o \
+frfntinf.o \
+frfntnms.o \
+frfntpth.o \
+gtfntprprt.o \
+gtfntpth.o \
+gtimg.o \
+gtsbimg.o \
+ldfnt.o \
+ldqryfnt.o \
+lstfnts.o \
+lstfntswth.o \
+ptimg.o \
+qrybstcrsr.o \
+qryfnt.o \
+qrytxtex16.o \
+qrytxtextn.o \
+rclrcrsr.o \
+stfntpth.o \
+txtextnt16.o \
+txtextnts.o \
+txtwdth.o \
+txtwdth16.o \
+undfncrsr.o \
+unldfnt.o
+
+LINKOFILE=linktbl.o
+OFILES = $(TESTOFILES) $(LINKOFILE)
+
+DIRLIST=\
+clrar \
+clrwdw \
+cpyar \
+cpypln \
+crtfntcrsr \
+crtglyphcr \
+crtpxmpcrs \
+dfncrsr \
+drwarc \
+drwarcs \
+drwimgst16 \
+drwimgstr \
+drwln \
+drwlns \
+drwpnt \
+drwpnts \
+drwrctngl \
+drwrctngls \
+drwsgmnts \
+drwstr \
+drwstr16 \
+drwtxt \
+drwtxt16 \
+fllarc \
+fllarcs \
+fllplygn \
+fllrctngl \
+fllrctngls \
+frcrsr \
+frfnt \
+frfntinf \
+frfntnms \
+frfntpth \
+gtfntprprt \
+gtfntpth \
+gtimg \
+gtsbimg \
+ldfnt \
+ldqryfnt \
+lstfnts \
+lstfntswth \
+ptimg \
+qrybstcrsr \
+qryfnt \
+qrytxtex16 \
+qrytxtextn \
+rclrcrsr \
+stfntpth \
+txtextnt16 \
+txtextnts \
+txtwdth \
+txtwdth16 \
+undfncrsr \
+unldfnt
+
+all: subdirs test
+
+test:$P $(OFILES) $(LIBS) $(TCM)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(TCM) $(LIBS) $(SYSLIBS)
+ $(CAT) test > $(ALLTESTS)
+ $(RM) test
+
+subdirs:
+ if [ ! -f $(ALLTESTS) ]; then $(CAT) /dev/null > $(ALLTESTS); \
+ chmod a+x $(ALLTESTS); else : ; fi
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then \
+ (cd $$i; echo Compiling in $$i; $(TET_BUILD_TOOL) linkexec); \
+ fi; \
+ done
+
+# The xtestlib is made if it doesn't exist
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
+clean: cletests clesubdirs
+
+cletests:
+ $(RM) test $(OFILES) $(ALLTESTS) core
+
+clesubdirs:
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then (cd $$i; $(TET_CLEAN_TOOL) ); fi; done
+
+clobber: clean
diff --git a/xc/test/xsuite/xtest/tset/CH06/clrar/clrar.m b/xc/test/xsuite/xtest/tset/CH06/clrar/clrar.m
new file mode 100644
index 000000000..f67cd3b1d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/clrar/clrar.m
@@ -0,0 +1,344 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XClearArea CH06
+>>#SYNOPSIS
+void
+XClearArea(display, w, x, y, width, height, exposures)
+Display *display = Dsp;
+Window w;
+int x = 5;
+int y = 6;
+unsigned int width = 25;
+unsigned int height = 20;
+Bool exposures = False;
+>>ASSERTION Good A
+A call to xname
+paints a rectangular area
+in the window specified by the
+.A w
+argument
+with the window's background pixel or pixmap.
+>>STRATEGY
+For window, pixmap
+ Create drawable.
+ Set window background pixel to 0.
+ Call XClearArea.
+ Verify area is set. Outside is untouched.
+
+ Set window background pixel to 1.
+ Call XClearArea.
+ Verify area is set. Outside is untouched.
+
+ Set window background pixmap
+ Call XClearArea.
+ Verify area is set. Outside is untouched.
+>>CODE
+Pixmap pm;
+XVisualInfo *vp;
+struct area area;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ w = makewin(display, vp);
+
+ XSetWindowBackground(display, w, W_FG);
+ XCALL;
+
+ setarea(&area, x, y, width, height);
+
+ if (checkarea(display, w, &area, W_FG, W_BG, 0) == False) {
+ tet_result(TET_FAIL);
+ } else {
+ CHECK;
+ }
+
+ XSetWindowBackground(display, w, W_BG);
+ XCALL;
+ if (checkarea(display, w, &area, W_BG, W_BG, 0) == False) {
+ tet_result(TET_FAIL);
+ } else
+ CHECK;
+
+ pm = maketile(display, w);
+ XSetWindowBackgroundPixmap(display, w, pm);
+ XCALL;
+
+ /*
+ * Check the area first and then the outside.
+ */
+ if (checktile(display, w, &area, 0, 0, pm) == False) {
+ report("Failed with background pixmap");
+ tet_result(TET_FAIL);
+ } else
+ CHECK;
+ if (checkarea(display, w, &area, W_BG, W_BG, CHECK_OUT) == False) {
+ report("Surrounding area was modified when area cleared with background pixmap");
+ tet_result(TET_FAIL);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(4*nvinf());
+
+>>ASSERTION Good A
+On a call to xname the subwindow-mode is
+.S ClipByChildren .
+>>STRATEGY
+Create window
+Create child window overlapping area to be cleared
+Call XClearArea.
+Verify that the child has not been drawn upon.
+>>CODE
+struct area carea;
+Pixmap pm;
+XVisualInfo *vp;
+Window child;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ w = makewin(display, vp);
+ carea.x = x + width/2;
+ carea.y = 0;
+ carea.width = carea.height = 0;
+ child = crechild(display, w, &carea);
+
+ pm = maketile(display, w);
+ XSetWindowBackgroundPixmap(display, w, pm);
+ XCALL;
+
+ carea.x = carea.y = carea.width = carea.height = 0;
+ if (checkarea(display, child, &carea, W_BG, W_BG, CHECK_ALL) == False) {
+ report("Child window was drawn upon by clear area");
+ FAIL;
+ } else {
+ CHECK;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When
+.A width
+is zero, then it is replaced with the current width
+of the window minus
+.A x .
+>>STRATEGY
+Call XClearArea with width equal to zero.
+Call checkarea to verify that area set has height of width - x.
+>>CODE
+struct area area;
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ w = makewin(display, vp);
+
+ width = 0;
+ XSetWindowBackground(display, w, W_FG);
+ XCALL;
+
+ area.x = x;
+ area.y = y;
+ getsize(display, w, &area.width, (unsigned int*)0);
+ area.width -= x;
+ area.height = height;
+ if (checkarea(display, w, &area, W_FG, W_BG, 0) == True) {
+ CHECK;
+ } else {
+ report("Fail on width 0");
+ FAIL;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When
+.A height
+is zero, then it is
+replaced with the current height of the window minus
+.A y .
+>>STRATEGY
+Call XClearArea with height equal to zero.
+Call checkarea to verify that area has height (window height - y).
+>>CODE
+struct area area;
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ w = makewin(display, vp);
+
+ height = 0;
+ XSetWindowBackground(display, w, W_FG);
+ XCALL;
+ area.x = x;
+ area.y = y;
+ getsize(display, w, (unsigned int*)0, &area.height);
+ area.width = width;
+ area.height -= y;
+ if (checkarea(display, w, &area, W_FG, W_BG, 0) == True) {
+ CHECK;
+ } else {
+ report("Fail on height 0");
+ FAIL;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+When the window has a defined background tile, then
+the rectangle clipped by any children
+is tiled with a plane-mask of all ones and the
+.S GXCopy
+function.
+>>ASSERTION Good A
+When the window has a
+.M background_pixmap
+of
+.S None ,
+>># *** This is not neccesary -- it is the last thing set that matters ..steve
+>># and an undefined
+>># .M background_pixel
+then the contents of the window are not changed.
+>>STRATEGY
+Create window.
+Set background pixel to W_FG.
+Set background pixmap to None.
+Call XClearArea.
+Check that the window is not changed.
+>>CODE
+struct area area;
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ w = makewin(display, vp);
+ pattern(display, w);
+ XSetWindowBackground(display, w, W_FG);
+ XSetWindowBackgroundPixmap(display, w, None);
+ XCALL;
+ if (checkpattern(display, w, (struct area *)0) == False) {
+ report("Window was changed when background was None");
+ FAIL;
+ } else {
+ CHECK;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When the window has a
+.M background_pixmap
+of
+.S ParentRelative
+and the parent has a
+.M background_pixmap
+of
+.S None ,
+then the contents of the window are not changed.
+>>STRATEGY
+Create parent window.
+Create a child window covering the parent.
+Set parent window background to none.
+Set child window background pixmap to ParentRelative.
+Clear area of child
+Verify that there was no change to the child.
+>>CODE
+struct area area;
+Window child;
+Window win;
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ win = makewin(display, vp);
+ area.x = area.y = area.width = area.height = 0;
+ child = crechild(display, win, &area);
+ pattern(display, child);
+
+ /*
+ * Set parent to None, child to Parent Relative.
+ */
+ XSetWindowBackgroundPixmap(display, win, None);
+ XSetWindowBackgroundPixmap(display, child, ParentRelative);
+
+ w = child;
+ XCALL;
+ if (checkpattern(display, child, (struct area *)0) == False) {
+ report("Window was changed when background was ParentRelative");
+ FAIL;
+ } else {
+ CHECK;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When
+.A exposures
+is
+.S True ,
+then one or more
+.S Expose
+events are generated for regions of the rectangle that are
+either visible or are being retained in backing store.
+>>STRATEGY
+Set exposures to True.
+Call XClearArea.
+Check that an expose event is received.
+>>CODE
+XEvent event;
+XExposeEvent ge;
+XVisualInfo *vp;
+int n;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ w = makewin(display, vp);
+ exposures = True;
+
+ XSelectInput(display, w, ALLEVENTS);
+ XCALL;
+ XSelectInput(display, w, NoEventMask);
+
+ if (getevent(display, &event) != 1 || event.type != Expose) {
+ report("Expecting one Expose event");
+ tet_result(TET_FAIL);
+ return;
+ }
+
+ ge.type = Expose;
+ ge.display = display;
+ ge.window = w;
+ ge.x = x;
+ ge.y = y;
+ ge.width = width;
+ ge.height = height;
+ ge.count = 0;
+
+ n = checkevent((XEvent*)&ge, (XEvent*)&event);
+ if (n == 0)
+ CHECK;
+ else {
+ report("error in %d field%s of event", n, (n!=1)?"s":"");
+ FAIL;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Bad A
+.ER Match inputonly
+>>ASSERTION Bad A
+.ER Value exposures True False
+>>ASSERTION Bad A
+.ER BadWindow
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/clrwdw/clrwdw.m b/xc/test/xsuite/xtest/tset/CH06/clrwdw/clrwdw.m
new file mode 100644
index 000000000..36e5be2b9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/clrwdw/clrwdw.m
@@ -0,0 +1,217 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XClearWindow CH06
+>>#SYNOPSIS
+void
+XClearWindow(display, w)
+Display *display = Dsp;
+Window w;
+>>ASSERTION Good A
+A call to xname
+paints
+the entire area
+in the window specified by the
+.A w
+argument
+with the window's background pixel or pixmap.
+>>STRATEGY
+Create window.
+Set window's background pixel to 0.
+Call XClearWindow.
+Verify window is set.
+
+Set window's background pixel to 1.
+Call XClearWindow.
+Verify window is set.
+
+Set window background pixmap.
+Verify that window is set.
+>>CODE
+Pixmap pm;
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ w = makewin(display, vp);
+
+ XSetWindowBackground(display, w, W_FG);
+ XCALL;
+
+ if (checkarea(display, w, (struct area *)0, W_FG, W_BG, 0) == False) {
+ report("Clearing to W_FG failed");
+ tet_result(TET_FAIL);
+ } else {
+ CHECK;
+ }
+
+ XSetWindowBackground(display, w, W_BG);
+ XCALL;
+ if (checkarea(display, w, (struct area *)0, W_BG, W_BG, 0) == False) {
+ report("Clearing to W_BG failed");
+ tet_result(TET_FAIL);
+ } else
+ CHECK;
+
+ pm = maketile(display, w);
+ XSetWindowBackgroundPixmap(display, w, pm);
+ XCALL;
+
+ /*
+ * Check the tiled area first and then the outside.
+ */
+ if (checktile(display, w, (struct area*)0, 0, 0, pm) == False) {
+ report("Failed with background pixmap");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(3*nvinf());
+
+>>ASSERTION Good A
+On a call to xname the subwindow-mode is
+.S ClipByChildren .
+>>STRATEGY
+Create window
+Create overlapping child window.
+Call XClearWindow.
+Verify that the child has not been drawn upon.
+>>CODE
+struct area carea;
+Pixmap pm;
+Window child;
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ w = makewin(display, vp);
+ carea.x = 10;
+ carea.y = 0;
+ carea.width = carea.height = 0;
+ child = crechild(display, w, &carea);
+
+ pm = maketile(display, w);
+ XSetWindowBackgroundPixmap(display, w, pm);
+ XCALL;
+
+ carea.x = carea.y = carea.width = carea.height = 0;
+ if (checkarea(display, child, &carea, W_BG, W_BG, CHECK_ALL) == False) {
+ report("Child window was drawn upon by clear window");
+ FAIL;
+ } else {
+ CHECK;
+ }
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+>>#DEFINITION
+When the window has a defined background tile, then the rectangle
+is tiled with a plane-mask of all ones and the
+.S GXCopy
+function.
+>>ASSERTION Good A
+When the window has a
+.M background_pixmap
+of
+.S None ,
+>># It is the last thing that was set that matters.
+>>#and an undefined
+>>#.M background_pixel ,
+then the contents of the window are not changed.
+>>STRATEGY
+Create window.
+Set background pixel to W_FG.
+Set background pixmap to None.
+Call XClearWindow.
+Check that the whole window is left alone.
+>>CODE
+struct area area;
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ w = makewin(display, vp);
+ pattern(display, w);
+ XSetWindowBackground(display, w, W_FG);
+ XSetWindowBackgroundPixmap(display, w, None);
+ XCALL;
+ if (checkpattern(display, w, (struct area *)0) == False) {
+ report("Window was changed when background was None");
+ FAIL;
+ } else {
+ CHECK;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When the window has a
+.M background_pixmap
+of
+.S ParentRelative
+and the parent has a
+.M background_pixmap
+of
+.S None ,
+then the contents of the window are not changed.
+>>STRATEGY
+Create parent window.
+Create a child window covering the parent.
+Draw pattern on the child window.
+Set parent window background to none.
+Set child window background pixmap to ParentRelative.
+Clear area of child
+Verify that there was no change to the child window.
+>>CODE
+struct area area;
+Window child;
+Window win;
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ win = makewin(display, vp);
+ area.x = area.y = area.width = area.height = 0;
+ child = crechild(display, win, &area);
+ pattern(display, child);
+
+ /*
+ * Set parent to None, child to Parent Relative.
+ */
+ XSetWindowBackgroundPixmap(display, win, None);
+ XSetWindowBackgroundPixmap(display, child, ParentRelative);
+
+ w = child;
+ XCALL;
+ if (checkpattern(display, child, (struct area *)0) == False) {
+ report("Window was changed when background was ParentRelative");
+ FAIL;
+ } else {
+ CHECK;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>># Assertion removed because the situation is not possible.
+>>#When the window does not have the same depth as its
+>>#parent and has a background-pixmap of
+>>#ParentRelative, then a BadMath error occurs.
+>>ASSERTION Bad A
+.ER Match inputonly
+>>ASSERTION Bad A
+.ER BadWindow
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/cpyar/a27.dat b/xc/test/xsuite/xtest/tset/CH06/cpyar/a27.dat
new file mode 100644
index 000000000..ca8168444
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/cpyar/a27.dat
@@ -0,0 +1,147 @@
+! $XConsortium$
+100 90 32
+25d,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+17bb,0
+100 90 32
+bbd,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+117b,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+bbd,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+117b,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/cpyar/a30.dat b/xc/test/xsuite/xtest/tset/CH06/cpyar/a30.dat
new file mode 100644
index 000000000..42c6f146f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/cpyar/a30.dat
@@ -0,0 +1,183 @@
+! $XConsortium$
+100 90 32
+25f,0
+5,1
+3,0
+6,1
+54,0
+1
+6,0
+5,1
+4,0
+3,1
+53,0
+4,1
+6,0
+4,1
+54,0
+1
+0
+9,1
+5,0
+3,1
+53,0
+d,1
+55,0
+7,1
+c,0
+1
+50,0
+1
+6,0
+d,1
+51,0
+c,1
+6,0
+1
+50,0
+7,1
+6,0
+7,1
+50,0
+4,1
+3,0
+8,1
+4,0
+1
+50,0
+2,1
+2,0
+6,1
+5,0
+4,1
+53,0
+5,1
+3,0
+6,1
+54,0
+1
+6,0
+5,1
+4,0
+3,1
+53,0
+4,1
+6,0
+4,1
+54,0
+1
+0
+9,1
+5,0
+3,1
+53,0
+d,1
+55,0
+7,1
+c,0
+1
+50,0
+1
+6,0
+d,1
+51,0
+c,1
+6,0
+1
+50,0
+7,1
+6,0
+7,1
+50,0
+4,1
+3,0
+8,1
+4,0
+1
+50,0
+2,1
+2,0
+6,1
+5,0
+4,1
+53,0
+5,1
+3,0
+6,1
+54,0
+1
+6,0
+5,1
+4,0
+3,1
+53,0
+4,1
+6,0
+4,1
+54,0
+1
+0
+9,1
+5,0
+3,1
+53,0
+d,1
+55,0
+7,1
+c,0
+1
+50,0
+1
+6,0
+d,1
+51,0
+c,1
+6,0
+1
+50,0
+7,1
+6,0
+7,1
+50,0
+4,1
+3,0
+8,1
+4,0
+1
+50,0
+2,1
+2,0
+6,1
+5,0
+4,1
+53,0
+5,1
+3,0
+6,1
+54,0
+1
+6,0
+5,1
+4,0
+3,1
+53,0
+4,1
+6,0
+4,1
+54,0
+1
+0
+9,1
+5,0
+3,1
+53,0
+d,1
+55,0
+7,1
+c,0
+1
+50,0
+1
+6,0
+d,1
+117b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/cpyar/cpyar.m b/xc/test/xsuite/xtest/tset/CH06/cpyar/cpyar.m
new file mode 100644
index 000000000..80234aa10
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/cpyar/cpyar.m
@@ -0,0 +1,379 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCopyArea CH06
+void
+xname(display, src, dest, gc, src_x, src_y, width, height, dest_x, dest_y)
+Display *display = Dsp;
+Drawable src;
+Drawable dest;
+GC gc;
+int src_x = 0;
+int src_y = 0;
+unsigned int width = 20;
+unsigned int height = 40;
+int dest_x = 5;
+int dest_y = 6;
+>>EXTERN
+#include "Xproto.h"
+
+#define DEFAULTVINF ((XVisualInfo *)0)
+
+#define XOFF 50
+#define TRIM 20
+
+>>ASSERTION Good A
+A call to xname combines the specified rectangle of
+.A src
+with the specified rectangle of
+.A dest ,
+according to the
+.M function
+in the argument
+.A gc .
+>>STRATEGY
+Create window pair.
+Tile background of first window
+Copy to other window.
+Verify copy on other window.
+>>CODE
+Window w1, w2;
+XVisualInfo *vp;
+struct area area;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ winpair(display, vp, &w1, &w2);
+
+ pattern(display, w1);
+
+ src = w1;
+ dest = w2;
+
+ gc = makegc(display, dest);
+
+ XCALL;
+
+ area.x = dest_x;
+ area.y = dest_y;
+ area.width = width;
+ area.height = height;
+
+ if (checkarea(display, dest, &area, 0, W_BG, CHECK_OUT) == False) {
+ report("window modified outside the target area");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkpattern(display, dest, &area) == False) {
+ report("area was not copied properly");
+ FAIL;
+ } else
+ CHECK;
+
+ }
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When regions of the source rectangle are obscured and have not been
+retained in backing store
+or regions outside the boundaries of the source drawable are specified
+and the destination is a pixmap,
+then
+those regions are not copied.
+>>STRATEGY
+For all pixmaps
+ make src and draw into it (background of 0)
+ make dest
+ copy region that extends off the edge of the source drawable
+ verify that it is not copied.
+>>CODE
+Window w1, w2;
+XVisualInfo *vp;
+Pixmap pm;
+struct area area;
+
+ for (resetvinf(VI_PIX); nextvinf(&vp); ) {
+ winpair(display, vp, &w1, &w2);
+
+ pattern(display, w1);
+
+ src = w1;
+ dest = w2;
+
+ /*
+ * Use a width of the size of the window minus TRIM, therefore
+ * it will extend off the edge of the window by width-src_x pixels.
+ */
+ getsize(display, w1, (unsigned int*)&width, (unsigned int*)0);
+ src_x = width-XOFF;
+ width -= TRIM;
+
+ dest_x = 0;
+ dest_y = 0;
+
+ gc = makegc(display, dest);
+
+ XCALL;
+
+ area.x = dest_x;
+ area.y = dest_y;
+ area.width = width;
+ area.height = height;
+
+ if (checkarea(display, dest, &area, 0, W_BG, CHECK_OUT) == False) {
+ report("window modified outside the target area");
+ FAIL;
+ } else
+ CHECK;
+
+ area.x = XOFF;
+ area.width = width - XOFF - TRIM;
+
+ if (checkarea(display, dest, &area, W_BG, 0, CHECK_IN) == False) {
+ report("area corresponding to uncopied area was modified");
+ FAIL;
+ } else
+ CHECK;
+
+ }
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When regions of the source rectangle are obscured and have not been
+retained in backing store
+or regions outside the boundaries of the source drawable are specified
+and the destination is a window with a background other than
+.S None ,
+then all corresponding destination regions that are either
+visible or are retained in backing store
+are tiled with that background
+with plane-mask of all ones and the
+.S GXcopy
+function.
+>>STRATEGY
+For all visuals
+ make src window and draw into it (background of 0)
+ make dest window with background of 1 and draw into it
+ copy region that extends off the edge of the source drawable
+ verify that it is not copied.
+ verify that the background is tiled in parts corresponding to uncopied area.
+>>CODE
+Window w1, w2;
+XVisualInfo *vp;
+Pixmap pm;
+struct area area;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ winpair(display, vp, &w1, &w2);
+
+ pattern(display, w1);
+
+ src = w1;
+ dest = w2;
+
+ /*
+ * Set the destination background pixmap.
+ */
+ pm = maketile(display, w2);
+ XSetWindowBackgroundPixmap(display, w2, pm);
+
+ /*
+ * Use a width of the size of the window minus TRIM, therefore
+ * it will extend off the edge of the window by width-src_x pixels.
+ */
+ getsize(display, w1, (unsigned int*)&width, (unsigned int*)0);
+ src_x = width-XOFF;
+ width -= TRIM;
+
+ dest_x = 0;
+ dest_y = 0;
+
+ gc = makegc(display, dest);
+
+ XCALL;
+
+ area.x = dest_x;
+ area.y = dest_y;
+ area.width = width;
+ area.height = height;
+
+ if (checkarea(display, dest, &area, 0, W_BG, CHECK_OUT) == False) {
+ report("window modified outside the target area");
+ FAIL;
+ } else
+ CHECK;
+
+ area.x = XOFF;
+ area.width = width - XOFF - TRIM;
+
+ if (checktile(display, dest, &area, 0, 0, pm) == False) {
+ report("area was not copied properly");
+ FAIL;
+ } else
+ CHECK;
+
+ }
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When
+.M graphics-exposures
+is
+.S True ,
+then
+.S GraphicsExpose
+events for all corresponding destination regions are generated.
+>>STRATEGY
+For all visuals
+ Set graphics-exposures to True.
+ Copy area that extends beyond the boundries of the source window.
+ Enable All Events.
+ Check events received, and x,y,width,height in each.
+>>CODE
+Window w1, w2;
+XEvent event;
+XVisualInfo *vp;
+XGraphicsExposeEvent ge;
+int n;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+
+ winpair(display, vp, &w1, &w2);
+
+ src = w1;
+ dest = w2;
+
+ getsize(display, w1, (unsigned int*)&width, (unsigned int*)0);
+
+ src_x = XOFF;
+ dest_x = 0;
+
+ gc = makegc(display, dest);
+ XSetGraphicsExposures(display, gc, True);
+
+ XSelectInput(display, src, ALLEVENTS);
+ XCALL;
+ XSelectInput(display, dest, NoEventMask);
+
+ if (getevent(display, &event) != 1 || event.type != GraphicsExpose) {
+ report("Expecting one GraphicsExpose event");
+ FAIL;
+ return;
+ }
+
+ ge.type = GraphicsExpose;
+ ge.display = display;
+ ge.drawable = dest;
+ ge.x = dest_x+width-XOFF;
+ ge.y = dest_y;
+ ge.width = XOFF;
+ ge.height = height;
+ ge.count = 0;
+ ge.major_code = X_CopyArea;
+ ge.minor_code = 0;
+
+ n = checkevent((XEvent*)&ge, (XEvent*)&event);
+ if (n == 0)
+ CHECK;
+ else {
+ report("error in %d field%s of event", n, (n!=1)?"s":"");
+ tet_result(TET_FAIL);
+ }
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When
+.M graphics-exposures
+is
+.S True
+and no
+.S GraphicsExpose
+events are generated, then a
+.S NoExpose
+event is generated.
+>>STRATEGY
+For each visual
+ Enable graphics-exposures.
+ Enable all events.
+ Copy area that is fully within the window.
+ Verify that one event is received and that it is a NoExpose event.
+>>CODE
+Window w1, w2;
+XEvent event;
+XNoExposeEvent ge;
+XVisualInfo *vp;
+int n;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ winpair(display, vp, &w1, &w2);
+
+ src = w1;
+ dest = w2;
+
+ gc = makegc(display, dest);
+
+ XSelectInput(display, src, ALLEVENTS);
+ XCALL;
+ XSelectInput(display, dest, NoEventMask);
+
+ if (getevent(display, &event) != 1 || event.type != NoExpose) {
+ report("Expecting one NoExpose event");
+ FAIL;
+ return;
+ }
+
+ ge.type = NoExpose;
+ ge.display = display;
+ ge.drawable = dest;
+ ge.major_code = X_CopyArea;
+ ge.minor_code = 0;
+
+ n = checkevent((XEvent*)&ge, (XEvent*)&event);
+ if (n == 0)
+ CHECK;
+ else {
+ report("error in %d field%s of event", n, (n!=1)?"s":"");
+ tet_result(TET_FAIL);
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M subwindow-mode ,
+.M graphics-exposures ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/cpypln/a26.dat b/xc/test/xsuite/xtest/tset/CH06/cpypln/a26.dat
new file mode 100644
index 000000000..8089ace60
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/cpypln/a26.dat
@@ -0,0 +1,2791 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+389,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+1045,0
+100 90 32
+389,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+1045,0
+100 90 32
+389,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+1045,0
+100 90 32
+389,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+1045,0
+100 90 32
+389,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+1045,0
+100 90 32
+389,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+1045,0
+100 90 32
+389,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+1045,0
+100 90 32
+389,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+1045,0
+100 90 32
+389,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+1045,0
+100 90 32
+389,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+1045,0
+100 90 32
+389,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+1045,0
+100 90 32
+389,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+1045,0
+100 90 32
+389,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+1045,0
+100 90 32
+389,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+1045,0
+100 90 32
+389,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+1045,0
+100 90 32
+389,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+1045,0
+100 90 32
+389,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+1045,0
+100 90 32
+389,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+1045,0
+100 90 32
+389,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+1045,0
+100 90 32
+389,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+1045,0
+100 90 32
+389,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+1045,0
+100 90 32
+389,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+1045,0
+100 90 32
+389,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+1045,0
+100 90 32
+389,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+1045,0
+100 90 32
+389,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+1045,0
+100 90 32
+389,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+1045,0
+100 90 32
+389,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+1045,0
+100 90 32
+389,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+1045,0
+100 90 32
+389,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+1045,0
+100 90 32
+389,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+1045,0
+100 90 32
+389,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+1045,0
+100 90 32
+389,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+1045,0
+100 90 32
+389,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+1045,0
+100 90 32
+389,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+1045,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/cpypln/a28.dat b/xc/test/xsuite/xtest/tset/CH06/cpypln/a28.dat
new file mode 100644
index 000000000..8089ace60
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/cpypln/a28.dat
@@ -0,0 +1,2791 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+389,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+1045,0
+100 90 32
+389,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+1045,0
+100 90 32
+389,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+1045,0
+100 90 32
+389,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+1045,0
+100 90 32
+389,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+1045,0
+100 90 32
+389,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+1045,0
+100 90 32
+389,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+1045,0
+100 90 32
+389,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+1045,0
+100 90 32
+389,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+1045,0
+100 90 32
+389,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+1045,0
+100 90 32
+389,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+1045,0
+100 90 32
+389,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+1045,0
+100 90 32
+389,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+1045,0
+100 90 32
+389,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+1045,0
+100 90 32
+389,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+1045,0
+100 90 32
+389,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+1045,0
+100 90 32
+389,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+1045,0
+100 90 32
+389,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+46,0
+1e,1
+1045,0
+100 90 32
+389,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+46,0
+1e,2
+1045,0
+100 90 32
+389,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+46,0
+1e,3
+1045,0
+100 90 32
+389,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+46,0
+1e,4
+1045,0
+100 90 32
+389,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+46,0
+1e,6
+1045,0
+100 90 32
+389,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+46,0
+1e,7
+1045,0
+100 90 32
+389,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+46,0
+1e,10
+1045,0
+100 90 32
+389,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+46,0
+1e,33
+1045,0
+100 90 32
+389,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+46,0
+1e,81
+1045,0
+100 90 32
+389,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+46,0
+1e,a3
+1045,0
+100 90 32
+389,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+46,0
+1e,ff
+1045,0
+100 90 32
+389,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+46,0
+1e,100
+1045,0
+100 90 32
+389,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+46,0
+1e,12c
+1045,0
+100 90 32
+389,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+46,0
+1e,3e8
+1045,0
+100 90 32
+389,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+46,0
+1e,111111
+1045,0
+100 90 32
+389,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+46,0
+1e,400200
+1045,0
+100 90 32
+389,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+46,0
+1e,777777
+1045,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/cpypln/a33.dat b/xc/test/xsuite/xtest/tset/CH06/cpypln/a33.dat
new file mode 100644
index 000000000..14e22ee0d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/cpypln/a33.dat
@@ -0,0 +1,313 @@
+! $XConsortium$
+100 90 32
+389,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+17b3,0
+100 90 32
+bbd,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+1047,0
+100 90 32
+2328,0
+100 90 32
+3a5,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+17b1,0
+100 90 32
+bd9,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+1045,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+bbd,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+1047,0
+100 90 32
+2328,0
+100 90 32
+3a5,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+17b1,0
+100 90 32
+bd9,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+1045,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/cpypln/a36.dat b/xc/test/xsuite/xtest/tset/CH06/cpypln/a36.dat
new file mode 100644
index 000000000..6deaddd81
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/cpypln/a36.dat
@@ -0,0 +1,281 @@
+! $XConsortium$
+100 90 32
+389,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+48,0
+d,1
+b,0
+4,1
+46,0
+7,1
+c,0
+b,1
+46,0
+1
+6,0
+12,1
+4c,0
+c,1
+6,0
+4,1
+2,0
+5,1
+46,0
+7,1
+6,0
+9,1
+0
+7,1
+46,0
+4,1
+3,0
+8,1
+4,0
+9,1
+48,0
+2,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+2,1
+48,0
+5,1
+3,0
+6,1
+a,0
+4,1
+46,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+4,1
+6,0
+4,1
+a,0
+4,1
+46,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+48,0
+d,1
+b,0
+4,1
+46,0
+7,1
+c,0
+b,1
+46,0
+1
+6,0
+12,1
+4c,0
+c,1
+6,0
+4,1
+2,0
+5,1
+46,0
+7,1
+6,0
+9,1
+0
+7,1
+46,0
+4,1
+3,0
+8,1
+4,0
+9,1
+48,0
+2,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+2,1
+48,0
+5,1
+3,0
+6,1
+a,0
+4,1
+46,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+4,1
+6,0
+4,1
+a,0
+4,1
+46,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+48,0
+d,1
+b,0
+4,1
+46,0
+7,1
+c,0
+b,1
+46,0
+1
+6,0
+12,1
+4c,0
+c,1
+6,0
+4,1
+2,0
+5,1
+46,0
+7,1
+6,0
+9,1
+0
+7,1
+46,0
+4,1
+3,0
+8,1
+4,0
+9,1
+48,0
+2,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+2,1
+48,0
+5,1
+3,0
+6,1
+a,0
+4,1
+46,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+4,1
+6,0
+4,1
+a,0
+4,1
+46,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+48,0
+d,1
+b,0
+4,1
+46,0
+7,1
+c,0
+b,1
+46,0
+1
+6,0
+12,1
+4c,0
+c,1
+6,0
+4,1
+2,0
+5,1
+46,0
+7,1
+6,0
+9,1
+0
+7,1
+46,0
+4,1
+3,0
+8,1
+4,0
+9,1
+1047,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/cpypln/cpypln.m b/xc/test/xsuite/xtest/tset/CH06/cpypln/cpypln.m
new file mode 100644
index 000000000..f5c013c06
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/cpypln/cpypln.m
@@ -0,0 +1,551 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCopyPlane CH06
+void
+XCopyPlane(display, src, dest, gc, src_x, src_y, width, height, dest_x, dest_y, plane);
+Display *display = Dsp;
+Drawable src;
+Drawable dest;
+GC gc;
+int src_x = 6;
+int src_y = 5;
+unsigned int width = 30;
+unsigned int height = 40;
+int dest_x = 5;
+int dest_y = 9;
+unsigned long plane = 1;
+>>EXTERN
+
+#include "Xproto.h"
+#include "limits.h"
+
+#define CPYPL_PIX 0x55555555
+
+#define XOFF 50
+#define TRIM 20
+
+>>ASSERTION Good A
+A call to xname
+uses the
+.M foreground
+pixel in the GC for each bit
+in
+.A src
+that is set to 1 and the
+.M background
+pixel in the GC for each bit in
+.A src
+that is set to 0 and
+combines the specified rectangle of
+.A src
+with the specified rectangle of
+.A dest .
+>>#according to the
+>>#.M function
+>>#in the argument
+>>#.A gc .
+>>STRATEGY
+Create pair of windows.
+Fill one window with pixel having some bits set and some unset.
+Call XCopyPlane to copy one plane of an area.
+Check that the copied area is set to the foreground when
+the plane contains 1 and background when the plane contains 0.
+>>CODE
+XVisualInfo *vp;
+struct area area;
+unsigned long depth;
+unsigned long fg;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ winpair(display, vp, &src, &dest);
+
+ dset(display, src, CPYPL_PIX);
+
+ gc = makegc(display, dest);
+
+ depth = vp->depth;
+
+ for (plane = 1; depth-- > 0; plane <<= 1) {
+ XCALL;
+
+ area.x = dest_x;
+ area.y = dest_y;
+ area.width = width;
+ area.height = height;
+
+ /*
+ * Is the plane we are dealing with set to 1? In which case
+ * the area should be the foreground; or 0 in which case
+ * the area should be the background.
+ */
+ fg = (plane & CPYPL_PIX)? W_FG: W_BG;
+ if (checkarea(display, dest, &area, fg, W_BG, CHECK_ALL)) {
+ if (plane == 1)
+ CHECK;
+ } else {
+ report("Window did not have expected contents");
+ FAIL;
+ }
+ }
+
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+A call to xname uses a single bit plane of the specified source rectangle
+.A src
+combined with the specified GC to modify the specified rectangle of
+.A dest .
+>># NOTE - In testing, what this means is that the contents of other
+>># bit planes make no difference to the action of xname. DPJC
+>>ASSERTION Good A
+If the screen supports drawables of more than one depth:
+.in +2
+The drawables need not have the same depth.
+.in -2
+>>STRATEGY
+If there is a visual with depth other than one.
+ Copy between it and a pixmap of depth one.
+Else
+ Report UNSUPPORTED.
+>>CODE
+XVisualInfo *vp;
+struct area area;
+unsigned long depth;
+unsigned long fg;
+
+ depth = 0;
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ if (vp->depth != 1) {
+ depth = vp->depth;
+ break;
+ }
+ }
+
+ if (depth == 0) {
+ report("Only one depth is supported");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ src = makewin(display, vp);
+ vp->depth = 1;
+ dest = makepixm(display, vp);
+
+ dset(display, src, CPYPL_PIX);
+
+ gc = makegc(display, dest);
+
+ for (plane = 1; depth-- > 0; plane <<= 1) {
+ XCALL;
+
+ area.x = dest_x;
+ area.y = dest_y;
+ area.width = width;
+ area.height = height;
+
+ /*
+ * Is the plane we are dealing with set to 1? In which case
+ * the area should be the foreground; or 0 in which case
+ * the area should be the background.
+ */
+ fg = (plane & CPYPL_PIX)? W_FG: W_BG;
+ if (checkarea(display, dest, &area, fg, W_BG, CHECK_ALL)) {
+ if (plane == 1)
+ CHECK;
+ } else {
+ report("Window did not have expected contents");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When regions of the source rectangle are obscured and have not been
+retained in backing store
+or regions outside the boundaries of the source drawable are specified,
+then
+those regions are not copied.
+>>STRATEGY
+make src window and draw into it (background of 0)
+make dest window with background of 1 and draw into it
+copy region that extends off the edge of the source drawable
+verify that it is not copied.
+>>CODE
+Window w1, w2;
+XVisualInfo *vp;
+Pixmap pm;
+struct area area;
+
+ /*
+ * I have taken this assertion to deal with pixmaps, while the similar
+ * one that mentions background tiling is used to deal with windows.
+ */
+ for (resetvinf(VI_PIX); nextvinf(&vp); ) {
+ winpair(display, vp, &w1, &w2);
+
+ pattern(display, w1);
+
+ src = w1;
+ dest = w2;
+
+ gc = makegc(display, dest);
+
+ /*
+ * Use a width of the size of the window minus TRIM, therefore
+ * it will extend off the edge of the window by width-src_x pixels.
+ */
+ getsize(display, w1, &width, (unsigned int*)0);
+ src_x = width-XOFF;
+ width -= TRIM;
+
+ dest_x = 0;
+ dest_y = 0;
+
+ plane = 1;
+
+ XCALL;
+
+ area.x = dest_x;
+ area.y = dest_y;
+ area.width = width;
+ area.height = height;
+
+ if (checkarea(display, dest, &area, 0, W_BG, CHECK_OUT) == False) {
+ report("window modified outside the target area");
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When regions of the source rectangle are obscured and have not been
+retained in backing store
+or regions outside the boundaries of the source drawable are specified
+and the destination is a window with a background other than
+.S None ,
+then all corresponding destination regions that are either
+visible or are retained in backing store
+are tiled with that background
+with plane-mask of all ones and
+.S GXcopy
+function.
+>>STRATEGY
+make src window and draw into it (background of 0)
+make dest window with background of 1 and draw into it
+copy region that extends off the edge of the source drawable
+verify that it is not copied.
+>>CODE
+Window w1, w2;
+XVisualInfo *vp;
+Pixmap pm;
+struct area area;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ winpair(display, vp, &w1, &w2);
+
+ pattern(display, w1);
+
+ src = w1;
+ dest = w2;
+
+ gc = makegc(display, dest);
+
+ /*
+ * Set the destination background pixmap.
+ */
+ pm = maketile(display, w2);
+ XSetWindowBackgroundPixmap(display, w2, pm);
+
+ /*
+ * Use a width of the size of the window minus TRIM, therefore
+ * it will extend off the edge of the window by width-src_x pixels.
+ */
+ getsize(display, w1, &width, (unsigned int*)0);
+ src_x = width-XOFF;
+ width -= TRIM;
+
+ dest_x = 0;
+ dest_y = 0;
+
+ plane = 1;
+
+ XCALL;
+
+ area.x = dest_x;
+ area.y = dest_y;
+ area.width = width;
+ area.height = height;
+
+ if (checkarea(display, dest, &area, 0, W_BG, CHECK_OUT) == False) {
+ report("window modified outside the target area");
+ FAIL;
+ } else
+ CHECK;
+
+ area.x = XOFF;
+ area.width = width - XOFF - TRIM;
+
+ if (checktile(display, dest, &area, 0, 0, pm) == False) {
+ report("area was not copied properly");
+ FAIL;
+ } else
+ CHECK;
+
+ }
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When
+.M graphics-exposures
+is
+.S True ,
+then
+.S GraphicsExpose
+events for all corresponding destination regions are generated.
+>>STRATEGY
+Set graphics-exposures to True.
+Enable All Events.
+DO as above.
+Check events received, and x,y,width,height in each.
+>>CODE
+Window w1, w2;
+XEvent event;
+XVisualInfo *vp;
+XGraphicsExposeEvent ge;
+int n;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+
+ winpair(display, vp, &w1, &w2);
+
+ src = w1;
+ dest = w2;
+
+ getsize(display, w1, &width, (unsigned int*)0);
+
+ src_x = XOFF;
+ dest_x = 0;
+ plane = 1;
+ gc = makegc(display, dest);
+
+ XSelectInput(display, src, ALLEVENTS);
+ XCALL;
+ XSelectInput(display, dest, NoEventMask);
+
+ if (getevent(display, &event) != 1 || event.type != GraphicsExpose) {
+ report("Expecting one GraphicsExpose event");
+ FAIL;
+ return;
+ }
+
+ ge.type = GraphicsExpose;
+ ge.display = display;
+ ge.drawable = dest;
+ ge.x = dest_x+width-XOFF;
+ ge.y = dest_y;
+ ge.width = XOFF;
+ ge.height = height;
+ ge.count = 0;
+ ge.major_code = X_CopyPlane;
+ ge.minor_code = 0;
+
+ n = checkevent((XEvent*)&ge, &event);
+ if (n == 0)
+ CHECK;
+ else {
+ report("error in %d field%s of event", n, (n!=1)?"s":"");
+ tet_result(TET_FAIL);
+ }
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When
+.M graphics-exposures
+is
+.S True
+and no
+.S GraphicsExpose
+events are generated, then a
+.S NoExpose
+event is generated.
+>>STRATEGY
+As above, but copy visable area
+check for NoExpose event
+>>CODE
+Window w1, w2;
+XEvent event;
+XNoExposeEvent ge;
+XVisualInfo *vp;
+int n;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ winpair(display, vp, &w1, &w2);
+
+ src = w1;
+ dest = w2;
+
+ plane = 1;
+ gc = makegc(display, dest);
+
+ XSelectInput(display, src, ALLEVENTS);
+ XCALL;
+ XSelectInput(display, dest, NoEventMask);
+
+ if (getevent(display, &event) != 1 || event.type != NoExpose) {
+ report("Expecting one NoExpose event");
+ FAIL;
+ return;
+ }
+
+ ge.type = NoExpose;
+ ge.display = display;
+ ge.drawable = dest;
+ ge.major_code = X_CopyPlane;
+ ge.minor_code = 0;
+
+ n = checkevent((XEvent*)&ge, &event);
+ if (n == 0)
+ CHECK;
+ else {
+ report("error in %d field%s of event", n, (n!=1)?"s":"");
+ tet_result(TET_FAIL);
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M foreground ,
+.M background ,
+.M subwindow-mode ,
+.M graphics-exposures ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>>ASSERTION Bad A
+When the bit set in
+.A plane
+does not refer to a valid plane for the screen, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+For each drawable type
+ Ignore those that have no invalid planes.
+ Call XCopyPlane with plane set to first invalid number.
+ Verify that a BadValue error occurred.
+>>CODE BadValue
+XVisualInfo *vp;
+int unsupp = 0;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ /*
+ * If all planes are valid then a BadValue is not possible
+ * with this drawable
+ */
+ if (vp->depth >= CHAR_BIT*sizeof(long)) {
+ trace("Visual with depth of %d, no planes invalid", vp->depth);
+ unsupp++;
+ continue;
+ }
+ winpair(display, vp, &src, &dest);
+
+ gc = makegc(display, dest);
+ plane = (1<<vp->depth);
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ }
+ if (unsupp == nvinf()) {
+ /*
+ * This can't happen when we are including pixmaps since depth 1
+ * pixmap is always supported.
+ */
+ report("All planes are valid on all drawables");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ CHECKPASS(nvinf()-unsupp);
+
+>>ASSERTION Bad A
+When
+.A plane
+does not have exactly one bit set to 1, then
+a
+.S BadValue
+error occurs.
+>>STRATEGY
+For each drawable type
+ Make window pair.
+ Call XCopyPlane with plane set to 0.
+ Verify that BadValue error occurs.
+ If depth is greater than 1
+ Call XCopyPlane with plane set to 3.
+ Verify that BadValue error occurs.
+>>CODE BadValue
+XVisualInfo *vp;
+int unsupp = 0;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ winpair(display, vp, &src, &dest);
+
+ gc = makegc(display, dest);
+ plane = 0;
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+
+ if (vp->depth > 1) {
+ plane = 0x3;
+ XCALL;
+ if (geterr() == BadValue)
+ CHECK;
+ } else
+ unsupp++;
+ }
+
+ CHECKPASS(2*nvinf()-unsupp);
+
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/crtfntcrsr/crtfntcrsr.m b/xc/test/xsuite/xtest/tset/CH06/crtfntcrsr/crtfntcrsr.m
new file mode 100644
index 000000000..79058e5db
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/crtfntcrsr/crtfntcrsr.m
@@ -0,0 +1,100 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCreateFontCursor CH06
+Cursor
+XCreateFontCursor(display, shape)
+Display *display = Dsp;
+unsigned int shape;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>ASSERTION Good B 1
+When the
+.A shape
+argument is
+a defined glyph in the standard cursor font,
+then a call to xname creates a
+.S Cursor
+with a black foreground and a white background
+corresponding to the
+.A shape
+argument
+and returns the cursor ID.
+>>STRATEGY
+Get TET variable XT_FONTCURSOR_GOOD.
+Call XCreateFontCursor with shape of this value.
+Verify that XCreateFontCursor returns non-zero.
+>>CODE
+Cursor qstat;
+
+/* Get TET variable XT_FONTCURSOR_GOOD */
+ /* UNSUPPORTED is not allowed */
+ shape = config.fontcursor_good;
+ if (shape == -1) {
+ delete("A value of UNSUPPORTED is not allowed for XT_FONTCURSOR_GOOD");
+ return;
+ }
+
+ trace("Shape used is %x", shape);
+/* Call XCreateFontCursor with shape of this value, */
+/* else call XCreateFontCursor with shape of zero. */
+
+ qstat = XCALL;
+
+/* Verify that XCreateFontCursor returns non-zero. */
+ if (qstat == 0) {
+ report("Returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Bad A
+When the
+.A shape
+argument is not
+a defined glyph in the standard cursor font,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Get TET variable XT_FONTCURSOR_BAD.
+Call XCreateFontCursor with shape of this value.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+Cursor qstat;
+
+/* Get TET variable XT_FONTCURSOR_BAD */
+ shape = config.fontcursor_bad;
+ if (shape == -1) {
+ unsupported("There are no invalid cursor glyph values");
+ return;
+ }
+
+ trace("Shape used is %x", shape);
+/* Call XCreateFontCursor with shape of this value, */
+/* else call XCreateFontCursor with shape of zero. */
+ XCALL;
+
+/* Verify that a BadValue error occurs. */
+ if (geterr() == BadValue)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>># HISTORY kieron Completed Reformat to pass ca, plus correction
+>># HISTORY peterc Completed Wrote STRATEGY and CODE.
diff --git a/xc/test/xsuite/xtest/tset/CH06/crtglyphcr/crtglyphcr.m b/xc/test/xsuite/xtest/tset/CH06/crtglyphcr/crtglyphcr.m
new file mode 100644
index 000000000..366804b3e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/crtglyphcr/crtglyphcr.m
@@ -0,0 +1,592 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCreateGlyphCursor CH06
+Cursor
+XCreateGlyphCursor (display, source_font, mask_font, source_char, mask_char, foreground_color, background_color)
+Display *display = Dsp;
+Font source_font;
+Font mask_font;
+unsigned int source_char;
+unsigned int mask_char;
+XColor *foreground_color = mkcolor(1);
+XColor *background_color = mkcolor(0);
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>EXTERN
+static char xtfont0[] = "xtfont0"; /* known font, used for source font */
+static unsigned int good_char0 = 1; /* known defined glyph in xtfont0 */
+static unsigned int goodblank_char0 = 1;/* blank defined glyph in xtfont0 */
+static unsigned int bad_char0 = 0; /* undefined glyph xtfont0 */
+static unsigned int bounding0 = 4; /* diff. bounding box than good_char0 */
+
+static char xtfont1[] = "xtfont1"; /* font sometimes used for mask font */
+static unsigned int good_char1 = 1; /* known defined glyph in xtfont1 */
+
+static char xtfont6[] = "xtfont6"; /* known 2-byte matrix font */
+static unsigned int good_char6 = 504; /* known defined glyph in xtfont6 */
+
+/*
+ * mkcolor() - return a pointer to a color structure.
+ * flag indicates whether or not color is foreground
+ */
+static XColor *
+mkcolor(flag)
+{
+ static XColor fore;
+ static XColor back;
+ static int first = 1;
+
+ if (first)
+ {
+ first = 0;
+
+ fore.pixel = BlackPixel(display, DefaultScreen(display));
+ XQueryColor(display, DefaultColormap(display, DefaultScreen(display)), &fore);
+ back.pixel = WhitePixel(display, DefaultScreen(display));
+ XQueryColor(display, DefaultColormap(display, DefaultScreen(display)), &back);
+ }
+ return(flag ? &fore : &back);
+}
+>>ASSERTION Good B 1
+A call to xname creates a
+.S Cursor
+with colours defined by
+.A foreground_color
+and
+.A background_color
+and returns its ID.
+>>STRATEGY
+Load xtfont0 using XLoadFont.
+Call XCreateGlyphCursor with foreground colour W_FG and
+background colour W_BG.
+Verify that XCreateGlyphCursor returns non-zero.
+>>CODE
+Cursor qstat;
+
+/* Load xtfont0 using XLoadFont. */
+ source_font = XLoadFont(display, xtfont0);
+ mask_font = source_font;
+ source_char = good_char0;
+ mask_char = good_char0;
+
+/* Call XCreateGlyphCursor with foreground colour W_FG and */
+/* background colour W_BG. */
+ qstat = XCALL;
+
+/* Verify that XCreateGlyphCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+The
+.A source_char
+specifies the glyph in the
+.A source_font
+from which the source bitmap is obtained.
+>>STRATEGY
+Load xtfont0 using XLoadFont.
+Call XCreateGlyphCursor with source_char set to
+a known defined glyph in font xtfont0.
+Verify that XCreateGlyphCursor returns non-zero.
+>>#
+>># This code is identical to the code for the previous assertion...pc
+>>#
+>>CODE
+Cursor qstat;
+
+/* Load xtfont0 using XLoadFont. */
+ source_font = XLoadFont(display, xtfont0);
+ mask_font = source_font;
+ source_char = good_char0;
+ mask_char = good_char0;
+
+/* Call XCreateGlyphCursor with source_char set to */
+/* a known defined glyph in font xtfont0. */
+ qstat = XCALL;
+
+/* Verify that XCreateGlyphCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+The
+.A mask_char
+specifies the glyph in the
+.A mask_font
+from which the mask bitmap is obtained.
+>>STRATEGY
+Load xtfont0 using XLoadFont.
+Load xtfont1 using XLoadFont.
+Call XCreateGlyphCursor with mask_char set to
+a known defined glyph in font xtfont1.
+Verify that XCreateGlyphCursor returns non-zero.
+>>CODE
+Cursor qstat;
+
+/* Load xtfont0 using XLoadFont. */
+ source_font = XLoadFont(display, xtfont0);
+/* Load xtfont1 using XLoadFont. */
+ mask_font = XLoadFont(display, xtfont1);
+
+ source_char = good_char0;
+ mask_char = good_char1;
+
+/* Call XCreateGlyphCursor with mask_char set to */
+/* a known defined glyph in font xtfont1. */
+ qstat = XCALL;
+
+/* Verify that XCreateGlyphCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When
+.A mask_char
+is zero, then all pixels of the source are displayed.
+>>STRATEGY
+Load xtfont0 using XLoadFont.
+Load xtfont1 using XLoadFont.
+Call XCreateGlyphCursor with mask_char set to zero.
+Verify that XCreateGlyphCursor returns non-zero.
+>>CODE
+Cursor qstat;
+
+/* Load xtfont0 using XLoadFont. */
+ source_font = XLoadFont(display, xtfont0);
+/* Load xtfont1 using XLoadFont. */
+ mask_font = XLoadFont(display, xtfont1);
+
+ source_char = good_char0;
+ mask_char = 0;
+
+/* Call XCreateGlyphCursor with mask_char set to zero. */
+ qstat = XCALL;
+
+/* Verify that XCreateGlyphCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When
+.A mask_char
+and
+.A mask_font
+are non-zero and a given bit in the mask bitmap is 1, then
+the corresponding pixel of the source is displayed.
+>>STRATEGY
+Load xtfont0 using XLoadFont.
+Load xtfont1 using XLoadFont.
+Call XCreateGlyphCursor with mask_font set to non-zero and
+mask_char corresponding to a glyph in mask_font which
+has at least one bit set to non-zero.
+Verify that XCreateGlyphCursor returns non-zero.
+>>#
+>># This code is identical to the code in an assertion which,
+>># at one time, was located two assertions previous.
+>>#
+>>CODE
+Cursor qstat;
+
+/* Load xtfont0 using XLoadFont. */
+ source_font = XLoadFont(display, xtfont0);
+/* Load xtfont1 using XLoadFont. */
+ mask_font = XLoadFont(display, xtfont1);
+
+ source_char = good_char0;
+ mask_char = good_char1;
+
+/* Call XCreateGlyphCursor with mask_font set to non-zero and */
+/* mask_char corresponding to a glyph in mask_font which */
+/* has at least one bit set to non-zero. */
+ qstat = XCALL;
+
+/* Verify that XCreateGlyphCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When
+.A mask_char
+and
+.A mask_font
+are non-zero and a given bit in the mask bitmap is 0, then
+the corresponding pixel of the source is not displayed.
+>>STRATEGY
+Load xtfont0 using XLoadFont.
+Load xtfont1 using XLoadFont.
+Call XCreateGlyphCursor with mask_font set to non-zero and
+mask_char corresponding to a glyph in mask_font which
+has at least one bit set to zero.
+Verify that XCreateGlyphCursor returns non-zero.
+>>#
+>># This code is identical to that for the previous assertion.
+>>#
+>>CODE
+Cursor qstat;
+
+/* Load xtfont0 using XLoadFont. */
+ source_font = XLoadFont(display, xtfont0);
+/* Load xtfont1 using XLoadFont. */
+ mask_font = XLoadFont(display, xtfont1);
+
+ source_char = good_char0;
+ mask_char = good_char1;
+
+/* Call XCreateGlyphCursor with mask_font set to non-zero and */
+/* mask_char corresponding to a glyph in mask_font which */
+/* has at least one bit set to zero. */
+ qstat = XCALL;
+
+/* Verify that XCreateGlyphCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When a bit in the source bitmap is 1, then
+.A foreground_color
+is used.
+>>STRATEGY
+Load xtfont0 using XLoadFont.
+Load xtfont1 using XLoadFont.
+Call XCreateGlyphCursor with glyph with at least
+one bit in the source bitmap set to 1.
+Verify that XCreateGlyphCursor returns non-zero.
+>>#
+>># This code is identical to that for the previous assertion.
+>>#
+>>CODE
+Cursor qstat;
+
+/* Load xtfont0 using XLoadFont. */
+ source_font = XLoadFont(display, xtfont0);
+/* Load xtfont1 using XLoadFont. */
+ mask_font = XLoadFont(display, xtfont1);
+
+ source_char = good_char0;
+ mask_char = good_char1;
+
+/* Call XCreateGlyphCursor with glyph with at least */
+/* one bit in the source bitmap set to 1. */
+ qstat = XCALL;
+
+/* Verify that XCreateGlyphCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When a bit in the source bitmap is 0, then
+.A background_color
+is used.
+>>STRATEGY
+Load xtfont0 using XLoadFont.
+Load xtfont1 using XLoadFont.
+Call XCreateGlyphCursor with source char corresponding to glyph which
+has at least one bit set to zero.
+Verify that XCreateGlyphCursor returns non-zero.
+>>CODE
+Cursor qstat;
+
+/* Load xtfont0 using XLoadFont. */
+ source_font = XLoadFont(display, xtfont0);
+/* Load xtfont1 using XLoadFont. */
+ mask_font = XLoadFont(display, xtfont1);
+
+ source_char = goodblank_char0;
+ mask_char = good_char1;
+
+/* Call XCreateGlyphCursor with source char corresponding to glyph which */
+/* has at least one bit set to zero. */
+ qstat = XCALL;
+
+/* Verify that XCreateGlyphCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When
+.A mask_char
+is non-zero, then its glyph
+.M origin
+is positioned coincidently with
+that of
+.A source_char .
+>>STRATEGY
+Load xtfont0 using XLoadFont.
+Load xtfont1 using XLoadFont.
+Call XCreateGlyphCursor with non-zero mask_char.
+Verify that XCreateGlyphCursor returns non-zero.
+>>#
+>># This code is identical to that for the previous assertion.
+>>#
+>>CODE
+Cursor qstat;
+
+/* Load xtfont0 using XLoadFont. */
+ source_font = XLoadFont(display, xtfont0);
+/* Load xtfont1 using XLoadFont. */
+ mask_font = XLoadFont(display, xtfont1);
+
+ source_char = goodblank_char0;
+ mask_char = good_char1;
+
+/* Call XCreateGlyphCursor with non-zero mask_char. */
+ qstat = XCALL;
+
+/* Verify that XCreateGlyphCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+The
+.M origin
+of the
+.A source_char
+defines the hotspot.
+>>#
+>># Don't think we need to repeat yet another test for this case...pc
+>>#
+>>ASSERTION Good B 1
+The
+.A source_char
+and
+.A mask_char
+need not have the same bounding box metrics.
+>>STRATEGY
+Load xtfont0 using XLoadFont.
+Call XCreateGlyphCursor with source_char and mask_char
+with different bounding boxes.
+Verify that XCreateGlyphCursor returns non-zero.
+>>CODE
+Cursor qstat;
+
+/* Load xtfont0 using XLoadFont. */
+ source_font = XLoadFont(display, xtfont0);
+ mask_font = source_font;
+ source_char = good_char0;
+ mask_char = bounding0;
+/* Call XCreateGlyphCursor with source_char and mask_char */
+/* with different bounding boxes. */
+
+ qstat = XCALL;
+
+/* Verify that XCreateGlyphCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When a cursor is created by a call to xname,
+and the
+.A source_font
+or
+.A mask_font
+argument is freed be a subsequent call to
+.F XFreeFont ,
+then the cursor is unaffected.
+>>STRATEGY
+Load xtfont0 using XLoadQueryFont.
+Verify that XLoadQueryFont returns non-zero.
+Load xtfont1 using XLoadQueryFont.
+Verify that XLoadQueryFont returns non-zero.
+Call XCreateGlyphCursor with foreground colour W_FG and background colour W_BG.
+Verify that XCreateGlyphCursor returns non-zero.
+Call XFreeFont for xtfont0.
+Call XFreeFont for xtfont1.
+>>CODE
+Cursor qstat;
+XFontStruct *font_struct0;
+XFontStruct *font_struct1;
+
+/* Load xtfont0 using XLoadQueryFont. */
+ font_struct0 = XLoadQueryFont(display, xtfont0);
+/* Verify that XLoadQueryFont returns non-zero. */
+ if (font_struct0 == (XFontStruct *) 0) {
+ delete("Could not load and query font \"%s\".", xtfont0);
+ return;
+ }
+ else
+ CHECK;
+/* Load xtfont1 using XLoadQueryFont. */
+ font_struct1 = XLoadQueryFont(display, xtfont1);
+/* Verify that XLoadQueryFont returns non-zero. */
+ if (font_struct1 == (XFontStruct *) 0) {
+ delete("Could not load and query font \"%s\".", xtfont1);
+ return;
+ }
+ else
+ CHECK;
+ source_font = font_struct0->fid;
+ mask_font = font_struct1->fid;
+ source_char = good_char0;
+ mask_char = good_char1;
+/* Call XCreateGlyphCursor with foreground colour W_FG and background colour W_BG. */
+
+ qstat = XCALL;
+
+/* Verify that XCreateGlyphCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+/* Call XFreeFont for xtfont0. */
+ XFreeFont(display, font_struct0);
+/* Call XFreeFont for xtfont1. */
+ XFreeFont(display, font_struct1);
+
+ CHECKUNTESTED(3);
+>>ASSERTION Good B 1
+For 2-byte matrix fonts,
+the 16-bit value should be formed with the byte1 member
+in the most significant byte and the byte2 member in the
+least significant byte.
+>>STRATEGY
+Load 2-byte matrix font xtfont6 using XLoadFont.
+Call XCreateGlyphCursor with foreground colour W_FG and
+background colour W_BG.
+Verify that XCreateGlyphCursor returns non-zero.
+>>CODE
+Cursor qstat;
+
+/* Load 2-byte matrix font xtfont6 using XLoadFont. */
+ source_font = XLoadFont(display, xtfont6);
+ mask_font = source_font;
+ source_char = good_char6;
+ mask_char = good_char6;
+/* Call XCreateGlyphCursor with foreground colour W_FG and */
+/* background colour W_BG. */
+
+ qstat = XCALL;
+
+/* Verify that XCreateGlyphCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned wrong value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Bad A
+When the
+.A source_char
+argument is not
+a defined glyph in
+.A source_font ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Load xtfont0 using XLoadFont.
+Call XCreateGlyphCursor with a source_char which is
+an undefined glyph in source_font.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+Cursor qstat;
+
+/* Load xtfont0 using XLoadFont. */
+ source_font = XLoadFont(display, xtfont0);
+ mask_font = source_font;
+ source_char = bad_char0;
+ mask_char = good_char0;
+
+/* Call XCreateGlyphCursor with a source_char which is */
+/* an undefined glyph in source_font. */
+ XCALL;
+
+/* Verify that a BadValue error occurs. */
+ if (geterr() == BadValue)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+When
+.A mask_font
+is non-zero and
+.A mask_char
+is non-zero and not a defined glyph in
+.A mask_font ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Load xtfont0 using XLoadFont.
+Call XCreateGlyphCursor with a mask_char which is
+an undefined glyph in mask_font.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+Cursor qstat;
+
+/* Load xtfont0 using XLoadFont. */
+ source_font = XLoadFont(display, xtfont0);
+ mask_font = source_font;
+ source_char = good_char0;
+ mask_char = bad_char0;
+
+/* Call XCreateGlyphCursor with a mask_char which is */
+/* an undefined glyph in mask_font. */
+ XCALL;
+
+/* Verify that a BadValue error occurs. */
+ if (geterr() == BadValue)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+.ER BadFont bad-font
+>>#HISTORY peterc Completed Updated as per RTCB#3
diff --git a/xc/test/xsuite/xtest/tset/CH06/crtpxmpcrs/crtpxmpcrs.m b/xc/test/xsuite/xtest/tset/CH06/crtpxmpcrs/crtpxmpcrs.m
new file mode 100644
index 000000000..55bdbdf58
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/crtpxmpcrs/crtpxmpcrs.m
@@ -0,0 +1,482 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCreatePixmapCursor CH06
+Cursor
+XCreatePixmapCursor(display, source, mask, foreground_color, background_color, x, y)
+Display *display = Dsp;
+Pixmap source;
+Pixmap mask;
+XColor *foreground_color = mkcolor(1);
+XColor *background_color = mkcolor(0);
+unsigned int x = 0;
+unsigned int y = 0;
+>>EXTERN
+static XVisualInfo depth1;
+
+/*
+ * mkcolor() - return a pointer to a color structure.
+ * flag indicates whether or not color is foreground
+ */
+static XColor *
+mkcolor(flag)
+{
+ static XColor fore;
+ static XColor back;
+ static int first = 1;
+
+ if (first)
+ {
+ first = 0;
+
+ fore.pixel = BlackPixel(display, DefaultScreen(display));
+ XQueryColor(display, DefaultColormap(display, DefaultScreen(display)), &fore);
+ back.pixel = WhitePixel(display, DefaultScreen(display));
+ XQueryColor(display, DefaultColormap(display, DefaultScreen(display)), &back);
+ }
+ return(flag ? &fore : &back);
+}
+>>ASSERTION Good B 1
+A call to xname creates a
+.S Cursor
+from the
+.A source
+and
+.A mask
+pixmaps
+with colours defined by
+.A foreground_color
+and
+.A background_color
+and hotspot position given by
+.A x
+and
+.A y
+and returns the cursor ID.
+>>STRATEGY
+Create source pixmap.
+Create mask pixmap.
+Call XCreatePixmapCursor with foreground colour W_FG and
+background colour W_BG and hotspot at (0,0).
+Verify that XCreatePixmapCursor returns non-zero.
+>>CODE
+Cursor qstat;
+
+ depth1.depth = 1;
+/* Create source pixmap. */
+ source = makepixm(display, &depth1);
+
+/* Create mask pixmap. */
+ mask = makepixm(display, &depth1);
+
+/* Call XCreatePixmapCursor with foreground colour W_FG and */
+/* background colour W_BG and hotspot at (0,0). */
+ qstat = XCALL;
+
+/* Verify that XCreatePixmapCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned incorrect value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When
+.A mask
+is
+.S None ,
+then all pixels of the
+.A source
+are displayed.
+>>STRATEGY
+Create source pixmap.
+Call XCreatePixmapCursor with mask None.
+Verify that XCreatePixmapCursor returns non-zero.
+>>CODE
+Cursor qstat;
+
+ depth1.depth = 1;
+/* Create source pixmap. */
+ source = makepixm(display, &depth1);
+
+ mask = None;
+/* Call XCreatePixmapCursor with mask None. */
+ qstat = XCALL;
+
+/* Verify that XCreatePixmapCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned incorrect value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When
+.A mask
+is other than
+.S None
+and a given bit in the
+.A mask
+bitmap is 1, then
+the corresponding pixel of
+.A source
+is displayed.
+>>STRATEGY
+Create source pixmap.
+Create mask pixmap.
+Call XCreatePixmapCursor with mask other than none and
+mask with at least one bit set.
+Verify that XCreatePixmapCursor returns non-zero.
+>>CODE
+Cursor qstat;
+
+ depth1.depth = 1;
+/* Create source pixmap. */
+ source = makepixm(display, &depth1);
+/* Create mask pixmap. */
+ mask = makepixm(display, &depth1);
+
+/* Call XCreatePixmapCursor with mask other than none and */
+/* mask with at least one bit set. */
+ qstat = XCALL;
+
+/* Verify that XCreatePixmapCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned incorrect value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When
+.A mask
+is other than
+.S None
+and a given bit in the
+.A mask
+bitmap is 0, then
+the corresponding pixel of
+.A source
+is not displayed.
+>>STRATEGY
+Create source pixmap.
+Create mask pixmap.
+Call XCreatePixmapCursor with mask other than none and
+mask with at least one bit not set.
+Verify that XCreatePixmapCursor returns non-zero.
+>>CODE
+Cursor qstat;
+
+ depth1.depth = 1;
+/* Create source pixmap. */
+ source = makepixm(display, &depth1);
+/* Create mask pixmap. */
+ mask = makepixm(display, &depth1);
+ dset(display, (Drawable) mask, (unsigned long) 0);
+
+/* Call XCreatePixmapCursor with mask other than none and */
+/* mask with at least one bit not set. */
+ qstat = XCALL;
+
+/* Verify that XCreatePixmapCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned incorrect value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When a bit in the
+.A source
+bitmap is 1, then
+.A foreground_color
+is used.
+>>STRATEGY
+Create source pixmap.
+Create mask pixmap.
+Call XCreatePixmapCursor with source bitmap containing
+at least one bit set to 1.
+Verify that XCreatePixmapCursor returns non-zero.
+>>CODE
+Cursor qstat;
+
+ depth1.depth = 1;
+/* Create source pixmap. */
+ source = makepixm(display, &depth1);
+/* Create mask pixmap. */
+ mask = makepixm(display, &depth1);
+
+/* Call XCreatePixmapCursor with source bitmap containing */
+/* at least one bit set to 1. */
+ qstat = XCALL;
+
+/* Verify that XCreatePixmapCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned incorrect value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When a bit in the
+.A source
+bitmap is 0, then
+.A background_color
+is used.
+>>STRATEGY
+Create source pixmap.
+Create mask pixmap.
+Call XCreatePixmapCursor with source bitmap containing
+at least one bit set to 0.
+Verify that XCreatePixmapCursor returns non-zero.
+>>CODE
+Cursor qstat;
+
+ depth1.depth = 1;
+/* Create source pixmap. */
+ source = makepixm(display, &depth1);
+ dset(display, (Drawable) source, 0);
+/* Create mask pixmap. */
+ mask = makepixm(display, &depth1);
+
+/* Call XCreatePixmapCursor with source bitmap containing */
+/* at least one bit set to 0. */
+ qstat = XCALL;
+
+/* Verify that XCreatePixmapCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned incorrect value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When a
+.S Cursor
+is created by a call to xname,
+and the
+.A source
+and/or
+.A mask
+argument is freed by a subsequent call to
+.F XFreePixmap ,
+then the cursor is unaffected.
+>>STRATEGY
+Create source pixmap.
+Create mask pixmap.
+Call XCreatePixmapCursor with mask other than none and
+mask with at least one bit set.
+Verify that XCreatePixmapCursor returns non-zero.
+Call XFreePixmap with source pixmap.
+Call XFreePixmap with mask pixmap.
+>>CODE
+Cursor qstat;
+
+/* Create source pixmap. */
+ source = XCreatePixmap(display, DRW(display), 2, 2, 1);
+/* Create mask pixmap. */
+ mask = XCreatePixmap(display, DRW(display), 2, 2, 1);
+
+/* Call XCreatePixmapCursor with mask other than none and */
+/* mask with at least one bit set. */
+ qstat = XCALL;
+
+/* Verify that XCreatePixmapCursor returns non-zero. */
+ if (qstat == (Cursor) 0) {
+ report("Returned incorrect value %ld", (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+/* Call XFreePixmap with source pixmap. */
+ XFreePixmap(display, source);
+
+/* Call XFreePixmap with mask pixmap. */
+ XFreePixmap(display, mask);
+
+ CHECKUNTESTED(1);
+>># Assertion should mention that test is only
+>># appropriate for servers which support depth!= 1
+>>ASSERTION Bad C
+If multiple window depths are supported:
+When
+.A source
+does not have depth one, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If only one depth supported report UNSUPPORTED.
+Create source pixmap of depth not equal to one.
+Create mask pixmap.
+Call XCreatePixmapCursor with source pixmap.
+Verify that BadMatch error occurred.
+>>CODE BadMatch
+XVisualInfo *vp;
+Cursor qstat;
+
+ depth1.depth = 1;
+/* If only one depth supported report UNSUPPORTED. */
+ for (resetvinf(VI_PIX); nextvinf(&vp); ) {
+ if (vp->depth != 1) {
+ depth1.depth = vp->depth;
+ break;
+ }
+ }
+ if (depth1.depth == 1) {
+ unsupported("Only one depth of window is supported");
+ return;
+ }
+/* Create source pixmap of depth not equal to one. */
+ source = makepixm(display, &depth1);
+/* Create mask pixmap. */
+ depth1.depth = 1;
+ mask = makepixm(display, &depth1);
+
+/* Call XCreatePixmapCursor with source pixmap. */
+ XCALL;
+
+/* Verify that BadMatch error occurred. */
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+When
+.A mask
+is not
+.S None
+and
+.A mask
+does not have depth one, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If only one depth supported report UNSUPPORTED.
+Create mask pixmap of depth not equal to one.
+Create source pixmap.
+Call XCreatePixmapCursor with mask pixmap.
+Verify that BadMatch error occurred.
+>>CODE BadMatch
+XVisualInfo *vp;
+Cursor qstat;
+
+ depth1.depth = 1;
+/* If only one depth supported report UNSUPPORTED. */
+ for (resetvinf(VI_PIX); nextvinf(&vp); ) {
+ if (vp->depth != 1) {
+ depth1.depth = vp->depth;
+ break;
+ }
+ }
+ if (depth1.depth == 1) {
+ report("Only one depth supported");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+/* Create mask pixmap of depth not equal to one. */
+ mask = makepixm(display, &depth1);
+/* Create source pixmap. */
+ depth1.depth = 1;
+ source = makepixm(display, &depth1);
+
+/* Call XCreatePixmapCursor with mask pixmap. */
+ XCALL;
+
+/* Verify that BadMatch error occurred. */
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+When
+.A mask
+is not
+.S None
+and both
+.A source
+and
+.A mask
+are not the same size, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create source pixmap of size 1x1.
+Create mask pixmap of size 2x2.
+Call XCreatePixmapCursor with mask pixmap.
+Verify that BadMatch error occurred.
+>>CODE BadMatch
+Cursor qstat;
+
+ depth1.depth = 1;
+/* Create source pixmap of size 1x1. */
+ source = XCreatePixmap(display, DRW(display), 1, 1, 1);
+ regid(display, (union regtypes *)&source, REG_PIXMAP);
+/* Create mask pixmap of size 2x2. */
+ mask = XCreatePixmap(display, DRW(display), 2, 2, 1);
+ regid(display, (union regtypes *)&mask, REG_PIXMAP);
+
+/* Call XCreatePixmapCursor with mask pixmap. */
+ XCALL;
+
+/* Verify that BadMatch error occurred. */
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+When the hotspot position is not a point within the
+.A source
+pixmap,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create source pixmap.
+Create mask pixmap.
+Call XCreatePixmapCursor with hotspot outside the source pixmap.
+Verify that BadMatch error occurred.
+>>CODE BadMatch
+Cursor qstat;
+
+ depth1.depth = 1;
+/* Create source pixmap. */
+ source = makepixm(display, &depth1);
+/* Create mask pixmap. */
+ mask = makepixm(display, &depth1);
+
+ x = 2 * W_STDWIDTH + 1;
+ y = 2 * W_STDHEIGHT + 1;
+
+/* Call XCreatePixmapCursor with hotspot outside the source pixmap. */
+ XCALL;
+
+/* Verify that BadMatch error occurred. */
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadPixmap
+>>#HISTORY peterc Completed Updated as per RTCB#3
+>>#HISTORY peterc Completed Wrote STRATEGY and CODE
diff --git a/xc/test/xsuite/xtest/tset/CH06/dfncrsr/dfncrsr.m b/xc/test/xsuite/xtest/tset/CH06/dfncrsr/dfncrsr.m
new file mode 100644
index 000000000..d70f260a7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/dfncrsr/dfncrsr.m
@@ -0,0 +1,433 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDefineCursor CH06
+void
+XDefineCursor(display, w, cursor)
+Display *display = Dsp;
+Window w;
+Cursor cursor;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>ASSERTION Good B 1
+A call to xname sets the cursor for the
+.A window
+to be
+.A cursor .
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Obtain a non-default cursor.
+ Set the window cursor using xname.
+ Verify that the window cursor is set correctly.
+Otherwise:
+ Create cursor.
+ Create windows.
+ Call XDefineCursor.
+>>CODE
+XVisualInfo *vp;
+
+ /* If extended testing is required: */
+ if(noext(0) == False) {
+
+
+ /* Create a window. */
+ w = defwin(display);
+ /* Obtain a non-default cursor. */
+ cursor = makecur(display);
+ /* Set the window cursor using xname. */
+ XCALL;
+
+ /* Verify that the window cursor is set correctly. */
+ if(curofwin(display, cursor, w) == False) {
+ report("The cursor for the window was not set correctly.");
+ FAIL;
+ } else
+ PASS;
+ } else {
+
+ /* Otherwise: */
+
+ /* Create cursor. */
+ cursor = makecur(display);
+ /* Create windows. */
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ w = makewin(display, vp);
+ /* Call XDefineCursor. */
+ XCALL;
+ if (geterr() != Success)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKUNTESTED(nvinf());
+ }
+
+>>ASSERTION Good B 1
+When the
+.A cursor
+is
+.S None
+and the
+.A window
+is the root window, then the default cursor will be used.
+>>STRATEGY
+If extended testing is required:
+ If the server supports two screens with the same default cursor:
+ Set the root window cursor to a non-default cursor using xname.
+ Verify that the cursor was set correctly.
+ Warp the pointer into the root window.
+ Verify that the current cursor is that of the root window.
+ Warp the pointer to the alternate root window.
+ Verify that the current cursor is not the same as that of the default root window.
+ Reset the cursor of the root window to the default cursor using xname.
+ Verify that the current cursor is the same as that of the default root window.
+ Otherwise :
+ Set the root window cursor to a non-default cursor using xname.
+ Verify that the cursor was set correctly.
+ Warp the pointer to the root window.
+ Verify that the current cursor is that of the root window.
+ Reset the cursor of the root window to the default cursor using xname.
+ Verify that the root window cursor is no longer the non-default cursor.
+Otherwise:
+ Set window to root window.
+ Call XDefineCursor with cursor set to None.
+>>CODE
+Cursor cursor2;
+Window altroot;
+Bool samedefcursor;
+
+ /* If extended testing is required: */
+ if(noext(0) == False) {
+
+ if(config.alt_screen != -1) {
+ (void) warppointer(display, DRW(display), 0,0);
+ altroot = RootWindow(display, config.alt_screen);
+ samedefcursor = spriteiswin(display, altroot);
+ }
+
+ /* If the server supports two screens with the same default cursor: */
+ if(config.alt_screen != -1 && samedefcursor) {
+
+ /* Set the root window cursor to a non-default cursor using xname. */
+ cursor = makecur(display);
+ w = DRW(display);
+ XCALL;
+
+ /* Verify that the cursor was set correctly. */
+ if(curofwin(display, cursor, w) == False) {
+ report("%s() did not set the root window's cursor correctly.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ /* Warp the pointer into the root window. */
+ (void) warppointer(display, w, 0,0);
+
+ /* Verify that the current cursor is that of the root window. */
+ if(spriteiswin(display, w) == False) {
+ delete("Current cursor is not that of the root window.");
+ return;
+ } else
+ CHECK;
+
+ /* Warp the pointer to the alternate root window. */
+ (void) warppointer(display, altroot, 0,0);
+
+ /* Verify that the current cursor is not the same as that of the default root window. */
+ if(spriteiswin(display, DRW(display)) != False) {
+ delete("The alternate root window's cursor was not set to the default cursor.");
+ return;
+ } else
+ CHECK;
+
+ /* Reset the cursor of the root window to the default cursor using xname. */
+ cursor = None;
+ XCALL;
+
+ /* Verify that the current cursor is the same as that of the default root window. */
+ if(spriteiswin(display, DRW(display)) == False) {
+ report("Root window's cursor was not set to the default cursor.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+ } else {
+
+ /* Otherwise : */
+
+ /* Set the root window cursor to a non-default cursor using xname. */
+ cursor = cursor2 = makecur2(display);
+ w = DRW(display);
+ XCALL;
+
+ /* Verify that the cursor was set correctly. */
+ if(curofwin(display, cursor, w) == False) {
+ report("%s() did not set the root window's cursor correctly.", TestName);
+ return;
+ } else
+ CHECK;
+
+ /* Warp the pointer to the root window. */
+ (void) warppointer(display, w, 0,0);
+
+ /* Verify that the current cursor is that of the root window. */
+ if(spriteiswin(display, w) == False) {
+ delete("Current cursor is not that of the root window.");
+ return;
+ } else
+ CHECK;
+
+ /* Reset the cursor of the root window to the default cursor using xname. */
+ cursor = None;
+ XCALL;
+
+ /* Verify that the root window cursor is no longer the non-default cursor. */
+ if(curofwin(display, cursor2, w) != False) {
+ report("%s() did not set the root window's cursor to the default cursor.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(3);
+ }
+
+ } else {
+
+ /* Otherwise: */
+
+ /* Set window to root window. */
+ w = DRW(display);
+
+ /* Call XDefineCursor with cursor set to None. */
+ cursor = None;
+ XCALL;
+
+ if (geterr() == Success)
+ UNTESTED;
+ else
+ FAIL;
+ }
+
+>>ASSERTION Good B 1
+When the
+.A cursor
+is
+.S None
+and the
+.A window
+is not the root window, then the parent's cursor will be used.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Set the cursor of that window to a non-default cursor.
+ Verify that the parent window's cursor is correctly set.
+ Warp the pointer into the parent.
+ Verify that the current cursor is that of the parent.
+ Create a child of the window.
+ Set the cursor of the child to a different cursor.
+ Verify that the child window's cursor is correctly set.
+ Warp the pointer into the child.
+ Verify that the current cursor is not that of the parent.
+ Verify that the current cursor is that of the child.
+ Set the child's cursor to None using xname.
+ Verify that the current cursor is that of the parent window.
+Otherwise:
+ Create windows.
+ Call XDefineCursor with cursor set to None.
+>>CODE
+Cursor cursor;
+Cursor cursor2;
+XVisualInfo *vp;
+Window parent;
+struct area ar;
+
+ /* If extended testing is required: */
+ if(noext(0) == False) {
+
+ /* Create a window. */
+ parent = defwin(display);
+ cursor2 = makecur2(display);
+
+ /* Set the cursor of that window to a non-default cursor. */
+ cursor = cursor2;
+ w = parent;
+ XCALL;
+
+ /* Verify that the parent window's cursor is correctly set. */
+ if(curofwin(display, cursor2, parent) == False) {
+ report("%s() did not set the parent's cursor correctly.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ /* Warp the pointer into the parent. */
+ (void) warppointer(display, parent, 0,0);
+
+ /* Verify that the current cursor is that of the parent. */
+ if(spriteiswin(display, parent) == False) {
+ delete("Current cursor is not that of the parent.");
+ return;
+ } else
+ CHECK;
+
+ /* Create a child of the window. */
+ ar.x = 10;
+ ar.y = 10;
+ ar.width = 20;
+ ar.height = 20;
+ w = crechild(display, parent, &ar);
+
+ /* Set the cursor of the child to a different cursor. */
+ cursor = makecur(display);
+ XCALL;
+
+ /* Verify that the child window's cursor is correctly set. */
+ if(curofwin(display, cursor, w) == False) {
+ report("%s() did not set the child's cursor correctly.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ /* Warp the pointer into the child. */
+ (void) warppointer(display, w , 0,0);
+
+ /* Verify that the current cursor is not that of the parent. */
+ if(spriteiswin(display, parent) != False) {
+ delete("Parent and child have the same cursor.");
+ return;
+ } else
+ CHECK;
+
+ /* Verify that the current cursor is that of the child. */
+ if(spriteiswin(display, w) == False) {
+ delete("Current cursor is not that of the child.");
+ return;
+ } else
+ CHECK;
+
+ /* Set the child's cursor to None using xname. */
+ cursor = None;
+ XCALL;
+
+ /* Verify that the current cursor is that of the parent window. */
+ if(spriteiswin(display, parent) == False) {
+ report("Cursor did not change to that of the window.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(6);
+
+ } else {
+
+ /* Otherwise: */
+
+ /* Create windows. */
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ w = makewin(display, vp);
+
+ /* Call XDefineCursor with cursor set to None. */
+ cursor = None;
+ XCALL;
+ if (geterr() != Success)
+ FAIL;
+ else
+ CHECK;
+ }
+
+ CHECKUNTESTED(nvinf());
+ }
+
+>>ASSERTION Good B 1
+When the cursor is other than
+.S None ,
+then a call to xname sets the cursor for the window to be
+.A cursor
+and causes the cursor to be displayed when the pointer is in the window.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Set the window cursor to a non-default cursor.
+ Verify that the window cursor is set correctly.
+ Warp the pointer into the window.
+ Verify that the current cursor is that of the window.
+Otherwise:
+ Create cursor.
+ Create windows.
+ Call xname with cursor other than None.
+>>CODE
+XVisualInfo *vp;
+
+ /* If extended testing is required: */
+ if(noext(0) == False) {
+
+ cursor = makecur(display);
+ /* Create a window. */
+ w = defwin(display);
+
+ /* Set the window cursor to a non-default cursor. */
+ XCALL;
+
+ /* Verify that the window cursor is set correctly. */
+ if(curofwin(display, cursor, w) == False) {
+ report("The cursor for the window was not set correctly.");
+ FAIL;
+ } else
+ CHECK;
+
+ /* Warp the pointer into the window. */
+ (void) warppointer(display, w, 0,0);
+
+ /* Verify that the current cursor is that of the window. */
+ if(spriteiswin(display, w) == False) {
+ report("Cursor did not change to that of the window.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+ } else {
+
+ /* Otherwise: */
+
+ /* Create cursor. */
+ cursor = makecur(display);
+
+ /* Create windows. */
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ w = makewin(display, vp);
+
+ /* Call xname with cursor other than None. */
+ XCALL;
+ if (geterr() != Success)
+ FAIL;
+ else
+ CHECK;
+ }
+
+ CHECKUNTESTED(nvinf());
+ }
+
+>>ASSERTION Bad A
+.ER BadCursor
+>>ASSERTION Bad A
+.ER BadWindow
+>>#HISTORY peterc Completed Updated as per RTCB#3
+>>#HISTORY peterc Completed Wrote STRATEGY and CODE
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a1.dat
new file mode 100644
index 000000000..0c6baca0f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a1.dat
@@ -0,0 +1,231 @@
+! $XConsortium$
+100 90 32
+40b,0
+b,1
+55,0
+4,1
+b,0
+4,1
+4e,0
+3,1
+13,0
+3,1
+49,0
+3,1
+17,0
+3,1
+46,0
+2,1
+1b,0
+2,1
+43,0
+2,1
+1f,0
+2,1
+40,0
+1
+23,0
+1
+3d,0
+2,1
+25,0
+2,1
+3a,0
+2,1
+27,0
+2,1
+38,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+35,0
+1
+2d,0
+1
+34,0
+1
+2f,0
+1
+32,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+30,0
+1
+33,0
+1
+2e,0
+2,1
+33,0
+2,1
+2d,0
+1
+35,0
+1
+2c,0
+2,1
+35,0
+2,1
+2b,0
+1
+37,0
+1
+2b,0
+1
+37,0
+1
+2a,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+28,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+28,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+2a,0
+1
+37,0
+1
+2b,0
+1
+37,0
+1
+2b,0
+2,1
+35,0
+2,1
+2c,0
+1
+35,0
+1
+2d,0
+2,1
+33,0
+2,1
+2e,0
+1
+33,0
+1
+30,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+32,0
+1
+2f,0
+1
+34,0
+1
+2d,0
+1
+35,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+38,0
+2,1
+27,0
+2,1
+3a,0
+2,1
+25,0
+2,1
+61,0
+1
+61,0
+2,1
+60,0
+2,1
+60,0
+3,1
+5f,0
+3,1
+5d,0
+4,1
+5a,0
+6,1
+7a2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a34.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a34.dat
new file mode 100644
index 000000000..1744ce2dc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a34.dat
@@ -0,0 +1,65 @@
+! $XConsortium$
+100 90 32
+f3,0
+7,1
+5,0
+f,1
+49,0
+7,1
+5,0
+f,1
+49,0
+7,1
+5,0
+f,1
+49,0
+7,1
+5,0
+f,1
+49,0
+7,1
+5,0
+f,1
+55,0
+f,1
+55,0
+f,1
+55,0
+f,1
+2d,0
+23,1
+a3,0
+2,1
+62,0
+2,1
+c17,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+c4f,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a42.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a42.dat
new file mode 100644
index 000000000..da3b8ff11
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a42.dat
@@ -0,0 +1,303 @@
+! $XConsortium$
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1ab6,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1ab6,0
+100 90 32
+71a,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+1ab4,0
+100 90 32
+71c,0
+f,1
+d,0
+f,1
+38,0
+11,1
+b,0
+11,1
+36,0
+12,1
+a,0
+12,1
+37,0
+11,1
+b,0
+11,1
+1ab4,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1a52,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1a52,0
+100 90 32
+71a,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+1a4f,0
+100 90 32
+71b,0
+11,1
+b,0
+11,1
+36,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+36,0
+11,1
+b,0
+11,1
+1a50,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1ab6,0
+100 90 32
+71a,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+1ab4,0
+100 90 32
+71c,0
+f,1
+d,0
+f,1
+38,0
+11,1
+b,0
+11,1
+36,0
+12,1
+a,0
+12,1
+37,0
+11,1
+b,0
+11,1
+1ab4,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1a52,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1a52,0
+100 90 32
+71a,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+1a4f,0
+100 90 32
+71b,0
+11,1
+b,0
+11,1
+36,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+36,0
+11,1
+b,0
+11,1
+1a50,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a49.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a49.dat
new file mode 100644
index 000000000..e968b8753
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a49.dat
@@ -0,0 +1,297 @@
+! $XConsortium$
+100 90 32
+71c,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+3
+33,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+3
+33,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+33,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+4,0
+2
+33,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+1a4b,0
+100 90 32
+6b8,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+33,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+3
+33,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+3
+33,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+33,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+4,0
+2
+33,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+1a4b,0
+100 90 32
+6b8,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+33,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+3
+33,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+3
+33,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+33,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+4,0
+2
+33,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+1a4b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a5.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a5.dat
new file mode 100644
index 000000000..6638f83d7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a5.dat
@@ -0,0 +1,13 @@
+! $XConsortium$
+100 90 32
+19fe,0
+2,1
+60,0
+3,1
+5f,0
+3,1
+5d,0
+4,1
+5a,0
+6,1
+7a2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a50.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a50.dat
new file mode 100644
index 000000000..53f8a2bb2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a50.dat
@@ -0,0 +1,185 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+38,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+43,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a58,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+38,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+43,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a58,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+38,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+43,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a58,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a51.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a51.dat
new file mode 100644
index 000000000..53f8a2bb2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a51.dat
@@ -0,0 +1,185 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+38,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+43,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a58,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+38,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+43,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a58,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+38,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+43,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a58,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a52.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a52.dat
new file mode 100644
index 000000000..903a5bdea
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a52.dat
@@ -0,0 +1,63 @@
+! $XConsortium$
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1ab6,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1a52,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1a52,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a53.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a53.dat
new file mode 100644
index 000000000..dab3e3e15
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a53.dat
@@ -0,0 +1,153 @@
+! $XConsortium$
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+3
+33,0
+31,3
+33,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+33,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+1aaf,0
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+3
+33,0
+31,3
+33,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+33,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+33,0
+3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+1a4b,0
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+3
+33,0
+31,3
+33,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+33,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+33,0
+3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+1a4b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a54.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a54.dat
new file mode 100644
index 000000000..9457b8e07
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a54.dat
@@ -0,0 +1,177 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+37,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+43,0
+d,1
+b,0
+d,1
+1ab0,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+37,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+43,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+1a54,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+37,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+43,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+1a54,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a55.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a55.dat
new file mode 100644
index 000000000..876794558
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a55.dat
@@ -0,0 +1,147 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+45,0
+3,1
+15,0
+7,1
+1ab6,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+45,0
+3,1
+15,0
+7,1
+3e,0
+a,1
+e,0
+c,1
+1a54,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+45,0
+3,1
+15,0
+7,1
+3e,0
+a,1
+e,0
+c,1
+1a54,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a6.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a6.dat
new file mode 100644
index 000000000..7a9a1d9c5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a6.dat
@@ -0,0 +1,13 @@
+! $XConsortium$
+100 90 32
+19e1,0
+2,1
+63,0
+3,1
+63,0
+3,1
+64,0
+4,1
+64,0
+5,1
+7a8,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a64.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a64.dat
new file mode 100644
index 000000000..d69873889
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a64.dat
@@ -0,0 +1,59 @@
+! $XConsortium$
+100 90 32
+45b,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+1bee,0
+100 90 32
+45b,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+1b8a,0
+100 90 32
+45b,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+1b8a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a66.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a66.dat
new file mode 100644
index 000000000..4de5f4bae
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a66.dat
@@ -0,0 +1,445 @@
+! $XConsortium$
+100 90 32
+5eb,0
+31,1
+1d0c,0
+100 90 32
+587,0
+31,1
+32,0
+32,1
+1d0c,0
+100 90 32
+523,0
+31,1
+32,0
+33,1
+30,0
+34,1
+31,0
+33,1
+1ca7,0
+100 90 32
+522,0
+33,1
+30,0
+35,1
+2f,0
+35,1
+2f,0
+35,1
+30,0
+33,1
+1c43,0
+100 90 32
+3f7,0
+31,1
+30,0
+36,1
+2d,0
+38,1
+2c,0
+39,1
+2b,0
+39,1
+2a,0
+3a,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+38,1
+2d,0
+36,1
+1b7a,0
+100 90 32
+3f5,0
+35,1
+2e,0
+37,1
+2c,0
+39,1
+2a,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+2a,0
+39,1
+2c,0
+37,1
+2e,0
+35,1
+1b16,0
+100 90 32
+2,0
+4b,1
+18,0
+4d,1
+16,0
+4f,1
+15,0
+4f,1
+15,0
+50,1
+14,0
+51,1
+13,0
+51,1
+13,0
+52,1
+12,0
+52,1
+12,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+52,1
+12,0
+52,1
+12,0
+51,1
+13,0
+51,1
+13,0
+50,1
+14,0
+4f,1
+15,0
+4f,1
+16,0
+4d,1
+18,0
+4b,1
+1a,0
+48,1
+1e,0
+45,1
+21,0
+41,1
+25,0
+3d,1
+159a,0
+100 90 32
+2,0
+4b,1
+18,0
+4d,1
+16,0
+4f,1
+15,0
+50,1
+14,0
+51,1
+13,0
+51,1
+13,0
+52,1
+12,0
+52,1
+12,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+52,1
+12,0
+52,1
+12,0
+51,1
+13,0
+51,1
+13,0
+50,1
+14,0
+4f,1
+16,0
+4d,1
+18,0
+4b,1
+1a,0
+49,1
+1c,0
+47,1
+1f,0
+43,1
+23,0
+3f,1
+28,0
+39,1
+1538,0
+100 90 32
+587,0
+31,1
+32,0
+32,1
+1d0c,0
+100 90 32
+523,0
+31,1
+32,0
+33,1
+30,0
+34,1
+31,0
+33,1
+1ca7,0
+100 90 32
+522,0
+33,1
+30,0
+35,1
+2f,0
+35,1
+2f,0
+35,1
+30,0
+33,1
+1c43,0
+100 90 32
+3f7,0
+31,1
+30,0
+36,1
+2d,0
+38,1
+2c,0
+39,1
+2b,0
+39,1
+2a,0
+3a,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+38,1
+2d,0
+36,1
+1b7a,0
+100 90 32
+3f5,0
+35,1
+2e,0
+37,1
+2c,0
+39,1
+2a,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+2a,0
+39,1
+2c,0
+37,1
+2e,0
+35,1
+1b16,0
+100 90 32
+2,0
+4b,1
+18,0
+4d,1
+16,0
+4f,1
+15,0
+4f,1
+15,0
+50,1
+14,0
+51,1
+13,0
+51,1
+13,0
+52,1
+12,0
+52,1
+12,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+52,1
+12,0
+52,1
+12,0
+51,1
+13,0
+51,1
+13,0
+50,1
+14,0
+4f,1
+15,0
+4f,1
+16,0
+4d,1
+18,0
+4b,1
+1a,0
+48,1
+1e,0
+45,1
+21,0
+41,1
+25,0
+3d,1
+159a,0
+100 90 32
+2,0
+4b,1
+18,0
+4d,1
+16,0
+4f,1
+15,0
+50,1
+14,0
+51,1
+13,0
+51,1
+13,0
+52,1
+12,0
+52,1
+12,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+52,1
+12,0
+52,1
+12,0
+51,1
+13,0
+51,1
+13,0
+50,1
+14,0
+4f,1
+16,0
+4d,1
+18,0
+4b,1
+1a,0
+49,1
+1c,0
+47,1
+1f,0
+43,1
+23,0
+3f,1
+28,0
+39,1
+1538,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a68.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a68.dat
new file mode 100644
index 000000000..ed2c0bde0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a68.dat
@@ -0,0 +1,77 @@
+! $XConsortium$
+100 90 32
+3f2,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+1b13,0
+100 90 32
+38d,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+1b13,0
+100 90 32
+38d,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+1b13,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a73.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a73.dat
new file mode 100644
index 000000000..2d7bc0f33
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a73.dat
@@ -0,0 +1,35 @@
+! $XConsortium$
+100 90 32
+71c,0
+1
+62,0
+3,1
+60,0
+4,1
+61,0
+3,1
+1ade,0
+100 90 32
+71b,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+1a7a,0
+100 90 32
+71b,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+1a7a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a76.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a76.dat
new file mode 100644
index 000000000..0c6baca0f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a76.dat
@@ -0,0 +1,231 @@
+! $XConsortium$
+100 90 32
+40b,0
+b,1
+55,0
+4,1
+b,0
+4,1
+4e,0
+3,1
+13,0
+3,1
+49,0
+3,1
+17,0
+3,1
+46,0
+2,1
+1b,0
+2,1
+43,0
+2,1
+1f,0
+2,1
+40,0
+1
+23,0
+1
+3d,0
+2,1
+25,0
+2,1
+3a,0
+2,1
+27,0
+2,1
+38,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+35,0
+1
+2d,0
+1
+34,0
+1
+2f,0
+1
+32,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+30,0
+1
+33,0
+1
+2e,0
+2,1
+33,0
+2,1
+2d,0
+1
+35,0
+1
+2c,0
+2,1
+35,0
+2,1
+2b,0
+1
+37,0
+1
+2b,0
+1
+37,0
+1
+2a,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+28,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+28,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+2a,0
+1
+37,0
+1
+2b,0
+1
+37,0
+1
+2b,0
+2,1
+35,0
+2,1
+2c,0
+1
+35,0
+1
+2d,0
+2,1
+33,0
+2,1
+2e,0
+1
+33,0
+1
+30,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+32,0
+1
+2f,0
+1
+34,0
+1
+2d,0
+1
+35,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+38,0
+2,1
+27,0
+2,1
+3a,0
+2,1
+25,0
+2,1
+61,0
+1
+61,0
+2,1
+60,0
+2,1
+60,0
+3,1
+5f,0
+3,1
+5d,0
+4,1
+5a,0
+6,1
+7a2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a77.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a77.dat
new file mode 100644
index 000000000..2c066b296
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a77.dat
@@ -0,0 +1,773 @@
+! $XConsortium$
+100 90 32
+280,0
+3
+5b,0
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+50,0
+2,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+4b,0
+4,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+3
+46,0
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+43,0
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3f,0
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+3c,0
+2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3a,0
+3,2
+3
+2
+9,3
+2
+3
+5,2
+0
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+37,0
+5,2
+2,3
+2,2
+5,3
+2,2
+f,0
+2,3
+2,2
+2,3
+6,2
+2,3
+2,2
+34,0
+2
+4,3
+3,2
+2,3
+4,2
+14,0
+2,3
+3,2
+4,3
+3,2
+2,3
+2
+32,0
+b,2
+2,3
+19,0
+b,2
+2,3
+31,0
+c,3
+1b,0
+b,3
+2
+30,0
+b,3
+1f,0
+b,3
+2e,0
+b,2
+21,0
+7,2
+4,3
+2c,0
+2,3
+2,2
+6,3
+2
+23,0
+2,3
+2,2
+2,3
+5,2
+2b,0
+2,2
+2,3
+2
+4,3
+2
+25,0
+2
+2,3
+2,2
+5,3
+2a,0
+3,3
+2
+3
+5,2
+27,0
+3
+2
+8,3
+28,0
+2,3
+2,2
+3
+2
+3
+3,2
+29,0
+3
+2,2
+5,3
+2
+28,0
+2,2
+3
+2
+3
+2
+3
+2,2
+2b,0
+2
+3
+5,2
+3
+2
+27,0
+3
+2,2
+3
+2
+3
+2
+3
+2
+2b,0
+3
+2,2
+3,3
+2,2
+3
+26,0
+3,3
+2
+3
+2
+3
+2
+3
+2d,0
+2
+5,3
+2
+3
+2
+25,0
+3,3
+2
+3
+2
+2,3
+2f,0
+5,3
+2
+3
+2
+24,0
+4,3
+2
+3
+2
+3
+2
+2f,0
+5,3
+2
+3
+2
+3
+23,0
+3,3
+2,2
+3
+2
+3
+30,0
+2
+3,3
+2,2
+3
+2
+3
+23,0
+4,2
+3
+2
+3
+2
+31,0
+4,2
+3
+2
+3
+2
+22,0
+5,3
+2,2
+3
+2
+31,0
+4,3
+2,2
+3
+2
+3
+21,0
+7,3
+2
+33,0
+5,3
+2
+3
+2
+21,0
+5,3
+2,2
+3
+33,0
+3,3
+2,2
+2,3
+2
+21,0
+5,2
+2,3
+2
+33,0
+3,2
+2,3
+3,2
+21,0
+5,3
+3,2
+33,0
+3,3
+5,2
+21,0
+3
+3,2
+4,3
+33,0
+2,2
+6,3
+21,0
+8,3
+33,0
+8,3
+21,0
+5,3
+3,2
+33,0
+3,3
+5,2
+20,0
+3
+5,2
+2,3
+34,0
+3,2
+2,3
+2,2
+3
+21,0
+5,3
+2,2
+3
+33,0
+3,3
+2,2
+2,3
+2
+21,0
+7,3
+2
+33,0
+5,3
+2
+3
+2
+21,0
+5,3
+2,2
+3
+33,0
+3,3
+2,2
+3
+2
+3
+21,0
+5,2
+3
+2
+3
+33,0
+3,2
+3
+2
+3
+2
+3
+21,0
+2
+3,3
+2,2
+3
+2
+33,0
+2,3
+2,2
+3
+2
+3
+2
+21,0
+5,3
+2
+3
+2
+33,0
+3,3
+2
+3
+2
+3
+2
+21,0
+5,3
+2
+3
+2
+33,0
+3,3
+2
+3
+2
+2,3
+21,0
+5,3
+2
+3
+2
+3
+31,0
+4,3
+2
+3
+2
+3
+2
+22,0
+3,3
+2,2
+3
+2
+3
+31,0
+3,3
+2,2
+3
+2
+3
+23,0
+4,2
+3
+2
+3
+2
+30,0
+5,2
+3
+2
+3
+2
+23,0
+4,3
+2,2
+3
+2
+3
+2f,0
+5,3
+2,2
+3
+2
+24,0
+5,3
+2
+3
+2
+2f,0
+7,3
+2
+25,0
+3,3
+2,2
+2,3
+2,2
+2d,0
+2
+5,3
+2,2
+3
+26,0
+2,2
+2,3
+3,2
+2,3
+2b,0
+2,3
+5,2
+2,3
+27,0
+2,3
+7,2
+2b,0
+2,2
+5,3
+2,2
+27,0
+2
+9,3
+29,0
+4,3
+3,2
+2,3
+29,0
+a,3
+27,0
+a,3
+2a,0
+a,2
+25,0
+5,2
+5,3
+2b,0
+2,3
+2,2
+6,3
+2
+23,0
+2,3
+2,2
+2,3
+5,2
+2c,0
+2
+2,3
+2
+4,3
+2
+2,3
+21,0
+2,3
+2
+2,3
+2,2
+4,3
+2e,0
+2
+3
+6,2
+3
+21,0
+4,2
+3
+2
+5,3
+30,0
+2
+3
+4,2
+3
+2
+1f,0
+3
+4,2
+3
+2
+3
+2,2
+2,3
+31,0
+2
+3
+4,2
+3
+1f,0
+2
+3
+4,2
+3
+2
+3
+2
+3
+2,2
+32,0
+2
+3
+2,2
+3
+1d,0
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+34,0
+3
+2,2
+1c,0
+2,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+4c,0
+2,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+4e,0
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+4f,0
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+50,0
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+3,2
+52,0
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+2
+54,0
+2
+3
+2
+9,3
+2
+3
+56,0
+2
+2,3
+2,2
+5,3
+2,2
+58,0
+3,2
+2,3
+4,2
+673,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a78.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a78.dat
new file mode 100644
index 000000000..49437d063
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a78.dat
@@ -0,0 +1,445 @@
+! $XConsortium$
+100 90 32
+280,0
+3
+5b,0
+4,2
+5,3
+4,2
+3,3
+2
+50,0
+2,2
+4,3
+6,2
+4,3
+7,2
+4b,0
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+46,0
+7,2
+d,3
+b,2
+3
+43,0
+2
+c,3
+c,2
+a,3
+3f,0
+9,3
+6,2
+12,3
+6,2
+3c,0
+4,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+7,3
+3a,0
+8,3
+2
+8,3
+4,2
+0
+2
+9,3
+2
+8,3
+2,2
+37,0
+3,3
+4,2
+9,3
+f,0
+9,3
+3,2
+4,3
+34,0
+4,2
+4,3
+3,2
+3,3
+14,0
+2
+4,3
+2,2
+6,3
+2,2
+32,0
+6,3
+7,2
+19,0
+2,2
+5,3
+3,2
+3,3
+31,0
+2,3
+4,2
+3,3
+2
+3
+2
+1b,0
+6,2
+5,3
+2
+30,0
+3,2
+4,3
+4,2
+1f,0
+3,3
+6,2
+2,3
+2e,0
+3,3
+5,2
+3,3
+21,0
+7,3
+4,2
+2c,0
+8,3
+3,2
+23,0
+a,3
+2
+2b,0
+a,2
+25,0
+3
+9,2
+2a,0
+2
+9,3
+27,0
+a,3
+28,0
+8,3
+2,2
+29,0
+5,3
+4,2
+28,0
+2,3
+6,2
+3
+2b,0
+4,2
+5,3
+27,0
+2,2
+7,3
+2b,0
+6,3
+3,2
+26,0
+6,3
+3,2
+2d,0
+5,2
+4,3
+25,0
+3,3
+3,2
+2,3
+2f,0
+5,3
+3,2
+24,0
+4,2
+5,3
+2f,0
+3
+4,2
+3,3
+2
+23,0
+3,3
+5,2
+30,0
+2
+4,3
+4,2
+23,0
+8,3
+31,0
+4,2
+3,3
+2
+22,0
+9,3
+31,0
+3,3
+6,2
+21,0
+5,3
+3,2
+33,0
+6,2
+2,3
+21,0
+5,2
+3,3
+33,0
+8,3
+21,0
+8,3
+33,0
+6,2
+2,3
+21,0
+5,3
+3,2
+33,0
+8,3
+21,0
+2,3
+3,2
+3,3
+33,0
+2,3
+4,2
+2,3
+21,0
+2,2
+6,3
+33,0
+2,2
+4,3
+2,2
+21,0
+5,3
+3,2
+33,0
+3,3
+5,2
+20,0
+6,2
+2,3
+34,0
+3,2
+3,3
+2
+3
+21,0
+4,3
+4,2
+33,0
+3,3
+5,2
+21,0
+8,3
+33,0
+3,2
+3,3
+2
+3
+21,0
+8,3
+33,0
+2,3
+6,2
+21,0
+5,3
+3,2
+33,0
+6,2
+2,3
+21,0
+5,2
+3,3
+33,0
+8,3
+21,0
+8,3
+33,0
+6,2
+2,3
+21,0
+5,3
+3,2
+33,0
+8,3
+21,0
+2,3
+3,2
+4,3
+31,0
+3,3
+4,2
+2,3
+22,0
+2
+6,3
+2
+31,0
+3,2
+4,3
+2
+23,0
+4,3
+3,2
+3
+30,0
+5,3
+4,2
+23,0
+4,2
+5,3
+2f,0
+3
+4,2
+3,3
+2
+24,0
+2,3
+6,2
+2f,0
+2
+4,3
+3,2
+25,0
+7,3
+2,2
+2d,0
+3
+5,2
+3,3
+26,0
+9,3
+2b,0
+6,3
+3,2
+27,0
+2,3
+7,2
+2b,0
+9,2
+27,0
+2,2
+8,3
+29,0
+9,3
+29,0
+7,3
+3,2
+27,0
+6,3
+4,2
+2a,0
+6,2
+4,3
+25,0
+3
+6,2
+3,3
+2b,0
+8,3
+3,2
+23,0
+2,2
+8,3
+2
+2c,0
+2,3
+5,2
+4,3
+21,0
+6,3
+5,2
+2e,0
+2
+6,3
+2,2
+21,0
+4,3
+3,2
+4,3
+30,0
+2,3
+4,2
+2,3
+1f,0
+6,2
+5,3
+2
+31,0
+2,2
+4,3
+2
+1f,0
+2,2
+4,3
+6,2
+3
+32,0
+5,2
+1d,0
+2
+3
+2
+3
+2
+9,3
+2
+34,0
+3,3
+1c,0
+7,2
+9,3
+4c,0
+8,2
+c,3
+2,2
+4e,0
+e,3
+6,2
+3
+4f,0
+2,3
+6,2
+4,3
+2,2
+6,3
+50,0
+2,2
+9,3
+2
+6,3
+52,0
+4,3
+4,2
+8,3
+54,0
+4,2
+4,3
+3,2
+3,3
+56,0
+5,3
+7,2
+58,0
+3
+4,2
+3,3
+2
+673,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a79.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a79.dat
new file mode 100644
index 000000000..183a24c71
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a79.dat
@@ -0,0 +1,339 @@
+! $XConsortium$
+100 90 32
+280,0
+1
+5f,0
+5,1
+4,0
+3,1
+53,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+d,1
+b,0
+1
+44,0
+c,1
+c,0
+a,1
+3f,0
+9,1
+6,0
+12,1
+46,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+7,1
+3a,0
+8,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+39,0
+3,1
+4,0
+9,1
+f,0
+9,1
+3,0
+4,1
+38,0
+4,1
+3,0
+3,1
+15,0
+4,1
+2,0
+6,1
+34,0
+6,1
+22,0
+5,1
+3,0
+3,1
+31,0
+2,1
+4,0
+3,1
+0
+1
+22,0
+5,1
+34,0
+4,1
+23,0
+3,1
+6,0
+2,1
+2e,0
+3,1
+5,0
+3,1
+21,0
+7,1
+30,0
+8,1
+26,0
+a,1
+5b,0
+1
+34,0
+9,1
+27,0
+a,1
+28,0
+8,1
+2b,0
+5,1
+2c,0
+2,1
+6,0
+1
+2f,0
+5,1
+29,0
+7,1
+2b,0
+6,1
+29,0
+6,1
+35,0
+4,1
+25,0
+3,1
+3,0
+2,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+1
+4,0
+3,1
+24,0
+3,1
+36,0
+4,1
+27,0
+8,1
+35,0
+3,1
+23,0
+9,1
+31,0
+3,1
+27,0
+5,1
+3c,0
+2,1
+26,0
+3,1
+33,0
+8,1
+21,0
+8,1
+39,0
+2,1
+21,0
+5,1
+36,0
+8,1
+21,0
+2,1
+3,0
+3,1
+33,0
+2,1
+4,0
+2,1
+23,0
+6,1
+35,0
+4,1
+23,0
+5,1
+36,0
+3,1
+2b,0
+2,1
+37,0
+3,1
+0
+1
+21,0
+4,1
+37,0
+3,1
+26,0
+8,1
+36,0
+3,1
+0
+1
+21,0
+8,1
+33,0
+2,1
+27,0
+5,1
+3c,0
+2,1
+26,0
+3,1
+33,0
+8,1
+21,0
+8,1
+39,0
+2,1
+21,0
+5,1
+36,0
+8,1
+21,0
+2,1
+3,0
+4,1
+31,0
+3,1
+4,0
+2,1
+23,0
+6,1
+35,0
+4,1
+24,0
+4,1
+3,0
+1
+30,0
+5,1
+2b,0
+5,1
+2f,0
+1
+4,0
+3,1
+25,0
+2,1
+36,0
+4,1
+28,0
+7,1
+2f,0
+1
+5,0
+3,1
+26,0
+9,1
+2b,0
+6,1
+2a,0
+2,1
+64,0
+8,1
+29,0
+9,1
+29,0
+7,1
+2a,0
+6,1
+34,0
+4,1
+25,0
+1
+6,0
+3,1
+2b,0
+8,1
+28,0
+8,1
+2d,0
+2,1
+5,0
+4,1
+21,0
+6,1
+34,0
+6,1
+23,0
+4,1
+3,0
+4,1
+30,0
+2,1
+4,0
+2,1
+25,0
+5,1
+34,0
+4,1
+22,0
+4,1
+6,0
+1
+55,0
+1
+0
+1
+0
+9,1
+35,0
+3,1
+23,0
+9,1
+54,0
+c,1
+50,0
+e,1
+6,0
+1
+4f,0
+2,1
+6,0
+4,1
+2,0
+6,1
+52,0
+9,1
+0
+6,1
+52,0
+4,1
+4,0
+8,1
+58,0
+4,1
+3,0
+3,1
+56,0
+5,1
+5f,0
+1
+4,0
+3,1
+674,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a83.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a83.dat
new file mode 100644
index 000000000..65cdd8728
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a83.dat
@@ -0,0 +1,457 @@
+! $XConsortium$
+100 90 32
+46b,0
+2,1
+5f,0
+3,1
+5f,0
+3,1
+60,0
+2,1
+60,0
+2,1
+61,0
+1
+61,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+2,1
+62,0
+1
+62,0
+1
+62,0
+1
+63,0
+1
+62,0
+1
+62,0
+2,1
+62,0
+1
+62,0
+2,1
+62,0
+1
+17c7,0
+100 90 32
+bc4,0
+1
+62,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+62,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+63,0
+2,1
+63,0
+1
+63,0
+2,1
+63,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+64,0
+1
+c0a,0
+100 90 32
+1781,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+a76,0
+100 90 32
+40b,0
+b,1
+57,0
+2,1
+b,0
+4,1
+64,0
+3,1
+63,0
+3,1
+63,0
+2,1
+64,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+1
+64,0
+1
+64,0
+1
+63,0
+1
+1986,0
+100 90 32
+1621,0
+1
+63,0
+1
+62,0
+1
+62,0
+1
+bdc,0
+100 90 32
+17ae,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+1
+61,0
+2,1
+60,0
+2,1
+60,0
+3,1
+5f,0
+3,1
+5d,0
+4,1
+5a,0
+6,1
+7a2,0
+100 90 32
+a06,0
+1
+63,0
+2,1
+63,0
+1
+63,0
+2,1
+63,0
+1
+178f,0
+100 90 32
+bfc,0
+1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+62,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+62,0
+1
+63,0
+1
+62,0
+2,1
+62,0
+1
+62,0
+2,1
+62,0
+1
+d69,0
+100 90 32
+2328,0
+100 90 32
+bc4,0
+1
+62,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+62,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+63,0
+2,1
+63,0
+1
+63,0
+2,1
+63,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+64,0
+1
+c0a,0
+100 90 32
+1781,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+a76,0
+100 90 32
+40b,0
+b,1
+57,0
+2,1
+b,0
+4,1
+64,0
+3,1
+63,0
+3,1
+63,0
+2,1
+64,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+1
+64,0
+1
+64,0
+1
+63,0
+1
+1986,0
+100 90 32
+1621,0
+1
+63,0
+1
+62,0
+1
+62,0
+1
+bdc,0
+100 90 32
+17ae,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+1
+61,0
+2,1
+60,0
+2,1
+60,0
+3,1
+5f,0
+3,1
+5d,0
+4,1
+5a,0
+6,1
+7a2,0
+100 90 32
+a06,0
+1
+63,0
+2,1
+63,0
+1
+63,0
+2,1
+63,0
+1
+178f,0
+100 90 32
+bfc,0
+1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+62,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+62,0
+1
+63,0
+1
+62,0
+2,1
+62,0
+1
+62,0
+2,1
+62,0
+1
+d69,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a86.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a86.dat
new file mode 100644
index 000000000..ec5198a74
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a86.dat
@@ -0,0 +1,157 @@
+! $XConsortium$
+100 90 32
+40b,0
+9,1
+57,0
+4,1
+d,0
+2,1
+4e,0
+2,1
+14,0
+3,1
+49,0
+2,1
+1a,0
+1
+46,0
+2,1
+1b,0
+2,1
+44,0
+1
+1f,0
+1
+41,0
+1
+23,0
+1
+3d,0
+1
+26,0
+1
+64,0
+2,1
+38,0
+2,1
+8e,0
+2,1
+35,0
+1
+2d,0
+1
+97,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+64,0
+1
+2e,0
+2,1
+33,0
+2,1
+2d,0
+1
+99,0
+2,1
+2b,0
+1
+9b,0
+1
+2a,0
+1
+39,0
+1
+29,0
+1
+63,0
+1
+9d,0
+1
+28,0
+1
+63,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+9f,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+9f,0
+1
+28,0
+1
+63,0
+1
+39,0
+1
+8d,0
+1
+39,0
+1
+62,0
+1
+2b,0
+1
+9a,0
+2,1
+2c,0
+1
+63,0
+2,1
+33,0
+2,1
+93,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+97,0
+1
+2d,0
+1
+62,0
+1
+37,0
+2,1
+8c,0
+2,1
+3a,0
+1
+89,0
+1
+61,0
+2,1
+60,0
+2,1
+60,0
+2,1
+60,0
+2,1
+5e,0
+4,1
+5a,0
+4,1
+7a4,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a88.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a88.dat
new file mode 100644
index 000000000..d52b5b9a8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a88.dat
@@ -0,0 +1,7823 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+40b,0
+b,1
+55,0
+4,1
+b,0
+4,1
+4e,0
+3,1
+13,0
+3,1
+49,0
+3,1
+17,0
+3,1
+46,0
+2,1
+1b,0
+2,1
+43,0
+2,1
+1f,0
+2,1
+40,0
+1
+23,0
+1
+3d,0
+2,1
+25,0
+2,1
+3a,0
+2,1
+27,0
+2,1
+38,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+35,0
+1
+2d,0
+1
+34,0
+1
+2f,0
+1
+32,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+30,0
+1
+33,0
+1
+2e,0
+2,1
+33,0
+2,1
+2d,0
+1
+35,0
+1
+2c,0
+2,1
+35,0
+2,1
+2b,0
+1
+37,0
+1
+2b,0
+1
+37,0
+1
+2a,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+28,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+28,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+2a,0
+1
+37,0
+1
+2b,0
+1
+37,0
+1
+2b,0
+2,1
+35,0
+2,1
+2c,0
+1
+35,0
+1
+2d,0
+2,1
+33,0
+2,1
+2e,0
+1
+33,0
+1
+30,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+32,0
+1
+2f,0
+1
+34,0
+1
+2d,0
+1
+35,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+38,0
+2,1
+27,0
+2,1
+3a,0
+2,1
+25,0
+2,1
+61,0
+1
+61,0
+2,1
+60,0
+2,1
+60,0
+3,1
+5f,0
+3,1
+5d,0
+4,1
+5a,0
+6,1
+7a2,0
+100 90 32
+40b,0
+b,2
+55,0
+4,2
+b,0
+4,2
+4e,0
+3,2
+13,0
+3,2
+49,0
+3,2
+17,0
+3,2
+46,0
+2,2
+1b,0
+2,2
+43,0
+2,2
+1f,0
+2,2
+40,0
+2
+23,0
+2
+3d,0
+2,2
+25,0
+2,2
+3a,0
+2,2
+27,0
+2,2
+38,0
+2,2
+29,0
+2,2
+36,0
+2,2
+2b,0
+2,2
+35,0
+2
+2d,0
+2
+34,0
+2
+2f,0
+2
+32,0
+2
+31,0
+2
+31,0
+2
+31,0
+2
+30,0
+2
+33,0
+2
+2e,0
+2,2
+33,0
+2,2
+2d,0
+2
+35,0
+2
+2c,0
+2,2
+35,0
+2,2
+2b,0
+2
+37,0
+2
+2b,0
+2
+37,0
+2
+2a,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+28,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+28,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+2a,0
+2
+37,0
+2
+2b,0
+2
+37,0
+2
+2b,0
+2,2
+35,0
+2,2
+2c,0
+2
+35,0
+2
+2d,0
+2,2
+33,0
+2,2
+2e,0
+2
+33,0
+2
+30,0
+2
+31,0
+2
+31,0
+2
+31,0
+2
+32,0
+2
+2f,0
+2
+34,0
+2
+2d,0
+2
+35,0
+2,2
+2b,0
+2,2
+36,0
+2,2
+29,0
+2,2
+38,0
+2,2
+27,0
+2,2
+3a,0
+2,2
+25,0
+2,2
+61,0
+2
+61,0
+2,2
+60,0
+2,2
+60,0
+3,2
+5f,0
+3,2
+5d,0
+4,2
+5a,0
+6,2
+7a2,0
+100 90 32
+40b,0
+b,3
+55,0
+4,3
+b,0
+4,3
+4e,0
+3,3
+13,0
+3,3
+49,0
+3,3
+17,0
+3,3
+46,0
+2,3
+1b,0
+2,3
+43,0
+2,3
+1f,0
+2,3
+40,0
+3
+23,0
+3
+3d,0
+2,3
+25,0
+2,3
+3a,0
+2,3
+27,0
+2,3
+38,0
+2,3
+29,0
+2,3
+36,0
+2,3
+2b,0
+2,3
+35,0
+3
+2d,0
+3
+34,0
+3
+2f,0
+3
+32,0
+3
+31,0
+3
+31,0
+3
+31,0
+3
+30,0
+3
+33,0
+3
+2e,0
+2,3
+33,0
+2,3
+2d,0
+3
+35,0
+3
+2c,0
+2,3
+35,0
+2,3
+2b,0
+3
+37,0
+3
+2b,0
+3
+37,0
+3
+2a,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+28,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+28,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+2a,0
+3
+37,0
+3
+2b,0
+3
+37,0
+3
+2b,0
+2,3
+35,0
+2,3
+2c,0
+3
+35,0
+3
+2d,0
+2,3
+33,0
+2,3
+2e,0
+3
+33,0
+3
+30,0
+3
+31,0
+3
+31,0
+3
+31,0
+3
+32,0
+3
+2f,0
+3
+34,0
+3
+2d,0
+3
+35,0
+2,3
+2b,0
+2,3
+36,0
+2,3
+29,0
+2,3
+38,0
+2,3
+27,0
+2,3
+3a,0
+2,3
+25,0
+2,3
+61,0
+3
+61,0
+2,3
+60,0
+2,3
+60,0
+3,3
+5f,0
+3,3
+5d,0
+4,3
+5a,0
+6,3
+7a2,0
+100 90 32
+40b,0
+b,4
+55,0
+4,4
+b,0
+4,4
+4e,0
+3,4
+13,0
+3,4
+49,0
+3,4
+17,0
+3,4
+46,0
+2,4
+1b,0
+2,4
+43,0
+2,4
+1f,0
+2,4
+40,0
+4
+23,0
+4
+3d,0
+2,4
+25,0
+2,4
+3a,0
+2,4
+27,0
+2,4
+38,0
+2,4
+29,0
+2,4
+36,0
+2,4
+2b,0
+2,4
+35,0
+4
+2d,0
+4
+34,0
+4
+2f,0
+4
+32,0
+4
+31,0
+4
+31,0
+4
+31,0
+4
+30,0
+4
+33,0
+4
+2e,0
+2,4
+33,0
+2,4
+2d,0
+4
+35,0
+4
+2c,0
+2,4
+35,0
+2,4
+2b,0
+4
+37,0
+4
+2b,0
+4
+37,0
+4
+2a,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+28,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+28,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+2a,0
+4
+37,0
+4
+2b,0
+4
+37,0
+4
+2b,0
+2,4
+35,0
+2,4
+2c,0
+4
+35,0
+4
+2d,0
+2,4
+33,0
+2,4
+2e,0
+4
+33,0
+4
+30,0
+4
+31,0
+4
+31,0
+4
+31,0
+4
+32,0
+4
+2f,0
+4
+34,0
+4
+2d,0
+4
+35,0
+2,4
+2b,0
+2,4
+36,0
+2,4
+29,0
+2,4
+38,0
+2,4
+27,0
+2,4
+3a,0
+2,4
+25,0
+2,4
+61,0
+4
+61,0
+2,4
+60,0
+2,4
+60,0
+3,4
+5f,0
+3,4
+5d,0
+4,4
+5a,0
+6,4
+7a2,0
+100 90 32
+40b,0
+b,6
+55,0
+4,6
+b,0
+4,6
+4e,0
+3,6
+13,0
+3,6
+49,0
+3,6
+17,0
+3,6
+46,0
+2,6
+1b,0
+2,6
+43,0
+2,6
+1f,0
+2,6
+40,0
+6
+23,0
+6
+3d,0
+2,6
+25,0
+2,6
+3a,0
+2,6
+27,0
+2,6
+38,0
+2,6
+29,0
+2,6
+36,0
+2,6
+2b,0
+2,6
+35,0
+6
+2d,0
+6
+34,0
+6
+2f,0
+6
+32,0
+6
+31,0
+6
+31,0
+6
+31,0
+6
+30,0
+6
+33,0
+6
+2e,0
+2,6
+33,0
+2,6
+2d,0
+6
+35,0
+6
+2c,0
+2,6
+35,0
+2,6
+2b,0
+6
+37,0
+6
+2b,0
+6
+37,0
+6
+2a,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+28,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+28,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+2a,0
+6
+37,0
+6
+2b,0
+6
+37,0
+6
+2b,0
+2,6
+35,0
+2,6
+2c,0
+6
+35,0
+6
+2d,0
+2,6
+33,0
+2,6
+2e,0
+6
+33,0
+6
+30,0
+6
+31,0
+6
+31,0
+6
+31,0
+6
+32,0
+6
+2f,0
+6
+34,0
+6
+2d,0
+6
+35,0
+2,6
+2b,0
+2,6
+36,0
+2,6
+29,0
+2,6
+38,0
+2,6
+27,0
+2,6
+3a,0
+2,6
+25,0
+2,6
+61,0
+6
+61,0
+2,6
+60,0
+2,6
+60,0
+3,6
+5f,0
+3,6
+5d,0
+4,6
+5a,0
+6,6
+7a2,0
+100 90 32
+40b,0
+b,7
+55,0
+4,7
+b,0
+4,7
+4e,0
+3,7
+13,0
+3,7
+49,0
+3,7
+17,0
+3,7
+46,0
+2,7
+1b,0
+2,7
+43,0
+2,7
+1f,0
+2,7
+40,0
+7
+23,0
+7
+3d,0
+2,7
+25,0
+2,7
+3a,0
+2,7
+27,0
+2,7
+38,0
+2,7
+29,0
+2,7
+36,0
+2,7
+2b,0
+2,7
+35,0
+7
+2d,0
+7
+34,0
+7
+2f,0
+7
+32,0
+7
+31,0
+7
+31,0
+7
+31,0
+7
+30,0
+7
+33,0
+7
+2e,0
+2,7
+33,0
+2,7
+2d,0
+7
+35,0
+7
+2c,0
+2,7
+35,0
+2,7
+2b,0
+7
+37,0
+7
+2b,0
+7
+37,0
+7
+2a,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+28,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+28,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+2a,0
+7
+37,0
+7
+2b,0
+7
+37,0
+7
+2b,0
+2,7
+35,0
+2,7
+2c,0
+7
+35,0
+7
+2d,0
+2,7
+33,0
+2,7
+2e,0
+7
+33,0
+7
+30,0
+7
+31,0
+7
+31,0
+7
+31,0
+7
+32,0
+7
+2f,0
+7
+34,0
+7
+2d,0
+7
+35,0
+2,7
+2b,0
+2,7
+36,0
+2,7
+29,0
+2,7
+38,0
+2,7
+27,0
+2,7
+3a,0
+2,7
+25,0
+2,7
+61,0
+7
+61,0
+2,7
+60,0
+2,7
+60,0
+3,7
+5f,0
+3,7
+5d,0
+4,7
+5a,0
+6,7
+7a2,0
+100 90 32
+40b,0
+b,10
+55,0
+4,10
+b,0
+4,10
+4e,0
+3,10
+13,0
+3,10
+49,0
+3,10
+17,0
+3,10
+46,0
+2,10
+1b,0
+2,10
+43,0
+2,10
+1f,0
+2,10
+40,0
+10
+23,0
+10
+3d,0
+2,10
+25,0
+2,10
+3a,0
+2,10
+27,0
+2,10
+38,0
+2,10
+29,0
+2,10
+36,0
+2,10
+2b,0
+2,10
+35,0
+10
+2d,0
+10
+34,0
+10
+2f,0
+10
+32,0
+10
+31,0
+10
+31,0
+10
+31,0
+10
+30,0
+10
+33,0
+10
+2e,0
+2,10
+33,0
+2,10
+2d,0
+10
+35,0
+10
+2c,0
+2,10
+35,0
+2,10
+2b,0
+10
+37,0
+10
+2b,0
+10
+37,0
+10
+2a,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+28,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+28,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+2a,0
+10
+37,0
+10
+2b,0
+10
+37,0
+10
+2b,0
+2,10
+35,0
+2,10
+2c,0
+10
+35,0
+10
+2d,0
+2,10
+33,0
+2,10
+2e,0
+10
+33,0
+10
+30,0
+10
+31,0
+10
+31,0
+10
+31,0
+10
+32,0
+10
+2f,0
+10
+34,0
+10
+2d,0
+10
+35,0
+2,10
+2b,0
+2,10
+36,0
+2,10
+29,0
+2,10
+38,0
+2,10
+27,0
+2,10
+3a,0
+2,10
+25,0
+2,10
+61,0
+10
+61,0
+2,10
+60,0
+2,10
+60,0
+3,10
+5f,0
+3,10
+5d,0
+4,10
+5a,0
+6,10
+7a2,0
+100 90 32
+40b,0
+b,33
+55,0
+4,33
+b,0
+4,33
+4e,0
+3,33
+13,0
+3,33
+49,0
+3,33
+17,0
+3,33
+46,0
+2,33
+1b,0
+2,33
+43,0
+2,33
+1f,0
+2,33
+40,0
+33
+23,0
+33
+3d,0
+2,33
+25,0
+2,33
+3a,0
+2,33
+27,0
+2,33
+38,0
+2,33
+29,0
+2,33
+36,0
+2,33
+2b,0
+2,33
+35,0
+33
+2d,0
+33
+34,0
+33
+2f,0
+33
+32,0
+33
+31,0
+33
+31,0
+33
+31,0
+33
+30,0
+33
+33,0
+33
+2e,0
+2,33
+33,0
+2,33
+2d,0
+33
+35,0
+33
+2c,0
+2,33
+35,0
+2,33
+2b,0
+33
+37,0
+33
+2b,0
+33
+37,0
+33
+2a,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+28,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+28,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+2a,0
+33
+37,0
+33
+2b,0
+33
+37,0
+33
+2b,0
+2,33
+35,0
+2,33
+2c,0
+33
+35,0
+33
+2d,0
+2,33
+33,0
+2,33
+2e,0
+33
+33,0
+33
+30,0
+33
+31,0
+33
+31,0
+33
+31,0
+33
+32,0
+33
+2f,0
+33
+34,0
+33
+2d,0
+33
+35,0
+2,33
+2b,0
+2,33
+36,0
+2,33
+29,0
+2,33
+38,0
+2,33
+27,0
+2,33
+3a,0
+2,33
+25,0
+2,33
+61,0
+33
+61,0
+2,33
+60,0
+2,33
+60,0
+3,33
+5f,0
+3,33
+5d,0
+4,33
+5a,0
+6,33
+7a2,0
+100 90 32
+40b,0
+b,81
+55,0
+4,81
+b,0
+4,81
+4e,0
+3,81
+13,0
+3,81
+49,0
+3,81
+17,0
+3,81
+46,0
+2,81
+1b,0
+2,81
+43,0
+2,81
+1f,0
+2,81
+40,0
+81
+23,0
+81
+3d,0
+2,81
+25,0
+2,81
+3a,0
+2,81
+27,0
+2,81
+38,0
+2,81
+29,0
+2,81
+36,0
+2,81
+2b,0
+2,81
+35,0
+81
+2d,0
+81
+34,0
+81
+2f,0
+81
+32,0
+81
+31,0
+81
+31,0
+81
+31,0
+81
+30,0
+81
+33,0
+81
+2e,0
+2,81
+33,0
+2,81
+2d,0
+81
+35,0
+81
+2c,0
+2,81
+35,0
+2,81
+2b,0
+81
+37,0
+81
+2b,0
+81
+37,0
+81
+2a,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+28,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+28,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+2a,0
+81
+37,0
+81
+2b,0
+81
+37,0
+81
+2b,0
+2,81
+35,0
+2,81
+2c,0
+81
+35,0
+81
+2d,0
+2,81
+33,0
+2,81
+2e,0
+81
+33,0
+81
+30,0
+81
+31,0
+81
+31,0
+81
+31,0
+81
+32,0
+81
+2f,0
+81
+34,0
+81
+2d,0
+81
+35,0
+2,81
+2b,0
+2,81
+36,0
+2,81
+29,0
+2,81
+38,0
+2,81
+27,0
+2,81
+3a,0
+2,81
+25,0
+2,81
+61,0
+81
+61,0
+2,81
+60,0
+2,81
+60,0
+3,81
+5f,0
+3,81
+5d,0
+4,81
+5a,0
+6,81
+7a2,0
+100 90 32
+40b,0
+b,a3
+55,0
+4,a3
+b,0
+4,a3
+4e,0
+3,a3
+13,0
+3,a3
+49,0
+3,a3
+17,0
+3,a3
+46,0
+2,a3
+1b,0
+2,a3
+43,0
+2,a3
+1f,0
+2,a3
+40,0
+a3
+23,0
+a3
+3d,0
+2,a3
+25,0
+2,a3
+3a,0
+2,a3
+27,0
+2,a3
+38,0
+2,a3
+29,0
+2,a3
+36,0
+2,a3
+2b,0
+2,a3
+35,0
+a3
+2d,0
+a3
+34,0
+a3
+2f,0
+a3
+32,0
+a3
+31,0
+a3
+31,0
+a3
+31,0
+a3
+30,0
+a3
+33,0
+a3
+2e,0
+2,a3
+33,0
+2,a3
+2d,0
+a3
+35,0
+a3
+2c,0
+2,a3
+35,0
+2,a3
+2b,0
+a3
+37,0
+a3
+2b,0
+a3
+37,0
+a3
+2a,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+28,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+28,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+2a,0
+a3
+37,0
+a3
+2b,0
+a3
+37,0
+a3
+2b,0
+2,a3
+35,0
+2,a3
+2c,0
+a3
+35,0
+a3
+2d,0
+2,a3
+33,0
+2,a3
+2e,0
+a3
+33,0
+a3
+30,0
+a3
+31,0
+a3
+31,0
+a3
+31,0
+a3
+32,0
+a3
+2f,0
+a3
+34,0
+a3
+2d,0
+a3
+35,0
+2,a3
+2b,0
+2,a3
+36,0
+2,a3
+29,0
+2,a3
+38,0
+2,a3
+27,0
+2,a3
+3a,0
+2,a3
+25,0
+2,a3
+61,0
+a3
+61,0
+2,a3
+60,0
+2,a3
+60,0
+3,a3
+5f,0
+3,a3
+5d,0
+4,a3
+5a,0
+6,a3
+7a2,0
+100 90 32
+40b,0
+b,ff
+55,0
+4,ff
+b,0
+4,ff
+4e,0
+3,ff
+13,0
+3,ff
+49,0
+3,ff
+17,0
+3,ff
+46,0
+2,ff
+1b,0
+2,ff
+43,0
+2,ff
+1f,0
+2,ff
+40,0
+ff
+23,0
+ff
+3d,0
+2,ff
+25,0
+2,ff
+3a,0
+2,ff
+27,0
+2,ff
+38,0
+2,ff
+29,0
+2,ff
+36,0
+2,ff
+2b,0
+2,ff
+35,0
+ff
+2d,0
+ff
+34,0
+ff
+2f,0
+ff
+32,0
+ff
+31,0
+ff
+31,0
+ff
+31,0
+ff
+30,0
+ff
+33,0
+ff
+2e,0
+2,ff
+33,0
+2,ff
+2d,0
+ff
+35,0
+ff
+2c,0
+2,ff
+35,0
+2,ff
+2b,0
+ff
+37,0
+ff
+2b,0
+ff
+37,0
+ff
+2a,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+28,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+28,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+2a,0
+ff
+37,0
+ff
+2b,0
+ff
+37,0
+ff
+2b,0
+2,ff
+35,0
+2,ff
+2c,0
+ff
+35,0
+ff
+2d,0
+2,ff
+33,0
+2,ff
+2e,0
+ff
+33,0
+ff
+30,0
+ff
+31,0
+ff
+31,0
+ff
+31,0
+ff
+32,0
+ff
+2f,0
+ff
+34,0
+ff
+2d,0
+ff
+35,0
+2,ff
+2b,0
+2,ff
+36,0
+2,ff
+29,0
+2,ff
+38,0
+2,ff
+27,0
+2,ff
+3a,0
+2,ff
+25,0
+2,ff
+61,0
+ff
+61,0
+2,ff
+60,0
+2,ff
+60,0
+3,ff
+5f,0
+3,ff
+5d,0
+4,ff
+5a,0
+6,ff
+7a2,0
+100 90 32
+40b,0
+b,100
+55,0
+4,100
+b,0
+4,100
+4e,0
+3,100
+13,0
+3,100
+49,0
+3,100
+17,0
+3,100
+46,0
+2,100
+1b,0
+2,100
+43,0
+2,100
+1f,0
+2,100
+40,0
+100
+23,0
+100
+3d,0
+2,100
+25,0
+2,100
+3a,0
+2,100
+27,0
+2,100
+38,0
+2,100
+29,0
+2,100
+36,0
+2,100
+2b,0
+2,100
+35,0
+100
+2d,0
+100
+34,0
+100
+2f,0
+100
+32,0
+100
+31,0
+100
+31,0
+100
+31,0
+100
+30,0
+100
+33,0
+100
+2e,0
+2,100
+33,0
+2,100
+2d,0
+100
+35,0
+100
+2c,0
+2,100
+35,0
+2,100
+2b,0
+100
+37,0
+100
+2b,0
+100
+37,0
+100
+2a,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+28,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+28,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+2a,0
+100
+37,0
+100
+2b,0
+100
+37,0
+100
+2b,0
+2,100
+35,0
+2,100
+2c,0
+100
+35,0
+100
+2d,0
+2,100
+33,0
+2,100
+2e,0
+100
+33,0
+100
+30,0
+100
+31,0
+100
+31,0
+100
+31,0
+100
+32,0
+100
+2f,0
+100
+34,0
+100
+2d,0
+100
+35,0
+2,100
+2b,0
+2,100
+36,0
+2,100
+29,0
+2,100
+38,0
+2,100
+27,0
+2,100
+3a,0
+2,100
+25,0
+2,100
+61,0
+100
+61,0
+2,100
+60,0
+2,100
+60,0
+3,100
+5f,0
+3,100
+5d,0
+4,100
+5a,0
+6,100
+7a2,0
+100 90 32
+40b,0
+b,12c
+55,0
+4,12c
+b,0
+4,12c
+4e,0
+3,12c
+13,0
+3,12c
+49,0
+3,12c
+17,0
+3,12c
+46,0
+2,12c
+1b,0
+2,12c
+43,0
+2,12c
+1f,0
+2,12c
+40,0
+12c
+23,0
+12c
+3d,0
+2,12c
+25,0
+2,12c
+3a,0
+2,12c
+27,0
+2,12c
+38,0
+2,12c
+29,0
+2,12c
+36,0
+2,12c
+2b,0
+2,12c
+35,0
+12c
+2d,0
+12c
+34,0
+12c
+2f,0
+12c
+32,0
+12c
+31,0
+12c
+31,0
+12c
+31,0
+12c
+30,0
+12c
+33,0
+12c
+2e,0
+2,12c
+33,0
+2,12c
+2d,0
+12c
+35,0
+12c
+2c,0
+2,12c
+35,0
+2,12c
+2b,0
+12c
+37,0
+12c
+2b,0
+12c
+37,0
+12c
+2a,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+28,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+28,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+2a,0
+12c
+37,0
+12c
+2b,0
+12c
+37,0
+12c
+2b,0
+2,12c
+35,0
+2,12c
+2c,0
+12c
+35,0
+12c
+2d,0
+2,12c
+33,0
+2,12c
+2e,0
+12c
+33,0
+12c
+30,0
+12c
+31,0
+12c
+31,0
+12c
+31,0
+12c
+32,0
+12c
+2f,0
+12c
+34,0
+12c
+2d,0
+12c
+35,0
+2,12c
+2b,0
+2,12c
+36,0
+2,12c
+29,0
+2,12c
+38,0
+2,12c
+27,0
+2,12c
+3a,0
+2,12c
+25,0
+2,12c
+61,0
+12c
+61,0
+2,12c
+60,0
+2,12c
+60,0
+3,12c
+5f,0
+3,12c
+5d,0
+4,12c
+5a,0
+6,12c
+7a2,0
+100 90 32
+40b,0
+b,3e8
+55,0
+4,3e8
+b,0
+4,3e8
+4e,0
+3,3e8
+13,0
+3,3e8
+49,0
+3,3e8
+17,0
+3,3e8
+46,0
+2,3e8
+1b,0
+2,3e8
+43,0
+2,3e8
+1f,0
+2,3e8
+40,0
+3e8
+23,0
+3e8
+3d,0
+2,3e8
+25,0
+2,3e8
+3a,0
+2,3e8
+27,0
+2,3e8
+38,0
+2,3e8
+29,0
+2,3e8
+36,0
+2,3e8
+2b,0
+2,3e8
+35,0
+3e8
+2d,0
+3e8
+34,0
+3e8
+2f,0
+3e8
+32,0
+3e8
+31,0
+3e8
+31,0
+3e8
+31,0
+3e8
+30,0
+3e8
+33,0
+3e8
+2e,0
+2,3e8
+33,0
+2,3e8
+2d,0
+3e8
+35,0
+3e8
+2c,0
+2,3e8
+35,0
+2,3e8
+2b,0
+3e8
+37,0
+3e8
+2b,0
+3e8
+37,0
+3e8
+2a,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+28,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+28,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+2a,0
+3e8
+37,0
+3e8
+2b,0
+3e8
+37,0
+3e8
+2b,0
+2,3e8
+35,0
+2,3e8
+2c,0
+3e8
+35,0
+3e8
+2d,0
+2,3e8
+33,0
+2,3e8
+2e,0
+3e8
+33,0
+3e8
+30,0
+3e8
+31,0
+3e8
+31,0
+3e8
+31,0
+3e8
+32,0
+3e8
+2f,0
+3e8
+34,0
+3e8
+2d,0
+3e8
+35,0
+2,3e8
+2b,0
+2,3e8
+36,0
+2,3e8
+29,0
+2,3e8
+38,0
+2,3e8
+27,0
+2,3e8
+3a,0
+2,3e8
+25,0
+2,3e8
+61,0
+3e8
+61,0
+2,3e8
+60,0
+2,3e8
+60,0
+3,3e8
+5f,0
+3,3e8
+5d,0
+4,3e8
+5a,0
+6,3e8
+7a2,0
+100 90 32
+40b,0
+b,111111
+55,0
+4,111111
+b,0
+4,111111
+4e,0
+3,111111
+13,0
+3,111111
+49,0
+3,111111
+17,0
+3,111111
+46,0
+2,111111
+1b,0
+2,111111
+43,0
+2,111111
+1f,0
+2,111111
+40,0
+111111
+23,0
+111111
+3d,0
+2,111111
+25,0
+2,111111
+3a,0
+2,111111
+27,0
+2,111111
+38,0
+2,111111
+29,0
+2,111111
+36,0
+2,111111
+2b,0
+2,111111
+35,0
+111111
+2d,0
+111111
+34,0
+111111
+2f,0
+111111
+32,0
+111111
+31,0
+111111
+31,0
+111111
+31,0
+111111
+30,0
+111111
+33,0
+111111
+2e,0
+2,111111
+33,0
+2,111111
+2d,0
+111111
+35,0
+111111
+2c,0
+2,111111
+35,0
+2,111111
+2b,0
+111111
+37,0
+111111
+2b,0
+111111
+37,0
+111111
+2a,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+28,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+28,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+2a,0
+111111
+37,0
+111111
+2b,0
+111111
+37,0
+111111
+2b,0
+2,111111
+35,0
+2,111111
+2c,0
+111111
+35,0
+111111
+2d,0
+2,111111
+33,0
+2,111111
+2e,0
+111111
+33,0
+111111
+30,0
+111111
+31,0
+111111
+31,0
+111111
+31,0
+111111
+32,0
+111111
+2f,0
+111111
+34,0
+111111
+2d,0
+111111
+35,0
+2,111111
+2b,0
+2,111111
+36,0
+2,111111
+29,0
+2,111111
+38,0
+2,111111
+27,0
+2,111111
+3a,0
+2,111111
+25,0
+2,111111
+61,0
+111111
+61,0
+2,111111
+60,0
+2,111111
+60,0
+3,111111
+5f,0
+3,111111
+5d,0
+4,111111
+5a,0
+6,111111
+7a2,0
+100 90 32
+40b,0
+b,400200
+55,0
+4,400200
+b,0
+4,400200
+4e,0
+3,400200
+13,0
+3,400200
+49,0
+3,400200
+17,0
+3,400200
+46,0
+2,400200
+1b,0
+2,400200
+43,0
+2,400200
+1f,0
+2,400200
+40,0
+400200
+23,0
+400200
+3d,0
+2,400200
+25,0
+2,400200
+3a,0
+2,400200
+27,0
+2,400200
+38,0
+2,400200
+29,0
+2,400200
+36,0
+2,400200
+2b,0
+2,400200
+35,0
+400200
+2d,0
+400200
+34,0
+400200
+2f,0
+400200
+32,0
+400200
+31,0
+400200
+31,0
+400200
+31,0
+400200
+30,0
+400200
+33,0
+400200
+2e,0
+2,400200
+33,0
+2,400200
+2d,0
+400200
+35,0
+400200
+2c,0
+2,400200
+35,0
+2,400200
+2b,0
+400200
+37,0
+400200
+2b,0
+400200
+37,0
+400200
+2a,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+28,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+28,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+2a,0
+400200
+37,0
+400200
+2b,0
+400200
+37,0
+400200
+2b,0
+2,400200
+35,0
+2,400200
+2c,0
+400200
+35,0
+400200
+2d,0
+2,400200
+33,0
+2,400200
+2e,0
+400200
+33,0
+400200
+30,0
+400200
+31,0
+400200
+31,0
+400200
+31,0
+400200
+32,0
+400200
+2f,0
+400200
+34,0
+400200
+2d,0
+400200
+35,0
+2,400200
+2b,0
+2,400200
+36,0
+2,400200
+29,0
+2,400200
+38,0
+2,400200
+27,0
+2,400200
+3a,0
+2,400200
+25,0
+2,400200
+61,0
+400200
+61,0
+2,400200
+60,0
+2,400200
+60,0
+3,400200
+5f,0
+3,400200
+5d,0
+4,400200
+5a,0
+6,400200
+7a2,0
+100 90 32
+40b,0
+b,777777
+55,0
+4,777777
+b,0
+4,777777
+4e,0
+3,777777
+13,0
+3,777777
+49,0
+3,777777
+17,0
+3,777777
+46,0
+2,777777
+1b,0
+2,777777
+43,0
+2,777777
+1f,0
+2,777777
+40,0
+777777
+23,0
+777777
+3d,0
+2,777777
+25,0
+2,777777
+3a,0
+2,777777
+27,0
+2,777777
+38,0
+2,777777
+29,0
+2,777777
+36,0
+2,777777
+2b,0
+2,777777
+35,0
+777777
+2d,0
+777777
+34,0
+777777
+2f,0
+777777
+32,0
+777777
+31,0
+777777
+31,0
+777777
+31,0
+777777
+30,0
+777777
+33,0
+777777
+2e,0
+2,777777
+33,0
+2,777777
+2d,0
+777777
+35,0
+777777
+2c,0
+2,777777
+35,0
+2,777777
+2b,0
+777777
+37,0
+777777
+2b,0
+777777
+37,0
+777777
+2a,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+28,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+28,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+2a,0
+777777
+37,0
+777777
+2b,0
+777777
+37,0
+777777
+2b,0
+2,777777
+35,0
+2,777777
+2c,0
+777777
+35,0
+777777
+2d,0
+2,777777
+33,0
+2,777777
+2e,0
+777777
+33,0
+777777
+30,0
+777777
+31,0
+777777
+31,0
+777777
+31,0
+777777
+32,0
+777777
+2f,0
+777777
+34,0
+777777
+2d,0
+777777
+35,0
+2,777777
+2b,0
+2,777777
+36,0
+2,777777
+29,0
+2,777777
+38,0
+2,777777
+27,0
+2,777777
+3a,0
+2,777777
+25,0
+2,777777
+61,0
+777777
+61,0
+2,777777
+60,0
+2,777777
+60,0
+3,777777
+5f,0
+3,777777
+5d,0
+4,777777
+5a,0
+6,777777
+7a2,0
+100 90 32
+40b,0
+b,1
+55,0
+4,1
+b,0
+4,1
+4e,0
+3,1
+13,0
+3,1
+49,0
+3,1
+17,0
+3,1
+46,0
+2,1
+1b,0
+2,1
+43,0
+2,1
+1f,0
+2,1
+40,0
+1
+23,0
+1
+3d,0
+2,1
+25,0
+2,1
+3a,0
+2,1
+27,0
+2,1
+38,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+35,0
+1
+2d,0
+1
+34,0
+1
+2f,0
+1
+32,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+30,0
+1
+33,0
+1
+2e,0
+2,1
+33,0
+2,1
+2d,0
+1
+35,0
+1
+2c,0
+2,1
+35,0
+2,1
+2b,0
+1
+37,0
+1
+2b,0
+1
+37,0
+1
+2a,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+28,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+28,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+2a,0
+1
+37,0
+1
+2b,0
+1
+37,0
+1
+2b,0
+2,1
+35,0
+2,1
+2c,0
+1
+35,0
+1
+2d,0
+2,1
+33,0
+2,1
+2e,0
+1
+33,0
+1
+30,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+32,0
+1
+2f,0
+1
+34,0
+1
+2d,0
+1
+35,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+38,0
+2,1
+27,0
+2,1
+3a,0
+2,1
+25,0
+2,1
+61,0
+1
+61,0
+2,1
+60,0
+2,1
+60,0
+3,1
+5f,0
+3,1
+5d,0
+4,1
+5a,0
+6,1
+7a2,0
+100 90 32
+40b,0
+b,2
+55,0
+4,2
+b,0
+4,2
+4e,0
+3,2
+13,0
+3,2
+49,0
+3,2
+17,0
+3,2
+46,0
+2,2
+1b,0
+2,2
+43,0
+2,2
+1f,0
+2,2
+40,0
+2
+23,0
+2
+3d,0
+2,2
+25,0
+2,2
+3a,0
+2,2
+27,0
+2,2
+38,0
+2,2
+29,0
+2,2
+36,0
+2,2
+2b,0
+2,2
+35,0
+2
+2d,0
+2
+34,0
+2
+2f,0
+2
+32,0
+2
+31,0
+2
+31,0
+2
+31,0
+2
+30,0
+2
+33,0
+2
+2e,0
+2,2
+33,0
+2,2
+2d,0
+2
+35,0
+2
+2c,0
+2,2
+35,0
+2,2
+2b,0
+2
+37,0
+2
+2b,0
+2
+37,0
+2
+2a,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+28,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+28,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+2a,0
+2
+37,0
+2
+2b,0
+2
+37,0
+2
+2b,0
+2,2
+35,0
+2,2
+2c,0
+2
+35,0
+2
+2d,0
+2,2
+33,0
+2,2
+2e,0
+2
+33,0
+2
+30,0
+2
+31,0
+2
+31,0
+2
+31,0
+2
+32,0
+2
+2f,0
+2
+34,0
+2
+2d,0
+2
+35,0
+2,2
+2b,0
+2,2
+36,0
+2,2
+29,0
+2,2
+38,0
+2,2
+27,0
+2,2
+3a,0
+2,2
+25,0
+2,2
+61,0
+2
+61,0
+2,2
+60,0
+2,2
+60,0
+3,2
+5f,0
+3,2
+5d,0
+4,2
+5a,0
+6,2
+7a2,0
+100 90 32
+40b,0
+b,3
+55,0
+4,3
+b,0
+4,3
+4e,0
+3,3
+13,0
+3,3
+49,0
+3,3
+17,0
+3,3
+46,0
+2,3
+1b,0
+2,3
+43,0
+2,3
+1f,0
+2,3
+40,0
+3
+23,0
+3
+3d,0
+2,3
+25,0
+2,3
+3a,0
+2,3
+27,0
+2,3
+38,0
+2,3
+29,0
+2,3
+36,0
+2,3
+2b,0
+2,3
+35,0
+3
+2d,0
+3
+34,0
+3
+2f,0
+3
+32,0
+3
+31,0
+3
+31,0
+3
+31,0
+3
+30,0
+3
+33,0
+3
+2e,0
+2,3
+33,0
+2,3
+2d,0
+3
+35,0
+3
+2c,0
+2,3
+35,0
+2,3
+2b,0
+3
+37,0
+3
+2b,0
+3
+37,0
+3
+2a,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+28,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+28,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+2a,0
+3
+37,0
+3
+2b,0
+3
+37,0
+3
+2b,0
+2,3
+35,0
+2,3
+2c,0
+3
+35,0
+3
+2d,0
+2,3
+33,0
+2,3
+2e,0
+3
+33,0
+3
+30,0
+3
+31,0
+3
+31,0
+3
+31,0
+3
+32,0
+3
+2f,0
+3
+34,0
+3
+2d,0
+3
+35,0
+2,3
+2b,0
+2,3
+36,0
+2,3
+29,0
+2,3
+38,0
+2,3
+27,0
+2,3
+3a,0
+2,3
+25,0
+2,3
+61,0
+3
+61,0
+2,3
+60,0
+2,3
+60,0
+3,3
+5f,0
+3,3
+5d,0
+4,3
+5a,0
+6,3
+7a2,0
+100 90 32
+40b,0
+b,4
+55,0
+4,4
+b,0
+4,4
+4e,0
+3,4
+13,0
+3,4
+49,0
+3,4
+17,0
+3,4
+46,0
+2,4
+1b,0
+2,4
+43,0
+2,4
+1f,0
+2,4
+40,0
+4
+23,0
+4
+3d,0
+2,4
+25,0
+2,4
+3a,0
+2,4
+27,0
+2,4
+38,0
+2,4
+29,0
+2,4
+36,0
+2,4
+2b,0
+2,4
+35,0
+4
+2d,0
+4
+34,0
+4
+2f,0
+4
+32,0
+4
+31,0
+4
+31,0
+4
+31,0
+4
+30,0
+4
+33,0
+4
+2e,0
+2,4
+33,0
+2,4
+2d,0
+4
+35,0
+4
+2c,0
+2,4
+35,0
+2,4
+2b,0
+4
+37,0
+4
+2b,0
+4
+37,0
+4
+2a,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+28,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+28,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+2a,0
+4
+37,0
+4
+2b,0
+4
+37,0
+4
+2b,0
+2,4
+35,0
+2,4
+2c,0
+4
+35,0
+4
+2d,0
+2,4
+33,0
+2,4
+2e,0
+4
+33,0
+4
+30,0
+4
+31,0
+4
+31,0
+4
+31,0
+4
+32,0
+4
+2f,0
+4
+34,0
+4
+2d,0
+4
+35,0
+2,4
+2b,0
+2,4
+36,0
+2,4
+29,0
+2,4
+38,0
+2,4
+27,0
+2,4
+3a,0
+2,4
+25,0
+2,4
+61,0
+4
+61,0
+2,4
+60,0
+2,4
+60,0
+3,4
+5f,0
+3,4
+5d,0
+4,4
+5a,0
+6,4
+7a2,0
+100 90 32
+40b,0
+b,6
+55,0
+4,6
+b,0
+4,6
+4e,0
+3,6
+13,0
+3,6
+49,0
+3,6
+17,0
+3,6
+46,0
+2,6
+1b,0
+2,6
+43,0
+2,6
+1f,0
+2,6
+40,0
+6
+23,0
+6
+3d,0
+2,6
+25,0
+2,6
+3a,0
+2,6
+27,0
+2,6
+38,0
+2,6
+29,0
+2,6
+36,0
+2,6
+2b,0
+2,6
+35,0
+6
+2d,0
+6
+34,0
+6
+2f,0
+6
+32,0
+6
+31,0
+6
+31,0
+6
+31,0
+6
+30,0
+6
+33,0
+6
+2e,0
+2,6
+33,0
+2,6
+2d,0
+6
+35,0
+6
+2c,0
+2,6
+35,0
+2,6
+2b,0
+6
+37,0
+6
+2b,0
+6
+37,0
+6
+2a,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+28,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+28,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+2a,0
+6
+37,0
+6
+2b,0
+6
+37,0
+6
+2b,0
+2,6
+35,0
+2,6
+2c,0
+6
+35,0
+6
+2d,0
+2,6
+33,0
+2,6
+2e,0
+6
+33,0
+6
+30,0
+6
+31,0
+6
+31,0
+6
+31,0
+6
+32,0
+6
+2f,0
+6
+34,0
+6
+2d,0
+6
+35,0
+2,6
+2b,0
+2,6
+36,0
+2,6
+29,0
+2,6
+38,0
+2,6
+27,0
+2,6
+3a,0
+2,6
+25,0
+2,6
+61,0
+6
+61,0
+2,6
+60,0
+2,6
+60,0
+3,6
+5f,0
+3,6
+5d,0
+4,6
+5a,0
+6,6
+7a2,0
+100 90 32
+40b,0
+b,7
+55,0
+4,7
+b,0
+4,7
+4e,0
+3,7
+13,0
+3,7
+49,0
+3,7
+17,0
+3,7
+46,0
+2,7
+1b,0
+2,7
+43,0
+2,7
+1f,0
+2,7
+40,0
+7
+23,0
+7
+3d,0
+2,7
+25,0
+2,7
+3a,0
+2,7
+27,0
+2,7
+38,0
+2,7
+29,0
+2,7
+36,0
+2,7
+2b,0
+2,7
+35,0
+7
+2d,0
+7
+34,0
+7
+2f,0
+7
+32,0
+7
+31,0
+7
+31,0
+7
+31,0
+7
+30,0
+7
+33,0
+7
+2e,0
+2,7
+33,0
+2,7
+2d,0
+7
+35,0
+7
+2c,0
+2,7
+35,0
+2,7
+2b,0
+7
+37,0
+7
+2b,0
+7
+37,0
+7
+2a,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+28,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+28,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+2a,0
+7
+37,0
+7
+2b,0
+7
+37,0
+7
+2b,0
+2,7
+35,0
+2,7
+2c,0
+7
+35,0
+7
+2d,0
+2,7
+33,0
+2,7
+2e,0
+7
+33,0
+7
+30,0
+7
+31,0
+7
+31,0
+7
+31,0
+7
+32,0
+7
+2f,0
+7
+34,0
+7
+2d,0
+7
+35,0
+2,7
+2b,0
+2,7
+36,0
+2,7
+29,0
+2,7
+38,0
+2,7
+27,0
+2,7
+3a,0
+2,7
+25,0
+2,7
+61,0
+7
+61,0
+2,7
+60,0
+2,7
+60,0
+3,7
+5f,0
+3,7
+5d,0
+4,7
+5a,0
+6,7
+7a2,0
+100 90 32
+40b,0
+b,10
+55,0
+4,10
+b,0
+4,10
+4e,0
+3,10
+13,0
+3,10
+49,0
+3,10
+17,0
+3,10
+46,0
+2,10
+1b,0
+2,10
+43,0
+2,10
+1f,0
+2,10
+40,0
+10
+23,0
+10
+3d,0
+2,10
+25,0
+2,10
+3a,0
+2,10
+27,0
+2,10
+38,0
+2,10
+29,0
+2,10
+36,0
+2,10
+2b,0
+2,10
+35,0
+10
+2d,0
+10
+34,0
+10
+2f,0
+10
+32,0
+10
+31,0
+10
+31,0
+10
+31,0
+10
+30,0
+10
+33,0
+10
+2e,0
+2,10
+33,0
+2,10
+2d,0
+10
+35,0
+10
+2c,0
+2,10
+35,0
+2,10
+2b,0
+10
+37,0
+10
+2b,0
+10
+37,0
+10
+2a,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+28,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+28,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+2a,0
+10
+37,0
+10
+2b,0
+10
+37,0
+10
+2b,0
+2,10
+35,0
+2,10
+2c,0
+10
+35,0
+10
+2d,0
+2,10
+33,0
+2,10
+2e,0
+10
+33,0
+10
+30,0
+10
+31,0
+10
+31,0
+10
+31,0
+10
+32,0
+10
+2f,0
+10
+34,0
+10
+2d,0
+10
+35,0
+2,10
+2b,0
+2,10
+36,0
+2,10
+29,0
+2,10
+38,0
+2,10
+27,0
+2,10
+3a,0
+2,10
+25,0
+2,10
+61,0
+10
+61,0
+2,10
+60,0
+2,10
+60,0
+3,10
+5f,0
+3,10
+5d,0
+4,10
+5a,0
+6,10
+7a2,0
+100 90 32
+40b,0
+b,33
+55,0
+4,33
+b,0
+4,33
+4e,0
+3,33
+13,0
+3,33
+49,0
+3,33
+17,0
+3,33
+46,0
+2,33
+1b,0
+2,33
+43,0
+2,33
+1f,0
+2,33
+40,0
+33
+23,0
+33
+3d,0
+2,33
+25,0
+2,33
+3a,0
+2,33
+27,0
+2,33
+38,0
+2,33
+29,0
+2,33
+36,0
+2,33
+2b,0
+2,33
+35,0
+33
+2d,0
+33
+34,0
+33
+2f,0
+33
+32,0
+33
+31,0
+33
+31,0
+33
+31,0
+33
+30,0
+33
+33,0
+33
+2e,0
+2,33
+33,0
+2,33
+2d,0
+33
+35,0
+33
+2c,0
+2,33
+35,0
+2,33
+2b,0
+33
+37,0
+33
+2b,0
+33
+37,0
+33
+2a,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+28,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+28,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+2a,0
+33
+37,0
+33
+2b,0
+33
+37,0
+33
+2b,0
+2,33
+35,0
+2,33
+2c,0
+33
+35,0
+33
+2d,0
+2,33
+33,0
+2,33
+2e,0
+33
+33,0
+33
+30,0
+33
+31,0
+33
+31,0
+33
+31,0
+33
+32,0
+33
+2f,0
+33
+34,0
+33
+2d,0
+33
+35,0
+2,33
+2b,0
+2,33
+36,0
+2,33
+29,0
+2,33
+38,0
+2,33
+27,0
+2,33
+3a,0
+2,33
+25,0
+2,33
+61,0
+33
+61,0
+2,33
+60,0
+2,33
+60,0
+3,33
+5f,0
+3,33
+5d,0
+4,33
+5a,0
+6,33
+7a2,0
+100 90 32
+40b,0
+b,81
+55,0
+4,81
+b,0
+4,81
+4e,0
+3,81
+13,0
+3,81
+49,0
+3,81
+17,0
+3,81
+46,0
+2,81
+1b,0
+2,81
+43,0
+2,81
+1f,0
+2,81
+40,0
+81
+23,0
+81
+3d,0
+2,81
+25,0
+2,81
+3a,0
+2,81
+27,0
+2,81
+38,0
+2,81
+29,0
+2,81
+36,0
+2,81
+2b,0
+2,81
+35,0
+81
+2d,0
+81
+34,0
+81
+2f,0
+81
+32,0
+81
+31,0
+81
+31,0
+81
+31,0
+81
+30,0
+81
+33,0
+81
+2e,0
+2,81
+33,0
+2,81
+2d,0
+81
+35,0
+81
+2c,0
+2,81
+35,0
+2,81
+2b,0
+81
+37,0
+81
+2b,0
+81
+37,0
+81
+2a,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+28,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+28,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+2a,0
+81
+37,0
+81
+2b,0
+81
+37,0
+81
+2b,0
+2,81
+35,0
+2,81
+2c,0
+81
+35,0
+81
+2d,0
+2,81
+33,0
+2,81
+2e,0
+81
+33,0
+81
+30,0
+81
+31,0
+81
+31,0
+81
+31,0
+81
+32,0
+81
+2f,0
+81
+34,0
+81
+2d,0
+81
+35,0
+2,81
+2b,0
+2,81
+36,0
+2,81
+29,0
+2,81
+38,0
+2,81
+27,0
+2,81
+3a,0
+2,81
+25,0
+2,81
+61,0
+81
+61,0
+2,81
+60,0
+2,81
+60,0
+3,81
+5f,0
+3,81
+5d,0
+4,81
+5a,0
+6,81
+7a2,0
+100 90 32
+40b,0
+b,a3
+55,0
+4,a3
+b,0
+4,a3
+4e,0
+3,a3
+13,0
+3,a3
+49,0
+3,a3
+17,0
+3,a3
+46,0
+2,a3
+1b,0
+2,a3
+43,0
+2,a3
+1f,0
+2,a3
+40,0
+a3
+23,0
+a3
+3d,0
+2,a3
+25,0
+2,a3
+3a,0
+2,a3
+27,0
+2,a3
+38,0
+2,a3
+29,0
+2,a3
+36,0
+2,a3
+2b,0
+2,a3
+35,0
+a3
+2d,0
+a3
+34,0
+a3
+2f,0
+a3
+32,0
+a3
+31,0
+a3
+31,0
+a3
+31,0
+a3
+30,0
+a3
+33,0
+a3
+2e,0
+2,a3
+33,0
+2,a3
+2d,0
+a3
+35,0
+a3
+2c,0
+2,a3
+35,0
+2,a3
+2b,0
+a3
+37,0
+a3
+2b,0
+a3
+37,0
+a3
+2a,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+28,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+28,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+2a,0
+a3
+37,0
+a3
+2b,0
+a3
+37,0
+a3
+2b,0
+2,a3
+35,0
+2,a3
+2c,0
+a3
+35,0
+a3
+2d,0
+2,a3
+33,0
+2,a3
+2e,0
+a3
+33,0
+a3
+30,0
+a3
+31,0
+a3
+31,0
+a3
+31,0
+a3
+32,0
+a3
+2f,0
+a3
+34,0
+a3
+2d,0
+a3
+35,0
+2,a3
+2b,0
+2,a3
+36,0
+2,a3
+29,0
+2,a3
+38,0
+2,a3
+27,0
+2,a3
+3a,0
+2,a3
+25,0
+2,a3
+61,0
+a3
+61,0
+2,a3
+60,0
+2,a3
+60,0
+3,a3
+5f,0
+3,a3
+5d,0
+4,a3
+5a,0
+6,a3
+7a2,0
+100 90 32
+40b,0
+b,ff
+55,0
+4,ff
+b,0
+4,ff
+4e,0
+3,ff
+13,0
+3,ff
+49,0
+3,ff
+17,0
+3,ff
+46,0
+2,ff
+1b,0
+2,ff
+43,0
+2,ff
+1f,0
+2,ff
+40,0
+ff
+23,0
+ff
+3d,0
+2,ff
+25,0
+2,ff
+3a,0
+2,ff
+27,0
+2,ff
+38,0
+2,ff
+29,0
+2,ff
+36,0
+2,ff
+2b,0
+2,ff
+35,0
+ff
+2d,0
+ff
+34,0
+ff
+2f,0
+ff
+32,0
+ff
+31,0
+ff
+31,0
+ff
+31,0
+ff
+30,0
+ff
+33,0
+ff
+2e,0
+2,ff
+33,0
+2,ff
+2d,0
+ff
+35,0
+ff
+2c,0
+2,ff
+35,0
+2,ff
+2b,0
+ff
+37,0
+ff
+2b,0
+ff
+37,0
+ff
+2a,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+28,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+28,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+2a,0
+ff
+37,0
+ff
+2b,0
+ff
+37,0
+ff
+2b,0
+2,ff
+35,0
+2,ff
+2c,0
+ff
+35,0
+ff
+2d,0
+2,ff
+33,0
+2,ff
+2e,0
+ff
+33,0
+ff
+30,0
+ff
+31,0
+ff
+31,0
+ff
+31,0
+ff
+32,0
+ff
+2f,0
+ff
+34,0
+ff
+2d,0
+ff
+35,0
+2,ff
+2b,0
+2,ff
+36,0
+2,ff
+29,0
+2,ff
+38,0
+2,ff
+27,0
+2,ff
+3a,0
+2,ff
+25,0
+2,ff
+61,0
+ff
+61,0
+2,ff
+60,0
+2,ff
+60,0
+3,ff
+5f,0
+3,ff
+5d,0
+4,ff
+5a,0
+6,ff
+7a2,0
+100 90 32
+40b,0
+b,100
+55,0
+4,100
+b,0
+4,100
+4e,0
+3,100
+13,0
+3,100
+49,0
+3,100
+17,0
+3,100
+46,0
+2,100
+1b,0
+2,100
+43,0
+2,100
+1f,0
+2,100
+40,0
+100
+23,0
+100
+3d,0
+2,100
+25,0
+2,100
+3a,0
+2,100
+27,0
+2,100
+38,0
+2,100
+29,0
+2,100
+36,0
+2,100
+2b,0
+2,100
+35,0
+100
+2d,0
+100
+34,0
+100
+2f,0
+100
+32,0
+100
+31,0
+100
+31,0
+100
+31,0
+100
+30,0
+100
+33,0
+100
+2e,0
+2,100
+33,0
+2,100
+2d,0
+100
+35,0
+100
+2c,0
+2,100
+35,0
+2,100
+2b,0
+100
+37,0
+100
+2b,0
+100
+37,0
+100
+2a,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+28,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+28,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+2a,0
+100
+37,0
+100
+2b,0
+100
+37,0
+100
+2b,0
+2,100
+35,0
+2,100
+2c,0
+100
+35,0
+100
+2d,0
+2,100
+33,0
+2,100
+2e,0
+100
+33,0
+100
+30,0
+100
+31,0
+100
+31,0
+100
+31,0
+100
+32,0
+100
+2f,0
+100
+34,0
+100
+2d,0
+100
+35,0
+2,100
+2b,0
+2,100
+36,0
+2,100
+29,0
+2,100
+38,0
+2,100
+27,0
+2,100
+3a,0
+2,100
+25,0
+2,100
+61,0
+100
+61,0
+2,100
+60,0
+2,100
+60,0
+3,100
+5f,0
+3,100
+5d,0
+4,100
+5a,0
+6,100
+7a2,0
+100 90 32
+40b,0
+b,12c
+55,0
+4,12c
+b,0
+4,12c
+4e,0
+3,12c
+13,0
+3,12c
+49,0
+3,12c
+17,0
+3,12c
+46,0
+2,12c
+1b,0
+2,12c
+43,0
+2,12c
+1f,0
+2,12c
+40,0
+12c
+23,0
+12c
+3d,0
+2,12c
+25,0
+2,12c
+3a,0
+2,12c
+27,0
+2,12c
+38,0
+2,12c
+29,0
+2,12c
+36,0
+2,12c
+2b,0
+2,12c
+35,0
+12c
+2d,0
+12c
+34,0
+12c
+2f,0
+12c
+32,0
+12c
+31,0
+12c
+31,0
+12c
+31,0
+12c
+30,0
+12c
+33,0
+12c
+2e,0
+2,12c
+33,0
+2,12c
+2d,0
+12c
+35,0
+12c
+2c,0
+2,12c
+35,0
+2,12c
+2b,0
+12c
+37,0
+12c
+2b,0
+12c
+37,0
+12c
+2a,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+28,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+28,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+2a,0
+12c
+37,0
+12c
+2b,0
+12c
+37,0
+12c
+2b,0
+2,12c
+35,0
+2,12c
+2c,0
+12c
+35,0
+12c
+2d,0
+2,12c
+33,0
+2,12c
+2e,0
+12c
+33,0
+12c
+30,0
+12c
+31,0
+12c
+31,0
+12c
+31,0
+12c
+32,0
+12c
+2f,0
+12c
+34,0
+12c
+2d,0
+12c
+35,0
+2,12c
+2b,0
+2,12c
+36,0
+2,12c
+29,0
+2,12c
+38,0
+2,12c
+27,0
+2,12c
+3a,0
+2,12c
+25,0
+2,12c
+61,0
+12c
+61,0
+2,12c
+60,0
+2,12c
+60,0
+3,12c
+5f,0
+3,12c
+5d,0
+4,12c
+5a,0
+6,12c
+7a2,0
+100 90 32
+40b,0
+b,3e8
+55,0
+4,3e8
+b,0
+4,3e8
+4e,0
+3,3e8
+13,0
+3,3e8
+49,0
+3,3e8
+17,0
+3,3e8
+46,0
+2,3e8
+1b,0
+2,3e8
+43,0
+2,3e8
+1f,0
+2,3e8
+40,0
+3e8
+23,0
+3e8
+3d,0
+2,3e8
+25,0
+2,3e8
+3a,0
+2,3e8
+27,0
+2,3e8
+38,0
+2,3e8
+29,0
+2,3e8
+36,0
+2,3e8
+2b,0
+2,3e8
+35,0
+3e8
+2d,0
+3e8
+34,0
+3e8
+2f,0
+3e8
+32,0
+3e8
+31,0
+3e8
+31,0
+3e8
+31,0
+3e8
+30,0
+3e8
+33,0
+3e8
+2e,0
+2,3e8
+33,0
+2,3e8
+2d,0
+3e8
+35,0
+3e8
+2c,0
+2,3e8
+35,0
+2,3e8
+2b,0
+3e8
+37,0
+3e8
+2b,0
+3e8
+37,0
+3e8
+2a,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+28,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+28,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+2a,0
+3e8
+37,0
+3e8
+2b,0
+3e8
+37,0
+3e8
+2b,0
+2,3e8
+35,0
+2,3e8
+2c,0
+3e8
+35,0
+3e8
+2d,0
+2,3e8
+33,0
+2,3e8
+2e,0
+3e8
+33,0
+3e8
+30,0
+3e8
+31,0
+3e8
+31,0
+3e8
+31,0
+3e8
+32,0
+3e8
+2f,0
+3e8
+34,0
+3e8
+2d,0
+3e8
+35,0
+2,3e8
+2b,0
+2,3e8
+36,0
+2,3e8
+29,0
+2,3e8
+38,0
+2,3e8
+27,0
+2,3e8
+3a,0
+2,3e8
+25,0
+2,3e8
+61,0
+3e8
+61,0
+2,3e8
+60,0
+2,3e8
+60,0
+3,3e8
+5f,0
+3,3e8
+5d,0
+4,3e8
+5a,0
+6,3e8
+7a2,0
+100 90 32
+40b,0
+b,111111
+55,0
+4,111111
+b,0
+4,111111
+4e,0
+3,111111
+13,0
+3,111111
+49,0
+3,111111
+17,0
+3,111111
+46,0
+2,111111
+1b,0
+2,111111
+43,0
+2,111111
+1f,0
+2,111111
+40,0
+111111
+23,0
+111111
+3d,0
+2,111111
+25,0
+2,111111
+3a,0
+2,111111
+27,0
+2,111111
+38,0
+2,111111
+29,0
+2,111111
+36,0
+2,111111
+2b,0
+2,111111
+35,0
+111111
+2d,0
+111111
+34,0
+111111
+2f,0
+111111
+32,0
+111111
+31,0
+111111
+31,0
+111111
+31,0
+111111
+30,0
+111111
+33,0
+111111
+2e,0
+2,111111
+33,0
+2,111111
+2d,0
+111111
+35,0
+111111
+2c,0
+2,111111
+35,0
+2,111111
+2b,0
+111111
+37,0
+111111
+2b,0
+111111
+37,0
+111111
+2a,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+28,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+28,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+2a,0
+111111
+37,0
+111111
+2b,0
+111111
+37,0
+111111
+2b,0
+2,111111
+35,0
+2,111111
+2c,0
+111111
+35,0
+111111
+2d,0
+2,111111
+33,0
+2,111111
+2e,0
+111111
+33,0
+111111
+30,0
+111111
+31,0
+111111
+31,0
+111111
+31,0
+111111
+32,0
+111111
+2f,0
+111111
+34,0
+111111
+2d,0
+111111
+35,0
+2,111111
+2b,0
+2,111111
+36,0
+2,111111
+29,0
+2,111111
+38,0
+2,111111
+27,0
+2,111111
+3a,0
+2,111111
+25,0
+2,111111
+61,0
+111111
+61,0
+2,111111
+60,0
+2,111111
+60,0
+3,111111
+5f,0
+3,111111
+5d,0
+4,111111
+5a,0
+6,111111
+7a2,0
+100 90 32
+40b,0
+b,400200
+55,0
+4,400200
+b,0
+4,400200
+4e,0
+3,400200
+13,0
+3,400200
+49,0
+3,400200
+17,0
+3,400200
+46,0
+2,400200
+1b,0
+2,400200
+43,0
+2,400200
+1f,0
+2,400200
+40,0
+400200
+23,0
+400200
+3d,0
+2,400200
+25,0
+2,400200
+3a,0
+2,400200
+27,0
+2,400200
+38,0
+2,400200
+29,0
+2,400200
+36,0
+2,400200
+2b,0
+2,400200
+35,0
+400200
+2d,0
+400200
+34,0
+400200
+2f,0
+400200
+32,0
+400200
+31,0
+400200
+31,0
+400200
+31,0
+400200
+30,0
+400200
+33,0
+400200
+2e,0
+2,400200
+33,0
+2,400200
+2d,0
+400200
+35,0
+400200
+2c,0
+2,400200
+35,0
+2,400200
+2b,0
+400200
+37,0
+400200
+2b,0
+400200
+37,0
+400200
+2a,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+28,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+28,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+2a,0
+400200
+37,0
+400200
+2b,0
+400200
+37,0
+400200
+2b,0
+2,400200
+35,0
+2,400200
+2c,0
+400200
+35,0
+400200
+2d,0
+2,400200
+33,0
+2,400200
+2e,0
+400200
+33,0
+400200
+30,0
+400200
+31,0
+400200
+31,0
+400200
+31,0
+400200
+32,0
+400200
+2f,0
+400200
+34,0
+400200
+2d,0
+400200
+35,0
+2,400200
+2b,0
+2,400200
+36,0
+2,400200
+29,0
+2,400200
+38,0
+2,400200
+27,0
+2,400200
+3a,0
+2,400200
+25,0
+2,400200
+61,0
+400200
+61,0
+2,400200
+60,0
+2,400200
+60,0
+3,400200
+5f,0
+3,400200
+5d,0
+4,400200
+5a,0
+6,400200
+7a2,0
+100 90 32
+40b,0
+b,777777
+55,0
+4,777777
+b,0
+4,777777
+4e,0
+3,777777
+13,0
+3,777777
+49,0
+3,777777
+17,0
+3,777777
+46,0
+2,777777
+1b,0
+2,777777
+43,0
+2,777777
+1f,0
+2,777777
+40,0
+777777
+23,0
+777777
+3d,0
+2,777777
+25,0
+2,777777
+3a,0
+2,777777
+27,0
+2,777777
+38,0
+2,777777
+29,0
+2,777777
+36,0
+2,777777
+2b,0
+2,777777
+35,0
+777777
+2d,0
+777777
+34,0
+777777
+2f,0
+777777
+32,0
+777777
+31,0
+777777
+31,0
+777777
+31,0
+777777
+30,0
+777777
+33,0
+777777
+2e,0
+2,777777
+33,0
+2,777777
+2d,0
+777777
+35,0
+777777
+2c,0
+2,777777
+35,0
+2,777777
+2b,0
+777777
+37,0
+777777
+2b,0
+777777
+37,0
+777777
+2a,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+28,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+28,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+2a,0
+777777
+37,0
+777777
+2b,0
+777777
+37,0
+777777
+2b,0
+2,777777
+35,0
+2,777777
+2c,0
+777777
+35,0
+777777
+2d,0
+2,777777
+33,0
+2,777777
+2e,0
+777777
+33,0
+777777
+30,0
+777777
+31,0
+777777
+31,0
+777777
+31,0
+777777
+32,0
+777777
+2f,0
+777777
+34,0
+777777
+2d,0
+777777
+35,0
+2,777777
+2b,0
+2,777777
+36,0
+2,777777
+29,0
+2,777777
+38,0
+2,777777
+27,0
+2,777777
+3a,0
+2,777777
+25,0
+2,777777
+61,0
+777777
+61,0
+2,777777
+60,0
+2,777777
+60,0
+3,777777
+5f,0
+3,777777
+5d,0
+4,777777
+5a,0
+6,777777
+7a2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a90.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a90.dat
new file mode 100644
index 000000000..d52b5b9a8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a90.dat
@@ -0,0 +1,7823 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+40b,0
+b,1
+55,0
+4,1
+b,0
+4,1
+4e,0
+3,1
+13,0
+3,1
+49,0
+3,1
+17,0
+3,1
+46,0
+2,1
+1b,0
+2,1
+43,0
+2,1
+1f,0
+2,1
+40,0
+1
+23,0
+1
+3d,0
+2,1
+25,0
+2,1
+3a,0
+2,1
+27,0
+2,1
+38,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+35,0
+1
+2d,0
+1
+34,0
+1
+2f,0
+1
+32,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+30,0
+1
+33,0
+1
+2e,0
+2,1
+33,0
+2,1
+2d,0
+1
+35,0
+1
+2c,0
+2,1
+35,0
+2,1
+2b,0
+1
+37,0
+1
+2b,0
+1
+37,0
+1
+2a,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+28,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+28,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+2a,0
+1
+37,0
+1
+2b,0
+1
+37,0
+1
+2b,0
+2,1
+35,0
+2,1
+2c,0
+1
+35,0
+1
+2d,0
+2,1
+33,0
+2,1
+2e,0
+1
+33,0
+1
+30,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+32,0
+1
+2f,0
+1
+34,0
+1
+2d,0
+1
+35,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+38,0
+2,1
+27,0
+2,1
+3a,0
+2,1
+25,0
+2,1
+61,0
+1
+61,0
+2,1
+60,0
+2,1
+60,0
+3,1
+5f,0
+3,1
+5d,0
+4,1
+5a,0
+6,1
+7a2,0
+100 90 32
+40b,0
+b,2
+55,0
+4,2
+b,0
+4,2
+4e,0
+3,2
+13,0
+3,2
+49,0
+3,2
+17,0
+3,2
+46,0
+2,2
+1b,0
+2,2
+43,0
+2,2
+1f,0
+2,2
+40,0
+2
+23,0
+2
+3d,0
+2,2
+25,0
+2,2
+3a,0
+2,2
+27,0
+2,2
+38,0
+2,2
+29,0
+2,2
+36,0
+2,2
+2b,0
+2,2
+35,0
+2
+2d,0
+2
+34,0
+2
+2f,0
+2
+32,0
+2
+31,0
+2
+31,0
+2
+31,0
+2
+30,0
+2
+33,0
+2
+2e,0
+2,2
+33,0
+2,2
+2d,0
+2
+35,0
+2
+2c,0
+2,2
+35,0
+2,2
+2b,0
+2
+37,0
+2
+2b,0
+2
+37,0
+2
+2a,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+28,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+28,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+2a,0
+2
+37,0
+2
+2b,0
+2
+37,0
+2
+2b,0
+2,2
+35,0
+2,2
+2c,0
+2
+35,0
+2
+2d,0
+2,2
+33,0
+2,2
+2e,0
+2
+33,0
+2
+30,0
+2
+31,0
+2
+31,0
+2
+31,0
+2
+32,0
+2
+2f,0
+2
+34,0
+2
+2d,0
+2
+35,0
+2,2
+2b,0
+2,2
+36,0
+2,2
+29,0
+2,2
+38,0
+2,2
+27,0
+2,2
+3a,0
+2,2
+25,0
+2,2
+61,0
+2
+61,0
+2,2
+60,0
+2,2
+60,0
+3,2
+5f,0
+3,2
+5d,0
+4,2
+5a,0
+6,2
+7a2,0
+100 90 32
+40b,0
+b,3
+55,0
+4,3
+b,0
+4,3
+4e,0
+3,3
+13,0
+3,3
+49,0
+3,3
+17,0
+3,3
+46,0
+2,3
+1b,0
+2,3
+43,0
+2,3
+1f,0
+2,3
+40,0
+3
+23,0
+3
+3d,0
+2,3
+25,0
+2,3
+3a,0
+2,3
+27,0
+2,3
+38,0
+2,3
+29,0
+2,3
+36,0
+2,3
+2b,0
+2,3
+35,0
+3
+2d,0
+3
+34,0
+3
+2f,0
+3
+32,0
+3
+31,0
+3
+31,0
+3
+31,0
+3
+30,0
+3
+33,0
+3
+2e,0
+2,3
+33,0
+2,3
+2d,0
+3
+35,0
+3
+2c,0
+2,3
+35,0
+2,3
+2b,0
+3
+37,0
+3
+2b,0
+3
+37,0
+3
+2a,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+28,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+28,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+2a,0
+3
+37,0
+3
+2b,0
+3
+37,0
+3
+2b,0
+2,3
+35,0
+2,3
+2c,0
+3
+35,0
+3
+2d,0
+2,3
+33,0
+2,3
+2e,0
+3
+33,0
+3
+30,0
+3
+31,0
+3
+31,0
+3
+31,0
+3
+32,0
+3
+2f,0
+3
+34,0
+3
+2d,0
+3
+35,0
+2,3
+2b,0
+2,3
+36,0
+2,3
+29,0
+2,3
+38,0
+2,3
+27,0
+2,3
+3a,0
+2,3
+25,0
+2,3
+61,0
+3
+61,0
+2,3
+60,0
+2,3
+60,0
+3,3
+5f,0
+3,3
+5d,0
+4,3
+5a,0
+6,3
+7a2,0
+100 90 32
+40b,0
+b,4
+55,0
+4,4
+b,0
+4,4
+4e,0
+3,4
+13,0
+3,4
+49,0
+3,4
+17,0
+3,4
+46,0
+2,4
+1b,0
+2,4
+43,0
+2,4
+1f,0
+2,4
+40,0
+4
+23,0
+4
+3d,0
+2,4
+25,0
+2,4
+3a,0
+2,4
+27,0
+2,4
+38,0
+2,4
+29,0
+2,4
+36,0
+2,4
+2b,0
+2,4
+35,0
+4
+2d,0
+4
+34,0
+4
+2f,0
+4
+32,0
+4
+31,0
+4
+31,0
+4
+31,0
+4
+30,0
+4
+33,0
+4
+2e,0
+2,4
+33,0
+2,4
+2d,0
+4
+35,0
+4
+2c,0
+2,4
+35,0
+2,4
+2b,0
+4
+37,0
+4
+2b,0
+4
+37,0
+4
+2a,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+28,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+28,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+2a,0
+4
+37,0
+4
+2b,0
+4
+37,0
+4
+2b,0
+2,4
+35,0
+2,4
+2c,0
+4
+35,0
+4
+2d,0
+2,4
+33,0
+2,4
+2e,0
+4
+33,0
+4
+30,0
+4
+31,0
+4
+31,0
+4
+31,0
+4
+32,0
+4
+2f,0
+4
+34,0
+4
+2d,0
+4
+35,0
+2,4
+2b,0
+2,4
+36,0
+2,4
+29,0
+2,4
+38,0
+2,4
+27,0
+2,4
+3a,0
+2,4
+25,0
+2,4
+61,0
+4
+61,0
+2,4
+60,0
+2,4
+60,0
+3,4
+5f,0
+3,4
+5d,0
+4,4
+5a,0
+6,4
+7a2,0
+100 90 32
+40b,0
+b,6
+55,0
+4,6
+b,0
+4,6
+4e,0
+3,6
+13,0
+3,6
+49,0
+3,6
+17,0
+3,6
+46,0
+2,6
+1b,0
+2,6
+43,0
+2,6
+1f,0
+2,6
+40,0
+6
+23,0
+6
+3d,0
+2,6
+25,0
+2,6
+3a,0
+2,6
+27,0
+2,6
+38,0
+2,6
+29,0
+2,6
+36,0
+2,6
+2b,0
+2,6
+35,0
+6
+2d,0
+6
+34,0
+6
+2f,0
+6
+32,0
+6
+31,0
+6
+31,0
+6
+31,0
+6
+30,0
+6
+33,0
+6
+2e,0
+2,6
+33,0
+2,6
+2d,0
+6
+35,0
+6
+2c,0
+2,6
+35,0
+2,6
+2b,0
+6
+37,0
+6
+2b,0
+6
+37,0
+6
+2a,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+28,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+28,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+2a,0
+6
+37,0
+6
+2b,0
+6
+37,0
+6
+2b,0
+2,6
+35,0
+2,6
+2c,0
+6
+35,0
+6
+2d,0
+2,6
+33,0
+2,6
+2e,0
+6
+33,0
+6
+30,0
+6
+31,0
+6
+31,0
+6
+31,0
+6
+32,0
+6
+2f,0
+6
+34,0
+6
+2d,0
+6
+35,0
+2,6
+2b,0
+2,6
+36,0
+2,6
+29,0
+2,6
+38,0
+2,6
+27,0
+2,6
+3a,0
+2,6
+25,0
+2,6
+61,0
+6
+61,0
+2,6
+60,0
+2,6
+60,0
+3,6
+5f,0
+3,6
+5d,0
+4,6
+5a,0
+6,6
+7a2,0
+100 90 32
+40b,0
+b,7
+55,0
+4,7
+b,0
+4,7
+4e,0
+3,7
+13,0
+3,7
+49,0
+3,7
+17,0
+3,7
+46,0
+2,7
+1b,0
+2,7
+43,0
+2,7
+1f,0
+2,7
+40,0
+7
+23,0
+7
+3d,0
+2,7
+25,0
+2,7
+3a,0
+2,7
+27,0
+2,7
+38,0
+2,7
+29,0
+2,7
+36,0
+2,7
+2b,0
+2,7
+35,0
+7
+2d,0
+7
+34,0
+7
+2f,0
+7
+32,0
+7
+31,0
+7
+31,0
+7
+31,0
+7
+30,0
+7
+33,0
+7
+2e,0
+2,7
+33,0
+2,7
+2d,0
+7
+35,0
+7
+2c,0
+2,7
+35,0
+2,7
+2b,0
+7
+37,0
+7
+2b,0
+7
+37,0
+7
+2a,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+28,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+28,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+2a,0
+7
+37,0
+7
+2b,0
+7
+37,0
+7
+2b,0
+2,7
+35,0
+2,7
+2c,0
+7
+35,0
+7
+2d,0
+2,7
+33,0
+2,7
+2e,0
+7
+33,0
+7
+30,0
+7
+31,0
+7
+31,0
+7
+31,0
+7
+32,0
+7
+2f,0
+7
+34,0
+7
+2d,0
+7
+35,0
+2,7
+2b,0
+2,7
+36,0
+2,7
+29,0
+2,7
+38,0
+2,7
+27,0
+2,7
+3a,0
+2,7
+25,0
+2,7
+61,0
+7
+61,0
+2,7
+60,0
+2,7
+60,0
+3,7
+5f,0
+3,7
+5d,0
+4,7
+5a,0
+6,7
+7a2,0
+100 90 32
+40b,0
+b,10
+55,0
+4,10
+b,0
+4,10
+4e,0
+3,10
+13,0
+3,10
+49,0
+3,10
+17,0
+3,10
+46,0
+2,10
+1b,0
+2,10
+43,0
+2,10
+1f,0
+2,10
+40,0
+10
+23,0
+10
+3d,0
+2,10
+25,0
+2,10
+3a,0
+2,10
+27,0
+2,10
+38,0
+2,10
+29,0
+2,10
+36,0
+2,10
+2b,0
+2,10
+35,0
+10
+2d,0
+10
+34,0
+10
+2f,0
+10
+32,0
+10
+31,0
+10
+31,0
+10
+31,0
+10
+30,0
+10
+33,0
+10
+2e,0
+2,10
+33,0
+2,10
+2d,0
+10
+35,0
+10
+2c,0
+2,10
+35,0
+2,10
+2b,0
+10
+37,0
+10
+2b,0
+10
+37,0
+10
+2a,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+28,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+28,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+2a,0
+10
+37,0
+10
+2b,0
+10
+37,0
+10
+2b,0
+2,10
+35,0
+2,10
+2c,0
+10
+35,0
+10
+2d,0
+2,10
+33,0
+2,10
+2e,0
+10
+33,0
+10
+30,0
+10
+31,0
+10
+31,0
+10
+31,0
+10
+32,0
+10
+2f,0
+10
+34,0
+10
+2d,0
+10
+35,0
+2,10
+2b,0
+2,10
+36,0
+2,10
+29,0
+2,10
+38,0
+2,10
+27,0
+2,10
+3a,0
+2,10
+25,0
+2,10
+61,0
+10
+61,0
+2,10
+60,0
+2,10
+60,0
+3,10
+5f,0
+3,10
+5d,0
+4,10
+5a,0
+6,10
+7a2,0
+100 90 32
+40b,0
+b,33
+55,0
+4,33
+b,0
+4,33
+4e,0
+3,33
+13,0
+3,33
+49,0
+3,33
+17,0
+3,33
+46,0
+2,33
+1b,0
+2,33
+43,0
+2,33
+1f,0
+2,33
+40,0
+33
+23,0
+33
+3d,0
+2,33
+25,0
+2,33
+3a,0
+2,33
+27,0
+2,33
+38,0
+2,33
+29,0
+2,33
+36,0
+2,33
+2b,0
+2,33
+35,0
+33
+2d,0
+33
+34,0
+33
+2f,0
+33
+32,0
+33
+31,0
+33
+31,0
+33
+31,0
+33
+30,0
+33
+33,0
+33
+2e,0
+2,33
+33,0
+2,33
+2d,0
+33
+35,0
+33
+2c,0
+2,33
+35,0
+2,33
+2b,0
+33
+37,0
+33
+2b,0
+33
+37,0
+33
+2a,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+28,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+28,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+2a,0
+33
+37,0
+33
+2b,0
+33
+37,0
+33
+2b,0
+2,33
+35,0
+2,33
+2c,0
+33
+35,0
+33
+2d,0
+2,33
+33,0
+2,33
+2e,0
+33
+33,0
+33
+30,0
+33
+31,0
+33
+31,0
+33
+31,0
+33
+32,0
+33
+2f,0
+33
+34,0
+33
+2d,0
+33
+35,0
+2,33
+2b,0
+2,33
+36,0
+2,33
+29,0
+2,33
+38,0
+2,33
+27,0
+2,33
+3a,0
+2,33
+25,0
+2,33
+61,0
+33
+61,0
+2,33
+60,0
+2,33
+60,0
+3,33
+5f,0
+3,33
+5d,0
+4,33
+5a,0
+6,33
+7a2,0
+100 90 32
+40b,0
+b,81
+55,0
+4,81
+b,0
+4,81
+4e,0
+3,81
+13,0
+3,81
+49,0
+3,81
+17,0
+3,81
+46,0
+2,81
+1b,0
+2,81
+43,0
+2,81
+1f,0
+2,81
+40,0
+81
+23,0
+81
+3d,0
+2,81
+25,0
+2,81
+3a,0
+2,81
+27,0
+2,81
+38,0
+2,81
+29,0
+2,81
+36,0
+2,81
+2b,0
+2,81
+35,0
+81
+2d,0
+81
+34,0
+81
+2f,0
+81
+32,0
+81
+31,0
+81
+31,0
+81
+31,0
+81
+30,0
+81
+33,0
+81
+2e,0
+2,81
+33,0
+2,81
+2d,0
+81
+35,0
+81
+2c,0
+2,81
+35,0
+2,81
+2b,0
+81
+37,0
+81
+2b,0
+81
+37,0
+81
+2a,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+28,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+28,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+2a,0
+81
+37,0
+81
+2b,0
+81
+37,0
+81
+2b,0
+2,81
+35,0
+2,81
+2c,0
+81
+35,0
+81
+2d,0
+2,81
+33,0
+2,81
+2e,0
+81
+33,0
+81
+30,0
+81
+31,0
+81
+31,0
+81
+31,0
+81
+32,0
+81
+2f,0
+81
+34,0
+81
+2d,0
+81
+35,0
+2,81
+2b,0
+2,81
+36,0
+2,81
+29,0
+2,81
+38,0
+2,81
+27,0
+2,81
+3a,0
+2,81
+25,0
+2,81
+61,0
+81
+61,0
+2,81
+60,0
+2,81
+60,0
+3,81
+5f,0
+3,81
+5d,0
+4,81
+5a,0
+6,81
+7a2,0
+100 90 32
+40b,0
+b,a3
+55,0
+4,a3
+b,0
+4,a3
+4e,0
+3,a3
+13,0
+3,a3
+49,0
+3,a3
+17,0
+3,a3
+46,0
+2,a3
+1b,0
+2,a3
+43,0
+2,a3
+1f,0
+2,a3
+40,0
+a3
+23,0
+a3
+3d,0
+2,a3
+25,0
+2,a3
+3a,0
+2,a3
+27,0
+2,a3
+38,0
+2,a3
+29,0
+2,a3
+36,0
+2,a3
+2b,0
+2,a3
+35,0
+a3
+2d,0
+a3
+34,0
+a3
+2f,0
+a3
+32,0
+a3
+31,0
+a3
+31,0
+a3
+31,0
+a3
+30,0
+a3
+33,0
+a3
+2e,0
+2,a3
+33,0
+2,a3
+2d,0
+a3
+35,0
+a3
+2c,0
+2,a3
+35,0
+2,a3
+2b,0
+a3
+37,0
+a3
+2b,0
+a3
+37,0
+a3
+2a,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+28,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+28,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+2a,0
+a3
+37,0
+a3
+2b,0
+a3
+37,0
+a3
+2b,0
+2,a3
+35,0
+2,a3
+2c,0
+a3
+35,0
+a3
+2d,0
+2,a3
+33,0
+2,a3
+2e,0
+a3
+33,0
+a3
+30,0
+a3
+31,0
+a3
+31,0
+a3
+31,0
+a3
+32,0
+a3
+2f,0
+a3
+34,0
+a3
+2d,0
+a3
+35,0
+2,a3
+2b,0
+2,a3
+36,0
+2,a3
+29,0
+2,a3
+38,0
+2,a3
+27,0
+2,a3
+3a,0
+2,a3
+25,0
+2,a3
+61,0
+a3
+61,0
+2,a3
+60,0
+2,a3
+60,0
+3,a3
+5f,0
+3,a3
+5d,0
+4,a3
+5a,0
+6,a3
+7a2,0
+100 90 32
+40b,0
+b,ff
+55,0
+4,ff
+b,0
+4,ff
+4e,0
+3,ff
+13,0
+3,ff
+49,0
+3,ff
+17,0
+3,ff
+46,0
+2,ff
+1b,0
+2,ff
+43,0
+2,ff
+1f,0
+2,ff
+40,0
+ff
+23,0
+ff
+3d,0
+2,ff
+25,0
+2,ff
+3a,0
+2,ff
+27,0
+2,ff
+38,0
+2,ff
+29,0
+2,ff
+36,0
+2,ff
+2b,0
+2,ff
+35,0
+ff
+2d,0
+ff
+34,0
+ff
+2f,0
+ff
+32,0
+ff
+31,0
+ff
+31,0
+ff
+31,0
+ff
+30,0
+ff
+33,0
+ff
+2e,0
+2,ff
+33,0
+2,ff
+2d,0
+ff
+35,0
+ff
+2c,0
+2,ff
+35,0
+2,ff
+2b,0
+ff
+37,0
+ff
+2b,0
+ff
+37,0
+ff
+2a,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+28,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+28,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+2a,0
+ff
+37,0
+ff
+2b,0
+ff
+37,0
+ff
+2b,0
+2,ff
+35,0
+2,ff
+2c,0
+ff
+35,0
+ff
+2d,0
+2,ff
+33,0
+2,ff
+2e,0
+ff
+33,0
+ff
+30,0
+ff
+31,0
+ff
+31,0
+ff
+31,0
+ff
+32,0
+ff
+2f,0
+ff
+34,0
+ff
+2d,0
+ff
+35,0
+2,ff
+2b,0
+2,ff
+36,0
+2,ff
+29,0
+2,ff
+38,0
+2,ff
+27,0
+2,ff
+3a,0
+2,ff
+25,0
+2,ff
+61,0
+ff
+61,0
+2,ff
+60,0
+2,ff
+60,0
+3,ff
+5f,0
+3,ff
+5d,0
+4,ff
+5a,0
+6,ff
+7a2,0
+100 90 32
+40b,0
+b,100
+55,0
+4,100
+b,0
+4,100
+4e,0
+3,100
+13,0
+3,100
+49,0
+3,100
+17,0
+3,100
+46,0
+2,100
+1b,0
+2,100
+43,0
+2,100
+1f,0
+2,100
+40,0
+100
+23,0
+100
+3d,0
+2,100
+25,0
+2,100
+3a,0
+2,100
+27,0
+2,100
+38,0
+2,100
+29,0
+2,100
+36,0
+2,100
+2b,0
+2,100
+35,0
+100
+2d,0
+100
+34,0
+100
+2f,0
+100
+32,0
+100
+31,0
+100
+31,0
+100
+31,0
+100
+30,0
+100
+33,0
+100
+2e,0
+2,100
+33,0
+2,100
+2d,0
+100
+35,0
+100
+2c,0
+2,100
+35,0
+2,100
+2b,0
+100
+37,0
+100
+2b,0
+100
+37,0
+100
+2a,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+28,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+28,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+2a,0
+100
+37,0
+100
+2b,0
+100
+37,0
+100
+2b,0
+2,100
+35,0
+2,100
+2c,0
+100
+35,0
+100
+2d,0
+2,100
+33,0
+2,100
+2e,0
+100
+33,0
+100
+30,0
+100
+31,0
+100
+31,0
+100
+31,0
+100
+32,0
+100
+2f,0
+100
+34,0
+100
+2d,0
+100
+35,0
+2,100
+2b,0
+2,100
+36,0
+2,100
+29,0
+2,100
+38,0
+2,100
+27,0
+2,100
+3a,0
+2,100
+25,0
+2,100
+61,0
+100
+61,0
+2,100
+60,0
+2,100
+60,0
+3,100
+5f,0
+3,100
+5d,0
+4,100
+5a,0
+6,100
+7a2,0
+100 90 32
+40b,0
+b,12c
+55,0
+4,12c
+b,0
+4,12c
+4e,0
+3,12c
+13,0
+3,12c
+49,0
+3,12c
+17,0
+3,12c
+46,0
+2,12c
+1b,0
+2,12c
+43,0
+2,12c
+1f,0
+2,12c
+40,0
+12c
+23,0
+12c
+3d,0
+2,12c
+25,0
+2,12c
+3a,0
+2,12c
+27,0
+2,12c
+38,0
+2,12c
+29,0
+2,12c
+36,0
+2,12c
+2b,0
+2,12c
+35,0
+12c
+2d,0
+12c
+34,0
+12c
+2f,0
+12c
+32,0
+12c
+31,0
+12c
+31,0
+12c
+31,0
+12c
+30,0
+12c
+33,0
+12c
+2e,0
+2,12c
+33,0
+2,12c
+2d,0
+12c
+35,0
+12c
+2c,0
+2,12c
+35,0
+2,12c
+2b,0
+12c
+37,0
+12c
+2b,0
+12c
+37,0
+12c
+2a,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+28,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+28,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+2a,0
+12c
+37,0
+12c
+2b,0
+12c
+37,0
+12c
+2b,0
+2,12c
+35,0
+2,12c
+2c,0
+12c
+35,0
+12c
+2d,0
+2,12c
+33,0
+2,12c
+2e,0
+12c
+33,0
+12c
+30,0
+12c
+31,0
+12c
+31,0
+12c
+31,0
+12c
+32,0
+12c
+2f,0
+12c
+34,0
+12c
+2d,0
+12c
+35,0
+2,12c
+2b,0
+2,12c
+36,0
+2,12c
+29,0
+2,12c
+38,0
+2,12c
+27,0
+2,12c
+3a,0
+2,12c
+25,0
+2,12c
+61,0
+12c
+61,0
+2,12c
+60,0
+2,12c
+60,0
+3,12c
+5f,0
+3,12c
+5d,0
+4,12c
+5a,0
+6,12c
+7a2,0
+100 90 32
+40b,0
+b,3e8
+55,0
+4,3e8
+b,0
+4,3e8
+4e,0
+3,3e8
+13,0
+3,3e8
+49,0
+3,3e8
+17,0
+3,3e8
+46,0
+2,3e8
+1b,0
+2,3e8
+43,0
+2,3e8
+1f,0
+2,3e8
+40,0
+3e8
+23,0
+3e8
+3d,0
+2,3e8
+25,0
+2,3e8
+3a,0
+2,3e8
+27,0
+2,3e8
+38,0
+2,3e8
+29,0
+2,3e8
+36,0
+2,3e8
+2b,0
+2,3e8
+35,0
+3e8
+2d,0
+3e8
+34,0
+3e8
+2f,0
+3e8
+32,0
+3e8
+31,0
+3e8
+31,0
+3e8
+31,0
+3e8
+30,0
+3e8
+33,0
+3e8
+2e,0
+2,3e8
+33,0
+2,3e8
+2d,0
+3e8
+35,0
+3e8
+2c,0
+2,3e8
+35,0
+2,3e8
+2b,0
+3e8
+37,0
+3e8
+2b,0
+3e8
+37,0
+3e8
+2a,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+28,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+28,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+2a,0
+3e8
+37,0
+3e8
+2b,0
+3e8
+37,0
+3e8
+2b,0
+2,3e8
+35,0
+2,3e8
+2c,0
+3e8
+35,0
+3e8
+2d,0
+2,3e8
+33,0
+2,3e8
+2e,0
+3e8
+33,0
+3e8
+30,0
+3e8
+31,0
+3e8
+31,0
+3e8
+31,0
+3e8
+32,0
+3e8
+2f,0
+3e8
+34,0
+3e8
+2d,0
+3e8
+35,0
+2,3e8
+2b,0
+2,3e8
+36,0
+2,3e8
+29,0
+2,3e8
+38,0
+2,3e8
+27,0
+2,3e8
+3a,0
+2,3e8
+25,0
+2,3e8
+61,0
+3e8
+61,0
+2,3e8
+60,0
+2,3e8
+60,0
+3,3e8
+5f,0
+3,3e8
+5d,0
+4,3e8
+5a,0
+6,3e8
+7a2,0
+100 90 32
+40b,0
+b,111111
+55,0
+4,111111
+b,0
+4,111111
+4e,0
+3,111111
+13,0
+3,111111
+49,0
+3,111111
+17,0
+3,111111
+46,0
+2,111111
+1b,0
+2,111111
+43,0
+2,111111
+1f,0
+2,111111
+40,0
+111111
+23,0
+111111
+3d,0
+2,111111
+25,0
+2,111111
+3a,0
+2,111111
+27,0
+2,111111
+38,0
+2,111111
+29,0
+2,111111
+36,0
+2,111111
+2b,0
+2,111111
+35,0
+111111
+2d,0
+111111
+34,0
+111111
+2f,0
+111111
+32,0
+111111
+31,0
+111111
+31,0
+111111
+31,0
+111111
+30,0
+111111
+33,0
+111111
+2e,0
+2,111111
+33,0
+2,111111
+2d,0
+111111
+35,0
+111111
+2c,0
+2,111111
+35,0
+2,111111
+2b,0
+111111
+37,0
+111111
+2b,0
+111111
+37,0
+111111
+2a,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+28,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+28,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+2a,0
+111111
+37,0
+111111
+2b,0
+111111
+37,0
+111111
+2b,0
+2,111111
+35,0
+2,111111
+2c,0
+111111
+35,0
+111111
+2d,0
+2,111111
+33,0
+2,111111
+2e,0
+111111
+33,0
+111111
+30,0
+111111
+31,0
+111111
+31,0
+111111
+31,0
+111111
+32,0
+111111
+2f,0
+111111
+34,0
+111111
+2d,0
+111111
+35,0
+2,111111
+2b,0
+2,111111
+36,0
+2,111111
+29,0
+2,111111
+38,0
+2,111111
+27,0
+2,111111
+3a,0
+2,111111
+25,0
+2,111111
+61,0
+111111
+61,0
+2,111111
+60,0
+2,111111
+60,0
+3,111111
+5f,0
+3,111111
+5d,0
+4,111111
+5a,0
+6,111111
+7a2,0
+100 90 32
+40b,0
+b,400200
+55,0
+4,400200
+b,0
+4,400200
+4e,0
+3,400200
+13,0
+3,400200
+49,0
+3,400200
+17,0
+3,400200
+46,0
+2,400200
+1b,0
+2,400200
+43,0
+2,400200
+1f,0
+2,400200
+40,0
+400200
+23,0
+400200
+3d,0
+2,400200
+25,0
+2,400200
+3a,0
+2,400200
+27,0
+2,400200
+38,0
+2,400200
+29,0
+2,400200
+36,0
+2,400200
+2b,0
+2,400200
+35,0
+400200
+2d,0
+400200
+34,0
+400200
+2f,0
+400200
+32,0
+400200
+31,0
+400200
+31,0
+400200
+31,0
+400200
+30,0
+400200
+33,0
+400200
+2e,0
+2,400200
+33,0
+2,400200
+2d,0
+400200
+35,0
+400200
+2c,0
+2,400200
+35,0
+2,400200
+2b,0
+400200
+37,0
+400200
+2b,0
+400200
+37,0
+400200
+2a,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+28,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+28,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+2a,0
+400200
+37,0
+400200
+2b,0
+400200
+37,0
+400200
+2b,0
+2,400200
+35,0
+2,400200
+2c,0
+400200
+35,0
+400200
+2d,0
+2,400200
+33,0
+2,400200
+2e,0
+400200
+33,0
+400200
+30,0
+400200
+31,0
+400200
+31,0
+400200
+31,0
+400200
+32,0
+400200
+2f,0
+400200
+34,0
+400200
+2d,0
+400200
+35,0
+2,400200
+2b,0
+2,400200
+36,0
+2,400200
+29,0
+2,400200
+38,0
+2,400200
+27,0
+2,400200
+3a,0
+2,400200
+25,0
+2,400200
+61,0
+400200
+61,0
+2,400200
+60,0
+2,400200
+60,0
+3,400200
+5f,0
+3,400200
+5d,0
+4,400200
+5a,0
+6,400200
+7a2,0
+100 90 32
+40b,0
+b,777777
+55,0
+4,777777
+b,0
+4,777777
+4e,0
+3,777777
+13,0
+3,777777
+49,0
+3,777777
+17,0
+3,777777
+46,0
+2,777777
+1b,0
+2,777777
+43,0
+2,777777
+1f,0
+2,777777
+40,0
+777777
+23,0
+777777
+3d,0
+2,777777
+25,0
+2,777777
+3a,0
+2,777777
+27,0
+2,777777
+38,0
+2,777777
+29,0
+2,777777
+36,0
+2,777777
+2b,0
+2,777777
+35,0
+777777
+2d,0
+777777
+34,0
+777777
+2f,0
+777777
+32,0
+777777
+31,0
+777777
+31,0
+777777
+31,0
+777777
+30,0
+777777
+33,0
+777777
+2e,0
+2,777777
+33,0
+2,777777
+2d,0
+777777
+35,0
+777777
+2c,0
+2,777777
+35,0
+2,777777
+2b,0
+777777
+37,0
+777777
+2b,0
+777777
+37,0
+777777
+2a,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+28,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+28,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+2a,0
+777777
+37,0
+777777
+2b,0
+777777
+37,0
+777777
+2b,0
+2,777777
+35,0
+2,777777
+2c,0
+777777
+35,0
+777777
+2d,0
+2,777777
+33,0
+2,777777
+2e,0
+777777
+33,0
+777777
+30,0
+777777
+31,0
+777777
+31,0
+777777
+31,0
+777777
+32,0
+777777
+2f,0
+777777
+34,0
+777777
+2d,0
+777777
+35,0
+2,777777
+2b,0
+2,777777
+36,0
+2,777777
+29,0
+2,777777
+38,0
+2,777777
+27,0
+2,777777
+3a,0
+2,777777
+25,0
+2,777777
+61,0
+777777
+61,0
+2,777777
+60,0
+2,777777
+60,0
+3,777777
+5f,0
+3,777777
+5d,0
+4,777777
+5a,0
+6,777777
+7a2,0
+100 90 32
+40b,0
+b,1
+55,0
+4,1
+b,0
+4,1
+4e,0
+3,1
+13,0
+3,1
+49,0
+3,1
+17,0
+3,1
+46,0
+2,1
+1b,0
+2,1
+43,0
+2,1
+1f,0
+2,1
+40,0
+1
+23,0
+1
+3d,0
+2,1
+25,0
+2,1
+3a,0
+2,1
+27,0
+2,1
+38,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+35,0
+1
+2d,0
+1
+34,0
+1
+2f,0
+1
+32,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+30,0
+1
+33,0
+1
+2e,0
+2,1
+33,0
+2,1
+2d,0
+1
+35,0
+1
+2c,0
+2,1
+35,0
+2,1
+2b,0
+1
+37,0
+1
+2b,0
+1
+37,0
+1
+2a,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+28,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+28,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+2a,0
+1
+37,0
+1
+2b,0
+1
+37,0
+1
+2b,0
+2,1
+35,0
+2,1
+2c,0
+1
+35,0
+1
+2d,0
+2,1
+33,0
+2,1
+2e,0
+1
+33,0
+1
+30,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+32,0
+1
+2f,0
+1
+34,0
+1
+2d,0
+1
+35,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+38,0
+2,1
+27,0
+2,1
+3a,0
+2,1
+25,0
+2,1
+61,0
+1
+61,0
+2,1
+60,0
+2,1
+60,0
+3,1
+5f,0
+3,1
+5d,0
+4,1
+5a,0
+6,1
+7a2,0
+100 90 32
+40b,0
+b,2
+55,0
+4,2
+b,0
+4,2
+4e,0
+3,2
+13,0
+3,2
+49,0
+3,2
+17,0
+3,2
+46,0
+2,2
+1b,0
+2,2
+43,0
+2,2
+1f,0
+2,2
+40,0
+2
+23,0
+2
+3d,0
+2,2
+25,0
+2,2
+3a,0
+2,2
+27,0
+2,2
+38,0
+2,2
+29,0
+2,2
+36,0
+2,2
+2b,0
+2,2
+35,0
+2
+2d,0
+2
+34,0
+2
+2f,0
+2
+32,0
+2
+31,0
+2
+31,0
+2
+31,0
+2
+30,0
+2
+33,0
+2
+2e,0
+2,2
+33,0
+2,2
+2d,0
+2
+35,0
+2
+2c,0
+2,2
+35,0
+2,2
+2b,0
+2
+37,0
+2
+2b,0
+2
+37,0
+2
+2a,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+28,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+28,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+29,0
+2
+39,0
+2
+2a,0
+2
+37,0
+2
+2b,0
+2
+37,0
+2
+2b,0
+2,2
+35,0
+2,2
+2c,0
+2
+35,0
+2
+2d,0
+2,2
+33,0
+2,2
+2e,0
+2
+33,0
+2
+30,0
+2
+31,0
+2
+31,0
+2
+31,0
+2
+32,0
+2
+2f,0
+2
+34,0
+2
+2d,0
+2
+35,0
+2,2
+2b,0
+2,2
+36,0
+2,2
+29,0
+2,2
+38,0
+2,2
+27,0
+2,2
+3a,0
+2,2
+25,0
+2,2
+61,0
+2
+61,0
+2,2
+60,0
+2,2
+60,0
+3,2
+5f,0
+3,2
+5d,0
+4,2
+5a,0
+6,2
+7a2,0
+100 90 32
+40b,0
+b,3
+55,0
+4,3
+b,0
+4,3
+4e,0
+3,3
+13,0
+3,3
+49,0
+3,3
+17,0
+3,3
+46,0
+2,3
+1b,0
+2,3
+43,0
+2,3
+1f,0
+2,3
+40,0
+3
+23,0
+3
+3d,0
+2,3
+25,0
+2,3
+3a,0
+2,3
+27,0
+2,3
+38,0
+2,3
+29,0
+2,3
+36,0
+2,3
+2b,0
+2,3
+35,0
+3
+2d,0
+3
+34,0
+3
+2f,0
+3
+32,0
+3
+31,0
+3
+31,0
+3
+31,0
+3
+30,0
+3
+33,0
+3
+2e,0
+2,3
+33,0
+2,3
+2d,0
+3
+35,0
+3
+2c,0
+2,3
+35,0
+2,3
+2b,0
+3
+37,0
+3
+2b,0
+3
+37,0
+3
+2a,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+28,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+28,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+29,0
+3
+39,0
+3
+2a,0
+3
+37,0
+3
+2b,0
+3
+37,0
+3
+2b,0
+2,3
+35,0
+2,3
+2c,0
+3
+35,0
+3
+2d,0
+2,3
+33,0
+2,3
+2e,0
+3
+33,0
+3
+30,0
+3
+31,0
+3
+31,0
+3
+31,0
+3
+32,0
+3
+2f,0
+3
+34,0
+3
+2d,0
+3
+35,0
+2,3
+2b,0
+2,3
+36,0
+2,3
+29,0
+2,3
+38,0
+2,3
+27,0
+2,3
+3a,0
+2,3
+25,0
+2,3
+61,0
+3
+61,0
+2,3
+60,0
+2,3
+60,0
+3,3
+5f,0
+3,3
+5d,0
+4,3
+5a,0
+6,3
+7a2,0
+100 90 32
+40b,0
+b,4
+55,0
+4,4
+b,0
+4,4
+4e,0
+3,4
+13,0
+3,4
+49,0
+3,4
+17,0
+3,4
+46,0
+2,4
+1b,0
+2,4
+43,0
+2,4
+1f,0
+2,4
+40,0
+4
+23,0
+4
+3d,0
+2,4
+25,0
+2,4
+3a,0
+2,4
+27,0
+2,4
+38,0
+2,4
+29,0
+2,4
+36,0
+2,4
+2b,0
+2,4
+35,0
+4
+2d,0
+4
+34,0
+4
+2f,0
+4
+32,0
+4
+31,0
+4
+31,0
+4
+31,0
+4
+30,0
+4
+33,0
+4
+2e,0
+2,4
+33,0
+2,4
+2d,0
+4
+35,0
+4
+2c,0
+2,4
+35,0
+2,4
+2b,0
+4
+37,0
+4
+2b,0
+4
+37,0
+4
+2a,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+28,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+28,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+29,0
+4
+39,0
+4
+2a,0
+4
+37,0
+4
+2b,0
+4
+37,0
+4
+2b,0
+2,4
+35,0
+2,4
+2c,0
+4
+35,0
+4
+2d,0
+2,4
+33,0
+2,4
+2e,0
+4
+33,0
+4
+30,0
+4
+31,0
+4
+31,0
+4
+31,0
+4
+32,0
+4
+2f,0
+4
+34,0
+4
+2d,0
+4
+35,0
+2,4
+2b,0
+2,4
+36,0
+2,4
+29,0
+2,4
+38,0
+2,4
+27,0
+2,4
+3a,0
+2,4
+25,0
+2,4
+61,0
+4
+61,0
+2,4
+60,0
+2,4
+60,0
+3,4
+5f,0
+3,4
+5d,0
+4,4
+5a,0
+6,4
+7a2,0
+100 90 32
+40b,0
+b,6
+55,0
+4,6
+b,0
+4,6
+4e,0
+3,6
+13,0
+3,6
+49,0
+3,6
+17,0
+3,6
+46,0
+2,6
+1b,0
+2,6
+43,0
+2,6
+1f,0
+2,6
+40,0
+6
+23,0
+6
+3d,0
+2,6
+25,0
+2,6
+3a,0
+2,6
+27,0
+2,6
+38,0
+2,6
+29,0
+2,6
+36,0
+2,6
+2b,0
+2,6
+35,0
+6
+2d,0
+6
+34,0
+6
+2f,0
+6
+32,0
+6
+31,0
+6
+31,0
+6
+31,0
+6
+30,0
+6
+33,0
+6
+2e,0
+2,6
+33,0
+2,6
+2d,0
+6
+35,0
+6
+2c,0
+2,6
+35,0
+2,6
+2b,0
+6
+37,0
+6
+2b,0
+6
+37,0
+6
+2a,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+28,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+28,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+29,0
+6
+39,0
+6
+2a,0
+6
+37,0
+6
+2b,0
+6
+37,0
+6
+2b,0
+2,6
+35,0
+2,6
+2c,0
+6
+35,0
+6
+2d,0
+2,6
+33,0
+2,6
+2e,0
+6
+33,0
+6
+30,0
+6
+31,0
+6
+31,0
+6
+31,0
+6
+32,0
+6
+2f,0
+6
+34,0
+6
+2d,0
+6
+35,0
+2,6
+2b,0
+2,6
+36,0
+2,6
+29,0
+2,6
+38,0
+2,6
+27,0
+2,6
+3a,0
+2,6
+25,0
+2,6
+61,0
+6
+61,0
+2,6
+60,0
+2,6
+60,0
+3,6
+5f,0
+3,6
+5d,0
+4,6
+5a,0
+6,6
+7a2,0
+100 90 32
+40b,0
+b,7
+55,0
+4,7
+b,0
+4,7
+4e,0
+3,7
+13,0
+3,7
+49,0
+3,7
+17,0
+3,7
+46,0
+2,7
+1b,0
+2,7
+43,0
+2,7
+1f,0
+2,7
+40,0
+7
+23,0
+7
+3d,0
+2,7
+25,0
+2,7
+3a,0
+2,7
+27,0
+2,7
+38,0
+2,7
+29,0
+2,7
+36,0
+2,7
+2b,0
+2,7
+35,0
+7
+2d,0
+7
+34,0
+7
+2f,0
+7
+32,0
+7
+31,0
+7
+31,0
+7
+31,0
+7
+30,0
+7
+33,0
+7
+2e,0
+2,7
+33,0
+2,7
+2d,0
+7
+35,0
+7
+2c,0
+2,7
+35,0
+2,7
+2b,0
+7
+37,0
+7
+2b,0
+7
+37,0
+7
+2a,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+28,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+28,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+29,0
+7
+39,0
+7
+2a,0
+7
+37,0
+7
+2b,0
+7
+37,0
+7
+2b,0
+2,7
+35,0
+2,7
+2c,0
+7
+35,0
+7
+2d,0
+2,7
+33,0
+2,7
+2e,0
+7
+33,0
+7
+30,0
+7
+31,0
+7
+31,0
+7
+31,0
+7
+32,0
+7
+2f,0
+7
+34,0
+7
+2d,0
+7
+35,0
+2,7
+2b,0
+2,7
+36,0
+2,7
+29,0
+2,7
+38,0
+2,7
+27,0
+2,7
+3a,0
+2,7
+25,0
+2,7
+61,0
+7
+61,0
+2,7
+60,0
+2,7
+60,0
+3,7
+5f,0
+3,7
+5d,0
+4,7
+5a,0
+6,7
+7a2,0
+100 90 32
+40b,0
+b,10
+55,0
+4,10
+b,0
+4,10
+4e,0
+3,10
+13,0
+3,10
+49,0
+3,10
+17,0
+3,10
+46,0
+2,10
+1b,0
+2,10
+43,0
+2,10
+1f,0
+2,10
+40,0
+10
+23,0
+10
+3d,0
+2,10
+25,0
+2,10
+3a,0
+2,10
+27,0
+2,10
+38,0
+2,10
+29,0
+2,10
+36,0
+2,10
+2b,0
+2,10
+35,0
+10
+2d,0
+10
+34,0
+10
+2f,0
+10
+32,0
+10
+31,0
+10
+31,0
+10
+31,0
+10
+30,0
+10
+33,0
+10
+2e,0
+2,10
+33,0
+2,10
+2d,0
+10
+35,0
+10
+2c,0
+2,10
+35,0
+2,10
+2b,0
+10
+37,0
+10
+2b,0
+10
+37,0
+10
+2a,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+28,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+28,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+29,0
+10
+39,0
+10
+2a,0
+10
+37,0
+10
+2b,0
+10
+37,0
+10
+2b,0
+2,10
+35,0
+2,10
+2c,0
+10
+35,0
+10
+2d,0
+2,10
+33,0
+2,10
+2e,0
+10
+33,0
+10
+30,0
+10
+31,0
+10
+31,0
+10
+31,0
+10
+32,0
+10
+2f,0
+10
+34,0
+10
+2d,0
+10
+35,0
+2,10
+2b,0
+2,10
+36,0
+2,10
+29,0
+2,10
+38,0
+2,10
+27,0
+2,10
+3a,0
+2,10
+25,0
+2,10
+61,0
+10
+61,0
+2,10
+60,0
+2,10
+60,0
+3,10
+5f,0
+3,10
+5d,0
+4,10
+5a,0
+6,10
+7a2,0
+100 90 32
+40b,0
+b,33
+55,0
+4,33
+b,0
+4,33
+4e,0
+3,33
+13,0
+3,33
+49,0
+3,33
+17,0
+3,33
+46,0
+2,33
+1b,0
+2,33
+43,0
+2,33
+1f,0
+2,33
+40,0
+33
+23,0
+33
+3d,0
+2,33
+25,0
+2,33
+3a,0
+2,33
+27,0
+2,33
+38,0
+2,33
+29,0
+2,33
+36,0
+2,33
+2b,0
+2,33
+35,0
+33
+2d,0
+33
+34,0
+33
+2f,0
+33
+32,0
+33
+31,0
+33
+31,0
+33
+31,0
+33
+30,0
+33
+33,0
+33
+2e,0
+2,33
+33,0
+2,33
+2d,0
+33
+35,0
+33
+2c,0
+2,33
+35,0
+2,33
+2b,0
+33
+37,0
+33
+2b,0
+33
+37,0
+33
+2a,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+28,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+28,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+29,0
+33
+39,0
+33
+2a,0
+33
+37,0
+33
+2b,0
+33
+37,0
+33
+2b,0
+2,33
+35,0
+2,33
+2c,0
+33
+35,0
+33
+2d,0
+2,33
+33,0
+2,33
+2e,0
+33
+33,0
+33
+30,0
+33
+31,0
+33
+31,0
+33
+31,0
+33
+32,0
+33
+2f,0
+33
+34,0
+33
+2d,0
+33
+35,0
+2,33
+2b,0
+2,33
+36,0
+2,33
+29,0
+2,33
+38,0
+2,33
+27,0
+2,33
+3a,0
+2,33
+25,0
+2,33
+61,0
+33
+61,0
+2,33
+60,0
+2,33
+60,0
+3,33
+5f,0
+3,33
+5d,0
+4,33
+5a,0
+6,33
+7a2,0
+100 90 32
+40b,0
+b,81
+55,0
+4,81
+b,0
+4,81
+4e,0
+3,81
+13,0
+3,81
+49,0
+3,81
+17,0
+3,81
+46,0
+2,81
+1b,0
+2,81
+43,0
+2,81
+1f,0
+2,81
+40,0
+81
+23,0
+81
+3d,0
+2,81
+25,0
+2,81
+3a,0
+2,81
+27,0
+2,81
+38,0
+2,81
+29,0
+2,81
+36,0
+2,81
+2b,0
+2,81
+35,0
+81
+2d,0
+81
+34,0
+81
+2f,0
+81
+32,0
+81
+31,0
+81
+31,0
+81
+31,0
+81
+30,0
+81
+33,0
+81
+2e,0
+2,81
+33,0
+2,81
+2d,0
+81
+35,0
+81
+2c,0
+2,81
+35,0
+2,81
+2b,0
+81
+37,0
+81
+2b,0
+81
+37,0
+81
+2a,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+28,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+28,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+29,0
+81
+39,0
+81
+2a,0
+81
+37,0
+81
+2b,0
+81
+37,0
+81
+2b,0
+2,81
+35,0
+2,81
+2c,0
+81
+35,0
+81
+2d,0
+2,81
+33,0
+2,81
+2e,0
+81
+33,0
+81
+30,0
+81
+31,0
+81
+31,0
+81
+31,0
+81
+32,0
+81
+2f,0
+81
+34,0
+81
+2d,0
+81
+35,0
+2,81
+2b,0
+2,81
+36,0
+2,81
+29,0
+2,81
+38,0
+2,81
+27,0
+2,81
+3a,0
+2,81
+25,0
+2,81
+61,0
+81
+61,0
+2,81
+60,0
+2,81
+60,0
+3,81
+5f,0
+3,81
+5d,0
+4,81
+5a,0
+6,81
+7a2,0
+100 90 32
+40b,0
+b,a3
+55,0
+4,a3
+b,0
+4,a3
+4e,0
+3,a3
+13,0
+3,a3
+49,0
+3,a3
+17,0
+3,a3
+46,0
+2,a3
+1b,0
+2,a3
+43,0
+2,a3
+1f,0
+2,a3
+40,0
+a3
+23,0
+a3
+3d,0
+2,a3
+25,0
+2,a3
+3a,0
+2,a3
+27,0
+2,a3
+38,0
+2,a3
+29,0
+2,a3
+36,0
+2,a3
+2b,0
+2,a3
+35,0
+a3
+2d,0
+a3
+34,0
+a3
+2f,0
+a3
+32,0
+a3
+31,0
+a3
+31,0
+a3
+31,0
+a3
+30,0
+a3
+33,0
+a3
+2e,0
+2,a3
+33,0
+2,a3
+2d,0
+a3
+35,0
+a3
+2c,0
+2,a3
+35,0
+2,a3
+2b,0
+a3
+37,0
+a3
+2b,0
+a3
+37,0
+a3
+2a,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+28,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+28,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+29,0
+a3
+39,0
+a3
+2a,0
+a3
+37,0
+a3
+2b,0
+a3
+37,0
+a3
+2b,0
+2,a3
+35,0
+2,a3
+2c,0
+a3
+35,0
+a3
+2d,0
+2,a3
+33,0
+2,a3
+2e,0
+a3
+33,0
+a3
+30,0
+a3
+31,0
+a3
+31,0
+a3
+31,0
+a3
+32,0
+a3
+2f,0
+a3
+34,0
+a3
+2d,0
+a3
+35,0
+2,a3
+2b,0
+2,a3
+36,0
+2,a3
+29,0
+2,a3
+38,0
+2,a3
+27,0
+2,a3
+3a,0
+2,a3
+25,0
+2,a3
+61,0
+a3
+61,0
+2,a3
+60,0
+2,a3
+60,0
+3,a3
+5f,0
+3,a3
+5d,0
+4,a3
+5a,0
+6,a3
+7a2,0
+100 90 32
+40b,0
+b,ff
+55,0
+4,ff
+b,0
+4,ff
+4e,0
+3,ff
+13,0
+3,ff
+49,0
+3,ff
+17,0
+3,ff
+46,0
+2,ff
+1b,0
+2,ff
+43,0
+2,ff
+1f,0
+2,ff
+40,0
+ff
+23,0
+ff
+3d,0
+2,ff
+25,0
+2,ff
+3a,0
+2,ff
+27,0
+2,ff
+38,0
+2,ff
+29,0
+2,ff
+36,0
+2,ff
+2b,0
+2,ff
+35,0
+ff
+2d,0
+ff
+34,0
+ff
+2f,0
+ff
+32,0
+ff
+31,0
+ff
+31,0
+ff
+31,0
+ff
+30,0
+ff
+33,0
+ff
+2e,0
+2,ff
+33,0
+2,ff
+2d,0
+ff
+35,0
+ff
+2c,0
+2,ff
+35,0
+2,ff
+2b,0
+ff
+37,0
+ff
+2b,0
+ff
+37,0
+ff
+2a,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+28,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+28,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+29,0
+ff
+39,0
+ff
+2a,0
+ff
+37,0
+ff
+2b,0
+ff
+37,0
+ff
+2b,0
+2,ff
+35,0
+2,ff
+2c,0
+ff
+35,0
+ff
+2d,0
+2,ff
+33,0
+2,ff
+2e,0
+ff
+33,0
+ff
+30,0
+ff
+31,0
+ff
+31,0
+ff
+31,0
+ff
+32,0
+ff
+2f,0
+ff
+34,0
+ff
+2d,0
+ff
+35,0
+2,ff
+2b,0
+2,ff
+36,0
+2,ff
+29,0
+2,ff
+38,0
+2,ff
+27,0
+2,ff
+3a,0
+2,ff
+25,0
+2,ff
+61,0
+ff
+61,0
+2,ff
+60,0
+2,ff
+60,0
+3,ff
+5f,0
+3,ff
+5d,0
+4,ff
+5a,0
+6,ff
+7a2,0
+100 90 32
+40b,0
+b,100
+55,0
+4,100
+b,0
+4,100
+4e,0
+3,100
+13,0
+3,100
+49,0
+3,100
+17,0
+3,100
+46,0
+2,100
+1b,0
+2,100
+43,0
+2,100
+1f,0
+2,100
+40,0
+100
+23,0
+100
+3d,0
+2,100
+25,0
+2,100
+3a,0
+2,100
+27,0
+2,100
+38,0
+2,100
+29,0
+2,100
+36,0
+2,100
+2b,0
+2,100
+35,0
+100
+2d,0
+100
+34,0
+100
+2f,0
+100
+32,0
+100
+31,0
+100
+31,0
+100
+31,0
+100
+30,0
+100
+33,0
+100
+2e,0
+2,100
+33,0
+2,100
+2d,0
+100
+35,0
+100
+2c,0
+2,100
+35,0
+2,100
+2b,0
+100
+37,0
+100
+2b,0
+100
+37,0
+100
+2a,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+28,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+28,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+29,0
+100
+39,0
+100
+2a,0
+100
+37,0
+100
+2b,0
+100
+37,0
+100
+2b,0
+2,100
+35,0
+2,100
+2c,0
+100
+35,0
+100
+2d,0
+2,100
+33,0
+2,100
+2e,0
+100
+33,0
+100
+30,0
+100
+31,0
+100
+31,0
+100
+31,0
+100
+32,0
+100
+2f,0
+100
+34,0
+100
+2d,0
+100
+35,0
+2,100
+2b,0
+2,100
+36,0
+2,100
+29,0
+2,100
+38,0
+2,100
+27,0
+2,100
+3a,0
+2,100
+25,0
+2,100
+61,0
+100
+61,0
+2,100
+60,0
+2,100
+60,0
+3,100
+5f,0
+3,100
+5d,0
+4,100
+5a,0
+6,100
+7a2,0
+100 90 32
+40b,0
+b,12c
+55,0
+4,12c
+b,0
+4,12c
+4e,0
+3,12c
+13,0
+3,12c
+49,0
+3,12c
+17,0
+3,12c
+46,0
+2,12c
+1b,0
+2,12c
+43,0
+2,12c
+1f,0
+2,12c
+40,0
+12c
+23,0
+12c
+3d,0
+2,12c
+25,0
+2,12c
+3a,0
+2,12c
+27,0
+2,12c
+38,0
+2,12c
+29,0
+2,12c
+36,0
+2,12c
+2b,0
+2,12c
+35,0
+12c
+2d,0
+12c
+34,0
+12c
+2f,0
+12c
+32,0
+12c
+31,0
+12c
+31,0
+12c
+31,0
+12c
+30,0
+12c
+33,0
+12c
+2e,0
+2,12c
+33,0
+2,12c
+2d,0
+12c
+35,0
+12c
+2c,0
+2,12c
+35,0
+2,12c
+2b,0
+12c
+37,0
+12c
+2b,0
+12c
+37,0
+12c
+2a,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+28,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+28,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+29,0
+12c
+39,0
+12c
+2a,0
+12c
+37,0
+12c
+2b,0
+12c
+37,0
+12c
+2b,0
+2,12c
+35,0
+2,12c
+2c,0
+12c
+35,0
+12c
+2d,0
+2,12c
+33,0
+2,12c
+2e,0
+12c
+33,0
+12c
+30,0
+12c
+31,0
+12c
+31,0
+12c
+31,0
+12c
+32,0
+12c
+2f,0
+12c
+34,0
+12c
+2d,0
+12c
+35,0
+2,12c
+2b,0
+2,12c
+36,0
+2,12c
+29,0
+2,12c
+38,0
+2,12c
+27,0
+2,12c
+3a,0
+2,12c
+25,0
+2,12c
+61,0
+12c
+61,0
+2,12c
+60,0
+2,12c
+60,0
+3,12c
+5f,0
+3,12c
+5d,0
+4,12c
+5a,0
+6,12c
+7a2,0
+100 90 32
+40b,0
+b,3e8
+55,0
+4,3e8
+b,0
+4,3e8
+4e,0
+3,3e8
+13,0
+3,3e8
+49,0
+3,3e8
+17,0
+3,3e8
+46,0
+2,3e8
+1b,0
+2,3e8
+43,0
+2,3e8
+1f,0
+2,3e8
+40,0
+3e8
+23,0
+3e8
+3d,0
+2,3e8
+25,0
+2,3e8
+3a,0
+2,3e8
+27,0
+2,3e8
+38,0
+2,3e8
+29,0
+2,3e8
+36,0
+2,3e8
+2b,0
+2,3e8
+35,0
+3e8
+2d,0
+3e8
+34,0
+3e8
+2f,0
+3e8
+32,0
+3e8
+31,0
+3e8
+31,0
+3e8
+31,0
+3e8
+30,0
+3e8
+33,0
+3e8
+2e,0
+2,3e8
+33,0
+2,3e8
+2d,0
+3e8
+35,0
+3e8
+2c,0
+2,3e8
+35,0
+2,3e8
+2b,0
+3e8
+37,0
+3e8
+2b,0
+3e8
+37,0
+3e8
+2a,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+28,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+28,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+29,0
+3e8
+39,0
+3e8
+2a,0
+3e8
+37,0
+3e8
+2b,0
+3e8
+37,0
+3e8
+2b,0
+2,3e8
+35,0
+2,3e8
+2c,0
+3e8
+35,0
+3e8
+2d,0
+2,3e8
+33,0
+2,3e8
+2e,0
+3e8
+33,0
+3e8
+30,0
+3e8
+31,0
+3e8
+31,0
+3e8
+31,0
+3e8
+32,0
+3e8
+2f,0
+3e8
+34,0
+3e8
+2d,0
+3e8
+35,0
+2,3e8
+2b,0
+2,3e8
+36,0
+2,3e8
+29,0
+2,3e8
+38,0
+2,3e8
+27,0
+2,3e8
+3a,0
+2,3e8
+25,0
+2,3e8
+61,0
+3e8
+61,0
+2,3e8
+60,0
+2,3e8
+60,0
+3,3e8
+5f,0
+3,3e8
+5d,0
+4,3e8
+5a,0
+6,3e8
+7a2,0
+100 90 32
+40b,0
+b,111111
+55,0
+4,111111
+b,0
+4,111111
+4e,0
+3,111111
+13,0
+3,111111
+49,0
+3,111111
+17,0
+3,111111
+46,0
+2,111111
+1b,0
+2,111111
+43,0
+2,111111
+1f,0
+2,111111
+40,0
+111111
+23,0
+111111
+3d,0
+2,111111
+25,0
+2,111111
+3a,0
+2,111111
+27,0
+2,111111
+38,0
+2,111111
+29,0
+2,111111
+36,0
+2,111111
+2b,0
+2,111111
+35,0
+111111
+2d,0
+111111
+34,0
+111111
+2f,0
+111111
+32,0
+111111
+31,0
+111111
+31,0
+111111
+31,0
+111111
+30,0
+111111
+33,0
+111111
+2e,0
+2,111111
+33,0
+2,111111
+2d,0
+111111
+35,0
+111111
+2c,0
+2,111111
+35,0
+2,111111
+2b,0
+111111
+37,0
+111111
+2b,0
+111111
+37,0
+111111
+2a,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+28,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+28,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+29,0
+111111
+39,0
+111111
+2a,0
+111111
+37,0
+111111
+2b,0
+111111
+37,0
+111111
+2b,0
+2,111111
+35,0
+2,111111
+2c,0
+111111
+35,0
+111111
+2d,0
+2,111111
+33,0
+2,111111
+2e,0
+111111
+33,0
+111111
+30,0
+111111
+31,0
+111111
+31,0
+111111
+31,0
+111111
+32,0
+111111
+2f,0
+111111
+34,0
+111111
+2d,0
+111111
+35,0
+2,111111
+2b,0
+2,111111
+36,0
+2,111111
+29,0
+2,111111
+38,0
+2,111111
+27,0
+2,111111
+3a,0
+2,111111
+25,0
+2,111111
+61,0
+111111
+61,0
+2,111111
+60,0
+2,111111
+60,0
+3,111111
+5f,0
+3,111111
+5d,0
+4,111111
+5a,0
+6,111111
+7a2,0
+100 90 32
+40b,0
+b,400200
+55,0
+4,400200
+b,0
+4,400200
+4e,0
+3,400200
+13,0
+3,400200
+49,0
+3,400200
+17,0
+3,400200
+46,0
+2,400200
+1b,0
+2,400200
+43,0
+2,400200
+1f,0
+2,400200
+40,0
+400200
+23,0
+400200
+3d,0
+2,400200
+25,0
+2,400200
+3a,0
+2,400200
+27,0
+2,400200
+38,0
+2,400200
+29,0
+2,400200
+36,0
+2,400200
+2b,0
+2,400200
+35,0
+400200
+2d,0
+400200
+34,0
+400200
+2f,0
+400200
+32,0
+400200
+31,0
+400200
+31,0
+400200
+31,0
+400200
+30,0
+400200
+33,0
+400200
+2e,0
+2,400200
+33,0
+2,400200
+2d,0
+400200
+35,0
+400200
+2c,0
+2,400200
+35,0
+2,400200
+2b,0
+400200
+37,0
+400200
+2b,0
+400200
+37,0
+400200
+2a,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+28,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+28,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+29,0
+400200
+39,0
+400200
+2a,0
+400200
+37,0
+400200
+2b,0
+400200
+37,0
+400200
+2b,0
+2,400200
+35,0
+2,400200
+2c,0
+400200
+35,0
+400200
+2d,0
+2,400200
+33,0
+2,400200
+2e,0
+400200
+33,0
+400200
+30,0
+400200
+31,0
+400200
+31,0
+400200
+31,0
+400200
+32,0
+400200
+2f,0
+400200
+34,0
+400200
+2d,0
+400200
+35,0
+2,400200
+2b,0
+2,400200
+36,0
+2,400200
+29,0
+2,400200
+38,0
+2,400200
+27,0
+2,400200
+3a,0
+2,400200
+25,0
+2,400200
+61,0
+400200
+61,0
+2,400200
+60,0
+2,400200
+60,0
+3,400200
+5f,0
+3,400200
+5d,0
+4,400200
+5a,0
+6,400200
+7a2,0
+100 90 32
+40b,0
+b,777777
+55,0
+4,777777
+b,0
+4,777777
+4e,0
+3,777777
+13,0
+3,777777
+49,0
+3,777777
+17,0
+3,777777
+46,0
+2,777777
+1b,0
+2,777777
+43,0
+2,777777
+1f,0
+2,777777
+40,0
+777777
+23,0
+777777
+3d,0
+2,777777
+25,0
+2,777777
+3a,0
+2,777777
+27,0
+2,777777
+38,0
+2,777777
+29,0
+2,777777
+36,0
+2,777777
+2b,0
+2,777777
+35,0
+777777
+2d,0
+777777
+34,0
+777777
+2f,0
+777777
+32,0
+777777
+31,0
+777777
+31,0
+777777
+31,0
+777777
+30,0
+777777
+33,0
+777777
+2e,0
+2,777777
+33,0
+2,777777
+2d,0
+777777
+35,0
+777777
+2c,0
+2,777777
+35,0
+2,777777
+2b,0
+777777
+37,0
+777777
+2b,0
+777777
+37,0
+777777
+2a,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+28,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+28,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+29,0
+777777
+39,0
+777777
+2a,0
+777777
+37,0
+777777
+2b,0
+777777
+37,0
+777777
+2b,0
+2,777777
+35,0
+2,777777
+2c,0
+777777
+35,0
+777777
+2d,0
+2,777777
+33,0
+2,777777
+2e,0
+777777
+33,0
+777777
+30,0
+777777
+31,0
+777777
+31,0
+777777
+31,0
+777777
+32,0
+777777
+2f,0
+777777
+34,0
+777777
+2d,0
+777777
+35,0
+2,777777
+2b,0
+2,777777
+36,0
+2,777777
+29,0
+2,777777
+38,0
+2,777777
+27,0
+2,777777
+3a,0
+2,777777
+25,0
+2,777777
+61,0
+777777
+61,0
+2,777777
+60,0
+2,777777
+60,0
+3,777777
+5f,0
+3,777777
+5d,0
+4,777777
+5a,0
+6,777777
+7a2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a92.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a92.dat
new file mode 100644
index 000000000..66e1ab5be
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a92.dat
@@ -0,0 +1,1593 @@
+! $XConsortium$
+100 90 32
+40b,0
+7,1
+3,0
+1
+55,0
+2,1
+d,0
+2,1
+50,0
+2,1
+14,0
+3,1
+65,0
+1
+47,0
+1
+60,0
+2,1
+1f,0
+1
+41,0
+1
+61,0
+1
+26,0
+2,1
+63,0
+2,1
+38,0
+2,1
+61,0
+2,1
+2b,0
+2,1
+35,0
+1
+2d,0
+1
+c9,0
+1
+c8,0
+1
+2f,0
+1
+33,0
+2,1
+63,0
+1
+2c,0
+2,1
+35,0
+2,1
+2b,0
+1
+63,0
+1
+37,0
+1
+2a,0
+1
+63,0
+1
+39,0
+1
+63,0
+1
+8c,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+63,0
+1
+c6,0
+1
+c7,0
+1
+63,0
+1
+2a,0
+1
+37,0
+1
+2b,0
+1
+63,0
+1
+36,0
+2,1
+2c,0
+1
+35,0
+1
+2d,0
+2,1
+63,0
+1
+33,0
+1
+62,0
+1
+96,0
+1
+2f,0
+1
+34,0
+1
+63,0
+2,1
+63,0
+2,1
+29,0
+2,1
+61,0
+2,1
+3a,0
+2,1
+25,0
+2,1
+61,0
+1
+62,0
+1
+60,0
+2,1
+60,0
+2,1
+11e,0
+6,1
+7a2,0
+100 90 32
+40b,0
+1
+0
+1
+0
+1
+11e,0
+3,1
+17,0
+2,1
+a9,0
+2,1
+1f,0
+2,1
+40,0
+1
+23,0
+1
+3d,0
+2,1
+25,0
+2,1
+63,0
+2,1
+39,0
+1
+29,0
+2,1
+36,0
+2,1
+90,0
+1
+97,0
+1
+31,0
+1
+63,0
+1
+30,0
+1
+33,0
+1
+2e,0
+2,1
+62,0
+1
+35,0
+1
+2c,0
+1
+36,0
+2,1
+2b,0
+1
+9b,0
+1
+64,0
+1
+29,0
+1
+c7,0
+1
+39,0
+1
+64,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+63,0
+1
+c7,0
+1
+c7,0
+1
+62,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+63,0
+1
+39,0
+1
+2a,0
+1
+37,0
+1
+2b,0
+1
+64,0
+1
+35,0
+2,1
+62,0
+1
+2d,0
+1
+98,0
+1
+30,0
+1
+31,0
+1
+63,0
+1
+32,0
+1
+2f,0
+1
+62,0
+1
+35,0
+2,1
+63,0
+2,1
+2a,0
+1
+61,0
+2,1
+3a,0
+2,1
+ea,0
+2,1
+60,0
+1
+c3,0
+3,1
+863,0
+100 90 32
+40f,0
+7,1
+57,0
+2,1
+b,0
+4,1
+50,0
+1
+13,0
+2,1
+4c,0
+1
+17,0
+3,1
+47,0
+1
+c3,0
+1
+23,0
+1
+64,0
+2,1
+9d,0
+2,1
+29,0
+2,1
+63,0
+1
+36,0
+1
+2d,0
+1
+34,0
+1
+2f,0
+1
+64,0
+1
+31,0
+1
+31,0
+1
+64,0
+1
+2f,0
+1
+98,0
+1
+2c,0
+2,1
+c6,0
+1
+37,0
+1
+2a,0
+1
+39,0
+1
+63,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+c6,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+9f,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+63,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+c8,0
+1
+c7,0
+1
+64,0
+1
+c7,0
+2,1
+35,0
+2,1
+2c,0
+1
+98,0
+2,1
+2e,0
+1
+96,0
+1
+31,0
+1
+31,0
+1
+97,0
+1
+2d,0
+1
+36,0
+1
+8e,0
+2,1
+9d,0
+2,1
+25,0
+2,1
+61,0
+1
+61,0
+1
+c5,0
+1
+61,0
+1
+5d,0
+1
+0
+1
+5b,0
+2,1
+7a6,0
+100 90 32
+410,0
+1
+0
+1
+0
+1
+57,0
+1
+10,0
+1
+64,0
+1
+0
+1
+65,0
+1
+47,0
+1
+81,0
+2,1
+40,0
+1
+23,0
+1
+3d,0
+2,1
+25,0
+2,1
+3a,0
+2,1
+c4,0
+2,1
+2b,0
+1
+36,0
+1
+62,0
+1
+62,0
+1
+c6,0
+1
+63,0
+1
+33,0
+2,1
+63,0
+1
+2c,0
+1
+36,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+f0,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+63,0
+1
+3b,0
+1
+c7,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+63,0
+1
+9e,0
+1
+63,0
+1
+29,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+9a,0
+1
+91,0
+2,1
+33,0
+2,1
+2e,0
+1
+33,0
+1
+94,0
+1
+31,0
+1
+32,0
+1
+2f,0
+1
+34,0
+1
+63,0
+2,1
+2c,0
+1
+61,0
+1
+39,0
+1
+28,0
+1
+3b,0
+1
+27,0
+1
+61,0
+1
+61,0
+2,1
+61,0
+1
+61,0
+1
+61,0
+1
+be,0
+2,1
+7a4,0
+100 90 32
+411,0
+5,1
+55,0
+4,1
+b,0
+2,1
+51,0
+2,1
+14,0
+2,1
+49,0
+3,1
+60,0
+2,1
+1c,0
+1
+65,0
+1
+64,0
+1
+3d,0
+1
+27,0
+1
+3b,0
+1
+27,0
+2,1
+38,0
+1
+2a,0
+2,1
+37,0
+1
+2b,0
+2,1
+35,0
+1
+92,0
+1
+64,0
+1
+94,0
+1
+33,0
+1
+92,0
+1
+35,0
+1
+2c,0
+2,1
+35,0
+2,1
+8f,0
+1
+62,0
+1
+63,0
+1
+9d,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+c7,0
+1
+9f,0
+1
+8c,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+c7,0
+1
+62,0
+1
+63,0
+1
+2b,0
+1
+36,0
+1
+63,0
+1
+2d,0
+1
+34,0
+1
+63,0
+1
+30,0
+1
+c8,0
+1
+64,0
+1
+63,0
+1
+2c,0
+2,1
+36,0
+1
+2a,0
+2,1
+38,0
+1
+28,0
+2,1
+3a,0
+2,1
+25,0
+1
+c4,0
+2,1
+60,0
+2,1
+c2,0
+3,1
+5f,0
+2,1
+5a,0
+6,1
+7a2,0
+100 90 32
+40b,0
+2,1
+0
+2,1
+2,0
+4,1
+55,0
+1
+e,0
+3,1
+51,0
+1
+14,0
+1
+4c,0
+1
+60,0
+2,1
+1c,0
+1
+43,0
+2,1
+20,0
+1
+a3,0
+1
+25,0
+1
+3b,0
+1
+62,0
+1
+63,0
+1
+2b,0
+2,1
+63,0
+1
+64,0
+1
+32,0
+1
+95,0
+1
+30,0
+1
+33,0
+1
+2e,0
+2,1
+33,0
+2,1
+91,0
+1
+35,0
+1
+2c,0
+1
+37,0
+1
+2b,0
+1
+62,0
+1
+63,0
+1
+9d,0
+1
+63,0
+1
+28,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+27,0
+1
+c7,0
+1
+c7,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+f0,0
+1
+39,0
+1
+63,0
+1
+62,0
+1
+63,0
+1
+2b,0
+1
+36,0
+1
+63,0
+1
+2d,0
+2,1
+34,0
+1
+2e,0
+1
+15d,0
+1
+62,0
+1
+62,0
+2,1
+c5,0
+1
+3a,0
+2,1
+25,0
+2,1
+61,0
+1
+c3,0
+2,1
+60,0
+3,1
+5f,0
+1
+5f,0
+1
+2,0
+1
+5b,0
+1
+7a6,0
+100 90 32
+40b,0
+1
+0
+1
+0
+1
+11e,0
+3,1
+17,0
+2,1
+a9,0
+2,1
+1f,0
+2,1
+40,0
+1
+23,0
+1
+3d,0
+2,1
+25,0
+2,1
+63,0
+2,1
+39,0
+1
+29,0
+2,1
+36,0
+2,1
+90,0
+1
+97,0
+1
+31,0
+1
+63,0
+1
+30,0
+1
+33,0
+1
+2e,0
+2,1
+62,0
+1
+35,0
+1
+2c,0
+1
+36,0
+2,1
+2b,0
+1
+9b,0
+1
+64,0
+1
+29,0
+1
+c7,0
+1
+39,0
+1
+64,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+63,0
+1
+c7,0
+1
+c7,0
+1
+62,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+63,0
+1
+39,0
+1
+2a,0
+1
+37,0
+1
+2b,0
+1
+64,0
+1
+35,0
+2,1
+62,0
+1
+2d,0
+1
+98,0
+1
+30,0
+1
+31,0
+1
+63,0
+1
+32,0
+1
+2f,0
+1
+62,0
+1
+35,0
+2,1
+63,0
+2,1
+2a,0
+1
+61,0
+2,1
+3a,0
+2,1
+ea,0
+2,1
+60,0
+1
+c3,0
+3,1
+863,0
+100 90 32
+40f,0
+7,1
+57,0
+2,1
+b,0
+4,1
+50,0
+1
+13,0
+2,1
+4c,0
+1
+17,0
+3,1
+47,0
+1
+c3,0
+1
+23,0
+1
+64,0
+2,1
+9d,0
+2,1
+29,0
+2,1
+63,0
+1
+36,0
+1
+2d,0
+1
+34,0
+1
+2f,0
+1
+64,0
+1
+31,0
+1
+31,0
+1
+64,0
+1
+2f,0
+1
+98,0
+1
+2c,0
+2,1
+c6,0
+1
+37,0
+1
+2a,0
+1
+39,0
+1
+63,0
+1
+29,0
+1
+39,0
+1
+29,0
+1
+c6,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+9f,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+63,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+c8,0
+1
+c7,0
+1
+64,0
+1
+c7,0
+2,1
+35,0
+2,1
+2c,0
+1
+98,0
+2,1
+2e,0
+1
+96,0
+1
+31,0
+1
+31,0
+1
+97,0
+1
+2d,0
+1
+36,0
+1
+8e,0
+2,1
+9d,0
+2,1
+25,0
+2,1
+61,0
+1
+61,0
+1
+c5,0
+1
+61,0
+1
+5d,0
+1
+0
+1
+5b,0
+2,1
+7a6,0
+100 90 32
+410,0
+1
+0
+1
+0
+1
+57,0
+1
+10,0
+1
+64,0
+1
+0
+1
+65,0
+1
+47,0
+1
+81,0
+2,1
+40,0
+1
+23,0
+1
+3d,0
+2,1
+25,0
+2,1
+3a,0
+2,1
+c4,0
+2,1
+2b,0
+1
+36,0
+1
+62,0
+1
+62,0
+1
+c6,0
+1
+63,0
+1
+33,0
+2,1
+63,0
+1
+2c,0
+1
+36,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+f0,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+63,0
+1
+3b,0
+1
+c7,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+63,0
+1
+9e,0
+1
+63,0
+1
+29,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+9a,0
+1
+91,0
+2,1
+33,0
+2,1
+2e,0
+1
+33,0
+1
+94,0
+1
+31,0
+1
+32,0
+1
+2f,0
+1
+34,0
+1
+63,0
+2,1
+2c,0
+1
+61,0
+1
+39,0
+1
+28,0
+1
+3b,0
+1
+27,0
+1
+61,0
+1
+61,0
+2,1
+61,0
+1
+61,0
+1
+61,0
+1
+be,0
+2,1
+7a4,0
+100 90 32
+411,0
+5,1
+55,0
+4,1
+b,0
+2,1
+51,0
+2,1
+14,0
+2,1
+49,0
+3,1
+60,0
+2,1
+1c,0
+1
+65,0
+1
+64,0
+1
+3d,0
+1
+27,0
+1
+3b,0
+1
+27,0
+2,1
+38,0
+1
+2a,0
+2,1
+37,0
+1
+2b,0
+2,1
+35,0
+1
+92,0
+1
+64,0
+1
+94,0
+1
+33,0
+1
+92,0
+1
+35,0
+1
+2c,0
+2,1
+35,0
+2,1
+8f,0
+1
+62,0
+1
+63,0
+1
+9d,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+c7,0
+1
+9f,0
+1
+8c,0
+1
+39,0
+1
+29,0
+1
+39,0
+1
+c7,0
+1
+62,0
+1
+63,0
+1
+2b,0
+1
+36,0
+1
+63,0
+1
+2d,0
+1
+34,0
+1
+63,0
+1
+30,0
+1
+c8,0
+1
+64,0
+1
+63,0
+1
+2c,0
+2,1
+36,0
+1
+2a,0
+2,1
+38,0
+1
+28,0
+2,1
+3a,0
+2,1
+25,0
+1
+c4,0
+2,1
+60,0
+2,1
+c2,0
+3,1
+5f,0
+2,1
+5a,0
+6,1
+7a2,0
+100 90 32
+40b,0
+2,1
+0
+2,1
+2,0
+4,1
+55,0
+1
+e,0
+3,1
+51,0
+1
+14,0
+1
+4c,0
+1
+60,0
+2,1
+1c,0
+1
+43,0
+2,1
+20,0
+1
+a3,0
+1
+25,0
+1
+3b,0
+1
+62,0
+1
+63,0
+1
+2b,0
+2,1
+63,0
+1
+64,0
+1
+32,0
+1
+95,0
+1
+30,0
+1
+33,0
+1
+2e,0
+2,1
+33,0
+2,1
+91,0
+1
+35,0
+1
+2c,0
+1
+37,0
+1
+2b,0
+1
+62,0
+1
+63,0
+1
+9d,0
+1
+63,0
+1
+28,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+27,0
+1
+c7,0
+1
+c7,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+f0,0
+1
+39,0
+1
+63,0
+1
+62,0
+1
+63,0
+1
+2b,0
+1
+36,0
+1
+63,0
+1
+2d,0
+2,1
+34,0
+1
+2e,0
+1
+15d,0
+1
+62,0
+1
+62,0
+2,1
+c5,0
+1
+3a,0
+2,1
+25,0
+2,1
+61,0
+1
+c3,0
+2,1
+60,0
+3,1
+5f,0
+1
+5f,0
+1
+2,0
+1
+5b,0
+1
+7a6,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a93.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a93.dat
new file mode 100644
index 000000000..1f619f7fe
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a93.dat
@@ -0,0 +1,3091 @@
+! $XConsortium$
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+1984,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+1983,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+1984,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+1983,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+1984,0
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+1920,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+191f,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+1920,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+191f,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+1920,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+1983,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+1984,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+1983,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+1984,0
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+1920,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+191f,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+1920,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+3a,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+2,1
+191f,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+1920,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a94.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a94.dat
new file mode 100644
index 000000000..1de9c83ee
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a94.dat
@@ -0,0 +1,57 @@
+! $XConsortium$
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+2,1
+1b13,0
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+2,1
+1b13,0
+100 90 32
+7e4,0
+31,1
+1b13,0
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+2,1
+1b13,0
+100 90 32
+7e4,0
+31,1
+1b13,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/a95.dat b/xc/test/xsuite/xtest/tset/CH06/drwarc/a95.dat
new file mode 100644
index 000000000..4727c50e7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/a95.dat
@@ -0,0 +1,11 @@
+! $XConsortium$
+100 90 32
+7e4,0
+8,1
+8,0
+8,1
+8,0
+8,1
+8,0
+1
+1b13,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarc/drwarc.m b/xc/test/xsuite/xtest/tset/CH06/drwarc/drwarc.m
new file mode 100644
index 000000000..91f8b9829
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarc/drwarc.m
@@ -0,0 +1,411 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawArc CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+int x = 10;
+int y = 10;
+unsigned int width = 60;
+unsigned int height = 60;
+int angle1 = DEG(270);
+int angle2 = DEG(321);
+>>EXTERN
+#define DEG(n) (n*64) /* Convert from degrees to units used by call */
+
+/*
+ * This will draw a straight line for horizontal and vertical lines
+ * for other lines, draw a hor line using the horizontal extent.
+ */
+static void
+drawline(ax1, ay1, ax2, ay2)
+int ax1, ay1, ax2, ay2;
+{
+int negw = 0;
+int negh = 0;
+int pass = 0, fail = 0;
+
+ x = ax1; y = ay1;
+
+ if (ax2 > ax1) {
+ width = ax2-ax1;
+ } else {
+ width = ax1-ax2;
+ x -= width;
+ negw = 1;
+ }
+ if (ay2 > ay1) {
+ height = ay2-ay1;
+ } else {
+ height = ay1-ay2;
+ y -= height;
+ negh = 1;
+ }
+
+ if (width == 0) {
+ /* Vertical line */
+ if (negh) {
+ angle1 = DEG(270);
+ angle2 = DEG(180);
+ } else {
+ angle1 = DEG(90);
+ angle2 = DEG(180);
+ }
+ } else if (height == 0) {
+ /* Horizontal line */
+ if (negw) {
+ angle1 = DEG(0);
+ angle2 = DEG(180);
+ } else {
+ angle1 = DEG(180);
+ angle2 = DEG(180);
+ }
+ } else {
+ /* Horizontal line */
+ if (negw) {
+ angle1 = DEG(0);
+ angle2 = DEG(180);
+ } else {
+ angle1 = DEG(180);
+ angle2 = DEG(180);
+ }
+ height = 0;
+ }
+
+ XCALL;
+}
+
+static void
+setfordash()
+{
+ x = 20; y = 20;
+ width = 49; height = 0;
+ angle1 = DEG(180);
+ angle2 = DEG(180);
+}
+>>ASSERTION Good A
+A call to xname draws a single circular or elliptical arc in the drawable
+.A d
+as specified by
+.A x ,
+.A y ,
+.A width ,
+.A height ,
+.A angle1
+and
+.A angle2 .
+>>STRATEGY
+Draw simple arc.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION def
+The centre of the circle or ellipse is the centre of the specified rectangle,
+with top left corner at
+.A x
+and
+.A y
+and the major and minor axes are specified by the rectangle's
+.A width
+and
+.A height .
+>>ASSERTION def COM
+The start of the arc is specified by the
+.A angle1
+argument, in units of degrees * 64, relative to the three -o'clock
+position from the centre.
+>>ASSERTION def COM
+The path and extent of the arc relative to the
+start of the arc is specified by the
+.A angle2
+argument, in units of degrees * 64.
+>>ASSERTION Good A
+When the angles are positive,
+then a call to xname draws the arc in the counterclockwise direction.
+>>STRATEGY
+Draw arc with positive angle2.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ angle2 = DEG(30);
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+When the angles are negative,
+then a call to xname draws the arc in the clockwise direction.
+>>STRATEGY
+Draw arc with negative angle2.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ angle2 = DEG(-30);
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+When the magnitude of angle2 is greater than 360 degrees,
+then it is truncated to 360 degrees.
+>>STRATEGY
+Set function to GXxor.
+Draw arc with angle2 equal to 400 degrees.
+Check result is same as angle2 equal to 360 degrees.
+>>CODE
+XVisualInfo *vp;
+XImage *sav;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ angle2 = DEG(360);
+ XCALL;
+ sav = savimage(display, d);
+ dclear(display, d);
+
+ XSetFunction(display, gc, GXxor);
+ angle2 = DEG(400);
+ XCALL;
+
+ if (compsavimage(display, d, sav))
+ CHECK;
+ else {
+ report("angle2 was not truncated to 360");
+ FAIL;
+ }
+
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION def COM
+An arc specified as %[ ~x, ~y, ~width , ~height, ~angle1, ~angle2 ]%,
+has the origin of the major and minor axes at
+% [ x +^ {width over 2} , ~y +^ {height over 2} ]%,
+the infinitely thin path describing the entire circle or ellipse
+intersects the horizontal axis at % [ x, ~y +^ {height over 2} ]% and
+% [ x +^ width , ~y +^ { height over 2 }] %
+and the path intersects the vertical axis
+at % [ x +^ { width over 2 } , ~y ]% and
+% [ x +^ { width over 2 }, ~y +^ height ]%.
+>>ASSERTION def COM
+When a wide line with line-width lw is used in a call to xname,
+then the bounding outlines for filling are given
+by the two infinitely thin paths consisting of all points whose perpendicular
+distance from the path of the circle/ellipse is equal to lw/2.
+>># NOTE kieron Arc definition will change soon, so defer.
+>>ASSERTION def COM
+The
+.M cap_style
+>>#and
+>>#.M join_style
+is applied the same as for a line corresponding to the tangent of the
+circle/ellipse at the endpoint.
+>>ASSERTION def COM
+On a call to xname the angles are interpreted
+in the effectively skewed coordinate system of the ellipse.
+>>ASSERTION Good A
+A call to xname does not draw a pixel more than once.
+>>STRATEGY
+Set gc function to GXcopy.
+Call XDrawArc.
+Set gc function to GXxor.
+Call XDrawArc.
+Verify that the result is the same in both cases.
+>>CODE
+XVisualInfo *vp;
+XImage *sav;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+ sav = savimage(display, d);
+ dclear(display, d);
+
+ XSetFunction(display, gc, GXxor);
+ XCALL;
+ if (compsavimage(display, d, sav))
+ CHECK;
+ else {
+ report("A Pixel was drawn more than once");
+ FAIL;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When an arc is drawn with one endpoint and a clockwise extent
+and another with the other endpoint and an equivalent counterclockwise extent,
+then a call to xname draws the same pixels in each case.
+>>STRATEGY
+Draw arc and save result.
+Draw arc in oposite direction.
+Verify that result is the same.
+>>CODE
+XVisualInfo *vp;
+XImage *sav;
+int savang1;
+int savang2;
+
+ savang1 = angle1;
+ savang2 = angle2;
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ angle1 = savang1;
+ angle2 = savang2;
+
+ XCALL;
+ sav = savimage(display, d);
+ dclear(display, d);
+
+ /* Reverse direction */
+ angle1 += angle2;
+ if (angle1 > DEG(360))
+ angle1 -= DEG(360);
+ angle2 = -angle2;
+
+ XCALL;
+
+ if (compsavimage(display, d, sav))
+ CHECK;
+ else {
+ report("Drawing same arc backwards did not draw same pixels");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+When either axis is zero, then a call to xname draws a horizontal or vertical
+line.
+>>STRATEGY
+Draw arc with width zero.
+Verify directly that the pixels drawn form a vertical line.
+Draw arc with height zero.
+Verify directly that the pixels drawn form a horizontal line.
+>>CODE
+XVisualInfo *vp;
+struct area area;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ width = 0;
+ height = 30;
+ setarea(&area, x, y, 1, height);
+ XCALL;
+
+ if (checkarea(display, d, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("A straight line was not drawn when the arc had width 0");
+ FAIL;
+ }
+
+ width = 30;
+ height = 0;
+ setarea(&area, x, y, width, 1);
+ dclear(display, d);
+ XCALL;
+
+ if (checkarea(display, d, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("A straight line was not drawn when the arc had height 0");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(2*nvinf());
+>>ASSERTION def COM
+Angles are computed based solely on the coordinate system and ignore the
+aspect ratio.
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M line-width ,
+.M line-style ,
+.M cap-style ,
+>># This can not be right?
+>># .M join-style ,
+.M fill-style ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin ,
+.M tile-stipple-y-origin ,
+.M dash-offset
+and
+.M dash-list
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
+>># HISTORY steve Removed references to join-style.
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a1.dat
new file mode 100644
index 000000000..1ef7671bf
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a1.dat
@@ -0,0 +1,579 @@
+! $XConsortium$
+100 90 32
+21b,0
+d,1
+53,0
+4,1
+d,0
+4,1
+4b,0
+4,1
+15,0
+4,1
+45,0
+3,1
+1b,0
+3,1
+41,0
+2,1
+21,0
+2,1
+3d,0
+2,1
+25,0
+2,1
+39,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+34,0
+1
+2f,0
+1
+31,0
+2,1
+13,0
+4,1
+1a,0
+2,1
+2e,0
+2,1
+10,0
+4,1
+1f,0
+2,1
+2c,0
+2,1
+e,0
+3,1
+9,0
+6,1
+15,0
+2,1
+2a,0
+2,1
+d,0
+3,1
+11,0
+5,1
+11,0
+2,1
+28,0
+2,1
+d,0
+2,1
+18,0
+3,1
+f,0
+2,1
+26,0
+2,1
+c,0
+2,1
+1c,0
+3,1
+e,0
+2,1
+25,0
+1
+c,0
+1
+21,0
+2,1
+d,0
+1
+24,0
+1
+b,0
+2,1
+24,0
+1
+d,0
+1
+22,0
+1
+b,0
+2,1
+26,0
+2,1
+c,0
+1
+20,0
+2,1
+a,0
+2,1
+29,0
+1
+b,0
+2,1
+1f,0
+1
+a,0
+2,1
+f,0
+3,1
+19,0
+2,1
+a,0
+1
+1e,0
+1
+b,0
+1
+2d,0
+2,1
+a,0
+1
+1d,0
+1
+a,0
+1
+2f,0
+1
+a,0
+1
+1c,0
+1
+a,0
+1
+3c,0
+1
+1b,0
+1
+a,0
+1
+3c,0
+1
+1a,0
+1
+a,0
+1
+3e,0
+1
+19,0
+1
+9,0
+2,1
+3e,0
+1
+18,0
+2,1
+9,0
+1
+3f,0
+2,1
+17,0
+1
+9,0
+2,1
+40,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+16,0
+1
+9,0
+1
+1b,0
+d,1
+1b,0
+1
+15,0
+1
+9,0
+1
+17,0
+4,1
+d,0
+4,1
+17,0
+1
+15,0
+1
+9,0
+1
+14,0
+3,1
+15,0
+3,1
+14,0
+1
+15,0
+1
+9,0
+1
+13,0
+2,1
+19,0
+2,1
+13,0
+1
+14,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+1d,0
+b,1
+1d,0
+1
+13,0
+1
+9,0
+1
+1a,0
+3,1
+b,0
+3,1
+1a,0
+1
+13,0
+1
+9,0
+1
+17,0
+3,1
+11,0
+3,1
+17,0
+1
+13,0
+1
+9,0
+1
+16,0
+2,1
+15,0
+2,1
+16,0
+1
+13,0
+1
+9,0
+1
+14,0
+2,1
+19,0
+2,1
+14,0
+1
+13,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+a,0
+1
+11,0
+1
+1f,0
+1
+12,0
+1
+13,0
+1
+a,0
+1
+10,0
+1
+21,0
+1
+11,0
+1
+14,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+16,0
+1
+9,0
+2,1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+2,1
+a,0
+1
+27,0
+1
+c,0
+1
+17,0
+2,1
+a,0
+1
+a,0
+1
+27,0
+1
+b,0
+2,1
+18,0
+1
+b,0
+1
+9,0
+1
+27,0
+1
+b,0
+1
+19,0
+1
+15,0
+1
+27,0
+1
+b,0
+1
+1a,0
+1
+14,0
+1
+27,0
+1
+a,0
+1
+1b,0
+1
+15,0
+1
+25,0
+1
+b,0
+1
+1c,0
+1
+14,0
+1
+25,0
+1
+a,0
+1
+1d,0
+1
+15,0
+1
+23,0
+1
+b,0
+1
+1e,0
+1
+14,0
+1
+23,0
+1
+a,0
+1
+1f,0
+2,1
+14,0
+1
+21,0
+1
+a,0
+2,1
+20,0
+1
+15,0
+1
+1f,0
+1
+b,0
+1
+22,0
+1
+15,0
+1
+1d,0
+1
+b,0
+1
+24,0
+1
+15,0
+2,1
+19,0
+2,1
+b,0
+1
+25,0
+2,1
+16,0
+2,1
+15,0
+2,1
+c,0
+2,1
+26,0
+2,1
+16,0
+3,1
+11,0
+3,1
+c,0
+2,1
+28,0
+2,1
+18,0
+3,1
+b,0
+3,1
+e,0
+2,1
+2a,0
+2,1
+1a,0
+b,1
+10,0
+2,1
+2c,0
+2,1
+33,0
+2,1
+2e,0
+2,1
+31,0
+2,1
+31,0
+1
+2f,0
+1
+34,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+39,0
+2,1
+25,0
+2,1
+3d,0
+2,1
+21,0
+2,1
+41,0
+3,1
+1b,0
+3,1
+45,0
+4,1
+15,0
+4,1
+4b,0
+4,1
+d,0
+4,1
+53,0
+d,1
+1c0,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a100.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a100.dat
new file mode 100644
index 000000000..af3cf7f85
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a100.dat
@@ -0,0 +1,19655 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+21b,0
+d,1
+53,0
+4,1
+d,0
+4,1
+4b,0
+4,1
+15,0
+4,1
+45,0
+3,1
+1b,0
+3,1
+41,0
+2,1
+21,0
+2,1
+3d,0
+2,1
+25,0
+2,1
+39,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+34,0
+1
+2f,0
+1
+31,0
+2,1
+13,0
+4,1
+1a,0
+2,1
+2e,0
+2,1
+10,0
+4,1
+1f,0
+2,1
+2c,0
+2,1
+e,0
+3,1
+9,0
+6,1
+15,0
+2,1
+2a,0
+2,1
+d,0
+3,1
+11,0
+5,1
+11,0
+2,1
+28,0
+2,1
+d,0
+2,1
+18,0
+3,1
+f,0
+2,1
+26,0
+2,1
+c,0
+2,1
+1c,0
+3,1
+e,0
+2,1
+25,0
+1
+c,0
+1
+21,0
+2,1
+d,0
+1
+24,0
+1
+b,0
+2,1
+24,0
+1
+d,0
+1
+22,0
+1
+b,0
+2,1
+26,0
+2,1
+c,0
+1
+20,0
+2,1
+a,0
+2,1
+29,0
+1
+b,0
+2,1
+1f,0
+1
+a,0
+2,1
+f,0
+3,1
+19,0
+2,1
+a,0
+1
+1e,0
+1
+b,0
+1
+2d,0
+2,1
+a,0
+1
+1d,0
+1
+a,0
+1
+2f,0
+1
+a,0
+1
+1c,0
+1
+a,0
+1
+3c,0
+1
+1b,0
+1
+a,0
+1
+3c,0
+1
+1a,0
+1
+a,0
+1
+3e,0
+1
+19,0
+1
+9,0
+2,1
+3e,0
+1
+18,0
+2,1
+9,0
+1
+3f,0
+2,1
+17,0
+1
+9,0
+2,1
+40,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+16,0
+1
+9,0
+1
+1b,0
+d,1
+1b,0
+1
+15,0
+1
+9,0
+1
+17,0
+4,1
+d,0
+4,1
+17,0
+1
+15,0
+1
+9,0
+1
+14,0
+3,1
+15,0
+3,1
+14,0
+1
+15,0
+1
+9,0
+1
+13,0
+2,1
+19,0
+2,1
+13,0
+1
+14,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+1d,0
+b,1
+1d,0
+1
+13,0
+1
+9,0
+1
+1a,0
+3,1
+b,0
+3,1
+1a,0
+1
+13,0
+1
+9,0
+1
+17,0
+3,1
+11,0
+3,1
+17,0
+1
+13,0
+1
+9,0
+1
+16,0
+2,1
+15,0
+2,1
+16,0
+1
+13,0
+1
+9,0
+1
+14,0
+2,1
+19,0
+2,1
+14,0
+1
+13,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+a,0
+1
+11,0
+1
+1f,0
+1
+12,0
+1
+13,0
+1
+a,0
+1
+10,0
+1
+21,0
+1
+11,0
+1
+14,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+16,0
+1
+9,0
+2,1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+2,1
+a,0
+1
+27,0
+1
+c,0
+1
+17,0
+2,1
+a,0
+1
+a,0
+1
+27,0
+1
+b,0
+2,1
+18,0
+1
+b,0
+1
+9,0
+1
+27,0
+1
+b,0
+1
+19,0
+1
+15,0
+1
+27,0
+1
+b,0
+1
+1a,0
+1
+14,0
+1
+27,0
+1
+a,0
+1
+1b,0
+1
+15,0
+1
+25,0
+1
+b,0
+1
+1c,0
+1
+14,0
+1
+25,0
+1
+a,0
+1
+1d,0
+1
+15,0
+1
+23,0
+1
+b,0
+1
+1e,0
+1
+14,0
+1
+23,0
+1
+a,0
+1
+1f,0
+2,1
+14,0
+1
+21,0
+1
+a,0
+2,1
+20,0
+1
+15,0
+1
+1f,0
+1
+b,0
+1
+22,0
+1
+15,0
+1
+1d,0
+1
+b,0
+1
+24,0
+1
+15,0
+2,1
+19,0
+2,1
+b,0
+1
+25,0
+2,1
+16,0
+2,1
+15,0
+2,1
+c,0
+2,1
+26,0
+2,1
+16,0
+3,1
+11,0
+3,1
+c,0
+2,1
+28,0
+2,1
+18,0
+3,1
+b,0
+3,1
+e,0
+2,1
+2a,0
+2,1
+1a,0
+b,1
+10,0
+2,1
+2c,0
+2,1
+33,0
+2,1
+2e,0
+2,1
+31,0
+2,1
+31,0
+1
+2f,0
+1
+34,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+39,0
+2,1
+25,0
+2,1
+3d,0
+2,1
+21,0
+2,1
+41,0
+3,1
+1b,0
+3,1
+45,0
+4,1
+15,0
+4,1
+4b,0
+4,1
+d,0
+4,1
+53,0
+d,1
+1c0,0
+100 90 32
+21b,0
+d,2
+53,0
+4,2
+d,0
+4,2
+4b,0
+4,2
+15,0
+4,2
+45,0
+3,2
+1b,0
+3,2
+41,0
+2,2
+21,0
+2,2
+3d,0
+2,2
+25,0
+2,2
+39,0
+2,2
+29,0
+2,2
+36,0
+2,2
+2b,0
+2,2
+34,0
+2
+2f,0
+2
+31,0
+2,2
+13,0
+4,2
+1a,0
+2,2
+2e,0
+2,2
+10,0
+4,2
+1f,0
+2,2
+2c,0
+2,2
+e,0
+3,2
+9,0
+6,2
+15,0
+2,2
+2a,0
+2,2
+d,0
+3,2
+11,0
+5,2
+11,0
+2,2
+28,0
+2,2
+d,0
+2,2
+18,0
+3,2
+f,0
+2,2
+26,0
+2,2
+c,0
+2,2
+1c,0
+3,2
+e,0
+2,2
+25,0
+2
+c,0
+2
+21,0
+2,2
+d,0
+2
+24,0
+2
+b,0
+2,2
+24,0
+2
+d,0
+2
+22,0
+2
+b,0
+2,2
+26,0
+2,2
+c,0
+2
+20,0
+2,2
+a,0
+2,2
+29,0
+2
+b,0
+2,2
+1f,0
+2
+a,0
+2,2
+f,0
+3,2
+19,0
+2,2
+a,0
+2
+1e,0
+2
+b,0
+2
+2d,0
+2,2
+a,0
+2
+1d,0
+2
+a,0
+2
+2f,0
+2
+a,0
+2
+1c,0
+2
+a,0
+2
+3c,0
+2
+1b,0
+2
+a,0
+2
+3c,0
+2
+1a,0
+2
+a,0
+2
+3e,0
+2
+19,0
+2
+9,0
+2,2
+3e,0
+2
+18,0
+2,2
+9,0
+2
+3f,0
+2,2
+17,0
+2
+9,0
+2,2
+40,0
+2
+17,0
+2
+9,0
+2
+41,0
+2
+17,0
+2
+9,0
+2
+41,0
+2
+16,0
+2
+9,0
+2
+1b,0
+d,2
+1b,0
+2
+15,0
+2
+9,0
+2
+17,0
+4,2
+d,0
+4,2
+17,0
+2
+15,0
+2
+9,0
+2
+14,0
+3,2
+15,0
+3,2
+14,0
+2
+15,0
+2
+9,0
+2
+13,0
+2,2
+19,0
+2,2
+13,0
+2
+14,0
+2
+9,0
+2
+13,0
+2
+1d,0
+2
+13,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+1d,0
+b,2
+1d,0
+2
+13,0
+2
+9,0
+2
+1a,0
+3,2
+b,0
+3,2
+1a,0
+2
+13,0
+2
+9,0
+2
+17,0
+3,2
+11,0
+3,2
+17,0
+2
+13,0
+2
+9,0
+2
+16,0
+2,2
+15,0
+2,2
+16,0
+2
+13,0
+2
+9,0
+2
+14,0
+2,2
+19,0
+2,2
+14,0
+2
+13,0
+2
+9,0
+2
+13,0
+2
+1d,0
+2
+13,0
+2
+13,0
+2
+a,0
+2
+11,0
+2
+1f,0
+2
+12,0
+2
+13,0
+2
+a,0
+2
+10,0
+2
+21,0
+2
+11,0
+2
+14,0
+2
+9,0
+2
+f,0
+2
+23,0
+2
+f,0
+2
+15,0
+2
+9,0
+2
+f,0
+2
+23,0
+2
+f,0
+2
+15,0
+2
+a,0
+2
+d,0
+2
+25,0
+2
+e,0
+2
+15,0
+2
+a,0
+2
+d,0
+2
+25,0
+2
+e,0
+2
+16,0
+2
+9,0
+2,2
+b,0
+2
+27,0
+2
+c,0
+2
+17,0
+2
+a,0
+2
+b,0
+2
+27,0
+2
+c,0
+2
+17,0
+2
+a,0
+2,2
+a,0
+2
+27,0
+2
+c,0
+2
+17,0
+2,2
+a,0
+2
+a,0
+2
+27,0
+2
+b,0
+2,2
+18,0
+2
+b,0
+2
+9,0
+2
+27,0
+2
+b,0
+2
+19,0
+2
+15,0
+2
+27,0
+2
+b,0
+2
+1a,0
+2
+14,0
+2
+27,0
+2
+a,0
+2
+1b,0
+2
+15,0
+2
+25,0
+2
+b,0
+2
+1c,0
+2
+14,0
+2
+25,0
+2
+a,0
+2
+1d,0
+2
+15,0
+2
+23,0
+2
+b,0
+2
+1e,0
+2
+14,0
+2
+23,0
+2
+a,0
+2
+1f,0
+2,2
+14,0
+2
+21,0
+2
+a,0
+2,2
+20,0
+2
+15,0
+2
+1f,0
+2
+b,0
+2
+22,0
+2
+15,0
+2
+1d,0
+2
+b,0
+2
+24,0
+2
+15,0
+2,2
+19,0
+2,2
+b,0
+2
+25,0
+2,2
+16,0
+2,2
+15,0
+2,2
+c,0
+2,2
+26,0
+2,2
+16,0
+3,2
+11,0
+3,2
+c,0
+2,2
+28,0
+2,2
+18,0
+3,2
+b,0
+3,2
+e,0
+2,2
+2a,0
+2,2
+1a,0
+b,2
+10,0
+2,2
+2c,0
+2,2
+33,0
+2,2
+2e,0
+2,2
+31,0
+2,2
+31,0
+2
+2f,0
+2
+34,0
+2,2
+2b,0
+2,2
+36,0
+2,2
+29,0
+2,2
+39,0
+2,2
+25,0
+2,2
+3d,0
+2,2
+21,0
+2,2
+41,0
+3,2
+1b,0
+3,2
+45,0
+4,2
+15,0
+4,2
+4b,0
+4,2
+d,0
+4,2
+53,0
+d,2
+1c0,0
+100 90 32
+21b,0
+d,3
+53,0
+4,3
+d,0
+4,3
+4b,0
+4,3
+15,0
+4,3
+45,0
+3,3
+1b,0
+3,3
+41,0
+2,3
+21,0
+2,3
+3d,0
+2,3
+25,0
+2,3
+39,0
+2,3
+29,0
+2,3
+36,0
+2,3
+2b,0
+2,3
+34,0
+3
+2f,0
+3
+31,0
+2,3
+13,0
+4,3
+1a,0
+2,3
+2e,0
+2,3
+10,0
+4,3
+1f,0
+2,3
+2c,0
+2,3
+e,0
+3,3
+9,0
+6,3
+15,0
+2,3
+2a,0
+2,3
+d,0
+3,3
+11,0
+5,3
+11,0
+2,3
+28,0
+2,3
+d,0
+2,3
+18,0
+3,3
+f,0
+2,3
+26,0
+2,3
+c,0
+2,3
+1c,0
+3,3
+e,0
+2,3
+25,0
+3
+c,0
+3
+21,0
+2,3
+d,0
+3
+24,0
+3
+b,0
+2,3
+24,0
+3
+d,0
+3
+22,0
+3
+b,0
+2,3
+26,0
+2,3
+c,0
+3
+20,0
+2,3
+a,0
+2,3
+29,0
+3
+b,0
+2,3
+1f,0
+3
+a,0
+2,3
+f,0
+3,3
+19,0
+2,3
+a,0
+3
+1e,0
+3
+b,0
+3
+2d,0
+2,3
+a,0
+3
+1d,0
+3
+a,0
+3
+2f,0
+3
+a,0
+3
+1c,0
+3
+a,0
+3
+3c,0
+3
+1b,0
+3
+a,0
+3
+3c,0
+3
+1a,0
+3
+a,0
+3
+3e,0
+3
+19,0
+3
+9,0
+2,3
+3e,0
+3
+18,0
+2,3
+9,0
+3
+3f,0
+2,3
+17,0
+3
+9,0
+2,3
+40,0
+3
+17,0
+3
+9,0
+3
+41,0
+3
+17,0
+3
+9,0
+3
+41,0
+3
+16,0
+3
+9,0
+3
+1b,0
+d,3
+1b,0
+3
+15,0
+3
+9,0
+3
+17,0
+4,3
+d,0
+4,3
+17,0
+3
+15,0
+3
+9,0
+3
+14,0
+3,3
+15,0
+3,3
+14,0
+3
+15,0
+3
+9,0
+3
+13,0
+2,3
+19,0
+2,3
+13,0
+3
+14,0
+3
+9,0
+3
+13,0
+3
+1d,0
+3
+13,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+1d,0
+b,3
+1d,0
+3
+13,0
+3
+9,0
+3
+1a,0
+3,3
+b,0
+3,3
+1a,0
+3
+13,0
+3
+9,0
+3
+17,0
+3,3
+11,0
+3,3
+17,0
+3
+13,0
+3
+9,0
+3
+16,0
+2,3
+15,0
+2,3
+16,0
+3
+13,0
+3
+9,0
+3
+14,0
+2,3
+19,0
+2,3
+14,0
+3
+13,0
+3
+9,0
+3
+13,0
+3
+1d,0
+3
+13,0
+3
+13,0
+3
+a,0
+3
+11,0
+3
+1f,0
+3
+12,0
+3
+13,0
+3
+a,0
+3
+10,0
+3
+21,0
+3
+11,0
+3
+14,0
+3
+9,0
+3
+f,0
+3
+23,0
+3
+f,0
+3
+15,0
+3
+9,0
+3
+f,0
+3
+23,0
+3
+f,0
+3
+15,0
+3
+a,0
+3
+d,0
+3
+25,0
+3
+e,0
+3
+15,0
+3
+a,0
+3
+d,0
+3
+25,0
+3
+e,0
+3
+16,0
+3
+9,0
+2,3
+b,0
+3
+27,0
+3
+c,0
+3
+17,0
+3
+a,0
+3
+b,0
+3
+27,0
+3
+c,0
+3
+17,0
+3
+a,0
+2,3
+a,0
+3
+27,0
+3
+c,0
+3
+17,0
+2,3
+a,0
+3
+a,0
+3
+27,0
+3
+b,0
+2,3
+18,0
+3
+b,0
+3
+9,0
+3
+27,0
+3
+b,0
+3
+19,0
+3
+15,0
+3
+27,0
+3
+b,0
+3
+1a,0
+3
+14,0
+3
+27,0
+3
+a,0
+3
+1b,0
+3
+15,0
+3
+25,0
+3
+b,0
+3
+1c,0
+3
+14,0
+3
+25,0
+3
+a,0
+3
+1d,0
+3
+15,0
+3
+23,0
+3
+b,0
+3
+1e,0
+3
+14,0
+3
+23,0
+3
+a,0
+3
+1f,0
+2,3
+14,0
+3
+21,0
+3
+a,0
+2,3
+20,0
+3
+15,0
+3
+1f,0
+3
+b,0
+3
+22,0
+3
+15,0
+3
+1d,0
+3
+b,0
+3
+24,0
+3
+15,0
+2,3
+19,0
+2,3
+b,0
+3
+25,0
+2,3
+16,0
+2,3
+15,0
+2,3
+c,0
+2,3
+26,0
+2,3
+16,0
+3,3
+11,0
+3,3
+c,0
+2,3
+28,0
+2,3
+18,0
+3,3
+b,0
+3,3
+e,0
+2,3
+2a,0
+2,3
+1a,0
+b,3
+10,0
+2,3
+2c,0
+2,3
+33,0
+2,3
+2e,0
+2,3
+31,0
+2,3
+31,0
+3
+2f,0
+3
+34,0
+2,3
+2b,0
+2,3
+36,0
+2,3
+29,0
+2,3
+39,0
+2,3
+25,0
+2,3
+3d,0
+2,3
+21,0
+2,3
+41,0
+3,3
+1b,0
+3,3
+45,0
+4,3
+15,0
+4,3
+4b,0
+4,3
+d,0
+4,3
+53,0
+d,3
+1c0,0
+100 90 32
+21b,0
+d,4
+53,0
+4,4
+d,0
+4,4
+4b,0
+4,4
+15,0
+4,4
+45,0
+3,4
+1b,0
+3,4
+41,0
+2,4
+21,0
+2,4
+3d,0
+2,4
+25,0
+2,4
+39,0
+2,4
+29,0
+2,4
+36,0
+2,4
+2b,0
+2,4
+34,0
+4
+2f,0
+4
+31,0
+2,4
+13,0
+4,4
+1a,0
+2,4
+2e,0
+2,4
+10,0
+4,4
+1f,0
+2,4
+2c,0
+2,4
+e,0
+3,4
+9,0
+6,4
+15,0
+2,4
+2a,0
+2,4
+d,0
+3,4
+11,0
+5,4
+11,0
+2,4
+28,0
+2,4
+d,0
+2,4
+18,0
+3,4
+f,0
+2,4
+26,0
+2,4
+c,0
+2,4
+1c,0
+3,4
+e,0
+2,4
+25,0
+4
+c,0
+4
+21,0
+2,4
+d,0
+4
+24,0
+4
+b,0
+2,4
+24,0
+4
+d,0
+4
+22,0
+4
+b,0
+2,4
+26,0
+2,4
+c,0
+4
+20,0
+2,4
+a,0
+2,4
+29,0
+4
+b,0
+2,4
+1f,0
+4
+a,0
+2,4
+f,0
+3,4
+19,0
+2,4
+a,0
+4
+1e,0
+4
+b,0
+4
+2d,0
+2,4
+a,0
+4
+1d,0
+4
+a,0
+4
+2f,0
+4
+a,0
+4
+1c,0
+4
+a,0
+4
+3c,0
+4
+1b,0
+4
+a,0
+4
+3c,0
+4
+1a,0
+4
+a,0
+4
+3e,0
+4
+19,0
+4
+9,0
+2,4
+3e,0
+4
+18,0
+2,4
+9,0
+4
+3f,0
+2,4
+17,0
+4
+9,0
+2,4
+40,0
+4
+17,0
+4
+9,0
+4
+41,0
+4
+17,0
+4
+9,0
+4
+41,0
+4
+16,0
+4
+9,0
+4
+1b,0
+d,4
+1b,0
+4
+15,0
+4
+9,0
+4
+17,0
+4,4
+d,0
+4,4
+17,0
+4
+15,0
+4
+9,0
+4
+14,0
+3,4
+15,0
+3,4
+14,0
+4
+15,0
+4
+9,0
+4
+13,0
+2,4
+19,0
+2,4
+13,0
+4
+14,0
+4
+9,0
+4
+13,0
+4
+1d,0
+4
+13,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+1d,0
+b,4
+1d,0
+4
+13,0
+4
+9,0
+4
+1a,0
+3,4
+b,0
+3,4
+1a,0
+4
+13,0
+4
+9,0
+4
+17,0
+3,4
+11,0
+3,4
+17,0
+4
+13,0
+4
+9,0
+4
+16,0
+2,4
+15,0
+2,4
+16,0
+4
+13,0
+4
+9,0
+4
+14,0
+2,4
+19,0
+2,4
+14,0
+4
+13,0
+4
+9,0
+4
+13,0
+4
+1d,0
+4
+13,0
+4
+13,0
+4
+a,0
+4
+11,0
+4
+1f,0
+4
+12,0
+4
+13,0
+4
+a,0
+4
+10,0
+4
+21,0
+4
+11,0
+4
+14,0
+4
+9,0
+4
+f,0
+4
+23,0
+4
+f,0
+4
+15,0
+4
+9,0
+4
+f,0
+4
+23,0
+4
+f,0
+4
+15,0
+4
+a,0
+4
+d,0
+4
+25,0
+4
+e,0
+4
+15,0
+4
+a,0
+4
+d,0
+4
+25,0
+4
+e,0
+4
+16,0
+4
+9,0
+2,4
+b,0
+4
+27,0
+4
+c,0
+4
+17,0
+4
+a,0
+4
+b,0
+4
+27,0
+4
+c,0
+4
+17,0
+4
+a,0
+2,4
+a,0
+4
+27,0
+4
+c,0
+4
+17,0
+2,4
+a,0
+4
+a,0
+4
+27,0
+4
+b,0
+2,4
+18,0
+4
+b,0
+4
+9,0
+4
+27,0
+4
+b,0
+4
+19,0
+4
+15,0
+4
+27,0
+4
+b,0
+4
+1a,0
+4
+14,0
+4
+27,0
+4
+a,0
+4
+1b,0
+4
+15,0
+4
+25,0
+4
+b,0
+4
+1c,0
+4
+14,0
+4
+25,0
+4
+a,0
+4
+1d,0
+4
+15,0
+4
+23,0
+4
+b,0
+4
+1e,0
+4
+14,0
+4
+23,0
+4
+a,0
+4
+1f,0
+2,4
+14,0
+4
+21,0
+4
+a,0
+2,4
+20,0
+4
+15,0
+4
+1f,0
+4
+b,0
+4
+22,0
+4
+15,0
+4
+1d,0
+4
+b,0
+4
+24,0
+4
+15,0
+2,4
+19,0
+2,4
+b,0
+4
+25,0
+2,4
+16,0
+2,4
+15,0
+2,4
+c,0
+2,4
+26,0
+2,4
+16,0
+3,4
+11,0
+3,4
+c,0
+2,4
+28,0
+2,4
+18,0
+3,4
+b,0
+3,4
+e,0
+2,4
+2a,0
+2,4
+1a,0
+b,4
+10,0
+2,4
+2c,0
+2,4
+33,0
+2,4
+2e,0
+2,4
+31,0
+2,4
+31,0
+4
+2f,0
+4
+34,0
+2,4
+2b,0
+2,4
+36,0
+2,4
+29,0
+2,4
+39,0
+2,4
+25,0
+2,4
+3d,0
+2,4
+21,0
+2,4
+41,0
+3,4
+1b,0
+3,4
+45,0
+4,4
+15,0
+4,4
+4b,0
+4,4
+d,0
+4,4
+53,0
+d,4
+1c0,0
+100 90 32
+21b,0
+d,6
+53,0
+4,6
+d,0
+4,6
+4b,0
+4,6
+15,0
+4,6
+45,0
+3,6
+1b,0
+3,6
+41,0
+2,6
+21,0
+2,6
+3d,0
+2,6
+25,0
+2,6
+39,0
+2,6
+29,0
+2,6
+36,0
+2,6
+2b,0
+2,6
+34,0
+6
+2f,0
+6
+31,0
+2,6
+13,0
+4,6
+1a,0
+2,6
+2e,0
+2,6
+10,0
+4,6
+1f,0
+2,6
+2c,0
+2,6
+e,0
+3,6
+9,0
+6,6
+15,0
+2,6
+2a,0
+2,6
+d,0
+3,6
+11,0
+5,6
+11,0
+2,6
+28,0
+2,6
+d,0
+2,6
+18,0
+3,6
+f,0
+2,6
+26,0
+2,6
+c,0
+2,6
+1c,0
+3,6
+e,0
+2,6
+25,0
+6
+c,0
+6
+21,0
+2,6
+d,0
+6
+24,0
+6
+b,0
+2,6
+24,0
+6
+d,0
+6
+22,0
+6
+b,0
+2,6
+26,0
+2,6
+c,0
+6
+20,0
+2,6
+a,0
+2,6
+29,0
+6
+b,0
+2,6
+1f,0
+6
+a,0
+2,6
+f,0
+3,6
+19,0
+2,6
+a,0
+6
+1e,0
+6
+b,0
+6
+2d,0
+2,6
+a,0
+6
+1d,0
+6
+a,0
+6
+2f,0
+6
+a,0
+6
+1c,0
+6
+a,0
+6
+3c,0
+6
+1b,0
+6
+a,0
+6
+3c,0
+6
+1a,0
+6
+a,0
+6
+3e,0
+6
+19,0
+6
+9,0
+2,6
+3e,0
+6
+18,0
+2,6
+9,0
+6
+3f,0
+2,6
+17,0
+6
+9,0
+2,6
+40,0
+6
+17,0
+6
+9,0
+6
+41,0
+6
+17,0
+6
+9,0
+6
+41,0
+6
+16,0
+6
+9,0
+6
+1b,0
+d,6
+1b,0
+6
+15,0
+6
+9,0
+6
+17,0
+4,6
+d,0
+4,6
+17,0
+6
+15,0
+6
+9,0
+6
+14,0
+3,6
+15,0
+3,6
+14,0
+6
+15,0
+6
+9,0
+6
+13,0
+2,6
+19,0
+2,6
+13,0
+6
+14,0
+6
+9,0
+6
+13,0
+6
+1d,0
+6
+13,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+1d,0
+b,6
+1d,0
+6
+13,0
+6
+9,0
+6
+1a,0
+3,6
+b,0
+3,6
+1a,0
+6
+13,0
+6
+9,0
+6
+17,0
+3,6
+11,0
+3,6
+17,0
+6
+13,0
+6
+9,0
+6
+16,0
+2,6
+15,0
+2,6
+16,0
+6
+13,0
+6
+9,0
+6
+14,0
+2,6
+19,0
+2,6
+14,0
+6
+13,0
+6
+9,0
+6
+13,0
+6
+1d,0
+6
+13,0
+6
+13,0
+6
+a,0
+6
+11,0
+6
+1f,0
+6
+12,0
+6
+13,0
+6
+a,0
+6
+10,0
+6
+21,0
+6
+11,0
+6
+14,0
+6
+9,0
+6
+f,0
+6
+23,0
+6
+f,0
+6
+15,0
+6
+9,0
+6
+f,0
+6
+23,0
+6
+f,0
+6
+15,0
+6
+a,0
+6
+d,0
+6
+25,0
+6
+e,0
+6
+15,0
+6
+a,0
+6
+d,0
+6
+25,0
+6
+e,0
+6
+16,0
+6
+9,0
+2,6
+b,0
+6
+27,0
+6
+c,0
+6
+17,0
+6
+a,0
+6
+b,0
+6
+27,0
+6
+c,0
+6
+17,0
+6
+a,0
+2,6
+a,0
+6
+27,0
+6
+c,0
+6
+17,0
+2,6
+a,0
+6
+a,0
+6
+27,0
+6
+b,0
+2,6
+18,0
+6
+b,0
+6
+9,0
+6
+27,0
+6
+b,0
+6
+19,0
+6
+15,0
+6
+27,0
+6
+b,0
+6
+1a,0
+6
+14,0
+6
+27,0
+6
+a,0
+6
+1b,0
+6
+15,0
+6
+25,0
+6
+b,0
+6
+1c,0
+6
+14,0
+6
+25,0
+6
+a,0
+6
+1d,0
+6
+15,0
+6
+23,0
+6
+b,0
+6
+1e,0
+6
+14,0
+6
+23,0
+6
+a,0
+6
+1f,0
+2,6
+14,0
+6
+21,0
+6
+a,0
+2,6
+20,0
+6
+15,0
+6
+1f,0
+6
+b,0
+6
+22,0
+6
+15,0
+6
+1d,0
+6
+b,0
+6
+24,0
+6
+15,0
+2,6
+19,0
+2,6
+b,0
+6
+25,0
+2,6
+16,0
+2,6
+15,0
+2,6
+c,0
+2,6
+26,0
+2,6
+16,0
+3,6
+11,0
+3,6
+c,0
+2,6
+28,0
+2,6
+18,0
+3,6
+b,0
+3,6
+e,0
+2,6
+2a,0
+2,6
+1a,0
+b,6
+10,0
+2,6
+2c,0
+2,6
+33,0
+2,6
+2e,0
+2,6
+31,0
+2,6
+31,0
+6
+2f,0
+6
+34,0
+2,6
+2b,0
+2,6
+36,0
+2,6
+29,0
+2,6
+39,0
+2,6
+25,0
+2,6
+3d,0
+2,6
+21,0
+2,6
+41,0
+3,6
+1b,0
+3,6
+45,0
+4,6
+15,0
+4,6
+4b,0
+4,6
+d,0
+4,6
+53,0
+d,6
+1c0,0
+100 90 32
+21b,0
+d,7
+53,0
+4,7
+d,0
+4,7
+4b,0
+4,7
+15,0
+4,7
+45,0
+3,7
+1b,0
+3,7
+41,0
+2,7
+21,0
+2,7
+3d,0
+2,7
+25,0
+2,7
+39,0
+2,7
+29,0
+2,7
+36,0
+2,7
+2b,0
+2,7
+34,0
+7
+2f,0
+7
+31,0
+2,7
+13,0
+4,7
+1a,0
+2,7
+2e,0
+2,7
+10,0
+4,7
+1f,0
+2,7
+2c,0
+2,7
+e,0
+3,7
+9,0
+6,7
+15,0
+2,7
+2a,0
+2,7
+d,0
+3,7
+11,0
+5,7
+11,0
+2,7
+28,0
+2,7
+d,0
+2,7
+18,0
+3,7
+f,0
+2,7
+26,0
+2,7
+c,0
+2,7
+1c,0
+3,7
+e,0
+2,7
+25,0
+7
+c,0
+7
+21,0
+2,7
+d,0
+7
+24,0
+7
+b,0
+2,7
+24,0
+7
+d,0
+7
+22,0
+7
+b,0
+2,7
+26,0
+2,7
+c,0
+7
+20,0
+2,7
+a,0
+2,7
+29,0
+7
+b,0
+2,7
+1f,0
+7
+a,0
+2,7
+f,0
+3,7
+19,0
+2,7
+a,0
+7
+1e,0
+7
+b,0
+7
+2d,0
+2,7
+a,0
+7
+1d,0
+7
+a,0
+7
+2f,0
+7
+a,0
+7
+1c,0
+7
+a,0
+7
+3c,0
+7
+1b,0
+7
+a,0
+7
+3c,0
+7
+1a,0
+7
+a,0
+7
+3e,0
+7
+19,0
+7
+9,0
+2,7
+3e,0
+7
+18,0
+2,7
+9,0
+7
+3f,0
+2,7
+17,0
+7
+9,0
+2,7
+40,0
+7
+17,0
+7
+9,0
+7
+41,0
+7
+17,0
+7
+9,0
+7
+41,0
+7
+16,0
+7
+9,0
+7
+1b,0
+d,7
+1b,0
+7
+15,0
+7
+9,0
+7
+17,0
+4,7
+d,0
+4,7
+17,0
+7
+15,0
+7
+9,0
+7
+14,0
+3,7
+15,0
+3,7
+14,0
+7
+15,0
+7
+9,0
+7
+13,0
+2,7
+19,0
+2,7
+13,0
+7
+14,0
+7
+9,0
+7
+13,0
+7
+1d,0
+7
+13,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+1d,0
+b,7
+1d,0
+7
+13,0
+7
+9,0
+7
+1a,0
+3,7
+b,0
+3,7
+1a,0
+7
+13,0
+7
+9,0
+7
+17,0
+3,7
+11,0
+3,7
+17,0
+7
+13,0
+7
+9,0
+7
+16,0
+2,7
+15,0
+2,7
+16,0
+7
+13,0
+7
+9,0
+7
+14,0
+2,7
+19,0
+2,7
+14,0
+7
+13,0
+7
+9,0
+7
+13,0
+7
+1d,0
+7
+13,0
+7
+13,0
+7
+a,0
+7
+11,0
+7
+1f,0
+7
+12,0
+7
+13,0
+7
+a,0
+7
+10,0
+7
+21,0
+7
+11,0
+7
+14,0
+7
+9,0
+7
+f,0
+7
+23,0
+7
+f,0
+7
+15,0
+7
+9,0
+7
+f,0
+7
+23,0
+7
+f,0
+7
+15,0
+7
+a,0
+7
+d,0
+7
+25,0
+7
+e,0
+7
+15,0
+7
+a,0
+7
+d,0
+7
+25,0
+7
+e,0
+7
+16,0
+7
+9,0
+2,7
+b,0
+7
+27,0
+7
+c,0
+7
+17,0
+7
+a,0
+7
+b,0
+7
+27,0
+7
+c,0
+7
+17,0
+7
+a,0
+2,7
+a,0
+7
+27,0
+7
+c,0
+7
+17,0
+2,7
+a,0
+7
+a,0
+7
+27,0
+7
+b,0
+2,7
+18,0
+7
+b,0
+7
+9,0
+7
+27,0
+7
+b,0
+7
+19,0
+7
+15,0
+7
+27,0
+7
+b,0
+7
+1a,0
+7
+14,0
+7
+27,0
+7
+a,0
+7
+1b,0
+7
+15,0
+7
+25,0
+7
+b,0
+7
+1c,0
+7
+14,0
+7
+25,0
+7
+a,0
+7
+1d,0
+7
+15,0
+7
+23,0
+7
+b,0
+7
+1e,0
+7
+14,0
+7
+23,0
+7
+a,0
+7
+1f,0
+2,7
+14,0
+7
+21,0
+7
+a,0
+2,7
+20,0
+7
+15,0
+7
+1f,0
+7
+b,0
+7
+22,0
+7
+15,0
+7
+1d,0
+7
+b,0
+7
+24,0
+7
+15,0
+2,7
+19,0
+2,7
+b,0
+7
+25,0
+2,7
+16,0
+2,7
+15,0
+2,7
+c,0
+2,7
+26,0
+2,7
+16,0
+3,7
+11,0
+3,7
+c,0
+2,7
+28,0
+2,7
+18,0
+3,7
+b,0
+3,7
+e,0
+2,7
+2a,0
+2,7
+1a,0
+b,7
+10,0
+2,7
+2c,0
+2,7
+33,0
+2,7
+2e,0
+2,7
+31,0
+2,7
+31,0
+7
+2f,0
+7
+34,0
+2,7
+2b,0
+2,7
+36,0
+2,7
+29,0
+2,7
+39,0
+2,7
+25,0
+2,7
+3d,0
+2,7
+21,0
+2,7
+41,0
+3,7
+1b,0
+3,7
+45,0
+4,7
+15,0
+4,7
+4b,0
+4,7
+d,0
+4,7
+53,0
+d,7
+1c0,0
+100 90 32
+21b,0
+d,10
+53,0
+4,10
+d,0
+4,10
+4b,0
+4,10
+15,0
+4,10
+45,0
+3,10
+1b,0
+3,10
+41,0
+2,10
+21,0
+2,10
+3d,0
+2,10
+25,0
+2,10
+39,0
+2,10
+29,0
+2,10
+36,0
+2,10
+2b,0
+2,10
+34,0
+10
+2f,0
+10
+31,0
+2,10
+13,0
+4,10
+1a,0
+2,10
+2e,0
+2,10
+10,0
+4,10
+1f,0
+2,10
+2c,0
+2,10
+e,0
+3,10
+9,0
+6,10
+15,0
+2,10
+2a,0
+2,10
+d,0
+3,10
+11,0
+5,10
+11,0
+2,10
+28,0
+2,10
+d,0
+2,10
+18,0
+3,10
+f,0
+2,10
+26,0
+2,10
+c,0
+2,10
+1c,0
+3,10
+e,0
+2,10
+25,0
+10
+c,0
+10
+21,0
+2,10
+d,0
+10
+24,0
+10
+b,0
+2,10
+24,0
+10
+d,0
+10
+22,0
+10
+b,0
+2,10
+26,0
+2,10
+c,0
+10
+20,0
+2,10
+a,0
+2,10
+29,0
+10
+b,0
+2,10
+1f,0
+10
+a,0
+2,10
+f,0
+3,10
+19,0
+2,10
+a,0
+10
+1e,0
+10
+b,0
+10
+2d,0
+2,10
+a,0
+10
+1d,0
+10
+a,0
+10
+2f,0
+10
+a,0
+10
+1c,0
+10
+a,0
+10
+3c,0
+10
+1b,0
+10
+a,0
+10
+3c,0
+10
+1a,0
+10
+a,0
+10
+3e,0
+10
+19,0
+10
+9,0
+2,10
+3e,0
+10
+18,0
+2,10
+9,0
+10
+3f,0
+2,10
+17,0
+10
+9,0
+2,10
+40,0
+10
+17,0
+10
+9,0
+10
+41,0
+10
+17,0
+10
+9,0
+10
+41,0
+10
+16,0
+10
+9,0
+10
+1b,0
+d,10
+1b,0
+10
+15,0
+10
+9,0
+10
+17,0
+4,10
+d,0
+4,10
+17,0
+10
+15,0
+10
+9,0
+10
+14,0
+3,10
+15,0
+3,10
+14,0
+10
+15,0
+10
+9,0
+10
+13,0
+2,10
+19,0
+2,10
+13,0
+10
+14,0
+10
+9,0
+10
+13,0
+10
+1d,0
+10
+13,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+1d,0
+b,10
+1d,0
+10
+13,0
+10
+9,0
+10
+1a,0
+3,10
+b,0
+3,10
+1a,0
+10
+13,0
+10
+9,0
+10
+17,0
+3,10
+11,0
+3,10
+17,0
+10
+13,0
+10
+9,0
+10
+16,0
+2,10
+15,0
+2,10
+16,0
+10
+13,0
+10
+9,0
+10
+14,0
+2,10
+19,0
+2,10
+14,0
+10
+13,0
+10
+9,0
+10
+13,0
+10
+1d,0
+10
+13,0
+10
+13,0
+10
+a,0
+10
+11,0
+10
+1f,0
+10
+12,0
+10
+13,0
+10
+a,0
+10
+10,0
+10
+21,0
+10
+11,0
+10
+14,0
+10
+9,0
+10
+f,0
+10
+23,0
+10
+f,0
+10
+15,0
+10
+9,0
+10
+f,0
+10
+23,0
+10
+f,0
+10
+15,0
+10
+a,0
+10
+d,0
+10
+25,0
+10
+e,0
+10
+15,0
+10
+a,0
+10
+d,0
+10
+25,0
+10
+e,0
+10
+16,0
+10
+9,0
+2,10
+b,0
+10
+27,0
+10
+c,0
+10
+17,0
+10
+a,0
+10
+b,0
+10
+27,0
+10
+c,0
+10
+17,0
+10
+a,0
+2,10
+a,0
+10
+27,0
+10
+c,0
+10
+17,0
+2,10
+a,0
+10
+a,0
+10
+27,0
+10
+b,0
+2,10
+18,0
+10
+b,0
+10
+9,0
+10
+27,0
+10
+b,0
+10
+19,0
+10
+15,0
+10
+27,0
+10
+b,0
+10
+1a,0
+10
+14,0
+10
+27,0
+10
+a,0
+10
+1b,0
+10
+15,0
+10
+25,0
+10
+b,0
+10
+1c,0
+10
+14,0
+10
+25,0
+10
+a,0
+10
+1d,0
+10
+15,0
+10
+23,0
+10
+b,0
+10
+1e,0
+10
+14,0
+10
+23,0
+10
+a,0
+10
+1f,0
+2,10
+14,0
+10
+21,0
+10
+a,0
+2,10
+20,0
+10
+15,0
+10
+1f,0
+10
+b,0
+10
+22,0
+10
+15,0
+10
+1d,0
+10
+b,0
+10
+24,0
+10
+15,0
+2,10
+19,0
+2,10
+b,0
+10
+25,0
+2,10
+16,0
+2,10
+15,0
+2,10
+c,0
+2,10
+26,0
+2,10
+16,0
+3,10
+11,0
+3,10
+c,0
+2,10
+28,0
+2,10
+18,0
+3,10
+b,0
+3,10
+e,0
+2,10
+2a,0
+2,10
+1a,0
+b,10
+10,0
+2,10
+2c,0
+2,10
+33,0
+2,10
+2e,0
+2,10
+31,0
+2,10
+31,0
+10
+2f,0
+10
+34,0
+2,10
+2b,0
+2,10
+36,0
+2,10
+29,0
+2,10
+39,0
+2,10
+25,0
+2,10
+3d,0
+2,10
+21,0
+2,10
+41,0
+3,10
+1b,0
+3,10
+45,0
+4,10
+15,0
+4,10
+4b,0
+4,10
+d,0
+4,10
+53,0
+d,10
+1c0,0
+100 90 32
+21b,0
+d,33
+53,0
+4,33
+d,0
+4,33
+4b,0
+4,33
+15,0
+4,33
+45,0
+3,33
+1b,0
+3,33
+41,0
+2,33
+21,0
+2,33
+3d,0
+2,33
+25,0
+2,33
+39,0
+2,33
+29,0
+2,33
+36,0
+2,33
+2b,0
+2,33
+34,0
+33
+2f,0
+33
+31,0
+2,33
+13,0
+4,33
+1a,0
+2,33
+2e,0
+2,33
+10,0
+4,33
+1f,0
+2,33
+2c,0
+2,33
+e,0
+3,33
+9,0
+6,33
+15,0
+2,33
+2a,0
+2,33
+d,0
+3,33
+11,0
+5,33
+11,0
+2,33
+28,0
+2,33
+d,0
+2,33
+18,0
+3,33
+f,0
+2,33
+26,0
+2,33
+c,0
+2,33
+1c,0
+3,33
+e,0
+2,33
+25,0
+33
+c,0
+33
+21,0
+2,33
+d,0
+33
+24,0
+33
+b,0
+2,33
+24,0
+33
+d,0
+33
+22,0
+33
+b,0
+2,33
+26,0
+2,33
+c,0
+33
+20,0
+2,33
+a,0
+2,33
+29,0
+33
+b,0
+2,33
+1f,0
+33
+a,0
+2,33
+f,0
+3,33
+19,0
+2,33
+a,0
+33
+1e,0
+33
+b,0
+33
+2d,0
+2,33
+a,0
+33
+1d,0
+33
+a,0
+33
+2f,0
+33
+a,0
+33
+1c,0
+33
+a,0
+33
+3c,0
+33
+1b,0
+33
+a,0
+33
+3c,0
+33
+1a,0
+33
+a,0
+33
+3e,0
+33
+19,0
+33
+9,0
+2,33
+3e,0
+33
+18,0
+2,33
+9,0
+33
+3f,0
+2,33
+17,0
+33
+9,0
+2,33
+40,0
+33
+17,0
+33
+9,0
+33
+41,0
+33
+17,0
+33
+9,0
+33
+41,0
+33
+16,0
+33
+9,0
+33
+1b,0
+d,33
+1b,0
+33
+15,0
+33
+9,0
+33
+17,0
+4,33
+d,0
+4,33
+17,0
+33
+15,0
+33
+9,0
+33
+14,0
+3,33
+15,0
+3,33
+14,0
+33
+15,0
+33
+9,0
+33
+13,0
+2,33
+19,0
+2,33
+13,0
+33
+14,0
+33
+9,0
+33
+13,0
+33
+1d,0
+33
+13,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+1d,0
+b,33
+1d,0
+33
+13,0
+33
+9,0
+33
+1a,0
+3,33
+b,0
+3,33
+1a,0
+33
+13,0
+33
+9,0
+33
+17,0
+3,33
+11,0
+3,33
+17,0
+33
+13,0
+33
+9,0
+33
+16,0
+2,33
+15,0
+2,33
+16,0
+33
+13,0
+33
+9,0
+33
+14,0
+2,33
+19,0
+2,33
+14,0
+33
+13,0
+33
+9,0
+33
+13,0
+33
+1d,0
+33
+13,0
+33
+13,0
+33
+a,0
+33
+11,0
+33
+1f,0
+33
+12,0
+33
+13,0
+33
+a,0
+33
+10,0
+33
+21,0
+33
+11,0
+33
+14,0
+33
+9,0
+33
+f,0
+33
+23,0
+33
+f,0
+33
+15,0
+33
+9,0
+33
+f,0
+33
+23,0
+33
+f,0
+33
+15,0
+33
+a,0
+33
+d,0
+33
+25,0
+33
+e,0
+33
+15,0
+33
+a,0
+33
+d,0
+33
+25,0
+33
+e,0
+33
+16,0
+33
+9,0
+2,33
+b,0
+33
+27,0
+33
+c,0
+33
+17,0
+33
+a,0
+33
+b,0
+33
+27,0
+33
+c,0
+33
+17,0
+33
+a,0
+2,33
+a,0
+33
+27,0
+33
+c,0
+33
+17,0
+2,33
+a,0
+33
+a,0
+33
+27,0
+33
+b,0
+2,33
+18,0
+33
+b,0
+33
+9,0
+33
+27,0
+33
+b,0
+33
+19,0
+33
+15,0
+33
+27,0
+33
+b,0
+33
+1a,0
+33
+14,0
+33
+27,0
+33
+a,0
+33
+1b,0
+33
+15,0
+33
+25,0
+33
+b,0
+33
+1c,0
+33
+14,0
+33
+25,0
+33
+a,0
+33
+1d,0
+33
+15,0
+33
+23,0
+33
+b,0
+33
+1e,0
+33
+14,0
+33
+23,0
+33
+a,0
+33
+1f,0
+2,33
+14,0
+33
+21,0
+33
+a,0
+2,33
+20,0
+33
+15,0
+33
+1f,0
+33
+b,0
+33
+22,0
+33
+15,0
+33
+1d,0
+33
+b,0
+33
+24,0
+33
+15,0
+2,33
+19,0
+2,33
+b,0
+33
+25,0
+2,33
+16,0
+2,33
+15,0
+2,33
+c,0
+2,33
+26,0
+2,33
+16,0
+3,33
+11,0
+3,33
+c,0
+2,33
+28,0
+2,33
+18,0
+3,33
+b,0
+3,33
+e,0
+2,33
+2a,0
+2,33
+1a,0
+b,33
+10,0
+2,33
+2c,0
+2,33
+33,0
+2,33
+2e,0
+2,33
+31,0
+2,33
+31,0
+33
+2f,0
+33
+34,0
+2,33
+2b,0
+2,33
+36,0
+2,33
+29,0
+2,33
+39,0
+2,33
+25,0
+2,33
+3d,0
+2,33
+21,0
+2,33
+41,0
+3,33
+1b,0
+3,33
+45,0
+4,33
+15,0
+4,33
+4b,0
+4,33
+d,0
+4,33
+53,0
+d,33
+1c0,0
+100 90 32
+21b,0
+d,81
+53,0
+4,81
+d,0
+4,81
+4b,0
+4,81
+15,0
+4,81
+45,0
+3,81
+1b,0
+3,81
+41,0
+2,81
+21,0
+2,81
+3d,0
+2,81
+25,0
+2,81
+39,0
+2,81
+29,0
+2,81
+36,0
+2,81
+2b,0
+2,81
+34,0
+81
+2f,0
+81
+31,0
+2,81
+13,0
+4,81
+1a,0
+2,81
+2e,0
+2,81
+10,0
+4,81
+1f,0
+2,81
+2c,0
+2,81
+e,0
+3,81
+9,0
+6,81
+15,0
+2,81
+2a,0
+2,81
+d,0
+3,81
+11,0
+5,81
+11,0
+2,81
+28,0
+2,81
+d,0
+2,81
+18,0
+3,81
+f,0
+2,81
+26,0
+2,81
+c,0
+2,81
+1c,0
+3,81
+e,0
+2,81
+25,0
+81
+c,0
+81
+21,0
+2,81
+d,0
+81
+24,0
+81
+b,0
+2,81
+24,0
+81
+d,0
+81
+22,0
+81
+b,0
+2,81
+26,0
+2,81
+c,0
+81
+20,0
+2,81
+a,0
+2,81
+29,0
+81
+b,0
+2,81
+1f,0
+81
+a,0
+2,81
+f,0
+3,81
+19,0
+2,81
+a,0
+81
+1e,0
+81
+b,0
+81
+2d,0
+2,81
+a,0
+81
+1d,0
+81
+a,0
+81
+2f,0
+81
+a,0
+81
+1c,0
+81
+a,0
+81
+3c,0
+81
+1b,0
+81
+a,0
+81
+3c,0
+81
+1a,0
+81
+a,0
+81
+3e,0
+81
+19,0
+81
+9,0
+2,81
+3e,0
+81
+18,0
+2,81
+9,0
+81
+3f,0
+2,81
+17,0
+81
+9,0
+2,81
+40,0
+81
+17,0
+81
+9,0
+81
+41,0
+81
+17,0
+81
+9,0
+81
+41,0
+81
+16,0
+81
+9,0
+81
+1b,0
+d,81
+1b,0
+81
+15,0
+81
+9,0
+81
+17,0
+4,81
+d,0
+4,81
+17,0
+81
+15,0
+81
+9,0
+81
+14,0
+3,81
+15,0
+3,81
+14,0
+81
+15,0
+81
+9,0
+81
+13,0
+2,81
+19,0
+2,81
+13,0
+81
+14,0
+81
+9,0
+81
+13,0
+81
+1d,0
+81
+13,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+1d,0
+b,81
+1d,0
+81
+13,0
+81
+9,0
+81
+1a,0
+3,81
+b,0
+3,81
+1a,0
+81
+13,0
+81
+9,0
+81
+17,0
+3,81
+11,0
+3,81
+17,0
+81
+13,0
+81
+9,0
+81
+16,0
+2,81
+15,0
+2,81
+16,0
+81
+13,0
+81
+9,0
+81
+14,0
+2,81
+19,0
+2,81
+14,0
+81
+13,0
+81
+9,0
+81
+13,0
+81
+1d,0
+81
+13,0
+81
+13,0
+81
+a,0
+81
+11,0
+81
+1f,0
+81
+12,0
+81
+13,0
+81
+a,0
+81
+10,0
+81
+21,0
+81
+11,0
+81
+14,0
+81
+9,0
+81
+f,0
+81
+23,0
+81
+f,0
+81
+15,0
+81
+9,0
+81
+f,0
+81
+23,0
+81
+f,0
+81
+15,0
+81
+a,0
+81
+d,0
+81
+25,0
+81
+e,0
+81
+15,0
+81
+a,0
+81
+d,0
+81
+25,0
+81
+e,0
+81
+16,0
+81
+9,0
+2,81
+b,0
+81
+27,0
+81
+c,0
+81
+17,0
+81
+a,0
+81
+b,0
+81
+27,0
+81
+c,0
+81
+17,0
+81
+a,0
+2,81
+a,0
+81
+27,0
+81
+c,0
+81
+17,0
+2,81
+a,0
+81
+a,0
+81
+27,0
+81
+b,0
+2,81
+18,0
+81
+b,0
+81
+9,0
+81
+27,0
+81
+b,0
+81
+19,0
+81
+15,0
+81
+27,0
+81
+b,0
+81
+1a,0
+81
+14,0
+81
+27,0
+81
+a,0
+81
+1b,0
+81
+15,0
+81
+25,0
+81
+b,0
+81
+1c,0
+81
+14,0
+81
+25,0
+81
+a,0
+81
+1d,0
+81
+15,0
+81
+23,0
+81
+b,0
+81
+1e,0
+81
+14,0
+81
+23,0
+81
+a,0
+81
+1f,0
+2,81
+14,0
+81
+21,0
+81
+a,0
+2,81
+20,0
+81
+15,0
+81
+1f,0
+81
+b,0
+81
+22,0
+81
+15,0
+81
+1d,0
+81
+b,0
+81
+24,0
+81
+15,0
+2,81
+19,0
+2,81
+b,0
+81
+25,0
+2,81
+16,0
+2,81
+15,0
+2,81
+c,0
+2,81
+26,0
+2,81
+16,0
+3,81
+11,0
+3,81
+c,0
+2,81
+28,0
+2,81
+18,0
+3,81
+b,0
+3,81
+e,0
+2,81
+2a,0
+2,81
+1a,0
+b,81
+10,0
+2,81
+2c,0
+2,81
+33,0
+2,81
+2e,0
+2,81
+31,0
+2,81
+31,0
+81
+2f,0
+81
+34,0
+2,81
+2b,0
+2,81
+36,0
+2,81
+29,0
+2,81
+39,0
+2,81
+25,0
+2,81
+3d,0
+2,81
+21,0
+2,81
+41,0
+3,81
+1b,0
+3,81
+45,0
+4,81
+15,0
+4,81
+4b,0
+4,81
+d,0
+4,81
+53,0
+d,81
+1c0,0
+100 90 32
+21b,0
+d,a3
+53,0
+4,a3
+d,0
+4,a3
+4b,0
+4,a3
+15,0
+4,a3
+45,0
+3,a3
+1b,0
+3,a3
+41,0
+2,a3
+21,0
+2,a3
+3d,0
+2,a3
+25,0
+2,a3
+39,0
+2,a3
+29,0
+2,a3
+36,0
+2,a3
+2b,0
+2,a3
+34,0
+a3
+2f,0
+a3
+31,0
+2,a3
+13,0
+4,a3
+1a,0
+2,a3
+2e,0
+2,a3
+10,0
+4,a3
+1f,0
+2,a3
+2c,0
+2,a3
+e,0
+3,a3
+9,0
+6,a3
+15,0
+2,a3
+2a,0
+2,a3
+d,0
+3,a3
+11,0
+5,a3
+11,0
+2,a3
+28,0
+2,a3
+d,0
+2,a3
+18,0
+3,a3
+f,0
+2,a3
+26,0
+2,a3
+c,0
+2,a3
+1c,0
+3,a3
+e,0
+2,a3
+25,0
+a3
+c,0
+a3
+21,0
+2,a3
+d,0
+a3
+24,0
+a3
+b,0
+2,a3
+24,0
+a3
+d,0
+a3
+22,0
+a3
+b,0
+2,a3
+26,0
+2,a3
+c,0
+a3
+20,0
+2,a3
+a,0
+2,a3
+29,0
+a3
+b,0
+2,a3
+1f,0
+a3
+a,0
+2,a3
+f,0
+3,a3
+19,0
+2,a3
+a,0
+a3
+1e,0
+a3
+b,0
+a3
+2d,0
+2,a3
+a,0
+a3
+1d,0
+a3
+a,0
+a3
+2f,0
+a3
+a,0
+a3
+1c,0
+a3
+a,0
+a3
+3c,0
+a3
+1b,0
+a3
+a,0
+a3
+3c,0
+a3
+1a,0
+a3
+a,0
+a3
+3e,0
+a3
+19,0
+a3
+9,0
+2,a3
+3e,0
+a3
+18,0
+2,a3
+9,0
+a3
+3f,0
+2,a3
+17,0
+a3
+9,0
+2,a3
+40,0
+a3
+17,0
+a3
+9,0
+a3
+41,0
+a3
+17,0
+a3
+9,0
+a3
+41,0
+a3
+16,0
+a3
+9,0
+a3
+1b,0
+d,a3
+1b,0
+a3
+15,0
+a3
+9,0
+a3
+17,0
+4,a3
+d,0
+4,a3
+17,0
+a3
+15,0
+a3
+9,0
+a3
+14,0
+3,a3
+15,0
+3,a3
+14,0
+a3
+15,0
+a3
+9,0
+a3
+13,0
+2,a3
+19,0
+2,a3
+13,0
+a3
+14,0
+a3
+9,0
+a3
+13,0
+a3
+1d,0
+a3
+13,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+1d,0
+b,a3
+1d,0
+a3
+13,0
+a3
+9,0
+a3
+1a,0
+3,a3
+b,0
+3,a3
+1a,0
+a3
+13,0
+a3
+9,0
+a3
+17,0
+3,a3
+11,0
+3,a3
+17,0
+a3
+13,0
+a3
+9,0
+a3
+16,0
+2,a3
+15,0
+2,a3
+16,0
+a3
+13,0
+a3
+9,0
+a3
+14,0
+2,a3
+19,0
+2,a3
+14,0
+a3
+13,0
+a3
+9,0
+a3
+13,0
+a3
+1d,0
+a3
+13,0
+a3
+13,0
+a3
+a,0
+a3
+11,0
+a3
+1f,0
+a3
+12,0
+a3
+13,0
+a3
+a,0
+a3
+10,0
+a3
+21,0
+a3
+11,0
+a3
+14,0
+a3
+9,0
+a3
+f,0
+a3
+23,0
+a3
+f,0
+a3
+15,0
+a3
+9,0
+a3
+f,0
+a3
+23,0
+a3
+f,0
+a3
+15,0
+a3
+a,0
+a3
+d,0
+a3
+25,0
+a3
+e,0
+a3
+15,0
+a3
+a,0
+a3
+d,0
+a3
+25,0
+a3
+e,0
+a3
+16,0
+a3
+9,0
+2,a3
+b,0
+a3
+27,0
+a3
+c,0
+a3
+17,0
+a3
+a,0
+a3
+b,0
+a3
+27,0
+a3
+c,0
+a3
+17,0
+a3
+a,0
+2,a3
+a,0
+a3
+27,0
+a3
+c,0
+a3
+17,0
+2,a3
+a,0
+a3
+a,0
+a3
+27,0
+a3
+b,0
+2,a3
+18,0
+a3
+b,0
+a3
+9,0
+a3
+27,0
+a3
+b,0
+a3
+19,0
+a3
+15,0
+a3
+27,0
+a3
+b,0
+a3
+1a,0
+a3
+14,0
+a3
+27,0
+a3
+a,0
+a3
+1b,0
+a3
+15,0
+a3
+25,0
+a3
+b,0
+a3
+1c,0
+a3
+14,0
+a3
+25,0
+a3
+a,0
+a3
+1d,0
+a3
+15,0
+a3
+23,0
+a3
+b,0
+a3
+1e,0
+a3
+14,0
+a3
+23,0
+a3
+a,0
+a3
+1f,0
+2,a3
+14,0
+a3
+21,0
+a3
+a,0
+2,a3
+20,0
+a3
+15,0
+a3
+1f,0
+a3
+b,0
+a3
+22,0
+a3
+15,0
+a3
+1d,0
+a3
+b,0
+a3
+24,0
+a3
+15,0
+2,a3
+19,0
+2,a3
+b,0
+a3
+25,0
+2,a3
+16,0
+2,a3
+15,0
+2,a3
+c,0
+2,a3
+26,0
+2,a3
+16,0
+3,a3
+11,0
+3,a3
+c,0
+2,a3
+28,0
+2,a3
+18,0
+3,a3
+b,0
+3,a3
+e,0
+2,a3
+2a,0
+2,a3
+1a,0
+b,a3
+10,0
+2,a3
+2c,0
+2,a3
+33,0
+2,a3
+2e,0
+2,a3
+31,0
+2,a3
+31,0
+a3
+2f,0
+a3
+34,0
+2,a3
+2b,0
+2,a3
+36,0
+2,a3
+29,0
+2,a3
+39,0
+2,a3
+25,0
+2,a3
+3d,0
+2,a3
+21,0
+2,a3
+41,0
+3,a3
+1b,0
+3,a3
+45,0
+4,a3
+15,0
+4,a3
+4b,0
+4,a3
+d,0
+4,a3
+53,0
+d,a3
+1c0,0
+100 90 32
+21b,0
+d,ff
+53,0
+4,ff
+d,0
+4,ff
+4b,0
+4,ff
+15,0
+4,ff
+45,0
+3,ff
+1b,0
+3,ff
+41,0
+2,ff
+21,0
+2,ff
+3d,0
+2,ff
+25,0
+2,ff
+39,0
+2,ff
+29,0
+2,ff
+36,0
+2,ff
+2b,0
+2,ff
+34,0
+ff
+2f,0
+ff
+31,0
+2,ff
+13,0
+4,ff
+1a,0
+2,ff
+2e,0
+2,ff
+10,0
+4,ff
+1f,0
+2,ff
+2c,0
+2,ff
+e,0
+3,ff
+9,0
+6,ff
+15,0
+2,ff
+2a,0
+2,ff
+d,0
+3,ff
+11,0
+5,ff
+11,0
+2,ff
+28,0
+2,ff
+d,0
+2,ff
+18,0
+3,ff
+f,0
+2,ff
+26,0
+2,ff
+c,0
+2,ff
+1c,0
+3,ff
+e,0
+2,ff
+25,0
+ff
+c,0
+ff
+21,0
+2,ff
+d,0
+ff
+24,0
+ff
+b,0
+2,ff
+24,0
+ff
+d,0
+ff
+22,0
+ff
+b,0
+2,ff
+26,0
+2,ff
+c,0
+ff
+20,0
+2,ff
+a,0
+2,ff
+29,0
+ff
+b,0
+2,ff
+1f,0
+ff
+a,0
+2,ff
+f,0
+3,ff
+19,0
+2,ff
+a,0
+ff
+1e,0
+ff
+b,0
+ff
+2d,0
+2,ff
+a,0
+ff
+1d,0
+ff
+a,0
+ff
+2f,0
+ff
+a,0
+ff
+1c,0
+ff
+a,0
+ff
+3c,0
+ff
+1b,0
+ff
+a,0
+ff
+3c,0
+ff
+1a,0
+ff
+a,0
+ff
+3e,0
+ff
+19,0
+ff
+9,0
+2,ff
+3e,0
+ff
+18,0
+2,ff
+9,0
+ff
+3f,0
+2,ff
+17,0
+ff
+9,0
+2,ff
+40,0
+ff
+17,0
+ff
+9,0
+ff
+41,0
+ff
+17,0
+ff
+9,0
+ff
+41,0
+ff
+16,0
+ff
+9,0
+ff
+1b,0
+d,ff
+1b,0
+ff
+15,0
+ff
+9,0
+ff
+17,0
+4,ff
+d,0
+4,ff
+17,0
+ff
+15,0
+ff
+9,0
+ff
+14,0
+3,ff
+15,0
+3,ff
+14,0
+ff
+15,0
+ff
+9,0
+ff
+13,0
+2,ff
+19,0
+2,ff
+13,0
+ff
+14,0
+ff
+9,0
+ff
+13,0
+ff
+1d,0
+ff
+13,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+1d,0
+b,ff
+1d,0
+ff
+13,0
+ff
+9,0
+ff
+1a,0
+3,ff
+b,0
+3,ff
+1a,0
+ff
+13,0
+ff
+9,0
+ff
+17,0
+3,ff
+11,0
+3,ff
+17,0
+ff
+13,0
+ff
+9,0
+ff
+16,0
+2,ff
+15,0
+2,ff
+16,0
+ff
+13,0
+ff
+9,0
+ff
+14,0
+2,ff
+19,0
+2,ff
+14,0
+ff
+13,0
+ff
+9,0
+ff
+13,0
+ff
+1d,0
+ff
+13,0
+ff
+13,0
+ff
+a,0
+ff
+11,0
+ff
+1f,0
+ff
+12,0
+ff
+13,0
+ff
+a,0
+ff
+10,0
+ff
+21,0
+ff
+11,0
+ff
+14,0
+ff
+9,0
+ff
+f,0
+ff
+23,0
+ff
+f,0
+ff
+15,0
+ff
+9,0
+ff
+f,0
+ff
+23,0
+ff
+f,0
+ff
+15,0
+ff
+a,0
+ff
+d,0
+ff
+25,0
+ff
+e,0
+ff
+15,0
+ff
+a,0
+ff
+d,0
+ff
+25,0
+ff
+e,0
+ff
+16,0
+ff
+9,0
+2,ff
+b,0
+ff
+27,0
+ff
+c,0
+ff
+17,0
+ff
+a,0
+ff
+b,0
+ff
+27,0
+ff
+c,0
+ff
+17,0
+ff
+a,0
+2,ff
+a,0
+ff
+27,0
+ff
+c,0
+ff
+17,0
+2,ff
+a,0
+ff
+a,0
+ff
+27,0
+ff
+b,0
+2,ff
+18,0
+ff
+b,0
+ff
+9,0
+ff
+27,0
+ff
+b,0
+ff
+19,0
+ff
+15,0
+ff
+27,0
+ff
+b,0
+ff
+1a,0
+ff
+14,0
+ff
+27,0
+ff
+a,0
+ff
+1b,0
+ff
+15,0
+ff
+25,0
+ff
+b,0
+ff
+1c,0
+ff
+14,0
+ff
+25,0
+ff
+a,0
+ff
+1d,0
+ff
+15,0
+ff
+23,0
+ff
+b,0
+ff
+1e,0
+ff
+14,0
+ff
+23,0
+ff
+a,0
+ff
+1f,0
+2,ff
+14,0
+ff
+21,0
+ff
+a,0
+2,ff
+20,0
+ff
+15,0
+ff
+1f,0
+ff
+b,0
+ff
+22,0
+ff
+15,0
+ff
+1d,0
+ff
+b,0
+ff
+24,0
+ff
+15,0
+2,ff
+19,0
+2,ff
+b,0
+ff
+25,0
+2,ff
+16,0
+2,ff
+15,0
+2,ff
+c,0
+2,ff
+26,0
+2,ff
+16,0
+3,ff
+11,0
+3,ff
+c,0
+2,ff
+28,0
+2,ff
+18,0
+3,ff
+b,0
+3,ff
+e,0
+2,ff
+2a,0
+2,ff
+1a,0
+b,ff
+10,0
+2,ff
+2c,0
+2,ff
+33,0
+2,ff
+2e,0
+2,ff
+31,0
+2,ff
+31,0
+ff
+2f,0
+ff
+34,0
+2,ff
+2b,0
+2,ff
+36,0
+2,ff
+29,0
+2,ff
+39,0
+2,ff
+25,0
+2,ff
+3d,0
+2,ff
+21,0
+2,ff
+41,0
+3,ff
+1b,0
+3,ff
+45,0
+4,ff
+15,0
+4,ff
+4b,0
+4,ff
+d,0
+4,ff
+53,0
+d,ff
+1c0,0
+100 90 32
+21b,0
+d,100
+53,0
+4,100
+d,0
+4,100
+4b,0
+4,100
+15,0
+4,100
+45,0
+3,100
+1b,0
+3,100
+41,0
+2,100
+21,0
+2,100
+3d,0
+2,100
+25,0
+2,100
+39,0
+2,100
+29,0
+2,100
+36,0
+2,100
+2b,0
+2,100
+34,0
+100
+2f,0
+100
+31,0
+2,100
+13,0
+4,100
+1a,0
+2,100
+2e,0
+2,100
+10,0
+4,100
+1f,0
+2,100
+2c,0
+2,100
+e,0
+3,100
+9,0
+6,100
+15,0
+2,100
+2a,0
+2,100
+d,0
+3,100
+11,0
+5,100
+11,0
+2,100
+28,0
+2,100
+d,0
+2,100
+18,0
+3,100
+f,0
+2,100
+26,0
+2,100
+c,0
+2,100
+1c,0
+3,100
+e,0
+2,100
+25,0
+100
+c,0
+100
+21,0
+2,100
+d,0
+100
+24,0
+100
+b,0
+2,100
+24,0
+100
+d,0
+100
+22,0
+100
+b,0
+2,100
+26,0
+2,100
+c,0
+100
+20,0
+2,100
+a,0
+2,100
+29,0
+100
+b,0
+2,100
+1f,0
+100
+a,0
+2,100
+f,0
+3,100
+19,0
+2,100
+a,0
+100
+1e,0
+100
+b,0
+100
+2d,0
+2,100
+a,0
+100
+1d,0
+100
+a,0
+100
+2f,0
+100
+a,0
+100
+1c,0
+100
+a,0
+100
+3c,0
+100
+1b,0
+100
+a,0
+100
+3c,0
+100
+1a,0
+100
+a,0
+100
+3e,0
+100
+19,0
+100
+9,0
+2,100
+3e,0
+100
+18,0
+2,100
+9,0
+100
+3f,0
+2,100
+17,0
+100
+9,0
+2,100
+40,0
+100
+17,0
+100
+9,0
+100
+41,0
+100
+17,0
+100
+9,0
+100
+41,0
+100
+16,0
+100
+9,0
+100
+1b,0
+d,100
+1b,0
+100
+15,0
+100
+9,0
+100
+17,0
+4,100
+d,0
+4,100
+17,0
+100
+15,0
+100
+9,0
+100
+14,0
+3,100
+15,0
+3,100
+14,0
+100
+15,0
+100
+9,0
+100
+13,0
+2,100
+19,0
+2,100
+13,0
+100
+14,0
+100
+9,0
+100
+13,0
+100
+1d,0
+100
+13,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+1d,0
+b,100
+1d,0
+100
+13,0
+100
+9,0
+100
+1a,0
+3,100
+b,0
+3,100
+1a,0
+100
+13,0
+100
+9,0
+100
+17,0
+3,100
+11,0
+3,100
+17,0
+100
+13,0
+100
+9,0
+100
+16,0
+2,100
+15,0
+2,100
+16,0
+100
+13,0
+100
+9,0
+100
+14,0
+2,100
+19,0
+2,100
+14,0
+100
+13,0
+100
+9,0
+100
+13,0
+100
+1d,0
+100
+13,0
+100
+13,0
+100
+a,0
+100
+11,0
+100
+1f,0
+100
+12,0
+100
+13,0
+100
+a,0
+100
+10,0
+100
+21,0
+100
+11,0
+100
+14,0
+100
+9,0
+100
+f,0
+100
+23,0
+100
+f,0
+100
+15,0
+100
+9,0
+100
+f,0
+100
+23,0
+100
+f,0
+100
+15,0
+100
+a,0
+100
+d,0
+100
+25,0
+100
+e,0
+100
+15,0
+100
+a,0
+100
+d,0
+100
+25,0
+100
+e,0
+100
+16,0
+100
+9,0
+2,100
+b,0
+100
+27,0
+100
+c,0
+100
+17,0
+100
+a,0
+100
+b,0
+100
+27,0
+100
+c,0
+100
+17,0
+100
+a,0
+2,100
+a,0
+100
+27,0
+100
+c,0
+100
+17,0
+2,100
+a,0
+100
+a,0
+100
+27,0
+100
+b,0
+2,100
+18,0
+100
+b,0
+100
+9,0
+100
+27,0
+100
+b,0
+100
+19,0
+100
+15,0
+100
+27,0
+100
+b,0
+100
+1a,0
+100
+14,0
+100
+27,0
+100
+a,0
+100
+1b,0
+100
+15,0
+100
+25,0
+100
+b,0
+100
+1c,0
+100
+14,0
+100
+25,0
+100
+a,0
+100
+1d,0
+100
+15,0
+100
+23,0
+100
+b,0
+100
+1e,0
+100
+14,0
+100
+23,0
+100
+a,0
+100
+1f,0
+2,100
+14,0
+100
+21,0
+100
+a,0
+2,100
+20,0
+100
+15,0
+100
+1f,0
+100
+b,0
+100
+22,0
+100
+15,0
+100
+1d,0
+100
+b,0
+100
+24,0
+100
+15,0
+2,100
+19,0
+2,100
+b,0
+100
+25,0
+2,100
+16,0
+2,100
+15,0
+2,100
+c,0
+2,100
+26,0
+2,100
+16,0
+3,100
+11,0
+3,100
+c,0
+2,100
+28,0
+2,100
+18,0
+3,100
+b,0
+3,100
+e,0
+2,100
+2a,0
+2,100
+1a,0
+b,100
+10,0
+2,100
+2c,0
+2,100
+33,0
+2,100
+2e,0
+2,100
+31,0
+2,100
+31,0
+100
+2f,0
+100
+34,0
+2,100
+2b,0
+2,100
+36,0
+2,100
+29,0
+2,100
+39,0
+2,100
+25,0
+2,100
+3d,0
+2,100
+21,0
+2,100
+41,0
+3,100
+1b,0
+3,100
+45,0
+4,100
+15,0
+4,100
+4b,0
+4,100
+d,0
+4,100
+53,0
+d,100
+1c0,0
+100 90 32
+21b,0
+d,12c
+53,0
+4,12c
+d,0
+4,12c
+4b,0
+4,12c
+15,0
+4,12c
+45,0
+3,12c
+1b,0
+3,12c
+41,0
+2,12c
+21,0
+2,12c
+3d,0
+2,12c
+25,0
+2,12c
+39,0
+2,12c
+29,0
+2,12c
+36,0
+2,12c
+2b,0
+2,12c
+34,0
+12c
+2f,0
+12c
+31,0
+2,12c
+13,0
+4,12c
+1a,0
+2,12c
+2e,0
+2,12c
+10,0
+4,12c
+1f,0
+2,12c
+2c,0
+2,12c
+e,0
+3,12c
+9,0
+6,12c
+15,0
+2,12c
+2a,0
+2,12c
+d,0
+3,12c
+11,0
+5,12c
+11,0
+2,12c
+28,0
+2,12c
+d,0
+2,12c
+18,0
+3,12c
+f,0
+2,12c
+26,0
+2,12c
+c,0
+2,12c
+1c,0
+3,12c
+e,0
+2,12c
+25,0
+12c
+c,0
+12c
+21,0
+2,12c
+d,0
+12c
+24,0
+12c
+b,0
+2,12c
+24,0
+12c
+d,0
+12c
+22,0
+12c
+b,0
+2,12c
+26,0
+2,12c
+c,0
+12c
+20,0
+2,12c
+a,0
+2,12c
+29,0
+12c
+b,0
+2,12c
+1f,0
+12c
+a,0
+2,12c
+f,0
+3,12c
+19,0
+2,12c
+a,0
+12c
+1e,0
+12c
+b,0
+12c
+2d,0
+2,12c
+a,0
+12c
+1d,0
+12c
+a,0
+12c
+2f,0
+12c
+a,0
+12c
+1c,0
+12c
+a,0
+12c
+3c,0
+12c
+1b,0
+12c
+a,0
+12c
+3c,0
+12c
+1a,0
+12c
+a,0
+12c
+3e,0
+12c
+19,0
+12c
+9,0
+2,12c
+3e,0
+12c
+18,0
+2,12c
+9,0
+12c
+3f,0
+2,12c
+17,0
+12c
+9,0
+2,12c
+40,0
+12c
+17,0
+12c
+9,0
+12c
+41,0
+12c
+17,0
+12c
+9,0
+12c
+41,0
+12c
+16,0
+12c
+9,0
+12c
+1b,0
+d,12c
+1b,0
+12c
+15,0
+12c
+9,0
+12c
+17,0
+4,12c
+d,0
+4,12c
+17,0
+12c
+15,0
+12c
+9,0
+12c
+14,0
+3,12c
+15,0
+3,12c
+14,0
+12c
+15,0
+12c
+9,0
+12c
+13,0
+2,12c
+19,0
+2,12c
+13,0
+12c
+14,0
+12c
+9,0
+12c
+13,0
+12c
+1d,0
+12c
+13,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+1d,0
+b,12c
+1d,0
+12c
+13,0
+12c
+9,0
+12c
+1a,0
+3,12c
+b,0
+3,12c
+1a,0
+12c
+13,0
+12c
+9,0
+12c
+17,0
+3,12c
+11,0
+3,12c
+17,0
+12c
+13,0
+12c
+9,0
+12c
+16,0
+2,12c
+15,0
+2,12c
+16,0
+12c
+13,0
+12c
+9,0
+12c
+14,0
+2,12c
+19,0
+2,12c
+14,0
+12c
+13,0
+12c
+9,0
+12c
+13,0
+12c
+1d,0
+12c
+13,0
+12c
+13,0
+12c
+a,0
+12c
+11,0
+12c
+1f,0
+12c
+12,0
+12c
+13,0
+12c
+a,0
+12c
+10,0
+12c
+21,0
+12c
+11,0
+12c
+14,0
+12c
+9,0
+12c
+f,0
+12c
+23,0
+12c
+f,0
+12c
+15,0
+12c
+9,0
+12c
+f,0
+12c
+23,0
+12c
+f,0
+12c
+15,0
+12c
+a,0
+12c
+d,0
+12c
+25,0
+12c
+e,0
+12c
+15,0
+12c
+a,0
+12c
+d,0
+12c
+25,0
+12c
+e,0
+12c
+16,0
+12c
+9,0
+2,12c
+b,0
+12c
+27,0
+12c
+c,0
+12c
+17,0
+12c
+a,0
+12c
+b,0
+12c
+27,0
+12c
+c,0
+12c
+17,0
+12c
+a,0
+2,12c
+a,0
+12c
+27,0
+12c
+c,0
+12c
+17,0
+2,12c
+a,0
+12c
+a,0
+12c
+27,0
+12c
+b,0
+2,12c
+18,0
+12c
+b,0
+12c
+9,0
+12c
+27,0
+12c
+b,0
+12c
+19,0
+12c
+15,0
+12c
+27,0
+12c
+b,0
+12c
+1a,0
+12c
+14,0
+12c
+27,0
+12c
+a,0
+12c
+1b,0
+12c
+15,0
+12c
+25,0
+12c
+b,0
+12c
+1c,0
+12c
+14,0
+12c
+25,0
+12c
+a,0
+12c
+1d,0
+12c
+15,0
+12c
+23,0
+12c
+b,0
+12c
+1e,0
+12c
+14,0
+12c
+23,0
+12c
+a,0
+12c
+1f,0
+2,12c
+14,0
+12c
+21,0
+12c
+a,0
+2,12c
+20,0
+12c
+15,0
+12c
+1f,0
+12c
+b,0
+12c
+22,0
+12c
+15,0
+12c
+1d,0
+12c
+b,0
+12c
+24,0
+12c
+15,0
+2,12c
+19,0
+2,12c
+b,0
+12c
+25,0
+2,12c
+16,0
+2,12c
+15,0
+2,12c
+c,0
+2,12c
+26,0
+2,12c
+16,0
+3,12c
+11,0
+3,12c
+c,0
+2,12c
+28,0
+2,12c
+18,0
+3,12c
+b,0
+3,12c
+e,0
+2,12c
+2a,0
+2,12c
+1a,0
+b,12c
+10,0
+2,12c
+2c,0
+2,12c
+33,0
+2,12c
+2e,0
+2,12c
+31,0
+2,12c
+31,0
+12c
+2f,0
+12c
+34,0
+2,12c
+2b,0
+2,12c
+36,0
+2,12c
+29,0
+2,12c
+39,0
+2,12c
+25,0
+2,12c
+3d,0
+2,12c
+21,0
+2,12c
+41,0
+3,12c
+1b,0
+3,12c
+45,0
+4,12c
+15,0
+4,12c
+4b,0
+4,12c
+d,0
+4,12c
+53,0
+d,12c
+1c0,0
+100 90 32
+21b,0
+d,3e8
+53,0
+4,3e8
+d,0
+4,3e8
+4b,0
+4,3e8
+15,0
+4,3e8
+45,0
+3,3e8
+1b,0
+3,3e8
+41,0
+2,3e8
+21,0
+2,3e8
+3d,0
+2,3e8
+25,0
+2,3e8
+39,0
+2,3e8
+29,0
+2,3e8
+36,0
+2,3e8
+2b,0
+2,3e8
+34,0
+3e8
+2f,0
+3e8
+31,0
+2,3e8
+13,0
+4,3e8
+1a,0
+2,3e8
+2e,0
+2,3e8
+10,0
+4,3e8
+1f,0
+2,3e8
+2c,0
+2,3e8
+e,0
+3,3e8
+9,0
+6,3e8
+15,0
+2,3e8
+2a,0
+2,3e8
+d,0
+3,3e8
+11,0
+5,3e8
+11,0
+2,3e8
+28,0
+2,3e8
+d,0
+2,3e8
+18,0
+3,3e8
+f,0
+2,3e8
+26,0
+2,3e8
+c,0
+2,3e8
+1c,0
+3,3e8
+e,0
+2,3e8
+25,0
+3e8
+c,0
+3e8
+21,0
+2,3e8
+d,0
+3e8
+24,0
+3e8
+b,0
+2,3e8
+24,0
+3e8
+d,0
+3e8
+22,0
+3e8
+b,0
+2,3e8
+26,0
+2,3e8
+c,0
+3e8
+20,0
+2,3e8
+a,0
+2,3e8
+29,0
+3e8
+b,0
+2,3e8
+1f,0
+3e8
+a,0
+2,3e8
+f,0
+3,3e8
+19,0
+2,3e8
+a,0
+3e8
+1e,0
+3e8
+b,0
+3e8
+2d,0
+2,3e8
+a,0
+3e8
+1d,0
+3e8
+a,0
+3e8
+2f,0
+3e8
+a,0
+3e8
+1c,0
+3e8
+a,0
+3e8
+3c,0
+3e8
+1b,0
+3e8
+a,0
+3e8
+3c,0
+3e8
+1a,0
+3e8
+a,0
+3e8
+3e,0
+3e8
+19,0
+3e8
+9,0
+2,3e8
+3e,0
+3e8
+18,0
+2,3e8
+9,0
+3e8
+3f,0
+2,3e8
+17,0
+3e8
+9,0
+2,3e8
+40,0
+3e8
+17,0
+3e8
+9,0
+3e8
+41,0
+3e8
+17,0
+3e8
+9,0
+3e8
+41,0
+3e8
+16,0
+3e8
+9,0
+3e8
+1b,0
+d,3e8
+1b,0
+3e8
+15,0
+3e8
+9,0
+3e8
+17,0
+4,3e8
+d,0
+4,3e8
+17,0
+3e8
+15,0
+3e8
+9,0
+3e8
+14,0
+3,3e8
+15,0
+3,3e8
+14,0
+3e8
+15,0
+3e8
+9,0
+3e8
+13,0
+2,3e8
+19,0
+2,3e8
+13,0
+3e8
+14,0
+3e8
+9,0
+3e8
+13,0
+3e8
+1d,0
+3e8
+13,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+1d,0
+b,3e8
+1d,0
+3e8
+13,0
+3e8
+9,0
+3e8
+1a,0
+3,3e8
+b,0
+3,3e8
+1a,0
+3e8
+13,0
+3e8
+9,0
+3e8
+17,0
+3,3e8
+11,0
+3,3e8
+17,0
+3e8
+13,0
+3e8
+9,0
+3e8
+16,0
+2,3e8
+15,0
+2,3e8
+16,0
+3e8
+13,0
+3e8
+9,0
+3e8
+14,0
+2,3e8
+19,0
+2,3e8
+14,0
+3e8
+13,0
+3e8
+9,0
+3e8
+13,0
+3e8
+1d,0
+3e8
+13,0
+3e8
+13,0
+3e8
+a,0
+3e8
+11,0
+3e8
+1f,0
+3e8
+12,0
+3e8
+13,0
+3e8
+a,0
+3e8
+10,0
+3e8
+21,0
+3e8
+11,0
+3e8
+14,0
+3e8
+9,0
+3e8
+f,0
+3e8
+23,0
+3e8
+f,0
+3e8
+15,0
+3e8
+9,0
+3e8
+f,0
+3e8
+23,0
+3e8
+f,0
+3e8
+15,0
+3e8
+a,0
+3e8
+d,0
+3e8
+25,0
+3e8
+e,0
+3e8
+15,0
+3e8
+a,0
+3e8
+d,0
+3e8
+25,0
+3e8
+e,0
+3e8
+16,0
+3e8
+9,0
+2,3e8
+b,0
+3e8
+27,0
+3e8
+c,0
+3e8
+17,0
+3e8
+a,0
+3e8
+b,0
+3e8
+27,0
+3e8
+c,0
+3e8
+17,0
+3e8
+a,0
+2,3e8
+a,0
+3e8
+27,0
+3e8
+c,0
+3e8
+17,0
+2,3e8
+a,0
+3e8
+a,0
+3e8
+27,0
+3e8
+b,0
+2,3e8
+18,0
+3e8
+b,0
+3e8
+9,0
+3e8
+27,0
+3e8
+b,0
+3e8
+19,0
+3e8
+15,0
+3e8
+27,0
+3e8
+b,0
+3e8
+1a,0
+3e8
+14,0
+3e8
+27,0
+3e8
+a,0
+3e8
+1b,0
+3e8
+15,0
+3e8
+25,0
+3e8
+b,0
+3e8
+1c,0
+3e8
+14,0
+3e8
+25,0
+3e8
+a,0
+3e8
+1d,0
+3e8
+15,0
+3e8
+23,0
+3e8
+b,0
+3e8
+1e,0
+3e8
+14,0
+3e8
+23,0
+3e8
+a,0
+3e8
+1f,0
+2,3e8
+14,0
+3e8
+21,0
+3e8
+a,0
+2,3e8
+20,0
+3e8
+15,0
+3e8
+1f,0
+3e8
+b,0
+3e8
+22,0
+3e8
+15,0
+3e8
+1d,0
+3e8
+b,0
+3e8
+24,0
+3e8
+15,0
+2,3e8
+19,0
+2,3e8
+b,0
+3e8
+25,0
+2,3e8
+16,0
+2,3e8
+15,0
+2,3e8
+c,0
+2,3e8
+26,0
+2,3e8
+16,0
+3,3e8
+11,0
+3,3e8
+c,0
+2,3e8
+28,0
+2,3e8
+18,0
+3,3e8
+b,0
+3,3e8
+e,0
+2,3e8
+2a,0
+2,3e8
+1a,0
+b,3e8
+10,0
+2,3e8
+2c,0
+2,3e8
+33,0
+2,3e8
+2e,0
+2,3e8
+31,0
+2,3e8
+31,0
+3e8
+2f,0
+3e8
+34,0
+2,3e8
+2b,0
+2,3e8
+36,0
+2,3e8
+29,0
+2,3e8
+39,0
+2,3e8
+25,0
+2,3e8
+3d,0
+2,3e8
+21,0
+2,3e8
+41,0
+3,3e8
+1b,0
+3,3e8
+45,0
+4,3e8
+15,0
+4,3e8
+4b,0
+4,3e8
+d,0
+4,3e8
+53,0
+d,3e8
+1c0,0
+100 90 32
+21b,0
+d,111111
+53,0
+4,111111
+d,0
+4,111111
+4b,0
+4,111111
+15,0
+4,111111
+45,0
+3,111111
+1b,0
+3,111111
+41,0
+2,111111
+21,0
+2,111111
+3d,0
+2,111111
+25,0
+2,111111
+39,0
+2,111111
+29,0
+2,111111
+36,0
+2,111111
+2b,0
+2,111111
+34,0
+111111
+2f,0
+111111
+31,0
+2,111111
+13,0
+4,111111
+1a,0
+2,111111
+2e,0
+2,111111
+10,0
+4,111111
+1f,0
+2,111111
+2c,0
+2,111111
+e,0
+3,111111
+9,0
+6,111111
+15,0
+2,111111
+2a,0
+2,111111
+d,0
+3,111111
+11,0
+5,111111
+11,0
+2,111111
+28,0
+2,111111
+d,0
+2,111111
+18,0
+3,111111
+f,0
+2,111111
+26,0
+2,111111
+c,0
+2,111111
+1c,0
+3,111111
+e,0
+2,111111
+25,0
+111111
+c,0
+111111
+21,0
+2,111111
+d,0
+111111
+24,0
+111111
+b,0
+2,111111
+24,0
+111111
+d,0
+111111
+22,0
+111111
+b,0
+2,111111
+26,0
+2,111111
+c,0
+111111
+20,0
+2,111111
+a,0
+2,111111
+29,0
+111111
+b,0
+2,111111
+1f,0
+111111
+a,0
+2,111111
+f,0
+3,111111
+19,0
+2,111111
+a,0
+111111
+1e,0
+111111
+b,0
+111111
+2d,0
+2,111111
+a,0
+111111
+1d,0
+111111
+a,0
+111111
+2f,0
+111111
+a,0
+111111
+1c,0
+111111
+a,0
+111111
+3c,0
+111111
+1b,0
+111111
+a,0
+111111
+3c,0
+111111
+1a,0
+111111
+a,0
+111111
+3e,0
+111111
+19,0
+111111
+9,0
+2,111111
+3e,0
+111111
+18,0
+2,111111
+9,0
+111111
+3f,0
+2,111111
+17,0
+111111
+9,0
+2,111111
+40,0
+111111
+17,0
+111111
+9,0
+111111
+41,0
+111111
+17,0
+111111
+9,0
+111111
+41,0
+111111
+16,0
+111111
+9,0
+111111
+1b,0
+d,111111
+1b,0
+111111
+15,0
+111111
+9,0
+111111
+17,0
+4,111111
+d,0
+4,111111
+17,0
+111111
+15,0
+111111
+9,0
+111111
+14,0
+3,111111
+15,0
+3,111111
+14,0
+111111
+15,0
+111111
+9,0
+111111
+13,0
+2,111111
+19,0
+2,111111
+13,0
+111111
+14,0
+111111
+9,0
+111111
+13,0
+111111
+1d,0
+111111
+13,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+1d,0
+b,111111
+1d,0
+111111
+13,0
+111111
+9,0
+111111
+1a,0
+3,111111
+b,0
+3,111111
+1a,0
+111111
+13,0
+111111
+9,0
+111111
+17,0
+3,111111
+11,0
+3,111111
+17,0
+111111
+13,0
+111111
+9,0
+111111
+16,0
+2,111111
+15,0
+2,111111
+16,0
+111111
+13,0
+111111
+9,0
+111111
+14,0
+2,111111
+19,0
+2,111111
+14,0
+111111
+13,0
+111111
+9,0
+111111
+13,0
+111111
+1d,0
+111111
+13,0
+111111
+13,0
+111111
+a,0
+111111
+11,0
+111111
+1f,0
+111111
+12,0
+111111
+13,0
+111111
+a,0
+111111
+10,0
+111111
+21,0
+111111
+11,0
+111111
+14,0
+111111
+9,0
+111111
+f,0
+111111
+23,0
+111111
+f,0
+111111
+15,0
+111111
+9,0
+111111
+f,0
+111111
+23,0
+111111
+f,0
+111111
+15,0
+111111
+a,0
+111111
+d,0
+111111
+25,0
+111111
+e,0
+111111
+15,0
+111111
+a,0
+111111
+d,0
+111111
+25,0
+111111
+e,0
+111111
+16,0
+111111
+9,0
+2,111111
+b,0
+111111
+27,0
+111111
+c,0
+111111
+17,0
+111111
+a,0
+111111
+b,0
+111111
+27,0
+111111
+c,0
+111111
+17,0
+111111
+a,0
+2,111111
+a,0
+111111
+27,0
+111111
+c,0
+111111
+17,0
+2,111111
+a,0
+111111
+a,0
+111111
+27,0
+111111
+b,0
+2,111111
+18,0
+111111
+b,0
+111111
+9,0
+111111
+27,0
+111111
+b,0
+111111
+19,0
+111111
+15,0
+111111
+27,0
+111111
+b,0
+111111
+1a,0
+111111
+14,0
+111111
+27,0
+111111
+a,0
+111111
+1b,0
+111111
+15,0
+111111
+25,0
+111111
+b,0
+111111
+1c,0
+111111
+14,0
+111111
+25,0
+111111
+a,0
+111111
+1d,0
+111111
+15,0
+111111
+23,0
+111111
+b,0
+111111
+1e,0
+111111
+14,0
+111111
+23,0
+111111
+a,0
+111111
+1f,0
+2,111111
+14,0
+111111
+21,0
+111111
+a,0
+2,111111
+20,0
+111111
+15,0
+111111
+1f,0
+111111
+b,0
+111111
+22,0
+111111
+15,0
+111111
+1d,0
+111111
+b,0
+111111
+24,0
+111111
+15,0
+2,111111
+19,0
+2,111111
+b,0
+111111
+25,0
+2,111111
+16,0
+2,111111
+15,0
+2,111111
+c,0
+2,111111
+26,0
+2,111111
+16,0
+3,111111
+11,0
+3,111111
+c,0
+2,111111
+28,0
+2,111111
+18,0
+3,111111
+b,0
+3,111111
+e,0
+2,111111
+2a,0
+2,111111
+1a,0
+b,111111
+10,0
+2,111111
+2c,0
+2,111111
+33,0
+2,111111
+2e,0
+2,111111
+31,0
+2,111111
+31,0
+111111
+2f,0
+111111
+34,0
+2,111111
+2b,0
+2,111111
+36,0
+2,111111
+29,0
+2,111111
+39,0
+2,111111
+25,0
+2,111111
+3d,0
+2,111111
+21,0
+2,111111
+41,0
+3,111111
+1b,0
+3,111111
+45,0
+4,111111
+15,0
+4,111111
+4b,0
+4,111111
+d,0
+4,111111
+53,0
+d,111111
+1c0,0
+100 90 32
+21b,0
+d,400200
+53,0
+4,400200
+d,0
+4,400200
+4b,0
+4,400200
+15,0
+4,400200
+45,0
+3,400200
+1b,0
+3,400200
+41,0
+2,400200
+21,0
+2,400200
+3d,0
+2,400200
+25,0
+2,400200
+39,0
+2,400200
+29,0
+2,400200
+36,0
+2,400200
+2b,0
+2,400200
+34,0
+400200
+2f,0
+400200
+31,0
+2,400200
+13,0
+4,400200
+1a,0
+2,400200
+2e,0
+2,400200
+10,0
+4,400200
+1f,0
+2,400200
+2c,0
+2,400200
+e,0
+3,400200
+9,0
+6,400200
+15,0
+2,400200
+2a,0
+2,400200
+d,0
+3,400200
+11,0
+5,400200
+11,0
+2,400200
+28,0
+2,400200
+d,0
+2,400200
+18,0
+3,400200
+f,0
+2,400200
+26,0
+2,400200
+c,0
+2,400200
+1c,0
+3,400200
+e,0
+2,400200
+25,0
+400200
+c,0
+400200
+21,0
+2,400200
+d,0
+400200
+24,0
+400200
+b,0
+2,400200
+24,0
+400200
+d,0
+400200
+22,0
+400200
+b,0
+2,400200
+26,0
+2,400200
+c,0
+400200
+20,0
+2,400200
+a,0
+2,400200
+29,0
+400200
+b,0
+2,400200
+1f,0
+400200
+a,0
+2,400200
+f,0
+3,400200
+19,0
+2,400200
+a,0
+400200
+1e,0
+400200
+b,0
+400200
+2d,0
+2,400200
+a,0
+400200
+1d,0
+400200
+a,0
+400200
+2f,0
+400200
+a,0
+400200
+1c,0
+400200
+a,0
+400200
+3c,0
+400200
+1b,0
+400200
+a,0
+400200
+3c,0
+400200
+1a,0
+400200
+a,0
+400200
+3e,0
+400200
+19,0
+400200
+9,0
+2,400200
+3e,0
+400200
+18,0
+2,400200
+9,0
+400200
+3f,0
+2,400200
+17,0
+400200
+9,0
+2,400200
+40,0
+400200
+17,0
+400200
+9,0
+400200
+41,0
+400200
+17,0
+400200
+9,0
+400200
+41,0
+400200
+16,0
+400200
+9,0
+400200
+1b,0
+d,400200
+1b,0
+400200
+15,0
+400200
+9,0
+400200
+17,0
+4,400200
+d,0
+4,400200
+17,0
+400200
+15,0
+400200
+9,0
+400200
+14,0
+3,400200
+15,0
+3,400200
+14,0
+400200
+15,0
+400200
+9,0
+400200
+13,0
+2,400200
+19,0
+2,400200
+13,0
+400200
+14,0
+400200
+9,0
+400200
+13,0
+400200
+1d,0
+400200
+13,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+1d,0
+b,400200
+1d,0
+400200
+13,0
+400200
+9,0
+400200
+1a,0
+3,400200
+b,0
+3,400200
+1a,0
+400200
+13,0
+400200
+9,0
+400200
+17,0
+3,400200
+11,0
+3,400200
+17,0
+400200
+13,0
+400200
+9,0
+400200
+16,0
+2,400200
+15,0
+2,400200
+16,0
+400200
+13,0
+400200
+9,0
+400200
+14,0
+2,400200
+19,0
+2,400200
+14,0
+400200
+13,0
+400200
+9,0
+400200
+13,0
+400200
+1d,0
+400200
+13,0
+400200
+13,0
+400200
+a,0
+400200
+11,0
+400200
+1f,0
+400200
+12,0
+400200
+13,0
+400200
+a,0
+400200
+10,0
+400200
+21,0
+400200
+11,0
+400200
+14,0
+400200
+9,0
+400200
+f,0
+400200
+23,0
+400200
+f,0
+400200
+15,0
+400200
+9,0
+400200
+f,0
+400200
+23,0
+400200
+f,0
+400200
+15,0
+400200
+a,0
+400200
+d,0
+400200
+25,0
+400200
+e,0
+400200
+15,0
+400200
+a,0
+400200
+d,0
+400200
+25,0
+400200
+e,0
+400200
+16,0
+400200
+9,0
+2,400200
+b,0
+400200
+27,0
+400200
+c,0
+400200
+17,0
+400200
+a,0
+400200
+b,0
+400200
+27,0
+400200
+c,0
+400200
+17,0
+400200
+a,0
+2,400200
+a,0
+400200
+27,0
+400200
+c,0
+400200
+17,0
+2,400200
+a,0
+400200
+a,0
+400200
+27,0
+400200
+b,0
+2,400200
+18,0
+400200
+b,0
+400200
+9,0
+400200
+27,0
+400200
+b,0
+400200
+19,0
+400200
+15,0
+400200
+27,0
+400200
+b,0
+400200
+1a,0
+400200
+14,0
+400200
+27,0
+400200
+a,0
+400200
+1b,0
+400200
+15,0
+400200
+25,0
+400200
+b,0
+400200
+1c,0
+400200
+14,0
+400200
+25,0
+400200
+a,0
+400200
+1d,0
+400200
+15,0
+400200
+23,0
+400200
+b,0
+400200
+1e,0
+400200
+14,0
+400200
+23,0
+400200
+a,0
+400200
+1f,0
+2,400200
+14,0
+400200
+21,0
+400200
+a,0
+2,400200
+20,0
+400200
+15,0
+400200
+1f,0
+400200
+b,0
+400200
+22,0
+400200
+15,0
+400200
+1d,0
+400200
+b,0
+400200
+24,0
+400200
+15,0
+2,400200
+19,0
+2,400200
+b,0
+400200
+25,0
+2,400200
+16,0
+2,400200
+15,0
+2,400200
+c,0
+2,400200
+26,0
+2,400200
+16,0
+3,400200
+11,0
+3,400200
+c,0
+2,400200
+28,0
+2,400200
+18,0
+3,400200
+b,0
+3,400200
+e,0
+2,400200
+2a,0
+2,400200
+1a,0
+b,400200
+10,0
+2,400200
+2c,0
+2,400200
+33,0
+2,400200
+2e,0
+2,400200
+31,0
+2,400200
+31,0
+400200
+2f,0
+400200
+34,0
+2,400200
+2b,0
+2,400200
+36,0
+2,400200
+29,0
+2,400200
+39,0
+2,400200
+25,0
+2,400200
+3d,0
+2,400200
+21,0
+2,400200
+41,0
+3,400200
+1b,0
+3,400200
+45,0
+4,400200
+15,0
+4,400200
+4b,0
+4,400200
+d,0
+4,400200
+53,0
+d,400200
+1c0,0
+100 90 32
+21b,0
+d,777777
+53,0
+4,777777
+d,0
+4,777777
+4b,0
+4,777777
+15,0
+4,777777
+45,0
+3,777777
+1b,0
+3,777777
+41,0
+2,777777
+21,0
+2,777777
+3d,0
+2,777777
+25,0
+2,777777
+39,0
+2,777777
+29,0
+2,777777
+36,0
+2,777777
+2b,0
+2,777777
+34,0
+777777
+2f,0
+777777
+31,0
+2,777777
+13,0
+4,777777
+1a,0
+2,777777
+2e,0
+2,777777
+10,0
+4,777777
+1f,0
+2,777777
+2c,0
+2,777777
+e,0
+3,777777
+9,0
+6,777777
+15,0
+2,777777
+2a,0
+2,777777
+d,0
+3,777777
+11,0
+5,777777
+11,0
+2,777777
+28,0
+2,777777
+d,0
+2,777777
+18,0
+3,777777
+f,0
+2,777777
+26,0
+2,777777
+c,0
+2,777777
+1c,0
+3,777777
+e,0
+2,777777
+25,0
+777777
+c,0
+777777
+21,0
+2,777777
+d,0
+777777
+24,0
+777777
+b,0
+2,777777
+24,0
+777777
+d,0
+777777
+22,0
+777777
+b,0
+2,777777
+26,0
+2,777777
+c,0
+777777
+20,0
+2,777777
+a,0
+2,777777
+29,0
+777777
+b,0
+2,777777
+1f,0
+777777
+a,0
+2,777777
+f,0
+3,777777
+19,0
+2,777777
+a,0
+777777
+1e,0
+777777
+b,0
+777777
+2d,0
+2,777777
+a,0
+777777
+1d,0
+777777
+a,0
+777777
+2f,0
+777777
+a,0
+777777
+1c,0
+777777
+a,0
+777777
+3c,0
+777777
+1b,0
+777777
+a,0
+777777
+3c,0
+777777
+1a,0
+777777
+a,0
+777777
+3e,0
+777777
+19,0
+777777
+9,0
+2,777777
+3e,0
+777777
+18,0
+2,777777
+9,0
+777777
+3f,0
+2,777777
+17,0
+777777
+9,0
+2,777777
+40,0
+777777
+17,0
+777777
+9,0
+777777
+41,0
+777777
+17,0
+777777
+9,0
+777777
+41,0
+777777
+16,0
+777777
+9,0
+777777
+1b,0
+d,777777
+1b,0
+777777
+15,0
+777777
+9,0
+777777
+17,0
+4,777777
+d,0
+4,777777
+17,0
+777777
+15,0
+777777
+9,0
+777777
+14,0
+3,777777
+15,0
+3,777777
+14,0
+777777
+15,0
+777777
+9,0
+777777
+13,0
+2,777777
+19,0
+2,777777
+13,0
+777777
+14,0
+777777
+9,0
+777777
+13,0
+777777
+1d,0
+777777
+13,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+1d,0
+b,777777
+1d,0
+777777
+13,0
+777777
+9,0
+777777
+1a,0
+3,777777
+b,0
+3,777777
+1a,0
+777777
+13,0
+777777
+9,0
+777777
+17,0
+3,777777
+11,0
+3,777777
+17,0
+777777
+13,0
+777777
+9,0
+777777
+16,0
+2,777777
+15,0
+2,777777
+16,0
+777777
+13,0
+777777
+9,0
+777777
+14,0
+2,777777
+19,0
+2,777777
+14,0
+777777
+13,0
+777777
+9,0
+777777
+13,0
+777777
+1d,0
+777777
+13,0
+777777
+13,0
+777777
+a,0
+777777
+11,0
+777777
+1f,0
+777777
+12,0
+777777
+13,0
+777777
+a,0
+777777
+10,0
+777777
+21,0
+777777
+11,0
+777777
+14,0
+777777
+9,0
+777777
+f,0
+777777
+23,0
+777777
+f,0
+777777
+15,0
+777777
+9,0
+777777
+f,0
+777777
+23,0
+777777
+f,0
+777777
+15,0
+777777
+a,0
+777777
+d,0
+777777
+25,0
+777777
+e,0
+777777
+15,0
+777777
+a,0
+777777
+d,0
+777777
+25,0
+777777
+e,0
+777777
+16,0
+777777
+9,0
+2,777777
+b,0
+777777
+27,0
+777777
+c,0
+777777
+17,0
+777777
+a,0
+777777
+b,0
+777777
+27,0
+777777
+c,0
+777777
+17,0
+777777
+a,0
+2,777777
+a,0
+777777
+27,0
+777777
+c,0
+777777
+17,0
+2,777777
+a,0
+777777
+a,0
+777777
+27,0
+777777
+b,0
+2,777777
+18,0
+777777
+b,0
+777777
+9,0
+777777
+27,0
+777777
+b,0
+777777
+19,0
+777777
+15,0
+777777
+27,0
+777777
+b,0
+777777
+1a,0
+777777
+14,0
+777777
+27,0
+777777
+a,0
+777777
+1b,0
+777777
+15,0
+777777
+25,0
+777777
+b,0
+777777
+1c,0
+777777
+14,0
+777777
+25,0
+777777
+a,0
+777777
+1d,0
+777777
+15,0
+777777
+23,0
+777777
+b,0
+777777
+1e,0
+777777
+14,0
+777777
+23,0
+777777
+a,0
+777777
+1f,0
+2,777777
+14,0
+777777
+21,0
+777777
+a,0
+2,777777
+20,0
+777777
+15,0
+777777
+1f,0
+777777
+b,0
+777777
+22,0
+777777
+15,0
+777777
+1d,0
+777777
+b,0
+777777
+24,0
+777777
+15,0
+2,777777
+19,0
+2,777777
+b,0
+777777
+25,0
+2,777777
+16,0
+2,777777
+15,0
+2,777777
+c,0
+2,777777
+26,0
+2,777777
+16,0
+3,777777
+11,0
+3,777777
+c,0
+2,777777
+28,0
+2,777777
+18,0
+3,777777
+b,0
+3,777777
+e,0
+2,777777
+2a,0
+2,777777
+1a,0
+b,777777
+10,0
+2,777777
+2c,0
+2,777777
+33,0
+2,777777
+2e,0
+2,777777
+31,0
+2,777777
+31,0
+777777
+2f,0
+777777
+34,0
+2,777777
+2b,0
+2,777777
+36,0
+2,777777
+29,0
+2,777777
+39,0
+2,777777
+25,0
+2,777777
+3d,0
+2,777777
+21,0
+2,777777
+41,0
+3,777777
+1b,0
+3,777777
+45,0
+4,777777
+15,0
+4,777777
+4b,0
+4,777777
+d,0
+4,777777
+53,0
+d,777777
+1c0,0
+100 90 32
+21b,0
+d,1
+53,0
+4,1
+d,0
+4,1
+4b,0
+4,1
+15,0
+4,1
+45,0
+3,1
+1b,0
+3,1
+41,0
+2,1
+21,0
+2,1
+3d,0
+2,1
+25,0
+2,1
+39,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+34,0
+1
+2f,0
+1
+31,0
+2,1
+13,0
+4,1
+1a,0
+2,1
+2e,0
+2,1
+10,0
+4,1
+1f,0
+2,1
+2c,0
+2,1
+e,0
+3,1
+9,0
+6,1
+15,0
+2,1
+2a,0
+2,1
+d,0
+3,1
+11,0
+5,1
+11,0
+2,1
+28,0
+2,1
+d,0
+2,1
+18,0
+3,1
+f,0
+2,1
+26,0
+2,1
+c,0
+2,1
+1c,0
+3,1
+e,0
+2,1
+25,0
+1
+c,0
+1
+21,0
+2,1
+d,0
+1
+24,0
+1
+b,0
+2,1
+24,0
+1
+d,0
+1
+22,0
+1
+b,0
+2,1
+26,0
+2,1
+c,0
+1
+20,0
+2,1
+a,0
+2,1
+29,0
+1
+b,0
+2,1
+1f,0
+1
+a,0
+2,1
+f,0
+3,1
+19,0
+2,1
+a,0
+1
+1e,0
+1
+b,0
+1
+2d,0
+2,1
+a,0
+1
+1d,0
+1
+a,0
+1
+2f,0
+1
+a,0
+1
+1c,0
+1
+a,0
+1
+3c,0
+1
+1b,0
+1
+a,0
+1
+3c,0
+1
+1a,0
+1
+a,0
+1
+3e,0
+1
+19,0
+1
+9,0
+2,1
+3e,0
+1
+18,0
+2,1
+9,0
+1
+3f,0
+2,1
+17,0
+1
+9,0
+2,1
+40,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+16,0
+1
+9,0
+1
+1b,0
+d,1
+1b,0
+1
+15,0
+1
+9,0
+1
+17,0
+4,1
+d,0
+4,1
+17,0
+1
+15,0
+1
+9,0
+1
+14,0
+3,1
+15,0
+3,1
+14,0
+1
+15,0
+1
+9,0
+1
+13,0
+2,1
+19,0
+2,1
+13,0
+1
+14,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+1d,0
+b,1
+1d,0
+1
+13,0
+1
+9,0
+1
+1a,0
+3,1
+b,0
+3,1
+1a,0
+1
+13,0
+1
+9,0
+1
+17,0
+3,1
+11,0
+3,1
+17,0
+1
+13,0
+1
+9,0
+1
+16,0
+2,1
+15,0
+2,1
+16,0
+1
+13,0
+1
+9,0
+1
+14,0
+2,1
+19,0
+2,1
+14,0
+1
+13,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+a,0
+1
+11,0
+1
+1f,0
+1
+12,0
+1
+13,0
+1
+a,0
+1
+10,0
+1
+21,0
+1
+11,0
+1
+14,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+16,0
+1
+9,0
+2,1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+2,1
+a,0
+1
+27,0
+1
+c,0
+1
+17,0
+2,1
+a,0
+1
+a,0
+1
+27,0
+1
+b,0
+2,1
+18,0
+1
+b,0
+1
+9,0
+1
+27,0
+1
+b,0
+1
+19,0
+1
+15,0
+1
+27,0
+1
+b,0
+1
+1a,0
+1
+14,0
+1
+27,0
+1
+a,0
+1
+1b,0
+1
+15,0
+1
+25,0
+1
+b,0
+1
+1c,0
+1
+14,0
+1
+25,0
+1
+a,0
+1
+1d,0
+1
+15,0
+1
+23,0
+1
+b,0
+1
+1e,0
+1
+14,0
+1
+23,0
+1
+a,0
+1
+1f,0
+2,1
+14,0
+1
+21,0
+1
+a,0
+2,1
+20,0
+1
+15,0
+1
+1f,0
+1
+b,0
+1
+22,0
+1
+15,0
+1
+1d,0
+1
+b,0
+1
+24,0
+1
+15,0
+2,1
+19,0
+2,1
+b,0
+1
+25,0
+2,1
+16,0
+2,1
+15,0
+2,1
+c,0
+2,1
+26,0
+2,1
+16,0
+3,1
+11,0
+3,1
+c,0
+2,1
+28,0
+2,1
+18,0
+3,1
+b,0
+3,1
+e,0
+2,1
+2a,0
+2,1
+1a,0
+b,1
+10,0
+2,1
+2c,0
+2,1
+33,0
+2,1
+2e,0
+2,1
+31,0
+2,1
+31,0
+1
+2f,0
+1
+34,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+39,0
+2,1
+25,0
+2,1
+3d,0
+2,1
+21,0
+2,1
+41,0
+3,1
+1b,0
+3,1
+45,0
+4,1
+15,0
+4,1
+4b,0
+4,1
+d,0
+4,1
+53,0
+d,1
+1c0,0
+100 90 32
+21b,0
+d,2
+53,0
+4,2
+d,0
+4,2
+4b,0
+4,2
+15,0
+4,2
+45,0
+3,2
+1b,0
+3,2
+41,0
+2,2
+21,0
+2,2
+3d,0
+2,2
+25,0
+2,2
+39,0
+2,2
+29,0
+2,2
+36,0
+2,2
+2b,0
+2,2
+34,0
+2
+2f,0
+2
+31,0
+2,2
+13,0
+4,2
+1a,0
+2,2
+2e,0
+2,2
+10,0
+4,2
+1f,0
+2,2
+2c,0
+2,2
+e,0
+3,2
+9,0
+6,2
+15,0
+2,2
+2a,0
+2,2
+d,0
+3,2
+11,0
+5,2
+11,0
+2,2
+28,0
+2,2
+d,0
+2,2
+18,0
+3,2
+f,0
+2,2
+26,0
+2,2
+c,0
+2,2
+1c,0
+3,2
+e,0
+2,2
+25,0
+2
+c,0
+2
+21,0
+2,2
+d,0
+2
+24,0
+2
+b,0
+2,2
+24,0
+2
+d,0
+2
+22,0
+2
+b,0
+2,2
+26,0
+2,2
+c,0
+2
+20,0
+2,2
+a,0
+2,2
+29,0
+2
+b,0
+2,2
+1f,0
+2
+a,0
+2,2
+f,0
+3,2
+19,0
+2,2
+a,0
+2
+1e,0
+2
+b,0
+2
+2d,0
+2,2
+a,0
+2
+1d,0
+2
+a,0
+2
+2f,0
+2
+a,0
+2
+1c,0
+2
+a,0
+2
+3c,0
+2
+1b,0
+2
+a,0
+2
+3c,0
+2
+1a,0
+2
+a,0
+2
+3e,0
+2
+19,0
+2
+9,0
+2,2
+3e,0
+2
+18,0
+2,2
+9,0
+2
+3f,0
+2,2
+17,0
+2
+9,0
+2,2
+40,0
+2
+17,0
+2
+9,0
+2
+41,0
+2
+17,0
+2
+9,0
+2
+41,0
+2
+16,0
+2
+9,0
+2
+1b,0
+d,2
+1b,0
+2
+15,0
+2
+9,0
+2
+17,0
+4,2
+d,0
+4,2
+17,0
+2
+15,0
+2
+9,0
+2
+14,0
+3,2
+15,0
+3,2
+14,0
+2
+15,0
+2
+9,0
+2
+13,0
+2,2
+19,0
+2,2
+13,0
+2
+14,0
+2
+9,0
+2
+13,0
+2
+1d,0
+2
+13,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+1d,0
+b,2
+1d,0
+2
+13,0
+2
+9,0
+2
+1a,0
+3,2
+b,0
+3,2
+1a,0
+2
+13,0
+2
+9,0
+2
+17,0
+3,2
+11,0
+3,2
+17,0
+2
+13,0
+2
+9,0
+2
+16,0
+2,2
+15,0
+2,2
+16,0
+2
+13,0
+2
+9,0
+2
+14,0
+2,2
+19,0
+2,2
+14,0
+2
+13,0
+2
+9,0
+2
+13,0
+2
+1d,0
+2
+13,0
+2
+13,0
+2
+a,0
+2
+11,0
+2
+1f,0
+2
+12,0
+2
+13,0
+2
+a,0
+2
+10,0
+2
+21,0
+2
+11,0
+2
+14,0
+2
+9,0
+2
+f,0
+2
+23,0
+2
+f,0
+2
+15,0
+2
+9,0
+2
+f,0
+2
+23,0
+2
+f,0
+2
+15,0
+2
+a,0
+2
+d,0
+2
+25,0
+2
+e,0
+2
+15,0
+2
+a,0
+2
+d,0
+2
+25,0
+2
+e,0
+2
+16,0
+2
+9,0
+2,2
+b,0
+2
+27,0
+2
+c,0
+2
+17,0
+2
+a,0
+2
+b,0
+2
+27,0
+2
+c,0
+2
+17,0
+2
+a,0
+2,2
+a,0
+2
+27,0
+2
+c,0
+2
+17,0
+2,2
+a,0
+2
+a,0
+2
+27,0
+2
+b,0
+2,2
+18,0
+2
+b,0
+2
+9,0
+2
+27,0
+2
+b,0
+2
+19,0
+2
+15,0
+2
+27,0
+2
+b,0
+2
+1a,0
+2
+14,0
+2
+27,0
+2
+a,0
+2
+1b,0
+2
+15,0
+2
+25,0
+2
+b,0
+2
+1c,0
+2
+14,0
+2
+25,0
+2
+a,0
+2
+1d,0
+2
+15,0
+2
+23,0
+2
+b,0
+2
+1e,0
+2
+14,0
+2
+23,0
+2
+a,0
+2
+1f,0
+2,2
+14,0
+2
+21,0
+2
+a,0
+2,2
+20,0
+2
+15,0
+2
+1f,0
+2
+b,0
+2
+22,0
+2
+15,0
+2
+1d,0
+2
+b,0
+2
+24,0
+2
+15,0
+2,2
+19,0
+2,2
+b,0
+2
+25,0
+2,2
+16,0
+2,2
+15,0
+2,2
+c,0
+2,2
+26,0
+2,2
+16,0
+3,2
+11,0
+3,2
+c,0
+2,2
+28,0
+2,2
+18,0
+3,2
+b,0
+3,2
+e,0
+2,2
+2a,0
+2,2
+1a,0
+b,2
+10,0
+2,2
+2c,0
+2,2
+33,0
+2,2
+2e,0
+2,2
+31,0
+2,2
+31,0
+2
+2f,0
+2
+34,0
+2,2
+2b,0
+2,2
+36,0
+2,2
+29,0
+2,2
+39,0
+2,2
+25,0
+2,2
+3d,0
+2,2
+21,0
+2,2
+41,0
+3,2
+1b,0
+3,2
+45,0
+4,2
+15,0
+4,2
+4b,0
+4,2
+d,0
+4,2
+53,0
+d,2
+1c0,0
+100 90 32
+21b,0
+d,3
+53,0
+4,3
+d,0
+4,3
+4b,0
+4,3
+15,0
+4,3
+45,0
+3,3
+1b,0
+3,3
+41,0
+2,3
+21,0
+2,3
+3d,0
+2,3
+25,0
+2,3
+39,0
+2,3
+29,0
+2,3
+36,0
+2,3
+2b,0
+2,3
+34,0
+3
+2f,0
+3
+31,0
+2,3
+13,0
+4,3
+1a,0
+2,3
+2e,0
+2,3
+10,0
+4,3
+1f,0
+2,3
+2c,0
+2,3
+e,0
+3,3
+9,0
+6,3
+15,0
+2,3
+2a,0
+2,3
+d,0
+3,3
+11,0
+5,3
+11,0
+2,3
+28,0
+2,3
+d,0
+2,3
+18,0
+3,3
+f,0
+2,3
+26,0
+2,3
+c,0
+2,3
+1c,0
+3,3
+e,0
+2,3
+25,0
+3
+c,0
+3
+21,0
+2,3
+d,0
+3
+24,0
+3
+b,0
+2,3
+24,0
+3
+d,0
+3
+22,0
+3
+b,0
+2,3
+26,0
+2,3
+c,0
+3
+20,0
+2,3
+a,0
+2,3
+29,0
+3
+b,0
+2,3
+1f,0
+3
+a,0
+2,3
+f,0
+3,3
+19,0
+2,3
+a,0
+3
+1e,0
+3
+b,0
+3
+2d,0
+2,3
+a,0
+3
+1d,0
+3
+a,0
+3
+2f,0
+3
+a,0
+3
+1c,0
+3
+a,0
+3
+3c,0
+3
+1b,0
+3
+a,0
+3
+3c,0
+3
+1a,0
+3
+a,0
+3
+3e,0
+3
+19,0
+3
+9,0
+2,3
+3e,0
+3
+18,0
+2,3
+9,0
+3
+3f,0
+2,3
+17,0
+3
+9,0
+2,3
+40,0
+3
+17,0
+3
+9,0
+3
+41,0
+3
+17,0
+3
+9,0
+3
+41,0
+3
+16,0
+3
+9,0
+3
+1b,0
+d,3
+1b,0
+3
+15,0
+3
+9,0
+3
+17,0
+4,3
+d,0
+4,3
+17,0
+3
+15,0
+3
+9,0
+3
+14,0
+3,3
+15,0
+3,3
+14,0
+3
+15,0
+3
+9,0
+3
+13,0
+2,3
+19,0
+2,3
+13,0
+3
+14,0
+3
+9,0
+3
+13,0
+3
+1d,0
+3
+13,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+1d,0
+b,3
+1d,0
+3
+13,0
+3
+9,0
+3
+1a,0
+3,3
+b,0
+3,3
+1a,0
+3
+13,0
+3
+9,0
+3
+17,0
+3,3
+11,0
+3,3
+17,0
+3
+13,0
+3
+9,0
+3
+16,0
+2,3
+15,0
+2,3
+16,0
+3
+13,0
+3
+9,0
+3
+14,0
+2,3
+19,0
+2,3
+14,0
+3
+13,0
+3
+9,0
+3
+13,0
+3
+1d,0
+3
+13,0
+3
+13,0
+3
+a,0
+3
+11,0
+3
+1f,0
+3
+12,0
+3
+13,0
+3
+a,0
+3
+10,0
+3
+21,0
+3
+11,0
+3
+14,0
+3
+9,0
+3
+f,0
+3
+23,0
+3
+f,0
+3
+15,0
+3
+9,0
+3
+f,0
+3
+23,0
+3
+f,0
+3
+15,0
+3
+a,0
+3
+d,0
+3
+25,0
+3
+e,0
+3
+15,0
+3
+a,0
+3
+d,0
+3
+25,0
+3
+e,0
+3
+16,0
+3
+9,0
+2,3
+b,0
+3
+27,0
+3
+c,0
+3
+17,0
+3
+a,0
+3
+b,0
+3
+27,0
+3
+c,0
+3
+17,0
+3
+a,0
+2,3
+a,0
+3
+27,0
+3
+c,0
+3
+17,0
+2,3
+a,0
+3
+a,0
+3
+27,0
+3
+b,0
+2,3
+18,0
+3
+b,0
+3
+9,0
+3
+27,0
+3
+b,0
+3
+19,0
+3
+15,0
+3
+27,0
+3
+b,0
+3
+1a,0
+3
+14,0
+3
+27,0
+3
+a,0
+3
+1b,0
+3
+15,0
+3
+25,0
+3
+b,0
+3
+1c,0
+3
+14,0
+3
+25,0
+3
+a,0
+3
+1d,0
+3
+15,0
+3
+23,0
+3
+b,0
+3
+1e,0
+3
+14,0
+3
+23,0
+3
+a,0
+3
+1f,0
+2,3
+14,0
+3
+21,0
+3
+a,0
+2,3
+20,0
+3
+15,0
+3
+1f,0
+3
+b,0
+3
+22,0
+3
+15,0
+3
+1d,0
+3
+b,0
+3
+24,0
+3
+15,0
+2,3
+19,0
+2,3
+b,0
+3
+25,0
+2,3
+16,0
+2,3
+15,0
+2,3
+c,0
+2,3
+26,0
+2,3
+16,0
+3,3
+11,0
+3,3
+c,0
+2,3
+28,0
+2,3
+18,0
+3,3
+b,0
+3,3
+e,0
+2,3
+2a,0
+2,3
+1a,0
+b,3
+10,0
+2,3
+2c,0
+2,3
+33,0
+2,3
+2e,0
+2,3
+31,0
+2,3
+31,0
+3
+2f,0
+3
+34,0
+2,3
+2b,0
+2,3
+36,0
+2,3
+29,0
+2,3
+39,0
+2,3
+25,0
+2,3
+3d,0
+2,3
+21,0
+2,3
+41,0
+3,3
+1b,0
+3,3
+45,0
+4,3
+15,0
+4,3
+4b,0
+4,3
+d,0
+4,3
+53,0
+d,3
+1c0,0
+100 90 32
+21b,0
+d,4
+53,0
+4,4
+d,0
+4,4
+4b,0
+4,4
+15,0
+4,4
+45,0
+3,4
+1b,0
+3,4
+41,0
+2,4
+21,0
+2,4
+3d,0
+2,4
+25,0
+2,4
+39,0
+2,4
+29,0
+2,4
+36,0
+2,4
+2b,0
+2,4
+34,0
+4
+2f,0
+4
+31,0
+2,4
+13,0
+4,4
+1a,0
+2,4
+2e,0
+2,4
+10,0
+4,4
+1f,0
+2,4
+2c,0
+2,4
+e,0
+3,4
+9,0
+6,4
+15,0
+2,4
+2a,0
+2,4
+d,0
+3,4
+11,0
+5,4
+11,0
+2,4
+28,0
+2,4
+d,0
+2,4
+18,0
+3,4
+f,0
+2,4
+26,0
+2,4
+c,0
+2,4
+1c,0
+3,4
+e,0
+2,4
+25,0
+4
+c,0
+4
+21,0
+2,4
+d,0
+4
+24,0
+4
+b,0
+2,4
+24,0
+4
+d,0
+4
+22,0
+4
+b,0
+2,4
+26,0
+2,4
+c,0
+4
+20,0
+2,4
+a,0
+2,4
+29,0
+4
+b,0
+2,4
+1f,0
+4
+a,0
+2,4
+f,0
+3,4
+19,0
+2,4
+a,0
+4
+1e,0
+4
+b,0
+4
+2d,0
+2,4
+a,0
+4
+1d,0
+4
+a,0
+4
+2f,0
+4
+a,0
+4
+1c,0
+4
+a,0
+4
+3c,0
+4
+1b,0
+4
+a,0
+4
+3c,0
+4
+1a,0
+4
+a,0
+4
+3e,0
+4
+19,0
+4
+9,0
+2,4
+3e,0
+4
+18,0
+2,4
+9,0
+4
+3f,0
+2,4
+17,0
+4
+9,0
+2,4
+40,0
+4
+17,0
+4
+9,0
+4
+41,0
+4
+17,0
+4
+9,0
+4
+41,0
+4
+16,0
+4
+9,0
+4
+1b,0
+d,4
+1b,0
+4
+15,0
+4
+9,0
+4
+17,0
+4,4
+d,0
+4,4
+17,0
+4
+15,0
+4
+9,0
+4
+14,0
+3,4
+15,0
+3,4
+14,0
+4
+15,0
+4
+9,0
+4
+13,0
+2,4
+19,0
+2,4
+13,0
+4
+14,0
+4
+9,0
+4
+13,0
+4
+1d,0
+4
+13,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+1d,0
+b,4
+1d,0
+4
+13,0
+4
+9,0
+4
+1a,0
+3,4
+b,0
+3,4
+1a,0
+4
+13,0
+4
+9,0
+4
+17,0
+3,4
+11,0
+3,4
+17,0
+4
+13,0
+4
+9,0
+4
+16,0
+2,4
+15,0
+2,4
+16,0
+4
+13,0
+4
+9,0
+4
+14,0
+2,4
+19,0
+2,4
+14,0
+4
+13,0
+4
+9,0
+4
+13,0
+4
+1d,0
+4
+13,0
+4
+13,0
+4
+a,0
+4
+11,0
+4
+1f,0
+4
+12,0
+4
+13,0
+4
+a,0
+4
+10,0
+4
+21,0
+4
+11,0
+4
+14,0
+4
+9,0
+4
+f,0
+4
+23,0
+4
+f,0
+4
+15,0
+4
+9,0
+4
+f,0
+4
+23,0
+4
+f,0
+4
+15,0
+4
+a,0
+4
+d,0
+4
+25,0
+4
+e,0
+4
+15,0
+4
+a,0
+4
+d,0
+4
+25,0
+4
+e,0
+4
+16,0
+4
+9,0
+2,4
+b,0
+4
+27,0
+4
+c,0
+4
+17,0
+4
+a,0
+4
+b,0
+4
+27,0
+4
+c,0
+4
+17,0
+4
+a,0
+2,4
+a,0
+4
+27,0
+4
+c,0
+4
+17,0
+2,4
+a,0
+4
+a,0
+4
+27,0
+4
+b,0
+2,4
+18,0
+4
+b,0
+4
+9,0
+4
+27,0
+4
+b,0
+4
+19,0
+4
+15,0
+4
+27,0
+4
+b,0
+4
+1a,0
+4
+14,0
+4
+27,0
+4
+a,0
+4
+1b,0
+4
+15,0
+4
+25,0
+4
+b,0
+4
+1c,0
+4
+14,0
+4
+25,0
+4
+a,0
+4
+1d,0
+4
+15,0
+4
+23,0
+4
+b,0
+4
+1e,0
+4
+14,0
+4
+23,0
+4
+a,0
+4
+1f,0
+2,4
+14,0
+4
+21,0
+4
+a,0
+2,4
+20,0
+4
+15,0
+4
+1f,0
+4
+b,0
+4
+22,0
+4
+15,0
+4
+1d,0
+4
+b,0
+4
+24,0
+4
+15,0
+2,4
+19,0
+2,4
+b,0
+4
+25,0
+2,4
+16,0
+2,4
+15,0
+2,4
+c,0
+2,4
+26,0
+2,4
+16,0
+3,4
+11,0
+3,4
+c,0
+2,4
+28,0
+2,4
+18,0
+3,4
+b,0
+3,4
+e,0
+2,4
+2a,0
+2,4
+1a,0
+b,4
+10,0
+2,4
+2c,0
+2,4
+33,0
+2,4
+2e,0
+2,4
+31,0
+2,4
+31,0
+4
+2f,0
+4
+34,0
+2,4
+2b,0
+2,4
+36,0
+2,4
+29,0
+2,4
+39,0
+2,4
+25,0
+2,4
+3d,0
+2,4
+21,0
+2,4
+41,0
+3,4
+1b,0
+3,4
+45,0
+4,4
+15,0
+4,4
+4b,0
+4,4
+d,0
+4,4
+53,0
+d,4
+1c0,0
+100 90 32
+21b,0
+d,6
+53,0
+4,6
+d,0
+4,6
+4b,0
+4,6
+15,0
+4,6
+45,0
+3,6
+1b,0
+3,6
+41,0
+2,6
+21,0
+2,6
+3d,0
+2,6
+25,0
+2,6
+39,0
+2,6
+29,0
+2,6
+36,0
+2,6
+2b,0
+2,6
+34,0
+6
+2f,0
+6
+31,0
+2,6
+13,0
+4,6
+1a,0
+2,6
+2e,0
+2,6
+10,0
+4,6
+1f,0
+2,6
+2c,0
+2,6
+e,0
+3,6
+9,0
+6,6
+15,0
+2,6
+2a,0
+2,6
+d,0
+3,6
+11,0
+5,6
+11,0
+2,6
+28,0
+2,6
+d,0
+2,6
+18,0
+3,6
+f,0
+2,6
+26,0
+2,6
+c,0
+2,6
+1c,0
+3,6
+e,0
+2,6
+25,0
+6
+c,0
+6
+21,0
+2,6
+d,0
+6
+24,0
+6
+b,0
+2,6
+24,0
+6
+d,0
+6
+22,0
+6
+b,0
+2,6
+26,0
+2,6
+c,0
+6
+20,0
+2,6
+a,0
+2,6
+29,0
+6
+b,0
+2,6
+1f,0
+6
+a,0
+2,6
+f,0
+3,6
+19,0
+2,6
+a,0
+6
+1e,0
+6
+b,0
+6
+2d,0
+2,6
+a,0
+6
+1d,0
+6
+a,0
+6
+2f,0
+6
+a,0
+6
+1c,0
+6
+a,0
+6
+3c,0
+6
+1b,0
+6
+a,0
+6
+3c,0
+6
+1a,0
+6
+a,0
+6
+3e,0
+6
+19,0
+6
+9,0
+2,6
+3e,0
+6
+18,0
+2,6
+9,0
+6
+3f,0
+2,6
+17,0
+6
+9,0
+2,6
+40,0
+6
+17,0
+6
+9,0
+6
+41,0
+6
+17,0
+6
+9,0
+6
+41,0
+6
+16,0
+6
+9,0
+6
+1b,0
+d,6
+1b,0
+6
+15,0
+6
+9,0
+6
+17,0
+4,6
+d,0
+4,6
+17,0
+6
+15,0
+6
+9,0
+6
+14,0
+3,6
+15,0
+3,6
+14,0
+6
+15,0
+6
+9,0
+6
+13,0
+2,6
+19,0
+2,6
+13,0
+6
+14,0
+6
+9,0
+6
+13,0
+6
+1d,0
+6
+13,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+1d,0
+b,6
+1d,0
+6
+13,0
+6
+9,0
+6
+1a,0
+3,6
+b,0
+3,6
+1a,0
+6
+13,0
+6
+9,0
+6
+17,0
+3,6
+11,0
+3,6
+17,0
+6
+13,0
+6
+9,0
+6
+16,0
+2,6
+15,0
+2,6
+16,0
+6
+13,0
+6
+9,0
+6
+14,0
+2,6
+19,0
+2,6
+14,0
+6
+13,0
+6
+9,0
+6
+13,0
+6
+1d,0
+6
+13,0
+6
+13,0
+6
+a,0
+6
+11,0
+6
+1f,0
+6
+12,0
+6
+13,0
+6
+a,0
+6
+10,0
+6
+21,0
+6
+11,0
+6
+14,0
+6
+9,0
+6
+f,0
+6
+23,0
+6
+f,0
+6
+15,0
+6
+9,0
+6
+f,0
+6
+23,0
+6
+f,0
+6
+15,0
+6
+a,0
+6
+d,0
+6
+25,0
+6
+e,0
+6
+15,0
+6
+a,0
+6
+d,0
+6
+25,0
+6
+e,0
+6
+16,0
+6
+9,0
+2,6
+b,0
+6
+27,0
+6
+c,0
+6
+17,0
+6
+a,0
+6
+b,0
+6
+27,0
+6
+c,0
+6
+17,0
+6
+a,0
+2,6
+a,0
+6
+27,0
+6
+c,0
+6
+17,0
+2,6
+a,0
+6
+a,0
+6
+27,0
+6
+b,0
+2,6
+18,0
+6
+b,0
+6
+9,0
+6
+27,0
+6
+b,0
+6
+19,0
+6
+15,0
+6
+27,0
+6
+b,0
+6
+1a,0
+6
+14,0
+6
+27,0
+6
+a,0
+6
+1b,0
+6
+15,0
+6
+25,0
+6
+b,0
+6
+1c,0
+6
+14,0
+6
+25,0
+6
+a,0
+6
+1d,0
+6
+15,0
+6
+23,0
+6
+b,0
+6
+1e,0
+6
+14,0
+6
+23,0
+6
+a,0
+6
+1f,0
+2,6
+14,0
+6
+21,0
+6
+a,0
+2,6
+20,0
+6
+15,0
+6
+1f,0
+6
+b,0
+6
+22,0
+6
+15,0
+6
+1d,0
+6
+b,0
+6
+24,0
+6
+15,0
+2,6
+19,0
+2,6
+b,0
+6
+25,0
+2,6
+16,0
+2,6
+15,0
+2,6
+c,0
+2,6
+26,0
+2,6
+16,0
+3,6
+11,0
+3,6
+c,0
+2,6
+28,0
+2,6
+18,0
+3,6
+b,0
+3,6
+e,0
+2,6
+2a,0
+2,6
+1a,0
+b,6
+10,0
+2,6
+2c,0
+2,6
+33,0
+2,6
+2e,0
+2,6
+31,0
+2,6
+31,0
+6
+2f,0
+6
+34,0
+2,6
+2b,0
+2,6
+36,0
+2,6
+29,0
+2,6
+39,0
+2,6
+25,0
+2,6
+3d,0
+2,6
+21,0
+2,6
+41,0
+3,6
+1b,0
+3,6
+45,0
+4,6
+15,0
+4,6
+4b,0
+4,6
+d,0
+4,6
+53,0
+d,6
+1c0,0
+100 90 32
+21b,0
+d,7
+53,0
+4,7
+d,0
+4,7
+4b,0
+4,7
+15,0
+4,7
+45,0
+3,7
+1b,0
+3,7
+41,0
+2,7
+21,0
+2,7
+3d,0
+2,7
+25,0
+2,7
+39,0
+2,7
+29,0
+2,7
+36,0
+2,7
+2b,0
+2,7
+34,0
+7
+2f,0
+7
+31,0
+2,7
+13,0
+4,7
+1a,0
+2,7
+2e,0
+2,7
+10,0
+4,7
+1f,0
+2,7
+2c,0
+2,7
+e,0
+3,7
+9,0
+6,7
+15,0
+2,7
+2a,0
+2,7
+d,0
+3,7
+11,0
+5,7
+11,0
+2,7
+28,0
+2,7
+d,0
+2,7
+18,0
+3,7
+f,0
+2,7
+26,0
+2,7
+c,0
+2,7
+1c,0
+3,7
+e,0
+2,7
+25,0
+7
+c,0
+7
+21,0
+2,7
+d,0
+7
+24,0
+7
+b,0
+2,7
+24,0
+7
+d,0
+7
+22,0
+7
+b,0
+2,7
+26,0
+2,7
+c,0
+7
+20,0
+2,7
+a,0
+2,7
+29,0
+7
+b,0
+2,7
+1f,0
+7
+a,0
+2,7
+f,0
+3,7
+19,0
+2,7
+a,0
+7
+1e,0
+7
+b,0
+7
+2d,0
+2,7
+a,0
+7
+1d,0
+7
+a,0
+7
+2f,0
+7
+a,0
+7
+1c,0
+7
+a,0
+7
+3c,0
+7
+1b,0
+7
+a,0
+7
+3c,0
+7
+1a,0
+7
+a,0
+7
+3e,0
+7
+19,0
+7
+9,0
+2,7
+3e,0
+7
+18,0
+2,7
+9,0
+7
+3f,0
+2,7
+17,0
+7
+9,0
+2,7
+40,0
+7
+17,0
+7
+9,0
+7
+41,0
+7
+17,0
+7
+9,0
+7
+41,0
+7
+16,0
+7
+9,0
+7
+1b,0
+d,7
+1b,0
+7
+15,0
+7
+9,0
+7
+17,0
+4,7
+d,0
+4,7
+17,0
+7
+15,0
+7
+9,0
+7
+14,0
+3,7
+15,0
+3,7
+14,0
+7
+15,0
+7
+9,0
+7
+13,0
+2,7
+19,0
+2,7
+13,0
+7
+14,0
+7
+9,0
+7
+13,0
+7
+1d,0
+7
+13,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+1d,0
+b,7
+1d,0
+7
+13,0
+7
+9,0
+7
+1a,0
+3,7
+b,0
+3,7
+1a,0
+7
+13,0
+7
+9,0
+7
+17,0
+3,7
+11,0
+3,7
+17,0
+7
+13,0
+7
+9,0
+7
+16,0
+2,7
+15,0
+2,7
+16,0
+7
+13,0
+7
+9,0
+7
+14,0
+2,7
+19,0
+2,7
+14,0
+7
+13,0
+7
+9,0
+7
+13,0
+7
+1d,0
+7
+13,0
+7
+13,0
+7
+a,0
+7
+11,0
+7
+1f,0
+7
+12,0
+7
+13,0
+7
+a,0
+7
+10,0
+7
+21,0
+7
+11,0
+7
+14,0
+7
+9,0
+7
+f,0
+7
+23,0
+7
+f,0
+7
+15,0
+7
+9,0
+7
+f,0
+7
+23,0
+7
+f,0
+7
+15,0
+7
+a,0
+7
+d,0
+7
+25,0
+7
+e,0
+7
+15,0
+7
+a,0
+7
+d,0
+7
+25,0
+7
+e,0
+7
+16,0
+7
+9,0
+2,7
+b,0
+7
+27,0
+7
+c,0
+7
+17,0
+7
+a,0
+7
+b,0
+7
+27,0
+7
+c,0
+7
+17,0
+7
+a,0
+2,7
+a,0
+7
+27,0
+7
+c,0
+7
+17,0
+2,7
+a,0
+7
+a,0
+7
+27,0
+7
+b,0
+2,7
+18,0
+7
+b,0
+7
+9,0
+7
+27,0
+7
+b,0
+7
+19,0
+7
+15,0
+7
+27,0
+7
+b,0
+7
+1a,0
+7
+14,0
+7
+27,0
+7
+a,0
+7
+1b,0
+7
+15,0
+7
+25,0
+7
+b,0
+7
+1c,0
+7
+14,0
+7
+25,0
+7
+a,0
+7
+1d,0
+7
+15,0
+7
+23,0
+7
+b,0
+7
+1e,0
+7
+14,0
+7
+23,0
+7
+a,0
+7
+1f,0
+2,7
+14,0
+7
+21,0
+7
+a,0
+2,7
+20,0
+7
+15,0
+7
+1f,0
+7
+b,0
+7
+22,0
+7
+15,0
+7
+1d,0
+7
+b,0
+7
+24,0
+7
+15,0
+2,7
+19,0
+2,7
+b,0
+7
+25,0
+2,7
+16,0
+2,7
+15,0
+2,7
+c,0
+2,7
+26,0
+2,7
+16,0
+3,7
+11,0
+3,7
+c,0
+2,7
+28,0
+2,7
+18,0
+3,7
+b,0
+3,7
+e,0
+2,7
+2a,0
+2,7
+1a,0
+b,7
+10,0
+2,7
+2c,0
+2,7
+33,0
+2,7
+2e,0
+2,7
+31,0
+2,7
+31,0
+7
+2f,0
+7
+34,0
+2,7
+2b,0
+2,7
+36,0
+2,7
+29,0
+2,7
+39,0
+2,7
+25,0
+2,7
+3d,0
+2,7
+21,0
+2,7
+41,0
+3,7
+1b,0
+3,7
+45,0
+4,7
+15,0
+4,7
+4b,0
+4,7
+d,0
+4,7
+53,0
+d,7
+1c0,0
+100 90 32
+21b,0
+d,10
+53,0
+4,10
+d,0
+4,10
+4b,0
+4,10
+15,0
+4,10
+45,0
+3,10
+1b,0
+3,10
+41,0
+2,10
+21,0
+2,10
+3d,0
+2,10
+25,0
+2,10
+39,0
+2,10
+29,0
+2,10
+36,0
+2,10
+2b,0
+2,10
+34,0
+10
+2f,0
+10
+31,0
+2,10
+13,0
+4,10
+1a,0
+2,10
+2e,0
+2,10
+10,0
+4,10
+1f,0
+2,10
+2c,0
+2,10
+e,0
+3,10
+9,0
+6,10
+15,0
+2,10
+2a,0
+2,10
+d,0
+3,10
+11,0
+5,10
+11,0
+2,10
+28,0
+2,10
+d,0
+2,10
+18,0
+3,10
+f,0
+2,10
+26,0
+2,10
+c,0
+2,10
+1c,0
+3,10
+e,0
+2,10
+25,0
+10
+c,0
+10
+21,0
+2,10
+d,0
+10
+24,0
+10
+b,0
+2,10
+24,0
+10
+d,0
+10
+22,0
+10
+b,0
+2,10
+26,0
+2,10
+c,0
+10
+20,0
+2,10
+a,0
+2,10
+29,0
+10
+b,0
+2,10
+1f,0
+10
+a,0
+2,10
+f,0
+3,10
+19,0
+2,10
+a,0
+10
+1e,0
+10
+b,0
+10
+2d,0
+2,10
+a,0
+10
+1d,0
+10
+a,0
+10
+2f,0
+10
+a,0
+10
+1c,0
+10
+a,0
+10
+3c,0
+10
+1b,0
+10
+a,0
+10
+3c,0
+10
+1a,0
+10
+a,0
+10
+3e,0
+10
+19,0
+10
+9,0
+2,10
+3e,0
+10
+18,0
+2,10
+9,0
+10
+3f,0
+2,10
+17,0
+10
+9,0
+2,10
+40,0
+10
+17,0
+10
+9,0
+10
+41,0
+10
+17,0
+10
+9,0
+10
+41,0
+10
+16,0
+10
+9,0
+10
+1b,0
+d,10
+1b,0
+10
+15,0
+10
+9,0
+10
+17,0
+4,10
+d,0
+4,10
+17,0
+10
+15,0
+10
+9,0
+10
+14,0
+3,10
+15,0
+3,10
+14,0
+10
+15,0
+10
+9,0
+10
+13,0
+2,10
+19,0
+2,10
+13,0
+10
+14,0
+10
+9,0
+10
+13,0
+10
+1d,0
+10
+13,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+1d,0
+b,10
+1d,0
+10
+13,0
+10
+9,0
+10
+1a,0
+3,10
+b,0
+3,10
+1a,0
+10
+13,0
+10
+9,0
+10
+17,0
+3,10
+11,0
+3,10
+17,0
+10
+13,0
+10
+9,0
+10
+16,0
+2,10
+15,0
+2,10
+16,0
+10
+13,0
+10
+9,0
+10
+14,0
+2,10
+19,0
+2,10
+14,0
+10
+13,0
+10
+9,0
+10
+13,0
+10
+1d,0
+10
+13,0
+10
+13,0
+10
+a,0
+10
+11,0
+10
+1f,0
+10
+12,0
+10
+13,0
+10
+a,0
+10
+10,0
+10
+21,0
+10
+11,0
+10
+14,0
+10
+9,0
+10
+f,0
+10
+23,0
+10
+f,0
+10
+15,0
+10
+9,0
+10
+f,0
+10
+23,0
+10
+f,0
+10
+15,0
+10
+a,0
+10
+d,0
+10
+25,0
+10
+e,0
+10
+15,0
+10
+a,0
+10
+d,0
+10
+25,0
+10
+e,0
+10
+16,0
+10
+9,0
+2,10
+b,0
+10
+27,0
+10
+c,0
+10
+17,0
+10
+a,0
+10
+b,0
+10
+27,0
+10
+c,0
+10
+17,0
+10
+a,0
+2,10
+a,0
+10
+27,0
+10
+c,0
+10
+17,0
+2,10
+a,0
+10
+a,0
+10
+27,0
+10
+b,0
+2,10
+18,0
+10
+b,0
+10
+9,0
+10
+27,0
+10
+b,0
+10
+19,0
+10
+15,0
+10
+27,0
+10
+b,0
+10
+1a,0
+10
+14,0
+10
+27,0
+10
+a,0
+10
+1b,0
+10
+15,0
+10
+25,0
+10
+b,0
+10
+1c,0
+10
+14,0
+10
+25,0
+10
+a,0
+10
+1d,0
+10
+15,0
+10
+23,0
+10
+b,0
+10
+1e,0
+10
+14,0
+10
+23,0
+10
+a,0
+10
+1f,0
+2,10
+14,0
+10
+21,0
+10
+a,0
+2,10
+20,0
+10
+15,0
+10
+1f,0
+10
+b,0
+10
+22,0
+10
+15,0
+10
+1d,0
+10
+b,0
+10
+24,0
+10
+15,0
+2,10
+19,0
+2,10
+b,0
+10
+25,0
+2,10
+16,0
+2,10
+15,0
+2,10
+c,0
+2,10
+26,0
+2,10
+16,0
+3,10
+11,0
+3,10
+c,0
+2,10
+28,0
+2,10
+18,0
+3,10
+b,0
+3,10
+e,0
+2,10
+2a,0
+2,10
+1a,0
+b,10
+10,0
+2,10
+2c,0
+2,10
+33,0
+2,10
+2e,0
+2,10
+31,0
+2,10
+31,0
+10
+2f,0
+10
+34,0
+2,10
+2b,0
+2,10
+36,0
+2,10
+29,0
+2,10
+39,0
+2,10
+25,0
+2,10
+3d,0
+2,10
+21,0
+2,10
+41,0
+3,10
+1b,0
+3,10
+45,0
+4,10
+15,0
+4,10
+4b,0
+4,10
+d,0
+4,10
+53,0
+d,10
+1c0,0
+100 90 32
+21b,0
+d,33
+53,0
+4,33
+d,0
+4,33
+4b,0
+4,33
+15,0
+4,33
+45,0
+3,33
+1b,0
+3,33
+41,0
+2,33
+21,0
+2,33
+3d,0
+2,33
+25,0
+2,33
+39,0
+2,33
+29,0
+2,33
+36,0
+2,33
+2b,0
+2,33
+34,0
+33
+2f,0
+33
+31,0
+2,33
+13,0
+4,33
+1a,0
+2,33
+2e,0
+2,33
+10,0
+4,33
+1f,0
+2,33
+2c,0
+2,33
+e,0
+3,33
+9,0
+6,33
+15,0
+2,33
+2a,0
+2,33
+d,0
+3,33
+11,0
+5,33
+11,0
+2,33
+28,0
+2,33
+d,0
+2,33
+18,0
+3,33
+f,0
+2,33
+26,0
+2,33
+c,0
+2,33
+1c,0
+3,33
+e,0
+2,33
+25,0
+33
+c,0
+33
+21,0
+2,33
+d,0
+33
+24,0
+33
+b,0
+2,33
+24,0
+33
+d,0
+33
+22,0
+33
+b,0
+2,33
+26,0
+2,33
+c,0
+33
+20,0
+2,33
+a,0
+2,33
+29,0
+33
+b,0
+2,33
+1f,0
+33
+a,0
+2,33
+f,0
+3,33
+19,0
+2,33
+a,0
+33
+1e,0
+33
+b,0
+33
+2d,0
+2,33
+a,0
+33
+1d,0
+33
+a,0
+33
+2f,0
+33
+a,0
+33
+1c,0
+33
+a,0
+33
+3c,0
+33
+1b,0
+33
+a,0
+33
+3c,0
+33
+1a,0
+33
+a,0
+33
+3e,0
+33
+19,0
+33
+9,0
+2,33
+3e,0
+33
+18,0
+2,33
+9,0
+33
+3f,0
+2,33
+17,0
+33
+9,0
+2,33
+40,0
+33
+17,0
+33
+9,0
+33
+41,0
+33
+17,0
+33
+9,0
+33
+41,0
+33
+16,0
+33
+9,0
+33
+1b,0
+d,33
+1b,0
+33
+15,0
+33
+9,0
+33
+17,0
+4,33
+d,0
+4,33
+17,0
+33
+15,0
+33
+9,0
+33
+14,0
+3,33
+15,0
+3,33
+14,0
+33
+15,0
+33
+9,0
+33
+13,0
+2,33
+19,0
+2,33
+13,0
+33
+14,0
+33
+9,0
+33
+13,0
+33
+1d,0
+33
+13,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+1d,0
+b,33
+1d,0
+33
+13,0
+33
+9,0
+33
+1a,0
+3,33
+b,0
+3,33
+1a,0
+33
+13,0
+33
+9,0
+33
+17,0
+3,33
+11,0
+3,33
+17,0
+33
+13,0
+33
+9,0
+33
+16,0
+2,33
+15,0
+2,33
+16,0
+33
+13,0
+33
+9,0
+33
+14,0
+2,33
+19,0
+2,33
+14,0
+33
+13,0
+33
+9,0
+33
+13,0
+33
+1d,0
+33
+13,0
+33
+13,0
+33
+a,0
+33
+11,0
+33
+1f,0
+33
+12,0
+33
+13,0
+33
+a,0
+33
+10,0
+33
+21,0
+33
+11,0
+33
+14,0
+33
+9,0
+33
+f,0
+33
+23,0
+33
+f,0
+33
+15,0
+33
+9,0
+33
+f,0
+33
+23,0
+33
+f,0
+33
+15,0
+33
+a,0
+33
+d,0
+33
+25,0
+33
+e,0
+33
+15,0
+33
+a,0
+33
+d,0
+33
+25,0
+33
+e,0
+33
+16,0
+33
+9,0
+2,33
+b,0
+33
+27,0
+33
+c,0
+33
+17,0
+33
+a,0
+33
+b,0
+33
+27,0
+33
+c,0
+33
+17,0
+33
+a,0
+2,33
+a,0
+33
+27,0
+33
+c,0
+33
+17,0
+2,33
+a,0
+33
+a,0
+33
+27,0
+33
+b,0
+2,33
+18,0
+33
+b,0
+33
+9,0
+33
+27,0
+33
+b,0
+33
+19,0
+33
+15,0
+33
+27,0
+33
+b,0
+33
+1a,0
+33
+14,0
+33
+27,0
+33
+a,0
+33
+1b,0
+33
+15,0
+33
+25,0
+33
+b,0
+33
+1c,0
+33
+14,0
+33
+25,0
+33
+a,0
+33
+1d,0
+33
+15,0
+33
+23,0
+33
+b,0
+33
+1e,0
+33
+14,0
+33
+23,0
+33
+a,0
+33
+1f,0
+2,33
+14,0
+33
+21,0
+33
+a,0
+2,33
+20,0
+33
+15,0
+33
+1f,0
+33
+b,0
+33
+22,0
+33
+15,0
+33
+1d,0
+33
+b,0
+33
+24,0
+33
+15,0
+2,33
+19,0
+2,33
+b,0
+33
+25,0
+2,33
+16,0
+2,33
+15,0
+2,33
+c,0
+2,33
+26,0
+2,33
+16,0
+3,33
+11,0
+3,33
+c,0
+2,33
+28,0
+2,33
+18,0
+3,33
+b,0
+3,33
+e,0
+2,33
+2a,0
+2,33
+1a,0
+b,33
+10,0
+2,33
+2c,0
+2,33
+33,0
+2,33
+2e,0
+2,33
+31,0
+2,33
+31,0
+33
+2f,0
+33
+34,0
+2,33
+2b,0
+2,33
+36,0
+2,33
+29,0
+2,33
+39,0
+2,33
+25,0
+2,33
+3d,0
+2,33
+21,0
+2,33
+41,0
+3,33
+1b,0
+3,33
+45,0
+4,33
+15,0
+4,33
+4b,0
+4,33
+d,0
+4,33
+53,0
+d,33
+1c0,0
+100 90 32
+21b,0
+d,81
+53,0
+4,81
+d,0
+4,81
+4b,0
+4,81
+15,0
+4,81
+45,0
+3,81
+1b,0
+3,81
+41,0
+2,81
+21,0
+2,81
+3d,0
+2,81
+25,0
+2,81
+39,0
+2,81
+29,0
+2,81
+36,0
+2,81
+2b,0
+2,81
+34,0
+81
+2f,0
+81
+31,0
+2,81
+13,0
+4,81
+1a,0
+2,81
+2e,0
+2,81
+10,0
+4,81
+1f,0
+2,81
+2c,0
+2,81
+e,0
+3,81
+9,0
+6,81
+15,0
+2,81
+2a,0
+2,81
+d,0
+3,81
+11,0
+5,81
+11,0
+2,81
+28,0
+2,81
+d,0
+2,81
+18,0
+3,81
+f,0
+2,81
+26,0
+2,81
+c,0
+2,81
+1c,0
+3,81
+e,0
+2,81
+25,0
+81
+c,0
+81
+21,0
+2,81
+d,0
+81
+24,0
+81
+b,0
+2,81
+24,0
+81
+d,0
+81
+22,0
+81
+b,0
+2,81
+26,0
+2,81
+c,0
+81
+20,0
+2,81
+a,0
+2,81
+29,0
+81
+b,0
+2,81
+1f,0
+81
+a,0
+2,81
+f,0
+3,81
+19,0
+2,81
+a,0
+81
+1e,0
+81
+b,0
+81
+2d,0
+2,81
+a,0
+81
+1d,0
+81
+a,0
+81
+2f,0
+81
+a,0
+81
+1c,0
+81
+a,0
+81
+3c,0
+81
+1b,0
+81
+a,0
+81
+3c,0
+81
+1a,0
+81
+a,0
+81
+3e,0
+81
+19,0
+81
+9,0
+2,81
+3e,0
+81
+18,0
+2,81
+9,0
+81
+3f,0
+2,81
+17,0
+81
+9,0
+2,81
+40,0
+81
+17,0
+81
+9,0
+81
+41,0
+81
+17,0
+81
+9,0
+81
+41,0
+81
+16,0
+81
+9,0
+81
+1b,0
+d,81
+1b,0
+81
+15,0
+81
+9,0
+81
+17,0
+4,81
+d,0
+4,81
+17,0
+81
+15,0
+81
+9,0
+81
+14,0
+3,81
+15,0
+3,81
+14,0
+81
+15,0
+81
+9,0
+81
+13,0
+2,81
+19,0
+2,81
+13,0
+81
+14,0
+81
+9,0
+81
+13,0
+81
+1d,0
+81
+13,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+1d,0
+b,81
+1d,0
+81
+13,0
+81
+9,0
+81
+1a,0
+3,81
+b,0
+3,81
+1a,0
+81
+13,0
+81
+9,0
+81
+17,0
+3,81
+11,0
+3,81
+17,0
+81
+13,0
+81
+9,0
+81
+16,0
+2,81
+15,0
+2,81
+16,0
+81
+13,0
+81
+9,0
+81
+14,0
+2,81
+19,0
+2,81
+14,0
+81
+13,0
+81
+9,0
+81
+13,0
+81
+1d,0
+81
+13,0
+81
+13,0
+81
+a,0
+81
+11,0
+81
+1f,0
+81
+12,0
+81
+13,0
+81
+a,0
+81
+10,0
+81
+21,0
+81
+11,0
+81
+14,0
+81
+9,0
+81
+f,0
+81
+23,0
+81
+f,0
+81
+15,0
+81
+9,0
+81
+f,0
+81
+23,0
+81
+f,0
+81
+15,0
+81
+a,0
+81
+d,0
+81
+25,0
+81
+e,0
+81
+15,0
+81
+a,0
+81
+d,0
+81
+25,0
+81
+e,0
+81
+16,0
+81
+9,0
+2,81
+b,0
+81
+27,0
+81
+c,0
+81
+17,0
+81
+a,0
+81
+b,0
+81
+27,0
+81
+c,0
+81
+17,0
+81
+a,0
+2,81
+a,0
+81
+27,0
+81
+c,0
+81
+17,0
+2,81
+a,0
+81
+a,0
+81
+27,0
+81
+b,0
+2,81
+18,0
+81
+b,0
+81
+9,0
+81
+27,0
+81
+b,0
+81
+19,0
+81
+15,0
+81
+27,0
+81
+b,0
+81
+1a,0
+81
+14,0
+81
+27,0
+81
+a,0
+81
+1b,0
+81
+15,0
+81
+25,0
+81
+b,0
+81
+1c,0
+81
+14,0
+81
+25,0
+81
+a,0
+81
+1d,0
+81
+15,0
+81
+23,0
+81
+b,0
+81
+1e,0
+81
+14,0
+81
+23,0
+81
+a,0
+81
+1f,0
+2,81
+14,0
+81
+21,0
+81
+a,0
+2,81
+20,0
+81
+15,0
+81
+1f,0
+81
+b,0
+81
+22,0
+81
+15,0
+81
+1d,0
+81
+b,0
+81
+24,0
+81
+15,0
+2,81
+19,0
+2,81
+b,0
+81
+25,0
+2,81
+16,0
+2,81
+15,0
+2,81
+c,0
+2,81
+26,0
+2,81
+16,0
+3,81
+11,0
+3,81
+c,0
+2,81
+28,0
+2,81
+18,0
+3,81
+b,0
+3,81
+e,0
+2,81
+2a,0
+2,81
+1a,0
+b,81
+10,0
+2,81
+2c,0
+2,81
+33,0
+2,81
+2e,0
+2,81
+31,0
+2,81
+31,0
+81
+2f,0
+81
+34,0
+2,81
+2b,0
+2,81
+36,0
+2,81
+29,0
+2,81
+39,0
+2,81
+25,0
+2,81
+3d,0
+2,81
+21,0
+2,81
+41,0
+3,81
+1b,0
+3,81
+45,0
+4,81
+15,0
+4,81
+4b,0
+4,81
+d,0
+4,81
+53,0
+d,81
+1c0,0
+100 90 32
+21b,0
+d,a3
+53,0
+4,a3
+d,0
+4,a3
+4b,0
+4,a3
+15,0
+4,a3
+45,0
+3,a3
+1b,0
+3,a3
+41,0
+2,a3
+21,0
+2,a3
+3d,0
+2,a3
+25,0
+2,a3
+39,0
+2,a3
+29,0
+2,a3
+36,0
+2,a3
+2b,0
+2,a3
+34,0
+a3
+2f,0
+a3
+31,0
+2,a3
+13,0
+4,a3
+1a,0
+2,a3
+2e,0
+2,a3
+10,0
+4,a3
+1f,0
+2,a3
+2c,0
+2,a3
+e,0
+3,a3
+9,0
+6,a3
+15,0
+2,a3
+2a,0
+2,a3
+d,0
+3,a3
+11,0
+5,a3
+11,0
+2,a3
+28,0
+2,a3
+d,0
+2,a3
+18,0
+3,a3
+f,0
+2,a3
+26,0
+2,a3
+c,0
+2,a3
+1c,0
+3,a3
+e,0
+2,a3
+25,0
+a3
+c,0
+a3
+21,0
+2,a3
+d,0
+a3
+24,0
+a3
+b,0
+2,a3
+24,0
+a3
+d,0
+a3
+22,0
+a3
+b,0
+2,a3
+26,0
+2,a3
+c,0
+a3
+20,0
+2,a3
+a,0
+2,a3
+29,0
+a3
+b,0
+2,a3
+1f,0
+a3
+a,0
+2,a3
+f,0
+3,a3
+19,0
+2,a3
+a,0
+a3
+1e,0
+a3
+b,0
+a3
+2d,0
+2,a3
+a,0
+a3
+1d,0
+a3
+a,0
+a3
+2f,0
+a3
+a,0
+a3
+1c,0
+a3
+a,0
+a3
+3c,0
+a3
+1b,0
+a3
+a,0
+a3
+3c,0
+a3
+1a,0
+a3
+a,0
+a3
+3e,0
+a3
+19,0
+a3
+9,0
+2,a3
+3e,0
+a3
+18,0
+2,a3
+9,0
+a3
+3f,0
+2,a3
+17,0
+a3
+9,0
+2,a3
+40,0
+a3
+17,0
+a3
+9,0
+a3
+41,0
+a3
+17,0
+a3
+9,0
+a3
+41,0
+a3
+16,0
+a3
+9,0
+a3
+1b,0
+d,a3
+1b,0
+a3
+15,0
+a3
+9,0
+a3
+17,0
+4,a3
+d,0
+4,a3
+17,0
+a3
+15,0
+a3
+9,0
+a3
+14,0
+3,a3
+15,0
+3,a3
+14,0
+a3
+15,0
+a3
+9,0
+a3
+13,0
+2,a3
+19,0
+2,a3
+13,0
+a3
+14,0
+a3
+9,0
+a3
+13,0
+a3
+1d,0
+a3
+13,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+1d,0
+b,a3
+1d,0
+a3
+13,0
+a3
+9,0
+a3
+1a,0
+3,a3
+b,0
+3,a3
+1a,0
+a3
+13,0
+a3
+9,0
+a3
+17,0
+3,a3
+11,0
+3,a3
+17,0
+a3
+13,0
+a3
+9,0
+a3
+16,0
+2,a3
+15,0
+2,a3
+16,0
+a3
+13,0
+a3
+9,0
+a3
+14,0
+2,a3
+19,0
+2,a3
+14,0
+a3
+13,0
+a3
+9,0
+a3
+13,0
+a3
+1d,0
+a3
+13,0
+a3
+13,0
+a3
+a,0
+a3
+11,0
+a3
+1f,0
+a3
+12,0
+a3
+13,0
+a3
+a,0
+a3
+10,0
+a3
+21,0
+a3
+11,0
+a3
+14,0
+a3
+9,0
+a3
+f,0
+a3
+23,0
+a3
+f,0
+a3
+15,0
+a3
+9,0
+a3
+f,0
+a3
+23,0
+a3
+f,0
+a3
+15,0
+a3
+a,0
+a3
+d,0
+a3
+25,0
+a3
+e,0
+a3
+15,0
+a3
+a,0
+a3
+d,0
+a3
+25,0
+a3
+e,0
+a3
+16,0
+a3
+9,0
+2,a3
+b,0
+a3
+27,0
+a3
+c,0
+a3
+17,0
+a3
+a,0
+a3
+b,0
+a3
+27,0
+a3
+c,0
+a3
+17,0
+a3
+a,0
+2,a3
+a,0
+a3
+27,0
+a3
+c,0
+a3
+17,0
+2,a3
+a,0
+a3
+a,0
+a3
+27,0
+a3
+b,0
+2,a3
+18,0
+a3
+b,0
+a3
+9,0
+a3
+27,0
+a3
+b,0
+a3
+19,0
+a3
+15,0
+a3
+27,0
+a3
+b,0
+a3
+1a,0
+a3
+14,0
+a3
+27,0
+a3
+a,0
+a3
+1b,0
+a3
+15,0
+a3
+25,0
+a3
+b,0
+a3
+1c,0
+a3
+14,0
+a3
+25,0
+a3
+a,0
+a3
+1d,0
+a3
+15,0
+a3
+23,0
+a3
+b,0
+a3
+1e,0
+a3
+14,0
+a3
+23,0
+a3
+a,0
+a3
+1f,0
+2,a3
+14,0
+a3
+21,0
+a3
+a,0
+2,a3
+20,0
+a3
+15,0
+a3
+1f,0
+a3
+b,0
+a3
+22,0
+a3
+15,0
+a3
+1d,0
+a3
+b,0
+a3
+24,0
+a3
+15,0
+2,a3
+19,0
+2,a3
+b,0
+a3
+25,0
+2,a3
+16,0
+2,a3
+15,0
+2,a3
+c,0
+2,a3
+26,0
+2,a3
+16,0
+3,a3
+11,0
+3,a3
+c,0
+2,a3
+28,0
+2,a3
+18,0
+3,a3
+b,0
+3,a3
+e,0
+2,a3
+2a,0
+2,a3
+1a,0
+b,a3
+10,0
+2,a3
+2c,0
+2,a3
+33,0
+2,a3
+2e,0
+2,a3
+31,0
+2,a3
+31,0
+a3
+2f,0
+a3
+34,0
+2,a3
+2b,0
+2,a3
+36,0
+2,a3
+29,0
+2,a3
+39,0
+2,a3
+25,0
+2,a3
+3d,0
+2,a3
+21,0
+2,a3
+41,0
+3,a3
+1b,0
+3,a3
+45,0
+4,a3
+15,0
+4,a3
+4b,0
+4,a3
+d,0
+4,a3
+53,0
+d,a3
+1c0,0
+100 90 32
+21b,0
+d,ff
+53,0
+4,ff
+d,0
+4,ff
+4b,0
+4,ff
+15,0
+4,ff
+45,0
+3,ff
+1b,0
+3,ff
+41,0
+2,ff
+21,0
+2,ff
+3d,0
+2,ff
+25,0
+2,ff
+39,0
+2,ff
+29,0
+2,ff
+36,0
+2,ff
+2b,0
+2,ff
+34,0
+ff
+2f,0
+ff
+31,0
+2,ff
+13,0
+4,ff
+1a,0
+2,ff
+2e,0
+2,ff
+10,0
+4,ff
+1f,0
+2,ff
+2c,0
+2,ff
+e,0
+3,ff
+9,0
+6,ff
+15,0
+2,ff
+2a,0
+2,ff
+d,0
+3,ff
+11,0
+5,ff
+11,0
+2,ff
+28,0
+2,ff
+d,0
+2,ff
+18,0
+3,ff
+f,0
+2,ff
+26,0
+2,ff
+c,0
+2,ff
+1c,0
+3,ff
+e,0
+2,ff
+25,0
+ff
+c,0
+ff
+21,0
+2,ff
+d,0
+ff
+24,0
+ff
+b,0
+2,ff
+24,0
+ff
+d,0
+ff
+22,0
+ff
+b,0
+2,ff
+26,0
+2,ff
+c,0
+ff
+20,0
+2,ff
+a,0
+2,ff
+29,0
+ff
+b,0
+2,ff
+1f,0
+ff
+a,0
+2,ff
+f,0
+3,ff
+19,0
+2,ff
+a,0
+ff
+1e,0
+ff
+b,0
+ff
+2d,0
+2,ff
+a,0
+ff
+1d,0
+ff
+a,0
+ff
+2f,0
+ff
+a,0
+ff
+1c,0
+ff
+a,0
+ff
+3c,0
+ff
+1b,0
+ff
+a,0
+ff
+3c,0
+ff
+1a,0
+ff
+a,0
+ff
+3e,0
+ff
+19,0
+ff
+9,0
+2,ff
+3e,0
+ff
+18,0
+2,ff
+9,0
+ff
+3f,0
+2,ff
+17,0
+ff
+9,0
+2,ff
+40,0
+ff
+17,0
+ff
+9,0
+ff
+41,0
+ff
+17,0
+ff
+9,0
+ff
+41,0
+ff
+16,0
+ff
+9,0
+ff
+1b,0
+d,ff
+1b,0
+ff
+15,0
+ff
+9,0
+ff
+17,0
+4,ff
+d,0
+4,ff
+17,0
+ff
+15,0
+ff
+9,0
+ff
+14,0
+3,ff
+15,0
+3,ff
+14,0
+ff
+15,0
+ff
+9,0
+ff
+13,0
+2,ff
+19,0
+2,ff
+13,0
+ff
+14,0
+ff
+9,0
+ff
+13,0
+ff
+1d,0
+ff
+13,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+1d,0
+b,ff
+1d,0
+ff
+13,0
+ff
+9,0
+ff
+1a,0
+3,ff
+b,0
+3,ff
+1a,0
+ff
+13,0
+ff
+9,0
+ff
+17,0
+3,ff
+11,0
+3,ff
+17,0
+ff
+13,0
+ff
+9,0
+ff
+16,0
+2,ff
+15,0
+2,ff
+16,0
+ff
+13,0
+ff
+9,0
+ff
+14,0
+2,ff
+19,0
+2,ff
+14,0
+ff
+13,0
+ff
+9,0
+ff
+13,0
+ff
+1d,0
+ff
+13,0
+ff
+13,0
+ff
+a,0
+ff
+11,0
+ff
+1f,0
+ff
+12,0
+ff
+13,0
+ff
+a,0
+ff
+10,0
+ff
+21,0
+ff
+11,0
+ff
+14,0
+ff
+9,0
+ff
+f,0
+ff
+23,0
+ff
+f,0
+ff
+15,0
+ff
+9,0
+ff
+f,0
+ff
+23,0
+ff
+f,0
+ff
+15,0
+ff
+a,0
+ff
+d,0
+ff
+25,0
+ff
+e,0
+ff
+15,0
+ff
+a,0
+ff
+d,0
+ff
+25,0
+ff
+e,0
+ff
+16,0
+ff
+9,0
+2,ff
+b,0
+ff
+27,0
+ff
+c,0
+ff
+17,0
+ff
+a,0
+ff
+b,0
+ff
+27,0
+ff
+c,0
+ff
+17,0
+ff
+a,0
+2,ff
+a,0
+ff
+27,0
+ff
+c,0
+ff
+17,0
+2,ff
+a,0
+ff
+a,0
+ff
+27,0
+ff
+b,0
+2,ff
+18,0
+ff
+b,0
+ff
+9,0
+ff
+27,0
+ff
+b,0
+ff
+19,0
+ff
+15,0
+ff
+27,0
+ff
+b,0
+ff
+1a,0
+ff
+14,0
+ff
+27,0
+ff
+a,0
+ff
+1b,0
+ff
+15,0
+ff
+25,0
+ff
+b,0
+ff
+1c,0
+ff
+14,0
+ff
+25,0
+ff
+a,0
+ff
+1d,0
+ff
+15,0
+ff
+23,0
+ff
+b,0
+ff
+1e,0
+ff
+14,0
+ff
+23,0
+ff
+a,0
+ff
+1f,0
+2,ff
+14,0
+ff
+21,0
+ff
+a,0
+2,ff
+20,0
+ff
+15,0
+ff
+1f,0
+ff
+b,0
+ff
+22,0
+ff
+15,0
+ff
+1d,0
+ff
+b,0
+ff
+24,0
+ff
+15,0
+2,ff
+19,0
+2,ff
+b,0
+ff
+25,0
+2,ff
+16,0
+2,ff
+15,0
+2,ff
+c,0
+2,ff
+26,0
+2,ff
+16,0
+3,ff
+11,0
+3,ff
+c,0
+2,ff
+28,0
+2,ff
+18,0
+3,ff
+b,0
+3,ff
+e,0
+2,ff
+2a,0
+2,ff
+1a,0
+b,ff
+10,0
+2,ff
+2c,0
+2,ff
+33,0
+2,ff
+2e,0
+2,ff
+31,0
+2,ff
+31,0
+ff
+2f,0
+ff
+34,0
+2,ff
+2b,0
+2,ff
+36,0
+2,ff
+29,0
+2,ff
+39,0
+2,ff
+25,0
+2,ff
+3d,0
+2,ff
+21,0
+2,ff
+41,0
+3,ff
+1b,0
+3,ff
+45,0
+4,ff
+15,0
+4,ff
+4b,0
+4,ff
+d,0
+4,ff
+53,0
+d,ff
+1c0,0
+100 90 32
+21b,0
+d,100
+53,0
+4,100
+d,0
+4,100
+4b,0
+4,100
+15,0
+4,100
+45,0
+3,100
+1b,0
+3,100
+41,0
+2,100
+21,0
+2,100
+3d,0
+2,100
+25,0
+2,100
+39,0
+2,100
+29,0
+2,100
+36,0
+2,100
+2b,0
+2,100
+34,0
+100
+2f,0
+100
+31,0
+2,100
+13,0
+4,100
+1a,0
+2,100
+2e,0
+2,100
+10,0
+4,100
+1f,0
+2,100
+2c,0
+2,100
+e,0
+3,100
+9,0
+6,100
+15,0
+2,100
+2a,0
+2,100
+d,0
+3,100
+11,0
+5,100
+11,0
+2,100
+28,0
+2,100
+d,0
+2,100
+18,0
+3,100
+f,0
+2,100
+26,0
+2,100
+c,0
+2,100
+1c,0
+3,100
+e,0
+2,100
+25,0
+100
+c,0
+100
+21,0
+2,100
+d,0
+100
+24,0
+100
+b,0
+2,100
+24,0
+100
+d,0
+100
+22,0
+100
+b,0
+2,100
+26,0
+2,100
+c,0
+100
+20,0
+2,100
+a,0
+2,100
+29,0
+100
+b,0
+2,100
+1f,0
+100
+a,0
+2,100
+f,0
+3,100
+19,0
+2,100
+a,0
+100
+1e,0
+100
+b,0
+100
+2d,0
+2,100
+a,0
+100
+1d,0
+100
+a,0
+100
+2f,0
+100
+a,0
+100
+1c,0
+100
+a,0
+100
+3c,0
+100
+1b,0
+100
+a,0
+100
+3c,0
+100
+1a,0
+100
+a,0
+100
+3e,0
+100
+19,0
+100
+9,0
+2,100
+3e,0
+100
+18,0
+2,100
+9,0
+100
+3f,0
+2,100
+17,0
+100
+9,0
+2,100
+40,0
+100
+17,0
+100
+9,0
+100
+41,0
+100
+17,0
+100
+9,0
+100
+41,0
+100
+16,0
+100
+9,0
+100
+1b,0
+d,100
+1b,0
+100
+15,0
+100
+9,0
+100
+17,0
+4,100
+d,0
+4,100
+17,0
+100
+15,0
+100
+9,0
+100
+14,0
+3,100
+15,0
+3,100
+14,0
+100
+15,0
+100
+9,0
+100
+13,0
+2,100
+19,0
+2,100
+13,0
+100
+14,0
+100
+9,0
+100
+13,0
+100
+1d,0
+100
+13,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+1d,0
+b,100
+1d,0
+100
+13,0
+100
+9,0
+100
+1a,0
+3,100
+b,0
+3,100
+1a,0
+100
+13,0
+100
+9,0
+100
+17,0
+3,100
+11,0
+3,100
+17,0
+100
+13,0
+100
+9,0
+100
+16,0
+2,100
+15,0
+2,100
+16,0
+100
+13,0
+100
+9,0
+100
+14,0
+2,100
+19,0
+2,100
+14,0
+100
+13,0
+100
+9,0
+100
+13,0
+100
+1d,0
+100
+13,0
+100
+13,0
+100
+a,0
+100
+11,0
+100
+1f,0
+100
+12,0
+100
+13,0
+100
+a,0
+100
+10,0
+100
+21,0
+100
+11,0
+100
+14,0
+100
+9,0
+100
+f,0
+100
+23,0
+100
+f,0
+100
+15,0
+100
+9,0
+100
+f,0
+100
+23,0
+100
+f,0
+100
+15,0
+100
+a,0
+100
+d,0
+100
+25,0
+100
+e,0
+100
+15,0
+100
+a,0
+100
+d,0
+100
+25,0
+100
+e,0
+100
+16,0
+100
+9,0
+2,100
+b,0
+100
+27,0
+100
+c,0
+100
+17,0
+100
+a,0
+100
+b,0
+100
+27,0
+100
+c,0
+100
+17,0
+100
+a,0
+2,100
+a,0
+100
+27,0
+100
+c,0
+100
+17,0
+2,100
+a,0
+100
+a,0
+100
+27,0
+100
+b,0
+2,100
+18,0
+100
+b,0
+100
+9,0
+100
+27,0
+100
+b,0
+100
+19,0
+100
+15,0
+100
+27,0
+100
+b,0
+100
+1a,0
+100
+14,0
+100
+27,0
+100
+a,0
+100
+1b,0
+100
+15,0
+100
+25,0
+100
+b,0
+100
+1c,0
+100
+14,0
+100
+25,0
+100
+a,0
+100
+1d,0
+100
+15,0
+100
+23,0
+100
+b,0
+100
+1e,0
+100
+14,0
+100
+23,0
+100
+a,0
+100
+1f,0
+2,100
+14,0
+100
+21,0
+100
+a,0
+2,100
+20,0
+100
+15,0
+100
+1f,0
+100
+b,0
+100
+22,0
+100
+15,0
+100
+1d,0
+100
+b,0
+100
+24,0
+100
+15,0
+2,100
+19,0
+2,100
+b,0
+100
+25,0
+2,100
+16,0
+2,100
+15,0
+2,100
+c,0
+2,100
+26,0
+2,100
+16,0
+3,100
+11,0
+3,100
+c,0
+2,100
+28,0
+2,100
+18,0
+3,100
+b,0
+3,100
+e,0
+2,100
+2a,0
+2,100
+1a,0
+b,100
+10,0
+2,100
+2c,0
+2,100
+33,0
+2,100
+2e,0
+2,100
+31,0
+2,100
+31,0
+100
+2f,0
+100
+34,0
+2,100
+2b,0
+2,100
+36,0
+2,100
+29,0
+2,100
+39,0
+2,100
+25,0
+2,100
+3d,0
+2,100
+21,0
+2,100
+41,0
+3,100
+1b,0
+3,100
+45,0
+4,100
+15,0
+4,100
+4b,0
+4,100
+d,0
+4,100
+53,0
+d,100
+1c0,0
+100 90 32
+21b,0
+d,12c
+53,0
+4,12c
+d,0
+4,12c
+4b,0
+4,12c
+15,0
+4,12c
+45,0
+3,12c
+1b,0
+3,12c
+41,0
+2,12c
+21,0
+2,12c
+3d,0
+2,12c
+25,0
+2,12c
+39,0
+2,12c
+29,0
+2,12c
+36,0
+2,12c
+2b,0
+2,12c
+34,0
+12c
+2f,0
+12c
+31,0
+2,12c
+13,0
+4,12c
+1a,0
+2,12c
+2e,0
+2,12c
+10,0
+4,12c
+1f,0
+2,12c
+2c,0
+2,12c
+e,0
+3,12c
+9,0
+6,12c
+15,0
+2,12c
+2a,0
+2,12c
+d,0
+3,12c
+11,0
+5,12c
+11,0
+2,12c
+28,0
+2,12c
+d,0
+2,12c
+18,0
+3,12c
+f,0
+2,12c
+26,0
+2,12c
+c,0
+2,12c
+1c,0
+3,12c
+e,0
+2,12c
+25,0
+12c
+c,0
+12c
+21,0
+2,12c
+d,0
+12c
+24,0
+12c
+b,0
+2,12c
+24,0
+12c
+d,0
+12c
+22,0
+12c
+b,0
+2,12c
+26,0
+2,12c
+c,0
+12c
+20,0
+2,12c
+a,0
+2,12c
+29,0
+12c
+b,0
+2,12c
+1f,0
+12c
+a,0
+2,12c
+f,0
+3,12c
+19,0
+2,12c
+a,0
+12c
+1e,0
+12c
+b,0
+12c
+2d,0
+2,12c
+a,0
+12c
+1d,0
+12c
+a,0
+12c
+2f,0
+12c
+a,0
+12c
+1c,0
+12c
+a,0
+12c
+3c,0
+12c
+1b,0
+12c
+a,0
+12c
+3c,0
+12c
+1a,0
+12c
+a,0
+12c
+3e,0
+12c
+19,0
+12c
+9,0
+2,12c
+3e,0
+12c
+18,0
+2,12c
+9,0
+12c
+3f,0
+2,12c
+17,0
+12c
+9,0
+2,12c
+40,0
+12c
+17,0
+12c
+9,0
+12c
+41,0
+12c
+17,0
+12c
+9,0
+12c
+41,0
+12c
+16,0
+12c
+9,0
+12c
+1b,0
+d,12c
+1b,0
+12c
+15,0
+12c
+9,0
+12c
+17,0
+4,12c
+d,0
+4,12c
+17,0
+12c
+15,0
+12c
+9,0
+12c
+14,0
+3,12c
+15,0
+3,12c
+14,0
+12c
+15,0
+12c
+9,0
+12c
+13,0
+2,12c
+19,0
+2,12c
+13,0
+12c
+14,0
+12c
+9,0
+12c
+13,0
+12c
+1d,0
+12c
+13,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+1d,0
+b,12c
+1d,0
+12c
+13,0
+12c
+9,0
+12c
+1a,0
+3,12c
+b,0
+3,12c
+1a,0
+12c
+13,0
+12c
+9,0
+12c
+17,0
+3,12c
+11,0
+3,12c
+17,0
+12c
+13,0
+12c
+9,0
+12c
+16,0
+2,12c
+15,0
+2,12c
+16,0
+12c
+13,0
+12c
+9,0
+12c
+14,0
+2,12c
+19,0
+2,12c
+14,0
+12c
+13,0
+12c
+9,0
+12c
+13,0
+12c
+1d,0
+12c
+13,0
+12c
+13,0
+12c
+a,0
+12c
+11,0
+12c
+1f,0
+12c
+12,0
+12c
+13,0
+12c
+a,0
+12c
+10,0
+12c
+21,0
+12c
+11,0
+12c
+14,0
+12c
+9,0
+12c
+f,0
+12c
+23,0
+12c
+f,0
+12c
+15,0
+12c
+9,0
+12c
+f,0
+12c
+23,0
+12c
+f,0
+12c
+15,0
+12c
+a,0
+12c
+d,0
+12c
+25,0
+12c
+e,0
+12c
+15,0
+12c
+a,0
+12c
+d,0
+12c
+25,0
+12c
+e,0
+12c
+16,0
+12c
+9,0
+2,12c
+b,0
+12c
+27,0
+12c
+c,0
+12c
+17,0
+12c
+a,0
+12c
+b,0
+12c
+27,0
+12c
+c,0
+12c
+17,0
+12c
+a,0
+2,12c
+a,0
+12c
+27,0
+12c
+c,0
+12c
+17,0
+2,12c
+a,0
+12c
+a,0
+12c
+27,0
+12c
+b,0
+2,12c
+18,0
+12c
+b,0
+12c
+9,0
+12c
+27,0
+12c
+b,0
+12c
+19,0
+12c
+15,0
+12c
+27,0
+12c
+b,0
+12c
+1a,0
+12c
+14,0
+12c
+27,0
+12c
+a,0
+12c
+1b,0
+12c
+15,0
+12c
+25,0
+12c
+b,0
+12c
+1c,0
+12c
+14,0
+12c
+25,0
+12c
+a,0
+12c
+1d,0
+12c
+15,0
+12c
+23,0
+12c
+b,0
+12c
+1e,0
+12c
+14,0
+12c
+23,0
+12c
+a,0
+12c
+1f,0
+2,12c
+14,0
+12c
+21,0
+12c
+a,0
+2,12c
+20,0
+12c
+15,0
+12c
+1f,0
+12c
+b,0
+12c
+22,0
+12c
+15,0
+12c
+1d,0
+12c
+b,0
+12c
+24,0
+12c
+15,0
+2,12c
+19,0
+2,12c
+b,0
+12c
+25,0
+2,12c
+16,0
+2,12c
+15,0
+2,12c
+c,0
+2,12c
+26,0
+2,12c
+16,0
+3,12c
+11,0
+3,12c
+c,0
+2,12c
+28,0
+2,12c
+18,0
+3,12c
+b,0
+3,12c
+e,0
+2,12c
+2a,0
+2,12c
+1a,0
+b,12c
+10,0
+2,12c
+2c,0
+2,12c
+33,0
+2,12c
+2e,0
+2,12c
+31,0
+2,12c
+31,0
+12c
+2f,0
+12c
+34,0
+2,12c
+2b,0
+2,12c
+36,0
+2,12c
+29,0
+2,12c
+39,0
+2,12c
+25,0
+2,12c
+3d,0
+2,12c
+21,0
+2,12c
+41,0
+3,12c
+1b,0
+3,12c
+45,0
+4,12c
+15,0
+4,12c
+4b,0
+4,12c
+d,0
+4,12c
+53,0
+d,12c
+1c0,0
+100 90 32
+21b,0
+d,3e8
+53,0
+4,3e8
+d,0
+4,3e8
+4b,0
+4,3e8
+15,0
+4,3e8
+45,0
+3,3e8
+1b,0
+3,3e8
+41,0
+2,3e8
+21,0
+2,3e8
+3d,0
+2,3e8
+25,0
+2,3e8
+39,0
+2,3e8
+29,0
+2,3e8
+36,0
+2,3e8
+2b,0
+2,3e8
+34,0
+3e8
+2f,0
+3e8
+31,0
+2,3e8
+13,0
+4,3e8
+1a,0
+2,3e8
+2e,0
+2,3e8
+10,0
+4,3e8
+1f,0
+2,3e8
+2c,0
+2,3e8
+e,0
+3,3e8
+9,0
+6,3e8
+15,0
+2,3e8
+2a,0
+2,3e8
+d,0
+3,3e8
+11,0
+5,3e8
+11,0
+2,3e8
+28,0
+2,3e8
+d,0
+2,3e8
+18,0
+3,3e8
+f,0
+2,3e8
+26,0
+2,3e8
+c,0
+2,3e8
+1c,0
+3,3e8
+e,0
+2,3e8
+25,0
+3e8
+c,0
+3e8
+21,0
+2,3e8
+d,0
+3e8
+24,0
+3e8
+b,0
+2,3e8
+24,0
+3e8
+d,0
+3e8
+22,0
+3e8
+b,0
+2,3e8
+26,0
+2,3e8
+c,0
+3e8
+20,0
+2,3e8
+a,0
+2,3e8
+29,0
+3e8
+b,0
+2,3e8
+1f,0
+3e8
+a,0
+2,3e8
+f,0
+3,3e8
+19,0
+2,3e8
+a,0
+3e8
+1e,0
+3e8
+b,0
+3e8
+2d,0
+2,3e8
+a,0
+3e8
+1d,0
+3e8
+a,0
+3e8
+2f,0
+3e8
+a,0
+3e8
+1c,0
+3e8
+a,0
+3e8
+3c,0
+3e8
+1b,0
+3e8
+a,0
+3e8
+3c,0
+3e8
+1a,0
+3e8
+a,0
+3e8
+3e,0
+3e8
+19,0
+3e8
+9,0
+2,3e8
+3e,0
+3e8
+18,0
+2,3e8
+9,0
+3e8
+3f,0
+2,3e8
+17,0
+3e8
+9,0
+2,3e8
+40,0
+3e8
+17,0
+3e8
+9,0
+3e8
+41,0
+3e8
+17,0
+3e8
+9,0
+3e8
+41,0
+3e8
+16,0
+3e8
+9,0
+3e8
+1b,0
+d,3e8
+1b,0
+3e8
+15,0
+3e8
+9,0
+3e8
+17,0
+4,3e8
+d,0
+4,3e8
+17,0
+3e8
+15,0
+3e8
+9,0
+3e8
+14,0
+3,3e8
+15,0
+3,3e8
+14,0
+3e8
+15,0
+3e8
+9,0
+3e8
+13,0
+2,3e8
+19,0
+2,3e8
+13,0
+3e8
+14,0
+3e8
+9,0
+3e8
+13,0
+3e8
+1d,0
+3e8
+13,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+1d,0
+b,3e8
+1d,0
+3e8
+13,0
+3e8
+9,0
+3e8
+1a,0
+3,3e8
+b,0
+3,3e8
+1a,0
+3e8
+13,0
+3e8
+9,0
+3e8
+17,0
+3,3e8
+11,0
+3,3e8
+17,0
+3e8
+13,0
+3e8
+9,0
+3e8
+16,0
+2,3e8
+15,0
+2,3e8
+16,0
+3e8
+13,0
+3e8
+9,0
+3e8
+14,0
+2,3e8
+19,0
+2,3e8
+14,0
+3e8
+13,0
+3e8
+9,0
+3e8
+13,0
+3e8
+1d,0
+3e8
+13,0
+3e8
+13,0
+3e8
+a,0
+3e8
+11,0
+3e8
+1f,0
+3e8
+12,0
+3e8
+13,0
+3e8
+a,0
+3e8
+10,0
+3e8
+21,0
+3e8
+11,0
+3e8
+14,0
+3e8
+9,0
+3e8
+f,0
+3e8
+23,0
+3e8
+f,0
+3e8
+15,0
+3e8
+9,0
+3e8
+f,0
+3e8
+23,0
+3e8
+f,0
+3e8
+15,0
+3e8
+a,0
+3e8
+d,0
+3e8
+25,0
+3e8
+e,0
+3e8
+15,0
+3e8
+a,0
+3e8
+d,0
+3e8
+25,0
+3e8
+e,0
+3e8
+16,0
+3e8
+9,0
+2,3e8
+b,0
+3e8
+27,0
+3e8
+c,0
+3e8
+17,0
+3e8
+a,0
+3e8
+b,0
+3e8
+27,0
+3e8
+c,0
+3e8
+17,0
+3e8
+a,0
+2,3e8
+a,0
+3e8
+27,0
+3e8
+c,0
+3e8
+17,0
+2,3e8
+a,0
+3e8
+a,0
+3e8
+27,0
+3e8
+b,0
+2,3e8
+18,0
+3e8
+b,0
+3e8
+9,0
+3e8
+27,0
+3e8
+b,0
+3e8
+19,0
+3e8
+15,0
+3e8
+27,0
+3e8
+b,0
+3e8
+1a,0
+3e8
+14,0
+3e8
+27,0
+3e8
+a,0
+3e8
+1b,0
+3e8
+15,0
+3e8
+25,0
+3e8
+b,0
+3e8
+1c,0
+3e8
+14,0
+3e8
+25,0
+3e8
+a,0
+3e8
+1d,0
+3e8
+15,0
+3e8
+23,0
+3e8
+b,0
+3e8
+1e,0
+3e8
+14,0
+3e8
+23,0
+3e8
+a,0
+3e8
+1f,0
+2,3e8
+14,0
+3e8
+21,0
+3e8
+a,0
+2,3e8
+20,0
+3e8
+15,0
+3e8
+1f,0
+3e8
+b,0
+3e8
+22,0
+3e8
+15,0
+3e8
+1d,0
+3e8
+b,0
+3e8
+24,0
+3e8
+15,0
+2,3e8
+19,0
+2,3e8
+b,0
+3e8
+25,0
+2,3e8
+16,0
+2,3e8
+15,0
+2,3e8
+c,0
+2,3e8
+26,0
+2,3e8
+16,0
+3,3e8
+11,0
+3,3e8
+c,0
+2,3e8
+28,0
+2,3e8
+18,0
+3,3e8
+b,0
+3,3e8
+e,0
+2,3e8
+2a,0
+2,3e8
+1a,0
+b,3e8
+10,0
+2,3e8
+2c,0
+2,3e8
+33,0
+2,3e8
+2e,0
+2,3e8
+31,0
+2,3e8
+31,0
+3e8
+2f,0
+3e8
+34,0
+2,3e8
+2b,0
+2,3e8
+36,0
+2,3e8
+29,0
+2,3e8
+39,0
+2,3e8
+25,0
+2,3e8
+3d,0
+2,3e8
+21,0
+2,3e8
+41,0
+3,3e8
+1b,0
+3,3e8
+45,0
+4,3e8
+15,0
+4,3e8
+4b,0
+4,3e8
+d,0
+4,3e8
+53,0
+d,3e8
+1c0,0
+100 90 32
+21b,0
+d,111111
+53,0
+4,111111
+d,0
+4,111111
+4b,0
+4,111111
+15,0
+4,111111
+45,0
+3,111111
+1b,0
+3,111111
+41,0
+2,111111
+21,0
+2,111111
+3d,0
+2,111111
+25,0
+2,111111
+39,0
+2,111111
+29,0
+2,111111
+36,0
+2,111111
+2b,0
+2,111111
+34,0
+111111
+2f,0
+111111
+31,0
+2,111111
+13,0
+4,111111
+1a,0
+2,111111
+2e,0
+2,111111
+10,0
+4,111111
+1f,0
+2,111111
+2c,0
+2,111111
+e,0
+3,111111
+9,0
+6,111111
+15,0
+2,111111
+2a,0
+2,111111
+d,0
+3,111111
+11,0
+5,111111
+11,0
+2,111111
+28,0
+2,111111
+d,0
+2,111111
+18,0
+3,111111
+f,0
+2,111111
+26,0
+2,111111
+c,0
+2,111111
+1c,0
+3,111111
+e,0
+2,111111
+25,0
+111111
+c,0
+111111
+21,0
+2,111111
+d,0
+111111
+24,0
+111111
+b,0
+2,111111
+24,0
+111111
+d,0
+111111
+22,0
+111111
+b,0
+2,111111
+26,0
+2,111111
+c,0
+111111
+20,0
+2,111111
+a,0
+2,111111
+29,0
+111111
+b,0
+2,111111
+1f,0
+111111
+a,0
+2,111111
+f,0
+3,111111
+19,0
+2,111111
+a,0
+111111
+1e,0
+111111
+b,0
+111111
+2d,0
+2,111111
+a,0
+111111
+1d,0
+111111
+a,0
+111111
+2f,0
+111111
+a,0
+111111
+1c,0
+111111
+a,0
+111111
+3c,0
+111111
+1b,0
+111111
+a,0
+111111
+3c,0
+111111
+1a,0
+111111
+a,0
+111111
+3e,0
+111111
+19,0
+111111
+9,0
+2,111111
+3e,0
+111111
+18,0
+2,111111
+9,0
+111111
+3f,0
+2,111111
+17,0
+111111
+9,0
+2,111111
+40,0
+111111
+17,0
+111111
+9,0
+111111
+41,0
+111111
+17,0
+111111
+9,0
+111111
+41,0
+111111
+16,0
+111111
+9,0
+111111
+1b,0
+d,111111
+1b,0
+111111
+15,0
+111111
+9,0
+111111
+17,0
+4,111111
+d,0
+4,111111
+17,0
+111111
+15,0
+111111
+9,0
+111111
+14,0
+3,111111
+15,0
+3,111111
+14,0
+111111
+15,0
+111111
+9,0
+111111
+13,0
+2,111111
+19,0
+2,111111
+13,0
+111111
+14,0
+111111
+9,0
+111111
+13,0
+111111
+1d,0
+111111
+13,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+1d,0
+b,111111
+1d,0
+111111
+13,0
+111111
+9,0
+111111
+1a,0
+3,111111
+b,0
+3,111111
+1a,0
+111111
+13,0
+111111
+9,0
+111111
+17,0
+3,111111
+11,0
+3,111111
+17,0
+111111
+13,0
+111111
+9,0
+111111
+16,0
+2,111111
+15,0
+2,111111
+16,0
+111111
+13,0
+111111
+9,0
+111111
+14,0
+2,111111
+19,0
+2,111111
+14,0
+111111
+13,0
+111111
+9,0
+111111
+13,0
+111111
+1d,0
+111111
+13,0
+111111
+13,0
+111111
+a,0
+111111
+11,0
+111111
+1f,0
+111111
+12,0
+111111
+13,0
+111111
+a,0
+111111
+10,0
+111111
+21,0
+111111
+11,0
+111111
+14,0
+111111
+9,0
+111111
+f,0
+111111
+23,0
+111111
+f,0
+111111
+15,0
+111111
+9,0
+111111
+f,0
+111111
+23,0
+111111
+f,0
+111111
+15,0
+111111
+a,0
+111111
+d,0
+111111
+25,0
+111111
+e,0
+111111
+15,0
+111111
+a,0
+111111
+d,0
+111111
+25,0
+111111
+e,0
+111111
+16,0
+111111
+9,0
+2,111111
+b,0
+111111
+27,0
+111111
+c,0
+111111
+17,0
+111111
+a,0
+111111
+b,0
+111111
+27,0
+111111
+c,0
+111111
+17,0
+111111
+a,0
+2,111111
+a,0
+111111
+27,0
+111111
+c,0
+111111
+17,0
+2,111111
+a,0
+111111
+a,0
+111111
+27,0
+111111
+b,0
+2,111111
+18,0
+111111
+b,0
+111111
+9,0
+111111
+27,0
+111111
+b,0
+111111
+19,0
+111111
+15,0
+111111
+27,0
+111111
+b,0
+111111
+1a,0
+111111
+14,0
+111111
+27,0
+111111
+a,0
+111111
+1b,0
+111111
+15,0
+111111
+25,0
+111111
+b,0
+111111
+1c,0
+111111
+14,0
+111111
+25,0
+111111
+a,0
+111111
+1d,0
+111111
+15,0
+111111
+23,0
+111111
+b,0
+111111
+1e,0
+111111
+14,0
+111111
+23,0
+111111
+a,0
+111111
+1f,0
+2,111111
+14,0
+111111
+21,0
+111111
+a,0
+2,111111
+20,0
+111111
+15,0
+111111
+1f,0
+111111
+b,0
+111111
+22,0
+111111
+15,0
+111111
+1d,0
+111111
+b,0
+111111
+24,0
+111111
+15,0
+2,111111
+19,0
+2,111111
+b,0
+111111
+25,0
+2,111111
+16,0
+2,111111
+15,0
+2,111111
+c,0
+2,111111
+26,0
+2,111111
+16,0
+3,111111
+11,0
+3,111111
+c,0
+2,111111
+28,0
+2,111111
+18,0
+3,111111
+b,0
+3,111111
+e,0
+2,111111
+2a,0
+2,111111
+1a,0
+b,111111
+10,0
+2,111111
+2c,0
+2,111111
+33,0
+2,111111
+2e,0
+2,111111
+31,0
+2,111111
+31,0
+111111
+2f,0
+111111
+34,0
+2,111111
+2b,0
+2,111111
+36,0
+2,111111
+29,0
+2,111111
+39,0
+2,111111
+25,0
+2,111111
+3d,0
+2,111111
+21,0
+2,111111
+41,0
+3,111111
+1b,0
+3,111111
+45,0
+4,111111
+15,0
+4,111111
+4b,0
+4,111111
+d,0
+4,111111
+53,0
+d,111111
+1c0,0
+100 90 32
+21b,0
+d,400200
+53,0
+4,400200
+d,0
+4,400200
+4b,0
+4,400200
+15,0
+4,400200
+45,0
+3,400200
+1b,0
+3,400200
+41,0
+2,400200
+21,0
+2,400200
+3d,0
+2,400200
+25,0
+2,400200
+39,0
+2,400200
+29,0
+2,400200
+36,0
+2,400200
+2b,0
+2,400200
+34,0
+400200
+2f,0
+400200
+31,0
+2,400200
+13,0
+4,400200
+1a,0
+2,400200
+2e,0
+2,400200
+10,0
+4,400200
+1f,0
+2,400200
+2c,0
+2,400200
+e,0
+3,400200
+9,0
+6,400200
+15,0
+2,400200
+2a,0
+2,400200
+d,0
+3,400200
+11,0
+5,400200
+11,0
+2,400200
+28,0
+2,400200
+d,0
+2,400200
+18,0
+3,400200
+f,0
+2,400200
+26,0
+2,400200
+c,0
+2,400200
+1c,0
+3,400200
+e,0
+2,400200
+25,0
+400200
+c,0
+400200
+21,0
+2,400200
+d,0
+400200
+24,0
+400200
+b,0
+2,400200
+24,0
+400200
+d,0
+400200
+22,0
+400200
+b,0
+2,400200
+26,0
+2,400200
+c,0
+400200
+20,0
+2,400200
+a,0
+2,400200
+29,0
+400200
+b,0
+2,400200
+1f,0
+400200
+a,0
+2,400200
+f,0
+3,400200
+19,0
+2,400200
+a,0
+400200
+1e,0
+400200
+b,0
+400200
+2d,0
+2,400200
+a,0
+400200
+1d,0
+400200
+a,0
+400200
+2f,0
+400200
+a,0
+400200
+1c,0
+400200
+a,0
+400200
+3c,0
+400200
+1b,0
+400200
+a,0
+400200
+3c,0
+400200
+1a,0
+400200
+a,0
+400200
+3e,0
+400200
+19,0
+400200
+9,0
+2,400200
+3e,0
+400200
+18,0
+2,400200
+9,0
+400200
+3f,0
+2,400200
+17,0
+400200
+9,0
+2,400200
+40,0
+400200
+17,0
+400200
+9,0
+400200
+41,0
+400200
+17,0
+400200
+9,0
+400200
+41,0
+400200
+16,0
+400200
+9,0
+400200
+1b,0
+d,400200
+1b,0
+400200
+15,0
+400200
+9,0
+400200
+17,0
+4,400200
+d,0
+4,400200
+17,0
+400200
+15,0
+400200
+9,0
+400200
+14,0
+3,400200
+15,0
+3,400200
+14,0
+400200
+15,0
+400200
+9,0
+400200
+13,0
+2,400200
+19,0
+2,400200
+13,0
+400200
+14,0
+400200
+9,0
+400200
+13,0
+400200
+1d,0
+400200
+13,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+1d,0
+b,400200
+1d,0
+400200
+13,0
+400200
+9,0
+400200
+1a,0
+3,400200
+b,0
+3,400200
+1a,0
+400200
+13,0
+400200
+9,0
+400200
+17,0
+3,400200
+11,0
+3,400200
+17,0
+400200
+13,0
+400200
+9,0
+400200
+16,0
+2,400200
+15,0
+2,400200
+16,0
+400200
+13,0
+400200
+9,0
+400200
+14,0
+2,400200
+19,0
+2,400200
+14,0
+400200
+13,0
+400200
+9,0
+400200
+13,0
+400200
+1d,0
+400200
+13,0
+400200
+13,0
+400200
+a,0
+400200
+11,0
+400200
+1f,0
+400200
+12,0
+400200
+13,0
+400200
+a,0
+400200
+10,0
+400200
+21,0
+400200
+11,0
+400200
+14,0
+400200
+9,0
+400200
+f,0
+400200
+23,0
+400200
+f,0
+400200
+15,0
+400200
+9,0
+400200
+f,0
+400200
+23,0
+400200
+f,0
+400200
+15,0
+400200
+a,0
+400200
+d,0
+400200
+25,0
+400200
+e,0
+400200
+15,0
+400200
+a,0
+400200
+d,0
+400200
+25,0
+400200
+e,0
+400200
+16,0
+400200
+9,0
+2,400200
+b,0
+400200
+27,0
+400200
+c,0
+400200
+17,0
+400200
+a,0
+400200
+b,0
+400200
+27,0
+400200
+c,0
+400200
+17,0
+400200
+a,0
+2,400200
+a,0
+400200
+27,0
+400200
+c,0
+400200
+17,0
+2,400200
+a,0
+400200
+a,0
+400200
+27,0
+400200
+b,0
+2,400200
+18,0
+400200
+b,0
+400200
+9,0
+400200
+27,0
+400200
+b,0
+400200
+19,0
+400200
+15,0
+400200
+27,0
+400200
+b,0
+400200
+1a,0
+400200
+14,0
+400200
+27,0
+400200
+a,0
+400200
+1b,0
+400200
+15,0
+400200
+25,0
+400200
+b,0
+400200
+1c,0
+400200
+14,0
+400200
+25,0
+400200
+a,0
+400200
+1d,0
+400200
+15,0
+400200
+23,0
+400200
+b,0
+400200
+1e,0
+400200
+14,0
+400200
+23,0
+400200
+a,0
+400200
+1f,0
+2,400200
+14,0
+400200
+21,0
+400200
+a,0
+2,400200
+20,0
+400200
+15,0
+400200
+1f,0
+400200
+b,0
+400200
+22,0
+400200
+15,0
+400200
+1d,0
+400200
+b,0
+400200
+24,0
+400200
+15,0
+2,400200
+19,0
+2,400200
+b,0
+400200
+25,0
+2,400200
+16,0
+2,400200
+15,0
+2,400200
+c,0
+2,400200
+26,0
+2,400200
+16,0
+3,400200
+11,0
+3,400200
+c,0
+2,400200
+28,0
+2,400200
+18,0
+3,400200
+b,0
+3,400200
+e,0
+2,400200
+2a,0
+2,400200
+1a,0
+b,400200
+10,0
+2,400200
+2c,0
+2,400200
+33,0
+2,400200
+2e,0
+2,400200
+31,0
+2,400200
+31,0
+400200
+2f,0
+400200
+34,0
+2,400200
+2b,0
+2,400200
+36,0
+2,400200
+29,0
+2,400200
+39,0
+2,400200
+25,0
+2,400200
+3d,0
+2,400200
+21,0
+2,400200
+41,0
+3,400200
+1b,0
+3,400200
+45,0
+4,400200
+15,0
+4,400200
+4b,0
+4,400200
+d,0
+4,400200
+53,0
+d,400200
+1c0,0
+100 90 32
+21b,0
+d,777777
+53,0
+4,777777
+d,0
+4,777777
+4b,0
+4,777777
+15,0
+4,777777
+45,0
+3,777777
+1b,0
+3,777777
+41,0
+2,777777
+21,0
+2,777777
+3d,0
+2,777777
+25,0
+2,777777
+39,0
+2,777777
+29,0
+2,777777
+36,0
+2,777777
+2b,0
+2,777777
+34,0
+777777
+2f,0
+777777
+31,0
+2,777777
+13,0
+4,777777
+1a,0
+2,777777
+2e,0
+2,777777
+10,0
+4,777777
+1f,0
+2,777777
+2c,0
+2,777777
+e,0
+3,777777
+9,0
+6,777777
+15,0
+2,777777
+2a,0
+2,777777
+d,0
+3,777777
+11,0
+5,777777
+11,0
+2,777777
+28,0
+2,777777
+d,0
+2,777777
+18,0
+3,777777
+f,0
+2,777777
+26,0
+2,777777
+c,0
+2,777777
+1c,0
+3,777777
+e,0
+2,777777
+25,0
+777777
+c,0
+777777
+21,0
+2,777777
+d,0
+777777
+24,0
+777777
+b,0
+2,777777
+24,0
+777777
+d,0
+777777
+22,0
+777777
+b,0
+2,777777
+26,0
+2,777777
+c,0
+777777
+20,0
+2,777777
+a,0
+2,777777
+29,0
+777777
+b,0
+2,777777
+1f,0
+777777
+a,0
+2,777777
+f,0
+3,777777
+19,0
+2,777777
+a,0
+777777
+1e,0
+777777
+b,0
+777777
+2d,0
+2,777777
+a,0
+777777
+1d,0
+777777
+a,0
+777777
+2f,0
+777777
+a,0
+777777
+1c,0
+777777
+a,0
+777777
+3c,0
+777777
+1b,0
+777777
+a,0
+777777
+3c,0
+777777
+1a,0
+777777
+a,0
+777777
+3e,0
+777777
+19,0
+777777
+9,0
+2,777777
+3e,0
+777777
+18,0
+2,777777
+9,0
+777777
+3f,0
+2,777777
+17,0
+777777
+9,0
+2,777777
+40,0
+777777
+17,0
+777777
+9,0
+777777
+41,0
+777777
+17,0
+777777
+9,0
+777777
+41,0
+777777
+16,0
+777777
+9,0
+777777
+1b,0
+d,777777
+1b,0
+777777
+15,0
+777777
+9,0
+777777
+17,0
+4,777777
+d,0
+4,777777
+17,0
+777777
+15,0
+777777
+9,0
+777777
+14,0
+3,777777
+15,0
+3,777777
+14,0
+777777
+15,0
+777777
+9,0
+777777
+13,0
+2,777777
+19,0
+2,777777
+13,0
+777777
+14,0
+777777
+9,0
+777777
+13,0
+777777
+1d,0
+777777
+13,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+1d,0
+b,777777
+1d,0
+777777
+13,0
+777777
+9,0
+777777
+1a,0
+3,777777
+b,0
+3,777777
+1a,0
+777777
+13,0
+777777
+9,0
+777777
+17,0
+3,777777
+11,0
+3,777777
+17,0
+777777
+13,0
+777777
+9,0
+777777
+16,0
+2,777777
+15,0
+2,777777
+16,0
+777777
+13,0
+777777
+9,0
+777777
+14,0
+2,777777
+19,0
+2,777777
+14,0
+777777
+13,0
+777777
+9,0
+777777
+13,0
+777777
+1d,0
+777777
+13,0
+777777
+13,0
+777777
+a,0
+777777
+11,0
+777777
+1f,0
+777777
+12,0
+777777
+13,0
+777777
+a,0
+777777
+10,0
+777777
+21,0
+777777
+11,0
+777777
+14,0
+777777
+9,0
+777777
+f,0
+777777
+23,0
+777777
+f,0
+777777
+15,0
+777777
+9,0
+777777
+f,0
+777777
+23,0
+777777
+f,0
+777777
+15,0
+777777
+a,0
+777777
+d,0
+777777
+25,0
+777777
+e,0
+777777
+15,0
+777777
+a,0
+777777
+d,0
+777777
+25,0
+777777
+e,0
+777777
+16,0
+777777
+9,0
+2,777777
+b,0
+777777
+27,0
+777777
+c,0
+777777
+17,0
+777777
+a,0
+777777
+b,0
+777777
+27,0
+777777
+c,0
+777777
+17,0
+777777
+a,0
+2,777777
+a,0
+777777
+27,0
+777777
+c,0
+777777
+17,0
+2,777777
+a,0
+777777
+a,0
+777777
+27,0
+777777
+b,0
+2,777777
+18,0
+777777
+b,0
+777777
+9,0
+777777
+27,0
+777777
+b,0
+777777
+19,0
+777777
+15,0
+777777
+27,0
+777777
+b,0
+777777
+1a,0
+777777
+14,0
+777777
+27,0
+777777
+a,0
+777777
+1b,0
+777777
+15,0
+777777
+25,0
+777777
+b,0
+777777
+1c,0
+777777
+14,0
+777777
+25,0
+777777
+a,0
+777777
+1d,0
+777777
+15,0
+777777
+23,0
+777777
+b,0
+777777
+1e,0
+777777
+14,0
+777777
+23,0
+777777
+a,0
+777777
+1f,0
+2,777777
+14,0
+777777
+21,0
+777777
+a,0
+2,777777
+20,0
+777777
+15,0
+777777
+1f,0
+777777
+b,0
+777777
+22,0
+777777
+15,0
+777777
+1d,0
+777777
+b,0
+777777
+24,0
+777777
+15,0
+2,777777
+19,0
+2,777777
+b,0
+777777
+25,0
+2,777777
+16,0
+2,777777
+15,0
+2,777777
+c,0
+2,777777
+26,0
+2,777777
+16,0
+3,777777
+11,0
+3,777777
+c,0
+2,777777
+28,0
+2,777777
+18,0
+3,777777
+b,0
+3,777777
+e,0
+2,777777
+2a,0
+2,777777
+1a,0
+b,777777
+10,0
+2,777777
+2c,0
+2,777777
+33,0
+2,777777
+2e,0
+2,777777
+31,0
+2,777777
+31,0
+777777
+2f,0
+777777
+34,0
+2,777777
+2b,0
+2,777777
+36,0
+2,777777
+29,0
+2,777777
+39,0
+2,777777
+25,0
+2,777777
+3d,0
+2,777777
+21,0
+2,777777
+41,0
+3,777777
+1b,0
+3,777777
+45,0
+4,777777
+15,0
+4,777777
+4b,0
+4,777777
+d,0
+4,777777
+53,0
+d,777777
+1c0,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a102.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a102.dat
new file mode 100644
index 000000000..f232c0d1a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a102.dat
@@ -0,0 +1,4281 @@
+! $XConsortium$
+100 90 32
+21c,0
+c,1
+53,0
+4,1
+5c,0
+4,1
+15,0
+4,1
+63,0
+2,1
+42,0
+2,1
+21,0
+2,1
+3d,0
+2,1
+25,0
+2,1
+39,0
+1
+2a,0
+2,1
+63,0
+2,1
+34,0
+1
+2f,0
+1
+31,0
+1
+14,0
+4,1
+4a,0
+2,1
+10,0
+1
+0
+1
+20,0
+2,1
+2c,0
+2,1
+1a,0
+6,1
+15,0
+2,1
+2a,0
+2,1
+f,0
+1
+60,0
+2,1
+18,0
+3,1
+f,0
+2,1
+27,0
+1
+2a,0
+3,1
+35,0
+1
+c,0
+1
+21,0
+2,1
+d,0
+1
+24,0
+1
+b,0
+2,1
+24,0
+1
+30,0
+1
+41,0
+1
+2d,0
+1
+29,0
+1
+37,0
+2,1
+37,0
+1
+82,0
+1
+a,0
+1
+2f,0
+1
+a,0
+1
+27,0
+1
+58,0
+1
+a,0
+1
+3c,0
+1
+1a,0
+1
+49,0
+1
+23,0
+2,1
+3e,0
+1
+18,0
+2,1
+9,0
+1
+3f,0
+2,1
+21,0
+1
+41,0
+1
+17,0
+1
+6d,0
+1
+58,0
+1
+26,0
+5,1
+4,0
+3,1
+1b,0
+1
+1f,0
+1
+17,0
+4,1
+3e,0
+1
+9,0
+1
+15,0
+1
+17,0
+1
+15,0
+1
+1f,0
+1
+2f,0
+1
+32,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+4f,0
+1
+1d,0
+1
+59,0
+1
+9,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+1d,0
+3,1
+5,0
+3,1
+1d,0
+1
+13,0
+1
+24,0
+3,1
+73,0
+1
+2c,0
+1
+82,0
+1
+1b,0
+1
+64,0
+1
+32,0
+1
+11,0
+1
+1f,0
+1
+12,0
+1
+13,0
+1
+1b,0
+1
+33,0
+1
+1e,0
+1
+33,0
+1
+f,0
+1
+15,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+30,0
+1
+33,0
+1
+e,0
+1
+15,0
+1
+18,0
+1
+25,0
+1
+e,0
+1
+20,0
+2,1
+58,0
+1
+16,0
+1
+27,0
+1
+2f,0
+2,1
+57,0
+2,1
+a,0
+1
+a,0
+1
+27,0
+1
+b,0
+1
+25,0
+1
+31,0
+1
+6f,0
+1
+1a,0
+1
+14,0
+1
+27,0
+1
+a,0
+1
+1b,0
+1
+3b,0
+1
+b,0
+1
+1c,0
+1
+14,0
+1
+30,0
+1
+1d,0
+1
+79,0
+1
+23,0
+1
+a,0
+1
+57,0
+1
+2c,0
+1
+15,0
+1
+2b,0
+1
+56,0
+1
+b,0
+1
+24,0
+1
+15,0
+1
+1b,0
+1
+6e,0
+2,1
+26,0
+2,1
+16,0
+3,1
+11,0
+3,1
+5e,0
+3,1
+e,0
+2,1
+2a,0
+2,1
+1a,0
+6,1
+15,0
+2,1
+2c,0
+2,1
+96,0
+2,1
+31,0
+1
+2f,0
+1
+61,0
+2,1
+36,0
+2,1
+65,0
+1
+25,0
+2,1
+60,0
+1
+aa,0
+2,1
+16,0
+3,1
+4b,0
+4,1
+d,0
+4,1
+53,0
+c,1
+1c1,0
+100 90 32
+21c,0
+c,1
+53,0
+2,1
+0
+1
+d,0
+4,1
+4e,0
+1
+17,0
+2,1
+46,0
+2,1
+1d,0
+1
+41,0
+2,1
+60,0
+2,1
+8b,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+34,0
+1
+2f,0
+1
+31,0
+2,1
+13,0
+4,1
+5c,0
+4,1
+1f,0
+2,1
+2c,0
+2,1
+f,0
+2,1
+9,0
+6,1
+15,0
+2,1
+2a,0
+2,1
+d,0
+3,1
+12,0
+4,1
+3b,0
+2,1
+29,0
+1
+f,0
+2,1
+26,0
+2,1
+6f,0
+1
+30,0
+1
+24,0
+1
+b,0
+2,1
+24,0
+1
+65,0
+1
+c,0
+1
+20,0
+1
+b,0
+2,1
+29,0
+1
+c,0
+1
+2a,0
+2,1
+11,0
+1
+19,0
+2,1
+29,0
+1
+39,0
+2,1
+28,0
+1
+45,0
+1
+27,0
+1
+58,0
+1
+a,0
+1
+3c,0
+1
+64,0
+1
+19,0
+1
+a,0
+1
+62,0
+1
+58,0
+1
+4b,0
+1
+21,0
+1
+59,0
+1
+9,0
+1
+41,0
+1
+3c,0
+a,1
+3e,0
+1
+17,0
+4,1
+e,0
+3,1
+17,0
+1
+15,0
+1
+1e,0
+3,1
+15,0
+3,1
+14,0
+1
+1f,0
+1
+13,0
+2,1
+1a,0
+1
+13,0
+1
+14,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+27,0
+1
+9,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+13,0
+1
+6d,0
+1
+45,0
+1
+13,0
+1
+2d,0
+4,1
+3c,0
+1
+1a,0
+3,1
+b,0
+2,1
+1b,0
+1
+13,0
+1
+23,0
+1
+49,0
+1
+16,0
+2,1
+15,0
+2,1
+16,0
+1
+13,0
+1
+9,0
+1
+14,0
+2,1
+19,0
+1
+15,0
+1
+31,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+a,0
+1
+11,0
+1
+1f,0
+1
+26,0
+1
+a,0
+1
+44,0
+1
+14,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+25,0
+1
+3d,0
+1
+3e,0
+1
+4a,0
+1
+a,0
+1
+59,0
+1
+9,0
+2,1
+33,0
+1
+c,0
+1
+22,0
+1
+33,0
+1
+2f,0
+2,1
+3f,0
+1
+17,0
+2,1
+15,0
+1
+27,0
+1
+b,0
+2,1
+24,0
+1
+31,0
+1
+b,0
+1
+19,0
+1
+15,0
+1
+33,0
+1
+57,0
+1
+26,0
+1
+15,0
+1
+25,0
+1
+b,0
+1
+57,0
+1
+3e,0
+1
+2f,0
+1
+57,0
+1
+2a,0
+1
+15,0
+1
+21,0
+1
+b,0
+1
+56,0
+1
+2e,0
+1
+15,0
+1
+1d,0
+1
+30,0
+1
+15,0
+2,1
+19,0
+1
+c,0
+1
+54,0
+1
+d,0
+1
+27,0
+2,1
+16,0
+3,1
+11,0
+2,1
+37,0
+2,1
+18,0
+1
+f,0
+1
+e,0
+2,1
+46,0
+4,1
+5,0
+2,1
+10,0
+1
+2d,0
+2,1
+96,0
+2,1
+96,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+60,0
+2,1
+3d,0
+2,1
+21,0
+2,1
+5f,0
+3,1
+45,0
+4,1
+15,0
+4,1
+4b,0
+4,1
+d,0
+2,1
+55,0
+2,1
+2,0
+6,1
+1c3,0
+100 90 32
+21e,0
+3,1
+0
+1
+0
+1
+0
+1
+54,0
+4,1
+d,0
+4,1
+4b,0
+2,1
+17,0
+1
+66,0
+3,1
+41,0
+2,1
+21,0
+1
+3e,0
+2,1
+25,0
+2,1
+39,0
+2,1
+8e,0
+2,1
+96,0
+2,1
+15,0
+2,1
+1a,0
+1
+43,0
+2,1
+4e,0
+1
+e,0
+3,1
+a,0
+1
+0
+1
+0
+1
+15,0
+1
+2b,0
+1
+e,0
+3,1
+12,0
+4,1
+4a,0
+2,1
+18,0
+1
+11,0
+2,1
+26,0
+2,1
+2a,0
+3,1
+35,0
+1
+c,0
+1
+21,0
+2,1
+d,0
+1
+30,0
+2,1
+24,0
+1
+d,0
+1
+22,0
+1
+b,0
+2,1
+26,0
+1
+2e,0
+1
+c,0
+1
+29,0
+1
+b,0
+2,1
+3b,0
+3,1
+25,0
+1
+1e,0
+1
+b,0
+1
+2d,0
+1
+8c,0
+1
+a,0
+1
+3c,0
+1
+1b,0
+1
+47,0
+1
+1a,0
+1
+6d,0
+2,1
+3e,0
+1
+18,0
+2,1
+49,0
+2,1
+17,0
+1
+9,0
+2,1
+a4,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+16,0
+1
+9,0
+1
+23,0
+5,1
+1b,0
+1
+39,0
+2,1
+d,0
+4,1
+17,0
+1
+15,0
+1
+9,0
+1
+15,0
+2,1
+16,0
+2,1
+2a,0
+1
+1d,0
+1
+2f,0
+1
+14,0
+1
+9,0
+1
+13,0
+1
+31,0
+1
+13,0
+1
+6d,0
+1
+45,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+1d,0
+9,1
+1f,0
+1
+38,0
+3,1
+b,0
+3,1
+2e,0
+1
+9,0
+1
+17,0
+3,1
+12,0
+2,1
+17,0
+1
+4b,0
+1
+17,0
+1
+13,0
+1
+9,0
+1
+2f,0
+2,1
+28,0
+1
+1d,0
+1
+45,0
+1
+a,0
+1
+11,0
+1
+32,0
+1
+13,0
+1
+6e,0
+1
+33,0
+1
+f,0
+1
+15,0
+1
+19,0
+1
+33,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+63,0
+1
+e,0
+1
+16,0
+1
+9,0
+2,1
+b,0
+1
+34,0
+1
+17,0
+1
+16,0
+1
+57,0
+2,1
+32,0
+1
+c,0
+1
+17,0
+1
+16,0
+1
+4d,0
+1
+b,0
+1
+9,0
+1
+27,0
+1
+b,0
+1
+19,0
+1
+15,0
+1
+33,0
+1
+2f,0
+1
+27,0
+1
+26,0
+1
+3b,0
+1
+b,0
+1
+1c,0
+1
+14,0
+1
+25,0
+1
+a,0
+1
+33,0
+1
+23,0
+1
+b,0
+1
+1e,0
+1
+63,0
+1
+15,0
+1
+21,0
+1
+a,0
+2,1
+20,0
+1
+41,0
+1
+22,0
+1
+15,0
+1
+4e,0
+1
+30,0
+2,1
+b,0
+1
+63,0
+1
+26,0
+2,1
+16,0
+2,1
+12,0
+3,1
+5e,0
+1
+10,0
+2,1
+2a,0
+2,1
+1a,0
+6,1
+15,0
+2,1
+61,0
+2,1
+2e,0
+2,1
+31,0
+2,1
+31,0
+1
+2f,0
+1
+61,0
+2,1
+9d,0
+1
+65,0
+1
+21,0
+2,1
+41,0
+3,1
+1b,0
+2,1
+46,0
+4,1
+15,0
+4,1
+5c,0
+4,1
+53,0
+c,1
+1c1,0
+100 90 32
+21d,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+54,0
+4,1
+d,0
+1
+0
+2,1
+4b,0
+1
+0
+1
+16,0
+3,1
+46,0
+1
+0
+1
+1c,0
+1
+65,0
+1
+3e,0
+1
+61,0
+1
+62,0
+1
+92,0
+1
+46,0
+2,1
+1d,0
+1
+2e,0
+2,1
+10,0
+4,1
+5d,0
+3,1
+9,0
+6,1
+15,0
+2,1
+2a,0
+2,1
+d,0
+3,1
+11,0
+5,1
+11,0
+2,1
+29,0
+1
+27,0
+3,1
+f,0
+2,1
+26,0
+2,1
+c,0
+2,1
+1d,0
+2,1
+42,0
+1
+21,0
+2,1
+d,0
+1
+64,0
+1
+2f,0
+1
+55,0
+1
+b,0
+1
+36,0
+1
+2b,0
+1
+12,0
+1
+19,0
+1
+b,0
+1
+1e,0
+1
+b,0
+1
+2e,0
+1
+28,0
+1
+3a,0
+1
+32,0
+1
+3c,0
+1
+63,0
+1
+64,0
+1
+23,0
+2,1
+3e,0
+1
+23,0
+1
+62,0
+2,1
+58,0
+1
+4b,0
+1
+21,0
+1
+58,0
+1
+9,0
+1
+1b,0
+b,1
+1d,0
+1
+15,0
+1
+9,0
+1
+17,0
+4,1
+d,0
+4,1
+17,0
+1
+1f,0
+1
+14,0
+3,1
+42,0
+1
+38,0
+2,1
+13,0
+1
+14,0
+1
+1d,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+9,0
+1
+c7,0
+1
+59,0
+1
+63,0
+1
+27,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+2,1
+31,0
+1
+25,0
+2,1
+b,0
+3,1
+1a,0
+1
+13,0
+1
+21,0
+1
+0
+1
+12,0
+1
+2c,0
+1
+20,0
+1
+17,0
+1
+34,0
+1
+2f,0
+1
+47,0
+1
+45,0
+1
+a,0
+1
+11,0
+1
+46,0
+1
+a,0
+1
+a7,0
+1
+1f,0
+1
+59,0
+1
+18,0
+1
+25,0
+1
+e,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+20,0
+2,1
+58,0
+1
+16,0
+1
+34,0
+1
+17,0
+1
+a,0
+2,1
+32,0
+1
+c,0
+1
+23,0
+1
+64,0
+1
+9,0
+1
+27,0
+1
+b,0
+1
+2f,0
+1
+27,0
+1
+b,0
+1
+62,0
+1
+31,0
+1
+25,0
+1
+b,0
+1
+1c,0
+1
+14,0
+1
+25,0
+1
+28,0
+1
+a8,0
+1
+1f,0
+1
+42,0
+1
+9c,0
+1
+29,0
+1
+3a,0
+2,1
+26,0
+1
+25,0
+2,1
+64,0
+1
+16,0
+1
+22,0
+2,1
+28,0
+1
+19,0
+3,1
+d,0
+1
+e,0
+1
+2b,0
+2,1
+1a,0
+b,1
+10,0
+2,1
+2c,0
+2,1
+97,0
+1
+61,0
+1
+34,0
+1
+64,0
+1
+65,0
+1
+88,0
+1
+42,0
+1
+0
+1
+1c,0
+1
+46,0
+1
+0
+1
+16,0
+3,1
+4c,0
+4,1
+d,0
+1
+0
+2,1
+55,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+1c1,0
+100 90 32
+21d,0
+5,1
+2,0
+2,1
+55,0
+1
+10,0
+3,1
+ae,0
+3,1
+1b,0
+2,1
+42,0
+2,1
+21,0
+2,1
+3d,0
+2,1
+25,0
+1
+65,0
+1
+37,0
+2,1
+2b,0
+2,1
+34,0
+1
+61,0
+1
+15,0
+3,1
+4b,0
+1
+10,0
+1
+0
+1
+4f,0
+1
+10,0
+1
+b,0
+1
+0
+1
+17,0
+1
+2a,0
+1
+f,0
+1
+12,0
+1
+2,0
+1
+12,0
+1
+29,0
+2,1
+d,0
+2,1
+18,0
+1
+0
+1
+f,0
+2,1
+34,0
+1
+1d,0
+1
+0
+1
+e,0
+1
+55,0
+2,1
+95,0
+1
+b,0
+2,1
+26,0
+1
+2e,0
+1
+b,0
+2,1
+29,0
+1
+b,0
+2,1
+1f,0
+1
+a,0
+2,1
+11,0
+1
+19,0
+2,1
+a,0
+1
+c8,0
+1
+1c,0
+1
+a,0
+1
+58,0
+1
+a,0
+1
+3c,0
+1
+64,0
+1
+19,0
+1
+62,0
+1
+a,0
+1
+3f,0
+2,1
+17,0
+1
+a,0
+1
+40,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+21,0
+1
+58,0
+1
+9,0
+1
+1b,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+31,0
+1
+9,0
+1
+18,0
+3,1
+e,0
+1
+0
+1
+2d,0
+1
+9,0
+1
+14,0
+1
+0
+1
+15,0
+3,1
+2a,0
+1
+9,0
+1
+14,0
+1
+19,0
+2,1
+28,0
+1
+1d,0
+1
+31,0
+1
+77,0
+1
+63,0
+1
+4f,0
+1
+13,0
+1
+6d,0
+1
+1e,0
+2,1
+3,0
+4,1
+1e,0
+1
+13,0
+1
+24,0
+3,1
+46,0
+1
+17,0
+3,1
+11,0
+2,1
+18,0
+1
+13,0
+1
+9,0
+1
+16,0
+2,1
+15,0
+2,1
+16,0
+1
+13,0
+1
+39,0
+2,1
+32,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+a,0
+1
+11,0
+1
+46,0
+1
+4f,0
+1
+14,0
+1
+b1,0
+1
+15,0
+1
+63,0
+1
+64,0
+1
+9,0
+2,1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+1
+b,0
+1
+27,0
+1
+c,0
+1
+22,0
+1
+b,0
+1
+27,0
+1
+25,0
+1
+a,0
+1
+a2,0
+1
+19,0
+1
+15,0
+1
+33,0
+1
+2f,0
+1
+32,0
+1
+1b,0
+1
+aa,0
+1
+1d,0
+1
+15,0
+1
+23,0
+1
+2a,0
+1
+14,0
+1
+23,0
+1
+a,0
+1
+63,0
+1
+20,0
+1
+15,0
+1
+1f,0
+1
+b,0
+1
+22,0
+1
+15,0
+1
+65,0
+1
+19,0
+2,1
+49,0
+1
+16,0
+2,1
+d,0
+1
+3f,0
+1
+12,0
+1
+e,0
+1
+29,0
+1
+19,0
+3,1
+b,0
+1
+0
+1
+e,0
+1
+2c,0
+1
+1a,0
+1
+0
+1
+0
+1
+0
+1
+2,0
+1
+12,0
+1
+2c,0
+1
+34,0
+2,1
+2f,0
+1
+31,0
+1
+c4,0
+1
+37,0
+2,1
+2a,0
+1
+39,0
+2,1
+25,0
+2,1
+60,0
+2,1
+5f,0
+1
+af,0
+4,1
+d,0
+4,1
+53,0
+d,1
+1c0,0
+100 90 32
+21e,0
+5,1
+58,0
+4,1
+d,0
+4,1
+4b,0
+4,1
+15,0
+4,1
+65,0
+1
+42,0
+1
+60,0
+2,1
+25,0
+2,1
+39,0
+2,1
+29,0
+2,1
+37,0
+1
+2c,0
+1
+96,0
+1
+14,0
+1
+2,0
+1
+1b,0
+1
+2f,0
+1
+10,0
+1
+0
+1
+20,0
+1
+2d,0
+2,1
+e,0
+3,1
+9,0
+2,1
+0
+1
+0
+1
+15,0
+2,1
+2b,0
+1
+d,0
+1
+0
+1
+12,0
+1
+2,0
+1
+12,0
+1
+38,0
+1
+19,0
+1
+10,0
+1
+35,0
+1
+1d,0
+1
+0
+1
+e,0
+1
+33,0
+1
+21,0
+2,1
+3e,0
+2,1
+24,0
+1
+30,0
+1
+b,0
+2,1
+26,0
+2,1
+64,0
+1
+b,0
+2,1
+2b,0
+1
+56,0
+1
+b,0
+1
+2d,0
+2,1
+a,0
+1
+1d,0
+1
+a,0
+1
+2f,0
+1
+a,0
+1
+64,0
+1
+1b,0
+1
+62,0
+1
+a,0
+1
+3e,0
+1
+19,0
+1
+a,0
+1
+3e,0
+1
+18,0
+2,1
+9,0
+1
+3f,0
+2,1
+22,0
+1
+58,0
+1
+9,0
+1
+41,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+16,0
+1
+9,0
+1
+1b,0
+3,1
+0
+1
+0
+7,1
+1b,0
+1
+15,0
+1
+21,0
+1
+0
+2,1
+d,0
+1
+0
+1
+18,0
+1
+15,0
+1
+1f,0
+1
+17,0
+2,1
+49,0
+1
+43,0
+1
+3b,0
+1
+27,0
+1
+4f,0
+1
+13,0
+1
+6d,0
+1
+45,0
+1
+13,0
+1
+6d,0
+1
+1e,0
+a,1
+1d,0
+1
+13,0
+1
+9,0
+1
+1a,0
+3,1
+b,0
+3,1
+1a,0
+1
+13,0
+1
+37,0
+1
+35,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+14,0
+1
+1a,0
+2,1
+28,0
+1
+3b,0
+1
+13,0
+1
+13,0
+1
+b3,0
+1
+14,0
+1
+63,0
+1
+4d,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+16,0
+1
+9,0
+1
+41,0
+1
+22,0
+1
+b,0
+1
+27,0
+1
+24,0
+1
+a,0
+1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+2,1
+a,0
+1
+3e,0
+2,1
+18,0
+1
+b,0
+1
+9,0
+1
+33,0
+1
+c6,0
+1
+1b,0
+1
+15,0
+1
+25,0
+1
+28,0
+1
+14,0
+1
+25,0
+1
+a,0
+1
+63,0
+1
+33,0
+1
+2e,0
+1
+1f,0
+2,1
+14,0
+1
+4e,0
+1
+35,0
+1
+b,0
+1
+22,0
+1
+33,0
+1
+b,0
+1
+3b,0
+1
+4c,0
+1
+17,0
+1
+17,0
+1
+d,0
+1
+3f,0
+1
+12,0
+1
+0
+1
+c,0
+1
+29,0
+2,1
+18,0
+3,1
+b,0
+2,1
+f,0
+2,1
+2a,0
+1
+1b,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+3f,0
+1
+33,0
+1
+30,0
+1
+31,0
+1
+97,0
+2,1
+2b,0
+1
+37,0
+2,1
+ca,0
+1
+22,0
+2,1
+41,0
+3,1
+1b,0
+3,1
+45,0
+4,1
+15,0
+4,1
+b4,0
+2,1
+5,0
+2,1
+2,0
+1
+1c0,0
+100 90 32
+21c,0
+c,1
+53,0
+2,1
+0
+1
+d,0
+4,1
+4e,0
+1
+17,0
+2,1
+46,0
+2,1
+1d,0
+1
+41,0
+2,1
+60,0
+2,1
+8b,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+34,0
+1
+2f,0
+1
+31,0
+2,1
+13,0
+4,1
+5c,0
+4,1
+1f,0
+2,1
+2c,0
+2,1
+f,0
+2,1
+9,0
+6,1
+15,0
+2,1
+2a,0
+2,1
+d,0
+3,1
+12,0
+4,1
+3b,0
+2,1
+29,0
+1
+f,0
+2,1
+26,0
+2,1
+6f,0
+1
+30,0
+1
+24,0
+1
+b,0
+2,1
+24,0
+1
+65,0
+1
+c,0
+1
+20,0
+1
+b,0
+2,1
+29,0
+1
+c,0
+1
+2a,0
+2,1
+11,0
+1
+19,0
+2,1
+29,0
+1
+39,0
+2,1
+28,0
+1
+45,0
+1
+27,0
+1
+58,0
+1
+a,0
+1
+3c,0
+1
+64,0
+1
+19,0
+1
+a,0
+1
+62,0
+1
+58,0
+1
+4b,0
+1
+21,0
+1
+59,0
+1
+9,0
+1
+41,0
+1
+3c,0
+a,1
+3e,0
+1
+17,0
+4,1
+e,0
+3,1
+17,0
+1
+15,0
+1
+1e,0
+3,1
+15,0
+3,1
+14,0
+1
+1f,0
+1
+13,0
+2,1
+1a,0
+1
+13,0
+1
+14,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+27,0
+1
+9,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+13,0
+1
+6d,0
+1
+45,0
+1
+13,0
+1
+2d,0
+4,1
+3c,0
+1
+1a,0
+3,1
+b,0
+2,1
+1b,0
+1
+13,0
+1
+23,0
+1
+49,0
+1
+16,0
+2,1
+15,0
+2,1
+16,0
+1
+13,0
+1
+9,0
+1
+14,0
+2,1
+19,0
+1
+15,0
+1
+31,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+a,0
+1
+11,0
+1
+1f,0
+1
+26,0
+1
+a,0
+1
+44,0
+1
+14,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+25,0
+1
+3d,0
+1
+3e,0
+1
+4a,0
+1
+a,0
+1
+59,0
+1
+9,0
+2,1
+33,0
+1
+c,0
+1
+22,0
+1
+33,0
+1
+2f,0
+2,1
+3f,0
+1
+17,0
+2,1
+15,0
+1
+27,0
+1
+b,0
+2,1
+24,0
+1
+31,0
+1
+b,0
+1
+19,0
+1
+15,0
+1
+33,0
+1
+57,0
+1
+26,0
+1
+15,0
+1
+25,0
+1
+b,0
+1
+57,0
+1
+3e,0
+1
+2f,0
+1
+57,0
+1
+2a,0
+1
+15,0
+1
+21,0
+1
+b,0
+1
+56,0
+1
+2e,0
+1
+15,0
+1
+1d,0
+1
+30,0
+1
+15,0
+2,1
+19,0
+1
+c,0
+1
+54,0
+1
+d,0
+1
+27,0
+2,1
+16,0
+3,1
+11,0
+2,1
+37,0
+2,1
+18,0
+1
+f,0
+1
+e,0
+2,1
+46,0
+4,1
+5,0
+2,1
+10,0
+1
+2d,0
+2,1
+96,0
+2,1
+96,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+60,0
+2,1
+3d,0
+2,1
+21,0
+2,1
+5f,0
+3,1
+45,0
+4,1
+15,0
+4,1
+4b,0
+4,1
+d,0
+2,1
+55,0
+2,1
+2,0
+6,1
+1c3,0
+100 90 32
+21e,0
+3,1
+0
+1
+0
+1
+0
+1
+54,0
+4,1
+d,0
+4,1
+4b,0
+2,1
+17,0
+1
+66,0
+3,1
+41,0
+2,1
+21,0
+1
+3e,0
+2,1
+25,0
+2,1
+39,0
+2,1
+8e,0
+2,1
+96,0
+2,1
+15,0
+2,1
+1a,0
+1
+43,0
+2,1
+4e,0
+1
+e,0
+3,1
+a,0
+1
+0
+1
+0
+1
+15,0
+1
+2b,0
+1
+e,0
+3,1
+12,0
+4,1
+4a,0
+2,1
+18,0
+1
+11,0
+2,1
+26,0
+2,1
+2a,0
+3,1
+35,0
+1
+c,0
+1
+21,0
+2,1
+d,0
+1
+30,0
+2,1
+24,0
+1
+d,0
+1
+22,0
+1
+b,0
+2,1
+26,0
+1
+2e,0
+1
+c,0
+1
+29,0
+1
+b,0
+2,1
+3b,0
+3,1
+25,0
+1
+1e,0
+1
+b,0
+1
+2d,0
+1
+8c,0
+1
+a,0
+1
+3c,0
+1
+1b,0
+1
+47,0
+1
+1a,0
+1
+6d,0
+2,1
+3e,0
+1
+18,0
+2,1
+49,0
+2,1
+17,0
+1
+9,0
+2,1
+a4,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+16,0
+1
+9,0
+1
+23,0
+5,1
+1b,0
+1
+39,0
+2,1
+d,0
+4,1
+17,0
+1
+15,0
+1
+9,0
+1
+15,0
+2,1
+16,0
+2,1
+2a,0
+1
+1d,0
+1
+2f,0
+1
+14,0
+1
+9,0
+1
+13,0
+1
+31,0
+1
+13,0
+1
+6d,0
+1
+45,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+1d,0
+9,1
+1f,0
+1
+38,0
+3,1
+b,0
+3,1
+2e,0
+1
+9,0
+1
+17,0
+3,1
+12,0
+2,1
+17,0
+1
+4b,0
+1
+17,0
+1
+13,0
+1
+9,0
+1
+2f,0
+2,1
+28,0
+1
+1d,0
+1
+45,0
+1
+a,0
+1
+11,0
+1
+32,0
+1
+13,0
+1
+6e,0
+1
+33,0
+1
+f,0
+1
+15,0
+1
+19,0
+1
+33,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+63,0
+1
+e,0
+1
+16,0
+1
+9,0
+2,1
+b,0
+1
+34,0
+1
+17,0
+1
+16,0
+1
+57,0
+2,1
+32,0
+1
+c,0
+1
+17,0
+1
+16,0
+1
+4d,0
+1
+b,0
+1
+9,0
+1
+27,0
+1
+b,0
+1
+19,0
+1
+15,0
+1
+33,0
+1
+2f,0
+1
+27,0
+1
+26,0
+1
+3b,0
+1
+b,0
+1
+1c,0
+1
+14,0
+1
+25,0
+1
+a,0
+1
+33,0
+1
+23,0
+1
+b,0
+1
+1e,0
+1
+63,0
+1
+15,0
+1
+21,0
+1
+a,0
+2,1
+20,0
+1
+41,0
+1
+22,0
+1
+15,0
+1
+4e,0
+1
+30,0
+2,1
+b,0
+1
+63,0
+1
+26,0
+2,1
+16,0
+2,1
+12,0
+3,1
+5e,0
+1
+10,0
+2,1
+2a,0
+2,1
+1a,0
+6,1
+15,0
+2,1
+61,0
+2,1
+2e,0
+2,1
+31,0
+2,1
+31,0
+1
+2f,0
+1
+61,0
+2,1
+9d,0
+1
+65,0
+1
+21,0
+2,1
+41,0
+3,1
+1b,0
+2,1
+46,0
+4,1
+15,0
+4,1
+5c,0
+4,1
+53,0
+c,1
+1c1,0
+100 90 32
+21d,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+54,0
+4,1
+d,0
+1
+0
+2,1
+4b,0
+1
+0
+1
+16,0
+3,1
+46,0
+1
+0
+1
+1c,0
+1
+65,0
+1
+3e,0
+1
+61,0
+1
+62,0
+1
+92,0
+1
+46,0
+2,1
+1d,0
+1
+2e,0
+2,1
+10,0
+4,1
+5d,0
+3,1
+9,0
+6,1
+15,0
+2,1
+2a,0
+2,1
+d,0
+3,1
+11,0
+5,1
+11,0
+2,1
+29,0
+1
+27,0
+3,1
+f,0
+2,1
+26,0
+2,1
+c,0
+2,1
+1d,0
+2,1
+42,0
+1
+21,0
+2,1
+d,0
+1
+64,0
+1
+2f,0
+1
+55,0
+1
+b,0
+1
+36,0
+1
+2b,0
+1
+12,0
+1
+19,0
+1
+b,0
+1
+1e,0
+1
+b,0
+1
+2e,0
+1
+28,0
+1
+3a,0
+1
+32,0
+1
+3c,0
+1
+63,0
+1
+64,0
+1
+23,0
+2,1
+3e,0
+1
+23,0
+1
+62,0
+2,1
+58,0
+1
+4b,0
+1
+21,0
+1
+58,0
+1
+9,0
+1
+1b,0
+b,1
+1d,0
+1
+15,0
+1
+9,0
+1
+17,0
+4,1
+d,0
+4,1
+17,0
+1
+1f,0
+1
+14,0
+3,1
+42,0
+1
+38,0
+2,1
+13,0
+1
+14,0
+1
+1d,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+9,0
+1
+c7,0
+1
+59,0
+1
+63,0
+1
+27,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+2,1
+31,0
+1
+25,0
+2,1
+b,0
+3,1
+1a,0
+1
+13,0
+1
+21,0
+1
+0
+1
+12,0
+1
+2c,0
+1
+20,0
+1
+17,0
+1
+34,0
+1
+2f,0
+1
+47,0
+1
+45,0
+1
+a,0
+1
+11,0
+1
+46,0
+1
+a,0
+1
+a7,0
+1
+1f,0
+1
+59,0
+1
+18,0
+1
+25,0
+1
+e,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+20,0
+2,1
+58,0
+1
+16,0
+1
+34,0
+1
+17,0
+1
+a,0
+2,1
+32,0
+1
+c,0
+1
+23,0
+1
+64,0
+1
+9,0
+1
+27,0
+1
+b,0
+1
+2f,0
+1
+27,0
+1
+b,0
+1
+62,0
+1
+31,0
+1
+25,0
+1
+b,0
+1
+1c,0
+1
+14,0
+1
+25,0
+1
+28,0
+1
+a8,0
+1
+1f,0
+1
+42,0
+1
+9c,0
+1
+29,0
+1
+3a,0
+2,1
+26,0
+1
+25,0
+2,1
+64,0
+1
+16,0
+1
+22,0
+2,1
+28,0
+1
+19,0
+3,1
+d,0
+1
+e,0
+1
+2b,0
+2,1
+1a,0
+b,1
+10,0
+2,1
+2c,0
+2,1
+97,0
+1
+61,0
+1
+34,0
+1
+64,0
+1
+65,0
+1
+88,0
+1
+42,0
+1
+0
+1
+1c,0
+1
+46,0
+1
+0
+1
+16,0
+3,1
+4c,0
+4,1
+d,0
+1
+0
+2,1
+55,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+1c1,0
+100 90 32
+21d,0
+5,1
+2,0
+2,1
+55,0
+1
+10,0
+3,1
+ae,0
+3,1
+1b,0
+2,1
+42,0
+2,1
+21,0
+2,1
+3d,0
+2,1
+25,0
+1
+65,0
+1
+37,0
+2,1
+2b,0
+2,1
+34,0
+1
+61,0
+1
+15,0
+3,1
+4b,0
+1
+10,0
+1
+0
+1
+4f,0
+1
+10,0
+1
+b,0
+1
+0
+1
+17,0
+1
+2a,0
+1
+f,0
+1
+12,0
+1
+2,0
+1
+12,0
+1
+29,0
+2,1
+d,0
+2,1
+18,0
+1
+0
+1
+f,0
+2,1
+34,0
+1
+1d,0
+1
+0
+1
+e,0
+1
+55,0
+2,1
+95,0
+1
+b,0
+2,1
+26,0
+1
+2e,0
+1
+b,0
+2,1
+29,0
+1
+b,0
+2,1
+1f,0
+1
+a,0
+2,1
+11,0
+1
+19,0
+2,1
+a,0
+1
+c8,0
+1
+1c,0
+1
+a,0
+1
+58,0
+1
+a,0
+1
+3c,0
+1
+64,0
+1
+19,0
+1
+62,0
+1
+a,0
+1
+3f,0
+2,1
+17,0
+1
+a,0
+1
+40,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+21,0
+1
+58,0
+1
+9,0
+1
+1b,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+31,0
+1
+9,0
+1
+18,0
+3,1
+e,0
+1
+0
+1
+2d,0
+1
+9,0
+1
+14,0
+1
+0
+1
+15,0
+3,1
+2a,0
+1
+9,0
+1
+14,0
+1
+19,0
+2,1
+28,0
+1
+1d,0
+1
+31,0
+1
+77,0
+1
+63,0
+1
+4f,0
+1
+13,0
+1
+6d,0
+1
+1e,0
+2,1
+3,0
+4,1
+1e,0
+1
+13,0
+1
+24,0
+3,1
+46,0
+1
+17,0
+3,1
+11,0
+2,1
+18,0
+1
+13,0
+1
+9,0
+1
+16,0
+2,1
+15,0
+2,1
+16,0
+1
+13,0
+1
+39,0
+2,1
+32,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+a,0
+1
+11,0
+1
+46,0
+1
+4f,0
+1
+14,0
+1
+b1,0
+1
+15,0
+1
+63,0
+1
+64,0
+1
+9,0
+2,1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+1
+b,0
+1
+27,0
+1
+c,0
+1
+22,0
+1
+b,0
+1
+27,0
+1
+25,0
+1
+a,0
+1
+a2,0
+1
+19,0
+1
+15,0
+1
+33,0
+1
+2f,0
+1
+32,0
+1
+1b,0
+1
+aa,0
+1
+1d,0
+1
+15,0
+1
+23,0
+1
+2a,0
+1
+14,0
+1
+23,0
+1
+a,0
+1
+63,0
+1
+20,0
+1
+15,0
+1
+1f,0
+1
+b,0
+1
+22,0
+1
+15,0
+1
+65,0
+1
+19,0
+2,1
+49,0
+1
+16,0
+2,1
+d,0
+1
+3f,0
+1
+12,0
+1
+e,0
+1
+29,0
+1
+19,0
+3,1
+b,0
+1
+0
+1
+e,0
+1
+2c,0
+1
+1a,0
+1
+0
+1
+0
+1
+0
+1
+2,0
+1
+12,0
+1
+2c,0
+1
+34,0
+2,1
+2f,0
+1
+31,0
+1
+c4,0
+1
+37,0
+2,1
+2a,0
+1
+39,0
+2,1
+25,0
+2,1
+60,0
+2,1
+5f,0
+1
+af,0
+4,1
+d,0
+4,1
+53,0
+d,1
+1c0,0
+100 90 32
+21e,0
+5,1
+58,0
+4,1
+d,0
+4,1
+4b,0
+4,1
+15,0
+4,1
+65,0
+1
+42,0
+1
+60,0
+2,1
+25,0
+2,1
+39,0
+2,1
+29,0
+2,1
+37,0
+1
+2c,0
+1
+96,0
+1
+14,0
+1
+2,0
+1
+1b,0
+1
+2f,0
+1
+10,0
+1
+0
+1
+20,0
+1
+2d,0
+2,1
+e,0
+3,1
+9,0
+2,1
+0
+1
+0
+1
+15,0
+2,1
+2b,0
+1
+d,0
+1
+0
+1
+12,0
+1
+2,0
+1
+12,0
+1
+38,0
+1
+19,0
+1
+10,0
+1
+35,0
+1
+1d,0
+1
+0
+1
+e,0
+1
+33,0
+1
+21,0
+2,1
+3e,0
+2,1
+24,0
+1
+30,0
+1
+b,0
+2,1
+26,0
+2,1
+64,0
+1
+b,0
+2,1
+2b,0
+1
+56,0
+1
+b,0
+1
+2d,0
+2,1
+a,0
+1
+1d,0
+1
+a,0
+1
+2f,0
+1
+a,0
+1
+64,0
+1
+1b,0
+1
+62,0
+1
+a,0
+1
+3e,0
+1
+19,0
+1
+a,0
+1
+3e,0
+1
+18,0
+2,1
+9,0
+1
+3f,0
+2,1
+22,0
+1
+58,0
+1
+9,0
+1
+41,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+16,0
+1
+9,0
+1
+1b,0
+3,1
+0
+1
+0
+7,1
+1b,0
+1
+15,0
+1
+21,0
+1
+0
+2,1
+d,0
+1
+0
+1
+18,0
+1
+15,0
+1
+1f,0
+1
+17,0
+2,1
+49,0
+1
+43,0
+1
+3b,0
+1
+27,0
+1
+4f,0
+1
+13,0
+1
+6d,0
+1
+45,0
+1
+13,0
+1
+6d,0
+1
+1e,0
+a,1
+1d,0
+1
+13,0
+1
+9,0
+1
+1a,0
+3,1
+b,0
+3,1
+1a,0
+1
+13,0
+1
+37,0
+1
+35,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+14,0
+1
+1a,0
+2,1
+28,0
+1
+3b,0
+1
+13,0
+1
+13,0
+1
+b3,0
+1
+14,0
+1
+63,0
+1
+4d,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+16,0
+1
+9,0
+1
+41,0
+1
+22,0
+1
+b,0
+1
+27,0
+1
+24,0
+1
+a,0
+1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+2,1
+a,0
+1
+3e,0
+2,1
+18,0
+1
+b,0
+1
+9,0
+1
+33,0
+1
+c6,0
+1
+1b,0
+1
+15,0
+1
+25,0
+1
+28,0
+1
+14,0
+1
+25,0
+1
+a,0
+1
+63,0
+1
+33,0
+1
+2e,0
+1
+1f,0
+2,1
+14,0
+1
+4e,0
+1
+35,0
+1
+b,0
+1
+22,0
+1
+33,0
+1
+b,0
+1
+3b,0
+1
+4c,0
+1
+17,0
+1
+17,0
+1
+d,0
+1
+3f,0
+1
+12,0
+1
+0
+1
+c,0
+1
+29,0
+2,1
+18,0
+3,1
+b,0
+2,1
+f,0
+2,1
+2a,0
+1
+1b,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+3f,0
+1
+33,0
+1
+30,0
+1
+31,0
+1
+97,0
+2,1
+2b,0
+1
+37,0
+2,1
+ca,0
+1
+22,0
+2,1
+41,0
+3,1
+1b,0
+3,1
+45,0
+4,1
+15,0
+4,1
+b4,0
+2,1
+5,0
+2,1
+2,0
+1
+1c0,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a103.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a103.dat
new file mode 100644
index 000000000..d99d5b023
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a103.dat
@@ -0,0 +1,5441 @@
+! $XConsortium$
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+f,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+f,1
+be,0
+a,1
+be,0
+a,1
+28f,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+a,1
+37,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+a,1
+37,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+268,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+84d,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+11,1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+11,1
+be,0
+a,1
+357,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+12,0
+a,1
+37,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+12,0
+a,1
+37,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+1a2,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+401,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+0
+a,1
+2d,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+37f,0
+a,1
+5a,0
+a,1
+37,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+17,0
+a,1
+37,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+17,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+5f5,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+a2,0
+8,1
+0
+2,1
+11,0
+a,1
+3e,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+13d,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+591,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+c5,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+a1,0
+2,1
+8,0
+4,1
+f,0
+a,1
+3d,0
+2,1
+8,0
+4,1
+f,0
+a,1
+3d,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+f,0
+a,1
+3d,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+f,0
+a,1
+3d,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+f,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+52d,0
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5f,0
+b,1
+bd,0
+b,1
+28e,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+b,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+b,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+204,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+84c,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+12,1
+2c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+12,1
+2c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+60,0
+b,1
+356,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+12,0
+b,1
+36,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+12,0
+b,1
+36,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+13e,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+400,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+0
+b,1
+2c,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+31b,0
+b,1
+59,0
+b,1
+36,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+17,0
+b,1
+36,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+17,0
+b,1
+36,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+17,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+5f4,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+5f,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+a1,0
+8,1
+0
+2,1
+11,0
+b,1
+3d,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+d9,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+590,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+61,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+a0,0
+2,1
+8,0
+4,1
+f,0
+b,1
+3c,0
+2,1
+8,0
+4,1
+f,0
+b,1
+3c,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+f,0
+b,1
+3c,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+f,0
+b,1
+3c,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+f,0
+b,1
+3c,0
+2,1
+8,0
+4,1
+45b,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+52c,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+11,1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+11,1
+be,0
+a,1
+357,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+12,0
+a,1
+37,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+12,0
+a,1
+37,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+1a2,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+401,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+0
+a,1
+2d,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+37f,0
+a,1
+5a,0
+a,1
+37,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+17,0
+a,1
+37,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+17,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+5f5,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+a2,0
+8,1
+0
+2,1
+11,0
+a,1
+3e,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+13d,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+591,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+c5,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+a1,0
+2,1
+8,0
+4,1
+f,0
+a,1
+3d,0
+2,1
+8,0
+4,1
+f,0
+a,1
+3d,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+f,0
+a,1
+3d,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+f,0
+a,1
+3d,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+f,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+52d,0
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5f,0
+b,1
+bd,0
+b,1
+28e,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+b,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+b,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+204,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+84c,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+12,1
+2c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+12,1
+2c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+60,0
+b,1
+356,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+12,0
+b,1
+36,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+12,0
+b,1
+36,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+13e,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+400,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+0
+b,1
+2c,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+31b,0
+b,1
+59,0
+b,1
+36,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+17,0
+b,1
+36,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+17,0
+b,1
+36,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+17,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+5f4,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+5f,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+a1,0
+8,1
+0
+2,1
+11,0
+b,1
+3d,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+d9,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+590,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+61,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+a0,0
+2,1
+8,0
+4,1
+f,0
+b,1
+3c,0
+2,1
+8,0
+4,1
+f,0
+b,1
+3c,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+f,0
+b,1
+3c,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+f,0
+b,1
+3c,0
+2,1
+8,0
+4,1
+56,0
+2,1
+8,0
+4,1
+f,0
+b,1
+3c,0
+2,1
+8,0
+4,1
+45b,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+52c,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a104.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a104.dat
new file mode 100644
index 000000000..ebba8531c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a104.dat
@@ -0,0 +1,523 @@
+! $XConsortium$
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+c7,0
+1
+9f,0
+1
+5,0
+3,1
+9,0
+2,1
+1a4,0
+1
+63,0
+1
+63,0
+1
+3e7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+12b,0
+1
+63,0
+1
+531,0
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+3b,0
+1
+5,0
+3,1
+9,0
+2,1
+14,0
+1
+63,0
+1
+63,0
+1
+18f,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63f,0
+1
+c7,0
+1
+63,0
+1
+12b,0
+1
+63,0
+1
+63,0
+1
+469,0
+100 90 32
+7e4,0
+33,1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+3b,0
+14,1
+14,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+405,0
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+3b,0
+1
+5,0
+3,1
+9,0
+2,1
+14,0
+1
+63,0
+1
+63,0
+1
+18f,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63f,0
+1
+c7,0
+1
+63,0
+1
+12b,0
+1
+63,0
+1
+63,0
+1
+469,0
+100 90 32
+7e4,0
+33,1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+3b,0
+14,1
+14,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+405,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a105.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a105.dat
new file mode 100644
index 000000000..ccac4538c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a105.dat
@@ -0,0 +1,73 @@
+! $XConsortium$
+100 90 32
+7e4,0
+8,1
+8,0
+8,1
+8,0
+8,1
+8,0
+3,1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+383,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+3b,0
+8,1
+8,0
+4,1
+14,0
+1
+63,0
+1
+383,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+383,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+65d,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a12.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a12.dat
new file mode 100644
index 000000000..1ef7671bf
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a12.dat
@@ -0,0 +1,579 @@
+! $XConsortium$
+100 90 32
+21b,0
+d,1
+53,0
+4,1
+d,0
+4,1
+4b,0
+4,1
+15,0
+4,1
+45,0
+3,1
+1b,0
+3,1
+41,0
+2,1
+21,0
+2,1
+3d,0
+2,1
+25,0
+2,1
+39,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+34,0
+1
+2f,0
+1
+31,0
+2,1
+13,0
+4,1
+1a,0
+2,1
+2e,0
+2,1
+10,0
+4,1
+1f,0
+2,1
+2c,0
+2,1
+e,0
+3,1
+9,0
+6,1
+15,0
+2,1
+2a,0
+2,1
+d,0
+3,1
+11,0
+5,1
+11,0
+2,1
+28,0
+2,1
+d,0
+2,1
+18,0
+3,1
+f,0
+2,1
+26,0
+2,1
+c,0
+2,1
+1c,0
+3,1
+e,0
+2,1
+25,0
+1
+c,0
+1
+21,0
+2,1
+d,0
+1
+24,0
+1
+b,0
+2,1
+24,0
+1
+d,0
+1
+22,0
+1
+b,0
+2,1
+26,0
+2,1
+c,0
+1
+20,0
+2,1
+a,0
+2,1
+29,0
+1
+b,0
+2,1
+1f,0
+1
+a,0
+2,1
+f,0
+3,1
+19,0
+2,1
+a,0
+1
+1e,0
+1
+b,0
+1
+2d,0
+2,1
+a,0
+1
+1d,0
+1
+a,0
+1
+2f,0
+1
+a,0
+1
+1c,0
+1
+a,0
+1
+3c,0
+1
+1b,0
+1
+a,0
+1
+3c,0
+1
+1a,0
+1
+a,0
+1
+3e,0
+1
+19,0
+1
+9,0
+2,1
+3e,0
+1
+18,0
+2,1
+9,0
+1
+3f,0
+2,1
+17,0
+1
+9,0
+2,1
+40,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+16,0
+1
+9,0
+1
+1b,0
+d,1
+1b,0
+1
+15,0
+1
+9,0
+1
+17,0
+4,1
+d,0
+4,1
+17,0
+1
+15,0
+1
+9,0
+1
+14,0
+3,1
+15,0
+3,1
+14,0
+1
+15,0
+1
+9,0
+1
+13,0
+2,1
+19,0
+2,1
+13,0
+1
+14,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+1d,0
+b,1
+1d,0
+1
+13,0
+1
+9,0
+1
+1a,0
+3,1
+b,0
+3,1
+1a,0
+1
+13,0
+1
+9,0
+1
+17,0
+3,1
+11,0
+3,1
+17,0
+1
+13,0
+1
+9,0
+1
+16,0
+2,1
+15,0
+2,1
+16,0
+1
+13,0
+1
+9,0
+1
+14,0
+2,1
+19,0
+2,1
+14,0
+1
+13,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+a,0
+1
+11,0
+1
+1f,0
+1
+12,0
+1
+13,0
+1
+a,0
+1
+10,0
+1
+21,0
+1
+11,0
+1
+14,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+16,0
+1
+9,0
+2,1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+2,1
+a,0
+1
+27,0
+1
+c,0
+1
+17,0
+2,1
+a,0
+1
+a,0
+1
+27,0
+1
+b,0
+2,1
+18,0
+1
+b,0
+1
+9,0
+1
+27,0
+1
+b,0
+1
+19,0
+1
+15,0
+1
+27,0
+1
+b,0
+1
+1a,0
+1
+14,0
+1
+27,0
+1
+a,0
+1
+1b,0
+1
+15,0
+1
+25,0
+1
+b,0
+1
+1c,0
+1
+14,0
+1
+25,0
+1
+a,0
+1
+1d,0
+1
+15,0
+1
+23,0
+1
+b,0
+1
+1e,0
+1
+14,0
+1
+23,0
+1
+a,0
+1
+1f,0
+2,1
+14,0
+1
+21,0
+1
+a,0
+2,1
+20,0
+1
+15,0
+1
+1f,0
+1
+b,0
+1
+22,0
+1
+15,0
+1
+1d,0
+1
+b,0
+1
+24,0
+1
+15,0
+2,1
+19,0
+2,1
+b,0
+1
+25,0
+2,1
+16,0
+2,1
+15,0
+2,1
+c,0
+2,1
+26,0
+2,1
+16,0
+3,1
+11,0
+3,1
+c,0
+2,1
+28,0
+2,1
+18,0
+3,1
+b,0
+3,1
+e,0
+2,1
+2a,0
+2,1
+1a,0
+b,1
+10,0
+2,1
+2c,0
+2,1
+33,0
+2,1
+2e,0
+2,1
+31,0
+2,1
+31,0
+1
+2f,0
+1
+34,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+39,0
+2,1
+25,0
+2,1
+3d,0
+2,1
+21,0
+2,1
+41,0
+3,1
+1b,0
+3,1
+45,0
+4,1
+15,0
+4,1
+4b,0
+4,1
+d,0
+4,1
+53,0
+d,1
+1c0,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a37.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a37.dat
new file mode 100644
index 000000000..1744ce2dc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a37.dat
@@ -0,0 +1,65 @@
+! $XConsortium$
+100 90 32
+f3,0
+7,1
+5,0
+f,1
+49,0
+7,1
+5,0
+f,1
+49,0
+7,1
+5,0
+f,1
+49,0
+7,1
+5,0
+f,1
+49,0
+7,1
+5,0
+f,1
+55,0
+f,1
+55,0
+f,1
+55,0
+f,1
+2d,0
+23,1
+a3,0
+2,1
+62,0
+2,1
+c17,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+3d,0
+27,1
+c4f,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a45.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a45.dat
new file mode 100644
index 000000000..327992440
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a45.dat
@@ -0,0 +1,1423 @@
+! $XConsortium$
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1fa,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+e,1
+18,0
+4,1
+3a,0
+e,1
+18,0
+4,1
+3a,0
+e,1
+56,0
+e,1
+52c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+8b4,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1fa,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+e,1
+18,0
+4,1
+3a,0
+e,1
+18,0
+4,1
+3a,0
+e,1
+56,0
+e,1
+52c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+8b4,0
+100 90 32
+71a,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+130,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+38,0
+12,1
+16,0
+4,1
+38,0
+12,1
+16,0
+4,1
+38,0
+12,1
+16,0
+4,1
+38,0
+12,1
+16,0
+4,1
+448,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+7ec,0
+100 90 32
+71c,0
+f,1
+d,0
+f,1
+38,0
+11,1
+b,0
+11,1
+36,0
+12,1
+a,0
+12,1
+37,0
+11,1
+b,0
+11,1
+132,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+f,1
+17,0
+4,1
+39,0
+11,1
+16,0
+4,1
+38,0
+12,1
+16,0
+4,1
+39,0
+11,1
+17,0
+3,1
+44a,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+7ec,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+196,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+e,1
+18,0
+5,1
+39,0
+e,1
+18,0
+5,1
+39,0
+e,1
+56,0
+e,1
+56,0
+e,1
+4c8,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+8b3,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+196,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+e,1
+18,0
+5,1
+39,0
+e,1
+18,0
+5,1
+39,0
+e,1
+56,0
+e,1
+56,0
+e,1
+4c8,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+8b3,0
+100 90 32
+71a,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+cb,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+37,0
+13,1
+15,0
+5,1
+37,0
+13,1
+15,0
+5,1
+37,0
+13,1
+15,0
+5,1
+37,0
+13,1
+15,0
+5,1
+37,0
+13,1
+15,0
+5,1
+3e3,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+787,0
+100 90 32
+71b,0
+11,1
+b,0
+11,1
+36,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+36,0
+11,1
+b,0
+11,1
+cd,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+38,0
+11,1
+16,0
+5,1
+37,0
+13,1
+15,0
+5,1
+37,0
+13,1
+15,0
+5,1
+37,0
+13,1
+15,0
+5,1
+38,0
+11,1
+17,0
+3,1
+3e5,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+788,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1fa,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+e,1
+18,0
+4,1
+3a,0
+e,1
+18,0
+4,1
+3a,0
+e,1
+56,0
+e,1
+52c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+8b4,0
+100 90 32
+71a,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+130,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+38,0
+12,1
+16,0
+4,1
+38,0
+12,1
+16,0
+4,1
+38,0
+12,1
+16,0
+4,1
+38,0
+12,1
+16,0
+4,1
+448,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+7ec,0
+100 90 32
+71c,0
+f,1
+d,0
+f,1
+38,0
+11,1
+b,0
+11,1
+36,0
+12,1
+a,0
+12,1
+37,0
+11,1
+b,0
+11,1
+132,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+f,1
+17,0
+4,1
+39,0
+11,1
+16,0
+4,1
+38,0
+12,1
+16,0
+4,1
+39,0
+11,1
+17,0
+3,1
+44a,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+7ec,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+196,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+e,1
+18,0
+5,1
+39,0
+e,1
+18,0
+5,1
+39,0
+e,1
+56,0
+e,1
+56,0
+e,1
+4c8,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+8b3,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+196,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+e,1
+18,0
+5,1
+39,0
+e,1
+18,0
+5,1
+39,0
+e,1
+56,0
+e,1
+56,0
+e,1
+4c8,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+8b3,0
+100 90 32
+71a,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+cb,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+37,0
+13,1
+15,0
+5,1
+37,0
+13,1
+15,0
+5,1
+37,0
+13,1
+15,0
+5,1
+37,0
+13,1
+15,0
+5,1
+37,0
+13,1
+15,0
+5,1
+3e3,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+787,0
+100 90 32
+71b,0
+11,1
+b,0
+11,1
+36,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+36,0
+11,1
+b,0
+11,1
+cd,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+38,0
+11,1
+16,0
+5,1
+37,0
+13,1
+15,0
+5,1
+37,0
+13,1
+15,0
+5,1
+37,0
+13,1
+15,0
+5,1
+38,0
+11,1
+17,0
+3,1
+3e5,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+788,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a5.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a5.dat
new file mode 100644
index 000000000..5a6a20892
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a5.dat
@@ -0,0 +1,27 @@
+! $XConsortium$
+100 90 32
+221,0
+7,1
+64,0
+4,1
+64,0
+4,1
+63,0
+3,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+63,0
+2,1
+1c9e,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a52.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a52.dat
new file mode 100644
index 000000000..313678122
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a52.dat
@@ -0,0 +1,824 @@
+! $XConsortium$
+100 90 32
+71c,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+4,2
+2f,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+4,0
+2
+2,3
+2,2
+2f,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+18e,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+1ef,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+39,0
+4,3
+4,0
+4,3
+4,0
+4,3
+50,0
+3
+3,2
+4,0
+4,2
+4,0
+4,3
+50,0
+2
+2,3
+2
+4,0
+3,3
+2
+4,0
+4,2
+50,0
+3
+2,2
+3
+4,0
+2,3
+2
+3
+4,0
+4,3
+50,0
+3,3
+2
+4,0
+3,2
+3
+4,0
+4,3
+12,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+1ef,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+1ef,0
+3
+4,2
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+2,2
+2,3
+5f,0
+3,3
+2
+3
+1ef,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+1ef,0
+3
+4,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+3
+4,2
+4cb,0
+100 90 32
+6b8,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+4,2
+2f,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+3,0
+2,3
+4,2
+2f,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+3,0
+2,2
+2,3
+2,2
+2f,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+18d,0
+3
+2,2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+1ee,0
+2,3
+2,2
+2,3
+5e,0
+2,2
+2,3
+2,2
+5e,0
+2,3
+4,2
+39,0
+4,3
+4,0
+4,3
+4,0
+3,2
+3
+11,0
+2
+5,3
+39,0
+4,3
+4,0
+4,3
+4,0
+4,3
+50,0
+3
+3,2
+4,0
+4,2
+4,0
+4,3
+50,0
+2
+2,3
+2
+4,0
+3,3
+2
+4,0
+4,2
+50,0
+3
+2,2
+3
+4,0
+2,3
+2
+3
+4,0
+4,3
+50,0
+3,3
+2
+4,0
+3,2
+3
+4,0
+4,3
+11,0
+4,3
+2
+3
+5e,0
+2,3
+2,2
+3
+2
+5e,0
+2,2
+3
+2
+3
+2
+5e,0
+3
+2,2
+3
+2
+3
+1ee,0
+2,2
+3
+2
+3
+2
+5e,0
+2,3
+2,2
+3
+2
+5e,0
+4,3
+2
+3
+5e,0
+2,3
+2,2
+2,3
+1ee,0
+2,3
+4,2
+5e,0
+2,2
+2,3
+2,2
+5e,0
+2,3
+2,2
+2,3
+5e,0
+4,3
+2
+3
+1ee,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+3
+2,2
+3
+2
+3
+5e,0
+2,2
+3
+2
+3
+2
+1ee,0
+2,3
+4,2
+5e,0
+2
+5,3
+5e,0
+6,3
+5e,0
+2,3
+4,2
+4cb,0
+100 90 32
+6b8,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+4,2
+2f,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+3,0
+2,3
+4,2
+2f,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+3,0
+2,2
+2,3
+2,2
+2f,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+18d,0
+3
+2,2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+1ee,0
+2,3
+2,2
+2,3
+5e,0
+2,2
+2,3
+2,2
+5e,0
+2,3
+4,2
+39,0
+4,3
+4,0
+4,3
+4,0
+3,2
+3
+11,0
+2
+5,3
+39,0
+4,3
+4,0
+4,3
+4,0
+4,3
+50,0
+3
+3,2
+4,0
+4,2
+4,0
+4,3
+50,0
+2
+2,3
+2
+4,0
+3,3
+2
+4,0
+4,2
+50,0
+3
+2,2
+3
+4,0
+2,3
+2
+3
+4,0
+4,3
+50,0
+3,3
+2
+4,0
+3,2
+3
+4,0
+4,3
+11,0
+4,3
+2
+3
+5e,0
+2,3
+2,2
+3
+2
+5e,0
+2,2
+3
+2
+3
+2
+5e,0
+3
+2,2
+3
+2
+3
+1ee,0
+2,2
+3
+2
+3
+2
+5e,0
+2,3
+2,2
+3
+2
+5e,0
+4,3
+2
+3
+5e,0
+2,3
+2,2
+2,3
+1ee,0
+2,3
+4,2
+5e,0
+2,2
+2,3
+2,2
+5e,0
+2,3
+2,2
+2,3
+5e,0
+4,3
+2
+3
+1ee,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+3
+2,2
+3
+2
+3
+5e,0
+2,2
+3
+2
+3
+2
+1ee,0
+2,3
+4,2
+5e,0
+2
+5,3
+5e,0
+6,3
+5e,0
+2,3
+4,2
+4cb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a53.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a53.dat
new file mode 100644
index 000000000..34c0ac8b6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a53.dat
@@ -0,0 +1,479 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a0,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+1f0,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+39,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+53,0
+3,1
+5,0
+3,1
+60,0
+3,1
+5,0
+2,1
+0
+1
+51,0
+3,1
+7,0
+1
+59,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+13,0
+3,1
+c8,0
+1
+5f,0
+5,1
+1ef,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+1f0,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+1f7,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+1ef,0
+1
+64,0
+3,1
+c8,0
+1
+4cb,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+3,0
+1
+3c,0
+4,1
+14,0
+4,1
+19b,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+63,0
+1
+5e,0
+6,1
+39,0
+3,1
+5,0
+4,1
+6,0
+2,1
+11,0
+1
+4,0
+1
+39,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+53,0
+3,1
+5,0
+3,1
+60,0
+3,1
+5,0
+2,1
+0
+1
+51,0
+3,1
+7,0
+1
+59,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+13,0
+3,1
+5f,0
+1
+68,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+5e,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+1f7,0
+1
+5e,0
+6,1
+63,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+1
+68,0
+1
+4cb,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+3,0
+1
+3c,0
+4,1
+14,0
+4,1
+19b,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+63,0
+1
+5e,0
+6,1
+39,0
+3,1
+5,0
+4,1
+6,0
+2,1
+11,0
+1
+4,0
+1
+39,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+53,0
+3,1
+5,0
+3,1
+60,0
+3,1
+5,0
+2,1
+0
+1
+51,0
+3,1
+7,0
+1
+59,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+13,0
+3,1
+5f,0
+1
+68,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+5e,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+1f7,0
+1
+5e,0
+6,1
+63,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+1
+68,0
+1
+4cb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a54.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a54.dat
new file mode 100644
index 000000000..34c0ac8b6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a54.dat
@@ -0,0 +1,479 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a0,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+1f0,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+39,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+53,0
+3,1
+5,0
+3,1
+60,0
+3,1
+5,0
+2,1
+0
+1
+51,0
+3,1
+7,0
+1
+59,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+13,0
+3,1
+c8,0
+1
+5f,0
+5,1
+1ef,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+1f0,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+1f7,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+1ef,0
+1
+64,0
+3,1
+c8,0
+1
+4cb,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+3,0
+1
+3c,0
+4,1
+14,0
+4,1
+19b,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+63,0
+1
+5e,0
+6,1
+39,0
+3,1
+5,0
+4,1
+6,0
+2,1
+11,0
+1
+4,0
+1
+39,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+53,0
+3,1
+5,0
+3,1
+60,0
+3,1
+5,0
+2,1
+0
+1
+51,0
+3,1
+7,0
+1
+59,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+13,0
+3,1
+5f,0
+1
+68,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+5e,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+1f7,0
+1
+5e,0
+6,1
+63,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+1
+68,0
+1
+4cb,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+3,0
+1
+3c,0
+4,1
+14,0
+4,1
+19b,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+63,0
+1
+5e,0
+6,1
+39,0
+3,1
+5,0
+4,1
+6,0
+2,1
+11,0
+1
+4,0
+1
+39,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+53,0
+3,1
+5,0
+3,1
+60,0
+3,1
+5,0
+2,1
+0
+1
+51,0
+3,1
+7,0
+1
+59,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+13,0
+3,1
+5f,0
+1
+68,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+5e,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+1f7,0
+1
+5e,0
+6,1
+63,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+1
+68,0
+1
+4cb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a55.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a55.dat
new file mode 100644
index 000000000..9e66006ad
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a55.dat
@@ -0,0 +1,259 @@
+! $XConsortium$
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1fa,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+e,1
+18,0
+4,1
+3a,0
+e,1
+18,0
+4,1
+3a,0
+e,1
+56,0
+e,1
+52c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+8b4,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+196,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+e,1
+18,0
+5,1
+39,0
+e,1
+18,0
+5,1
+39,0
+e,1
+56,0
+e,1
+56,0
+e,1
+4c8,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+8b3,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+196,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+e,1
+18,0
+5,1
+39,0
+e,1
+18,0
+5,1
+39,0
+e,1
+56,0
+e,1
+56,0
+e,1
+4c8,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+8b3,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a56.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a56.dat
new file mode 100644
index 000000000..861d72267
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a56.dat
@@ -0,0 +1,981 @@
+! $XConsortium$
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+4,3
+30,0
+34,3
+30,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+3,2
+30,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2
+60,0
+3
+2,2
+3
+60,0
+3,3
+2
+60,0
+3
+2,2
+3
+60,0
+2
+3
+2
+3
+60,0
+2,2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+2,2
+3
+2
+60,0
+2
+3
+2
+3
+60,0
+3
+2,2
+3
+60,0
+3,3
+2
+60,0
+3
+2,2
+3
+60,0
+2
+2,3
+2
+60,0
+3
+3,2
+60,0
+4,3
+3a,0
+14,3
+12,0
+4,3
+3a,0
+3
+e,2
+5,3
+12,0
+3
+3,2
+3a,0
+2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+12,0
+2
+2,3
+2
+3a,0
+3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+12,0
+3
+2,2
+3
+60,0
+3,3
+2
+60,0
+3
+2,2
+3
+60,0
+2
+3
+2
+3
+60,0
+2,2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+2,2
+3
+2
+60,0
+2
+3
+2
+3
+60,0
+3
+2,2
+3
+60,0
+3,3
+2
+60,0
+3
+2,2
+3
+60,0
+2
+2,3
+2
+60,0
+3
+3,2
+60,0
+4,3
+60,0
+4,3
+60,0
+3
+3,2
+60,0
+2
+2,3
+2
+60,0
+3
+2,2
+3
+60,0
+3,3
+2
+60,0
+3
+2,2
+3
+60,0
+2
+3
+2
+3
+60,0
+2,2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+2,2
+3
+2
+60,0
+2
+3
+2
+3
+60,0
+3
+2,2
+3
+60,0
+3,3
+2
+60,0
+3
+2,2
+3
+60,0
+2
+2,3
+2
+60,0
+3
+3,2
+60,0
+4,3
+60,0
+4,3
+60,0
+3
+3,2
+60,0
+2
+2,3
+2
+60,0
+3
+2,2
+3
+404,0
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+5,3
+2f,0
+35,3
+2f,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+4,2
+2f,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+2f,0
+3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+39,0
+14,3
+12,0
+5,3
+39,0
+3
+e,2
+5,3
+12,0
+3
+4,2
+39,0
+2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+12,0
+2
+2,3
+2,2
+39,0
+3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+12,0
+3
+2,2
+2,3
+39,0
+3,3
+2
+3
+6,2
+3
+2
+7,3
+12,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+3
+4,2
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+2,2
+2,3
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+3
+4,2
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+2,2
+2,3
+403,0
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+5,3
+2f,0
+35,3
+2f,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+4,2
+2f,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+2f,0
+3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+39,0
+14,3
+12,0
+5,3
+39,0
+3
+e,2
+5,3
+12,0
+3
+4,2
+39,0
+2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+12,0
+2
+2,3
+2,2
+39,0
+3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+12,0
+3
+2,2
+2,3
+39,0
+3,3
+2
+3
+6,2
+3
+2
+7,3
+12,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+3
+4,2
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+2,2
+2,3
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+3
+4,2
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+2,2
+2,3
+403,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a57.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a57.dat
new file mode 100644
index 000000000..209334d88
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a57.dat
@@ -0,0 +1,545 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+30,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+3b,0
+d,1
+b,0
+d,1
+c8,0
+4,1
+c4,0
+4,1
+c4,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+c4,0
+4,1
+9e,0
+1
+2,0
+6,1
+5,0
+4,1
+14,0
+4,1
+3b,0
+5,1
+3,0
+6,1
+17,0
+1
+43,0
+5,1
+4,0
+3,1
+0
+1
+13,0
+3,1
+3b,0
+4,1
+6,0
+4,1
+17,0
+1
+64,0
+3,1
+128,0
+4,1
+c4,0
+4,1
+c4,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+c4,0
+4,1
+c4,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+c4,0
+4,1
+c4,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+468,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+30,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+3b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+c,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+39,0
+1
+2,0
+6,1
+5,0
+4,1
+14,0
+4,1
+3b,0
+5,1
+3,0
+6,1
+17,0
+1
+43,0
+5,1
+4,0
+3,1
+0
+1
+13,0
+3,1
+3b,0
+4,1
+6,0
+4,1
+17,0
+1
+3e,0
+9,1
+5,0
+3,1
+0
+1
+13,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+403,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+30,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+3b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+c,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+39,0
+1
+2,0
+6,1
+5,0
+4,1
+14,0
+4,1
+3b,0
+5,1
+3,0
+6,1
+17,0
+1
+43,0
+5,1
+4,0
+3,1
+0
+1
+13,0
+3,1
+3b,0
+4,1
+6,0
+4,1
+17,0
+1
+3e,0
+9,1
+5,0
+3,1
+0
+1
+13,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+403,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a58.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a58.dat
new file mode 100644
index 000000000..6065d6d22
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a58.dat
@@ -0,0 +1,327 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+45,0
+3,1
+15,0
+7,1
+25e,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+c4,0
+4,1
+9e,0
+1
+2,0
+6,1
+1d,0
+4,1
+3b,0
+5,1
+3,0
+5,1
+18,0
+1
+43,0
+5,1
+5a,0
+4,1
+6,0
+3,1
+5f4,0
+4,1
+c4,0
+4,1
+c4,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+8b4,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+45,0
+3,1
+15,0
+7,1
+3e,0
+a,1
+e,0
+c,1
+19c,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+39,0
+1
+2,0
+6,1
+1d,0
+4,1
+3b,0
+5,1
+3,0
+5,1
+18,0
+1
+43,0
+5,1
+5a,0
+4,1
+6,0
+3,1
+57,0
+9,1
+534,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+8b3,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+45,0
+3,1
+15,0
+7,1
+3e,0
+a,1
+e,0
+c,1
+19c,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+39,0
+1
+2,0
+6,1
+1d,0
+4,1
+3b,0
+5,1
+3,0
+5,1
+18,0
+1
+43,0
+5,1
+5a,0
+4,1
+6,0
+3,1
+57,0
+9,1
+534,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+8b3,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a6.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a6.dat
new file mode 100644
index 000000000..dcf873d38
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a6.dat
@@ -0,0 +1,323 @@
+! $XConsortium$
+100 90 32
+21b,0
+d,1
+53,0
+4,1
+d,0
+4,1
+4b,0
+4,1
+15,0
+4,1
+45,0
+3,1
+1b,0
+3,1
+41,0
+2,1
+21,0
+2,1
+3d,0
+2,1
+25,0
+2,1
+39,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+34,0
+1
+2f,0
+1
+31,0
+2,1
+31,0
+2,1
+2e,0
+2,1
+33,0
+2,1
+2c,0
+2,1
+35,0
+2,1
+2a,0
+2,1
+37,0
+2,1
+28,0
+2,1
+39,0
+2,1
+26,0
+2,1
+3b,0
+2,1
+25,0
+1
+3d,0
+1
+24,0
+1
+3f,0
+1
+22,0
+1
+41,0
+1
+20,0
+2,1
+41,0
+2,1
+1f,0
+1
+43,0
+1
+1e,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1c,0
+1
+47,0
+1
+1b,0
+1
+47,0
+1
+1a,0
+1
+49,0
+1
+19,0
+1
+49,0
+1
+18,0
+2,1
+49,0
+2,1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+16,0
+1
+4d,0
+1
+15,0
+1
+4d,0
+1
+15,0
+1
+4d,0
+1
+15,0
+1
+4d,0
+1
+14,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+14,0
+1
+4d,0
+1
+15,0
+1
+4d,0
+1
+15,0
+1
+4d,0
+1
+15,0
+1
+4d,0
+1
+16,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+2,1
+49,0
+2,1
+18,0
+1
+49,0
+1
+19,0
+1
+49,0
+1
+1a,0
+1
+47,0
+1
+1b,0
+1
+47,0
+1
+1c,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1e,0
+1
+43,0
+1
+1f,0
+2,1
+41,0
+2,1
+20,0
+1
+41,0
+1
+22,0
+1
+3f,0
+1
+24,0
+1
+3d,0
+1
+25,0
+2,1
+3b,0
+2,1
+26,0
+2,1
+39,0
+2,1
+28,0
+2,1
+37,0
+2,1
+2a,0
+2,1
+35,0
+2,1
+2c,0
+2,1
+33,0
+2,1
+2e,0
+2,1
+31,0
+2,1
+31,0
+1
+2f,0
+1
+34,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+39,0
+2,1
+25,0
+2,1
+3d,0
+2,1
+21,0
+2,1
+41,0
+3,1
+1b,0
+3,1
+45,0
+4,1
+15,0
+4,1
+4b,0
+4,1
+d,0
+4,1
+53,0
+d,1
+1c0,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a67.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a67.dat
new file mode 100644
index 000000000..d69873889
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a67.dat
@@ -0,0 +1,59 @@
+! $XConsortium$
+100 90 32
+45b,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+1bee,0
+100 90 32
+45b,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+1b8a,0
+100 90 32
+45b,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+41,0
+23,1
+1b8a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a69.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a69.dat
new file mode 100644
index 000000000..4de5f4bae
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a69.dat
@@ -0,0 +1,445 @@
+! $XConsortium$
+100 90 32
+5eb,0
+31,1
+1d0c,0
+100 90 32
+587,0
+31,1
+32,0
+32,1
+1d0c,0
+100 90 32
+523,0
+31,1
+32,0
+33,1
+30,0
+34,1
+31,0
+33,1
+1ca7,0
+100 90 32
+522,0
+33,1
+30,0
+35,1
+2f,0
+35,1
+2f,0
+35,1
+30,0
+33,1
+1c43,0
+100 90 32
+3f7,0
+31,1
+30,0
+36,1
+2d,0
+38,1
+2c,0
+39,1
+2b,0
+39,1
+2a,0
+3a,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+38,1
+2d,0
+36,1
+1b7a,0
+100 90 32
+3f5,0
+35,1
+2e,0
+37,1
+2c,0
+39,1
+2a,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+2a,0
+39,1
+2c,0
+37,1
+2e,0
+35,1
+1b16,0
+100 90 32
+2,0
+4b,1
+18,0
+4d,1
+16,0
+4f,1
+15,0
+4f,1
+15,0
+50,1
+14,0
+51,1
+13,0
+51,1
+13,0
+52,1
+12,0
+52,1
+12,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+52,1
+12,0
+52,1
+12,0
+51,1
+13,0
+51,1
+13,0
+50,1
+14,0
+4f,1
+15,0
+4f,1
+16,0
+4d,1
+18,0
+4b,1
+1a,0
+48,1
+1e,0
+45,1
+21,0
+41,1
+25,0
+3d,1
+159a,0
+100 90 32
+2,0
+4b,1
+18,0
+4d,1
+16,0
+4f,1
+15,0
+50,1
+14,0
+51,1
+13,0
+51,1
+13,0
+52,1
+12,0
+52,1
+12,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+52,1
+12,0
+52,1
+12,0
+51,1
+13,0
+51,1
+13,0
+50,1
+14,0
+4f,1
+16,0
+4d,1
+18,0
+4b,1
+1a,0
+49,1
+1c,0
+47,1
+1f,0
+43,1
+23,0
+3f,1
+28,0
+39,1
+1538,0
+100 90 32
+587,0
+31,1
+32,0
+32,1
+1d0c,0
+100 90 32
+523,0
+31,1
+32,0
+33,1
+30,0
+34,1
+31,0
+33,1
+1ca7,0
+100 90 32
+522,0
+33,1
+30,0
+35,1
+2f,0
+35,1
+2f,0
+35,1
+30,0
+33,1
+1c43,0
+100 90 32
+3f7,0
+31,1
+30,0
+36,1
+2d,0
+38,1
+2c,0
+39,1
+2b,0
+39,1
+2a,0
+3a,1
+2b,0
+39,1
+2b,0
+39,1
+2b,0
+38,1
+2d,0
+36,1
+1b7a,0
+100 90 32
+3f5,0
+35,1
+2e,0
+37,1
+2c,0
+39,1
+2a,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+2a,0
+39,1
+2c,0
+37,1
+2e,0
+35,1
+1b16,0
+100 90 32
+2,0
+4b,1
+18,0
+4d,1
+16,0
+4f,1
+15,0
+4f,1
+15,0
+50,1
+14,0
+51,1
+13,0
+51,1
+13,0
+52,1
+12,0
+52,1
+12,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+52,1
+12,0
+52,1
+12,0
+51,1
+13,0
+51,1
+13,0
+50,1
+14,0
+4f,1
+15,0
+4f,1
+16,0
+4d,1
+18,0
+4b,1
+1a,0
+48,1
+1e,0
+45,1
+21,0
+41,1
+25,0
+3d,1
+159a,0
+100 90 32
+2,0
+4b,1
+18,0
+4d,1
+16,0
+4f,1
+15,0
+50,1
+14,0
+51,1
+13,0
+51,1
+13,0
+52,1
+12,0
+52,1
+12,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+54,1
+10,0
+53,1
+11,0
+53,1
+11,0
+53,1
+11,0
+52,1
+12,0
+52,1
+12,0
+51,1
+13,0
+51,1
+13,0
+50,1
+14,0
+4f,1
+16,0
+4d,1
+18,0
+4b,1
+1a,0
+49,1
+1c,0
+47,1
+1f,0
+43,1
+23,0
+3f,1
+28,0
+39,1
+1538,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a7.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a7.dat
new file mode 100644
index 000000000..dcf873d38
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a7.dat
@@ -0,0 +1,323 @@
+! $XConsortium$
+100 90 32
+21b,0
+d,1
+53,0
+4,1
+d,0
+4,1
+4b,0
+4,1
+15,0
+4,1
+45,0
+3,1
+1b,0
+3,1
+41,0
+2,1
+21,0
+2,1
+3d,0
+2,1
+25,0
+2,1
+39,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+34,0
+1
+2f,0
+1
+31,0
+2,1
+31,0
+2,1
+2e,0
+2,1
+33,0
+2,1
+2c,0
+2,1
+35,0
+2,1
+2a,0
+2,1
+37,0
+2,1
+28,0
+2,1
+39,0
+2,1
+26,0
+2,1
+3b,0
+2,1
+25,0
+1
+3d,0
+1
+24,0
+1
+3f,0
+1
+22,0
+1
+41,0
+1
+20,0
+2,1
+41,0
+2,1
+1f,0
+1
+43,0
+1
+1e,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1c,0
+1
+47,0
+1
+1b,0
+1
+47,0
+1
+1a,0
+1
+49,0
+1
+19,0
+1
+49,0
+1
+18,0
+2,1
+49,0
+2,1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+16,0
+1
+4d,0
+1
+15,0
+1
+4d,0
+1
+15,0
+1
+4d,0
+1
+15,0
+1
+4d,0
+1
+14,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+14,0
+1
+4d,0
+1
+15,0
+1
+4d,0
+1
+15,0
+1
+4d,0
+1
+15,0
+1
+4d,0
+1
+16,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+1
+4b,0
+1
+17,0
+2,1
+49,0
+2,1
+18,0
+1
+49,0
+1
+19,0
+1
+49,0
+1
+1a,0
+1
+47,0
+1
+1b,0
+1
+47,0
+1
+1c,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1e,0
+1
+43,0
+1
+1f,0
+2,1
+41,0
+2,1
+20,0
+1
+41,0
+1
+22,0
+1
+3f,0
+1
+24,0
+1
+3d,0
+1
+25,0
+2,1
+3b,0
+2,1
+26,0
+2,1
+39,0
+2,1
+28,0
+2,1
+37,0
+2,1
+2a,0
+2,1
+35,0
+2,1
+2c,0
+2,1
+33,0
+2,1
+2e,0
+2,1
+31,0
+2,1
+31,0
+1
+2f,0
+1
+34,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+39,0
+2,1
+25,0
+2,1
+3d,0
+2,1
+21,0
+2,1
+41,0
+3,1
+1b,0
+3,1
+45,0
+4,1
+15,0
+4,1
+4b,0
+4,1
+d,0
+4,1
+53,0
+d,1
+1c0,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a71.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a71.dat
new file mode 100644
index 000000000..ed2c0bde0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a71.dat
@@ -0,0 +1,77 @@
+! $XConsortium$
+100 90 32
+3f2,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+1b13,0
+100 90 32
+38d,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+1b13,0
+100 90 32
+38d,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+1b13,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a76.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a76.dat
new file mode 100644
index 000000000..2d7bc0f33
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a76.dat
@@ -0,0 +1,35 @@
+! $XConsortium$
+100 90 32
+71c,0
+1
+62,0
+3,1
+60,0
+4,1
+61,0
+3,1
+1ade,0
+100 90 32
+71b,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+1a7a,0
+100 90 32
+71b,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+1a7a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a79.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a79.dat
new file mode 100644
index 000000000..f979d0ece
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a79.dat
@@ -0,0 +1,129 @@
+! $XConsortium$
+100 90 32
+2e4,0
+5,1
+5f,0
+9,1
+5b,0
+b,1
+59,0
+d,1
+57,0
+e,1
+56,0
+10,1
+54,0
+11,1
+58,0
+d,1
+59,0
+c,1
+5a,0
+a,1
+5c,0
+9,1
+5c,0
+9,1
+5c,0
+8,1
+5d,0
+8,1
+5c,0
+8,1
+5d,0
+8,1
+5c,0
+8,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+7,1
+5d,0
+8,1
+5c,0
+c,1
+58,0
+e,1
+56,0
+10,1
+54,0
+11,1
+53,0
+13,1
+51,0
+14,1
+58,0
+d,1
+59,0
+c,1
+5a,0
+a,1
+5c,0
+9,1
+5c,0
+9,1
+5c,0
+8,1
+5d,0
+8,1
+5c,0
+8,1
+5d,0
+8,1
+5c,0
+8,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+7,1
+5c,0
+8,1
+58,0
+c,1
+56,0
+e,1
+54,0
+10,1
+53,0
+11,1
+51,0
+13,1
+50,0
+14,1
+4f,0
+d,1
+56,0
+c,1
+58,0
+a,1
+59,0
+9,1
+5a,0
+9,1
+5b,0
+8,1
+5b,0
+8,1
+5c,0
+8,1
+5b,0
+8,1
+5c,0
+8,1
+5c,0
+7,1
+5d,0
+7,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+7f4,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a80.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a80.dat
new file mode 100644
index 000000000..fb1296684
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a80.dat
@@ -0,0 +1,157 @@
+! $XConsortium$
+100 90 32
+2cb,0
+5,1
+5f,0
+8,1
+5c,0
+a,1
+5a,0
+b,1
+59,0
+d,1
+57,0
+e,1
+56,0
+f,1
+59,0
+b,1
+5b,0
+a,1
+5c,0
+9,1
+5c,0
+8,1
+5d,0
+8,1
+5c,0
+8,1
+5d,0
+7,1
+5d,0
+8,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5c,0
+8,1
+5c,0
+7,1
+5c,0
+8,1
+5c,0
+8,1
+5b,0
+8,1
+5b,0
+9,1
+59,0
+a,1
+58,0
+b,1
+55,0
+f,1
+55,0
+e,1
+56,0
+d,1
+57,0
+d,1
+57,0
+e,1
+56,0
+10,1
+54,0
+11,1
+58,0
+d,1
+59,0
+c,1
+5a,0
+a,1
+5c,0
+9,1
+5c,0
+9,1
+5c,0
+8,1
+5d,0
+8,1
+5c,0
+8,1
+5d,0
+8,1
+5c,0
+8,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5c,0
+7,1
+5d,0
+7,1
+5c,0
+8,1
+5c,0
+8,1
+5b,0
+8,1
+5c,0
+8,1
+5b,0
+8,1
+5b,0
+9,1
+5a,0
+9,1
+59,0
+a,1
+58,0
+c,1
+56,0
+d,1
+52,0
+11,1
+53,0
+10,1
+54,0
+e,1
+56,0
+d,1
+57,0
+b,1
+59,0
+9,1
+5b,0
+5,1
+2a8,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a81.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a81.dat
new file mode 100644
index 000000000..d151275d8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a81.dat
@@ -0,0 +1,283 @@
+! $XConsortium$
+100 90 32
+2cb,0
+5,1
+14,0
+5,1
+46,0
+8,1
+11,0
+9,1
+42,0
+a,1
+f,0
+b,1
+40,0
+b,1
+e,0
+d,1
+3e,0
+d,1
+c,0
+e,1
+3d,0
+e,1
+b,0
+10,1
+3b,0
+f,1
+a,0
+11,1
+3e,0
+b,1
+f,0
+d,1
+3f,0
+a,1
+10,0
+c,1
+40,0
+9,1
+11,0
+a,1
+41,0
+8,1
+13,0
+9,1
+41,0
+8,1
+13,0
+9,1
+40,0
+8,1
+14,0
+8,1
+41,0
+7,1
+15,0
+8,1
+40,0
+8,1
+14,0
+8,1
+41,0
+7,1
+15,0
+8,1
+40,0
+7,1
+15,0
+8,1
+40,0
+7,1
+16,0
+7,1
+40,0
+7,1
+16,0
+7,1
+40,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+8,1
+3e,0
+7,1
+17,0
+c,1
+39,0
+8,1
+17,0
+e,1
+37,0
+7,1
+18,0
+10,1
+34,0
+8,1
+18,0
+11,1
+33,0
+8,1
+19,0
+12,1
+30,0
+8,1
+1b,0
+12,1
+2e,0
+9,1
+21,0
+d,1
+2b,0
+a,1
+24,0
+c,1
+28,0
+b,1
+27,0
+a,1
+23,0
+10,1
+29,0
+9,1
+21,0
+10,1
+2b,0
+9,1
+1f,0
+10,1
+2d,0
+8,1
+1f,0
+10,1
+2e,0
+8,1
+1e,0
+11,1
+2d,0
+8,1
+1f,0
+12,1
+2c,0
+8,1
+1f,0
+12,1
+2b,0
+8,1
+25,0
+d,1
+2b,0
+7,1
+27,0
+c,1
+2a,0
+7,1
+29,0
+a,1
+2b,0
+7,1
+2a,0
+9,1
+29,0
+8,1
+2b,0
+9,1
+24,0
+c,1
+2c,0
+8,1
+22,0
+e,1
+2d,0
+8,1
+1f,0
+10,1
+2d,0
+8,1
+1e,0
+11,1
+2e,0
+8,1
+1b,0
+12,1
+2f,0
+8,1
+1a,0
+12,1
+31,0
+7,1
+19,0
+d,1
+37,0
+7,1
+18,0
+c,1
+3a,0
+7,1
+17,0
+a,1
+3c,0
+7,1
+16,0
+9,1
+3e,0
+7,1
+15,0
+9,1
+3f,0
+7,1
+15,0
+8,1
+40,0
+7,1
+14,0
+8,1
+41,0
+7,1
+14,0
+8,1
+41,0
+7,1
+13,0
+8,1
+42,0
+7,1
+13,0
+8,1
+42,0
+7,1
+13,0
+7,1
+42,0
+7,1
+14,0
+7,1
+42,0
+7,1
+13,0
+7,1
+42,0
+8,1
+13,0
+7,1
+42,0
+8,1
+13,0
+7,1
+41,0
+8,1
+14,0
+7,1
+41,0
+8,1
+5b,0
+8,1
+5b,0
+9,1
+5a,0
+9,1
+59,0
+a,1
+58,0
+c,1
+56,0
+d,1
+52,0
+11,1
+53,0
+10,1
+54,0
+e,1
+56,0
+d,1
+57,0
+b,1
+59,0
+9,1
+5b,0
+5,1
+2a8,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a82.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a82.dat
new file mode 100644
index 000000000..d767121cf
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a82.dat
@@ -0,0 +1,283 @@
+! $XConsortium$
+100 90 32
+2cb,0
+5,1
+14,0
+5,1
+46,0
+8,1
+11,0
+9,1
+42,0
+a,1
+f,0
+b,1
+40,0
+b,1
+e,0
+d,1
+3e,0
+d,1
+c,0
+e,1
+3d,0
+e,1
+b,0
+10,1
+3b,0
+f,1
+a,0
+11,1
+3e,0
+b,1
+f,0
+d,1
+3f,0
+a,1
+10,0
+c,1
+40,0
+9,1
+11,0
+a,1
+41,0
+8,1
+13,0
+9,1
+41,0
+8,1
+13,0
+9,1
+40,0
+8,1
+14,0
+8,1
+41,0
+7,1
+15,0
+8,1
+40,0
+8,1
+14,0
+8,1
+41,0
+7,1
+15,0
+8,1
+40,0
+7,1
+15,0
+8,1
+40,0
+7,1
+16,0
+7,1
+40,0
+7,1
+16,0
+7,1
+40,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+8,1
+3e,0
+7,1
+17,0
+c,1
+39,0
+8,1
+17,0
+e,1
+37,0
+7,1
+18,0
+10,1
+34,0
+8,1
+19,0
+10,1
+33,0
+8,1
+1a,0
+11,1
+30,0
+8,1
+1c,0
+11,1
+2e,0
+9,1
+21,0
+d,1
+2b,0
+a,1
+24,0
+c,1
+28,0
+b,1
+27,0
+a,1
+24,0
+f,1
+29,0
+9,1
+23,0
+e,1
+2b,0
+9,1
+22,0
+d,1
+2d,0
+8,1
+22,0
+d,1
+2e,0
+8,1
+21,0
+e,1
+2d,0
+8,1
+21,0
+10,1
+2c,0
+8,1
+20,0
+11,1
+2b,0
+8,1
+25,0
+d,1
+2b,0
+7,1
+27,0
+c,1
+2a,0
+7,1
+29,0
+a,1
+2b,0
+7,1
+2a,0
+9,1
+29,0
+8,1
+2b,0
+9,1
+24,0
+c,1
+2c,0
+8,1
+22,0
+e,1
+2d,0
+8,1
+1f,0
+10,1
+2d,0
+8,1
+1e,0
+10,1
+2f,0
+8,1
+1b,0
+11,1
+30,0
+8,1
+1a,0
+11,1
+32,0
+7,1
+19,0
+d,1
+37,0
+7,1
+18,0
+c,1
+3a,0
+7,1
+17,0
+a,1
+3c,0
+7,1
+16,0
+9,1
+3e,0
+7,1
+15,0
+9,1
+3f,0
+7,1
+15,0
+8,1
+40,0
+7,1
+14,0
+8,1
+41,0
+7,1
+14,0
+8,1
+41,0
+7,1
+13,0
+8,1
+42,0
+7,1
+13,0
+8,1
+42,0
+7,1
+13,0
+7,1
+42,0
+7,1
+14,0
+7,1
+42,0
+7,1
+13,0
+7,1
+42,0
+8,1
+13,0
+7,1
+42,0
+8,1
+13,0
+7,1
+41,0
+8,1
+14,0
+7,1
+41,0
+8,1
+5b,0
+8,1
+5b,0
+9,1
+5a,0
+9,1
+59,0
+a,1
+58,0
+c,1
+56,0
+d,1
+52,0
+11,1
+53,0
+10,1
+54,0
+e,1
+56,0
+d,1
+57,0
+b,1
+59,0
+9,1
+5b,0
+5,1
+2a8,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a86.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a86.dat
new file mode 100644
index 000000000..1ef7671bf
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a86.dat
@@ -0,0 +1,579 @@
+! $XConsortium$
+100 90 32
+21b,0
+d,1
+53,0
+4,1
+d,0
+4,1
+4b,0
+4,1
+15,0
+4,1
+45,0
+3,1
+1b,0
+3,1
+41,0
+2,1
+21,0
+2,1
+3d,0
+2,1
+25,0
+2,1
+39,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+34,0
+1
+2f,0
+1
+31,0
+2,1
+13,0
+4,1
+1a,0
+2,1
+2e,0
+2,1
+10,0
+4,1
+1f,0
+2,1
+2c,0
+2,1
+e,0
+3,1
+9,0
+6,1
+15,0
+2,1
+2a,0
+2,1
+d,0
+3,1
+11,0
+5,1
+11,0
+2,1
+28,0
+2,1
+d,0
+2,1
+18,0
+3,1
+f,0
+2,1
+26,0
+2,1
+c,0
+2,1
+1c,0
+3,1
+e,0
+2,1
+25,0
+1
+c,0
+1
+21,0
+2,1
+d,0
+1
+24,0
+1
+b,0
+2,1
+24,0
+1
+d,0
+1
+22,0
+1
+b,0
+2,1
+26,0
+2,1
+c,0
+1
+20,0
+2,1
+a,0
+2,1
+29,0
+1
+b,0
+2,1
+1f,0
+1
+a,0
+2,1
+f,0
+3,1
+19,0
+2,1
+a,0
+1
+1e,0
+1
+b,0
+1
+2d,0
+2,1
+a,0
+1
+1d,0
+1
+a,0
+1
+2f,0
+1
+a,0
+1
+1c,0
+1
+a,0
+1
+3c,0
+1
+1b,0
+1
+a,0
+1
+3c,0
+1
+1a,0
+1
+a,0
+1
+3e,0
+1
+19,0
+1
+9,0
+2,1
+3e,0
+1
+18,0
+2,1
+9,0
+1
+3f,0
+2,1
+17,0
+1
+9,0
+2,1
+40,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+16,0
+1
+9,0
+1
+1b,0
+d,1
+1b,0
+1
+15,0
+1
+9,0
+1
+17,0
+4,1
+d,0
+4,1
+17,0
+1
+15,0
+1
+9,0
+1
+14,0
+3,1
+15,0
+3,1
+14,0
+1
+15,0
+1
+9,0
+1
+13,0
+2,1
+19,0
+2,1
+13,0
+1
+14,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+1d,0
+b,1
+1d,0
+1
+13,0
+1
+9,0
+1
+1a,0
+3,1
+b,0
+3,1
+1a,0
+1
+13,0
+1
+9,0
+1
+17,0
+3,1
+11,0
+3,1
+17,0
+1
+13,0
+1
+9,0
+1
+16,0
+2,1
+15,0
+2,1
+16,0
+1
+13,0
+1
+9,0
+1
+14,0
+2,1
+19,0
+2,1
+14,0
+1
+13,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+a,0
+1
+11,0
+1
+1f,0
+1
+12,0
+1
+13,0
+1
+a,0
+1
+10,0
+1
+21,0
+1
+11,0
+1
+14,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+16,0
+1
+9,0
+2,1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+2,1
+a,0
+1
+27,0
+1
+c,0
+1
+17,0
+2,1
+a,0
+1
+a,0
+1
+27,0
+1
+b,0
+2,1
+18,0
+1
+b,0
+1
+9,0
+1
+27,0
+1
+b,0
+1
+19,0
+1
+15,0
+1
+27,0
+1
+b,0
+1
+1a,0
+1
+14,0
+1
+27,0
+1
+a,0
+1
+1b,0
+1
+15,0
+1
+25,0
+1
+b,0
+1
+1c,0
+1
+14,0
+1
+25,0
+1
+a,0
+1
+1d,0
+1
+15,0
+1
+23,0
+1
+b,0
+1
+1e,0
+1
+14,0
+1
+23,0
+1
+a,0
+1
+1f,0
+2,1
+14,0
+1
+21,0
+1
+a,0
+2,1
+20,0
+1
+15,0
+1
+1f,0
+1
+b,0
+1
+22,0
+1
+15,0
+1
+1d,0
+1
+b,0
+1
+24,0
+1
+15,0
+2,1
+19,0
+2,1
+b,0
+1
+25,0
+2,1
+16,0
+2,1
+15,0
+2,1
+c,0
+2,1
+26,0
+2,1
+16,0
+3,1
+11,0
+3,1
+c,0
+2,1
+28,0
+2,1
+18,0
+3,1
+b,0
+3,1
+e,0
+2,1
+2a,0
+2,1
+1a,0
+b,1
+10,0
+2,1
+2c,0
+2,1
+33,0
+2,1
+2e,0
+2,1
+31,0
+2,1
+31,0
+1
+2f,0
+1
+34,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+39,0
+2,1
+25,0
+2,1
+3d,0
+2,1
+21,0
+2,1
+41,0
+3,1
+1b,0
+3,1
+45,0
+4,1
+15,0
+4,1
+4b,0
+4,1
+d,0
+4,1
+53,0
+d,1
+1c0,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a87.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a87.dat
new file mode 100644
index 000000000..acc614d89
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a87.dat
@@ -0,0 +1,2104 @@
+! $XConsortium$
+100 90 32
+91,0
+3
+5a,0
+5,3
+2,2
+2,3
+5,2
+2,3
+2,2
+3
+4d,0
+2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+47,0
+3,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+42,0
+4,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+3d,0
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+2,2
+39,0
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+36,0
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+33,0
+3,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+0
+4,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+30,0
+2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+11,0
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+2e,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3,0
+2,2
+3
+2
+3
+2
+3
+d,0
+2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2b,0
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3,0
+2
+3
+4,2
+3
+2
+3
+2
+0
+2
+e,0
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+2
+28,0
+2
+3
+4,2
+3
+2
+3
+2,2
+3,3
+3,0
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+0
+5,3
+2,2
+3
+2
+8,0
+2,2
+5,3
+2,2
+3
+2
+3
+2,2
+26,0
+2
+3
+6,2
+3
+2
+3,3
+2,0
+4,3
+2
+3
+6,2
+3
+2
+3
+0
+7,3
+2
+3
+4,2
+6,0
+7,3
+2
+3
+4,2
+24,0
+2
+2,3
+6,2
+2,3
+2,2
+2,0
+3,3
+2,2
+2,3
+6,2
+2,3
+2
+0
+5,3
+2,2
+2,3
+6,2
+5,0
+4,3
+2,2
+2,3
+5,2
+22,0
+2,3
+3,2
+4,3
+3,2
+2,0
+5,2
+2,3
+3,2
+4,3
+3,2
+3
+0
+5,2
+2,3
+3,2
+4,3
+3,2
+3
+4,0
+2,2
+2,3
+3,2
+4,3
+2
+21,0
+b,2
+2,0
+2
+5,3
+d,2
+0
+5,3
+e,2
+3
+3,0
+3
+a,2
+20,0
+b,3
+2,0
+3,3
+3,2
+e,3
+0
+3
+3,2
+10,3
+2
+3,0
+b,3
+1e,0
+b,3
+0
+10,3
+7,0
+17,3
+2,0
+b,3
+1c,0
+3,3
+8,2
+0
+5,2
+5,3
+4,2
+5,0
+2
+5,0
+4,3
+e,2
+5,3
+2,0
+b,2
+1b,0
+3,2
+2,3
+2,2
+3,3
+0
+2,3
+2,2
+2,3
+5,2
+2,3
+6,0
+2,3
+2
+b,0
+2
+6,3
+2,2
+2,3
+5,2
+3
+2,0
+2
+6,3
+2,2
+3
+1a,0
+4,3
+2,2
+2,3
+2
+3
+2,0
+3
+2
+2,3
+2,2
+5,3
+2
+7,0
+3
+2
+3
+e,0
+3,3
+2
+2,3
+2,2
+5,3
+2,2
+3
+0
+2
+4,3
+2
+2,3
+2,2
+18,0
+7,3
+2
+3
+2
+2,0
+3,2
+3
+2
+6,3
+9,0
+2,2
+3
+11,0
+2
+3
+2
+9,3
+2
+3
+0
+5,2
+3
+2
+3,3
+17,0
+5,3
+2,2
+3
+2
+2,0
+3,2
+3
+2
+3
+2,2
+3,3
+a,0
+2
+3
+2
+13,0
+3
+2,2
+5,3
+2,2
+3
+3,0
+3,2
+3
+2
+3
+2,2
+3
+16,0
+3
+5,2
+3
+2
+3
+2
+0
+4,2
+3
+2
+3
+2
+3
+2,2
+b,0
+2
+3
+2
+14,0
+2
+3
+5,2
+3
+2
+4,0
+3,2
+3
+2
+3
+2
+3
+2,2
+15,0
+2,2
+3,3
+2,2
+3
+2
+2,0
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+c,0
+3
+2
+3
+16,0
+2
+3,3
+2,2
+6,0
+2
+3
+2
+3
+2
+3
+2,2
+3
+14,0
+3
+2
+5,3
+2
+3
+2,0
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+d,0
+3
+2
+3
+17,0
+4,3
+8,0
+3
+2
+3
+2
+3
+2
+3,3
+13,0
+3
+2
+5,3
+2
+3
+0
+8,3
+2
+3
+e,0
+3
+0
+3
+18,0
+2,3
+9,0
+3,3
+2
+3
+2
+3,3
+13,0
+3
+2
+5,3
+2
+2,0
+3
+2
+3
+2,2
+3
+2
+3
+2
+36,0
+2
+3
+2
+3
+2
+3,3
+12,0
+2
+3
+2,2
+3,3
+2,2
+2,0
+3
+2
+3
+2,2
+3
+2
+3
+2
+36,0
+2
+3
+2
+3
+2,2
+3,3
+11,0
+3
+2
+3
+5,2
+2,0
+3
+2
+3
+4,2
+3
+2
+1b,0
+3
+1c,0
+2
+3
+2
+3
+4,2
+10,0
+2
+3
+2,2
+5,3
+2,0
+3
+2
+3
+4,2
+3
+13,0
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+13,0
+2
+3
+2,2
+5,3
+f,0
+3
+2
+7,3
+0
+3
+2
+3
+6,2
+10,0
+3,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+3
+10,0
+3
+2
+7,3
+f,0
+2,3
+2,2
+4,3
+2,0
+2
+2,3
+5,2
+f,0
+5,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+3
+f,0
+3
+2,2
+5,3
+f,0
+2,2
+2,3
+4,2
+2,0
+3
+3,2
+4,3
+d,0
+2,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+3,2
+d,0
+2
+2,3
+5,2
+e,0
+5,2
+4,3
+0
+9,2
+c,0
+c,2
+5,3
+e,2
+4,3
+c,0
+3,2
+5,3
+2
+d,0
+6,3
+2,2
+2,0
+8,3
+c,0
+e,3
+3,2
+10,3
+3,2
+3
+c,0
+3,3
+3,2
+2,3
+d,0
+8,3
+2,0
+8,3
+c,0
+25,3
+c,0
+8,3
+d,0
+5,2
+3,3
+2,0
+8,2
+c,0
+d,2
+5,3
+0
+d,2
+5,3
+c,0
+2,2
+5,3
+2
+d,0
+3
+2,2
+2,3
+3,2
+2,0
+2,3
+2,2
+4,3
+b,0
+2,3
+2,2
+6,3
+2
+8,0
+3
+8,0
+3
+2,2
+2,3
+5,2
+c,0
+2,3
+5,2
+3
+d,0
+2
+2,3
+2,2
+3,3
+2,0
+2,2
+2,3
+2
+3,3
+17,0
+2,2
+5,3
+2,2
+2,3
+2
+3,3
+17,0
+2,2
+5,3
+2
+d,0
+2
+3
+2
+5,3
+2,0
+2,3
+2
+3
+4,2
+14,0
+2
+3
+2
+9,3
+2
+3
+6,2
+3
+14,0
+8,3
+d,0
+3
+2
+3
+2,2
+3,3
+2,0
+2,2
+3
+2
+3
+3,2
+12,0
+2,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2
+12,0
+2,2
+5,3
+2
+d,0
+3
+2
+3
+2
+3
+3,2
+0
+2
+3
+2
+3
+2
+3
+2,2
+11,0
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+2
+10,0
+2
+3
+5,2
+3
+c,0
+3
+2
+3
+2
+3
+2,2
+3
+3,0
+2
+3
+2
+3
+2
+3
+2,2
+e,0
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+2,3
+e,0
+3
+2,2
+3,3
+2,2
+d,0
+2
+3
+2
+3
+2
+3,3
+2,0
+2
+3
+2
+3
+2
+3
+2,2
+d,0
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+4,3
+d,0
+3
+2
+5,3
+2
+d,0
+2,3
+2
+3
+2
+3,3
+2,0
+2
+3
+2
+5,3
+c,0
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+c,0
+3
+2
+5,3
+2
+d,0
+2
+3
+2
+3
+2
+3,3
+2,0
+2
+3
+2
+3
+2
+3
+2,2
+b,0
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+0
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+b,0
+3
+2
+5,3
+2
+d,0
+2
+3
+2
+3
+2,2
+2,3
+2,0
+2
+3
+2
+3
+2
+3
+2,2
+a,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+d,0
+2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+a,0
+3
+2,2
+3,3
+2,2
+d,0
+3
+2
+3
+2
+3
+3,2
+2,0
+3
+2
+3
+2
+3
+3,2
+9,0
+2,2
+3
+2
+3
+2
+3
+4,2
+3
+13,0
+2
+3
+2
+3
+5,2
+3
+2
+3
+9,0
+2
+3
+5,2
+3
+d,0
+3
+2
+3
+2,2
+3,3
+2,0
+2,2
+3
+2
+3
+3,2
+9,0
+2,3
+2,2
+3
+2
+3
+4,2
+15,0
+3
+2,2
+5,3
+2,2
+3
+9,0
+2,2
+5,3
+2
+d,0
+2
+3
+2
+5,3
+2,0
+2,3
+2
+3
+5,2
+7,0
+5,3
+2
+3
+3,2
+19,0
+8,3
+2
+3
+8,0
+8,3
+d,0
+2
+2,3
+2,2
+3,3
+3,0
+2
+2,3
+5,2
+7,0
+3,3
+2,2
+2,3
+2,2
+1b,0
+5,3
+2,2
+2,3
+8,0
+2,2
+5,3
+2
+d,0
+3,2
+2,3
+4,2
+2,0
+3
+3,2
+4,3
+6,0
+4,2
+2,3
+3,2
+1d,0
+4,2
+2,3
+3,2
+6,0
+2
+2,3
+5,2
+3
+e,0
+4,2
+4,3
+2,0
+9,2
+5,0
+4,3
+5,2
+1d,0
+4,3
+5,2
+6,0
+3,2
+5,3
+f,0
+5,3
+3,2
+3,0
+8,3
+5,0
+3,2
+5,3
+1f,0
+2,2
+6,3
+6,0
+4,3
+3,2
+3
+f,0
+9,3
+2,0
+9,3
+4,0
+8,3
+1f,0
+8,3
+5,0
+9,3
+f,0
+4,2
+5,3
+3,0
+9,2
+3,0
+4,3
+4,2
+1f,0
+3,3
+5,2
+5,0
+4,2
+5,3
+10,0
+2
+2,3
+5,2
+3,0
+2
+6,3
+2
+3,0
+5,2
+2,3
+2
+20,0
+3,2
+2,3
+2,2
+3
+5,0
+2,2
+2,3
+4,2
+11,0
+3
+2,2
+5,3
+2
+2,0
+3
+2
+4,3
+2
+5,0
+4,3
+2,2
+2,3
+1f,0
+3,3
+2,2
+2,3
+2
+4,0
+2
+2,3
+2,2
+4,3
+12,0
+8,3
+3,0
+4,2
+7,0
+6,3
+2
+3
+1f,0
+5,3
+2
+3
+2
+4,0
+2
+3
+2
+5,3
+13,0
+2,2
+5,3
+2,2
+3,0
+2,2
+8,0
+4,3
+2,2
+3
+2
+1f,0
+3,3
+2,2
+3
+2
+3
+3,0
+2
+3
+2
+3
+2,2
+3,3
+13,0
+2
+3
+5,2
+3
+2
+d,0
+4,2
+3
+2
+3
+2
+3
+1d,0
+4,2
+3
+2
+3
+2
+3
+3,0
+2
+3
+2
+3
+2
+3
+3,2
+14,0
+2,2
+3,3
+2,2
+3
+2
+c,0
+3,3
+2,2
+3
+2
+3
+2
+1d,0
+3,3
+2,2
+3
+2
+3
+2
+2,0
+2
+3
+2
+3
+2
+3
+2,2
+3
+15,0
+2
+5,3
+2
+3
+2
+3
+c,0
+3,3
+2
+3
+2
+3
+2
+3
+1b,0
+5,3
+2
+3
+2
+3
+2,0
+2,2
+3
+2
+3
+2
+3
+2
+2,3
+16,0
+5,3
+2
+3
+2
+3
+c,0
+3,3
+2
+3
+2
+4,3
+19,0
+2
+5,3
+2
+3
+2
+3
+2,0
+5,3
+2
+3
+2
+3
+17,0
+5,3
+2
+3
+2
+3
+2
+c,0
+2,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+15,0
+2
+3
+2
+5,3
+2
+3
+2
+2,0
+3
+2,2
+3
+2
+3
+2
+3
+2
+3
+18,0
+3,3
+2,2
+3
+2
+3
+2
+3
+b,0
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+13,0
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+0
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+1a,0
+3,2
+3
+2
+3
+2
+3
+2,2
+b,0
+2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+d,0
+2,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+0
+2
+3
+4,2
+3
+2
+3
+2
+1b,0
+3,3
+2,2
+3
+2
+3
+3,2
+b,0
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2
+0
+3
+2
+3
+4,2
+3
+2
+3
+2
+1c,0
+4,3
+2
+3
+5,2
+b,0
+3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+7,3
+0
+3
+2
+3
+6,2
+3
+2
+1e,0
+3
+2,2
+2,3
+6,2
+b,0
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+4,3
+0
+2,2
+2,3
+6,2
+3
+20,0
+2,3
+3,2
+4,3
+2,2
+b,0
+2,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+3,2
+0
+2
+2,3
+3,2
+4,3
+2
+21,0
+c,2
+c,0
+9,2
+5,3
+e,2
+3
+2,0
+2,3
+a,2
+22,0
+d,3
+c,0
+8,3
+3,2
+e,3
+2,0
+3,2
+a,3
+24,0
+d,3
+d,0
+15,3
+3,0
+d,3
+26,0
+b,2
+3,3
+e,0
+2,2
+5,3
+8,2
+4,0
+2,2
+5,3
+7,2
+28,0
+6,3
+2,2
+2,3
+5,2
+1d,0
+2,2
+2,3
+5,2
+2,3
+2,2
+2,3
+2b,0
+3,3
+2
+2,3
+2,2
+5,3
+2,2
+3
+17,0
+2,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2e,0
+3,2
+3
+2
+9,3
+2
+3
+2,2
+11,0
+6,2
+3
+2
+9,3
+2
+30,0
+2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+33,0
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+36,0
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+39,0
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+2,3
+3d,0
+4,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+42,0
+3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+47,0
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+4d,0
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+91,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a88.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a88.dat
new file mode 100644
index 000000000..059d3d20a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a88.dat
@@ -0,0 +1,1311 @@
+! $XConsortium$
+100 90 32
+91,0
+3
+5a,0
+6,3
+6,2
+4,3
+2,2
+3
+4d,0
+4,3
+6,2
+9,3
+2
+7,3
+47,0
+3,3
+3,2
+8,3
+4,2
+9,3
+3,2
+3
+42,0
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+2
+3d,0
+6,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+3,3
+39,0
+3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+3,2
+36,0
+9,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+33,0
+2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+0
+2,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+2,3
+30,0
+3
+b,2
+6,3
+11,0
+2
+d,3
+4,2
+2e,0
+6,2
+a,3
+3,0
+7,2
+d,0
+3,3
+c,2
+3
+2b,0
+e,3
+2
+3,0
+2,2
+8,3
+0
+3
+e,0
+f,3
+28,0
+3,3
+6,2
+4,3
+2
+3,0
+a,3
+2,2
+0
+3,2
+4,3
+2,2
+8,0
+4,3
+6,2
+4,3
+26,0
+4,2
+9,3
+2,0
+7,3
+6,2
+2,3
+0
+6,3
+2
+6,3
+6,0
+2,2
+9,3
+2
+3
+24,0
+7,3
+4,2
+2,3
+2,0
+5,3
+3,2
+8,3
+0
+3,2
+9,3
+3,2
+5,0
+3,3
+4,2
+6,3
+22,0
+3,3
+5,2
+4,3
+2,0
+2
+4,3
+2,2
+6,3
+5,2
+0
+3,3
+3,2
+4,3
+2,2
+6,3
+4,0
+2
+4,3
+3,2
+4,3
+21,0
+3,2
+6,3
+2,2
+2,0
+6,2
+5,3
+3,2
+5,3
+0
+a,2
+5,3
+3,2
+2,3
+3,0
+3
+a,2
+20,0
+2
+5,3
+4,2
+3
+2,0
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+3,2
+0
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+2
+3,0
+3,3
+2
+3
+2
+3
+2
+3
+2,2
+1e,0
+3
+6,2
+4,3
+0
+9,2
+4,3
+3,2
+7,0
+a,2
+4,3
+6,2
+3,3
+2,0
+9,2
+2,3
+1c,0
+7,3
+4,2
+0
+3,3
+2
+3
+2
+3
+2
+3
+2
+4,3
+5,0
+2
+5,0
+2,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+2,0
+3
+2
+3
+2
+3
+2
+3
+2
+3,3
+1b,0
+a,3
+0
+b,2
+2,3
+6,0
+3,3
+b,0
+2,2
+d,3
+2,2
+2,0
+7,2
+3,3
+1a,0
+4,3
+6,2
+2,0
+4,2
+8,3
+7,0
+3,2
+e,0
+4,3
+c,2
+0
+a,3
+18,0
+5,2
+5,3
+2,0
+b,3
+9,0
+3,3
+11,0
+2
+d,3
+0
+4,3
+6,2
+17,0
+9,3
+2,0
+6,2
+4,3
+2
+a,0
+3,3
+13,0
+5,3
+6,2
+3,0
+3
+2,2
+6,3
+16,0
+6,3
+4,2
+0
+2
+9,3
+2
+b,0
+3,2
+14,0
+4,2
+5,3
+4,0
+2
+8,3
+2
+15,0
+3,3
+3,2
+3,3
+2,0
+3,3
+4,2
+3,3
+c,0
+3,3
+16,0
+4,3
+2,2
+6,0
+5,3
+3,2
+3
+14,0
+2,3
+2,2
+5,3
+2,0
+4,2
+4,3
+2,2
+d,0
+3,2
+17,0
+3,2
+3
+8,0
+2,3
+2,2
+5,3
+13,0
+2,2
+5,3
+2,2
+0
+6,3
+4,2
+e,0
+3
+0
+3
+18,0
+2,3
+9,0
+2,2
+5,3
+2,2
+13,0
+3
+6,2
+3
+2,0
+2,3
+4,2
+3,3
+36,0
+6,2
+2,3
+12,0
+3,2
+4,3
+2,2
+2,0
+2,2
+4,3
+3,2
+36,0
+2
+4,3
+4,2
+11,0
+2
+3
+2
+5,3
+2,0
+2,3
+5,2
+2,3
+1b,0
+2
+1c,0
+8,3
+10,0
+4,2
+5,3
+2,0
+6,3
+2,2
+13,0
+3,3
+b,2
+5,3
+13,0
+9,3
+f,0
+9,3
+0
+9,2
+10,0
+a,2
+c,3
+3,2
+10,0
+5,3
+4,2
+f,0
+3,3
+5,2
+2,0
+8,3
+f,0
+12,3
+6,2
+5,3
+f,0
+4,2
+4,3
+f,0
+3
+2,2
+5,3
+2,0
+5,3
+3,2
+d,0
+8,3
+6,2
+4,3
+2,2
+c,3
+2
+d,0
+8,3
+e,0
+3
+2
+7,3
+0
+6,2
+3,3
+c,0
+3,3
+6,2
+9,3
+2
+8,3
+6,2
+2,3
+c,0
+4,3
+5,2
+d,0
+7,3
+2
+2,0
+8,3
+c,0
+3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+2
+c,0
+3,2
+5,3
+d,0
+2
+4,3
+2,2
+3
+2,0
+3,3
+5,2
+c,0
+2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+3
+c,0
+6,3
+2,2
+d,0
+5,2
+3,3
+2,0
+3,2
+5,3
+c,0
+4,3
+3,2
+6,3
+5,2
+0
+4,2
+5,3
+3,2
+6,3
+c,0
+3,3
+3,2
+2,3
+d,0
+2
+3
+2
+3
+4,2
+2,0
+5,3
+3,2
+b,0
+5,2
+5,3
+2
+8,0
+2
+8,0
+2
+5,3
+4,2
+c,0
+3,2
+5,3
+d,0
+5,2
+3,3
+2,0
+5,2
+3,3
+17,0
+2,3
+a,2
+3,3
+17,0
+2,3
+6,2
+d,0
+2
+3
+2
+3
+2
+3,3
+2,0
+4,3
+4,2
+14,0
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+6,3
+14,0
+7,3
+2
+d,0
+5,2
+3,3
+2,0
+8,3
+12,0
+6,3
+b,2
+8,3
+12,0
+8,3
+d,0
+8,3
+0
+3
+7,2
+11,0
+c,2
+c,3
+5,2
+10,0
+3,3
+5,2
+c,0
+5,3
+3,2
+3,0
+8,3
+e,0
+2,2
+12,3
+6,2
+7,3
+e,0
+3,2
+5,3
+d,0
+2,3
+2,2
+4,3
+2,0
+6,3
+2,2
+d,0
+9,3
+6,2
+4,3
+2,2
+c,3
+2,2
+d,0
+8,3
+d,0
+3
+2
+6,3
+2,0
+6,2
+2,3
+c,0
+4,3
+6,2
+9,3
+2
+8,3
+6,2
+3,3
+c,0
+3,3
+5,2
+d,0
+7,3
+2
+2,0
+8,3
+b,0
+2,3
+3,2
+8,3
+4,2
+2,3
+0
+6,3
+3,2
+8,3
+2,2
+b,0
+3,2
+5,3
+d,0
+2
+4,3
+2,2
+3
+2,0
+3,3
+5,2
+a,0
+3
+2,2
+6,3
+5,2
+d,0
+6,3
+5,2
+3,3
+a,0
+6,3
+2,2
+d,0
+5,2
+3,3
+2,0
+3,2
+5,3
+9,0
+2,2
+5,3
+3,2
+2,3
+13,0
+3,2
+6,3
+3,2
+9,0
+3,3
+3,2
+2,3
+d,0
+2
+3
+2
+3
+4,2
+2,0
+5,3
+3,2
+9,0
+3
+6,2
+4,3
+15,0
+4,3
+4,2
+3,3
+9,0
+3,2
+5,3
+d,0
+5,2
+3,3
+2,0
+5,2
+4,3
+7,0
+3,2
+4,3
+3,2
+19,0
+2,2
+4,3
+4,2
+8,0
+2,3
+6,2
+d,0
+2
+3
+2
+3
+2
+3,3
+3,0
+3,3
+5,2
+7,0
+2
+3
+2
+6,3
+1b,0
+5,2
+3,3
+2
+8,0
+7,3
+2
+d,0
+5,2
+4,3
+2,0
+7,3
+2
+6,0
+4,2
+5,3
+1d,0
+3,3
+6,2
+6,0
+9,3
+e,0
+8,3
+2,0
+9,2
+5,0
+9,3
+1d,0
+7,2
+2,3
+6,0
+4,3
+4,2
+f,0
+3,3
+5,2
+3,0
+8,3
+5,0
+3,3
+5,2
+1f,0
+8,3
+6,0
+4,2
+4,3
+f,0
+3
+2,2
+6,3
+2,0
+4,3
+5,2
+4,0
+3
+2,2
+5,3
+1f,0
+6,2
+2,3
+5,0
+9,3
+f,0
+2
+8,3
+3,0
+3,2
+6,3
+3,0
+2
+7,3
+1f,0
+8,3
+5,0
+5,3
+4,2
+10,0
+5,3
+3,2
+3,0
+5,3
+3,2
+3,0
+7,3
+2
+20,0
+2,3
+4,2
+2,3
+5,0
+2,3
+3,2
+3,3
+11,0
+3,3
+2,2
+4,3
+2,0
+5,2
+2,3
+5,0
+4,3
+2,2
+2,3
+1f,0
+2,2
+4,3
+2,2
+4,0
+3
+2,2
+6,3
+12,0
+2,2
+5,3
+2
+3,0
+4,3
+7,0
+4,2
+4,3
+1f,0
+3,3
+5,2
+4,0
+2
+5,3
+2,2
+13,0
+3
+6,2
+2,3
+3,0
+2,2
+8,0
+3
+2
+3
+5,2
+1f,0
+3,2
+3,3
+2
+3
+3,0
+3
+6,2
+2,3
+13,0
+2,2
+4,3
+3,2
+d,0
+4,2
+4,3
+2
+1d,0
+4,3
+5,2
+3,0
+2,2
+4,3
+3,2
+14,0
+2
+8,3
+c,0
+3
+2
+3
+2
+5,3
+1d,0
+4,2
+3,3
+2
+3
+2,0
+2
+3
+2
+6,3
+15,0
+2
+9,3
+c,0
+3,2
+6,3
+1b,0
+4,3
+5,2
+2,0
+4,2
+6,3
+16,0
+5,3
+4,2
+c,0
+8,3
+2,2
+19,0
+9,2
+3
+2,0
+9,3
+17,0
+5,2
+5,3
+c,0
+3
+6,2
+4,3
+15,0
+b,3
+2,0
+4,3
+6,2
+18,0
+a,3
+b,0
+2
+b,3
+13,0
+6,3
+6,2
+0
+3,3
+2,2
+5,3
+1a,0
+3,3
+6,2
+3
+b,0
+6,3
+6,2
+2,3
+d,0
+3,3
+6,2
+5,3
+0
+3,3
+2
+6,3
+1b,0
+3,2
+8,3
+b,0
+2,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+2,2
+0
+2
+9,3
+2
+1c,0
+5,3
+5,2
+3
+b,0
+2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+3
+0
+2,3
+3,2
+4,3
+2,2
+1e,0
+3
+3,2
+6,3
+2
+b,0
+3,3
+3,2
+6,3
+a,2
+5,3
+3,2
+5,3
+0
+a,2
+3
+20,0
+5,3
+4,2
+2,3
+b,0
+2,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+2,2
+0
+2
+3,3
+2
+3
+2
+3
+2
+3
+2
+21,0
+5,2
+4,3
+3,2
+c,0
+5,2
+4,3
+a,2
+4,3
+6,2
+2,0
+2,3
+a,2
+22,0
+3,3
+5,2
+3,3
+2
+3
+c,0
+2,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+8,3
+2,0
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+24,0
+6,3
+7,2
+d,0
+4,3
+b,2
+6,3
+3,0
+4,3
+9,2
+26,0
+9,2
+5,3
+e,0
+5,2
+a,3
+4,0
+a,2
+4,3
+28,0
+e,3
+2
+1d,0
+f,3
+2b,0
+6,2
+4,3
+2,2
+4,3
+17,0
+9,3
+6,2
+3
+2e,0
+8,3
+2
+8,3
+2
+11,0
+6,3
+6,2
+6,3
+30,0
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+3,2
+33,0
+2,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+3
+36,0
+8,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+5,3
+39,0
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+2
+3d,0
+4,2
+4,3
+6,2
+4,3
+a,2
+4,3
+5,2
+42,0
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+6,3
+47,0
+c,3
+b,2
+4,3
+4d,0
+c,2
+7,3
+91,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a89.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a89.dat
new file mode 100644
index 000000000..8d3ca0511
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a89.dat
@@ -0,0 +1,1055 @@
+! $XConsortium$
+100 90 32
+91,0
+1
+5a,0
+6,1
+6,0
+4,1
+2,0
+1
+4d,0
+4,1
+6,0
+9,1
+0
+7,1
+47,0
+3,1
+3,0
+8,1
+4,0
+9,1
+3,0
+1
+42,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+44,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+3,1
+39,0
+1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+42,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+6,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+2,1
+30,0
+1
+b,0
+6,1
+12,0
+d,1
+38,0
+a,1
+17,0
+3,1
+c,0
+1
+2b,0
+e,1
+6,0
+8,1
+0
+1
+e,0
+f,1
+28,0
+3,1
+6,0
+4,1
+4,0
+a,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+2a,0
+9,1
+2,0
+7,1
+6,0
+2,1
+0
+6,1
+0
+6,1
+8,0
+9,1
+0
+1
+24,0
+7,1
+4,0
+2,1
+2,0
+5,1
+3,0
+8,1
+4,0
+9,1
+8,0
+3,1
+4,0
+6,1
+22,0
+3,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+6,0
+3,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+24,0
+6,1
+a,0
+5,1
+3,0
+5,1
+b,0
+5,1
+3,0
+2,1
+3,0
+1
+2b,0
+5,1
+4,0
+1
+3,0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+20,0
+1
+6,0
+4,1
+a,0
+4,1
+14,0
+4,1
+6,0
+3,1
+b,0
+2,1
+1c,0
+7,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+b,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+7,0
+1
+0
+1
+0
+1
+0
+1
+0
+3,1
+1b,0
+a,1
+c,0
+2,1
+6,0
+3,1
+d,0
+d,1
+b,0
+3,1
+1a,0
+4,1
+c,0
+8,1
+18,0
+4,1
+d,0
+a,1
+1d,0
+5,1
+2,0
+b,1
+9,0
+3,1
+12,0
+d,1
+0
+4,1
+1d,0
+9,1
+8,0
+4,1
+b,0
+3,1
+13,0
+5,1
+9,0
+1
+2,0
+6,1
+16,0
+6,1
+6,0
+9,1
+27,0
+5,1
+5,0
+8,1
+16,0
+3,1
+3,0
+3,1
+2,0
+3,1
+4,0
+3,1
+c,0
+3,1
+16,0
+4,1
+8,0
+5,1
+3,0
+1
+14,0
+2,1
+2,0
+5,1
+6,0
+4,1
+2c,0
+1
+8,0
+2,1
+2,0
+5,1
+15,0
+5,1
+3,0
+6,1
+12,0
+1
+0
+1
+18,0
+2,1
+b,0
+5,1
+15,0
+1
+6,0
+1
+2,0
+2,1
+4,0
+3,1
+3c,0
+2,1
+15,0
+4,1
+6,0
+4,1
+3a,0
+4,1
+16,0
+1
+0
+5,1
+2,0
+2,1
+5,0
+2,1
+38,0
+8,1
+14,0
+5,1
+2,0
+6,1
+15,0
+3,1
+b,0
+5,1
+13,0
+9,1
+f,0
+9,1
+24,0
+c,1
+13,0
+5,1
+13,0
+3,1
+7,0
+8,1
+f,0
+12,1
+6,0
+5,1
+13,0
+4,1
+f,0
+1
+2,0
+5,1
+2,0
+5,1
+10,0
+8,1
+6,0
+4,1
+2,0
+c,1
+e,0
+8,1
+e,0
+1
+0
+7,1
+7,0
+3,1
+c,0
+3,1
+6,0
+9,1
+0
+8,1
+6,0
+2,1
+c,0
+4,1
+12,0
+7,1
+3,0
+8,1
+c,0
+1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+10,0
+5,1
+e,0
+4,1
+2,0
+1
+2,0
+3,1
+12,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+1
+c,0
+6,1
+14,0
+3,1
+5,0
+5,1
+c,0
+4,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+c,0
+3,1
+3,0
+2,1
+e,0
+1
+0
+1
+6,0
+5,1
+13,0
+5,1
+13,0
+5,1
+13,0
+5,1
+12,0
+3,1
+7,0
+3,1
+17,0
+2,1
+a,0
+3,1
+17,0
+2,1
+14,0
+1
+0
+1
+0
+3,1
+2,0
+4,1
+1d,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+6,1
+14,0
+7,1
+13,0
+3,1
+2,0
+8,1
+12,0
+6,1
+b,0
+8,1
+12,0
+8,1
+d,0
+8,1
+0
+1
+24,0
+c,1
+15,0
+3,1
+11,0
+5,1
+6,0
+8,1
+10,0
+12,1
+6,0
+7,1
+11,0
+5,1
+d,0
+2,1
+2,0
+4,1
+2,0
+6,1
+f,0
+9,1
+6,0
+4,1
+2,0
+c,1
+f,0
+8,1
+d,0
+1
+0
+6,1
+8,0
+2,1
+c,0
+4,1
+6,0
+9,1
+0
+8,1
+6,0
+3,1
+c,0
+3,1
+12,0
+7,1
+3,0
+8,1
+b,0
+2,1
+3,0
+8,1
+4,0
+2,1
+0
+6,1
+3,0
+8,1
+10,0
+5,1
+e,0
+4,1
+2,0
+1
+2,0
+3,1
+f,0
+1
+2,0
+6,1
+12,0
+6,1
+5,0
+3,1
+a,0
+6,1
+14,0
+3,1
+5,0
+5,1
+b,0
+5,1
+3,0
+2,1
+16,0
+6,1
+c,0
+3,1
+3,0
+2,1
+e,0
+1
+0
+1
+6,0
+5,1
+c,0
+1
+6,0
+4,1
+15,0
+4,1
+4,0
+3,1
+c,0
+5,1
+12,0
+3,1
+7,0
+4,1
+a,0
+4,1
+1e,0
+4,1
+c,0
+2,1
+14,0
+1
+0
+1
+0
+3,1
+3,0
+3,1
+d,0
+1
+0
+6,1
+20,0
+3,1
+9,0
+7,1
+13,0
+4,1
+2,0
+7,1
+b,0
+5,1
+1d,0
+3,1
+c,0
+9,1
+e,0
+8,1
+10,0
+9,1
+24,0
+2,1
+6,0
+4,1
+13,0
+3,1
+8,0
+8,1
+5,0
+3,1
+24,0
+8,1
+a,0
+4,1
+f,0
+1
+2,0
+6,1
+2,0
+4,1
+9,0
+1
+2,0
+5,1
+25,0
+2,1
+5,0
+9,1
+10,0
+8,1
+6,0
+6,1
+4,0
+7,1
+1f,0
+8,1
+5,0
+5,1
+14,0
+5,1
+6,0
+5,1
+6,0
+7,1
+21,0
+2,1
+4,0
+2,1
+5,0
+2,1
+3,0
+3,1
+11,0
+3,1
+2,0
+4,1
+7,0
+2,1
+5,0
+4,1
+2,0
+2,1
+21,0
+4,1
+6,0
+1
+2,0
+6,1
+14,0
+5,1
+4,0
+4,1
+b,0
+4,1
+1f,0
+3,1
+a,0
+5,1
+15,0
+1
+6,0
+2,1
+d,0
+1
+0
+1
+27,0
+3,1
+0
+1
+3,0
+1
+6,0
+2,1
+15,0
+4,1
+14,0
+4,1
+1e,0
+4,1
+a,0
+4,1
+18,0
+8,1
+c,0
+1
+0
+1
+0
+5,1
+21,0
+3,1
+0
+1
+3,0
+1
+0
+6,1
+16,0
+9,1
+f,0
+6,1
+1b,0
+4,1
+b,0
+6,1
+16,0
+5,1
+10,0
+8,1
+24,0
+1
+2,0
+9,1
+1c,0
+5,1
+c,0
+1
+6,0
+4,1
+15,0
+b,1
+2,0
+4,1
+1e,0
+a,1
+c,0
+b,1
+13,0
+6,1
+7,0
+3,1
+2,0
+5,1
+1a,0
+3,1
+6,0
+1
+b,0
+6,1
+6,0
+2,1
+d,0
+3,1
+6,0
+5,1
+0
+3,1
+0
+6,1
+1e,0
+8,1
+b,0
+2,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+1d,0
+5,1
+5,0
+1
+c,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+1
+0
+2,1
+3,0
+4,1
+20,0
+1
+3,0
+6,1
+c,0
+3,1
+3,0
+6,1
+a,0
+5,1
+3,0
+5,1
+b,0
+1
+20,0
+5,1
+4,0
+2,1
+d,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+27,0
+4,1
+14,0
+4,1
+a,0
+4,1
+8,0
+2,1
+2c,0
+3,1
+5,0
+3,1
+0
+1
+c,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+8,1
+6,0
+3,1
+0
+1
+0
+1
+0
+1
+24,0
+6,1
+14,0
+4,1
+b,0
+6,1
+3,0
+4,1
+38,0
+5,1
+13,0
+a,1
+e,0
+4,1
+28,0
+e,1
+1e,0
+f,1
+31,0
+4,1
+2,0
+4,1
+17,0
+9,1
+6,0
+1
+2e,0
+8,1
+0
+8,1
+12,0
+6,1
+6,0
+6,1
+34,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+36,0
+2,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+1
+3e,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+5,1
+39,0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+42,0
+4,1
+6,0
+4,1
+a,0
+4,1
+48,0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+6,1
+47,0
+c,1
+b,0
+4,1
+59,0
+7,1
+91,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a93.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a93.dat
new file mode 100644
index 000000000..8bc9b5938
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a93.dat
@@ -0,0 +1,1127 @@
+! $XConsortium$
+100 90 32
+2db,0
+2,1
+60,0
+3,1
+5f,0
+2,1
+60,0
+2,1
+60,0
+2,1
+61,0
+2,1
+61,0
+1
+61,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+2,1
+d,0
+2,1
+52,0
+2,1
+d,0
+2,1
+52,0
+2,1
+c,0
+2,1
+54,0
+1
+c,0
+1
+55,0
+1
+b,0
+2,1
+55,0
+1
+b,0
+2,1
+55,0
+2,1
+a,0
+2,1
+56,0
+1
+a,0
+2,1
+56,0
+1
+b,0
+1
+57,0
+1
+a,0
+1
+57,0
+1
+a,0
+1
+58,0
+1
+a,0
+1
+57,0
+1
+a,0
+1
+17c0,0
+100 90 32
+bc0,0
+1
+9,0
+2,1
+57,0
+2,1
+9,0
+1
+58,0
+1
+9,0
+2,1
+58,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+58,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+58,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+a,0
+1
+58,0
+1
+a,0
+1
+59,0
+1
+9,0
+1
+f,0
+1
+49,0
+1
+9,0
+1
+f,0
+1
+49,0
+1
+a,0
+1
+d,0
+1
+4a,0
+1
+a,0
+1
+d,0
+1
+4b,0
+1
+9,0
+2,1
+b,0
+1
+4c,0
+1
+a,0
+1
+b,0
+1
+4c,0
+1
+a,0
+2,1
+a,0
+1
+4c,0
+2,1
+a,0
+1
+a,0
+1
+bfd,0
+100 90 32
+1778,0
+1
+b,0
+1
+9,0
+1
+4d,0
+1
+15,0
+1
+4e,0
+1
+14,0
+1
+4e,0
+1
+15,0
+1
+4e,0
+1
+14,0
+1
+4e,0
+1
+15,0
+1
+4e,0
+1
+14,0
+1
+4e,0
+2,1
+63,0
+1
+64,0
+1
+64,0
+1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+3,1
+63,0
+2,1
+29b,0
+100 90 32
+21b,0
+d,1
+53,0
+4,1
+d,0
+4,1
+4d,0
+2,1
+15,0
+4,1
+63,0
+3,1
+64,0
+2,1
+64,0
+2,1
+176,0
+4,1
+5c,0
+4,1
+5d,0
+3,1
+9,0
+6,1
+52,0
+1
+11,0
+5,1
+64,0
+3,1
+63,0
+3,1
+64,0
+2,1
+64,0
+1
+64,0
+2,1
+ad,0
+3,1
+199e,0
+100 90 32
+dd8,0
+d,1
+53,0
+4,1
+d,0
+4,1
+4c,0
+3,1
+15,0
+3,1
+48,0
+2,1
+19,0
+2,1
+46,0
+1
+1d,0
+1
+1df,0
+b,1
+56,0
+3,1
+b,0
+3,1
+50,0
+3,1
+11,0
+3,1
+4c,0
+2,1
+15,0
+2,1
+49,0
+2,1
+19,0
+2,1
+46,0
+1
+1d,0
+1
+44,0
+1
+62,0
+1
+f1a,0
+100 90 32
+1a4d,0
+1
+64,0
+1
+64,0
+1
+1d,0
+1
+46,0
+2,1
+19,0
+2,1
+49,0
+2,1
+15,0
+2,1
+4c,0
+3,1
+11,0
+3,1
+50,0
+3,1
+b,0
+3,1
+56,0
+b,1
+260,0
+2,1
+60,0
+2,1
+5f,0
+3,1
+47,0
+2,1
+15,0
+4,1
+4b,0
+4,1
+d,0
+4,1
+53,0
+d,1
+1c0,0
+100 90 32
+48e,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+1
+64,0
+1
+64,0
+1
+57,0
+1
+b,0
+2,1
+57,0
+2,1
+a,0
+1
+58,0
+2,1
+a,0
+1
+58,0
+1
+a,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+1781,0
+100 90 32
+c0a,0
+1
+63,0
+2,1
+63,0
+1
+63,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+50,0
+1
+12,0
+1
+51,0
+1
+11,0
+1
+52,0
+1
+f,0
+1
+53,0
+1
+f,0
+1
+54,0
+1
+e,0
+1
+54,0
+1
+e,0
+1
+55,0
+1
+c,0
+1
+56,0
+1
+c,0
+1
+56,0
+1
+c,0
+1
+56,0
+1
+b,0
+2,1
+bc8,0
+100 90 32
+17b6,0
+1
+b,0
+1
+57,0
+1
+b,0
+1
+57,0
+1
+a,0
+1
+57,0
+1
+b,0
+1
+57,0
+1
+a,0
+1
+57,0
+1
+b,0
+1
+57,0
+1
+a,0
+1
+57,0
+1
+a,0
+2,1
+56,0
+1
+b,0
+1
+62,0
+1
+62,0
+1
+62,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+1
+61,0
+2,1
+61,0
+2,1
+408,0
+100 90 32
+bc0,0
+1
+9,0
+2,1
+57,0
+2,1
+9,0
+1
+58,0
+1
+9,0
+2,1
+58,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+58,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+58,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+9,0
+1
+59,0
+1
+a,0
+1
+58,0
+1
+a,0
+1
+59,0
+1
+9,0
+1
+f,0
+1
+49,0
+1
+9,0
+1
+f,0
+1
+49,0
+1
+a,0
+1
+d,0
+1
+4a,0
+1
+a,0
+1
+d,0
+1
+4b,0
+1
+9,0
+2,1
+b,0
+1
+4c,0
+1
+a,0
+1
+b,0
+1
+4c,0
+1
+a,0
+2,1
+a,0
+1
+4c,0
+2,1
+a,0
+1
+a,0
+1
+bfd,0
+100 90 32
+1778,0
+1
+b,0
+1
+9,0
+1
+4d,0
+1
+15,0
+1
+4e,0
+1
+14,0
+1
+4e,0
+1
+15,0
+1
+4e,0
+1
+14,0
+1
+4e,0
+1
+15,0
+1
+4e,0
+1
+14,0
+1
+4e,0
+2,1
+63,0
+1
+64,0
+1
+64,0
+1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+3,1
+63,0
+2,1
+29b,0
+100 90 32
+21b,0
+d,1
+53,0
+4,1
+d,0
+4,1
+4d,0
+2,1
+15,0
+4,1
+63,0
+3,1
+64,0
+2,1
+64,0
+2,1
+176,0
+4,1
+5c,0
+4,1
+5d,0
+3,1
+9,0
+6,1
+52,0
+1
+11,0
+5,1
+64,0
+3,1
+63,0
+3,1
+64,0
+2,1
+64,0
+1
+64,0
+2,1
+ad,0
+3,1
+199e,0
+100 90 32
+dd8,0
+d,1
+53,0
+4,1
+d,0
+4,1
+4c,0
+3,1
+15,0
+3,1
+48,0
+2,1
+19,0
+2,1
+46,0
+1
+1d,0
+1
+1df,0
+b,1
+56,0
+3,1
+b,0
+3,1
+50,0
+3,1
+11,0
+3,1
+4c,0
+2,1
+15,0
+2,1
+49,0
+2,1
+19,0
+2,1
+46,0
+1
+1d,0
+1
+44,0
+1
+62,0
+1
+f1a,0
+100 90 32
+1a4d,0
+1
+64,0
+1
+64,0
+1
+1d,0
+1
+46,0
+2,1
+19,0
+2,1
+49,0
+2,1
+15,0
+2,1
+4c,0
+3,1
+11,0
+3,1
+50,0
+3,1
+b,0
+3,1
+56,0
+b,1
+260,0
+2,1
+60,0
+2,1
+5f,0
+3,1
+47,0
+2,1
+15,0
+4,1
+4b,0
+4,1
+d,0
+4,1
+53,0
+d,1
+1c0,0
+100 90 32
+48e,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+2,1
+63,0
+1
+64,0
+1
+64,0
+1
+57,0
+1
+b,0
+2,1
+57,0
+2,1
+a,0
+1
+58,0
+2,1
+a,0
+1
+58,0
+1
+a,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+1781,0
+100 90 32
+c0a,0
+1
+63,0
+2,1
+63,0
+1
+63,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+50,0
+1
+12,0
+1
+51,0
+1
+11,0
+1
+52,0
+1
+f,0
+1
+53,0
+1
+f,0
+1
+54,0
+1
+e,0
+1
+54,0
+1
+e,0
+1
+55,0
+1
+c,0
+1
+56,0
+1
+c,0
+1
+56,0
+1
+c,0
+1
+56,0
+1
+b,0
+2,1
+bc8,0
+100 90 32
+17b6,0
+1
+b,0
+1
+57,0
+1
+b,0
+1
+57,0
+1
+a,0
+1
+57,0
+1
+b,0
+1
+57,0
+1
+a,0
+1
+57,0
+1
+b,0
+1
+57,0
+1
+a,0
+1
+57,0
+1
+a,0
+2,1
+56,0
+1
+b,0
+1
+62,0
+1
+62,0
+1
+62,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+2,1
+61,0
+1
+61,0
+2,1
+61,0
+2,1
+408,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a96.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a96.dat
new file mode 100644
index 000000000..7b4abefc0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a96.dat
@@ -0,0 +1,385 @@
+! $XConsortium$
+100 90 32
+220,0
+4,1
+3,0
+1
+53,0
+1
+13,0
+1
+af,0
+1
+5f,0
+1
+22,0
+2,1
+64,0
+2,1
+3a,0
+1
+61,0
+2,1
+2b,0
+2,1
+96,0
+2,1
+15,0
+2,1
+1a,0
+2,1
+2e,0
+2,1
+10,0
+4,1
+20,0
+1
+3c,0
+3,1
+9,0
+3,1
+44,0
+2,1
+d,0
+3,1
+15,0
+1
+3b,0
+2,1
+3a,0
+1
+52,0
+1
+37,0
+1
+c,0
+1
+21,0
+2,1
+32,0
+1
+31,0
+1
+3c,0
+2,1
+34,0
+1
+21,0
+1
+a,0
+2,1
+29,0
+1
+2c,0
+1
+1b,0
+3,1
+25,0
+1
+1e,0
+1
+b,0
+1
+2d,0
+2,1
+a,0
+1
+63,0
+1
+1c,0
+1
+a,0
+1
+3c,0
+1
+1b,0
+1
+a,0
+1
+3c,0
+1
+7e,0
+1
+9,0
+2,1
+3e,0
+1
+18,0
+2,1
+49,0
+2,1
+17,0
+1
+9,0
+2,1
+40,0
+1
+17,0
+1
+4b,0
+1
+21,0
+1
+58,0
+1
+9,0
+1
+1f,0
+4,1
+2,0
+3,1
+1b,0
+1
+15,0
+1
+23,0
+2,1
+d,0
+3,1
+2e,0
+1
+9,0
+1
+14,0
+3,1
+15,0
+3,1
+14,0
+1
+15,0
+1
+1d,0
+2,1
+2e,0
+1
+1e,0
+1
+13,0
+1
+1d,0
+1
+27,0
+1
+9,0
+1
+45,0
+1
+77,0
+1
+9,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+13,0
+1
+2a,0
+8,1
+31,0
+1
+9,0
+1
+1a,0
+3,1
+28,0
+1
+1d,0
+1
+17,0
+3,1
+11,0
+3,1
+17,0
+1
+13,0
+1
+63,0
+1
+9,0
+1
+14,0
+2,1
+19,0
+2,1
+14,0
+1
+13,0
+1
+1d,0
+1
+31,0
+1
+1e,0
+1
+11,0
+1
+1f,0
+1
+26,0
+1
+a,0
+1
+44,0
+1
+2e,0
+1
+23,0
+1
+3f,0
+1
+33,0
+1
+20,0
+1
+d,0
+1
+34,0
+1
+15,0
+1
+18,0
+1
+55,0
+2,1
+33,0
+1
+24,0
+1
+16,0
+1
+34,0
+1
+17,0
+1
+a,0
+2,1
+a,0
+1
+27,0
+1
+c,0
+1
+17,0
+2,1
+a,0
+1
+a,0
+1
+59,0
+1
+9,0
+1
+27,0
+1
+b,0
+1
+19,0
+1
+49,0
+1
+57,0
+1
+26,0
+1
+15,0
+1
+31,0
+1
+1c,0
+1
+14,0
+1
+25,0
+1
+a,0
+1
+1d,0
+1
+15,0
+1
+2f,0
+1
+1e,0
+1
+14,0
+1
+2e,0
+1
+20,0
+1
+36,0
+1
+2c,0
+1
+15,0
+1
+2b,0
+1
+38,0
+1
+29,0
+1
+24,0
+1
+15,0
+2,1
+19,0
+2,1
+b,0
+1
+25,0
+1
+17,0
+1
+16,0
+2,1
+c,0
+2,1
+26,0
+2,1
+16,0
+3,1
+11,0
+1
+38,0
+1
+38,0
+1
+2b,0
+2,1
+24,0
+1
+73,0
+1
+2f,0
+1
+ca,0
+2,1
+2b,0
+2,1
+37,0
+1
+64,0
+2,1
+64,0
+2,1
+21,0
+2,1
+41,0
+2,1
+1c,0
+3,1
+45,0
+4,1
+15,0
+4,1
+4c,0
+3,1
+e,0
+1
+57,0
+4,1
+1c7,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/a98.dat b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a98.dat
new file mode 100644
index 000000000..af3cf7f85
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/a98.dat
@@ -0,0 +1,19655 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+21b,0
+d,1
+53,0
+4,1
+d,0
+4,1
+4b,0
+4,1
+15,0
+4,1
+45,0
+3,1
+1b,0
+3,1
+41,0
+2,1
+21,0
+2,1
+3d,0
+2,1
+25,0
+2,1
+39,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+34,0
+1
+2f,0
+1
+31,0
+2,1
+13,0
+4,1
+1a,0
+2,1
+2e,0
+2,1
+10,0
+4,1
+1f,0
+2,1
+2c,0
+2,1
+e,0
+3,1
+9,0
+6,1
+15,0
+2,1
+2a,0
+2,1
+d,0
+3,1
+11,0
+5,1
+11,0
+2,1
+28,0
+2,1
+d,0
+2,1
+18,0
+3,1
+f,0
+2,1
+26,0
+2,1
+c,0
+2,1
+1c,0
+3,1
+e,0
+2,1
+25,0
+1
+c,0
+1
+21,0
+2,1
+d,0
+1
+24,0
+1
+b,0
+2,1
+24,0
+1
+d,0
+1
+22,0
+1
+b,0
+2,1
+26,0
+2,1
+c,0
+1
+20,0
+2,1
+a,0
+2,1
+29,0
+1
+b,0
+2,1
+1f,0
+1
+a,0
+2,1
+f,0
+3,1
+19,0
+2,1
+a,0
+1
+1e,0
+1
+b,0
+1
+2d,0
+2,1
+a,0
+1
+1d,0
+1
+a,0
+1
+2f,0
+1
+a,0
+1
+1c,0
+1
+a,0
+1
+3c,0
+1
+1b,0
+1
+a,0
+1
+3c,0
+1
+1a,0
+1
+a,0
+1
+3e,0
+1
+19,0
+1
+9,0
+2,1
+3e,0
+1
+18,0
+2,1
+9,0
+1
+3f,0
+2,1
+17,0
+1
+9,0
+2,1
+40,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+16,0
+1
+9,0
+1
+1b,0
+d,1
+1b,0
+1
+15,0
+1
+9,0
+1
+17,0
+4,1
+d,0
+4,1
+17,0
+1
+15,0
+1
+9,0
+1
+14,0
+3,1
+15,0
+3,1
+14,0
+1
+15,0
+1
+9,0
+1
+13,0
+2,1
+19,0
+2,1
+13,0
+1
+14,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+1d,0
+b,1
+1d,0
+1
+13,0
+1
+9,0
+1
+1a,0
+3,1
+b,0
+3,1
+1a,0
+1
+13,0
+1
+9,0
+1
+17,0
+3,1
+11,0
+3,1
+17,0
+1
+13,0
+1
+9,0
+1
+16,0
+2,1
+15,0
+2,1
+16,0
+1
+13,0
+1
+9,0
+1
+14,0
+2,1
+19,0
+2,1
+14,0
+1
+13,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+a,0
+1
+11,0
+1
+1f,0
+1
+12,0
+1
+13,0
+1
+a,0
+1
+10,0
+1
+21,0
+1
+11,0
+1
+14,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+16,0
+1
+9,0
+2,1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+2,1
+a,0
+1
+27,0
+1
+c,0
+1
+17,0
+2,1
+a,0
+1
+a,0
+1
+27,0
+1
+b,0
+2,1
+18,0
+1
+b,0
+1
+9,0
+1
+27,0
+1
+b,0
+1
+19,0
+1
+15,0
+1
+27,0
+1
+b,0
+1
+1a,0
+1
+14,0
+1
+27,0
+1
+a,0
+1
+1b,0
+1
+15,0
+1
+25,0
+1
+b,0
+1
+1c,0
+1
+14,0
+1
+25,0
+1
+a,0
+1
+1d,0
+1
+15,0
+1
+23,0
+1
+b,0
+1
+1e,0
+1
+14,0
+1
+23,0
+1
+a,0
+1
+1f,0
+2,1
+14,0
+1
+21,0
+1
+a,0
+2,1
+20,0
+1
+15,0
+1
+1f,0
+1
+b,0
+1
+22,0
+1
+15,0
+1
+1d,0
+1
+b,0
+1
+24,0
+1
+15,0
+2,1
+19,0
+2,1
+b,0
+1
+25,0
+2,1
+16,0
+2,1
+15,0
+2,1
+c,0
+2,1
+26,0
+2,1
+16,0
+3,1
+11,0
+3,1
+c,0
+2,1
+28,0
+2,1
+18,0
+3,1
+b,0
+3,1
+e,0
+2,1
+2a,0
+2,1
+1a,0
+b,1
+10,0
+2,1
+2c,0
+2,1
+33,0
+2,1
+2e,0
+2,1
+31,0
+2,1
+31,0
+1
+2f,0
+1
+34,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+39,0
+2,1
+25,0
+2,1
+3d,0
+2,1
+21,0
+2,1
+41,0
+3,1
+1b,0
+3,1
+45,0
+4,1
+15,0
+4,1
+4b,0
+4,1
+d,0
+4,1
+53,0
+d,1
+1c0,0
+100 90 32
+21b,0
+d,2
+53,0
+4,2
+d,0
+4,2
+4b,0
+4,2
+15,0
+4,2
+45,0
+3,2
+1b,0
+3,2
+41,0
+2,2
+21,0
+2,2
+3d,0
+2,2
+25,0
+2,2
+39,0
+2,2
+29,0
+2,2
+36,0
+2,2
+2b,0
+2,2
+34,0
+2
+2f,0
+2
+31,0
+2,2
+13,0
+4,2
+1a,0
+2,2
+2e,0
+2,2
+10,0
+4,2
+1f,0
+2,2
+2c,0
+2,2
+e,0
+3,2
+9,0
+6,2
+15,0
+2,2
+2a,0
+2,2
+d,0
+3,2
+11,0
+5,2
+11,0
+2,2
+28,0
+2,2
+d,0
+2,2
+18,0
+3,2
+f,0
+2,2
+26,0
+2,2
+c,0
+2,2
+1c,0
+3,2
+e,0
+2,2
+25,0
+2
+c,0
+2
+21,0
+2,2
+d,0
+2
+24,0
+2
+b,0
+2,2
+24,0
+2
+d,0
+2
+22,0
+2
+b,0
+2,2
+26,0
+2,2
+c,0
+2
+20,0
+2,2
+a,0
+2,2
+29,0
+2
+b,0
+2,2
+1f,0
+2
+a,0
+2,2
+f,0
+3,2
+19,0
+2,2
+a,0
+2
+1e,0
+2
+b,0
+2
+2d,0
+2,2
+a,0
+2
+1d,0
+2
+a,0
+2
+2f,0
+2
+a,0
+2
+1c,0
+2
+a,0
+2
+3c,0
+2
+1b,0
+2
+a,0
+2
+3c,0
+2
+1a,0
+2
+a,0
+2
+3e,0
+2
+19,0
+2
+9,0
+2,2
+3e,0
+2
+18,0
+2,2
+9,0
+2
+3f,0
+2,2
+17,0
+2
+9,0
+2,2
+40,0
+2
+17,0
+2
+9,0
+2
+41,0
+2
+17,0
+2
+9,0
+2
+41,0
+2
+16,0
+2
+9,0
+2
+1b,0
+d,2
+1b,0
+2
+15,0
+2
+9,0
+2
+17,0
+4,2
+d,0
+4,2
+17,0
+2
+15,0
+2
+9,0
+2
+14,0
+3,2
+15,0
+3,2
+14,0
+2
+15,0
+2
+9,0
+2
+13,0
+2,2
+19,0
+2,2
+13,0
+2
+14,0
+2
+9,0
+2
+13,0
+2
+1d,0
+2
+13,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+1d,0
+b,2
+1d,0
+2
+13,0
+2
+9,0
+2
+1a,0
+3,2
+b,0
+3,2
+1a,0
+2
+13,0
+2
+9,0
+2
+17,0
+3,2
+11,0
+3,2
+17,0
+2
+13,0
+2
+9,0
+2
+16,0
+2,2
+15,0
+2,2
+16,0
+2
+13,0
+2
+9,0
+2
+14,0
+2,2
+19,0
+2,2
+14,0
+2
+13,0
+2
+9,0
+2
+13,0
+2
+1d,0
+2
+13,0
+2
+13,0
+2
+a,0
+2
+11,0
+2
+1f,0
+2
+12,0
+2
+13,0
+2
+a,0
+2
+10,0
+2
+21,0
+2
+11,0
+2
+14,0
+2
+9,0
+2
+f,0
+2
+23,0
+2
+f,0
+2
+15,0
+2
+9,0
+2
+f,0
+2
+23,0
+2
+f,0
+2
+15,0
+2
+a,0
+2
+d,0
+2
+25,0
+2
+e,0
+2
+15,0
+2
+a,0
+2
+d,0
+2
+25,0
+2
+e,0
+2
+16,0
+2
+9,0
+2,2
+b,0
+2
+27,0
+2
+c,0
+2
+17,0
+2
+a,0
+2
+b,0
+2
+27,0
+2
+c,0
+2
+17,0
+2
+a,0
+2,2
+a,0
+2
+27,0
+2
+c,0
+2
+17,0
+2,2
+a,0
+2
+a,0
+2
+27,0
+2
+b,0
+2,2
+18,0
+2
+b,0
+2
+9,0
+2
+27,0
+2
+b,0
+2
+19,0
+2
+15,0
+2
+27,0
+2
+b,0
+2
+1a,0
+2
+14,0
+2
+27,0
+2
+a,0
+2
+1b,0
+2
+15,0
+2
+25,0
+2
+b,0
+2
+1c,0
+2
+14,0
+2
+25,0
+2
+a,0
+2
+1d,0
+2
+15,0
+2
+23,0
+2
+b,0
+2
+1e,0
+2
+14,0
+2
+23,0
+2
+a,0
+2
+1f,0
+2,2
+14,0
+2
+21,0
+2
+a,0
+2,2
+20,0
+2
+15,0
+2
+1f,0
+2
+b,0
+2
+22,0
+2
+15,0
+2
+1d,0
+2
+b,0
+2
+24,0
+2
+15,0
+2,2
+19,0
+2,2
+b,0
+2
+25,0
+2,2
+16,0
+2,2
+15,0
+2,2
+c,0
+2,2
+26,0
+2,2
+16,0
+3,2
+11,0
+3,2
+c,0
+2,2
+28,0
+2,2
+18,0
+3,2
+b,0
+3,2
+e,0
+2,2
+2a,0
+2,2
+1a,0
+b,2
+10,0
+2,2
+2c,0
+2,2
+33,0
+2,2
+2e,0
+2,2
+31,0
+2,2
+31,0
+2
+2f,0
+2
+34,0
+2,2
+2b,0
+2,2
+36,0
+2,2
+29,0
+2,2
+39,0
+2,2
+25,0
+2,2
+3d,0
+2,2
+21,0
+2,2
+41,0
+3,2
+1b,0
+3,2
+45,0
+4,2
+15,0
+4,2
+4b,0
+4,2
+d,0
+4,2
+53,0
+d,2
+1c0,0
+100 90 32
+21b,0
+d,3
+53,0
+4,3
+d,0
+4,3
+4b,0
+4,3
+15,0
+4,3
+45,0
+3,3
+1b,0
+3,3
+41,0
+2,3
+21,0
+2,3
+3d,0
+2,3
+25,0
+2,3
+39,0
+2,3
+29,0
+2,3
+36,0
+2,3
+2b,0
+2,3
+34,0
+3
+2f,0
+3
+31,0
+2,3
+13,0
+4,3
+1a,0
+2,3
+2e,0
+2,3
+10,0
+4,3
+1f,0
+2,3
+2c,0
+2,3
+e,0
+3,3
+9,0
+6,3
+15,0
+2,3
+2a,0
+2,3
+d,0
+3,3
+11,0
+5,3
+11,0
+2,3
+28,0
+2,3
+d,0
+2,3
+18,0
+3,3
+f,0
+2,3
+26,0
+2,3
+c,0
+2,3
+1c,0
+3,3
+e,0
+2,3
+25,0
+3
+c,0
+3
+21,0
+2,3
+d,0
+3
+24,0
+3
+b,0
+2,3
+24,0
+3
+d,0
+3
+22,0
+3
+b,0
+2,3
+26,0
+2,3
+c,0
+3
+20,0
+2,3
+a,0
+2,3
+29,0
+3
+b,0
+2,3
+1f,0
+3
+a,0
+2,3
+f,0
+3,3
+19,0
+2,3
+a,0
+3
+1e,0
+3
+b,0
+3
+2d,0
+2,3
+a,0
+3
+1d,0
+3
+a,0
+3
+2f,0
+3
+a,0
+3
+1c,0
+3
+a,0
+3
+3c,0
+3
+1b,0
+3
+a,0
+3
+3c,0
+3
+1a,0
+3
+a,0
+3
+3e,0
+3
+19,0
+3
+9,0
+2,3
+3e,0
+3
+18,0
+2,3
+9,0
+3
+3f,0
+2,3
+17,0
+3
+9,0
+2,3
+40,0
+3
+17,0
+3
+9,0
+3
+41,0
+3
+17,0
+3
+9,0
+3
+41,0
+3
+16,0
+3
+9,0
+3
+1b,0
+d,3
+1b,0
+3
+15,0
+3
+9,0
+3
+17,0
+4,3
+d,0
+4,3
+17,0
+3
+15,0
+3
+9,0
+3
+14,0
+3,3
+15,0
+3,3
+14,0
+3
+15,0
+3
+9,0
+3
+13,0
+2,3
+19,0
+2,3
+13,0
+3
+14,0
+3
+9,0
+3
+13,0
+3
+1d,0
+3
+13,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+1d,0
+b,3
+1d,0
+3
+13,0
+3
+9,0
+3
+1a,0
+3,3
+b,0
+3,3
+1a,0
+3
+13,0
+3
+9,0
+3
+17,0
+3,3
+11,0
+3,3
+17,0
+3
+13,0
+3
+9,0
+3
+16,0
+2,3
+15,0
+2,3
+16,0
+3
+13,0
+3
+9,0
+3
+14,0
+2,3
+19,0
+2,3
+14,0
+3
+13,0
+3
+9,0
+3
+13,0
+3
+1d,0
+3
+13,0
+3
+13,0
+3
+a,0
+3
+11,0
+3
+1f,0
+3
+12,0
+3
+13,0
+3
+a,0
+3
+10,0
+3
+21,0
+3
+11,0
+3
+14,0
+3
+9,0
+3
+f,0
+3
+23,0
+3
+f,0
+3
+15,0
+3
+9,0
+3
+f,0
+3
+23,0
+3
+f,0
+3
+15,0
+3
+a,0
+3
+d,0
+3
+25,0
+3
+e,0
+3
+15,0
+3
+a,0
+3
+d,0
+3
+25,0
+3
+e,0
+3
+16,0
+3
+9,0
+2,3
+b,0
+3
+27,0
+3
+c,0
+3
+17,0
+3
+a,0
+3
+b,0
+3
+27,0
+3
+c,0
+3
+17,0
+3
+a,0
+2,3
+a,0
+3
+27,0
+3
+c,0
+3
+17,0
+2,3
+a,0
+3
+a,0
+3
+27,0
+3
+b,0
+2,3
+18,0
+3
+b,0
+3
+9,0
+3
+27,0
+3
+b,0
+3
+19,0
+3
+15,0
+3
+27,0
+3
+b,0
+3
+1a,0
+3
+14,0
+3
+27,0
+3
+a,0
+3
+1b,0
+3
+15,0
+3
+25,0
+3
+b,0
+3
+1c,0
+3
+14,0
+3
+25,0
+3
+a,0
+3
+1d,0
+3
+15,0
+3
+23,0
+3
+b,0
+3
+1e,0
+3
+14,0
+3
+23,0
+3
+a,0
+3
+1f,0
+2,3
+14,0
+3
+21,0
+3
+a,0
+2,3
+20,0
+3
+15,0
+3
+1f,0
+3
+b,0
+3
+22,0
+3
+15,0
+3
+1d,0
+3
+b,0
+3
+24,0
+3
+15,0
+2,3
+19,0
+2,3
+b,0
+3
+25,0
+2,3
+16,0
+2,3
+15,0
+2,3
+c,0
+2,3
+26,0
+2,3
+16,0
+3,3
+11,0
+3,3
+c,0
+2,3
+28,0
+2,3
+18,0
+3,3
+b,0
+3,3
+e,0
+2,3
+2a,0
+2,3
+1a,0
+b,3
+10,0
+2,3
+2c,0
+2,3
+33,0
+2,3
+2e,0
+2,3
+31,0
+2,3
+31,0
+3
+2f,0
+3
+34,0
+2,3
+2b,0
+2,3
+36,0
+2,3
+29,0
+2,3
+39,0
+2,3
+25,0
+2,3
+3d,0
+2,3
+21,0
+2,3
+41,0
+3,3
+1b,0
+3,3
+45,0
+4,3
+15,0
+4,3
+4b,0
+4,3
+d,0
+4,3
+53,0
+d,3
+1c0,0
+100 90 32
+21b,0
+d,4
+53,0
+4,4
+d,0
+4,4
+4b,0
+4,4
+15,0
+4,4
+45,0
+3,4
+1b,0
+3,4
+41,0
+2,4
+21,0
+2,4
+3d,0
+2,4
+25,0
+2,4
+39,0
+2,4
+29,0
+2,4
+36,0
+2,4
+2b,0
+2,4
+34,0
+4
+2f,0
+4
+31,0
+2,4
+13,0
+4,4
+1a,0
+2,4
+2e,0
+2,4
+10,0
+4,4
+1f,0
+2,4
+2c,0
+2,4
+e,0
+3,4
+9,0
+6,4
+15,0
+2,4
+2a,0
+2,4
+d,0
+3,4
+11,0
+5,4
+11,0
+2,4
+28,0
+2,4
+d,0
+2,4
+18,0
+3,4
+f,0
+2,4
+26,0
+2,4
+c,0
+2,4
+1c,0
+3,4
+e,0
+2,4
+25,0
+4
+c,0
+4
+21,0
+2,4
+d,0
+4
+24,0
+4
+b,0
+2,4
+24,0
+4
+d,0
+4
+22,0
+4
+b,0
+2,4
+26,0
+2,4
+c,0
+4
+20,0
+2,4
+a,0
+2,4
+29,0
+4
+b,0
+2,4
+1f,0
+4
+a,0
+2,4
+f,0
+3,4
+19,0
+2,4
+a,0
+4
+1e,0
+4
+b,0
+4
+2d,0
+2,4
+a,0
+4
+1d,0
+4
+a,0
+4
+2f,0
+4
+a,0
+4
+1c,0
+4
+a,0
+4
+3c,0
+4
+1b,0
+4
+a,0
+4
+3c,0
+4
+1a,0
+4
+a,0
+4
+3e,0
+4
+19,0
+4
+9,0
+2,4
+3e,0
+4
+18,0
+2,4
+9,0
+4
+3f,0
+2,4
+17,0
+4
+9,0
+2,4
+40,0
+4
+17,0
+4
+9,0
+4
+41,0
+4
+17,0
+4
+9,0
+4
+41,0
+4
+16,0
+4
+9,0
+4
+1b,0
+d,4
+1b,0
+4
+15,0
+4
+9,0
+4
+17,0
+4,4
+d,0
+4,4
+17,0
+4
+15,0
+4
+9,0
+4
+14,0
+3,4
+15,0
+3,4
+14,0
+4
+15,0
+4
+9,0
+4
+13,0
+2,4
+19,0
+2,4
+13,0
+4
+14,0
+4
+9,0
+4
+13,0
+4
+1d,0
+4
+13,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+1d,0
+b,4
+1d,0
+4
+13,0
+4
+9,0
+4
+1a,0
+3,4
+b,0
+3,4
+1a,0
+4
+13,0
+4
+9,0
+4
+17,0
+3,4
+11,0
+3,4
+17,0
+4
+13,0
+4
+9,0
+4
+16,0
+2,4
+15,0
+2,4
+16,0
+4
+13,0
+4
+9,0
+4
+14,0
+2,4
+19,0
+2,4
+14,0
+4
+13,0
+4
+9,0
+4
+13,0
+4
+1d,0
+4
+13,0
+4
+13,0
+4
+a,0
+4
+11,0
+4
+1f,0
+4
+12,0
+4
+13,0
+4
+a,0
+4
+10,0
+4
+21,0
+4
+11,0
+4
+14,0
+4
+9,0
+4
+f,0
+4
+23,0
+4
+f,0
+4
+15,0
+4
+9,0
+4
+f,0
+4
+23,0
+4
+f,0
+4
+15,0
+4
+a,0
+4
+d,0
+4
+25,0
+4
+e,0
+4
+15,0
+4
+a,0
+4
+d,0
+4
+25,0
+4
+e,0
+4
+16,0
+4
+9,0
+2,4
+b,0
+4
+27,0
+4
+c,0
+4
+17,0
+4
+a,0
+4
+b,0
+4
+27,0
+4
+c,0
+4
+17,0
+4
+a,0
+2,4
+a,0
+4
+27,0
+4
+c,0
+4
+17,0
+2,4
+a,0
+4
+a,0
+4
+27,0
+4
+b,0
+2,4
+18,0
+4
+b,0
+4
+9,0
+4
+27,0
+4
+b,0
+4
+19,0
+4
+15,0
+4
+27,0
+4
+b,0
+4
+1a,0
+4
+14,0
+4
+27,0
+4
+a,0
+4
+1b,0
+4
+15,0
+4
+25,0
+4
+b,0
+4
+1c,0
+4
+14,0
+4
+25,0
+4
+a,0
+4
+1d,0
+4
+15,0
+4
+23,0
+4
+b,0
+4
+1e,0
+4
+14,0
+4
+23,0
+4
+a,0
+4
+1f,0
+2,4
+14,0
+4
+21,0
+4
+a,0
+2,4
+20,0
+4
+15,0
+4
+1f,0
+4
+b,0
+4
+22,0
+4
+15,0
+4
+1d,0
+4
+b,0
+4
+24,0
+4
+15,0
+2,4
+19,0
+2,4
+b,0
+4
+25,0
+2,4
+16,0
+2,4
+15,0
+2,4
+c,0
+2,4
+26,0
+2,4
+16,0
+3,4
+11,0
+3,4
+c,0
+2,4
+28,0
+2,4
+18,0
+3,4
+b,0
+3,4
+e,0
+2,4
+2a,0
+2,4
+1a,0
+b,4
+10,0
+2,4
+2c,0
+2,4
+33,0
+2,4
+2e,0
+2,4
+31,0
+2,4
+31,0
+4
+2f,0
+4
+34,0
+2,4
+2b,0
+2,4
+36,0
+2,4
+29,0
+2,4
+39,0
+2,4
+25,0
+2,4
+3d,0
+2,4
+21,0
+2,4
+41,0
+3,4
+1b,0
+3,4
+45,0
+4,4
+15,0
+4,4
+4b,0
+4,4
+d,0
+4,4
+53,0
+d,4
+1c0,0
+100 90 32
+21b,0
+d,6
+53,0
+4,6
+d,0
+4,6
+4b,0
+4,6
+15,0
+4,6
+45,0
+3,6
+1b,0
+3,6
+41,0
+2,6
+21,0
+2,6
+3d,0
+2,6
+25,0
+2,6
+39,0
+2,6
+29,0
+2,6
+36,0
+2,6
+2b,0
+2,6
+34,0
+6
+2f,0
+6
+31,0
+2,6
+13,0
+4,6
+1a,0
+2,6
+2e,0
+2,6
+10,0
+4,6
+1f,0
+2,6
+2c,0
+2,6
+e,0
+3,6
+9,0
+6,6
+15,0
+2,6
+2a,0
+2,6
+d,0
+3,6
+11,0
+5,6
+11,0
+2,6
+28,0
+2,6
+d,0
+2,6
+18,0
+3,6
+f,0
+2,6
+26,0
+2,6
+c,0
+2,6
+1c,0
+3,6
+e,0
+2,6
+25,0
+6
+c,0
+6
+21,0
+2,6
+d,0
+6
+24,0
+6
+b,0
+2,6
+24,0
+6
+d,0
+6
+22,0
+6
+b,0
+2,6
+26,0
+2,6
+c,0
+6
+20,0
+2,6
+a,0
+2,6
+29,0
+6
+b,0
+2,6
+1f,0
+6
+a,0
+2,6
+f,0
+3,6
+19,0
+2,6
+a,0
+6
+1e,0
+6
+b,0
+6
+2d,0
+2,6
+a,0
+6
+1d,0
+6
+a,0
+6
+2f,0
+6
+a,0
+6
+1c,0
+6
+a,0
+6
+3c,0
+6
+1b,0
+6
+a,0
+6
+3c,0
+6
+1a,0
+6
+a,0
+6
+3e,0
+6
+19,0
+6
+9,0
+2,6
+3e,0
+6
+18,0
+2,6
+9,0
+6
+3f,0
+2,6
+17,0
+6
+9,0
+2,6
+40,0
+6
+17,0
+6
+9,0
+6
+41,0
+6
+17,0
+6
+9,0
+6
+41,0
+6
+16,0
+6
+9,0
+6
+1b,0
+d,6
+1b,0
+6
+15,0
+6
+9,0
+6
+17,0
+4,6
+d,0
+4,6
+17,0
+6
+15,0
+6
+9,0
+6
+14,0
+3,6
+15,0
+3,6
+14,0
+6
+15,0
+6
+9,0
+6
+13,0
+2,6
+19,0
+2,6
+13,0
+6
+14,0
+6
+9,0
+6
+13,0
+6
+1d,0
+6
+13,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+1d,0
+b,6
+1d,0
+6
+13,0
+6
+9,0
+6
+1a,0
+3,6
+b,0
+3,6
+1a,0
+6
+13,0
+6
+9,0
+6
+17,0
+3,6
+11,0
+3,6
+17,0
+6
+13,0
+6
+9,0
+6
+16,0
+2,6
+15,0
+2,6
+16,0
+6
+13,0
+6
+9,0
+6
+14,0
+2,6
+19,0
+2,6
+14,0
+6
+13,0
+6
+9,0
+6
+13,0
+6
+1d,0
+6
+13,0
+6
+13,0
+6
+a,0
+6
+11,0
+6
+1f,0
+6
+12,0
+6
+13,0
+6
+a,0
+6
+10,0
+6
+21,0
+6
+11,0
+6
+14,0
+6
+9,0
+6
+f,0
+6
+23,0
+6
+f,0
+6
+15,0
+6
+9,0
+6
+f,0
+6
+23,0
+6
+f,0
+6
+15,0
+6
+a,0
+6
+d,0
+6
+25,0
+6
+e,0
+6
+15,0
+6
+a,0
+6
+d,0
+6
+25,0
+6
+e,0
+6
+16,0
+6
+9,0
+2,6
+b,0
+6
+27,0
+6
+c,0
+6
+17,0
+6
+a,0
+6
+b,0
+6
+27,0
+6
+c,0
+6
+17,0
+6
+a,0
+2,6
+a,0
+6
+27,0
+6
+c,0
+6
+17,0
+2,6
+a,0
+6
+a,0
+6
+27,0
+6
+b,0
+2,6
+18,0
+6
+b,0
+6
+9,0
+6
+27,0
+6
+b,0
+6
+19,0
+6
+15,0
+6
+27,0
+6
+b,0
+6
+1a,0
+6
+14,0
+6
+27,0
+6
+a,0
+6
+1b,0
+6
+15,0
+6
+25,0
+6
+b,0
+6
+1c,0
+6
+14,0
+6
+25,0
+6
+a,0
+6
+1d,0
+6
+15,0
+6
+23,0
+6
+b,0
+6
+1e,0
+6
+14,0
+6
+23,0
+6
+a,0
+6
+1f,0
+2,6
+14,0
+6
+21,0
+6
+a,0
+2,6
+20,0
+6
+15,0
+6
+1f,0
+6
+b,0
+6
+22,0
+6
+15,0
+6
+1d,0
+6
+b,0
+6
+24,0
+6
+15,0
+2,6
+19,0
+2,6
+b,0
+6
+25,0
+2,6
+16,0
+2,6
+15,0
+2,6
+c,0
+2,6
+26,0
+2,6
+16,0
+3,6
+11,0
+3,6
+c,0
+2,6
+28,0
+2,6
+18,0
+3,6
+b,0
+3,6
+e,0
+2,6
+2a,0
+2,6
+1a,0
+b,6
+10,0
+2,6
+2c,0
+2,6
+33,0
+2,6
+2e,0
+2,6
+31,0
+2,6
+31,0
+6
+2f,0
+6
+34,0
+2,6
+2b,0
+2,6
+36,0
+2,6
+29,0
+2,6
+39,0
+2,6
+25,0
+2,6
+3d,0
+2,6
+21,0
+2,6
+41,0
+3,6
+1b,0
+3,6
+45,0
+4,6
+15,0
+4,6
+4b,0
+4,6
+d,0
+4,6
+53,0
+d,6
+1c0,0
+100 90 32
+21b,0
+d,7
+53,0
+4,7
+d,0
+4,7
+4b,0
+4,7
+15,0
+4,7
+45,0
+3,7
+1b,0
+3,7
+41,0
+2,7
+21,0
+2,7
+3d,0
+2,7
+25,0
+2,7
+39,0
+2,7
+29,0
+2,7
+36,0
+2,7
+2b,0
+2,7
+34,0
+7
+2f,0
+7
+31,0
+2,7
+13,0
+4,7
+1a,0
+2,7
+2e,0
+2,7
+10,0
+4,7
+1f,0
+2,7
+2c,0
+2,7
+e,0
+3,7
+9,0
+6,7
+15,0
+2,7
+2a,0
+2,7
+d,0
+3,7
+11,0
+5,7
+11,0
+2,7
+28,0
+2,7
+d,0
+2,7
+18,0
+3,7
+f,0
+2,7
+26,0
+2,7
+c,0
+2,7
+1c,0
+3,7
+e,0
+2,7
+25,0
+7
+c,0
+7
+21,0
+2,7
+d,0
+7
+24,0
+7
+b,0
+2,7
+24,0
+7
+d,0
+7
+22,0
+7
+b,0
+2,7
+26,0
+2,7
+c,0
+7
+20,0
+2,7
+a,0
+2,7
+29,0
+7
+b,0
+2,7
+1f,0
+7
+a,0
+2,7
+f,0
+3,7
+19,0
+2,7
+a,0
+7
+1e,0
+7
+b,0
+7
+2d,0
+2,7
+a,0
+7
+1d,0
+7
+a,0
+7
+2f,0
+7
+a,0
+7
+1c,0
+7
+a,0
+7
+3c,0
+7
+1b,0
+7
+a,0
+7
+3c,0
+7
+1a,0
+7
+a,0
+7
+3e,0
+7
+19,0
+7
+9,0
+2,7
+3e,0
+7
+18,0
+2,7
+9,0
+7
+3f,0
+2,7
+17,0
+7
+9,0
+2,7
+40,0
+7
+17,0
+7
+9,0
+7
+41,0
+7
+17,0
+7
+9,0
+7
+41,0
+7
+16,0
+7
+9,0
+7
+1b,0
+d,7
+1b,0
+7
+15,0
+7
+9,0
+7
+17,0
+4,7
+d,0
+4,7
+17,0
+7
+15,0
+7
+9,0
+7
+14,0
+3,7
+15,0
+3,7
+14,0
+7
+15,0
+7
+9,0
+7
+13,0
+2,7
+19,0
+2,7
+13,0
+7
+14,0
+7
+9,0
+7
+13,0
+7
+1d,0
+7
+13,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+1d,0
+b,7
+1d,0
+7
+13,0
+7
+9,0
+7
+1a,0
+3,7
+b,0
+3,7
+1a,0
+7
+13,0
+7
+9,0
+7
+17,0
+3,7
+11,0
+3,7
+17,0
+7
+13,0
+7
+9,0
+7
+16,0
+2,7
+15,0
+2,7
+16,0
+7
+13,0
+7
+9,0
+7
+14,0
+2,7
+19,0
+2,7
+14,0
+7
+13,0
+7
+9,0
+7
+13,0
+7
+1d,0
+7
+13,0
+7
+13,0
+7
+a,0
+7
+11,0
+7
+1f,0
+7
+12,0
+7
+13,0
+7
+a,0
+7
+10,0
+7
+21,0
+7
+11,0
+7
+14,0
+7
+9,0
+7
+f,0
+7
+23,0
+7
+f,0
+7
+15,0
+7
+9,0
+7
+f,0
+7
+23,0
+7
+f,0
+7
+15,0
+7
+a,0
+7
+d,0
+7
+25,0
+7
+e,0
+7
+15,0
+7
+a,0
+7
+d,0
+7
+25,0
+7
+e,0
+7
+16,0
+7
+9,0
+2,7
+b,0
+7
+27,0
+7
+c,0
+7
+17,0
+7
+a,0
+7
+b,0
+7
+27,0
+7
+c,0
+7
+17,0
+7
+a,0
+2,7
+a,0
+7
+27,0
+7
+c,0
+7
+17,0
+2,7
+a,0
+7
+a,0
+7
+27,0
+7
+b,0
+2,7
+18,0
+7
+b,0
+7
+9,0
+7
+27,0
+7
+b,0
+7
+19,0
+7
+15,0
+7
+27,0
+7
+b,0
+7
+1a,0
+7
+14,0
+7
+27,0
+7
+a,0
+7
+1b,0
+7
+15,0
+7
+25,0
+7
+b,0
+7
+1c,0
+7
+14,0
+7
+25,0
+7
+a,0
+7
+1d,0
+7
+15,0
+7
+23,0
+7
+b,0
+7
+1e,0
+7
+14,0
+7
+23,0
+7
+a,0
+7
+1f,0
+2,7
+14,0
+7
+21,0
+7
+a,0
+2,7
+20,0
+7
+15,0
+7
+1f,0
+7
+b,0
+7
+22,0
+7
+15,0
+7
+1d,0
+7
+b,0
+7
+24,0
+7
+15,0
+2,7
+19,0
+2,7
+b,0
+7
+25,0
+2,7
+16,0
+2,7
+15,0
+2,7
+c,0
+2,7
+26,0
+2,7
+16,0
+3,7
+11,0
+3,7
+c,0
+2,7
+28,0
+2,7
+18,0
+3,7
+b,0
+3,7
+e,0
+2,7
+2a,0
+2,7
+1a,0
+b,7
+10,0
+2,7
+2c,0
+2,7
+33,0
+2,7
+2e,0
+2,7
+31,0
+2,7
+31,0
+7
+2f,0
+7
+34,0
+2,7
+2b,0
+2,7
+36,0
+2,7
+29,0
+2,7
+39,0
+2,7
+25,0
+2,7
+3d,0
+2,7
+21,0
+2,7
+41,0
+3,7
+1b,0
+3,7
+45,0
+4,7
+15,0
+4,7
+4b,0
+4,7
+d,0
+4,7
+53,0
+d,7
+1c0,0
+100 90 32
+21b,0
+d,10
+53,0
+4,10
+d,0
+4,10
+4b,0
+4,10
+15,0
+4,10
+45,0
+3,10
+1b,0
+3,10
+41,0
+2,10
+21,0
+2,10
+3d,0
+2,10
+25,0
+2,10
+39,0
+2,10
+29,0
+2,10
+36,0
+2,10
+2b,0
+2,10
+34,0
+10
+2f,0
+10
+31,0
+2,10
+13,0
+4,10
+1a,0
+2,10
+2e,0
+2,10
+10,0
+4,10
+1f,0
+2,10
+2c,0
+2,10
+e,0
+3,10
+9,0
+6,10
+15,0
+2,10
+2a,0
+2,10
+d,0
+3,10
+11,0
+5,10
+11,0
+2,10
+28,0
+2,10
+d,0
+2,10
+18,0
+3,10
+f,0
+2,10
+26,0
+2,10
+c,0
+2,10
+1c,0
+3,10
+e,0
+2,10
+25,0
+10
+c,0
+10
+21,0
+2,10
+d,0
+10
+24,0
+10
+b,0
+2,10
+24,0
+10
+d,0
+10
+22,0
+10
+b,0
+2,10
+26,0
+2,10
+c,0
+10
+20,0
+2,10
+a,0
+2,10
+29,0
+10
+b,0
+2,10
+1f,0
+10
+a,0
+2,10
+f,0
+3,10
+19,0
+2,10
+a,0
+10
+1e,0
+10
+b,0
+10
+2d,0
+2,10
+a,0
+10
+1d,0
+10
+a,0
+10
+2f,0
+10
+a,0
+10
+1c,0
+10
+a,0
+10
+3c,0
+10
+1b,0
+10
+a,0
+10
+3c,0
+10
+1a,0
+10
+a,0
+10
+3e,0
+10
+19,0
+10
+9,0
+2,10
+3e,0
+10
+18,0
+2,10
+9,0
+10
+3f,0
+2,10
+17,0
+10
+9,0
+2,10
+40,0
+10
+17,0
+10
+9,0
+10
+41,0
+10
+17,0
+10
+9,0
+10
+41,0
+10
+16,0
+10
+9,0
+10
+1b,0
+d,10
+1b,0
+10
+15,0
+10
+9,0
+10
+17,0
+4,10
+d,0
+4,10
+17,0
+10
+15,0
+10
+9,0
+10
+14,0
+3,10
+15,0
+3,10
+14,0
+10
+15,0
+10
+9,0
+10
+13,0
+2,10
+19,0
+2,10
+13,0
+10
+14,0
+10
+9,0
+10
+13,0
+10
+1d,0
+10
+13,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+1d,0
+b,10
+1d,0
+10
+13,0
+10
+9,0
+10
+1a,0
+3,10
+b,0
+3,10
+1a,0
+10
+13,0
+10
+9,0
+10
+17,0
+3,10
+11,0
+3,10
+17,0
+10
+13,0
+10
+9,0
+10
+16,0
+2,10
+15,0
+2,10
+16,0
+10
+13,0
+10
+9,0
+10
+14,0
+2,10
+19,0
+2,10
+14,0
+10
+13,0
+10
+9,0
+10
+13,0
+10
+1d,0
+10
+13,0
+10
+13,0
+10
+a,0
+10
+11,0
+10
+1f,0
+10
+12,0
+10
+13,0
+10
+a,0
+10
+10,0
+10
+21,0
+10
+11,0
+10
+14,0
+10
+9,0
+10
+f,0
+10
+23,0
+10
+f,0
+10
+15,0
+10
+9,0
+10
+f,0
+10
+23,0
+10
+f,0
+10
+15,0
+10
+a,0
+10
+d,0
+10
+25,0
+10
+e,0
+10
+15,0
+10
+a,0
+10
+d,0
+10
+25,0
+10
+e,0
+10
+16,0
+10
+9,0
+2,10
+b,0
+10
+27,0
+10
+c,0
+10
+17,0
+10
+a,0
+10
+b,0
+10
+27,0
+10
+c,0
+10
+17,0
+10
+a,0
+2,10
+a,0
+10
+27,0
+10
+c,0
+10
+17,0
+2,10
+a,0
+10
+a,0
+10
+27,0
+10
+b,0
+2,10
+18,0
+10
+b,0
+10
+9,0
+10
+27,0
+10
+b,0
+10
+19,0
+10
+15,0
+10
+27,0
+10
+b,0
+10
+1a,0
+10
+14,0
+10
+27,0
+10
+a,0
+10
+1b,0
+10
+15,0
+10
+25,0
+10
+b,0
+10
+1c,0
+10
+14,0
+10
+25,0
+10
+a,0
+10
+1d,0
+10
+15,0
+10
+23,0
+10
+b,0
+10
+1e,0
+10
+14,0
+10
+23,0
+10
+a,0
+10
+1f,0
+2,10
+14,0
+10
+21,0
+10
+a,0
+2,10
+20,0
+10
+15,0
+10
+1f,0
+10
+b,0
+10
+22,0
+10
+15,0
+10
+1d,0
+10
+b,0
+10
+24,0
+10
+15,0
+2,10
+19,0
+2,10
+b,0
+10
+25,0
+2,10
+16,0
+2,10
+15,0
+2,10
+c,0
+2,10
+26,0
+2,10
+16,0
+3,10
+11,0
+3,10
+c,0
+2,10
+28,0
+2,10
+18,0
+3,10
+b,0
+3,10
+e,0
+2,10
+2a,0
+2,10
+1a,0
+b,10
+10,0
+2,10
+2c,0
+2,10
+33,0
+2,10
+2e,0
+2,10
+31,0
+2,10
+31,0
+10
+2f,0
+10
+34,0
+2,10
+2b,0
+2,10
+36,0
+2,10
+29,0
+2,10
+39,0
+2,10
+25,0
+2,10
+3d,0
+2,10
+21,0
+2,10
+41,0
+3,10
+1b,0
+3,10
+45,0
+4,10
+15,0
+4,10
+4b,0
+4,10
+d,0
+4,10
+53,0
+d,10
+1c0,0
+100 90 32
+21b,0
+d,33
+53,0
+4,33
+d,0
+4,33
+4b,0
+4,33
+15,0
+4,33
+45,0
+3,33
+1b,0
+3,33
+41,0
+2,33
+21,0
+2,33
+3d,0
+2,33
+25,0
+2,33
+39,0
+2,33
+29,0
+2,33
+36,0
+2,33
+2b,0
+2,33
+34,0
+33
+2f,0
+33
+31,0
+2,33
+13,0
+4,33
+1a,0
+2,33
+2e,0
+2,33
+10,0
+4,33
+1f,0
+2,33
+2c,0
+2,33
+e,0
+3,33
+9,0
+6,33
+15,0
+2,33
+2a,0
+2,33
+d,0
+3,33
+11,0
+5,33
+11,0
+2,33
+28,0
+2,33
+d,0
+2,33
+18,0
+3,33
+f,0
+2,33
+26,0
+2,33
+c,0
+2,33
+1c,0
+3,33
+e,0
+2,33
+25,0
+33
+c,0
+33
+21,0
+2,33
+d,0
+33
+24,0
+33
+b,0
+2,33
+24,0
+33
+d,0
+33
+22,0
+33
+b,0
+2,33
+26,0
+2,33
+c,0
+33
+20,0
+2,33
+a,0
+2,33
+29,0
+33
+b,0
+2,33
+1f,0
+33
+a,0
+2,33
+f,0
+3,33
+19,0
+2,33
+a,0
+33
+1e,0
+33
+b,0
+33
+2d,0
+2,33
+a,0
+33
+1d,0
+33
+a,0
+33
+2f,0
+33
+a,0
+33
+1c,0
+33
+a,0
+33
+3c,0
+33
+1b,0
+33
+a,0
+33
+3c,0
+33
+1a,0
+33
+a,0
+33
+3e,0
+33
+19,0
+33
+9,0
+2,33
+3e,0
+33
+18,0
+2,33
+9,0
+33
+3f,0
+2,33
+17,0
+33
+9,0
+2,33
+40,0
+33
+17,0
+33
+9,0
+33
+41,0
+33
+17,0
+33
+9,0
+33
+41,0
+33
+16,0
+33
+9,0
+33
+1b,0
+d,33
+1b,0
+33
+15,0
+33
+9,0
+33
+17,0
+4,33
+d,0
+4,33
+17,0
+33
+15,0
+33
+9,0
+33
+14,0
+3,33
+15,0
+3,33
+14,0
+33
+15,0
+33
+9,0
+33
+13,0
+2,33
+19,0
+2,33
+13,0
+33
+14,0
+33
+9,0
+33
+13,0
+33
+1d,0
+33
+13,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+1d,0
+b,33
+1d,0
+33
+13,0
+33
+9,0
+33
+1a,0
+3,33
+b,0
+3,33
+1a,0
+33
+13,0
+33
+9,0
+33
+17,0
+3,33
+11,0
+3,33
+17,0
+33
+13,0
+33
+9,0
+33
+16,0
+2,33
+15,0
+2,33
+16,0
+33
+13,0
+33
+9,0
+33
+14,0
+2,33
+19,0
+2,33
+14,0
+33
+13,0
+33
+9,0
+33
+13,0
+33
+1d,0
+33
+13,0
+33
+13,0
+33
+a,0
+33
+11,0
+33
+1f,0
+33
+12,0
+33
+13,0
+33
+a,0
+33
+10,0
+33
+21,0
+33
+11,0
+33
+14,0
+33
+9,0
+33
+f,0
+33
+23,0
+33
+f,0
+33
+15,0
+33
+9,0
+33
+f,0
+33
+23,0
+33
+f,0
+33
+15,0
+33
+a,0
+33
+d,0
+33
+25,0
+33
+e,0
+33
+15,0
+33
+a,0
+33
+d,0
+33
+25,0
+33
+e,0
+33
+16,0
+33
+9,0
+2,33
+b,0
+33
+27,0
+33
+c,0
+33
+17,0
+33
+a,0
+33
+b,0
+33
+27,0
+33
+c,0
+33
+17,0
+33
+a,0
+2,33
+a,0
+33
+27,0
+33
+c,0
+33
+17,0
+2,33
+a,0
+33
+a,0
+33
+27,0
+33
+b,0
+2,33
+18,0
+33
+b,0
+33
+9,0
+33
+27,0
+33
+b,0
+33
+19,0
+33
+15,0
+33
+27,0
+33
+b,0
+33
+1a,0
+33
+14,0
+33
+27,0
+33
+a,0
+33
+1b,0
+33
+15,0
+33
+25,0
+33
+b,0
+33
+1c,0
+33
+14,0
+33
+25,0
+33
+a,0
+33
+1d,0
+33
+15,0
+33
+23,0
+33
+b,0
+33
+1e,0
+33
+14,0
+33
+23,0
+33
+a,0
+33
+1f,0
+2,33
+14,0
+33
+21,0
+33
+a,0
+2,33
+20,0
+33
+15,0
+33
+1f,0
+33
+b,0
+33
+22,0
+33
+15,0
+33
+1d,0
+33
+b,0
+33
+24,0
+33
+15,0
+2,33
+19,0
+2,33
+b,0
+33
+25,0
+2,33
+16,0
+2,33
+15,0
+2,33
+c,0
+2,33
+26,0
+2,33
+16,0
+3,33
+11,0
+3,33
+c,0
+2,33
+28,0
+2,33
+18,0
+3,33
+b,0
+3,33
+e,0
+2,33
+2a,0
+2,33
+1a,0
+b,33
+10,0
+2,33
+2c,0
+2,33
+33,0
+2,33
+2e,0
+2,33
+31,0
+2,33
+31,0
+33
+2f,0
+33
+34,0
+2,33
+2b,0
+2,33
+36,0
+2,33
+29,0
+2,33
+39,0
+2,33
+25,0
+2,33
+3d,0
+2,33
+21,0
+2,33
+41,0
+3,33
+1b,0
+3,33
+45,0
+4,33
+15,0
+4,33
+4b,0
+4,33
+d,0
+4,33
+53,0
+d,33
+1c0,0
+100 90 32
+21b,0
+d,81
+53,0
+4,81
+d,0
+4,81
+4b,0
+4,81
+15,0
+4,81
+45,0
+3,81
+1b,0
+3,81
+41,0
+2,81
+21,0
+2,81
+3d,0
+2,81
+25,0
+2,81
+39,0
+2,81
+29,0
+2,81
+36,0
+2,81
+2b,0
+2,81
+34,0
+81
+2f,0
+81
+31,0
+2,81
+13,0
+4,81
+1a,0
+2,81
+2e,0
+2,81
+10,0
+4,81
+1f,0
+2,81
+2c,0
+2,81
+e,0
+3,81
+9,0
+6,81
+15,0
+2,81
+2a,0
+2,81
+d,0
+3,81
+11,0
+5,81
+11,0
+2,81
+28,0
+2,81
+d,0
+2,81
+18,0
+3,81
+f,0
+2,81
+26,0
+2,81
+c,0
+2,81
+1c,0
+3,81
+e,0
+2,81
+25,0
+81
+c,0
+81
+21,0
+2,81
+d,0
+81
+24,0
+81
+b,0
+2,81
+24,0
+81
+d,0
+81
+22,0
+81
+b,0
+2,81
+26,0
+2,81
+c,0
+81
+20,0
+2,81
+a,0
+2,81
+29,0
+81
+b,0
+2,81
+1f,0
+81
+a,0
+2,81
+f,0
+3,81
+19,0
+2,81
+a,0
+81
+1e,0
+81
+b,0
+81
+2d,0
+2,81
+a,0
+81
+1d,0
+81
+a,0
+81
+2f,0
+81
+a,0
+81
+1c,0
+81
+a,0
+81
+3c,0
+81
+1b,0
+81
+a,0
+81
+3c,0
+81
+1a,0
+81
+a,0
+81
+3e,0
+81
+19,0
+81
+9,0
+2,81
+3e,0
+81
+18,0
+2,81
+9,0
+81
+3f,0
+2,81
+17,0
+81
+9,0
+2,81
+40,0
+81
+17,0
+81
+9,0
+81
+41,0
+81
+17,0
+81
+9,0
+81
+41,0
+81
+16,0
+81
+9,0
+81
+1b,0
+d,81
+1b,0
+81
+15,0
+81
+9,0
+81
+17,0
+4,81
+d,0
+4,81
+17,0
+81
+15,0
+81
+9,0
+81
+14,0
+3,81
+15,0
+3,81
+14,0
+81
+15,0
+81
+9,0
+81
+13,0
+2,81
+19,0
+2,81
+13,0
+81
+14,0
+81
+9,0
+81
+13,0
+81
+1d,0
+81
+13,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+1d,0
+b,81
+1d,0
+81
+13,0
+81
+9,0
+81
+1a,0
+3,81
+b,0
+3,81
+1a,0
+81
+13,0
+81
+9,0
+81
+17,0
+3,81
+11,0
+3,81
+17,0
+81
+13,0
+81
+9,0
+81
+16,0
+2,81
+15,0
+2,81
+16,0
+81
+13,0
+81
+9,0
+81
+14,0
+2,81
+19,0
+2,81
+14,0
+81
+13,0
+81
+9,0
+81
+13,0
+81
+1d,0
+81
+13,0
+81
+13,0
+81
+a,0
+81
+11,0
+81
+1f,0
+81
+12,0
+81
+13,0
+81
+a,0
+81
+10,0
+81
+21,0
+81
+11,0
+81
+14,0
+81
+9,0
+81
+f,0
+81
+23,0
+81
+f,0
+81
+15,0
+81
+9,0
+81
+f,0
+81
+23,0
+81
+f,0
+81
+15,0
+81
+a,0
+81
+d,0
+81
+25,0
+81
+e,0
+81
+15,0
+81
+a,0
+81
+d,0
+81
+25,0
+81
+e,0
+81
+16,0
+81
+9,0
+2,81
+b,0
+81
+27,0
+81
+c,0
+81
+17,0
+81
+a,0
+81
+b,0
+81
+27,0
+81
+c,0
+81
+17,0
+81
+a,0
+2,81
+a,0
+81
+27,0
+81
+c,0
+81
+17,0
+2,81
+a,0
+81
+a,0
+81
+27,0
+81
+b,0
+2,81
+18,0
+81
+b,0
+81
+9,0
+81
+27,0
+81
+b,0
+81
+19,0
+81
+15,0
+81
+27,0
+81
+b,0
+81
+1a,0
+81
+14,0
+81
+27,0
+81
+a,0
+81
+1b,0
+81
+15,0
+81
+25,0
+81
+b,0
+81
+1c,0
+81
+14,0
+81
+25,0
+81
+a,0
+81
+1d,0
+81
+15,0
+81
+23,0
+81
+b,0
+81
+1e,0
+81
+14,0
+81
+23,0
+81
+a,0
+81
+1f,0
+2,81
+14,0
+81
+21,0
+81
+a,0
+2,81
+20,0
+81
+15,0
+81
+1f,0
+81
+b,0
+81
+22,0
+81
+15,0
+81
+1d,0
+81
+b,0
+81
+24,0
+81
+15,0
+2,81
+19,0
+2,81
+b,0
+81
+25,0
+2,81
+16,0
+2,81
+15,0
+2,81
+c,0
+2,81
+26,0
+2,81
+16,0
+3,81
+11,0
+3,81
+c,0
+2,81
+28,0
+2,81
+18,0
+3,81
+b,0
+3,81
+e,0
+2,81
+2a,0
+2,81
+1a,0
+b,81
+10,0
+2,81
+2c,0
+2,81
+33,0
+2,81
+2e,0
+2,81
+31,0
+2,81
+31,0
+81
+2f,0
+81
+34,0
+2,81
+2b,0
+2,81
+36,0
+2,81
+29,0
+2,81
+39,0
+2,81
+25,0
+2,81
+3d,0
+2,81
+21,0
+2,81
+41,0
+3,81
+1b,0
+3,81
+45,0
+4,81
+15,0
+4,81
+4b,0
+4,81
+d,0
+4,81
+53,0
+d,81
+1c0,0
+100 90 32
+21b,0
+d,a3
+53,0
+4,a3
+d,0
+4,a3
+4b,0
+4,a3
+15,0
+4,a3
+45,0
+3,a3
+1b,0
+3,a3
+41,0
+2,a3
+21,0
+2,a3
+3d,0
+2,a3
+25,0
+2,a3
+39,0
+2,a3
+29,0
+2,a3
+36,0
+2,a3
+2b,0
+2,a3
+34,0
+a3
+2f,0
+a3
+31,0
+2,a3
+13,0
+4,a3
+1a,0
+2,a3
+2e,0
+2,a3
+10,0
+4,a3
+1f,0
+2,a3
+2c,0
+2,a3
+e,0
+3,a3
+9,0
+6,a3
+15,0
+2,a3
+2a,0
+2,a3
+d,0
+3,a3
+11,0
+5,a3
+11,0
+2,a3
+28,0
+2,a3
+d,0
+2,a3
+18,0
+3,a3
+f,0
+2,a3
+26,0
+2,a3
+c,0
+2,a3
+1c,0
+3,a3
+e,0
+2,a3
+25,0
+a3
+c,0
+a3
+21,0
+2,a3
+d,0
+a3
+24,0
+a3
+b,0
+2,a3
+24,0
+a3
+d,0
+a3
+22,0
+a3
+b,0
+2,a3
+26,0
+2,a3
+c,0
+a3
+20,0
+2,a3
+a,0
+2,a3
+29,0
+a3
+b,0
+2,a3
+1f,0
+a3
+a,0
+2,a3
+f,0
+3,a3
+19,0
+2,a3
+a,0
+a3
+1e,0
+a3
+b,0
+a3
+2d,0
+2,a3
+a,0
+a3
+1d,0
+a3
+a,0
+a3
+2f,0
+a3
+a,0
+a3
+1c,0
+a3
+a,0
+a3
+3c,0
+a3
+1b,0
+a3
+a,0
+a3
+3c,0
+a3
+1a,0
+a3
+a,0
+a3
+3e,0
+a3
+19,0
+a3
+9,0
+2,a3
+3e,0
+a3
+18,0
+2,a3
+9,0
+a3
+3f,0
+2,a3
+17,0
+a3
+9,0
+2,a3
+40,0
+a3
+17,0
+a3
+9,0
+a3
+41,0
+a3
+17,0
+a3
+9,0
+a3
+41,0
+a3
+16,0
+a3
+9,0
+a3
+1b,0
+d,a3
+1b,0
+a3
+15,0
+a3
+9,0
+a3
+17,0
+4,a3
+d,0
+4,a3
+17,0
+a3
+15,0
+a3
+9,0
+a3
+14,0
+3,a3
+15,0
+3,a3
+14,0
+a3
+15,0
+a3
+9,0
+a3
+13,0
+2,a3
+19,0
+2,a3
+13,0
+a3
+14,0
+a3
+9,0
+a3
+13,0
+a3
+1d,0
+a3
+13,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+1d,0
+b,a3
+1d,0
+a3
+13,0
+a3
+9,0
+a3
+1a,0
+3,a3
+b,0
+3,a3
+1a,0
+a3
+13,0
+a3
+9,0
+a3
+17,0
+3,a3
+11,0
+3,a3
+17,0
+a3
+13,0
+a3
+9,0
+a3
+16,0
+2,a3
+15,0
+2,a3
+16,0
+a3
+13,0
+a3
+9,0
+a3
+14,0
+2,a3
+19,0
+2,a3
+14,0
+a3
+13,0
+a3
+9,0
+a3
+13,0
+a3
+1d,0
+a3
+13,0
+a3
+13,0
+a3
+a,0
+a3
+11,0
+a3
+1f,0
+a3
+12,0
+a3
+13,0
+a3
+a,0
+a3
+10,0
+a3
+21,0
+a3
+11,0
+a3
+14,0
+a3
+9,0
+a3
+f,0
+a3
+23,0
+a3
+f,0
+a3
+15,0
+a3
+9,0
+a3
+f,0
+a3
+23,0
+a3
+f,0
+a3
+15,0
+a3
+a,0
+a3
+d,0
+a3
+25,0
+a3
+e,0
+a3
+15,0
+a3
+a,0
+a3
+d,0
+a3
+25,0
+a3
+e,0
+a3
+16,0
+a3
+9,0
+2,a3
+b,0
+a3
+27,0
+a3
+c,0
+a3
+17,0
+a3
+a,0
+a3
+b,0
+a3
+27,0
+a3
+c,0
+a3
+17,0
+a3
+a,0
+2,a3
+a,0
+a3
+27,0
+a3
+c,0
+a3
+17,0
+2,a3
+a,0
+a3
+a,0
+a3
+27,0
+a3
+b,0
+2,a3
+18,0
+a3
+b,0
+a3
+9,0
+a3
+27,0
+a3
+b,0
+a3
+19,0
+a3
+15,0
+a3
+27,0
+a3
+b,0
+a3
+1a,0
+a3
+14,0
+a3
+27,0
+a3
+a,0
+a3
+1b,0
+a3
+15,0
+a3
+25,0
+a3
+b,0
+a3
+1c,0
+a3
+14,0
+a3
+25,0
+a3
+a,0
+a3
+1d,0
+a3
+15,0
+a3
+23,0
+a3
+b,0
+a3
+1e,0
+a3
+14,0
+a3
+23,0
+a3
+a,0
+a3
+1f,0
+2,a3
+14,0
+a3
+21,0
+a3
+a,0
+2,a3
+20,0
+a3
+15,0
+a3
+1f,0
+a3
+b,0
+a3
+22,0
+a3
+15,0
+a3
+1d,0
+a3
+b,0
+a3
+24,0
+a3
+15,0
+2,a3
+19,0
+2,a3
+b,0
+a3
+25,0
+2,a3
+16,0
+2,a3
+15,0
+2,a3
+c,0
+2,a3
+26,0
+2,a3
+16,0
+3,a3
+11,0
+3,a3
+c,0
+2,a3
+28,0
+2,a3
+18,0
+3,a3
+b,0
+3,a3
+e,0
+2,a3
+2a,0
+2,a3
+1a,0
+b,a3
+10,0
+2,a3
+2c,0
+2,a3
+33,0
+2,a3
+2e,0
+2,a3
+31,0
+2,a3
+31,0
+a3
+2f,0
+a3
+34,0
+2,a3
+2b,0
+2,a3
+36,0
+2,a3
+29,0
+2,a3
+39,0
+2,a3
+25,0
+2,a3
+3d,0
+2,a3
+21,0
+2,a3
+41,0
+3,a3
+1b,0
+3,a3
+45,0
+4,a3
+15,0
+4,a3
+4b,0
+4,a3
+d,0
+4,a3
+53,0
+d,a3
+1c0,0
+100 90 32
+21b,0
+d,ff
+53,0
+4,ff
+d,0
+4,ff
+4b,0
+4,ff
+15,0
+4,ff
+45,0
+3,ff
+1b,0
+3,ff
+41,0
+2,ff
+21,0
+2,ff
+3d,0
+2,ff
+25,0
+2,ff
+39,0
+2,ff
+29,0
+2,ff
+36,0
+2,ff
+2b,0
+2,ff
+34,0
+ff
+2f,0
+ff
+31,0
+2,ff
+13,0
+4,ff
+1a,0
+2,ff
+2e,0
+2,ff
+10,0
+4,ff
+1f,0
+2,ff
+2c,0
+2,ff
+e,0
+3,ff
+9,0
+6,ff
+15,0
+2,ff
+2a,0
+2,ff
+d,0
+3,ff
+11,0
+5,ff
+11,0
+2,ff
+28,0
+2,ff
+d,0
+2,ff
+18,0
+3,ff
+f,0
+2,ff
+26,0
+2,ff
+c,0
+2,ff
+1c,0
+3,ff
+e,0
+2,ff
+25,0
+ff
+c,0
+ff
+21,0
+2,ff
+d,0
+ff
+24,0
+ff
+b,0
+2,ff
+24,0
+ff
+d,0
+ff
+22,0
+ff
+b,0
+2,ff
+26,0
+2,ff
+c,0
+ff
+20,0
+2,ff
+a,0
+2,ff
+29,0
+ff
+b,0
+2,ff
+1f,0
+ff
+a,0
+2,ff
+f,0
+3,ff
+19,0
+2,ff
+a,0
+ff
+1e,0
+ff
+b,0
+ff
+2d,0
+2,ff
+a,0
+ff
+1d,0
+ff
+a,0
+ff
+2f,0
+ff
+a,0
+ff
+1c,0
+ff
+a,0
+ff
+3c,0
+ff
+1b,0
+ff
+a,0
+ff
+3c,0
+ff
+1a,0
+ff
+a,0
+ff
+3e,0
+ff
+19,0
+ff
+9,0
+2,ff
+3e,0
+ff
+18,0
+2,ff
+9,0
+ff
+3f,0
+2,ff
+17,0
+ff
+9,0
+2,ff
+40,0
+ff
+17,0
+ff
+9,0
+ff
+41,0
+ff
+17,0
+ff
+9,0
+ff
+41,0
+ff
+16,0
+ff
+9,0
+ff
+1b,0
+d,ff
+1b,0
+ff
+15,0
+ff
+9,0
+ff
+17,0
+4,ff
+d,0
+4,ff
+17,0
+ff
+15,0
+ff
+9,0
+ff
+14,0
+3,ff
+15,0
+3,ff
+14,0
+ff
+15,0
+ff
+9,0
+ff
+13,0
+2,ff
+19,0
+2,ff
+13,0
+ff
+14,0
+ff
+9,0
+ff
+13,0
+ff
+1d,0
+ff
+13,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+1d,0
+b,ff
+1d,0
+ff
+13,0
+ff
+9,0
+ff
+1a,0
+3,ff
+b,0
+3,ff
+1a,0
+ff
+13,0
+ff
+9,0
+ff
+17,0
+3,ff
+11,0
+3,ff
+17,0
+ff
+13,0
+ff
+9,0
+ff
+16,0
+2,ff
+15,0
+2,ff
+16,0
+ff
+13,0
+ff
+9,0
+ff
+14,0
+2,ff
+19,0
+2,ff
+14,0
+ff
+13,0
+ff
+9,0
+ff
+13,0
+ff
+1d,0
+ff
+13,0
+ff
+13,0
+ff
+a,0
+ff
+11,0
+ff
+1f,0
+ff
+12,0
+ff
+13,0
+ff
+a,0
+ff
+10,0
+ff
+21,0
+ff
+11,0
+ff
+14,0
+ff
+9,0
+ff
+f,0
+ff
+23,0
+ff
+f,0
+ff
+15,0
+ff
+9,0
+ff
+f,0
+ff
+23,0
+ff
+f,0
+ff
+15,0
+ff
+a,0
+ff
+d,0
+ff
+25,0
+ff
+e,0
+ff
+15,0
+ff
+a,0
+ff
+d,0
+ff
+25,0
+ff
+e,0
+ff
+16,0
+ff
+9,0
+2,ff
+b,0
+ff
+27,0
+ff
+c,0
+ff
+17,0
+ff
+a,0
+ff
+b,0
+ff
+27,0
+ff
+c,0
+ff
+17,0
+ff
+a,0
+2,ff
+a,0
+ff
+27,0
+ff
+c,0
+ff
+17,0
+2,ff
+a,0
+ff
+a,0
+ff
+27,0
+ff
+b,0
+2,ff
+18,0
+ff
+b,0
+ff
+9,0
+ff
+27,0
+ff
+b,0
+ff
+19,0
+ff
+15,0
+ff
+27,0
+ff
+b,0
+ff
+1a,0
+ff
+14,0
+ff
+27,0
+ff
+a,0
+ff
+1b,0
+ff
+15,0
+ff
+25,0
+ff
+b,0
+ff
+1c,0
+ff
+14,0
+ff
+25,0
+ff
+a,0
+ff
+1d,0
+ff
+15,0
+ff
+23,0
+ff
+b,0
+ff
+1e,0
+ff
+14,0
+ff
+23,0
+ff
+a,0
+ff
+1f,0
+2,ff
+14,0
+ff
+21,0
+ff
+a,0
+2,ff
+20,0
+ff
+15,0
+ff
+1f,0
+ff
+b,0
+ff
+22,0
+ff
+15,0
+ff
+1d,0
+ff
+b,0
+ff
+24,0
+ff
+15,0
+2,ff
+19,0
+2,ff
+b,0
+ff
+25,0
+2,ff
+16,0
+2,ff
+15,0
+2,ff
+c,0
+2,ff
+26,0
+2,ff
+16,0
+3,ff
+11,0
+3,ff
+c,0
+2,ff
+28,0
+2,ff
+18,0
+3,ff
+b,0
+3,ff
+e,0
+2,ff
+2a,0
+2,ff
+1a,0
+b,ff
+10,0
+2,ff
+2c,0
+2,ff
+33,0
+2,ff
+2e,0
+2,ff
+31,0
+2,ff
+31,0
+ff
+2f,0
+ff
+34,0
+2,ff
+2b,0
+2,ff
+36,0
+2,ff
+29,0
+2,ff
+39,0
+2,ff
+25,0
+2,ff
+3d,0
+2,ff
+21,0
+2,ff
+41,0
+3,ff
+1b,0
+3,ff
+45,0
+4,ff
+15,0
+4,ff
+4b,0
+4,ff
+d,0
+4,ff
+53,0
+d,ff
+1c0,0
+100 90 32
+21b,0
+d,100
+53,0
+4,100
+d,0
+4,100
+4b,0
+4,100
+15,0
+4,100
+45,0
+3,100
+1b,0
+3,100
+41,0
+2,100
+21,0
+2,100
+3d,0
+2,100
+25,0
+2,100
+39,0
+2,100
+29,0
+2,100
+36,0
+2,100
+2b,0
+2,100
+34,0
+100
+2f,0
+100
+31,0
+2,100
+13,0
+4,100
+1a,0
+2,100
+2e,0
+2,100
+10,0
+4,100
+1f,0
+2,100
+2c,0
+2,100
+e,0
+3,100
+9,0
+6,100
+15,0
+2,100
+2a,0
+2,100
+d,0
+3,100
+11,0
+5,100
+11,0
+2,100
+28,0
+2,100
+d,0
+2,100
+18,0
+3,100
+f,0
+2,100
+26,0
+2,100
+c,0
+2,100
+1c,0
+3,100
+e,0
+2,100
+25,0
+100
+c,0
+100
+21,0
+2,100
+d,0
+100
+24,0
+100
+b,0
+2,100
+24,0
+100
+d,0
+100
+22,0
+100
+b,0
+2,100
+26,0
+2,100
+c,0
+100
+20,0
+2,100
+a,0
+2,100
+29,0
+100
+b,0
+2,100
+1f,0
+100
+a,0
+2,100
+f,0
+3,100
+19,0
+2,100
+a,0
+100
+1e,0
+100
+b,0
+100
+2d,0
+2,100
+a,0
+100
+1d,0
+100
+a,0
+100
+2f,0
+100
+a,0
+100
+1c,0
+100
+a,0
+100
+3c,0
+100
+1b,0
+100
+a,0
+100
+3c,0
+100
+1a,0
+100
+a,0
+100
+3e,0
+100
+19,0
+100
+9,0
+2,100
+3e,0
+100
+18,0
+2,100
+9,0
+100
+3f,0
+2,100
+17,0
+100
+9,0
+2,100
+40,0
+100
+17,0
+100
+9,0
+100
+41,0
+100
+17,0
+100
+9,0
+100
+41,0
+100
+16,0
+100
+9,0
+100
+1b,0
+d,100
+1b,0
+100
+15,0
+100
+9,0
+100
+17,0
+4,100
+d,0
+4,100
+17,0
+100
+15,0
+100
+9,0
+100
+14,0
+3,100
+15,0
+3,100
+14,0
+100
+15,0
+100
+9,0
+100
+13,0
+2,100
+19,0
+2,100
+13,0
+100
+14,0
+100
+9,0
+100
+13,0
+100
+1d,0
+100
+13,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+1d,0
+b,100
+1d,0
+100
+13,0
+100
+9,0
+100
+1a,0
+3,100
+b,0
+3,100
+1a,0
+100
+13,0
+100
+9,0
+100
+17,0
+3,100
+11,0
+3,100
+17,0
+100
+13,0
+100
+9,0
+100
+16,0
+2,100
+15,0
+2,100
+16,0
+100
+13,0
+100
+9,0
+100
+14,0
+2,100
+19,0
+2,100
+14,0
+100
+13,0
+100
+9,0
+100
+13,0
+100
+1d,0
+100
+13,0
+100
+13,0
+100
+a,0
+100
+11,0
+100
+1f,0
+100
+12,0
+100
+13,0
+100
+a,0
+100
+10,0
+100
+21,0
+100
+11,0
+100
+14,0
+100
+9,0
+100
+f,0
+100
+23,0
+100
+f,0
+100
+15,0
+100
+9,0
+100
+f,0
+100
+23,0
+100
+f,0
+100
+15,0
+100
+a,0
+100
+d,0
+100
+25,0
+100
+e,0
+100
+15,0
+100
+a,0
+100
+d,0
+100
+25,0
+100
+e,0
+100
+16,0
+100
+9,0
+2,100
+b,0
+100
+27,0
+100
+c,0
+100
+17,0
+100
+a,0
+100
+b,0
+100
+27,0
+100
+c,0
+100
+17,0
+100
+a,0
+2,100
+a,0
+100
+27,0
+100
+c,0
+100
+17,0
+2,100
+a,0
+100
+a,0
+100
+27,0
+100
+b,0
+2,100
+18,0
+100
+b,0
+100
+9,0
+100
+27,0
+100
+b,0
+100
+19,0
+100
+15,0
+100
+27,0
+100
+b,0
+100
+1a,0
+100
+14,0
+100
+27,0
+100
+a,0
+100
+1b,0
+100
+15,0
+100
+25,0
+100
+b,0
+100
+1c,0
+100
+14,0
+100
+25,0
+100
+a,0
+100
+1d,0
+100
+15,0
+100
+23,0
+100
+b,0
+100
+1e,0
+100
+14,0
+100
+23,0
+100
+a,0
+100
+1f,0
+2,100
+14,0
+100
+21,0
+100
+a,0
+2,100
+20,0
+100
+15,0
+100
+1f,0
+100
+b,0
+100
+22,0
+100
+15,0
+100
+1d,0
+100
+b,0
+100
+24,0
+100
+15,0
+2,100
+19,0
+2,100
+b,0
+100
+25,0
+2,100
+16,0
+2,100
+15,0
+2,100
+c,0
+2,100
+26,0
+2,100
+16,0
+3,100
+11,0
+3,100
+c,0
+2,100
+28,0
+2,100
+18,0
+3,100
+b,0
+3,100
+e,0
+2,100
+2a,0
+2,100
+1a,0
+b,100
+10,0
+2,100
+2c,0
+2,100
+33,0
+2,100
+2e,0
+2,100
+31,0
+2,100
+31,0
+100
+2f,0
+100
+34,0
+2,100
+2b,0
+2,100
+36,0
+2,100
+29,0
+2,100
+39,0
+2,100
+25,0
+2,100
+3d,0
+2,100
+21,0
+2,100
+41,0
+3,100
+1b,0
+3,100
+45,0
+4,100
+15,0
+4,100
+4b,0
+4,100
+d,0
+4,100
+53,0
+d,100
+1c0,0
+100 90 32
+21b,0
+d,12c
+53,0
+4,12c
+d,0
+4,12c
+4b,0
+4,12c
+15,0
+4,12c
+45,0
+3,12c
+1b,0
+3,12c
+41,0
+2,12c
+21,0
+2,12c
+3d,0
+2,12c
+25,0
+2,12c
+39,0
+2,12c
+29,0
+2,12c
+36,0
+2,12c
+2b,0
+2,12c
+34,0
+12c
+2f,0
+12c
+31,0
+2,12c
+13,0
+4,12c
+1a,0
+2,12c
+2e,0
+2,12c
+10,0
+4,12c
+1f,0
+2,12c
+2c,0
+2,12c
+e,0
+3,12c
+9,0
+6,12c
+15,0
+2,12c
+2a,0
+2,12c
+d,0
+3,12c
+11,0
+5,12c
+11,0
+2,12c
+28,0
+2,12c
+d,0
+2,12c
+18,0
+3,12c
+f,0
+2,12c
+26,0
+2,12c
+c,0
+2,12c
+1c,0
+3,12c
+e,0
+2,12c
+25,0
+12c
+c,0
+12c
+21,0
+2,12c
+d,0
+12c
+24,0
+12c
+b,0
+2,12c
+24,0
+12c
+d,0
+12c
+22,0
+12c
+b,0
+2,12c
+26,0
+2,12c
+c,0
+12c
+20,0
+2,12c
+a,0
+2,12c
+29,0
+12c
+b,0
+2,12c
+1f,0
+12c
+a,0
+2,12c
+f,0
+3,12c
+19,0
+2,12c
+a,0
+12c
+1e,0
+12c
+b,0
+12c
+2d,0
+2,12c
+a,0
+12c
+1d,0
+12c
+a,0
+12c
+2f,0
+12c
+a,0
+12c
+1c,0
+12c
+a,0
+12c
+3c,0
+12c
+1b,0
+12c
+a,0
+12c
+3c,0
+12c
+1a,0
+12c
+a,0
+12c
+3e,0
+12c
+19,0
+12c
+9,0
+2,12c
+3e,0
+12c
+18,0
+2,12c
+9,0
+12c
+3f,0
+2,12c
+17,0
+12c
+9,0
+2,12c
+40,0
+12c
+17,0
+12c
+9,0
+12c
+41,0
+12c
+17,0
+12c
+9,0
+12c
+41,0
+12c
+16,0
+12c
+9,0
+12c
+1b,0
+d,12c
+1b,0
+12c
+15,0
+12c
+9,0
+12c
+17,0
+4,12c
+d,0
+4,12c
+17,0
+12c
+15,0
+12c
+9,0
+12c
+14,0
+3,12c
+15,0
+3,12c
+14,0
+12c
+15,0
+12c
+9,0
+12c
+13,0
+2,12c
+19,0
+2,12c
+13,0
+12c
+14,0
+12c
+9,0
+12c
+13,0
+12c
+1d,0
+12c
+13,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+1d,0
+b,12c
+1d,0
+12c
+13,0
+12c
+9,0
+12c
+1a,0
+3,12c
+b,0
+3,12c
+1a,0
+12c
+13,0
+12c
+9,0
+12c
+17,0
+3,12c
+11,0
+3,12c
+17,0
+12c
+13,0
+12c
+9,0
+12c
+16,0
+2,12c
+15,0
+2,12c
+16,0
+12c
+13,0
+12c
+9,0
+12c
+14,0
+2,12c
+19,0
+2,12c
+14,0
+12c
+13,0
+12c
+9,0
+12c
+13,0
+12c
+1d,0
+12c
+13,0
+12c
+13,0
+12c
+a,0
+12c
+11,0
+12c
+1f,0
+12c
+12,0
+12c
+13,0
+12c
+a,0
+12c
+10,0
+12c
+21,0
+12c
+11,0
+12c
+14,0
+12c
+9,0
+12c
+f,0
+12c
+23,0
+12c
+f,0
+12c
+15,0
+12c
+9,0
+12c
+f,0
+12c
+23,0
+12c
+f,0
+12c
+15,0
+12c
+a,0
+12c
+d,0
+12c
+25,0
+12c
+e,0
+12c
+15,0
+12c
+a,0
+12c
+d,0
+12c
+25,0
+12c
+e,0
+12c
+16,0
+12c
+9,0
+2,12c
+b,0
+12c
+27,0
+12c
+c,0
+12c
+17,0
+12c
+a,0
+12c
+b,0
+12c
+27,0
+12c
+c,0
+12c
+17,0
+12c
+a,0
+2,12c
+a,0
+12c
+27,0
+12c
+c,0
+12c
+17,0
+2,12c
+a,0
+12c
+a,0
+12c
+27,0
+12c
+b,0
+2,12c
+18,0
+12c
+b,0
+12c
+9,0
+12c
+27,0
+12c
+b,0
+12c
+19,0
+12c
+15,0
+12c
+27,0
+12c
+b,0
+12c
+1a,0
+12c
+14,0
+12c
+27,0
+12c
+a,0
+12c
+1b,0
+12c
+15,0
+12c
+25,0
+12c
+b,0
+12c
+1c,0
+12c
+14,0
+12c
+25,0
+12c
+a,0
+12c
+1d,0
+12c
+15,0
+12c
+23,0
+12c
+b,0
+12c
+1e,0
+12c
+14,0
+12c
+23,0
+12c
+a,0
+12c
+1f,0
+2,12c
+14,0
+12c
+21,0
+12c
+a,0
+2,12c
+20,0
+12c
+15,0
+12c
+1f,0
+12c
+b,0
+12c
+22,0
+12c
+15,0
+12c
+1d,0
+12c
+b,0
+12c
+24,0
+12c
+15,0
+2,12c
+19,0
+2,12c
+b,0
+12c
+25,0
+2,12c
+16,0
+2,12c
+15,0
+2,12c
+c,0
+2,12c
+26,0
+2,12c
+16,0
+3,12c
+11,0
+3,12c
+c,0
+2,12c
+28,0
+2,12c
+18,0
+3,12c
+b,0
+3,12c
+e,0
+2,12c
+2a,0
+2,12c
+1a,0
+b,12c
+10,0
+2,12c
+2c,0
+2,12c
+33,0
+2,12c
+2e,0
+2,12c
+31,0
+2,12c
+31,0
+12c
+2f,0
+12c
+34,0
+2,12c
+2b,0
+2,12c
+36,0
+2,12c
+29,0
+2,12c
+39,0
+2,12c
+25,0
+2,12c
+3d,0
+2,12c
+21,0
+2,12c
+41,0
+3,12c
+1b,0
+3,12c
+45,0
+4,12c
+15,0
+4,12c
+4b,0
+4,12c
+d,0
+4,12c
+53,0
+d,12c
+1c0,0
+100 90 32
+21b,0
+d,3e8
+53,0
+4,3e8
+d,0
+4,3e8
+4b,0
+4,3e8
+15,0
+4,3e8
+45,0
+3,3e8
+1b,0
+3,3e8
+41,0
+2,3e8
+21,0
+2,3e8
+3d,0
+2,3e8
+25,0
+2,3e8
+39,0
+2,3e8
+29,0
+2,3e8
+36,0
+2,3e8
+2b,0
+2,3e8
+34,0
+3e8
+2f,0
+3e8
+31,0
+2,3e8
+13,0
+4,3e8
+1a,0
+2,3e8
+2e,0
+2,3e8
+10,0
+4,3e8
+1f,0
+2,3e8
+2c,0
+2,3e8
+e,0
+3,3e8
+9,0
+6,3e8
+15,0
+2,3e8
+2a,0
+2,3e8
+d,0
+3,3e8
+11,0
+5,3e8
+11,0
+2,3e8
+28,0
+2,3e8
+d,0
+2,3e8
+18,0
+3,3e8
+f,0
+2,3e8
+26,0
+2,3e8
+c,0
+2,3e8
+1c,0
+3,3e8
+e,0
+2,3e8
+25,0
+3e8
+c,0
+3e8
+21,0
+2,3e8
+d,0
+3e8
+24,0
+3e8
+b,0
+2,3e8
+24,0
+3e8
+d,0
+3e8
+22,0
+3e8
+b,0
+2,3e8
+26,0
+2,3e8
+c,0
+3e8
+20,0
+2,3e8
+a,0
+2,3e8
+29,0
+3e8
+b,0
+2,3e8
+1f,0
+3e8
+a,0
+2,3e8
+f,0
+3,3e8
+19,0
+2,3e8
+a,0
+3e8
+1e,0
+3e8
+b,0
+3e8
+2d,0
+2,3e8
+a,0
+3e8
+1d,0
+3e8
+a,0
+3e8
+2f,0
+3e8
+a,0
+3e8
+1c,0
+3e8
+a,0
+3e8
+3c,0
+3e8
+1b,0
+3e8
+a,0
+3e8
+3c,0
+3e8
+1a,0
+3e8
+a,0
+3e8
+3e,0
+3e8
+19,0
+3e8
+9,0
+2,3e8
+3e,0
+3e8
+18,0
+2,3e8
+9,0
+3e8
+3f,0
+2,3e8
+17,0
+3e8
+9,0
+2,3e8
+40,0
+3e8
+17,0
+3e8
+9,0
+3e8
+41,0
+3e8
+17,0
+3e8
+9,0
+3e8
+41,0
+3e8
+16,0
+3e8
+9,0
+3e8
+1b,0
+d,3e8
+1b,0
+3e8
+15,0
+3e8
+9,0
+3e8
+17,0
+4,3e8
+d,0
+4,3e8
+17,0
+3e8
+15,0
+3e8
+9,0
+3e8
+14,0
+3,3e8
+15,0
+3,3e8
+14,0
+3e8
+15,0
+3e8
+9,0
+3e8
+13,0
+2,3e8
+19,0
+2,3e8
+13,0
+3e8
+14,0
+3e8
+9,0
+3e8
+13,0
+3e8
+1d,0
+3e8
+13,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+1d,0
+b,3e8
+1d,0
+3e8
+13,0
+3e8
+9,0
+3e8
+1a,0
+3,3e8
+b,0
+3,3e8
+1a,0
+3e8
+13,0
+3e8
+9,0
+3e8
+17,0
+3,3e8
+11,0
+3,3e8
+17,0
+3e8
+13,0
+3e8
+9,0
+3e8
+16,0
+2,3e8
+15,0
+2,3e8
+16,0
+3e8
+13,0
+3e8
+9,0
+3e8
+14,0
+2,3e8
+19,0
+2,3e8
+14,0
+3e8
+13,0
+3e8
+9,0
+3e8
+13,0
+3e8
+1d,0
+3e8
+13,0
+3e8
+13,0
+3e8
+a,0
+3e8
+11,0
+3e8
+1f,0
+3e8
+12,0
+3e8
+13,0
+3e8
+a,0
+3e8
+10,0
+3e8
+21,0
+3e8
+11,0
+3e8
+14,0
+3e8
+9,0
+3e8
+f,0
+3e8
+23,0
+3e8
+f,0
+3e8
+15,0
+3e8
+9,0
+3e8
+f,0
+3e8
+23,0
+3e8
+f,0
+3e8
+15,0
+3e8
+a,0
+3e8
+d,0
+3e8
+25,0
+3e8
+e,0
+3e8
+15,0
+3e8
+a,0
+3e8
+d,0
+3e8
+25,0
+3e8
+e,0
+3e8
+16,0
+3e8
+9,0
+2,3e8
+b,0
+3e8
+27,0
+3e8
+c,0
+3e8
+17,0
+3e8
+a,0
+3e8
+b,0
+3e8
+27,0
+3e8
+c,0
+3e8
+17,0
+3e8
+a,0
+2,3e8
+a,0
+3e8
+27,0
+3e8
+c,0
+3e8
+17,0
+2,3e8
+a,0
+3e8
+a,0
+3e8
+27,0
+3e8
+b,0
+2,3e8
+18,0
+3e8
+b,0
+3e8
+9,0
+3e8
+27,0
+3e8
+b,0
+3e8
+19,0
+3e8
+15,0
+3e8
+27,0
+3e8
+b,0
+3e8
+1a,0
+3e8
+14,0
+3e8
+27,0
+3e8
+a,0
+3e8
+1b,0
+3e8
+15,0
+3e8
+25,0
+3e8
+b,0
+3e8
+1c,0
+3e8
+14,0
+3e8
+25,0
+3e8
+a,0
+3e8
+1d,0
+3e8
+15,0
+3e8
+23,0
+3e8
+b,0
+3e8
+1e,0
+3e8
+14,0
+3e8
+23,0
+3e8
+a,0
+3e8
+1f,0
+2,3e8
+14,0
+3e8
+21,0
+3e8
+a,0
+2,3e8
+20,0
+3e8
+15,0
+3e8
+1f,0
+3e8
+b,0
+3e8
+22,0
+3e8
+15,0
+3e8
+1d,0
+3e8
+b,0
+3e8
+24,0
+3e8
+15,0
+2,3e8
+19,0
+2,3e8
+b,0
+3e8
+25,0
+2,3e8
+16,0
+2,3e8
+15,0
+2,3e8
+c,0
+2,3e8
+26,0
+2,3e8
+16,0
+3,3e8
+11,0
+3,3e8
+c,0
+2,3e8
+28,0
+2,3e8
+18,0
+3,3e8
+b,0
+3,3e8
+e,0
+2,3e8
+2a,0
+2,3e8
+1a,0
+b,3e8
+10,0
+2,3e8
+2c,0
+2,3e8
+33,0
+2,3e8
+2e,0
+2,3e8
+31,0
+2,3e8
+31,0
+3e8
+2f,0
+3e8
+34,0
+2,3e8
+2b,0
+2,3e8
+36,0
+2,3e8
+29,0
+2,3e8
+39,0
+2,3e8
+25,0
+2,3e8
+3d,0
+2,3e8
+21,0
+2,3e8
+41,0
+3,3e8
+1b,0
+3,3e8
+45,0
+4,3e8
+15,0
+4,3e8
+4b,0
+4,3e8
+d,0
+4,3e8
+53,0
+d,3e8
+1c0,0
+100 90 32
+21b,0
+d,111111
+53,0
+4,111111
+d,0
+4,111111
+4b,0
+4,111111
+15,0
+4,111111
+45,0
+3,111111
+1b,0
+3,111111
+41,0
+2,111111
+21,0
+2,111111
+3d,0
+2,111111
+25,0
+2,111111
+39,0
+2,111111
+29,0
+2,111111
+36,0
+2,111111
+2b,0
+2,111111
+34,0
+111111
+2f,0
+111111
+31,0
+2,111111
+13,0
+4,111111
+1a,0
+2,111111
+2e,0
+2,111111
+10,0
+4,111111
+1f,0
+2,111111
+2c,0
+2,111111
+e,0
+3,111111
+9,0
+6,111111
+15,0
+2,111111
+2a,0
+2,111111
+d,0
+3,111111
+11,0
+5,111111
+11,0
+2,111111
+28,0
+2,111111
+d,0
+2,111111
+18,0
+3,111111
+f,0
+2,111111
+26,0
+2,111111
+c,0
+2,111111
+1c,0
+3,111111
+e,0
+2,111111
+25,0
+111111
+c,0
+111111
+21,0
+2,111111
+d,0
+111111
+24,0
+111111
+b,0
+2,111111
+24,0
+111111
+d,0
+111111
+22,0
+111111
+b,0
+2,111111
+26,0
+2,111111
+c,0
+111111
+20,0
+2,111111
+a,0
+2,111111
+29,0
+111111
+b,0
+2,111111
+1f,0
+111111
+a,0
+2,111111
+f,0
+3,111111
+19,0
+2,111111
+a,0
+111111
+1e,0
+111111
+b,0
+111111
+2d,0
+2,111111
+a,0
+111111
+1d,0
+111111
+a,0
+111111
+2f,0
+111111
+a,0
+111111
+1c,0
+111111
+a,0
+111111
+3c,0
+111111
+1b,0
+111111
+a,0
+111111
+3c,0
+111111
+1a,0
+111111
+a,0
+111111
+3e,0
+111111
+19,0
+111111
+9,0
+2,111111
+3e,0
+111111
+18,0
+2,111111
+9,0
+111111
+3f,0
+2,111111
+17,0
+111111
+9,0
+2,111111
+40,0
+111111
+17,0
+111111
+9,0
+111111
+41,0
+111111
+17,0
+111111
+9,0
+111111
+41,0
+111111
+16,0
+111111
+9,0
+111111
+1b,0
+d,111111
+1b,0
+111111
+15,0
+111111
+9,0
+111111
+17,0
+4,111111
+d,0
+4,111111
+17,0
+111111
+15,0
+111111
+9,0
+111111
+14,0
+3,111111
+15,0
+3,111111
+14,0
+111111
+15,0
+111111
+9,0
+111111
+13,0
+2,111111
+19,0
+2,111111
+13,0
+111111
+14,0
+111111
+9,0
+111111
+13,0
+111111
+1d,0
+111111
+13,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+1d,0
+b,111111
+1d,0
+111111
+13,0
+111111
+9,0
+111111
+1a,0
+3,111111
+b,0
+3,111111
+1a,0
+111111
+13,0
+111111
+9,0
+111111
+17,0
+3,111111
+11,0
+3,111111
+17,0
+111111
+13,0
+111111
+9,0
+111111
+16,0
+2,111111
+15,0
+2,111111
+16,0
+111111
+13,0
+111111
+9,0
+111111
+14,0
+2,111111
+19,0
+2,111111
+14,0
+111111
+13,0
+111111
+9,0
+111111
+13,0
+111111
+1d,0
+111111
+13,0
+111111
+13,0
+111111
+a,0
+111111
+11,0
+111111
+1f,0
+111111
+12,0
+111111
+13,0
+111111
+a,0
+111111
+10,0
+111111
+21,0
+111111
+11,0
+111111
+14,0
+111111
+9,0
+111111
+f,0
+111111
+23,0
+111111
+f,0
+111111
+15,0
+111111
+9,0
+111111
+f,0
+111111
+23,0
+111111
+f,0
+111111
+15,0
+111111
+a,0
+111111
+d,0
+111111
+25,0
+111111
+e,0
+111111
+15,0
+111111
+a,0
+111111
+d,0
+111111
+25,0
+111111
+e,0
+111111
+16,0
+111111
+9,0
+2,111111
+b,0
+111111
+27,0
+111111
+c,0
+111111
+17,0
+111111
+a,0
+111111
+b,0
+111111
+27,0
+111111
+c,0
+111111
+17,0
+111111
+a,0
+2,111111
+a,0
+111111
+27,0
+111111
+c,0
+111111
+17,0
+2,111111
+a,0
+111111
+a,0
+111111
+27,0
+111111
+b,0
+2,111111
+18,0
+111111
+b,0
+111111
+9,0
+111111
+27,0
+111111
+b,0
+111111
+19,0
+111111
+15,0
+111111
+27,0
+111111
+b,0
+111111
+1a,0
+111111
+14,0
+111111
+27,0
+111111
+a,0
+111111
+1b,0
+111111
+15,0
+111111
+25,0
+111111
+b,0
+111111
+1c,0
+111111
+14,0
+111111
+25,0
+111111
+a,0
+111111
+1d,0
+111111
+15,0
+111111
+23,0
+111111
+b,0
+111111
+1e,0
+111111
+14,0
+111111
+23,0
+111111
+a,0
+111111
+1f,0
+2,111111
+14,0
+111111
+21,0
+111111
+a,0
+2,111111
+20,0
+111111
+15,0
+111111
+1f,0
+111111
+b,0
+111111
+22,0
+111111
+15,0
+111111
+1d,0
+111111
+b,0
+111111
+24,0
+111111
+15,0
+2,111111
+19,0
+2,111111
+b,0
+111111
+25,0
+2,111111
+16,0
+2,111111
+15,0
+2,111111
+c,0
+2,111111
+26,0
+2,111111
+16,0
+3,111111
+11,0
+3,111111
+c,0
+2,111111
+28,0
+2,111111
+18,0
+3,111111
+b,0
+3,111111
+e,0
+2,111111
+2a,0
+2,111111
+1a,0
+b,111111
+10,0
+2,111111
+2c,0
+2,111111
+33,0
+2,111111
+2e,0
+2,111111
+31,0
+2,111111
+31,0
+111111
+2f,0
+111111
+34,0
+2,111111
+2b,0
+2,111111
+36,0
+2,111111
+29,0
+2,111111
+39,0
+2,111111
+25,0
+2,111111
+3d,0
+2,111111
+21,0
+2,111111
+41,0
+3,111111
+1b,0
+3,111111
+45,0
+4,111111
+15,0
+4,111111
+4b,0
+4,111111
+d,0
+4,111111
+53,0
+d,111111
+1c0,0
+100 90 32
+21b,0
+d,400200
+53,0
+4,400200
+d,0
+4,400200
+4b,0
+4,400200
+15,0
+4,400200
+45,0
+3,400200
+1b,0
+3,400200
+41,0
+2,400200
+21,0
+2,400200
+3d,0
+2,400200
+25,0
+2,400200
+39,0
+2,400200
+29,0
+2,400200
+36,0
+2,400200
+2b,0
+2,400200
+34,0
+400200
+2f,0
+400200
+31,0
+2,400200
+13,0
+4,400200
+1a,0
+2,400200
+2e,0
+2,400200
+10,0
+4,400200
+1f,0
+2,400200
+2c,0
+2,400200
+e,0
+3,400200
+9,0
+6,400200
+15,0
+2,400200
+2a,0
+2,400200
+d,0
+3,400200
+11,0
+5,400200
+11,0
+2,400200
+28,0
+2,400200
+d,0
+2,400200
+18,0
+3,400200
+f,0
+2,400200
+26,0
+2,400200
+c,0
+2,400200
+1c,0
+3,400200
+e,0
+2,400200
+25,0
+400200
+c,0
+400200
+21,0
+2,400200
+d,0
+400200
+24,0
+400200
+b,0
+2,400200
+24,0
+400200
+d,0
+400200
+22,0
+400200
+b,0
+2,400200
+26,0
+2,400200
+c,0
+400200
+20,0
+2,400200
+a,0
+2,400200
+29,0
+400200
+b,0
+2,400200
+1f,0
+400200
+a,0
+2,400200
+f,0
+3,400200
+19,0
+2,400200
+a,0
+400200
+1e,0
+400200
+b,0
+400200
+2d,0
+2,400200
+a,0
+400200
+1d,0
+400200
+a,0
+400200
+2f,0
+400200
+a,0
+400200
+1c,0
+400200
+a,0
+400200
+3c,0
+400200
+1b,0
+400200
+a,0
+400200
+3c,0
+400200
+1a,0
+400200
+a,0
+400200
+3e,0
+400200
+19,0
+400200
+9,0
+2,400200
+3e,0
+400200
+18,0
+2,400200
+9,0
+400200
+3f,0
+2,400200
+17,0
+400200
+9,0
+2,400200
+40,0
+400200
+17,0
+400200
+9,0
+400200
+41,0
+400200
+17,0
+400200
+9,0
+400200
+41,0
+400200
+16,0
+400200
+9,0
+400200
+1b,0
+d,400200
+1b,0
+400200
+15,0
+400200
+9,0
+400200
+17,0
+4,400200
+d,0
+4,400200
+17,0
+400200
+15,0
+400200
+9,0
+400200
+14,0
+3,400200
+15,0
+3,400200
+14,0
+400200
+15,0
+400200
+9,0
+400200
+13,0
+2,400200
+19,0
+2,400200
+13,0
+400200
+14,0
+400200
+9,0
+400200
+13,0
+400200
+1d,0
+400200
+13,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+1d,0
+b,400200
+1d,0
+400200
+13,0
+400200
+9,0
+400200
+1a,0
+3,400200
+b,0
+3,400200
+1a,0
+400200
+13,0
+400200
+9,0
+400200
+17,0
+3,400200
+11,0
+3,400200
+17,0
+400200
+13,0
+400200
+9,0
+400200
+16,0
+2,400200
+15,0
+2,400200
+16,0
+400200
+13,0
+400200
+9,0
+400200
+14,0
+2,400200
+19,0
+2,400200
+14,0
+400200
+13,0
+400200
+9,0
+400200
+13,0
+400200
+1d,0
+400200
+13,0
+400200
+13,0
+400200
+a,0
+400200
+11,0
+400200
+1f,0
+400200
+12,0
+400200
+13,0
+400200
+a,0
+400200
+10,0
+400200
+21,0
+400200
+11,0
+400200
+14,0
+400200
+9,0
+400200
+f,0
+400200
+23,0
+400200
+f,0
+400200
+15,0
+400200
+9,0
+400200
+f,0
+400200
+23,0
+400200
+f,0
+400200
+15,0
+400200
+a,0
+400200
+d,0
+400200
+25,0
+400200
+e,0
+400200
+15,0
+400200
+a,0
+400200
+d,0
+400200
+25,0
+400200
+e,0
+400200
+16,0
+400200
+9,0
+2,400200
+b,0
+400200
+27,0
+400200
+c,0
+400200
+17,0
+400200
+a,0
+400200
+b,0
+400200
+27,0
+400200
+c,0
+400200
+17,0
+400200
+a,0
+2,400200
+a,0
+400200
+27,0
+400200
+c,0
+400200
+17,0
+2,400200
+a,0
+400200
+a,0
+400200
+27,0
+400200
+b,0
+2,400200
+18,0
+400200
+b,0
+400200
+9,0
+400200
+27,0
+400200
+b,0
+400200
+19,0
+400200
+15,0
+400200
+27,0
+400200
+b,0
+400200
+1a,0
+400200
+14,0
+400200
+27,0
+400200
+a,0
+400200
+1b,0
+400200
+15,0
+400200
+25,0
+400200
+b,0
+400200
+1c,0
+400200
+14,0
+400200
+25,0
+400200
+a,0
+400200
+1d,0
+400200
+15,0
+400200
+23,0
+400200
+b,0
+400200
+1e,0
+400200
+14,0
+400200
+23,0
+400200
+a,0
+400200
+1f,0
+2,400200
+14,0
+400200
+21,0
+400200
+a,0
+2,400200
+20,0
+400200
+15,0
+400200
+1f,0
+400200
+b,0
+400200
+22,0
+400200
+15,0
+400200
+1d,0
+400200
+b,0
+400200
+24,0
+400200
+15,0
+2,400200
+19,0
+2,400200
+b,0
+400200
+25,0
+2,400200
+16,0
+2,400200
+15,0
+2,400200
+c,0
+2,400200
+26,0
+2,400200
+16,0
+3,400200
+11,0
+3,400200
+c,0
+2,400200
+28,0
+2,400200
+18,0
+3,400200
+b,0
+3,400200
+e,0
+2,400200
+2a,0
+2,400200
+1a,0
+b,400200
+10,0
+2,400200
+2c,0
+2,400200
+33,0
+2,400200
+2e,0
+2,400200
+31,0
+2,400200
+31,0
+400200
+2f,0
+400200
+34,0
+2,400200
+2b,0
+2,400200
+36,0
+2,400200
+29,0
+2,400200
+39,0
+2,400200
+25,0
+2,400200
+3d,0
+2,400200
+21,0
+2,400200
+41,0
+3,400200
+1b,0
+3,400200
+45,0
+4,400200
+15,0
+4,400200
+4b,0
+4,400200
+d,0
+4,400200
+53,0
+d,400200
+1c0,0
+100 90 32
+21b,0
+d,777777
+53,0
+4,777777
+d,0
+4,777777
+4b,0
+4,777777
+15,0
+4,777777
+45,0
+3,777777
+1b,0
+3,777777
+41,0
+2,777777
+21,0
+2,777777
+3d,0
+2,777777
+25,0
+2,777777
+39,0
+2,777777
+29,0
+2,777777
+36,0
+2,777777
+2b,0
+2,777777
+34,0
+777777
+2f,0
+777777
+31,0
+2,777777
+13,0
+4,777777
+1a,0
+2,777777
+2e,0
+2,777777
+10,0
+4,777777
+1f,0
+2,777777
+2c,0
+2,777777
+e,0
+3,777777
+9,0
+6,777777
+15,0
+2,777777
+2a,0
+2,777777
+d,0
+3,777777
+11,0
+5,777777
+11,0
+2,777777
+28,0
+2,777777
+d,0
+2,777777
+18,0
+3,777777
+f,0
+2,777777
+26,0
+2,777777
+c,0
+2,777777
+1c,0
+3,777777
+e,0
+2,777777
+25,0
+777777
+c,0
+777777
+21,0
+2,777777
+d,0
+777777
+24,0
+777777
+b,0
+2,777777
+24,0
+777777
+d,0
+777777
+22,0
+777777
+b,0
+2,777777
+26,0
+2,777777
+c,0
+777777
+20,0
+2,777777
+a,0
+2,777777
+29,0
+777777
+b,0
+2,777777
+1f,0
+777777
+a,0
+2,777777
+f,0
+3,777777
+19,0
+2,777777
+a,0
+777777
+1e,0
+777777
+b,0
+777777
+2d,0
+2,777777
+a,0
+777777
+1d,0
+777777
+a,0
+777777
+2f,0
+777777
+a,0
+777777
+1c,0
+777777
+a,0
+777777
+3c,0
+777777
+1b,0
+777777
+a,0
+777777
+3c,0
+777777
+1a,0
+777777
+a,0
+777777
+3e,0
+777777
+19,0
+777777
+9,0
+2,777777
+3e,0
+777777
+18,0
+2,777777
+9,0
+777777
+3f,0
+2,777777
+17,0
+777777
+9,0
+2,777777
+40,0
+777777
+17,0
+777777
+9,0
+777777
+41,0
+777777
+17,0
+777777
+9,0
+777777
+41,0
+777777
+16,0
+777777
+9,0
+777777
+1b,0
+d,777777
+1b,0
+777777
+15,0
+777777
+9,0
+777777
+17,0
+4,777777
+d,0
+4,777777
+17,0
+777777
+15,0
+777777
+9,0
+777777
+14,0
+3,777777
+15,0
+3,777777
+14,0
+777777
+15,0
+777777
+9,0
+777777
+13,0
+2,777777
+19,0
+2,777777
+13,0
+777777
+14,0
+777777
+9,0
+777777
+13,0
+777777
+1d,0
+777777
+13,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+1d,0
+b,777777
+1d,0
+777777
+13,0
+777777
+9,0
+777777
+1a,0
+3,777777
+b,0
+3,777777
+1a,0
+777777
+13,0
+777777
+9,0
+777777
+17,0
+3,777777
+11,0
+3,777777
+17,0
+777777
+13,0
+777777
+9,0
+777777
+16,0
+2,777777
+15,0
+2,777777
+16,0
+777777
+13,0
+777777
+9,0
+777777
+14,0
+2,777777
+19,0
+2,777777
+14,0
+777777
+13,0
+777777
+9,0
+777777
+13,0
+777777
+1d,0
+777777
+13,0
+777777
+13,0
+777777
+a,0
+777777
+11,0
+777777
+1f,0
+777777
+12,0
+777777
+13,0
+777777
+a,0
+777777
+10,0
+777777
+21,0
+777777
+11,0
+777777
+14,0
+777777
+9,0
+777777
+f,0
+777777
+23,0
+777777
+f,0
+777777
+15,0
+777777
+9,0
+777777
+f,0
+777777
+23,0
+777777
+f,0
+777777
+15,0
+777777
+a,0
+777777
+d,0
+777777
+25,0
+777777
+e,0
+777777
+15,0
+777777
+a,0
+777777
+d,0
+777777
+25,0
+777777
+e,0
+777777
+16,0
+777777
+9,0
+2,777777
+b,0
+777777
+27,0
+777777
+c,0
+777777
+17,0
+777777
+a,0
+777777
+b,0
+777777
+27,0
+777777
+c,0
+777777
+17,0
+777777
+a,0
+2,777777
+a,0
+777777
+27,0
+777777
+c,0
+777777
+17,0
+2,777777
+a,0
+777777
+a,0
+777777
+27,0
+777777
+b,0
+2,777777
+18,0
+777777
+b,0
+777777
+9,0
+777777
+27,0
+777777
+b,0
+777777
+19,0
+777777
+15,0
+777777
+27,0
+777777
+b,0
+777777
+1a,0
+777777
+14,0
+777777
+27,0
+777777
+a,0
+777777
+1b,0
+777777
+15,0
+777777
+25,0
+777777
+b,0
+777777
+1c,0
+777777
+14,0
+777777
+25,0
+777777
+a,0
+777777
+1d,0
+777777
+15,0
+777777
+23,0
+777777
+b,0
+777777
+1e,0
+777777
+14,0
+777777
+23,0
+777777
+a,0
+777777
+1f,0
+2,777777
+14,0
+777777
+21,0
+777777
+a,0
+2,777777
+20,0
+777777
+15,0
+777777
+1f,0
+777777
+b,0
+777777
+22,0
+777777
+15,0
+777777
+1d,0
+777777
+b,0
+777777
+24,0
+777777
+15,0
+2,777777
+19,0
+2,777777
+b,0
+777777
+25,0
+2,777777
+16,0
+2,777777
+15,0
+2,777777
+c,0
+2,777777
+26,0
+2,777777
+16,0
+3,777777
+11,0
+3,777777
+c,0
+2,777777
+28,0
+2,777777
+18,0
+3,777777
+b,0
+3,777777
+e,0
+2,777777
+2a,0
+2,777777
+1a,0
+b,777777
+10,0
+2,777777
+2c,0
+2,777777
+33,0
+2,777777
+2e,0
+2,777777
+31,0
+2,777777
+31,0
+777777
+2f,0
+777777
+34,0
+2,777777
+2b,0
+2,777777
+36,0
+2,777777
+29,0
+2,777777
+39,0
+2,777777
+25,0
+2,777777
+3d,0
+2,777777
+21,0
+2,777777
+41,0
+3,777777
+1b,0
+3,777777
+45,0
+4,777777
+15,0
+4,777777
+4b,0
+4,777777
+d,0
+4,777777
+53,0
+d,777777
+1c0,0
+100 90 32
+21b,0
+d,1
+53,0
+4,1
+d,0
+4,1
+4b,0
+4,1
+15,0
+4,1
+45,0
+3,1
+1b,0
+3,1
+41,0
+2,1
+21,0
+2,1
+3d,0
+2,1
+25,0
+2,1
+39,0
+2,1
+29,0
+2,1
+36,0
+2,1
+2b,0
+2,1
+34,0
+1
+2f,0
+1
+31,0
+2,1
+13,0
+4,1
+1a,0
+2,1
+2e,0
+2,1
+10,0
+4,1
+1f,0
+2,1
+2c,0
+2,1
+e,0
+3,1
+9,0
+6,1
+15,0
+2,1
+2a,0
+2,1
+d,0
+3,1
+11,0
+5,1
+11,0
+2,1
+28,0
+2,1
+d,0
+2,1
+18,0
+3,1
+f,0
+2,1
+26,0
+2,1
+c,0
+2,1
+1c,0
+3,1
+e,0
+2,1
+25,0
+1
+c,0
+1
+21,0
+2,1
+d,0
+1
+24,0
+1
+b,0
+2,1
+24,0
+1
+d,0
+1
+22,0
+1
+b,0
+2,1
+26,0
+2,1
+c,0
+1
+20,0
+2,1
+a,0
+2,1
+29,0
+1
+b,0
+2,1
+1f,0
+1
+a,0
+2,1
+f,0
+3,1
+19,0
+2,1
+a,0
+1
+1e,0
+1
+b,0
+1
+2d,0
+2,1
+a,0
+1
+1d,0
+1
+a,0
+1
+2f,0
+1
+a,0
+1
+1c,0
+1
+a,0
+1
+3c,0
+1
+1b,0
+1
+a,0
+1
+3c,0
+1
+1a,0
+1
+a,0
+1
+3e,0
+1
+19,0
+1
+9,0
+2,1
+3e,0
+1
+18,0
+2,1
+9,0
+1
+3f,0
+2,1
+17,0
+1
+9,0
+2,1
+40,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+17,0
+1
+9,0
+1
+41,0
+1
+16,0
+1
+9,0
+1
+1b,0
+d,1
+1b,0
+1
+15,0
+1
+9,0
+1
+17,0
+4,1
+d,0
+4,1
+17,0
+1
+15,0
+1
+9,0
+1
+14,0
+3,1
+15,0
+3,1
+14,0
+1
+15,0
+1
+9,0
+1
+13,0
+2,1
+19,0
+2,1
+13,0
+1
+14,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+45,0
+1
+13,0
+1
+9,0
+1
+1d,0
+b,1
+1d,0
+1
+13,0
+1
+9,0
+1
+1a,0
+3,1
+b,0
+3,1
+1a,0
+1
+13,0
+1
+9,0
+1
+17,0
+3,1
+11,0
+3,1
+17,0
+1
+13,0
+1
+9,0
+1
+16,0
+2,1
+15,0
+2,1
+16,0
+1
+13,0
+1
+9,0
+1
+14,0
+2,1
+19,0
+2,1
+14,0
+1
+13,0
+1
+9,0
+1
+13,0
+1
+1d,0
+1
+13,0
+1
+13,0
+1
+a,0
+1
+11,0
+1
+1f,0
+1
+12,0
+1
+13,0
+1
+a,0
+1
+10,0
+1
+21,0
+1
+11,0
+1
+14,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+9,0
+1
+f,0
+1
+23,0
+1
+f,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+15,0
+1
+a,0
+1
+d,0
+1
+25,0
+1
+e,0
+1
+16,0
+1
+9,0
+2,1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+1
+b,0
+1
+27,0
+1
+c,0
+1
+17,0
+1
+a,0
+2,1
+a,0
+1
+27,0
+1
+c,0
+1
+17,0
+2,1
+a,0
+1
+a,0
+1
+27,0
+1
+b,0
+2,1
+18,0
+1
+b,0
+1
+9,0
+1
+27,0
+1
+b,0
+1
+19,0
+1
+15,0
+1
+27,0
+1
+b,0
+1
+1a,0
+1
+14,0
+1
+27,0
+1
+a,0
+1
+1b,0
+1
+15,0
+1
+25,0
+1
+b,0
+1
+1c,0
+1
+14,0
+1
+25,0
+1
+a,0
+1
+1d,0
+1
+15,0
+1
+23,0
+1
+b,0
+1
+1e,0
+1
+14,0
+1
+23,0
+1
+a,0
+1
+1f,0
+2,1
+14,0
+1
+21,0
+1
+a,0
+2,1
+20,0
+1
+15,0
+1
+1f,0
+1
+b,0
+1
+22,0
+1
+15,0
+1
+1d,0
+1
+b,0
+1
+24,0
+1
+15,0
+2,1
+19,0
+2,1
+b,0
+1
+25,0
+2,1
+16,0
+2,1
+15,0
+2,1
+c,0
+2,1
+26,0
+2,1
+16,0
+3,1
+11,0
+3,1
+c,0
+2,1
+28,0
+2,1
+18,0
+3,1
+b,0
+3,1
+e,0
+2,1
+2a,0
+2,1
+1a,0
+b,1
+10,0
+2,1
+2c,0
+2,1
+33,0
+2,1
+2e,0
+2,1
+31,0
+2,1
+31,0
+1
+2f,0
+1
+34,0
+2,1
+2b,0
+2,1
+36,0
+2,1
+29,0
+2,1
+39,0
+2,1
+25,0
+2,1
+3d,0
+2,1
+21,0
+2,1
+41,0
+3,1
+1b,0
+3,1
+45,0
+4,1
+15,0
+4,1
+4b,0
+4,1
+d,0
+4,1
+53,0
+d,1
+1c0,0
+100 90 32
+21b,0
+d,2
+53,0
+4,2
+d,0
+4,2
+4b,0
+4,2
+15,0
+4,2
+45,0
+3,2
+1b,0
+3,2
+41,0
+2,2
+21,0
+2,2
+3d,0
+2,2
+25,0
+2,2
+39,0
+2,2
+29,0
+2,2
+36,0
+2,2
+2b,0
+2,2
+34,0
+2
+2f,0
+2
+31,0
+2,2
+13,0
+4,2
+1a,0
+2,2
+2e,0
+2,2
+10,0
+4,2
+1f,0
+2,2
+2c,0
+2,2
+e,0
+3,2
+9,0
+6,2
+15,0
+2,2
+2a,0
+2,2
+d,0
+3,2
+11,0
+5,2
+11,0
+2,2
+28,0
+2,2
+d,0
+2,2
+18,0
+3,2
+f,0
+2,2
+26,0
+2,2
+c,0
+2,2
+1c,0
+3,2
+e,0
+2,2
+25,0
+2
+c,0
+2
+21,0
+2,2
+d,0
+2
+24,0
+2
+b,0
+2,2
+24,0
+2
+d,0
+2
+22,0
+2
+b,0
+2,2
+26,0
+2,2
+c,0
+2
+20,0
+2,2
+a,0
+2,2
+29,0
+2
+b,0
+2,2
+1f,0
+2
+a,0
+2,2
+f,0
+3,2
+19,0
+2,2
+a,0
+2
+1e,0
+2
+b,0
+2
+2d,0
+2,2
+a,0
+2
+1d,0
+2
+a,0
+2
+2f,0
+2
+a,0
+2
+1c,0
+2
+a,0
+2
+3c,0
+2
+1b,0
+2
+a,0
+2
+3c,0
+2
+1a,0
+2
+a,0
+2
+3e,0
+2
+19,0
+2
+9,0
+2,2
+3e,0
+2
+18,0
+2,2
+9,0
+2
+3f,0
+2,2
+17,0
+2
+9,0
+2,2
+40,0
+2
+17,0
+2
+9,0
+2
+41,0
+2
+17,0
+2
+9,0
+2
+41,0
+2
+16,0
+2
+9,0
+2
+1b,0
+d,2
+1b,0
+2
+15,0
+2
+9,0
+2
+17,0
+4,2
+d,0
+4,2
+17,0
+2
+15,0
+2
+9,0
+2
+14,0
+3,2
+15,0
+3,2
+14,0
+2
+15,0
+2
+9,0
+2
+13,0
+2,2
+19,0
+2,2
+13,0
+2
+14,0
+2
+9,0
+2
+13,0
+2
+1d,0
+2
+13,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+45,0
+2
+13,0
+2
+9,0
+2
+1d,0
+b,2
+1d,0
+2
+13,0
+2
+9,0
+2
+1a,0
+3,2
+b,0
+3,2
+1a,0
+2
+13,0
+2
+9,0
+2
+17,0
+3,2
+11,0
+3,2
+17,0
+2
+13,0
+2
+9,0
+2
+16,0
+2,2
+15,0
+2,2
+16,0
+2
+13,0
+2
+9,0
+2
+14,0
+2,2
+19,0
+2,2
+14,0
+2
+13,0
+2
+9,0
+2
+13,0
+2
+1d,0
+2
+13,0
+2
+13,0
+2
+a,0
+2
+11,0
+2
+1f,0
+2
+12,0
+2
+13,0
+2
+a,0
+2
+10,0
+2
+21,0
+2
+11,0
+2
+14,0
+2
+9,0
+2
+f,0
+2
+23,0
+2
+f,0
+2
+15,0
+2
+9,0
+2
+f,0
+2
+23,0
+2
+f,0
+2
+15,0
+2
+a,0
+2
+d,0
+2
+25,0
+2
+e,0
+2
+15,0
+2
+a,0
+2
+d,0
+2
+25,0
+2
+e,0
+2
+16,0
+2
+9,0
+2,2
+b,0
+2
+27,0
+2
+c,0
+2
+17,0
+2
+a,0
+2
+b,0
+2
+27,0
+2
+c,0
+2
+17,0
+2
+a,0
+2,2
+a,0
+2
+27,0
+2
+c,0
+2
+17,0
+2,2
+a,0
+2
+a,0
+2
+27,0
+2
+b,0
+2,2
+18,0
+2
+b,0
+2
+9,0
+2
+27,0
+2
+b,0
+2
+19,0
+2
+15,0
+2
+27,0
+2
+b,0
+2
+1a,0
+2
+14,0
+2
+27,0
+2
+a,0
+2
+1b,0
+2
+15,0
+2
+25,0
+2
+b,0
+2
+1c,0
+2
+14,0
+2
+25,0
+2
+a,0
+2
+1d,0
+2
+15,0
+2
+23,0
+2
+b,0
+2
+1e,0
+2
+14,0
+2
+23,0
+2
+a,0
+2
+1f,0
+2,2
+14,0
+2
+21,0
+2
+a,0
+2,2
+20,0
+2
+15,0
+2
+1f,0
+2
+b,0
+2
+22,0
+2
+15,0
+2
+1d,0
+2
+b,0
+2
+24,0
+2
+15,0
+2,2
+19,0
+2,2
+b,0
+2
+25,0
+2,2
+16,0
+2,2
+15,0
+2,2
+c,0
+2,2
+26,0
+2,2
+16,0
+3,2
+11,0
+3,2
+c,0
+2,2
+28,0
+2,2
+18,0
+3,2
+b,0
+3,2
+e,0
+2,2
+2a,0
+2,2
+1a,0
+b,2
+10,0
+2,2
+2c,0
+2,2
+33,0
+2,2
+2e,0
+2,2
+31,0
+2,2
+31,0
+2
+2f,0
+2
+34,0
+2,2
+2b,0
+2,2
+36,0
+2,2
+29,0
+2,2
+39,0
+2,2
+25,0
+2,2
+3d,0
+2,2
+21,0
+2,2
+41,0
+3,2
+1b,0
+3,2
+45,0
+4,2
+15,0
+4,2
+4b,0
+4,2
+d,0
+4,2
+53,0
+d,2
+1c0,0
+100 90 32
+21b,0
+d,3
+53,0
+4,3
+d,0
+4,3
+4b,0
+4,3
+15,0
+4,3
+45,0
+3,3
+1b,0
+3,3
+41,0
+2,3
+21,0
+2,3
+3d,0
+2,3
+25,0
+2,3
+39,0
+2,3
+29,0
+2,3
+36,0
+2,3
+2b,0
+2,3
+34,0
+3
+2f,0
+3
+31,0
+2,3
+13,0
+4,3
+1a,0
+2,3
+2e,0
+2,3
+10,0
+4,3
+1f,0
+2,3
+2c,0
+2,3
+e,0
+3,3
+9,0
+6,3
+15,0
+2,3
+2a,0
+2,3
+d,0
+3,3
+11,0
+5,3
+11,0
+2,3
+28,0
+2,3
+d,0
+2,3
+18,0
+3,3
+f,0
+2,3
+26,0
+2,3
+c,0
+2,3
+1c,0
+3,3
+e,0
+2,3
+25,0
+3
+c,0
+3
+21,0
+2,3
+d,0
+3
+24,0
+3
+b,0
+2,3
+24,0
+3
+d,0
+3
+22,0
+3
+b,0
+2,3
+26,0
+2,3
+c,0
+3
+20,0
+2,3
+a,0
+2,3
+29,0
+3
+b,0
+2,3
+1f,0
+3
+a,0
+2,3
+f,0
+3,3
+19,0
+2,3
+a,0
+3
+1e,0
+3
+b,0
+3
+2d,0
+2,3
+a,0
+3
+1d,0
+3
+a,0
+3
+2f,0
+3
+a,0
+3
+1c,0
+3
+a,0
+3
+3c,0
+3
+1b,0
+3
+a,0
+3
+3c,0
+3
+1a,0
+3
+a,0
+3
+3e,0
+3
+19,0
+3
+9,0
+2,3
+3e,0
+3
+18,0
+2,3
+9,0
+3
+3f,0
+2,3
+17,0
+3
+9,0
+2,3
+40,0
+3
+17,0
+3
+9,0
+3
+41,0
+3
+17,0
+3
+9,0
+3
+41,0
+3
+16,0
+3
+9,0
+3
+1b,0
+d,3
+1b,0
+3
+15,0
+3
+9,0
+3
+17,0
+4,3
+d,0
+4,3
+17,0
+3
+15,0
+3
+9,0
+3
+14,0
+3,3
+15,0
+3,3
+14,0
+3
+15,0
+3
+9,0
+3
+13,0
+2,3
+19,0
+2,3
+13,0
+3
+14,0
+3
+9,0
+3
+13,0
+3
+1d,0
+3
+13,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+45,0
+3
+13,0
+3
+9,0
+3
+1d,0
+b,3
+1d,0
+3
+13,0
+3
+9,0
+3
+1a,0
+3,3
+b,0
+3,3
+1a,0
+3
+13,0
+3
+9,0
+3
+17,0
+3,3
+11,0
+3,3
+17,0
+3
+13,0
+3
+9,0
+3
+16,0
+2,3
+15,0
+2,3
+16,0
+3
+13,0
+3
+9,0
+3
+14,0
+2,3
+19,0
+2,3
+14,0
+3
+13,0
+3
+9,0
+3
+13,0
+3
+1d,0
+3
+13,0
+3
+13,0
+3
+a,0
+3
+11,0
+3
+1f,0
+3
+12,0
+3
+13,0
+3
+a,0
+3
+10,0
+3
+21,0
+3
+11,0
+3
+14,0
+3
+9,0
+3
+f,0
+3
+23,0
+3
+f,0
+3
+15,0
+3
+9,0
+3
+f,0
+3
+23,0
+3
+f,0
+3
+15,0
+3
+a,0
+3
+d,0
+3
+25,0
+3
+e,0
+3
+15,0
+3
+a,0
+3
+d,0
+3
+25,0
+3
+e,0
+3
+16,0
+3
+9,0
+2,3
+b,0
+3
+27,0
+3
+c,0
+3
+17,0
+3
+a,0
+3
+b,0
+3
+27,0
+3
+c,0
+3
+17,0
+3
+a,0
+2,3
+a,0
+3
+27,0
+3
+c,0
+3
+17,0
+2,3
+a,0
+3
+a,0
+3
+27,0
+3
+b,0
+2,3
+18,0
+3
+b,0
+3
+9,0
+3
+27,0
+3
+b,0
+3
+19,0
+3
+15,0
+3
+27,0
+3
+b,0
+3
+1a,0
+3
+14,0
+3
+27,0
+3
+a,0
+3
+1b,0
+3
+15,0
+3
+25,0
+3
+b,0
+3
+1c,0
+3
+14,0
+3
+25,0
+3
+a,0
+3
+1d,0
+3
+15,0
+3
+23,0
+3
+b,0
+3
+1e,0
+3
+14,0
+3
+23,0
+3
+a,0
+3
+1f,0
+2,3
+14,0
+3
+21,0
+3
+a,0
+2,3
+20,0
+3
+15,0
+3
+1f,0
+3
+b,0
+3
+22,0
+3
+15,0
+3
+1d,0
+3
+b,0
+3
+24,0
+3
+15,0
+2,3
+19,0
+2,3
+b,0
+3
+25,0
+2,3
+16,0
+2,3
+15,0
+2,3
+c,0
+2,3
+26,0
+2,3
+16,0
+3,3
+11,0
+3,3
+c,0
+2,3
+28,0
+2,3
+18,0
+3,3
+b,0
+3,3
+e,0
+2,3
+2a,0
+2,3
+1a,0
+b,3
+10,0
+2,3
+2c,0
+2,3
+33,0
+2,3
+2e,0
+2,3
+31,0
+2,3
+31,0
+3
+2f,0
+3
+34,0
+2,3
+2b,0
+2,3
+36,0
+2,3
+29,0
+2,3
+39,0
+2,3
+25,0
+2,3
+3d,0
+2,3
+21,0
+2,3
+41,0
+3,3
+1b,0
+3,3
+45,0
+4,3
+15,0
+4,3
+4b,0
+4,3
+d,0
+4,3
+53,0
+d,3
+1c0,0
+100 90 32
+21b,0
+d,4
+53,0
+4,4
+d,0
+4,4
+4b,0
+4,4
+15,0
+4,4
+45,0
+3,4
+1b,0
+3,4
+41,0
+2,4
+21,0
+2,4
+3d,0
+2,4
+25,0
+2,4
+39,0
+2,4
+29,0
+2,4
+36,0
+2,4
+2b,0
+2,4
+34,0
+4
+2f,0
+4
+31,0
+2,4
+13,0
+4,4
+1a,0
+2,4
+2e,0
+2,4
+10,0
+4,4
+1f,0
+2,4
+2c,0
+2,4
+e,0
+3,4
+9,0
+6,4
+15,0
+2,4
+2a,0
+2,4
+d,0
+3,4
+11,0
+5,4
+11,0
+2,4
+28,0
+2,4
+d,0
+2,4
+18,0
+3,4
+f,0
+2,4
+26,0
+2,4
+c,0
+2,4
+1c,0
+3,4
+e,0
+2,4
+25,0
+4
+c,0
+4
+21,0
+2,4
+d,0
+4
+24,0
+4
+b,0
+2,4
+24,0
+4
+d,0
+4
+22,0
+4
+b,0
+2,4
+26,0
+2,4
+c,0
+4
+20,0
+2,4
+a,0
+2,4
+29,0
+4
+b,0
+2,4
+1f,0
+4
+a,0
+2,4
+f,0
+3,4
+19,0
+2,4
+a,0
+4
+1e,0
+4
+b,0
+4
+2d,0
+2,4
+a,0
+4
+1d,0
+4
+a,0
+4
+2f,0
+4
+a,0
+4
+1c,0
+4
+a,0
+4
+3c,0
+4
+1b,0
+4
+a,0
+4
+3c,0
+4
+1a,0
+4
+a,0
+4
+3e,0
+4
+19,0
+4
+9,0
+2,4
+3e,0
+4
+18,0
+2,4
+9,0
+4
+3f,0
+2,4
+17,0
+4
+9,0
+2,4
+40,0
+4
+17,0
+4
+9,0
+4
+41,0
+4
+17,0
+4
+9,0
+4
+41,0
+4
+16,0
+4
+9,0
+4
+1b,0
+d,4
+1b,0
+4
+15,0
+4
+9,0
+4
+17,0
+4,4
+d,0
+4,4
+17,0
+4
+15,0
+4
+9,0
+4
+14,0
+3,4
+15,0
+3,4
+14,0
+4
+15,0
+4
+9,0
+4
+13,0
+2,4
+19,0
+2,4
+13,0
+4
+14,0
+4
+9,0
+4
+13,0
+4
+1d,0
+4
+13,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+45,0
+4
+13,0
+4
+9,0
+4
+1d,0
+b,4
+1d,0
+4
+13,0
+4
+9,0
+4
+1a,0
+3,4
+b,0
+3,4
+1a,0
+4
+13,0
+4
+9,0
+4
+17,0
+3,4
+11,0
+3,4
+17,0
+4
+13,0
+4
+9,0
+4
+16,0
+2,4
+15,0
+2,4
+16,0
+4
+13,0
+4
+9,0
+4
+14,0
+2,4
+19,0
+2,4
+14,0
+4
+13,0
+4
+9,0
+4
+13,0
+4
+1d,0
+4
+13,0
+4
+13,0
+4
+a,0
+4
+11,0
+4
+1f,0
+4
+12,0
+4
+13,0
+4
+a,0
+4
+10,0
+4
+21,0
+4
+11,0
+4
+14,0
+4
+9,0
+4
+f,0
+4
+23,0
+4
+f,0
+4
+15,0
+4
+9,0
+4
+f,0
+4
+23,0
+4
+f,0
+4
+15,0
+4
+a,0
+4
+d,0
+4
+25,0
+4
+e,0
+4
+15,0
+4
+a,0
+4
+d,0
+4
+25,0
+4
+e,0
+4
+16,0
+4
+9,0
+2,4
+b,0
+4
+27,0
+4
+c,0
+4
+17,0
+4
+a,0
+4
+b,0
+4
+27,0
+4
+c,0
+4
+17,0
+4
+a,0
+2,4
+a,0
+4
+27,0
+4
+c,0
+4
+17,0
+2,4
+a,0
+4
+a,0
+4
+27,0
+4
+b,0
+2,4
+18,0
+4
+b,0
+4
+9,0
+4
+27,0
+4
+b,0
+4
+19,0
+4
+15,0
+4
+27,0
+4
+b,0
+4
+1a,0
+4
+14,0
+4
+27,0
+4
+a,0
+4
+1b,0
+4
+15,0
+4
+25,0
+4
+b,0
+4
+1c,0
+4
+14,0
+4
+25,0
+4
+a,0
+4
+1d,0
+4
+15,0
+4
+23,0
+4
+b,0
+4
+1e,0
+4
+14,0
+4
+23,0
+4
+a,0
+4
+1f,0
+2,4
+14,0
+4
+21,0
+4
+a,0
+2,4
+20,0
+4
+15,0
+4
+1f,0
+4
+b,0
+4
+22,0
+4
+15,0
+4
+1d,0
+4
+b,0
+4
+24,0
+4
+15,0
+2,4
+19,0
+2,4
+b,0
+4
+25,0
+2,4
+16,0
+2,4
+15,0
+2,4
+c,0
+2,4
+26,0
+2,4
+16,0
+3,4
+11,0
+3,4
+c,0
+2,4
+28,0
+2,4
+18,0
+3,4
+b,0
+3,4
+e,0
+2,4
+2a,0
+2,4
+1a,0
+b,4
+10,0
+2,4
+2c,0
+2,4
+33,0
+2,4
+2e,0
+2,4
+31,0
+2,4
+31,0
+4
+2f,0
+4
+34,0
+2,4
+2b,0
+2,4
+36,0
+2,4
+29,0
+2,4
+39,0
+2,4
+25,0
+2,4
+3d,0
+2,4
+21,0
+2,4
+41,0
+3,4
+1b,0
+3,4
+45,0
+4,4
+15,0
+4,4
+4b,0
+4,4
+d,0
+4,4
+53,0
+d,4
+1c0,0
+100 90 32
+21b,0
+d,6
+53,0
+4,6
+d,0
+4,6
+4b,0
+4,6
+15,0
+4,6
+45,0
+3,6
+1b,0
+3,6
+41,0
+2,6
+21,0
+2,6
+3d,0
+2,6
+25,0
+2,6
+39,0
+2,6
+29,0
+2,6
+36,0
+2,6
+2b,0
+2,6
+34,0
+6
+2f,0
+6
+31,0
+2,6
+13,0
+4,6
+1a,0
+2,6
+2e,0
+2,6
+10,0
+4,6
+1f,0
+2,6
+2c,0
+2,6
+e,0
+3,6
+9,0
+6,6
+15,0
+2,6
+2a,0
+2,6
+d,0
+3,6
+11,0
+5,6
+11,0
+2,6
+28,0
+2,6
+d,0
+2,6
+18,0
+3,6
+f,0
+2,6
+26,0
+2,6
+c,0
+2,6
+1c,0
+3,6
+e,0
+2,6
+25,0
+6
+c,0
+6
+21,0
+2,6
+d,0
+6
+24,0
+6
+b,0
+2,6
+24,0
+6
+d,0
+6
+22,0
+6
+b,0
+2,6
+26,0
+2,6
+c,0
+6
+20,0
+2,6
+a,0
+2,6
+29,0
+6
+b,0
+2,6
+1f,0
+6
+a,0
+2,6
+f,0
+3,6
+19,0
+2,6
+a,0
+6
+1e,0
+6
+b,0
+6
+2d,0
+2,6
+a,0
+6
+1d,0
+6
+a,0
+6
+2f,0
+6
+a,0
+6
+1c,0
+6
+a,0
+6
+3c,0
+6
+1b,0
+6
+a,0
+6
+3c,0
+6
+1a,0
+6
+a,0
+6
+3e,0
+6
+19,0
+6
+9,0
+2,6
+3e,0
+6
+18,0
+2,6
+9,0
+6
+3f,0
+2,6
+17,0
+6
+9,0
+2,6
+40,0
+6
+17,0
+6
+9,0
+6
+41,0
+6
+17,0
+6
+9,0
+6
+41,0
+6
+16,0
+6
+9,0
+6
+1b,0
+d,6
+1b,0
+6
+15,0
+6
+9,0
+6
+17,0
+4,6
+d,0
+4,6
+17,0
+6
+15,0
+6
+9,0
+6
+14,0
+3,6
+15,0
+3,6
+14,0
+6
+15,0
+6
+9,0
+6
+13,0
+2,6
+19,0
+2,6
+13,0
+6
+14,0
+6
+9,0
+6
+13,0
+6
+1d,0
+6
+13,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+45,0
+6
+13,0
+6
+9,0
+6
+1d,0
+b,6
+1d,0
+6
+13,0
+6
+9,0
+6
+1a,0
+3,6
+b,0
+3,6
+1a,0
+6
+13,0
+6
+9,0
+6
+17,0
+3,6
+11,0
+3,6
+17,0
+6
+13,0
+6
+9,0
+6
+16,0
+2,6
+15,0
+2,6
+16,0
+6
+13,0
+6
+9,0
+6
+14,0
+2,6
+19,0
+2,6
+14,0
+6
+13,0
+6
+9,0
+6
+13,0
+6
+1d,0
+6
+13,0
+6
+13,0
+6
+a,0
+6
+11,0
+6
+1f,0
+6
+12,0
+6
+13,0
+6
+a,0
+6
+10,0
+6
+21,0
+6
+11,0
+6
+14,0
+6
+9,0
+6
+f,0
+6
+23,0
+6
+f,0
+6
+15,0
+6
+9,0
+6
+f,0
+6
+23,0
+6
+f,0
+6
+15,0
+6
+a,0
+6
+d,0
+6
+25,0
+6
+e,0
+6
+15,0
+6
+a,0
+6
+d,0
+6
+25,0
+6
+e,0
+6
+16,0
+6
+9,0
+2,6
+b,0
+6
+27,0
+6
+c,0
+6
+17,0
+6
+a,0
+6
+b,0
+6
+27,0
+6
+c,0
+6
+17,0
+6
+a,0
+2,6
+a,0
+6
+27,0
+6
+c,0
+6
+17,0
+2,6
+a,0
+6
+a,0
+6
+27,0
+6
+b,0
+2,6
+18,0
+6
+b,0
+6
+9,0
+6
+27,0
+6
+b,0
+6
+19,0
+6
+15,0
+6
+27,0
+6
+b,0
+6
+1a,0
+6
+14,0
+6
+27,0
+6
+a,0
+6
+1b,0
+6
+15,0
+6
+25,0
+6
+b,0
+6
+1c,0
+6
+14,0
+6
+25,0
+6
+a,0
+6
+1d,0
+6
+15,0
+6
+23,0
+6
+b,0
+6
+1e,0
+6
+14,0
+6
+23,0
+6
+a,0
+6
+1f,0
+2,6
+14,0
+6
+21,0
+6
+a,0
+2,6
+20,0
+6
+15,0
+6
+1f,0
+6
+b,0
+6
+22,0
+6
+15,0
+6
+1d,0
+6
+b,0
+6
+24,0
+6
+15,0
+2,6
+19,0
+2,6
+b,0
+6
+25,0
+2,6
+16,0
+2,6
+15,0
+2,6
+c,0
+2,6
+26,0
+2,6
+16,0
+3,6
+11,0
+3,6
+c,0
+2,6
+28,0
+2,6
+18,0
+3,6
+b,0
+3,6
+e,0
+2,6
+2a,0
+2,6
+1a,0
+b,6
+10,0
+2,6
+2c,0
+2,6
+33,0
+2,6
+2e,0
+2,6
+31,0
+2,6
+31,0
+6
+2f,0
+6
+34,0
+2,6
+2b,0
+2,6
+36,0
+2,6
+29,0
+2,6
+39,0
+2,6
+25,0
+2,6
+3d,0
+2,6
+21,0
+2,6
+41,0
+3,6
+1b,0
+3,6
+45,0
+4,6
+15,0
+4,6
+4b,0
+4,6
+d,0
+4,6
+53,0
+d,6
+1c0,0
+100 90 32
+21b,0
+d,7
+53,0
+4,7
+d,0
+4,7
+4b,0
+4,7
+15,0
+4,7
+45,0
+3,7
+1b,0
+3,7
+41,0
+2,7
+21,0
+2,7
+3d,0
+2,7
+25,0
+2,7
+39,0
+2,7
+29,0
+2,7
+36,0
+2,7
+2b,0
+2,7
+34,0
+7
+2f,0
+7
+31,0
+2,7
+13,0
+4,7
+1a,0
+2,7
+2e,0
+2,7
+10,0
+4,7
+1f,0
+2,7
+2c,0
+2,7
+e,0
+3,7
+9,0
+6,7
+15,0
+2,7
+2a,0
+2,7
+d,0
+3,7
+11,0
+5,7
+11,0
+2,7
+28,0
+2,7
+d,0
+2,7
+18,0
+3,7
+f,0
+2,7
+26,0
+2,7
+c,0
+2,7
+1c,0
+3,7
+e,0
+2,7
+25,0
+7
+c,0
+7
+21,0
+2,7
+d,0
+7
+24,0
+7
+b,0
+2,7
+24,0
+7
+d,0
+7
+22,0
+7
+b,0
+2,7
+26,0
+2,7
+c,0
+7
+20,0
+2,7
+a,0
+2,7
+29,0
+7
+b,0
+2,7
+1f,0
+7
+a,0
+2,7
+f,0
+3,7
+19,0
+2,7
+a,0
+7
+1e,0
+7
+b,0
+7
+2d,0
+2,7
+a,0
+7
+1d,0
+7
+a,0
+7
+2f,0
+7
+a,0
+7
+1c,0
+7
+a,0
+7
+3c,0
+7
+1b,0
+7
+a,0
+7
+3c,0
+7
+1a,0
+7
+a,0
+7
+3e,0
+7
+19,0
+7
+9,0
+2,7
+3e,0
+7
+18,0
+2,7
+9,0
+7
+3f,0
+2,7
+17,0
+7
+9,0
+2,7
+40,0
+7
+17,0
+7
+9,0
+7
+41,0
+7
+17,0
+7
+9,0
+7
+41,0
+7
+16,0
+7
+9,0
+7
+1b,0
+d,7
+1b,0
+7
+15,0
+7
+9,0
+7
+17,0
+4,7
+d,0
+4,7
+17,0
+7
+15,0
+7
+9,0
+7
+14,0
+3,7
+15,0
+3,7
+14,0
+7
+15,0
+7
+9,0
+7
+13,0
+2,7
+19,0
+2,7
+13,0
+7
+14,0
+7
+9,0
+7
+13,0
+7
+1d,0
+7
+13,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+45,0
+7
+13,0
+7
+9,0
+7
+1d,0
+b,7
+1d,0
+7
+13,0
+7
+9,0
+7
+1a,0
+3,7
+b,0
+3,7
+1a,0
+7
+13,0
+7
+9,0
+7
+17,0
+3,7
+11,0
+3,7
+17,0
+7
+13,0
+7
+9,0
+7
+16,0
+2,7
+15,0
+2,7
+16,0
+7
+13,0
+7
+9,0
+7
+14,0
+2,7
+19,0
+2,7
+14,0
+7
+13,0
+7
+9,0
+7
+13,0
+7
+1d,0
+7
+13,0
+7
+13,0
+7
+a,0
+7
+11,0
+7
+1f,0
+7
+12,0
+7
+13,0
+7
+a,0
+7
+10,0
+7
+21,0
+7
+11,0
+7
+14,0
+7
+9,0
+7
+f,0
+7
+23,0
+7
+f,0
+7
+15,0
+7
+9,0
+7
+f,0
+7
+23,0
+7
+f,0
+7
+15,0
+7
+a,0
+7
+d,0
+7
+25,0
+7
+e,0
+7
+15,0
+7
+a,0
+7
+d,0
+7
+25,0
+7
+e,0
+7
+16,0
+7
+9,0
+2,7
+b,0
+7
+27,0
+7
+c,0
+7
+17,0
+7
+a,0
+7
+b,0
+7
+27,0
+7
+c,0
+7
+17,0
+7
+a,0
+2,7
+a,0
+7
+27,0
+7
+c,0
+7
+17,0
+2,7
+a,0
+7
+a,0
+7
+27,0
+7
+b,0
+2,7
+18,0
+7
+b,0
+7
+9,0
+7
+27,0
+7
+b,0
+7
+19,0
+7
+15,0
+7
+27,0
+7
+b,0
+7
+1a,0
+7
+14,0
+7
+27,0
+7
+a,0
+7
+1b,0
+7
+15,0
+7
+25,0
+7
+b,0
+7
+1c,0
+7
+14,0
+7
+25,0
+7
+a,0
+7
+1d,0
+7
+15,0
+7
+23,0
+7
+b,0
+7
+1e,0
+7
+14,0
+7
+23,0
+7
+a,0
+7
+1f,0
+2,7
+14,0
+7
+21,0
+7
+a,0
+2,7
+20,0
+7
+15,0
+7
+1f,0
+7
+b,0
+7
+22,0
+7
+15,0
+7
+1d,0
+7
+b,0
+7
+24,0
+7
+15,0
+2,7
+19,0
+2,7
+b,0
+7
+25,0
+2,7
+16,0
+2,7
+15,0
+2,7
+c,0
+2,7
+26,0
+2,7
+16,0
+3,7
+11,0
+3,7
+c,0
+2,7
+28,0
+2,7
+18,0
+3,7
+b,0
+3,7
+e,0
+2,7
+2a,0
+2,7
+1a,0
+b,7
+10,0
+2,7
+2c,0
+2,7
+33,0
+2,7
+2e,0
+2,7
+31,0
+2,7
+31,0
+7
+2f,0
+7
+34,0
+2,7
+2b,0
+2,7
+36,0
+2,7
+29,0
+2,7
+39,0
+2,7
+25,0
+2,7
+3d,0
+2,7
+21,0
+2,7
+41,0
+3,7
+1b,0
+3,7
+45,0
+4,7
+15,0
+4,7
+4b,0
+4,7
+d,0
+4,7
+53,0
+d,7
+1c0,0
+100 90 32
+21b,0
+d,10
+53,0
+4,10
+d,0
+4,10
+4b,0
+4,10
+15,0
+4,10
+45,0
+3,10
+1b,0
+3,10
+41,0
+2,10
+21,0
+2,10
+3d,0
+2,10
+25,0
+2,10
+39,0
+2,10
+29,0
+2,10
+36,0
+2,10
+2b,0
+2,10
+34,0
+10
+2f,0
+10
+31,0
+2,10
+13,0
+4,10
+1a,0
+2,10
+2e,0
+2,10
+10,0
+4,10
+1f,0
+2,10
+2c,0
+2,10
+e,0
+3,10
+9,0
+6,10
+15,0
+2,10
+2a,0
+2,10
+d,0
+3,10
+11,0
+5,10
+11,0
+2,10
+28,0
+2,10
+d,0
+2,10
+18,0
+3,10
+f,0
+2,10
+26,0
+2,10
+c,0
+2,10
+1c,0
+3,10
+e,0
+2,10
+25,0
+10
+c,0
+10
+21,0
+2,10
+d,0
+10
+24,0
+10
+b,0
+2,10
+24,0
+10
+d,0
+10
+22,0
+10
+b,0
+2,10
+26,0
+2,10
+c,0
+10
+20,0
+2,10
+a,0
+2,10
+29,0
+10
+b,0
+2,10
+1f,0
+10
+a,0
+2,10
+f,0
+3,10
+19,0
+2,10
+a,0
+10
+1e,0
+10
+b,0
+10
+2d,0
+2,10
+a,0
+10
+1d,0
+10
+a,0
+10
+2f,0
+10
+a,0
+10
+1c,0
+10
+a,0
+10
+3c,0
+10
+1b,0
+10
+a,0
+10
+3c,0
+10
+1a,0
+10
+a,0
+10
+3e,0
+10
+19,0
+10
+9,0
+2,10
+3e,0
+10
+18,0
+2,10
+9,0
+10
+3f,0
+2,10
+17,0
+10
+9,0
+2,10
+40,0
+10
+17,0
+10
+9,0
+10
+41,0
+10
+17,0
+10
+9,0
+10
+41,0
+10
+16,0
+10
+9,0
+10
+1b,0
+d,10
+1b,0
+10
+15,0
+10
+9,0
+10
+17,0
+4,10
+d,0
+4,10
+17,0
+10
+15,0
+10
+9,0
+10
+14,0
+3,10
+15,0
+3,10
+14,0
+10
+15,0
+10
+9,0
+10
+13,0
+2,10
+19,0
+2,10
+13,0
+10
+14,0
+10
+9,0
+10
+13,0
+10
+1d,0
+10
+13,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+45,0
+10
+13,0
+10
+9,0
+10
+1d,0
+b,10
+1d,0
+10
+13,0
+10
+9,0
+10
+1a,0
+3,10
+b,0
+3,10
+1a,0
+10
+13,0
+10
+9,0
+10
+17,0
+3,10
+11,0
+3,10
+17,0
+10
+13,0
+10
+9,0
+10
+16,0
+2,10
+15,0
+2,10
+16,0
+10
+13,0
+10
+9,0
+10
+14,0
+2,10
+19,0
+2,10
+14,0
+10
+13,0
+10
+9,0
+10
+13,0
+10
+1d,0
+10
+13,0
+10
+13,0
+10
+a,0
+10
+11,0
+10
+1f,0
+10
+12,0
+10
+13,0
+10
+a,0
+10
+10,0
+10
+21,0
+10
+11,0
+10
+14,0
+10
+9,0
+10
+f,0
+10
+23,0
+10
+f,0
+10
+15,0
+10
+9,0
+10
+f,0
+10
+23,0
+10
+f,0
+10
+15,0
+10
+a,0
+10
+d,0
+10
+25,0
+10
+e,0
+10
+15,0
+10
+a,0
+10
+d,0
+10
+25,0
+10
+e,0
+10
+16,0
+10
+9,0
+2,10
+b,0
+10
+27,0
+10
+c,0
+10
+17,0
+10
+a,0
+10
+b,0
+10
+27,0
+10
+c,0
+10
+17,0
+10
+a,0
+2,10
+a,0
+10
+27,0
+10
+c,0
+10
+17,0
+2,10
+a,0
+10
+a,0
+10
+27,0
+10
+b,0
+2,10
+18,0
+10
+b,0
+10
+9,0
+10
+27,0
+10
+b,0
+10
+19,0
+10
+15,0
+10
+27,0
+10
+b,0
+10
+1a,0
+10
+14,0
+10
+27,0
+10
+a,0
+10
+1b,0
+10
+15,0
+10
+25,0
+10
+b,0
+10
+1c,0
+10
+14,0
+10
+25,0
+10
+a,0
+10
+1d,0
+10
+15,0
+10
+23,0
+10
+b,0
+10
+1e,0
+10
+14,0
+10
+23,0
+10
+a,0
+10
+1f,0
+2,10
+14,0
+10
+21,0
+10
+a,0
+2,10
+20,0
+10
+15,0
+10
+1f,0
+10
+b,0
+10
+22,0
+10
+15,0
+10
+1d,0
+10
+b,0
+10
+24,0
+10
+15,0
+2,10
+19,0
+2,10
+b,0
+10
+25,0
+2,10
+16,0
+2,10
+15,0
+2,10
+c,0
+2,10
+26,0
+2,10
+16,0
+3,10
+11,0
+3,10
+c,0
+2,10
+28,0
+2,10
+18,0
+3,10
+b,0
+3,10
+e,0
+2,10
+2a,0
+2,10
+1a,0
+b,10
+10,0
+2,10
+2c,0
+2,10
+33,0
+2,10
+2e,0
+2,10
+31,0
+2,10
+31,0
+10
+2f,0
+10
+34,0
+2,10
+2b,0
+2,10
+36,0
+2,10
+29,0
+2,10
+39,0
+2,10
+25,0
+2,10
+3d,0
+2,10
+21,0
+2,10
+41,0
+3,10
+1b,0
+3,10
+45,0
+4,10
+15,0
+4,10
+4b,0
+4,10
+d,0
+4,10
+53,0
+d,10
+1c0,0
+100 90 32
+21b,0
+d,33
+53,0
+4,33
+d,0
+4,33
+4b,0
+4,33
+15,0
+4,33
+45,0
+3,33
+1b,0
+3,33
+41,0
+2,33
+21,0
+2,33
+3d,0
+2,33
+25,0
+2,33
+39,0
+2,33
+29,0
+2,33
+36,0
+2,33
+2b,0
+2,33
+34,0
+33
+2f,0
+33
+31,0
+2,33
+13,0
+4,33
+1a,0
+2,33
+2e,0
+2,33
+10,0
+4,33
+1f,0
+2,33
+2c,0
+2,33
+e,0
+3,33
+9,0
+6,33
+15,0
+2,33
+2a,0
+2,33
+d,0
+3,33
+11,0
+5,33
+11,0
+2,33
+28,0
+2,33
+d,0
+2,33
+18,0
+3,33
+f,0
+2,33
+26,0
+2,33
+c,0
+2,33
+1c,0
+3,33
+e,0
+2,33
+25,0
+33
+c,0
+33
+21,0
+2,33
+d,0
+33
+24,0
+33
+b,0
+2,33
+24,0
+33
+d,0
+33
+22,0
+33
+b,0
+2,33
+26,0
+2,33
+c,0
+33
+20,0
+2,33
+a,0
+2,33
+29,0
+33
+b,0
+2,33
+1f,0
+33
+a,0
+2,33
+f,0
+3,33
+19,0
+2,33
+a,0
+33
+1e,0
+33
+b,0
+33
+2d,0
+2,33
+a,0
+33
+1d,0
+33
+a,0
+33
+2f,0
+33
+a,0
+33
+1c,0
+33
+a,0
+33
+3c,0
+33
+1b,0
+33
+a,0
+33
+3c,0
+33
+1a,0
+33
+a,0
+33
+3e,0
+33
+19,0
+33
+9,0
+2,33
+3e,0
+33
+18,0
+2,33
+9,0
+33
+3f,0
+2,33
+17,0
+33
+9,0
+2,33
+40,0
+33
+17,0
+33
+9,0
+33
+41,0
+33
+17,0
+33
+9,0
+33
+41,0
+33
+16,0
+33
+9,0
+33
+1b,0
+d,33
+1b,0
+33
+15,0
+33
+9,0
+33
+17,0
+4,33
+d,0
+4,33
+17,0
+33
+15,0
+33
+9,0
+33
+14,0
+3,33
+15,0
+3,33
+14,0
+33
+15,0
+33
+9,0
+33
+13,0
+2,33
+19,0
+2,33
+13,0
+33
+14,0
+33
+9,0
+33
+13,0
+33
+1d,0
+33
+13,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+45,0
+33
+13,0
+33
+9,0
+33
+1d,0
+b,33
+1d,0
+33
+13,0
+33
+9,0
+33
+1a,0
+3,33
+b,0
+3,33
+1a,0
+33
+13,0
+33
+9,0
+33
+17,0
+3,33
+11,0
+3,33
+17,0
+33
+13,0
+33
+9,0
+33
+16,0
+2,33
+15,0
+2,33
+16,0
+33
+13,0
+33
+9,0
+33
+14,0
+2,33
+19,0
+2,33
+14,0
+33
+13,0
+33
+9,0
+33
+13,0
+33
+1d,0
+33
+13,0
+33
+13,0
+33
+a,0
+33
+11,0
+33
+1f,0
+33
+12,0
+33
+13,0
+33
+a,0
+33
+10,0
+33
+21,0
+33
+11,0
+33
+14,0
+33
+9,0
+33
+f,0
+33
+23,0
+33
+f,0
+33
+15,0
+33
+9,0
+33
+f,0
+33
+23,0
+33
+f,0
+33
+15,0
+33
+a,0
+33
+d,0
+33
+25,0
+33
+e,0
+33
+15,0
+33
+a,0
+33
+d,0
+33
+25,0
+33
+e,0
+33
+16,0
+33
+9,0
+2,33
+b,0
+33
+27,0
+33
+c,0
+33
+17,0
+33
+a,0
+33
+b,0
+33
+27,0
+33
+c,0
+33
+17,0
+33
+a,0
+2,33
+a,0
+33
+27,0
+33
+c,0
+33
+17,0
+2,33
+a,0
+33
+a,0
+33
+27,0
+33
+b,0
+2,33
+18,0
+33
+b,0
+33
+9,0
+33
+27,0
+33
+b,0
+33
+19,0
+33
+15,0
+33
+27,0
+33
+b,0
+33
+1a,0
+33
+14,0
+33
+27,0
+33
+a,0
+33
+1b,0
+33
+15,0
+33
+25,0
+33
+b,0
+33
+1c,0
+33
+14,0
+33
+25,0
+33
+a,0
+33
+1d,0
+33
+15,0
+33
+23,0
+33
+b,0
+33
+1e,0
+33
+14,0
+33
+23,0
+33
+a,0
+33
+1f,0
+2,33
+14,0
+33
+21,0
+33
+a,0
+2,33
+20,0
+33
+15,0
+33
+1f,0
+33
+b,0
+33
+22,0
+33
+15,0
+33
+1d,0
+33
+b,0
+33
+24,0
+33
+15,0
+2,33
+19,0
+2,33
+b,0
+33
+25,0
+2,33
+16,0
+2,33
+15,0
+2,33
+c,0
+2,33
+26,0
+2,33
+16,0
+3,33
+11,0
+3,33
+c,0
+2,33
+28,0
+2,33
+18,0
+3,33
+b,0
+3,33
+e,0
+2,33
+2a,0
+2,33
+1a,0
+b,33
+10,0
+2,33
+2c,0
+2,33
+33,0
+2,33
+2e,0
+2,33
+31,0
+2,33
+31,0
+33
+2f,0
+33
+34,0
+2,33
+2b,0
+2,33
+36,0
+2,33
+29,0
+2,33
+39,0
+2,33
+25,0
+2,33
+3d,0
+2,33
+21,0
+2,33
+41,0
+3,33
+1b,0
+3,33
+45,0
+4,33
+15,0
+4,33
+4b,0
+4,33
+d,0
+4,33
+53,0
+d,33
+1c0,0
+100 90 32
+21b,0
+d,81
+53,0
+4,81
+d,0
+4,81
+4b,0
+4,81
+15,0
+4,81
+45,0
+3,81
+1b,0
+3,81
+41,0
+2,81
+21,0
+2,81
+3d,0
+2,81
+25,0
+2,81
+39,0
+2,81
+29,0
+2,81
+36,0
+2,81
+2b,0
+2,81
+34,0
+81
+2f,0
+81
+31,0
+2,81
+13,0
+4,81
+1a,0
+2,81
+2e,0
+2,81
+10,0
+4,81
+1f,0
+2,81
+2c,0
+2,81
+e,0
+3,81
+9,0
+6,81
+15,0
+2,81
+2a,0
+2,81
+d,0
+3,81
+11,0
+5,81
+11,0
+2,81
+28,0
+2,81
+d,0
+2,81
+18,0
+3,81
+f,0
+2,81
+26,0
+2,81
+c,0
+2,81
+1c,0
+3,81
+e,0
+2,81
+25,0
+81
+c,0
+81
+21,0
+2,81
+d,0
+81
+24,0
+81
+b,0
+2,81
+24,0
+81
+d,0
+81
+22,0
+81
+b,0
+2,81
+26,0
+2,81
+c,0
+81
+20,0
+2,81
+a,0
+2,81
+29,0
+81
+b,0
+2,81
+1f,0
+81
+a,0
+2,81
+f,0
+3,81
+19,0
+2,81
+a,0
+81
+1e,0
+81
+b,0
+81
+2d,0
+2,81
+a,0
+81
+1d,0
+81
+a,0
+81
+2f,0
+81
+a,0
+81
+1c,0
+81
+a,0
+81
+3c,0
+81
+1b,0
+81
+a,0
+81
+3c,0
+81
+1a,0
+81
+a,0
+81
+3e,0
+81
+19,0
+81
+9,0
+2,81
+3e,0
+81
+18,0
+2,81
+9,0
+81
+3f,0
+2,81
+17,0
+81
+9,0
+2,81
+40,0
+81
+17,0
+81
+9,0
+81
+41,0
+81
+17,0
+81
+9,0
+81
+41,0
+81
+16,0
+81
+9,0
+81
+1b,0
+d,81
+1b,0
+81
+15,0
+81
+9,0
+81
+17,0
+4,81
+d,0
+4,81
+17,0
+81
+15,0
+81
+9,0
+81
+14,0
+3,81
+15,0
+3,81
+14,0
+81
+15,0
+81
+9,0
+81
+13,0
+2,81
+19,0
+2,81
+13,0
+81
+14,0
+81
+9,0
+81
+13,0
+81
+1d,0
+81
+13,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+45,0
+81
+13,0
+81
+9,0
+81
+1d,0
+b,81
+1d,0
+81
+13,0
+81
+9,0
+81
+1a,0
+3,81
+b,0
+3,81
+1a,0
+81
+13,0
+81
+9,0
+81
+17,0
+3,81
+11,0
+3,81
+17,0
+81
+13,0
+81
+9,0
+81
+16,0
+2,81
+15,0
+2,81
+16,0
+81
+13,0
+81
+9,0
+81
+14,0
+2,81
+19,0
+2,81
+14,0
+81
+13,0
+81
+9,0
+81
+13,0
+81
+1d,0
+81
+13,0
+81
+13,0
+81
+a,0
+81
+11,0
+81
+1f,0
+81
+12,0
+81
+13,0
+81
+a,0
+81
+10,0
+81
+21,0
+81
+11,0
+81
+14,0
+81
+9,0
+81
+f,0
+81
+23,0
+81
+f,0
+81
+15,0
+81
+9,0
+81
+f,0
+81
+23,0
+81
+f,0
+81
+15,0
+81
+a,0
+81
+d,0
+81
+25,0
+81
+e,0
+81
+15,0
+81
+a,0
+81
+d,0
+81
+25,0
+81
+e,0
+81
+16,0
+81
+9,0
+2,81
+b,0
+81
+27,0
+81
+c,0
+81
+17,0
+81
+a,0
+81
+b,0
+81
+27,0
+81
+c,0
+81
+17,0
+81
+a,0
+2,81
+a,0
+81
+27,0
+81
+c,0
+81
+17,0
+2,81
+a,0
+81
+a,0
+81
+27,0
+81
+b,0
+2,81
+18,0
+81
+b,0
+81
+9,0
+81
+27,0
+81
+b,0
+81
+19,0
+81
+15,0
+81
+27,0
+81
+b,0
+81
+1a,0
+81
+14,0
+81
+27,0
+81
+a,0
+81
+1b,0
+81
+15,0
+81
+25,0
+81
+b,0
+81
+1c,0
+81
+14,0
+81
+25,0
+81
+a,0
+81
+1d,0
+81
+15,0
+81
+23,0
+81
+b,0
+81
+1e,0
+81
+14,0
+81
+23,0
+81
+a,0
+81
+1f,0
+2,81
+14,0
+81
+21,0
+81
+a,0
+2,81
+20,0
+81
+15,0
+81
+1f,0
+81
+b,0
+81
+22,0
+81
+15,0
+81
+1d,0
+81
+b,0
+81
+24,0
+81
+15,0
+2,81
+19,0
+2,81
+b,0
+81
+25,0
+2,81
+16,0
+2,81
+15,0
+2,81
+c,0
+2,81
+26,0
+2,81
+16,0
+3,81
+11,0
+3,81
+c,0
+2,81
+28,0
+2,81
+18,0
+3,81
+b,0
+3,81
+e,0
+2,81
+2a,0
+2,81
+1a,0
+b,81
+10,0
+2,81
+2c,0
+2,81
+33,0
+2,81
+2e,0
+2,81
+31,0
+2,81
+31,0
+81
+2f,0
+81
+34,0
+2,81
+2b,0
+2,81
+36,0
+2,81
+29,0
+2,81
+39,0
+2,81
+25,0
+2,81
+3d,0
+2,81
+21,0
+2,81
+41,0
+3,81
+1b,0
+3,81
+45,0
+4,81
+15,0
+4,81
+4b,0
+4,81
+d,0
+4,81
+53,0
+d,81
+1c0,0
+100 90 32
+21b,0
+d,a3
+53,0
+4,a3
+d,0
+4,a3
+4b,0
+4,a3
+15,0
+4,a3
+45,0
+3,a3
+1b,0
+3,a3
+41,0
+2,a3
+21,0
+2,a3
+3d,0
+2,a3
+25,0
+2,a3
+39,0
+2,a3
+29,0
+2,a3
+36,0
+2,a3
+2b,0
+2,a3
+34,0
+a3
+2f,0
+a3
+31,0
+2,a3
+13,0
+4,a3
+1a,0
+2,a3
+2e,0
+2,a3
+10,0
+4,a3
+1f,0
+2,a3
+2c,0
+2,a3
+e,0
+3,a3
+9,0
+6,a3
+15,0
+2,a3
+2a,0
+2,a3
+d,0
+3,a3
+11,0
+5,a3
+11,0
+2,a3
+28,0
+2,a3
+d,0
+2,a3
+18,0
+3,a3
+f,0
+2,a3
+26,0
+2,a3
+c,0
+2,a3
+1c,0
+3,a3
+e,0
+2,a3
+25,0
+a3
+c,0
+a3
+21,0
+2,a3
+d,0
+a3
+24,0
+a3
+b,0
+2,a3
+24,0
+a3
+d,0
+a3
+22,0
+a3
+b,0
+2,a3
+26,0
+2,a3
+c,0
+a3
+20,0
+2,a3
+a,0
+2,a3
+29,0
+a3
+b,0
+2,a3
+1f,0
+a3
+a,0
+2,a3
+f,0
+3,a3
+19,0
+2,a3
+a,0
+a3
+1e,0
+a3
+b,0
+a3
+2d,0
+2,a3
+a,0
+a3
+1d,0
+a3
+a,0
+a3
+2f,0
+a3
+a,0
+a3
+1c,0
+a3
+a,0
+a3
+3c,0
+a3
+1b,0
+a3
+a,0
+a3
+3c,0
+a3
+1a,0
+a3
+a,0
+a3
+3e,0
+a3
+19,0
+a3
+9,0
+2,a3
+3e,0
+a3
+18,0
+2,a3
+9,0
+a3
+3f,0
+2,a3
+17,0
+a3
+9,0
+2,a3
+40,0
+a3
+17,0
+a3
+9,0
+a3
+41,0
+a3
+17,0
+a3
+9,0
+a3
+41,0
+a3
+16,0
+a3
+9,0
+a3
+1b,0
+d,a3
+1b,0
+a3
+15,0
+a3
+9,0
+a3
+17,0
+4,a3
+d,0
+4,a3
+17,0
+a3
+15,0
+a3
+9,0
+a3
+14,0
+3,a3
+15,0
+3,a3
+14,0
+a3
+15,0
+a3
+9,0
+a3
+13,0
+2,a3
+19,0
+2,a3
+13,0
+a3
+14,0
+a3
+9,0
+a3
+13,0
+a3
+1d,0
+a3
+13,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+45,0
+a3
+13,0
+a3
+9,0
+a3
+1d,0
+b,a3
+1d,0
+a3
+13,0
+a3
+9,0
+a3
+1a,0
+3,a3
+b,0
+3,a3
+1a,0
+a3
+13,0
+a3
+9,0
+a3
+17,0
+3,a3
+11,0
+3,a3
+17,0
+a3
+13,0
+a3
+9,0
+a3
+16,0
+2,a3
+15,0
+2,a3
+16,0
+a3
+13,0
+a3
+9,0
+a3
+14,0
+2,a3
+19,0
+2,a3
+14,0
+a3
+13,0
+a3
+9,0
+a3
+13,0
+a3
+1d,0
+a3
+13,0
+a3
+13,0
+a3
+a,0
+a3
+11,0
+a3
+1f,0
+a3
+12,0
+a3
+13,0
+a3
+a,0
+a3
+10,0
+a3
+21,0
+a3
+11,0
+a3
+14,0
+a3
+9,0
+a3
+f,0
+a3
+23,0
+a3
+f,0
+a3
+15,0
+a3
+9,0
+a3
+f,0
+a3
+23,0
+a3
+f,0
+a3
+15,0
+a3
+a,0
+a3
+d,0
+a3
+25,0
+a3
+e,0
+a3
+15,0
+a3
+a,0
+a3
+d,0
+a3
+25,0
+a3
+e,0
+a3
+16,0
+a3
+9,0
+2,a3
+b,0
+a3
+27,0
+a3
+c,0
+a3
+17,0
+a3
+a,0
+a3
+b,0
+a3
+27,0
+a3
+c,0
+a3
+17,0
+a3
+a,0
+2,a3
+a,0
+a3
+27,0
+a3
+c,0
+a3
+17,0
+2,a3
+a,0
+a3
+a,0
+a3
+27,0
+a3
+b,0
+2,a3
+18,0
+a3
+b,0
+a3
+9,0
+a3
+27,0
+a3
+b,0
+a3
+19,0
+a3
+15,0
+a3
+27,0
+a3
+b,0
+a3
+1a,0
+a3
+14,0
+a3
+27,0
+a3
+a,0
+a3
+1b,0
+a3
+15,0
+a3
+25,0
+a3
+b,0
+a3
+1c,0
+a3
+14,0
+a3
+25,0
+a3
+a,0
+a3
+1d,0
+a3
+15,0
+a3
+23,0
+a3
+b,0
+a3
+1e,0
+a3
+14,0
+a3
+23,0
+a3
+a,0
+a3
+1f,0
+2,a3
+14,0
+a3
+21,0
+a3
+a,0
+2,a3
+20,0
+a3
+15,0
+a3
+1f,0
+a3
+b,0
+a3
+22,0
+a3
+15,0
+a3
+1d,0
+a3
+b,0
+a3
+24,0
+a3
+15,0
+2,a3
+19,0
+2,a3
+b,0
+a3
+25,0
+2,a3
+16,0
+2,a3
+15,0
+2,a3
+c,0
+2,a3
+26,0
+2,a3
+16,0
+3,a3
+11,0
+3,a3
+c,0
+2,a3
+28,0
+2,a3
+18,0
+3,a3
+b,0
+3,a3
+e,0
+2,a3
+2a,0
+2,a3
+1a,0
+b,a3
+10,0
+2,a3
+2c,0
+2,a3
+33,0
+2,a3
+2e,0
+2,a3
+31,0
+2,a3
+31,0
+a3
+2f,0
+a3
+34,0
+2,a3
+2b,0
+2,a3
+36,0
+2,a3
+29,0
+2,a3
+39,0
+2,a3
+25,0
+2,a3
+3d,0
+2,a3
+21,0
+2,a3
+41,0
+3,a3
+1b,0
+3,a3
+45,0
+4,a3
+15,0
+4,a3
+4b,0
+4,a3
+d,0
+4,a3
+53,0
+d,a3
+1c0,0
+100 90 32
+21b,0
+d,ff
+53,0
+4,ff
+d,0
+4,ff
+4b,0
+4,ff
+15,0
+4,ff
+45,0
+3,ff
+1b,0
+3,ff
+41,0
+2,ff
+21,0
+2,ff
+3d,0
+2,ff
+25,0
+2,ff
+39,0
+2,ff
+29,0
+2,ff
+36,0
+2,ff
+2b,0
+2,ff
+34,0
+ff
+2f,0
+ff
+31,0
+2,ff
+13,0
+4,ff
+1a,0
+2,ff
+2e,0
+2,ff
+10,0
+4,ff
+1f,0
+2,ff
+2c,0
+2,ff
+e,0
+3,ff
+9,0
+6,ff
+15,0
+2,ff
+2a,0
+2,ff
+d,0
+3,ff
+11,0
+5,ff
+11,0
+2,ff
+28,0
+2,ff
+d,0
+2,ff
+18,0
+3,ff
+f,0
+2,ff
+26,0
+2,ff
+c,0
+2,ff
+1c,0
+3,ff
+e,0
+2,ff
+25,0
+ff
+c,0
+ff
+21,0
+2,ff
+d,0
+ff
+24,0
+ff
+b,0
+2,ff
+24,0
+ff
+d,0
+ff
+22,0
+ff
+b,0
+2,ff
+26,0
+2,ff
+c,0
+ff
+20,0
+2,ff
+a,0
+2,ff
+29,0
+ff
+b,0
+2,ff
+1f,0
+ff
+a,0
+2,ff
+f,0
+3,ff
+19,0
+2,ff
+a,0
+ff
+1e,0
+ff
+b,0
+ff
+2d,0
+2,ff
+a,0
+ff
+1d,0
+ff
+a,0
+ff
+2f,0
+ff
+a,0
+ff
+1c,0
+ff
+a,0
+ff
+3c,0
+ff
+1b,0
+ff
+a,0
+ff
+3c,0
+ff
+1a,0
+ff
+a,0
+ff
+3e,0
+ff
+19,0
+ff
+9,0
+2,ff
+3e,0
+ff
+18,0
+2,ff
+9,0
+ff
+3f,0
+2,ff
+17,0
+ff
+9,0
+2,ff
+40,0
+ff
+17,0
+ff
+9,0
+ff
+41,0
+ff
+17,0
+ff
+9,0
+ff
+41,0
+ff
+16,0
+ff
+9,0
+ff
+1b,0
+d,ff
+1b,0
+ff
+15,0
+ff
+9,0
+ff
+17,0
+4,ff
+d,0
+4,ff
+17,0
+ff
+15,0
+ff
+9,0
+ff
+14,0
+3,ff
+15,0
+3,ff
+14,0
+ff
+15,0
+ff
+9,0
+ff
+13,0
+2,ff
+19,0
+2,ff
+13,0
+ff
+14,0
+ff
+9,0
+ff
+13,0
+ff
+1d,0
+ff
+13,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+45,0
+ff
+13,0
+ff
+9,0
+ff
+1d,0
+b,ff
+1d,0
+ff
+13,0
+ff
+9,0
+ff
+1a,0
+3,ff
+b,0
+3,ff
+1a,0
+ff
+13,0
+ff
+9,0
+ff
+17,0
+3,ff
+11,0
+3,ff
+17,0
+ff
+13,0
+ff
+9,0
+ff
+16,0
+2,ff
+15,0
+2,ff
+16,0
+ff
+13,0
+ff
+9,0
+ff
+14,0
+2,ff
+19,0
+2,ff
+14,0
+ff
+13,0
+ff
+9,0
+ff
+13,0
+ff
+1d,0
+ff
+13,0
+ff
+13,0
+ff
+a,0
+ff
+11,0
+ff
+1f,0
+ff
+12,0
+ff
+13,0
+ff
+a,0
+ff
+10,0
+ff
+21,0
+ff
+11,0
+ff
+14,0
+ff
+9,0
+ff
+f,0
+ff
+23,0
+ff
+f,0
+ff
+15,0
+ff
+9,0
+ff
+f,0
+ff
+23,0
+ff
+f,0
+ff
+15,0
+ff
+a,0
+ff
+d,0
+ff
+25,0
+ff
+e,0
+ff
+15,0
+ff
+a,0
+ff
+d,0
+ff
+25,0
+ff
+e,0
+ff
+16,0
+ff
+9,0
+2,ff
+b,0
+ff
+27,0
+ff
+c,0
+ff
+17,0
+ff
+a,0
+ff
+b,0
+ff
+27,0
+ff
+c,0
+ff
+17,0
+ff
+a,0
+2,ff
+a,0
+ff
+27,0
+ff
+c,0
+ff
+17,0
+2,ff
+a,0
+ff
+a,0
+ff
+27,0
+ff
+b,0
+2,ff
+18,0
+ff
+b,0
+ff
+9,0
+ff
+27,0
+ff
+b,0
+ff
+19,0
+ff
+15,0
+ff
+27,0
+ff
+b,0
+ff
+1a,0
+ff
+14,0
+ff
+27,0
+ff
+a,0
+ff
+1b,0
+ff
+15,0
+ff
+25,0
+ff
+b,0
+ff
+1c,0
+ff
+14,0
+ff
+25,0
+ff
+a,0
+ff
+1d,0
+ff
+15,0
+ff
+23,0
+ff
+b,0
+ff
+1e,0
+ff
+14,0
+ff
+23,0
+ff
+a,0
+ff
+1f,0
+2,ff
+14,0
+ff
+21,0
+ff
+a,0
+2,ff
+20,0
+ff
+15,0
+ff
+1f,0
+ff
+b,0
+ff
+22,0
+ff
+15,0
+ff
+1d,0
+ff
+b,0
+ff
+24,0
+ff
+15,0
+2,ff
+19,0
+2,ff
+b,0
+ff
+25,0
+2,ff
+16,0
+2,ff
+15,0
+2,ff
+c,0
+2,ff
+26,0
+2,ff
+16,0
+3,ff
+11,0
+3,ff
+c,0
+2,ff
+28,0
+2,ff
+18,0
+3,ff
+b,0
+3,ff
+e,0
+2,ff
+2a,0
+2,ff
+1a,0
+b,ff
+10,0
+2,ff
+2c,0
+2,ff
+33,0
+2,ff
+2e,0
+2,ff
+31,0
+2,ff
+31,0
+ff
+2f,0
+ff
+34,0
+2,ff
+2b,0
+2,ff
+36,0
+2,ff
+29,0
+2,ff
+39,0
+2,ff
+25,0
+2,ff
+3d,0
+2,ff
+21,0
+2,ff
+41,0
+3,ff
+1b,0
+3,ff
+45,0
+4,ff
+15,0
+4,ff
+4b,0
+4,ff
+d,0
+4,ff
+53,0
+d,ff
+1c0,0
+100 90 32
+21b,0
+d,100
+53,0
+4,100
+d,0
+4,100
+4b,0
+4,100
+15,0
+4,100
+45,0
+3,100
+1b,0
+3,100
+41,0
+2,100
+21,0
+2,100
+3d,0
+2,100
+25,0
+2,100
+39,0
+2,100
+29,0
+2,100
+36,0
+2,100
+2b,0
+2,100
+34,0
+100
+2f,0
+100
+31,0
+2,100
+13,0
+4,100
+1a,0
+2,100
+2e,0
+2,100
+10,0
+4,100
+1f,0
+2,100
+2c,0
+2,100
+e,0
+3,100
+9,0
+6,100
+15,0
+2,100
+2a,0
+2,100
+d,0
+3,100
+11,0
+5,100
+11,0
+2,100
+28,0
+2,100
+d,0
+2,100
+18,0
+3,100
+f,0
+2,100
+26,0
+2,100
+c,0
+2,100
+1c,0
+3,100
+e,0
+2,100
+25,0
+100
+c,0
+100
+21,0
+2,100
+d,0
+100
+24,0
+100
+b,0
+2,100
+24,0
+100
+d,0
+100
+22,0
+100
+b,0
+2,100
+26,0
+2,100
+c,0
+100
+20,0
+2,100
+a,0
+2,100
+29,0
+100
+b,0
+2,100
+1f,0
+100
+a,0
+2,100
+f,0
+3,100
+19,0
+2,100
+a,0
+100
+1e,0
+100
+b,0
+100
+2d,0
+2,100
+a,0
+100
+1d,0
+100
+a,0
+100
+2f,0
+100
+a,0
+100
+1c,0
+100
+a,0
+100
+3c,0
+100
+1b,0
+100
+a,0
+100
+3c,0
+100
+1a,0
+100
+a,0
+100
+3e,0
+100
+19,0
+100
+9,0
+2,100
+3e,0
+100
+18,0
+2,100
+9,0
+100
+3f,0
+2,100
+17,0
+100
+9,0
+2,100
+40,0
+100
+17,0
+100
+9,0
+100
+41,0
+100
+17,0
+100
+9,0
+100
+41,0
+100
+16,0
+100
+9,0
+100
+1b,0
+d,100
+1b,0
+100
+15,0
+100
+9,0
+100
+17,0
+4,100
+d,0
+4,100
+17,0
+100
+15,0
+100
+9,0
+100
+14,0
+3,100
+15,0
+3,100
+14,0
+100
+15,0
+100
+9,0
+100
+13,0
+2,100
+19,0
+2,100
+13,0
+100
+14,0
+100
+9,0
+100
+13,0
+100
+1d,0
+100
+13,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+45,0
+100
+13,0
+100
+9,0
+100
+1d,0
+b,100
+1d,0
+100
+13,0
+100
+9,0
+100
+1a,0
+3,100
+b,0
+3,100
+1a,0
+100
+13,0
+100
+9,0
+100
+17,0
+3,100
+11,0
+3,100
+17,0
+100
+13,0
+100
+9,0
+100
+16,0
+2,100
+15,0
+2,100
+16,0
+100
+13,0
+100
+9,0
+100
+14,0
+2,100
+19,0
+2,100
+14,0
+100
+13,0
+100
+9,0
+100
+13,0
+100
+1d,0
+100
+13,0
+100
+13,0
+100
+a,0
+100
+11,0
+100
+1f,0
+100
+12,0
+100
+13,0
+100
+a,0
+100
+10,0
+100
+21,0
+100
+11,0
+100
+14,0
+100
+9,0
+100
+f,0
+100
+23,0
+100
+f,0
+100
+15,0
+100
+9,0
+100
+f,0
+100
+23,0
+100
+f,0
+100
+15,0
+100
+a,0
+100
+d,0
+100
+25,0
+100
+e,0
+100
+15,0
+100
+a,0
+100
+d,0
+100
+25,0
+100
+e,0
+100
+16,0
+100
+9,0
+2,100
+b,0
+100
+27,0
+100
+c,0
+100
+17,0
+100
+a,0
+100
+b,0
+100
+27,0
+100
+c,0
+100
+17,0
+100
+a,0
+2,100
+a,0
+100
+27,0
+100
+c,0
+100
+17,0
+2,100
+a,0
+100
+a,0
+100
+27,0
+100
+b,0
+2,100
+18,0
+100
+b,0
+100
+9,0
+100
+27,0
+100
+b,0
+100
+19,0
+100
+15,0
+100
+27,0
+100
+b,0
+100
+1a,0
+100
+14,0
+100
+27,0
+100
+a,0
+100
+1b,0
+100
+15,0
+100
+25,0
+100
+b,0
+100
+1c,0
+100
+14,0
+100
+25,0
+100
+a,0
+100
+1d,0
+100
+15,0
+100
+23,0
+100
+b,0
+100
+1e,0
+100
+14,0
+100
+23,0
+100
+a,0
+100
+1f,0
+2,100
+14,0
+100
+21,0
+100
+a,0
+2,100
+20,0
+100
+15,0
+100
+1f,0
+100
+b,0
+100
+22,0
+100
+15,0
+100
+1d,0
+100
+b,0
+100
+24,0
+100
+15,0
+2,100
+19,0
+2,100
+b,0
+100
+25,0
+2,100
+16,0
+2,100
+15,0
+2,100
+c,0
+2,100
+26,0
+2,100
+16,0
+3,100
+11,0
+3,100
+c,0
+2,100
+28,0
+2,100
+18,0
+3,100
+b,0
+3,100
+e,0
+2,100
+2a,0
+2,100
+1a,0
+b,100
+10,0
+2,100
+2c,0
+2,100
+33,0
+2,100
+2e,0
+2,100
+31,0
+2,100
+31,0
+100
+2f,0
+100
+34,0
+2,100
+2b,0
+2,100
+36,0
+2,100
+29,0
+2,100
+39,0
+2,100
+25,0
+2,100
+3d,0
+2,100
+21,0
+2,100
+41,0
+3,100
+1b,0
+3,100
+45,0
+4,100
+15,0
+4,100
+4b,0
+4,100
+d,0
+4,100
+53,0
+d,100
+1c0,0
+100 90 32
+21b,0
+d,12c
+53,0
+4,12c
+d,0
+4,12c
+4b,0
+4,12c
+15,0
+4,12c
+45,0
+3,12c
+1b,0
+3,12c
+41,0
+2,12c
+21,0
+2,12c
+3d,0
+2,12c
+25,0
+2,12c
+39,0
+2,12c
+29,0
+2,12c
+36,0
+2,12c
+2b,0
+2,12c
+34,0
+12c
+2f,0
+12c
+31,0
+2,12c
+13,0
+4,12c
+1a,0
+2,12c
+2e,0
+2,12c
+10,0
+4,12c
+1f,0
+2,12c
+2c,0
+2,12c
+e,0
+3,12c
+9,0
+6,12c
+15,0
+2,12c
+2a,0
+2,12c
+d,0
+3,12c
+11,0
+5,12c
+11,0
+2,12c
+28,0
+2,12c
+d,0
+2,12c
+18,0
+3,12c
+f,0
+2,12c
+26,0
+2,12c
+c,0
+2,12c
+1c,0
+3,12c
+e,0
+2,12c
+25,0
+12c
+c,0
+12c
+21,0
+2,12c
+d,0
+12c
+24,0
+12c
+b,0
+2,12c
+24,0
+12c
+d,0
+12c
+22,0
+12c
+b,0
+2,12c
+26,0
+2,12c
+c,0
+12c
+20,0
+2,12c
+a,0
+2,12c
+29,0
+12c
+b,0
+2,12c
+1f,0
+12c
+a,0
+2,12c
+f,0
+3,12c
+19,0
+2,12c
+a,0
+12c
+1e,0
+12c
+b,0
+12c
+2d,0
+2,12c
+a,0
+12c
+1d,0
+12c
+a,0
+12c
+2f,0
+12c
+a,0
+12c
+1c,0
+12c
+a,0
+12c
+3c,0
+12c
+1b,0
+12c
+a,0
+12c
+3c,0
+12c
+1a,0
+12c
+a,0
+12c
+3e,0
+12c
+19,0
+12c
+9,0
+2,12c
+3e,0
+12c
+18,0
+2,12c
+9,0
+12c
+3f,0
+2,12c
+17,0
+12c
+9,0
+2,12c
+40,0
+12c
+17,0
+12c
+9,0
+12c
+41,0
+12c
+17,0
+12c
+9,0
+12c
+41,0
+12c
+16,0
+12c
+9,0
+12c
+1b,0
+d,12c
+1b,0
+12c
+15,0
+12c
+9,0
+12c
+17,0
+4,12c
+d,0
+4,12c
+17,0
+12c
+15,0
+12c
+9,0
+12c
+14,0
+3,12c
+15,0
+3,12c
+14,0
+12c
+15,0
+12c
+9,0
+12c
+13,0
+2,12c
+19,0
+2,12c
+13,0
+12c
+14,0
+12c
+9,0
+12c
+13,0
+12c
+1d,0
+12c
+13,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+45,0
+12c
+13,0
+12c
+9,0
+12c
+1d,0
+b,12c
+1d,0
+12c
+13,0
+12c
+9,0
+12c
+1a,0
+3,12c
+b,0
+3,12c
+1a,0
+12c
+13,0
+12c
+9,0
+12c
+17,0
+3,12c
+11,0
+3,12c
+17,0
+12c
+13,0
+12c
+9,0
+12c
+16,0
+2,12c
+15,0
+2,12c
+16,0
+12c
+13,0
+12c
+9,0
+12c
+14,0
+2,12c
+19,0
+2,12c
+14,0
+12c
+13,0
+12c
+9,0
+12c
+13,0
+12c
+1d,0
+12c
+13,0
+12c
+13,0
+12c
+a,0
+12c
+11,0
+12c
+1f,0
+12c
+12,0
+12c
+13,0
+12c
+a,0
+12c
+10,0
+12c
+21,0
+12c
+11,0
+12c
+14,0
+12c
+9,0
+12c
+f,0
+12c
+23,0
+12c
+f,0
+12c
+15,0
+12c
+9,0
+12c
+f,0
+12c
+23,0
+12c
+f,0
+12c
+15,0
+12c
+a,0
+12c
+d,0
+12c
+25,0
+12c
+e,0
+12c
+15,0
+12c
+a,0
+12c
+d,0
+12c
+25,0
+12c
+e,0
+12c
+16,0
+12c
+9,0
+2,12c
+b,0
+12c
+27,0
+12c
+c,0
+12c
+17,0
+12c
+a,0
+12c
+b,0
+12c
+27,0
+12c
+c,0
+12c
+17,0
+12c
+a,0
+2,12c
+a,0
+12c
+27,0
+12c
+c,0
+12c
+17,0
+2,12c
+a,0
+12c
+a,0
+12c
+27,0
+12c
+b,0
+2,12c
+18,0
+12c
+b,0
+12c
+9,0
+12c
+27,0
+12c
+b,0
+12c
+19,0
+12c
+15,0
+12c
+27,0
+12c
+b,0
+12c
+1a,0
+12c
+14,0
+12c
+27,0
+12c
+a,0
+12c
+1b,0
+12c
+15,0
+12c
+25,0
+12c
+b,0
+12c
+1c,0
+12c
+14,0
+12c
+25,0
+12c
+a,0
+12c
+1d,0
+12c
+15,0
+12c
+23,0
+12c
+b,0
+12c
+1e,0
+12c
+14,0
+12c
+23,0
+12c
+a,0
+12c
+1f,0
+2,12c
+14,0
+12c
+21,0
+12c
+a,0
+2,12c
+20,0
+12c
+15,0
+12c
+1f,0
+12c
+b,0
+12c
+22,0
+12c
+15,0
+12c
+1d,0
+12c
+b,0
+12c
+24,0
+12c
+15,0
+2,12c
+19,0
+2,12c
+b,0
+12c
+25,0
+2,12c
+16,0
+2,12c
+15,0
+2,12c
+c,0
+2,12c
+26,0
+2,12c
+16,0
+3,12c
+11,0
+3,12c
+c,0
+2,12c
+28,0
+2,12c
+18,0
+3,12c
+b,0
+3,12c
+e,0
+2,12c
+2a,0
+2,12c
+1a,0
+b,12c
+10,0
+2,12c
+2c,0
+2,12c
+33,0
+2,12c
+2e,0
+2,12c
+31,0
+2,12c
+31,0
+12c
+2f,0
+12c
+34,0
+2,12c
+2b,0
+2,12c
+36,0
+2,12c
+29,0
+2,12c
+39,0
+2,12c
+25,0
+2,12c
+3d,0
+2,12c
+21,0
+2,12c
+41,0
+3,12c
+1b,0
+3,12c
+45,0
+4,12c
+15,0
+4,12c
+4b,0
+4,12c
+d,0
+4,12c
+53,0
+d,12c
+1c0,0
+100 90 32
+21b,0
+d,3e8
+53,0
+4,3e8
+d,0
+4,3e8
+4b,0
+4,3e8
+15,0
+4,3e8
+45,0
+3,3e8
+1b,0
+3,3e8
+41,0
+2,3e8
+21,0
+2,3e8
+3d,0
+2,3e8
+25,0
+2,3e8
+39,0
+2,3e8
+29,0
+2,3e8
+36,0
+2,3e8
+2b,0
+2,3e8
+34,0
+3e8
+2f,0
+3e8
+31,0
+2,3e8
+13,0
+4,3e8
+1a,0
+2,3e8
+2e,0
+2,3e8
+10,0
+4,3e8
+1f,0
+2,3e8
+2c,0
+2,3e8
+e,0
+3,3e8
+9,0
+6,3e8
+15,0
+2,3e8
+2a,0
+2,3e8
+d,0
+3,3e8
+11,0
+5,3e8
+11,0
+2,3e8
+28,0
+2,3e8
+d,0
+2,3e8
+18,0
+3,3e8
+f,0
+2,3e8
+26,0
+2,3e8
+c,0
+2,3e8
+1c,0
+3,3e8
+e,0
+2,3e8
+25,0
+3e8
+c,0
+3e8
+21,0
+2,3e8
+d,0
+3e8
+24,0
+3e8
+b,0
+2,3e8
+24,0
+3e8
+d,0
+3e8
+22,0
+3e8
+b,0
+2,3e8
+26,0
+2,3e8
+c,0
+3e8
+20,0
+2,3e8
+a,0
+2,3e8
+29,0
+3e8
+b,0
+2,3e8
+1f,0
+3e8
+a,0
+2,3e8
+f,0
+3,3e8
+19,0
+2,3e8
+a,0
+3e8
+1e,0
+3e8
+b,0
+3e8
+2d,0
+2,3e8
+a,0
+3e8
+1d,0
+3e8
+a,0
+3e8
+2f,0
+3e8
+a,0
+3e8
+1c,0
+3e8
+a,0
+3e8
+3c,0
+3e8
+1b,0
+3e8
+a,0
+3e8
+3c,0
+3e8
+1a,0
+3e8
+a,0
+3e8
+3e,0
+3e8
+19,0
+3e8
+9,0
+2,3e8
+3e,0
+3e8
+18,0
+2,3e8
+9,0
+3e8
+3f,0
+2,3e8
+17,0
+3e8
+9,0
+2,3e8
+40,0
+3e8
+17,0
+3e8
+9,0
+3e8
+41,0
+3e8
+17,0
+3e8
+9,0
+3e8
+41,0
+3e8
+16,0
+3e8
+9,0
+3e8
+1b,0
+d,3e8
+1b,0
+3e8
+15,0
+3e8
+9,0
+3e8
+17,0
+4,3e8
+d,0
+4,3e8
+17,0
+3e8
+15,0
+3e8
+9,0
+3e8
+14,0
+3,3e8
+15,0
+3,3e8
+14,0
+3e8
+15,0
+3e8
+9,0
+3e8
+13,0
+2,3e8
+19,0
+2,3e8
+13,0
+3e8
+14,0
+3e8
+9,0
+3e8
+13,0
+3e8
+1d,0
+3e8
+13,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+45,0
+3e8
+13,0
+3e8
+9,0
+3e8
+1d,0
+b,3e8
+1d,0
+3e8
+13,0
+3e8
+9,0
+3e8
+1a,0
+3,3e8
+b,0
+3,3e8
+1a,0
+3e8
+13,0
+3e8
+9,0
+3e8
+17,0
+3,3e8
+11,0
+3,3e8
+17,0
+3e8
+13,0
+3e8
+9,0
+3e8
+16,0
+2,3e8
+15,0
+2,3e8
+16,0
+3e8
+13,0
+3e8
+9,0
+3e8
+14,0
+2,3e8
+19,0
+2,3e8
+14,0
+3e8
+13,0
+3e8
+9,0
+3e8
+13,0
+3e8
+1d,0
+3e8
+13,0
+3e8
+13,0
+3e8
+a,0
+3e8
+11,0
+3e8
+1f,0
+3e8
+12,0
+3e8
+13,0
+3e8
+a,0
+3e8
+10,0
+3e8
+21,0
+3e8
+11,0
+3e8
+14,0
+3e8
+9,0
+3e8
+f,0
+3e8
+23,0
+3e8
+f,0
+3e8
+15,0
+3e8
+9,0
+3e8
+f,0
+3e8
+23,0
+3e8
+f,0
+3e8
+15,0
+3e8
+a,0
+3e8
+d,0
+3e8
+25,0
+3e8
+e,0
+3e8
+15,0
+3e8
+a,0
+3e8
+d,0
+3e8
+25,0
+3e8
+e,0
+3e8
+16,0
+3e8
+9,0
+2,3e8
+b,0
+3e8
+27,0
+3e8
+c,0
+3e8
+17,0
+3e8
+a,0
+3e8
+b,0
+3e8
+27,0
+3e8
+c,0
+3e8
+17,0
+3e8
+a,0
+2,3e8
+a,0
+3e8
+27,0
+3e8
+c,0
+3e8
+17,0
+2,3e8
+a,0
+3e8
+a,0
+3e8
+27,0
+3e8
+b,0
+2,3e8
+18,0
+3e8
+b,0
+3e8
+9,0
+3e8
+27,0
+3e8
+b,0
+3e8
+19,0
+3e8
+15,0
+3e8
+27,0
+3e8
+b,0
+3e8
+1a,0
+3e8
+14,0
+3e8
+27,0
+3e8
+a,0
+3e8
+1b,0
+3e8
+15,0
+3e8
+25,0
+3e8
+b,0
+3e8
+1c,0
+3e8
+14,0
+3e8
+25,0
+3e8
+a,0
+3e8
+1d,0
+3e8
+15,0
+3e8
+23,0
+3e8
+b,0
+3e8
+1e,0
+3e8
+14,0
+3e8
+23,0
+3e8
+a,0
+3e8
+1f,0
+2,3e8
+14,0
+3e8
+21,0
+3e8
+a,0
+2,3e8
+20,0
+3e8
+15,0
+3e8
+1f,0
+3e8
+b,0
+3e8
+22,0
+3e8
+15,0
+3e8
+1d,0
+3e8
+b,0
+3e8
+24,0
+3e8
+15,0
+2,3e8
+19,0
+2,3e8
+b,0
+3e8
+25,0
+2,3e8
+16,0
+2,3e8
+15,0
+2,3e8
+c,0
+2,3e8
+26,0
+2,3e8
+16,0
+3,3e8
+11,0
+3,3e8
+c,0
+2,3e8
+28,0
+2,3e8
+18,0
+3,3e8
+b,0
+3,3e8
+e,0
+2,3e8
+2a,0
+2,3e8
+1a,0
+b,3e8
+10,0
+2,3e8
+2c,0
+2,3e8
+33,0
+2,3e8
+2e,0
+2,3e8
+31,0
+2,3e8
+31,0
+3e8
+2f,0
+3e8
+34,0
+2,3e8
+2b,0
+2,3e8
+36,0
+2,3e8
+29,0
+2,3e8
+39,0
+2,3e8
+25,0
+2,3e8
+3d,0
+2,3e8
+21,0
+2,3e8
+41,0
+3,3e8
+1b,0
+3,3e8
+45,0
+4,3e8
+15,0
+4,3e8
+4b,0
+4,3e8
+d,0
+4,3e8
+53,0
+d,3e8
+1c0,0
+100 90 32
+21b,0
+d,111111
+53,0
+4,111111
+d,0
+4,111111
+4b,0
+4,111111
+15,0
+4,111111
+45,0
+3,111111
+1b,0
+3,111111
+41,0
+2,111111
+21,0
+2,111111
+3d,0
+2,111111
+25,0
+2,111111
+39,0
+2,111111
+29,0
+2,111111
+36,0
+2,111111
+2b,0
+2,111111
+34,0
+111111
+2f,0
+111111
+31,0
+2,111111
+13,0
+4,111111
+1a,0
+2,111111
+2e,0
+2,111111
+10,0
+4,111111
+1f,0
+2,111111
+2c,0
+2,111111
+e,0
+3,111111
+9,0
+6,111111
+15,0
+2,111111
+2a,0
+2,111111
+d,0
+3,111111
+11,0
+5,111111
+11,0
+2,111111
+28,0
+2,111111
+d,0
+2,111111
+18,0
+3,111111
+f,0
+2,111111
+26,0
+2,111111
+c,0
+2,111111
+1c,0
+3,111111
+e,0
+2,111111
+25,0
+111111
+c,0
+111111
+21,0
+2,111111
+d,0
+111111
+24,0
+111111
+b,0
+2,111111
+24,0
+111111
+d,0
+111111
+22,0
+111111
+b,0
+2,111111
+26,0
+2,111111
+c,0
+111111
+20,0
+2,111111
+a,0
+2,111111
+29,0
+111111
+b,0
+2,111111
+1f,0
+111111
+a,0
+2,111111
+f,0
+3,111111
+19,0
+2,111111
+a,0
+111111
+1e,0
+111111
+b,0
+111111
+2d,0
+2,111111
+a,0
+111111
+1d,0
+111111
+a,0
+111111
+2f,0
+111111
+a,0
+111111
+1c,0
+111111
+a,0
+111111
+3c,0
+111111
+1b,0
+111111
+a,0
+111111
+3c,0
+111111
+1a,0
+111111
+a,0
+111111
+3e,0
+111111
+19,0
+111111
+9,0
+2,111111
+3e,0
+111111
+18,0
+2,111111
+9,0
+111111
+3f,0
+2,111111
+17,0
+111111
+9,0
+2,111111
+40,0
+111111
+17,0
+111111
+9,0
+111111
+41,0
+111111
+17,0
+111111
+9,0
+111111
+41,0
+111111
+16,0
+111111
+9,0
+111111
+1b,0
+d,111111
+1b,0
+111111
+15,0
+111111
+9,0
+111111
+17,0
+4,111111
+d,0
+4,111111
+17,0
+111111
+15,0
+111111
+9,0
+111111
+14,0
+3,111111
+15,0
+3,111111
+14,0
+111111
+15,0
+111111
+9,0
+111111
+13,0
+2,111111
+19,0
+2,111111
+13,0
+111111
+14,0
+111111
+9,0
+111111
+13,0
+111111
+1d,0
+111111
+13,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+45,0
+111111
+13,0
+111111
+9,0
+111111
+1d,0
+b,111111
+1d,0
+111111
+13,0
+111111
+9,0
+111111
+1a,0
+3,111111
+b,0
+3,111111
+1a,0
+111111
+13,0
+111111
+9,0
+111111
+17,0
+3,111111
+11,0
+3,111111
+17,0
+111111
+13,0
+111111
+9,0
+111111
+16,0
+2,111111
+15,0
+2,111111
+16,0
+111111
+13,0
+111111
+9,0
+111111
+14,0
+2,111111
+19,0
+2,111111
+14,0
+111111
+13,0
+111111
+9,0
+111111
+13,0
+111111
+1d,0
+111111
+13,0
+111111
+13,0
+111111
+a,0
+111111
+11,0
+111111
+1f,0
+111111
+12,0
+111111
+13,0
+111111
+a,0
+111111
+10,0
+111111
+21,0
+111111
+11,0
+111111
+14,0
+111111
+9,0
+111111
+f,0
+111111
+23,0
+111111
+f,0
+111111
+15,0
+111111
+9,0
+111111
+f,0
+111111
+23,0
+111111
+f,0
+111111
+15,0
+111111
+a,0
+111111
+d,0
+111111
+25,0
+111111
+e,0
+111111
+15,0
+111111
+a,0
+111111
+d,0
+111111
+25,0
+111111
+e,0
+111111
+16,0
+111111
+9,0
+2,111111
+b,0
+111111
+27,0
+111111
+c,0
+111111
+17,0
+111111
+a,0
+111111
+b,0
+111111
+27,0
+111111
+c,0
+111111
+17,0
+111111
+a,0
+2,111111
+a,0
+111111
+27,0
+111111
+c,0
+111111
+17,0
+2,111111
+a,0
+111111
+a,0
+111111
+27,0
+111111
+b,0
+2,111111
+18,0
+111111
+b,0
+111111
+9,0
+111111
+27,0
+111111
+b,0
+111111
+19,0
+111111
+15,0
+111111
+27,0
+111111
+b,0
+111111
+1a,0
+111111
+14,0
+111111
+27,0
+111111
+a,0
+111111
+1b,0
+111111
+15,0
+111111
+25,0
+111111
+b,0
+111111
+1c,0
+111111
+14,0
+111111
+25,0
+111111
+a,0
+111111
+1d,0
+111111
+15,0
+111111
+23,0
+111111
+b,0
+111111
+1e,0
+111111
+14,0
+111111
+23,0
+111111
+a,0
+111111
+1f,0
+2,111111
+14,0
+111111
+21,0
+111111
+a,0
+2,111111
+20,0
+111111
+15,0
+111111
+1f,0
+111111
+b,0
+111111
+22,0
+111111
+15,0
+111111
+1d,0
+111111
+b,0
+111111
+24,0
+111111
+15,0
+2,111111
+19,0
+2,111111
+b,0
+111111
+25,0
+2,111111
+16,0
+2,111111
+15,0
+2,111111
+c,0
+2,111111
+26,0
+2,111111
+16,0
+3,111111
+11,0
+3,111111
+c,0
+2,111111
+28,0
+2,111111
+18,0
+3,111111
+b,0
+3,111111
+e,0
+2,111111
+2a,0
+2,111111
+1a,0
+b,111111
+10,0
+2,111111
+2c,0
+2,111111
+33,0
+2,111111
+2e,0
+2,111111
+31,0
+2,111111
+31,0
+111111
+2f,0
+111111
+34,0
+2,111111
+2b,0
+2,111111
+36,0
+2,111111
+29,0
+2,111111
+39,0
+2,111111
+25,0
+2,111111
+3d,0
+2,111111
+21,0
+2,111111
+41,0
+3,111111
+1b,0
+3,111111
+45,0
+4,111111
+15,0
+4,111111
+4b,0
+4,111111
+d,0
+4,111111
+53,0
+d,111111
+1c0,0
+100 90 32
+21b,0
+d,400200
+53,0
+4,400200
+d,0
+4,400200
+4b,0
+4,400200
+15,0
+4,400200
+45,0
+3,400200
+1b,0
+3,400200
+41,0
+2,400200
+21,0
+2,400200
+3d,0
+2,400200
+25,0
+2,400200
+39,0
+2,400200
+29,0
+2,400200
+36,0
+2,400200
+2b,0
+2,400200
+34,0
+400200
+2f,0
+400200
+31,0
+2,400200
+13,0
+4,400200
+1a,0
+2,400200
+2e,0
+2,400200
+10,0
+4,400200
+1f,0
+2,400200
+2c,0
+2,400200
+e,0
+3,400200
+9,0
+6,400200
+15,0
+2,400200
+2a,0
+2,400200
+d,0
+3,400200
+11,0
+5,400200
+11,0
+2,400200
+28,0
+2,400200
+d,0
+2,400200
+18,0
+3,400200
+f,0
+2,400200
+26,0
+2,400200
+c,0
+2,400200
+1c,0
+3,400200
+e,0
+2,400200
+25,0
+400200
+c,0
+400200
+21,0
+2,400200
+d,0
+400200
+24,0
+400200
+b,0
+2,400200
+24,0
+400200
+d,0
+400200
+22,0
+400200
+b,0
+2,400200
+26,0
+2,400200
+c,0
+400200
+20,0
+2,400200
+a,0
+2,400200
+29,0
+400200
+b,0
+2,400200
+1f,0
+400200
+a,0
+2,400200
+f,0
+3,400200
+19,0
+2,400200
+a,0
+400200
+1e,0
+400200
+b,0
+400200
+2d,0
+2,400200
+a,0
+400200
+1d,0
+400200
+a,0
+400200
+2f,0
+400200
+a,0
+400200
+1c,0
+400200
+a,0
+400200
+3c,0
+400200
+1b,0
+400200
+a,0
+400200
+3c,0
+400200
+1a,0
+400200
+a,0
+400200
+3e,0
+400200
+19,0
+400200
+9,0
+2,400200
+3e,0
+400200
+18,0
+2,400200
+9,0
+400200
+3f,0
+2,400200
+17,0
+400200
+9,0
+2,400200
+40,0
+400200
+17,0
+400200
+9,0
+400200
+41,0
+400200
+17,0
+400200
+9,0
+400200
+41,0
+400200
+16,0
+400200
+9,0
+400200
+1b,0
+d,400200
+1b,0
+400200
+15,0
+400200
+9,0
+400200
+17,0
+4,400200
+d,0
+4,400200
+17,0
+400200
+15,0
+400200
+9,0
+400200
+14,0
+3,400200
+15,0
+3,400200
+14,0
+400200
+15,0
+400200
+9,0
+400200
+13,0
+2,400200
+19,0
+2,400200
+13,0
+400200
+14,0
+400200
+9,0
+400200
+13,0
+400200
+1d,0
+400200
+13,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+45,0
+400200
+13,0
+400200
+9,0
+400200
+1d,0
+b,400200
+1d,0
+400200
+13,0
+400200
+9,0
+400200
+1a,0
+3,400200
+b,0
+3,400200
+1a,0
+400200
+13,0
+400200
+9,0
+400200
+17,0
+3,400200
+11,0
+3,400200
+17,0
+400200
+13,0
+400200
+9,0
+400200
+16,0
+2,400200
+15,0
+2,400200
+16,0
+400200
+13,0
+400200
+9,0
+400200
+14,0
+2,400200
+19,0
+2,400200
+14,0
+400200
+13,0
+400200
+9,0
+400200
+13,0
+400200
+1d,0
+400200
+13,0
+400200
+13,0
+400200
+a,0
+400200
+11,0
+400200
+1f,0
+400200
+12,0
+400200
+13,0
+400200
+a,0
+400200
+10,0
+400200
+21,0
+400200
+11,0
+400200
+14,0
+400200
+9,0
+400200
+f,0
+400200
+23,0
+400200
+f,0
+400200
+15,0
+400200
+9,0
+400200
+f,0
+400200
+23,0
+400200
+f,0
+400200
+15,0
+400200
+a,0
+400200
+d,0
+400200
+25,0
+400200
+e,0
+400200
+15,0
+400200
+a,0
+400200
+d,0
+400200
+25,0
+400200
+e,0
+400200
+16,0
+400200
+9,0
+2,400200
+b,0
+400200
+27,0
+400200
+c,0
+400200
+17,0
+400200
+a,0
+400200
+b,0
+400200
+27,0
+400200
+c,0
+400200
+17,0
+400200
+a,0
+2,400200
+a,0
+400200
+27,0
+400200
+c,0
+400200
+17,0
+2,400200
+a,0
+400200
+a,0
+400200
+27,0
+400200
+b,0
+2,400200
+18,0
+400200
+b,0
+400200
+9,0
+400200
+27,0
+400200
+b,0
+400200
+19,0
+400200
+15,0
+400200
+27,0
+400200
+b,0
+400200
+1a,0
+400200
+14,0
+400200
+27,0
+400200
+a,0
+400200
+1b,0
+400200
+15,0
+400200
+25,0
+400200
+b,0
+400200
+1c,0
+400200
+14,0
+400200
+25,0
+400200
+a,0
+400200
+1d,0
+400200
+15,0
+400200
+23,0
+400200
+b,0
+400200
+1e,0
+400200
+14,0
+400200
+23,0
+400200
+a,0
+400200
+1f,0
+2,400200
+14,0
+400200
+21,0
+400200
+a,0
+2,400200
+20,0
+400200
+15,0
+400200
+1f,0
+400200
+b,0
+400200
+22,0
+400200
+15,0
+400200
+1d,0
+400200
+b,0
+400200
+24,0
+400200
+15,0
+2,400200
+19,0
+2,400200
+b,0
+400200
+25,0
+2,400200
+16,0
+2,400200
+15,0
+2,400200
+c,0
+2,400200
+26,0
+2,400200
+16,0
+3,400200
+11,0
+3,400200
+c,0
+2,400200
+28,0
+2,400200
+18,0
+3,400200
+b,0
+3,400200
+e,0
+2,400200
+2a,0
+2,400200
+1a,0
+b,400200
+10,0
+2,400200
+2c,0
+2,400200
+33,0
+2,400200
+2e,0
+2,400200
+31,0
+2,400200
+31,0
+400200
+2f,0
+400200
+34,0
+2,400200
+2b,0
+2,400200
+36,0
+2,400200
+29,0
+2,400200
+39,0
+2,400200
+25,0
+2,400200
+3d,0
+2,400200
+21,0
+2,400200
+41,0
+3,400200
+1b,0
+3,400200
+45,0
+4,400200
+15,0
+4,400200
+4b,0
+4,400200
+d,0
+4,400200
+53,0
+d,400200
+1c0,0
+100 90 32
+21b,0
+d,777777
+53,0
+4,777777
+d,0
+4,777777
+4b,0
+4,777777
+15,0
+4,777777
+45,0
+3,777777
+1b,0
+3,777777
+41,0
+2,777777
+21,0
+2,777777
+3d,0
+2,777777
+25,0
+2,777777
+39,0
+2,777777
+29,0
+2,777777
+36,0
+2,777777
+2b,0
+2,777777
+34,0
+777777
+2f,0
+777777
+31,0
+2,777777
+13,0
+4,777777
+1a,0
+2,777777
+2e,0
+2,777777
+10,0
+4,777777
+1f,0
+2,777777
+2c,0
+2,777777
+e,0
+3,777777
+9,0
+6,777777
+15,0
+2,777777
+2a,0
+2,777777
+d,0
+3,777777
+11,0
+5,777777
+11,0
+2,777777
+28,0
+2,777777
+d,0
+2,777777
+18,0
+3,777777
+f,0
+2,777777
+26,0
+2,777777
+c,0
+2,777777
+1c,0
+3,777777
+e,0
+2,777777
+25,0
+777777
+c,0
+777777
+21,0
+2,777777
+d,0
+777777
+24,0
+777777
+b,0
+2,777777
+24,0
+777777
+d,0
+777777
+22,0
+777777
+b,0
+2,777777
+26,0
+2,777777
+c,0
+777777
+20,0
+2,777777
+a,0
+2,777777
+29,0
+777777
+b,0
+2,777777
+1f,0
+777777
+a,0
+2,777777
+f,0
+3,777777
+19,0
+2,777777
+a,0
+777777
+1e,0
+777777
+b,0
+777777
+2d,0
+2,777777
+a,0
+777777
+1d,0
+777777
+a,0
+777777
+2f,0
+777777
+a,0
+777777
+1c,0
+777777
+a,0
+777777
+3c,0
+777777
+1b,0
+777777
+a,0
+777777
+3c,0
+777777
+1a,0
+777777
+a,0
+777777
+3e,0
+777777
+19,0
+777777
+9,0
+2,777777
+3e,0
+777777
+18,0
+2,777777
+9,0
+777777
+3f,0
+2,777777
+17,0
+777777
+9,0
+2,777777
+40,0
+777777
+17,0
+777777
+9,0
+777777
+41,0
+777777
+17,0
+777777
+9,0
+777777
+41,0
+777777
+16,0
+777777
+9,0
+777777
+1b,0
+d,777777
+1b,0
+777777
+15,0
+777777
+9,0
+777777
+17,0
+4,777777
+d,0
+4,777777
+17,0
+777777
+15,0
+777777
+9,0
+777777
+14,0
+3,777777
+15,0
+3,777777
+14,0
+777777
+15,0
+777777
+9,0
+777777
+13,0
+2,777777
+19,0
+2,777777
+13,0
+777777
+14,0
+777777
+9,0
+777777
+13,0
+777777
+1d,0
+777777
+13,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+45,0
+777777
+13,0
+777777
+9,0
+777777
+1d,0
+b,777777
+1d,0
+777777
+13,0
+777777
+9,0
+777777
+1a,0
+3,777777
+b,0
+3,777777
+1a,0
+777777
+13,0
+777777
+9,0
+777777
+17,0
+3,777777
+11,0
+3,777777
+17,0
+777777
+13,0
+777777
+9,0
+777777
+16,0
+2,777777
+15,0
+2,777777
+16,0
+777777
+13,0
+777777
+9,0
+777777
+14,0
+2,777777
+19,0
+2,777777
+14,0
+777777
+13,0
+777777
+9,0
+777777
+13,0
+777777
+1d,0
+777777
+13,0
+777777
+13,0
+777777
+a,0
+777777
+11,0
+777777
+1f,0
+777777
+12,0
+777777
+13,0
+777777
+a,0
+777777
+10,0
+777777
+21,0
+777777
+11,0
+777777
+14,0
+777777
+9,0
+777777
+f,0
+777777
+23,0
+777777
+f,0
+777777
+15,0
+777777
+9,0
+777777
+f,0
+777777
+23,0
+777777
+f,0
+777777
+15,0
+777777
+a,0
+777777
+d,0
+777777
+25,0
+777777
+e,0
+777777
+15,0
+777777
+a,0
+777777
+d,0
+777777
+25,0
+777777
+e,0
+777777
+16,0
+777777
+9,0
+2,777777
+b,0
+777777
+27,0
+777777
+c,0
+777777
+17,0
+777777
+a,0
+777777
+b,0
+777777
+27,0
+777777
+c,0
+777777
+17,0
+777777
+a,0
+2,777777
+a,0
+777777
+27,0
+777777
+c,0
+777777
+17,0
+2,777777
+a,0
+777777
+a,0
+777777
+27,0
+777777
+b,0
+2,777777
+18,0
+777777
+b,0
+777777
+9,0
+777777
+27,0
+777777
+b,0
+777777
+19,0
+777777
+15,0
+777777
+27,0
+777777
+b,0
+777777
+1a,0
+777777
+14,0
+777777
+27,0
+777777
+a,0
+777777
+1b,0
+777777
+15,0
+777777
+25,0
+777777
+b,0
+777777
+1c,0
+777777
+14,0
+777777
+25,0
+777777
+a,0
+777777
+1d,0
+777777
+15,0
+777777
+23,0
+777777
+b,0
+777777
+1e,0
+777777
+14,0
+777777
+23,0
+777777
+a,0
+777777
+1f,0
+2,777777
+14,0
+777777
+21,0
+777777
+a,0
+2,777777
+20,0
+777777
+15,0
+777777
+1f,0
+777777
+b,0
+777777
+22,0
+777777
+15,0
+777777
+1d,0
+777777
+b,0
+777777
+24,0
+777777
+15,0
+2,777777
+19,0
+2,777777
+b,0
+777777
+25,0
+2,777777
+16,0
+2,777777
+15,0
+2,777777
+c,0
+2,777777
+26,0
+2,777777
+16,0
+3,777777
+11,0
+3,777777
+c,0
+2,777777
+28,0
+2,777777
+18,0
+3,777777
+b,0
+3,777777
+e,0
+2,777777
+2a,0
+2,777777
+1a,0
+b,777777
+10,0
+2,777777
+2c,0
+2,777777
+33,0
+2,777777
+2e,0
+2,777777
+31,0
+2,777777
+31,0
+777777
+2f,0
+777777
+34,0
+2,777777
+2b,0
+2,777777
+36,0
+2,777777
+29,0
+2,777777
+39,0
+2,777777
+25,0
+2,777777
+3d,0
+2,777777
+21,0
+2,777777
+41,0
+3,777777
+1b,0
+3,777777
+45,0
+4,777777
+15,0
+4,777777
+4b,0
+4,777777
+d,0
+4,777777
+53,0
+d,777777
+1c0,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwarcs/drwarcs.m b/xc/test/xsuite/xtest/tset/CH06/drwarcs/drwarcs.m
new file mode 100644
index 000000000..e4aee5152
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwarcs/drwarcs.m
@@ -0,0 +1,538 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawArcs CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+XArc *arcs = defarcs;
+int narcs = NELEM(defarcs);
+>>EXTERN
+
+#define DEG(n) (n*64) /* Convert from degrees to units used by call */
+
+static XArc defarcs[] = {
+ {5, 5, 80, 80, 0, DEG(360)},
+ {10, 16, 70, 70, DEG(45), DEG(45)},
+ {15, 14, 60, 60, DEG(93), DEG(121)},
+ {15, 24, 50, 50, DEG(93), DEG(-6)},
+ {30, 44, 40, 30, DEG(0), DEG(360)},
+ {35, 35, 30, 10, DEG(0), DEG(180)},
+};
+
+/*
+ * This will draw a straight line for horizontal and vertical lines
+ * for other lines, draw a hor line using the horizontal extent.
+ */
+static void
+drawline(ax1, ay1, ax2, ay2)
+int ax1, ay1, ax2, ay2;
+{
+XArc arc;
+int negw = 0;
+int negh = 0;
+int pass = 0, fail = 0;
+
+ arc.x = ax1; arc.y = ay1;
+
+ if (ax2 > ax1) {
+ arc.width = ax2-ax1;
+ } else {
+ arc.width = ax1-ax2;
+ arc.x -= arc.width;
+ negw = 1;
+ }
+ if (ay2 > ay1) {
+ arc.height = ay2-ay1;
+ } else {
+ arc.height = ay1-ay2;
+ arc.y -= arc.height;
+ negh = 1;
+ }
+
+ if (arc.width == 0) {
+ /* Vertical line */
+ if (negh) {
+ arc.angle1 = DEG(270);
+ arc.angle2 = DEG(180);
+ } else {
+ arc.angle1 = DEG(90);
+ arc.angle2 = DEG(180);
+ }
+ } else if (arc.height == 0) {
+ /* Horizontal line */
+ if (negw) {
+ arc.angle1 = DEG(0);
+ arc.angle2 = DEG(180);
+ } else {
+ arc.angle1 = DEG(180);
+ arc.angle2 = DEG(180);
+ }
+ } else {
+ /* Horizontal line */
+ if (negw) {
+ arc.angle1 = DEG(0);
+ arc.angle2 = DEG(180);
+ } else {
+ arc.angle1 = DEG(180);
+ arc.angle2 = DEG(180);
+ }
+ arc.height = 0;
+ }
+
+ arcs = &arc;
+ narcs = 1;
+ XCALL;
+}
+
+static void
+setfordash()
+{
+static XArc darcs[] = {
+ {20, 20, 50, 0, DEG(180), DEG(180)},
+ {70, 20, 0, 60, DEG(90), DEG(180)},
+ {30, 40, 20, 0, DEG(180), DEG(180)},
+ };
+
+ arcs = darcs;
+ narcs = NELEM(darcs);
+}
+
+>>ASSERTION Good A
+A call to xname draws
+.A narcs
+circular or elliptical arcs in the drawable
+.A d ,
+each specified by the corresponding
+member of the
+.A arcs
+list.
+>>STRATEGY
+Draw arcs.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+The centre of each circle or ellipse is the centre of the specified rectangle,
+with top left corner at
+.M x
+and
+.M y
+and the major and minor axes are specified by the rectangle's
+.M width
+and
+.M height .
+>>ASSERTION def
+The start of the arc is specified by the
+.M angle1
+component, in units of degrees * 64, relative to the three -o'clock
+position from the centre.
+>>ASSERTION def
+The path and extent of the arc relative to the
+start of the arc is specified by the
+.M angle2
+component, in units of degrees * 64.
+>>ASSERTION Good A
+When the angles are positive,
+then a call to xname draws the arc in the counterclockwise direction.
+>>STRATEGY
+Draw arc with positive angles.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+static XArc a[] = {
+ {5, 5, 80, 80, DEG(45), DEG(45)},
+};
+
+ arcs = a;
+ narcs = 1;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When the angles are negative,
+then a call to xname draws the arc in the clockwise direction.
+>>STRATEGY
+Call XDrawArcs.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+static XArc a[] = {
+ {5, 5, 80, 80, DEG(90), DEG(90)},
+ {5, 5, 80, 80, DEG(90), DEG(-90)},
+ {5, 5, 80, 80, DEG(-90), DEG(90)},
+ {5, 5, 80, 80, DEG(-90), DEG(-90)},
+};
+
+ arcs = a;
+ narcs = 4;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When the magnitude of angle2 is greater than 360 degrees,
+then it is truncated to 360 degrees.
+>>STRATEGY
+Set gc function to GXxor.
+Call XDrawArcs with angle2 greater than 360.
+Pixmap check.
+>>CODE
+XVisualInfo *vp;
+static XArc a[] = {
+ {5, 5, 80, 80, DEG(40), DEG(400)},
+};
+
+ arcs = a;
+ narcs = NELEM(a);
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+An arc specified as %[ ~x, ~y, ~width , ~height, ~angle1, ~angle2 ]%,
+has the origin of the major and minor axes at
+% [ x +^ {width over 2} , ~y +^ {height over 2} ]%,
+the infinitely thin path describing the entire circle or ellipse
+intersects the horizontal axis at % [ x, ~y +^ {height over 2} ]% and
+% [ x +^ width , ~y +^ { height over 2 }] %
+and the path intersects the vertical axis
+at % [ x +^ { width over 2 } , ~y ]% and
+% [ x +^ { width over 2 }, ~y +^ height ]%.
+>>ASSERTION def
+When a wide line with line-width lw is used in a call to xname,
+then the bounding outlines for filling are given
+by the two infinitely thin paths consisting of all points whose perpendicular
+distance from the path of the circle/ellipse is equal to lw/2.
+>># NOTE kieron Arc definition will change soon, so defer.
+>>ASSERTION def
+The
+.M cap_style
+and
+.M join_style
+are applied the same as for a line corresponding to the tangent of the
+circle/ellipse at the endpoint.
+>>ASSERTION def
+On a call to xname the angles are interpreted
+in the effectively skewed coordinate system of the ellipse.
+>>ASSERTION Good A
+A call to xname does not draw a pixel more than once.
+>>STRATEGY
+Set gc function to GXxor.
+Call XDrawArcs.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When an arc is drawn with one endpoint and a clockwise extent
+and another with the other endpoint and an equivalent counterclockwise extent,
+then a call to xname draws the same pixels in each case.
+>>STRATEGY
+Set gc function to GXxor.
+Call XDrawArcs.
+Revese the sign of all angle2.
+Call XDrawArcs to redraw.
+Verify that drawable is clear.
+>>CODE
+XVisualInfo *vp;
+static XArc a[] = {
+ {5, 5, 80, 80, 0, DEG(360)},
+ {15, 15, 70, 70, DEG(45), DEG(45)},
+ {20, 20, 60, 60, DEG(93), DEG(121)},
+ {25, 25, 50, 50, DEG(93), DEG(-6)},
+ {30, 30, 40, 30, DEG(0), DEG(360)},
+ {35, 35, 30, 10, DEG(0), DEG(180)},
+};
+XArc *ap;
+
+ arcs = a;
+ narcs = NELEM(a);
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+ XCALL;
+
+ for (ap = a; ap < &a[narcs]; ap++) {
+ ap->angle1 += ap->angle2;
+ ap->angle2 = -ap->angle2;
+ }
+
+ XCALL;
+
+ if (!checkarea(display, d, (struct area *)0, W_BG, W_BG, CHECK_IN)) {
+ report("Drawing same arcs backwards did not draw same pixels");
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When the last point in one arc coincides with the first point in the following
+arc, then the two arcs will join.
+>>STRATEGY
+Draw arcs that meet at 90deg.
+Verify that join area is filled in.
+>>CODE
+XVisualInfo *vp;
+static XArc a[] = {
+ {10, 10, 60, 60, DEG(90), DEG(-90)},
+ {40, 40, 60, 60, DEG(90), DEG(90)},
+};
+struct area area;
+
+ arcs = a;
+ narcs = NELEM(a);
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+ XSetLineAttributes(display, gc, 5, LineSolid, CapButt, JoinMiter);
+
+ XCALL;
+ setarea(&area, 70, 40, 2, 2);
+ /* Check that the miter has been drawn */
+ if (checkarea(display, d, &area, W_FG, 0, CHECK_IN))
+ CHECK;
+ else {
+ report("The two arcs did not join");
+ FAIL;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When the first point in the first arc coincides with the last point in the last
+arc, then the two arcs will join.
+>>STRATEGY
+Draw four arcs that meet at 90deg and join at the ends.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+static XArc a[] = {
+ {10, 10, 60, 60, DEG(90), DEG(-90)},
+ {40, 40, 60, 60, DEG(90), DEG(90)},
+ {-20, 40, 60, 60, DEG(0), DEG(90)},
+ {-20, -20, 60, 60, DEG(-90), DEG(90)},
+};
+struct area area;
+
+ arcs = a;
+ narcs = NELEM(a);
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+ XSetLineAttributes(display, gc, 5, LineSolid, CapButt, JoinMiter);
+
+ XCALL;
+ setarea(&area, 38, 8, 2, 2);
+ /* Check that the miter has been drawn */
+ if (checkarea(display, d, &area, W_FG, 0, CHECK_IN))
+ CHECK;
+ else
+ FAIL;
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When two arcs join and the
+.M line_width
+is greater than zero and the arcs intersect,
+then a call to xname does not draw a pixel more than once.
+>>STRATEGY
+Set gc function to GXxor.
+Draw arcs that join.
+Check that there are no holes.
+>>CODE
+XVisualInfo *vp;
+static XArc a[] = {
+ {10, 10, 60, 60, DEG(90), DEG(-90)},
+ {60, 20, 20, 20, DEG(-90), DEG(-180)},
+};
+XImage *imp;
+
+ arcs = a;
+ narcs = NELEM(a);
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetLineAttributes(display, gc, 5, LineSolid, CapButt, JoinMiter);
+
+ XCALL;
+ imp = savimage(display, d);
+
+ dclear(display, d);
+ XSetFunction(display, gc, GXxor);
+
+ XCALL;
+
+ if (compsavimage(display, d, imp))
+ CHECK;
+ else {
+ report("Pixels were drawn twice");
+ FAIL;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When either axis is zero, then a call to xname draws a horizontal or vertical
+line.
+>>STRATEGY
+Draw arc with width zero.
+Verify directly that the pixels drawn form a vertical line.
+Draw arc with height zero.
+Verify directly that the pixels drawn form a horizontal line.
+>>CODE
+XVisualInfo *vp;
+static XArc a[] = {
+ {5, 5, 0, 0, DEG(0), DEG(360)},
+};
+struct area area;
+
+ arcs = a;
+ narcs = 1;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetLineAttributes(display, gc, 5, LineSolid, CapButt, JoinMiter);
+
+ a[0].width = 0;
+ a[0].height = 40;
+
+ XCALL;
+
+ /*
+ * There should be a box width 5 height 40, with the center of
+ * the box top at 5,5; ie TLH corner at 3,5
+ */
+ setarea(&area, 3, 5, 5, 40);
+ if (checkarea(display, d, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("A straight line was not drawn when the arc had width 0");
+ FAIL;
+ }
+
+ a[0].width = 40;
+ a[0].height = 0;
+
+ dclear(display, d);
+ XCALL;
+
+ /*
+ * There should be a box width 40 height 5, with the center of
+ * the box LH side at 5,5; ie TLH corner at 5,3
+ */
+ setarea(&area, 5, 3, 40, 5);
+ if (checkarea(display, d, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("A straight line was not drawn when the arc had height 0");
+ FAIL;
+ }
+
+ }
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good B 1
+Angles are computed based solely on the coordinate system and ignore the
+aspect ratio.
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M line-width ,
+.M line-style ,
+.M cap-style ,
+.M join-style ,
+.M fill-style ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin ,
+.M tile-stipple-y-origin ,
+.M dash-offset
+and
+.M dash-list
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a1.dat
new file mode 100644
index 000000000..d95fc4a83
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a1.dat
@@ -0,0 +1,421 @@
+! $XConsortium$
+100 90 32
+70a,0
+16,1
+0
+3,1
+0
+6,1
+0
+3,1
+0
+b,1
+2,0
+5,1
+2c,0
+2,1
+b,0
+2,1
+0
+7,1
+0
+3,1
+0
+5,1
+0
+3,1
+0
+a,1
+2,0
+6,1
+2c,0
+2,1
+0
+4,1
+0
+4,1
+0
+3,1
+0
+6,1
+0
+1
+0
+3,1
+d,0
+5,1
+0
+8,1
+2c,0
+2,1
+0
+4,1
+0
+4,1
+0
+3,1
+0
+1
+0
+4,1
+4,0
+6,1
+0
+3,1
+0
+12,1
+2c,0
+2,1
+0
+4,1
+0
+4,1
+0
+3,1
+0
+2,1
+5,0
+5,1
+d,0
+e,1
+2c,0
+2,1
+b,0
+2,1
+0
+7,1
+0
+9,1
+0
+2,1
+0
+13,1
+2c,0
+2,1
+0
+4,1
+0
+4,1
+0
+2,1
+0
+7,1
+0
+6,1
+b,0
+f,1
+2c,0
+2,1
+0
+3,1
+2,0
+4,1
+0
+2,1
+0
+7,1
+0
+6,1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+f,1
+2c,0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+2,1
+0
+7,1
+0
+6,1
+0
+2,1
+0
+2,1
+0
+2,1
+2,0
+f,1
+2c,0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+2,1
+0
+1
+0
+2,1
+4,0
+6,1
+0
+1
+0
+4,1
+4,0
+f,1
+2c,0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+3,1
+0
+2,1
+0
+3,1
+2,0
+5,1
+2,0
+8,1
+0
+f,1
+2c,0
+2,1
+0
+9,1
+0
+3,1
+0
+2,1
+0
+3,1
+0
+1
+0
+4,1
+0
+9,1
+0
+f,1
+2c,0
+2,1
+b,0
+3,1
+0
+3,1
+3,0
+7,1
+b,0
+f,1
+2c,0
+2,1
+0
+9,1
+0
+11,1
+0
+9,1
+0
+f,1
+6f9,0
+39,1
+2b,0
+3,1
+2,0
+6,1
+2,0
+6,1
+2,0
+6,1
+2,0
+6,1
+2,0
+5,1
+5,0
+2,1
+2,0
+4,1
+2d,0
+3,1
+2,0
+6,1
+2,0
+6,1
+2,0
+6,1
+2,0
+6,1
+2,0
+4,1
+2,0
+3,1
+2,0
+1
+3,0
+3,1
+2d,0
+29,1
+2,0
+3,1
+2,0
+1
+3,0
+3,1
+2d,0
+3,1
+2,0
+6,1
+2,0
+6,1
+2,0
+6,1
+2,0
+6,1
+2,0
+4,1
+4,0
+4,1
+4,0
+2,1
+2d,0
+3,1
+2,0
+6,1
+2,0
+6,1
+2,0
+6,1
+2,0
+6,1
+2,0
+5,1
+5,0
+2,1
+4,0
+2,1
+2d,0
+4,1
+2,0
+6,1
+2,0
+6,1
+2,0
+6,1
+2,0
+6,1
+2,0
+6,1
+4,0
+1
+2,0
+1
+2,0
+1
+2d,0
+5,1
+2,0
+6,1
+2,0
+6,1
+2,0
+6,1
+2,0
+6,1
+2,0
+2,1
+2,0
+3,1
+2,0
+1
+2,0
+1
+2,0
+1
+2d,0
+1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+1
+2,0
+2,1
+2f,0
+1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+1
+2,0
+2,1
+2f,0
+2,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+5,0
+2,1
+2,0
+3,1
+2e,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+a8c,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a11.dat b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a11.dat
new file mode 100644
index 000000000..11853238d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a11.dat
@@ -0,0 +1,297 @@
+! $XConsortium$
+100 90 32
+33b,0
+1
+3,0
+1
+4b,0
+b,1
+2,0
+1
+7,0
+1
+3,0
+1
+4a,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+6,0
+1
+0
+1
+4c,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+4b,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+2,0
+5,1
+4e,0
+b,1
+2,0
+1
+7,0
+1
+4e,0
+1
+4,0
+1
+4,0
+1
+2,0
+1
+7,0
+1
+4e,0
+1
+3,0
+2,1
+4,0
+1
+2,0
+1
+7,0
+1
+4e,0
+1
+3,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+4e,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+0
+1
+2,0
+4,1
+4e,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+2,1
+4d,0
+1
+9,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4c,0
+b,1
+3,0
+1
+3,0
+3,1
+4f,0
+1
+9,0
+1
+1ae2,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+346,0
+1
+3,0
+1
+b,0
+2,1
+52,0
+1
+3,0
+1
+a,0
+2,1
+4f,0
+d,1
+5,0
+1
+55,0
+1
+3,0
+1
+5b,0
+d,1
+5b,0
+1
+2,0
+1
+5d,0
+b,1
+59,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+59,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+59,0
+1
+0
+1
+4,0
+4,1
+59,0
+2,1
+8,0
+1
+59,0
+1
+9,0
+1
+59,0
+b,1
+59,0
+1
+9,0
+1
+1ac6,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+346,0
+1
+3,0
+1
+b,0
+2,1
+52,0
+1
+3,0
+1
+a,0
+2,1
+4f,0
+d,1
+5,0
+1
+55,0
+1
+3,0
+1
+5b,0
+d,1
+5b,0
+1
+2,0
+1
+5d,0
+b,1
+59,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+59,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+59,0
+1
+0
+1
+4,0
+4,1
+59,0
+2,1
+8,0
+1
+59,0
+1
+9,0
+1
+59,0
+b,1
+59,0
+1
+9,0
+1
+1ac6,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a14.dat b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a14.dat
new file mode 100644
index 000000000..aefce4a55
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a14.dat
@@ -0,0 +1,125 @@
+! $XConsortium$
+100 90 32
+33f,0
+1
+a,0
+1
+c,0
+1
+33,0
+9,1
+10,0
+1
+5,0
+1
+e,0
+1
+35,0
+1
+4,0
+1
+4,0
+1
+10,0
+a,1
+3f,0
+1
+14,0
+4,1
+50,0
+1
+4,0
+1
+3,0
+1
+2,0
+5,1
+7,0
+b,1
+3c,0
+b,1
+14,0
+1
+2,0
+1
+41,0
+1
+c,0
+1
+7,0
+1
+6,0
+1
+6,0
+4,1
+3d,0
+1
+4,0
+1
+4,0
+1
+a,0
+1
+9,0
+1
+2,0
+1
+45,0
+1
+0
+1
+6,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+5,0
+2,1
+3d,0
+1
+2,0
+1
+6,0
+1
+2,0
+1
+e,0
+1
+6,0
+3,1
+46,0
+1
+5,0
+1
+7,0
+1
+6,0
+1
+8,0
+1
+3d,0
+1
+9,0
+1
+59,0
+9,1
+5,0
+1
+3,0
+1
+0
+1
+7,0
+5,1
+5,0
+1
+3d,0
+1
+9,0
+1
+11,0
+1
+1ad0,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a16.dat b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a16.dat
new file mode 100644
index 000000000..eb3fbbc7f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a16.dat
@@ -0,0 +1,6803 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+33b,0
+1
+3,0
+1
+6,0
+1
+3,0
+1
+b,0
+2,1
+33,0
+b,1
+2,0
+1
+7,0
+1
+3,0
+1
+5,0
+1
+3,0
+1
+a,0
+2,1
+34,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+6,0
+1
+0
+1
+3,0
+d,1
+5,0
+1
+36,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+6,0
+1
+3,0
+1
+40,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+2,0
+5,1
+5,0
+d,1
+3c,0
+b,1
+2,0
+1
+7,0
+1
+9,0
+1
+2,0
+1
+41,0
+1
+4,0
+1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+b,1
+3d,0
+1
+3,0
+2,1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3d,0
+1
+3,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3d,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+0
+1
+2,0
+4,1
+6,0
+1
+0
+1
+4,0
+4,1
+3d,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+3d,0
+1
+9,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+1
+9,0
+1
+3d,0
+b,1
+3,0
+1
+3,0
+3,1
+7,0
+b,1
+3d,0
+1
+9,0
+1
+11,0
+1
+9,0
+1
+1ac6,0
+100 90 32
+33b,0
+2
+3,0
+2
+6,0
+2
+3,0
+2
+b,0
+2,2
+33,0
+b,2
+2,0
+2
+7,0
+2
+3,0
+2
+5,0
+2
+3,0
+2
+a,0
+2,2
+34,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+6,0
+2
+0
+2
+3,0
+d,2
+5,0
+2
+36,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+6,0
+2
+3,0
+2
+40,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+2,0
+5,2
+5,0
+d,2
+3c,0
+b,2
+2,0
+2
+7,0
+2
+9,0
+2
+2,0
+2
+41,0
+2
+4,0
+2
+4,0
+2
+2,0
+2
+7,0
+2
+6,0
+b,2
+3d,0
+2
+3,0
+2,2
+4,0
+2
+2,0
+2
+7,0
+2
+6,0
+2
+2,0
+2
+2,0
+2
+3,0
+2
+3d,0
+2
+3,0
+2
+0
+2
+3,0
+2
+2,0
+2
+7,0
+2
+6,0
+2
+2,0
+2
+2,0
+2
+2,0
+2,2
+3d,0
+2
+2,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+0
+2
+2,0
+4,2
+6,0
+2
+0
+2
+4,0
+4,2
+3d,0
+2
+0
+2
+5,0
+2
+0
+2
+3,0
+2
+2,0
+2
+3,0
+2,2
+5,0
+2,2
+8,0
+2
+3d,0
+2
+9,0
+2
+3,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+2
+9,0
+2
+3d,0
+b,2
+3,0
+2
+3,0
+3,2
+7,0
+b,2
+3d,0
+2
+9,0
+2
+11,0
+2
+9,0
+2
+1ac6,0
+100 90 32
+33b,0
+3
+3,0
+3
+6,0
+3
+3,0
+3
+b,0
+2,3
+33,0
+b,3
+2,0
+3
+7,0
+3
+3,0
+3
+5,0
+3
+3,0
+3
+a,0
+2,3
+34,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+6,0
+3
+0
+3
+3,0
+d,3
+5,0
+3
+36,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+6,0
+3
+3,0
+3
+40,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+2,0
+5,3
+5,0
+d,3
+3c,0
+b,3
+2,0
+3
+7,0
+3
+9,0
+3
+2,0
+3
+41,0
+3
+4,0
+3
+4,0
+3
+2,0
+3
+7,0
+3
+6,0
+b,3
+3d,0
+3
+3,0
+2,3
+4,0
+3
+2,0
+3
+7,0
+3
+6,0
+3
+2,0
+3
+2,0
+3
+3,0
+3
+3d,0
+3
+3,0
+3
+0
+3
+3,0
+3
+2,0
+3
+7,0
+3
+6,0
+3
+2,0
+3
+2,0
+3
+2,0
+2,3
+3d,0
+3
+2,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+0
+3
+2,0
+4,3
+6,0
+3
+0
+3
+4,0
+4,3
+3d,0
+3
+0
+3
+5,0
+3
+0
+3
+3,0
+3
+2,0
+3
+3,0
+2,3
+5,0
+2,3
+8,0
+3
+3d,0
+3
+9,0
+3
+3,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+3
+9,0
+3
+3d,0
+b,3
+3,0
+3
+3,0
+3,3
+7,0
+b,3
+3d,0
+3
+9,0
+3
+11,0
+3
+9,0
+3
+1ac6,0
+100 90 32
+33b,0
+4
+3,0
+4
+6,0
+4
+3,0
+4
+b,0
+2,4
+33,0
+b,4
+2,0
+4
+7,0
+4
+3,0
+4
+5,0
+4
+3,0
+4
+a,0
+2,4
+34,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+6,0
+4
+0
+4
+3,0
+d,4
+5,0
+4
+36,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+6,0
+4
+3,0
+4
+40,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+2,0
+5,4
+5,0
+d,4
+3c,0
+b,4
+2,0
+4
+7,0
+4
+9,0
+4
+2,0
+4
+41,0
+4
+4,0
+4
+4,0
+4
+2,0
+4
+7,0
+4
+6,0
+b,4
+3d,0
+4
+3,0
+2,4
+4,0
+4
+2,0
+4
+7,0
+4
+6,0
+4
+2,0
+4
+2,0
+4
+3,0
+4
+3d,0
+4
+3,0
+4
+0
+4
+3,0
+4
+2,0
+4
+7,0
+4
+6,0
+4
+2,0
+4
+2,0
+4
+2,0
+2,4
+3d,0
+4
+2,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+0
+4
+2,0
+4,4
+6,0
+4
+0
+4
+4,0
+4,4
+3d,0
+4
+0
+4
+5,0
+4
+0
+4
+3,0
+4
+2,0
+4
+3,0
+2,4
+5,0
+2,4
+8,0
+4
+3d,0
+4
+9,0
+4
+3,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4
+9,0
+4
+3d,0
+b,4
+3,0
+4
+3,0
+3,4
+7,0
+b,4
+3d,0
+4
+9,0
+4
+11,0
+4
+9,0
+4
+1ac6,0
+100 90 32
+33b,0
+6
+3,0
+6
+6,0
+6
+3,0
+6
+b,0
+2,6
+33,0
+b,6
+2,0
+6
+7,0
+6
+3,0
+6
+5,0
+6
+3,0
+6
+a,0
+2,6
+34,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+6,0
+6
+0
+6
+3,0
+d,6
+5,0
+6
+36,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+6,0
+6
+3,0
+6
+40,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+2,0
+5,6
+5,0
+d,6
+3c,0
+b,6
+2,0
+6
+7,0
+6
+9,0
+6
+2,0
+6
+41,0
+6
+4,0
+6
+4,0
+6
+2,0
+6
+7,0
+6
+6,0
+b,6
+3d,0
+6
+3,0
+2,6
+4,0
+6
+2,0
+6
+7,0
+6
+6,0
+6
+2,0
+6
+2,0
+6
+3,0
+6
+3d,0
+6
+3,0
+6
+0
+6
+3,0
+6
+2,0
+6
+7,0
+6
+6,0
+6
+2,0
+6
+2,0
+6
+2,0
+2,6
+3d,0
+6
+2,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+0
+6
+2,0
+4,6
+6,0
+6
+0
+6
+4,0
+4,6
+3d,0
+6
+0
+6
+5,0
+6
+0
+6
+3,0
+6
+2,0
+6
+3,0
+2,6
+5,0
+2,6
+8,0
+6
+3d,0
+6
+9,0
+6
+3,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+6
+9,0
+6
+3d,0
+b,6
+3,0
+6
+3,0
+3,6
+7,0
+b,6
+3d,0
+6
+9,0
+6
+11,0
+6
+9,0
+6
+1ac6,0
+100 90 32
+33b,0
+7
+3,0
+7
+6,0
+7
+3,0
+7
+b,0
+2,7
+33,0
+b,7
+2,0
+7
+7,0
+7
+3,0
+7
+5,0
+7
+3,0
+7
+a,0
+2,7
+34,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+6,0
+7
+0
+7
+3,0
+d,7
+5,0
+7
+36,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+6,0
+7
+3,0
+7
+40,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+2,0
+5,7
+5,0
+d,7
+3c,0
+b,7
+2,0
+7
+7,0
+7
+9,0
+7
+2,0
+7
+41,0
+7
+4,0
+7
+4,0
+7
+2,0
+7
+7,0
+7
+6,0
+b,7
+3d,0
+7
+3,0
+2,7
+4,0
+7
+2,0
+7
+7,0
+7
+6,0
+7
+2,0
+7
+2,0
+7
+3,0
+7
+3d,0
+7
+3,0
+7
+0
+7
+3,0
+7
+2,0
+7
+7,0
+7
+6,0
+7
+2,0
+7
+2,0
+7
+2,0
+2,7
+3d,0
+7
+2,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+0
+7
+2,0
+4,7
+6,0
+7
+0
+7
+4,0
+4,7
+3d,0
+7
+0
+7
+5,0
+7
+0
+7
+3,0
+7
+2,0
+7
+3,0
+2,7
+5,0
+2,7
+8,0
+7
+3d,0
+7
+9,0
+7
+3,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+7
+9,0
+7
+3d,0
+b,7
+3,0
+7
+3,0
+3,7
+7,0
+b,7
+3d,0
+7
+9,0
+7
+11,0
+7
+9,0
+7
+1ac6,0
+100 90 32
+33b,0
+10
+3,0
+10
+6,0
+10
+3,0
+10
+b,0
+2,10
+33,0
+b,10
+2,0
+10
+7,0
+10
+3,0
+10
+5,0
+10
+3,0
+10
+a,0
+2,10
+34,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+6,0
+10
+0
+10
+3,0
+d,10
+5,0
+10
+36,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+6,0
+10
+3,0
+10
+40,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+2,0
+5,10
+5,0
+d,10
+3c,0
+b,10
+2,0
+10
+7,0
+10
+9,0
+10
+2,0
+10
+41,0
+10
+4,0
+10
+4,0
+10
+2,0
+10
+7,0
+10
+6,0
+b,10
+3d,0
+10
+3,0
+2,10
+4,0
+10
+2,0
+10
+7,0
+10
+6,0
+10
+2,0
+10
+2,0
+10
+3,0
+10
+3d,0
+10
+3,0
+10
+0
+10
+3,0
+10
+2,0
+10
+7,0
+10
+6,0
+10
+2,0
+10
+2,0
+10
+2,0
+2,10
+3d,0
+10
+2,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+0
+10
+2,0
+4,10
+6,0
+10
+0
+10
+4,0
+4,10
+3d,0
+10
+0
+10
+5,0
+10
+0
+10
+3,0
+10
+2,0
+10
+3,0
+2,10
+5,0
+2,10
+8,0
+10
+3d,0
+10
+9,0
+10
+3,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+10
+9,0
+10
+3d,0
+b,10
+3,0
+10
+3,0
+3,10
+7,0
+b,10
+3d,0
+10
+9,0
+10
+11,0
+10
+9,0
+10
+1ac6,0
+100 90 32
+33b,0
+33
+3,0
+33
+6,0
+33
+3,0
+33
+b,0
+2,33
+33,0
+b,33
+2,0
+33
+7,0
+33
+3,0
+33
+5,0
+33
+3,0
+33
+a,0
+2,33
+34,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+6,0
+33
+0
+33
+3,0
+d,33
+5,0
+33
+36,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+6,0
+33
+3,0
+33
+40,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+2,0
+5,33
+5,0
+d,33
+3c,0
+b,33
+2,0
+33
+7,0
+33
+9,0
+33
+2,0
+33
+41,0
+33
+4,0
+33
+4,0
+33
+2,0
+33
+7,0
+33
+6,0
+b,33
+3d,0
+33
+3,0
+2,33
+4,0
+33
+2,0
+33
+7,0
+33
+6,0
+33
+2,0
+33
+2,0
+33
+3,0
+33
+3d,0
+33
+3,0
+33
+0
+33
+3,0
+33
+2,0
+33
+7,0
+33
+6,0
+33
+2,0
+33
+2,0
+33
+2,0
+2,33
+3d,0
+33
+2,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+0
+33
+2,0
+4,33
+6,0
+33
+0
+33
+4,0
+4,33
+3d,0
+33
+0
+33
+5,0
+33
+0
+33
+3,0
+33
+2,0
+33
+3,0
+2,33
+5,0
+2,33
+8,0
+33
+3d,0
+33
+9,0
+33
+3,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+33
+9,0
+33
+3d,0
+b,33
+3,0
+33
+3,0
+3,33
+7,0
+b,33
+3d,0
+33
+9,0
+33
+11,0
+33
+9,0
+33
+1ac6,0
+100 90 32
+33b,0
+81
+3,0
+81
+6,0
+81
+3,0
+81
+b,0
+2,81
+33,0
+b,81
+2,0
+81
+7,0
+81
+3,0
+81
+5,0
+81
+3,0
+81
+a,0
+2,81
+34,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+6,0
+81
+0
+81
+3,0
+d,81
+5,0
+81
+36,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+6,0
+81
+3,0
+81
+40,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+2,0
+5,81
+5,0
+d,81
+3c,0
+b,81
+2,0
+81
+7,0
+81
+9,0
+81
+2,0
+81
+41,0
+81
+4,0
+81
+4,0
+81
+2,0
+81
+7,0
+81
+6,0
+b,81
+3d,0
+81
+3,0
+2,81
+4,0
+81
+2,0
+81
+7,0
+81
+6,0
+81
+2,0
+81
+2,0
+81
+3,0
+81
+3d,0
+81
+3,0
+81
+0
+81
+3,0
+81
+2,0
+81
+7,0
+81
+6,0
+81
+2,0
+81
+2,0
+81
+2,0
+2,81
+3d,0
+81
+2,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+0
+81
+2,0
+4,81
+6,0
+81
+0
+81
+4,0
+4,81
+3d,0
+81
+0
+81
+5,0
+81
+0
+81
+3,0
+81
+2,0
+81
+3,0
+2,81
+5,0
+2,81
+8,0
+81
+3d,0
+81
+9,0
+81
+3,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+81
+9,0
+81
+3d,0
+b,81
+3,0
+81
+3,0
+3,81
+7,0
+b,81
+3d,0
+81
+9,0
+81
+11,0
+81
+9,0
+81
+1ac6,0
+100 90 32
+33b,0
+a3
+3,0
+a3
+6,0
+a3
+3,0
+a3
+b,0
+2,a3
+33,0
+b,a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+5,0
+a3
+3,0
+a3
+a,0
+2,a3
+34,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+6,0
+a3
+0
+a3
+3,0
+d,a3
+5,0
+a3
+36,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+6,0
+a3
+3,0
+a3
+40,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+2,0
+5,a3
+5,0
+d,a3
+3c,0
+b,a3
+2,0
+a3
+7,0
+a3
+9,0
+a3
+2,0
+a3
+41,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+b,a3
+3d,0
+a3
+3,0
+2,a3
+4,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+a3
+2,0
+a3
+2,0
+a3
+3,0
+a3
+3d,0
+a3
+3,0
+a3
+0
+a3
+3,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+a3
+2,0
+a3
+2,0
+a3
+2,0
+2,a3
+3d,0
+a3
+2,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+0
+a3
+2,0
+4,a3
+6,0
+a3
+0
+a3
+4,0
+4,a3
+3d,0
+a3
+0
+a3
+5,0
+a3
+0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+2,a3
+5,0
+2,a3
+8,0
+a3
+3d,0
+a3
+9,0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+a3
+9,0
+a3
+3d,0
+b,a3
+3,0
+a3
+3,0
+3,a3
+7,0
+b,a3
+3d,0
+a3
+9,0
+a3
+11,0
+a3
+9,0
+a3
+1ac6,0
+100 90 32
+33b,0
+ff
+3,0
+ff
+6,0
+ff
+3,0
+ff
+b,0
+2,ff
+33,0
+b,ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+5,0
+ff
+3,0
+ff
+a,0
+2,ff
+34,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+6,0
+ff
+0
+ff
+3,0
+d,ff
+5,0
+ff
+36,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+6,0
+ff
+3,0
+ff
+40,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+2,0
+5,ff
+5,0
+d,ff
+3c,0
+b,ff
+2,0
+ff
+7,0
+ff
+9,0
+ff
+2,0
+ff
+41,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+b,ff
+3d,0
+ff
+3,0
+2,ff
+4,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+ff
+2,0
+ff
+2,0
+ff
+3,0
+ff
+3d,0
+ff
+3,0
+ff
+0
+ff
+3,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+ff
+2,0
+ff
+2,0
+ff
+2,0
+2,ff
+3d,0
+ff
+2,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+0
+ff
+2,0
+4,ff
+6,0
+ff
+0
+ff
+4,0
+4,ff
+3d,0
+ff
+0
+ff
+5,0
+ff
+0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+2,ff
+5,0
+2,ff
+8,0
+ff
+3d,0
+ff
+9,0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+ff
+9,0
+ff
+3d,0
+b,ff
+3,0
+ff
+3,0
+3,ff
+7,0
+b,ff
+3d,0
+ff
+9,0
+ff
+11,0
+ff
+9,0
+ff
+1ac6,0
+100 90 32
+33b,0
+100
+3,0
+100
+6,0
+100
+3,0
+100
+b,0
+2,100
+33,0
+b,100
+2,0
+100
+7,0
+100
+3,0
+100
+5,0
+100
+3,0
+100
+a,0
+2,100
+34,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+6,0
+100
+0
+100
+3,0
+d,100
+5,0
+100
+36,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+6,0
+100
+3,0
+100
+40,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+2,0
+5,100
+5,0
+d,100
+3c,0
+b,100
+2,0
+100
+7,0
+100
+9,0
+100
+2,0
+100
+41,0
+100
+4,0
+100
+4,0
+100
+2,0
+100
+7,0
+100
+6,0
+b,100
+3d,0
+100
+3,0
+2,100
+4,0
+100
+2,0
+100
+7,0
+100
+6,0
+100
+2,0
+100
+2,0
+100
+3,0
+100
+3d,0
+100
+3,0
+100
+0
+100
+3,0
+100
+2,0
+100
+7,0
+100
+6,0
+100
+2,0
+100
+2,0
+100
+2,0
+2,100
+3d,0
+100
+2,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+0
+100
+2,0
+4,100
+6,0
+100
+0
+100
+4,0
+4,100
+3d,0
+100
+0
+100
+5,0
+100
+0
+100
+3,0
+100
+2,0
+100
+3,0
+2,100
+5,0
+2,100
+8,0
+100
+3d,0
+100
+9,0
+100
+3,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+100
+9,0
+100
+3d,0
+b,100
+3,0
+100
+3,0
+3,100
+7,0
+b,100
+3d,0
+100
+9,0
+100
+11,0
+100
+9,0
+100
+1ac6,0
+100 90 32
+33b,0
+12c
+3,0
+12c
+6,0
+12c
+3,0
+12c
+b,0
+2,12c
+33,0
+b,12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+5,0
+12c
+3,0
+12c
+a,0
+2,12c
+34,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+6,0
+12c
+0
+12c
+3,0
+d,12c
+5,0
+12c
+36,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+6,0
+12c
+3,0
+12c
+40,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+2,0
+5,12c
+5,0
+d,12c
+3c,0
+b,12c
+2,0
+12c
+7,0
+12c
+9,0
+12c
+2,0
+12c
+41,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+b,12c
+3d,0
+12c
+3,0
+2,12c
+4,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+12c
+2,0
+12c
+2,0
+12c
+3,0
+12c
+3d,0
+12c
+3,0
+12c
+0
+12c
+3,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+12c
+2,0
+12c
+2,0
+12c
+2,0
+2,12c
+3d,0
+12c
+2,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+0
+12c
+2,0
+4,12c
+6,0
+12c
+0
+12c
+4,0
+4,12c
+3d,0
+12c
+0
+12c
+5,0
+12c
+0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+2,12c
+5,0
+2,12c
+8,0
+12c
+3d,0
+12c
+9,0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+12c
+9,0
+12c
+3d,0
+b,12c
+3,0
+12c
+3,0
+3,12c
+7,0
+b,12c
+3d,0
+12c
+9,0
+12c
+11,0
+12c
+9,0
+12c
+1ac6,0
+100 90 32
+33b,0
+3e8
+3,0
+3e8
+6,0
+3e8
+3,0
+3e8
+b,0
+2,3e8
+33,0
+b,3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+5,0
+3e8
+3,0
+3e8
+a,0
+2,3e8
+34,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+6,0
+3e8
+0
+3e8
+3,0
+d,3e8
+5,0
+3e8
+36,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+6,0
+3e8
+3,0
+3e8
+40,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+2,0
+5,3e8
+5,0
+d,3e8
+3c,0
+b,3e8
+2,0
+3e8
+7,0
+3e8
+9,0
+3e8
+2,0
+3e8
+41,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+b,3e8
+3d,0
+3e8
+3,0
+2,3e8
+4,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+3e8
+2,0
+3e8
+2,0
+3e8
+3,0
+3e8
+3d,0
+3e8
+3,0
+3e8
+0
+3e8
+3,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+3e8
+2,0
+3e8
+2,0
+3e8
+2,0
+2,3e8
+3d,0
+3e8
+2,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+0
+3e8
+2,0
+4,3e8
+6,0
+3e8
+0
+3e8
+4,0
+4,3e8
+3d,0
+3e8
+0
+3e8
+5,0
+3e8
+0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+2,3e8
+5,0
+2,3e8
+8,0
+3e8
+3d,0
+3e8
+9,0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+3e8
+9,0
+3e8
+3d,0
+b,3e8
+3,0
+3e8
+3,0
+3,3e8
+7,0
+b,3e8
+3d,0
+3e8
+9,0
+3e8
+11,0
+3e8
+9,0
+3e8
+1ac6,0
+100 90 32
+33b,0
+111111
+3,0
+111111
+6,0
+111111
+3,0
+111111
+b,0
+2,111111
+33,0
+b,111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+5,0
+111111
+3,0
+111111
+a,0
+2,111111
+34,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+6,0
+111111
+0
+111111
+3,0
+d,111111
+5,0
+111111
+36,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+6,0
+111111
+3,0
+111111
+40,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+2,0
+5,111111
+5,0
+d,111111
+3c,0
+b,111111
+2,0
+111111
+7,0
+111111
+9,0
+111111
+2,0
+111111
+41,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+b,111111
+3d,0
+111111
+3,0
+2,111111
+4,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+111111
+2,0
+111111
+2,0
+111111
+3,0
+111111
+3d,0
+111111
+3,0
+111111
+0
+111111
+3,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+111111
+2,0
+111111
+2,0
+111111
+2,0
+2,111111
+3d,0
+111111
+2,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+0
+111111
+2,0
+4,111111
+6,0
+111111
+0
+111111
+4,0
+4,111111
+3d,0
+111111
+0
+111111
+5,0
+111111
+0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+2,111111
+5,0
+2,111111
+8,0
+111111
+3d,0
+111111
+9,0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+111111
+9,0
+111111
+3d,0
+b,111111
+3,0
+111111
+3,0
+3,111111
+7,0
+b,111111
+3d,0
+111111
+9,0
+111111
+11,0
+111111
+9,0
+111111
+1ac6,0
+100 90 32
+33b,0
+400200
+3,0
+400200
+6,0
+400200
+3,0
+400200
+b,0
+2,400200
+33,0
+b,400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+5,0
+400200
+3,0
+400200
+a,0
+2,400200
+34,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+6,0
+400200
+0
+400200
+3,0
+d,400200
+5,0
+400200
+36,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+6,0
+400200
+3,0
+400200
+40,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+2,0
+5,400200
+5,0
+d,400200
+3c,0
+b,400200
+2,0
+400200
+7,0
+400200
+9,0
+400200
+2,0
+400200
+41,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+b,400200
+3d,0
+400200
+3,0
+2,400200
+4,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+400200
+2,0
+400200
+2,0
+400200
+3,0
+400200
+3d,0
+400200
+3,0
+400200
+0
+400200
+3,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+400200
+2,0
+400200
+2,0
+400200
+2,0
+2,400200
+3d,0
+400200
+2,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+0
+400200
+2,0
+4,400200
+6,0
+400200
+0
+400200
+4,0
+4,400200
+3d,0
+400200
+0
+400200
+5,0
+400200
+0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+2,400200
+5,0
+2,400200
+8,0
+400200
+3d,0
+400200
+9,0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+400200
+9,0
+400200
+3d,0
+b,400200
+3,0
+400200
+3,0
+3,400200
+7,0
+b,400200
+3d,0
+400200
+9,0
+400200
+11,0
+400200
+9,0
+400200
+1ac6,0
+100 90 32
+33b,0
+777777
+3,0
+777777
+6,0
+777777
+3,0
+777777
+b,0
+2,777777
+33,0
+b,777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+5,0
+777777
+3,0
+777777
+a,0
+2,777777
+34,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+6,0
+777777
+0
+777777
+3,0
+d,777777
+5,0
+777777
+36,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+6,0
+777777
+3,0
+777777
+40,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+2,0
+5,777777
+5,0
+d,777777
+3c,0
+b,777777
+2,0
+777777
+7,0
+777777
+9,0
+777777
+2,0
+777777
+41,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+b,777777
+3d,0
+777777
+3,0
+2,777777
+4,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+777777
+2,0
+777777
+2,0
+777777
+3,0
+777777
+3d,0
+777777
+3,0
+777777
+0
+777777
+3,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+777777
+2,0
+777777
+2,0
+777777
+2,0
+2,777777
+3d,0
+777777
+2,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+0
+777777
+2,0
+4,777777
+6,0
+777777
+0
+777777
+4,0
+4,777777
+3d,0
+777777
+0
+777777
+5,0
+777777
+0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+2,777777
+5,0
+2,777777
+8,0
+777777
+3d,0
+777777
+9,0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+777777
+9,0
+777777
+3d,0
+b,777777
+3,0
+777777
+3,0
+3,777777
+7,0
+b,777777
+3d,0
+777777
+9,0
+777777
+11,0
+777777
+9,0
+777777
+1ac6,0
+100 90 32
+33b,0
+1
+3,0
+1
+6,0
+1
+3,0
+1
+b,0
+2,1
+33,0
+b,1
+2,0
+1
+7,0
+1
+3,0
+1
+5,0
+1
+3,0
+1
+a,0
+2,1
+34,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+6,0
+1
+0
+1
+3,0
+d,1
+5,0
+1
+36,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+6,0
+1
+3,0
+1
+40,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+2,0
+5,1
+5,0
+d,1
+3c,0
+b,1
+2,0
+1
+7,0
+1
+9,0
+1
+2,0
+1
+41,0
+1
+4,0
+1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+b,1
+3d,0
+1
+3,0
+2,1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3d,0
+1
+3,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3d,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+0
+1
+2,0
+4,1
+6,0
+1
+0
+1
+4,0
+4,1
+3d,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+3d,0
+1
+9,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+1
+9,0
+1
+3d,0
+b,1
+3,0
+1
+3,0
+3,1
+7,0
+b,1
+3d,0
+1
+9,0
+1
+11,0
+1
+9,0
+1
+1ac6,0
+100 90 32
+33b,0
+2
+3,0
+2
+6,0
+2
+3,0
+2
+b,0
+2,2
+33,0
+b,2
+2,0
+2
+7,0
+2
+3,0
+2
+5,0
+2
+3,0
+2
+a,0
+2,2
+34,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+6,0
+2
+0
+2
+3,0
+d,2
+5,0
+2
+36,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+6,0
+2
+3,0
+2
+40,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+2,0
+5,2
+5,0
+d,2
+3c,0
+b,2
+2,0
+2
+7,0
+2
+9,0
+2
+2,0
+2
+41,0
+2
+4,0
+2
+4,0
+2
+2,0
+2
+7,0
+2
+6,0
+b,2
+3d,0
+2
+3,0
+2,2
+4,0
+2
+2,0
+2
+7,0
+2
+6,0
+2
+2,0
+2
+2,0
+2
+3,0
+2
+3d,0
+2
+3,0
+2
+0
+2
+3,0
+2
+2,0
+2
+7,0
+2
+6,0
+2
+2,0
+2
+2,0
+2
+2,0
+2,2
+3d,0
+2
+2,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+0
+2
+2,0
+4,2
+6,0
+2
+0
+2
+4,0
+4,2
+3d,0
+2
+0
+2
+5,0
+2
+0
+2
+3,0
+2
+2,0
+2
+3,0
+2,2
+5,0
+2,2
+8,0
+2
+3d,0
+2
+9,0
+2
+3,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+2
+9,0
+2
+3d,0
+b,2
+3,0
+2
+3,0
+3,2
+7,0
+b,2
+3d,0
+2
+9,0
+2
+11,0
+2
+9,0
+2
+1ac6,0
+100 90 32
+33b,0
+3
+3,0
+3
+6,0
+3
+3,0
+3
+b,0
+2,3
+33,0
+b,3
+2,0
+3
+7,0
+3
+3,0
+3
+5,0
+3
+3,0
+3
+a,0
+2,3
+34,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+6,0
+3
+0
+3
+3,0
+d,3
+5,0
+3
+36,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+6,0
+3
+3,0
+3
+40,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+2,0
+5,3
+5,0
+d,3
+3c,0
+b,3
+2,0
+3
+7,0
+3
+9,0
+3
+2,0
+3
+41,0
+3
+4,0
+3
+4,0
+3
+2,0
+3
+7,0
+3
+6,0
+b,3
+3d,0
+3
+3,0
+2,3
+4,0
+3
+2,0
+3
+7,0
+3
+6,0
+3
+2,0
+3
+2,0
+3
+3,0
+3
+3d,0
+3
+3,0
+3
+0
+3
+3,0
+3
+2,0
+3
+7,0
+3
+6,0
+3
+2,0
+3
+2,0
+3
+2,0
+2,3
+3d,0
+3
+2,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+0
+3
+2,0
+4,3
+6,0
+3
+0
+3
+4,0
+4,3
+3d,0
+3
+0
+3
+5,0
+3
+0
+3
+3,0
+3
+2,0
+3
+3,0
+2,3
+5,0
+2,3
+8,0
+3
+3d,0
+3
+9,0
+3
+3,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+3
+9,0
+3
+3d,0
+b,3
+3,0
+3
+3,0
+3,3
+7,0
+b,3
+3d,0
+3
+9,0
+3
+11,0
+3
+9,0
+3
+1ac6,0
+100 90 32
+33b,0
+4
+3,0
+4
+6,0
+4
+3,0
+4
+b,0
+2,4
+33,0
+b,4
+2,0
+4
+7,0
+4
+3,0
+4
+5,0
+4
+3,0
+4
+a,0
+2,4
+34,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+6,0
+4
+0
+4
+3,0
+d,4
+5,0
+4
+36,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+6,0
+4
+3,0
+4
+40,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+2,0
+5,4
+5,0
+d,4
+3c,0
+b,4
+2,0
+4
+7,0
+4
+9,0
+4
+2,0
+4
+41,0
+4
+4,0
+4
+4,0
+4
+2,0
+4
+7,0
+4
+6,0
+b,4
+3d,0
+4
+3,0
+2,4
+4,0
+4
+2,0
+4
+7,0
+4
+6,0
+4
+2,0
+4
+2,0
+4
+3,0
+4
+3d,0
+4
+3,0
+4
+0
+4
+3,0
+4
+2,0
+4
+7,0
+4
+6,0
+4
+2,0
+4
+2,0
+4
+2,0
+2,4
+3d,0
+4
+2,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+0
+4
+2,0
+4,4
+6,0
+4
+0
+4
+4,0
+4,4
+3d,0
+4
+0
+4
+5,0
+4
+0
+4
+3,0
+4
+2,0
+4
+3,0
+2,4
+5,0
+2,4
+8,0
+4
+3d,0
+4
+9,0
+4
+3,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4
+9,0
+4
+3d,0
+b,4
+3,0
+4
+3,0
+3,4
+7,0
+b,4
+3d,0
+4
+9,0
+4
+11,0
+4
+9,0
+4
+1ac6,0
+100 90 32
+33b,0
+6
+3,0
+6
+6,0
+6
+3,0
+6
+b,0
+2,6
+33,0
+b,6
+2,0
+6
+7,0
+6
+3,0
+6
+5,0
+6
+3,0
+6
+a,0
+2,6
+34,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+6,0
+6
+0
+6
+3,0
+d,6
+5,0
+6
+36,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+6,0
+6
+3,0
+6
+40,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+2,0
+5,6
+5,0
+d,6
+3c,0
+b,6
+2,0
+6
+7,0
+6
+9,0
+6
+2,0
+6
+41,0
+6
+4,0
+6
+4,0
+6
+2,0
+6
+7,0
+6
+6,0
+b,6
+3d,0
+6
+3,0
+2,6
+4,0
+6
+2,0
+6
+7,0
+6
+6,0
+6
+2,0
+6
+2,0
+6
+3,0
+6
+3d,0
+6
+3,0
+6
+0
+6
+3,0
+6
+2,0
+6
+7,0
+6
+6,0
+6
+2,0
+6
+2,0
+6
+2,0
+2,6
+3d,0
+6
+2,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+0
+6
+2,0
+4,6
+6,0
+6
+0
+6
+4,0
+4,6
+3d,0
+6
+0
+6
+5,0
+6
+0
+6
+3,0
+6
+2,0
+6
+3,0
+2,6
+5,0
+2,6
+8,0
+6
+3d,0
+6
+9,0
+6
+3,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+6
+9,0
+6
+3d,0
+b,6
+3,0
+6
+3,0
+3,6
+7,0
+b,6
+3d,0
+6
+9,0
+6
+11,0
+6
+9,0
+6
+1ac6,0
+100 90 32
+33b,0
+7
+3,0
+7
+6,0
+7
+3,0
+7
+b,0
+2,7
+33,0
+b,7
+2,0
+7
+7,0
+7
+3,0
+7
+5,0
+7
+3,0
+7
+a,0
+2,7
+34,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+6,0
+7
+0
+7
+3,0
+d,7
+5,0
+7
+36,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+6,0
+7
+3,0
+7
+40,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+2,0
+5,7
+5,0
+d,7
+3c,0
+b,7
+2,0
+7
+7,0
+7
+9,0
+7
+2,0
+7
+41,0
+7
+4,0
+7
+4,0
+7
+2,0
+7
+7,0
+7
+6,0
+b,7
+3d,0
+7
+3,0
+2,7
+4,0
+7
+2,0
+7
+7,0
+7
+6,0
+7
+2,0
+7
+2,0
+7
+3,0
+7
+3d,0
+7
+3,0
+7
+0
+7
+3,0
+7
+2,0
+7
+7,0
+7
+6,0
+7
+2,0
+7
+2,0
+7
+2,0
+2,7
+3d,0
+7
+2,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+0
+7
+2,0
+4,7
+6,0
+7
+0
+7
+4,0
+4,7
+3d,0
+7
+0
+7
+5,0
+7
+0
+7
+3,0
+7
+2,0
+7
+3,0
+2,7
+5,0
+2,7
+8,0
+7
+3d,0
+7
+9,0
+7
+3,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+7
+9,0
+7
+3d,0
+b,7
+3,0
+7
+3,0
+3,7
+7,0
+b,7
+3d,0
+7
+9,0
+7
+11,0
+7
+9,0
+7
+1ac6,0
+100 90 32
+33b,0
+10
+3,0
+10
+6,0
+10
+3,0
+10
+b,0
+2,10
+33,0
+b,10
+2,0
+10
+7,0
+10
+3,0
+10
+5,0
+10
+3,0
+10
+a,0
+2,10
+34,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+6,0
+10
+0
+10
+3,0
+d,10
+5,0
+10
+36,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+6,0
+10
+3,0
+10
+40,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+2,0
+5,10
+5,0
+d,10
+3c,0
+b,10
+2,0
+10
+7,0
+10
+9,0
+10
+2,0
+10
+41,0
+10
+4,0
+10
+4,0
+10
+2,0
+10
+7,0
+10
+6,0
+b,10
+3d,0
+10
+3,0
+2,10
+4,0
+10
+2,0
+10
+7,0
+10
+6,0
+10
+2,0
+10
+2,0
+10
+3,0
+10
+3d,0
+10
+3,0
+10
+0
+10
+3,0
+10
+2,0
+10
+7,0
+10
+6,0
+10
+2,0
+10
+2,0
+10
+2,0
+2,10
+3d,0
+10
+2,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+0
+10
+2,0
+4,10
+6,0
+10
+0
+10
+4,0
+4,10
+3d,0
+10
+0
+10
+5,0
+10
+0
+10
+3,0
+10
+2,0
+10
+3,0
+2,10
+5,0
+2,10
+8,0
+10
+3d,0
+10
+9,0
+10
+3,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+10
+9,0
+10
+3d,0
+b,10
+3,0
+10
+3,0
+3,10
+7,0
+b,10
+3d,0
+10
+9,0
+10
+11,0
+10
+9,0
+10
+1ac6,0
+100 90 32
+33b,0
+33
+3,0
+33
+6,0
+33
+3,0
+33
+b,0
+2,33
+33,0
+b,33
+2,0
+33
+7,0
+33
+3,0
+33
+5,0
+33
+3,0
+33
+a,0
+2,33
+34,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+6,0
+33
+0
+33
+3,0
+d,33
+5,0
+33
+36,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+6,0
+33
+3,0
+33
+40,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+2,0
+5,33
+5,0
+d,33
+3c,0
+b,33
+2,0
+33
+7,0
+33
+9,0
+33
+2,0
+33
+41,0
+33
+4,0
+33
+4,0
+33
+2,0
+33
+7,0
+33
+6,0
+b,33
+3d,0
+33
+3,0
+2,33
+4,0
+33
+2,0
+33
+7,0
+33
+6,0
+33
+2,0
+33
+2,0
+33
+3,0
+33
+3d,0
+33
+3,0
+33
+0
+33
+3,0
+33
+2,0
+33
+7,0
+33
+6,0
+33
+2,0
+33
+2,0
+33
+2,0
+2,33
+3d,0
+33
+2,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+0
+33
+2,0
+4,33
+6,0
+33
+0
+33
+4,0
+4,33
+3d,0
+33
+0
+33
+5,0
+33
+0
+33
+3,0
+33
+2,0
+33
+3,0
+2,33
+5,0
+2,33
+8,0
+33
+3d,0
+33
+9,0
+33
+3,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+33
+9,0
+33
+3d,0
+b,33
+3,0
+33
+3,0
+3,33
+7,0
+b,33
+3d,0
+33
+9,0
+33
+11,0
+33
+9,0
+33
+1ac6,0
+100 90 32
+33b,0
+81
+3,0
+81
+6,0
+81
+3,0
+81
+b,0
+2,81
+33,0
+b,81
+2,0
+81
+7,0
+81
+3,0
+81
+5,0
+81
+3,0
+81
+a,0
+2,81
+34,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+6,0
+81
+0
+81
+3,0
+d,81
+5,0
+81
+36,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+6,0
+81
+3,0
+81
+40,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+2,0
+5,81
+5,0
+d,81
+3c,0
+b,81
+2,0
+81
+7,0
+81
+9,0
+81
+2,0
+81
+41,0
+81
+4,0
+81
+4,0
+81
+2,0
+81
+7,0
+81
+6,0
+b,81
+3d,0
+81
+3,0
+2,81
+4,0
+81
+2,0
+81
+7,0
+81
+6,0
+81
+2,0
+81
+2,0
+81
+3,0
+81
+3d,0
+81
+3,0
+81
+0
+81
+3,0
+81
+2,0
+81
+7,0
+81
+6,0
+81
+2,0
+81
+2,0
+81
+2,0
+2,81
+3d,0
+81
+2,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+0
+81
+2,0
+4,81
+6,0
+81
+0
+81
+4,0
+4,81
+3d,0
+81
+0
+81
+5,0
+81
+0
+81
+3,0
+81
+2,0
+81
+3,0
+2,81
+5,0
+2,81
+8,0
+81
+3d,0
+81
+9,0
+81
+3,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+81
+9,0
+81
+3d,0
+b,81
+3,0
+81
+3,0
+3,81
+7,0
+b,81
+3d,0
+81
+9,0
+81
+11,0
+81
+9,0
+81
+1ac6,0
+100 90 32
+33b,0
+a3
+3,0
+a3
+6,0
+a3
+3,0
+a3
+b,0
+2,a3
+33,0
+b,a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+5,0
+a3
+3,0
+a3
+a,0
+2,a3
+34,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+6,0
+a3
+0
+a3
+3,0
+d,a3
+5,0
+a3
+36,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+6,0
+a3
+3,0
+a3
+40,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+2,0
+5,a3
+5,0
+d,a3
+3c,0
+b,a3
+2,0
+a3
+7,0
+a3
+9,0
+a3
+2,0
+a3
+41,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+b,a3
+3d,0
+a3
+3,0
+2,a3
+4,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+a3
+2,0
+a3
+2,0
+a3
+3,0
+a3
+3d,0
+a3
+3,0
+a3
+0
+a3
+3,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+a3
+2,0
+a3
+2,0
+a3
+2,0
+2,a3
+3d,0
+a3
+2,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+0
+a3
+2,0
+4,a3
+6,0
+a3
+0
+a3
+4,0
+4,a3
+3d,0
+a3
+0
+a3
+5,0
+a3
+0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+2,a3
+5,0
+2,a3
+8,0
+a3
+3d,0
+a3
+9,0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+a3
+9,0
+a3
+3d,0
+b,a3
+3,0
+a3
+3,0
+3,a3
+7,0
+b,a3
+3d,0
+a3
+9,0
+a3
+11,0
+a3
+9,0
+a3
+1ac6,0
+100 90 32
+33b,0
+ff
+3,0
+ff
+6,0
+ff
+3,0
+ff
+b,0
+2,ff
+33,0
+b,ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+5,0
+ff
+3,0
+ff
+a,0
+2,ff
+34,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+6,0
+ff
+0
+ff
+3,0
+d,ff
+5,0
+ff
+36,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+6,0
+ff
+3,0
+ff
+40,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+2,0
+5,ff
+5,0
+d,ff
+3c,0
+b,ff
+2,0
+ff
+7,0
+ff
+9,0
+ff
+2,0
+ff
+41,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+b,ff
+3d,0
+ff
+3,0
+2,ff
+4,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+ff
+2,0
+ff
+2,0
+ff
+3,0
+ff
+3d,0
+ff
+3,0
+ff
+0
+ff
+3,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+ff
+2,0
+ff
+2,0
+ff
+2,0
+2,ff
+3d,0
+ff
+2,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+0
+ff
+2,0
+4,ff
+6,0
+ff
+0
+ff
+4,0
+4,ff
+3d,0
+ff
+0
+ff
+5,0
+ff
+0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+2,ff
+5,0
+2,ff
+8,0
+ff
+3d,0
+ff
+9,0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+ff
+9,0
+ff
+3d,0
+b,ff
+3,0
+ff
+3,0
+3,ff
+7,0
+b,ff
+3d,0
+ff
+9,0
+ff
+11,0
+ff
+9,0
+ff
+1ac6,0
+100 90 32
+33b,0
+100
+3,0
+100
+6,0
+100
+3,0
+100
+b,0
+2,100
+33,0
+b,100
+2,0
+100
+7,0
+100
+3,0
+100
+5,0
+100
+3,0
+100
+a,0
+2,100
+34,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+6,0
+100
+0
+100
+3,0
+d,100
+5,0
+100
+36,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+6,0
+100
+3,0
+100
+40,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+2,0
+5,100
+5,0
+d,100
+3c,0
+b,100
+2,0
+100
+7,0
+100
+9,0
+100
+2,0
+100
+41,0
+100
+4,0
+100
+4,0
+100
+2,0
+100
+7,0
+100
+6,0
+b,100
+3d,0
+100
+3,0
+2,100
+4,0
+100
+2,0
+100
+7,0
+100
+6,0
+100
+2,0
+100
+2,0
+100
+3,0
+100
+3d,0
+100
+3,0
+100
+0
+100
+3,0
+100
+2,0
+100
+7,0
+100
+6,0
+100
+2,0
+100
+2,0
+100
+2,0
+2,100
+3d,0
+100
+2,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+0
+100
+2,0
+4,100
+6,0
+100
+0
+100
+4,0
+4,100
+3d,0
+100
+0
+100
+5,0
+100
+0
+100
+3,0
+100
+2,0
+100
+3,0
+2,100
+5,0
+2,100
+8,0
+100
+3d,0
+100
+9,0
+100
+3,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+100
+9,0
+100
+3d,0
+b,100
+3,0
+100
+3,0
+3,100
+7,0
+b,100
+3d,0
+100
+9,0
+100
+11,0
+100
+9,0
+100
+1ac6,0
+100 90 32
+33b,0
+12c
+3,0
+12c
+6,0
+12c
+3,0
+12c
+b,0
+2,12c
+33,0
+b,12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+5,0
+12c
+3,0
+12c
+a,0
+2,12c
+34,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+6,0
+12c
+0
+12c
+3,0
+d,12c
+5,0
+12c
+36,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+6,0
+12c
+3,0
+12c
+40,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+2,0
+5,12c
+5,0
+d,12c
+3c,0
+b,12c
+2,0
+12c
+7,0
+12c
+9,0
+12c
+2,0
+12c
+41,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+b,12c
+3d,0
+12c
+3,0
+2,12c
+4,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+12c
+2,0
+12c
+2,0
+12c
+3,0
+12c
+3d,0
+12c
+3,0
+12c
+0
+12c
+3,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+12c
+2,0
+12c
+2,0
+12c
+2,0
+2,12c
+3d,0
+12c
+2,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+0
+12c
+2,0
+4,12c
+6,0
+12c
+0
+12c
+4,0
+4,12c
+3d,0
+12c
+0
+12c
+5,0
+12c
+0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+2,12c
+5,0
+2,12c
+8,0
+12c
+3d,0
+12c
+9,0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+12c
+9,0
+12c
+3d,0
+b,12c
+3,0
+12c
+3,0
+3,12c
+7,0
+b,12c
+3d,0
+12c
+9,0
+12c
+11,0
+12c
+9,0
+12c
+1ac6,0
+100 90 32
+33b,0
+3e8
+3,0
+3e8
+6,0
+3e8
+3,0
+3e8
+b,0
+2,3e8
+33,0
+b,3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+5,0
+3e8
+3,0
+3e8
+a,0
+2,3e8
+34,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+6,0
+3e8
+0
+3e8
+3,0
+d,3e8
+5,0
+3e8
+36,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+6,0
+3e8
+3,0
+3e8
+40,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+2,0
+5,3e8
+5,0
+d,3e8
+3c,0
+b,3e8
+2,0
+3e8
+7,0
+3e8
+9,0
+3e8
+2,0
+3e8
+41,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+b,3e8
+3d,0
+3e8
+3,0
+2,3e8
+4,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+3e8
+2,0
+3e8
+2,0
+3e8
+3,0
+3e8
+3d,0
+3e8
+3,0
+3e8
+0
+3e8
+3,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+3e8
+2,0
+3e8
+2,0
+3e8
+2,0
+2,3e8
+3d,0
+3e8
+2,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+0
+3e8
+2,0
+4,3e8
+6,0
+3e8
+0
+3e8
+4,0
+4,3e8
+3d,0
+3e8
+0
+3e8
+5,0
+3e8
+0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+2,3e8
+5,0
+2,3e8
+8,0
+3e8
+3d,0
+3e8
+9,0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+3e8
+9,0
+3e8
+3d,0
+b,3e8
+3,0
+3e8
+3,0
+3,3e8
+7,0
+b,3e8
+3d,0
+3e8
+9,0
+3e8
+11,0
+3e8
+9,0
+3e8
+1ac6,0
+100 90 32
+33b,0
+111111
+3,0
+111111
+6,0
+111111
+3,0
+111111
+b,0
+2,111111
+33,0
+b,111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+5,0
+111111
+3,0
+111111
+a,0
+2,111111
+34,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+6,0
+111111
+0
+111111
+3,0
+d,111111
+5,0
+111111
+36,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+6,0
+111111
+3,0
+111111
+40,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+2,0
+5,111111
+5,0
+d,111111
+3c,0
+b,111111
+2,0
+111111
+7,0
+111111
+9,0
+111111
+2,0
+111111
+41,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+b,111111
+3d,0
+111111
+3,0
+2,111111
+4,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+111111
+2,0
+111111
+2,0
+111111
+3,0
+111111
+3d,0
+111111
+3,0
+111111
+0
+111111
+3,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+111111
+2,0
+111111
+2,0
+111111
+2,0
+2,111111
+3d,0
+111111
+2,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+0
+111111
+2,0
+4,111111
+6,0
+111111
+0
+111111
+4,0
+4,111111
+3d,0
+111111
+0
+111111
+5,0
+111111
+0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+2,111111
+5,0
+2,111111
+8,0
+111111
+3d,0
+111111
+9,0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+111111
+9,0
+111111
+3d,0
+b,111111
+3,0
+111111
+3,0
+3,111111
+7,0
+b,111111
+3d,0
+111111
+9,0
+111111
+11,0
+111111
+9,0
+111111
+1ac6,0
+100 90 32
+33b,0
+400200
+3,0
+400200
+6,0
+400200
+3,0
+400200
+b,0
+2,400200
+33,0
+b,400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+5,0
+400200
+3,0
+400200
+a,0
+2,400200
+34,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+6,0
+400200
+0
+400200
+3,0
+d,400200
+5,0
+400200
+36,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+6,0
+400200
+3,0
+400200
+40,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+2,0
+5,400200
+5,0
+d,400200
+3c,0
+b,400200
+2,0
+400200
+7,0
+400200
+9,0
+400200
+2,0
+400200
+41,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+b,400200
+3d,0
+400200
+3,0
+2,400200
+4,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+400200
+2,0
+400200
+2,0
+400200
+3,0
+400200
+3d,0
+400200
+3,0
+400200
+0
+400200
+3,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+400200
+2,0
+400200
+2,0
+400200
+2,0
+2,400200
+3d,0
+400200
+2,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+0
+400200
+2,0
+4,400200
+6,0
+400200
+0
+400200
+4,0
+4,400200
+3d,0
+400200
+0
+400200
+5,0
+400200
+0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+2,400200
+5,0
+2,400200
+8,0
+400200
+3d,0
+400200
+9,0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+400200
+9,0
+400200
+3d,0
+b,400200
+3,0
+400200
+3,0
+3,400200
+7,0
+b,400200
+3d,0
+400200
+9,0
+400200
+11,0
+400200
+9,0
+400200
+1ac6,0
+100 90 32
+33b,0
+777777
+3,0
+777777
+6,0
+777777
+3,0
+777777
+b,0
+2,777777
+33,0
+b,777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+5,0
+777777
+3,0
+777777
+a,0
+2,777777
+34,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+6,0
+777777
+0
+777777
+3,0
+d,777777
+5,0
+777777
+36,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+6,0
+777777
+3,0
+777777
+40,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+2,0
+5,777777
+5,0
+d,777777
+3c,0
+b,777777
+2,0
+777777
+7,0
+777777
+9,0
+777777
+2,0
+777777
+41,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+b,777777
+3d,0
+777777
+3,0
+2,777777
+4,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+777777
+2,0
+777777
+2,0
+777777
+3,0
+777777
+3d,0
+777777
+3,0
+777777
+0
+777777
+3,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+777777
+2,0
+777777
+2,0
+777777
+2,0
+2,777777
+3d,0
+777777
+2,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+0
+777777
+2,0
+4,777777
+6,0
+777777
+0
+777777
+4,0
+4,777777
+3d,0
+777777
+0
+777777
+5,0
+777777
+0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+2,777777
+5,0
+2,777777
+8,0
+777777
+3d,0
+777777
+9,0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+777777
+9,0
+777777
+3d,0
+b,777777
+3,0
+777777
+3,0
+3,777777
+7,0
+b,777777
+3d,0
+777777
+9,0
+777777
+11,0
+777777
+9,0
+777777
+1ac6,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a18.dat b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a18.dat
new file mode 100644
index 000000000..39c3af246
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a18.dat
@@ -0,0 +1,7557 @@
+! $XConsortium$
+100 90 32
+33b,0
+1
+3,0
+1
+6,0
+1
+3,0
+1
+b,0
+2,1
+33,0
+b,1
+2,0
+1
+7,0
+1
+3,0
+1
+5,0
+1
+3,0
+1
+a,0
+2,1
+34,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+6,0
+1
+0
+1
+3,0
+d,1
+5,0
+1
+36,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+6,0
+1
+3,0
+1
+40,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+2,0
+5,1
+5,0
+d,1
+3c,0
+b,1
+2,0
+1
+7,0
+1
+9,0
+1
+2,0
+1
+41,0
+1
+4,0
+1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+b,1
+3d,0
+1
+3,0
+2,1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3d,0
+1
+3,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3d,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+0
+1
+2,0
+4,1
+6,0
+1
+0
+1
+4,0
+4,1
+3d,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+3d,0
+1
+9,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+1
+9,0
+1
+3d,0
+b,1
+3,0
+1
+3,0
+3,1
+7,0
+b,1
+3d,0
+1
+9,0
+1
+11,0
+1
+9,0
+1
+1ac6,0
+100 90 32
+325,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+1ab7,0
+100 90 32
+325,0
+16,2
+1
+3,2
+1
+6,2
+1
+3,2
+1
+b,2
+2,1
+5,2
+2c,0
+2,2
+b,1
+2,2
+1
+7,2
+1
+3,2
+1
+5,2
+1
+3,2
+1
+a,2
+2,1
+6,2
+2c,0
+2,2
+1
+4,2
+1
+4,2
+1
+3,2
+1
+6,2
+1
+2
+1
+3,2
+d,1
+5,2
+1
+8,2
+2c,0
+2,2
+1
+4,2
+1
+4,2
+1
+3,2
+1
+2
+1
+4,2
+4,1
+6,2
+1
+3,2
+1
+12,2
+2c,0
+2,2
+1
+4,2
+1
+4,2
+1
+3,2
+1
+2,2
+5,1
+5,2
+d,1
+e,2
+2c,0
+2,2
+b,1
+2,2
+1
+7,2
+1
+9,2
+1
+2,2
+1
+13,2
+2c,0
+2,2
+1
+4,2
+1
+4,2
+1
+2,2
+1
+7,2
+1
+6,2
+b,1
+f,2
+2c,0
+2,2
+1
+3,2
+2,1
+4,2
+1
+2,2
+1
+7,2
+1
+6,2
+1
+2,2
+1
+2,2
+1
+3,2
+1
+f,2
+2c,0
+2,2
+1
+3,2
+1
+2
+1
+3,2
+1
+2,2
+1
+7,2
+1
+6,2
+1
+2,2
+1
+2,2
+1
+2,2
+2,1
+f,2
+2c,0
+2,2
+1
+2,2
+1
+3,2
+1
+2,2
+1
+2,2
+1
+2
+1
+2,2
+4,1
+6,2
+1
+2
+1
+4,2
+4,1
+f,2
+2c,0
+2,2
+1
+2
+1
+5,2
+1
+2
+1
+3,2
+1
+2,2
+1
+3,2
+2,1
+5,2
+2,1
+8,2
+1
+f,2
+2c,0
+2,2
+1
+9,2
+1
+3,2
+1
+2,2
+1
+3,2
+1
+2
+1
+4,2
+1
+9,2
+1
+f,2
+2c,0
+2,2
+b,1
+3,2
+1
+3,2
+3,1
+7,2
+b,1
+f,2
+2c,0
+2,2
+1
+9,2
+1
+11,2
+1
+9,2
+1
+f,2
+1ab7,0
+100 90 32
+325,0
+16,3
+1
+3,3
+1
+6,3
+1
+3,3
+1
+b,3
+2,1
+5,3
+2c,0
+2,3
+b,1
+2,3
+1
+7,3
+1
+3,3
+1
+5,3
+1
+3,3
+1
+a,3
+2,1
+6,3
+2c,0
+2,3
+1
+4,3
+1
+4,3
+1
+3,3
+1
+6,3
+1
+3
+1
+3,3
+d,1
+5,3
+1
+8,3
+2c,0
+2,3
+1
+4,3
+1
+4,3
+1
+3,3
+1
+3
+1
+4,3
+4,1
+6,3
+1
+3,3
+1
+12,3
+2c,0
+2,3
+1
+4,3
+1
+4,3
+1
+3,3
+1
+2,3
+5,1
+5,3
+d,1
+e,3
+2c,0
+2,3
+b,1
+2,3
+1
+7,3
+1
+9,3
+1
+2,3
+1
+13,3
+2c,0
+2,3
+1
+4,3
+1
+4,3
+1
+2,3
+1
+7,3
+1
+6,3
+b,1
+f,3
+2c,0
+2,3
+1
+3,3
+2,1
+4,3
+1
+2,3
+1
+7,3
+1
+6,3
+1
+2,3
+1
+2,3
+1
+3,3
+1
+f,3
+2c,0
+2,3
+1
+3,3
+1
+3
+1
+3,3
+1
+2,3
+1
+7,3
+1
+6,3
+1
+2,3
+1
+2,3
+1
+2,3
+2,1
+f,3
+2c,0
+2,3
+1
+2,3
+1
+3,3
+1
+2,3
+1
+2,3
+1
+3
+1
+2,3
+4,1
+6,3
+1
+3
+1
+4,3
+4,1
+f,3
+2c,0
+2,3
+1
+3
+1
+5,3
+1
+3
+1
+3,3
+1
+2,3
+1
+3,3
+2,1
+5,3
+2,1
+8,3
+1
+f,3
+2c,0
+2,3
+1
+9,3
+1
+3,3
+1
+2,3
+1
+3,3
+1
+3
+1
+4,3
+1
+9,3
+1
+f,3
+2c,0
+2,3
+b,1
+3,3
+1
+3,3
+3,1
+7,3
+b,1
+f,3
+2c,0
+2,3
+1
+9,3
+1
+11,3
+1
+9,3
+1
+f,3
+1ab7,0
+100 90 32
+325,0
+16,4
+1
+3,4
+1
+6,4
+1
+3,4
+1
+b,4
+2,1
+5,4
+2c,0
+2,4
+b,1
+2,4
+1
+7,4
+1
+3,4
+1
+5,4
+1
+3,4
+1
+a,4
+2,1
+6,4
+2c,0
+2,4
+1
+4,4
+1
+4,4
+1
+3,4
+1
+6,4
+1
+4
+1
+3,4
+d,1
+5,4
+1
+8,4
+2c,0
+2,4
+1
+4,4
+1
+4,4
+1
+3,4
+1
+4
+1
+4,4
+4,1
+6,4
+1
+3,4
+1
+12,4
+2c,0
+2,4
+1
+4,4
+1
+4,4
+1
+3,4
+1
+2,4
+5,1
+5,4
+d,1
+e,4
+2c,0
+2,4
+b,1
+2,4
+1
+7,4
+1
+9,4
+1
+2,4
+1
+13,4
+2c,0
+2,4
+1
+4,4
+1
+4,4
+1
+2,4
+1
+7,4
+1
+6,4
+b,1
+f,4
+2c,0
+2,4
+1
+3,4
+2,1
+4,4
+1
+2,4
+1
+7,4
+1
+6,4
+1
+2,4
+1
+2,4
+1
+3,4
+1
+f,4
+2c,0
+2,4
+1
+3,4
+1
+4
+1
+3,4
+1
+2,4
+1
+7,4
+1
+6,4
+1
+2,4
+1
+2,4
+1
+2,4
+2,1
+f,4
+2c,0
+2,4
+1
+2,4
+1
+3,4
+1
+2,4
+1
+2,4
+1
+4
+1
+2,4
+4,1
+6,4
+1
+4
+1
+4,4
+4,1
+f,4
+2c,0
+2,4
+1
+4
+1
+5,4
+1
+4
+1
+3,4
+1
+2,4
+1
+3,4
+2,1
+5,4
+2,1
+8,4
+1
+f,4
+2c,0
+2,4
+1
+9,4
+1
+3,4
+1
+2,4
+1
+3,4
+1
+4
+1
+4,4
+1
+9,4
+1
+f,4
+2c,0
+2,4
+b,1
+3,4
+1
+3,4
+3,1
+7,4
+b,1
+f,4
+2c,0
+2,4
+1
+9,4
+1
+11,4
+1
+9,4
+1
+f,4
+1ab7,0
+100 90 32
+325,0
+16,6
+1
+3,6
+1
+6,6
+1
+3,6
+1
+b,6
+2,1
+5,6
+2c,0
+2,6
+b,1
+2,6
+1
+7,6
+1
+3,6
+1
+5,6
+1
+3,6
+1
+a,6
+2,1
+6,6
+2c,0
+2,6
+1
+4,6
+1
+4,6
+1
+3,6
+1
+6,6
+1
+6
+1
+3,6
+d,1
+5,6
+1
+8,6
+2c,0
+2,6
+1
+4,6
+1
+4,6
+1
+3,6
+1
+6
+1
+4,6
+4,1
+6,6
+1
+3,6
+1
+12,6
+2c,0
+2,6
+1
+4,6
+1
+4,6
+1
+3,6
+1
+2,6
+5,1
+5,6
+d,1
+e,6
+2c,0
+2,6
+b,1
+2,6
+1
+7,6
+1
+9,6
+1
+2,6
+1
+13,6
+2c,0
+2,6
+1
+4,6
+1
+4,6
+1
+2,6
+1
+7,6
+1
+6,6
+b,1
+f,6
+2c,0
+2,6
+1
+3,6
+2,1
+4,6
+1
+2,6
+1
+7,6
+1
+6,6
+1
+2,6
+1
+2,6
+1
+3,6
+1
+f,6
+2c,0
+2,6
+1
+3,6
+1
+6
+1
+3,6
+1
+2,6
+1
+7,6
+1
+6,6
+1
+2,6
+1
+2,6
+1
+2,6
+2,1
+f,6
+2c,0
+2,6
+1
+2,6
+1
+3,6
+1
+2,6
+1
+2,6
+1
+6
+1
+2,6
+4,1
+6,6
+1
+6
+1
+4,6
+4,1
+f,6
+2c,0
+2,6
+1
+6
+1
+5,6
+1
+6
+1
+3,6
+1
+2,6
+1
+3,6
+2,1
+5,6
+2,1
+8,6
+1
+f,6
+2c,0
+2,6
+1
+9,6
+1
+3,6
+1
+2,6
+1
+3,6
+1
+6
+1
+4,6
+1
+9,6
+1
+f,6
+2c,0
+2,6
+b,1
+3,6
+1
+3,6
+3,1
+7,6
+b,1
+f,6
+2c,0
+2,6
+1
+9,6
+1
+11,6
+1
+9,6
+1
+f,6
+1ab7,0
+100 90 32
+325,0
+16,7
+1
+3,7
+1
+6,7
+1
+3,7
+1
+b,7
+2,1
+5,7
+2c,0
+2,7
+b,1
+2,7
+1
+7,7
+1
+3,7
+1
+5,7
+1
+3,7
+1
+a,7
+2,1
+6,7
+2c,0
+2,7
+1
+4,7
+1
+4,7
+1
+3,7
+1
+6,7
+1
+7
+1
+3,7
+d,1
+5,7
+1
+8,7
+2c,0
+2,7
+1
+4,7
+1
+4,7
+1
+3,7
+1
+7
+1
+4,7
+4,1
+6,7
+1
+3,7
+1
+12,7
+2c,0
+2,7
+1
+4,7
+1
+4,7
+1
+3,7
+1
+2,7
+5,1
+5,7
+d,1
+e,7
+2c,0
+2,7
+b,1
+2,7
+1
+7,7
+1
+9,7
+1
+2,7
+1
+13,7
+2c,0
+2,7
+1
+4,7
+1
+4,7
+1
+2,7
+1
+7,7
+1
+6,7
+b,1
+f,7
+2c,0
+2,7
+1
+3,7
+2,1
+4,7
+1
+2,7
+1
+7,7
+1
+6,7
+1
+2,7
+1
+2,7
+1
+3,7
+1
+f,7
+2c,0
+2,7
+1
+3,7
+1
+7
+1
+3,7
+1
+2,7
+1
+7,7
+1
+6,7
+1
+2,7
+1
+2,7
+1
+2,7
+2,1
+f,7
+2c,0
+2,7
+1
+2,7
+1
+3,7
+1
+2,7
+1
+2,7
+1
+7
+1
+2,7
+4,1
+6,7
+1
+7
+1
+4,7
+4,1
+f,7
+2c,0
+2,7
+1
+7
+1
+5,7
+1
+7
+1
+3,7
+1
+2,7
+1
+3,7
+2,1
+5,7
+2,1
+8,7
+1
+f,7
+2c,0
+2,7
+1
+9,7
+1
+3,7
+1
+2,7
+1
+3,7
+1
+7
+1
+4,7
+1
+9,7
+1
+f,7
+2c,0
+2,7
+b,1
+3,7
+1
+3,7
+3,1
+7,7
+b,1
+f,7
+2c,0
+2,7
+1
+9,7
+1
+11,7
+1
+9,7
+1
+f,7
+1ab7,0
+100 90 32
+325,0
+16,10
+1
+3,10
+1
+6,10
+1
+3,10
+1
+b,10
+2,1
+5,10
+2c,0
+2,10
+b,1
+2,10
+1
+7,10
+1
+3,10
+1
+5,10
+1
+3,10
+1
+a,10
+2,1
+6,10
+2c,0
+2,10
+1
+4,10
+1
+4,10
+1
+3,10
+1
+6,10
+1
+10
+1
+3,10
+d,1
+5,10
+1
+8,10
+2c,0
+2,10
+1
+4,10
+1
+4,10
+1
+3,10
+1
+10
+1
+4,10
+4,1
+6,10
+1
+3,10
+1
+12,10
+2c,0
+2,10
+1
+4,10
+1
+4,10
+1
+3,10
+1
+2,10
+5,1
+5,10
+d,1
+e,10
+2c,0
+2,10
+b,1
+2,10
+1
+7,10
+1
+9,10
+1
+2,10
+1
+13,10
+2c,0
+2,10
+1
+4,10
+1
+4,10
+1
+2,10
+1
+7,10
+1
+6,10
+b,1
+f,10
+2c,0
+2,10
+1
+3,10
+2,1
+4,10
+1
+2,10
+1
+7,10
+1
+6,10
+1
+2,10
+1
+2,10
+1
+3,10
+1
+f,10
+2c,0
+2,10
+1
+3,10
+1
+10
+1
+3,10
+1
+2,10
+1
+7,10
+1
+6,10
+1
+2,10
+1
+2,10
+1
+2,10
+2,1
+f,10
+2c,0
+2,10
+1
+2,10
+1
+3,10
+1
+2,10
+1
+2,10
+1
+10
+1
+2,10
+4,1
+6,10
+1
+10
+1
+4,10
+4,1
+f,10
+2c,0
+2,10
+1
+10
+1
+5,10
+1
+10
+1
+3,10
+1
+2,10
+1
+3,10
+2,1
+5,10
+2,1
+8,10
+1
+f,10
+2c,0
+2,10
+1
+9,10
+1
+3,10
+1
+2,10
+1
+3,10
+1
+10
+1
+4,10
+1
+9,10
+1
+f,10
+2c,0
+2,10
+b,1
+3,10
+1
+3,10
+3,1
+7,10
+b,1
+f,10
+2c,0
+2,10
+1
+9,10
+1
+11,10
+1
+9,10
+1
+f,10
+1ab7,0
+100 90 32
+325,0
+16,33
+1
+3,33
+1
+6,33
+1
+3,33
+1
+b,33
+2,1
+5,33
+2c,0
+2,33
+b,1
+2,33
+1
+7,33
+1
+3,33
+1
+5,33
+1
+3,33
+1
+a,33
+2,1
+6,33
+2c,0
+2,33
+1
+4,33
+1
+4,33
+1
+3,33
+1
+6,33
+1
+33
+1
+3,33
+d,1
+5,33
+1
+8,33
+2c,0
+2,33
+1
+4,33
+1
+4,33
+1
+3,33
+1
+33
+1
+4,33
+4,1
+6,33
+1
+3,33
+1
+12,33
+2c,0
+2,33
+1
+4,33
+1
+4,33
+1
+3,33
+1
+2,33
+5,1
+5,33
+d,1
+e,33
+2c,0
+2,33
+b,1
+2,33
+1
+7,33
+1
+9,33
+1
+2,33
+1
+13,33
+2c,0
+2,33
+1
+4,33
+1
+4,33
+1
+2,33
+1
+7,33
+1
+6,33
+b,1
+f,33
+2c,0
+2,33
+1
+3,33
+2,1
+4,33
+1
+2,33
+1
+7,33
+1
+6,33
+1
+2,33
+1
+2,33
+1
+3,33
+1
+f,33
+2c,0
+2,33
+1
+3,33
+1
+33
+1
+3,33
+1
+2,33
+1
+7,33
+1
+6,33
+1
+2,33
+1
+2,33
+1
+2,33
+2,1
+f,33
+2c,0
+2,33
+1
+2,33
+1
+3,33
+1
+2,33
+1
+2,33
+1
+33
+1
+2,33
+4,1
+6,33
+1
+33
+1
+4,33
+4,1
+f,33
+2c,0
+2,33
+1
+33
+1
+5,33
+1
+33
+1
+3,33
+1
+2,33
+1
+3,33
+2,1
+5,33
+2,1
+8,33
+1
+f,33
+2c,0
+2,33
+1
+9,33
+1
+3,33
+1
+2,33
+1
+3,33
+1
+33
+1
+4,33
+1
+9,33
+1
+f,33
+2c,0
+2,33
+b,1
+3,33
+1
+3,33
+3,1
+7,33
+b,1
+f,33
+2c,0
+2,33
+1
+9,33
+1
+11,33
+1
+9,33
+1
+f,33
+1ab7,0
+100 90 32
+325,0
+16,81
+1
+3,81
+1
+6,81
+1
+3,81
+1
+b,81
+2,1
+5,81
+2c,0
+2,81
+b,1
+2,81
+1
+7,81
+1
+3,81
+1
+5,81
+1
+3,81
+1
+a,81
+2,1
+6,81
+2c,0
+2,81
+1
+4,81
+1
+4,81
+1
+3,81
+1
+6,81
+1
+81
+1
+3,81
+d,1
+5,81
+1
+8,81
+2c,0
+2,81
+1
+4,81
+1
+4,81
+1
+3,81
+1
+81
+1
+4,81
+4,1
+6,81
+1
+3,81
+1
+12,81
+2c,0
+2,81
+1
+4,81
+1
+4,81
+1
+3,81
+1
+2,81
+5,1
+5,81
+d,1
+e,81
+2c,0
+2,81
+b,1
+2,81
+1
+7,81
+1
+9,81
+1
+2,81
+1
+13,81
+2c,0
+2,81
+1
+4,81
+1
+4,81
+1
+2,81
+1
+7,81
+1
+6,81
+b,1
+f,81
+2c,0
+2,81
+1
+3,81
+2,1
+4,81
+1
+2,81
+1
+7,81
+1
+6,81
+1
+2,81
+1
+2,81
+1
+3,81
+1
+f,81
+2c,0
+2,81
+1
+3,81
+1
+81
+1
+3,81
+1
+2,81
+1
+7,81
+1
+6,81
+1
+2,81
+1
+2,81
+1
+2,81
+2,1
+f,81
+2c,0
+2,81
+1
+2,81
+1
+3,81
+1
+2,81
+1
+2,81
+1
+81
+1
+2,81
+4,1
+6,81
+1
+81
+1
+4,81
+4,1
+f,81
+2c,0
+2,81
+1
+81
+1
+5,81
+1
+81
+1
+3,81
+1
+2,81
+1
+3,81
+2,1
+5,81
+2,1
+8,81
+1
+f,81
+2c,0
+2,81
+1
+9,81
+1
+3,81
+1
+2,81
+1
+3,81
+1
+81
+1
+4,81
+1
+9,81
+1
+f,81
+2c,0
+2,81
+b,1
+3,81
+1
+3,81
+3,1
+7,81
+b,1
+f,81
+2c,0
+2,81
+1
+9,81
+1
+11,81
+1
+9,81
+1
+f,81
+1ab7,0
+100 90 32
+325,0
+16,a3
+1
+3,a3
+1
+6,a3
+1
+3,a3
+1
+b,a3
+2,1
+5,a3
+2c,0
+2,a3
+b,1
+2,a3
+1
+7,a3
+1
+3,a3
+1
+5,a3
+1
+3,a3
+1
+a,a3
+2,1
+6,a3
+2c,0
+2,a3
+1
+4,a3
+1
+4,a3
+1
+3,a3
+1
+6,a3
+1
+a3
+1
+3,a3
+d,1
+5,a3
+1
+8,a3
+2c,0
+2,a3
+1
+4,a3
+1
+4,a3
+1
+3,a3
+1
+a3
+1
+4,a3
+4,1
+6,a3
+1
+3,a3
+1
+12,a3
+2c,0
+2,a3
+1
+4,a3
+1
+4,a3
+1
+3,a3
+1
+2,a3
+5,1
+5,a3
+d,1
+e,a3
+2c,0
+2,a3
+b,1
+2,a3
+1
+7,a3
+1
+9,a3
+1
+2,a3
+1
+13,a3
+2c,0
+2,a3
+1
+4,a3
+1
+4,a3
+1
+2,a3
+1
+7,a3
+1
+6,a3
+b,1
+f,a3
+2c,0
+2,a3
+1
+3,a3
+2,1
+4,a3
+1
+2,a3
+1
+7,a3
+1
+6,a3
+1
+2,a3
+1
+2,a3
+1
+3,a3
+1
+f,a3
+2c,0
+2,a3
+1
+3,a3
+1
+a3
+1
+3,a3
+1
+2,a3
+1
+7,a3
+1
+6,a3
+1
+2,a3
+1
+2,a3
+1
+2,a3
+2,1
+f,a3
+2c,0
+2,a3
+1
+2,a3
+1
+3,a3
+1
+2,a3
+1
+2,a3
+1
+a3
+1
+2,a3
+4,1
+6,a3
+1
+a3
+1
+4,a3
+4,1
+f,a3
+2c,0
+2,a3
+1
+a3
+1
+5,a3
+1
+a3
+1
+3,a3
+1
+2,a3
+1
+3,a3
+2,1
+5,a3
+2,1
+8,a3
+1
+f,a3
+2c,0
+2,a3
+1
+9,a3
+1
+3,a3
+1
+2,a3
+1
+3,a3
+1
+a3
+1
+4,a3
+1
+9,a3
+1
+f,a3
+2c,0
+2,a3
+b,1
+3,a3
+1
+3,a3
+3,1
+7,a3
+b,1
+f,a3
+2c,0
+2,a3
+1
+9,a3
+1
+11,a3
+1
+9,a3
+1
+f,a3
+1ab7,0
+100 90 32
+325,0
+16,ff
+1
+3,ff
+1
+6,ff
+1
+3,ff
+1
+b,ff
+2,1
+5,ff
+2c,0
+2,ff
+b,1
+2,ff
+1
+7,ff
+1
+3,ff
+1
+5,ff
+1
+3,ff
+1
+a,ff
+2,1
+6,ff
+2c,0
+2,ff
+1
+4,ff
+1
+4,ff
+1
+3,ff
+1
+6,ff
+1
+ff
+1
+3,ff
+d,1
+5,ff
+1
+8,ff
+2c,0
+2,ff
+1
+4,ff
+1
+4,ff
+1
+3,ff
+1
+ff
+1
+4,ff
+4,1
+6,ff
+1
+3,ff
+1
+12,ff
+2c,0
+2,ff
+1
+4,ff
+1
+4,ff
+1
+3,ff
+1
+2,ff
+5,1
+5,ff
+d,1
+e,ff
+2c,0
+2,ff
+b,1
+2,ff
+1
+7,ff
+1
+9,ff
+1
+2,ff
+1
+13,ff
+2c,0
+2,ff
+1
+4,ff
+1
+4,ff
+1
+2,ff
+1
+7,ff
+1
+6,ff
+b,1
+f,ff
+2c,0
+2,ff
+1
+3,ff
+2,1
+4,ff
+1
+2,ff
+1
+7,ff
+1
+6,ff
+1
+2,ff
+1
+2,ff
+1
+3,ff
+1
+f,ff
+2c,0
+2,ff
+1
+3,ff
+1
+ff
+1
+3,ff
+1
+2,ff
+1
+7,ff
+1
+6,ff
+1
+2,ff
+1
+2,ff
+1
+2,ff
+2,1
+f,ff
+2c,0
+2,ff
+1
+2,ff
+1
+3,ff
+1
+2,ff
+1
+2,ff
+1
+ff
+1
+2,ff
+4,1
+6,ff
+1
+ff
+1
+4,ff
+4,1
+f,ff
+2c,0
+2,ff
+1
+ff
+1
+5,ff
+1
+ff
+1
+3,ff
+1
+2,ff
+1
+3,ff
+2,1
+5,ff
+2,1
+8,ff
+1
+f,ff
+2c,0
+2,ff
+1
+9,ff
+1
+3,ff
+1
+2,ff
+1
+3,ff
+1
+ff
+1
+4,ff
+1
+9,ff
+1
+f,ff
+2c,0
+2,ff
+b,1
+3,ff
+1
+3,ff
+3,1
+7,ff
+b,1
+f,ff
+2c,0
+2,ff
+1
+9,ff
+1
+11,ff
+1
+9,ff
+1
+f,ff
+1ab7,0
+100 90 32
+325,0
+16,100
+1
+3,100
+1
+6,100
+1
+3,100
+1
+b,100
+2,1
+5,100
+2c,0
+2,100
+b,1
+2,100
+1
+7,100
+1
+3,100
+1
+5,100
+1
+3,100
+1
+a,100
+2,1
+6,100
+2c,0
+2,100
+1
+4,100
+1
+4,100
+1
+3,100
+1
+6,100
+1
+100
+1
+3,100
+d,1
+5,100
+1
+8,100
+2c,0
+2,100
+1
+4,100
+1
+4,100
+1
+3,100
+1
+100
+1
+4,100
+4,1
+6,100
+1
+3,100
+1
+12,100
+2c,0
+2,100
+1
+4,100
+1
+4,100
+1
+3,100
+1
+2,100
+5,1
+5,100
+d,1
+e,100
+2c,0
+2,100
+b,1
+2,100
+1
+7,100
+1
+9,100
+1
+2,100
+1
+13,100
+2c,0
+2,100
+1
+4,100
+1
+4,100
+1
+2,100
+1
+7,100
+1
+6,100
+b,1
+f,100
+2c,0
+2,100
+1
+3,100
+2,1
+4,100
+1
+2,100
+1
+7,100
+1
+6,100
+1
+2,100
+1
+2,100
+1
+3,100
+1
+f,100
+2c,0
+2,100
+1
+3,100
+1
+100
+1
+3,100
+1
+2,100
+1
+7,100
+1
+6,100
+1
+2,100
+1
+2,100
+1
+2,100
+2,1
+f,100
+2c,0
+2,100
+1
+2,100
+1
+3,100
+1
+2,100
+1
+2,100
+1
+100
+1
+2,100
+4,1
+6,100
+1
+100
+1
+4,100
+4,1
+f,100
+2c,0
+2,100
+1
+100
+1
+5,100
+1
+100
+1
+3,100
+1
+2,100
+1
+3,100
+2,1
+5,100
+2,1
+8,100
+1
+f,100
+2c,0
+2,100
+1
+9,100
+1
+3,100
+1
+2,100
+1
+3,100
+1
+100
+1
+4,100
+1
+9,100
+1
+f,100
+2c,0
+2,100
+b,1
+3,100
+1
+3,100
+3,1
+7,100
+b,1
+f,100
+2c,0
+2,100
+1
+9,100
+1
+11,100
+1
+9,100
+1
+f,100
+1ab7,0
+100 90 32
+325,0
+16,12c
+1
+3,12c
+1
+6,12c
+1
+3,12c
+1
+b,12c
+2,1
+5,12c
+2c,0
+2,12c
+b,1
+2,12c
+1
+7,12c
+1
+3,12c
+1
+5,12c
+1
+3,12c
+1
+a,12c
+2,1
+6,12c
+2c,0
+2,12c
+1
+4,12c
+1
+4,12c
+1
+3,12c
+1
+6,12c
+1
+12c
+1
+3,12c
+d,1
+5,12c
+1
+8,12c
+2c,0
+2,12c
+1
+4,12c
+1
+4,12c
+1
+3,12c
+1
+12c
+1
+4,12c
+4,1
+6,12c
+1
+3,12c
+1
+12,12c
+2c,0
+2,12c
+1
+4,12c
+1
+4,12c
+1
+3,12c
+1
+2,12c
+5,1
+5,12c
+d,1
+e,12c
+2c,0
+2,12c
+b,1
+2,12c
+1
+7,12c
+1
+9,12c
+1
+2,12c
+1
+13,12c
+2c,0
+2,12c
+1
+4,12c
+1
+4,12c
+1
+2,12c
+1
+7,12c
+1
+6,12c
+b,1
+f,12c
+2c,0
+2,12c
+1
+3,12c
+2,1
+4,12c
+1
+2,12c
+1
+7,12c
+1
+6,12c
+1
+2,12c
+1
+2,12c
+1
+3,12c
+1
+f,12c
+2c,0
+2,12c
+1
+3,12c
+1
+12c
+1
+3,12c
+1
+2,12c
+1
+7,12c
+1
+6,12c
+1
+2,12c
+1
+2,12c
+1
+2,12c
+2,1
+f,12c
+2c,0
+2,12c
+1
+2,12c
+1
+3,12c
+1
+2,12c
+1
+2,12c
+1
+12c
+1
+2,12c
+4,1
+6,12c
+1
+12c
+1
+4,12c
+4,1
+f,12c
+2c,0
+2,12c
+1
+12c
+1
+5,12c
+1
+12c
+1
+3,12c
+1
+2,12c
+1
+3,12c
+2,1
+5,12c
+2,1
+8,12c
+1
+f,12c
+2c,0
+2,12c
+1
+9,12c
+1
+3,12c
+1
+2,12c
+1
+3,12c
+1
+12c
+1
+4,12c
+1
+9,12c
+1
+f,12c
+2c,0
+2,12c
+b,1
+3,12c
+1
+3,12c
+3,1
+7,12c
+b,1
+f,12c
+2c,0
+2,12c
+1
+9,12c
+1
+11,12c
+1
+9,12c
+1
+f,12c
+1ab7,0
+100 90 32
+325,0
+16,3e8
+1
+3,3e8
+1
+6,3e8
+1
+3,3e8
+1
+b,3e8
+2,1
+5,3e8
+2c,0
+2,3e8
+b,1
+2,3e8
+1
+7,3e8
+1
+3,3e8
+1
+5,3e8
+1
+3,3e8
+1
+a,3e8
+2,1
+6,3e8
+2c,0
+2,3e8
+1
+4,3e8
+1
+4,3e8
+1
+3,3e8
+1
+6,3e8
+1
+3e8
+1
+3,3e8
+d,1
+5,3e8
+1
+8,3e8
+2c,0
+2,3e8
+1
+4,3e8
+1
+4,3e8
+1
+3,3e8
+1
+3e8
+1
+4,3e8
+4,1
+6,3e8
+1
+3,3e8
+1
+12,3e8
+2c,0
+2,3e8
+1
+4,3e8
+1
+4,3e8
+1
+3,3e8
+1
+2,3e8
+5,1
+5,3e8
+d,1
+e,3e8
+2c,0
+2,3e8
+b,1
+2,3e8
+1
+7,3e8
+1
+9,3e8
+1
+2,3e8
+1
+13,3e8
+2c,0
+2,3e8
+1
+4,3e8
+1
+4,3e8
+1
+2,3e8
+1
+7,3e8
+1
+6,3e8
+b,1
+f,3e8
+2c,0
+2,3e8
+1
+3,3e8
+2,1
+4,3e8
+1
+2,3e8
+1
+7,3e8
+1
+6,3e8
+1
+2,3e8
+1
+2,3e8
+1
+3,3e8
+1
+f,3e8
+2c,0
+2,3e8
+1
+3,3e8
+1
+3e8
+1
+3,3e8
+1
+2,3e8
+1
+7,3e8
+1
+6,3e8
+1
+2,3e8
+1
+2,3e8
+1
+2,3e8
+2,1
+f,3e8
+2c,0
+2,3e8
+1
+2,3e8
+1
+3,3e8
+1
+2,3e8
+1
+2,3e8
+1
+3e8
+1
+2,3e8
+4,1
+6,3e8
+1
+3e8
+1
+4,3e8
+4,1
+f,3e8
+2c,0
+2,3e8
+1
+3e8
+1
+5,3e8
+1
+3e8
+1
+3,3e8
+1
+2,3e8
+1
+3,3e8
+2,1
+5,3e8
+2,1
+8,3e8
+1
+f,3e8
+2c,0
+2,3e8
+1
+9,3e8
+1
+3,3e8
+1
+2,3e8
+1
+3,3e8
+1
+3e8
+1
+4,3e8
+1
+9,3e8
+1
+f,3e8
+2c,0
+2,3e8
+b,1
+3,3e8
+1
+3,3e8
+3,1
+7,3e8
+b,1
+f,3e8
+2c,0
+2,3e8
+1
+9,3e8
+1
+11,3e8
+1
+9,3e8
+1
+f,3e8
+1ab7,0
+100 90 32
+325,0
+16,111111
+1
+3,111111
+1
+6,111111
+1
+3,111111
+1
+b,111111
+2,1
+5,111111
+2c,0
+2,111111
+b,1
+2,111111
+1
+7,111111
+1
+3,111111
+1
+5,111111
+1
+3,111111
+1
+a,111111
+2,1
+6,111111
+2c,0
+2,111111
+1
+4,111111
+1
+4,111111
+1
+3,111111
+1
+6,111111
+1
+111111
+1
+3,111111
+d,1
+5,111111
+1
+8,111111
+2c,0
+2,111111
+1
+4,111111
+1
+4,111111
+1
+3,111111
+1
+111111
+1
+4,111111
+4,1
+6,111111
+1
+3,111111
+1
+12,111111
+2c,0
+2,111111
+1
+4,111111
+1
+4,111111
+1
+3,111111
+1
+2,111111
+5,1
+5,111111
+d,1
+e,111111
+2c,0
+2,111111
+b,1
+2,111111
+1
+7,111111
+1
+9,111111
+1
+2,111111
+1
+13,111111
+2c,0
+2,111111
+1
+4,111111
+1
+4,111111
+1
+2,111111
+1
+7,111111
+1
+6,111111
+b,1
+f,111111
+2c,0
+2,111111
+1
+3,111111
+2,1
+4,111111
+1
+2,111111
+1
+7,111111
+1
+6,111111
+1
+2,111111
+1
+2,111111
+1
+3,111111
+1
+f,111111
+2c,0
+2,111111
+1
+3,111111
+1
+111111
+1
+3,111111
+1
+2,111111
+1
+7,111111
+1
+6,111111
+1
+2,111111
+1
+2,111111
+1
+2,111111
+2,1
+f,111111
+2c,0
+2,111111
+1
+2,111111
+1
+3,111111
+1
+2,111111
+1
+2,111111
+1
+111111
+1
+2,111111
+4,1
+6,111111
+1
+111111
+1
+4,111111
+4,1
+f,111111
+2c,0
+2,111111
+1
+111111
+1
+5,111111
+1
+111111
+1
+3,111111
+1
+2,111111
+1
+3,111111
+2,1
+5,111111
+2,1
+8,111111
+1
+f,111111
+2c,0
+2,111111
+1
+9,111111
+1
+3,111111
+1
+2,111111
+1
+3,111111
+1
+111111
+1
+4,111111
+1
+9,111111
+1
+f,111111
+2c,0
+2,111111
+b,1
+3,111111
+1
+3,111111
+3,1
+7,111111
+b,1
+f,111111
+2c,0
+2,111111
+1
+9,111111
+1
+11,111111
+1
+9,111111
+1
+f,111111
+1ab7,0
+100 90 32
+325,0
+16,400200
+1
+3,400200
+1
+6,400200
+1
+3,400200
+1
+b,400200
+2,1
+5,400200
+2c,0
+2,400200
+b,1
+2,400200
+1
+7,400200
+1
+3,400200
+1
+5,400200
+1
+3,400200
+1
+a,400200
+2,1
+6,400200
+2c,0
+2,400200
+1
+4,400200
+1
+4,400200
+1
+3,400200
+1
+6,400200
+1
+400200
+1
+3,400200
+d,1
+5,400200
+1
+8,400200
+2c,0
+2,400200
+1
+4,400200
+1
+4,400200
+1
+3,400200
+1
+400200
+1
+4,400200
+4,1
+6,400200
+1
+3,400200
+1
+12,400200
+2c,0
+2,400200
+1
+4,400200
+1
+4,400200
+1
+3,400200
+1
+2,400200
+5,1
+5,400200
+d,1
+e,400200
+2c,0
+2,400200
+b,1
+2,400200
+1
+7,400200
+1
+9,400200
+1
+2,400200
+1
+13,400200
+2c,0
+2,400200
+1
+4,400200
+1
+4,400200
+1
+2,400200
+1
+7,400200
+1
+6,400200
+b,1
+f,400200
+2c,0
+2,400200
+1
+3,400200
+2,1
+4,400200
+1
+2,400200
+1
+7,400200
+1
+6,400200
+1
+2,400200
+1
+2,400200
+1
+3,400200
+1
+f,400200
+2c,0
+2,400200
+1
+3,400200
+1
+400200
+1
+3,400200
+1
+2,400200
+1
+7,400200
+1
+6,400200
+1
+2,400200
+1
+2,400200
+1
+2,400200
+2,1
+f,400200
+2c,0
+2,400200
+1
+2,400200
+1
+3,400200
+1
+2,400200
+1
+2,400200
+1
+400200
+1
+2,400200
+4,1
+6,400200
+1
+400200
+1
+4,400200
+4,1
+f,400200
+2c,0
+2,400200
+1
+400200
+1
+5,400200
+1
+400200
+1
+3,400200
+1
+2,400200
+1
+3,400200
+2,1
+5,400200
+2,1
+8,400200
+1
+f,400200
+2c,0
+2,400200
+1
+9,400200
+1
+3,400200
+1
+2,400200
+1
+3,400200
+1
+400200
+1
+4,400200
+1
+9,400200
+1
+f,400200
+2c,0
+2,400200
+b,1
+3,400200
+1
+3,400200
+3,1
+7,400200
+b,1
+f,400200
+2c,0
+2,400200
+1
+9,400200
+1
+11,400200
+1
+9,400200
+1
+f,400200
+1ab7,0
+100 90 32
+325,0
+16,777777
+1
+3,777777
+1
+6,777777
+1
+3,777777
+1
+b,777777
+2,1
+5,777777
+2c,0
+2,777777
+b,1
+2,777777
+1
+7,777777
+1
+3,777777
+1
+5,777777
+1
+3,777777
+1
+a,777777
+2,1
+6,777777
+2c,0
+2,777777
+1
+4,777777
+1
+4,777777
+1
+3,777777
+1
+6,777777
+1
+777777
+1
+3,777777
+d,1
+5,777777
+1
+8,777777
+2c,0
+2,777777
+1
+4,777777
+1
+4,777777
+1
+3,777777
+1
+777777
+1
+4,777777
+4,1
+6,777777
+1
+3,777777
+1
+12,777777
+2c,0
+2,777777
+1
+4,777777
+1
+4,777777
+1
+3,777777
+1
+2,777777
+5,1
+5,777777
+d,1
+e,777777
+2c,0
+2,777777
+b,1
+2,777777
+1
+7,777777
+1
+9,777777
+1
+2,777777
+1
+13,777777
+2c,0
+2,777777
+1
+4,777777
+1
+4,777777
+1
+2,777777
+1
+7,777777
+1
+6,777777
+b,1
+f,777777
+2c,0
+2,777777
+1
+3,777777
+2,1
+4,777777
+1
+2,777777
+1
+7,777777
+1
+6,777777
+1
+2,777777
+1
+2,777777
+1
+3,777777
+1
+f,777777
+2c,0
+2,777777
+1
+3,777777
+1
+777777
+1
+3,777777
+1
+2,777777
+1
+7,777777
+1
+6,777777
+1
+2,777777
+1
+2,777777
+1
+2,777777
+2,1
+f,777777
+2c,0
+2,777777
+1
+2,777777
+1
+3,777777
+1
+2,777777
+1
+2,777777
+1
+777777
+1
+2,777777
+4,1
+6,777777
+1
+777777
+1
+4,777777
+4,1
+f,777777
+2c,0
+2,777777
+1
+777777
+1
+5,777777
+1
+777777
+1
+3,777777
+1
+2,777777
+1
+3,777777
+2,1
+5,777777
+2,1
+8,777777
+1
+f,777777
+2c,0
+2,777777
+1
+9,777777
+1
+3,777777
+1
+2,777777
+1
+3,777777
+1
+777777
+1
+4,777777
+1
+9,777777
+1
+f,777777
+2c,0
+2,777777
+b,1
+3,777777
+1
+3,777777
+3,1
+7,777777
+b,1
+f,777777
+2c,0
+2,777777
+1
+9,777777
+1
+11,777777
+1
+9,777777
+1
+f,777777
+1ab7,0
+100 90 32
+325,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+1ab7,0
+100 90 32
+325,0
+16,2
+1
+3,2
+1
+6,2
+1
+3,2
+1
+b,2
+2,1
+5,2
+2c,0
+2,2
+b,1
+2,2
+1
+7,2
+1
+3,2
+1
+5,2
+1
+3,2
+1
+a,2
+2,1
+6,2
+2c,0
+2,2
+1
+4,2
+1
+4,2
+1
+3,2
+1
+6,2
+1
+2
+1
+3,2
+d,1
+5,2
+1
+8,2
+2c,0
+2,2
+1
+4,2
+1
+4,2
+1
+3,2
+1
+2
+1
+4,2
+4,1
+6,2
+1
+3,2
+1
+12,2
+2c,0
+2,2
+1
+4,2
+1
+4,2
+1
+3,2
+1
+2,2
+5,1
+5,2
+d,1
+e,2
+2c,0
+2,2
+b,1
+2,2
+1
+7,2
+1
+9,2
+1
+2,2
+1
+13,2
+2c,0
+2,2
+1
+4,2
+1
+4,2
+1
+2,2
+1
+7,2
+1
+6,2
+b,1
+f,2
+2c,0
+2,2
+1
+3,2
+2,1
+4,2
+1
+2,2
+1
+7,2
+1
+6,2
+1
+2,2
+1
+2,2
+1
+3,2
+1
+f,2
+2c,0
+2,2
+1
+3,2
+1
+2
+1
+3,2
+1
+2,2
+1
+7,2
+1
+6,2
+1
+2,2
+1
+2,2
+1
+2,2
+2,1
+f,2
+2c,0
+2,2
+1
+2,2
+1
+3,2
+1
+2,2
+1
+2,2
+1
+2
+1
+2,2
+4,1
+6,2
+1
+2
+1
+4,2
+4,1
+f,2
+2c,0
+2,2
+1
+2
+1
+5,2
+1
+2
+1
+3,2
+1
+2,2
+1
+3,2
+2,1
+5,2
+2,1
+8,2
+1
+f,2
+2c,0
+2,2
+1
+9,2
+1
+3,2
+1
+2,2
+1
+3,2
+1
+2
+1
+4,2
+1
+9,2
+1
+f,2
+2c,0
+2,2
+b,1
+3,2
+1
+3,2
+3,1
+7,2
+b,1
+f,2
+2c,0
+2,2
+1
+9,2
+1
+11,2
+1
+9,2
+1
+f,2
+1ab7,0
+100 90 32
+325,0
+16,3
+1
+3,3
+1
+6,3
+1
+3,3
+1
+b,3
+2,1
+5,3
+2c,0
+2,3
+b,1
+2,3
+1
+7,3
+1
+3,3
+1
+5,3
+1
+3,3
+1
+a,3
+2,1
+6,3
+2c,0
+2,3
+1
+4,3
+1
+4,3
+1
+3,3
+1
+6,3
+1
+3
+1
+3,3
+d,1
+5,3
+1
+8,3
+2c,0
+2,3
+1
+4,3
+1
+4,3
+1
+3,3
+1
+3
+1
+4,3
+4,1
+6,3
+1
+3,3
+1
+12,3
+2c,0
+2,3
+1
+4,3
+1
+4,3
+1
+3,3
+1
+2,3
+5,1
+5,3
+d,1
+e,3
+2c,0
+2,3
+b,1
+2,3
+1
+7,3
+1
+9,3
+1
+2,3
+1
+13,3
+2c,0
+2,3
+1
+4,3
+1
+4,3
+1
+2,3
+1
+7,3
+1
+6,3
+b,1
+f,3
+2c,0
+2,3
+1
+3,3
+2,1
+4,3
+1
+2,3
+1
+7,3
+1
+6,3
+1
+2,3
+1
+2,3
+1
+3,3
+1
+f,3
+2c,0
+2,3
+1
+3,3
+1
+3
+1
+3,3
+1
+2,3
+1
+7,3
+1
+6,3
+1
+2,3
+1
+2,3
+1
+2,3
+2,1
+f,3
+2c,0
+2,3
+1
+2,3
+1
+3,3
+1
+2,3
+1
+2,3
+1
+3
+1
+2,3
+4,1
+6,3
+1
+3
+1
+4,3
+4,1
+f,3
+2c,0
+2,3
+1
+3
+1
+5,3
+1
+3
+1
+3,3
+1
+2,3
+1
+3,3
+2,1
+5,3
+2,1
+8,3
+1
+f,3
+2c,0
+2,3
+1
+9,3
+1
+3,3
+1
+2,3
+1
+3,3
+1
+3
+1
+4,3
+1
+9,3
+1
+f,3
+2c,0
+2,3
+b,1
+3,3
+1
+3,3
+3,1
+7,3
+b,1
+f,3
+2c,0
+2,3
+1
+9,3
+1
+11,3
+1
+9,3
+1
+f,3
+1ab7,0
+100 90 32
+325,0
+16,4
+1
+3,4
+1
+6,4
+1
+3,4
+1
+b,4
+2,1
+5,4
+2c,0
+2,4
+b,1
+2,4
+1
+7,4
+1
+3,4
+1
+5,4
+1
+3,4
+1
+a,4
+2,1
+6,4
+2c,0
+2,4
+1
+4,4
+1
+4,4
+1
+3,4
+1
+6,4
+1
+4
+1
+3,4
+d,1
+5,4
+1
+8,4
+2c,0
+2,4
+1
+4,4
+1
+4,4
+1
+3,4
+1
+4
+1
+4,4
+4,1
+6,4
+1
+3,4
+1
+12,4
+2c,0
+2,4
+1
+4,4
+1
+4,4
+1
+3,4
+1
+2,4
+5,1
+5,4
+d,1
+e,4
+2c,0
+2,4
+b,1
+2,4
+1
+7,4
+1
+9,4
+1
+2,4
+1
+13,4
+2c,0
+2,4
+1
+4,4
+1
+4,4
+1
+2,4
+1
+7,4
+1
+6,4
+b,1
+f,4
+2c,0
+2,4
+1
+3,4
+2,1
+4,4
+1
+2,4
+1
+7,4
+1
+6,4
+1
+2,4
+1
+2,4
+1
+3,4
+1
+f,4
+2c,0
+2,4
+1
+3,4
+1
+4
+1
+3,4
+1
+2,4
+1
+7,4
+1
+6,4
+1
+2,4
+1
+2,4
+1
+2,4
+2,1
+f,4
+2c,0
+2,4
+1
+2,4
+1
+3,4
+1
+2,4
+1
+2,4
+1
+4
+1
+2,4
+4,1
+6,4
+1
+4
+1
+4,4
+4,1
+f,4
+2c,0
+2,4
+1
+4
+1
+5,4
+1
+4
+1
+3,4
+1
+2,4
+1
+3,4
+2,1
+5,4
+2,1
+8,4
+1
+f,4
+2c,0
+2,4
+1
+9,4
+1
+3,4
+1
+2,4
+1
+3,4
+1
+4
+1
+4,4
+1
+9,4
+1
+f,4
+2c,0
+2,4
+b,1
+3,4
+1
+3,4
+3,1
+7,4
+b,1
+f,4
+2c,0
+2,4
+1
+9,4
+1
+11,4
+1
+9,4
+1
+f,4
+1ab7,0
+100 90 32
+325,0
+16,6
+1
+3,6
+1
+6,6
+1
+3,6
+1
+b,6
+2,1
+5,6
+2c,0
+2,6
+b,1
+2,6
+1
+7,6
+1
+3,6
+1
+5,6
+1
+3,6
+1
+a,6
+2,1
+6,6
+2c,0
+2,6
+1
+4,6
+1
+4,6
+1
+3,6
+1
+6,6
+1
+6
+1
+3,6
+d,1
+5,6
+1
+8,6
+2c,0
+2,6
+1
+4,6
+1
+4,6
+1
+3,6
+1
+6
+1
+4,6
+4,1
+6,6
+1
+3,6
+1
+12,6
+2c,0
+2,6
+1
+4,6
+1
+4,6
+1
+3,6
+1
+2,6
+5,1
+5,6
+d,1
+e,6
+2c,0
+2,6
+b,1
+2,6
+1
+7,6
+1
+9,6
+1
+2,6
+1
+13,6
+2c,0
+2,6
+1
+4,6
+1
+4,6
+1
+2,6
+1
+7,6
+1
+6,6
+b,1
+f,6
+2c,0
+2,6
+1
+3,6
+2,1
+4,6
+1
+2,6
+1
+7,6
+1
+6,6
+1
+2,6
+1
+2,6
+1
+3,6
+1
+f,6
+2c,0
+2,6
+1
+3,6
+1
+6
+1
+3,6
+1
+2,6
+1
+7,6
+1
+6,6
+1
+2,6
+1
+2,6
+1
+2,6
+2,1
+f,6
+2c,0
+2,6
+1
+2,6
+1
+3,6
+1
+2,6
+1
+2,6
+1
+6
+1
+2,6
+4,1
+6,6
+1
+6
+1
+4,6
+4,1
+f,6
+2c,0
+2,6
+1
+6
+1
+5,6
+1
+6
+1
+3,6
+1
+2,6
+1
+3,6
+2,1
+5,6
+2,1
+8,6
+1
+f,6
+2c,0
+2,6
+1
+9,6
+1
+3,6
+1
+2,6
+1
+3,6
+1
+6
+1
+4,6
+1
+9,6
+1
+f,6
+2c,0
+2,6
+b,1
+3,6
+1
+3,6
+3,1
+7,6
+b,1
+f,6
+2c,0
+2,6
+1
+9,6
+1
+11,6
+1
+9,6
+1
+f,6
+1ab7,0
+100 90 32
+325,0
+16,7
+1
+3,7
+1
+6,7
+1
+3,7
+1
+b,7
+2,1
+5,7
+2c,0
+2,7
+b,1
+2,7
+1
+7,7
+1
+3,7
+1
+5,7
+1
+3,7
+1
+a,7
+2,1
+6,7
+2c,0
+2,7
+1
+4,7
+1
+4,7
+1
+3,7
+1
+6,7
+1
+7
+1
+3,7
+d,1
+5,7
+1
+8,7
+2c,0
+2,7
+1
+4,7
+1
+4,7
+1
+3,7
+1
+7
+1
+4,7
+4,1
+6,7
+1
+3,7
+1
+12,7
+2c,0
+2,7
+1
+4,7
+1
+4,7
+1
+3,7
+1
+2,7
+5,1
+5,7
+d,1
+e,7
+2c,0
+2,7
+b,1
+2,7
+1
+7,7
+1
+9,7
+1
+2,7
+1
+13,7
+2c,0
+2,7
+1
+4,7
+1
+4,7
+1
+2,7
+1
+7,7
+1
+6,7
+b,1
+f,7
+2c,0
+2,7
+1
+3,7
+2,1
+4,7
+1
+2,7
+1
+7,7
+1
+6,7
+1
+2,7
+1
+2,7
+1
+3,7
+1
+f,7
+2c,0
+2,7
+1
+3,7
+1
+7
+1
+3,7
+1
+2,7
+1
+7,7
+1
+6,7
+1
+2,7
+1
+2,7
+1
+2,7
+2,1
+f,7
+2c,0
+2,7
+1
+2,7
+1
+3,7
+1
+2,7
+1
+2,7
+1
+7
+1
+2,7
+4,1
+6,7
+1
+7
+1
+4,7
+4,1
+f,7
+2c,0
+2,7
+1
+7
+1
+5,7
+1
+7
+1
+3,7
+1
+2,7
+1
+3,7
+2,1
+5,7
+2,1
+8,7
+1
+f,7
+2c,0
+2,7
+1
+9,7
+1
+3,7
+1
+2,7
+1
+3,7
+1
+7
+1
+4,7
+1
+9,7
+1
+f,7
+2c,0
+2,7
+b,1
+3,7
+1
+3,7
+3,1
+7,7
+b,1
+f,7
+2c,0
+2,7
+1
+9,7
+1
+11,7
+1
+9,7
+1
+f,7
+1ab7,0
+100 90 32
+325,0
+16,10
+1
+3,10
+1
+6,10
+1
+3,10
+1
+b,10
+2,1
+5,10
+2c,0
+2,10
+b,1
+2,10
+1
+7,10
+1
+3,10
+1
+5,10
+1
+3,10
+1
+a,10
+2,1
+6,10
+2c,0
+2,10
+1
+4,10
+1
+4,10
+1
+3,10
+1
+6,10
+1
+10
+1
+3,10
+d,1
+5,10
+1
+8,10
+2c,0
+2,10
+1
+4,10
+1
+4,10
+1
+3,10
+1
+10
+1
+4,10
+4,1
+6,10
+1
+3,10
+1
+12,10
+2c,0
+2,10
+1
+4,10
+1
+4,10
+1
+3,10
+1
+2,10
+5,1
+5,10
+d,1
+e,10
+2c,0
+2,10
+b,1
+2,10
+1
+7,10
+1
+9,10
+1
+2,10
+1
+13,10
+2c,0
+2,10
+1
+4,10
+1
+4,10
+1
+2,10
+1
+7,10
+1
+6,10
+b,1
+f,10
+2c,0
+2,10
+1
+3,10
+2,1
+4,10
+1
+2,10
+1
+7,10
+1
+6,10
+1
+2,10
+1
+2,10
+1
+3,10
+1
+f,10
+2c,0
+2,10
+1
+3,10
+1
+10
+1
+3,10
+1
+2,10
+1
+7,10
+1
+6,10
+1
+2,10
+1
+2,10
+1
+2,10
+2,1
+f,10
+2c,0
+2,10
+1
+2,10
+1
+3,10
+1
+2,10
+1
+2,10
+1
+10
+1
+2,10
+4,1
+6,10
+1
+10
+1
+4,10
+4,1
+f,10
+2c,0
+2,10
+1
+10
+1
+5,10
+1
+10
+1
+3,10
+1
+2,10
+1
+3,10
+2,1
+5,10
+2,1
+8,10
+1
+f,10
+2c,0
+2,10
+1
+9,10
+1
+3,10
+1
+2,10
+1
+3,10
+1
+10
+1
+4,10
+1
+9,10
+1
+f,10
+2c,0
+2,10
+b,1
+3,10
+1
+3,10
+3,1
+7,10
+b,1
+f,10
+2c,0
+2,10
+1
+9,10
+1
+11,10
+1
+9,10
+1
+f,10
+1ab7,0
+100 90 32
+325,0
+16,33
+1
+3,33
+1
+6,33
+1
+3,33
+1
+b,33
+2,1
+5,33
+2c,0
+2,33
+b,1
+2,33
+1
+7,33
+1
+3,33
+1
+5,33
+1
+3,33
+1
+a,33
+2,1
+6,33
+2c,0
+2,33
+1
+4,33
+1
+4,33
+1
+3,33
+1
+6,33
+1
+33
+1
+3,33
+d,1
+5,33
+1
+8,33
+2c,0
+2,33
+1
+4,33
+1
+4,33
+1
+3,33
+1
+33
+1
+4,33
+4,1
+6,33
+1
+3,33
+1
+12,33
+2c,0
+2,33
+1
+4,33
+1
+4,33
+1
+3,33
+1
+2,33
+5,1
+5,33
+d,1
+e,33
+2c,0
+2,33
+b,1
+2,33
+1
+7,33
+1
+9,33
+1
+2,33
+1
+13,33
+2c,0
+2,33
+1
+4,33
+1
+4,33
+1
+2,33
+1
+7,33
+1
+6,33
+b,1
+f,33
+2c,0
+2,33
+1
+3,33
+2,1
+4,33
+1
+2,33
+1
+7,33
+1
+6,33
+1
+2,33
+1
+2,33
+1
+3,33
+1
+f,33
+2c,0
+2,33
+1
+3,33
+1
+33
+1
+3,33
+1
+2,33
+1
+7,33
+1
+6,33
+1
+2,33
+1
+2,33
+1
+2,33
+2,1
+f,33
+2c,0
+2,33
+1
+2,33
+1
+3,33
+1
+2,33
+1
+2,33
+1
+33
+1
+2,33
+4,1
+6,33
+1
+33
+1
+4,33
+4,1
+f,33
+2c,0
+2,33
+1
+33
+1
+5,33
+1
+33
+1
+3,33
+1
+2,33
+1
+3,33
+2,1
+5,33
+2,1
+8,33
+1
+f,33
+2c,0
+2,33
+1
+9,33
+1
+3,33
+1
+2,33
+1
+3,33
+1
+33
+1
+4,33
+1
+9,33
+1
+f,33
+2c,0
+2,33
+b,1
+3,33
+1
+3,33
+3,1
+7,33
+b,1
+f,33
+2c,0
+2,33
+1
+9,33
+1
+11,33
+1
+9,33
+1
+f,33
+1ab7,0
+100 90 32
+325,0
+16,81
+1
+3,81
+1
+6,81
+1
+3,81
+1
+b,81
+2,1
+5,81
+2c,0
+2,81
+b,1
+2,81
+1
+7,81
+1
+3,81
+1
+5,81
+1
+3,81
+1
+a,81
+2,1
+6,81
+2c,0
+2,81
+1
+4,81
+1
+4,81
+1
+3,81
+1
+6,81
+1
+81
+1
+3,81
+d,1
+5,81
+1
+8,81
+2c,0
+2,81
+1
+4,81
+1
+4,81
+1
+3,81
+1
+81
+1
+4,81
+4,1
+6,81
+1
+3,81
+1
+12,81
+2c,0
+2,81
+1
+4,81
+1
+4,81
+1
+3,81
+1
+2,81
+5,1
+5,81
+d,1
+e,81
+2c,0
+2,81
+b,1
+2,81
+1
+7,81
+1
+9,81
+1
+2,81
+1
+13,81
+2c,0
+2,81
+1
+4,81
+1
+4,81
+1
+2,81
+1
+7,81
+1
+6,81
+b,1
+f,81
+2c,0
+2,81
+1
+3,81
+2,1
+4,81
+1
+2,81
+1
+7,81
+1
+6,81
+1
+2,81
+1
+2,81
+1
+3,81
+1
+f,81
+2c,0
+2,81
+1
+3,81
+1
+81
+1
+3,81
+1
+2,81
+1
+7,81
+1
+6,81
+1
+2,81
+1
+2,81
+1
+2,81
+2,1
+f,81
+2c,0
+2,81
+1
+2,81
+1
+3,81
+1
+2,81
+1
+2,81
+1
+81
+1
+2,81
+4,1
+6,81
+1
+81
+1
+4,81
+4,1
+f,81
+2c,0
+2,81
+1
+81
+1
+5,81
+1
+81
+1
+3,81
+1
+2,81
+1
+3,81
+2,1
+5,81
+2,1
+8,81
+1
+f,81
+2c,0
+2,81
+1
+9,81
+1
+3,81
+1
+2,81
+1
+3,81
+1
+81
+1
+4,81
+1
+9,81
+1
+f,81
+2c,0
+2,81
+b,1
+3,81
+1
+3,81
+3,1
+7,81
+b,1
+f,81
+2c,0
+2,81
+1
+9,81
+1
+11,81
+1
+9,81
+1
+f,81
+1ab7,0
+100 90 32
+325,0
+16,a3
+1
+3,a3
+1
+6,a3
+1
+3,a3
+1
+b,a3
+2,1
+5,a3
+2c,0
+2,a3
+b,1
+2,a3
+1
+7,a3
+1
+3,a3
+1
+5,a3
+1
+3,a3
+1
+a,a3
+2,1
+6,a3
+2c,0
+2,a3
+1
+4,a3
+1
+4,a3
+1
+3,a3
+1
+6,a3
+1
+a3
+1
+3,a3
+d,1
+5,a3
+1
+8,a3
+2c,0
+2,a3
+1
+4,a3
+1
+4,a3
+1
+3,a3
+1
+a3
+1
+4,a3
+4,1
+6,a3
+1
+3,a3
+1
+12,a3
+2c,0
+2,a3
+1
+4,a3
+1
+4,a3
+1
+3,a3
+1
+2,a3
+5,1
+5,a3
+d,1
+e,a3
+2c,0
+2,a3
+b,1
+2,a3
+1
+7,a3
+1
+9,a3
+1
+2,a3
+1
+13,a3
+2c,0
+2,a3
+1
+4,a3
+1
+4,a3
+1
+2,a3
+1
+7,a3
+1
+6,a3
+b,1
+f,a3
+2c,0
+2,a3
+1
+3,a3
+2,1
+4,a3
+1
+2,a3
+1
+7,a3
+1
+6,a3
+1
+2,a3
+1
+2,a3
+1
+3,a3
+1
+f,a3
+2c,0
+2,a3
+1
+3,a3
+1
+a3
+1
+3,a3
+1
+2,a3
+1
+7,a3
+1
+6,a3
+1
+2,a3
+1
+2,a3
+1
+2,a3
+2,1
+f,a3
+2c,0
+2,a3
+1
+2,a3
+1
+3,a3
+1
+2,a3
+1
+2,a3
+1
+a3
+1
+2,a3
+4,1
+6,a3
+1
+a3
+1
+4,a3
+4,1
+f,a3
+2c,0
+2,a3
+1
+a3
+1
+5,a3
+1
+a3
+1
+3,a3
+1
+2,a3
+1
+3,a3
+2,1
+5,a3
+2,1
+8,a3
+1
+f,a3
+2c,0
+2,a3
+1
+9,a3
+1
+3,a3
+1
+2,a3
+1
+3,a3
+1
+a3
+1
+4,a3
+1
+9,a3
+1
+f,a3
+2c,0
+2,a3
+b,1
+3,a3
+1
+3,a3
+3,1
+7,a3
+b,1
+f,a3
+2c,0
+2,a3
+1
+9,a3
+1
+11,a3
+1
+9,a3
+1
+f,a3
+1ab7,0
+100 90 32
+325,0
+16,ff
+1
+3,ff
+1
+6,ff
+1
+3,ff
+1
+b,ff
+2,1
+5,ff
+2c,0
+2,ff
+b,1
+2,ff
+1
+7,ff
+1
+3,ff
+1
+5,ff
+1
+3,ff
+1
+a,ff
+2,1
+6,ff
+2c,0
+2,ff
+1
+4,ff
+1
+4,ff
+1
+3,ff
+1
+6,ff
+1
+ff
+1
+3,ff
+d,1
+5,ff
+1
+8,ff
+2c,0
+2,ff
+1
+4,ff
+1
+4,ff
+1
+3,ff
+1
+ff
+1
+4,ff
+4,1
+6,ff
+1
+3,ff
+1
+12,ff
+2c,0
+2,ff
+1
+4,ff
+1
+4,ff
+1
+3,ff
+1
+2,ff
+5,1
+5,ff
+d,1
+e,ff
+2c,0
+2,ff
+b,1
+2,ff
+1
+7,ff
+1
+9,ff
+1
+2,ff
+1
+13,ff
+2c,0
+2,ff
+1
+4,ff
+1
+4,ff
+1
+2,ff
+1
+7,ff
+1
+6,ff
+b,1
+f,ff
+2c,0
+2,ff
+1
+3,ff
+2,1
+4,ff
+1
+2,ff
+1
+7,ff
+1
+6,ff
+1
+2,ff
+1
+2,ff
+1
+3,ff
+1
+f,ff
+2c,0
+2,ff
+1
+3,ff
+1
+ff
+1
+3,ff
+1
+2,ff
+1
+7,ff
+1
+6,ff
+1
+2,ff
+1
+2,ff
+1
+2,ff
+2,1
+f,ff
+2c,0
+2,ff
+1
+2,ff
+1
+3,ff
+1
+2,ff
+1
+2,ff
+1
+ff
+1
+2,ff
+4,1
+6,ff
+1
+ff
+1
+4,ff
+4,1
+f,ff
+2c,0
+2,ff
+1
+ff
+1
+5,ff
+1
+ff
+1
+3,ff
+1
+2,ff
+1
+3,ff
+2,1
+5,ff
+2,1
+8,ff
+1
+f,ff
+2c,0
+2,ff
+1
+9,ff
+1
+3,ff
+1
+2,ff
+1
+3,ff
+1
+ff
+1
+4,ff
+1
+9,ff
+1
+f,ff
+2c,0
+2,ff
+b,1
+3,ff
+1
+3,ff
+3,1
+7,ff
+b,1
+f,ff
+2c,0
+2,ff
+1
+9,ff
+1
+11,ff
+1
+9,ff
+1
+f,ff
+1ab7,0
+100 90 32
+325,0
+16,100
+1
+3,100
+1
+6,100
+1
+3,100
+1
+b,100
+2,1
+5,100
+2c,0
+2,100
+b,1
+2,100
+1
+7,100
+1
+3,100
+1
+5,100
+1
+3,100
+1
+a,100
+2,1
+6,100
+2c,0
+2,100
+1
+4,100
+1
+4,100
+1
+3,100
+1
+6,100
+1
+100
+1
+3,100
+d,1
+5,100
+1
+8,100
+2c,0
+2,100
+1
+4,100
+1
+4,100
+1
+3,100
+1
+100
+1
+4,100
+4,1
+6,100
+1
+3,100
+1
+12,100
+2c,0
+2,100
+1
+4,100
+1
+4,100
+1
+3,100
+1
+2,100
+5,1
+5,100
+d,1
+e,100
+2c,0
+2,100
+b,1
+2,100
+1
+7,100
+1
+9,100
+1
+2,100
+1
+13,100
+2c,0
+2,100
+1
+4,100
+1
+4,100
+1
+2,100
+1
+7,100
+1
+6,100
+b,1
+f,100
+2c,0
+2,100
+1
+3,100
+2,1
+4,100
+1
+2,100
+1
+7,100
+1
+6,100
+1
+2,100
+1
+2,100
+1
+3,100
+1
+f,100
+2c,0
+2,100
+1
+3,100
+1
+100
+1
+3,100
+1
+2,100
+1
+7,100
+1
+6,100
+1
+2,100
+1
+2,100
+1
+2,100
+2,1
+f,100
+2c,0
+2,100
+1
+2,100
+1
+3,100
+1
+2,100
+1
+2,100
+1
+100
+1
+2,100
+4,1
+6,100
+1
+100
+1
+4,100
+4,1
+f,100
+2c,0
+2,100
+1
+100
+1
+5,100
+1
+100
+1
+3,100
+1
+2,100
+1
+3,100
+2,1
+5,100
+2,1
+8,100
+1
+f,100
+2c,0
+2,100
+1
+9,100
+1
+3,100
+1
+2,100
+1
+3,100
+1
+100
+1
+4,100
+1
+9,100
+1
+f,100
+2c,0
+2,100
+b,1
+3,100
+1
+3,100
+3,1
+7,100
+b,1
+f,100
+2c,0
+2,100
+1
+9,100
+1
+11,100
+1
+9,100
+1
+f,100
+1ab7,0
+100 90 32
+325,0
+16,12c
+1
+3,12c
+1
+6,12c
+1
+3,12c
+1
+b,12c
+2,1
+5,12c
+2c,0
+2,12c
+b,1
+2,12c
+1
+7,12c
+1
+3,12c
+1
+5,12c
+1
+3,12c
+1
+a,12c
+2,1
+6,12c
+2c,0
+2,12c
+1
+4,12c
+1
+4,12c
+1
+3,12c
+1
+6,12c
+1
+12c
+1
+3,12c
+d,1
+5,12c
+1
+8,12c
+2c,0
+2,12c
+1
+4,12c
+1
+4,12c
+1
+3,12c
+1
+12c
+1
+4,12c
+4,1
+6,12c
+1
+3,12c
+1
+12,12c
+2c,0
+2,12c
+1
+4,12c
+1
+4,12c
+1
+3,12c
+1
+2,12c
+5,1
+5,12c
+d,1
+e,12c
+2c,0
+2,12c
+b,1
+2,12c
+1
+7,12c
+1
+9,12c
+1
+2,12c
+1
+13,12c
+2c,0
+2,12c
+1
+4,12c
+1
+4,12c
+1
+2,12c
+1
+7,12c
+1
+6,12c
+b,1
+f,12c
+2c,0
+2,12c
+1
+3,12c
+2,1
+4,12c
+1
+2,12c
+1
+7,12c
+1
+6,12c
+1
+2,12c
+1
+2,12c
+1
+3,12c
+1
+f,12c
+2c,0
+2,12c
+1
+3,12c
+1
+12c
+1
+3,12c
+1
+2,12c
+1
+7,12c
+1
+6,12c
+1
+2,12c
+1
+2,12c
+1
+2,12c
+2,1
+f,12c
+2c,0
+2,12c
+1
+2,12c
+1
+3,12c
+1
+2,12c
+1
+2,12c
+1
+12c
+1
+2,12c
+4,1
+6,12c
+1
+12c
+1
+4,12c
+4,1
+f,12c
+2c,0
+2,12c
+1
+12c
+1
+5,12c
+1
+12c
+1
+3,12c
+1
+2,12c
+1
+3,12c
+2,1
+5,12c
+2,1
+8,12c
+1
+f,12c
+2c,0
+2,12c
+1
+9,12c
+1
+3,12c
+1
+2,12c
+1
+3,12c
+1
+12c
+1
+4,12c
+1
+9,12c
+1
+f,12c
+2c,0
+2,12c
+b,1
+3,12c
+1
+3,12c
+3,1
+7,12c
+b,1
+f,12c
+2c,0
+2,12c
+1
+9,12c
+1
+11,12c
+1
+9,12c
+1
+f,12c
+1ab7,0
+100 90 32
+325,0
+16,3e8
+1
+3,3e8
+1
+6,3e8
+1
+3,3e8
+1
+b,3e8
+2,1
+5,3e8
+2c,0
+2,3e8
+b,1
+2,3e8
+1
+7,3e8
+1
+3,3e8
+1
+5,3e8
+1
+3,3e8
+1
+a,3e8
+2,1
+6,3e8
+2c,0
+2,3e8
+1
+4,3e8
+1
+4,3e8
+1
+3,3e8
+1
+6,3e8
+1
+3e8
+1
+3,3e8
+d,1
+5,3e8
+1
+8,3e8
+2c,0
+2,3e8
+1
+4,3e8
+1
+4,3e8
+1
+3,3e8
+1
+3e8
+1
+4,3e8
+4,1
+6,3e8
+1
+3,3e8
+1
+12,3e8
+2c,0
+2,3e8
+1
+4,3e8
+1
+4,3e8
+1
+3,3e8
+1
+2,3e8
+5,1
+5,3e8
+d,1
+e,3e8
+2c,0
+2,3e8
+b,1
+2,3e8
+1
+7,3e8
+1
+9,3e8
+1
+2,3e8
+1
+13,3e8
+2c,0
+2,3e8
+1
+4,3e8
+1
+4,3e8
+1
+2,3e8
+1
+7,3e8
+1
+6,3e8
+b,1
+f,3e8
+2c,0
+2,3e8
+1
+3,3e8
+2,1
+4,3e8
+1
+2,3e8
+1
+7,3e8
+1
+6,3e8
+1
+2,3e8
+1
+2,3e8
+1
+3,3e8
+1
+f,3e8
+2c,0
+2,3e8
+1
+3,3e8
+1
+3e8
+1
+3,3e8
+1
+2,3e8
+1
+7,3e8
+1
+6,3e8
+1
+2,3e8
+1
+2,3e8
+1
+2,3e8
+2,1
+f,3e8
+2c,0
+2,3e8
+1
+2,3e8
+1
+3,3e8
+1
+2,3e8
+1
+2,3e8
+1
+3e8
+1
+2,3e8
+4,1
+6,3e8
+1
+3e8
+1
+4,3e8
+4,1
+f,3e8
+2c,0
+2,3e8
+1
+3e8
+1
+5,3e8
+1
+3e8
+1
+3,3e8
+1
+2,3e8
+1
+3,3e8
+2,1
+5,3e8
+2,1
+8,3e8
+1
+f,3e8
+2c,0
+2,3e8
+1
+9,3e8
+1
+3,3e8
+1
+2,3e8
+1
+3,3e8
+1
+3e8
+1
+4,3e8
+1
+9,3e8
+1
+f,3e8
+2c,0
+2,3e8
+b,1
+3,3e8
+1
+3,3e8
+3,1
+7,3e8
+b,1
+f,3e8
+2c,0
+2,3e8
+1
+9,3e8
+1
+11,3e8
+1
+9,3e8
+1
+f,3e8
+1ab7,0
+100 90 32
+325,0
+16,111111
+1
+3,111111
+1
+6,111111
+1
+3,111111
+1
+b,111111
+2,1
+5,111111
+2c,0
+2,111111
+b,1
+2,111111
+1
+7,111111
+1
+3,111111
+1
+5,111111
+1
+3,111111
+1
+a,111111
+2,1
+6,111111
+2c,0
+2,111111
+1
+4,111111
+1
+4,111111
+1
+3,111111
+1
+6,111111
+1
+111111
+1
+3,111111
+d,1
+5,111111
+1
+8,111111
+2c,0
+2,111111
+1
+4,111111
+1
+4,111111
+1
+3,111111
+1
+111111
+1
+4,111111
+4,1
+6,111111
+1
+3,111111
+1
+12,111111
+2c,0
+2,111111
+1
+4,111111
+1
+4,111111
+1
+3,111111
+1
+2,111111
+5,1
+5,111111
+d,1
+e,111111
+2c,0
+2,111111
+b,1
+2,111111
+1
+7,111111
+1
+9,111111
+1
+2,111111
+1
+13,111111
+2c,0
+2,111111
+1
+4,111111
+1
+4,111111
+1
+2,111111
+1
+7,111111
+1
+6,111111
+b,1
+f,111111
+2c,0
+2,111111
+1
+3,111111
+2,1
+4,111111
+1
+2,111111
+1
+7,111111
+1
+6,111111
+1
+2,111111
+1
+2,111111
+1
+3,111111
+1
+f,111111
+2c,0
+2,111111
+1
+3,111111
+1
+111111
+1
+3,111111
+1
+2,111111
+1
+7,111111
+1
+6,111111
+1
+2,111111
+1
+2,111111
+1
+2,111111
+2,1
+f,111111
+2c,0
+2,111111
+1
+2,111111
+1
+3,111111
+1
+2,111111
+1
+2,111111
+1
+111111
+1
+2,111111
+4,1
+6,111111
+1
+111111
+1
+4,111111
+4,1
+f,111111
+2c,0
+2,111111
+1
+111111
+1
+5,111111
+1
+111111
+1
+3,111111
+1
+2,111111
+1
+3,111111
+2,1
+5,111111
+2,1
+8,111111
+1
+f,111111
+2c,0
+2,111111
+1
+9,111111
+1
+3,111111
+1
+2,111111
+1
+3,111111
+1
+111111
+1
+4,111111
+1
+9,111111
+1
+f,111111
+2c,0
+2,111111
+b,1
+3,111111
+1
+3,111111
+3,1
+7,111111
+b,1
+f,111111
+2c,0
+2,111111
+1
+9,111111
+1
+11,111111
+1
+9,111111
+1
+f,111111
+1ab7,0
+100 90 32
+325,0
+16,400200
+1
+3,400200
+1
+6,400200
+1
+3,400200
+1
+b,400200
+2,1
+5,400200
+2c,0
+2,400200
+b,1
+2,400200
+1
+7,400200
+1
+3,400200
+1
+5,400200
+1
+3,400200
+1
+a,400200
+2,1
+6,400200
+2c,0
+2,400200
+1
+4,400200
+1
+4,400200
+1
+3,400200
+1
+6,400200
+1
+400200
+1
+3,400200
+d,1
+5,400200
+1
+8,400200
+2c,0
+2,400200
+1
+4,400200
+1
+4,400200
+1
+3,400200
+1
+400200
+1
+4,400200
+4,1
+6,400200
+1
+3,400200
+1
+12,400200
+2c,0
+2,400200
+1
+4,400200
+1
+4,400200
+1
+3,400200
+1
+2,400200
+5,1
+5,400200
+d,1
+e,400200
+2c,0
+2,400200
+b,1
+2,400200
+1
+7,400200
+1
+9,400200
+1
+2,400200
+1
+13,400200
+2c,0
+2,400200
+1
+4,400200
+1
+4,400200
+1
+2,400200
+1
+7,400200
+1
+6,400200
+b,1
+f,400200
+2c,0
+2,400200
+1
+3,400200
+2,1
+4,400200
+1
+2,400200
+1
+7,400200
+1
+6,400200
+1
+2,400200
+1
+2,400200
+1
+3,400200
+1
+f,400200
+2c,0
+2,400200
+1
+3,400200
+1
+400200
+1
+3,400200
+1
+2,400200
+1
+7,400200
+1
+6,400200
+1
+2,400200
+1
+2,400200
+1
+2,400200
+2,1
+f,400200
+2c,0
+2,400200
+1
+2,400200
+1
+3,400200
+1
+2,400200
+1
+2,400200
+1
+400200
+1
+2,400200
+4,1
+6,400200
+1
+400200
+1
+4,400200
+4,1
+f,400200
+2c,0
+2,400200
+1
+400200
+1
+5,400200
+1
+400200
+1
+3,400200
+1
+2,400200
+1
+3,400200
+2,1
+5,400200
+2,1
+8,400200
+1
+f,400200
+2c,0
+2,400200
+1
+9,400200
+1
+3,400200
+1
+2,400200
+1
+3,400200
+1
+400200
+1
+4,400200
+1
+9,400200
+1
+f,400200
+2c,0
+2,400200
+b,1
+3,400200
+1
+3,400200
+3,1
+7,400200
+b,1
+f,400200
+2c,0
+2,400200
+1
+9,400200
+1
+11,400200
+1
+9,400200
+1
+f,400200
+1ab7,0
+100 90 32
+325,0
+16,777777
+1
+3,777777
+1
+6,777777
+1
+3,777777
+1
+b,777777
+2,1
+5,777777
+2c,0
+2,777777
+b,1
+2,777777
+1
+7,777777
+1
+3,777777
+1
+5,777777
+1
+3,777777
+1
+a,777777
+2,1
+6,777777
+2c,0
+2,777777
+1
+4,777777
+1
+4,777777
+1
+3,777777
+1
+6,777777
+1
+777777
+1
+3,777777
+d,1
+5,777777
+1
+8,777777
+2c,0
+2,777777
+1
+4,777777
+1
+4,777777
+1
+3,777777
+1
+777777
+1
+4,777777
+4,1
+6,777777
+1
+3,777777
+1
+12,777777
+2c,0
+2,777777
+1
+4,777777
+1
+4,777777
+1
+3,777777
+1
+2,777777
+5,1
+5,777777
+d,1
+e,777777
+2c,0
+2,777777
+b,1
+2,777777
+1
+7,777777
+1
+9,777777
+1
+2,777777
+1
+13,777777
+2c,0
+2,777777
+1
+4,777777
+1
+4,777777
+1
+2,777777
+1
+7,777777
+1
+6,777777
+b,1
+f,777777
+2c,0
+2,777777
+1
+3,777777
+2,1
+4,777777
+1
+2,777777
+1
+7,777777
+1
+6,777777
+1
+2,777777
+1
+2,777777
+1
+3,777777
+1
+f,777777
+2c,0
+2,777777
+1
+3,777777
+1
+777777
+1
+3,777777
+1
+2,777777
+1
+7,777777
+1
+6,777777
+1
+2,777777
+1
+2,777777
+1
+2,777777
+2,1
+f,777777
+2c,0
+2,777777
+1
+2,777777
+1
+3,777777
+1
+2,777777
+1
+2,777777
+1
+777777
+1
+2,777777
+4,1
+6,777777
+1
+777777
+1
+4,777777
+4,1
+f,777777
+2c,0
+2,777777
+1
+777777
+1
+5,777777
+1
+777777
+1
+3,777777
+1
+2,777777
+1
+3,777777
+2,1
+5,777777
+2,1
+8,777777
+1
+f,777777
+2c,0
+2,777777
+1
+9,777777
+1
+3,777777
+1
+2,777777
+1
+3,777777
+1
+777777
+1
+4,777777
+1
+9,777777
+1
+f,777777
+2c,0
+2,777777
+b,1
+3,777777
+1
+3,777777
+3,1
+7,777777
+b,1
+f,777777
+2c,0
+2,777777
+1
+9,777777
+1
+11,777777
+1
+9,777777
+1
+f,777777
+1ab7,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a3.dat b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a3.dat
new file mode 100644
index 000000000..922dd25f4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/a3.dat
@@ -0,0 +1,3188 @@
+! $XConsortium$
+100 90 32
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+7,1
+c8,0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+c,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+7,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+7,1
+c8,0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+c,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+7,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+7,1
+c8,0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+c,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+7,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+7,1
+c8,0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+c,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+7,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+7,1
+c8,0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+e,1
+0
+c,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+1
+0
+2,1
+0
+4,1
+0
+4,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+1
+0
+2,1
+0
+3,1
+2,0
+4,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+1
+0
+2,1
+0
+3,1
+0
+1
+0
+3,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+2,1
+0
+1
+0
+7,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+b,0
+1
+0
+2,1
+8,0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+9,1
+0
+1
+0
+2,1
+0
+7,1
+320,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgst16/drwimgst16.m b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/drwimgst16.m
new file mode 100644
index 000000000..c4756c00c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgst16/drwimgst16.m
@@ -0,0 +1,234 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawImageString16 CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+int x = 5;
+int y = 20;
+XChar2b *string = defstr;
+int length = NELEM(defstr);
+>>EXTERN
+
+/* Needed because function not used */
+#define A_DRAW A_DRAWABLE
+
+static XChar2b defstr[] = {
+ {1, 74},
+ {1, 79},
+ {48, 120},
+ {36, 116},
+ {36, 80},
+ {48, 43},
+ {33, 45},
+};
+
+static Font Xtfonts[XT_NFONTS];
+
+>>SET startup localstartup
+>>SET cleanup fontcleanup
+static void
+localstartup()
+{
+ fontstartup();
+ if(Dsp) {
+ openfonts(Xtfonts, XT_NFONTS);
+ setgcfont(Xtfonts[2]);
+ }
+}
+
+static void
+rev(disp, gc)
+Display *disp;
+GC gc;
+{
+ XSetForeground(disp, gc, W_BG);
+ XSetBackground(disp, gc, W_FG);
+}
+
+>>ASSERTION Good A
+A call to xname first fills the destination rectangle with the
+.M background
+pixel value and next draws a
+.A string
+of 2-byte or 16-bit characters, selected from the
+.A gc 's
+.M font ,
+using the
+.M foreground
+pixel value.
+>>STRATEGY
+Reverse foreground and background.
+Draw string
+Pixmap verify
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ rev(display, gc);
+
+ XSetFont(display, gc, Xtfonts[2]);
+ x = 2;
+ y = 30;
+ XCALL;
+
+ XSetFont(display, gc, Xtfonts[6]);
+ x = 100;
+ y = 60;
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION def
+>># NOTE is it always the Top-left corner, what if font is R-to-L ??? Ask Bob?
+The upper-left corner of the filled rectangle is at
+[
+.A x ,
+.A y
+- max-ascent],
+with width equal to the sum of the per-character
+.M width s,
+and with height
+font-ascent + font-descent,
+where font-ascent and font-descent
+are the logical ascent and descent of the
+.M font .
+>>ASSERTION Good A
+The origin of the string is at
+[
+.A x ,
+.A y
+].
+>>STRATEGY
+Vary x and y
+Call XDrawImageString16 to draw string.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+unsigned int width, height;
+
+ /* Restrict length of string */
+ length = 3;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ rev(display, gc);
+
+ getsize(display, d, &width, &height);
+
+ for (x = 0; x < width; x += 15) {
+ for (y = 0; y < height; y += 16) {
+ XCALL;
+ }
+ }
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+The effective
+.M function
+is
+.S GXcopy ,
+and the effective
+.M fill_style
+is
+.S FillSolid .
+>>STRATEGY
+Set gc function to GXxor
+Set fill-style to FillTiled
+Set Tile.
+Verify that these settings have no effect.
+>>CODE
+XVisualInfo *vp;
+XImage *sav;
+Pixmap tile;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ rev(display, gc);
+
+ XCALL;
+ sav = savimage(display, d);
+ dclear(display, d);
+
+ tile = makepixm(display, vp);
+ pattern(display, tile);
+
+ XSetFunction(display, gc, GXxor);
+ XSetFillStyle(display, gc, FillTiled);
+ XSetTile(display, gc, tile);
+
+ XCALL;
+ XCALL;
+
+ if (compsavimage(display, d, sav))
+ CHECK;
+ else {
+ report("Effective function and fill style afected result");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good B 3
+When fonts are defined with linear indexing rather than 2-byte matrix indexing,
+then each
+.S XChar2b
+structure is interpreted as a 16-bit number with byte1 as the
+most-significant byte.
+>>ASSERTION gc
+On a call to xname the GC components
+.M plane-mask ,
+.M font ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground
+and
+.M background
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY kieron Completed Checked and passed ac
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a1.dat
new file mode 100644
index 000000000..9301d3878
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a1.dat
@@ -0,0 +1,2327 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+7d3,0
+46,1
+1e,0
+46,1
+1e,0
+1
+4,0
+9,1
+2,0
+6,1
+4,0
+6,1
+2,0
+1
+6,0
+2,1
+3,0
+3,1
+0
+4,1
+0
+9,1
+4,0
+2,1
+20,0
+2,1
+2,0
+8,1
+2,0
+5,1
+2,0
+2,1
+2,0
+5,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+1
+20,0
+2,1
+2,0
+8,1
+2,0
+5,1
+2,0
+9,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+6,0
+8,1
+2,0
+2,1
+2,0
+1
+20,0
+2,1
+2,0
+8,1
+5,0
+2,1
+2,0
+6,1
+5,0
+1
+2,0
+7,1
+2,0
+3,1
+6,0
+1
+5,0
+2,1
+2,0
+2,1
+2,0
+1
+24,0
+8,1
+2,0
+2,1
+2,0
+1
+2,0
+5,1
+2,0
+2,1
+2,0
+1
+5,0
+4,1
+2,0
+3,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+20,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+1
+2,0
+5,1
+2,0
+2,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+20,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+1
+2,0
+5,1
+2,0
+2,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+20,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+20,0
+2,1
+2,0
+8,1
+5,0
+3,1
+4,0
+3,1
+5,0
+1
+6,0
+1
+6,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+1e,0
+46,1
+1e,0
+46,1
+165f,0
+100 90 32
+2328,0
+100 90 32
+76f,0
+52,1
+12,0
+3,1
+2,0
+b,1
+2,0
+8,1
+5,0
+7,1
+2,0
+1
+7,0
+1
+2,0
+1
+3,0
+5,1
+3,0
+b,1
+5,0
+3,1
+12,0
+3,1
+2,0
+b,1
+2,0
+7,1
+2,0
+3,1
+2,0
+6,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+3,0
+5,1
+3,0
+a,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+4,0
+a,1
+2,0
+6,1
+2,0
+4,1
+2,0
+6,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+4,0
+3,1
+4,0
+9,1
+2,0
+5,1
+2,0
+1
+12,0
+2,1
+4,0
+a,1
+6,0
+2,1
+2,0
+8,1
+6,0
+1
+2,0
+6,1
+2,0
+1
+4,0
+3,1
+4,0
+1
+6,0
+2,1
+2,0
+5,1
+2,0
+1
+12,0
+2,1
+0
+2,1
+0
+a,1
+2,0
+3,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+2,0
+1
+6,0
+2,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+5,1
+2,0
+1
+12,0
+1
+2,0
+2,1
+2,0
+9,1
+2,0
+3,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+5,1
+2,0
+1
+12,0
+1
+6,0
+9,1
+2,0
+3,1
+2,0
+1
+2,0
+4,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+5,1
+2,0
+1
+12,0
+1
+2,0
+2,1
+2,0
+9,1
+2,0
+3,1
+2,0
+1
+2,0
+4,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+2,1
+3,0
+2,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+5,1
+2,0
+1
+14,0
+4,1
+2,0
+8,1
+2,0
+3,1
+2,0
+2,1
+2,0
+3,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+2,1
+3,0
+2,1
+2,0
+1
+2,0
+3,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+14,0
+4,1
+2,0
+8,1
+6,0
+4,1
+5,0
+3,1
+6,0
+1
+7,0
+1
+2,0
+1
+2,0
+3,1
+0
+3,1
+2,0
+1
+2,0
+3,1
+2,0
+3,1
+5,0
+3,1
+12,0
+52,1
+12,0
+52,1
+12,0
+52,1
+1653,0
+100 90 32
+77a,0
+52,1
+12,0
+3,1
+5,0
+b,1
+3,0
+5,1
+3,0
+1
+2,0
+1
+7,0
+1
+2,0
+7,1
+5,0
+8,1
+2,0
+b,1
+2,0
+3,1
+12,0
+2,1
+2,0
+3,1
+2,0
+a,1
+3,0
+5,1
+3,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+6,1
+2,0
+3,1
+2,0
+7,1
+2,0
+b,1
+2,0
+3,1
+12,0
+1
+2,0
+5,1
+2,0
+9,1
+4,0
+3,1
+4,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+6,1
+2,0
+4,1
+2,0
+6,1
+2,0
+a,1
+4,0
+2,1
+12,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+1
+4,0
+3,1
+4,0
+1
+2,0
+6,1
+2,0
+1
+6,0
+8,1
+2,0
+2,1
+6,0
+a,1
+4,0
+2,1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+6,0
+1
+2,0
+3,1
+2,0
+7,1
+2,0
+1
+2,0
+3,1
+2,0
+a,1
+0
+2,1
+0
+2,1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+7,1
+2,0
+1
+2,0
+3,1
+2,0
+9,1
+2,0
+2,1
+2,0
+1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+4,1
+2,0
+1
+2,0
+3,1
+2,0
+9,1
+6,0
+1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+2,1
+3,0
+2,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+4,1
+2,0
+1
+2,0
+3,1
+2,0
+9,1
+2,0
+2,1
+2,0
+1
+12,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+3,1
+2,0
+1
+2,0
+2,1
+3,0
+2,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+3,1
+2,0
+2,1
+2,0
+3,1
+2,0
+8,1
+2,0
+4,1
+14,0
+3,1
+5,0
+3,1
+2,0
+3,1
+2,0
+1
+2,0
+3,1
+0
+3,1
+2,0
+1
+2,0
+1
+7,0
+1
+6,0
+3,1
+5,0
+4,1
+6,0
+8,1
+2,0
+4,1
+14,0
+52,1
+12,0
+52,1
+12,0
+52,1
+1648,0
+100 90 32
+2328,0
+100 90 32
+77a,0
+52,1
+12,0
+3,1
+5,0
+b,1
+3,0
+5,1
+3,0
+1
+2,0
+1
+7,0
+1
+2,0
+7,1
+5,0
+8,1
+2,0
+b,1
+2,0
+3,1
+12,0
+2,1
+2,0
+3,1
+2,0
+a,1
+3,0
+5,1
+3,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+6,1
+2,0
+3,1
+2,0
+7,1
+2,0
+b,1
+2,0
+3,1
+12,0
+1
+2,0
+5,1
+2,0
+9,1
+4,0
+3,1
+4,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+6,1
+2,0
+4,1
+2,0
+6,1
+2,0
+a,1
+4,0
+2,1
+12,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+1
+4,0
+3,1
+4,0
+1
+2,0
+6,1
+2,0
+1
+6,0
+8,1
+2,0
+2,1
+6,0
+a,1
+4,0
+2,1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+6,0
+1
+2,0
+3,1
+2,0
+7,1
+2,0
+1
+2,0
+3,1
+2,0
+a,1
+0
+2,1
+0
+2,1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+7,1
+2,0
+1
+2,0
+3,1
+2,0
+9,1
+2,0
+2,1
+2,0
+1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+4,1
+2,0
+1
+2,0
+3,1
+2,0
+9,1
+6,0
+1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+2,1
+3,0
+2,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+4,1
+2,0
+1
+2,0
+3,1
+2,0
+9,1
+2,0
+2,1
+2,0
+1
+12,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+3,1
+2,0
+1
+2,0
+2,1
+3,0
+2,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+3,1
+2,0
+2,1
+2,0
+3,1
+2,0
+8,1
+2,0
+4,1
+14,0
+3,1
+5,0
+3,1
+2,0
+3,1
+2,0
+1
+2,0
+3,1
+0
+3,1
+2,0
+1
+2,0
+1
+7,0
+1
+6,0
+3,1
+5,0
+4,1
+6,0
+8,1
+2,0
+4,1
+14,0
+52,1
+12,0
+52,1
+12,0
+52,1
+1648,0
+100 90 32
+7d3,0
+46,1
+1e,0
+46,1
+1e,0
+1
+4,0
+9,1
+2,0
+6,1
+4,0
+6,1
+2,0
+1
+6,0
+2,1
+3,0
+3,1
+0
+4,1
+0
+9,1
+4,0
+2,1
+20,0
+2,1
+2,0
+8,1
+2,0
+5,1
+2,0
+2,1
+2,0
+5,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+1
+20,0
+2,1
+2,0
+8,1
+2,0
+5,1
+2,0
+9,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+6,0
+8,1
+2,0
+2,1
+2,0
+1
+20,0
+2,1
+2,0
+8,1
+5,0
+2,1
+2,0
+6,1
+5,0
+1
+2,0
+7,1
+2,0
+3,1
+6,0
+1
+5,0
+2,1
+2,0
+2,1
+2,0
+1
+24,0
+8,1
+2,0
+2,1
+2,0
+1
+2,0
+5,1
+2,0
+2,1
+2,0
+1
+5,0
+4,1
+2,0
+3,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+20,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+1
+2,0
+5,1
+2,0
+2,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+20,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+1
+2,0
+5,1
+2,0
+2,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+20,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+20,0
+2,1
+2,0
+8,1
+5,0
+3,1
+4,0
+3,1
+5,0
+1
+6,0
+1
+6,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+1e,0
+46,1
+1e,0
+46,1
+165f,0
+100 90 32
+2328,0
+100 90 32
+76f,0
+52,1
+12,0
+3,1
+2,0
+b,1
+2,0
+8,1
+5,0
+7,1
+2,0
+1
+7,0
+1
+2,0
+1
+3,0
+5,1
+3,0
+b,1
+5,0
+3,1
+12,0
+3,1
+2,0
+b,1
+2,0
+7,1
+2,0
+3,1
+2,0
+6,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+3,0
+5,1
+3,0
+a,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+4,0
+a,1
+2,0
+6,1
+2,0
+4,1
+2,0
+6,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+4,0
+3,1
+4,0
+9,1
+2,0
+5,1
+2,0
+1
+12,0
+2,1
+4,0
+a,1
+6,0
+2,1
+2,0
+8,1
+6,0
+1
+2,0
+6,1
+2,0
+1
+4,0
+3,1
+4,0
+1
+6,0
+2,1
+2,0
+5,1
+2,0
+1
+12,0
+2,1
+0
+2,1
+0
+a,1
+2,0
+3,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+2,0
+1
+6,0
+2,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+5,1
+2,0
+1
+12,0
+1
+2,0
+2,1
+2,0
+9,1
+2,0
+3,1
+2,0
+1
+2,0
+7,1
+2,0
+3,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+5,1
+2,0
+1
+12,0
+1
+6,0
+9,1
+2,0
+3,1
+2,0
+1
+2,0
+4,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+5,1
+2,0
+1
+12,0
+1
+2,0
+2,1
+2,0
+9,1
+2,0
+3,1
+2,0
+1
+2,0
+4,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+2,1
+3,0
+2,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+5,1
+2,0
+1
+14,0
+4,1
+2,0
+8,1
+2,0
+3,1
+2,0
+2,1
+2,0
+3,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+2,1
+3,0
+2,1
+2,0
+1
+2,0
+3,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+14,0
+4,1
+2,0
+8,1
+6,0
+4,1
+5,0
+3,1
+6,0
+1
+7,0
+1
+2,0
+1
+2,0
+3,1
+0
+3,1
+2,0
+1
+2,0
+3,1
+2,0
+3,1
+5,0
+3,1
+12,0
+52,1
+12,0
+52,1
+12,0
+52,1
+1653,0
+100 90 32
+77a,0
+52,1
+12,0
+3,1
+5,0
+b,1
+3,0
+5,1
+3,0
+1
+2,0
+1
+7,0
+1
+2,0
+7,1
+5,0
+8,1
+2,0
+b,1
+2,0
+3,1
+12,0
+2,1
+2,0
+3,1
+2,0
+a,1
+3,0
+5,1
+3,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+6,1
+2,0
+3,1
+2,0
+7,1
+2,0
+b,1
+2,0
+3,1
+12,0
+1
+2,0
+5,1
+2,0
+9,1
+4,0
+3,1
+4,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+6,1
+2,0
+4,1
+2,0
+6,1
+2,0
+a,1
+4,0
+2,1
+12,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+1
+4,0
+3,1
+4,0
+1
+2,0
+6,1
+2,0
+1
+6,0
+8,1
+2,0
+2,1
+6,0
+a,1
+4,0
+2,1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+6,0
+1
+2,0
+3,1
+2,0
+7,1
+2,0
+1
+2,0
+3,1
+2,0
+a,1
+0
+2,1
+0
+2,1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+7,1
+2,0
+1
+2,0
+3,1
+2,0
+9,1
+2,0
+2,1
+2,0
+1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+4,1
+2,0
+1
+2,0
+3,1
+2,0
+9,1
+6,0
+1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+2,1
+3,0
+2,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+4,1
+2,0
+1
+2,0
+3,1
+2,0
+9,1
+2,0
+2,1
+2,0
+1
+12,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+3,1
+2,0
+1
+2,0
+2,1
+3,0
+2,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+3,1
+2,0
+2,1
+2,0
+3,1
+2,0
+8,1
+2,0
+4,1
+14,0
+3,1
+5,0
+3,1
+2,0
+3,1
+2,0
+1
+2,0
+3,1
+0
+3,1
+2,0
+1
+2,0
+1
+7,0
+1
+6,0
+3,1
+5,0
+4,1
+6,0
+8,1
+2,0
+4,1
+14,0
+52,1
+12,0
+52,1
+12,0
+52,1
+1648,0
+100 90 32
+2328,0
+100 90 32
+77a,0
+52,1
+12,0
+3,1
+5,0
+b,1
+3,0
+5,1
+3,0
+1
+2,0
+1
+7,0
+1
+2,0
+7,1
+5,0
+8,1
+2,0
+b,1
+2,0
+3,1
+12,0
+2,1
+2,0
+3,1
+2,0
+a,1
+3,0
+5,1
+3,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+6,1
+2,0
+3,1
+2,0
+7,1
+2,0
+b,1
+2,0
+3,1
+12,0
+1
+2,0
+5,1
+2,0
+9,1
+4,0
+3,1
+4,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+6,1
+2,0
+4,1
+2,0
+6,1
+2,0
+a,1
+4,0
+2,1
+12,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+1
+4,0
+3,1
+4,0
+1
+2,0
+6,1
+2,0
+1
+6,0
+8,1
+2,0
+2,1
+6,0
+a,1
+4,0
+2,1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+6,0
+1
+2,0
+3,1
+2,0
+7,1
+2,0
+1
+2,0
+3,1
+2,0
+a,1
+0
+2,1
+0
+2,1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+7,1
+2,0
+1
+2,0
+3,1
+2,0
+9,1
+2,0
+2,1
+2,0
+1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+4,1
+2,0
+1
+2,0
+3,1
+2,0
+9,1
+6,0
+1
+12,0
+1
+2,0
+5,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+2,1
+3,0
+2,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+4,1
+2,0
+1
+2,0
+3,1
+2,0
+9,1
+2,0
+2,1
+2,0
+1
+12,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+3,1
+2,0
+1
+2,0
+2,1
+3,0
+2,1
+2,0
+1
+2,0
+6,1
+2,0
+1
+2,0
+3,1
+2,0
+1
+2,0
+3,1
+2,0
+2,1
+2,0
+3,1
+2,0
+8,1
+2,0
+4,1
+14,0
+3,1
+5,0
+3,1
+2,0
+3,1
+2,0
+1
+2,0
+3,1
+0
+3,1
+2,0
+1
+2,0
+1
+7,0
+1
+6,0
+3,1
+5,0
+4,1
+6,0
+8,1
+2,0
+4,1
+14,0
+52,1
+12,0
+52,1
+12,0
+52,1
+1648,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a11.dat b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a11.dat
new file mode 100644
index 000000000..f94161956
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a11.dat
@@ -0,0 +1,417 @@
+! $XConsortium$
+100 90 32
+89c,0
+4,1
+9,0
+2,1
+6,0
+4,1
+4a,0
+2,1
+2,0
+2,1
+8,0
+2,1
+5,0
+2,1
+2,0
+2,1
+49,0
+2,1
+2,0
+2,1
+8,0
+2,1
+5,0
+2,1
+4d,0
+2,1
+2,0
+2,1
+8,0
+5,1
+2,0
+2,1
+6,0
+1
+46,0
+6,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+46,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+46,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+46,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+17b3,0
+100 90 32
+bbb,0
+2,1
+2,0
+2,1
+8,0
+5,1
+3,0
+4,1
+3,0
+1
+174f,0
+100 90 32
+2328,0
+100 90 32
+8bb,0
+2,1
+0
+6,1
+2,0
+3,1
+3,0
+1
+4,0
+1
+4d,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4d,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+6,1
+4b,0
+4,1
+0
+2,1
+7,0
+2,1
+3,0
+6,1
+0
+5,1
+47,0
+2,1
+0
+5,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1793,0
+100 90 32
+bd9,0
+4,1
+0
+6,1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+172f,0
+100 90 32
+2328,0
+100 90 32
+8db,0
+4,1
+5f,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+2,0
+2,1
+178c,0
+100 90 32
+bfb,0
+4,1
+1729,0
+100 90 32
+2328,0
+100 90 32
+bbb,0
+2,1
+2,0
+2,1
+8,0
+5,1
+3,0
+4,1
+3,0
+1
+174f,0
+100 90 32
+2328,0
+100 90 32
+8bb,0
+2,1
+0
+6,1
+2,0
+3,1
+3,0
+1
+4,0
+1
+4d,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4d,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+6,1
+4b,0
+4,1
+0
+2,1
+7,0
+2,1
+3,0
+6,1
+0
+5,1
+47,0
+2,1
+0
+5,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1793,0
+100 90 32
+bd9,0
+4,1
+0
+6,1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+172f,0
+100 90 32
+2328,0
+100 90 32
+8db,0
+4,1
+5f,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+2,0
+2,1
+178c,0
+100 90 32
+bfb,0
+4,1
+1729,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a14.dat b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a14.dat
new file mode 100644
index 000000000..1e8fefef2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a14.dat
@@ -0,0 +1,165 @@
+! $XConsortium$
+100 90 32
+89c,0
+4,1
+11,0
+4,1
+6,0
+1
+c,0
+1
+3,0
+1
+4,0
+1
+2d,0
+2,1
+c,0
+2,1
+5,0
+2,1
+2,0
+2,1
+6,0
+1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+c,0
+2,1
+2,0
+2,1
+1f,0
+1
+3,0
+2,1
+8,0
+1
+6,0
+2,1
+9,0
+2,1
+0
+2,1
+8,0
+1
+5,0
+4,1
+2e,0
+1
+2,0
+2,1
+9,0
+4,1
+2,0
+2,1
+6,0
+4,1
+b,0
+2,1
+3,0
+6,1
+0
+1
+6,0
+2,1
+2,0
+2,1
+1f,0
+6,1
+8,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+1
+0
+5,1
+5,0
+1
+3,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+2,1
+0
+2,1
+23,0
+2,1
+10,0
+2,1
+c,0
+2,1
+0
+1
+8,0
+1
+4,0
+2,1
+3,0
+1
+0
+2,1
+9,0
+2,1
+23,0
+2,1
+8,0
+2,1
+c,0
+2,1
+2,0
+1
+3,0
+1
+10,0
+2,1
+0
+1
+3,0
+2,1
+0
+2,1
+23,0
+1
+11,0
+2,1
+2,0
+1
+3,0
+1
+6,0
+1
+0
+2,1
+7,0
+1
+5,0
+1
+6,0
+1
+2,0
+2,1
+5,0
+2,1
+23,0
+2,1
+8,0
+4,1
+b,0
+3,1
+6,0
+3,1
+c,0
+2,1
+9,0
+2,1
+172b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a16.dat b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a16.dat
new file mode 100644
index 000000000..c276c3865
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a16.dat
@@ -0,0 +1,7823 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+89c,0
+4,1
+9,0
+2,1
+6,0
+4,1
+6,0
+2,1
+0
+6,1
+2,0
+3,1
+3,0
+1
+4,0
+1
+9,0
+4,1
+20,0
+2,1
+2,0
+2,1
+8,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+2,1
+5,0
+2,1
+9,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+6,1
+8,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+5,1
+2,0
+2,1
+6,0
+5,1
+0
+2,1
+7,0
+2,1
+3,0
+6,1
+0
+5,1
+2,0
+2,1
+2,0
+2,1
+1f,0
+6,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+5,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+5,1
+3,0
+4,1
+3,0
+5,1
+0
+6,1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+1729,0
+100 90 32
+89c,0
+4,2
+9,0
+2,2
+6,0
+4,2
+6,0
+2,2
+0
+6,2
+2,0
+3,2
+3,0
+2
+4,0
+2
+9,0
+4,2
+20,0
+2,2
+2,0
+2,2
+8,0
+2,2
+5,0
+2,2
+2,0
+2,2
+5,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+8,0
+2,2
+2,0
+2,2
+1f,0
+2,2
+2,0
+2,2
+8,0
+2,2
+5,0
+2,2
+9,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+6,2
+8,0
+2,2
+2,0
+2,2
+1f,0
+2,2
+2,0
+2,2
+8,0
+5,2
+2,0
+2,2
+6,0
+5,2
+0
+2,2
+7,0
+2,2
+3,0
+6,2
+0
+5,2
+2,0
+2,2
+2,0
+2,2
+1f,0
+6,2
+8,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+5,2
+4,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+1f,0
+2,2
+2,0
+2,2
+8,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+1f,0
+2,2
+2,0
+2,2
+8,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+1f,0
+2,2
+2,0
+2,2
+8,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+1f,0
+2,2
+2,0
+2,2
+8,0
+5,2
+3,0
+4,2
+3,0
+5,2
+0
+6,2
+0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+2,0
+4,2
+1729,0
+100 90 32
+89c,0
+4,3
+9,0
+2,3
+6,0
+4,3
+6,0
+2,3
+0
+6,3
+2,0
+3,3
+3,0
+3
+4,0
+3
+9,0
+4,3
+20,0
+2,3
+2,0
+2,3
+8,0
+2,3
+5,0
+2,3
+2,0
+2,3
+5,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+8,0
+2,3
+2,0
+2,3
+1f,0
+2,3
+2,0
+2,3
+8,0
+2,3
+5,0
+2,3
+9,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+6,3
+8,0
+2,3
+2,0
+2,3
+1f,0
+2,3
+2,0
+2,3
+8,0
+5,3
+2,0
+2,3
+6,0
+5,3
+0
+2,3
+7,0
+2,3
+3,0
+6,3
+0
+5,3
+2,0
+2,3
+2,0
+2,3
+1f,0
+6,3
+8,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+5,3
+4,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+1f,0
+2,3
+2,0
+2,3
+8,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+1f,0
+2,3
+2,0
+2,3
+8,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+1f,0
+2,3
+2,0
+2,3
+8,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+1f,0
+2,3
+2,0
+2,3
+8,0
+5,3
+3,0
+4,3
+3,0
+5,3
+0
+6,3
+0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+2,0
+4,3
+1729,0
+100 90 32
+89c,0
+4,4
+9,0
+2,4
+6,0
+4,4
+6,0
+2,4
+0
+6,4
+2,0
+3,4
+3,0
+4
+4,0
+4
+9,0
+4,4
+20,0
+2,4
+2,0
+2,4
+8,0
+2,4
+5,0
+2,4
+2,0
+2,4
+5,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+8,0
+2,4
+2,0
+2,4
+1f,0
+2,4
+2,0
+2,4
+8,0
+2,4
+5,0
+2,4
+9,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+6,4
+8,0
+2,4
+2,0
+2,4
+1f,0
+2,4
+2,0
+2,4
+8,0
+5,4
+2,0
+2,4
+6,0
+5,4
+0
+2,4
+7,0
+2,4
+3,0
+6,4
+0
+5,4
+2,0
+2,4
+2,0
+2,4
+1f,0
+6,4
+8,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+5,4
+4,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+1f,0
+2,4
+2,0
+2,4
+8,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+1f,0
+2,4
+2,0
+2,4
+8,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+1f,0
+2,4
+2,0
+2,4
+8,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+1f,0
+2,4
+2,0
+2,4
+8,0
+5,4
+3,0
+4,4
+3,0
+5,4
+0
+6,4
+0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+2,0
+4,4
+1729,0
+100 90 32
+89c,0
+4,6
+9,0
+2,6
+6,0
+4,6
+6,0
+2,6
+0
+6,6
+2,0
+3,6
+3,0
+6
+4,0
+6
+9,0
+4,6
+20,0
+2,6
+2,0
+2,6
+8,0
+2,6
+5,0
+2,6
+2,0
+2,6
+5,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+8,0
+2,6
+2,0
+2,6
+1f,0
+2,6
+2,0
+2,6
+8,0
+2,6
+5,0
+2,6
+9,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+6,6
+8,0
+2,6
+2,0
+2,6
+1f,0
+2,6
+2,0
+2,6
+8,0
+5,6
+2,0
+2,6
+6,0
+5,6
+0
+2,6
+7,0
+2,6
+3,0
+6,6
+0
+5,6
+2,0
+2,6
+2,0
+2,6
+1f,0
+6,6
+8,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+5,6
+4,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+1f,0
+2,6
+2,0
+2,6
+8,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+1f,0
+2,6
+2,0
+2,6
+8,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+1f,0
+2,6
+2,0
+2,6
+8,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+1f,0
+2,6
+2,0
+2,6
+8,0
+5,6
+3,0
+4,6
+3,0
+5,6
+0
+6,6
+0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+2,0
+4,6
+1729,0
+100 90 32
+89c,0
+4,7
+9,0
+2,7
+6,0
+4,7
+6,0
+2,7
+0
+6,7
+2,0
+3,7
+3,0
+7
+4,0
+7
+9,0
+4,7
+20,0
+2,7
+2,0
+2,7
+8,0
+2,7
+5,0
+2,7
+2,0
+2,7
+5,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+8,0
+2,7
+2,0
+2,7
+1f,0
+2,7
+2,0
+2,7
+8,0
+2,7
+5,0
+2,7
+9,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+6,7
+8,0
+2,7
+2,0
+2,7
+1f,0
+2,7
+2,0
+2,7
+8,0
+5,7
+2,0
+2,7
+6,0
+5,7
+0
+2,7
+7,0
+2,7
+3,0
+6,7
+0
+5,7
+2,0
+2,7
+2,0
+2,7
+1f,0
+6,7
+8,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+5,7
+4,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+1f,0
+2,7
+2,0
+2,7
+8,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+1f,0
+2,7
+2,0
+2,7
+8,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+1f,0
+2,7
+2,0
+2,7
+8,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+1f,0
+2,7
+2,0
+2,7
+8,0
+5,7
+3,0
+4,7
+3,0
+5,7
+0
+6,7
+0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+2,0
+4,7
+1729,0
+100 90 32
+89c,0
+4,10
+9,0
+2,10
+6,0
+4,10
+6,0
+2,10
+0
+6,10
+2,0
+3,10
+3,0
+10
+4,0
+10
+9,0
+4,10
+20,0
+2,10
+2,0
+2,10
+8,0
+2,10
+5,0
+2,10
+2,0
+2,10
+5,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+8,0
+2,10
+2,0
+2,10
+1f,0
+2,10
+2,0
+2,10
+8,0
+2,10
+5,0
+2,10
+9,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+6,10
+8,0
+2,10
+2,0
+2,10
+1f,0
+2,10
+2,0
+2,10
+8,0
+5,10
+2,0
+2,10
+6,0
+5,10
+0
+2,10
+7,0
+2,10
+3,0
+6,10
+0
+5,10
+2,0
+2,10
+2,0
+2,10
+1f,0
+6,10
+8,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+5,10
+4,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+1f,0
+2,10
+2,0
+2,10
+8,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+1f,0
+2,10
+2,0
+2,10
+8,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+1f,0
+2,10
+2,0
+2,10
+8,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+1f,0
+2,10
+2,0
+2,10
+8,0
+5,10
+3,0
+4,10
+3,0
+5,10
+0
+6,10
+0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+2,0
+4,10
+1729,0
+100 90 32
+89c,0
+4,33
+9,0
+2,33
+6,0
+4,33
+6,0
+2,33
+0
+6,33
+2,0
+3,33
+3,0
+33
+4,0
+33
+9,0
+4,33
+20,0
+2,33
+2,0
+2,33
+8,0
+2,33
+5,0
+2,33
+2,0
+2,33
+5,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+8,0
+2,33
+2,0
+2,33
+1f,0
+2,33
+2,0
+2,33
+8,0
+2,33
+5,0
+2,33
+9,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+6,33
+8,0
+2,33
+2,0
+2,33
+1f,0
+2,33
+2,0
+2,33
+8,0
+5,33
+2,0
+2,33
+6,0
+5,33
+0
+2,33
+7,0
+2,33
+3,0
+6,33
+0
+5,33
+2,0
+2,33
+2,0
+2,33
+1f,0
+6,33
+8,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+5,33
+4,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+1f,0
+2,33
+2,0
+2,33
+8,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+1f,0
+2,33
+2,0
+2,33
+8,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+1f,0
+2,33
+2,0
+2,33
+8,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+1f,0
+2,33
+2,0
+2,33
+8,0
+5,33
+3,0
+4,33
+3,0
+5,33
+0
+6,33
+0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+2,0
+4,33
+1729,0
+100 90 32
+89c,0
+4,81
+9,0
+2,81
+6,0
+4,81
+6,0
+2,81
+0
+6,81
+2,0
+3,81
+3,0
+81
+4,0
+81
+9,0
+4,81
+20,0
+2,81
+2,0
+2,81
+8,0
+2,81
+5,0
+2,81
+2,0
+2,81
+5,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+8,0
+2,81
+2,0
+2,81
+1f,0
+2,81
+2,0
+2,81
+8,0
+2,81
+5,0
+2,81
+9,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+6,81
+8,0
+2,81
+2,0
+2,81
+1f,0
+2,81
+2,0
+2,81
+8,0
+5,81
+2,0
+2,81
+6,0
+5,81
+0
+2,81
+7,0
+2,81
+3,0
+6,81
+0
+5,81
+2,0
+2,81
+2,0
+2,81
+1f,0
+6,81
+8,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+5,81
+4,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+1f,0
+2,81
+2,0
+2,81
+8,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+1f,0
+2,81
+2,0
+2,81
+8,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+1f,0
+2,81
+2,0
+2,81
+8,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+1f,0
+2,81
+2,0
+2,81
+8,0
+5,81
+3,0
+4,81
+3,0
+5,81
+0
+6,81
+0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+2,0
+4,81
+1729,0
+100 90 32
+89c,0
+4,a3
+9,0
+2,a3
+6,0
+4,a3
+6,0
+2,a3
+0
+6,a3
+2,0
+3,a3
+3,0
+a3
+4,0
+a3
+9,0
+4,a3
+20,0
+2,a3
+2,0
+2,a3
+8,0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+5,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+8,0
+2,a3
+2,0
+2,a3
+1f,0
+2,a3
+2,0
+2,a3
+8,0
+2,a3
+5,0
+2,a3
+9,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+6,a3
+8,0
+2,a3
+2,0
+2,a3
+1f,0
+2,a3
+2,0
+2,a3
+8,0
+5,a3
+2,0
+2,a3
+6,0
+5,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+6,a3
+0
+5,a3
+2,0
+2,a3
+2,0
+2,a3
+1f,0
+6,a3
+8,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+4,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+1f,0
+2,a3
+2,0
+2,a3
+8,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+1f,0
+2,a3
+2,0
+2,a3
+8,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+1f,0
+2,a3
+2,0
+2,a3
+8,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+1f,0
+2,a3
+2,0
+2,a3
+8,0
+5,a3
+3,0
+4,a3
+3,0
+5,a3
+0
+6,a3
+0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+2,0
+4,a3
+1729,0
+100 90 32
+89c,0
+4,ff
+9,0
+2,ff
+6,0
+4,ff
+6,0
+2,ff
+0
+6,ff
+2,0
+3,ff
+3,0
+ff
+4,0
+ff
+9,0
+4,ff
+20,0
+2,ff
+2,0
+2,ff
+8,0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+5,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+8,0
+2,ff
+2,0
+2,ff
+1f,0
+2,ff
+2,0
+2,ff
+8,0
+2,ff
+5,0
+2,ff
+9,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+6,ff
+8,0
+2,ff
+2,0
+2,ff
+1f,0
+2,ff
+2,0
+2,ff
+8,0
+5,ff
+2,0
+2,ff
+6,0
+5,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+6,ff
+0
+5,ff
+2,0
+2,ff
+2,0
+2,ff
+1f,0
+6,ff
+8,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+4,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+1f,0
+2,ff
+2,0
+2,ff
+8,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+1f,0
+2,ff
+2,0
+2,ff
+8,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+1f,0
+2,ff
+2,0
+2,ff
+8,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+1f,0
+2,ff
+2,0
+2,ff
+8,0
+5,ff
+3,0
+4,ff
+3,0
+5,ff
+0
+6,ff
+0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+2,0
+4,ff
+1729,0
+100 90 32
+89c,0
+4,100
+9,0
+2,100
+6,0
+4,100
+6,0
+2,100
+0
+6,100
+2,0
+3,100
+3,0
+100
+4,0
+100
+9,0
+4,100
+20,0
+2,100
+2,0
+2,100
+8,0
+2,100
+5,0
+2,100
+2,0
+2,100
+5,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+8,0
+2,100
+2,0
+2,100
+1f,0
+2,100
+2,0
+2,100
+8,0
+2,100
+5,0
+2,100
+9,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+6,100
+8,0
+2,100
+2,0
+2,100
+1f,0
+2,100
+2,0
+2,100
+8,0
+5,100
+2,0
+2,100
+6,0
+5,100
+0
+2,100
+7,0
+2,100
+3,0
+6,100
+0
+5,100
+2,0
+2,100
+2,0
+2,100
+1f,0
+6,100
+8,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+5,100
+4,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+1f,0
+2,100
+2,0
+2,100
+8,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+1f,0
+2,100
+2,0
+2,100
+8,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+1f,0
+2,100
+2,0
+2,100
+8,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+1f,0
+2,100
+2,0
+2,100
+8,0
+5,100
+3,0
+4,100
+3,0
+5,100
+0
+6,100
+0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+2,0
+4,100
+1729,0
+100 90 32
+89c,0
+4,12c
+9,0
+2,12c
+6,0
+4,12c
+6,0
+2,12c
+0
+6,12c
+2,0
+3,12c
+3,0
+12c
+4,0
+12c
+9,0
+4,12c
+20,0
+2,12c
+2,0
+2,12c
+8,0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+5,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+8,0
+2,12c
+2,0
+2,12c
+1f,0
+2,12c
+2,0
+2,12c
+8,0
+2,12c
+5,0
+2,12c
+9,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+6,12c
+8,0
+2,12c
+2,0
+2,12c
+1f,0
+2,12c
+2,0
+2,12c
+8,0
+5,12c
+2,0
+2,12c
+6,0
+5,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+6,12c
+0
+5,12c
+2,0
+2,12c
+2,0
+2,12c
+1f,0
+6,12c
+8,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+4,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+1f,0
+2,12c
+2,0
+2,12c
+8,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+1f,0
+2,12c
+2,0
+2,12c
+8,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+1f,0
+2,12c
+2,0
+2,12c
+8,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+1f,0
+2,12c
+2,0
+2,12c
+8,0
+5,12c
+3,0
+4,12c
+3,0
+5,12c
+0
+6,12c
+0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+2,0
+4,12c
+1729,0
+100 90 32
+89c,0
+4,3e8
+9,0
+2,3e8
+6,0
+4,3e8
+6,0
+2,3e8
+0
+6,3e8
+2,0
+3,3e8
+3,0
+3e8
+4,0
+3e8
+9,0
+4,3e8
+20,0
+2,3e8
+2,0
+2,3e8
+8,0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+5,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+8,0
+2,3e8
+2,0
+2,3e8
+1f,0
+2,3e8
+2,0
+2,3e8
+8,0
+2,3e8
+5,0
+2,3e8
+9,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+6,3e8
+8,0
+2,3e8
+2,0
+2,3e8
+1f,0
+2,3e8
+2,0
+2,3e8
+8,0
+5,3e8
+2,0
+2,3e8
+6,0
+5,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+6,3e8
+0
+5,3e8
+2,0
+2,3e8
+2,0
+2,3e8
+1f,0
+6,3e8
+8,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+4,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+1f,0
+2,3e8
+2,0
+2,3e8
+8,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+1f,0
+2,3e8
+2,0
+2,3e8
+8,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+1f,0
+2,3e8
+2,0
+2,3e8
+8,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+1f,0
+2,3e8
+2,0
+2,3e8
+8,0
+5,3e8
+3,0
+4,3e8
+3,0
+5,3e8
+0
+6,3e8
+0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+2,0
+4,3e8
+1729,0
+100 90 32
+89c,0
+4,111111
+9,0
+2,111111
+6,0
+4,111111
+6,0
+2,111111
+0
+6,111111
+2,0
+3,111111
+3,0
+111111
+4,0
+111111
+9,0
+4,111111
+20,0
+2,111111
+2,0
+2,111111
+8,0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+5,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+8,0
+2,111111
+2,0
+2,111111
+1f,0
+2,111111
+2,0
+2,111111
+8,0
+2,111111
+5,0
+2,111111
+9,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+6,111111
+8,0
+2,111111
+2,0
+2,111111
+1f,0
+2,111111
+2,0
+2,111111
+8,0
+5,111111
+2,0
+2,111111
+6,0
+5,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+6,111111
+0
+5,111111
+2,0
+2,111111
+2,0
+2,111111
+1f,0
+6,111111
+8,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+4,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+1f,0
+2,111111
+2,0
+2,111111
+8,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+1f,0
+2,111111
+2,0
+2,111111
+8,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+1f,0
+2,111111
+2,0
+2,111111
+8,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+1f,0
+2,111111
+2,0
+2,111111
+8,0
+5,111111
+3,0
+4,111111
+3,0
+5,111111
+0
+6,111111
+0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+2,0
+4,111111
+1729,0
+100 90 32
+89c,0
+4,400200
+9,0
+2,400200
+6,0
+4,400200
+6,0
+2,400200
+0
+6,400200
+2,0
+3,400200
+3,0
+400200
+4,0
+400200
+9,0
+4,400200
+20,0
+2,400200
+2,0
+2,400200
+8,0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+5,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+8,0
+2,400200
+2,0
+2,400200
+1f,0
+2,400200
+2,0
+2,400200
+8,0
+2,400200
+5,0
+2,400200
+9,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+6,400200
+8,0
+2,400200
+2,0
+2,400200
+1f,0
+2,400200
+2,0
+2,400200
+8,0
+5,400200
+2,0
+2,400200
+6,0
+5,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+6,400200
+0
+5,400200
+2,0
+2,400200
+2,0
+2,400200
+1f,0
+6,400200
+8,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+4,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+1f,0
+2,400200
+2,0
+2,400200
+8,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+1f,0
+2,400200
+2,0
+2,400200
+8,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+1f,0
+2,400200
+2,0
+2,400200
+8,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+1f,0
+2,400200
+2,0
+2,400200
+8,0
+5,400200
+3,0
+4,400200
+3,0
+5,400200
+0
+6,400200
+0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+2,0
+4,400200
+1729,0
+100 90 32
+89c,0
+4,777777
+9,0
+2,777777
+6,0
+4,777777
+6,0
+2,777777
+0
+6,777777
+2,0
+3,777777
+3,0
+777777
+4,0
+777777
+9,0
+4,777777
+20,0
+2,777777
+2,0
+2,777777
+8,0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+5,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+8,0
+2,777777
+2,0
+2,777777
+1f,0
+2,777777
+2,0
+2,777777
+8,0
+2,777777
+5,0
+2,777777
+9,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+6,777777
+8,0
+2,777777
+2,0
+2,777777
+1f,0
+2,777777
+2,0
+2,777777
+8,0
+5,777777
+2,0
+2,777777
+6,0
+5,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+6,777777
+0
+5,777777
+2,0
+2,777777
+2,0
+2,777777
+1f,0
+6,777777
+8,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+4,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+1f,0
+2,777777
+2,0
+2,777777
+8,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+1f,0
+2,777777
+2,0
+2,777777
+8,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+1f,0
+2,777777
+2,0
+2,777777
+8,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+1f,0
+2,777777
+2,0
+2,777777
+8,0
+5,777777
+3,0
+4,777777
+3,0
+5,777777
+0
+6,777777
+0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+2,0
+4,777777
+1729,0
+100 90 32
+89c,0
+4,1
+9,0
+2,1
+6,0
+4,1
+6,0
+2,1
+0
+6,1
+2,0
+3,1
+3,0
+1
+4,0
+1
+9,0
+4,1
+20,0
+2,1
+2,0
+2,1
+8,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+2,1
+5,0
+2,1
+9,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+6,1
+8,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+5,1
+2,0
+2,1
+6,0
+5,1
+0
+2,1
+7,0
+2,1
+3,0
+6,1
+0
+5,1
+2,0
+2,1
+2,0
+2,1
+1f,0
+6,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+5,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+5,1
+3,0
+4,1
+3,0
+5,1
+0
+6,1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+1729,0
+100 90 32
+89c,0
+4,2
+9,0
+2,2
+6,0
+4,2
+6,0
+2,2
+0
+6,2
+2,0
+3,2
+3,0
+2
+4,0
+2
+9,0
+4,2
+20,0
+2,2
+2,0
+2,2
+8,0
+2,2
+5,0
+2,2
+2,0
+2,2
+5,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+8,0
+2,2
+2,0
+2,2
+1f,0
+2,2
+2,0
+2,2
+8,0
+2,2
+5,0
+2,2
+9,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+6,2
+8,0
+2,2
+2,0
+2,2
+1f,0
+2,2
+2,0
+2,2
+8,0
+5,2
+2,0
+2,2
+6,0
+5,2
+0
+2,2
+7,0
+2,2
+3,0
+6,2
+0
+5,2
+2,0
+2,2
+2,0
+2,2
+1f,0
+6,2
+8,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+5,2
+4,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+1f,0
+2,2
+2,0
+2,2
+8,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+1f,0
+2,2
+2,0
+2,2
+8,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+1f,0
+2,2
+2,0
+2,2
+8,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+1f,0
+2,2
+2,0
+2,2
+8,0
+5,2
+3,0
+4,2
+3,0
+5,2
+0
+6,2
+0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+2,0
+4,2
+1729,0
+100 90 32
+89c,0
+4,3
+9,0
+2,3
+6,0
+4,3
+6,0
+2,3
+0
+6,3
+2,0
+3,3
+3,0
+3
+4,0
+3
+9,0
+4,3
+20,0
+2,3
+2,0
+2,3
+8,0
+2,3
+5,0
+2,3
+2,0
+2,3
+5,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+8,0
+2,3
+2,0
+2,3
+1f,0
+2,3
+2,0
+2,3
+8,0
+2,3
+5,0
+2,3
+9,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+6,3
+8,0
+2,3
+2,0
+2,3
+1f,0
+2,3
+2,0
+2,3
+8,0
+5,3
+2,0
+2,3
+6,0
+5,3
+0
+2,3
+7,0
+2,3
+3,0
+6,3
+0
+5,3
+2,0
+2,3
+2,0
+2,3
+1f,0
+6,3
+8,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+5,3
+4,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+1f,0
+2,3
+2,0
+2,3
+8,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+1f,0
+2,3
+2,0
+2,3
+8,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+1f,0
+2,3
+2,0
+2,3
+8,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+1f,0
+2,3
+2,0
+2,3
+8,0
+5,3
+3,0
+4,3
+3,0
+5,3
+0
+6,3
+0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+2,0
+4,3
+1729,0
+100 90 32
+89c,0
+4,4
+9,0
+2,4
+6,0
+4,4
+6,0
+2,4
+0
+6,4
+2,0
+3,4
+3,0
+4
+4,0
+4
+9,0
+4,4
+20,0
+2,4
+2,0
+2,4
+8,0
+2,4
+5,0
+2,4
+2,0
+2,4
+5,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+8,0
+2,4
+2,0
+2,4
+1f,0
+2,4
+2,0
+2,4
+8,0
+2,4
+5,0
+2,4
+9,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+6,4
+8,0
+2,4
+2,0
+2,4
+1f,0
+2,4
+2,0
+2,4
+8,0
+5,4
+2,0
+2,4
+6,0
+5,4
+0
+2,4
+7,0
+2,4
+3,0
+6,4
+0
+5,4
+2,0
+2,4
+2,0
+2,4
+1f,0
+6,4
+8,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+5,4
+4,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+1f,0
+2,4
+2,0
+2,4
+8,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+1f,0
+2,4
+2,0
+2,4
+8,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+1f,0
+2,4
+2,0
+2,4
+8,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+1f,0
+2,4
+2,0
+2,4
+8,0
+5,4
+3,0
+4,4
+3,0
+5,4
+0
+6,4
+0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+2,0
+4,4
+1729,0
+100 90 32
+89c,0
+4,6
+9,0
+2,6
+6,0
+4,6
+6,0
+2,6
+0
+6,6
+2,0
+3,6
+3,0
+6
+4,0
+6
+9,0
+4,6
+20,0
+2,6
+2,0
+2,6
+8,0
+2,6
+5,0
+2,6
+2,0
+2,6
+5,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+8,0
+2,6
+2,0
+2,6
+1f,0
+2,6
+2,0
+2,6
+8,0
+2,6
+5,0
+2,6
+9,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+6,6
+8,0
+2,6
+2,0
+2,6
+1f,0
+2,6
+2,0
+2,6
+8,0
+5,6
+2,0
+2,6
+6,0
+5,6
+0
+2,6
+7,0
+2,6
+3,0
+6,6
+0
+5,6
+2,0
+2,6
+2,0
+2,6
+1f,0
+6,6
+8,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+5,6
+4,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+1f,0
+2,6
+2,0
+2,6
+8,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+1f,0
+2,6
+2,0
+2,6
+8,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+1f,0
+2,6
+2,0
+2,6
+8,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+1f,0
+2,6
+2,0
+2,6
+8,0
+5,6
+3,0
+4,6
+3,0
+5,6
+0
+6,6
+0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+2,0
+4,6
+1729,0
+100 90 32
+89c,0
+4,7
+9,0
+2,7
+6,0
+4,7
+6,0
+2,7
+0
+6,7
+2,0
+3,7
+3,0
+7
+4,0
+7
+9,0
+4,7
+20,0
+2,7
+2,0
+2,7
+8,0
+2,7
+5,0
+2,7
+2,0
+2,7
+5,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+8,0
+2,7
+2,0
+2,7
+1f,0
+2,7
+2,0
+2,7
+8,0
+2,7
+5,0
+2,7
+9,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+6,7
+8,0
+2,7
+2,0
+2,7
+1f,0
+2,7
+2,0
+2,7
+8,0
+5,7
+2,0
+2,7
+6,0
+5,7
+0
+2,7
+7,0
+2,7
+3,0
+6,7
+0
+5,7
+2,0
+2,7
+2,0
+2,7
+1f,0
+6,7
+8,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+5,7
+4,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+1f,0
+2,7
+2,0
+2,7
+8,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+1f,0
+2,7
+2,0
+2,7
+8,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+1f,0
+2,7
+2,0
+2,7
+8,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+1f,0
+2,7
+2,0
+2,7
+8,0
+5,7
+3,0
+4,7
+3,0
+5,7
+0
+6,7
+0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+2,0
+4,7
+1729,0
+100 90 32
+89c,0
+4,10
+9,0
+2,10
+6,0
+4,10
+6,0
+2,10
+0
+6,10
+2,0
+3,10
+3,0
+10
+4,0
+10
+9,0
+4,10
+20,0
+2,10
+2,0
+2,10
+8,0
+2,10
+5,0
+2,10
+2,0
+2,10
+5,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+8,0
+2,10
+2,0
+2,10
+1f,0
+2,10
+2,0
+2,10
+8,0
+2,10
+5,0
+2,10
+9,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+6,10
+8,0
+2,10
+2,0
+2,10
+1f,0
+2,10
+2,0
+2,10
+8,0
+5,10
+2,0
+2,10
+6,0
+5,10
+0
+2,10
+7,0
+2,10
+3,0
+6,10
+0
+5,10
+2,0
+2,10
+2,0
+2,10
+1f,0
+6,10
+8,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+5,10
+4,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+1f,0
+2,10
+2,0
+2,10
+8,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+1f,0
+2,10
+2,0
+2,10
+8,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+1f,0
+2,10
+2,0
+2,10
+8,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+1f,0
+2,10
+2,0
+2,10
+8,0
+5,10
+3,0
+4,10
+3,0
+5,10
+0
+6,10
+0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+2,0
+4,10
+1729,0
+100 90 32
+89c,0
+4,33
+9,0
+2,33
+6,0
+4,33
+6,0
+2,33
+0
+6,33
+2,0
+3,33
+3,0
+33
+4,0
+33
+9,0
+4,33
+20,0
+2,33
+2,0
+2,33
+8,0
+2,33
+5,0
+2,33
+2,0
+2,33
+5,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+8,0
+2,33
+2,0
+2,33
+1f,0
+2,33
+2,0
+2,33
+8,0
+2,33
+5,0
+2,33
+9,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+6,33
+8,0
+2,33
+2,0
+2,33
+1f,0
+2,33
+2,0
+2,33
+8,0
+5,33
+2,0
+2,33
+6,0
+5,33
+0
+2,33
+7,0
+2,33
+3,0
+6,33
+0
+5,33
+2,0
+2,33
+2,0
+2,33
+1f,0
+6,33
+8,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+5,33
+4,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+1f,0
+2,33
+2,0
+2,33
+8,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+1f,0
+2,33
+2,0
+2,33
+8,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+1f,0
+2,33
+2,0
+2,33
+8,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+1f,0
+2,33
+2,0
+2,33
+8,0
+5,33
+3,0
+4,33
+3,0
+5,33
+0
+6,33
+0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+2,0
+4,33
+1729,0
+100 90 32
+89c,0
+4,81
+9,0
+2,81
+6,0
+4,81
+6,0
+2,81
+0
+6,81
+2,0
+3,81
+3,0
+81
+4,0
+81
+9,0
+4,81
+20,0
+2,81
+2,0
+2,81
+8,0
+2,81
+5,0
+2,81
+2,0
+2,81
+5,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+8,0
+2,81
+2,0
+2,81
+1f,0
+2,81
+2,0
+2,81
+8,0
+2,81
+5,0
+2,81
+9,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+6,81
+8,0
+2,81
+2,0
+2,81
+1f,0
+2,81
+2,0
+2,81
+8,0
+5,81
+2,0
+2,81
+6,0
+5,81
+0
+2,81
+7,0
+2,81
+3,0
+6,81
+0
+5,81
+2,0
+2,81
+2,0
+2,81
+1f,0
+6,81
+8,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+5,81
+4,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+1f,0
+2,81
+2,0
+2,81
+8,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+1f,0
+2,81
+2,0
+2,81
+8,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+1f,0
+2,81
+2,0
+2,81
+8,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+1f,0
+2,81
+2,0
+2,81
+8,0
+5,81
+3,0
+4,81
+3,0
+5,81
+0
+6,81
+0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+2,0
+4,81
+1729,0
+100 90 32
+89c,0
+4,a3
+9,0
+2,a3
+6,0
+4,a3
+6,0
+2,a3
+0
+6,a3
+2,0
+3,a3
+3,0
+a3
+4,0
+a3
+9,0
+4,a3
+20,0
+2,a3
+2,0
+2,a3
+8,0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+5,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+8,0
+2,a3
+2,0
+2,a3
+1f,0
+2,a3
+2,0
+2,a3
+8,0
+2,a3
+5,0
+2,a3
+9,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+6,a3
+8,0
+2,a3
+2,0
+2,a3
+1f,0
+2,a3
+2,0
+2,a3
+8,0
+5,a3
+2,0
+2,a3
+6,0
+5,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+6,a3
+0
+5,a3
+2,0
+2,a3
+2,0
+2,a3
+1f,0
+6,a3
+8,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+4,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+1f,0
+2,a3
+2,0
+2,a3
+8,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+1f,0
+2,a3
+2,0
+2,a3
+8,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+1f,0
+2,a3
+2,0
+2,a3
+8,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+1f,0
+2,a3
+2,0
+2,a3
+8,0
+5,a3
+3,0
+4,a3
+3,0
+5,a3
+0
+6,a3
+0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+2,0
+4,a3
+1729,0
+100 90 32
+89c,0
+4,ff
+9,0
+2,ff
+6,0
+4,ff
+6,0
+2,ff
+0
+6,ff
+2,0
+3,ff
+3,0
+ff
+4,0
+ff
+9,0
+4,ff
+20,0
+2,ff
+2,0
+2,ff
+8,0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+5,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+8,0
+2,ff
+2,0
+2,ff
+1f,0
+2,ff
+2,0
+2,ff
+8,0
+2,ff
+5,0
+2,ff
+9,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+6,ff
+8,0
+2,ff
+2,0
+2,ff
+1f,0
+2,ff
+2,0
+2,ff
+8,0
+5,ff
+2,0
+2,ff
+6,0
+5,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+6,ff
+0
+5,ff
+2,0
+2,ff
+2,0
+2,ff
+1f,0
+6,ff
+8,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+4,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+1f,0
+2,ff
+2,0
+2,ff
+8,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+1f,0
+2,ff
+2,0
+2,ff
+8,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+1f,0
+2,ff
+2,0
+2,ff
+8,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+1f,0
+2,ff
+2,0
+2,ff
+8,0
+5,ff
+3,0
+4,ff
+3,0
+5,ff
+0
+6,ff
+0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+2,0
+4,ff
+1729,0
+100 90 32
+89c,0
+4,100
+9,0
+2,100
+6,0
+4,100
+6,0
+2,100
+0
+6,100
+2,0
+3,100
+3,0
+100
+4,0
+100
+9,0
+4,100
+20,0
+2,100
+2,0
+2,100
+8,0
+2,100
+5,0
+2,100
+2,0
+2,100
+5,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+8,0
+2,100
+2,0
+2,100
+1f,0
+2,100
+2,0
+2,100
+8,0
+2,100
+5,0
+2,100
+9,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+6,100
+8,0
+2,100
+2,0
+2,100
+1f,0
+2,100
+2,0
+2,100
+8,0
+5,100
+2,0
+2,100
+6,0
+5,100
+0
+2,100
+7,0
+2,100
+3,0
+6,100
+0
+5,100
+2,0
+2,100
+2,0
+2,100
+1f,0
+6,100
+8,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+5,100
+4,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+1f,0
+2,100
+2,0
+2,100
+8,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+1f,0
+2,100
+2,0
+2,100
+8,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+1f,0
+2,100
+2,0
+2,100
+8,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+1f,0
+2,100
+2,0
+2,100
+8,0
+5,100
+3,0
+4,100
+3,0
+5,100
+0
+6,100
+0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+2,0
+4,100
+1729,0
+100 90 32
+89c,0
+4,12c
+9,0
+2,12c
+6,0
+4,12c
+6,0
+2,12c
+0
+6,12c
+2,0
+3,12c
+3,0
+12c
+4,0
+12c
+9,0
+4,12c
+20,0
+2,12c
+2,0
+2,12c
+8,0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+5,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+8,0
+2,12c
+2,0
+2,12c
+1f,0
+2,12c
+2,0
+2,12c
+8,0
+2,12c
+5,0
+2,12c
+9,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+6,12c
+8,0
+2,12c
+2,0
+2,12c
+1f,0
+2,12c
+2,0
+2,12c
+8,0
+5,12c
+2,0
+2,12c
+6,0
+5,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+6,12c
+0
+5,12c
+2,0
+2,12c
+2,0
+2,12c
+1f,0
+6,12c
+8,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+4,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+1f,0
+2,12c
+2,0
+2,12c
+8,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+1f,0
+2,12c
+2,0
+2,12c
+8,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+1f,0
+2,12c
+2,0
+2,12c
+8,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+1f,0
+2,12c
+2,0
+2,12c
+8,0
+5,12c
+3,0
+4,12c
+3,0
+5,12c
+0
+6,12c
+0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+2,0
+4,12c
+1729,0
+100 90 32
+89c,0
+4,3e8
+9,0
+2,3e8
+6,0
+4,3e8
+6,0
+2,3e8
+0
+6,3e8
+2,0
+3,3e8
+3,0
+3e8
+4,0
+3e8
+9,0
+4,3e8
+20,0
+2,3e8
+2,0
+2,3e8
+8,0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+5,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+8,0
+2,3e8
+2,0
+2,3e8
+1f,0
+2,3e8
+2,0
+2,3e8
+8,0
+2,3e8
+5,0
+2,3e8
+9,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+6,3e8
+8,0
+2,3e8
+2,0
+2,3e8
+1f,0
+2,3e8
+2,0
+2,3e8
+8,0
+5,3e8
+2,0
+2,3e8
+6,0
+5,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+6,3e8
+0
+5,3e8
+2,0
+2,3e8
+2,0
+2,3e8
+1f,0
+6,3e8
+8,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+4,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+1f,0
+2,3e8
+2,0
+2,3e8
+8,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+1f,0
+2,3e8
+2,0
+2,3e8
+8,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+1f,0
+2,3e8
+2,0
+2,3e8
+8,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+1f,0
+2,3e8
+2,0
+2,3e8
+8,0
+5,3e8
+3,0
+4,3e8
+3,0
+5,3e8
+0
+6,3e8
+0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+2,0
+4,3e8
+1729,0
+100 90 32
+89c,0
+4,111111
+9,0
+2,111111
+6,0
+4,111111
+6,0
+2,111111
+0
+6,111111
+2,0
+3,111111
+3,0
+111111
+4,0
+111111
+9,0
+4,111111
+20,0
+2,111111
+2,0
+2,111111
+8,0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+5,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+8,0
+2,111111
+2,0
+2,111111
+1f,0
+2,111111
+2,0
+2,111111
+8,0
+2,111111
+5,0
+2,111111
+9,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+6,111111
+8,0
+2,111111
+2,0
+2,111111
+1f,0
+2,111111
+2,0
+2,111111
+8,0
+5,111111
+2,0
+2,111111
+6,0
+5,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+6,111111
+0
+5,111111
+2,0
+2,111111
+2,0
+2,111111
+1f,0
+6,111111
+8,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+4,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+1f,0
+2,111111
+2,0
+2,111111
+8,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+1f,0
+2,111111
+2,0
+2,111111
+8,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+1f,0
+2,111111
+2,0
+2,111111
+8,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+1f,0
+2,111111
+2,0
+2,111111
+8,0
+5,111111
+3,0
+4,111111
+3,0
+5,111111
+0
+6,111111
+0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+2,0
+4,111111
+1729,0
+100 90 32
+89c,0
+4,400200
+9,0
+2,400200
+6,0
+4,400200
+6,0
+2,400200
+0
+6,400200
+2,0
+3,400200
+3,0
+400200
+4,0
+400200
+9,0
+4,400200
+20,0
+2,400200
+2,0
+2,400200
+8,0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+5,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+8,0
+2,400200
+2,0
+2,400200
+1f,0
+2,400200
+2,0
+2,400200
+8,0
+2,400200
+5,0
+2,400200
+9,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+6,400200
+8,0
+2,400200
+2,0
+2,400200
+1f,0
+2,400200
+2,0
+2,400200
+8,0
+5,400200
+2,0
+2,400200
+6,0
+5,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+6,400200
+0
+5,400200
+2,0
+2,400200
+2,0
+2,400200
+1f,0
+6,400200
+8,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+4,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+1f,0
+2,400200
+2,0
+2,400200
+8,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+1f,0
+2,400200
+2,0
+2,400200
+8,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+1f,0
+2,400200
+2,0
+2,400200
+8,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+1f,0
+2,400200
+2,0
+2,400200
+8,0
+5,400200
+3,0
+4,400200
+3,0
+5,400200
+0
+6,400200
+0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+2,0
+4,400200
+1729,0
+100 90 32
+89c,0
+4,777777
+9,0
+2,777777
+6,0
+4,777777
+6,0
+2,777777
+0
+6,777777
+2,0
+3,777777
+3,0
+777777
+4,0
+777777
+9,0
+4,777777
+20,0
+2,777777
+2,0
+2,777777
+8,0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+5,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+8,0
+2,777777
+2,0
+2,777777
+1f,0
+2,777777
+2,0
+2,777777
+8,0
+2,777777
+5,0
+2,777777
+9,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+6,777777
+8,0
+2,777777
+2,0
+2,777777
+1f,0
+2,777777
+2,0
+2,777777
+8,0
+5,777777
+2,0
+2,777777
+6,0
+5,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+6,777777
+0
+5,777777
+2,0
+2,777777
+2,0
+2,777777
+1f,0
+6,777777
+8,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+4,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+1f,0
+2,777777
+2,0
+2,777777
+8,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+1f,0
+2,777777
+2,0
+2,777777
+8,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+1f,0
+2,777777
+2,0
+2,777777
+8,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+1f,0
+2,777777
+2,0
+2,777777
+8,0
+5,777777
+3,0
+4,777777
+3,0
+5,777777
+0
+6,777777
+0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+2,0
+4,777777
+1729,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a18.dat b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a18.dat
new file mode 100644
index 000000000..587175755
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a18.dat
@@ -0,0 +1,8223 @@
+! $XConsortium$
+100 90 32
+89c,0
+4,1
+9,0
+2,1
+6,0
+4,1
+6,0
+2,1
+0
+6,1
+2,0
+3,1
+3,0
+1
+4,0
+1
+9,0
+4,1
+20,0
+2,1
+2,0
+2,1
+8,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+2,1
+5,0
+2,1
+9,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+6,1
+8,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+5,1
+2,0
+2,1
+6,0
+5,1
+0
+2,1
+7,0
+2,1
+3,0
+6,1
+0
+5,1
+2,0
+2,1
+2,0
+2,1
+1f,0
+6,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+5,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+8,0
+5,1
+3,0
+4,1
+3,0
+5,1
+0
+6,1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+1729,0
+100 90 32
+7d3,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+165f,0
+100 90 32
+7d3,0
+46,2
+1e,0
+46,2
+1e,0
+2
+4,1
+9,2
+2,1
+6,2
+4,1
+6,2
+2,1
+2
+6,1
+2,2
+3,1
+3,2
+1
+4,2
+1
+9,2
+4,1
+2,2
+1e,0
+2,1
+2,2
+2,1
+8,2
+2,1
+5,2
+2,1
+2,2
+2,1
+5,2
+2,1
+2
+2,1
+7,2
+2,1
+3,2
+2,1
+2,2
+2,1
+8,2
+2,1
+2,2
+2,1
+2
+1e,0
+2,1
+2,2
+2,1
+8,2
+2,1
+5,2
+2,1
+9,2
+2,1
+2
+2,1
+7,2
+2,1
+3,2
+6,1
+8,2
+2,1
+2,2
+2,1
+2
+1e,0
+2,1
+2,2
+2,1
+8,2
+5,1
+2,2
+2,1
+6,2
+5,1
+2
+2,1
+7,2
+2,1
+3,2
+6,1
+2
+5,1
+2,2
+2,1
+2,2
+2,1
+2
+1e,0
+6,1
+8,2
+2,1
+2,2
+2,1
+2
+2,1
+5,2
+2,1
+2,2
+2,1
+2
+5,1
+4,2
+2,1
+3,2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+1e,0
+2,1
+2,2
+2,1
+8,2
+2,1
+2,2
+2,1
+2
+2,1
+5,2
+2,1
+2,2
+2,1
+2
+2,1
+7,2
+2,1
+3,2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+1e,0
+2,1
+2,2
+2,1
+8,2
+2,1
+2,2
+2,1
+2
+2,1
+5,2
+2,1
+2,2
+2,1
+2
+2,1
+7,2
+2,1
+3,2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+1e,0
+2,1
+2,2
+2,1
+8,2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+7,2
+2,1
+3,2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+1e,0
+2,1
+2,2
+2,1
+8,2
+5,1
+3,2
+4,1
+3,2
+5,1
+2
+6,1
+2
+6,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2,2
+4,1
+2,2
+1e,0
+46,2
+1e,0
+46,2
+165f,0
+100 90 32
+7d3,0
+46,3
+1e,0
+46,3
+1e,0
+3
+4,1
+9,3
+2,1
+6,3
+4,1
+6,3
+2,1
+3
+6,1
+2,3
+3,1
+3,3
+1
+4,3
+1
+9,3
+4,1
+2,3
+1e,0
+2,1
+2,3
+2,1
+8,3
+2,1
+5,3
+2,1
+2,3
+2,1
+5,3
+2,1
+3
+2,1
+7,3
+2,1
+3,3
+2,1
+2,3
+2,1
+8,3
+2,1
+2,3
+2,1
+3
+1e,0
+2,1
+2,3
+2,1
+8,3
+2,1
+5,3
+2,1
+9,3
+2,1
+3
+2,1
+7,3
+2,1
+3,3
+6,1
+8,3
+2,1
+2,3
+2,1
+3
+1e,0
+2,1
+2,3
+2,1
+8,3
+5,1
+2,3
+2,1
+6,3
+5,1
+3
+2,1
+7,3
+2,1
+3,3
+6,1
+3
+5,1
+2,3
+2,1
+2,3
+2,1
+3
+1e,0
+6,1
+8,3
+2,1
+2,3
+2,1
+3
+2,1
+5,3
+2,1
+2,3
+2,1
+3
+5,1
+4,3
+2,1
+3,3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+1e,0
+2,1
+2,3
+2,1
+8,3
+2,1
+2,3
+2,1
+3
+2,1
+5,3
+2,1
+2,3
+2,1
+3
+2,1
+7,3
+2,1
+3,3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+1e,0
+2,1
+2,3
+2,1
+8,3
+2,1
+2,3
+2,1
+3
+2,1
+5,3
+2,1
+2,3
+2,1
+3
+2,1
+7,3
+2,1
+3,3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+1e,0
+2,1
+2,3
+2,1
+8,3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+7,3
+2,1
+3,3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+1e,0
+2,1
+2,3
+2,1
+8,3
+5,1
+3,3
+4,1
+3,3
+5,1
+3
+6,1
+3
+6,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+2,3
+4,1
+2,3
+1e,0
+46,3
+1e,0
+46,3
+165f,0
+100 90 32
+7d3,0
+46,4
+1e,0
+46,4
+1e,0
+4
+4,1
+9,4
+2,1
+6,4
+4,1
+6,4
+2,1
+4
+6,1
+2,4
+3,1
+3,4
+1
+4,4
+1
+9,4
+4,1
+2,4
+1e,0
+2,1
+2,4
+2,1
+8,4
+2,1
+5,4
+2,1
+2,4
+2,1
+5,4
+2,1
+4
+2,1
+7,4
+2,1
+3,4
+2,1
+2,4
+2,1
+8,4
+2,1
+2,4
+2,1
+4
+1e,0
+2,1
+2,4
+2,1
+8,4
+2,1
+5,4
+2,1
+9,4
+2,1
+4
+2,1
+7,4
+2,1
+3,4
+6,1
+8,4
+2,1
+2,4
+2,1
+4
+1e,0
+2,1
+2,4
+2,1
+8,4
+5,1
+2,4
+2,1
+6,4
+5,1
+4
+2,1
+7,4
+2,1
+3,4
+6,1
+4
+5,1
+2,4
+2,1
+2,4
+2,1
+4
+1e,0
+6,1
+8,4
+2,1
+2,4
+2,1
+4
+2,1
+5,4
+2,1
+2,4
+2,1
+4
+5,1
+4,4
+2,1
+3,4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+1e,0
+2,1
+2,4
+2,1
+8,4
+2,1
+2,4
+2,1
+4
+2,1
+5,4
+2,1
+2,4
+2,1
+4
+2,1
+7,4
+2,1
+3,4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+1e,0
+2,1
+2,4
+2,1
+8,4
+2,1
+2,4
+2,1
+4
+2,1
+5,4
+2,1
+2,4
+2,1
+4
+2,1
+7,4
+2,1
+3,4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+1e,0
+2,1
+2,4
+2,1
+8,4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+7,4
+2,1
+3,4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+1e,0
+2,1
+2,4
+2,1
+8,4
+5,1
+3,4
+4,1
+3,4
+5,1
+4
+6,1
+4
+6,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+2,4
+4,1
+2,4
+1e,0
+46,4
+1e,0
+46,4
+165f,0
+100 90 32
+7d3,0
+46,6
+1e,0
+46,6
+1e,0
+6
+4,1
+9,6
+2,1
+6,6
+4,1
+6,6
+2,1
+6
+6,1
+2,6
+3,1
+3,6
+1
+4,6
+1
+9,6
+4,1
+2,6
+1e,0
+2,1
+2,6
+2,1
+8,6
+2,1
+5,6
+2,1
+2,6
+2,1
+5,6
+2,1
+6
+2,1
+7,6
+2,1
+3,6
+2,1
+2,6
+2,1
+8,6
+2,1
+2,6
+2,1
+6
+1e,0
+2,1
+2,6
+2,1
+8,6
+2,1
+5,6
+2,1
+9,6
+2,1
+6
+2,1
+7,6
+2,1
+3,6
+6,1
+8,6
+2,1
+2,6
+2,1
+6
+1e,0
+2,1
+2,6
+2,1
+8,6
+5,1
+2,6
+2,1
+6,6
+5,1
+6
+2,1
+7,6
+2,1
+3,6
+6,1
+6
+5,1
+2,6
+2,1
+2,6
+2,1
+6
+1e,0
+6,1
+8,6
+2,1
+2,6
+2,1
+6
+2,1
+5,6
+2,1
+2,6
+2,1
+6
+5,1
+4,6
+2,1
+3,6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+1e,0
+2,1
+2,6
+2,1
+8,6
+2,1
+2,6
+2,1
+6
+2,1
+5,6
+2,1
+2,6
+2,1
+6
+2,1
+7,6
+2,1
+3,6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+1e,0
+2,1
+2,6
+2,1
+8,6
+2,1
+2,6
+2,1
+6
+2,1
+5,6
+2,1
+2,6
+2,1
+6
+2,1
+7,6
+2,1
+3,6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+1e,0
+2,1
+2,6
+2,1
+8,6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+7,6
+2,1
+3,6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+1e,0
+2,1
+2,6
+2,1
+8,6
+5,1
+3,6
+4,1
+3,6
+5,1
+6
+6,1
+6
+6,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+2,6
+4,1
+2,6
+1e,0
+46,6
+1e,0
+46,6
+165f,0
+100 90 32
+7d3,0
+46,7
+1e,0
+46,7
+1e,0
+7
+4,1
+9,7
+2,1
+6,7
+4,1
+6,7
+2,1
+7
+6,1
+2,7
+3,1
+3,7
+1
+4,7
+1
+9,7
+4,1
+2,7
+1e,0
+2,1
+2,7
+2,1
+8,7
+2,1
+5,7
+2,1
+2,7
+2,1
+5,7
+2,1
+7
+2,1
+7,7
+2,1
+3,7
+2,1
+2,7
+2,1
+8,7
+2,1
+2,7
+2,1
+7
+1e,0
+2,1
+2,7
+2,1
+8,7
+2,1
+5,7
+2,1
+9,7
+2,1
+7
+2,1
+7,7
+2,1
+3,7
+6,1
+8,7
+2,1
+2,7
+2,1
+7
+1e,0
+2,1
+2,7
+2,1
+8,7
+5,1
+2,7
+2,1
+6,7
+5,1
+7
+2,1
+7,7
+2,1
+3,7
+6,1
+7
+5,1
+2,7
+2,1
+2,7
+2,1
+7
+1e,0
+6,1
+8,7
+2,1
+2,7
+2,1
+7
+2,1
+5,7
+2,1
+2,7
+2,1
+7
+5,1
+4,7
+2,1
+3,7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+1e,0
+2,1
+2,7
+2,1
+8,7
+2,1
+2,7
+2,1
+7
+2,1
+5,7
+2,1
+2,7
+2,1
+7
+2,1
+7,7
+2,1
+3,7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+1e,0
+2,1
+2,7
+2,1
+8,7
+2,1
+2,7
+2,1
+7
+2,1
+5,7
+2,1
+2,7
+2,1
+7
+2,1
+7,7
+2,1
+3,7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+1e,0
+2,1
+2,7
+2,1
+8,7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+7,7
+2,1
+3,7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+1e,0
+2,1
+2,7
+2,1
+8,7
+5,1
+3,7
+4,1
+3,7
+5,1
+7
+6,1
+7
+6,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+2,7
+4,1
+2,7
+1e,0
+46,7
+1e,0
+46,7
+165f,0
+100 90 32
+7d3,0
+46,10
+1e,0
+46,10
+1e,0
+10
+4,1
+9,10
+2,1
+6,10
+4,1
+6,10
+2,1
+10
+6,1
+2,10
+3,1
+3,10
+1
+4,10
+1
+9,10
+4,1
+2,10
+1e,0
+2,1
+2,10
+2,1
+8,10
+2,1
+5,10
+2,1
+2,10
+2,1
+5,10
+2,1
+10
+2,1
+7,10
+2,1
+3,10
+2,1
+2,10
+2,1
+8,10
+2,1
+2,10
+2,1
+10
+1e,0
+2,1
+2,10
+2,1
+8,10
+2,1
+5,10
+2,1
+9,10
+2,1
+10
+2,1
+7,10
+2,1
+3,10
+6,1
+8,10
+2,1
+2,10
+2,1
+10
+1e,0
+2,1
+2,10
+2,1
+8,10
+5,1
+2,10
+2,1
+6,10
+5,1
+10
+2,1
+7,10
+2,1
+3,10
+6,1
+10
+5,1
+2,10
+2,1
+2,10
+2,1
+10
+1e,0
+6,1
+8,10
+2,1
+2,10
+2,1
+10
+2,1
+5,10
+2,1
+2,10
+2,1
+10
+5,1
+4,10
+2,1
+3,10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+1e,0
+2,1
+2,10
+2,1
+8,10
+2,1
+2,10
+2,1
+10
+2,1
+5,10
+2,1
+2,10
+2,1
+10
+2,1
+7,10
+2,1
+3,10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+1e,0
+2,1
+2,10
+2,1
+8,10
+2,1
+2,10
+2,1
+10
+2,1
+5,10
+2,1
+2,10
+2,1
+10
+2,1
+7,10
+2,1
+3,10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+1e,0
+2,1
+2,10
+2,1
+8,10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+7,10
+2,1
+3,10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+1e,0
+2,1
+2,10
+2,1
+8,10
+5,1
+3,10
+4,1
+3,10
+5,1
+10
+6,1
+10
+6,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+2,10
+4,1
+2,10
+1e,0
+46,10
+1e,0
+46,10
+165f,0
+100 90 32
+7d3,0
+46,33
+1e,0
+46,33
+1e,0
+33
+4,1
+9,33
+2,1
+6,33
+4,1
+6,33
+2,1
+33
+6,1
+2,33
+3,1
+3,33
+1
+4,33
+1
+9,33
+4,1
+2,33
+1e,0
+2,1
+2,33
+2,1
+8,33
+2,1
+5,33
+2,1
+2,33
+2,1
+5,33
+2,1
+33
+2,1
+7,33
+2,1
+3,33
+2,1
+2,33
+2,1
+8,33
+2,1
+2,33
+2,1
+33
+1e,0
+2,1
+2,33
+2,1
+8,33
+2,1
+5,33
+2,1
+9,33
+2,1
+33
+2,1
+7,33
+2,1
+3,33
+6,1
+8,33
+2,1
+2,33
+2,1
+33
+1e,0
+2,1
+2,33
+2,1
+8,33
+5,1
+2,33
+2,1
+6,33
+5,1
+33
+2,1
+7,33
+2,1
+3,33
+6,1
+33
+5,1
+2,33
+2,1
+2,33
+2,1
+33
+1e,0
+6,1
+8,33
+2,1
+2,33
+2,1
+33
+2,1
+5,33
+2,1
+2,33
+2,1
+33
+5,1
+4,33
+2,1
+3,33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+1e,0
+2,1
+2,33
+2,1
+8,33
+2,1
+2,33
+2,1
+33
+2,1
+5,33
+2,1
+2,33
+2,1
+33
+2,1
+7,33
+2,1
+3,33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+1e,0
+2,1
+2,33
+2,1
+8,33
+2,1
+2,33
+2,1
+33
+2,1
+5,33
+2,1
+2,33
+2,1
+33
+2,1
+7,33
+2,1
+3,33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+1e,0
+2,1
+2,33
+2,1
+8,33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+7,33
+2,1
+3,33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+1e,0
+2,1
+2,33
+2,1
+8,33
+5,1
+3,33
+4,1
+3,33
+5,1
+33
+6,1
+33
+6,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+2,33
+4,1
+2,33
+1e,0
+46,33
+1e,0
+46,33
+165f,0
+100 90 32
+7d3,0
+46,81
+1e,0
+46,81
+1e,0
+81
+4,1
+9,81
+2,1
+6,81
+4,1
+6,81
+2,1
+81
+6,1
+2,81
+3,1
+3,81
+1
+4,81
+1
+9,81
+4,1
+2,81
+1e,0
+2,1
+2,81
+2,1
+8,81
+2,1
+5,81
+2,1
+2,81
+2,1
+5,81
+2,1
+81
+2,1
+7,81
+2,1
+3,81
+2,1
+2,81
+2,1
+8,81
+2,1
+2,81
+2,1
+81
+1e,0
+2,1
+2,81
+2,1
+8,81
+2,1
+5,81
+2,1
+9,81
+2,1
+81
+2,1
+7,81
+2,1
+3,81
+6,1
+8,81
+2,1
+2,81
+2,1
+81
+1e,0
+2,1
+2,81
+2,1
+8,81
+5,1
+2,81
+2,1
+6,81
+5,1
+81
+2,1
+7,81
+2,1
+3,81
+6,1
+81
+5,1
+2,81
+2,1
+2,81
+2,1
+81
+1e,0
+6,1
+8,81
+2,1
+2,81
+2,1
+81
+2,1
+5,81
+2,1
+2,81
+2,1
+81
+5,1
+4,81
+2,1
+3,81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+1e,0
+2,1
+2,81
+2,1
+8,81
+2,1
+2,81
+2,1
+81
+2,1
+5,81
+2,1
+2,81
+2,1
+81
+2,1
+7,81
+2,1
+3,81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+1e,0
+2,1
+2,81
+2,1
+8,81
+2,1
+2,81
+2,1
+81
+2,1
+5,81
+2,1
+2,81
+2,1
+81
+2,1
+7,81
+2,1
+3,81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+1e,0
+2,1
+2,81
+2,1
+8,81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+7,81
+2,1
+3,81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+1e,0
+2,1
+2,81
+2,1
+8,81
+5,1
+3,81
+4,1
+3,81
+5,1
+81
+6,1
+81
+6,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+2,81
+4,1
+2,81
+1e,0
+46,81
+1e,0
+46,81
+165f,0
+100 90 32
+7d3,0
+46,a3
+1e,0
+46,a3
+1e,0
+a3
+4,1
+9,a3
+2,1
+6,a3
+4,1
+6,a3
+2,1
+a3
+6,1
+2,a3
+3,1
+3,a3
+1
+4,a3
+1
+9,a3
+4,1
+2,a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+2,1
+5,a3
+2,1
+2,a3
+2,1
+5,a3
+2,1
+a3
+2,1
+7,a3
+2,1
+3,a3
+2,1
+2,a3
+2,1
+8,a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+2,1
+5,a3
+2,1
+9,a3
+2,1
+a3
+2,1
+7,a3
+2,1
+3,a3
+6,1
+8,a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+5,1
+2,a3
+2,1
+6,a3
+5,1
+a3
+2,1
+7,a3
+2,1
+3,a3
+6,1
+a3
+5,1
+2,a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+6,1
+8,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+5,a3
+2,1
+2,a3
+2,1
+a3
+5,1
+4,a3
+2,1
+3,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+5,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+7,a3
+2,1
+3,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+5,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+7,a3
+2,1
+3,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+7,a3
+2,1
+3,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+5,1
+3,a3
+4,1
+3,a3
+5,1
+a3
+6,1
+a3
+6,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+2,a3
+4,1
+2,a3
+1e,0
+46,a3
+1e,0
+46,a3
+165f,0
+100 90 32
+7d3,0
+46,ff
+1e,0
+46,ff
+1e,0
+ff
+4,1
+9,ff
+2,1
+6,ff
+4,1
+6,ff
+2,1
+ff
+6,1
+2,ff
+3,1
+3,ff
+1
+4,ff
+1
+9,ff
+4,1
+2,ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+2,1
+5,ff
+2,1
+2,ff
+2,1
+5,ff
+2,1
+ff
+2,1
+7,ff
+2,1
+3,ff
+2,1
+2,ff
+2,1
+8,ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+2,1
+5,ff
+2,1
+9,ff
+2,1
+ff
+2,1
+7,ff
+2,1
+3,ff
+6,1
+8,ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+5,1
+2,ff
+2,1
+6,ff
+5,1
+ff
+2,1
+7,ff
+2,1
+3,ff
+6,1
+ff
+5,1
+2,ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+6,1
+8,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+5,ff
+2,1
+2,ff
+2,1
+ff
+5,1
+4,ff
+2,1
+3,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+5,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+7,ff
+2,1
+3,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+5,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+7,ff
+2,1
+3,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+7,ff
+2,1
+3,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+5,1
+3,ff
+4,1
+3,ff
+5,1
+ff
+6,1
+ff
+6,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+2,ff
+4,1
+2,ff
+1e,0
+46,ff
+1e,0
+46,ff
+165f,0
+100 90 32
+7d3,0
+46,100
+1e,0
+46,100
+1e,0
+100
+4,1
+9,100
+2,1
+6,100
+4,1
+6,100
+2,1
+100
+6,1
+2,100
+3,1
+3,100
+1
+4,100
+1
+9,100
+4,1
+2,100
+1e,0
+2,1
+2,100
+2,1
+8,100
+2,1
+5,100
+2,1
+2,100
+2,1
+5,100
+2,1
+100
+2,1
+7,100
+2,1
+3,100
+2,1
+2,100
+2,1
+8,100
+2,1
+2,100
+2,1
+100
+1e,0
+2,1
+2,100
+2,1
+8,100
+2,1
+5,100
+2,1
+9,100
+2,1
+100
+2,1
+7,100
+2,1
+3,100
+6,1
+8,100
+2,1
+2,100
+2,1
+100
+1e,0
+2,1
+2,100
+2,1
+8,100
+5,1
+2,100
+2,1
+6,100
+5,1
+100
+2,1
+7,100
+2,1
+3,100
+6,1
+100
+5,1
+2,100
+2,1
+2,100
+2,1
+100
+1e,0
+6,1
+8,100
+2,1
+2,100
+2,1
+100
+2,1
+5,100
+2,1
+2,100
+2,1
+100
+5,1
+4,100
+2,1
+3,100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+1e,0
+2,1
+2,100
+2,1
+8,100
+2,1
+2,100
+2,1
+100
+2,1
+5,100
+2,1
+2,100
+2,1
+100
+2,1
+7,100
+2,1
+3,100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+1e,0
+2,1
+2,100
+2,1
+8,100
+2,1
+2,100
+2,1
+100
+2,1
+5,100
+2,1
+2,100
+2,1
+100
+2,1
+7,100
+2,1
+3,100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+1e,0
+2,1
+2,100
+2,1
+8,100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+7,100
+2,1
+3,100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+1e,0
+2,1
+2,100
+2,1
+8,100
+5,1
+3,100
+4,1
+3,100
+5,1
+100
+6,1
+100
+6,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+2,100
+4,1
+2,100
+1e,0
+46,100
+1e,0
+46,100
+165f,0
+100 90 32
+7d3,0
+46,12c
+1e,0
+46,12c
+1e,0
+12c
+4,1
+9,12c
+2,1
+6,12c
+4,1
+6,12c
+2,1
+12c
+6,1
+2,12c
+3,1
+3,12c
+1
+4,12c
+1
+9,12c
+4,1
+2,12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+2,1
+5,12c
+2,1
+2,12c
+2,1
+5,12c
+2,1
+12c
+2,1
+7,12c
+2,1
+3,12c
+2,1
+2,12c
+2,1
+8,12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+2,1
+5,12c
+2,1
+9,12c
+2,1
+12c
+2,1
+7,12c
+2,1
+3,12c
+6,1
+8,12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+5,1
+2,12c
+2,1
+6,12c
+5,1
+12c
+2,1
+7,12c
+2,1
+3,12c
+6,1
+12c
+5,1
+2,12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+6,1
+8,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+5,12c
+2,1
+2,12c
+2,1
+12c
+5,1
+4,12c
+2,1
+3,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+5,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+7,12c
+2,1
+3,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+5,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+7,12c
+2,1
+3,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+7,12c
+2,1
+3,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+5,1
+3,12c
+4,1
+3,12c
+5,1
+12c
+6,1
+12c
+6,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+2,12c
+4,1
+2,12c
+1e,0
+46,12c
+1e,0
+46,12c
+165f,0
+100 90 32
+7d3,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+3e8
+4,1
+9,3e8
+2,1
+6,3e8
+4,1
+6,3e8
+2,1
+3e8
+6,1
+2,3e8
+3,1
+3,3e8
+1
+4,3e8
+1
+9,3e8
+4,1
+2,3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+2,1
+5,3e8
+2,1
+2,3e8
+2,1
+5,3e8
+2,1
+3e8
+2,1
+7,3e8
+2,1
+3,3e8
+2,1
+2,3e8
+2,1
+8,3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+2,1
+5,3e8
+2,1
+9,3e8
+2,1
+3e8
+2,1
+7,3e8
+2,1
+3,3e8
+6,1
+8,3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+5,1
+2,3e8
+2,1
+6,3e8
+5,1
+3e8
+2,1
+7,3e8
+2,1
+3,3e8
+6,1
+3e8
+5,1
+2,3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+6,1
+8,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+5,3e8
+2,1
+2,3e8
+2,1
+3e8
+5,1
+4,3e8
+2,1
+3,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+5,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+7,3e8
+2,1
+3,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+5,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+7,3e8
+2,1
+3,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+7,3e8
+2,1
+3,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+5,1
+3,3e8
+4,1
+3,3e8
+5,1
+3e8
+6,1
+3e8
+6,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+2,3e8
+4,1
+2,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+165f,0
+100 90 32
+7d3,0
+46,111111
+1e,0
+46,111111
+1e,0
+111111
+4,1
+9,111111
+2,1
+6,111111
+4,1
+6,111111
+2,1
+111111
+6,1
+2,111111
+3,1
+3,111111
+1
+4,111111
+1
+9,111111
+4,1
+2,111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+2,1
+5,111111
+2,1
+2,111111
+2,1
+5,111111
+2,1
+111111
+2,1
+7,111111
+2,1
+3,111111
+2,1
+2,111111
+2,1
+8,111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+2,1
+5,111111
+2,1
+9,111111
+2,1
+111111
+2,1
+7,111111
+2,1
+3,111111
+6,1
+8,111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+5,1
+2,111111
+2,1
+6,111111
+5,1
+111111
+2,1
+7,111111
+2,1
+3,111111
+6,1
+111111
+5,1
+2,111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+6,1
+8,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+5,111111
+2,1
+2,111111
+2,1
+111111
+5,1
+4,111111
+2,1
+3,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+5,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+7,111111
+2,1
+3,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+5,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+7,111111
+2,1
+3,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+7,111111
+2,1
+3,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+5,1
+3,111111
+4,1
+3,111111
+5,1
+111111
+6,1
+111111
+6,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+2,111111
+4,1
+2,111111
+1e,0
+46,111111
+1e,0
+46,111111
+165f,0
+100 90 32
+7d3,0
+46,400200
+1e,0
+46,400200
+1e,0
+400200
+4,1
+9,400200
+2,1
+6,400200
+4,1
+6,400200
+2,1
+400200
+6,1
+2,400200
+3,1
+3,400200
+1
+4,400200
+1
+9,400200
+4,1
+2,400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+2,1
+5,400200
+2,1
+2,400200
+2,1
+5,400200
+2,1
+400200
+2,1
+7,400200
+2,1
+3,400200
+2,1
+2,400200
+2,1
+8,400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+2,1
+5,400200
+2,1
+9,400200
+2,1
+400200
+2,1
+7,400200
+2,1
+3,400200
+6,1
+8,400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+5,1
+2,400200
+2,1
+6,400200
+5,1
+400200
+2,1
+7,400200
+2,1
+3,400200
+6,1
+400200
+5,1
+2,400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+6,1
+8,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+5,400200
+2,1
+2,400200
+2,1
+400200
+5,1
+4,400200
+2,1
+3,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+5,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+7,400200
+2,1
+3,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+5,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+7,400200
+2,1
+3,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+7,400200
+2,1
+3,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+5,1
+3,400200
+4,1
+3,400200
+5,1
+400200
+6,1
+400200
+6,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+2,400200
+4,1
+2,400200
+1e,0
+46,400200
+1e,0
+46,400200
+165f,0
+100 90 32
+7d3,0
+46,777777
+1e,0
+46,777777
+1e,0
+777777
+4,1
+9,777777
+2,1
+6,777777
+4,1
+6,777777
+2,1
+777777
+6,1
+2,777777
+3,1
+3,777777
+1
+4,777777
+1
+9,777777
+4,1
+2,777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+2,1
+5,777777
+2,1
+2,777777
+2,1
+5,777777
+2,1
+777777
+2,1
+7,777777
+2,1
+3,777777
+2,1
+2,777777
+2,1
+8,777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+2,1
+5,777777
+2,1
+9,777777
+2,1
+777777
+2,1
+7,777777
+2,1
+3,777777
+6,1
+8,777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+5,1
+2,777777
+2,1
+6,777777
+5,1
+777777
+2,1
+7,777777
+2,1
+3,777777
+6,1
+777777
+5,1
+2,777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+6,1
+8,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+5,777777
+2,1
+2,777777
+2,1
+777777
+5,1
+4,777777
+2,1
+3,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+5,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+7,777777
+2,1
+3,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+5,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+7,777777
+2,1
+3,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+7,777777
+2,1
+3,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+5,1
+3,777777
+4,1
+3,777777
+5,1
+777777
+6,1
+777777
+6,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+2,777777
+4,1
+2,777777
+1e,0
+46,777777
+1e,0
+46,777777
+165f,0
+100 90 32
+7d3,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+165f,0
+100 90 32
+7d3,0
+46,2
+1e,0
+46,2
+1e,0
+2
+4,1
+9,2
+2,1
+6,2
+4,1
+6,2
+2,1
+2
+6,1
+2,2
+3,1
+3,2
+1
+4,2
+1
+9,2
+4,1
+2,2
+1e,0
+2,1
+2,2
+2,1
+8,2
+2,1
+5,2
+2,1
+2,2
+2,1
+5,2
+2,1
+2
+2,1
+7,2
+2,1
+3,2
+2,1
+2,2
+2,1
+8,2
+2,1
+2,2
+2,1
+2
+1e,0
+2,1
+2,2
+2,1
+8,2
+2,1
+5,2
+2,1
+9,2
+2,1
+2
+2,1
+7,2
+2,1
+3,2
+6,1
+8,2
+2,1
+2,2
+2,1
+2
+1e,0
+2,1
+2,2
+2,1
+8,2
+5,1
+2,2
+2,1
+6,2
+5,1
+2
+2,1
+7,2
+2,1
+3,2
+6,1
+2
+5,1
+2,2
+2,1
+2,2
+2,1
+2
+1e,0
+6,1
+8,2
+2,1
+2,2
+2,1
+2
+2,1
+5,2
+2,1
+2,2
+2,1
+2
+5,1
+4,2
+2,1
+3,2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+1e,0
+2,1
+2,2
+2,1
+8,2
+2,1
+2,2
+2,1
+2
+2,1
+5,2
+2,1
+2,2
+2,1
+2
+2,1
+7,2
+2,1
+3,2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+1e,0
+2,1
+2,2
+2,1
+8,2
+2,1
+2,2
+2,1
+2
+2,1
+5,2
+2,1
+2,2
+2,1
+2
+2,1
+7,2
+2,1
+3,2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+1e,0
+2,1
+2,2
+2,1
+8,2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+7,2
+2,1
+3,2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2
+1e,0
+2,1
+2,2
+2,1
+8,2
+5,1
+3,2
+4,1
+3,2
+5,1
+2
+6,1
+2
+6,1
+2
+2,1
+2,2
+2,1
+2
+2,1
+2,2
+2,1
+2,2
+4,1
+2,2
+1e,0
+46,2
+1e,0
+46,2
+165f,0
+100 90 32
+7d3,0
+46,3
+1e,0
+46,3
+1e,0
+3
+4,1
+9,3
+2,1
+6,3
+4,1
+6,3
+2,1
+3
+6,1
+2,3
+3,1
+3,3
+1
+4,3
+1
+9,3
+4,1
+2,3
+1e,0
+2,1
+2,3
+2,1
+8,3
+2,1
+5,3
+2,1
+2,3
+2,1
+5,3
+2,1
+3
+2,1
+7,3
+2,1
+3,3
+2,1
+2,3
+2,1
+8,3
+2,1
+2,3
+2,1
+3
+1e,0
+2,1
+2,3
+2,1
+8,3
+2,1
+5,3
+2,1
+9,3
+2,1
+3
+2,1
+7,3
+2,1
+3,3
+6,1
+8,3
+2,1
+2,3
+2,1
+3
+1e,0
+2,1
+2,3
+2,1
+8,3
+5,1
+2,3
+2,1
+6,3
+5,1
+3
+2,1
+7,3
+2,1
+3,3
+6,1
+3
+5,1
+2,3
+2,1
+2,3
+2,1
+3
+1e,0
+6,1
+8,3
+2,1
+2,3
+2,1
+3
+2,1
+5,3
+2,1
+2,3
+2,1
+3
+5,1
+4,3
+2,1
+3,3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+1e,0
+2,1
+2,3
+2,1
+8,3
+2,1
+2,3
+2,1
+3
+2,1
+5,3
+2,1
+2,3
+2,1
+3
+2,1
+7,3
+2,1
+3,3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+1e,0
+2,1
+2,3
+2,1
+8,3
+2,1
+2,3
+2,1
+3
+2,1
+5,3
+2,1
+2,3
+2,1
+3
+2,1
+7,3
+2,1
+3,3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+1e,0
+2,1
+2,3
+2,1
+8,3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+7,3
+2,1
+3,3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+3
+1e,0
+2,1
+2,3
+2,1
+8,3
+5,1
+3,3
+4,1
+3,3
+5,1
+3
+6,1
+3
+6,1
+3
+2,1
+2,3
+2,1
+3
+2,1
+2,3
+2,1
+2,3
+4,1
+2,3
+1e,0
+46,3
+1e,0
+46,3
+165f,0
+100 90 32
+7d3,0
+46,4
+1e,0
+46,4
+1e,0
+4
+4,1
+9,4
+2,1
+6,4
+4,1
+6,4
+2,1
+4
+6,1
+2,4
+3,1
+3,4
+1
+4,4
+1
+9,4
+4,1
+2,4
+1e,0
+2,1
+2,4
+2,1
+8,4
+2,1
+5,4
+2,1
+2,4
+2,1
+5,4
+2,1
+4
+2,1
+7,4
+2,1
+3,4
+2,1
+2,4
+2,1
+8,4
+2,1
+2,4
+2,1
+4
+1e,0
+2,1
+2,4
+2,1
+8,4
+2,1
+5,4
+2,1
+9,4
+2,1
+4
+2,1
+7,4
+2,1
+3,4
+6,1
+8,4
+2,1
+2,4
+2,1
+4
+1e,0
+2,1
+2,4
+2,1
+8,4
+5,1
+2,4
+2,1
+6,4
+5,1
+4
+2,1
+7,4
+2,1
+3,4
+6,1
+4
+5,1
+2,4
+2,1
+2,4
+2,1
+4
+1e,0
+6,1
+8,4
+2,1
+2,4
+2,1
+4
+2,1
+5,4
+2,1
+2,4
+2,1
+4
+5,1
+4,4
+2,1
+3,4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+1e,0
+2,1
+2,4
+2,1
+8,4
+2,1
+2,4
+2,1
+4
+2,1
+5,4
+2,1
+2,4
+2,1
+4
+2,1
+7,4
+2,1
+3,4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+1e,0
+2,1
+2,4
+2,1
+8,4
+2,1
+2,4
+2,1
+4
+2,1
+5,4
+2,1
+2,4
+2,1
+4
+2,1
+7,4
+2,1
+3,4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+1e,0
+2,1
+2,4
+2,1
+8,4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+7,4
+2,1
+3,4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+4
+1e,0
+2,1
+2,4
+2,1
+8,4
+5,1
+3,4
+4,1
+3,4
+5,1
+4
+6,1
+4
+6,1
+4
+2,1
+2,4
+2,1
+4
+2,1
+2,4
+2,1
+2,4
+4,1
+2,4
+1e,0
+46,4
+1e,0
+46,4
+165f,0
+100 90 32
+7d3,0
+46,6
+1e,0
+46,6
+1e,0
+6
+4,1
+9,6
+2,1
+6,6
+4,1
+6,6
+2,1
+6
+6,1
+2,6
+3,1
+3,6
+1
+4,6
+1
+9,6
+4,1
+2,6
+1e,0
+2,1
+2,6
+2,1
+8,6
+2,1
+5,6
+2,1
+2,6
+2,1
+5,6
+2,1
+6
+2,1
+7,6
+2,1
+3,6
+2,1
+2,6
+2,1
+8,6
+2,1
+2,6
+2,1
+6
+1e,0
+2,1
+2,6
+2,1
+8,6
+2,1
+5,6
+2,1
+9,6
+2,1
+6
+2,1
+7,6
+2,1
+3,6
+6,1
+8,6
+2,1
+2,6
+2,1
+6
+1e,0
+2,1
+2,6
+2,1
+8,6
+5,1
+2,6
+2,1
+6,6
+5,1
+6
+2,1
+7,6
+2,1
+3,6
+6,1
+6
+5,1
+2,6
+2,1
+2,6
+2,1
+6
+1e,0
+6,1
+8,6
+2,1
+2,6
+2,1
+6
+2,1
+5,6
+2,1
+2,6
+2,1
+6
+5,1
+4,6
+2,1
+3,6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+1e,0
+2,1
+2,6
+2,1
+8,6
+2,1
+2,6
+2,1
+6
+2,1
+5,6
+2,1
+2,6
+2,1
+6
+2,1
+7,6
+2,1
+3,6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+1e,0
+2,1
+2,6
+2,1
+8,6
+2,1
+2,6
+2,1
+6
+2,1
+5,6
+2,1
+2,6
+2,1
+6
+2,1
+7,6
+2,1
+3,6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+1e,0
+2,1
+2,6
+2,1
+8,6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+7,6
+2,1
+3,6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+6
+1e,0
+2,1
+2,6
+2,1
+8,6
+5,1
+3,6
+4,1
+3,6
+5,1
+6
+6,1
+6
+6,1
+6
+2,1
+2,6
+2,1
+6
+2,1
+2,6
+2,1
+2,6
+4,1
+2,6
+1e,0
+46,6
+1e,0
+46,6
+165f,0
+100 90 32
+7d3,0
+46,7
+1e,0
+46,7
+1e,0
+7
+4,1
+9,7
+2,1
+6,7
+4,1
+6,7
+2,1
+7
+6,1
+2,7
+3,1
+3,7
+1
+4,7
+1
+9,7
+4,1
+2,7
+1e,0
+2,1
+2,7
+2,1
+8,7
+2,1
+5,7
+2,1
+2,7
+2,1
+5,7
+2,1
+7
+2,1
+7,7
+2,1
+3,7
+2,1
+2,7
+2,1
+8,7
+2,1
+2,7
+2,1
+7
+1e,0
+2,1
+2,7
+2,1
+8,7
+2,1
+5,7
+2,1
+9,7
+2,1
+7
+2,1
+7,7
+2,1
+3,7
+6,1
+8,7
+2,1
+2,7
+2,1
+7
+1e,0
+2,1
+2,7
+2,1
+8,7
+5,1
+2,7
+2,1
+6,7
+5,1
+7
+2,1
+7,7
+2,1
+3,7
+6,1
+7
+5,1
+2,7
+2,1
+2,7
+2,1
+7
+1e,0
+6,1
+8,7
+2,1
+2,7
+2,1
+7
+2,1
+5,7
+2,1
+2,7
+2,1
+7
+5,1
+4,7
+2,1
+3,7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+1e,0
+2,1
+2,7
+2,1
+8,7
+2,1
+2,7
+2,1
+7
+2,1
+5,7
+2,1
+2,7
+2,1
+7
+2,1
+7,7
+2,1
+3,7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+1e,0
+2,1
+2,7
+2,1
+8,7
+2,1
+2,7
+2,1
+7
+2,1
+5,7
+2,1
+2,7
+2,1
+7
+2,1
+7,7
+2,1
+3,7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+1e,0
+2,1
+2,7
+2,1
+8,7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+7,7
+2,1
+3,7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+7
+1e,0
+2,1
+2,7
+2,1
+8,7
+5,1
+3,7
+4,1
+3,7
+5,1
+7
+6,1
+7
+6,1
+7
+2,1
+2,7
+2,1
+7
+2,1
+2,7
+2,1
+2,7
+4,1
+2,7
+1e,0
+46,7
+1e,0
+46,7
+165f,0
+100 90 32
+7d3,0
+46,10
+1e,0
+46,10
+1e,0
+10
+4,1
+9,10
+2,1
+6,10
+4,1
+6,10
+2,1
+10
+6,1
+2,10
+3,1
+3,10
+1
+4,10
+1
+9,10
+4,1
+2,10
+1e,0
+2,1
+2,10
+2,1
+8,10
+2,1
+5,10
+2,1
+2,10
+2,1
+5,10
+2,1
+10
+2,1
+7,10
+2,1
+3,10
+2,1
+2,10
+2,1
+8,10
+2,1
+2,10
+2,1
+10
+1e,0
+2,1
+2,10
+2,1
+8,10
+2,1
+5,10
+2,1
+9,10
+2,1
+10
+2,1
+7,10
+2,1
+3,10
+6,1
+8,10
+2,1
+2,10
+2,1
+10
+1e,0
+2,1
+2,10
+2,1
+8,10
+5,1
+2,10
+2,1
+6,10
+5,1
+10
+2,1
+7,10
+2,1
+3,10
+6,1
+10
+5,1
+2,10
+2,1
+2,10
+2,1
+10
+1e,0
+6,1
+8,10
+2,1
+2,10
+2,1
+10
+2,1
+5,10
+2,1
+2,10
+2,1
+10
+5,1
+4,10
+2,1
+3,10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+1e,0
+2,1
+2,10
+2,1
+8,10
+2,1
+2,10
+2,1
+10
+2,1
+5,10
+2,1
+2,10
+2,1
+10
+2,1
+7,10
+2,1
+3,10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+1e,0
+2,1
+2,10
+2,1
+8,10
+2,1
+2,10
+2,1
+10
+2,1
+5,10
+2,1
+2,10
+2,1
+10
+2,1
+7,10
+2,1
+3,10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+1e,0
+2,1
+2,10
+2,1
+8,10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+7,10
+2,1
+3,10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+10
+1e,0
+2,1
+2,10
+2,1
+8,10
+5,1
+3,10
+4,1
+3,10
+5,1
+10
+6,1
+10
+6,1
+10
+2,1
+2,10
+2,1
+10
+2,1
+2,10
+2,1
+2,10
+4,1
+2,10
+1e,0
+46,10
+1e,0
+46,10
+165f,0
+100 90 32
+7d3,0
+46,33
+1e,0
+46,33
+1e,0
+33
+4,1
+9,33
+2,1
+6,33
+4,1
+6,33
+2,1
+33
+6,1
+2,33
+3,1
+3,33
+1
+4,33
+1
+9,33
+4,1
+2,33
+1e,0
+2,1
+2,33
+2,1
+8,33
+2,1
+5,33
+2,1
+2,33
+2,1
+5,33
+2,1
+33
+2,1
+7,33
+2,1
+3,33
+2,1
+2,33
+2,1
+8,33
+2,1
+2,33
+2,1
+33
+1e,0
+2,1
+2,33
+2,1
+8,33
+2,1
+5,33
+2,1
+9,33
+2,1
+33
+2,1
+7,33
+2,1
+3,33
+6,1
+8,33
+2,1
+2,33
+2,1
+33
+1e,0
+2,1
+2,33
+2,1
+8,33
+5,1
+2,33
+2,1
+6,33
+5,1
+33
+2,1
+7,33
+2,1
+3,33
+6,1
+33
+5,1
+2,33
+2,1
+2,33
+2,1
+33
+1e,0
+6,1
+8,33
+2,1
+2,33
+2,1
+33
+2,1
+5,33
+2,1
+2,33
+2,1
+33
+5,1
+4,33
+2,1
+3,33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+1e,0
+2,1
+2,33
+2,1
+8,33
+2,1
+2,33
+2,1
+33
+2,1
+5,33
+2,1
+2,33
+2,1
+33
+2,1
+7,33
+2,1
+3,33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+1e,0
+2,1
+2,33
+2,1
+8,33
+2,1
+2,33
+2,1
+33
+2,1
+5,33
+2,1
+2,33
+2,1
+33
+2,1
+7,33
+2,1
+3,33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+1e,0
+2,1
+2,33
+2,1
+8,33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+7,33
+2,1
+3,33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+33
+1e,0
+2,1
+2,33
+2,1
+8,33
+5,1
+3,33
+4,1
+3,33
+5,1
+33
+6,1
+33
+6,1
+33
+2,1
+2,33
+2,1
+33
+2,1
+2,33
+2,1
+2,33
+4,1
+2,33
+1e,0
+46,33
+1e,0
+46,33
+165f,0
+100 90 32
+7d3,0
+46,81
+1e,0
+46,81
+1e,0
+81
+4,1
+9,81
+2,1
+6,81
+4,1
+6,81
+2,1
+81
+6,1
+2,81
+3,1
+3,81
+1
+4,81
+1
+9,81
+4,1
+2,81
+1e,0
+2,1
+2,81
+2,1
+8,81
+2,1
+5,81
+2,1
+2,81
+2,1
+5,81
+2,1
+81
+2,1
+7,81
+2,1
+3,81
+2,1
+2,81
+2,1
+8,81
+2,1
+2,81
+2,1
+81
+1e,0
+2,1
+2,81
+2,1
+8,81
+2,1
+5,81
+2,1
+9,81
+2,1
+81
+2,1
+7,81
+2,1
+3,81
+6,1
+8,81
+2,1
+2,81
+2,1
+81
+1e,0
+2,1
+2,81
+2,1
+8,81
+5,1
+2,81
+2,1
+6,81
+5,1
+81
+2,1
+7,81
+2,1
+3,81
+6,1
+81
+5,1
+2,81
+2,1
+2,81
+2,1
+81
+1e,0
+6,1
+8,81
+2,1
+2,81
+2,1
+81
+2,1
+5,81
+2,1
+2,81
+2,1
+81
+5,1
+4,81
+2,1
+3,81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+1e,0
+2,1
+2,81
+2,1
+8,81
+2,1
+2,81
+2,1
+81
+2,1
+5,81
+2,1
+2,81
+2,1
+81
+2,1
+7,81
+2,1
+3,81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+1e,0
+2,1
+2,81
+2,1
+8,81
+2,1
+2,81
+2,1
+81
+2,1
+5,81
+2,1
+2,81
+2,1
+81
+2,1
+7,81
+2,1
+3,81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+1e,0
+2,1
+2,81
+2,1
+8,81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+7,81
+2,1
+3,81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+81
+1e,0
+2,1
+2,81
+2,1
+8,81
+5,1
+3,81
+4,1
+3,81
+5,1
+81
+6,1
+81
+6,1
+81
+2,1
+2,81
+2,1
+81
+2,1
+2,81
+2,1
+2,81
+4,1
+2,81
+1e,0
+46,81
+1e,0
+46,81
+165f,0
+100 90 32
+7d3,0
+46,a3
+1e,0
+46,a3
+1e,0
+a3
+4,1
+9,a3
+2,1
+6,a3
+4,1
+6,a3
+2,1
+a3
+6,1
+2,a3
+3,1
+3,a3
+1
+4,a3
+1
+9,a3
+4,1
+2,a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+2,1
+5,a3
+2,1
+2,a3
+2,1
+5,a3
+2,1
+a3
+2,1
+7,a3
+2,1
+3,a3
+2,1
+2,a3
+2,1
+8,a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+2,1
+5,a3
+2,1
+9,a3
+2,1
+a3
+2,1
+7,a3
+2,1
+3,a3
+6,1
+8,a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+5,1
+2,a3
+2,1
+6,a3
+5,1
+a3
+2,1
+7,a3
+2,1
+3,a3
+6,1
+a3
+5,1
+2,a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+6,1
+8,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+5,a3
+2,1
+2,a3
+2,1
+a3
+5,1
+4,a3
+2,1
+3,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+5,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+7,a3
+2,1
+3,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+5,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+7,a3
+2,1
+3,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+7,a3
+2,1
+3,a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+a3
+1e,0
+2,1
+2,a3
+2,1
+8,a3
+5,1
+3,a3
+4,1
+3,a3
+5,1
+a3
+6,1
+a3
+6,1
+a3
+2,1
+2,a3
+2,1
+a3
+2,1
+2,a3
+2,1
+2,a3
+4,1
+2,a3
+1e,0
+46,a3
+1e,0
+46,a3
+165f,0
+100 90 32
+7d3,0
+46,ff
+1e,0
+46,ff
+1e,0
+ff
+4,1
+9,ff
+2,1
+6,ff
+4,1
+6,ff
+2,1
+ff
+6,1
+2,ff
+3,1
+3,ff
+1
+4,ff
+1
+9,ff
+4,1
+2,ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+2,1
+5,ff
+2,1
+2,ff
+2,1
+5,ff
+2,1
+ff
+2,1
+7,ff
+2,1
+3,ff
+2,1
+2,ff
+2,1
+8,ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+2,1
+5,ff
+2,1
+9,ff
+2,1
+ff
+2,1
+7,ff
+2,1
+3,ff
+6,1
+8,ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+5,1
+2,ff
+2,1
+6,ff
+5,1
+ff
+2,1
+7,ff
+2,1
+3,ff
+6,1
+ff
+5,1
+2,ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+6,1
+8,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+5,ff
+2,1
+2,ff
+2,1
+ff
+5,1
+4,ff
+2,1
+3,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+5,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+7,ff
+2,1
+3,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+5,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+7,ff
+2,1
+3,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+7,ff
+2,1
+3,ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+ff
+1e,0
+2,1
+2,ff
+2,1
+8,ff
+5,1
+3,ff
+4,1
+3,ff
+5,1
+ff
+6,1
+ff
+6,1
+ff
+2,1
+2,ff
+2,1
+ff
+2,1
+2,ff
+2,1
+2,ff
+4,1
+2,ff
+1e,0
+46,ff
+1e,0
+46,ff
+165f,0
+100 90 32
+7d3,0
+46,100
+1e,0
+46,100
+1e,0
+100
+4,1
+9,100
+2,1
+6,100
+4,1
+6,100
+2,1
+100
+6,1
+2,100
+3,1
+3,100
+1
+4,100
+1
+9,100
+4,1
+2,100
+1e,0
+2,1
+2,100
+2,1
+8,100
+2,1
+5,100
+2,1
+2,100
+2,1
+5,100
+2,1
+100
+2,1
+7,100
+2,1
+3,100
+2,1
+2,100
+2,1
+8,100
+2,1
+2,100
+2,1
+100
+1e,0
+2,1
+2,100
+2,1
+8,100
+2,1
+5,100
+2,1
+9,100
+2,1
+100
+2,1
+7,100
+2,1
+3,100
+6,1
+8,100
+2,1
+2,100
+2,1
+100
+1e,0
+2,1
+2,100
+2,1
+8,100
+5,1
+2,100
+2,1
+6,100
+5,1
+100
+2,1
+7,100
+2,1
+3,100
+6,1
+100
+5,1
+2,100
+2,1
+2,100
+2,1
+100
+1e,0
+6,1
+8,100
+2,1
+2,100
+2,1
+100
+2,1
+5,100
+2,1
+2,100
+2,1
+100
+5,1
+4,100
+2,1
+3,100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+1e,0
+2,1
+2,100
+2,1
+8,100
+2,1
+2,100
+2,1
+100
+2,1
+5,100
+2,1
+2,100
+2,1
+100
+2,1
+7,100
+2,1
+3,100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+1e,0
+2,1
+2,100
+2,1
+8,100
+2,1
+2,100
+2,1
+100
+2,1
+5,100
+2,1
+2,100
+2,1
+100
+2,1
+7,100
+2,1
+3,100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+1e,0
+2,1
+2,100
+2,1
+8,100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+7,100
+2,1
+3,100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+100
+1e,0
+2,1
+2,100
+2,1
+8,100
+5,1
+3,100
+4,1
+3,100
+5,1
+100
+6,1
+100
+6,1
+100
+2,1
+2,100
+2,1
+100
+2,1
+2,100
+2,1
+2,100
+4,1
+2,100
+1e,0
+46,100
+1e,0
+46,100
+165f,0
+100 90 32
+7d3,0
+46,12c
+1e,0
+46,12c
+1e,0
+12c
+4,1
+9,12c
+2,1
+6,12c
+4,1
+6,12c
+2,1
+12c
+6,1
+2,12c
+3,1
+3,12c
+1
+4,12c
+1
+9,12c
+4,1
+2,12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+2,1
+5,12c
+2,1
+2,12c
+2,1
+5,12c
+2,1
+12c
+2,1
+7,12c
+2,1
+3,12c
+2,1
+2,12c
+2,1
+8,12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+2,1
+5,12c
+2,1
+9,12c
+2,1
+12c
+2,1
+7,12c
+2,1
+3,12c
+6,1
+8,12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+5,1
+2,12c
+2,1
+6,12c
+5,1
+12c
+2,1
+7,12c
+2,1
+3,12c
+6,1
+12c
+5,1
+2,12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+6,1
+8,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+5,12c
+2,1
+2,12c
+2,1
+12c
+5,1
+4,12c
+2,1
+3,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+5,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+7,12c
+2,1
+3,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+5,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+7,12c
+2,1
+3,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+7,12c
+2,1
+3,12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+12c
+1e,0
+2,1
+2,12c
+2,1
+8,12c
+5,1
+3,12c
+4,1
+3,12c
+5,1
+12c
+6,1
+12c
+6,1
+12c
+2,1
+2,12c
+2,1
+12c
+2,1
+2,12c
+2,1
+2,12c
+4,1
+2,12c
+1e,0
+46,12c
+1e,0
+46,12c
+165f,0
+100 90 32
+7d3,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+3e8
+4,1
+9,3e8
+2,1
+6,3e8
+4,1
+6,3e8
+2,1
+3e8
+6,1
+2,3e8
+3,1
+3,3e8
+1
+4,3e8
+1
+9,3e8
+4,1
+2,3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+2,1
+5,3e8
+2,1
+2,3e8
+2,1
+5,3e8
+2,1
+3e8
+2,1
+7,3e8
+2,1
+3,3e8
+2,1
+2,3e8
+2,1
+8,3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+2,1
+5,3e8
+2,1
+9,3e8
+2,1
+3e8
+2,1
+7,3e8
+2,1
+3,3e8
+6,1
+8,3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+5,1
+2,3e8
+2,1
+6,3e8
+5,1
+3e8
+2,1
+7,3e8
+2,1
+3,3e8
+6,1
+3e8
+5,1
+2,3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+6,1
+8,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+5,3e8
+2,1
+2,3e8
+2,1
+3e8
+5,1
+4,3e8
+2,1
+3,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+5,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+7,3e8
+2,1
+3,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+5,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+7,3e8
+2,1
+3,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+7,3e8
+2,1
+3,3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+1e,0
+2,1
+2,3e8
+2,1
+8,3e8
+5,1
+3,3e8
+4,1
+3,3e8
+5,1
+3e8
+6,1
+3e8
+6,1
+3e8
+2,1
+2,3e8
+2,1
+3e8
+2,1
+2,3e8
+2,1
+2,3e8
+4,1
+2,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+165f,0
+100 90 32
+7d3,0
+46,111111
+1e,0
+46,111111
+1e,0
+111111
+4,1
+9,111111
+2,1
+6,111111
+4,1
+6,111111
+2,1
+111111
+6,1
+2,111111
+3,1
+3,111111
+1
+4,111111
+1
+9,111111
+4,1
+2,111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+2,1
+5,111111
+2,1
+2,111111
+2,1
+5,111111
+2,1
+111111
+2,1
+7,111111
+2,1
+3,111111
+2,1
+2,111111
+2,1
+8,111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+2,1
+5,111111
+2,1
+9,111111
+2,1
+111111
+2,1
+7,111111
+2,1
+3,111111
+6,1
+8,111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+5,1
+2,111111
+2,1
+6,111111
+5,1
+111111
+2,1
+7,111111
+2,1
+3,111111
+6,1
+111111
+5,1
+2,111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+6,1
+8,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+5,111111
+2,1
+2,111111
+2,1
+111111
+5,1
+4,111111
+2,1
+3,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+5,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+7,111111
+2,1
+3,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+5,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+7,111111
+2,1
+3,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+7,111111
+2,1
+3,111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+111111
+1e,0
+2,1
+2,111111
+2,1
+8,111111
+5,1
+3,111111
+4,1
+3,111111
+5,1
+111111
+6,1
+111111
+6,1
+111111
+2,1
+2,111111
+2,1
+111111
+2,1
+2,111111
+2,1
+2,111111
+4,1
+2,111111
+1e,0
+46,111111
+1e,0
+46,111111
+165f,0
+100 90 32
+7d3,0
+46,400200
+1e,0
+46,400200
+1e,0
+400200
+4,1
+9,400200
+2,1
+6,400200
+4,1
+6,400200
+2,1
+400200
+6,1
+2,400200
+3,1
+3,400200
+1
+4,400200
+1
+9,400200
+4,1
+2,400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+2,1
+5,400200
+2,1
+2,400200
+2,1
+5,400200
+2,1
+400200
+2,1
+7,400200
+2,1
+3,400200
+2,1
+2,400200
+2,1
+8,400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+2,1
+5,400200
+2,1
+9,400200
+2,1
+400200
+2,1
+7,400200
+2,1
+3,400200
+6,1
+8,400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+5,1
+2,400200
+2,1
+6,400200
+5,1
+400200
+2,1
+7,400200
+2,1
+3,400200
+6,1
+400200
+5,1
+2,400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+6,1
+8,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+5,400200
+2,1
+2,400200
+2,1
+400200
+5,1
+4,400200
+2,1
+3,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+5,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+7,400200
+2,1
+3,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+5,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+7,400200
+2,1
+3,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+7,400200
+2,1
+3,400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+400200
+1e,0
+2,1
+2,400200
+2,1
+8,400200
+5,1
+3,400200
+4,1
+3,400200
+5,1
+400200
+6,1
+400200
+6,1
+400200
+2,1
+2,400200
+2,1
+400200
+2,1
+2,400200
+2,1
+2,400200
+4,1
+2,400200
+1e,0
+46,400200
+1e,0
+46,400200
+165f,0
+100 90 32
+7d3,0
+46,777777
+1e,0
+46,777777
+1e,0
+777777
+4,1
+9,777777
+2,1
+6,777777
+4,1
+6,777777
+2,1
+777777
+6,1
+2,777777
+3,1
+3,777777
+1
+4,777777
+1
+9,777777
+4,1
+2,777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+2,1
+5,777777
+2,1
+2,777777
+2,1
+5,777777
+2,1
+777777
+2,1
+7,777777
+2,1
+3,777777
+2,1
+2,777777
+2,1
+8,777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+2,1
+5,777777
+2,1
+9,777777
+2,1
+777777
+2,1
+7,777777
+2,1
+3,777777
+6,1
+8,777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+5,1
+2,777777
+2,1
+6,777777
+5,1
+777777
+2,1
+7,777777
+2,1
+3,777777
+6,1
+777777
+5,1
+2,777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+6,1
+8,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+5,777777
+2,1
+2,777777
+2,1
+777777
+5,1
+4,777777
+2,1
+3,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+5,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+7,777777
+2,1
+3,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+5,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+7,777777
+2,1
+3,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+7,777777
+2,1
+3,777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+777777
+1e,0
+2,1
+2,777777
+2,1
+8,777777
+5,1
+3,777777
+4,1
+3,777777
+5,1
+777777
+6,1
+777777
+6,1
+777777
+2,1
+2,777777
+2,1
+777777
+2,1
+2,777777
+2,1
+2,777777
+4,1
+2,777777
+1e,0
+46,777777
+1e,0
+46,777777
+165f,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a3.dat b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a3.dat
new file mode 100644
index 000000000..8e2611798
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/a3.dat
@@ -0,0 +1,373 @@
+! $XConsortium$
+100 90 32
+2,0
+2,1
+12,0
+2,1
+12,0
+2,1
+12,0
+2,1
+12,0
+2,1
+588,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+f,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+11,0
+2,1
+12,0
+2,1
+12,0
+2,1
+12,0
+2,1
+12,0
+2,1
+588,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+f,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+11,0
+2,1
+12,0
+2,1
+12,0
+2,1
+12,0
+2,1
+12,0
+2,1
+588,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+f,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+11,0
+2,1
+12,0
+2,1
+12,0
+2,1
+12,0
+2,1
+12,0
+2,1
+588,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+f,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+10,0
+4,1
+11,0
+2,1
+12,0
+2,1
+12,0
+2,1
+12,0
+2,1
+12,0
+2,1
+394,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwimgstr/drwimgstr.m b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/drwimgstr.m
new file mode 100644
index 000000000..bf50191f2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwimgstr/drwimgstr.m
@@ -0,0 +1,221 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawImageString CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+int x = 3;
+int y = 30;
+char *string = "A bCdElMnO";
+int length = strlen(string);
+>>EXTERN
+
+/* Needed because function not used */
+#define A_DRAW A_DRAWABLE
+
+static Font Xtfonts[XT_NFONTS];
+
+>>SET startup localstartup
+>>SET cleanup fontcleanup
+static void
+localstartup()
+{
+ fontstartup();
+ if(Dsp) {
+ openfonts(Xtfonts, XT_NFONTS);
+ setgcfont(Xtfonts[1]);
+ }
+}
+
+>>ASSERTION Good A
+A call to xname first fills the destination rectangle with the
+.M background
+pixel value and next draws a
+.A string
+of 8-bit characters, selected from the
+.A gc 's
+.M font ,
+using the
+.M foreground
+pixel value.
+>>STRATEGY
+Reverse foreground and background pixel values in the gc.
+For each font
+ Set the font into the gc.
+ Draw string
+ Pixel verify.
+>>CODE
+XVisualInfo *vp;
+int fn;
+unsigned int width;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XSetForeground(display, gc, W_BG);
+ XSetBackground(display, gc, W_FG);
+
+ getsize(display, d, &width, (unsigned int*)0);
+
+ for (fn = 0; fn < XT_NFONTS; fn++) {
+
+ XSetFont(display, gc, Xtfonts[fn]);
+ if (fn == 4 || fn == 6)
+ x = width-4;
+ else
+ x = 3;
+
+ XCALL;
+
+ PIXCHECK(display, d);
+ dclear(display, d);
+ }
+ }
+
+ CHECKPASS(XT_NFONTS*nvinf());
+>>ASSERTION def Good A
+>># NOTE is it always the Top-left corner, what if font is R-to-L ??? Ask Bob?
+The upper-left corner of the filled rectangle is at
+[
+.A x ,
+.A y
+- font-ascent],
+with width equal to the sum of the per-character
+.M width s,
+and with height
+font-ascent + font-descent, where
+font-ascent and font-descent
+are the logical ascent and descent of the
+.M font .
+>>ASSERTION Good A
+The origin of the string is at
+[
+.A x ,
+.A y
+].
+>>STRATEGY
+Vary x and y
+ Draw string
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+unsigned int width, height;
+
+ string = "v";
+ length = 1;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ getsize(display, d, &width, &height);
+
+ for (x = 0; x < width; x += 20) {
+ for (y = 0; y < width; y += 20) {
+ XCALL;
+ }
+ }
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+The effective
+.M function
+is
+.S GXcopy ,
+and the effective
+.M fill_style
+is
+.S FillSolid .
+>>STRATEGY
+Set gc funtion to GXxor
+Set fill-style to FillTiled
+Set tile.
+Verify that these settings have no effect.
+>>CODE
+XVisualInfo *vp;
+XImage *sav;
+Pixmap tile;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XSetForeground(display, gc, W_BG);
+ XSetBackground(display, gc, W_FG);
+
+ XCALL;
+ sav = savimage(display, d);
+ dclear(display, d);
+
+ /* Make pixmap with same depth as drawable under test */
+ tile = makepixm(display, vp);
+ pattern(display, tile);
+
+ XSetFunction(display, gc, GXxor);
+ XSetFillStyle(display, gc, FillTiled);
+ XSetTile(display, gc, tile);
+
+ XCALL;
+ XCALL;
+
+ if (compsavimage(display, d, sav))
+ CHECK;
+ else {
+ report("Effective function and fill style test failed");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good B 3
+When the font is defined with 2-byte matrix indexing, then
+each byte is used as a byte2 with a byte1 of zero.
+>>ASSERTION gc
+On a call to xname the GC components
+.M plane-mask ,
+.M font ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground
+and
+.M background
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY kieron Completed Check format and pass ac
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a1.dat
new file mode 100644
index 000000000..d0ce10252
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a1.dat
@@ -0,0 +1,29 @@
+! $XConsortium$
+100 90 32
+3f2,0
+1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+1a71,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a2.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a2.dat
new file mode 100644
index 000000000..95ed8f3c1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a2.dat
@@ -0,0 +1,43 @@
+! $XConsortium$
+100 90 32
+32c,0
+1
+62,0
+4,1
+5f,0
+6,1
+5e,0
+8,1
+5b,0
+a,1
+5b,0
+b,1
+5a,0
+c,1
+5a,0
+b,1
+5a,0
+c,1
+5a,0
+c,1
+5a,0
+b,1
+5a,0
+c,1
+5a,0
+b,1
+59,0
+c,1
+4d,0
+16,1
+4e,0
+15,1
+4f,0
+16,1
+4e,0
+16,1
+4f,0
+15,1
+4f,0
+a,1
+1887,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a23.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a23.dat
new file mode 100644
index 000000000..efd7c8be0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a23.dat
@@ -0,0 +1,205 @@
+! $XConsortium$
+100 90 32
+1c0,0
+2,1
+11,0
+1
+4f,0
+6,1
+d,0
+3,1
+4e,0
+5,1
+e,0
+4,1
+4d,0
+5,1
+d,0
+7,1
+4a,0
+6,1
+c,0
+9,1
+49,0
+5,1
+c,0
+a,1
+2a,0
+2,1
+1c,0
+6,1
+c,0
+a,1
+2b,0
+2,1
+1b,0
+5,1
+c,0
+a,1
+2e,0
+2,1
+19,0
+5,1
+b,0
+a,1
+2a,0
+2,1
+5,0
+2,1
+16,0
+5,1
+c,0
+9,1
+2b,0
+2,1
+6,0
+3,1
+14,0
+5,1
+b,0
+a,1
+2b,0
+2,1
+8,0
+2,1
+12,0
+6,1
+a,0
+a,1
+2c,0
+2,1
+a,0
+2,1
+10,0
+5,1
+a,0
+a,1
+2d,0
+2,1
+c,0
+2,1
+d,0
+6,1
+a,0
+a,1
+2d,0
+2,1
+d,0
+3,1
+b,0
+5,1
+a,0
+a,1
+2f,0
+2,1
+e,0
+2,1
+a,0
+5,1
+9,0
+a,1
+30,0
+2,1
+10,0
+2,1
+7,0
+6,1
+9,0
+9,1
+31,0
+2,1
+12,0
+2,1
+7,0
+3,1
+9,0
+a,1
+31,0
+2,1
+13,0
+3,1
+10,0
+a,1
+32,0
+2,1
+15,0
+2,1
+e,0
+a,1
+33,0
+1
+18,0
+2,1
+c,0
+a,1
+4e,0
+2,1
+a,0
+9,1
+50,0
+3,1
+9,0
+7,1
+53,0
+2,1
+9,0
+5,1
+56,0
+2,1
+9,0
+3,1
+58,0
+2,1
+8,0
+1
+5a,0
+1
+552,0
+2,1
+62,0
+6,1
+5e,0
+a,1
+59,0
+10,1
+54,0
+14,1
+50,0
+18,1
+4c,0
+1d,1
+46,0
+22,1
+42,0
+26,1
+3e,0
+29,1
+3b,0
+29,1
+3b,0
+29,1
+3a,0
+29,1
+3b,0
+29,1
+3b,0
+29,1
+3e,0
+26,1
+42,0
+21,1
+47,0
+1d,1
+4c,0
+18,1
+50,0
+14,1
+54,0
+10,1
+59,0
+a,1
+5e,0
+6,1
+62,0
+2,1
+8cc,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a3.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a3.dat
new file mode 100644
index 000000000..d0ce10252
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a3.dat
@@ -0,0 +1,29 @@
+! $XConsortium$
+100 90 32
+3f2,0
+1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+1a71,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a31.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a31.dat
new file mode 100644
index 000000000..da3b8ff11
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a31.dat
@@ -0,0 +1,303 @@
+! $XConsortium$
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1ab6,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1ab6,0
+100 90 32
+71a,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+1ab4,0
+100 90 32
+71c,0
+f,1
+d,0
+f,1
+38,0
+11,1
+b,0
+11,1
+36,0
+12,1
+a,0
+12,1
+37,0
+11,1
+b,0
+11,1
+1ab4,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1a52,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1a52,0
+100 90 32
+71a,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+1a4f,0
+100 90 32
+71b,0
+11,1
+b,0
+11,1
+36,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+36,0
+11,1
+b,0
+11,1
+1a50,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1ab6,0
+100 90 32
+71a,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+1ab4,0
+100 90 32
+71c,0
+f,1
+d,0
+f,1
+38,0
+11,1
+b,0
+11,1
+36,0
+12,1
+a,0
+12,1
+37,0
+11,1
+b,0
+11,1
+1ab4,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1a52,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1a52,0
+100 90 32
+71a,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+1a4f,0
+100 90 32
+71b,0
+11,1
+b,0
+11,1
+36,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+36,0
+11,1
+b,0
+11,1
+1a50,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a38.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a38.dat
new file mode 100644
index 000000000..34b67299d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a38.dat
@@ -0,0 +1,308 @@
+! $XConsortium$
+100 90 32
+71c,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+2,3
+32,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+2,3
+32,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+2
+32,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+4,0
+2
+3
+32,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+1a4a,0
+100 90 32
+6b8,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+2
+32,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+2,3
+32,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+2,3
+32,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+2
+32,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+4,0
+2
+3
+32,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+1a4a,0
+100 90 32
+6b8,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+2
+32,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+2,3
+32,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+2,3
+32,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+2
+32,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+4,0
+2
+3
+32,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+1a4a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a39.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a39.dat
new file mode 100644
index 000000000..8c417237e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a39.dat
@@ -0,0 +1,197 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+1
+32,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+3d,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a58,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+1
+32,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+3d,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a58,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+1
+32,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+3d,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a58,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a4.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a4.dat
new file mode 100644
index 000000000..a01ad9bd4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a4.dat
@@ -0,0 +1,83 @@
+! $XConsortium$
+100 90 32
+32c,0
+1
+62,0
+4,1
+c,0
+2,1
+51,0
+6,1
+a,0
+4,1
+50,0
+8,1
+7,0
+6,1
+4e,0
+a,1
+5,0
+8,1
+4e,0
+b,1
+2,0
+9,1
+4f,0
+b,1
+0
+8,1
+52,0
+8,1
+3,0
+6,1
+54,0
+6,1
+6,0
+3,1
+57,0
+3,1
+6c,0
+2,1
+58,0
+2,1
+7,0
+5,1
+55,0
+5,1
+4,0
+7,1
+53,0
+8,1
+0
+9,1
+51,0
+9,1
+0
+8,1
+51,0
+9,1
+4,0
+5,1
+51,0
+9,1
+6,0
+4,1
+50,0
+9,1
+9,0
+1
+50,0
+9,1
+5a,0
+9,1
+5a,0
+9,1
+5c,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+62,0
+1
+169b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a40.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a40.dat
new file mode 100644
index 000000000..8c417237e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a40.dat
@@ -0,0 +1,197 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+1
+32,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+3d,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a58,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+1
+32,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+3d,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a58,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+1
+32,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+3d,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a58,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a41.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a41.dat
new file mode 100644
index 000000000..903a5bdea
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a41.dat
@@ -0,0 +1,63 @@
+! $XConsortium$
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1ab6,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1a52,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1a52,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a42.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a42.dat
new file mode 100644
index 000000000..a44f59928
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a42.dat
@@ -0,0 +1,161 @@
+! $XConsortium$
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+2,3
+32,0
+32,3
+32,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+2
+32,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+3
+1aae,0
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+2,3
+32,0
+32,3
+32,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+2
+32,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+3
+32,0
+3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2
+1a4a,0
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+2,3
+32,0
+32,3
+32,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+2
+32,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+3
+32,0
+3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2
+1a4a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a43.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a43.dat
new file mode 100644
index 000000000..961e2b6a0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a43.dat
@@ -0,0 +1,189 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+32,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+1
+3d,0
+d,1
+b,0
+d,1
+1ab0,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+32,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+1
+3d,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+1a54,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+32,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+1
+3d,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+1a54,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a44.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a44.dat
new file mode 100644
index 000000000..876794558
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a44.dat
@@ -0,0 +1,147 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+45,0
+3,1
+15,0
+7,1
+1ab6,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+45,0
+3,1
+15,0
+7,1
+3e,0
+a,1
+e,0
+c,1
+1a54,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+45,0
+3,1
+15,0
+7,1
+3e,0
+a,1
+e,0
+c,1
+1a54,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a53.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a53.dat
new file mode 100644
index 000000000..970367c62
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a53.dat
@@ -0,0 +1,157 @@
+! $XConsortium$
+100 90 32
+4c1,0
+1
+63,0
+3,1
+60,0
+6,1
+5d,0
+9,1
+5b,0
+b,1
+58,0
+e,1
+56,0
+10,1
+55,0
+11,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+11,1
+55,0
+10,1
+56,0
+e,1
+58,0
+b,1
+5b,0
+8,1
+5e,0
+6,1
+60,0
+3,1
+63,0
+1
+14e7,0
+100 90 32
+4c1,0
+3,1
+61,0
+4,1
+5f,0
+7,1
+5c,0
+a,1
+5a,0
+c,1
+57,0
+f,1
+55,0
+11,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+11,1
+55,0
+f,1
+57,0
+c,1
+5a,0
+9,1
+5d,0
+7,1
+5f,0
+4,1
+61,0
+3,1
+14e7,0
+100 90 32
+4c1,0
+3,1
+61,0
+4,1
+5f,0
+7,1
+5c,0
+a,1
+5a,0
+c,1
+57,0
+f,1
+55,0
+11,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+11,1
+55,0
+f,1
+57,0
+c,1
+5a,0
+9,1
+5d,0
+7,1
+5f,0
+4,1
+61,0
+3,1
+14e7,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a55.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a55.dat
new file mode 100644
index 000000000..63946d976
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a55.dat
@@ -0,0 +1,1255 @@
+! $XConsortium$
+100 90 32
+5eb,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+3,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+3,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+1280,0
+100 90 32
+587,0
+1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+5,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+5,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+3,1
+1280,0
+100 90 32
+523,0
+1
+62,0
+4,1
+5f,0
+7,1
+5e,0
+7,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+9,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+9,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+7,1
+5e,0
+6,1
+60,0
+4,1
+121b,0
+100 90 32
+522,0
+3,1
+60,0
+6,1
+5e,0
+8,1
+5c,0
+9,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+b,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+b,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+9,1
+5c,0
+8,1
+5e,0
+6,1
+60,0
+3,1
+11b7,0
+100 90 32
+3f7,0
+1
+60,0
+7,1
+5c,0
+9,1
+5b,0
+b,1
+59,0
+d,1
+56,0
+10,1
+55,0
+10,1
+54,0
+12,1
+52,0
+14,1
+51,0
+15,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+13,1
+53,0
+12,1
+54,0
+10,1
+55,0
+f,1
+57,0
+d,1
+59,0
+b,1
+5b,0
+8,1
+5d,0
+6,1
+10ee,0
+100 90 32
+3f5,0
+5,1
+5e,0
+8,1
+5b,0
+a,1
+59,0
+d,1
+57,0
+f,1
+55,0
+11,1
+53,0
+12,1
+52,0
+14,1
+51,0
+15,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+15,1
+51,0
+14,1
+52,0
+12,1
+53,0
+11,1
+55,0
+f,1
+57,0
+d,1
+59,0
+a,1
+5b,0
+8,1
+5e,0
+5,1
+108a,0
+100 90 32
+2,0
+1c,1
+47,0
+1e,1
+45,0
+21,1
+43,0
+23,1
+41,0
+25,1
+3f,0
+27,1
+3d,0
+28,1
+3c,0
+2a,1
+3a,0
+2c,1
+38,0
+2e,1
+36,0
+2f,1
+35,0
+31,1
+33,0
+33,1
+31,0
+35,1
+2f,0
+37,1
+2d,0
+38,1
+2c,0
+3a,1
+2a,0
+3c,1
+28,0
+3e,1
+26,0
+3f,1
+25,0
+41,1
+23,0
+43,1
+21,0
+45,1
+1f,0
+47,1
+1d,0
+48,1
+1c,0
+4a,1
+1a,0
+4b,1
+19,0
+4d,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4d,1
+18,0
+4d,1
+19,0
+4c,1
+1a,0
+4a,1
+1b,0
+4a,1
+1c,0
+48,1
+1e,0
+47,1
+1f,0
+45,1
+21,0
+43,1
+22,0
+42,1
+24,0
+40,1
+26,0
+3e,1
+28,0
+3c,1
+29,0
+3b,1
+2b,0
+39,1
+2d,0
+37,1
+2f,0
+35,1
+31,0
+33,1
+32,0
+32,1
+34,0
+2f,1
+37,0
+2d,1
+39,0
+2a,1
+3b,0
+29,1
+3d,0
+26,1
+40,0
+23,1
+43,0
+21,1
+45,0
+1e,1
+47,0
+1c,1
+4a,0
+18,1
+4e,0
+15,1
+51,0
+11,1
+55,0
+d,1
+b0e,0
+100 90 32
+2,0
+1d,1
+46,0
+1f,1
+44,0
+22,1
+42,0
+24,1
+40,0
+26,1
+3e,0
+28,1
+3c,0
+29,1
+3b,0
+2b,1
+39,0
+2d,1
+37,0
+2f,1
+35,0
+30,1
+34,0
+32,1
+32,0
+34,1
+30,0
+36,1
+2e,0
+38,1
+2c,0
+39,1
+2b,0
+3b,1
+29,0
+3d,1
+27,0
+3f,1
+25,0
+40,1
+24,0
+42,1
+22,0
+44,1
+20,0
+46,1
+1e,0
+48,1
+1c,0
+49,1
+1b,0
+4b,1
+19,0
+4c,1
+18,0
+4d,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4d,1
+19,0
+4c,1
+19,0
+4b,1
+1b,0
+4a,1
+1c,0
+48,1
+1e,0
+46,1
+20,0
+45,1
+20,0
+44,1
+22,0
+42,1
+24,0
+40,1
+26,0
+3e,1
+27,0
+3d,1
+29,0
+3b,1
+2b,0
+39,1
+2d,0
+37,1
+2f,0
+34,1
+31,0
+33,1
+33,0
+31,1
+35,0
+2e,1
+38,0
+2c,1
+39,0
+2a,1
+3c,0
+28,1
+3e,0
+25,1
+41,0
+22,1
+44,0
+1f,1
+46,0
+1d,1
+49,0
+1a,1
+4c,0
+17,1
+4f,0
+13,1
+53,0
+f,1
+58,0
+9,1
+aac,0
+100 90 32
+587,0
+1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+5,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+5,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+3,1
+1280,0
+100 90 32
+523,0
+1
+62,0
+4,1
+5f,0
+7,1
+5e,0
+7,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+9,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+9,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+7,1
+5e,0
+6,1
+60,0
+4,1
+121b,0
+100 90 32
+522,0
+3,1
+60,0
+6,1
+5e,0
+8,1
+5c,0
+9,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+b,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+b,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+9,1
+5c,0
+8,1
+5e,0
+6,1
+60,0
+3,1
+11b7,0
+100 90 32
+3f7,0
+1
+60,0
+7,1
+5c,0
+9,1
+5b,0
+b,1
+59,0
+d,1
+56,0
+10,1
+55,0
+10,1
+54,0
+12,1
+52,0
+14,1
+51,0
+15,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+13,1
+53,0
+12,1
+54,0
+10,1
+55,0
+f,1
+57,0
+d,1
+59,0
+b,1
+5b,0
+8,1
+5d,0
+6,1
+10ee,0
+100 90 32
+3f5,0
+5,1
+5e,0
+8,1
+5b,0
+a,1
+59,0
+d,1
+57,0
+f,1
+55,0
+11,1
+53,0
+12,1
+52,0
+14,1
+51,0
+15,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+15,1
+51,0
+14,1
+52,0
+12,1
+53,0
+11,1
+55,0
+f,1
+57,0
+d,1
+59,0
+a,1
+5b,0
+8,1
+5e,0
+5,1
+108a,0
+100 90 32
+2,0
+1c,1
+47,0
+1e,1
+45,0
+21,1
+43,0
+23,1
+41,0
+25,1
+3f,0
+27,1
+3d,0
+28,1
+3c,0
+2a,1
+3a,0
+2c,1
+38,0
+2e,1
+36,0
+2f,1
+35,0
+31,1
+33,0
+33,1
+31,0
+35,1
+2f,0
+37,1
+2d,0
+38,1
+2c,0
+3a,1
+2a,0
+3c,1
+28,0
+3e,1
+26,0
+3f,1
+25,0
+41,1
+23,0
+43,1
+21,0
+45,1
+1f,0
+47,1
+1d,0
+48,1
+1c,0
+4a,1
+1a,0
+4b,1
+19,0
+4d,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4d,1
+18,0
+4d,1
+19,0
+4c,1
+1a,0
+4a,1
+1b,0
+4a,1
+1c,0
+48,1
+1e,0
+47,1
+1f,0
+45,1
+21,0
+43,1
+22,0
+42,1
+24,0
+40,1
+26,0
+3e,1
+28,0
+3c,1
+29,0
+3b,1
+2b,0
+39,1
+2d,0
+37,1
+2f,0
+35,1
+31,0
+33,1
+32,0
+32,1
+34,0
+2f,1
+37,0
+2d,1
+39,0
+2a,1
+3b,0
+29,1
+3d,0
+26,1
+40,0
+23,1
+43,0
+21,1
+45,0
+1e,1
+47,0
+1c,1
+4a,0
+18,1
+4e,0
+15,1
+51,0
+11,1
+55,0
+d,1
+b0e,0
+100 90 32
+2,0
+1d,1
+46,0
+1f,1
+44,0
+22,1
+42,0
+24,1
+40,0
+26,1
+3e,0
+28,1
+3c,0
+29,1
+3b,0
+2b,1
+39,0
+2d,1
+37,0
+2f,1
+35,0
+30,1
+34,0
+32,1
+32,0
+34,1
+30,0
+36,1
+2e,0
+38,1
+2c,0
+39,1
+2b,0
+3b,1
+29,0
+3d,1
+27,0
+3f,1
+25,0
+40,1
+24,0
+42,1
+22,0
+44,1
+20,0
+46,1
+1e,0
+48,1
+1c,0
+49,1
+1b,0
+4b,1
+19,0
+4c,1
+18,0
+4d,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4d,1
+19,0
+4c,1
+19,0
+4b,1
+1b,0
+4a,1
+1c,0
+48,1
+1e,0
+46,1
+20,0
+45,1
+20,0
+44,1
+22,0
+42,1
+24,0
+40,1
+26,0
+3e,1
+27,0
+3d,1
+29,0
+3b,1
+2b,0
+39,1
+2d,0
+37,1
+2f,0
+34,1
+31,0
+33,1
+33,0
+31,1
+35,0
+2e,1
+38,0
+2c,1
+39,0
+2a,1
+3c,0
+28,1
+3e,0
+25,1
+41,0
+22,1
+44,0
+1f,1
+46,0
+1d,1
+49,0
+1a,1
+4c,0
+17,1
+4f,0
+13,1
+53,0
+f,1
+58,0
+9,1
+aac,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a57.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a57.dat
new file mode 100644
index 000000000..b0d16e0df
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a57.dat
@@ -0,0 +1,267 @@
+! $XConsortium$
+100 90 32
+32d,0
+1
+63,0
+3,1
+60,0
+6,1
+5d,0
+9,1
+5b,0
+a,1
+59,0
+d,1
+57,0
+f,1
+54,0
+12,1
+52,0
+13,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+13,1
+52,0
+12,1
+54,0
+f,1
+57,0
+d,1
+59,0
+a,1
+5b,0
+9,1
+5d,0
+6,1
+60,0
+3,1
+63,0
+1
+fc2,0
+100 90 32
+2c9,0
+1
+63,0
+2,1
+61,0
+5,1
+5e,0
+8,1
+5c,0
+a,1
+59,0
+c,1
+58,0
+e,1
+55,0
+11,1
+53,0
+13,1
+50,0
+16,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+16,1
+50,0
+13,1
+53,0
+11,1
+55,0
+e,1
+58,0
+c,1
+59,0
+a,1
+5c,0
+8,1
+5e,0
+5,1
+61,0
+2,1
+63,0
+1
+f5e,0
+100 90 32
+2c9,0
+1
+63,0
+2,1
+61,0
+5,1
+5e,0
+8,1
+5c,0
+a,1
+59,0
+c,1
+58,0
+e,1
+55,0
+11,1
+53,0
+13,1
+50,0
+16,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+16,1
+50,0
+13,1
+53,0
+11,1
+55,0
+e,1
+58,0
+c,1
+59,0
+a,1
+5c,0
+8,1
+5e,0
+5,1
+61,0
+2,1
+63,0
+1
+f5e,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a62.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a62.dat
new file mode 100644
index 000000000..2d7bc0f33
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a62.dat
@@ -0,0 +1,35 @@
+! $XConsortium$
+100 90 32
+71c,0
+1
+62,0
+3,1
+60,0
+4,1
+61,0
+3,1
+1ade,0
+100 90 32
+71b,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+1a7a,0
+100 90 32
+71b,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+1a7a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a65.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a65.dat
new file mode 100644
index 000000000..d0ce10252
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a65.dat
@@ -0,0 +1,29 @@
+! $XConsortium$
+100 90 32
+3f2,0
+1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+1a71,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a66.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a66.dat
new file mode 100644
index 000000000..2df6d2d7d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a66.dat
@@ -0,0 +1,103 @@
+! $XConsortium$
+100 90 32
+2c8,0
+2
+63,0
+2
+3
+2
+60,0
+3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+2
+3
+5c,0
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+59,0
+3,2
+3
+2
+3
+2
+3
+4,2
+58,0
+3,3
+2,2
+3
+2
+3
+4,2
+3
+2
+56,0
+5,3
+2
+3
+6,2
+3
+2
+3
+56,0
+3
+2,2
+2,3
+6,2
+2,3
+2,2
+57,0
+3
+3,2
+4,3
+3,2
+2,3
+2,2
+56,0
+c,2
+3,3
+57,0
+b,3
+3,2
+3
+56,0
+10,3
+56,0
+7,2
+5,3
+2,2
+58,0
+3
+2,2
+2,3
+5,2
+2,3
+59,0
+2,3
+2,2
+5,3
+2
+5c,0
+7,3
+5f,0
+5,3
+60,0
+3,2
+63,0
+3
+18e2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a67.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a67.dat
new file mode 100644
index 000000000..a3fec2489
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a67.dat
@@ -0,0 +1,83 @@
+! $XConsortium$
+100 90 32
+2c8,0
+3
+63,0
+3,2
+60,0
+5,3
+5e,0
+8,3
+5c,0
+2,3
+8,2
+59,0
+3,2
+9,3
+58,0
+9,3
+5,2
+56,0
+3,3
+6,2
+7,3
+56,0
+2
+8,3
+4,2
+2,3
+57,0
+2,3
+5,2
+4,3
+3,2
+3
+56,0
+2
+6,3
+8,2
+57,0
+3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+56,0
+4,3
+a,2
+2,3
+56,0
+2,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+2,3
+58,0
+a,2
+2,3
+59,0
+2,2
+8,3
+5c,0
+6,3
+2
+5f,0
+2,3
+2,2
+3
+60,0
+2
+2,3
+63,0
+3
+18e2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a68.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a68.dat
new file mode 100644
index 000000000..e43220323
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a68.dat
@@ -0,0 +1,69 @@
+! $XConsortium$
+100 90 32
+2c8,0
+1
+c6,0
+5,1
+5e,0
+8,1
+5c,0
+2,1
+64,0
+9,1
+58,0
+9,1
+5b,0
+3,1
+6,0
+7,1
+57,0
+8,1
+4,0
+2,1
+57,0
+2,1
+5,0
+4,1
+3,0
+1
+57,0
+6,1
+5f,0
+1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+57,0
+4,1
+a,0
+2,1
+58,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+62,0
+2,1
+5b,0
+8,1
+5c,0
+6,1
+60,0
+2,1
+2,0
+1
+61,0
+2,1
+63,0
+1
+18e2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a72.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a72.dat
new file mode 100644
index 000000000..e6d66b8ac
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a72.dat
@@ -0,0 +1,61 @@
+! $XConsortium$
+100 90 32
+3f2,0
+1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+1a71,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a75.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a75.dat
new file mode 100644
index 000000000..d73cb11ac
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a75.dat
@@ -0,0 +1,21 @@
+! $XConsortium$
+100 90 32
+3f2,0
+1
+64,0
+1
+65,0
+2,1
+63,0
+2,1
+ca,0
+2,1
+64,0
+1
+c9,0
+2,1
+cb,0
+1
+c9,0
+2,1
+1a71,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a77.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a77.dat
new file mode 100644
index 000000000..430b0ac84
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a77.dat
@@ -0,0 +1,955 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+3f2,0
+1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+1a71,0
+100 90 32
+3f2,0
+2
+64,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+1a71,0
+100 90 32
+3f2,0
+3
+64,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+1a71,0
+100 90 32
+3f2,0
+4
+64,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+1a71,0
+100 90 32
+3f2,0
+6
+64,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+1a71,0
+100 90 32
+3f2,0
+7
+64,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+1a71,0
+100 90 32
+3f2,0
+10
+64,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+1a71,0
+100 90 32
+3f2,0
+33
+64,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+1a71,0
+100 90 32
+3f2,0
+81
+64,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+1a71,0
+100 90 32
+3f2,0
+a3
+64,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+1a71,0
+100 90 32
+3f2,0
+ff
+64,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+1a71,0
+100 90 32
+3f2,0
+100
+64,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+1a71,0
+100 90 32
+3f2,0
+12c
+64,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+1a71,0
+100 90 32
+3f2,0
+3e8
+64,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+1a71,0
+100 90 32
+3f2,0
+111111
+64,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+1a71,0
+100 90 32
+3f2,0
+400200
+64,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+1a71,0
+100 90 32
+3f2,0
+777777
+64,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+1a71,0
+100 90 32
+3f2,0
+1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+1a71,0
+100 90 32
+3f2,0
+2
+64,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+1a71,0
+100 90 32
+3f2,0
+3
+64,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+1a71,0
+100 90 32
+3f2,0
+4
+64,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+1a71,0
+100 90 32
+3f2,0
+6
+64,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+1a71,0
+100 90 32
+3f2,0
+7
+64,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+1a71,0
+100 90 32
+3f2,0
+10
+64,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+1a71,0
+100 90 32
+3f2,0
+33
+64,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+1a71,0
+100 90 32
+3f2,0
+81
+64,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+1a71,0
+100 90 32
+3f2,0
+a3
+64,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+1a71,0
+100 90 32
+3f2,0
+ff
+64,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+1a71,0
+100 90 32
+3f2,0
+100
+64,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+1a71,0
+100 90 32
+3f2,0
+12c
+64,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+1a71,0
+100 90 32
+3f2,0
+3e8
+64,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+1a71,0
+100 90 32
+3f2,0
+111111
+64,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+1a71,0
+100 90 32
+3f2,0
+400200
+64,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+1a71,0
+100 90 32
+3f2,0
+777777
+64,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+1a71,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a79.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a79.dat
new file mode 100644
index 000000000..430b0ac84
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a79.dat
@@ -0,0 +1,955 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+3f2,0
+1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+1a71,0
+100 90 32
+3f2,0
+2
+64,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+1a71,0
+100 90 32
+3f2,0
+3
+64,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+1a71,0
+100 90 32
+3f2,0
+4
+64,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+1a71,0
+100 90 32
+3f2,0
+6
+64,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+1a71,0
+100 90 32
+3f2,0
+7
+64,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+1a71,0
+100 90 32
+3f2,0
+10
+64,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+1a71,0
+100 90 32
+3f2,0
+33
+64,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+1a71,0
+100 90 32
+3f2,0
+81
+64,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+1a71,0
+100 90 32
+3f2,0
+a3
+64,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+1a71,0
+100 90 32
+3f2,0
+ff
+64,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+1a71,0
+100 90 32
+3f2,0
+100
+64,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+1a71,0
+100 90 32
+3f2,0
+12c
+64,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+1a71,0
+100 90 32
+3f2,0
+3e8
+64,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+1a71,0
+100 90 32
+3f2,0
+111111
+64,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+1a71,0
+100 90 32
+3f2,0
+400200
+64,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+1a71,0
+100 90 32
+3f2,0
+777777
+64,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+1a71,0
+100 90 32
+3f2,0
+1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+1a71,0
+100 90 32
+3f2,0
+2
+64,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+1a71,0
+100 90 32
+3f2,0
+3
+64,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+1a71,0
+100 90 32
+3f2,0
+4
+64,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+1a71,0
+100 90 32
+3f2,0
+6
+64,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+1a71,0
+100 90 32
+3f2,0
+7
+64,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+1a71,0
+100 90 32
+3f2,0
+10
+64,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+1a71,0
+100 90 32
+3f2,0
+33
+64,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+1a71,0
+100 90 32
+3f2,0
+81
+64,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+1a71,0
+100 90 32
+3f2,0
+a3
+64,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+1a71,0
+100 90 32
+3f2,0
+ff
+64,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+1a71,0
+100 90 32
+3f2,0
+100
+64,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+1a71,0
+100 90 32
+3f2,0
+12c
+64,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+1a71,0
+100 90 32
+3f2,0
+3e8
+64,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+1a71,0
+100 90 32
+3f2,0
+111111
+64,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+1a71,0
+100 90 32
+3f2,0
+400200
+64,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+1a71,0
+100 90 32
+3f2,0
+777777
+64,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+1a71,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a81.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a81.dat
new file mode 100644
index 000000000..9185e5ee6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a81.dat
@@ -0,0 +1,217 @@
+! $XConsortium$
+100 90 32
+3f2,0
+1
+65,0
+1
+c9,0
+1
+65,0
+2,1
+64,0
+2,1
+63,0
+2,1
+c9,0
+2,1
+64,0
+2,1
+65,0
+1
+63,0
+2,1
+64,0
+2,1
+1a71,0
+100 90 32
+4bd,0
+1
+ca,0
+2,1
+c9,0
+2,1
+64,0
+1
+64,0
+2,1
+64,0
+1
+65,0
+2,1
+c9,0
+2,1
+1a71,0
+100 90 32
+457,0
+2,1
+c9,0
+2,1
+12f,0
+2,1
+c9,0
+2,1
+64,0
+2,1
+65,0
+1
+63,0
+2,1
+64,0
+1
+1a72,0
+100 90 32
+457,0
+1
+66,0
+1
+12f,0
+2,1
+64,0
+1
+64,0
+2,1
+ca,0
+1
+64,0
+2,1
+ca,0
+1
+1a71,0
+100 90 32
+458,0
+1
+64,0
+2,1
+ca,0
+1
+65,0
+1
+64,0
+1
+65,0
+1
+63,0
+2,1
+64,0
+2,1
+c9,0
+1
+65,0
+1
+1a72,0
+100 90 32
+458,0
+1
+64,0
+1
+cb,0
+1
+65,0
+1
+63,0
+1
+65,0
+1
+130,0
+2,1
+63,0
+2,1
+65,0
+1
+1a71,0
+100 90 32
+4bd,0
+1
+ca,0
+2,1
+c9,0
+2,1
+64,0
+1
+64,0
+2,1
+64,0
+1
+65,0
+2,1
+c9,0
+2,1
+1a71,0
+100 90 32
+457,0
+2,1
+c9,0
+2,1
+12f,0
+2,1
+c9,0
+2,1
+64,0
+2,1
+65,0
+1
+63,0
+2,1
+64,0
+1
+1a72,0
+100 90 32
+457,0
+1
+66,0
+1
+12f,0
+2,1
+64,0
+1
+64,0
+2,1
+ca,0
+1
+64,0
+2,1
+ca,0
+1
+1a71,0
+100 90 32
+458,0
+1
+64,0
+2,1
+ca,0
+1
+65,0
+1
+64,0
+1
+65,0
+1
+63,0
+2,1
+64,0
+2,1
+c9,0
+1
+65,0
+1
+1a72,0
+100 90 32
+458,0
+1
+64,0
+1
+cb,0
+1
+65,0
+1
+63,0
+1
+65,0
+1
+130,0
+2,1
+63,0
+2,1
+65,0
+1
+1a71,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a82.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a82.dat
new file mode 100644
index 000000000..42070a609
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a82.dat
@@ -0,0 +1,3239 @@
+! $XConsortium$
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+1982,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+1983,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+1982,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+1982,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+1984,0
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+191e,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+191f,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+191e,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+191e,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+1920,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+1983,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+1982,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+1982,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+1984,0
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+191e,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+191f,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+191e,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+191e,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+1920,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a83.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a83.dat
new file mode 100644
index 000000000..2ac5c9bd4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a83.dat
@@ -0,0 +1,57 @@
+! $XConsortium$
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+1b12,0
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+1b12,0
+100 90 32
+7e4,0
+32,1
+1b12,0
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+1b12,0
+100 90 32
+7e4,0
+32,1
+1b12,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/a84.dat b/xc/test/xsuite/xtest/tset/CH06/drwln/a84.dat
new file mode 100644
index 000000000..b11556ef7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/a84.dat
@@ -0,0 +1,11 @@
+! $XConsortium$
+100 90 32
+7e4,0
+8,1
+8,0
+8,1
+8,0
+8,1
+8,0
+2,1
+1b12,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwln/drwln.m b/xc/test/xsuite/xtest/tset/CH06/drwln/drwln.m
new file mode 100644
index 000000000..e4488d802
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwln/drwln.m
@@ -0,0 +1,192 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawLine CH06
+void
+XDrawLine(display, d, gc, x1, y1, x2, y2);
+Display *display = Dsp;
+Drawable d;
+GC gc;
+int x1 = 10;
+int y1 = 10;
+int x2 = 31;
+int y2 = 23;
+>>EXTERN
+static void
+setfordash()
+{
+ x1 = 20; y1 = 20;
+ x2 = 70; y2 = 20;
+}
+static void
+drawline(ax1, ay1, ax2, ay2)
+int ax1, ay1, ax2, ay2;
+{
+int pass = 0, fail = 0;
+
+ x1 = ax1; y1 = ay1;
+ x2 = ax2; y2 = ay2;
+ XCALL;
+}
+
+>>ASSERTION Good A
+A call to xname
+draws a line between the pair of points
+.A "" ( x1 , y1 )
+and
+.A "" ( x2 , y2 )
+in the drawable
+.A d .
+>>STRATEGY
+Draw line
+Pixmap check
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+A call to xname does not perform joining at coincident endpoints.
+>>STRATEGY
+Draw line
+Draw line with one end point the same
+Pixmap check
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ x1 = 10; y1 = 10;
+ x2 = 31; y2 = 23;
+
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetLineAttributes(display, gc, 6, LineSolid, CapButt, JoinMiter);
+
+ XCALL;
+
+ x1 = x2;
+ y1 = y2;
+ x2 = 10;
+ y2 = 25;
+
+
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+A call to xname does not draw a pixel more than once.
+>>STRATEGY
+Set function to GXxor
+Draw line
+Pixmap check
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XSetFunction(display, gc, GXxor);
+
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When lines intersect, then the intersecting pixels are drawn multiple times.
+>>STRATEGY
+Draw line
+Set function to GXxor
+Draw another intersecting line
+Pixmap check
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ x1 = 10; y1 = 10;
+ x2 = 31; y2 = 23;
+
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetLineAttributes(display, gc, 6, LineSolid, CapButt, JoinMiter);
+
+ XCALL;
+
+ XSetFunction(display, gc, GXxor);
+
+ x1 = 10; y1 = 30;
+ x2 = 30; y2 = 10;
+
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M line-width ,
+.M line-style ,
+.M cap-style ,
+.M fill-style ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin ,
+.M tile-stipple-y-origin ,
+.M dash-offset ,
+and
+.M dash-list
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a1.dat
new file mode 100644
index 000000000..95d1d2d74
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a1.dat
@@ -0,0 +1,153 @@
+! $XConsortium$
+100 90 32
+1fe,0
+1
+63,0
+3,1
+62,0
+1
+0
+2,1
+60,0
+1
+3,0
+2,1
+5f,0
+1
+3,0
+2,1
+5e,0
+1
+5,0
+2,1
+5c,0
+1
+7,0
+2,1
+5b,0
+1
+8,0
+1
+5a,0
+1
+9,0
+2,1
+59,0
+1
+a,0
+2,1
+57,0
+1
+c,0
+2,1
+55,0
+1
+d,0
+2,1
+55,0
+1
+e,0
+2,1
+53,0
+1
+10,0
+2,1
+52,0
+1
+11,0
+1
+51,0
+1
+12,0
+2,1
+4f,0
+1
+14,0
+2,1
+4e,0
+1
+15,0
+2,1
+4c,0
+1
+16,0
+2,1
+4c,0
+1
+17,0
+2,1
+4a,0
+1
+19,0
+2,1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+2,1
+46,0
+1
+1d,0
+2,1
+45,0
+1
+1e,0
+2,1
+42,0
+2,1
+1f,0
+2,1
+3e,0
+3,1
+23,0
+2,1
+39,0
+3,1
+28,0
+2,1
+34,0
+3,1
+2d,0
+1
+30,0
+3,1
+31,0
+2,1
+2c,0
+2,1
+36,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+62,0
+3,1
+5c,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5c,0
+3,1
+f89,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a28.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a28.dat
new file mode 100644
index 000000000..efd7c8be0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a28.dat
@@ -0,0 +1,205 @@
+! $XConsortium$
+100 90 32
+1c0,0
+2,1
+11,0
+1
+4f,0
+6,1
+d,0
+3,1
+4e,0
+5,1
+e,0
+4,1
+4d,0
+5,1
+d,0
+7,1
+4a,0
+6,1
+c,0
+9,1
+49,0
+5,1
+c,0
+a,1
+2a,0
+2,1
+1c,0
+6,1
+c,0
+a,1
+2b,0
+2,1
+1b,0
+5,1
+c,0
+a,1
+2e,0
+2,1
+19,0
+5,1
+b,0
+a,1
+2a,0
+2,1
+5,0
+2,1
+16,0
+5,1
+c,0
+9,1
+2b,0
+2,1
+6,0
+3,1
+14,0
+5,1
+b,0
+a,1
+2b,0
+2,1
+8,0
+2,1
+12,0
+6,1
+a,0
+a,1
+2c,0
+2,1
+a,0
+2,1
+10,0
+5,1
+a,0
+a,1
+2d,0
+2,1
+c,0
+2,1
+d,0
+6,1
+a,0
+a,1
+2d,0
+2,1
+d,0
+3,1
+b,0
+5,1
+a,0
+a,1
+2f,0
+2,1
+e,0
+2,1
+a,0
+5,1
+9,0
+a,1
+30,0
+2,1
+10,0
+2,1
+7,0
+6,1
+9,0
+9,1
+31,0
+2,1
+12,0
+2,1
+7,0
+3,1
+9,0
+a,1
+31,0
+2,1
+13,0
+3,1
+10,0
+a,1
+32,0
+2,1
+15,0
+2,1
+e,0
+a,1
+33,0
+1
+18,0
+2,1
+c,0
+a,1
+4e,0
+2,1
+a,0
+9,1
+50,0
+3,1
+9,0
+7,1
+53,0
+2,1
+9,0
+5,1
+56,0
+2,1
+9,0
+3,1
+58,0
+2,1
+8,0
+1
+5a,0
+1
+552,0
+2,1
+62,0
+6,1
+5e,0
+a,1
+59,0
+10,1
+54,0
+14,1
+50,0
+18,1
+4c,0
+1d,1
+46,0
+22,1
+42,0
+26,1
+3e,0
+29,1
+3b,0
+29,1
+3b,0
+29,1
+3a,0
+29,1
+3b,0
+29,1
+3b,0
+29,1
+3e,0
+26,1
+42,0
+21,1
+47,0
+1d,1
+4c,0
+18,1
+50,0
+14,1
+54,0
+10,1
+59,0
+a,1
+5e,0
+6,1
+62,0
+2,1
+8cc,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a3.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a3.dat
new file mode 100644
index 000000000..904d6201a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a3.dat
@@ -0,0 +1,155 @@
+! $XConsortium$
+100 90 32
+d2,0
+1
+61,0
+5,1
+5f,0
+7,1
+5c,0
+9,1
+5c,0
+a,1
+5a,0
+c,1
+58,0
+e,1
+57,0
+e,1
+56,0
+10,1
+55,0
+11,1
+53,0
+12,1
+52,0
+7,1
+0
+c,1
+51,0
+6,1
+3,0
+c,1
+4f,0
+7,1
+4,0
+c,1
+4e,0
+6,1
+5,0
+c,1
+4d,0
+7,1
+6,0
+c,1
+4b,0
+7,1
+8,0
+c,1
+4a,0
+6,1
+a,0
+b,1
+49,0
+7,1
+a,0
+c,1
+48,0
+6,1
+c,0
+c,1
+46,0
+7,1
+d,0
+c,1
+44,0
+7,1
+e,0
+c,1
+44,0
+6,1
+10,0
+c,1
+42,0
+7,1
+11,0
+c,1
+41,0
+6,1
+13,0
+b,1
+40,0
+7,1
+13,0
+c,1
+3e,0
+7,1
+15,0
+c,1
+3a,0
+9,1
+17,0
+c,1
+35,0
+c,1
+18,0
+c,1
+31,0
+f,1
+1a,0
+c,1
+2c,0
+12,1
+1c,0
+c,1
+2a,0
+10,1
+20,0
+b,1
+29,0
+d,1
+24,0
+c,1
+27,0
+a,1
+29,0
+c,1
+26,0
+6,1
+2e,0
+c,1
+24,0
+3,1
+32,0
+c,1
+5a,0
+c,1
+57,0
+d,1
+52,0
+12,1
+4d,0
+17,1
+48,0
+1c,1
+43,0
+1f,1
+40,0
+1f,1
+40,0
+1f,1
+40,0
+1f,1
+40,0
+1f,1
+45,0
+1a,1
+4a,0
+15,1
+4f,0
+10,1
+55,0
+a,1
+5a,0
+5,1
+ebe,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a36.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a36.dat
new file mode 100644
index 000000000..68bc2d33e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a36.dat
@@ -0,0 +1,1287 @@
+! $XConsortium$
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1fa,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5d8,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+8b4,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1fa,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5d8,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+8b4,0
+100 90 32
+71a,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+130,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+448,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+7ec,0
+100 90 32
+71c,0
+f,1
+d,0
+f,1
+38,0
+11,1
+b,0
+11,1
+36,0
+12,1
+a,0
+12,1
+37,0
+11,1
+b,0
+11,1
+132,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+44a,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+7ec,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+196,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+8b3,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+196,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+8b3,0
+100 90 32
+71a,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+cb,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+3e3,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+787,0
+100 90 32
+71b,0
+11,1
+b,0
+11,1
+36,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+36,0
+11,1
+b,0
+11,1
+cd,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+3e5,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+788,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1fa,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5d8,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+8b4,0
+100 90 32
+71a,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+130,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+448,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+7ec,0
+100 90 32
+71c,0
+f,1
+d,0
+f,1
+38,0
+11,1
+b,0
+11,1
+36,0
+12,1
+a,0
+12,1
+37,0
+11,1
+b,0
+11,1
+132,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+44a,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+7ec,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+196,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+8b3,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+196,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+8b3,0
+100 90 32
+71a,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+cb,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+3e3,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+787,0
+100 90 32
+71b,0
+11,1
+b,0
+11,1
+36,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+36,0
+11,1
+b,0
+11,1
+cd,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+3e5,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+788,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a4.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a4.dat
new file mode 100644
index 000000000..cf1263081
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a4.dat
@@ -0,0 +1,87 @@
+! $XConsortium$
+100 90 32
+196,0
+1
+62,0
+9,1
+5a,0
+11,1
+54,0
+11,1
+53,0
+11,1
+53,0
+4,1
+4,0
+9,1
+53,0
+4,1
+8,0
+5,1
+53,0
+4,1
+8,0
+4,1
+54,0
+5,1
+6,0
+5,1
+55,0
+4,1
+6,0
+4,1
+56,0
+4,1
+6,0
+4,1
+56,0
+4,1
+5,0
+5,1
+56,0
+4,1
+5,0
+4,1
+57,0
+4,1
+4,0
+5,1
+57,0
+5,1
+3,0
+4,1
+59,0
+4,1
+2,0
+5,1
+59,0
+4,1
+2,0
+4,1
+5a,0
+4,1
+0
+5,1
+5a,0
+4,1
+0
+4,1
+5b,0
+9,1
+5b,0
+8,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+6,1
+5e,0
+6,1
+5e,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+1700,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a43.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a43.dat
new file mode 100644
index 000000000..c98691a74
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a43.dat
@@ -0,0 +1,690 @@
+! $XConsortium$
+100 90 32
+71c,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+4,2
+2f,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+4,0
+2
+2,3
+2,2
+2f,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+18e,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+1ef,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+1ef,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+1ef,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+1ef,0
+3
+4,2
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+2,2
+2,3
+5f,0
+3,3
+2
+3
+1ef,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+1ef,0
+3
+4,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+3
+4,2
+4cb,0
+100 90 32
+6b8,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+4,2
+2f,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+3,0
+2,3
+4,2
+2f,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+3,0
+2,2
+2,3
+2,2
+2f,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+18d,0
+3
+2,2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+1ee,0
+2,3
+2,2
+2,3
+5e,0
+2,2
+2,3
+2,2
+5e,0
+2,3
+4,2
+5e,0
+2
+5,3
+1ee,0
+4,3
+2
+3
+5e,0
+2,3
+2,2
+3
+2
+5e,0
+2,2
+3
+2
+3
+2
+5e,0
+3
+2,2
+3
+2
+3
+1ee,0
+2,2
+3
+2
+3
+2
+5e,0
+2,3
+2,2
+3
+2
+5e,0
+4,3
+2
+3
+5e,0
+2,3
+2,2
+2,3
+1ee,0
+2,3
+4,2
+5e,0
+2,2
+2,3
+2,2
+5e,0
+2,3
+2,2
+2,3
+5e,0
+4,3
+2
+3
+1ee,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+3
+2,2
+3
+2
+3
+5e,0
+2,2
+3
+2
+3
+2
+1ee,0
+2,3
+4,2
+5e,0
+2
+5,3
+5e,0
+6,3
+5e,0
+2,3
+4,2
+4cb,0
+100 90 32
+6b8,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+4,2
+2f,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+3,0
+2,3
+4,2
+2f,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+3,0
+2,2
+2,3
+2,2
+2f,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+18d,0
+3
+2,2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+1ee,0
+2,3
+2,2
+2,3
+5e,0
+2,2
+2,3
+2,2
+5e,0
+2,3
+4,2
+5e,0
+2
+5,3
+1ee,0
+4,3
+2
+3
+5e,0
+2,3
+2,2
+3
+2
+5e,0
+2,2
+3
+2
+3
+2
+5e,0
+3
+2,2
+3
+2
+3
+1ee,0
+2,2
+3
+2
+3
+2
+5e,0
+2,3
+2,2
+3
+2
+5e,0
+4,3
+2
+3
+5e,0
+2,3
+2,2
+2,3
+1ee,0
+2,3
+4,2
+5e,0
+2,2
+2,3
+2,2
+5e,0
+2,3
+2,2
+2,3
+5e,0
+4,3
+2
+3
+1ee,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+3
+2,2
+3
+2
+3
+5e,0
+2,2
+3
+2
+3
+2
+1ee,0
+2,3
+4,2
+5e,0
+2
+5,3
+5e,0
+6,3
+5e,0
+2,3
+4,2
+4cb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a44.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a44.dat
new file mode 100644
index 000000000..108d4f8f8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a44.dat
@@ -0,0 +1,377 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a0,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+1f0,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+1f0,0
+3,1
+c8,0
+1
+5f,0
+5,1
+1ef,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+1f0,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+1f7,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+1ef,0
+1
+64,0
+3,1
+c8,0
+1
+4cb,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+3,0
+1
+3c,0
+4,1
+14,0
+4,1
+19b,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+63,0
+1
+5e,0
+6,1
+5e,0
+1
+4,0
+1
+1f0,0
+3,1
+5f,0
+1
+68,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+5e,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+1f7,0
+1
+5e,0
+6,1
+63,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+1
+68,0
+1
+4cb,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+3,0
+1
+3c,0
+4,1
+14,0
+4,1
+19b,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+63,0
+1
+5e,0
+6,1
+5e,0
+1
+4,0
+1
+1f0,0
+3,1
+5f,0
+1
+68,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+5e,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+1f7,0
+1
+5e,0
+6,1
+63,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+1
+68,0
+1
+4cb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a45.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a45.dat
new file mode 100644
index 000000000..108d4f8f8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a45.dat
@@ -0,0 +1,377 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+1a0,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+1f0,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+1f0,0
+3,1
+c8,0
+1
+5f,0
+5,1
+1ef,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+1f0,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+1f7,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+1ef,0
+1
+64,0
+3,1
+c8,0
+1
+4cb,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+3,0
+1
+3c,0
+4,1
+14,0
+4,1
+19b,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+63,0
+1
+5e,0
+6,1
+5e,0
+1
+4,0
+1
+1f0,0
+3,1
+5f,0
+1
+68,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+5e,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+1f7,0
+1
+5e,0
+6,1
+63,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+1
+68,0
+1
+4cb,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+3,0
+1
+3c,0
+4,1
+14,0
+4,1
+19b,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+63,0
+1
+5e,0
+6,1
+5e,0
+1
+4,0
+1
+1f0,0
+3,1
+5f,0
+1
+68,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+2,1
+64,0
+3,1
+1ef,0
+6,1
+5e,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+1f7,0
+1
+5e,0
+6,1
+63,0
+1
+5e,0
+6,1
+1ee,0
+2,1
+64,0
+3,1
+5f,0
+1
+68,0
+1
+4cb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a46.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a46.dat
new file mode 100644
index 000000000..fbfa0d87e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a46.dat
@@ -0,0 +1,231 @@
+! $XConsortium$
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+1fa,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5d8,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+8b4,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+196,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+8b3,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+196,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+8b3,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a47.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a47.dat
new file mode 100644
index 000000000..203003cb4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a47.dat
@@ -0,0 +1,893 @@
+! $XConsortium$
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+4,3
+30,0
+34,3
+30,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+3,2
+30,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2
+60,0
+3
+2,2
+3
+60,0
+3,3
+2
+60,0
+3
+2,2
+3
+60,0
+2
+3
+2
+3
+60,0
+2,2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+2,2
+3
+2
+60,0
+2
+3
+2
+3
+60,0
+3
+2,2
+3
+60,0
+3,3
+2
+60,0
+3
+2,2
+3
+60,0
+2
+2,3
+2
+60,0
+3
+3,2
+60,0
+4,3
+60,0
+4,3
+60,0
+3
+3,2
+60,0
+2
+2,3
+2
+60,0
+3
+2,2
+3
+60,0
+3,3
+2
+60,0
+3
+2,2
+3
+60,0
+2
+3
+2
+3
+60,0
+2,2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+2,2
+3
+2
+60,0
+2
+3
+2
+3
+60,0
+3
+2,2
+3
+60,0
+3,3
+2
+60,0
+3
+2,2
+3
+60,0
+2
+2,3
+2
+60,0
+3
+3,2
+60,0
+4,3
+60,0
+4,3
+60,0
+3
+3,2
+60,0
+2
+2,3
+2
+60,0
+3
+2,2
+3
+60,0
+3,3
+2
+60,0
+3
+2,2
+3
+60,0
+2
+3
+2
+3
+60,0
+2,2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+2,2
+3
+2
+60,0
+2
+3
+2
+3
+60,0
+3
+2,2
+3
+60,0
+3,3
+2
+60,0
+3
+2,2
+3
+60,0
+2
+2,3
+2
+60,0
+3
+3,2
+60,0
+4,3
+60,0
+4,3
+60,0
+3
+3,2
+60,0
+2
+2,3
+2
+60,0
+3
+2,2
+3
+404,0
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+5,3
+2f,0
+35,3
+2f,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+4,2
+2f,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+2f,0
+3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+3
+4,2
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+2,2
+2,3
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+3
+4,2
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+2,2
+2,3
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+3
+4,2
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+2,2
+2,3
+403,0
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+5,3
+2f,0
+35,3
+2f,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+4,2
+2f,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+2f,0
+3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+3
+4,2
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+2,2
+2,3
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+3
+4,2
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+2,2
+2,3
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+3
+4,2
+5f,0
+2
+2,3
+2,2
+5f,0
+3
+2,2
+2,3
+403,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a48.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a48.dat
new file mode 100644
index 000000000..7ddead6ea
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a48.dat
@@ -0,0 +1,473 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+30,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+3b,0
+d,1
+b,0
+d,1
+c8,0
+4,1
+c4,0
+4,1
+c4,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+c4,0
+4,1
+c4,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+c4,0
+4,1
+c4,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+c4,0
+4,1
+c4,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+c4,0
+4,1
+c4,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+468,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+30,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+3b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+c,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+403,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+30,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+3b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+c,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+403,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a49.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a49.dat
new file mode 100644
index 000000000..e6f7061fb
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a49.dat
@@ -0,0 +1,281 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+45,0
+3,1
+15,0
+7,1
+25e,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+c4,0
+4,1
+c4,0
+4,1
+60,0
+1
+6a3,0
+4,1
+c4,0
+4,1
+c4,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+8b4,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+45,0
+3,1
+15,0
+7,1
+3e,0
+a,1
+e,0
+c,1
+19c,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+643,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+8b3,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+45,0
+3,1
+15,0
+7,1
+3e,0
+a,1
+e,0
+c,1
+19c,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+643,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+8b3,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a5.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a5.dat
new file mode 100644
index 000000000..95d1d2d74
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a5.dat
@@ -0,0 +1,153 @@
+! $XConsortium$
+100 90 32
+1fe,0
+1
+63,0
+3,1
+62,0
+1
+0
+2,1
+60,0
+1
+3,0
+2,1
+5f,0
+1
+3,0
+2,1
+5e,0
+1
+5,0
+2,1
+5c,0
+1
+7,0
+2,1
+5b,0
+1
+8,0
+1
+5a,0
+1
+9,0
+2,1
+59,0
+1
+a,0
+2,1
+57,0
+1
+c,0
+2,1
+55,0
+1
+d,0
+2,1
+55,0
+1
+e,0
+2,1
+53,0
+1
+10,0
+2,1
+52,0
+1
+11,0
+1
+51,0
+1
+12,0
+2,1
+4f,0
+1
+14,0
+2,1
+4e,0
+1
+15,0
+2,1
+4c,0
+1
+16,0
+2,1
+4c,0
+1
+17,0
+2,1
+4a,0
+1
+19,0
+2,1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+2,1
+46,0
+1
+1d,0
+2,1
+45,0
+1
+1e,0
+2,1
+42,0
+2,1
+1f,0
+2,1
+3e,0
+3,1
+23,0
+2,1
+39,0
+3,1
+28,0
+2,1
+34,0
+3,1
+2d,0
+1
+30,0
+3,1
+31,0
+2,1
+2c,0
+2,1
+36,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+62,0
+3,1
+5c,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5c,0
+3,1
+f89,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a58.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a58.dat
new file mode 100644
index 000000000..970367c62
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a58.dat
@@ -0,0 +1,157 @@
+! $XConsortium$
+100 90 32
+4c1,0
+1
+63,0
+3,1
+60,0
+6,1
+5d,0
+9,1
+5b,0
+b,1
+58,0
+e,1
+56,0
+10,1
+55,0
+11,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+11,1
+55,0
+10,1
+56,0
+e,1
+58,0
+b,1
+5b,0
+8,1
+5e,0
+6,1
+60,0
+3,1
+63,0
+1
+14e7,0
+100 90 32
+4c1,0
+3,1
+61,0
+4,1
+5f,0
+7,1
+5c,0
+a,1
+5a,0
+c,1
+57,0
+f,1
+55,0
+11,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+11,1
+55,0
+f,1
+57,0
+c,1
+5a,0
+9,1
+5d,0
+7,1
+5f,0
+4,1
+61,0
+3,1
+14e7,0
+100 90 32
+4c1,0
+3,1
+61,0
+4,1
+5f,0
+7,1
+5c,0
+a,1
+5a,0
+c,1
+57,0
+f,1
+55,0
+11,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+11,1
+55,0
+f,1
+57,0
+c,1
+5a,0
+9,1
+5d,0
+7,1
+5f,0
+4,1
+61,0
+3,1
+14e7,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a60.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a60.dat
new file mode 100644
index 000000000..63946d976
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a60.dat
@@ -0,0 +1,1255 @@
+! $XConsortium$
+100 90 32
+5eb,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+3,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+3,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+1280,0
+100 90 32
+587,0
+1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+5,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+5,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+3,1
+1280,0
+100 90 32
+523,0
+1
+62,0
+4,1
+5f,0
+7,1
+5e,0
+7,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+9,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+9,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+7,1
+5e,0
+6,1
+60,0
+4,1
+121b,0
+100 90 32
+522,0
+3,1
+60,0
+6,1
+5e,0
+8,1
+5c,0
+9,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+b,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+b,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+9,1
+5c,0
+8,1
+5e,0
+6,1
+60,0
+3,1
+11b7,0
+100 90 32
+3f7,0
+1
+60,0
+7,1
+5c,0
+9,1
+5b,0
+b,1
+59,0
+d,1
+56,0
+10,1
+55,0
+10,1
+54,0
+12,1
+52,0
+14,1
+51,0
+15,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+13,1
+53,0
+12,1
+54,0
+10,1
+55,0
+f,1
+57,0
+d,1
+59,0
+b,1
+5b,0
+8,1
+5d,0
+6,1
+10ee,0
+100 90 32
+3f5,0
+5,1
+5e,0
+8,1
+5b,0
+a,1
+59,0
+d,1
+57,0
+f,1
+55,0
+11,1
+53,0
+12,1
+52,0
+14,1
+51,0
+15,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+15,1
+51,0
+14,1
+52,0
+12,1
+53,0
+11,1
+55,0
+f,1
+57,0
+d,1
+59,0
+a,1
+5b,0
+8,1
+5e,0
+5,1
+108a,0
+100 90 32
+2,0
+1c,1
+47,0
+1e,1
+45,0
+21,1
+43,0
+23,1
+41,0
+25,1
+3f,0
+27,1
+3d,0
+28,1
+3c,0
+2a,1
+3a,0
+2c,1
+38,0
+2e,1
+36,0
+2f,1
+35,0
+31,1
+33,0
+33,1
+31,0
+35,1
+2f,0
+37,1
+2d,0
+38,1
+2c,0
+3a,1
+2a,0
+3c,1
+28,0
+3e,1
+26,0
+3f,1
+25,0
+41,1
+23,0
+43,1
+21,0
+45,1
+1f,0
+47,1
+1d,0
+48,1
+1c,0
+4a,1
+1a,0
+4b,1
+19,0
+4d,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4d,1
+18,0
+4d,1
+19,0
+4c,1
+1a,0
+4a,1
+1b,0
+4a,1
+1c,0
+48,1
+1e,0
+47,1
+1f,0
+45,1
+21,0
+43,1
+22,0
+42,1
+24,0
+40,1
+26,0
+3e,1
+28,0
+3c,1
+29,0
+3b,1
+2b,0
+39,1
+2d,0
+37,1
+2f,0
+35,1
+31,0
+33,1
+32,0
+32,1
+34,0
+2f,1
+37,0
+2d,1
+39,0
+2a,1
+3b,0
+29,1
+3d,0
+26,1
+40,0
+23,1
+43,0
+21,1
+45,0
+1e,1
+47,0
+1c,1
+4a,0
+18,1
+4e,0
+15,1
+51,0
+11,1
+55,0
+d,1
+b0e,0
+100 90 32
+2,0
+1d,1
+46,0
+1f,1
+44,0
+22,1
+42,0
+24,1
+40,0
+26,1
+3e,0
+28,1
+3c,0
+29,1
+3b,0
+2b,1
+39,0
+2d,1
+37,0
+2f,1
+35,0
+30,1
+34,0
+32,1
+32,0
+34,1
+30,0
+36,1
+2e,0
+38,1
+2c,0
+39,1
+2b,0
+3b,1
+29,0
+3d,1
+27,0
+3f,1
+25,0
+40,1
+24,0
+42,1
+22,0
+44,1
+20,0
+46,1
+1e,0
+48,1
+1c,0
+49,1
+1b,0
+4b,1
+19,0
+4c,1
+18,0
+4d,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4d,1
+19,0
+4c,1
+19,0
+4b,1
+1b,0
+4a,1
+1c,0
+48,1
+1e,0
+46,1
+20,0
+45,1
+20,0
+44,1
+22,0
+42,1
+24,0
+40,1
+26,0
+3e,1
+27,0
+3d,1
+29,0
+3b,1
+2b,0
+39,1
+2d,0
+37,1
+2f,0
+34,1
+31,0
+33,1
+33,0
+31,1
+35,0
+2e,1
+38,0
+2c,1
+39,0
+2a,1
+3c,0
+28,1
+3e,0
+25,1
+41,0
+22,1
+44,0
+1f,1
+46,0
+1d,1
+49,0
+1a,1
+4c,0
+17,1
+4f,0
+13,1
+53,0
+f,1
+58,0
+9,1
+aac,0
+100 90 32
+587,0
+1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+5,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+5,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+3,1
+1280,0
+100 90 32
+523,0
+1
+62,0
+4,1
+5f,0
+7,1
+5e,0
+7,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+9,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+9,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+7,1
+5e,0
+6,1
+60,0
+4,1
+121b,0
+100 90 32
+522,0
+3,1
+60,0
+6,1
+5e,0
+8,1
+5c,0
+9,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+b,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+b,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+9,1
+5c,0
+8,1
+5e,0
+6,1
+60,0
+3,1
+11b7,0
+100 90 32
+3f7,0
+1
+60,0
+7,1
+5c,0
+9,1
+5b,0
+b,1
+59,0
+d,1
+56,0
+10,1
+55,0
+10,1
+54,0
+12,1
+52,0
+14,1
+51,0
+15,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+13,1
+53,0
+12,1
+54,0
+10,1
+55,0
+f,1
+57,0
+d,1
+59,0
+b,1
+5b,0
+8,1
+5d,0
+6,1
+10ee,0
+100 90 32
+3f5,0
+5,1
+5e,0
+8,1
+5b,0
+a,1
+59,0
+d,1
+57,0
+f,1
+55,0
+11,1
+53,0
+12,1
+52,0
+14,1
+51,0
+15,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+15,1
+51,0
+14,1
+52,0
+12,1
+53,0
+11,1
+55,0
+f,1
+57,0
+d,1
+59,0
+a,1
+5b,0
+8,1
+5e,0
+5,1
+108a,0
+100 90 32
+2,0
+1c,1
+47,0
+1e,1
+45,0
+21,1
+43,0
+23,1
+41,0
+25,1
+3f,0
+27,1
+3d,0
+28,1
+3c,0
+2a,1
+3a,0
+2c,1
+38,0
+2e,1
+36,0
+2f,1
+35,0
+31,1
+33,0
+33,1
+31,0
+35,1
+2f,0
+37,1
+2d,0
+38,1
+2c,0
+3a,1
+2a,0
+3c,1
+28,0
+3e,1
+26,0
+3f,1
+25,0
+41,1
+23,0
+43,1
+21,0
+45,1
+1f,0
+47,1
+1d,0
+48,1
+1c,0
+4a,1
+1a,0
+4b,1
+19,0
+4d,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4d,1
+18,0
+4d,1
+19,0
+4c,1
+1a,0
+4a,1
+1b,0
+4a,1
+1c,0
+48,1
+1e,0
+47,1
+1f,0
+45,1
+21,0
+43,1
+22,0
+42,1
+24,0
+40,1
+26,0
+3e,1
+28,0
+3c,1
+29,0
+3b,1
+2b,0
+39,1
+2d,0
+37,1
+2f,0
+35,1
+31,0
+33,1
+32,0
+32,1
+34,0
+2f,1
+37,0
+2d,1
+39,0
+2a,1
+3b,0
+29,1
+3d,0
+26,1
+40,0
+23,1
+43,0
+21,1
+45,0
+1e,1
+47,0
+1c,1
+4a,0
+18,1
+4e,0
+15,1
+51,0
+11,1
+55,0
+d,1
+b0e,0
+100 90 32
+2,0
+1d,1
+46,0
+1f,1
+44,0
+22,1
+42,0
+24,1
+40,0
+26,1
+3e,0
+28,1
+3c,0
+29,1
+3b,0
+2b,1
+39,0
+2d,1
+37,0
+2f,1
+35,0
+30,1
+34,0
+32,1
+32,0
+34,1
+30,0
+36,1
+2e,0
+38,1
+2c,0
+39,1
+2b,0
+3b,1
+29,0
+3d,1
+27,0
+3f,1
+25,0
+40,1
+24,0
+42,1
+22,0
+44,1
+20,0
+46,1
+1e,0
+48,1
+1c,0
+49,1
+1b,0
+4b,1
+19,0
+4c,1
+18,0
+4d,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4d,1
+19,0
+4c,1
+19,0
+4b,1
+1b,0
+4a,1
+1c,0
+48,1
+1e,0
+46,1
+20,0
+45,1
+20,0
+44,1
+22,0
+42,1
+24,0
+40,1
+26,0
+3e,1
+27,0
+3d,1
+29,0
+3b,1
+2b,0
+39,1
+2d,0
+37,1
+2f,0
+34,1
+31,0
+33,1
+33,0
+31,1
+35,0
+2e,1
+38,0
+2c,1
+39,0
+2a,1
+3c,0
+28,1
+3e,0
+25,1
+41,0
+22,1
+44,0
+1f,1
+46,0
+1d,1
+49,0
+1a,1
+4c,0
+17,1
+4f,0
+13,1
+53,0
+f,1
+58,0
+9,1
+aac,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a62.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a62.dat
new file mode 100644
index 000000000..b0d16e0df
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a62.dat
@@ -0,0 +1,267 @@
+! $XConsortium$
+100 90 32
+32d,0
+1
+63,0
+3,1
+60,0
+6,1
+5d,0
+9,1
+5b,0
+a,1
+59,0
+d,1
+57,0
+f,1
+54,0
+12,1
+52,0
+13,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+13,1
+52,0
+12,1
+54,0
+f,1
+57,0
+d,1
+59,0
+a,1
+5b,0
+9,1
+5d,0
+6,1
+60,0
+3,1
+63,0
+1
+fc2,0
+100 90 32
+2c9,0
+1
+63,0
+2,1
+61,0
+5,1
+5e,0
+8,1
+5c,0
+a,1
+59,0
+c,1
+58,0
+e,1
+55,0
+11,1
+53,0
+13,1
+50,0
+16,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+16,1
+50,0
+13,1
+53,0
+11,1
+55,0
+e,1
+58,0
+c,1
+59,0
+a,1
+5c,0
+8,1
+5e,0
+5,1
+61,0
+2,1
+63,0
+1
+f5e,0
+100 90 32
+2c9,0
+1
+63,0
+2,1
+61,0
+5,1
+5e,0
+8,1
+5c,0
+a,1
+59,0
+c,1
+58,0
+e,1
+55,0
+11,1
+53,0
+13,1
+50,0
+16,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+16,1
+50,0
+13,1
+53,0
+11,1
+55,0
+e,1
+58,0
+c,1
+59,0
+a,1
+5c,0
+8,1
+5e,0
+5,1
+61,0
+2,1
+63,0
+1
+f5e,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a67.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a67.dat
new file mode 100644
index 000000000..2d7bc0f33
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a67.dat
@@ -0,0 +1,35 @@
+! $XConsortium$
+100 90 32
+71c,0
+1
+62,0
+3,1
+60,0
+4,1
+61,0
+3,1
+1ade,0
+100 90 32
+71b,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+1a7a,0
+100 90 32
+71b,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+1a7a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a7.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a7.dat
new file mode 100644
index 000000000..85e901d8e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a7.dat
@@ -0,0 +1,145 @@
+! $XConsortium$
+100 90 32
+db,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+58,0
+2,1
+5,0
+5,1
+57,0
+7,1
+0
+5,1
+57,0
+d,1
+59,0
+d,1
+5b,0
+d,1
+58,0
+f,1
+55,0
+3,1
+0
+b,1
+55,0
+3,1
+0
+3,1
+4,0
+4,1
+55,0
+3,1
+0
+3,1
+4,0
+3,1
+56,0
+3,1
+0
+3,1
+3,0
+3,1
+57,0
+3,1
+0
+3,1
+2,0
+4,1
+57,0
+3,1
+0
+3,1
+2,0
+3,1
+58,0
+3,1
+0
+3,1
+0
+4,1
+57,0
+3,1
+3,0
+6,1
+58,0
+3,1
+3,0
+5,1
+59,0
+3,1
+3,0
+5,1
+59,0
+3,1
+3,0
+4,1
+5a,0
+3,1
+3,0
+4,1
+53,0
+15,1
+4f,0
+15,1
+4f,0
+15,1
+51,0
+7,1
+2,0
+6,1
+56,0
+6,1
+0
+7,1
+57,0
+5,1
+0
+3,1
+0
+3,1
+58,0
+7,1
+2,0
+3,1
+59,0
+6,1
+2,0
+3,1
+59,0
+7,1
+0
+3,1
+59,0
+b,1
+58,0
+d,1
+57,0
+4,1
+3,0
+6,1
+57,0
+4,1
+4,0
+5,1
+57,0
+3,1
+6,0
+4,1
+57,0
+3,1
+7,0
+3,1
+1309,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a70.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a70.dat
new file mode 100644
index 000000000..95d1d2d74
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a70.dat
@@ -0,0 +1,153 @@
+! $XConsortium$
+100 90 32
+1fe,0
+1
+63,0
+3,1
+62,0
+1
+0
+2,1
+60,0
+1
+3,0
+2,1
+5f,0
+1
+3,0
+2,1
+5e,0
+1
+5,0
+2,1
+5c,0
+1
+7,0
+2,1
+5b,0
+1
+8,0
+1
+5a,0
+1
+9,0
+2,1
+59,0
+1
+a,0
+2,1
+57,0
+1
+c,0
+2,1
+55,0
+1
+d,0
+2,1
+55,0
+1
+e,0
+2,1
+53,0
+1
+10,0
+2,1
+52,0
+1
+11,0
+1
+51,0
+1
+12,0
+2,1
+4f,0
+1
+14,0
+2,1
+4e,0
+1
+15,0
+2,1
+4c,0
+1
+16,0
+2,1
+4c,0
+1
+17,0
+2,1
+4a,0
+1
+19,0
+2,1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+2,1
+46,0
+1
+1d,0
+2,1
+45,0
+1
+1e,0
+2,1
+42,0
+2,1
+1f,0
+2,1
+3e,0
+3,1
+23,0
+2,1
+39,0
+3,1
+28,0
+2,1
+34,0
+3,1
+2d,0
+1
+30,0
+3,1
+31,0
+2,1
+2c,0
+2,1
+36,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+62,0
+3,1
+5c,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5c,0
+3,1
+f89,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a71.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a71.dat
new file mode 100644
index 000000000..073810774
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a71.dat
@@ -0,0 +1,732 @@
+! $XConsortium$
+100 90 32
+4,0
+6,3
+5f,0
+2,2
+5,3
+5d,0
+2,3
+5,2
+3
+5c,0
+2,2
+5,3
+2,2
+3
+5b,0
+8,3
+2
+3
+2
+59,0
+2
+5,3
+2,2
+3
+2
+3
+2
+59,0
+5,2
+3
+2
+3
+2
+3
+3,2
+57,0
+2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+55,0
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+54,0
+4,3
+2
+3
+2
+8,3
+2
+3
+53,0
+4,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+3
+52,0
+2,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+2,3
+50,0
+3,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+4,2
+4f,0
+3,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2
+4e,0
+4,3
+2
+3
+6,2
+3
+2
+9,3
+2
+4c,0
+2,3
+2,2
+2,3
+3,2
+0
+2,2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4b,0
+2
+2,3
+3,2
+2,3
+2,0
+3,2
+2,3
+5,2
+2,3
+3,2
+3
+4a,0
+3
+8,2
+3,0
+3,2
+5,3
+8,2
+48,0
+9,3
+5,0
+2,3
+3,2
+b,3
+47,0
+8,3
+7,0
+f,3
+46,0
+9,2
+7,0
+3,3
+d,2
+45,0
+3
+2,2
+5,3
+9,0
+2
+2,3
+2,2
+6,3
+2,2
+2,3
+2
+43,0
+2
+2,3
+2
+4,3
+2
+a,0
+2
+2,3
+2
+4,3
+2
+2,3
+2,2
+3,3
+41,0
+3
+2
+3
+6,2
+b,0
+2
+3
+6,2
+3
+2
+6,3
+41,0
+3
+2
+3
+4,2
+3
+d,0
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2
+3f,0
+3
+2
+3
+4,2
+3
+2
+e,0
+3,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+3e,0
+3
+2
+3
+2,2
+3
+2
+3
+10,0
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+3d,0
+3
+2
+3
+2,2
+3
+2
+3
+2
+10,0
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+3a,0
+2
+8,3
+2
+12,0
+2
+3
+2
+5,3
+2
+3
+2
+5,3
+35,0
+3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+14,0
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+30,0
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+14,0
+2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2c,0
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+16,0
+3,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+29,0
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+17,0
+3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+3
+28,0
+9,3
+2
+3
+6,2
+3
+2
+1b,0
+3
+2
+3
+6,2
+3
+2
+4,3
+27,0
+2,2
+5,3
+2,2
+2,3
+5,2
+1f,0
+2,3
+6,2
+2,3
+2,2
+4,3
+25,0
+2,3
+5,2
+2,3
+3,2
+3
+24,0
+2
+4,3
+3,2
+2,3
+5,2
+3
+24,0
+2
+5,3
+3,2
+29,0
+8,2
+5,3
+3,2
+22,0
+2,3
+3,2
+3
+2d,0
+8,3
+3,2
+5,3
+21,0
+3,3
+32,0
+10,3
+50,0
+9,2
+5,3
+8,2
+49,0
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+5,3
+43,0
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+3
+3c,0
+2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+36,0
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+2,2
+36,0
+2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+36,0
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+36,0
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+3b,0
+3,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+3,3
+40,0
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+45,0
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+4a,0
+2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+50,0
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+55,0
+2
+3
+2
+7,3
+5a,0
+2
+2,3
+2,2
+e5a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a72.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a72.dat
new file mode 100644
index 000000000..b03797a11
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a72.dat
@@ -0,0 +1,381 @@
+! $XConsortium$
+100 90 32
+4,0
+6,3
+5f,0
+3
+6,2
+5d,0
+2
+7,3
+5c,0
+7,3
+3,2
+5b,0
+3,3
+3,2
+5,3
+59,0
+3
+2,2
+6,3
+3,2
+59,0
+5,3
+3,2
+5,3
+57,0
+5,2
+5,3
+4,2
+3
+55,0
+4,3
+6,2
+4,3
+3,2
+54,0
+8,3
+5,2
+3,3
+2
+53,0
+c,3
+7,2
+52,0
+3,3
+c,2
+5,3
+50,0
+3,2
+12,3
+4f,0
+9,3
+6,2
+4,3
+2,2
+2,3
+4e,0
+2,3
+6,2
+9,3
+2
+6,3
+4c,0
+2,2
+7,3
+0
+4,2
+9,3
+3,2
+4b,0
+4,3
+4,2
+2,0
+3,3
+3,2
+4,3
+2,2
+4,3
+4a,0
+3
+3,2
+5,3
+3,0
+8,2
+5,3
+3,2
+48,0
+2
+5,3
+3,2
+5,0
+3
+2
+3
+2
+3
+6,2
+5,3
+47,0
+5,2
+3,3
+7,0
+4,2
+4,3
+6,2
+3
+46,0
+4,3
+5,2
+7,0
+2
+3
+2
+9,3
+4,2
+45,0
+7,3
+2
+9,0
+2
+d,3
+2,2
+43,0
+9,2
+a,0
+4,3
+c,2
+41,0
+9,3
+b,0
+3,2
+d,3
+41,0
+4,3
+4,2
+d,0
+7,3
+6,2
+3,3
+3f,0
+4,2
+5,3
+e,0
+5,2
+9,3
+2
+3
+3e,0
+5,3
+3,2
+10,0
+5,3
+4,2
+6,3
+3d,0
+5,2
+4,3
+10,0
+4,2
+4,3
+3,2
+4,3
+2
+3a,0
+2
+6,3
+3,2
+12,0
+3,3
+a,2
+3,3
+35,0
+2
+5,3
+4,2
+3,3
+14,0
+2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+30,0
+3,3
+6,2
+4,3
+4,2
+14,0
+a,2
+4,3
+2,2
+2c,0
+3
+2
+9,3
+5,2
+3,3
+2
+16,0
+3
+2
+3
+2
+3
+2
+3
+2
+8,3
+29,0
+3,2
+d,3
+6,2
+17,0
+6,2
+a,3
+28,0
+7,3
+c,2
+1b,0
+9,3
+6,2
+27,0
+3
+6,2
+9,3
+1f,0
+2,3
+6,2
+8,3
+25,0
+2
+c,3
+24,0
+c,3
+4,2
+24,0
+6,3
+3,2
+29,0
+4,3
+6,2
+6,3
+22,0
+3,3
+3,2
+2d,0
+3,2
+8,3
+4,2
+3
+21,0
+3
+2,2
+32,0
+4,3
+5,2
+4,3
+3,2
+50,0
+5,3
+3,2
+6,3
+8,2
+49,0
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+43,0
+a,2
+4,3
+6,2
+4,3
+a,2
+3
+3c,0
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+2,3
+36,0
+9,3
+b,2
+d,3
+8,2
+36,0
+6,3
+c,2
+c,3
+b,2
+36,0
+5,3
+6,2
+12,3
+6,2
+6,3
+36,0
+4,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+7,3
+3b,0
+7,3
+2
+8,3
+6,2
+9,3
+2
+4,3
+40,0
+4,2
+9,3
+3,2
+8,3
+4,2
+3,3
+45,0
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+2,3
+4a,0
+3
+a,2
+5,3
+3,2
+2,3
+50,0
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+55,0
+a,2
+5a,0
+3,3
+2
+3
+e5a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a73.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a73.dat
new file mode 100644
index 000000000..14e644a1f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a73.dat
@@ -0,0 +1,313 @@
+! $XConsortium$
+100 90 32
+4,0
+6,1
+5f,0
+1
+64,0
+7,1
+5c,0
+7,1
+5e,0
+3,1
+3,0
+5,1
+59,0
+1
+2,0
+6,1
+5c,0
+5,1
+3,0
+5,1
+5c,0
+5,1
+4,0
+1
+55,0
+4,1
+6,0
+4,1
+57,0
+8,1
+5,0
+3,1
+54,0
+c,1
+59,0
+3,1
+c,0
+5,1
+53,0
+12,1
+4f,0
+9,1
+6,0
+4,1
+2,0
+2,1
+4e,0
+2,1
+6,0
+9,1
+0
+6,1
+4e,0
+7,1
+5,0
+9,1
+4e,0
+4,1
+6,0
+3,1
+3,0
+4,1
+2,0
+4,1
+4a,0
+1
+3,0
+5,1
+b,0
+5,1
+4c,0
+5,1
+8,0
+1
+0
+1
+0
+1
+6,0
+5,1
+4c,0
+3,1
+b,0
+4,1
+6,0
+1
+46,0
+4,1
+d,0
+1
+0
+9,1
+49,0
+7,1
+b,0
+d,1
+58,0
+4,1
+4d,0
+9,1
+e,0
+d,1
+41,0
+4,1
+11,0
+7,1
+6,0
+3,1
+43,0
+5,1
+13,0
+9,1
+0
+1
+3e,0
+5,1
+13,0
+5,1
+4,0
+6,1
+42,0
+4,1
+14,0
+4,1
+3,0
+4,1
+3c,0
+6,1
+15,0
+3,1
+a,0
+3,1
+36,0
+5,1
+4,0
+3,1
+15,0
+3,1
+0
+1
+0
+1
+0
+1
+36,0
+3,1
+6,0
+4,1
+22,0
+4,1
+2e,0
+1
+0
+9,1
+5,0
+3,1
+17,0
+1
+0
+1
+0
+1
+0
+1
+0
+8,1
+2c,0
+d,1
+23,0
+a,1
+28,0
+7,1
+27,0
+9,1
+2d,0
+1
+6,0
+9,1
+1f,0
+2,1
+6,0
+8,1
+26,0
+c,1
+24,0
+c,1
+28,0
+6,1
+2c,0
+4,1
+6,0
+6,1
+22,0
+3,1
+33,0
+8,1
+4,0
+1
+21,0
+1
+34,0
+4,1
+5,0
+4,1
+53,0
+5,1
+3,0
+6,1
+52,0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+4,1
+6,0
+4,1
+a,0
+1
+41,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+36,0
+9,1
+b,0
+d,1
+3e,0
+6,1
+c,0
+c,1
+41,0
+5,1
+6,0
+12,1
+6,0
+6,1
+3a,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+7,1
+3b,0
+7,1
+0
+8,1
+6,0
+9,1
+0
+4,1
+44,0
+9,1
+3,0
+8,1
+4,0
+3,1
+45,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+2,1
+4a,0
+1
+a,0
+5,1
+3,0
+2,1
+50,0
+3,1
+0
+1
+0
+1
+0
+1
+bf,0
+3,1
+0
+1
+e5a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a77.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a77.dat
new file mode 100644
index 000000000..5b89a14d4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a77.dat
@@ -0,0 +1,269 @@
+! $XConsortium$
+100 90 32
+1fe,0
+1
+63,0
+3,1
+62,0
+1
+0
+2,1
+60,0
+1
+3,0
+2,1
+5f,0
+1
+3,0
+2,1
+5e,0
+1
+5,0
+2,1
+5c,0
+1
+7,0
+2,1
+5b,0
+1
+8,0
+1
+5a,0
+1
+9,0
+2,1
+59,0
+1
+a,0
+2,1
+57,0
+1
+c,0
+2,1
+55,0
+1
+d,0
+2,1
+55,0
+1
+e,0
+2,1
+53,0
+1
+10,0
+1
+53,0
+1
+63,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+63,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+17bf,0
+100 90 32
+bcb,0
+2,1
+5f,0
+3,1
+5e,0
+3,1
+5e,0
+3,1
+5e,0
+3,1
+5f,0
+2,1
+529,0
+5,1
+5a,0
+5,1
+5c,0
+3,1
+f89,0
+100 90 32
+2328,0
+100 90 32
+729,0
+1
+64,0
+1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+179f,0
+100 90 32
+bec,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+18d,0
+3,1
+5c,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+10a6,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+f1a,0
+2,1
+64,0
+2,1
+62,0
+3,1
+5f,0
+2,1
+12e0,0
+100 90 32
+2328,0
+100 90 32
+bcb,0
+2,1
+5f,0
+3,1
+5e,0
+3,1
+5e,0
+3,1
+5e,0
+3,1
+5f,0
+2,1
+529,0
+5,1
+5a,0
+5,1
+5c,0
+3,1
+f89,0
+100 90 32
+2328,0
+100 90 32
+729,0
+1
+64,0
+1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+179f,0
+100 90 32
+bec,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+18d,0
+3,1
+5c,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+10a6,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+f1a,0
+2,1
+64,0
+2,1
+62,0
+3,1
+5f,0
+2,1
+12e0,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a78.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a78.dat
new file mode 100644
index 000000000..f64dfdc2c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a78.dat
@@ -0,0 +1,2373 @@
+! $XConsortium$
+100 90 32
+5,0
+4,1
+60,0
+6,1
+5f,0
+6,1
+5e,0
+8,1
+5c,0
+a,1
+5b,0
+a,1
+5a,0
+c,1
+59,0
+d,1
+57,0
+f,1
+55,0
+10,1
+55,0
+11,1
+53,0
+13,1
+52,0
+13,1
+51,0
+15,1
+4f,0
+8,1
+0
+e,1
+4e,0
+7,1
+3,0
+e,1
+4c,0
+8,1
+3,0
+e,1
+4c,0
+7,1
+5,0
+e,1
+4a,0
+7,1
+7,0
+e,1
+48,0
+8,1
+8,0
+d,1
+48,0
+7,1
+9,0
+e,1
+46,0
+8,1
+a,0
+e,1
+45,0
+7,1
+c,0
+e,1
+43,0
+7,1
+d,0
+e,1
+42,0
+8,1
+e,0
+e,1
+41,0
+7,1
+10,0
+e,1
+3f,0
+8,1
+11,0
+d,1
+3f,0
+7,1
+12,0
+e,1
+3c,0
+8,1
+14,0
+e,1
+37,0
+c,1
+15,0
+e,1
+32,0
+f,1
+16,0
+e,1
+2e,0
+13,1
+17,0
+e,1
+2a,0
+15,1
+19,0
+e,1
+29,0
+12,1
+1d,0
+d,1
+28,0
+f,1
+21,0
+e,1
+26,0
+c,1
+26,0
+e,1
+25,0
+8,1
+2b,0
+e,1
+23,0
+5,1
+2f,0
+e,1
+22,0
+2,1
+34,0
+e,1
+54,0
+12,1
+4d,0
+18,1
+47,0
+1f,1
+40,0
+23,1
+3c,0
+23,1
+3c,0
+23,1
+3c,0
+23,1
+3c,0
+23,1
+3e,0
+21,1
+43,0
+1c,1
+48,0
+17,1
+4d,0
+12,1
+53,0
+c,1
+58,0
+7,1
+5d,0
+2,1
+e5d,0
+100 90 32
+1f5,0
+5,1
+5f,0
+f,1
+55,0
+17,1
+d,0
+6,1
+39,0
+18,1
+d,0
+b,1
+34,0
+18,1
+d,0
+10,1
+2f,0
+18,1
+d,0
+15,1
+2a,0
+18,1
+d,0
+1a,1
+2a,0
+13,1
+d,0
+1f,1
+2f,0
+a,1
+b,0
+25,1
+2d,0
+7,1
+b,0
+2a,1
+28,0
+7,1
+b,0
+7,1
+5,0
+23,1
+23,0
+7,1
+b,0
+7,1
+a,0
+23,1
+1e,0
+7,1
+b,0
+7,1
+f,0
+21,1
+1b,0
+7,1
+b,0
+7,1
+14,0
+1c,1
+1b,0
+8,1
+9,0
+8,1
+19,0
+17,1
+1c,0
+7,1
+9,0
+7,1
+1f,0
+11,1
+1d,0
+7,1
+9,0
+7,1
+24,0
+c,1
+1d,0
+7,1
+9,0
+7,1
+29,0
+7,1
+1d,0
+7,1
+9,0
+7,1
+2e,0
+2,1
+1d,0
+7,1
+9,0
+7,1
+4d,0
+8,1
+7,0
+8,1
+4e,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+8,1
+5,0
+8,1
+50,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+8,1
+3,0
+8,1
+52,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+f,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+62,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+45,0
+100 90 32
+1f5,0
+3,1
+61,0
+a,1
+3e,0
+1
+1b,0
+f,1
+38,0
+3,1
+19,0
+10,1
+36,0
+7,1
+17,0
+11,1
+34,0
+a,1
+15,0
+12,1
+32,0
+c,1
+14,0
+12,1
+30,0
+10,1
+15,0
+10,1
+2e,0
+13,1
+1a,0
+a,1
+2c,0
+16,1
+1a,0
+8,1
+2a,0
+19,1
+1a,0
+8,1
+28,0
+c,1
+2,0
+e,1
+18,0
+9,1
+26,0
+b,1
+6,0
+e,1
+17,0
+8,1
+24,0
+c,1
+8,0
+e,1
+17,0
+8,1
+22,0
+c,1
+b,0
+c,1
+17,0
+9,1
+20,0
+b,1
+f,0
+9,1
+19,0
+8,1
+1e,0
+c,1
+12,0
+6,1
+1b,0
+8,1
+1c,0
+c,1
+14,0
+5,1
+1b,0
+9,1
+1a,0
+b,1
+18,0
+2,1
+1d,0
+8,1
+18,0
+c,1
+39,0
+8,1
+16,0
+c,1
+3a,0
+9,1
+14,0
+b,1
+3d,0
+8,1
+12,0
+c,1
+3f,0
+8,1
+10,0
+c,1
+40,0
+9,1
+e,0
+b,1
+43,0
+8,1
+c,0
+c,1
+45,0
+8,1
+a,0
+c,1
+46,0
+9,1
+8,0
+b,1
+49,0
+8,1
+6,0
+c,1
+4b,0
+8,1
+4,0
+c,1
+4c,0
+9,1
+2,0
+b,1
+4f,0
+14,1
+51,0
+12,1
+52,0
+10,1
+55,0
+e,1
+57,0
+c,1
+58,0
+a,1
+5b,0
+8,1
+5d,0
+6,1
+5e,0
+4,1
+61,0
+2,1
+11d6,0
+100 90 32
+1f5,0
+9,1
+5b,0
+1b,1
+25,0
+1
+23,0
+27,1
+18,0
+4,1
+20,0
+28,1
+18,0
+7,1
+1d,0
+28,1
+17,0
+a,1
+1b,0
+28,1
+16,0
+e,1
+18,0
+28,1
+16,0
+10,1
+1f,0
+1f,1
+15,0
+13,1
+2f,0
+d,1
+14,0
+17,1
+32,0
+7,1
+14,0
+19,1
+30,0
+7,1
+13,0
+8,1
+2,0
+13,1
+2d,0
+7,1
+12,0
+9,1
+5,0
+12,1
+2b,0
+7,1
+12,0
+8,1
+8,0
+12,1
+29,0
+7,1
+11,0
+8,1
+c,0
+e,1
+2a,0
+7,1
+10,0
+9,1
+e,0
+c,1
+2a,0
+7,1
+10,0
+8,1
+11,0
+9,1
+2b,0
+7,1
+f,0
+8,1
+15,0
+6,1
+2b,0
+7,1
+e,0
+9,1
+17,0
+4,1
+2b,0
+7,1
+e,0
+8,1
+47,0
+7,1
+d,0
+8,1
+48,0
+7,1
+c,0
+9,1
+48,0
+7,1
+c,0
+8,1
+49,0
+7,1
+b,0
+8,1
+4a,0
+7,1
+a,0
+9,1
+4a,0
+7,1
+a,0
+8,1
+4b,0
+7,1
+9,0
+8,1
+4c,0
+7,1
+8,0
+9,1
+4c,0
+7,1
+8,0
+8,1
+4d,0
+7,1
+7,0
+8,1
+4e,0
+7,1
+6,0
+9,1
+4e,0
+7,1
+6,0
+8,1
+4f,0
+7,1
+5,0
+8,1
+50,0
+7,1
+4,0
+9,1
+50,0
+7,1
+4,0
+8,1
+51,0
+7,1
+3,0
+8,1
+52,0
+7,1
+2,0
+9,1
+52,0
+7,1
+2,0
+8,1
+53,0
+7,1
+0
+8,1
+54,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+c,1
+58,0
+b,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5b,0
+8,1
+5c,0
+8,1
+5c,0
+7,1
+5d,0
+6,1
+5e,0
+6,1
+5e,0
+5,1
+5f,0
+4,1
+60,0
+4,1
+60,0
+3,1
+61,0
+2,1
+62,0
+2,1
+62,0
+1
+9a2,0
+100 90 32
+1f5,0
+8,1
+5c,0
+19,1
+f,0
+2,1
+3a,0
+25,1
+3,0
+6,1
+35,0
+26,1
+3,0
+b,1
+30,0
+26,1
+3,0
+f,1
+2c,0
+26,1
+3,0
+14,1
+27,0
+26,1
+3,0
+19,1
+2b,0
+1d,1
+3,0
+1d,1
+38,0
+c,1
+3,0
+22,1
+38,0
+7,1
+3,0
+26,1
+34,0
+8,1
+0
+8,1
+3,0
+21,1
+30,0
+7,1
+0
+7,1
+9,0
+21,1
+2b,0
+7,1
+0
+7,1
+d,0
+1f,1
+29,0
+7,1
+0
+7,1
+12,0
+1a,1
+29,0
+7,1
+0
+7,1
+16,0
+16,1
+29,0
+7,1
+0
+7,1
+1b,0
+10,1
+2a,0
+7,1
+0
+7,1
+20,0
+b,1
+2a,0
+7,1
+0
+7,1
+24,0
+7,1
+2a,0
+7,1
+0
+7,1
+29,0
+2,1
+2a,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+62,0
+1
+63,0
+1
+63,0
+1
+3c,0
+100 90 32
+1f5,0
+5,1
+5f,0
+10,1
+36,0
+2,1
+1c,0
+18,1
+2d,0
+4,1
+1a,0
+19,1
+2d,0
+6,1
+18,0
+1a,1
+2b,0
+9,1
+16,0
+1a,1
+2a,0
+c,1
+14,0
+1b,1
+29,0
+e,1
+18,0
+15,1
+28,0
+10,1
+22,0
+a,1
+28,0
+12,1
+23,0
+8,1
+26,0
+15,1
+22,0
+7,1
+25,0
+18,1
+20,0
+8,1
+24,0
+8,1
+3,0
+f,1
+1f,0
+7,1
+23,0
+8,1
+6,0
+e,1
+1e,0
+7,1
+23,0
+8,1
+8,0
+c,1
+1e,0
+8,1
+21,0
+8,1
+a,0
+a,1
+20,0
+7,1
+20,0
+9,1
+c,0
+7,1
+21,0
+8,1
+1f,0
+8,1
+f,0
+5,1
+22,0
+7,1
+1e,0
+8,1
+12,0
+2,1
+23,0
+7,1
+1e,0
+8,1
+37,0
+8,1
+1c,0
+8,1
+39,0
+7,1
+1b,0
+9,1
+39,0
+8,1
+1a,0
+8,1
+3b,0
+7,1
+19,0
+8,1
+3c,0
+7,1
+19,0
+8,1
+3c,0
+8,1
+17,0
+8,1
+3e,0
+7,1
+16,0
+9,1
+3e,0
+8,1
+15,0
+8,1
+40,0
+7,1
+14,0
+8,1
+41,0
+7,1
+14,0
+8,1
+41,0
+8,1
+12,0
+8,1
+43,0
+7,1
+11,0
+9,1
+43,0
+8,1
+10,0
+8,1
+45,0
+7,1
+f,0
+8,1
+46,0
+7,1
+f,0
+8,1
+46,0
+8,1
+d,0
+8,1
+48,0
+7,1
+c,0
+9,1
+48,0
+8,1
+b,0
+8,1
+4a,0
+7,1
+a,0
+8,1
+4b,0
+7,1
+a,0
+8,1
+4b,0
+8,1
+8,0
+8,1
+4d,0
+7,1
+7,0
+9,1
+4d,0
+8,1
+6,0
+8,1
+4f,0
+7,1
+5,0
+8,1
+50,0
+7,1
+5,0
+8,1
+50,0
+8,1
+3,0
+8,1
+52,0
+7,1
+2,0
+9,1
+52,0
+8,1
+0
+8,1
+54,0
+f,1
+55,0
+f,1
+55,0
+e,1
+57,0
+d,1
+57,0
+c,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5c,0
+8,1
+5c,0
+7,1
+5e,0
+5,1
+5f,0
+5,1
+5f,0
+4,1
+61,0
+3,1
+61,0
+2,1
+935,0
+100 90 32
+1f5,0
+5,1
+5f,0
+f,1
+55,0
+17,1
+d,0
+6,1
+39,0
+18,1
+d,0
+b,1
+34,0
+18,1
+d,0
+10,1
+2f,0
+18,1
+d,0
+15,1
+2a,0
+18,1
+d,0
+1a,1
+2a,0
+13,1
+d,0
+1f,1
+2f,0
+a,1
+b,0
+25,1
+2d,0
+7,1
+b,0
+2a,1
+28,0
+7,1
+b,0
+7,1
+5,0
+23,1
+23,0
+7,1
+b,0
+7,1
+a,0
+23,1
+1e,0
+7,1
+b,0
+7,1
+f,0
+21,1
+1b,0
+7,1
+b,0
+7,1
+14,0
+1c,1
+1b,0
+8,1
+9,0
+8,1
+19,0
+17,1
+1c,0
+7,1
+9,0
+7,1
+1f,0
+11,1
+1d,0
+7,1
+9,0
+7,1
+24,0
+c,1
+1d,0
+7,1
+9,0
+7,1
+29,0
+7,1
+1d,0
+7,1
+9,0
+7,1
+2e,0
+2,1
+1d,0
+7,1
+9,0
+7,1
+4d,0
+8,1
+7,0
+8,1
+4e,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+8,1
+5,0
+8,1
+50,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+8,1
+3,0
+8,1
+52,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+f,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+62,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+45,0
+100 90 32
+1f5,0
+3,1
+61,0
+a,1
+3e,0
+1
+1b,0
+f,1
+38,0
+3,1
+19,0
+10,1
+36,0
+7,1
+17,0
+11,1
+34,0
+a,1
+15,0
+12,1
+32,0
+c,1
+14,0
+12,1
+30,0
+10,1
+15,0
+10,1
+2e,0
+13,1
+1a,0
+a,1
+2c,0
+16,1
+1a,0
+8,1
+2a,0
+19,1
+1a,0
+8,1
+28,0
+c,1
+2,0
+e,1
+18,0
+9,1
+26,0
+b,1
+6,0
+e,1
+17,0
+8,1
+24,0
+c,1
+8,0
+e,1
+17,0
+8,1
+22,0
+c,1
+b,0
+c,1
+17,0
+9,1
+20,0
+b,1
+f,0
+9,1
+19,0
+8,1
+1e,0
+c,1
+12,0
+6,1
+1b,0
+8,1
+1c,0
+c,1
+14,0
+5,1
+1b,0
+9,1
+1a,0
+b,1
+18,0
+2,1
+1d,0
+8,1
+18,0
+c,1
+39,0
+8,1
+16,0
+c,1
+3a,0
+9,1
+14,0
+b,1
+3d,0
+8,1
+12,0
+c,1
+3f,0
+8,1
+10,0
+c,1
+40,0
+9,1
+e,0
+b,1
+43,0
+8,1
+c,0
+c,1
+45,0
+8,1
+a,0
+c,1
+46,0
+9,1
+8,0
+b,1
+49,0
+8,1
+6,0
+c,1
+4b,0
+8,1
+4,0
+c,1
+4c,0
+9,1
+2,0
+b,1
+4f,0
+14,1
+51,0
+12,1
+52,0
+10,1
+55,0
+e,1
+57,0
+c,1
+58,0
+a,1
+5b,0
+8,1
+5d,0
+6,1
+5e,0
+4,1
+61,0
+2,1
+11d6,0
+100 90 32
+1f5,0
+9,1
+5b,0
+1b,1
+25,0
+1
+23,0
+27,1
+18,0
+4,1
+20,0
+28,1
+18,0
+7,1
+1d,0
+28,1
+17,0
+a,1
+1b,0
+28,1
+16,0
+e,1
+18,0
+28,1
+16,0
+10,1
+1f,0
+1f,1
+15,0
+13,1
+2f,0
+d,1
+14,0
+17,1
+32,0
+7,1
+14,0
+19,1
+30,0
+7,1
+13,0
+8,1
+2,0
+13,1
+2d,0
+7,1
+12,0
+9,1
+5,0
+12,1
+2b,0
+7,1
+12,0
+8,1
+8,0
+12,1
+29,0
+7,1
+11,0
+8,1
+c,0
+e,1
+2a,0
+7,1
+10,0
+9,1
+e,0
+c,1
+2a,0
+7,1
+10,0
+8,1
+11,0
+9,1
+2b,0
+7,1
+f,0
+8,1
+15,0
+6,1
+2b,0
+7,1
+e,0
+9,1
+17,0
+4,1
+2b,0
+7,1
+e,0
+8,1
+47,0
+7,1
+d,0
+8,1
+48,0
+7,1
+c,0
+9,1
+48,0
+7,1
+c,0
+8,1
+49,0
+7,1
+b,0
+8,1
+4a,0
+7,1
+a,0
+9,1
+4a,0
+7,1
+a,0
+8,1
+4b,0
+7,1
+9,0
+8,1
+4c,0
+7,1
+8,0
+9,1
+4c,0
+7,1
+8,0
+8,1
+4d,0
+7,1
+7,0
+8,1
+4e,0
+7,1
+6,0
+9,1
+4e,0
+7,1
+6,0
+8,1
+4f,0
+7,1
+5,0
+8,1
+50,0
+7,1
+4,0
+9,1
+50,0
+7,1
+4,0
+8,1
+51,0
+7,1
+3,0
+8,1
+52,0
+7,1
+2,0
+9,1
+52,0
+7,1
+2,0
+8,1
+53,0
+7,1
+0
+8,1
+54,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+c,1
+58,0
+b,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5b,0
+8,1
+5c,0
+8,1
+5c,0
+7,1
+5d,0
+6,1
+5e,0
+6,1
+5e,0
+5,1
+5f,0
+4,1
+60,0
+4,1
+60,0
+3,1
+61,0
+2,1
+62,0
+2,1
+62,0
+1
+9a2,0
+100 90 32
+1f5,0
+8,1
+5c,0
+19,1
+f,0
+2,1
+3a,0
+25,1
+3,0
+6,1
+35,0
+26,1
+3,0
+b,1
+30,0
+26,1
+3,0
+f,1
+2c,0
+26,1
+3,0
+14,1
+27,0
+26,1
+3,0
+19,1
+2b,0
+1d,1
+3,0
+1d,1
+38,0
+c,1
+3,0
+22,1
+38,0
+7,1
+3,0
+26,1
+34,0
+8,1
+0
+8,1
+3,0
+21,1
+30,0
+7,1
+0
+7,1
+9,0
+21,1
+2b,0
+7,1
+0
+7,1
+d,0
+1f,1
+29,0
+7,1
+0
+7,1
+12,0
+1a,1
+29,0
+7,1
+0
+7,1
+16,0
+16,1
+29,0
+7,1
+0
+7,1
+1b,0
+10,1
+2a,0
+7,1
+0
+7,1
+20,0
+b,1
+2a,0
+7,1
+0
+7,1
+24,0
+7,1
+2a,0
+7,1
+0
+7,1
+29,0
+2,1
+2a,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+61,0
+3,1
+62,0
+1
+63,0
+1
+63,0
+1
+3c,0
+100 90 32
+1f5,0
+5,1
+5f,0
+10,1
+36,0
+2,1
+1c,0
+18,1
+2d,0
+4,1
+1a,0
+19,1
+2d,0
+6,1
+18,0
+1a,1
+2b,0
+9,1
+16,0
+1a,1
+2a,0
+c,1
+14,0
+1b,1
+29,0
+e,1
+18,0
+15,1
+28,0
+10,1
+22,0
+a,1
+28,0
+12,1
+23,0
+8,1
+26,0
+15,1
+22,0
+7,1
+25,0
+18,1
+20,0
+8,1
+24,0
+8,1
+3,0
+f,1
+1f,0
+7,1
+23,0
+8,1
+6,0
+e,1
+1e,0
+7,1
+23,0
+8,1
+8,0
+c,1
+1e,0
+8,1
+21,0
+8,1
+a,0
+a,1
+20,0
+7,1
+20,0
+9,1
+c,0
+7,1
+21,0
+8,1
+1f,0
+8,1
+f,0
+5,1
+22,0
+7,1
+1e,0
+8,1
+12,0
+2,1
+23,0
+7,1
+1e,0
+8,1
+37,0
+8,1
+1c,0
+8,1
+39,0
+7,1
+1b,0
+9,1
+39,0
+8,1
+1a,0
+8,1
+3b,0
+7,1
+19,0
+8,1
+3c,0
+7,1
+19,0
+8,1
+3c,0
+8,1
+17,0
+8,1
+3e,0
+7,1
+16,0
+9,1
+3e,0
+8,1
+15,0
+8,1
+40,0
+7,1
+14,0
+8,1
+41,0
+7,1
+14,0
+8,1
+41,0
+8,1
+12,0
+8,1
+43,0
+7,1
+11,0
+9,1
+43,0
+8,1
+10,0
+8,1
+45,0
+7,1
+f,0
+8,1
+46,0
+7,1
+f,0
+8,1
+46,0
+8,1
+d,0
+8,1
+48,0
+7,1
+c,0
+9,1
+48,0
+8,1
+b,0
+8,1
+4a,0
+7,1
+a,0
+8,1
+4b,0
+7,1
+a,0
+8,1
+4b,0
+8,1
+8,0
+8,1
+4d,0
+7,1
+7,0
+9,1
+4d,0
+8,1
+6,0
+8,1
+4f,0
+7,1
+5,0
+8,1
+50,0
+7,1
+5,0
+8,1
+50,0
+8,1
+3,0
+8,1
+52,0
+7,1
+2,0
+9,1
+52,0
+8,1
+0
+8,1
+54,0
+f,1
+55,0
+f,1
+55,0
+e,1
+57,0
+d,1
+57,0
+c,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5c,0
+8,1
+5c,0
+7,1
+5e,0
+5,1
+5f,0
+5,1
+5f,0
+4,1
+61,0
+3,1
+61,0
+2,1
+935,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a79.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a79.dat
new file mode 100644
index 000000000..1e9829998
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a79.dat
@@ -0,0 +1,1265 @@
+! $XConsortium$
+100 90 32
+19,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+f,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+b96,0
+100 90 32
+4a,0
+13,1
+4f,0
+16,1
+4b,0
+19,1
+49,0
+1b,1
+46,0
+1d,1
+45,0
+1c,1
+45,0
+1c,1
+46,0
+1b,1
+46,0
+1b,1
+47,0
+1a,1
+47,0
+1a,1
+48,0
+19,1
+48,0
+19,1
+49,0
+18,1
+49,0
+18,1
+4a,0
+17,1
+4a,0
+17,1
+4b,0
+16,1
+4f,0
+12,1
+52,0
+f,1
+55,0
+c,1
+59,0
+8,1
+5c,0
+5,1
+5f,0
+2,1
+1a08,0
+100 90 32
+52,0
+4,1
+5,0
+5,1
+55,0
+6,1
+3,0
+7,1
+53,0
+8,1
+0
+9,1
+51,0
+13,1
+50,0
+13,1
+50,0
+13,1
+50,0
+13,1
+50,0
+13,1
+50,0
+12,1
+51,0
+12,1
+51,0
+12,1
+51,0
+12,1
+51,0
+12,1
+51,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+a,1
+5b,0
+8,1
+5d,0
+6,1
+5f,0
+4,1
+61,0
+2,1
+eb0,0
+100 90 32
+24,0
+6,1
+5b,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+b8d,0
+100 90 32
+28,0
+4,1
+5d,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+b8a,0
+100 90 32
+28,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+ea7,0
+100 90 32
+4a,0
+13,1
+4f,0
+16,1
+4b,0
+19,1
+49,0
+1b,1
+46,0
+1d,1
+45,0
+1c,1
+45,0
+1c,1
+46,0
+1b,1
+46,0
+1b,1
+47,0
+1a,1
+47,0
+1a,1
+48,0
+19,1
+48,0
+19,1
+49,0
+18,1
+49,0
+18,1
+4a,0
+17,1
+4a,0
+17,1
+4b,0
+16,1
+4f,0
+12,1
+52,0
+f,1
+55,0
+c,1
+59,0
+8,1
+5c,0
+5,1
+5f,0
+2,1
+1a08,0
+100 90 32
+52,0
+4,1
+5,0
+5,1
+55,0
+6,1
+3,0
+7,1
+53,0
+8,1
+0
+9,1
+51,0
+13,1
+50,0
+13,1
+50,0
+13,1
+50,0
+13,1
+50,0
+13,1
+50,0
+12,1
+51,0
+12,1
+51,0
+12,1
+51,0
+12,1
+51,0
+12,1
+51,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+a,1
+5b,0
+8,1
+5d,0
+6,1
+5f,0
+4,1
+61,0
+2,1
+eb0,0
+100 90 32
+24,0
+6,1
+5b,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+b8d,0
+100 90 32
+28,0
+4,1
+5d,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+b8a,0
+100 90 32
+28,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+ea7,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a80.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a80.dat
new file mode 100644
index 000000000..4453e7dce
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a80.dat
@@ -0,0 +1,3285 @@
+! $XConsortium$
+100 90 32
+d1,0
+3,1
+60,0
+6,1
+5d,0
+9,1
+5b,0
+a,1
+5a,0
+c,1
+59,0
+d,1
+57,0
+f,1
+55,0
+10,1
+55,0
+11,1
+53,0
+13,1
+52,0
+13,1
+51,0
+15,1
+4f,0
+8,1
+0
+e,1
+4e,0
+7,1
+3,0
+e,1
+4c,0
+8,1
+3,0
+e,1
+4c,0
+7,1
+5,0
+e,1
+4a,0
+7,1
+7,0
+e,1
+48,0
+8,1
+8,0
+d,1
+48,0
+7,1
+9,0
+e,1
+46,0
+8,1
+a,0
+e,1
+45,0
+7,1
+c,0
+e,1
+43,0
+7,1
+d,0
+e,1
+42,0
+8,1
+e,0
+e,1
+41,0
+7,1
+10,0
+e,1
+3f,0
+8,1
+11,0
+d,1
+3f,0
+7,1
+12,0
+e,1
+3c,0
+8,1
+14,0
+e,1
+37,0
+c,1
+15,0
+e,1
+32,0
+f,1
+16,0
+e,1
+2e,0
+12,1
+18,0
+e,1
+2a,0
+13,1
+1b,0
+e,1
+29,0
+11,1
+1e,0
+d,1
+28,0
+f,1
+21,0
+e,1
+26,0
+c,1
+26,0
+e,1
+25,0
+8,1
+2b,0
+e,1
+23,0
+5,1
+2f,0
+e,1
+22,0
+2,1
+34,0
+d,1
+55,0
+10,1
+4f,0
+15,1
+4a,0
+1a,1
+45,0
+1e,1
+41,0
+22,1
+3d,0
+23,1
+3c,0
+23,1
+3c,0
+23,1
+3e,0
+21,1
+43,0
+1c,1
+48,0
+17,1
+4d,0
+12,1
+53,0
+c,1
+58,0
+7,1
+5d,0
+2,1
+e5d,0
+100 90 32
+14,0
+4,1
+d,0
+3,1
+4d,0
+7,1
+d,0
+7,1
+49,0
+7,1
+d,0
+7,1
+49,0
+8,1
+b,0
+8,1
+4a,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+8,1
+9,0
+8,1
+4c,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+8,1
+7,0
+8,1
+4e,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+8,1
+5,0
+8,1
+50,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+8,1
+3,0
+8,1
+52,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+f,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+a6c,0
+100 90 32
+d,0
+5,1
+32,0
+5,1
+27,0
+6,1
+30,0
+8,1
+25,0
+8,1
+2e,0
+a,1
+24,0
+9,1
+2c,0
+b,1
+25,0
+8,1
+2a,0
+c,1
+27,0
+8,1
+28,0
+c,1
+28,0
+9,1
+26,0
+b,1
+2b,0
+8,1
+24,0
+c,1
+2d,0
+8,1
+22,0
+c,1
+2e,0
+9,1
+20,0
+b,1
+31,0
+8,1
+1e,0
+c,1
+33,0
+8,1
+1c,0
+c,1
+34,0
+9,1
+1a,0
+b,1
+37,0
+8,1
+18,0
+c,1
+39,0
+8,1
+16,0
+c,1
+3a,0
+9,1
+14,0
+b,1
+3d,0
+8,1
+12,0
+c,1
+3f,0
+8,1
+10,0
+c,1
+40,0
+9,1
+e,0
+b,1
+43,0
+8,1
+c,0
+c,1
+45,0
+8,1
+a,0
+c,1
+46,0
+9,1
+8,0
+b,1
+49,0
+8,1
+6,0
+c,1
+4b,0
+8,1
+4,0
+c,1
+4c,0
+9,1
+2,0
+b,1
+4f,0
+14,1
+51,0
+12,1
+52,0
+10,1
+55,0
+e,1
+57,0
+c,1
+58,0
+a,1
+5b,0
+8,1
+5d,0
+6,1
+5f,0
+3,1
+1621,0
+100 90 32
+21,0
+7,1
+16,0
+4,1
+43,0
+7,1
+16,0
+6,1
+41,0
+7,1
+15,0
+8,1
+40,0
+7,1
+14,0
+9,1
+40,0
+7,1
+14,0
+8,1
+41,0
+7,1
+13,0
+8,1
+42,0
+7,1
+12,0
+9,1
+42,0
+7,1
+12,0
+8,1
+43,0
+7,1
+11,0
+8,1
+44,0
+7,1
+10,0
+9,1
+44,0
+7,1
+10,0
+8,1
+45,0
+7,1
+f,0
+8,1
+46,0
+7,1
+e,0
+9,1
+46,0
+7,1
+e,0
+8,1
+47,0
+7,1
+d,0
+8,1
+48,0
+7,1
+c,0
+9,1
+48,0
+7,1
+c,0
+8,1
+49,0
+7,1
+b,0
+8,1
+4a,0
+7,1
+a,0
+9,1
+4a,0
+7,1
+a,0
+8,1
+4b,0
+7,1
+9,0
+8,1
+4c,0
+7,1
+8,0
+9,1
+4c,0
+7,1
+8,0
+8,1
+4d,0
+7,1
+7,0
+8,1
+4e,0
+7,1
+6,0
+9,1
+4e,0
+7,1
+6,0
+8,1
+4f,0
+7,1
+5,0
+8,1
+50,0
+7,1
+4,0
+9,1
+50,0
+7,1
+4,0
+8,1
+51,0
+7,1
+3,0
+8,1
+52,0
+7,1
+2,0
+9,1
+52,0
+7,1
+2,0
+8,1
+53,0
+7,1
+0
+8,1
+54,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+c,1
+58,0
+b,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5b,0
+8,1
+5c,0
+8,1
+5c,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+1042,0
+100 90 32
+22,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+de7,0
+100 90 32
+16,0
+4,1
+2a,0
+4,1
+30,0
+7,1
+29,0
+6,1
+2e,0
+7,1
+28,0
+8,1
+2d,0
+7,1
+28,0
+8,1
+2d,0
+8,1
+26,0
+8,1
+2f,0
+7,1
+25,0
+9,1
+2f,0
+8,1
+24,0
+8,1
+31,0
+7,1
+23,0
+8,1
+32,0
+7,1
+23,0
+8,1
+32,0
+8,1
+21,0
+8,1
+34,0
+7,1
+20,0
+9,1
+34,0
+8,1
+1f,0
+8,1
+36,0
+7,1
+1e,0
+8,1
+37,0
+7,1
+1e,0
+8,1
+37,0
+8,1
+1c,0
+8,1
+39,0
+7,1
+1b,0
+9,1
+39,0
+8,1
+1a,0
+8,1
+3b,0
+7,1
+19,0
+8,1
+3c,0
+7,1
+19,0
+8,1
+3c,0
+8,1
+17,0
+8,1
+3e,0
+7,1
+16,0
+9,1
+3e,0
+8,1
+15,0
+8,1
+40,0
+7,1
+14,0
+8,1
+41,0
+7,1
+14,0
+8,1
+41,0
+8,1
+12,0
+8,1
+43,0
+7,1
+11,0
+9,1
+43,0
+8,1
+10,0
+8,1
+45,0
+7,1
+f,0
+8,1
+46,0
+7,1
+f,0
+8,1
+46,0
+8,1
+d,0
+8,1
+48,0
+7,1
+c,0
+9,1
+48,0
+8,1
+b,0
+8,1
+4a,0
+7,1
+a,0
+8,1
+4b,0
+7,1
+a,0
+8,1
+4b,0
+8,1
+8,0
+8,1
+4d,0
+7,1
+7,0
+9,1
+4d,0
+8,1
+6,0
+8,1
+4f,0
+7,1
+5,0
+8,1
+50,0
+7,1
+5,0
+8,1
+50,0
+8,1
+3,0
+8,1
+52,0
+7,1
+2,0
+9,1
+52,0
+8,1
+0
+8,1
+54,0
+f,1
+55,0
+f,1
+55,0
+e,1
+57,0
+d,1
+57,0
+c,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5c,0
+8,1
+5c,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+e48,0
+100 90 32
+28,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+f,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+a5d,0
+100 90 32
+59,0
+b,1
+57,0
+d,1
+54,0
+10,1
+52,0
+12,1
+4f,0
+15,1
+4d,0
+17,1
+4a,0
+1a,1
+48,0
+1b,1
+46,0
+1b,1
+47,0
+1a,1
+47,0
+1a,1
+48,0
+19,1
+48,0
+19,1
+49,0
+18,1
+49,0
+18,1
+4a,0
+17,1
+4a,0
+17,1
+4b,0
+16,1
+4d,0
+14,1
+4f,0
+12,1
+52,0
+f,1
+55,0
+c,1
+59,0
+8,1
+5d,0
+4,1
+19f9,0
+100 90 32
+61,0
+3,1
+60,0
+4,1
+5f,0
+5,1
+5e,0
+6,1
+5d,0
+7,1
+5c,0
+8,1
+5b,0
+9,1
+5a,0
+a,1
+59,0
+b,1
+58,0
+c,1
+57,0
+d,1
+56,0
+e,1
+55,0
+f,1
+54,0
+10,1
+53,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+a,1
+59,0
+a,1
+5a,0
+9,1
+5b,0
+8,1
+5d,0
+6,1
+5f,0
+3,1
+e3f,0
+100 90 32
+33,0
+6,1
+5b,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+a54,0
+100 90 32
+37,0
+4,1
+5d,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+a51,0
+100 90 32
+37,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+d6e,0
+100 90 32
+14,0
+4,1
+d,0
+3,1
+4d,0
+7,1
+d,0
+7,1
+49,0
+7,1
+d,0
+7,1
+49,0
+8,1
+b,0
+8,1
+4a,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+8,1
+9,0
+8,1
+4c,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+8,1
+7,0
+8,1
+4e,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+8,1
+5,0
+8,1
+50,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+8,1
+3,0
+8,1
+52,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+f,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+a6c,0
+100 90 32
+d,0
+5,1
+32,0
+5,1
+27,0
+6,1
+30,0
+8,1
+25,0
+8,1
+2e,0
+a,1
+24,0
+9,1
+2c,0
+b,1
+25,0
+8,1
+2a,0
+c,1
+27,0
+8,1
+28,0
+c,1
+28,0
+9,1
+26,0
+b,1
+2b,0
+8,1
+24,0
+c,1
+2d,0
+8,1
+22,0
+c,1
+2e,0
+9,1
+20,0
+b,1
+31,0
+8,1
+1e,0
+c,1
+33,0
+8,1
+1c,0
+c,1
+34,0
+9,1
+1a,0
+b,1
+37,0
+8,1
+18,0
+c,1
+39,0
+8,1
+16,0
+c,1
+3a,0
+9,1
+14,0
+b,1
+3d,0
+8,1
+12,0
+c,1
+3f,0
+8,1
+10,0
+c,1
+40,0
+9,1
+e,0
+b,1
+43,0
+8,1
+c,0
+c,1
+45,0
+8,1
+a,0
+c,1
+46,0
+9,1
+8,0
+b,1
+49,0
+8,1
+6,0
+c,1
+4b,0
+8,1
+4,0
+c,1
+4c,0
+9,1
+2,0
+b,1
+4f,0
+14,1
+51,0
+12,1
+52,0
+10,1
+55,0
+e,1
+57,0
+c,1
+58,0
+a,1
+5b,0
+8,1
+5d,0
+6,1
+5f,0
+3,1
+1621,0
+100 90 32
+21,0
+7,1
+16,0
+4,1
+43,0
+7,1
+16,0
+6,1
+41,0
+7,1
+15,0
+8,1
+40,0
+7,1
+14,0
+9,1
+40,0
+7,1
+14,0
+8,1
+41,0
+7,1
+13,0
+8,1
+42,0
+7,1
+12,0
+9,1
+42,0
+7,1
+12,0
+8,1
+43,0
+7,1
+11,0
+8,1
+44,0
+7,1
+10,0
+9,1
+44,0
+7,1
+10,0
+8,1
+45,0
+7,1
+f,0
+8,1
+46,0
+7,1
+e,0
+9,1
+46,0
+7,1
+e,0
+8,1
+47,0
+7,1
+d,0
+8,1
+48,0
+7,1
+c,0
+9,1
+48,0
+7,1
+c,0
+8,1
+49,0
+7,1
+b,0
+8,1
+4a,0
+7,1
+a,0
+9,1
+4a,0
+7,1
+a,0
+8,1
+4b,0
+7,1
+9,0
+8,1
+4c,0
+7,1
+8,0
+9,1
+4c,0
+7,1
+8,0
+8,1
+4d,0
+7,1
+7,0
+8,1
+4e,0
+7,1
+6,0
+9,1
+4e,0
+7,1
+6,0
+8,1
+4f,0
+7,1
+5,0
+8,1
+50,0
+7,1
+4,0
+9,1
+50,0
+7,1
+4,0
+8,1
+51,0
+7,1
+3,0
+8,1
+52,0
+7,1
+2,0
+9,1
+52,0
+7,1
+2,0
+8,1
+53,0
+7,1
+0
+8,1
+54,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+c,1
+58,0
+b,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5b,0
+8,1
+5c,0
+8,1
+5c,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+1042,0
+100 90 32
+22,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+de7,0
+100 90 32
+16,0
+4,1
+2a,0
+4,1
+30,0
+7,1
+29,0
+6,1
+2e,0
+7,1
+28,0
+8,1
+2d,0
+7,1
+28,0
+8,1
+2d,0
+8,1
+26,0
+8,1
+2f,0
+7,1
+25,0
+9,1
+2f,0
+8,1
+24,0
+8,1
+31,0
+7,1
+23,0
+8,1
+32,0
+7,1
+23,0
+8,1
+32,0
+8,1
+21,0
+8,1
+34,0
+7,1
+20,0
+9,1
+34,0
+8,1
+1f,0
+8,1
+36,0
+7,1
+1e,0
+8,1
+37,0
+7,1
+1e,0
+8,1
+37,0
+8,1
+1c,0
+8,1
+39,0
+7,1
+1b,0
+9,1
+39,0
+8,1
+1a,0
+8,1
+3b,0
+7,1
+19,0
+8,1
+3c,0
+7,1
+19,0
+8,1
+3c,0
+8,1
+17,0
+8,1
+3e,0
+7,1
+16,0
+9,1
+3e,0
+8,1
+15,0
+8,1
+40,0
+7,1
+14,0
+8,1
+41,0
+7,1
+14,0
+8,1
+41,0
+8,1
+12,0
+8,1
+43,0
+7,1
+11,0
+9,1
+43,0
+8,1
+10,0
+8,1
+45,0
+7,1
+f,0
+8,1
+46,0
+7,1
+f,0
+8,1
+46,0
+8,1
+d,0
+8,1
+48,0
+7,1
+c,0
+9,1
+48,0
+8,1
+b,0
+8,1
+4a,0
+7,1
+a,0
+8,1
+4b,0
+7,1
+a,0
+8,1
+4b,0
+8,1
+8,0
+8,1
+4d,0
+7,1
+7,0
+9,1
+4d,0
+8,1
+6,0
+8,1
+4f,0
+7,1
+5,0
+8,1
+50,0
+7,1
+5,0
+8,1
+50,0
+8,1
+3,0
+8,1
+52,0
+7,1
+2,0
+9,1
+52,0
+8,1
+0
+8,1
+54,0
+f,1
+55,0
+f,1
+55,0
+e,1
+57,0
+d,1
+57,0
+c,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5c,0
+8,1
+5c,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+e48,0
+100 90 32
+28,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+f,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+a5d,0
+100 90 32
+59,0
+b,1
+57,0
+d,1
+54,0
+10,1
+52,0
+12,1
+4f,0
+15,1
+4d,0
+17,1
+4a,0
+1a,1
+48,0
+1b,1
+46,0
+1b,1
+47,0
+1a,1
+47,0
+1a,1
+48,0
+19,1
+48,0
+19,1
+49,0
+18,1
+49,0
+18,1
+4a,0
+17,1
+4a,0
+17,1
+4b,0
+16,1
+4d,0
+14,1
+4f,0
+12,1
+52,0
+f,1
+55,0
+c,1
+59,0
+8,1
+5d,0
+4,1
+19f9,0
+100 90 32
+61,0
+3,1
+60,0
+4,1
+5f,0
+5,1
+5e,0
+6,1
+5d,0
+7,1
+5c,0
+8,1
+5b,0
+9,1
+5a,0
+a,1
+59,0
+b,1
+58,0
+c,1
+57,0
+d,1
+56,0
+e,1
+55,0
+f,1
+54,0
+10,1
+53,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+a,1
+59,0
+a,1
+5a,0
+9,1
+5b,0
+8,1
+5d,0
+6,1
+5f,0
+3,1
+e3f,0
+100 90 32
+33,0
+6,1
+5b,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+a54,0
+100 90 32
+37,0
+4,1
+5d,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+a51,0
+100 90 32
+37,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+5,1
+60,0
+3,1
+d6e,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a81.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a81.dat
new file mode 100644
index 000000000..3b42e75b5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a81.dat
@@ -0,0 +1,3187 @@
+! $XConsortium$
+100 90 32
+137,0
+3,1
+60,0
+6,1
+5d,0
+8,1
+5b,0
+b,1
+59,0
+d,1
+57,0
+f,1
+55,0
+10,1
+55,0
+11,1
+53,0
+13,1
+52,0
+13,1
+51,0
+15,1
+4f,0
+8,1
+0
+e,1
+4e,0
+7,1
+3,0
+e,1
+4c,0
+8,1
+3,0
+e,1
+4c,0
+7,1
+5,0
+e,1
+4a,0
+7,1
+7,0
+e,1
+48,0
+8,1
+8,0
+d,1
+48,0
+7,1
+9,0
+e,1
+46,0
+8,1
+a,0
+e,1
+45,0
+7,1
+c,0
+e,1
+43,0
+7,1
+d,0
+e,1
+42,0
+8,1
+e,0
+e,1
+41,0
+7,1
+10,0
+e,1
+3f,0
+8,1
+11,0
+d,1
+3f,0
+7,1
+12,0
+e,1
+3c,0
+8,1
+14,0
+e,1
+37,0
+c,1
+15,0
+e,1
+32,0
+e,1
+17,0
+e,1
+2e,0
+11,1
+19,0
+e,1
+2a,0
+12,1
+1c,0
+e,1
+29,0
+11,1
+1e,0
+d,1
+28,0
+f,1
+21,0
+e,1
+26,0
+c,1
+26,0
+e,1
+25,0
+8,1
+2b,0
+e,1
+23,0
+5,1
+2f,0
+e,1
+22,0
+2,1
+34,0
+c,1
+56,0
+e,1
+51,0
+13,1
+4c,0
+18,1
+47,0
+1c,1
+43,0
+21,1
+3e,0
+23,1
+3c,0
+23,1
+3c,0
+23,1
+3e,0
+21,1
+43,0
+1c,1
+48,0
+17,1
+4d,0
+12,1
+53,0
+c,1
+58,0
+7,1
+5d,0
+2,1
+e5d,0
+100 90 32
+14,0
+4,1
+d,0
+3,1
+4d,0
+7,1
+d,0
+7,1
+49,0
+7,1
+d,0
+7,1
+49,0
+8,1
+b,0
+8,1
+4a,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+8,1
+9,0
+8,1
+4c,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+8,1
+7,0
+8,1
+4e,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+8,1
+5,0
+8,1
+50,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+8,1
+3,0
+8,1
+52,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+f,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+b96,0
+100 90 32
+d,0
+5,1
+32,0
+5,1
+27,0
+6,1
+30,0
+8,1
+25,0
+8,1
+2e,0
+a,1
+24,0
+9,1
+2c,0
+b,1
+25,0
+8,1
+2a,0
+c,1
+27,0
+8,1
+28,0
+c,1
+28,0
+9,1
+26,0
+b,1
+2b,0
+8,1
+24,0
+c,1
+2d,0
+8,1
+22,0
+c,1
+2e,0
+9,1
+20,0
+b,1
+31,0
+8,1
+1e,0
+c,1
+33,0
+8,1
+1c,0
+c,1
+34,0
+9,1
+1a,0
+b,1
+37,0
+8,1
+18,0
+c,1
+39,0
+8,1
+16,0
+c,1
+3a,0
+9,1
+14,0
+b,1
+3d,0
+8,1
+12,0
+c,1
+3f,0
+8,1
+10,0
+c,1
+40,0
+9,1
+e,0
+b,1
+43,0
+8,1
+c,0
+c,1
+45,0
+8,1
+a,0
+c,1
+46,0
+9,1
+8,0
+b,1
+49,0
+8,1
+6,0
+c,1
+4b,0
+8,1
+4,0
+c,1
+4c,0
+9,1
+2,0
+b,1
+4f,0
+14,1
+51,0
+12,1
+52,0
+10,1
+55,0
+e,1
+57,0
+c,1
+58,0
+a,1
+5b,0
+8,1
+5d,0
+6,1
+1683,0
+100 90 32
+21,0
+7,1
+16,0
+4,1
+43,0
+7,1
+16,0
+6,1
+41,0
+7,1
+15,0
+8,1
+40,0
+7,1
+14,0
+9,1
+40,0
+7,1
+14,0
+8,1
+41,0
+7,1
+13,0
+8,1
+42,0
+7,1
+12,0
+9,1
+42,0
+7,1
+12,0
+8,1
+43,0
+7,1
+11,0
+8,1
+44,0
+7,1
+10,0
+9,1
+44,0
+7,1
+10,0
+8,1
+45,0
+7,1
+f,0
+8,1
+46,0
+7,1
+e,0
+9,1
+46,0
+7,1
+e,0
+8,1
+47,0
+7,1
+d,0
+8,1
+48,0
+7,1
+c,0
+9,1
+48,0
+7,1
+c,0
+8,1
+49,0
+7,1
+b,0
+8,1
+4a,0
+7,1
+a,0
+9,1
+4a,0
+7,1
+a,0
+8,1
+4b,0
+7,1
+9,0
+8,1
+4c,0
+7,1
+8,0
+9,1
+4c,0
+7,1
+8,0
+8,1
+4d,0
+7,1
+7,0
+8,1
+4e,0
+7,1
+6,0
+9,1
+4e,0
+7,1
+6,0
+8,1
+4f,0
+7,1
+5,0
+8,1
+50,0
+7,1
+4,0
+9,1
+50,0
+7,1
+4,0
+8,1
+51,0
+7,1
+3,0
+8,1
+52,0
+7,1
+2,0
+9,1
+52,0
+7,1
+2,0
+8,1
+53,0
+7,1
+0
+8,1
+54,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+c,1
+58,0
+b,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5b,0
+8,1
+5c,0
+8,1
+5f,0
+4,1
+1108,0
+100 90 32
+22,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+f11,0
+100 90 32
+16,0
+4,1
+2a,0
+4,1
+30,0
+7,1
+29,0
+6,1
+2e,0
+7,1
+28,0
+8,1
+2d,0
+7,1
+28,0
+8,1
+2d,0
+8,1
+26,0
+8,1
+2f,0
+7,1
+25,0
+9,1
+2f,0
+8,1
+24,0
+8,1
+31,0
+7,1
+23,0
+8,1
+32,0
+7,1
+23,0
+8,1
+32,0
+8,1
+21,0
+8,1
+34,0
+7,1
+20,0
+9,1
+34,0
+8,1
+1f,0
+8,1
+36,0
+7,1
+1e,0
+8,1
+37,0
+7,1
+1e,0
+8,1
+37,0
+8,1
+1c,0
+8,1
+39,0
+7,1
+1b,0
+9,1
+39,0
+8,1
+1a,0
+8,1
+3b,0
+7,1
+19,0
+8,1
+3c,0
+7,1
+19,0
+8,1
+3c,0
+8,1
+17,0
+8,1
+3e,0
+7,1
+16,0
+9,1
+3e,0
+8,1
+15,0
+8,1
+40,0
+7,1
+14,0
+8,1
+41,0
+7,1
+14,0
+8,1
+41,0
+8,1
+12,0
+8,1
+43,0
+7,1
+11,0
+9,1
+43,0
+8,1
+10,0
+8,1
+45,0
+7,1
+f,0
+8,1
+46,0
+7,1
+f,0
+8,1
+46,0
+8,1
+d,0
+8,1
+48,0
+7,1
+c,0
+9,1
+48,0
+8,1
+b,0
+8,1
+4a,0
+7,1
+a,0
+8,1
+4b,0
+7,1
+a,0
+8,1
+4b,0
+8,1
+8,0
+8,1
+4d,0
+7,1
+7,0
+9,1
+4d,0
+8,1
+6,0
+8,1
+4f,0
+7,1
+5,0
+8,1
+50,0
+7,1
+5,0
+8,1
+50,0
+8,1
+3,0
+8,1
+52,0
+7,1
+2,0
+9,1
+52,0
+8,1
+0
+8,1
+54,0
+f,1
+55,0
+f,1
+55,0
+e,1
+57,0
+d,1
+57,0
+c,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5c,0
+8,1
+5c,0
+7,1
+f0e,0
+100 90 32
+28,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+f,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+b87,0
+100 90 32
+59,0
+b,1
+57,0
+d,1
+54,0
+10,1
+52,0
+12,1
+4f,0
+15,1
+4d,0
+17,1
+4a,0
+1a,1
+48,0
+1b,1
+46,0
+1b,1
+47,0
+1a,1
+47,0
+1a,1
+48,0
+19,1
+48,0
+19,1
+49,0
+18,1
+49,0
+18,1
+4a,0
+17,1
+4a,0
+17,1
+4b,0
+16,1
+4f,0
+12,1
+52,0
+f,1
+55,0
+c,1
+59,0
+8,1
+5c,0
+5,1
+5f,0
+2,1
+19f9,0
+100 90 32
+61,0
+3,1
+60,0
+4,1
+5f,0
+5,1
+5e,0
+6,1
+5d,0
+7,1
+5c,0
+8,1
+5b,0
+9,1
+5a,0
+a,1
+59,0
+b,1
+58,0
+c,1
+57,0
+d,1
+56,0
+e,1
+55,0
+f,1
+54,0
+10,1
+53,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+a,1
+5b,0
+8,1
+5d,0
+6,1
+5f,0
+4,1
+61,0
+2,1
+ea1,0
+100 90 32
+33,0
+6,1
+5b,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+b7e,0
+100 90 32
+37,0
+4,1
+5d,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+b7b,0
+100 90 32
+37,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+e98,0
+100 90 32
+14,0
+4,1
+d,0
+3,1
+4d,0
+7,1
+d,0
+7,1
+49,0
+7,1
+d,0
+7,1
+49,0
+8,1
+b,0
+8,1
+4a,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+7,1
+b,0
+7,1
+4b,0
+8,1
+9,0
+8,1
+4c,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+7,1
+9,0
+7,1
+4d,0
+8,1
+7,0
+8,1
+4e,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+7,1
+7,0
+7,1
+4f,0
+8,1
+5,0
+8,1
+50,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+7,1
+5,0
+7,1
+51,0
+8,1
+3,0
+8,1
+52,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+f,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+b96,0
+100 90 32
+d,0
+5,1
+32,0
+5,1
+27,0
+6,1
+30,0
+8,1
+25,0
+8,1
+2e,0
+a,1
+24,0
+9,1
+2c,0
+b,1
+25,0
+8,1
+2a,0
+c,1
+27,0
+8,1
+28,0
+c,1
+28,0
+9,1
+26,0
+b,1
+2b,0
+8,1
+24,0
+c,1
+2d,0
+8,1
+22,0
+c,1
+2e,0
+9,1
+20,0
+b,1
+31,0
+8,1
+1e,0
+c,1
+33,0
+8,1
+1c,0
+c,1
+34,0
+9,1
+1a,0
+b,1
+37,0
+8,1
+18,0
+c,1
+39,0
+8,1
+16,0
+c,1
+3a,0
+9,1
+14,0
+b,1
+3d,0
+8,1
+12,0
+c,1
+3f,0
+8,1
+10,0
+c,1
+40,0
+9,1
+e,0
+b,1
+43,0
+8,1
+c,0
+c,1
+45,0
+8,1
+a,0
+c,1
+46,0
+9,1
+8,0
+b,1
+49,0
+8,1
+6,0
+c,1
+4b,0
+8,1
+4,0
+c,1
+4c,0
+9,1
+2,0
+b,1
+4f,0
+14,1
+51,0
+12,1
+52,0
+10,1
+55,0
+e,1
+57,0
+c,1
+58,0
+a,1
+5b,0
+8,1
+5d,0
+6,1
+1683,0
+100 90 32
+21,0
+7,1
+16,0
+4,1
+43,0
+7,1
+16,0
+6,1
+41,0
+7,1
+15,0
+8,1
+40,0
+7,1
+14,0
+9,1
+40,0
+7,1
+14,0
+8,1
+41,0
+7,1
+13,0
+8,1
+42,0
+7,1
+12,0
+9,1
+42,0
+7,1
+12,0
+8,1
+43,0
+7,1
+11,0
+8,1
+44,0
+7,1
+10,0
+9,1
+44,0
+7,1
+10,0
+8,1
+45,0
+7,1
+f,0
+8,1
+46,0
+7,1
+e,0
+9,1
+46,0
+7,1
+e,0
+8,1
+47,0
+7,1
+d,0
+8,1
+48,0
+7,1
+c,0
+9,1
+48,0
+7,1
+c,0
+8,1
+49,0
+7,1
+b,0
+8,1
+4a,0
+7,1
+a,0
+9,1
+4a,0
+7,1
+a,0
+8,1
+4b,0
+7,1
+9,0
+8,1
+4c,0
+7,1
+8,0
+9,1
+4c,0
+7,1
+8,0
+8,1
+4d,0
+7,1
+7,0
+8,1
+4e,0
+7,1
+6,0
+9,1
+4e,0
+7,1
+6,0
+8,1
+4f,0
+7,1
+5,0
+8,1
+50,0
+7,1
+4,0
+9,1
+50,0
+7,1
+4,0
+8,1
+51,0
+7,1
+3,0
+8,1
+52,0
+7,1
+2,0
+9,1
+52,0
+7,1
+2,0
+8,1
+53,0
+7,1
+0
+8,1
+54,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+c,1
+58,0
+b,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5b,0
+8,1
+5c,0
+8,1
+5f,0
+4,1
+1108,0
+100 90 32
+22,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+f11,0
+100 90 32
+16,0
+4,1
+2a,0
+4,1
+30,0
+7,1
+29,0
+6,1
+2e,0
+7,1
+28,0
+8,1
+2d,0
+7,1
+28,0
+8,1
+2d,0
+8,1
+26,0
+8,1
+2f,0
+7,1
+25,0
+9,1
+2f,0
+8,1
+24,0
+8,1
+31,0
+7,1
+23,0
+8,1
+32,0
+7,1
+23,0
+8,1
+32,0
+8,1
+21,0
+8,1
+34,0
+7,1
+20,0
+9,1
+34,0
+8,1
+1f,0
+8,1
+36,0
+7,1
+1e,0
+8,1
+37,0
+7,1
+1e,0
+8,1
+37,0
+8,1
+1c,0
+8,1
+39,0
+7,1
+1b,0
+9,1
+39,0
+8,1
+1a,0
+8,1
+3b,0
+7,1
+19,0
+8,1
+3c,0
+7,1
+19,0
+8,1
+3c,0
+8,1
+17,0
+8,1
+3e,0
+7,1
+16,0
+9,1
+3e,0
+8,1
+15,0
+8,1
+40,0
+7,1
+14,0
+8,1
+41,0
+7,1
+14,0
+8,1
+41,0
+8,1
+12,0
+8,1
+43,0
+7,1
+11,0
+9,1
+43,0
+8,1
+10,0
+8,1
+45,0
+7,1
+f,0
+8,1
+46,0
+7,1
+f,0
+8,1
+46,0
+8,1
+d,0
+8,1
+48,0
+7,1
+c,0
+9,1
+48,0
+8,1
+b,0
+8,1
+4a,0
+7,1
+a,0
+8,1
+4b,0
+7,1
+a,0
+8,1
+4b,0
+8,1
+8,0
+8,1
+4d,0
+7,1
+7,0
+9,1
+4d,0
+8,1
+6,0
+8,1
+4f,0
+7,1
+5,0
+8,1
+50,0
+7,1
+5,0
+8,1
+50,0
+8,1
+3,0
+8,1
+52,0
+7,1
+2,0
+9,1
+52,0
+8,1
+0
+8,1
+54,0
+f,1
+55,0
+f,1
+55,0
+e,1
+57,0
+d,1
+57,0
+c,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5c,0
+8,1
+5c,0
+7,1
+f0e,0
+100 90 32
+28,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+8,1
+0
+8,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+f,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+b87,0
+100 90 32
+59,0
+b,1
+57,0
+d,1
+54,0
+10,1
+52,0
+12,1
+4f,0
+15,1
+4d,0
+17,1
+4a,0
+1a,1
+48,0
+1b,1
+46,0
+1b,1
+47,0
+1a,1
+47,0
+1a,1
+48,0
+19,1
+48,0
+19,1
+49,0
+18,1
+49,0
+18,1
+4a,0
+17,1
+4a,0
+17,1
+4b,0
+16,1
+4f,0
+12,1
+52,0
+f,1
+55,0
+c,1
+59,0
+8,1
+5c,0
+5,1
+5f,0
+2,1
+19f9,0
+100 90 32
+61,0
+3,1
+60,0
+4,1
+5f,0
+5,1
+5e,0
+6,1
+5d,0
+7,1
+5c,0
+8,1
+5b,0
+9,1
+5a,0
+a,1
+59,0
+b,1
+58,0
+c,1
+57,0
+d,1
+56,0
+e,1
+55,0
+f,1
+54,0
+10,1
+53,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+11,1
+52,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+10,1
+53,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+f,1
+54,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+e,1
+55,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+d,1
+56,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+c,1
+57,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+b,1
+58,0
+a,1
+5b,0
+8,1
+5d,0
+6,1
+5f,0
+4,1
+61,0
+2,1
+ea1,0
+100 90 32
+33,0
+6,1
+5b,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+b7e,0
+100 90 32
+37,0
+4,1
+5d,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+b7b,0
+100 90 32
+37,0
+4,1
+3,0
+3,1
+57,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+53,0
+7,1
+3,0
+7,1
+54,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+55,0
+7,1
+0
+7,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5b,0
+9,1
+5c,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+e98,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a87.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a87.dat
new file mode 100644
index 000000000..abac82cbf
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a87.dat
@@ -0,0 +1,109 @@
+! $XConsortium$
+100 90 32
+1fe,0
+1
+63,0
+2,1
+65,0
+2,1
+c5,0
+1
+63,0
+1
+5,0
+2,1
+c1,0
+1
+8,0
+1
+5a,0
+1
+a,0
+1
+64,0
+2,1
+57,0
+1
+c,0
+2,1
+55,0
+1
+d,0
+2,1
+55,0
+1
+f,0
+1
+53,0
+1
+76,0
+1
+64,0
+2,1
+4f,0
+1
+14,0
+2,1
+b2,0
+1
+16,0
+2,1
+b0,0
+1
+19,0
+2,1
+48,0
+1
+80,0
+1
+47,0
+1
+83,0
+1
+43,0
+2,1
+86,0
+1
+39,0
+3,1
+28,0
+2,1
+34,0
+2,1
+2e,0
+1
+65,0
+1
+2d,0
+1
+36,0
+2,1
+c9,0
+2,1
+ca,0
+1
+64,0
+2,1
+5e,0
+3,1
+5a,0
+5,1
+5c,0
+3,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+4,1
+5b,0
+3,1
+5c,0
+5,1
+5a,0
+1
+3,0
+1
+5c,0
+1
+f8b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a89.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a89.dat
new file mode 100644
index 000000000..a21ba8224
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a89.dat
@@ -0,0 +1,5171 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+1fe,0
+1
+63,0
+3,1
+62,0
+1
+0
+2,1
+60,0
+1
+3,0
+2,1
+5f,0
+1
+3,0
+2,1
+5e,0
+1
+5,0
+2,1
+5c,0
+1
+7,0
+2,1
+5b,0
+1
+8,0
+1
+5a,0
+1
+9,0
+2,1
+59,0
+1
+a,0
+2,1
+57,0
+1
+c,0
+2,1
+55,0
+1
+d,0
+2,1
+55,0
+1
+e,0
+2,1
+53,0
+1
+10,0
+2,1
+52,0
+1
+11,0
+1
+51,0
+1
+12,0
+2,1
+4f,0
+1
+14,0
+2,1
+4e,0
+1
+15,0
+2,1
+4c,0
+1
+16,0
+2,1
+4c,0
+1
+17,0
+2,1
+4a,0
+1
+19,0
+2,1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+2,1
+46,0
+1
+1d,0
+2,1
+45,0
+1
+1e,0
+2,1
+42,0
+2,1
+1f,0
+2,1
+3e,0
+3,1
+23,0
+2,1
+39,0
+3,1
+28,0
+2,1
+34,0
+3,1
+2d,0
+1
+30,0
+3,1
+31,0
+2,1
+2c,0
+2,1
+36,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+62,0
+3,1
+5c,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5c,0
+3,1
+f89,0
+100 90 32
+1fe,0
+2
+63,0
+3,2
+62,0
+2
+0
+2,2
+60,0
+2
+3,0
+2,2
+5f,0
+2
+3,0
+2,2
+5e,0
+2
+5,0
+2,2
+5c,0
+2
+7,0
+2,2
+5b,0
+2
+8,0
+2
+5a,0
+2
+9,0
+2,2
+59,0
+2
+a,0
+2,2
+57,0
+2
+c,0
+2,2
+55,0
+2
+d,0
+2,2
+55,0
+2
+e,0
+2,2
+53,0
+2
+10,0
+2,2
+52,0
+2
+11,0
+2
+51,0
+2
+12,0
+2,2
+4f,0
+2
+14,0
+2,2
+4e,0
+2
+15,0
+2,2
+4c,0
+2
+16,0
+2,2
+4c,0
+2
+17,0
+2,2
+4a,0
+2
+19,0
+2,2
+48,0
+2
+1b,0
+2
+48,0
+2
+1b,0
+2,2
+46,0
+2
+1d,0
+2,2
+45,0
+2
+1e,0
+2,2
+42,0
+2,2
+1f,0
+2,2
+3e,0
+3,2
+23,0
+2,2
+39,0
+3,2
+28,0
+2,2
+34,0
+3,2
+2d,0
+2
+30,0
+3,2
+31,0
+2,2
+2c,0
+2,2
+36,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+64,0
+2,2
+62,0
+3,2
+5c,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5c,0
+3,2
+f89,0
+100 90 32
+1fe,0
+3
+63,0
+3,3
+62,0
+3
+0
+2,3
+60,0
+3
+3,0
+2,3
+5f,0
+3
+3,0
+2,3
+5e,0
+3
+5,0
+2,3
+5c,0
+3
+7,0
+2,3
+5b,0
+3
+8,0
+3
+5a,0
+3
+9,0
+2,3
+59,0
+3
+a,0
+2,3
+57,0
+3
+c,0
+2,3
+55,0
+3
+d,0
+2,3
+55,0
+3
+e,0
+2,3
+53,0
+3
+10,0
+2,3
+52,0
+3
+11,0
+3
+51,0
+3
+12,0
+2,3
+4f,0
+3
+14,0
+2,3
+4e,0
+3
+15,0
+2,3
+4c,0
+3
+16,0
+2,3
+4c,0
+3
+17,0
+2,3
+4a,0
+3
+19,0
+2,3
+48,0
+3
+1b,0
+3
+48,0
+3
+1b,0
+2,3
+46,0
+3
+1d,0
+2,3
+45,0
+3
+1e,0
+2,3
+42,0
+2,3
+1f,0
+2,3
+3e,0
+3,3
+23,0
+2,3
+39,0
+3,3
+28,0
+2,3
+34,0
+3,3
+2d,0
+3
+30,0
+3,3
+31,0
+2,3
+2c,0
+2,3
+36,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+64,0
+2,3
+62,0
+3,3
+5c,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5c,0
+3,3
+f89,0
+100 90 32
+1fe,0
+4
+63,0
+3,4
+62,0
+4
+0
+2,4
+60,0
+4
+3,0
+2,4
+5f,0
+4
+3,0
+2,4
+5e,0
+4
+5,0
+2,4
+5c,0
+4
+7,0
+2,4
+5b,0
+4
+8,0
+4
+5a,0
+4
+9,0
+2,4
+59,0
+4
+a,0
+2,4
+57,0
+4
+c,0
+2,4
+55,0
+4
+d,0
+2,4
+55,0
+4
+e,0
+2,4
+53,0
+4
+10,0
+2,4
+52,0
+4
+11,0
+4
+51,0
+4
+12,0
+2,4
+4f,0
+4
+14,0
+2,4
+4e,0
+4
+15,0
+2,4
+4c,0
+4
+16,0
+2,4
+4c,0
+4
+17,0
+2,4
+4a,0
+4
+19,0
+2,4
+48,0
+4
+1b,0
+4
+48,0
+4
+1b,0
+2,4
+46,0
+4
+1d,0
+2,4
+45,0
+4
+1e,0
+2,4
+42,0
+2,4
+1f,0
+2,4
+3e,0
+3,4
+23,0
+2,4
+39,0
+3,4
+28,0
+2,4
+34,0
+3,4
+2d,0
+4
+30,0
+3,4
+31,0
+2,4
+2c,0
+2,4
+36,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+64,0
+2,4
+62,0
+3,4
+5c,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5c,0
+3,4
+f89,0
+100 90 32
+1fe,0
+6
+63,0
+3,6
+62,0
+6
+0
+2,6
+60,0
+6
+3,0
+2,6
+5f,0
+6
+3,0
+2,6
+5e,0
+6
+5,0
+2,6
+5c,0
+6
+7,0
+2,6
+5b,0
+6
+8,0
+6
+5a,0
+6
+9,0
+2,6
+59,0
+6
+a,0
+2,6
+57,0
+6
+c,0
+2,6
+55,0
+6
+d,0
+2,6
+55,0
+6
+e,0
+2,6
+53,0
+6
+10,0
+2,6
+52,0
+6
+11,0
+6
+51,0
+6
+12,0
+2,6
+4f,0
+6
+14,0
+2,6
+4e,0
+6
+15,0
+2,6
+4c,0
+6
+16,0
+2,6
+4c,0
+6
+17,0
+2,6
+4a,0
+6
+19,0
+2,6
+48,0
+6
+1b,0
+6
+48,0
+6
+1b,0
+2,6
+46,0
+6
+1d,0
+2,6
+45,0
+6
+1e,0
+2,6
+42,0
+2,6
+1f,0
+2,6
+3e,0
+3,6
+23,0
+2,6
+39,0
+3,6
+28,0
+2,6
+34,0
+3,6
+2d,0
+6
+30,0
+3,6
+31,0
+2,6
+2c,0
+2,6
+36,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+64,0
+2,6
+62,0
+3,6
+5c,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5c,0
+3,6
+f89,0
+100 90 32
+1fe,0
+7
+63,0
+3,7
+62,0
+7
+0
+2,7
+60,0
+7
+3,0
+2,7
+5f,0
+7
+3,0
+2,7
+5e,0
+7
+5,0
+2,7
+5c,0
+7
+7,0
+2,7
+5b,0
+7
+8,0
+7
+5a,0
+7
+9,0
+2,7
+59,0
+7
+a,0
+2,7
+57,0
+7
+c,0
+2,7
+55,0
+7
+d,0
+2,7
+55,0
+7
+e,0
+2,7
+53,0
+7
+10,0
+2,7
+52,0
+7
+11,0
+7
+51,0
+7
+12,0
+2,7
+4f,0
+7
+14,0
+2,7
+4e,0
+7
+15,0
+2,7
+4c,0
+7
+16,0
+2,7
+4c,0
+7
+17,0
+2,7
+4a,0
+7
+19,0
+2,7
+48,0
+7
+1b,0
+7
+48,0
+7
+1b,0
+2,7
+46,0
+7
+1d,0
+2,7
+45,0
+7
+1e,0
+2,7
+42,0
+2,7
+1f,0
+2,7
+3e,0
+3,7
+23,0
+2,7
+39,0
+3,7
+28,0
+2,7
+34,0
+3,7
+2d,0
+7
+30,0
+3,7
+31,0
+2,7
+2c,0
+2,7
+36,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+64,0
+2,7
+62,0
+3,7
+5c,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5c,0
+3,7
+f89,0
+100 90 32
+1fe,0
+10
+63,0
+3,10
+62,0
+10
+0
+2,10
+60,0
+10
+3,0
+2,10
+5f,0
+10
+3,0
+2,10
+5e,0
+10
+5,0
+2,10
+5c,0
+10
+7,0
+2,10
+5b,0
+10
+8,0
+10
+5a,0
+10
+9,0
+2,10
+59,0
+10
+a,0
+2,10
+57,0
+10
+c,0
+2,10
+55,0
+10
+d,0
+2,10
+55,0
+10
+e,0
+2,10
+53,0
+10
+10,0
+2,10
+52,0
+10
+11,0
+10
+51,0
+10
+12,0
+2,10
+4f,0
+10
+14,0
+2,10
+4e,0
+10
+15,0
+2,10
+4c,0
+10
+16,0
+2,10
+4c,0
+10
+17,0
+2,10
+4a,0
+10
+19,0
+2,10
+48,0
+10
+1b,0
+10
+48,0
+10
+1b,0
+2,10
+46,0
+10
+1d,0
+2,10
+45,0
+10
+1e,0
+2,10
+42,0
+2,10
+1f,0
+2,10
+3e,0
+3,10
+23,0
+2,10
+39,0
+3,10
+28,0
+2,10
+34,0
+3,10
+2d,0
+10
+30,0
+3,10
+31,0
+2,10
+2c,0
+2,10
+36,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+64,0
+2,10
+62,0
+3,10
+5c,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5c,0
+3,10
+f89,0
+100 90 32
+1fe,0
+33
+63,0
+3,33
+62,0
+33
+0
+2,33
+60,0
+33
+3,0
+2,33
+5f,0
+33
+3,0
+2,33
+5e,0
+33
+5,0
+2,33
+5c,0
+33
+7,0
+2,33
+5b,0
+33
+8,0
+33
+5a,0
+33
+9,0
+2,33
+59,0
+33
+a,0
+2,33
+57,0
+33
+c,0
+2,33
+55,0
+33
+d,0
+2,33
+55,0
+33
+e,0
+2,33
+53,0
+33
+10,0
+2,33
+52,0
+33
+11,0
+33
+51,0
+33
+12,0
+2,33
+4f,0
+33
+14,0
+2,33
+4e,0
+33
+15,0
+2,33
+4c,0
+33
+16,0
+2,33
+4c,0
+33
+17,0
+2,33
+4a,0
+33
+19,0
+2,33
+48,0
+33
+1b,0
+33
+48,0
+33
+1b,0
+2,33
+46,0
+33
+1d,0
+2,33
+45,0
+33
+1e,0
+2,33
+42,0
+2,33
+1f,0
+2,33
+3e,0
+3,33
+23,0
+2,33
+39,0
+3,33
+28,0
+2,33
+34,0
+3,33
+2d,0
+33
+30,0
+3,33
+31,0
+2,33
+2c,0
+2,33
+36,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+64,0
+2,33
+62,0
+3,33
+5c,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5c,0
+3,33
+f89,0
+100 90 32
+1fe,0
+81
+63,0
+3,81
+62,0
+81
+0
+2,81
+60,0
+81
+3,0
+2,81
+5f,0
+81
+3,0
+2,81
+5e,0
+81
+5,0
+2,81
+5c,0
+81
+7,0
+2,81
+5b,0
+81
+8,0
+81
+5a,0
+81
+9,0
+2,81
+59,0
+81
+a,0
+2,81
+57,0
+81
+c,0
+2,81
+55,0
+81
+d,0
+2,81
+55,0
+81
+e,0
+2,81
+53,0
+81
+10,0
+2,81
+52,0
+81
+11,0
+81
+51,0
+81
+12,0
+2,81
+4f,0
+81
+14,0
+2,81
+4e,0
+81
+15,0
+2,81
+4c,0
+81
+16,0
+2,81
+4c,0
+81
+17,0
+2,81
+4a,0
+81
+19,0
+2,81
+48,0
+81
+1b,0
+81
+48,0
+81
+1b,0
+2,81
+46,0
+81
+1d,0
+2,81
+45,0
+81
+1e,0
+2,81
+42,0
+2,81
+1f,0
+2,81
+3e,0
+3,81
+23,0
+2,81
+39,0
+3,81
+28,0
+2,81
+34,0
+3,81
+2d,0
+81
+30,0
+3,81
+31,0
+2,81
+2c,0
+2,81
+36,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+64,0
+2,81
+62,0
+3,81
+5c,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5c,0
+3,81
+f89,0
+100 90 32
+1fe,0
+a3
+63,0
+3,a3
+62,0
+a3
+0
+2,a3
+60,0
+a3
+3,0
+2,a3
+5f,0
+a3
+3,0
+2,a3
+5e,0
+a3
+5,0
+2,a3
+5c,0
+a3
+7,0
+2,a3
+5b,0
+a3
+8,0
+a3
+5a,0
+a3
+9,0
+2,a3
+59,0
+a3
+a,0
+2,a3
+57,0
+a3
+c,0
+2,a3
+55,0
+a3
+d,0
+2,a3
+55,0
+a3
+e,0
+2,a3
+53,0
+a3
+10,0
+2,a3
+52,0
+a3
+11,0
+a3
+51,0
+a3
+12,0
+2,a3
+4f,0
+a3
+14,0
+2,a3
+4e,0
+a3
+15,0
+2,a3
+4c,0
+a3
+16,0
+2,a3
+4c,0
+a3
+17,0
+2,a3
+4a,0
+a3
+19,0
+2,a3
+48,0
+a3
+1b,0
+a3
+48,0
+a3
+1b,0
+2,a3
+46,0
+a3
+1d,0
+2,a3
+45,0
+a3
+1e,0
+2,a3
+42,0
+2,a3
+1f,0
+2,a3
+3e,0
+3,a3
+23,0
+2,a3
+39,0
+3,a3
+28,0
+2,a3
+34,0
+3,a3
+2d,0
+a3
+30,0
+3,a3
+31,0
+2,a3
+2c,0
+2,a3
+36,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+64,0
+2,a3
+62,0
+3,a3
+5c,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5c,0
+3,a3
+f89,0
+100 90 32
+1fe,0
+ff
+63,0
+3,ff
+62,0
+ff
+0
+2,ff
+60,0
+ff
+3,0
+2,ff
+5f,0
+ff
+3,0
+2,ff
+5e,0
+ff
+5,0
+2,ff
+5c,0
+ff
+7,0
+2,ff
+5b,0
+ff
+8,0
+ff
+5a,0
+ff
+9,0
+2,ff
+59,0
+ff
+a,0
+2,ff
+57,0
+ff
+c,0
+2,ff
+55,0
+ff
+d,0
+2,ff
+55,0
+ff
+e,0
+2,ff
+53,0
+ff
+10,0
+2,ff
+52,0
+ff
+11,0
+ff
+51,0
+ff
+12,0
+2,ff
+4f,0
+ff
+14,0
+2,ff
+4e,0
+ff
+15,0
+2,ff
+4c,0
+ff
+16,0
+2,ff
+4c,0
+ff
+17,0
+2,ff
+4a,0
+ff
+19,0
+2,ff
+48,0
+ff
+1b,0
+ff
+48,0
+ff
+1b,0
+2,ff
+46,0
+ff
+1d,0
+2,ff
+45,0
+ff
+1e,0
+2,ff
+42,0
+2,ff
+1f,0
+2,ff
+3e,0
+3,ff
+23,0
+2,ff
+39,0
+3,ff
+28,0
+2,ff
+34,0
+3,ff
+2d,0
+ff
+30,0
+3,ff
+31,0
+2,ff
+2c,0
+2,ff
+36,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+64,0
+2,ff
+62,0
+3,ff
+5c,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5c,0
+3,ff
+f89,0
+100 90 32
+1fe,0
+100
+63,0
+3,100
+62,0
+100
+0
+2,100
+60,0
+100
+3,0
+2,100
+5f,0
+100
+3,0
+2,100
+5e,0
+100
+5,0
+2,100
+5c,0
+100
+7,0
+2,100
+5b,0
+100
+8,0
+100
+5a,0
+100
+9,0
+2,100
+59,0
+100
+a,0
+2,100
+57,0
+100
+c,0
+2,100
+55,0
+100
+d,0
+2,100
+55,0
+100
+e,0
+2,100
+53,0
+100
+10,0
+2,100
+52,0
+100
+11,0
+100
+51,0
+100
+12,0
+2,100
+4f,0
+100
+14,0
+2,100
+4e,0
+100
+15,0
+2,100
+4c,0
+100
+16,0
+2,100
+4c,0
+100
+17,0
+2,100
+4a,0
+100
+19,0
+2,100
+48,0
+100
+1b,0
+100
+48,0
+100
+1b,0
+2,100
+46,0
+100
+1d,0
+2,100
+45,0
+100
+1e,0
+2,100
+42,0
+2,100
+1f,0
+2,100
+3e,0
+3,100
+23,0
+2,100
+39,0
+3,100
+28,0
+2,100
+34,0
+3,100
+2d,0
+100
+30,0
+3,100
+31,0
+2,100
+2c,0
+2,100
+36,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+64,0
+2,100
+62,0
+3,100
+5c,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5c,0
+3,100
+f89,0
+100 90 32
+1fe,0
+12c
+63,0
+3,12c
+62,0
+12c
+0
+2,12c
+60,0
+12c
+3,0
+2,12c
+5f,0
+12c
+3,0
+2,12c
+5e,0
+12c
+5,0
+2,12c
+5c,0
+12c
+7,0
+2,12c
+5b,0
+12c
+8,0
+12c
+5a,0
+12c
+9,0
+2,12c
+59,0
+12c
+a,0
+2,12c
+57,0
+12c
+c,0
+2,12c
+55,0
+12c
+d,0
+2,12c
+55,0
+12c
+e,0
+2,12c
+53,0
+12c
+10,0
+2,12c
+52,0
+12c
+11,0
+12c
+51,0
+12c
+12,0
+2,12c
+4f,0
+12c
+14,0
+2,12c
+4e,0
+12c
+15,0
+2,12c
+4c,0
+12c
+16,0
+2,12c
+4c,0
+12c
+17,0
+2,12c
+4a,0
+12c
+19,0
+2,12c
+48,0
+12c
+1b,0
+12c
+48,0
+12c
+1b,0
+2,12c
+46,0
+12c
+1d,0
+2,12c
+45,0
+12c
+1e,0
+2,12c
+42,0
+2,12c
+1f,0
+2,12c
+3e,0
+3,12c
+23,0
+2,12c
+39,0
+3,12c
+28,0
+2,12c
+34,0
+3,12c
+2d,0
+12c
+30,0
+3,12c
+31,0
+2,12c
+2c,0
+2,12c
+36,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+64,0
+2,12c
+62,0
+3,12c
+5c,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5c,0
+3,12c
+f89,0
+100 90 32
+1fe,0
+3e8
+63,0
+3,3e8
+62,0
+3e8
+0
+2,3e8
+60,0
+3e8
+3,0
+2,3e8
+5f,0
+3e8
+3,0
+2,3e8
+5e,0
+3e8
+5,0
+2,3e8
+5c,0
+3e8
+7,0
+2,3e8
+5b,0
+3e8
+8,0
+3e8
+5a,0
+3e8
+9,0
+2,3e8
+59,0
+3e8
+a,0
+2,3e8
+57,0
+3e8
+c,0
+2,3e8
+55,0
+3e8
+d,0
+2,3e8
+55,0
+3e8
+e,0
+2,3e8
+53,0
+3e8
+10,0
+2,3e8
+52,0
+3e8
+11,0
+3e8
+51,0
+3e8
+12,0
+2,3e8
+4f,0
+3e8
+14,0
+2,3e8
+4e,0
+3e8
+15,0
+2,3e8
+4c,0
+3e8
+16,0
+2,3e8
+4c,0
+3e8
+17,0
+2,3e8
+4a,0
+3e8
+19,0
+2,3e8
+48,0
+3e8
+1b,0
+3e8
+48,0
+3e8
+1b,0
+2,3e8
+46,0
+3e8
+1d,0
+2,3e8
+45,0
+3e8
+1e,0
+2,3e8
+42,0
+2,3e8
+1f,0
+2,3e8
+3e,0
+3,3e8
+23,0
+2,3e8
+39,0
+3,3e8
+28,0
+2,3e8
+34,0
+3,3e8
+2d,0
+3e8
+30,0
+3,3e8
+31,0
+2,3e8
+2c,0
+2,3e8
+36,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+64,0
+2,3e8
+62,0
+3,3e8
+5c,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5c,0
+3,3e8
+f89,0
+100 90 32
+1fe,0
+111111
+63,0
+3,111111
+62,0
+111111
+0
+2,111111
+60,0
+111111
+3,0
+2,111111
+5f,0
+111111
+3,0
+2,111111
+5e,0
+111111
+5,0
+2,111111
+5c,0
+111111
+7,0
+2,111111
+5b,0
+111111
+8,0
+111111
+5a,0
+111111
+9,0
+2,111111
+59,0
+111111
+a,0
+2,111111
+57,0
+111111
+c,0
+2,111111
+55,0
+111111
+d,0
+2,111111
+55,0
+111111
+e,0
+2,111111
+53,0
+111111
+10,0
+2,111111
+52,0
+111111
+11,0
+111111
+51,0
+111111
+12,0
+2,111111
+4f,0
+111111
+14,0
+2,111111
+4e,0
+111111
+15,0
+2,111111
+4c,0
+111111
+16,0
+2,111111
+4c,0
+111111
+17,0
+2,111111
+4a,0
+111111
+19,0
+2,111111
+48,0
+111111
+1b,0
+111111
+48,0
+111111
+1b,0
+2,111111
+46,0
+111111
+1d,0
+2,111111
+45,0
+111111
+1e,0
+2,111111
+42,0
+2,111111
+1f,0
+2,111111
+3e,0
+3,111111
+23,0
+2,111111
+39,0
+3,111111
+28,0
+2,111111
+34,0
+3,111111
+2d,0
+111111
+30,0
+3,111111
+31,0
+2,111111
+2c,0
+2,111111
+36,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+64,0
+2,111111
+62,0
+3,111111
+5c,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5c,0
+3,111111
+f89,0
+100 90 32
+1fe,0
+400200
+63,0
+3,400200
+62,0
+400200
+0
+2,400200
+60,0
+400200
+3,0
+2,400200
+5f,0
+400200
+3,0
+2,400200
+5e,0
+400200
+5,0
+2,400200
+5c,0
+400200
+7,0
+2,400200
+5b,0
+400200
+8,0
+400200
+5a,0
+400200
+9,0
+2,400200
+59,0
+400200
+a,0
+2,400200
+57,0
+400200
+c,0
+2,400200
+55,0
+400200
+d,0
+2,400200
+55,0
+400200
+e,0
+2,400200
+53,0
+400200
+10,0
+2,400200
+52,0
+400200
+11,0
+400200
+51,0
+400200
+12,0
+2,400200
+4f,0
+400200
+14,0
+2,400200
+4e,0
+400200
+15,0
+2,400200
+4c,0
+400200
+16,0
+2,400200
+4c,0
+400200
+17,0
+2,400200
+4a,0
+400200
+19,0
+2,400200
+48,0
+400200
+1b,0
+400200
+48,0
+400200
+1b,0
+2,400200
+46,0
+400200
+1d,0
+2,400200
+45,0
+400200
+1e,0
+2,400200
+42,0
+2,400200
+1f,0
+2,400200
+3e,0
+3,400200
+23,0
+2,400200
+39,0
+3,400200
+28,0
+2,400200
+34,0
+3,400200
+2d,0
+400200
+30,0
+3,400200
+31,0
+2,400200
+2c,0
+2,400200
+36,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+64,0
+2,400200
+62,0
+3,400200
+5c,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5c,0
+3,400200
+f89,0
+100 90 32
+1fe,0
+777777
+63,0
+3,777777
+62,0
+777777
+0
+2,777777
+60,0
+777777
+3,0
+2,777777
+5f,0
+777777
+3,0
+2,777777
+5e,0
+777777
+5,0
+2,777777
+5c,0
+777777
+7,0
+2,777777
+5b,0
+777777
+8,0
+777777
+5a,0
+777777
+9,0
+2,777777
+59,0
+777777
+a,0
+2,777777
+57,0
+777777
+c,0
+2,777777
+55,0
+777777
+d,0
+2,777777
+55,0
+777777
+e,0
+2,777777
+53,0
+777777
+10,0
+2,777777
+52,0
+777777
+11,0
+777777
+51,0
+777777
+12,0
+2,777777
+4f,0
+777777
+14,0
+2,777777
+4e,0
+777777
+15,0
+2,777777
+4c,0
+777777
+16,0
+2,777777
+4c,0
+777777
+17,0
+2,777777
+4a,0
+777777
+19,0
+2,777777
+48,0
+777777
+1b,0
+777777
+48,0
+777777
+1b,0
+2,777777
+46,0
+777777
+1d,0
+2,777777
+45,0
+777777
+1e,0
+2,777777
+42,0
+2,777777
+1f,0
+2,777777
+3e,0
+3,777777
+23,0
+2,777777
+39,0
+3,777777
+28,0
+2,777777
+34,0
+3,777777
+2d,0
+777777
+30,0
+3,777777
+31,0
+2,777777
+2c,0
+2,777777
+36,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+64,0
+2,777777
+62,0
+3,777777
+5c,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5c,0
+3,777777
+f89,0
+100 90 32
+1fe,0
+1
+63,0
+3,1
+62,0
+1
+0
+2,1
+60,0
+1
+3,0
+2,1
+5f,0
+1
+3,0
+2,1
+5e,0
+1
+5,0
+2,1
+5c,0
+1
+7,0
+2,1
+5b,0
+1
+8,0
+1
+5a,0
+1
+9,0
+2,1
+59,0
+1
+a,0
+2,1
+57,0
+1
+c,0
+2,1
+55,0
+1
+d,0
+2,1
+55,0
+1
+e,0
+2,1
+53,0
+1
+10,0
+2,1
+52,0
+1
+11,0
+1
+51,0
+1
+12,0
+2,1
+4f,0
+1
+14,0
+2,1
+4e,0
+1
+15,0
+2,1
+4c,0
+1
+16,0
+2,1
+4c,0
+1
+17,0
+2,1
+4a,0
+1
+19,0
+2,1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+2,1
+46,0
+1
+1d,0
+2,1
+45,0
+1
+1e,0
+2,1
+42,0
+2,1
+1f,0
+2,1
+3e,0
+3,1
+23,0
+2,1
+39,0
+3,1
+28,0
+2,1
+34,0
+3,1
+2d,0
+1
+30,0
+3,1
+31,0
+2,1
+2c,0
+2,1
+36,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+62,0
+3,1
+5c,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5c,0
+3,1
+f89,0
+100 90 32
+1fe,0
+2
+63,0
+3,2
+62,0
+2
+0
+2,2
+60,0
+2
+3,0
+2,2
+5f,0
+2
+3,0
+2,2
+5e,0
+2
+5,0
+2,2
+5c,0
+2
+7,0
+2,2
+5b,0
+2
+8,0
+2
+5a,0
+2
+9,0
+2,2
+59,0
+2
+a,0
+2,2
+57,0
+2
+c,0
+2,2
+55,0
+2
+d,0
+2,2
+55,0
+2
+e,0
+2,2
+53,0
+2
+10,0
+2,2
+52,0
+2
+11,0
+2
+51,0
+2
+12,0
+2,2
+4f,0
+2
+14,0
+2,2
+4e,0
+2
+15,0
+2,2
+4c,0
+2
+16,0
+2,2
+4c,0
+2
+17,0
+2,2
+4a,0
+2
+19,0
+2,2
+48,0
+2
+1b,0
+2
+48,0
+2
+1b,0
+2,2
+46,0
+2
+1d,0
+2,2
+45,0
+2
+1e,0
+2,2
+42,0
+2,2
+1f,0
+2,2
+3e,0
+3,2
+23,0
+2,2
+39,0
+3,2
+28,0
+2,2
+34,0
+3,2
+2d,0
+2
+30,0
+3,2
+31,0
+2,2
+2c,0
+2,2
+36,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+64,0
+2,2
+62,0
+3,2
+5c,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5c,0
+3,2
+f89,0
+100 90 32
+1fe,0
+3
+63,0
+3,3
+62,0
+3
+0
+2,3
+60,0
+3
+3,0
+2,3
+5f,0
+3
+3,0
+2,3
+5e,0
+3
+5,0
+2,3
+5c,0
+3
+7,0
+2,3
+5b,0
+3
+8,0
+3
+5a,0
+3
+9,0
+2,3
+59,0
+3
+a,0
+2,3
+57,0
+3
+c,0
+2,3
+55,0
+3
+d,0
+2,3
+55,0
+3
+e,0
+2,3
+53,0
+3
+10,0
+2,3
+52,0
+3
+11,0
+3
+51,0
+3
+12,0
+2,3
+4f,0
+3
+14,0
+2,3
+4e,0
+3
+15,0
+2,3
+4c,0
+3
+16,0
+2,3
+4c,0
+3
+17,0
+2,3
+4a,0
+3
+19,0
+2,3
+48,0
+3
+1b,0
+3
+48,0
+3
+1b,0
+2,3
+46,0
+3
+1d,0
+2,3
+45,0
+3
+1e,0
+2,3
+42,0
+2,3
+1f,0
+2,3
+3e,0
+3,3
+23,0
+2,3
+39,0
+3,3
+28,0
+2,3
+34,0
+3,3
+2d,0
+3
+30,0
+3,3
+31,0
+2,3
+2c,0
+2,3
+36,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+64,0
+2,3
+62,0
+3,3
+5c,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5c,0
+3,3
+f89,0
+100 90 32
+1fe,0
+4
+63,0
+3,4
+62,0
+4
+0
+2,4
+60,0
+4
+3,0
+2,4
+5f,0
+4
+3,0
+2,4
+5e,0
+4
+5,0
+2,4
+5c,0
+4
+7,0
+2,4
+5b,0
+4
+8,0
+4
+5a,0
+4
+9,0
+2,4
+59,0
+4
+a,0
+2,4
+57,0
+4
+c,0
+2,4
+55,0
+4
+d,0
+2,4
+55,0
+4
+e,0
+2,4
+53,0
+4
+10,0
+2,4
+52,0
+4
+11,0
+4
+51,0
+4
+12,0
+2,4
+4f,0
+4
+14,0
+2,4
+4e,0
+4
+15,0
+2,4
+4c,0
+4
+16,0
+2,4
+4c,0
+4
+17,0
+2,4
+4a,0
+4
+19,0
+2,4
+48,0
+4
+1b,0
+4
+48,0
+4
+1b,0
+2,4
+46,0
+4
+1d,0
+2,4
+45,0
+4
+1e,0
+2,4
+42,0
+2,4
+1f,0
+2,4
+3e,0
+3,4
+23,0
+2,4
+39,0
+3,4
+28,0
+2,4
+34,0
+3,4
+2d,0
+4
+30,0
+3,4
+31,0
+2,4
+2c,0
+2,4
+36,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+64,0
+2,4
+62,0
+3,4
+5c,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5c,0
+3,4
+f89,0
+100 90 32
+1fe,0
+6
+63,0
+3,6
+62,0
+6
+0
+2,6
+60,0
+6
+3,0
+2,6
+5f,0
+6
+3,0
+2,6
+5e,0
+6
+5,0
+2,6
+5c,0
+6
+7,0
+2,6
+5b,0
+6
+8,0
+6
+5a,0
+6
+9,0
+2,6
+59,0
+6
+a,0
+2,6
+57,0
+6
+c,0
+2,6
+55,0
+6
+d,0
+2,6
+55,0
+6
+e,0
+2,6
+53,0
+6
+10,0
+2,6
+52,0
+6
+11,0
+6
+51,0
+6
+12,0
+2,6
+4f,0
+6
+14,0
+2,6
+4e,0
+6
+15,0
+2,6
+4c,0
+6
+16,0
+2,6
+4c,0
+6
+17,0
+2,6
+4a,0
+6
+19,0
+2,6
+48,0
+6
+1b,0
+6
+48,0
+6
+1b,0
+2,6
+46,0
+6
+1d,0
+2,6
+45,0
+6
+1e,0
+2,6
+42,0
+2,6
+1f,0
+2,6
+3e,0
+3,6
+23,0
+2,6
+39,0
+3,6
+28,0
+2,6
+34,0
+3,6
+2d,0
+6
+30,0
+3,6
+31,0
+2,6
+2c,0
+2,6
+36,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+64,0
+2,6
+62,0
+3,6
+5c,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5c,0
+3,6
+f89,0
+100 90 32
+1fe,0
+7
+63,0
+3,7
+62,0
+7
+0
+2,7
+60,0
+7
+3,0
+2,7
+5f,0
+7
+3,0
+2,7
+5e,0
+7
+5,0
+2,7
+5c,0
+7
+7,0
+2,7
+5b,0
+7
+8,0
+7
+5a,0
+7
+9,0
+2,7
+59,0
+7
+a,0
+2,7
+57,0
+7
+c,0
+2,7
+55,0
+7
+d,0
+2,7
+55,0
+7
+e,0
+2,7
+53,0
+7
+10,0
+2,7
+52,0
+7
+11,0
+7
+51,0
+7
+12,0
+2,7
+4f,0
+7
+14,0
+2,7
+4e,0
+7
+15,0
+2,7
+4c,0
+7
+16,0
+2,7
+4c,0
+7
+17,0
+2,7
+4a,0
+7
+19,0
+2,7
+48,0
+7
+1b,0
+7
+48,0
+7
+1b,0
+2,7
+46,0
+7
+1d,0
+2,7
+45,0
+7
+1e,0
+2,7
+42,0
+2,7
+1f,0
+2,7
+3e,0
+3,7
+23,0
+2,7
+39,0
+3,7
+28,0
+2,7
+34,0
+3,7
+2d,0
+7
+30,0
+3,7
+31,0
+2,7
+2c,0
+2,7
+36,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+64,0
+2,7
+62,0
+3,7
+5c,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5c,0
+3,7
+f89,0
+100 90 32
+1fe,0
+10
+63,0
+3,10
+62,0
+10
+0
+2,10
+60,0
+10
+3,0
+2,10
+5f,0
+10
+3,0
+2,10
+5e,0
+10
+5,0
+2,10
+5c,0
+10
+7,0
+2,10
+5b,0
+10
+8,0
+10
+5a,0
+10
+9,0
+2,10
+59,0
+10
+a,0
+2,10
+57,0
+10
+c,0
+2,10
+55,0
+10
+d,0
+2,10
+55,0
+10
+e,0
+2,10
+53,0
+10
+10,0
+2,10
+52,0
+10
+11,0
+10
+51,0
+10
+12,0
+2,10
+4f,0
+10
+14,0
+2,10
+4e,0
+10
+15,0
+2,10
+4c,0
+10
+16,0
+2,10
+4c,0
+10
+17,0
+2,10
+4a,0
+10
+19,0
+2,10
+48,0
+10
+1b,0
+10
+48,0
+10
+1b,0
+2,10
+46,0
+10
+1d,0
+2,10
+45,0
+10
+1e,0
+2,10
+42,0
+2,10
+1f,0
+2,10
+3e,0
+3,10
+23,0
+2,10
+39,0
+3,10
+28,0
+2,10
+34,0
+3,10
+2d,0
+10
+30,0
+3,10
+31,0
+2,10
+2c,0
+2,10
+36,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+64,0
+2,10
+62,0
+3,10
+5c,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5c,0
+3,10
+f89,0
+100 90 32
+1fe,0
+33
+63,0
+3,33
+62,0
+33
+0
+2,33
+60,0
+33
+3,0
+2,33
+5f,0
+33
+3,0
+2,33
+5e,0
+33
+5,0
+2,33
+5c,0
+33
+7,0
+2,33
+5b,0
+33
+8,0
+33
+5a,0
+33
+9,0
+2,33
+59,0
+33
+a,0
+2,33
+57,0
+33
+c,0
+2,33
+55,0
+33
+d,0
+2,33
+55,0
+33
+e,0
+2,33
+53,0
+33
+10,0
+2,33
+52,0
+33
+11,0
+33
+51,0
+33
+12,0
+2,33
+4f,0
+33
+14,0
+2,33
+4e,0
+33
+15,0
+2,33
+4c,0
+33
+16,0
+2,33
+4c,0
+33
+17,0
+2,33
+4a,0
+33
+19,0
+2,33
+48,0
+33
+1b,0
+33
+48,0
+33
+1b,0
+2,33
+46,0
+33
+1d,0
+2,33
+45,0
+33
+1e,0
+2,33
+42,0
+2,33
+1f,0
+2,33
+3e,0
+3,33
+23,0
+2,33
+39,0
+3,33
+28,0
+2,33
+34,0
+3,33
+2d,0
+33
+30,0
+3,33
+31,0
+2,33
+2c,0
+2,33
+36,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+64,0
+2,33
+62,0
+3,33
+5c,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5c,0
+3,33
+f89,0
+100 90 32
+1fe,0
+81
+63,0
+3,81
+62,0
+81
+0
+2,81
+60,0
+81
+3,0
+2,81
+5f,0
+81
+3,0
+2,81
+5e,0
+81
+5,0
+2,81
+5c,0
+81
+7,0
+2,81
+5b,0
+81
+8,0
+81
+5a,0
+81
+9,0
+2,81
+59,0
+81
+a,0
+2,81
+57,0
+81
+c,0
+2,81
+55,0
+81
+d,0
+2,81
+55,0
+81
+e,0
+2,81
+53,0
+81
+10,0
+2,81
+52,0
+81
+11,0
+81
+51,0
+81
+12,0
+2,81
+4f,0
+81
+14,0
+2,81
+4e,0
+81
+15,0
+2,81
+4c,0
+81
+16,0
+2,81
+4c,0
+81
+17,0
+2,81
+4a,0
+81
+19,0
+2,81
+48,0
+81
+1b,0
+81
+48,0
+81
+1b,0
+2,81
+46,0
+81
+1d,0
+2,81
+45,0
+81
+1e,0
+2,81
+42,0
+2,81
+1f,0
+2,81
+3e,0
+3,81
+23,0
+2,81
+39,0
+3,81
+28,0
+2,81
+34,0
+3,81
+2d,0
+81
+30,0
+3,81
+31,0
+2,81
+2c,0
+2,81
+36,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+64,0
+2,81
+62,0
+3,81
+5c,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5c,0
+3,81
+f89,0
+100 90 32
+1fe,0
+a3
+63,0
+3,a3
+62,0
+a3
+0
+2,a3
+60,0
+a3
+3,0
+2,a3
+5f,0
+a3
+3,0
+2,a3
+5e,0
+a3
+5,0
+2,a3
+5c,0
+a3
+7,0
+2,a3
+5b,0
+a3
+8,0
+a3
+5a,0
+a3
+9,0
+2,a3
+59,0
+a3
+a,0
+2,a3
+57,0
+a3
+c,0
+2,a3
+55,0
+a3
+d,0
+2,a3
+55,0
+a3
+e,0
+2,a3
+53,0
+a3
+10,0
+2,a3
+52,0
+a3
+11,0
+a3
+51,0
+a3
+12,0
+2,a3
+4f,0
+a3
+14,0
+2,a3
+4e,0
+a3
+15,0
+2,a3
+4c,0
+a3
+16,0
+2,a3
+4c,0
+a3
+17,0
+2,a3
+4a,0
+a3
+19,0
+2,a3
+48,0
+a3
+1b,0
+a3
+48,0
+a3
+1b,0
+2,a3
+46,0
+a3
+1d,0
+2,a3
+45,0
+a3
+1e,0
+2,a3
+42,0
+2,a3
+1f,0
+2,a3
+3e,0
+3,a3
+23,0
+2,a3
+39,0
+3,a3
+28,0
+2,a3
+34,0
+3,a3
+2d,0
+a3
+30,0
+3,a3
+31,0
+2,a3
+2c,0
+2,a3
+36,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+64,0
+2,a3
+62,0
+3,a3
+5c,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5c,0
+3,a3
+f89,0
+100 90 32
+1fe,0
+ff
+63,0
+3,ff
+62,0
+ff
+0
+2,ff
+60,0
+ff
+3,0
+2,ff
+5f,0
+ff
+3,0
+2,ff
+5e,0
+ff
+5,0
+2,ff
+5c,0
+ff
+7,0
+2,ff
+5b,0
+ff
+8,0
+ff
+5a,0
+ff
+9,0
+2,ff
+59,0
+ff
+a,0
+2,ff
+57,0
+ff
+c,0
+2,ff
+55,0
+ff
+d,0
+2,ff
+55,0
+ff
+e,0
+2,ff
+53,0
+ff
+10,0
+2,ff
+52,0
+ff
+11,0
+ff
+51,0
+ff
+12,0
+2,ff
+4f,0
+ff
+14,0
+2,ff
+4e,0
+ff
+15,0
+2,ff
+4c,0
+ff
+16,0
+2,ff
+4c,0
+ff
+17,0
+2,ff
+4a,0
+ff
+19,0
+2,ff
+48,0
+ff
+1b,0
+ff
+48,0
+ff
+1b,0
+2,ff
+46,0
+ff
+1d,0
+2,ff
+45,0
+ff
+1e,0
+2,ff
+42,0
+2,ff
+1f,0
+2,ff
+3e,0
+3,ff
+23,0
+2,ff
+39,0
+3,ff
+28,0
+2,ff
+34,0
+3,ff
+2d,0
+ff
+30,0
+3,ff
+31,0
+2,ff
+2c,0
+2,ff
+36,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+64,0
+2,ff
+62,0
+3,ff
+5c,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5c,0
+3,ff
+f89,0
+100 90 32
+1fe,0
+100
+63,0
+3,100
+62,0
+100
+0
+2,100
+60,0
+100
+3,0
+2,100
+5f,0
+100
+3,0
+2,100
+5e,0
+100
+5,0
+2,100
+5c,0
+100
+7,0
+2,100
+5b,0
+100
+8,0
+100
+5a,0
+100
+9,0
+2,100
+59,0
+100
+a,0
+2,100
+57,0
+100
+c,0
+2,100
+55,0
+100
+d,0
+2,100
+55,0
+100
+e,0
+2,100
+53,0
+100
+10,0
+2,100
+52,0
+100
+11,0
+100
+51,0
+100
+12,0
+2,100
+4f,0
+100
+14,0
+2,100
+4e,0
+100
+15,0
+2,100
+4c,0
+100
+16,0
+2,100
+4c,0
+100
+17,0
+2,100
+4a,0
+100
+19,0
+2,100
+48,0
+100
+1b,0
+100
+48,0
+100
+1b,0
+2,100
+46,0
+100
+1d,0
+2,100
+45,0
+100
+1e,0
+2,100
+42,0
+2,100
+1f,0
+2,100
+3e,0
+3,100
+23,0
+2,100
+39,0
+3,100
+28,0
+2,100
+34,0
+3,100
+2d,0
+100
+30,0
+3,100
+31,0
+2,100
+2c,0
+2,100
+36,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+64,0
+2,100
+62,0
+3,100
+5c,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5c,0
+3,100
+f89,0
+100 90 32
+1fe,0
+12c
+63,0
+3,12c
+62,0
+12c
+0
+2,12c
+60,0
+12c
+3,0
+2,12c
+5f,0
+12c
+3,0
+2,12c
+5e,0
+12c
+5,0
+2,12c
+5c,0
+12c
+7,0
+2,12c
+5b,0
+12c
+8,0
+12c
+5a,0
+12c
+9,0
+2,12c
+59,0
+12c
+a,0
+2,12c
+57,0
+12c
+c,0
+2,12c
+55,0
+12c
+d,0
+2,12c
+55,0
+12c
+e,0
+2,12c
+53,0
+12c
+10,0
+2,12c
+52,0
+12c
+11,0
+12c
+51,0
+12c
+12,0
+2,12c
+4f,0
+12c
+14,0
+2,12c
+4e,0
+12c
+15,0
+2,12c
+4c,0
+12c
+16,0
+2,12c
+4c,0
+12c
+17,0
+2,12c
+4a,0
+12c
+19,0
+2,12c
+48,0
+12c
+1b,0
+12c
+48,0
+12c
+1b,0
+2,12c
+46,0
+12c
+1d,0
+2,12c
+45,0
+12c
+1e,0
+2,12c
+42,0
+2,12c
+1f,0
+2,12c
+3e,0
+3,12c
+23,0
+2,12c
+39,0
+3,12c
+28,0
+2,12c
+34,0
+3,12c
+2d,0
+12c
+30,0
+3,12c
+31,0
+2,12c
+2c,0
+2,12c
+36,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+64,0
+2,12c
+62,0
+3,12c
+5c,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5c,0
+3,12c
+f89,0
+100 90 32
+1fe,0
+3e8
+63,0
+3,3e8
+62,0
+3e8
+0
+2,3e8
+60,0
+3e8
+3,0
+2,3e8
+5f,0
+3e8
+3,0
+2,3e8
+5e,0
+3e8
+5,0
+2,3e8
+5c,0
+3e8
+7,0
+2,3e8
+5b,0
+3e8
+8,0
+3e8
+5a,0
+3e8
+9,0
+2,3e8
+59,0
+3e8
+a,0
+2,3e8
+57,0
+3e8
+c,0
+2,3e8
+55,0
+3e8
+d,0
+2,3e8
+55,0
+3e8
+e,0
+2,3e8
+53,0
+3e8
+10,0
+2,3e8
+52,0
+3e8
+11,0
+3e8
+51,0
+3e8
+12,0
+2,3e8
+4f,0
+3e8
+14,0
+2,3e8
+4e,0
+3e8
+15,0
+2,3e8
+4c,0
+3e8
+16,0
+2,3e8
+4c,0
+3e8
+17,0
+2,3e8
+4a,0
+3e8
+19,0
+2,3e8
+48,0
+3e8
+1b,0
+3e8
+48,0
+3e8
+1b,0
+2,3e8
+46,0
+3e8
+1d,0
+2,3e8
+45,0
+3e8
+1e,0
+2,3e8
+42,0
+2,3e8
+1f,0
+2,3e8
+3e,0
+3,3e8
+23,0
+2,3e8
+39,0
+3,3e8
+28,0
+2,3e8
+34,0
+3,3e8
+2d,0
+3e8
+30,0
+3,3e8
+31,0
+2,3e8
+2c,0
+2,3e8
+36,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+64,0
+2,3e8
+62,0
+3,3e8
+5c,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5c,0
+3,3e8
+f89,0
+100 90 32
+1fe,0
+111111
+63,0
+3,111111
+62,0
+111111
+0
+2,111111
+60,0
+111111
+3,0
+2,111111
+5f,0
+111111
+3,0
+2,111111
+5e,0
+111111
+5,0
+2,111111
+5c,0
+111111
+7,0
+2,111111
+5b,0
+111111
+8,0
+111111
+5a,0
+111111
+9,0
+2,111111
+59,0
+111111
+a,0
+2,111111
+57,0
+111111
+c,0
+2,111111
+55,0
+111111
+d,0
+2,111111
+55,0
+111111
+e,0
+2,111111
+53,0
+111111
+10,0
+2,111111
+52,0
+111111
+11,0
+111111
+51,0
+111111
+12,0
+2,111111
+4f,0
+111111
+14,0
+2,111111
+4e,0
+111111
+15,0
+2,111111
+4c,0
+111111
+16,0
+2,111111
+4c,0
+111111
+17,0
+2,111111
+4a,0
+111111
+19,0
+2,111111
+48,0
+111111
+1b,0
+111111
+48,0
+111111
+1b,0
+2,111111
+46,0
+111111
+1d,0
+2,111111
+45,0
+111111
+1e,0
+2,111111
+42,0
+2,111111
+1f,0
+2,111111
+3e,0
+3,111111
+23,0
+2,111111
+39,0
+3,111111
+28,0
+2,111111
+34,0
+3,111111
+2d,0
+111111
+30,0
+3,111111
+31,0
+2,111111
+2c,0
+2,111111
+36,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+64,0
+2,111111
+62,0
+3,111111
+5c,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5c,0
+3,111111
+f89,0
+100 90 32
+1fe,0
+400200
+63,0
+3,400200
+62,0
+400200
+0
+2,400200
+60,0
+400200
+3,0
+2,400200
+5f,0
+400200
+3,0
+2,400200
+5e,0
+400200
+5,0
+2,400200
+5c,0
+400200
+7,0
+2,400200
+5b,0
+400200
+8,0
+400200
+5a,0
+400200
+9,0
+2,400200
+59,0
+400200
+a,0
+2,400200
+57,0
+400200
+c,0
+2,400200
+55,0
+400200
+d,0
+2,400200
+55,0
+400200
+e,0
+2,400200
+53,0
+400200
+10,0
+2,400200
+52,0
+400200
+11,0
+400200
+51,0
+400200
+12,0
+2,400200
+4f,0
+400200
+14,0
+2,400200
+4e,0
+400200
+15,0
+2,400200
+4c,0
+400200
+16,0
+2,400200
+4c,0
+400200
+17,0
+2,400200
+4a,0
+400200
+19,0
+2,400200
+48,0
+400200
+1b,0
+400200
+48,0
+400200
+1b,0
+2,400200
+46,0
+400200
+1d,0
+2,400200
+45,0
+400200
+1e,0
+2,400200
+42,0
+2,400200
+1f,0
+2,400200
+3e,0
+3,400200
+23,0
+2,400200
+39,0
+3,400200
+28,0
+2,400200
+34,0
+3,400200
+2d,0
+400200
+30,0
+3,400200
+31,0
+2,400200
+2c,0
+2,400200
+36,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+64,0
+2,400200
+62,0
+3,400200
+5c,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5c,0
+3,400200
+f89,0
+100 90 32
+1fe,0
+777777
+63,0
+3,777777
+62,0
+777777
+0
+2,777777
+60,0
+777777
+3,0
+2,777777
+5f,0
+777777
+3,0
+2,777777
+5e,0
+777777
+5,0
+2,777777
+5c,0
+777777
+7,0
+2,777777
+5b,0
+777777
+8,0
+777777
+5a,0
+777777
+9,0
+2,777777
+59,0
+777777
+a,0
+2,777777
+57,0
+777777
+c,0
+2,777777
+55,0
+777777
+d,0
+2,777777
+55,0
+777777
+e,0
+2,777777
+53,0
+777777
+10,0
+2,777777
+52,0
+777777
+11,0
+777777
+51,0
+777777
+12,0
+2,777777
+4f,0
+777777
+14,0
+2,777777
+4e,0
+777777
+15,0
+2,777777
+4c,0
+777777
+16,0
+2,777777
+4c,0
+777777
+17,0
+2,777777
+4a,0
+777777
+19,0
+2,777777
+48,0
+777777
+1b,0
+777777
+48,0
+777777
+1b,0
+2,777777
+46,0
+777777
+1d,0
+2,777777
+45,0
+777777
+1e,0
+2,777777
+42,0
+2,777777
+1f,0
+2,777777
+3e,0
+3,777777
+23,0
+2,777777
+39,0
+3,777777
+28,0
+2,777777
+34,0
+3,777777
+2d,0
+777777
+30,0
+3,777777
+31,0
+2,777777
+2c,0
+2,777777
+36,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+64,0
+2,777777
+62,0
+3,777777
+5c,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5c,0
+3,777777
+f89,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a9.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a9.dat
new file mode 100644
index 000000000..4bfed1140
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a9.dat
@@ -0,0 +1,113 @@
+! $XConsortium$
+100 90 32
+db1,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+64,0
+1
+63,0
+1
+64,0
+1
+64,0
+1
+63,0
+1
+64,0
+2,1
+63,0
+3,1
+63,0
+3,1
+63,0
+3,1
+63,0
+3,1
+63,0
+3,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+3,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+3,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+3,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+3,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+1e,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a91.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a91.dat
new file mode 100644
index 000000000..a21ba8224
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a91.dat
@@ -0,0 +1,5171 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+1fe,0
+1
+63,0
+3,1
+62,0
+1
+0
+2,1
+60,0
+1
+3,0
+2,1
+5f,0
+1
+3,0
+2,1
+5e,0
+1
+5,0
+2,1
+5c,0
+1
+7,0
+2,1
+5b,0
+1
+8,0
+1
+5a,0
+1
+9,0
+2,1
+59,0
+1
+a,0
+2,1
+57,0
+1
+c,0
+2,1
+55,0
+1
+d,0
+2,1
+55,0
+1
+e,0
+2,1
+53,0
+1
+10,0
+2,1
+52,0
+1
+11,0
+1
+51,0
+1
+12,0
+2,1
+4f,0
+1
+14,0
+2,1
+4e,0
+1
+15,0
+2,1
+4c,0
+1
+16,0
+2,1
+4c,0
+1
+17,0
+2,1
+4a,0
+1
+19,0
+2,1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+2,1
+46,0
+1
+1d,0
+2,1
+45,0
+1
+1e,0
+2,1
+42,0
+2,1
+1f,0
+2,1
+3e,0
+3,1
+23,0
+2,1
+39,0
+3,1
+28,0
+2,1
+34,0
+3,1
+2d,0
+1
+30,0
+3,1
+31,0
+2,1
+2c,0
+2,1
+36,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+62,0
+3,1
+5c,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5c,0
+3,1
+f89,0
+100 90 32
+1fe,0
+2
+63,0
+3,2
+62,0
+2
+0
+2,2
+60,0
+2
+3,0
+2,2
+5f,0
+2
+3,0
+2,2
+5e,0
+2
+5,0
+2,2
+5c,0
+2
+7,0
+2,2
+5b,0
+2
+8,0
+2
+5a,0
+2
+9,0
+2,2
+59,0
+2
+a,0
+2,2
+57,0
+2
+c,0
+2,2
+55,0
+2
+d,0
+2,2
+55,0
+2
+e,0
+2,2
+53,0
+2
+10,0
+2,2
+52,0
+2
+11,0
+2
+51,0
+2
+12,0
+2,2
+4f,0
+2
+14,0
+2,2
+4e,0
+2
+15,0
+2,2
+4c,0
+2
+16,0
+2,2
+4c,0
+2
+17,0
+2,2
+4a,0
+2
+19,0
+2,2
+48,0
+2
+1b,0
+2
+48,0
+2
+1b,0
+2,2
+46,0
+2
+1d,0
+2,2
+45,0
+2
+1e,0
+2,2
+42,0
+2,2
+1f,0
+2,2
+3e,0
+3,2
+23,0
+2,2
+39,0
+3,2
+28,0
+2,2
+34,0
+3,2
+2d,0
+2
+30,0
+3,2
+31,0
+2,2
+2c,0
+2,2
+36,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+64,0
+2,2
+62,0
+3,2
+5c,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5c,0
+3,2
+f89,0
+100 90 32
+1fe,0
+3
+63,0
+3,3
+62,0
+3
+0
+2,3
+60,0
+3
+3,0
+2,3
+5f,0
+3
+3,0
+2,3
+5e,0
+3
+5,0
+2,3
+5c,0
+3
+7,0
+2,3
+5b,0
+3
+8,0
+3
+5a,0
+3
+9,0
+2,3
+59,0
+3
+a,0
+2,3
+57,0
+3
+c,0
+2,3
+55,0
+3
+d,0
+2,3
+55,0
+3
+e,0
+2,3
+53,0
+3
+10,0
+2,3
+52,0
+3
+11,0
+3
+51,0
+3
+12,0
+2,3
+4f,0
+3
+14,0
+2,3
+4e,0
+3
+15,0
+2,3
+4c,0
+3
+16,0
+2,3
+4c,0
+3
+17,0
+2,3
+4a,0
+3
+19,0
+2,3
+48,0
+3
+1b,0
+3
+48,0
+3
+1b,0
+2,3
+46,0
+3
+1d,0
+2,3
+45,0
+3
+1e,0
+2,3
+42,0
+2,3
+1f,0
+2,3
+3e,0
+3,3
+23,0
+2,3
+39,0
+3,3
+28,0
+2,3
+34,0
+3,3
+2d,0
+3
+30,0
+3,3
+31,0
+2,3
+2c,0
+2,3
+36,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+64,0
+2,3
+62,0
+3,3
+5c,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5c,0
+3,3
+f89,0
+100 90 32
+1fe,0
+4
+63,0
+3,4
+62,0
+4
+0
+2,4
+60,0
+4
+3,0
+2,4
+5f,0
+4
+3,0
+2,4
+5e,0
+4
+5,0
+2,4
+5c,0
+4
+7,0
+2,4
+5b,0
+4
+8,0
+4
+5a,0
+4
+9,0
+2,4
+59,0
+4
+a,0
+2,4
+57,0
+4
+c,0
+2,4
+55,0
+4
+d,0
+2,4
+55,0
+4
+e,0
+2,4
+53,0
+4
+10,0
+2,4
+52,0
+4
+11,0
+4
+51,0
+4
+12,0
+2,4
+4f,0
+4
+14,0
+2,4
+4e,0
+4
+15,0
+2,4
+4c,0
+4
+16,0
+2,4
+4c,0
+4
+17,0
+2,4
+4a,0
+4
+19,0
+2,4
+48,0
+4
+1b,0
+4
+48,0
+4
+1b,0
+2,4
+46,0
+4
+1d,0
+2,4
+45,0
+4
+1e,0
+2,4
+42,0
+2,4
+1f,0
+2,4
+3e,0
+3,4
+23,0
+2,4
+39,0
+3,4
+28,0
+2,4
+34,0
+3,4
+2d,0
+4
+30,0
+3,4
+31,0
+2,4
+2c,0
+2,4
+36,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+64,0
+2,4
+62,0
+3,4
+5c,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5c,0
+3,4
+f89,0
+100 90 32
+1fe,0
+6
+63,0
+3,6
+62,0
+6
+0
+2,6
+60,0
+6
+3,0
+2,6
+5f,0
+6
+3,0
+2,6
+5e,0
+6
+5,0
+2,6
+5c,0
+6
+7,0
+2,6
+5b,0
+6
+8,0
+6
+5a,0
+6
+9,0
+2,6
+59,0
+6
+a,0
+2,6
+57,0
+6
+c,0
+2,6
+55,0
+6
+d,0
+2,6
+55,0
+6
+e,0
+2,6
+53,0
+6
+10,0
+2,6
+52,0
+6
+11,0
+6
+51,0
+6
+12,0
+2,6
+4f,0
+6
+14,0
+2,6
+4e,0
+6
+15,0
+2,6
+4c,0
+6
+16,0
+2,6
+4c,0
+6
+17,0
+2,6
+4a,0
+6
+19,0
+2,6
+48,0
+6
+1b,0
+6
+48,0
+6
+1b,0
+2,6
+46,0
+6
+1d,0
+2,6
+45,0
+6
+1e,0
+2,6
+42,0
+2,6
+1f,0
+2,6
+3e,0
+3,6
+23,0
+2,6
+39,0
+3,6
+28,0
+2,6
+34,0
+3,6
+2d,0
+6
+30,0
+3,6
+31,0
+2,6
+2c,0
+2,6
+36,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+64,0
+2,6
+62,0
+3,6
+5c,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5c,0
+3,6
+f89,0
+100 90 32
+1fe,0
+7
+63,0
+3,7
+62,0
+7
+0
+2,7
+60,0
+7
+3,0
+2,7
+5f,0
+7
+3,0
+2,7
+5e,0
+7
+5,0
+2,7
+5c,0
+7
+7,0
+2,7
+5b,0
+7
+8,0
+7
+5a,0
+7
+9,0
+2,7
+59,0
+7
+a,0
+2,7
+57,0
+7
+c,0
+2,7
+55,0
+7
+d,0
+2,7
+55,0
+7
+e,0
+2,7
+53,0
+7
+10,0
+2,7
+52,0
+7
+11,0
+7
+51,0
+7
+12,0
+2,7
+4f,0
+7
+14,0
+2,7
+4e,0
+7
+15,0
+2,7
+4c,0
+7
+16,0
+2,7
+4c,0
+7
+17,0
+2,7
+4a,0
+7
+19,0
+2,7
+48,0
+7
+1b,0
+7
+48,0
+7
+1b,0
+2,7
+46,0
+7
+1d,0
+2,7
+45,0
+7
+1e,0
+2,7
+42,0
+2,7
+1f,0
+2,7
+3e,0
+3,7
+23,0
+2,7
+39,0
+3,7
+28,0
+2,7
+34,0
+3,7
+2d,0
+7
+30,0
+3,7
+31,0
+2,7
+2c,0
+2,7
+36,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+64,0
+2,7
+62,0
+3,7
+5c,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5c,0
+3,7
+f89,0
+100 90 32
+1fe,0
+10
+63,0
+3,10
+62,0
+10
+0
+2,10
+60,0
+10
+3,0
+2,10
+5f,0
+10
+3,0
+2,10
+5e,0
+10
+5,0
+2,10
+5c,0
+10
+7,0
+2,10
+5b,0
+10
+8,0
+10
+5a,0
+10
+9,0
+2,10
+59,0
+10
+a,0
+2,10
+57,0
+10
+c,0
+2,10
+55,0
+10
+d,0
+2,10
+55,0
+10
+e,0
+2,10
+53,0
+10
+10,0
+2,10
+52,0
+10
+11,0
+10
+51,0
+10
+12,0
+2,10
+4f,0
+10
+14,0
+2,10
+4e,0
+10
+15,0
+2,10
+4c,0
+10
+16,0
+2,10
+4c,0
+10
+17,0
+2,10
+4a,0
+10
+19,0
+2,10
+48,0
+10
+1b,0
+10
+48,0
+10
+1b,0
+2,10
+46,0
+10
+1d,0
+2,10
+45,0
+10
+1e,0
+2,10
+42,0
+2,10
+1f,0
+2,10
+3e,0
+3,10
+23,0
+2,10
+39,0
+3,10
+28,0
+2,10
+34,0
+3,10
+2d,0
+10
+30,0
+3,10
+31,0
+2,10
+2c,0
+2,10
+36,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+64,0
+2,10
+62,0
+3,10
+5c,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5c,0
+3,10
+f89,0
+100 90 32
+1fe,0
+33
+63,0
+3,33
+62,0
+33
+0
+2,33
+60,0
+33
+3,0
+2,33
+5f,0
+33
+3,0
+2,33
+5e,0
+33
+5,0
+2,33
+5c,0
+33
+7,0
+2,33
+5b,0
+33
+8,0
+33
+5a,0
+33
+9,0
+2,33
+59,0
+33
+a,0
+2,33
+57,0
+33
+c,0
+2,33
+55,0
+33
+d,0
+2,33
+55,0
+33
+e,0
+2,33
+53,0
+33
+10,0
+2,33
+52,0
+33
+11,0
+33
+51,0
+33
+12,0
+2,33
+4f,0
+33
+14,0
+2,33
+4e,0
+33
+15,0
+2,33
+4c,0
+33
+16,0
+2,33
+4c,0
+33
+17,0
+2,33
+4a,0
+33
+19,0
+2,33
+48,0
+33
+1b,0
+33
+48,0
+33
+1b,0
+2,33
+46,0
+33
+1d,0
+2,33
+45,0
+33
+1e,0
+2,33
+42,0
+2,33
+1f,0
+2,33
+3e,0
+3,33
+23,0
+2,33
+39,0
+3,33
+28,0
+2,33
+34,0
+3,33
+2d,0
+33
+30,0
+3,33
+31,0
+2,33
+2c,0
+2,33
+36,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+64,0
+2,33
+62,0
+3,33
+5c,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5c,0
+3,33
+f89,0
+100 90 32
+1fe,0
+81
+63,0
+3,81
+62,0
+81
+0
+2,81
+60,0
+81
+3,0
+2,81
+5f,0
+81
+3,0
+2,81
+5e,0
+81
+5,0
+2,81
+5c,0
+81
+7,0
+2,81
+5b,0
+81
+8,0
+81
+5a,0
+81
+9,0
+2,81
+59,0
+81
+a,0
+2,81
+57,0
+81
+c,0
+2,81
+55,0
+81
+d,0
+2,81
+55,0
+81
+e,0
+2,81
+53,0
+81
+10,0
+2,81
+52,0
+81
+11,0
+81
+51,0
+81
+12,0
+2,81
+4f,0
+81
+14,0
+2,81
+4e,0
+81
+15,0
+2,81
+4c,0
+81
+16,0
+2,81
+4c,0
+81
+17,0
+2,81
+4a,0
+81
+19,0
+2,81
+48,0
+81
+1b,0
+81
+48,0
+81
+1b,0
+2,81
+46,0
+81
+1d,0
+2,81
+45,0
+81
+1e,0
+2,81
+42,0
+2,81
+1f,0
+2,81
+3e,0
+3,81
+23,0
+2,81
+39,0
+3,81
+28,0
+2,81
+34,0
+3,81
+2d,0
+81
+30,0
+3,81
+31,0
+2,81
+2c,0
+2,81
+36,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+64,0
+2,81
+62,0
+3,81
+5c,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5c,0
+3,81
+f89,0
+100 90 32
+1fe,0
+a3
+63,0
+3,a3
+62,0
+a3
+0
+2,a3
+60,0
+a3
+3,0
+2,a3
+5f,0
+a3
+3,0
+2,a3
+5e,0
+a3
+5,0
+2,a3
+5c,0
+a3
+7,0
+2,a3
+5b,0
+a3
+8,0
+a3
+5a,0
+a3
+9,0
+2,a3
+59,0
+a3
+a,0
+2,a3
+57,0
+a3
+c,0
+2,a3
+55,0
+a3
+d,0
+2,a3
+55,0
+a3
+e,0
+2,a3
+53,0
+a3
+10,0
+2,a3
+52,0
+a3
+11,0
+a3
+51,0
+a3
+12,0
+2,a3
+4f,0
+a3
+14,0
+2,a3
+4e,0
+a3
+15,0
+2,a3
+4c,0
+a3
+16,0
+2,a3
+4c,0
+a3
+17,0
+2,a3
+4a,0
+a3
+19,0
+2,a3
+48,0
+a3
+1b,0
+a3
+48,0
+a3
+1b,0
+2,a3
+46,0
+a3
+1d,0
+2,a3
+45,0
+a3
+1e,0
+2,a3
+42,0
+2,a3
+1f,0
+2,a3
+3e,0
+3,a3
+23,0
+2,a3
+39,0
+3,a3
+28,0
+2,a3
+34,0
+3,a3
+2d,0
+a3
+30,0
+3,a3
+31,0
+2,a3
+2c,0
+2,a3
+36,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+64,0
+2,a3
+62,0
+3,a3
+5c,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5c,0
+3,a3
+f89,0
+100 90 32
+1fe,0
+ff
+63,0
+3,ff
+62,0
+ff
+0
+2,ff
+60,0
+ff
+3,0
+2,ff
+5f,0
+ff
+3,0
+2,ff
+5e,0
+ff
+5,0
+2,ff
+5c,0
+ff
+7,0
+2,ff
+5b,0
+ff
+8,0
+ff
+5a,0
+ff
+9,0
+2,ff
+59,0
+ff
+a,0
+2,ff
+57,0
+ff
+c,0
+2,ff
+55,0
+ff
+d,0
+2,ff
+55,0
+ff
+e,0
+2,ff
+53,0
+ff
+10,0
+2,ff
+52,0
+ff
+11,0
+ff
+51,0
+ff
+12,0
+2,ff
+4f,0
+ff
+14,0
+2,ff
+4e,0
+ff
+15,0
+2,ff
+4c,0
+ff
+16,0
+2,ff
+4c,0
+ff
+17,0
+2,ff
+4a,0
+ff
+19,0
+2,ff
+48,0
+ff
+1b,0
+ff
+48,0
+ff
+1b,0
+2,ff
+46,0
+ff
+1d,0
+2,ff
+45,0
+ff
+1e,0
+2,ff
+42,0
+2,ff
+1f,0
+2,ff
+3e,0
+3,ff
+23,0
+2,ff
+39,0
+3,ff
+28,0
+2,ff
+34,0
+3,ff
+2d,0
+ff
+30,0
+3,ff
+31,0
+2,ff
+2c,0
+2,ff
+36,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+64,0
+2,ff
+62,0
+3,ff
+5c,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5c,0
+3,ff
+f89,0
+100 90 32
+1fe,0
+100
+63,0
+3,100
+62,0
+100
+0
+2,100
+60,0
+100
+3,0
+2,100
+5f,0
+100
+3,0
+2,100
+5e,0
+100
+5,0
+2,100
+5c,0
+100
+7,0
+2,100
+5b,0
+100
+8,0
+100
+5a,0
+100
+9,0
+2,100
+59,0
+100
+a,0
+2,100
+57,0
+100
+c,0
+2,100
+55,0
+100
+d,0
+2,100
+55,0
+100
+e,0
+2,100
+53,0
+100
+10,0
+2,100
+52,0
+100
+11,0
+100
+51,0
+100
+12,0
+2,100
+4f,0
+100
+14,0
+2,100
+4e,0
+100
+15,0
+2,100
+4c,0
+100
+16,0
+2,100
+4c,0
+100
+17,0
+2,100
+4a,0
+100
+19,0
+2,100
+48,0
+100
+1b,0
+100
+48,0
+100
+1b,0
+2,100
+46,0
+100
+1d,0
+2,100
+45,0
+100
+1e,0
+2,100
+42,0
+2,100
+1f,0
+2,100
+3e,0
+3,100
+23,0
+2,100
+39,0
+3,100
+28,0
+2,100
+34,0
+3,100
+2d,0
+100
+30,0
+3,100
+31,0
+2,100
+2c,0
+2,100
+36,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+64,0
+2,100
+62,0
+3,100
+5c,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5c,0
+3,100
+f89,0
+100 90 32
+1fe,0
+12c
+63,0
+3,12c
+62,0
+12c
+0
+2,12c
+60,0
+12c
+3,0
+2,12c
+5f,0
+12c
+3,0
+2,12c
+5e,0
+12c
+5,0
+2,12c
+5c,0
+12c
+7,0
+2,12c
+5b,0
+12c
+8,0
+12c
+5a,0
+12c
+9,0
+2,12c
+59,0
+12c
+a,0
+2,12c
+57,0
+12c
+c,0
+2,12c
+55,0
+12c
+d,0
+2,12c
+55,0
+12c
+e,0
+2,12c
+53,0
+12c
+10,0
+2,12c
+52,0
+12c
+11,0
+12c
+51,0
+12c
+12,0
+2,12c
+4f,0
+12c
+14,0
+2,12c
+4e,0
+12c
+15,0
+2,12c
+4c,0
+12c
+16,0
+2,12c
+4c,0
+12c
+17,0
+2,12c
+4a,0
+12c
+19,0
+2,12c
+48,0
+12c
+1b,0
+12c
+48,0
+12c
+1b,0
+2,12c
+46,0
+12c
+1d,0
+2,12c
+45,0
+12c
+1e,0
+2,12c
+42,0
+2,12c
+1f,0
+2,12c
+3e,0
+3,12c
+23,0
+2,12c
+39,0
+3,12c
+28,0
+2,12c
+34,0
+3,12c
+2d,0
+12c
+30,0
+3,12c
+31,0
+2,12c
+2c,0
+2,12c
+36,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+64,0
+2,12c
+62,0
+3,12c
+5c,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5c,0
+3,12c
+f89,0
+100 90 32
+1fe,0
+3e8
+63,0
+3,3e8
+62,0
+3e8
+0
+2,3e8
+60,0
+3e8
+3,0
+2,3e8
+5f,0
+3e8
+3,0
+2,3e8
+5e,0
+3e8
+5,0
+2,3e8
+5c,0
+3e8
+7,0
+2,3e8
+5b,0
+3e8
+8,0
+3e8
+5a,0
+3e8
+9,0
+2,3e8
+59,0
+3e8
+a,0
+2,3e8
+57,0
+3e8
+c,0
+2,3e8
+55,0
+3e8
+d,0
+2,3e8
+55,0
+3e8
+e,0
+2,3e8
+53,0
+3e8
+10,0
+2,3e8
+52,0
+3e8
+11,0
+3e8
+51,0
+3e8
+12,0
+2,3e8
+4f,0
+3e8
+14,0
+2,3e8
+4e,0
+3e8
+15,0
+2,3e8
+4c,0
+3e8
+16,0
+2,3e8
+4c,0
+3e8
+17,0
+2,3e8
+4a,0
+3e8
+19,0
+2,3e8
+48,0
+3e8
+1b,0
+3e8
+48,0
+3e8
+1b,0
+2,3e8
+46,0
+3e8
+1d,0
+2,3e8
+45,0
+3e8
+1e,0
+2,3e8
+42,0
+2,3e8
+1f,0
+2,3e8
+3e,0
+3,3e8
+23,0
+2,3e8
+39,0
+3,3e8
+28,0
+2,3e8
+34,0
+3,3e8
+2d,0
+3e8
+30,0
+3,3e8
+31,0
+2,3e8
+2c,0
+2,3e8
+36,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+64,0
+2,3e8
+62,0
+3,3e8
+5c,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5c,0
+3,3e8
+f89,0
+100 90 32
+1fe,0
+111111
+63,0
+3,111111
+62,0
+111111
+0
+2,111111
+60,0
+111111
+3,0
+2,111111
+5f,0
+111111
+3,0
+2,111111
+5e,0
+111111
+5,0
+2,111111
+5c,0
+111111
+7,0
+2,111111
+5b,0
+111111
+8,0
+111111
+5a,0
+111111
+9,0
+2,111111
+59,0
+111111
+a,0
+2,111111
+57,0
+111111
+c,0
+2,111111
+55,0
+111111
+d,0
+2,111111
+55,0
+111111
+e,0
+2,111111
+53,0
+111111
+10,0
+2,111111
+52,0
+111111
+11,0
+111111
+51,0
+111111
+12,0
+2,111111
+4f,0
+111111
+14,0
+2,111111
+4e,0
+111111
+15,0
+2,111111
+4c,0
+111111
+16,0
+2,111111
+4c,0
+111111
+17,0
+2,111111
+4a,0
+111111
+19,0
+2,111111
+48,0
+111111
+1b,0
+111111
+48,0
+111111
+1b,0
+2,111111
+46,0
+111111
+1d,0
+2,111111
+45,0
+111111
+1e,0
+2,111111
+42,0
+2,111111
+1f,0
+2,111111
+3e,0
+3,111111
+23,0
+2,111111
+39,0
+3,111111
+28,0
+2,111111
+34,0
+3,111111
+2d,0
+111111
+30,0
+3,111111
+31,0
+2,111111
+2c,0
+2,111111
+36,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+64,0
+2,111111
+62,0
+3,111111
+5c,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5c,0
+3,111111
+f89,0
+100 90 32
+1fe,0
+400200
+63,0
+3,400200
+62,0
+400200
+0
+2,400200
+60,0
+400200
+3,0
+2,400200
+5f,0
+400200
+3,0
+2,400200
+5e,0
+400200
+5,0
+2,400200
+5c,0
+400200
+7,0
+2,400200
+5b,0
+400200
+8,0
+400200
+5a,0
+400200
+9,0
+2,400200
+59,0
+400200
+a,0
+2,400200
+57,0
+400200
+c,0
+2,400200
+55,0
+400200
+d,0
+2,400200
+55,0
+400200
+e,0
+2,400200
+53,0
+400200
+10,0
+2,400200
+52,0
+400200
+11,0
+400200
+51,0
+400200
+12,0
+2,400200
+4f,0
+400200
+14,0
+2,400200
+4e,0
+400200
+15,0
+2,400200
+4c,0
+400200
+16,0
+2,400200
+4c,0
+400200
+17,0
+2,400200
+4a,0
+400200
+19,0
+2,400200
+48,0
+400200
+1b,0
+400200
+48,0
+400200
+1b,0
+2,400200
+46,0
+400200
+1d,0
+2,400200
+45,0
+400200
+1e,0
+2,400200
+42,0
+2,400200
+1f,0
+2,400200
+3e,0
+3,400200
+23,0
+2,400200
+39,0
+3,400200
+28,0
+2,400200
+34,0
+3,400200
+2d,0
+400200
+30,0
+3,400200
+31,0
+2,400200
+2c,0
+2,400200
+36,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+64,0
+2,400200
+62,0
+3,400200
+5c,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5c,0
+3,400200
+f89,0
+100 90 32
+1fe,0
+777777
+63,0
+3,777777
+62,0
+777777
+0
+2,777777
+60,0
+777777
+3,0
+2,777777
+5f,0
+777777
+3,0
+2,777777
+5e,0
+777777
+5,0
+2,777777
+5c,0
+777777
+7,0
+2,777777
+5b,0
+777777
+8,0
+777777
+5a,0
+777777
+9,0
+2,777777
+59,0
+777777
+a,0
+2,777777
+57,0
+777777
+c,0
+2,777777
+55,0
+777777
+d,0
+2,777777
+55,0
+777777
+e,0
+2,777777
+53,0
+777777
+10,0
+2,777777
+52,0
+777777
+11,0
+777777
+51,0
+777777
+12,0
+2,777777
+4f,0
+777777
+14,0
+2,777777
+4e,0
+777777
+15,0
+2,777777
+4c,0
+777777
+16,0
+2,777777
+4c,0
+777777
+17,0
+2,777777
+4a,0
+777777
+19,0
+2,777777
+48,0
+777777
+1b,0
+777777
+48,0
+777777
+1b,0
+2,777777
+46,0
+777777
+1d,0
+2,777777
+45,0
+777777
+1e,0
+2,777777
+42,0
+2,777777
+1f,0
+2,777777
+3e,0
+3,777777
+23,0
+2,777777
+39,0
+3,777777
+28,0
+2,777777
+34,0
+3,777777
+2d,0
+777777
+30,0
+3,777777
+31,0
+2,777777
+2c,0
+2,777777
+36,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+64,0
+2,777777
+62,0
+3,777777
+5c,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5c,0
+3,777777
+f89,0
+100 90 32
+1fe,0
+1
+63,0
+3,1
+62,0
+1
+0
+2,1
+60,0
+1
+3,0
+2,1
+5f,0
+1
+3,0
+2,1
+5e,0
+1
+5,0
+2,1
+5c,0
+1
+7,0
+2,1
+5b,0
+1
+8,0
+1
+5a,0
+1
+9,0
+2,1
+59,0
+1
+a,0
+2,1
+57,0
+1
+c,0
+2,1
+55,0
+1
+d,0
+2,1
+55,0
+1
+e,0
+2,1
+53,0
+1
+10,0
+2,1
+52,0
+1
+11,0
+1
+51,0
+1
+12,0
+2,1
+4f,0
+1
+14,0
+2,1
+4e,0
+1
+15,0
+2,1
+4c,0
+1
+16,0
+2,1
+4c,0
+1
+17,0
+2,1
+4a,0
+1
+19,0
+2,1
+48,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+2,1
+46,0
+1
+1d,0
+2,1
+45,0
+1
+1e,0
+2,1
+42,0
+2,1
+1f,0
+2,1
+3e,0
+3,1
+23,0
+2,1
+39,0
+3,1
+28,0
+2,1
+34,0
+3,1
+2d,0
+1
+30,0
+3,1
+31,0
+2,1
+2c,0
+2,1
+36,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+62,0
+3,1
+5c,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5a,0
+5,1
+5c,0
+3,1
+f89,0
+100 90 32
+1fe,0
+2
+63,0
+3,2
+62,0
+2
+0
+2,2
+60,0
+2
+3,0
+2,2
+5f,0
+2
+3,0
+2,2
+5e,0
+2
+5,0
+2,2
+5c,0
+2
+7,0
+2,2
+5b,0
+2
+8,0
+2
+5a,0
+2
+9,0
+2,2
+59,0
+2
+a,0
+2,2
+57,0
+2
+c,0
+2,2
+55,0
+2
+d,0
+2,2
+55,0
+2
+e,0
+2,2
+53,0
+2
+10,0
+2,2
+52,0
+2
+11,0
+2
+51,0
+2
+12,0
+2,2
+4f,0
+2
+14,0
+2,2
+4e,0
+2
+15,0
+2,2
+4c,0
+2
+16,0
+2,2
+4c,0
+2
+17,0
+2,2
+4a,0
+2
+19,0
+2,2
+48,0
+2
+1b,0
+2
+48,0
+2
+1b,0
+2,2
+46,0
+2
+1d,0
+2,2
+45,0
+2
+1e,0
+2,2
+42,0
+2,2
+1f,0
+2,2
+3e,0
+3,2
+23,0
+2,2
+39,0
+3,2
+28,0
+2,2
+34,0
+3,2
+2d,0
+2
+30,0
+3,2
+31,0
+2,2
+2c,0
+2,2
+36,0
+2,2
+64,0
+2,2
+63,0
+2,2
+64,0
+2,2
+64,0
+2,2
+62,0
+3,2
+5c,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5a,0
+5,2
+5c,0
+3,2
+f89,0
+100 90 32
+1fe,0
+3
+63,0
+3,3
+62,0
+3
+0
+2,3
+60,0
+3
+3,0
+2,3
+5f,0
+3
+3,0
+2,3
+5e,0
+3
+5,0
+2,3
+5c,0
+3
+7,0
+2,3
+5b,0
+3
+8,0
+3
+5a,0
+3
+9,0
+2,3
+59,0
+3
+a,0
+2,3
+57,0
+3
+c,0
+2,3
+55,0
+3
+d,0
+2,3
+55,0
+3
+e,0
+2,3
+53,0
+3
+10,0
+2,3
+52,0
+3
+11,0
+3
+51,0
+3
+12,0
+2,3
+4f,0
+3
+14,0
+2,3
+4e,0
+3
+15,0
+2,3
+4c,0
+3
+16,0
+2,3
+4c,0
+3
+17,0
+2,3
+4a,0
+3
+19,0
+2,3
+48,0
+3
+1b,0
+3
+48,0
+3
+1b,0
+2,3
+46,0
+3
+1d,0
+2,3
+45,0
+3
+1e,0
+2,3
+42,0
+2,3
+1f,0
+2,3
+3e,0
+3,3
+23,0
+2,3
+39,0
+3,3
+28,0
+2,3
+34,0
+3,3
+2d,0
+3
+30,0
+3,3
+31,0
+2,3
+2c,0
+2,3
+36,0
+2,3
+64,0
+2,3
+63,0
+2,3
+64,0
+2,3
+64,0
+2,3
+62,0
+3,3
+5c,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5a,0
+5,3
+5c,0
+3,3
+f89,0
+100 90 32
+1fe,0
+4
+63,0
+3,4
+62,0
+4
+0
+2,4
+60,0
+4
+3,0
+2,4
+5f,0
+4
+3,0
+2,4
+5e,0
+4
+5,0
+2,4
+5c,0
+4
+7,0
+2,4
+5b,0
+4
+8,0
+4
+5a,0
+4
+9,0
+2,4
+59,0
+4
+a,0
+2,4
+57,0
+4
+c,0
+2,4
+55,0
+4
+d,0
+2,4
+55,0
+4
+e,0
+2,4
+53,0
+4
+10,0
+2,4
+52,0
+4
+11,0
+4
+51,0
+4
+12,0
+2,4
+4f,0
+4
+14,0
+2,4
+4e,0
+4
+15,0
+2,4
+4c,0
+4
+16,0
+2,4
+4c,0
+4
+17,0
+2,4
+4a,0
+4
+19,0
+2,4
+48,0
+4
+1b,0
+4
+48,0
+4
+1b,0
+2,4
+46,0
+4
+1d,0
+2,4
+45,0
+4
+1e,0
+2,4
+42,0
+2,4
+1f,0
+2,4
+3e,0
+3,4
+23,0
+2,4
+39,0
+3,4
+28,0
+2,4
+34,0
+3,4
+2d,0
+4
+30,0
+3,4
+31,0
+2,4
+2c,0
+2,4
+36,0
+2,4
+64,0
+2,4
+63,0
+2,4
+64,0
+2,4
+64,0
+2,4
+62,0
+3,4
+5c,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5a,0
+5,4
+5c,0
+3,4
+f89,0
+100 90 32
+1fe,0
+6
+63,0
+3,6
+62,0
+6
+0
+2,6
+60,0
+6
+3,0
+2,6
+5f,0
+6
+3,0
+2,6
+5e,0
+6
+5,0
+2,6
+5c,0
+6
+7,0
+2,6
+5b,0
+6
+8,0
+6
+5a,0
+6
+9,0
+2,6
+59,0
+6
+a,0
+2,6
+57,0
+6
+c,0
+2,6
+55,0
+6
+d,0
+2,6
+55,0
+6
+e,0
+2,6
+53,0
+6
+10,0
+2,6
+52,0
+6
+11,0
+6
+51,0
+6
+12,0
+2,6
+4f,0
+6
+14,0
+2,6
+4e,0
+6
+15,0
+2,6
+4c,0
+6
+16,0
+2,6
+4c,0
+6
+17,0
+2,6
+4a,0
+6
+19,0
+2,6
+48,0
+6
+1b,0
+6
+48,0
+6
+1b,0
+2,6
+46,0
+6
+1d,0
+2,6
+45,0
+6
+1e,0
+2,6
+42,0
+2,6
+1f,0
+2,6
+3e,0
+3,6
+23,0
+2,6
+39,0
+3,6
+28,0
+2,6
+34,0
+3,6
+2d,0
+6
+30,0
+3,6
+31,0
+2,6
+2c,0
+2,6
+36,0
+2,6
+64,0
+2,6
+63,0
+2,6
+64,0
+2,6
+64,0
+2,6
+62,0
+3,6
+5c,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5a,0
+5,6
+5c,0
+3,6
+f89,0
+100 90 32
+1fe,0
+7
+63,0
+3,7
+62,0
+7
+0
+2,7
+60,0
+7
+3,0
+2,7
+5f,0
+7
+3,0
+2,7
+5e,0
+7
+5,0
+2,7
+5c,0
+7
+7,0
+2,7
+5b,0
+7
+8,0
+7
+5a,0
+7
+9,0
+2,7
+59,0
+7
+a,0
+2,7
+57,0
+7
+c,0
+2,7
+55,0
+7
+d,0
+2,7
+55,0
+7
+e,0
+2,7
+53,0
+7
+10,0
+2,7
+52,0
+7
+11,0
+7
+51,0
+7
+12,0
+2,7
+4f,0
+7
+14,0
+2,7
+4e,0
+7
+15,0
+2,7
+4c,0
+7
+16,0
+2,7
+4c,0
+7
+17,0
+2,7
+4a,0
+7
+19,0
+2,7
+48,0
+7
+1b,0
+7
+48,0
+7
+1b,0
+2,7
+46,0
+7
+1d,0
+2,7
+45,0
+7
+1e,0
+2,7
+42,0
+2,7
+1f,0
+2,7
+3e,0
+3,7
+23,0
+2,7
+39,0
+3,7
+28,0
+2,7
+34,0
+3,7
+2d,0
+7
+30,0
+3,7
+31,0
+2,7
+2c,0
+2,7
+36,0
+2,7
+64,0
+2,7
+63,0
+2,7
+64,0
+2,7
+64,0
+2,7
+62,0
+3,7
+5c,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5a,0
+5,7
+5c,0
+3,7
+f89,0
+100 90 32
+1fe,0
+10
+63,0
+3,10
+62,0
+10
+0
+2,10
+60,0
+10
+3,0
+2,10
+5f,0
+10
+3,0
+2,10
+5e,0
+10
+5,0
+2,10
+5c,0
+10
+7,0
+2,10
+5b,0
+10
+8,0
+10
+5a,0
+10
+9,0
+2,10
+59,0
+10
+a,0
+2,10
+57,0
+10
+c,0
+2,10
+55,0
+10
+d,0
+2,10
+55,0
+10
+e,0
+2,10
+53,0
+10
+10,0
+2,10
+52,0
+10
+11,0
+10
+51,0
+10
+12,0
+2,10
+4f,0
+10
+14,0
+2,10
+4e,0
+10
+15,0
+2,10
+4c,0
+10
+16,0
+2,10
+4c,0
+10
+17,0
+2,10
+4a,0
+10
+19,0
+2,10
+48,0
+10
+1b,0
+10
+48,0
+10
+1b,0
+2,10
+46,0
+10
+1d,0
+2,10
+45,0
+10
+1e,0
+2,10
+42,0
+2,10
+1f,0
+2,10
+3e,0
+3,10
+23,0
+2,10
+39,0
+3,10
+28,0
+2,10
+34,0
+3,10
+2d,0
+10
+30,0
+3,10
+31,0
+2,10
+2c,0
+2,10
+36,0
+2,10
+64,0
+2,10
+63,0
+2,10
+64,0
+2,10
+64,0
+2,10
+62,0
+3,10
+5c,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5a,0
+5,10
+5c,0
+3,10
+f89,0
+100 90 32
+1fe,0
+33
+63,0
+3,33
+62,0
+33
+0
+2,33
+60,0
+33
+3,0
+2,33
+5f,0
+33
+3,0
+2,33
+5e,0
+33
+5,0
+2,33
+5c,0
+33
+7,0
+2,33
+5b,0
+33
+8,0
+33
+5a,0
+33
+9,0
+2,33
+59,0
+33
+a,0
+2,33
+57,0
+33
+c,0
+2,33
+55,0
+33
+d,0
+2,33
+55,0
+33
+e,0
+2,33
+53,0
+33
+10,0
+2,33
+52,0
+33
+11,0
+33
+51,0
+33
+12,0
+2,33
+4f,0
+33
+14,0
+2,33
+4e,0
+33
+15,0
+2,33
+4c,0
+33
+16,0
+2,33
+4c,0
+33
+17,0
+2,33
+4a,0
+33
+19,0
+2,33
+48,0
+33
+1b,0
+33
+48,0
+33
+1b,0
+2,33
+46,0
+33
+1d,0
+2,33
+45,0
+33
+1e,0
+2,33
+42,0
+2,33
+1f,0
+2,33
+3e,0
+3,33
+23,0
+2,33
+39,0
+3,33
+28,0
+2,33
+34,0
+3,33
+2d,0
+33
+30,0
+3,33
+31,0
+2,33
+2c,0
+2,33
+36,0
+2,33
+64,0
+2,33
+63,0
+2,33
+64,0
+2,33
+64,0
+2,33
+62,0
+3,33
+5c,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5a,0
+5,33
+5c,0
+3,33
+f89,0
+100 90 32
+1fe,0
+81
+63,0
+3,81
+62,0
+81
+0
+2,81
+60,0
+81
+3,0
+2,81
+5f,0
+81
+3,0
+2,81
+5e,0
+81
+5,0
+2,81
+5c,0
+81
+7,0
+2,81
+5b,0
+81
+8,0
+81
+5a,0
+81
+9,0
+2,81
+59,0
+81
+a,0
+2,81
+57,0
+81
+c,0
+2,81
+55,0
+81
+d,0
+2,81
+55,0
+81
+e,0
+2,81
+53,0
+81
+10,0
+2,81
+52,0
+81
+11,0
+81
+51,0
+81
+12,0
+2,81
+4f,0
+81
+14,0
+2,81
+4e,0
+81
+15,0
+2,81
+4c,0
+81
+16,0
+2,81
+4c,0
+81
+17,0
+2,81
+4a,0
+81
+19,0
+2,81
+48,0
+81
+1b,0
+81
+48,0
+81
+1b,0
+2,81
+46,0
+81
+1d,0
+2,81
+45,0
+81
+1e,0
+2,81
+42,0
+2,81
+1f,0
+2,81
+3e,0
+3,81
+23,0
+2,81
+39,0
+3,81
+28,0
+2,81
+34,0
+3,81
+2d,0
+81
+30,0
+3,81
+31,0
+2,81
+2c,0
+2,81
+36,0
+2,81
+64,0
+2,81
+63,0
+2,81
+64,0
+2,81
+64,0
+2,81
+62,0
+3,81
+5c,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5a,0
+5,81
+5c,0
+3,81
+f89,0
+100 90 32
+1fe,0
+a3
+63,0
+3,a3
+62,0
+a3
+0
+2,a3
+60,0
+a3
+3,0
+2,a3
+5f,0
+a3
+3,0
+2,a3
+5e,0
+a3
+5,0
+2,a3
+5c,0
+a3
+7,0
+2,a3
+5b,0
+a3
+8,0
+a3
+5a,0
+a3
+9,0
+2,a3
+59,0
+a3
+a,0
+2,a3
+57,0
+a3
+c,0
+2,a3
+55,0
+a3
+d,0
+2,a3
+55,0
+a3
+e,0
+2,a3
+53,0
+a3
+10,0
+2,a3
+52,0
+a3
+11,0
+a3
+51,0
+a3
+12,0
+2,a3
+4f,0
+a3
+14,0
+2,a3
+4e,0
+a3
+15,0
+2,a3
+4c,0
+a3
+16,0
+2,a3
+4c,0
+a3
+17,0
+2,a3
+4a,0
+a3
+19,0
+2,a3
+48,0
+a3
+1b,0
+a3
+48,0
+a3
+1b,0
+2,a3
+46,0
+a3
+1d,0
+2,a3
+45,0
+a3
+1e,0
+2,a3
+42,0
+2,a3
+1f,0
+2,a3
+3e,0
+3,a3
+23,0
+2,a3
+39,0
+3,a3
+28,0
+2,a3
+34,0
+3,a3
+2d,0
+a3
+30,0
+3,a3
+31,0
+2,a3
+2c,0
+2,a3
+36,0
+2,a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+2,a3
+64,0
+2,a3
+62,0
+3,a3
+5c,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5a,0
+5,a3
+5c,0
+3,a3
+f89,0
+100 90 32
+1fe,0
+ff
+63,0
+3,ff
+62,0
+ff
+0
+2,ff
+60,0
+ff
+3,0
+2,ff
+5f,0
+ff
+3,0
+2,ff
+5e,0
+ff
+5,0
+2,ff
+5c,0
+ff
+7,0
+2,ff
+5b,0
+ff
+8,0
+ff
+5a,0
+ff
+9,0
+2,ff
+59,0
+ff
+a,0
+2,ff
+57,0
+ff
+c,0
+2,ff
+55,0
+ff
+d,0
+2,ff
+55,0
+ff
+e,0
+2,ff
+53,0
+ff
+10,0
+2,ff
+52,0
+ff
+11,0
+ff
+51,0
+ff
+12,0
+2,ff
+4f,0
+ff
+14,0
+2,ff
+4e,0
+ff
+15,0
+2,ff
+4c,0
+ff
+16,0
+2,ff
+4c,0
+ff
+17,0
+2,ff
+4a,0
+ff
+19,0
+2,ff
+48,0
+ff
+1b,0
+ff
+48,0
+ff
+1b,0
+2,ff
+46,0
+ff
+1d,0
+2,ff
+45,0
+ff
+1e,0
+2,ff
+42,0
+2,ff
+1f,0
+2,ff
+3e,0
+3,ff
+23,0
+2,ff
+39,0
+3,ff
+28,0
+2,ff
+34,0
+3,ff
+2d,0
+ff
+30,0
+3,ff
+31,0
+2,ff
+2c,0
+2,ff
+36,0
+2,ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+2,ff
+64,0
+2,ff
+62,0
+3,ff
+5c,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5a,0
+5,ff
+5c,0
+3,ff
+f89,0
+100 90 32
+1fe,0
+100
+63,0
+3,100
+62,0
+100
+0
+2,100
+60,0
+100
+3,0
+2,100
+5f,0
+100
+3,0
+2,100
+5e,0
+100
+5,0
+2,100
+5c,0
+100
+7,0
+2,100
+5b,0
+100
+8,0
+100
+5a,0
+100
+9,0
+2,100
+59,0
+100
+a,0
+2,100
+57,0
+100
+c,0
+2,100
+55,0
+100
+d,0
+2,100
+55,0
+100
+e,0
+2,100
+53,0
+100
+10,0
+2,100
+52,0
+100
+11,0
+100
+51,0
+100
+12,0
+2,100
+4f,0
+100
+14,0
+2,100
+4e,0
+100
+15,0
+2,100
+4c,0
+100
+16,0
+2,100
+4c,0
+100
+17,0
+2,100
+4a,0
+100
+19,0
+2,100
+48,0
+100
+1b,0
+100
+48,0
+100
+1b,0
+2,100
+46,0
+100
+1d,0
+2,100
+45,0
+100
+1e,0
+2,100
+42,0
+2,100
+1f,0
+2,100
+3e,0
+3,100
+23,0
+2,100
+39,0
+3,100
+28,0
+2,100
+34,0
+3,100
+2d,0
+100
+30,0
+3,100
+31,0
+2,100
+2c,0
+2,100
+36,0
+2,100
+64,0
+2,100
+63,0
+2,100
+64,0
+2,100
+64,0
+2,100
+62,0
+3,100
+5c,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5a,0
+5,100
+5c,0
+3,100
+f89,0
+100 90 32
+1fe,0
+12c
+63,0
+3,12c
+62,0
+12c
+0
+2,12c
+60,0
+12c
+3,0
+2,12c
+5f,0
+12c
+3,0
+2,12c
+5e,0
+12c
+5,0
+2,12c
+5c,0
+12c
+7,0
+2,12c
+5b,0
+12c
+8,0
+12c
+5a,0
+12c
+9,0
+2,12c
+59,0
+12c
+a,0
+2,12c
+57,0
+12c
+c,0
+2,12c
+55,0
+12c
+d,0
+2,12c
+55,0
+12c
+e,0
+2,12c
+53,0
+12c
+10,0
+2,12c
+52,0
+12c
+11,0
+12c
+51,0
+12c
+12,0
+2,12c
+4f,0
+12c
+14,0
+2,12c
+4e,0
+12c
+15,0
+2,12c
+4c,0
+12c
+16,0
+2,12c
+4c,0
+12c
+17,0
+2,12c
+4a,0
+12c
+19,0
+2,12c
+48,0
+12c
+1b,0
+12c
+48,0
+12c
+1b,0
+2,12c
+46,0
+12c
+1d,0
+2,12c
+45,0
+12c
+1e,0
+2,12c
+42,0
+2,12c
+1f,0
+2,12c
+3e,0
+3,12c
+23,0
+2,12c
+39,0
+3,12c
+28,0
+2,12c
+34,0
+3,12c
+2d,0
+12c
+30,0
+3,12c
+31,0
+2,12c
+2c,0
+2,12c
+36,0
+2,12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+2,12c
+64,0
+2,12c
+62,0
+3,12c
+5c,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5a,0
+5,12c
+5c,0
+3,12c
+f89,0
+100 90 32
+1fe,0
+3e8
+63,0
+3,3e8
+62,0
+3e8
+0
+2,3e8
+60,0
+3e8
+3,0
+2,3e8
+5f,0
+3e8
+3,0
+2,3e8
+5e,0
+3e8
+5,0
+2,3e8
+5c,0
+3e8
+7,0
+2,3e8
+5b,0
+3e8
+8,0
+3e8
+5a,0
+3e8
+9,0
+2,3e8
+59,0
+3e8
+a,0
+2,3e8
+57,0
+3e8
+c,0
+2,3e8
+55,0
+3e8
+d,0
+2,3e8
+55,0
+3e8
+e,0
+2,3e8
+53,0
+3e8
+10,0
+2,3e8
+52,0
+3e8
+11,0
+3e8
+51,0
+3e8
+12,0
+2,3e8
+4f,0
+3e8
+14,0
+2,3e8
+4e,0
+3e8
+15,0
+2,3e8
+4c,0
+3e8
+16,0
+2,3e8
+4c,0
+3e8
+17,0
+2,3e8
+4a,0
+3e8
+19,0
+2,3e8
+48,0
+3e8
+1b,0
+3e8
+48,0
+3e8
+1b,0
+2,3e8
+46,0
+3e8
+1d,0
+2,3e8
+45,0
+3e8
+1e,0
+2,3e8
+42,0
+2,3e8
+1f,0
+2,3e8
+3e,0
+3,3e8
+23,0
+2,3e8
+39,0
+3,3e8
+28,0
+2,3e8
+34,0
+3,3e8
+2d,0
+3e8
+30,0
+3,3e8
+31,0
+2,3e8
+2c,0
+2,3e8
+36,0
+2,3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+2,3e8
+64,0
+2,3e8
+62,0
+3,3e8
+5c,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5a,0
+5,3e8
+5c,0
+3,3e8
+f89,0
+100 90 32
+1fe,0
+111111
+63,0
+3,111111
+62,0
+111111
+0
+2,111111
+60,0
+111111
+3,0
+2,111111
+5f,0
+111111
+3,0
+2,111111
+5e,0
+111111
+5,0
+2,111111
+5c,0
+111111
+7,0
+2,111111
+5b,0
+111111
+8,0
+111111
+5a,0
+111111
+9,0
+2,111111
+59,0
+111111
+a,0
+2,111111
+57,0
+111111
+c,0
+2,111111
+55,0
+111111
+d,0
+2,111111
+55,0
+111111
+e,0
+2,111111
+53,0
+111111
+10,0
+2,111111
+52,0
+111111
+11,0
+111111
+51,0
+111111
+12,0
+2,111111
+4f,0
+111111
+14,0
+2,111111
+4e,0
+111111
+15,0
+2,111111
+4c,0
+111111
+16,0
+2,111111
+4c,0
+111111
+17,0
+2,111111
+4a,0
+111111
+19,0
+2,111111
+48,0
+111111
+1b,0
+111111
+48,0
+111111
+1b,0
+2,111111
+46,0
+111111
+1d,0
+2,111111
+45,0
+111111
+1e,0
+2,111111
+42,0
+2,111111
+1f,0
+2,111111
+3e,0
+3,111111
+23,0
+2,111111
+39,0
+3,111111
+28,0
+2,111111
+34,0
+3,111111
+2d,0
+111111
+30,0
+3,111111
+31,0
+2,111111
+2c,0
+2,111111
+36,0
+2,111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+2,111111
+64,0
+2,111111
+62,0
+3,111111
+5c,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5a,0
+5,111111
+5c,0
+3,111111
+f89,0
+100 90 32
+1fe,0
+400200
+63,0
+3,400200
+62,0
+400200
+0
+2,400200
+60,0
+400200
+3,0
+2,400200
+5f,0
+400200
+3,0
+2,400200
+5e,0
+400200
+5,0
+2,400200
+5c,0
+400200
+7,0
+2,400200
+5b,0
+400200
+8,0
+400200
+5a,0
+400200
+9,0
+2,400200
+59,0
+400200
+a,0
+2,400200
+57,0
+400200
+c,0
+2,400200
+55,0
+400200
+d,0
+2,400200
+55,0
+400200
+e,0
+2,400200
+53,0
+400200
+10,0
+2,400200
+52,0
+400200
+11,0
+400200
+51,0
+400200
+12,0
+2,400200
+4f,0
+400200
+14,0
+2,400200
+4e,0
+400200
+15,0
+2,400200
+4c,0
+400200
+16,0
+2,400200
+4c,0
+400200
+17,0
+2,400200
+4a,0
+400200
+19,0
+2,400200
+48,0
+400200
+1b,0
+400200
+48,0
+400200
+1b,0
+2,400200
+46,0
+400200
+1d,0
+2,400200
+45,0
+400200
+1e,0
+2,400200
+42,0
+2,400200
+1f,0
+2,400200
+3e,0
+3,400200
+23,0
+2,400200
+39,0
+3,400200
+28,0
+2,400200
+34,0
+3,400200
+2d,0
+400200
+30,0
+3,400200
+31,0
+2,400200
+2c,0
+2,400200
+36,0
+2,400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+2,400200
+64,0
+2,400200
+62,0
+3,400200
+5c,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5a,0
+5,400200
+5c,0
+3,400200
+f89,0
+100 90 32
+1fe,0
+777777
+63,0
+3,777777
+62,0
+777777
+0
+2,777777
+60,0
+777777
+3,0
+2,777777
+5f,0
+777777
+3,0
+2,777777
+5e,0
+777777
+5,0
+2,777777
+5c,0
+777777
+7,0
+2,777777
+5b,0
+777777
+8,0
+777777
+5a,0
+777777
+9,0
+2,777777
+59,0
+777777
+a,0
+2,777777
+57,0
+777777
+c,0
+2,777777
+55,0
+777777
+d,0
+2,777777
+55,0
+777777
+e,0
+2,777777
+53,0
+777777
+10,0
+2,777777
+52,0
+777777
+11,0
+777777
+51,0
+777777
+12,0
+2,777777
+4f,0
+777777
+14,0
+2,777777
+4e,0
+777777
+15,0
+2,777777
+4c,0
+777777
+16,0
+2,777777
+4c,0
+777777
+17,0
+2,777777
+4a,0
+777777
+19,0
+2,777777
+48,0
+777777
+1b,0
+777777
+48,0
+777777
+1b,0
+2,777777
+46,0
+777777
+1d,0
+2,777777
+45,0
+777777
+1e,0
+2,777777
+42,0
+2,777777
+1f,0
+2,777777
+3e,0
+3,777777
+23,0
+2,777777
+39,0
+3,777777
+28,0
+2,777777
+34,0
+3,777777
+2d,0
+777777
+30,0
+3,777777
+31,0
+2,777777
+2c,0
+2,777777
+36,0
+2,777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+2,777777
+64,0
+2,777777
+62,0
+3,777777
+5c,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5a,0
+5,777777
+5c,0
+3,777777
+f89,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a93.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a93.dat
new file mode 100644
index 000000000..04e5eb3f5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a93.dat
@@ -0,0 +1,1237 @@
+! $XConsortium$
+100 90 32
+262,0
+3,1
+62,0
+1
+0
+2,1
+60,0
+1
+3,0
+2,1
+63,0
+2,1
+5e,0
+1
+63,0
+1
+7,0
+2,1
+c9,0
+2,1
+65,0
+1
+57,0
+1
+71,0
+1
+56,0
+1
+74,0
+2,1
+52,0
+1
+11,0
+1
+51,0
+1
+12,0
+1
+50,0
+1
+14,0
+2,1
+64,0
+1
+4d,0
+1
+16,0
+2,1
+b0,0
+1
+63,0
+1
+1b,0
+1
+48,0
+1
+1b,0
+2,1
+46,0
+1
+83,0
+2,1
+42,0
+2,1
+5f,0
+3,1
+23,0
+2,1
+39,0
+3,1
+29,0
+1
+36,0
+1
+c1,0
+1
+37,0
+1
+65,0
+1
+63,0
+2,1
+64,0
+2,1
+64,0
+1
+64,0
+2,1
+5c,0
+5,1
+5a,0
+2,1
+0
+2,1
+5e,0
+1
+b9,0
+2,1
+5d,0
+1
+bf,0
+3,1
+5a,0
+5,1
+5c,0
+1
+f8b,0
+100 90 32
+1fe,0
+1
+63,0
+3,1
+62,0
+1
+0
+2,1
+64,0
+2,1
+64,0
+1
+ca,0
+1
+5c,0
+1
+8,0
+1
+64,0
+2,1
+59,0
+1
+63,0
+1
+c,0
+2,1
+ba,0
+1
+e,0
+2,1
+53,0
+1
+64,0
+1
+dc,0
+1
+4f,0
+1
+63,0
+1
+17,0
+1
+4c,0
+1
+17,0
+2,1
+4a,0
+1
+19,0
+2,1
+64,0
+1
+48,0
+1
+1b,0
+2,1
+46,0
+1
+83,0
+2,1
+42,0
+2,1
+60,0
+2,1
+23,0
+1
+3a,0
+1
+0
+1
+28,0
+2,1
+95,0
+3,1
+31,0
+1
+2d,0
+1
+9d,0
+2,1
+c9,0
+2,1
+64,0
+2,1
+64,0
+1
+5c,0
+2,1
+2,0
+1
+bb,0
+3,1
+5d,0
+2,1
+5a,0
+5,1
+5d,0
+2,1
+5b,0
+4,1
+5a,0
+5,1
+5a,0
+5,1
+5c,0
+2,1
+f8a,0
+100 90 32
+1fe,0
+1
+63,0
+3,1
+c6,0
+1
+3,0
+2,1
+5f,0
+1
+69,0
+2,1
+5c,0
+1
+8,0
+1
+bf,0
+1
+70,0
+1
+57,0
+1
+d,0
+1
+63,0
+2,1
+55,0
+1
+e,0
+2,1
+64,0
+1
+53,0
+1
+11,0
+1
+64,0
+2,1
+4f,0
+1
+7a,0
+2,1
+4c,0
+1
+17,0
+1
+b0,0
+1
+19,0
+1
+ae,0
+1
+1c,0
+1
+ca,0
+2,1
+42,0
+2,1
+85,0
+2,1
+3b,0
+1
+28,0
+1
+35,0
+3,1
+2d,0
+1
+30,0
+3,1
+31,0
+1
+2d,0
+2,1
+36,0
+2,1
+c9,0
+2,1
+64,0
+2,1
+c9,0
+2,1
+5c,0
+5,1
+5a,0
+5,1
+5a,0
+4,1
+5b,0
+5,1
+5a,0
+2,1
+5d,0
+4,1
+5b,0
+5,1
+5a,0
+4,1
+5c,0
+1
+0
+1
+fe9,0
+100 90 32
+1fe,0
+1
+63,0
+1
+0
+1
+62,0
+1
+2,0
+1
+65,0
+1
+5f,0
+1
+4,0
+1
+ca,0
+1
+65,0
+1
+5a,0
+1
+9,0
+2,1
+59,0
+1
+b,0
+1
+bb,0
+1
+d,0
+2,1
+55,0
+1
+e,0
+2,1
+ca,0
+1
+51,0
+1
+12,0
+2,1
+4f,0
+1
+14,0
+2,1
+4e,0
+1
+15,0
+1
+64,0
+1
+4d,0
+1
+18,0
+1
+4a,0
+1
+1a,0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+1c,0
+1
+46,0
+1
+1e,0
+1
+64,0
+1
+43,0
+2,1
+5f,0
+3,1
+23,0
+2,1
+39,0
+1
+2a,0
+2,1
+34,0
+1
+c2,0
+2,1
+36,0
+2,1
+64,0
+2,1
+c9,0
+2,1
+65,0
+1
+63,0
+1
+5d,0
+1
+5f,0
+1
+0
+1
+5d,0
+3,1
+5a,0
+1
+0
+1
+0
+1
+5a,0
+5,1
+5a,0
+2,1
+0
+1
+5b,0
+1
+2,0
+2,1
+5c,0
+1
+0
+1
+5a,0
+1
+0
+1
+5e,0
+3,1
+f89,0
+100 90 32
+1fe,0
+1
+12c,0
+1
+3,0
+2,1
+5f,0
+1
+3,0
+2,1
+c2,0
+1
+7,0
+2,1
+5b,0
+1
+8,0
+1
+64,0
+2,1
+64,0
+2,1
+64,0
+1
+64,0
+1
+65,0
+1
+54,0
+1
+10,0
+2,1
+52,0
+1
+63,0
+1
+12,0
+1
+66,0
+1
+4e,0
+1
+7a,0
+2,1
+4c,0
+1
+17,0
+2,1
+113,0
+1
+1b,0
+2,1
+46,0
+1
+1d,0
+2,1
+a9,0
+1
+1f,0
+2,1
+3e,0
+1
+0
+1
+23,0
+1
+65,0
+1
+35,0
+1
+0
+1
+5f,0
+1
+32,0
+1
+2d,0
+2,1
+36,0
+2,1
+64,0
+2,1
+63,0
+1
+65,0
+1
+65,0
+1
+64,0
+1
+5d,0
+2,1
+2,0
+1
+5a,0
+5,1
+5d,0
+2,1
+5d,0
+2,1
+5a,0
+3,1
+5c,0
+4,1
+5b,0
+5,1
+bd,0
+1
+5e,0
+1
+f89,0
+100 90 32
+262,0
+3,1
+62,0
+1
+0
+2,1
+c9,0
+2,1
+5e,0
+1
+6,0
+1
+5c,0
+1
+8,0
+1
+5b,0
+1
+63,0
+1
+64,0
+1
+a,0
+2,1
+57,0
+1
+c,0
+1
+56,0
+1
+e,0
+1
+65,0
+1
+65,0
+1
+130,0
+1
+64,0
+1
+4d,0
+1
+16,0
+2,1
+64,0
+2,1
+4a,0
+1
+63,0
+1
+1b,0
+1
+111,0
+1
+1f,0
+1
+42,0
+1
+62,0
+1
+5e,0
+1
+2a,0
+1
+35,0
+1
+0
+1
+5e,0
+2,1
+32,0
+1
+2d,0
+2,1
+36,0
+2,1
+64,0
+2,1
+63,0
+1
+65,0
+1
+65,0
+1
+64,0
+1
+5d,0
+3,1
+5d,0
+2,1
+bb,0
+5,1
+5a,0
+5,1
+5e,0
+1
+5a,0
+5,1
+5c,0
+2,1
+5b,0
+5,1
+5c,0
+1
+f8b,0
+100 90 32
+1fe,0
+1
+63,0
+3,1
+62,0
+1
+0
+2,1
+64,0
+2,1
+64,0
+1
+ca,0
+1
+5c,0
+1
+8,0
+1
+64,0
+2,1
+59,0
+1
+63,0
+1
+c,0
+2,1
+ba,0
+1
+e,0
+2,1
+53,0
+1
+64,0
+1
+dc,0
+1
+4f,0
+1
+63,0
+1
+17,0
+1
+4c,0
+1
+17,0
+2,1
+4a,0
+1
+19,0
+2,1
+64,0
+1
+48,0
+1
+1b,0
+2,1
+46,0
+1
+83,0
+2,1
+42,0
+2,1
+60,0
+2,1
+23,0
+1
+3a,0
+1
+0
+1
+28,0
+2,1
+95,0
+3,1
+31,0
+1
+2d,0
+1
+9d,0
+2,1
+c9,0
+2,1
+64,0
+2,1
+64,0
+1
+5c,0
+2,1
+2,0
+1
+bb,0
+3,1
+5d,0
+2,1
+5a,0
+5,1
+5d,0
+2,1
+5b,0
+4,1
+5a,0
+5,1
+5a,0
+5,1
+5c,0
+2,1
+f8a,0
+100 90 32
+1fe,0
+1
+63,0
+3,1
+c6,0
+1
+3,0
+2,1
+5f,0
+1
+69,0
+2,1
+5c,0
+1
+8,0
+1
+bf,0
+1
+70,0
+1
+57,0
+1
+d,0
+1
+63,0
+2,1
+55,0
+1
+e,0
+2,1
+64,0
+1
+53,0
+1
+11,0
+1
+64,0
+2,1
+4f,0
+1
+7a,0
+2,1
+4c,0
+1
+17,0
+1
+b0,0
+1
+19,0
+1
+ae,0
+1
+1c,0
+1
+ca,0
+2,1
+42,0
+2,1
+85,0
+2,1
+3b,0
+1
+28,0
+1
+35,0
+3,1
+2d,0
+1
+30,0
+3,1
+31,0
+1
+2d,0
+2,1
+36,0
+2,1
+c9,0
+2,1
+64,0
+2,1
+c9,0
+2,1
+5c,0
+5,1
+5a,0
+5,1
+5a,0
+4,1
+5b,0
+5,1
+5a,0
+2,1
+5d,0
+4,1
+5b,0
+5,1
+5a,0
+4,1
+5c,0
+1
+0
+1
+fe9,0
+100 90 32
+1fe,0
+1
+63,0
+1
+0
+1
+62,0
+1
+2,0
+1
+65,0
+1
+5f,0
+1
+4,0
+1
+ca,0
+1
+65,0
+1
+5a,0
+1
+9,0
+2,1
+59,0
+1
+b,0
+1
+bb,0
+1
+d,0
+2,1
+55,0
+1
+e,0
+2,1
+ca,0
+1
+51,0
+1
+12,0
+2,1
+4f,0
+1
+14,0
+2,1
+4e,0
+1
+15,0
+1
+64,0
+1
+4d,0
+1
+18,0
+1
+4a,0
+1
+1a,0
+1
+48,0
+1
+1b,0
+1
+48,0
+1
+1c,0
+1
+46,0
+1
+1e,0
+1
+64,0
+1
+43,0
+2,1
+5f,0
+3,1
+23,0
+2,1
+39,0
+1
+2a,0
+2,1
+34,0
+1
+c2,0
+2,1
+36,0
+2,1
+64,0
+2,1
+c9,0
+2,1
+65,0
+1
+63,0
+1
+5d,0
+1
+5f,0
+1
+0
+1
+5d,0
+3,1
+5a,0
+1
+0
+1
+0
+1
+5a,0
+5,1
+5a,0
+2,1
+0
+1
+5b,0
+1
+2,0
+2,1
+5c,0
+1
+0
+1
+5a,0
+1
+0
+1
+5e,0
+3,1
+f89,0
+100 90 32
+1fe,0
+1
+12c,0
+1
+3,0
+2,1
+5f,0
+1
+3,0
+2,1
+c2,0
+1
+7,0
+2,1
+5b,0
+1
+8,0
+1
+64,0
+2,1
+64,0
+2,1
+64,0
+1
+64,0
+1
+65,0
+1
+54,0
+1
+10,0
+2,1
+52,0
+1
+63,0
+1
+12,0
+1
+66,0
+1
+4e,0
+1
+7a,0
+2,1
+4c,0
+1
+17,0
+2,1
+113,0
+1
+1b,0
+2,1
+46,0
+1
+1d,0
+2,1
+a9,0
+1
+1f,0
+2,1
+3e,0
+1
+0
+1
+23,0
+1
+65,0
+1
+35,0
+1
+0
+1
+5f,0
+1
+32,0
+1
+2d,0
+2,1
+36,0
+2,1
+64,0
+2,1
+63,0
+1
+65,0
+1
+65,0
+1
+64,0
+1
+5d,0
+2,1
+2,0
+1
+5a,0
+5,1
+5d,0
+2,1
+5d,0
+2,1
+5a,0
+3,1
+5c,0
+4,1
+5b,0
+5,1
+bd,0
+1
+5e,0
+1
+f89,0
+100 90 32
+262,0
+3,1
+62,0
+1
+0
+2,1
+c9,0
+2,1
+5e,0
+1
+6,0
+1
+5c,0
+1
+8,0
+1
+5b,0
+1
+63,0
+1
+64,0
+1
+a,0
+2,1
+57,0
+1
+c,0
+1
+56,0
+1
+e,0
+1
+65,0
+1
+65,0
+1
+130,0
+1
+64,0
+1
+4d,0
+1
+16,0
+2,1
+64,0
+2,1
+4a,0
+1
+63,0
+1
+1b,0
+1
+111,0
+1
+1f,0
+1
+42,0
+1
+62,0
+1
+5e,0
+1
+2a,0
+1
+35,0
+1
+0
+1
+5e,0
+2,1
+32,0
+1
+2d,0
+2,1
+36,0
+2,1
+64,0
+2,1
+63,0
+1
+65,0
+1
+65,0
+1
+64,0
+1
+5d,0
+3,1
+5d,0
+2,1
+bb,0
+5,1
+5a,0
+5,1
+5e,0
+1
+5a,0
+5,1
+5c,0
+2,1
+5b,0
+5,1
+5c,0
+1
+f8b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a94.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a94.dat
new file mode 100644
index 000000000..f850f1df3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a94.dat
@@ -0,0 +1,3945 @@
+! $XConsortium$
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+f,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+f,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+84d,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+11,1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+11,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+401,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+0
+a,1
+2d,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+37f,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+5f5,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+591,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+c5,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+52d,0
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5f,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+84c,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+12,1
+2c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+12,1
+2c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+60,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+400,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+0
+b,1
+2c,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+31b,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+5f4,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+5f,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+590,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+61,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+52c,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+11,1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+11,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+401,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+0
+a,1
+2d,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+37f,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+5f5,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+591,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+c5,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+52d,0
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5f,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+84c,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+12,1
+2c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+12,1
+2c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+60,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+400,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+0
+b,1
+2c,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+31b,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+5f4,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+5f,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+590,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+61,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+52c,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a95.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a95.dat
new file mode 100644
index 000000000..0d21b236c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a95.dat
@@ -0,0 +1,501 @@
+! $XConsortium$
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+c7,0
+1
+257,0
+1
+63,0
+1
+63,0
+1
+3e7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+12b,0
+1
+63,0
+1
+531,0
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+18f,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63f,0
+1
+c7,0
+1
+63,0
+1
+12b,0
+1
+63,0
+1
+63,0
+1
+469,0
+100 90 32
+7e4,0
+33,1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+405,0
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+64,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+18f,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63f,0
+1
+c7,0
+1
+63,0
+1
+12b,0
+1
+63,0
+1
+63,0
+1
+469,0
+100 90 32
+7e4,0
+33,1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+405,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/a96.dat b/xc/test/xsuite/xtest/tset/CH06/drwlns/a96.dat
new file mode 100644
index 000000000..3d81f5695
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/a96.dat
@@ -0,0 +1,69 @@
+! $XConsortium$
+100 90 32
+7e4,0
+8,1
+8,0
+8,1
+8,0
+8,1
+8,0
+3,1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+383,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+383,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+383,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+65d,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwlns/drwlns.m b/xc/test/xsuite/xtest/tset/CH06/drwlns/drwlns.m
new file mode 100644
index 000000000..1955614aa
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwlns/drwlns.m
@@ -0,0 +1,352 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawLines CH06
+void
+XDrawLines(display, d, gc, points, npoints, mode)
+Display *display = Dsp;
+Drawable d;
+GC gc;
+XPoint *points = defpoints;
+int npoints = ndefpoints;
+int mode = CoordModeOrigin;
+>>EXTERN
+/* These points will be used if we are not very interested in what is used */
+static XPoint defpoints[] = {
+ {5, 35},
+ {20, 30},
+ {10, 5},
+ {70, 40},
+ {20, 50},
+};
+static int ndefpoints = sizeof(defpoints)/sizeof(XPoint);
+
+/* Lines that cross */
+static XPoint crosspts[] = {
+ {10, 10},
+ {30, 15},
+ {15, 40},
+ {20, 3},
+ {25, 40},
+ {10, 28},
+ {30, 28},
+};
+
+static void
+drawline(x1, y1, x2, y2)
+int x1, y1, x2, y2;
+{
+XPoint pnts[2];
+int pass = 0, fail = 0;
+
+ pnts[0].x = x1;
+ pnts[0].y = y1;
+ pnts[1].x = x2;
+ pnts[1].y = y2;
+
+ points = pnts;
+ npoints = 2;
+
+ XCALL;
+}
+
+void
+setfordash()
+{
+static XPoint pnts[] = {
+ {20, 20},
+ {70, 20},
+ {70, 80},
+ };
+ points = pnts;
+ npoints = NELEM(pnts);
+}
+
+>>ASSERTION Good A
+A call to xname
+draws
+.A npoints \-1
+lines between each pair of points (point[i], point[i+1])
+in
+.A points
+in the drawable
+.A d .
+>>STRATEGY
+Draw line with multiple segments.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good B 1
+A call to xname draws the lines in the order listed in the array.
+>>ASSERTION Good A
+The lines join at all intermediate points.
+>>STRATEGY
+Set line-width component of GC to 6.
+Set line-style component of GC to LineSolid.
+Set cap-style component of GC to CapButt.
+Set join-style component of GC to JoinRound.
+Draw line with multiple segments.
+Pixmap verify.
+(Other combinations of GC components are tested under join_style assertions).
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ /*
+ * Just try some defaults here, different join styles
+ * tested elsewhere
+ */
+ XSetLineAttributes(display, gc, 6, LineSolid, CapButt, JoinRound);
+
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When the first and last points coincide, then the first and last
+lines join.
+>>STRATEGY
+Set line-width component of GC to 4.
+Set line-style component of GC to LineSolid.
+Set cap-style component of GC to CapButt.
+Set join-style component of GC to JoinRound.
+Draw line with multiple segments and coincident end points.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+static XPoint pnts[] = {
+ {6, 6},
+ {20, 8},
+ {10, 30},
+ {6, 6},
+};
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ points = pnts;
+ npoints = sizeof(pnts)/sizeof(XPoint);
+ XSetLineAttributes(display, gc, 4, LineSolid, CapButt, JoinRound);
+
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+A call to xname does not draw each pixel of a particular line
+more than once.
+>>STRATEGY
+Set function component of GC to GXxor.
+Draw line with multiple segments.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When thin lines intersect, then
+the intersecting pixels are drawn multiple times.
+>>STRATEGY
+Set function component of GC to GXxor.
+Set line-width component of GC to 0.
+Set line-style component of GC to LineSolid.
+Set cap-style component of GC to CapButt.
+Set join-style component of GC to JoinRound.
+Draw line with horizontal and vertical segments crossing.
+Verify pixel at crossing point is set to background pixel value.
+>>CODE
+/*
+ * Horizontal and vertical lines that cross at 15, 20.
+ * Strictly the spec does not even require that horizontal and
+ * vertical thin lines are drawn properly.
+ */
+static XPoint thincross[] = {
+ {5, 20},
+ {30, 20},
+ {15, 40},
+ {15, 5},
+};
+XVisualInfo *vp;
+struct area area;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetLineAttributes(display, gc, 0, LineSolid, CapButt, JoinRound);
+
+ points = thincross;
+ npoints = sizeof(thincross)/sizeof(XPoint);
+
+ setarea(&area, 15, 20, 1, 1);
+ /*
+ * The only purpose of this check is to show that the pixel
+ * is indeed drawn when the function is copy. This verifies
+ * that we are looking at the right pixel.
+ */
+ XSetFunction(display, gc, GXcopy);
+ XCALL;
+ if (checkarea(display, d, &area, W_FG, 0, CHECK_IN)) {
+ CHECK;
+ } else {
+ delete("Intersecting point was not set with GXcopy");
+ return;
+ }
+ dclear(display, d);
+
+ XSetFunction(display, gc, GXxor);
+ XCALL;
+ if (checkarea(display, d, &area, W_BG, 0, CHECK_IN) == True)
+ CHECK;
+ else {
+ report("intersecting pixel not drawn multiple times with thin line");
+ FAIL;
+ }
+
+ }
+
+ CHECKPASS(2*nvinf());
+
+>>ASSERTION Good A
+When wide lines intersect, then the intersecting pixels are drawn only once.
+>>STRATEGY
+Set function component of GC to GXxor.
+Set line-width component of GC to 3.
+Set line-style component of GC to LineSolid.
+Set cap-style component of GC to CapButt.
+Set join-style component of GC to JoinRound.
+Draw line with horizontal and vertical segments crossing.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+ XSetLineAttributes(display, gc, 3, LineSolid, CapButt, JoinRound);
+
+ points = crosspts;
+ npoints = sizeof(crosspts)/sizeof(XPoint);
+
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+>># The required test is in the first test purpose.
+When
+.A mode
+is
+.S CoordModeOrigin ,
+then all coordinates are taken relative to the origin.
+>>ASSERTION Good A
+When
+.A mode
+is
+.S CoordModePrevious ,
+then all coordinates after the first are taken relative to the previous point.
+>>STRATEGY
+Set mode to CoordModePrevious.
+Draw line with multiple segments.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ mode = CoordModePrevious;
+
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M line-width ,
+.M line-style ,
+.M cap-style ,
+.M fill-style ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+.M join-style
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin ,
+.M tile-stipple-y-origin ,
+.M dash-offset
+and
+.M dash-list
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>>ASSERTION Bad A
+.ER Value mode CoordModeOrigin CoordModePrevious
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwpnt/a20.dat b/xc/test/xsuite/xtest/tset/CH06/drwpnt/a20.dat
new file mode 100644
index 000000000..748c6976a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwpnt/a20.dat
@@ -0,0 +1,139 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+4ba,0
+1
+1e6d,0
+100 90 32
+4ba,0
+2
+1e6d,0
+100 90 32
+4ba,0
+3
+1e6d,0
+100 90 32
+4ba,0
+4
+1e6d,0
+100 90 32
+4ba,0
+6
+1e6d,0
+100 90 32
+4ba,0
+7
+1e6d,0
+100 90 32
+4ba,0
+10
+1e6d,0
+100 90 32
+4ba,0
+33
+1e6d,0
+100 90 32
+4ba,0
+81
+1e6d,0
+100 90 32
+4ba,0
+a3
+1e6d,0
+100 90 32
+4ba,0
+ff
+1e6d,0
+100 90 32
+4ba,0
+100
+1e6d,0
+100 90 32
+4ba,0
+12c
+1e6d,0
+100 90 32
+4ba,0
+3e8
+1e6d,0
+100 90 32
+4ba,0
+111111
+1e6d,0
+100 90 32
+4ba,0
+400200
+1e6d,0
+100 90 32
+4ba,0
+777777
+1e6d,0
+100 90 32
+4ba,0
+1
+1e6d,0
+100 90 32
+4ba,0
+2
+1e6d,0
+100 90 32
+4ba,0
+3
+1e6d,0
+100 90 32
+4ba,0
+4
+1e6d,0
+100 90 32
+4ba,0
+6
+1e6d,0
+100 90 32
+4ba,0
+7
+1e6d,0
+100 90 32
+4ba,0
+10
+1e6d,0
+100 90 32
+4ba,0
+33
+1e6d,0
+100 90 32
+4ba,0
+81
+1e6d,0
+100 90 32
+4ba,0
+a3
+1e6d,0
+100 90 32
+4ba,0
+ff
+1e6d,0
+100 90 32
+4ba,0
+100
+1e6d,0
+100 90 32
+4ba,0
+12c
+1e6d,0
+100 90 32
+4ba,0
+3e8
+1e6d,0
+100 90 32
+4ba,0
+111111
+1e6d,0
+100 90 32
+4ba,0
+400200
+1e6d,0
+100 90 32
+4ba,0
+777777
+1e6d,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwpnt/a25.dat b/xc/test/xsuite/xtest/tset/CH06/drwpnt/a25.dat
new file mode 100644
index 000000000..a69384bf0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwpnt/a25.dat
@@ -0,0 +1,37 @@
+! $XConsortium$
+100 90 32
+4ba,0
+1
+1e6d,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwpnt/a28.dat b/xc/test/xsuite/xtest/tset/CH06/drwpnt/a28.dat
new file mode 100644
index 000000000..7088ec362
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwpnt/a28.dat
@@ -0,0 +1,3 @@
+! $XConsortium$
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwpnt/drwpnt.m b/xc/test/xsuite/xtest/tset/CH06/drwpnt/drwpnt.m
new file mode 100644
index 000000000..e88773d68
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwpnt/drwpnt.m
@@ -0,0 +1,80 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawPoint CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+int x = 10;
+int y = 12;
+>>ASSERTION Good A
+A call to xname
+draws a single point specified by
+.A x
+and
+.A y
+in the drawable
+.A d .
+>>STRATEGY
+Draw a point.
+Verify that it is set and that no other point is.
+>>CODE
+XVisualInfo *vp;
+struct area area;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+
+ setarea(&area, x, y, 1, 1);
+ if (checkarea(display, d, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("incorrect points set");
+ FAIL;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M foreground ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin
+and
+.M clip-mask
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwpnts/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwpnts/a1.dat
new file mode 100644
index 000000000..91b083c96
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwpnts/a1.dat
@@ -0,0 +1,14 @@
+! $XConsortium$
+100 90 32
+1
+c9,0
+1
+133,0
+1
+2c5,0
+1
+3a1,0
+1
+1b,0
+1
+1aa5,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwpnts/a23.dat b/xc/test/xsuite/xtest/tset/CH06/drwpnts/a23.dat
new file mode 100644
index 000000000..387762e26
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwpnts/a23.dat
@@ -0,0 +1,445 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+1
+c9,0
+1
+133,0
+1
+2c5,0
+1
+3a1,0
+1
+1b,0
+1
+1aa5,0
+100 90 32
+2
+c9,0
+2
+133,0
+2
+2c5,0
+2
+3a1,0
+2
+1b,0
+2
+1aa5,0
+100 90 32
+3
+c9,0
+3
+133,0
+3
+2c5,0
+3
+3a1,0
+3
+1b,0
+3
+1aa5,0
+100 90 32
+4
+c9,0
+4
+133,0
+4
+2c5,0
+4
+3a1,0
+4
+1b,0
+4
+1aa5,0
+100 90 32
+6
+c9,0
+6
+133,0
+6
+2c5,0
+6
+3a1,0
+6
+1b,0
+6
+1aa5,0
+100 90 32
+7
+c9,0
+7
+133,0
+7
+2c5,0
+7
+3a1,0
+7
+1b,0
+7
+1aa5,0
+100 90 32
+10
+c9,0
+10
+133,0
+10
+2c5,0
+10
+3a1,0
+10
+1b,0
+10
+1aa5,0
+100 90 32
+33
+c9,0
+33
+133,0
+33
+2c5,0
+33
+3a1,0
+33
+1b,0
+33
+1aa5,0
+100 90 32
+81
+c9,0
+81
+133,0
+81
+2c5,0
+81
+3a1,0
+81
+1b,0
+81
+1aa5,0
+100 90 32
+a3
+c9,0
+a3
+133,0
+a3
+2c5,0
+a3
+3a1,0
+a3
+1b,0
+a3
+1aa5,0
+100 90 32
+ff
+c9,0
+ff
+133,0
+ff
+2c5,0
+ff
+3a1,0
+ff
+1b,0
+ff
+1aa5,0
+100 90 32
+100
+c9,0
+100
+133,0
+100
+2c5,0
+100
+3a1,0
+100
+1b,0
+100
+1aa5,0
+100 90 32
+12c
+c9,0
+12c
+133,0
+12c
+2c5,0
+12c
+3a1,0
+12c
+1b,0
+12c
+1aa5,0
+100 90 32
+3e8
+c9,0
+3e8
+133,0
+3e8
+2c5,0
+3e8
+3a1,0
+3e8
+1b,0
+3e8
+1aa5,0
+100 90 32
+111111
+c9,0
+111111
+133,0
+111111
+2c5,0
+111111
+3a1,0
+111111
+1b,0
+111111
+1aa5,0
+100 90 32
+400200
+c9,0
+400200
+133,0
+400200
+2c5,0
+400200
+3a1,0
+400200
+1b,0
+400200
+1aa5,0
+100 90 32
+777777
+c9,0
+777777
+133,0
+777777
+2c5,0
+777777
+3a1,0
+777777
+1b,0
+777777
+1aa5,0
+100 90 32
+1
+c9,0
+1
+133,0
+1
+2c5,0
+1
+3a1,0
+1
+1b,0
+1
+1aa5,0
+100 90 32
+2
+c9,0
+2
+133,0
+2
+2c5,0
+2
+3a1,0
+2
+1b,0
+2
+1aa5,0
+100 90 32
+3
+c9,0
+3
+133,0
+3
+2c5,0
+3
+3a1,0
+3
+1b,0
+3
+1aa5,0
+100 90 32
+4
+c9,0
+4
+133,0
+4
+2c5,0
+4
+3a1,0
+4
+1b,0
+4
+1aa5,0
+100 90 32
+6
+c9,0
+6
+133,0
+6
+2c5,0
+6
+3a1,0
+6
+1b,0
+6
+1aa5,0
+100 90 32
+7
+c9,0
+7
+133,0
+7
+2c5,0
+7
+3a1,0
+7
+1b,0
+7
+1aa5,0
+100 90 32
+10
+c9,0
+10
+133,0
+10
+2c5,0
+10
+3a1,0
+10
+1b,0
+10
+1aa5,0
+100 90 32
+33
+c9,0
+33
+133,0
+33
+2c5,0
+33
+3a1,0
+33
+1b,0
+33
+1aa5,0
+100 90 32
+81
+c9,0
+81
+133,0
+81
+2c5,0
+81
+3a1,0
+81
+1b,0
+81
+1aa5,0
+100 90 32
+a3
+c9,0
+a3
+133,0
+a3
+2c5,0
+a3
+3a1,0
+a3
+1b,0
+a3
+1aa5,0
+100 90 32
+ff
+c9,0
+ff
+133,0
+ff
+2c5,0
+ff
+3a1,0
+ff
+1b,0
+ff
+1aa5,0
+100 90 32
+100
+c9,0
+100
+133,0
+100
+2c5,0
+100
+3a1,0
+100
+1b,0
+100
+1aa5,0
+100 90 32
+12c
+c9,0
+12c
+133,0
+12c
+2c5,0
+12c
+3a1,0
+12c
+1b,0
+12c
+1aa5,0
+100 90 32
+3e8
+c9,0
+3e8
+133,0
+3e8
+2c5,0
+3e8
+3a1,0
+3e8
+1b,0
+3e8
+1aa5,0
+100 90 32
+111111
+c9,0
+111111
+133,0
+111111
+2c5,0
+111111
+3a1,0
+111111
+1b,0
+111111
+1aa5,0
+100 90 32
+400200
+c9,0
+400200
+133,0
+400200
+2c5,0
+400200
+3a1,0
+400200
+1b,0
+400200
+1aa5,0
+100 90 32
+777777
+c9,0
+777777
+133,0
+777777
+2c5,0
+777777
+3a1,0
+777777
+1b,0
+777777
+1aa5,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwpnts/a28.dat b/xc/test/xsuite/xtest/tset/CH06/drwpnts/a28.dat
new file mode 100644
index 000000000..cc12f512f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwpnts/a28.dat
@@ -0,0 +1,50 @@
+! $XConsortium$
+100 90 32
+1
+c9,0
+1
+133,0
+1
+2c5,0
+1
+1e63,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+866,0
+1
+1ac1,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+882,0
+1
+1aa5,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+866,0
+1
+1ac1,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+882,0
+1
+1aa5,0
+100 90 32
+2328,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwpnts/a3.dat b/xc/test/xsuite/xtest/tset/CH06/drwpnts/a3.dat
new file mode 100644
index 000000000..b01548765
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwpnts/a3.dat
@@ -0,0 +1,11 @@
+! $XConsortium$
+100 90 32
+ca,0
+1
+1fd,0
+1
+865,0
+1
+4c3,0
+1
+1335,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwpnts/a31.dat b/xc/test/xsuite/xtest/tset/CH06/drwpnts/a31.dat
new file mode 100644
index 000000000..3bacdd3e4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwpnts/a31.dat
@@ -0,0 +1,10 @@
+! $XConsortium$
+100 90 32
+1
+c9,0
+1
+133,0
+1
+2c5,0
+1
+1e63,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwpnts/drwpnts.m b/xc/test/xsuite/xtest/tset/CH06/drwpnts/drwpnts.m
new file mode 100644
index 000000000..fedac69db
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwpnts/drwpnts.m
@@ -0,0 +1,120 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawPoints CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+XPoint *points = defpoints;
+int npoints = sizeof(defpoints)/sizeof(XPoint);
+int mode = CoordModeOrigin;
+>>EXTERN
+
+static XPoint defpoints[] = {
+ {2, 2},
+ {10, 5},
+ {50, 21},
+ {20, 12},
+ {78, 21},
+ {0, 0},
+};
+
+>>ASSERTION Good A
+A call to xname
+draws
+.A npoints
+points
+specified by
+.A points
+in the drawable
+.A d .
+>>STRATEGY
+Draw points.
+Direct validation or pixmap compare.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+When the
+.A mode
+is
+.S CoordModeOrigin ,
+then all coordinates are treated as relative to the origin.
+>>ASSERTION Good A
+When the
+.A mode
+is
+.S CoordModePrevious ,
+then all coordinates after the first are taken relative to
+the previous point.
+>>STRATEGY
+Draw points
+Pixmap verify
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ mode = CoordModePrevious;
+
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good B 1
+A call to xname draws the points in the order listed in the array.
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M foreground ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>>ASSERTION Bad A
+.ER BadValue mode CoordModeOrigin CoordModePrevious
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a1.dat
new file mode 100644
index 000000000..0954c6797
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a1.dat
@@ -0,0 +1,139 @@
+! $XConsortium$
+100 90 32
+2c6,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+12dd,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a23.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a23.dat
new file mode 100644
index 000000000..7b44a068a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a23.dat
@@ -0,0 +1,195 @@
+! $XConsortium$
+100 90 32
+f1,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+5,1
+2,0
+1a,1
+43,0
+5,1
+2,0
+1a,1
+43,0
+5,1
+2,0
+1a,1
+29,0
+2c,1
+7,0
+8,1
+29,0
+1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+12,1
+7,0
+8,1
+26,0
+4,1
+19,0
+12,1
+7,0
+8,1
+26,0
+4,1
+19,0
+12,1
+7,0
+8,1
+26,0
+4,1
+19,0
+12,1
+7,0
+8,1
+26,0
+4,1
+19,0
+21,1
+26,0
+4,1
+22,0
+18,1
+29,0
+1
+22,0
+18,1
+29,0
+1
+22,0
+18,1
+29,0
+1
+22,0
+18,1
+29,0
+1
+22,0
+18,1
+29,0
+1
+22,0
+18,1
+29,0
+3b,1
+531,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+8c3,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a31.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a31.dat
new file mode 100644
index 000000000..13c0b702c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a31.dat
@@ -0,0 +1,2227 @@
+! $XConsortium$
+100 90 32
+71a,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+4,1
+60,0
+4,1
+15a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+15a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+732,0
+100 90 32
+71a,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+4,1
+60,0
+4,1
+15a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+15a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+732,0
+100 90 32
+71a,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+e,1
+a,0
+12,1
+8,0
+4,1
+2e,0
+e,1
+a,0
+12,1
+8,0
+4,1
+2e,0
+e,1
+a,0
+12,1
+3a,0
+e,1
+a,0
+12,1
+730,0
+100 90 32
+71a,0
+11,1
+d,0
+f,1
+37,0
+12,1
+b,0
+11,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+b,0
+11,1
+36,0
+4,1
+60,0
+4,1
+60,0
+4,1
+30,0
+1
+30,0
+3,1
+2f,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+30,0
+1
+2f,0
+4,1
+2f,0
+3,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2f,0
+3,1
+2e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+30,0
+1
+30,0
+3,1
+2f,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+30,0
+1
+2f,0
+4,1
+2f,0
+3,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+d,1
+d,0
+f,1
+9,0
+4,1
+2e,0
+e,1
+b,0
+11,1
+9,0
+3,1
+2e,0
+e,1
+a,0
+12,1
+3a,0
+e,1
+b,0
+11,1
+730,0
+100 90 32
+71a,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+6ce,0
+100 90 32
+71a,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+6ce,0
+100 90 32
+71a,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+f,1
+9,0
+13,1
+7,0
+5,1
+2d,0
+f,1
+9,0
+13,1
+7,0
+5,1
+2d,0
+f,1
+9,0
+13,1
+7,0
+5,1
+2d,0
+f,1
+9,0
+13,1
+39,0
+f,1
+9,0
+13,1
+6cb,0
+100 90 32
+71a,0
+12,1
+b,0
+11,1
+36,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+12,1
+b,0
+11,1
+36,0
+5,1
+5f,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+2d,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+2d,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+e,1
+b,0
+11,1
+8,0
+5,1
+2d,0
+f,1
+9,0
+13,1
+7,0
+5,1
+2d,0
+f,1
+9,0
+13,1
+8,0
+3,1
+2e,0
+f,1
+9,0
+13,1
+39,0
+e,1
+b,0
+11,1
+6cc,0
+100 90 32
+71a,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+4,1
+60,0
+4,1
+15a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+15a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+732,0
+100 90 32
+71a,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+e,1
+a,0
+12,1
+8,0
+4,1
+2e,0
+e,1
+a,0
+12,1
+8,0
+4,1
+2e,0
+e,1
+a,0
+12,1
+3a,0
+e,1
+a,0
+12,1
+730,0
+100 90 32
+71a,0
+11,1
+d,0
+f,1
+37,0
+12,1
+b,0
+11,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+b,0
+11,1
+36,0
+4,1
+60,0
+4,1
+60,0
+4,1
+30,0
+1
+30,0
+3,1
+2f,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+30,0
+1
+2f,0
+4,1
+2f,0
+3,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2f,0
+3,1
+2e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+30,0
+1
+30,0
+3,1
+2f,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+30,0
+1
+2f,0
+4,1
+2f,0
+3,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+d,1
+d,0
+f,1
+9,0
+4,1
+2e,0
+e,1
+b,0
+11,1
+9,0
+3,1
+2e,0
+e,1
+a,0
+12,1
+3a,0
+e,1
+b,0
+11,1
+730,0
+100 90 32
+71a,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+6ce,0
+100 90 32
+71a,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+6ce,0
+100 90 32
+71a,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+f,1
+9,0
+13,1
+7,0
+5,1
+2d,0
+f,1
+9,0
+13,1
+7,0
+5,1
+2d,0
+f,1
+9,0
+13,1
+7,0
+5,1
+2d,0
+f,1
+9,0
+13,1
+39,0
+f,1
+9,0
+13,1
+6cb,0
+100 90 32
+71a,0
+12,1
+b,0
+11,1
+36,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+12,1
+b,0
+11,1
+36,0
+5,1
+5f,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+2d,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+2d,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2e,0
+3,1
+2e,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+e,1
+b,0
+11,1
+8,0
+5,1
+2d,0
+f,1
+9,0
+13,1
+7,0
+5,1
+2d,0
+f,1
+9,0
+13,1
+8,0
+3,1
+2e,0
+f,1
+9,0
+13,1
+39,0
+e,1
+b,0
+11,1
+6cc,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a38.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a38.dat
new file mode 100644
index 000000000..83ec0107a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a38.dat
@@ -0,0 +1,1288 @@
+! $XConsortium$
+100 90 32
+71c,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+4,2
+2f,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+4,0
+2
+2,3
+2,2
+2f,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+94,0
+3,2
+3
+2
+5f,0
+3,2
+3
+2
+5f,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2
+3
+f5,0
+3,2
+3
+2
+5f,0
+4,2
+3
+5f,0
+4,2
+3
+2d,0
+3
+2,2
+2,3
+2d,0
+3,3
+2,2
+2d,0
+2
+2,3
+2,2
+5f,0
+3
+4,2
+5f,0
+5,3
+f5,0
+4,3
+2
+5f,0
+3,3
+2
+3
+5f,0
+4,2
+3
+2d,0
+3,3
+2
+3
+2d,0
+3,2
+3
+2
+2d,0
+3
+2,2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,2
+3
+2
+3
+f5,0
+2,2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+3,2
+3
+2
+2d,0
+2
+3
+2
+3
+2
+2d,0
+3,2
+3
+2
+2d,0
+3
+2,2
+3
+2
+5f,0
+3,3
+2
+3
+5f,0
+3
+2,2
+2,3
+f5,0
+5,3
+5f,0
+5,3
+5f,0
+5,2
+2d,0
+3
+4,2
+2d,0
+4,3
+2
+2d,0
+2
+2,3
+2,2
+5f,0
+3
+2,2
+2,3
+5f,0
+3,3
+2
+3
+f5,0
+2,2
+3
+2
+3
+5f,0
+2,2
+3
+2
+3
+5f,0
+5,3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+31,0
+3
+2
+3
+2
+4,0
+2,2
+3
+2
+4,0
+2
+3
+2
+3
+4,0
+3,3
+2
+4,0
+2
+3
+2,2
+4,0
+3
+2,2
+3
+2,0
+2,2
+3
+2
+3
+31,0
+2
+3
+2
+3
+4,0
+2
+3
+2
+3
+4,0
+2,2
+3
+2
+4,0
+4,2
+4,0
+3
+3,2
+4,0
+2
+3
+2,2
+2,0
+2
+3
+2
+3
+2
+31,0
+2
+3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,2
+3
+2
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+38,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+4,2
+4,0
+4,3
+38,0
+2,3
+2,2
+4,0
+3
+2,2
+3
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+4,2
+4,0
+2,2
+2,3
+6c6,0
+100 90 32
+6b8,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+4,2
+2f,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+3,0
+2,3
+4,2
+2f,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+3,0
+2,2
+2,3
+2,2
+2f,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+93,0
+4,2
+3
+2
+5e,0
+4,2
+3
+2
+5e,0
+3
+2,2
+3
+2
+3
+2c,0
+3
+2,2
+3
+2
+3
+2c,0
+3
+2,2
+3
+2
+3
+2c,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+f4,0
+4,2
+3
+2
+5e,0
+5,2
+3
+5e,0
+5,2
+3
+2c,0
+2,3
+2,2
+2,3
+2c,0
+4,3
+2,2
+2c,0
+2,2
+2,3
+2,2
+5e,0
+2,3
+4,2
+5e,0
+2
+5,3
+f4,0
+5,3
+2
+5e,0
+4,3
+2
+3
+5e,0
+5,2
+3
+2c,0
+4,3
+2
+3
+2c,0
+4,2
+3
+2
+2c,0
+2,3
+2,2
+3
+2
+5e,0
+2,2
+3
+2
+3
+2
+5e,0
+3
+2,2
+3
+2
+3
+f4,0
+3
+2,2
+3
+2
+3
+5e,0
+3
+2,2
+3
+2
+3
+5e,0
+4,2
+3
+2
+2c,0
+2,2
+3
+2
+3
+2
+2c,0
+4,2
+3
+2
+2c,0
+2,3
+2,2
+3
+2
+5e,0
+4,3
+2
+3
+5e,0
+2,3
+2,2
+2,3
+f4,0
+6,3
+5e,0
+6,3
+5e,0
+6,2
+2c,0
+2,3
+4,2
+2c,0
+5,3
+2
+2c,0
+2,2
+2,3
+2,2
+5e,0
+2,3
+2,2
+2,3
+5e,0
+4,3
+2
+3
+f4,0
+3
+2,2
+3
+2
+3
+5e,0
+3
+2,2
+3
+2
+3
+5e,0
+6,3
+2c,0
+2,3
+2
+3
+2
+3
+2c,0
+3
+2,2
+3
+2
+3
+2
+3
+2
+4,0
+3
+2
+3
+2
+4,0
+2
+3
+2
+3
+4,0
+4,3
+4,0
+2
+3
+2,2
+4,0
+3
+2
+2,3
+0
+2,3
+2
+3
+2
+3
+31,0
+3
+2
+3
+2
+4,0
+2,2
+3
+2
+4,0
+2
+3
+2
+3
+4,0
+3,3
+2
+4,0
+2
+3
+2,2
+4,0
+3
+2,2
+3
+0
+3
+2,2
+3
+2
+3
+31,0
+2
+3
+2
+3
+4,0
+2
+3
+2
+3
+4,0
+2,2
+3
+2
+4,0
+4,2
+4,0
+3
+3,2
+4,0
+2
+3
+2,2
+0
+2,2
+3
+2
+3
+2
+31,0
+2
+3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,2
+3
+2
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+38,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+4,2
+4,0
+4,3
+38,0
+2,3
+2,2
+4,0
+3
+2,2
+3
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+4,2
+4,0
+2,2
+2,3
+6c6,0
+100 90 32
+6b8,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+4,2
+2f,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+5,3
+2f,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+3,0
+2,3
+4,2
+2f,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+3,0
+2,2
+2,3
+2,2
+2f,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+93,0
+4,2
+3
+2
+5e,0
+4,2
+3
+2
+5e,0
+3
+2,2
+3
+2
+3
+2c,0
+3
+2,2
+3
+2
+3
+2c,0
+3
+2,2
+3
+2
+3
+2c,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+5e,0
+2,3
+2
+3
+2
+3
+f4,0
+4,2
+3
+2
+5e,0
+5,2
+3
+5e,0
+5,2
+3
+2c,0
+2,3
+2,2
+2,3
+2c,0
+4,3
+2,2
+2c,0
+2,2
+2,3
+2,2
+5e,0
+2,3
+4,2
+5e,0
+2
+5,3
+f4,0
+5,3
+2
+5e,0
+4,3
+2
+3
+5e,0
+5,2
+3
+2c,0
+4,3
+2
+3
+2c,0
+4,2
+3
+2
+2c,0
+2,3
+2,2
+3
+2
+5e,0
+2,2
+3
+2
+3
+2
+5e,0
+3
+2,2
+3
+2
+3
+f4,0
+3
+2,2
+3
+2
+3
+5e,0
+3
+2,2
+3
+2
+3
+5e,0
+4,2
+3
+2
+2c,0
+2,2
+3
+2
+3
+2
+2c,0
+4,2
+3
+2
+2c,0
+2,3
+2,2
+3
+2
+5e,0
+4,3
+2
+3
+5e,0
+2,3
+2,2
+2,3
+f4,0
+6,3
+5e,0
+6,3
+5e,0
+6,2
+2c,0
+2,3
+4,2
+2c,0
+5,3
+2
+2c,0
+2,2
+2,3
+2,2
+5e,0
+2,3
+2,2
+2,3
+5e,0
+4,3
+2
+3
+f4,0
+3
+2,2
+3
+2
+3
+5e,0
+3
+2,2
+3
+2
+3
+5e,0
+6,3
+2c,0
+2,3
+2
+3
+2
+3
+2c,0
+3
+2,2
+3
+2
+3
+2
+3
+2
+4,0
+3
+2
+3
+2
+4,0
+2
+3
+2
+3
+4,0
+4,3
+4,0
+2
+3
+2,2
+4,0
+3
+2
+2,3
+0
+2,3
+2
+3
+2
+3
+31,0
+3
+2
+3
+2
+4,0
+2,2
+3
+2
+4,0
+2
+3
+2
+3
+4,0
+3,3
+2
+4,0
+2
+3
+2,2
+4,0
+3
+2,2
+3
+0
+3
+2,2
+3
+2
+3
+31,0
+2
+3
+2
+3
+4,0
+2
+3
+2
+3
+4,0
+2,2
+3
+2
+4,0
+4,2
+4,0
+3
+3,2
+4,0
+2
+3
+2,2
+0
+2,2
+3
+2
+3
+2
+31,0
+2
+3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,2
+3
+2
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+38,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+4,2
+4,0
+4,3
+38,0
+2,3
+2,2
+4,0
+3
+2,2
+3
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+4,2
+4,0
+2,2
+2,3
+6c6,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a39.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a39.dat
new file mode 100644
index 000000000..5f7671e24
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a39.dat
@@ -0,0 +1,661 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+106,0
+5,1
+5f,0
+2,1
+34,0
+1
+2f,0
+3,1
+2d,0
+4,1
+60,0
+1
+64,0
+3,1
+f6,0
+2,1
+c6,0
+5,1
+2d,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+f8,0
+2,1
+5f,0
+3,1
+64,0
+2,1
+2e,0
+3,1
+2e,0
+2,1
+98,0
+1
+5f,0
+5,1
+f5,0
+2,1
+64,0
+3,1
+5f,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+60,0
+1
+64,0
+3,1
+f6,0
+5,1
+c3,0
+5,1
+2d,0
+5,1
+2d,0
+2,1
+34,0
+1
+5f,0
+4,1
+60,0
+1
+fc,0
+2,1
+5f,0
+2,1
+98,0
+1
+2d,0
+5,1
+2d,0
+5,1
+33,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+1
+31,0
+4,1
+4,0
+4,1
+c,0
+4,1
+4,0
+4,1
+a,0
+5,1
+33,0
+2,1
+4,0
+3,1
+5,0
+4,1
+6,0
+2,1
+4,0
+3,1
+5,0
+4,1
+38,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+44,0
+3,1
+5,0
+3,1
+d,0
+3,1
+5,0
+3,1
+6c6,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+3,0
+1
+3c,0
+4,1
+14,0
+4,1
+a1,0
+1
+64,0
+5,1
+5e,0
+3,1
+2f,0
+1
+4,0
+1
+2f,0
+3,1
+2d,0
+4,1
+5f,0
+2,1
+64,0
+3,1
+f5,0
+3,1
+c5,0
+6,1
+2c,0
+6,1
+2c,0
+1
+36,0
+1
+5e,0
+6,1
+5e,0
+1
+4,0
+1
+f8,0
+2,1
+5e,0
+4,1
+64,0
+2,1
+2e,0
+3,1
+2d,0
+3,1
+2f,0
+1
+68,0
+1
+5e,0
+6,1
+f4,0
+3,1
+64,0
+3,1
+5e,0
+4,1
+2e,0
+2,1
+34,0
+2,1
+2e,0
+3,1
+5f,0
+2,1
+64,0
+3,1
+f5,0
+6,1
+5e,0
+1
+64,0
+5,1
+2c,0
+6,1
+2c,0
+3,1
+2f,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+fc,0
+2,1
+5e,0
+3,1
+98,0
+1
+2c,0
+9,1
+c,0
+4,1
+4,0
+4,1
+c,0
+4,1
+0
+6,1
+33,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+1
+31,0
+4,1
+4,0
+4,1
+c,0
+4,1
+4,0
+4,1
+9,0
+6,1
+33,0
+2,1
+4,0
+3,1
+5,0
+4,1
+6,0
+2,1
+4,0
+3,1
+5,0
+4,1
+38,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+44,0
+3,1
+5,0
+3,1
+d,0
+3,1
+5,0
+3,1
+6c6,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+3,0
+1
+3c,0
+4,1
+14,0
+4,1
+a1,0
+1
+64,0
+5,1
+5e,0
+3,1
+2f,0
+1
+4,0
+1
+2f,0
+3,1
+2d,0
+4,1
+5f,0
+2,1
+64,0
+3,1
+f5,0
+3,1
+c5,0
+6,1
+2c,0
+6,1
+2c,0
+1
+36,0
+1
+5e,0
+6,1
+5e,0
+1
+4,0
+1
+f8,0
+2,1
+5e,0
+4,1
+64,0
+2,1
+2e,0
+3,1
+2d,0
+3,1
+2f,0
+1
+68,0
+1
+5e,0
+6,1
+f4,0
+3,1
+64,0
+3,1
+5e,0
+4,1
+2e,0
+2,1
+34,0
+2,1
+2e,0
+3,1
+5f,0
+2,1
+64,0
+3,1
+f5,0
+6,1
+5e,0
+1
+64,0
+5,1
+2c,0
+6,1
+2c,0
+3,1
+2f,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+fc,0
+2,1
+5e,0
+3,1
+98,0
+1
+2c,0
+9,1
+c,0
+4,1
+4,0
+4,1
+c,0
+4,1
+0
+6,1
+33,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+1
+31,0
+4,1
+4,0
+4,1
+c,0
+4,1
+4,0
+4,1
+9,0
+6,1
+33,0
+2,1
+4,0
+3,1
+5,0
+4,1
+6,0
+2,1
+4,0
+3,1
+5,0
+4,1
+38,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+44,0
+3,1
+5,0
+3,1
+d,0
+3,1
+5,0
+3,1
+6c6,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a4.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a4.dat
new file mode 100644
index 000000000..0954c6797
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a4.dat
@@ -0,0 +1,139 @@
+! $XConsortium$
+100 90 32
+2c6,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+12dd,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a40.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a40.dat
new file mode 100644
index 000000000..5f7671e24
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a40.dat
@@ -0,0 +1,661 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+40,0
+4,1
+14,0
+4,1
+106,0
+5,1
+5f,0
+2,1
+34,0
+1
+2f,0
+3,1
+2d,0
+4,1
+60,0
+1
+64,0
+3,1
+f6,0
+2,1
+c6,0
+5,1
+2d,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+f8,0
+2,1
+5f,0
+3,1
+64,0
+2,1
+2e,0
+3,1
+2e,0
+2,1
+98,0
+1
+5f,0
+5,1
+f5,0
+2,1
+64,0
+3,1
+5f,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+60,0
+1
+64,0
+3,1
+f6,0
+5,1
+c3,0
+5,1
+2d,0
+5,1
+2d,0
+2,1
+34,0
+1
+5f,0
+4,1
+60,0
+1
+fc,0
+2,1
+5f,0
+2,1
+98,0
+1
+2d,0
+5,1
+2d,0
+5,1
+33,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+1
+31,0
+4,1
+4,0
+4,1
+c,0
+4,1
+4,0
+4,1
+a,0
+5,1
+33,0
+2,1
+4,0
+3,1
+5,0
+4,1
+6,0
+2,1
+4,0
+3,1
+5,0
+4,1
+38,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+44,0
+3,1
+5,0
+3,1
+d,0
+3,1
+5,0
+3,1
+6c6,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+3,0
+1
+3c,0
+4,1
+14,0
+4,1
+a1,0
+1
+64,0
+5,1
+5e,0
+3,1
+2f,0
+1
+4,0
+1
+2f,0
+3,1
+2d,0
+4,1
+5f,0
+2,1
+64,0
+3,1
+f5,0
+3,1
+c5,0
+6,1
+2c,0
+6,1
+2c,0
+1
+36,0
+1
+5e,0
+6,1
+5e,0
+1
+4,0
+1
+f8,0
+2,1
+5e,0
+4,1
+64,0
+2,1
+2e,0
+3,1
+2d,0
+3,1
+2f,0
+1
+68,0
+1
+5e,0
+6,1
+f4,0
+3,1
+64,0
+3,1
+5e,0
+4,1
+2e,0
+2,1
+34,0
+2,1
+2e,0
+3,1
+5f,0
+2,1
+64,0
+3,1
+f5,0
+6,1
+5e,0
+1
+64,0
+5,1
+2c,0
+6,1
+2c,0
+3,1
+2f,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+fc,0
+2,1
+5e,0
+3,1
+98,0
+1
+2c,0
+9,1
+c,0
+4,1
+4,0
+4,1
+c,0
+4,1
+0
+6,1
+33,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+1
+31,0
+4,1
+4,0
+4,1
+c,0
+4,1
+4,0
+4,1
+9,0
+6,1
+33,0
+2,1
+4,0
+3,1
+5,0
+4,1
+6,0
+2,1
+4,0
+3,1
+5,0
+4,1
+38,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+44,0
+3,1
+5,0
+3,1
+d,0
+3,1
+5,0
+3,1
+6c6,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+30,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+3b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+3,0
+1
+3c,0
+4,1
+14,0
+4,1
+a1,0
+1
+64,0
+5,1
+5e,0
+3,1
+2f,0
+1
+4,0
+1
+2f,0
+3,1
+2d,0
+4,1
+5f,0
+2,1
+64,0
+3,1
+f5,0
+3,1
+c5,0
+6,1
+2c,0
+6,1
+2c,0
+1
+36,0
+1
+5e,0
+6,1
+5e,0
+1
+4,0
+1
+f8,0
+2,1
+5e,0
+4,1
+64,0
+2,1
+2e,0
+3,1
+2d,0
+3,1
+2f,0
+1
+68,0
+1
+5e,0
+6,1
+f4,0
+3,1
+64,0
+3,1
+5e,0
+4,1
+2e,0
+2,1
+34,0
+2,1
+2e,0
+3,1
+5f,0
+2,1
+64,0
+3,1
+f5,0
+6,1
+5e,0
+1
+64,0
+5,1
+2c,0
+6,1
+2c,0
+3,1
+2f,0
+1
+4,0
+1
+5f,0
+4,1
+5f,0
+2,1
+fc,0
+2,1
+5e,0
+3,1
+98,0
+1
+2c,0
+9,1
+c,0
+4,1
+4,0
+4,1
+c,0
+4,1
+0
+6,1
+33,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+1
+31,0
+4,1
+4,0
+4,1
+c,0
+4,1
+4,0
+4,1
+9,0
+6,1
+33,0
+2,1
+4,0
+3,1
+5,0
+4,1
+6,0
+2,1
+4,0
+3,1
+5,0
+4,1
+38,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+44,0
+3,1
+5,0
+3,1
+d,0
+3,1
+5,0
+3,1
+6c6,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a41.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a41.dat
new file mode 100644
index 000000000..42fff1e01
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a41.dat
@@ -0,0 +1,781 @@
+! $XConsortium$
+100 90 32
+71a,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+4,1
+60,0
+4,1
+15a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+15a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+732,0
+100 90 32
+71a,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+6ce,0
+100 90 32
+71a,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+6ce,0
+100 90 32
+71a,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+4,1
+60,0
+4,1
+15a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+15a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+4,1
+2e,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+732,0
+100 90 32
+71a,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+6ce,0
+100 90 32
+71a,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+159,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+3c,0
+c,1
+e,0
+e,1
+6ce,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a42.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a42.dat
new file mode 100644
index 000000000..b63d09f2e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a42.dat
@@ -0,0 +1,1616 @@
+! $XConsortium$
+100 90 32
+71a,0
+9,3
+3,2
+10,3
+3,2
+10,3
+3,2
+4,3
+2e,0
+36,3
+2e,0
+8,2
+5,3
+e,2
+5,3
+e,2
+5,3
+3,2
+2e,0
+4,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2
+2e,0
+3,3
+2
+2e,0
+3
+2,2
+3
+2e,0
+4,2
+2e,0
+3,3
+2
+2e,0
+3,2
+3
+2e,0
+3
+2,2
+3
+2e,0
+3,2
+3
+2e,0
+2
+3
+2
+3
+2e,0
+2,2
+3
+2
+2e,0
+2,2
+3
+2
+2e,0
+2,2
+3
+2
+2e,0
+3
+2
+3
+2
+2e,0
+4,3
+2e,0
+3
+2
+3
+2
+2e,0
+2,2
+3
+2
+2e,0
+3
+2
+3
+2
+2e,0
+2,2
+3
+2
+2e,0
+2,2
+3
+2
+2e,0
+3,2
+3
+2e,0
+2
+3
+2
+3
+2e,0
+3,2
+3
+2e,0
+3
+2,2
+3
+2e,0
+4,2
+2e,0
+3,3
+2
+2e,0
+4,2
+2e,0
+3
+2,2
+3
+2e,0
+3,3
+2
+2e,0
+2
+2,3
+2
+2e,0
+4,2
+2e,0
+3
+3,2
+2e,0
+4,3
+2e,0
+4,3
+2e,0
+4,3
+2e,0
+4,3
+2e,0
+4,2
+2e,0
+3
+3,2
+2e,0
+4,3
+2e,0
+2
+2,3
+2
+2e,0
+3,3
+2
+2e,0
+3
+2,2
+3
+2e,0
+4,2
+2e,0
+3,3
+2
+2e,0
+3,2
+3
+2e,0
+3
+2,2
+3
+2e,0
+3,2
+3
+2e,0
+2
+3
+2
+3
+2e,0
+2,2
+3
+2
+2e,0
+2,2
+3
+2
+2e,0
+2,2
+3
+2
+2e,0
+3
+2
+3
+2
+2e,0
+4,3
+2e,0
+3
+2
+3
+2
+2e,0
+2,2
+3
+2
+2e,0
+3
+2
+3
+2
+2e,0
+2,2
+3
+2
+2e,0
+2,2
+3
+2
+2e,0
+3,2
+3
+2e,0
+2
+3
+2
+3
+2e,0
+3,2
+3
+2e,0
+3
+2,2
+3
+2e,0
+4,2
+2e,0
+3,3
+2
+2e,0
+4,2
+2e,0
+3
+2,2
+3
+2e,0
+3,3
+2
+2e,0
+2
+2,3
+2
+2e,0
+4,2
+2e,0
+3
+3,2
+2e,0
+4,3
+2e,0
+4,3
+2e,0
+4,3
+2e,0
+4,3
+2e,0
+4,2
+2e,0
+3
+3,2
+2e,0
+4,3
+2e,0
+2
+2,3
+2
+2e,0
+3,3
+2
+2e,0
+3
+2,2
+3
+2e,0
+4,2
+2e,0
+3,3
+2
+2e,0
+3,2
+3
+2e,0
+3
+2,2
+3
+2e,0
+3,2
+3
+2e,0
+2
+3
+2
+3
+2e,0
+2,2
+3
+2
+2e,0
+2,2
+3
+2
+2e,0
+2,2
+3
+2
+2e,0
+3
+2
+3
+2
+2e,0
+4,3
+2e,0
+3
+2
+3
+2
+2e,0
+2,2
+3
+2
+2e,0
+3
+2
+3
+2
+2e,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+2e,0
+3,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2e,0
+3,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2e,0
+4,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+724,0
+100 90 32
+71a,0
+9,3
+3,2
+10,3
+3,2
+10,3
+3,2
+5,3
+2d,0
+37,3
+2d,0
+8,2
+5,3
+e,2
+5,3
+e,2
+5,3
+4,2
+2d,0
+4,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+2d,0
+3,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2d,0
+4,2
+3
+2d,0
+3,3
+2
+3
+2d,0
+3,2
+3
+2
+2d,0
+3
+2,2
+3
+2
+2d,0
+3,2
+3
+2
+2d,0
+2
+3
+2
+3
+2
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+5,3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3,2
+3
+2
+2d,0
+2
+3
+2
+3
+2
+2d,0
+3,2
+3
+2
+2d,0
+3
+2,2
+3
+2
+2d,0
+4,2
+3
+2d,0
+3,3
+2
+3
+2d,0
+4,2
+3
+2d,0
+3
+2,2
+2,3
+2d,0
+3,3
+2,2
+2d,0
+2
+2,3
+2,2
+2d,0
+5,2
+2d,0
+3
+4,2
+2d,0
+5,3
+2d,0
+5,3
+2d,0
+5,3
+2d,0
+5,3
+2d,0
+5,2
+2d,0
+3
+4,2
+2d,0
+4,3
+2
+2d,0
+2
+2,3
+2,2
+2d,0
+3,3
+2
+3
+2d,0
+3
+2,2
+2,3
+2d,0
+4,2
+3
+2d,0
+3,3
+2
+3
+2d,0
+3,2
+3
+2
+2d,0
+3
+2,2
+3
+2
+2d,0
+3,2
+3
+2
+2d,0
+2
+3
+2
+3
+2
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+5,3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3,2
+3
+2
+2d,0
+2
+3
+2
+3
+2
+2d,0
+3,2
+3
+2
+2d,0
+3
+2,2
+3
+2
+2d,0
+4,2
+3
+2d,0
+3,3
+2
+3
+2d,0
+4,2
+3
+2d,0
+3
+2,2
+2,3
+2d,0
+3,3
+2,2
+2d,0
+2
+2,3
+2,2
+2d,0
+5,2
+2d,0
+3
+4,2
+2d,0
+5,3
+2d,0
+5,3
+2d,0
+5,3
+2d,0
+5,3
+2d,0
+5,2
+2d,0
+3
+4,2
+2d,0
+4,3
+2
+2d,0
+2
+2,3
+2,2
+2d,0
+3,3
+2
+3
+2d,0
+3
+2,2
+2,3
+2d,0
+4,2
+3
+2d,0
+3,3
+2
+3
+2d,0
+3,2
+3
+2
+2d,0
+3
+2,2
+3
+2
+2d,0
+3,2
+3
+2
+2d,0
+2
+3
+2
+3
+2
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+5,3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2d,0
+3,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+2d,0
+3,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+2d,0
+4,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+2d,0
+4,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6bf,0
+100 90 32
+71a,0
+9,3
+3,2
+10,3
+3,2
+10,3
+3,2
+5,3
+2d,0
+37,3
+2d,0
+8,2
+5,3
+e,2
+5,3
+e,2
+5,3
+4,2
+2d,0
+4,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+2d,0
+3,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2d,0
+4,2
+3
+2d,0
+3,3
+2
+3
+2d,0
+3,2
+3
+2
+2d,0
+3
+2,2
+3
+2
+2d,0
+3,2
+3
+2
+2d,0
+2
+3
+2
+3
+2
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+5,3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3,2
+3
+2
+2d,0
+2
+3
+2
+3
+2
+2d,0
+3,2
+3
+2
+2d,0
+3
+2,2
+3
+2
+2d,0
+4,2
+3
+2d,0
+3,3
+2
+3
+2d,0
+4,2
+3
+2d,0
+3
+2,2
+2,3
+2d,0
+3,3
+2,2
+2d,0
+2
+2,3
+2,2
+2d,0
+5,2
+2d,0
+3
+4,2
+2d,0
+5,3
+2d,0
+5,3
+2d,0
+5,3
+2d,0
+5,3
+2d,0
+5,2
+2d,0
+3
+4,2
+2d,0
+4,3
+2
+2d,0
+2
+2,3
+2,2
+2d,0
+3,3
+2
+3
+2d,0
+3
+2,2
+2,3
+2d,0
+4,2
+3
+2d,0
+3,3
+2
+3
+2d,0
+3,2
+3
+2
+2d,0
+3
+2,2
+3
+2
+2d,0
+3,2
+3
+2
+2d,0
+2
+3
+2
+3
+2
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+5,3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3,2
+3
+2
+2d,0
+2
+3
+2
+3
+2
+2d,0
+3,2
+3
+2
+2d,0
+3
+2,2
+3
+2
+2d,0
+4,2
+3
+2d,0
+3,3
+2
+3
+2d,0
+4,2
+3
+2d,0
+3
+2,2
+2,3
+2d,0
+3,3
+2,2
+2d,0
+2
+2,3
+2,2
+2d,0
+5,2
+2d,0
+3
+4,2
+2d,0
+5,3
+2d,0
+5,3
+2d,0
+5,3
+2d,0
+5,3
+2d,0
+5,2
+2d,0
+3
+4,2
+2d,0
+4,3
+2
+2d,0
+2
+2,3
+2,2
+2d,0
+3,3
+2
+3
+2d,0
+3
+2,2
+2,3
+2d,0
+4,2
+3
+2d,0
+3,3
+2
+3
+2d,0
+3,2
+3
+2
+2d,0
+3
+2,2
+3
+2
+2d,0
+3,2
+3
+2
+2d,0
+2
+3
+2
+3
+2
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+5,3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2d,0
+3
+2
+3
+2
+3
+2d,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2d,0
+3,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+2d,0
+3,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+2d,0
+4,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+2d,0
+4,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6bf,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a43.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a43.dat
new file mode 100644
index 000000000..583104050
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a43.dat
@@ -0,0 +1,797 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+2e,0
+3,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+2e,0
+2,1
+b,0
+d,1
+b,0
+d,1
+96,0
+4,1
+2e,0
+4,1
+92,0
+4,1
+2e,0
+4,1
+2e,0
+2,1
+64,0
+2,1
+2e,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+1
+2f,0
+3,1
+2e,0
+3,1
+2f,0
+1
+34,0
+1
+2f,0
+3,1
+2e,0
+2,1
+c6,0
+4,1
+2e,0
+4,1
+92,0
+4,1
+2e,0
+4,1
+2e,0
+2,1
+64,0
+2,1
+2e,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+1
+2f,0
+3,1
+2e,0
+3,1
+2f,0
+1
+34,0
+1
+2f,0
+3,1
+2e,0
+2,1
+c6,0
+4,1
+2e,0
+4,1
+92,0
+4,1
+2e,0
+4,1
+2e,0
+2,1
+64,0
+2,1
+2e,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+1
+2f,0
+3,1
+2e,0
+3,1
+2f,0
+1
+34,0
+1
+2f,0
+3,1
+2e,0
+2,1
+c6,0
+4,1
+2e,0
+4,1
+92,0
+4,1
+2e,0
+4,1
+2e,0
+2,1
+64,0
+2,1
+2e,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+1
+2f,0
+3,1
+2e,0
+3,1
+2f,0
+1
+34,0
+1
+2f,0
+3,1
+2e,0
+2,1
+c6,0
+4,1
+2e,0
+4,1
+34,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+34,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+6,1
+2e,0
+2,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+34,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+724,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+2e,0
+3,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+2e,0
+2,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+c,0
+1
+2d,0
+5,1
+2d,0
+5,1
+63,0
+1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+2,1
+34,0
+1
+2f,0
+3,1
+2d,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+2,1
+98,0
+1
+2d,0
+5,1
+2d,0
+5,1
+63,0
+1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+2,1
+34,0
+1
+2f,0
+3,1
+2d,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+2,1
+98,0
+1
+2d,0
+5,1
+2d,0
+5,1
+63,0
+1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+2,1
+34,0
+1
+2f,0
+3,1
+2d,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+2,1
+98,0
+1
+2d,0
+5,1
+2d,0
+5,1
+63,0
+1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+2,1
+34,0
+1
+2f,0
+3,1
+2d,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+2,1
+98,0
+1
+2d,0
+5,1
+2d,0
+5,1
+33,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+1
+2d,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+7,1
+2d,0
+2,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+1
+2f,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+2e,0
+3,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+6c3,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+2e,0
+3,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+2e,0
+2,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+c,0
+1
+2d,0
+5,1
+2d,0
+5,1
+63,0
+1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+2,1
+34,0
+1
+2f,0
+3,1
+2d,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+2,1
+98,0
+1
+2d,0
+5,1
+2d,0
+5,1
+63,0
+1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+2,1
+34,0
+1
+2f,0
+3,1
+2d,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+2,1
+98,0
+1
+2d,0
+5,1
+2d,0
+5,1
+63,0
+1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+2,1
+34,0
+1
+2f,0
+3,1
+2d,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+2,1
+98,0
+1
+2d,0
+5,1
+2d,0
+5,1
+63,0
+1
+2d,0
+5,1
+2d,0
+5,1
+2d,0
+2,1
+34,0
+1
+2f,0
+3,1
+2d,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+2e,0
+3,1
+2e,0
+2,1
+98,0
+1
+2d,0
+5,1
+2d,0
+5,1
+33,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+1
+2d,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+7,1
+2d,0
+2,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+1
+2f,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+2e,0
+3,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+6c3,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a44.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a44.dat
new file mode 100644
index 000000000..f8c2ff13f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a44.dat
@@ -0,0 +1,473 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+38,0
+3,1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+38,0
+2,1
+b,0
+3,1
+15,0
+7,1
+9c,0
+4,1
+1be,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+128,0
+4,1
+c4,0
+4,1
+94,0
+2,1
+2e,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+1
+60,0
+3,1
+64,0
+1
+60,0
+2,1
+c6,0
+4,1
+c4,0
+4,1
+60,0
+2,1
+64,0
+2,1
+60,0
+3,1
+64,0
+1
+222,0
+4,1
+c4,0
+4,1
+c4,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+f6,0
+4,1
+2e,0
+4,1
+34,0
+4,1
+14,0
+4,1
+2,0
+4,1
+3c,0
+9,1
+0
+2,1
+e,0
+7,1
+0
+6,1
+3c,0
+2,1
+4,0
+6,1
+12,0
+9,1
+3f,0
+4,1
+3,0
+3,1
+e,0
+4,1
+3,0
+4,1
+2,0
+1
+732,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+38,0
+3,1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+38,0
+2,1
+b,0
+3,1
+15,0
+7,1
+3e,0
+a,1
+e,0
+c,1
+3a,0
+5,1
+15d,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+2f,0
+3,1
+2d,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+5f,0
+3,1
+64,0
+2,1
+5f,0
+2,1
+c6,0
+5,1
+c3,0
+5,1
+5f,0
+2,1
+64,0
+3,1
+5f,0
+3,1
+64,0
+2,1
+1c1,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+2d,0
+5,1
+2d,0
+5,1
+33,0
+4,1
+14,0
+4,1
+2,0
+4,1
+3c,0
+9,1
+0
+2,1
+e,0
+7,1
+0
+6,1
+3c,0
+2,1
+4,0
+6,1
+12,0
+9,1
+3f,0
+4,1
+3,0
+3,1
+e,0
+4,1
+3,0
+4,1
+2,0
+1
+3c,0
+3,1
+17,0
+1
+a,0
+3,1
+6ce,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+38,0
+3,1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+38,0
+2,1
+b,0
+3,1
+15,0
+7,1
+3e,0
+a,1
+e,0
+c,1
+3a,0
+5,1
+15d,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+2f,0
+3,1
+2d,0
+4,1
+2e,0
+3,1
+2f,0
+1
+34,0
+2,1
+5f,0
+3,1
+64,0
+2,1
+5f,0
+2,1
+c6,0
+5,1
+c3,0
+5,1
+5f,0
+2,1
+64,0
+3,1
+5f,0
+3,1
+64,0
+2,1
+1c1,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+5,1
+63,0
+1
+5f,0
+4,1
+60,0
+1
+64,0
+3,1
+60,0
+1
+64,0
+3,1
+c8,0
+1
+2d,0
+5,1
+2d,0
+5,1
+33,0
+4,1
+14,0
+4,1
+2,0
+4,1
+3c,0
+9,1
+0
+2,1
+e,0
+7,1
+0
+6,1
+3c,0
+2,1
+4,0
+6,1
+12,0
+9,1
+3f,0
+4,1
+3,0
+3,1
+e,0
+4,1
+3,0
+4,1
+2,0
+1
+3c,0
+3,1
+17,0
+1
+a,0
+3,1
+6ce,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a50.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a50.dat
new file mode 100644
index 000000000..bf831e62c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a50.dat
@@ -0,0 +1,139 @@
+! $XConsortium$
+100 90 32
+197,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+11ae,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a51.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a51.dat
new file mode 100644
index 000000000..f38f3a7a1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a51.dat
@@ -0,0 +1,17 @@
+! $XConsortium$
+100 90 32
+19a,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+1efa,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a52.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a52.dat
new file mode 100644
index 000000000..88466bc30
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a52.dat
@@ -0,0 +1,139 @@
+! $XConsortium$
+100 90 32
+199,0
+3f,1
+24,0
+41,1
+22,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+22,0
+41,1
+24,0
+3f,1
+11b0,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a53.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a53.dat
new file mode 100644
index 000000000..73f66e8cc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a53.dat
@@ -0,0 +1,139 @@
+! $XConsortium$
+100 90 32
+19a,0
+3d,1
+26,0
+3f,1
+24,0
+41,1
+22,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+7,1
+35,0
+7,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+22,0
+41,1
+24,0
+3f,1
+26,0
+3d,1
+11b1,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a54.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a54.dat
new file mode 100644
index 000000000..f38f3a7a1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a54.dat
@@ -0,0 +1,17 @@
+! $XConsortium$
+100 90 32
+19a,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+1efa,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a57.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a57.dat
new file mode 100644
index 000000000..0954c6797
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a57.dat
@@ -0,0 +1,139 @@
+! $XConsortium$
+100 90 32
+2c6,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+12dd,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a58.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a58.dat
new file mode 100644
index 000000000..9a958740e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a58.dat
@@ -0,0 +1,740 @@
+! $XConsortium$
+100 90 32
+132,0
+2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+20,0
+8,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+2
+20,0
+2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+20,0
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+20,0
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+20,0
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+20,0
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+2,3
+20,0
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+20,0
+2,2
+3,3
+2,2
+3
+34,0
+2,3
+2,2
+3
+2
+3
+2
+20,0
+3
+5,2
+3
+2
+34,0
+3,2
+3
+2
+3
+2
+3
+20,0
+2
+5,3
+2,2
+34,0
+3,3
+2,2
+3
+2
+3
+20,0
+8,3
+34,0
+5,3
+2
+3
+2
+20,0
+2
+5,3
+2,2
+34,0
+3,3
+2,2
+2,3
+2
+20,0
+3
+5,2
+2,3
+34,0
+3,2
+2,3
+3,2
+20,0
+2
+5,3
+2,2
+34,0
+3,3
+5,2
+20,0
+2,3
+3,2
+3,3
+34,0
+2,2
+6,3
+20,0
+8,3
+34,0
+8,3
+20,0
+2
+5,3
+2,2
+34,0
+3,3
+5,2
+20,0
+3
+5,2
+2,3
+34,0
+3,2
+2,3
+2,2
+3
+20,0
+2
+5,3
+2,2
+34,0
+3,3
+2,2
+2,3
+2
+20,0
+8,3
+34,0
+5,3
+2
+3
+2
+20,0
+2
+5,3
+2,2
+34,0
+3,3
+2,2
+3
+2
+3
+20,0
+3
+5,2
+3
+2
+34,0
+3,2
+3
+2
+3
+2
+3
+20,0
+2,2
+3,3
+2,2
+3
+34,0
+2,3
+2,2
+3
+2
+3
+2
+20,0
+2
+5,3
+2
+3
+34,0
+3,3
+2
+3
+2
+3
+2
+20,0
+2
+5,3
+2
+3
+34,0
+3,3
+2
+3
+2
+2,3
+20,0
+2
+5,3
+2
+3
+34,0
+3,3
+2
+3
+2
+3
+2
+20,0
+2,2
+3,3
+2,2
+3
+34,0
+2,3
+2,2
+3
+2
+3
+2
+20,0
+3
+5,2
+3
+2
+34,0
+3,2
+3
+2
+3
+2
+3
+20,0
+2
+5,3
+2,2
+34,0
+3,3
+2,2
+3
+2
+3
+20,0
+8,3
+34,0
+5,3
+2
+3
+2
+20,0
+2
+5,3
+2,2
+34,0
+3,3
+2,2
+2,3
+2
+20,0
+3
+5,2
+2,3
+34,0
+3,2
+2,3
+3,2
+20,0
+2
+5,3
+2,2
+34,0
+3,3
+5,2
+20,0
+2,3
+3,2
+10,3
+3,2
+10,3
+3,2
+10,3
+3,2
+6,3
+20,0
+44,3
+20,0
+2
+5,3
+e,2
+5,3
+e,2
+5,3
+e,2
+5,3
+5,2
+20,0
+3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+3
+20,0
+2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+20,0
+8,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+2
+20,0
+2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+20,0
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+11ae,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a59.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a59.dat
new file mode 100644
index 000000000..e62ccbb0d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a59.dat
@@ -0,0 +1,436 @@
+! $XConsortium$
+100 90 32
+132,0
+6,3
+6,2
+9,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+8,3
+20,0
+3,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+2,3
+20,0
+3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+2,2
+20,0
+2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+5,2
+20,0
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+20,0
+2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+5,2
+20,0
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+20,0
+2
+d,3
+b,2
+d,3
+b,2
+d,3
+6,2
+20,0
+6,3
+2,2
+34,0
+6,2
+2,3
+20,0
+6,2
+2,3
+34,0
+8,3
+20,0
+8,3
+34,0
+6,2
+2,3
+20,0
+6,3
+2,2
+34,0
+8,3
+20,0
+3,3
+3,2
+2,3
+34,0
+2,3
+4,2
+2,3
+20,0
+3
+2,2
+5,3
+34,0
+2,2
+4,3
+2,2
+20,0
+2
+5,3
+2,2
+34,0
+3,3
+5,2
+20,0
+6,2
+2,3
+34,0
+3,2
+3,3
+2
+3
+20,0
+2
+4,3
+3,2
+34,0
+3,3
+5,2
+20,0
+2
+7,3
+34,0
+3,2
+3,3
+2
+3
+20,0
+2
+7,3
+34,0
+2,3
+6,2
+20,0
+6,3
+2,2
+34,0
+6,2
+2,3
+20,0
+6,2
+2,3
+34,0
+8,3
+20,0
+8,3
+34,0
+6,2
+2,3
+20,0
+6,3
+2,2
+34,0
+8,3
+20,0
+3,3
+3,2
+2,3
+34,0
+2,3
+4,2
+2,3
+20,0
+3
+2,2
+5,3
+34,0
+2,2
+4,3
+2,2
+20,0
+2
+5,3
+2,2
+34,0
+3,3
+5,2
+20,0
+6,2
+2,3
+34,0
+3,2
+3,3
+2
+3
+20,0
+2
+4,3
+3,2
+34,0
+3,3
+5,2
+20,0
+2
+7,3
+34,0
+3,2
+3,3
+2
+3
+20,0
+2
+7,3
+34,0
+2,3
+6,2
+20,0
+6,3
+2,2
+34,0
+6,2
+2,3
+20,0
+6,2
+2,3
+34,0
+8,3
+20,0
+8,3
+34,0
+6,2
+2,3
+20,0
+6,3
+2,2
+34,0
+8,3
+20,0
+3,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+2,3
+20,0
+3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+2,2
+20,0
+2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+5,2
+20,0
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+20,0
+2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+5,2
+20,0
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+20,0
+2
+d,3
+b,2
+d,3
+b,2
+d,3
+6,2
+20,0
+6,3
+c,2
+c,3
+c,2
+c,3
+c,2
+2,3
+11ae,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a60.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a60.dat
new file mode 100644
index 000000000..46cb05565
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a60.dat
@@ -0,0 +1,375 @@
+! $XConsortium$
+100 90 32
+132,0
+6,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+8,1
+20,0
+3,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+2,1
+20,0
+1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+23,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+21,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+26,0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+21,0
+d,1
+b,0
+d,1
+b,0
+d,1
+26,0
+6,1
+3c,0
+2,1
+26,0
+2,1
+34,0
+8,1
+20,0
+8,1
+3a,0
+2,1
+20,0
+6,1
+36,0
+8,1
+20,0
+3,1
+3,0
+2,1
+34,0
+2,1
+4,0
+2,1
+20,0
+1
+2,0
+5,1
+36,0
+4,1
+23,0
+5,1
+36,0
+3,1
+2b,0
+2,1
+37,0
+3,1
+0
+1
+21,0
+4,1
+37,0
+3,1
+26,0
+7,1
+37,0
+3,1
+0
+1
+21,0
+7,1
+34,0
+2,1
+26,0
+6,1
+3c,0
+2,1
+26,0
+2,1
+34,0
+8,1
+20,0
+8,1
+3a,0
+2,1
+20,0
+6,1
+36,0
+8,1
+20,0
+3,1
+3,0
+2,1
+34,0
+2,1
+4,0
+2,1
+20,0
+1
+2,0
+5,1
+36,0
+4,1
+23,0
+5,1
+36,0
+3,1
+2b,0
+2,1
+37,0
+3,1
+0
+1
+21,0
+4,1
+37,0
+3,1
+26,0
+7,1
+37,0
+3,1
+0
+1
+21,0
+7,1
+34,0
+2,1
+26,0
+6,1
+3c,0
+2,1
+26,0
+2,1
+34,0
+8,1
+20,0
+8,1
+3a,0
+2,1
+20,0
+6,1
+36,0
+8,1
+20,0
+3,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+2,1
+20,0
+1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+23,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+21,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+26,0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+21,0
+d,1
+b,0
+d,1
+b,0
+d,1
+26,0
+6,1
+c,0
+c,1
+c,0
+c,1
+c,0
+2,1
+11ae,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a64.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a64.dat
new file mode 100644
index 000000000..12b6d8640
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a64.dat
@@ -0,0 +1,277 @@
+! $XConsortium$
+100 90 32
+2c6,0
+17,1
+4d,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+17c9,0
+100 90 32
+bc2,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+17,1
+1303,0
+100 90 32
+2328,0
+100 90 32
+2dd,0
+21,1
+202a,0
+100 90 32
+1025,0
+21,1
+12e2,0
+100 90 32
+2328,0
+100 90 32
+2fe,0
+5,1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+178d,0
+100 90 32
+bfe,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+5f,0
+5,1
+12dd,0
+100 90 32
+2328,0
+100 90 32
+bc2,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+17,1
+1303,0
+100 90 32
+2328,0
+100 90 32
+2dd,0
+21,1
+202a,0
+100 90 32
+1025,0
+21,1
+12e2,0
+100 90 32
+2328,0
+100 90 32
+2fe,0
+5,1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+178d,0
+100 90 32
+bfe,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+5f,0
+5,1
+12dd,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a67.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a67.dat
new file mode 100644
index 000000000..c805dc6ff
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a67.dat
@@ -0,0 +1,117 @@
+! $XConsortium$
+100 90 32
+2c8,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+2,1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+9f,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+9f,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+9f,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+9f,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+9f,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+9f,0
+1
+27,0
+1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+12df,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a69.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a69.dat
new file mode 100644
index 000000000..23d087af2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a69.dat
@@ -0,0 +1,4695 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+2c6,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+12dd,0
+100 90 32
+2c6,0
+3d,2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+3d,2
+12dd,0
+100 90 32
+2c6,0
+3d,3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3d,3
+12dd,0
+100 90 32
+2c6,0
+3d,4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+3d,4
+12dd,0
+100 90 32
+2c6,0
+3d,6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+3d,6
+12dd,0
+100 90 32
+2c6,0
+3d,7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+3d,7
+12dd,0
+100 90 32
+2c6,0
+3d,10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+3d,10
+12dd,0
+100 90 32
+2c6,0
+3d,33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+3d,33
+12dd,0
+100 90 32
+2c6,0
+3d,81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+3d,81
+12dd,0
+100 90 32
+2c6,0
+3d,a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+3d,a3
+12dd,0
+100 90 32
+2c6,0
+3d,ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+3d,ff
+12dd,0
+100 90 32
+2c6,0
+3d,100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+3d,100
+12dd,0
+100 90 32
+2c6,0
+3d,12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+3d,12c
+12dd,0
+100 90 32
+2c6,0
+3d,3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3d,3e8
+12dd,0
+100 90 32
+2c6,0
+3d,111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+3d,111111
+12dd,0
+100 90 32
+2c6,0
+3d,400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+3d,400200
+12dd,0
+100 90 32
+2c6,0
+3d,777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+3d,777777
+12dd,0
+100 90 32
+2c6,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+12dd,0
+100 90 32
+2c6,0
+3d,2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+3d,2
+12dd,0
+100 90 32
+2c6,0
+3d,3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3d,3
+12dd,0
+100 90 32
+2c6,0
+3d,4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+3d,4
+12dd,0
+100 90 32
+2c6,0
+3d,6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+3d,6
+12dd,0
+100 90 32
+2c6,0
+3d,7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+3d,7
+12dd,0
+100 90 32
+2c6,0
+3d,10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+3d,10
+12dd,0
+100 90 32
+2c6,0
+3d,33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+3d,33
+12dd,0
+100 90 32
+2c6,0
+3d,81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+3d,81
+12dd,0
+100 90 32
+2c6,0
+3d,a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+3d,a3
+12dd,0
+100 90 32
+2c6,0
+3d,ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+3d,ff
+12dd,0
+100 90 32
+2c6,0
+3d,100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+3d,100
+12dd,0
+100 90 32
+2c6,0
+3d,12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+3d,12c
+12dd,0
+100 90 32
+2c6,0
+3d,3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3d,3e8
+12dd,0
+100 90 32
+2c6,0
+3d,111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+3d,111111
+12dd,0
+100 90 32
+2c6,0
+3d,400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+3d,400200
+12dd,0
+100 90 32
+2c6,0
+3d,777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+3d,777777
+12dd,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a71.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a71.dat
new file mode 100644
index 000000000..23d087af2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a71.dat
@@ -0,0 +1,4695 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+2c6,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+12dd,0
+100 90 32
+2c6,0
+3d,2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+3d,2
+12dd,0
+100 90 32
+2c6,0
+3d,3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3d,3
+12dd,0
+100 90 32
+2c6,0
+3d,4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+3d,4
+12dd,0
+100 90 32
+2c6,0
+3d,6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+3d,6
+12dd,0
+100 90 32
+2c6,0
+3d,7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+3d,7
+12dd,0
+100 90 32
+2c6,0
+3d,10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+3d,10
+12dd,0
+100 90 32
+2c6,0
+3d,33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+3d,33
+12dd,0
+100 90 32
+2c6,0
+3d,81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+3d,81
+12dd,0
+100 90 32
+2c6,0
+3d,a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+3d,a3
+12dd,0
+100 90 32
+2c6,0
+3d,ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+3d,ff
+12dd,0
+100 90 32
+2c6,0
+3d,100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+3d,100
+12dd,0
+100 90 32
+2c6,0
+3d,12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+3d,12c
+12dd,0
+100 90 32
+2c6,0
+3d,3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3d,3e8
+12dd,0
+100 90 32
+2c6,0
+3d,111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+3d,111111
+12dd,0
+100 90 32
+2c6,0
+3d,400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+3d,400200
+12dd,0
+100 90 32
+2c6,0
+3d,777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+3d,777777
+12dd,0
+100 90 32
+2c6,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+12dd,0
+100 90 32
+2c6,0
+3d,2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+3d,2
+12dd,0
+100 90 32
+2c6,0
+3d,3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3d,3
+12dd,0
+100 90 32
+2c6,0
+3d,4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+3d,4
+12dd,0
+100 90 32
+2c6,0
+3d,6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+3d,6
+12dd,0
+100 90 32
+2c6,0
+3d,7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+3d,7
+12dd,0
+100 90 32
+2c6,0
+3d,10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+3d,10
+12dd,0
+100 90 32
+2c6,0
+3d,33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+3d,33
+12dd,0
+100 90 32
+2c6,0
+3d,81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+3d,81
+12dd,0
+100 90 32
+2c6,0
+3d,a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+3d,a3
+12dd,0
+100 90 32
+2c6,0
+3d,ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+3d,ff
+12dd,0
+100 90 32
+2c6,0
+3d,100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+3d,100
+12dd,0
+100 90 32
+2c6,0
+3d,12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+3d,12c
+12dd,0
+100 90 32
+2c6,0
+3d,3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3d,3e8
+12dd,0
+100 90 32
+2c6,0
+3d,111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+3d,111111
+12dd,0
+100 90 32
+2c6,0
+3d,400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+3d,400200
+12dd,0
+100 90 32
+2c6,0
+3d,777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+3d,777777
+12dd,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a73.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a73.dat
new file mode 100644
index 000000000..d3e4749ac
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a73.dat
@@ -0,0 +1,1151 @@
+! $XConsortium$
+100 90 32
+2c6,0
+5,1
+6,0
+12,1
+6,0
+12,1
+6,0
+2,1
+27,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+63,0
+1
+8b,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+63,0
+1
+8b,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+63,0
+1
+8b,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+3,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+8,1
+12dd,0
+100 90 32
+2c6,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+1
+63,0
+1
+c7,0
+1
+c7,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+63,0
+1
+c7,0
+1
+c7,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+63,0
+1
+c7,0
+1
+c7,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+2a,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+4,1
+12dd,0
+100 90 32
+2d1,0
+c,1
+c,0
+c,1
+c,0
+2,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+63,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+9f,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+63,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+9f,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+63,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+9f,0
+1
+27,0
+11,1
+6,0
+12,1
+6,0
+e,1
+12dd,0
+100 90 32
+2c6,0
+3,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+28,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+c7,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+63,0
+1
+3b,0
+1
+c7,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+c7,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+63,0
+1
+3b,0
+1
+8c,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+12dd,0
+100 90 32
+2d2,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2d,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+c7,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+c7,0
+1
+9f,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+c7,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+12de,0
+100 90 32
+2c6,0
+3d,1
+8b,0
+1
+3b,0
+1
+8b,0
+1
+9f,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+27,0
+1
+c7,0
+1
+c7,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+8b,0
+1
+9f,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+27,0
+1
+64,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+12de,0
+100 90 32
+2c6,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+1
+63,0
+1
+c7,0
+1
+c7,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+63,0
+1
+c7,0
+1
+c7,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+63,0
+1
+c7,0
+1
+c7,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+2a,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+4,1
+12dd,0
+100 90 32
+2d1,0
+c,1
+c,0
+c,1
+c,0
+2,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+63,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+9f,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+63,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+9f,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+63,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+9f,0
+1
+27,0
+11,1
+6,0
+12,1
+6,0
+e,1
+12dd,0
+100 90 32
+2c6,0
+3,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+28,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+c7,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+63,0
+1
+3b,0
+1
+c7,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+c7,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+63,0
+1
+3b,0
+1
+8c,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+12dd,0
+100 90 32
+2d2,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2d,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+c7,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+c7,0
+1
+9f,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+c7,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+12de,0
+100 90 32
+2c6,0
+3d,1
+8b,0
+1
+3b,0
+1
+8b,0
+1
+9f,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+27,0
+1
+c7,0
+1
+c7,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+8b,0
+1
+9f,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+63,0
+1
+9f,0
+1
+63,0
+1
+27,0
+1
+64,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+12de,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a74.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a74.dat
new file mode 100644
index 000000000..ec6efb3ee
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a74.dat
@@ -0,0 +1,7251 @@
+! $XConsortium$
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+f,1
+2d,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+f,1
+be,0
+a,1
+8c,0
+a,1
+28,0
+a,1
+28,0
+a,1
+474,0
+a,1
+28,0
+a,1
+28,0
+a,1
+8c,0
+a,1
+be,0
+a,1
+186,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+38,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+5,0
+a,1
+38,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+37,0
+a,1
+6,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+5,0
+a,1
+28,0
+a,1
+6,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+604,0
+100 90 32
+5eb,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+11,1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+11,1
+be,0
+a,1
+154,0
+a,1
+5a,0
+a,1
+2e4,0
+a,1
+5a,0
+a,1
+154,0
+a,1
+be,0
+a,1
+be,0
+a,1
+8c,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+8c,0
+a,1
+be,0
+a,1
+2d,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3,0
+a,1
+2d,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+602,0
+100 90 32
+5eb,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+0
+a,1
+28,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+a,1
+5a,0
+a,1
+2e4,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+2e4,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+8c,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+f0,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+8c,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+c,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+30,0
+c,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+5fd,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+28,0
+a,1
+2,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+28,0
+a,1
+2,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+28,0
+a,1
+8c,0
+a,1
+28,0
+a,1
+be,0
+a,1
+186,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+21c,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+31,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+b,1
+31,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+b,1
+31,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+5fb,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+a,1
+8c,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+8c,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+8c,0
+a,1
+2e4,0
+a,1
+5a,0
+a,1
+154,0
+a,1
+5a,0
+a,1
+2e4,0
+a,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+4,1
+35,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+28,0
+a,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+28,0
+a,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+5f5,0
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5f,0
+b,1
+8b,0
+b,1
+27,0
+b,1
+27,0
+b,1
+473,0
+b,1
+27,0
+b,1
+27,0
+b,1
+8b,0
+b,1
+bd,0
+b,1
+185,0
+b,1
+59,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+59,0
+b,1
+185,0
+b,1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+5,0
+b,1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+37,0
+b,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+5,0
+b,1
+27,0
+b,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+5a0,0
+100 90 32
+5eb,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+12,1
+2c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+12,1
+2c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+60,0
+b,1
+153,0
+b,1
+59,0
+b,1
+2e3,0
+b,1
+59,0
+b,1
+153,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+8b,0
+b,1
+59,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+59,0
+b,1
+8b,0
+b,1
+bd,0
+b,1
+2c,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3,0
+b,1
+2c,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+59e,0
+100 90 32
+5eb,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+0
+b,1
+27,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+b,1
+2e3,0
+b,1
+59,0
+b,1
+27,0
+b,1
+59,0
+b,1
+2e3,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+8b,0
+b,1
+27,0
+b,1
+59,0
+b,1
+ef,0
+b,1
+59,0
+b,1
+27,0
+b,1
+8b,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+c,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+30,0
+c,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+599,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+27,0
+b,1
+0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+27,0
+b,1
+0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+5f,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+27,0
+b,1
+8b,0
+b,1
+27,0
+b,1
+bd,0
+b,1
+185,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+21b,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+59,0
+b,1
+30,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+c,1
+30,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+c,1
+30,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+597,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+d,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+61,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+8b,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+8b,0
+b,1
+2e3,0
+b,1
+59,0
+b,1
+153,0
+b,1
+59,0
+b,1
+2e3,0
+13,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+4,1
+35,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+d,1
+27,0
+13,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+d,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+d,1
+27,0
+13,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+d,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+a,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+a,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+a,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+a,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+a,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+a,1
+590,0
+100 90 32
+5eb,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+11,1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+11,1
+be,0
+a,1
+154,0
+a,1
+5a,0
+a,1
+2e4,0
+a,1
+5a,0
+a,1
+154,0
+a,1
+be,0
+a,1
+be,0
+a,1
+8c,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+8c,0
+a,1
+be,0
+a,1
+2d,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3,0
+a,1
+2d,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+602,0
+100 90 32
+5eb,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+0
+a,1
+28,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+a,1
+5a,0
+a,1
+2e4,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+2e4,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+8c,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+f0,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+8c,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+c,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+30,0
+c,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+5fd,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+28,0
+a,1
+2,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+28,0
+a,1
+2,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+28,0
+a,1
+8c,0
+a,1
+28,0
+a,1
+be,0
+a,1
+186,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+21c,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+31,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+b,1
+31,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+b,1
+31,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+5fb,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+a,1
+8c,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+8c,0
+a,1
+28,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+5a,0
+a,1
+28,0
+a,1
+28,0
+a,1
+8c,0
+a,1
+2e4,0
+a,1
+5a,0
+a,1
+154,0
+a,1
+5a,0
+a,1
+2e4,0
+a,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+4,1
+35,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+28,0
+a,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+28,0
+a,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+5f5,0
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2c,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5f,0
+b,1
+8b,0
+b,1
+27,0
+b,1
+27,0
+b,1
+473,0
+b,1
+27,0
+b,1
+27,0
+b,1
+8b,0
+b,1
+bd,0
+b,1
+185,0
+b,1
+59,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+59,0
+b,1
+185,0
+b,1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+5,0
+b,1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+37,0
+b,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+5,0
+b,1
+27,0
+b,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+5a0,0
+100 90 32
+5eb,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+2e,0
+b,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+12,1
+2c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+12,1
+2c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+60,0
+b,1
+153,0
+b,1
+59,0
+b,1
+2e3,0
+b,1
+59,0
+b,1
+153,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+8b,0
+b,1
+59,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+59,0
+b,1
+8b,0
+b,1
+bd,0
+b,1
+2c,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3,0
+b,1
+2c,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+59e,0
+100 90 32
+5eb,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+0
+b,1
+27,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+2d,0
+b,1
+2e3,0
+b,1
+59,0
+b,1
+27,0
+b,1
+59,0
+b,1
+2e3,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+8b,0
+b,1
+27,0
+b,1
+59,0
+b,1
+ef,0
+b,1
+59,0
+b,1
+27,0
+b,1
+8b,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+c,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+30,0
+c,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3a,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+599,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+9,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+27,0
+b,1
+0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+27,0
+b,1
+0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6,0
+b,1
+33,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+5f,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+27,0
+b,1
+8b,0
+b,1
+27,0
+b,1
+bd,0
+b,1
+185,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+21b,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+59,0
+b,1
+30,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+c,1
+30,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+c,1
+30,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+37,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+597,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+d,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+61,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+8b,0
+b,1
+27,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+59,0
+b,1
+27,0
+b,1
+27,0
+b,1
+8b,0
+b,1
+2e3,0
+b,1
+59,0
+b,1
+153,0
+b,1
+59,0
+b,1
+2e3,0
+13,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+4,1
+35,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+d,1
+27,0
+13,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+d,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+d,1
+27,0
+13,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+d,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+a,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+a,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+a,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+a,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+a,1
+2f,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+a,1
+590,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a75.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a75.dat
new file mode 100644
index 000000000..579d501cd
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a75.dat
@@ -0,0 +1,899 @@
+! $XConsortium$
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+32,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+95,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+31,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+c7,0
+1
+31,0
+1
+63,0
+1
+63,0
+1
+15d,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+f9,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+36,0
+3,1
+5,0
+1
+0
+2,1
+0
+7,1
+0
+5,1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+2,0
+1
+0
+2,1
+789,0
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+64,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+95,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+31,0
+1
+63,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+15d,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+132,0
+3,1
+5,0
+1
+2,0
+1
+7,0
+1
+5,0
+1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+0
+1
+78a,0
+100 90 32
+7e4,0
+33,1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+33,1
+789,0
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+64,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+95,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+31,0
+1
+63,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+15d,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+132,0
+3,1
+5,0
+1
+2,0
+1
+7,0
+1
+5,0
+1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+0
+1
+78a,0
+100 90 32
+7e4,0
+33,1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+33,1
+789,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a76.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a76.dat
new file mode 100644
index 000000000..3daf375b3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/a76.dat
@@ -0,0 +1,119 @@
+! $XConsortium$
+100 90 32
+7e4,0
+8,1
+8,0
+8,1
+8,0
+8,1
+8,0
+3,1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+2ed,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+2ed,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+63,0
+1
+2ed,0
+1
+63,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+6,1
+8,0
+8,1
+8,0
+8,1
+8,0
+5,1
+789,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngl/drwrctngl.m b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/drwrctngl.m
new file mode 100644
index 000000000..8a8cf71af
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngl/drwrctngl.m
@@ -0,0 +1,155 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawRectangle CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+int x = 10;
+int y = 7;
+unsigned int width = 60;
+unsigned int height = 34;
+>>EXTERN
+#ifdef MIN
+#undef MIN
+#endif
+#define MIN(a,b) (((a)<(b)) ? (a) : (b))
+
+#ifdef MAX
+#undef MAX
+#endif
+#define MAX(a,b) (((a)>(b)) ? (a) : (b))
+
+static void
+drawline(ax1, ay1, ax2, ay2)
+int ax1, ay1, ax2, ay2;
+{
+int pass = 0, fail = 0;
+int x2 = MAX(ax1,ax2), y2 = MAX(ay1,ay2);
+ /*
+ * Draw a rectangle that has the two given points as vertices.
+ * Some tests then do not apply or need slight modification.
+ * Sort them as the protocol specifies rects as top-left and w & h
+ * so drawing a rectangle "in reverse" isn't possible.
+ */
+ x = MIN(ax1,ax2); y = MIN(ay1,ay2);
+ width = x2 - x;
+ height = y2 - y;
+ XCALL;
+}
+#undef MIN
+#undef MAX
+
+static void
+setfordash()
+{
+ x = 20; y = 20;
+ width = 50; height = 50;
+}
+>>ASSERTION Good A
+A call to xname draws the outline of the rectangle specified by
+.A x ,
+.A y ,
+.A width
+and
+.A height
+in the drawable
+.A d .
+>>STRATEGY
+Draw rectangle.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+A call to xname draws the rectangle as if a five-point PolyLine protocol
+request were specified for the rectangle in the order
+.S "" [ x , y "], "
+.S "" [ x+width , y "], "
+.S "" [ x+width , y+height "], "
+.S "" [ x , y+height "], "
+.S "" [ x , y "]."
+>># NOTE kieron Testing ordering again...????
+>>ASSERTION def
+All four
+corners of the rectangle join.
+>>ASSERTION Good A
+A call to xname does not draw a pixel more than once.
+>>STRATEGY
+Set function to GXxor
+Draw rectangle
+Pixmap verify
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M line-width ,
+.M line-style ,
+.M join-style ,
+.M fill-style ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin ,
+.M tile-stipple-y-origin ,
+.M dash-offset
+and
+.M dash-list
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a1.dat
new file mode 100644
index 000000000..f39b967ae
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a1.dat
@@ -0,0 +1,79 @@
+! $XConsortium$
+100 90 32
+3f2,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+4d7,0
+47,1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+47,1
+126f,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a25.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a25.dat
new file mode 100644
index 000000000..7b44a068a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a25.dat
@@ -0,0 +1,195 @@
+! $XConsortium$
+100 90 32
+f1,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+5,1
+2,0
+1a,1
+43,0
+5,1
+2,0
+1a,1
+43,0
+5,1
+2,0
+1a,1
+29,0
+2c,1
+7,0
+8,1
+29,0
+1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+5,1
+2,0
+b,1
+7,0
+8,1
+26,0
+4,1
+19,0
+12,1
+7,0
+8,1
+26,0
+4,1
+19,0
+12,1
+7,0
+8,1
+26,0
+4,1
+19,0
+12,1
+7,0
+8,1
+26,0
+4,1
+19,0
+12,1
+7,0
+8,1
+26,0
+4,1
+19,0
+21,1
+26,0
+4,1
+22,0
+18,1
+29,0
+1
+22,0
+18,1
+29,0
+1
+22,0
+18,1
+29,0
+1
+22,0
+18,1
+29,0
+1
+22,0
+18,1
+29,0
+1
+22,0
+18,1
+29,0
+3b,1
+531,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+8c3,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a33.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a33.dat
new file mode 100644
index 000000000..a447c6971
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a33.dat
@@ -0,0 +1,3587 @@
+! $XConsortium$
+100 90 32
+332,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+56,0
+4,1
+6,0
+4,1
+56,0
+4,1
+6,0
+4,1
+56,0
+4,1
+1a,0
+4,1
+42,0
+4,1
+1a,0
+4,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+1c0,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+3e,0
+e,1
+e,0
+a,1
+3e,0
+e,1
+e,0
+a,1
+3e,0
+e,1
+e,0
+a,1
+3e,0
+e,1
+e,0
+a,1
+33e,0
+100 90 32
+332,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+56,0
+4,1
+6,0
+4,1
+56,0
+4,1
+6,0
+4,1
+56,0
+4,1
+1a,0
+4,1
+42,0
+4,1
+1a,0
+4,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+1c0,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+3e,0
+e,1
+e,0
+a,1
+3e,0
+e,1
+e,0
+a,1
+3e,0
+e,1
+e,0
+a,1
+3e,0
+e,1
+e,0
+a,1
+33e,0
+100 90 32
+332,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+4,1
+22,0
+4,1
+3a,0
+4,1
+22,0
+4,1
+30,0
+4,1
+6,0
+4,1
+56,0
+4,1
+6,0
+4,1
+56,0
+4,1
+6,0
+4,1
+10,0
+4,1
+42,0
+4,1
+6,0
+4,1
+10,0
+4,1
+42,0
+4,1
+6,0
+4,1
+10,0
+4,1
+42,0
+4,1
+6,0
+4,1
+10,0
+4,1
+42,0
+4,1
+10,0
+e,1
+42,0
+4,1
+10,0
+e,1
+42,0
+4,1
+10,0
+e,1
+42,0
+4,1
+10,0
+e,1
+42,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+30,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+8,0
+12,1
+a,0
+c,1
+30,0
+4,1
+8,0
+12,1
+a,0
+c,1
+3c,0
+12,1
+a,0
+c,1
+3c,0
+12,1
+a,0
+c,1
+33e,0
+100 90 32
+332,0
+11,1
+d,0
+f,1
+37,0
+12,1
+b,0
+11,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+b,0
+11,1
+36,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+1
+31,0
+4,1
+2d,0
+3,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+31,0
+3,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+11,1
+15,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+4,1
+22,0
+4,1
+3a,0
+4,1
+23,0
+3,1
+32,0
+1
+7,0
+4,1
+57,0
+3,1
+6,0
+4,1
+56,0
+4,1
+6,0
+4,1
+12,0
+1
+43,0
+4,1
+6,0
+4,1
+11,0
+3,1
+42,0
+4,1
+6,0
+4,1
+10,0
+4,1
+42,0
+4,1
+7,0
+3,1
+10,0
+4,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+11,0
+d,1
+42,0
+4,1
+10,0
+e,1
+42,0
+4,1
+11,0
+d,1
+42,0
+4,1
+2e,0
+1
+31,0
+4,1
+2d,0
+3,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+31,0
+3,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+32,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+1
+31,0
+4,1
+2d,0
+3,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+a,0
+f,1
+d,0
+a,1
+31,0
+3,1
+9,0
+11,1
+b,0
+b,1
+3c,0
+12,1
+a,0
+c,1
+3d,0
+11,1
+b,0
+b,1
+33e,0
+100 90 32
+332,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+54,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+55,0
+5,1
+5,0
+5,1
+55,0
+5,1
+5,0
+5,1
+55,0
+5,1
+19,0
+5,1
+41,0
+5,1
+19,0
+5,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+1bf,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+2d9,0
+100 90 32
+332,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+54,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+55,0
+5,1
+5,0
+5,1
+55,0
+5,1
+5,0
+5,1
+55,0
+5,1
+19,0
+5,1
+41,0
+5,1
+19,0
+5,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+1bf,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+2d9,0
+100 90 32
+332,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+5,1
+21,0
+5,1
+2f,0
+5,1
+5,0
+5,1
+21,0
+5,1
+2f,0
+5,1
+5,0
+5,1
+55,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+5,1
+5,0
+f,1
+41,0
+5,1
+f,0
+f,1
+41,0
+5,1
+f,0
+f,1
+41,0
+5,1
+f,0
+f,1
+41,0
+5,1
+f,0
+f,1
+d,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+7,0
+13,1
+9,0
+d,1
+2f,0
+5,1
+7,0
+13,1
+9,0
+d,1
+2f,0
+5,1
+7,0
+13,1
+9,0
+d,1
+3b,0
+13,1
+9,0
+d,1
+3b,0
+13,1
+9,0
+d,1
+2d9,0
+100 90 32
+332,0
+12,1
+b,0
+11,1
+36,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+12,1
+b,0
+11,1
+36,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2c,0
+3,1
+30,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+30,0
+3,1
+2c,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+12,1
+14,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+12,1
+14,0
+5,1
+39,0
+5,1
+21,0
+5,1
+30,0
+3,1
+6,0
+5,1
+22,0
+3,1
+30,0
+5,1
+5,0
+5,1
+55,0
+5,1
+5,0
+5,1
+10,0
+3,1
+42,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+6,0
+3,1
+7,0
+e,1
+41,0
+5,1
+f,0
+f,1
+41,0
+5,1
+f,0
+f,1
+41,0
+5,1
+f,0
+f,1
+41,0
+5,1
+10,0
+e,1
+e,0
+3,1
+30,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+30,0
+3,1
+2c,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+30,0
+3,1
+2d,0
+3,1
+30,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2c,0
+3,1
+30,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+8,0
+11,1
+b,0
+c,1
+2f,0
+5,1
+7,0
+13,1
+9,0
+d,1
+30,0
+3,1
+8,0
+13,1
+9,0
+d,1
+3b,0
+13,1
+9,0
+d,1
+3c,0
+11,1
+b,0
+c,1
+2d9,0
+100 90 32
+332,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+56,0
+4,1
+6,0
+4,1
+56,0
+4,1
+6,0
+4,1
+56,0
+4,1
+1a,0
+4,1
+42,0
+4,1
+1a,0
+4,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+1c0,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+3e,0
+e,1
+e,0
+a,1
+3e,0
+e,1
+e,0
+a,1
+3e,0
+e,1
+e,0
+a,1
+3e,0
+e,1
+e,0
+a,1
+33e,0
+100 90 32
+332,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+a,0
+12,1
+36,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+4,1
+22,0
+4,1
+3a,0
+4,1
+22,0
+4,1
+30,0
+4,1
+6,0
+4,1
+56,0
+4,1
+6,0
+4,1
+56,0
+4,1
+6,0
+4,1
+10,0
+4,1
+42,0
+4,1
+6,0
+4,1
+10,0
+4,1
+42,0
+4,1
+6,0
+4,1
+10,0
+4,1
+42,0
+4,1
+6,0
+4,1
+10,0
+4,1
+42,0
+4,1
+10,0
+e,1
+42,0
+4,1
+10,0
+e,1
+42,0
+4,1
+10,0
+e,1
+42,0
+4,1
+10,0
+e,1
+42,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+30,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+8,0
+12,1
+a,0
+c,1
+30,0
+4,1
+8,0
+12,1
+a,0
+c,1
+3c,0
+12,1
+a,0
+c,1
+3c,0
+12,1
+a,0
+c,1
+33e,0
+100 90 32
+332,0
+11,1
+d,0
+f,1
+37,0
+12,1
+b,0
+11,1
+36,0
+12,1
+a,0
+12,1
+36,0
+12,1
+b,0
+11,1
+36,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+1
+31,0
+4,1
+2d,0
+3,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+31,0
+3,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+11,1
+15,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+12,1
+14,0
+4,1
+3a,0
+4,1
+22,0
+4,1
+3a,0
+4,1
+23,0
+3,1
+32,0
+1
+7,0
+4,1
+57,0
+3,1
+6,0
+4,1
+56,0
+4,1
+6,0
+4,1
+12,0
+1
+43,0
+4,1
+6,0
+4,1
+11,0
+3,1
+42,0
+4,1
+6,0
+4,1
+10,0
+4,1
+42,0
+4,1
+7,0
+3,1
+10,0
+4,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+11,0
+d,1
+42,0
+4,1
+10,0
+e,1
+42,0
+4,1
+11,0
+d,1
+42,0
+4,1
+2e,0
+1
+31,0
+4,1
+2d,0
+3,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+31,0
+3,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+32,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2e,0
+1
+31,0
+4,1
+2d,0
+3,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+a,0
+f,1
+d,0
+a,1
+31,0
+3,1
+9,0
+11,1
+b,0
+b,1
+3c,0
+12,1
+a,0
+c,1
+3d,0
+11,1
+b,0
+b,1
+33e,0
+100 90 32
+332,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+54,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+55,0
+5,1
+5,0
+5,1
+55,0
+5,1
+5,0
+5,1
+55,0
+5,1
+19,0
+5,1
+41,0
+5,1
+19,0
+5,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+1bf,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+2d9,0
+100 90 32
+332,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+54,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+55,0
+5,1
+5,0
+5,1
+55,0
+5,1
+5,0
+5,1
+55,0
+5,1
+19,0
+5,1
+41,0
+5,1
+19,0
+5,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+1bf,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+2d9,0
+100 90 32
+332,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+5,1
+21,0
+5,1
+2f,0
+5,1
+5,0
+5,1
+21,0
+5,1
+2f,0
+5,1
+5,0
+5,1
+55,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+5,1
+5,0
+f,1
+41,0
+5,1
+f,0
+f,1
+41,0
+5,1
+f,0
+f,1
+41,0
+5,1
+f,0
+f,1
+41,0
+5,1
+f,0
+f,1
+d,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+7,0
+13,1
+9,0
+d,1
+2f,0
+5,1
+7,0
+13,1
+9,0
+d,1
+2f,0
+5,1
+7,0
+13,1
+9,0
+d,1
+3b,0
+13,1
+9,0
+d,1
+3b,0
+13,1
+9,0
+d,1
+2d9,0
+100 90 32
+332,0
+12,1
+b,0
+11,1
+36,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+13,1
+9,0
+13,1
+35,0
+12,1
+b,0
+11,1
+36,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2c,0
+3,1
+30,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+30,0
+3,1
+2c,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+12,1
+14,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+13,1
+13,0
+5,1
+39,0
+12,1
+14,0
+5,1
+39,0
+5,1
+21,0
+5,1
+30,0
+3,1
+6,0
+5,1
+22,0
+3,1
+30,0
+5,1
+5,0
+5,1
+55,0
+5,1
+5,0
+5,1
+10,0
+3,1
+42,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+5,1
+f,0
+5,1
+41,0
+5,1
+6,0
+3,1
+7,0
+e,1
+41,0
+5,1
+f,0
+f,1
+41,0
+5,1
+f,0
+f,1
+41,0
+5,1
+f,0
+f,1
+41,0
+5,1
+10,0
+e,1
+e,0
+3,1
+30,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+30,0
+3,1
+2c,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+30,0
+3,1
+2d,0
+3,1
+30,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2c,0
+3,1
+30,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+8,0
+11,1
+b,0
+c,1
+2f,0
+5,1
+7,0
+13,1
+9,0
+d,1
+30,0
+3,1
+8,0
+13,1
+9,0
+d,1
+3b,0
+13,1
+9,0
+d,1
+3c,0
+11,1
+b,0
+c,1
+2d9,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a40.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a40.dat
new file mode 100644
index 000000000..7b0f4f678
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a40.dat
@@ -0,0 +1,1835 @@
+! $XConsortium$
+100 90 32
+332,0
+2,2
+3
+2
+3
+2
+4,0
+3,3
+2
+4,0
+3
+2,2
+3
+4,0
+2
+3,3
+4,0
+2
+3
+2
+3
+4,0
+3
+2
+3
+2
+36,0
+5,3
+2
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2
+3,3
+4,0
+3
+2
+3
+2
+36,0
+2,2
+3
+2
+3
+2
+4,0
+3,3
+2
+4,0
+3
+2,2
+3
+4,0
+2
+3,3
+4,0
+2
+3
+2
+3
+4,0
+3
+2
+3
+2
+2,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2
+4,0
+2,3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,2
+2,3
+4,0
+2
+3
+2
+3
+4,0
+3
+2
+3
+2
+2,0
+2,3
+2,2
+3
+2f,0
+3,2
+3
+2
+3
+4,0
+3,2
+3
+4,0
+4,2
+4,0
+3
+3,2
+4,0
+3
+2
+3
+2
+4,0
+2
+3
+2
+3
+2,0
+3,2
+3
+2
+2f,0
+3,2
+3
+2
+2b,0
+3,3
+2,2
+1bf,0
+5,3
+2b,0
+2,2
+3,3
+2f,0
+5,3
+2b,0
+5,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+4,3
+2
+2b,0
+3,2
+2,3
+1bf,0
+2,2
+3
+2
+3
+2b,0
+2,3
+2,2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+3,3
+2
+3
+2f,0
+5,3
+7,0
+3
+2
+3
+2
+4,0
+4,3
+4,0
+4,3
+10,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+7,0
+3
+2
+3
+2
+4,0
+2
+3
+2
+3
+4,0
+4,3
+10,0
+3,3
+2
+3
+3b,0
+2,2
+3
+2
+4,0
+2
+3
+2
+3
+4,0
+3,3
+2
+50,0
+2
+3
+2
+3
+4,0
+2,2
+3
+2
+4,0
+4,2
+50,0
+3
+2,2
+3
+4,0
+2,2
+3
+2
+4,0
+4,3
+a8,0
+4,2
+3
+5,0
+3,3
+2,2
+f,0
+2,3
+2,2
+3
+d,0
+3,3
+2,2
+2f,0
+3,3
+2,2
+5,0
+3,2
+2,3
+f,0
+2,2
+2,3
+2
+d,0
+3,2
+2,3
+2f,0
+5,2
+5,0
+3,3
+2,2
+f,0
+2,3
+3,2
+d,0
+3,3
+2,2
+2f,0
+5,3
+5,0
+2,2
+3,3
+f,0
+2
+4,3
+d,0
+2,2
+3,3
+103,0
+2
+2,3
+2
+4,0
+3,3
+2
+4,0
+4,2
+50,0
+3
+2,2
+3
+4,0
+2,3
+2
+3
+4,0
+4,3
+44,0
+4,2
+3
+7,0
+3,3
+2
+4,0
+3,2
+3
+4,0
+4,3
+10,0
+5,3
+2f,0
+3,2
+3
+2
+7,0
+3
+2,2
+3
+4,0
+2,2
+3
+2
+4,0
+4,3
+10,0
+3,3
+2,2
+2f,0
+3,2
+3
+2
+7,0
+2
+3
+2
+3
+4,0
+2,2
+3
+2
+4,0
+4,2
+10,0
+3,2
+3
+2
+2f,0
+2,2
+3
+2
+3
+2b,0
+2,3
+2,2
+3
+1bf,0
+3,2
+3
+2
+2b,0
+3,2
+3
+2
+2f,0
+3,2
+3
+2
+2b,0
+3,3
+2,2
+2f,0
+4,2
+3
+2b,0
+5,3
+2f,0
+4,2
+3
+2b,0
+3,3
+2,2
+1bf,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+4,3
+2
+2b,0
+3,2
+2,3
+2f,0
+3,3
+2
+3
+2b,0
+3,3
+2,2
+2f,0
+4,2
+3
+2b,0
+5,3
+1bf,0
+5,3
+2b,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+2,3
+2,2
+3
+2f,0
+3,2
+3
+2
+2b,0
+3,2
+3
+2
+1bf,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+5,3
+2b,0
+2,2
+3,3
+2f,0
+5,3
+2b,0
+5,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+33,0
+2,2
+2,3
+4,0
+2
+2,3
+2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+4,3
+4,0
+2,3
+2,2
+38,0
+2,3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,3
+2
+3
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,2
+2,3
+38,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+4,2
+4,0
+4,3
+38,0
+2
+3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,2
+3
+2
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+38,0
+2
+3
+2
+3
+4,0
+2
+3
+2
+3
+4,0
+2,2
+3
+2
+4,0
+4,2
+4,0
+3
+3,2
+4,0
+2
+3
+2,2
+2de,0
+100 90 32
+2cd,0
+3
+2,2
+3
+2
+3
+2
+4,0
+2,3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,2
+2,3
+4,0
+2
+3
+2
+3
+4,0
+3
+2
+3
+2
+35,0
+3
+2,2
+3
+2
+3
+2
+4,0
+3,3
+2
+4,0
+3
+2,2
+3
+4,0
+2
+3,3
+4,0
+2
+3
+2
+3
+4,0
+3
+2
+3
+2
+35,0
+6,3
+2
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2
+3,3
+4,0
+3
+2
+3
+2
+35,0
+3
+2,2
+3
+2
+3
+2
+4,0
+3,3
+2
+4,0
+3
+2,2
+3
+4,0
+2
+3,3
+4,0
+2
+3
+2
+3
+4,0
+3
+2
+3
+2
+0
+4,3
+2
+3
+2e,0
+3
+2,2
+3
+2
+3
+2
+4,0
+2,3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,2
+2,3
+4,0
+2
+3
+2
+3
+4,0
+3
+2
+3
+2
+0
+3,3
+2,2
+3
+2e,0
+4,2
+3
+2
+3
+4,0
+3,2
+3
+4,0
+4,2
+4,0
+3
+3,2
+4,0
+3
+2
+3
+2
+4,0
+2
+3
+2
+3
+0
+4,2
+3
+2
+2e,0
+4,2
+3
+2
+2a,0
+4,3
+2,2
+1be,0
+6,3
+2a,0
+3,2
+3,3
+2e,0
+6,3
+2a,0
+6,3
+2e,0
+6,2
+2a,0
+4,3
+2,2
+2e,0
+5,3
+2
+2a,0
+4,2
+2,3
+1be,0
+3
+2,2
+3
+2
+3
+2a,0
+3,3
+2,2
+3
+2e,0
+3
+2,2
+3
+2
+3
+7,0
+3
+2
+3
+2
+4,0
+2
+3
+2
+3
+4,0
+4,3
+f,0
+4,3
+2
+3
+2e,0
+6,3
+7,0
+3
+2
+3
+2
+4,0
+4,3
+4,0
+4,3
+f,0
+4,3
+2
+3
+2e,0
+3
+2,2
+3
+2
+3
+7,0
+3
+2
+3
+2
+4,0
+2
+3
+2
+3
+4,0
+4,3
+f,0
+4,3
+2
+3
+3b,0
+2,2
+3
+2
+4,0
+2
+3
+2
+3
+4,0
+3,3
+2
+50,0
+2
+3
+2
+3
+4,0
+2,2
+3
+2
+4,0
+4,2
+50,0
+3
+2,2
+3
+4,0
+2,2
+3
+2
+4,0
+4,3
+a7,0
+5,2
+3
+4,0
+4,3
+2,2
+e,0
+3,3
+2,2
+3
+c,0
+4,3
+2,2
+2e,0
+4,3
+2,2
+4,0
+4,2
+2,3
+e,0
+3,2
+2,3
+2
+c,0
+4,2
+2,3
+2e,0
+6,2
+4,0
+4,3
+2,2
+e,0
+3,3
+3,2
+c,0
+4,3
+2,2
+2e,0
+6,3
+4,0
+3,2
+3,3
+e,0
+2,2
+4,3
+c,0
+3,2
+3,3
+9f,0
+3
+3,2
+4,0
+4,2
+4,0
+4,3
+50,0
+2
+2,3
+2
+4,0
+3,3
+2
+4,0
+4,2
+50,0
+3
+2,2
+3
+4,0
+2,3
+2
+3
+4,0
+4,3
+43,0
+5,2
+3
+7,0
+3,3
+2
+4,0
+3,2
+3
+4,0
+4,3
+f,0
+6,3
+2e,0
+4,2
+3
+2
+7,0
+3
+2,2
+3
+4,0
+2,2
+3
+2
+4,0
+4,3
+f,0
+4,3
+2,2
+2e,0
+4,2
+3
+2
+7,0
+2
+3
+2
+3
+4,0
+2,2
+3
+2
+4,0
+4,2
+f,0
+4,2
+3
+2
+2e,0
+3
+2,2
+3
+2
+3
+2a,0
+3,3
+2,2
+3
+1be,0
+4,2
+3
+2
+2a,0
+4,2
+3
+2
+2e,0
+4,2
+3
+2
+2a,0
+4,3
+2,2
+2e,0
+5,2
+3
+2a,0
+6,3
+2e,0
+5,2
+3
+2a,0
+4,3
+2,2
+1be,0
+6,2
+2a,0
+4,3
+2,2
+2e,0
+5,3
+2
+2a,0
+4,2
+2,3
+2e,0
+4,3
+2
+3
+2a,0
+4,3
+2,2
+2e,0
+5,2
+3
+2a,0
+6,3
+1be,0
+6,3
+2a,0
+4,3
+2
+3
+2e,0
+3
+2,2
+3
+2
+3
+2a,0
+4,3
+2
+3
+2e,0
+3
+2,2
+3
+2
+3
+2a,0
+3,3
+2,2
+3
+2e,0
+4,2
+3
+2
+2a,0
+4,2
+3
+2
+1be,0
+6,2
+2a,0
+4,3
+2,2
+2e,0
+6,3
+2a,0
+3,2
+3,3
+2e,0
+6,3
+2a,0
+6,3
+2e,0
+9,2
+4,0
+3
+3,2
+4,0
+4,2
+4,0
+4,3
+4,0
+4,2
+4,0
+2,2
+5,3
+2,2
+33,0
+2,2
+2,3
+4,0
+2
+2,3
+2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+4,3
+4,0
+2,3
+2,2
+38,0
+2,3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,3
+2
+3
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,2
+2,3
+38,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+4,2
+4,0
+4,3
+38,0
+2
+3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,2
+3
+2
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+38,0
+2
+3
+2
+3
+4,0
+2
+3
+2
+3
+4,0
+2,2
+3
+2
+4,0
+4,2
+4,0
+3
+3,2
+4,0
+2
+3
+2,2
+2de,0
+100 90 32
+2cd,0
+3
+2,2
+3
+2
+3
+2
+4,0
+2,3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,2
+2,3
+4,0
+2
+3
+2
+3
+4,0
+3
+2
+3
+2
+35,0
+3
+2,2
+3
+2
+3
+2
+4,0
+3,3
+2
+4,0
+3
+2,2
+3
+4,0
+2
+3,3
+4,0
+2
+3
+2
+3
+4,0
+3
+2
+3
+2
+35,0
+6,3
+2
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2
+3,3
+4,0
+3
+2
+3
+2
+35,0
+3
+2,2
+3
+2
+3
+2
+4,0
+3,3
+2
+4,0
+3
+2,2
+3
+4,0
+2
+3,3
+4,0
+2
+3
+2
+3
+4,0
+3
+2
+3
+2
+0
+4,3
+2
+3
+2e,0
+3
+2,2
+3
+2
+3
+2
+4,0
+2,3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,2
+2,3
+4,0
+2
+3
+2
+3
+4,0
+3
+2
+3
+2
+0
+3,3
+2,2
+3
+2e,0
+4,2
+3
+2
+3
+4,0
+3,2
+3
+4,0
+4,2
+4,0
+3
+3,2
+4,0
+3
+2
+3
+2
+4,0
+2
+3
+2
+3
+0
+4,2
+3
+2
+2e,0
+4,2
+3
+2
+2a,0
+4,3
+2,2
+1be,0
+6,3
+2a,0
+3,2
+3,3
+2e,0
+6,3
+2a,0
+6,3
+2e,0
+6,2
+2a,0
+4,3
+2,2
+2e,0
+5,3
+2
+2a,0
+4,2
+2,3
+1be,0
+3
+2,2
+3
+2
+3
+2a,0
+3,3
+2,2
+3
+2e,0
+3
+2,2
+3
+2
+3
+7,0
+3
+2
+3
+2
+4,0
+2
+3
+2
+3
+4,0
+4,3
+f,0
+4,3
+2
+3
+2e,0
+6,3
+7,0
+3
+2
+3
+2
+4,0
+4,3
+4,0
+4,3
+f,0
+4,3
+2
+3
+2e,0
+3
+2,2
+3
+2
+3
+7,0
+3
+2
+3
+2
+4,0
+2
+3
+2
+3
+4,0
+4,3
+f,0
+4,3
+2
+3
+3b,0
+2,2
+3
+2
+4,0
+2
+3
+2
+3
+4,0
+3,3
+2
+50,0
+2
+3
+2
+3
+4,0
+2,2
+3
+2
+4,0
+4,2
+50,0
+3
+2,2
+3
+4,0
+2,2
+3
+2
+4,0
+4,3
+a7,0
+5,2
+3
+4,0
+4,3
+2,2
+e,0
+3,3
+2,2
+3
+c,0
+4,3
+2,2
+2e,0
+4,3
+2,2
+4,0
+4,2
+2,3
+e,0
+3,2
+2,3
+2
+c,0
+4,2
+2,3
+2e,0
+6,2
+4,0
+4,3
+2,2
+e,0
+3,3
+3,2
+c,0
+4,3
+2,2
+2e,0
+6,3
+4,0
+3,2
+3,3
+e,0
+2,2
+4,3
+c,0
+3,2
+3,3
+9f,0
+3
+3,2
+4,0
+4,2
+4,0
+4,3
+50,0
+2
+2,3
+2
+4,0
+3,3
+2
+4,0
+4,2
+50,0
+3
+2,2
+3
+4,0
+2,3
+2
+3
+4,0
+4,3
+43,0
+5,2
+3
+7,0
+3,3
+2
+4,0
+3,2
+3
+4,0
+4,3
+f,0
+6,3
+2e,0
+4,2
+3
+2
+7,0
+3
+2,2
+3
+4,0
+2,2
+3
+2
+4,0
+4,3
+f,0
+4,3
+2,2
+2e,0
+4,2
+3
+2
+7,0
+2
+3
+2
+3
+4,0
+2,2
+3
+2
+4,0
+4,2
+f,0
+4,2
+3
+2
+2e,0
+3
+2,2
+3
+2
+3
+2a,0
+3,3
+2,2
+3
+1be,0
+4,2
+3
+2
+2a,0
+4,2
+3
+2
+2e,0
+4,2
+3
+2
+2a,0
+4,3
+2,2
+2e,0
+5,2
+3
+2a,0
+6,3
+2e,0
+5,2
+3
+2a,0
+4,3
+2,2
+1be,0
+6,2
+2a,0
+4,3
+2,2
+2e,0
+5,3
+2
+2a,0
+4,2
+2,3
+2e,0
+4,3
+2
+3
+2a,0
+4,3
+2,2
+2e,0
+5,2
+3
+2a,0
+6,3
+1be,0
+6,3
+2a,0
+4,3
+2
+3
+2e,0
+3
+2,2
+3
+2
+3
+2a,0
+4,3
+2
+3
+2e,0
+3
+2,2
+3
+2
+3
+2a,0
+3,3
+2,2
+3
+2e,0
+4,2
+3
+2
+2a,0
+4,2
+3
+2
+1be,0
+6,2
+2a,0
+4,3
+2,2
+2e,0
+6,3
+2a,0
+3,2
+3,3
+2e,0
+6,3
+2a,0
+6,3
+2e,0
+9,2
+4,0
+3
+3,2
+4,0
+4,2
+4,0
+4,3
+4,0
+4,2
+4,0
+2,2
+5,3
+2,2
+33,0
+2,2
+2,3
+4,0
+2
+2,3
+2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+4,3
+4,0
+2,3
+2,2
+38,0
+2,3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,3
+2
+3
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,2
+2,3
+38,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+4,2
+4,0
+4,3
+38,0
+2
+3
+2,2
+4,0
+3
+2,2
+3
+4,0
+2,2
+3
+2
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+38,0
+2
+3
+2
+3
+4,0
+2
+3
+2
+3
+4,0
+2,2
+3
+2
+4,0
+4,2
+4,0
+3
+3,2
+4,0
+2
+3
+2,2
+2de,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a41.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a41.dat
new file mode 100644
index 000000000..18373491a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a41.dat
@@ -0,0 +1,963 @@
+! $XConsortium$
+100 90 32
+332,0
+3,1
+a,0
+1
+c,0
+1
+a,0
+1
+41,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+36,0
+2,1
+b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+2,0
+2,1
+3c,0
+4,1
+14,0
+4,1
+3e,0
+6,1
+4,0
+2,1
+6,0
+4,1
+4,0
+4,1
+4,0
+2,1
+6,0
+4,1
+2,0
+5,1
+226,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+1c2,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+a,0
+3,1
+5,0
+3,1
+18,0
+3,1
+34,0
+2,1
+f,0
+3,1
+5,0
+2,1
+0
+1
+13,0
+2,1
+3c,0
+3,1
+7,0
+1
+59,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+51,0
+3,1
+4,0
+4,1
+b0,0
+5,1
+5,0
+2,1
+12,0
+5,1
+d,0
+5,1
+3b,0
+3,1
+f,0
+4,1
+42,0
+5,1
+5,0
+5,1
+f,0
+3,1
+0
+1
+d,0
+5,1
+2f,0
+2,1
+8,0
+5,1
+f,0
+5,1
+d,0
+2,1
+10e,0
+3,1
+5,0
+2,1
+0
+1
+51,0
+3,1
+7,0
+1
+4f,0
+2,1
+8,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+13,0
+2,1
+2f,0
+2,1
+b,0
+3,1
+4,0
+4,1
+18,0
+2,1
+3e,0
+4,1
+e,0
+2,1
+44,0
+5,1
+2b,0
+5,1
+1bf,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+1bf,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+2d,0
+3,1
+225,0
+5,1
+2b,0
+5,1
+93,0
+5,1
+2b,0
+5,1
+1bf,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+9a,0
+4,1
+c,0
+4,1
+4,0
+4,1
+c,0
+4,1
+3a,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+2,1
+4,0
+4,1
+4,0
+4,1
+38,0
+4,1
+4,0
+4,1
+c,0
+4,1
+4,0
+4,1
+42,0
+2,1
+4,0
+3,1
+5,0
+4,1
+6,0
+2,1
+4,0
+3,1
+5,0
+4,1
+38,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+2e1,0
+100 90 32
+2d1,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+35,0
+4,1
+a,0
+1
+c,0
+1
+a,0
+1
+41,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+35,0
+3,1
+b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+0
+3,1
+3c,0
+4,1
+14,0
+4,1
+3d,0
+7,1
+4,0
+2,1
+6,0
+4,1
+4,0
+4,1
+4,0
+2,1
+6,0
+4,1
+0
+6,1
+2e,0
+1
+2f,0
+1
+1c7,0
+2,1
+2e,0
+2,1
+2e,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+2e,0
+3,1
+2d,0
+3,1
+1c1,0
+3,1
+2d,0
+3,1
+34,0
+3,1
+7,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+14,0
+3,1
+2e,0
+4,1
+a,0
+3,1
+5,0
+3,1
+17,0
+4,1
+34,0
+2,1
+f,0
+3,1
+5,0
+2,1
+0
+1
+13,0
+2,1
+3c,0
+3,1
+7,0
+1
+59,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+51,0
+3,1
+4,0
+4,1
+af,0
+6,1
+4,0
+3,1
+11,0
+6,1
+c,0
+6,1
+2e,0
+1
+9,0
+1
+2,0
+3,1
+f,0
+4,1
+d,0
+1
+34,0
+5,1
+5,0
+5,1
+e,0
+4,1
+0
+1
+d,0
+5,1
+2e,0
+3,1
+7,0
+6,1
+f,0
+5,1
+c,0
+3,1
+a3,0
+3,1
+5,0
+3,1
+60,0
+3,1
+5,0
+2,1
+0
+1
+51,0
+3,1
+7,0
+1
+4f,0
+2,1
+8,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+13,0
+2,1
+2e,0
+3,1
+b,0
+3,1
+4,0
+4,1
+17,0
+3,1
+3e,0
+4,1
+e,0
+2,1
+43,0
+6,1
+2a,0
+6,1
+1be,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+2e,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+1bf,0
+5,1
+2b,0
+5,1
+2e,0
+3,1
+2d,0
+3,1
+34,0
+3,1
+2d,0
+3,1
+2e,0
+4,1
+2c,0
+4,1
+224,0
+6,1
+2a,0
+6,1
+2e,0
+1
+2f,0
+1
+34,0
+5,1
+2b,0
+5,1
+1be,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+2e,0
+3,1
+2d,0
+3,1
+38,0
+2,1
+4,0
+4,1
+e,0
+2,1
+4,0
+4,1
+40,0
+4,1
+c,0
+4,1
+4,0
+4,1
+c,0
+4,1
+3a,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+2,1
+4,0
+4,1
+4,0
+4,1
+38,0
+4,1
+4,0
+4,1
+c,0
+4,1
+4,0
+4,1
+42,0
+2,1
+4,0
+3,1
+5,0
+4,1
+6,0
+2,1
+4,0
+3,1
+5,0
+4,1
+38,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+2e1,0
+100 90 32
+2d1,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+35,0
+4,1
+a,0
+1
+c,0
+1
+a,0
+1
+41,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+35,0
+3,1
+b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+0
+3,1
+3c,0
+4,1
+14,0
+4,1
+3d,0
+7,1
+4,0
+2,1
+6,0
+4,1
+4,0
+4,1
+4,0
+2,1
+6,0
+4,1
+0
+6,1
+2e,0
+1
+2f,0
+1
+1c7,0
+2,1
+2e,0
+2,1
+2e,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+2e,0
+3,1
+2d,0
+3,1
+1c1,0
+3,1
+2d,0
+3,1
+34,0
+3,1
+7,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+14,0
+3,1
+2e,0
+4,1
+a,0
+3,1
+5,0
+3,1
+17,0
+4,1
+34,0
+2,1
+f,0
+3,1
+5,0
+2,1
+0
+1
+13,0
+2,1
+3c,0
+3,1
+7,0
+1
+59,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+51,0
+3,1
+4,0
+4,1
+af,0
+6,1
+4,0
+3,1
+11,0
+6,1
+c,0
+6,1
+2e,0
+1
+9,0
+1
+2,0
+3,1
+f,0
+4,1
+d,0
+1
+34,0
+5,1
+5,0
+5,1
+e,0
+4,1
+0
+1
+d,0
+5,1
+2e,0
+3,1
+7,0
+6,1
+f,0
+5,1
+c,0
+3,1
+a3,0
+3,1
+5,0
+3,1
+60,0
+3,1
+5,0
+2,1
+0
+1
+51,0
+3,1
+7,0
+1
+4f,0
+2,1
+8,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+13,0
+2,1
+2e,0
+3,1
+b,0
+3,1
+4,0
+4,1
+17,0
+3,1
+3e,0
+4,1
+e,0
+2,1
+43,0
+6,1
+2a,0
+6,1
+1be,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+2e,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+1bf,0
+5,1
+2b,0
+5,1
+2e,0
+3,1
+2d,0
+3,1
+34,0
+3,1
+2d,0
+3,1
+2e,0
+4,1
+2c,0
+4,1
+224,0
+6,1
+2a,0
+6,1
+2e,0
+1
+2f,0
+1
+34,0
+5,1
+2b,0
+5,1
+1be,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+2e,0
+3,1
+2d,0
+3,1
+38,0
+2,1
+4,0
+4,1
+e,0
+2,1
+4,0
+4,1
+40,0
+4,1
+c,0
+4,1
+4,0
+4,1
+c,0
+4,1
+3a,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+2,1
+4,0
+4,1
+4,0
+4,1
+38,0
+4,1
+4,0
+4,1
+c,0
+4,1
+4,0
+4,1
+42,0
+2,1
+4,0
+3,1
+5,0
+4,1
+6,0
+2,1
+4,0
+3,1
+5,0
+4,1
+38,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+2e1,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a42.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a42.dat
new file mode 100644
index 000000000..18373491a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a42.dat
@@ -0,0 +1,963 @@
+! $XConsortium$
+100 90 32
+332,0
+3,1
+a,0
+1
+c,0
+1
+a,0
+1
+41,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+36,0
+2,1
+b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+2,0
+2,1
+3c,0
+4,1
+14,0
+4,1
+3e,0
+6,1
+4,0
+2,1
+6,0
+4,1
+4,0
+4,1
+4,0
+2,1
+6,0
+4,1
+2,0
+5,1
+226,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+1c2,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+a,0
+3,1
+5,0
+3,1
+18,0
+3,1
+34,0
+2,1
+f,0
+3,1
+5,0
+2,1
+0
+1
+13,0
+2,1
+3c,0
+3,1
+7,0
+1
+59,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+51,0
+3,1
+4,0
+4,1
+b0,0
+5,1
+5,0
+2,1
+12,0
+5,1
+d,0
+5,1
+3b,0
+3,1
+f,0
+4,1
+42,0
+5,1
+5,0
+5,1
+f,0
+3,1
+0
+1
+d,0
+5,1
+2f,0
+2,1
+8,0
+5,1
+f,0
+5,1
+d,0
+2,1
+10e,0
+3,1
+5,0
+2,1
+0
+1
+51,0
+3,1
+7,0
+1
+4f,0
+2,1
+8,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+13,0
+2,1
+2f,0
+2,1
+b,0
+3,1
+4,0
+4,1
+18,0
+2,1
+3e,0
+4,1
+e,0
+2,1
+44,0
+5,1
+2b,0
+5,1
+1bf,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+1bf,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+2d,0
+3,1
+225,0
+5,1
+2b,0
+5,1
+93,0
+5,1
+2b,0
+5,1
+1bf,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+9a,0
+4,1
+c,0
+4,1
+4,0
+4,1
+c,0
+4,1
+3a,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+2,1
+4,0
+4,1
+4,0
+4,1
+38,0
+4,1
+4,0
+4,1
+c,0
+4,1
+4,0
+4,1
+42,0
+2,1
+4,0
+3,1
+5,0
+4,1
+6,0
+2,1
+4,0
+3,1
+5,0
+4,1
+38,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+2e1,0
+100 90 32
+2d1,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+35,0
+4,1
+a,0
+1
+c,0
+1
+a,0
+1
+41,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+35,0
+3,1
+b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+0
+3,1
+3c,0
+4,1
+14,0
+4,1
+3d,0
+7,1
+4,0
+2,1
+6,0
+4,1
+4,0
+4,1
+4,0
+2,1
+6,0
+4,1
+0
+6,1
+2e,0
+1
+2f,0
+1
+1c7,0
+2,1
+2e,0
+2,1
+2e,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+2e,0
+3,1
+2d,0
+3,1
+1c1,0
+3,1
+2d,0
+3,1
+34,0
+3,1
+7,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+14,0
+3,1
+2e,0
+4,1
+a,0
+3,1
+5,0
+3,1
+17,0
+4,1
+34,0
+2,1
+f,0
+3,1
+5,0
+2,1
+0
+1
+13,0
+2,1
+3c,0
+3,1
+7,0
+1
+59,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+51,0
+3,1
+4,0
+4,1
+af,0
+6,1
+4,0
+3,1
+11,0
+6,1
+c,0
+6,1
+2e,0
+1
+9,0
+1
+2,0
+3,1
+f,0
+4,1
+d,0
+1
+34,0
+5,1
+5,0
+5,1
+e,0
+4,1
+0
+1
+d,0
+5,1
+2e,0
+3,1
+7,0
+6,1
+f,0
+5,1
+c,0
+3,1
+a3,0
+3,1
+5,0
+3,1
+60,0
+3,1
+5,0
+2,1
+0
+1
+51,0
+3,1
+7,0
+1
+4f,0
+2,1
+8,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+13,0
+2,1
+2e,0
+3,1
+b,0
+3,1
+4,0
+4,1
+17,0
+3,1
+3e,0
+4,1
+e,0
+2,1
+43,0
+6,1
+2a,0
+6,1
+1be,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+2e,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+1bf,0
+5,1
+2b,0
+5,1
+2e,0
+3,1
+2d,0
+3,1
+34,0
+3,1
+2d,0
+3,1
+2e,0
+4,1
+2c,0
+4,1
+224,0
+6,1
+2a,0
+6,1
+2e,0
+1
+2f,0
+1
+34,0
+5,1
+2b,0
+5,1
+1be,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+2e,0
+3,1
+2d,0
+3,1
+38,0
+2,1
+4,0
+4,1
+e,0
+2,1
+4,0
+4,1
+40,0
+4,1
+c,0
+4,1
+4,0
+4,1
+c,0
+4,1
+3a,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+2,1
+4,0
+4,1
+4,0
+4,1
+38,0
+4,1
+4,0
+4,1
+c,0
+4,1
+4,0
+4,1
+42,0
+2,1
+4,0
+3,1
+5,0
+4,1
+6,0
+2,1
+4,0
+3,1
+5,0
+4,1
+38,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+2e1,0
+100 90 32
+2d1,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+35,0
+4,1
+a,0
+1
+c,0
+1
+a,0
+1
+41,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+35,0
+3,1
+b,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+0
+3,1
+3c,0
+4,1
+14,0
+4,1
+3d,0
+7,1
+4,0
+2,1
+6,0
+4,1
+4,0
+4,1
+4,0
+2,1
+6,0
+4,1
+0
+6,1
+2e,0
+1
+2f,0
+1
+1c7,0
+2,1
+2e,0
+2,1
+2e,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+2e,0
+3,1
+2d,0
+3,1
+1c1,0
+3,1
+2d,0
+3,1
+34,0
+3,1
+7,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+14,0
+3,1
+2e,0
+4,1
+a,0
+3,1
+5,0
+3,1
+17,0
+4,1
+34,0
+2,1
+f,0
+3,1
+5,0
+2,1
+0
+1
+13,0
+2,1
+3c,0
+3,1
+7,0
+1
+59,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+51,0
+3,1
+4,0
+4,1
+af,0
+6,1
+4,0
+3,1
+11,0
+6,1
+c,0
+6,1
+2e,0
+1
+9,0
+1
+2,0
+3,1
+f,0
+4,1
+d,0
+1
+34,0
+5,1
+5,0
+5,1
+e,0
+4,1
+0
+1
+d,0
+5,1
+2e,0
+3,1
+7,0
+6,1
+f,0
+5,1
+c,0
+3,1
+a3,0
+3,1
+5,0
+3,1
+60,0
+3,1
+5,0
+2,1
+0
+1
+51,0
+3,1
+7,0
+1
+4f,0
+2,1
+8,0
+3,1
+4,0
+2,1
+6,0
+2,1
+0
+1
+13,0
+2,1
+2e,0
+3,1
+b,0
+3,1
+4,0
+4,1
+17,0
+3,1
+3e,0
+4,1
+e,0
+2,1
+43,0
+6,1
+2a,0
+6,1
+1be,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+2e,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+1bf,0
+5,1
+2b,0
+5,1
+2e,0
+3,1
+2d,0
+3,1
+34,0
+3,1
+2d,0
+3,1
+2e,0
+4,1
+2c,0
+4,1
+224,0
+6,1
+2a,0
+6,1
+2e,0
+1
+2f,0
+1
+34,0
+5,1
+2b,0
+5,1
+1be,0
+4,1
+2c,0
+4,1
+34,0
+2,1
+2e,0
+2,1
+2e,0
+3,1
+2d,0
+3,1
+38,0
+2,1
+4,0
+4,1
+e,0
+2,1
+4,0
+4,1
+40,0
+4,1
+c,0
+4,1
+4,0
+4,1
+c,0
+4,1
+3a,0
+2,1
+4,0
+4,1
+4,0
+4,1
+6,0
+2,1
+4,0
+4,1
+4,0
+4,1
+38,0
+4,1
+4,0
+4,1
+c,0
+4,1
+4,0
+4,1
+42,0
+2,1
+4,0
+3,1
+5,0
+4,1
+6,0
+2,1
+4,0
+3,1
+5,0
+4,1
+38,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+7,0
+2,1
+6,0
+1
+2,0
+1
+4,0
+1
+2e1,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a43.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a43.dat
new file mode 100644
index 000000000..0f2362111
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a43.dat
@@ -0,0 +1,635 @@
+! $XConsortium$
+100 90 32
+332,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+10,1
+16,0
+4,1
+3a,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+56,0
+4,1
+6,0
+4,1
+56,0
+4,1
+6,0
+4,1
+56,0
+4,1
+1a,0
+4,1
+42,0
+4,1
+1a,0
+4,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+12,0
+c,1
+42,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+1c0,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+30,0
+4,1
+2c,0
+4,1
+3e,0
+e,1
+e,0
+a,1
+3e,0
+e,1
+e,0
+a,1
+3e,0
+e,1
+e,0
+a,1
+3e,0
+e,1
+e,0
+a,1
+33e,0
+100 90 32
+332,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+54,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+55,0
+5,1
+5,0
+5,1
+55,0
+5,1
+5,0
+5,1
+55,0
+5,1
+19,0
+5,1
+41,0
+5,1
+19,0
+5,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+1bf,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+2d9,0
+100 90 32
+332,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+10,1
+e,0
+e,1
+38,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+16,0
+5,1
+39,0
+10,1
+54,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+55,0
+5,1
+5,0
+5,1
+55,0
+5,1
+5,0
+5,1
+55,0
+5,1
+19,0
+5,1
+41,0
+5,1
+19,0
+5,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+11,0
+d,1
+41,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+1bf,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+2f,0
+5,1
+2b,0
+5,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+3d,0
+e,1
+e,0
+b,1
+2d9,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a44.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a44.dat
new file mode 100644
index 000000000..f2545a4cd
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a44.dat
@@ -0,0 +1,2545 @@
+! $XConsortium$
+100 90 32
+332,0
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+30,0
+5,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+30,0
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+30,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+30,0
+3,2
+3
+2c,0
+3,2
+3
+30,0
+3,2
+3
+2c,0
+3,3
+2
+30,0
+4,2
+2c,0
+4,3
+30,0
+4,2
+2c,0
+3,3
+2
+30,0
+3,3
+2
+2c,0
+3,2
+3
+30,0
+4,2
+2c,0
+3,3
+2
+30,0
+4,3
+2c,0
+2,2
+2,3
+30,0
+4,3
+2c,0
+4,3
+30,0
+4,2
+2c,0
+3,3
+2
+30,0
+4,3
+2c,0
+3,2
+3
+30,0
+3,3
+2
+2c,0
+3,3
+2
+30,0
+4,2
+2c,0
+4,3
+30,0
+3,2
+3
+2c,0
+3,3
+2
+30,0
+3,2
+3
+2c,0
+3,2
+3
+30,0
+2,2
+3
+2
+2c,0
+2,3
+2,2
+30,0
+2,2
+3
+2
+2c,0
+3,3
+2
+30,0
+4,3
+6,0
+3,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+e,0
+3,3
+2
+30,0
+2,2
+3
+2
+6,0
+3,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+e,0
+3,3
+2
+30,0
+2,2
+3
+2
+6,0
+2,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+e,0
+2,3
+2,2
+30,0
+3,2
+3
+6,0
+3,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+e,0
+3,2
+3
+30,0
+3,2
+3
+6,0
+3,3
+2
+10,0
+2,3
+2,2
+e,0
+3,3
+2
+30,0
+4,2
+6,0
+4,3
+10,0
+4,3
+e,0
+4,3
+30,0
+4,2
+6,0
+3,3
+2
+10,0
+2,3
+2,2
+e,0
+3,3
+2
+30,0
+3,3
+2
+6,0
+3,2
+3
+10,0
+2,2
+2,3
+e,0
+3,2
+3
+30,0
+4,2
+6,0
+3,3
+2
+10,0
+2,3
+2,2
+e,0
+3,3
+2
+30,0
+4,3
+6,0
+2,2
+2,3
+10,0
+2
+3,3
+e,0
+2,2
+2,3
+30,0
+4,3
+6,0
+4,3
+10,0
+4,3
+e,0
+4,3
+30,0
+4,2
+6,0
+3,3
+2
+10,0
+2,3
+2,2
+e,0
+3,3
+2
+30,0
+4,3
+6,0
+3,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+e,0
+3,2
+3
+30,0
+3,3
+2
+6,0
+3,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+e,0
+3,3
+2
+30,0
+4,2
+6,0
+5,3
+2
+3
+6,2
+3
+2
+9,3
+e,0
+4,3
+30,0
+3,2
+3
+6,0
+3,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+e,0
+3,3
+2
+30,0
+3,2
+3
+2c,0
+3,2
+3
+30,0
+2,2
+3
+2
+2c,0
+2,3
+2,2
+30,0
+2,2
+3
+2
+2c,0
+3,3
+2
+30,0
+4,3
+2c,0
+3,3
+2
+30,0
+2,2
+3
+2
+2c,0
+3,3
+2
+30,0
+2,2
+3
+2
+2c,0
+2,3
+2,2
+30,0
+3,2
+3
+2c,0
+3,2
+3
+30,0
+3,2
+3
+2c,0
+3,3
+2
+30,0
+4,2
+2c,0
+4,3
+30,0
+4,2
+2c,0
+3,3
+2
+30,0
+3,3
+2
+2c,0
+3,2
+3
+30,0
+4,2
+2c,0
+3,3
+2
+30,0
+4,3
+2c,0
+2,2
+2,3
+30,0
+4,3
+2c,0
+4,3
+30,0
+4,2
+2c,0
+3,3
+2
+30,0
+4,3
+2c,0
+3,2
+3
+30,0
+3,3
+2
+2c,0
+3,3
+2
+30,0
+4,2
+2c,0
+4,3
+30,0
+3,2
+3
+2c,0
+3,3
+2
+30,0
+3,2
+3
+2c,0
+3,2
+3
+30,0
+2,2
+3
+2
+2c,0
+2,3
+2,2
+30,0
+2,2
+3
+2
+2c,0
+3,3
+2
+30,0
+4,3
+2c,0
+3,3
+2
+30,0
+2,2
+3
+2
+2c,0
+3,3
+2
+30,0
+2,2
+3
+2
+2c,0
+2,3
+2,2
+30,0
+3,2
+3
+2c,0
+3,2
+3
+30,0
+3,2
+3
+2c,0
+3,3
+2
+30,0
+4,2
+2c,0
+4,3
+30,0
+4,2
+2c,0
+3,3
+2
+30,0
+3,3
+2
+2c,0
+3,2
+3
+30,0
+4,2
+2c,0
+3,3
+2
+30,0
+4,3
+2c,0
+2,2
+2,3
+30,0
+4,3
+2c,0
+4,3
+30,0
+4,2
+2c,0
+3,3
+2
+30,0
+4,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+3
+30,0
+3,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2
+30,0
+4,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+8,3
+30,0
+3,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2
+33e,0
+100 90 32
+332,0
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2f,0
+5,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2f,0
+3,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+2f,0
+3,2
+3
+2
+2b,0
+3,3
+2,2
+2f,0
+4,2
+3
+2b,0
+5,3
+2f,0
+4,2
+3
+2b,0
+3,3
+2,2
+2f,0
+3,3
+2,2
+2b,0
+3,2
+2,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+5,3
+2b,0
+2,2
+3,3
+2f,0
+5,3
+2b,0
+5,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+4,3
+2
+2b,0
+3,2
+2,3
+2f,0
+3,3
+2
+3
+2b,0
+3,3
+2,2
+2f,0
+4,2
+3
+2b,0
+5,3
+2f,0
+3,2
+3
+2
+2b,0
+3,3
+2,2
+2f,0
+3,2
+3
+2
+2b,0
+3,2
+3
+2
+2f,0
+2,2
+3
+2
+3
+2b,0
+2,3
+2,2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+3,3
+2
+3
+2f,0
+5,3
+5,0
+3,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+d,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+5,0
+3,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+d,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+5,0
+2,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+d,0
+2,3
+2,2
+3
+2f,0
+3,2
+3
+2
+5,0
+3,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+d,0
+3,2
+3
+2
+2f,0
+3,2
+3
+2
+5,0
+3,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+d,0
+3,3
+2,2
+2f,0
+4,2
+3
+5,0
+5,3
+f,0
+4,3
+2
+d,0
+5,3
+2f,0
+4,2
+3
+5,0
+3,3
+2,2
+f,0
+2,3
+2,2
+3
+d,0
+3,3
+2,2
+2f,0
+3,3
+2,2
+5,0
+3,2
+2,3
+f,0
+2,2
+2,3
+2
+d,0
+3,2
+2,3
+2f,0
+5,2
+5,0
+3,3
+2,2
+f,0
+2,3
+3,2
+d,0
+3,3
+2,2
+2f,0
+5,3
+5,0
+2,2
+3,3
+f,0
+2
+4,3
+d,0
+2,2
+3,3
+2f,0
+5,3
+5,0
+5,3
+f,0
+5,3
+d,0
+5,3
+2f,0
+5,2
+5,0
+3,3
+2,2
+f,0
+2,3
+3,2
+d,0
+3,3
+2,2
+2f,0
+4,3
+2
+5,0
+3,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2
+d,0
+3,2
+2,3
+2f,0
+3,3
+2
+3
+5,0
+3,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+3
+d,0
+3,3
+2,2
+2f,0
+4,2
+3
+5,0
+5,3
+2
+3
+6,2
+3
+2
+9,3
+2
+d,0
+5,3
+2f,0
+3,2
+3
+2
+5,0
+3,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+d,0
+3,3
+2,2
+2f,0
+3,2
+3
+2
+5,0
+3,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+d,0
+3,2
+3
+2
+2f,0
+2,2
+3
+2
+3
+2b,0
+2,3
+2,2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+3,3
+2
+3
+2f,0
+5,3
+2b,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+2,3
+2,2
+3
+2f,0
+3,2
+3
+2
+2b,0
+3,2
+3
+2
+2f,0
+3,2
+3
+2
+2b,0
+3,3
+2,2
+2f,0
+4,2
+3
+2b,0
+5,3
+2f,0
+4,2
+3
+2b,0
+3,3
+2,2
+2f,0
+3,3
+2,2
+2b,0
+3,2
+2,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+5,3
+2b,0
+2,2
+3,3
+2f,0
+5,3
+2b,0
+5,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+4,3
+2
+2b,0
+3,2
+2,3
+2f,0
+3,3
+2
+3
+2b,0
+3,3
+2,2
+2f,0
+4,2
+3
+2b,0
+5,3
+2f,0
+3,2
+3
+2
+2b,0
+3,3
+2,2
+2f,0
+3,2
+3
+2
+2b,0
+3,2
+3
+2
+2f,0
+2,2
+3
+2
+3
+2b,0
+2,3
+2,2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+3,3
+2
+3
+2f,0
+5,3
+2b,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+2,3
+2,2
+3
+2f,0
+3,2
+3
+2
+2b,0
+3,2
+3
+2
+2f,0
+3,2
+3
+2
+2b,0
+3,3
+2,2
+2f,0
+4,2
+3
+2b,0
+5,3
+2f,0
+4,2
+3
+2b,0
+3,3
+2,2
+2f,0
+3,3
+2,2
+2b,0
+3,2
+2,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+5,3
+2b,0
+2,2
+3,3
+2f,0
+5,3
+2b,0
+5,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+4,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2f,0
+3,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2f,0
+4,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2f,0
+3,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+2f,0
+3,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+2d9,0
+100 90 32
+332,0
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2f,0
+5,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2f,0
+3,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+2f,0
+3,2
+3
+2
+2b,0
+3,3
+2,2
+2f,0
+4,2
+3
+2b,0
+5,3
+2f,0
+4,2
+3
+2b,0
+3,3
+2,2
+2f,0
+3,3
+2,2
+2b,0
+3,2
+2,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+5,3
+2b,0
+2,2
+3,3
+2f,0
+5,3
+2b,0
+5,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+4,3
+2
+2b,0
+3,2
+2,3
+2f,0
+3,3
+2
+3
+2b,0
+3,3
+2,2
+2f,0
+4,2
+3
+2b,0
+5,3
+2f,0
+3,2
+3
+2
+2b,0
+3,3
+2,2
+2f,0
+3,2
+3
+2
+2b,0
+3,2
+3
+2
+2f,0
+2,2
+3
+2
+3
+2b,0
+2,3
+2,2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+3,3
+2
+3
+2f,0
+5,3
+5,0
+3,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+d,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+5,0
+3,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+d,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+5,0
+2,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+d,0
+2,3
+2,2
+3
+2f,0
+3,2
+3
+2
+5,0
+3,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+d,0
+3,2
+3
+2
+2f,0
+3,2
+3
+2
+5,0
+3,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+d,0
+3,3
+2,2
+2f,0
+4,2
+3
+5,0
+5,3
+f,0
+4,3
+2
+d,0
+5,3
+2f,0
+4,2
+3
+5,0
+3,3
+2,2
+f,0
+2,3
+2,2
+3
+d,0
+3,3
+2,2
+2f,0
+3,3
+2,2
+5,0
+3,2
+2,3
+f,0
+2,2
+2,3
+2
+d,0
+3,2
+2,3
+2f,0
+5,2
+5,0
+3,3
+2,2
+f,0
+2,3
+3,2
+d,0
+3,3
+2,2
+2f,0
+5,3
+5,0
+2,2
+3,3
+f,0
+2
+4,3
+d,0
+2,2
+3,3
+2f,0
+5,3
+5,0
+5,3
+f,0
+5,3
+d,0
+5,3
+2f,0
+5,2
+5,0
+3,3
+2,2
+f,0
+2,3
+3,2
+d,0
+3,3
+2,2
+2f,0
+4,3
+2
+5,0
+3,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2
+d,0
+3,2
+2,3
+2f,0
+3,3
+2
+3
+5,0
+3,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+3
+d,0
+3,3
+2,2
+2f,0
+4,2
+3
+5,0
+5,3
+2
+3
+6,2
+3
+2
+9,3
+2
+d,0
+5,3
+2f,0
+3,2
+3
+2
+5,0
+3,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+d,0
+3,3
+2,2
+2f,0
+3,2
+3
+2
+5,0
+3,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+d,0
+3,2
+3
+2
+2f,0
+2,2
+3
+2
+3
+2b,0
+2,3
+2,2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+3,3
+2
+3
+2f,0
+5,3
+2b,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+2,3
+2,2
+3
+2f,0
+3,2
+3
+2
+2b,0
+3,2
+3
+2
+2f,0
+3,2
+3
+2
+2b,0
+3,3
+2,2
+2f,0
+4,2
+3
+2b,0
+5,3
+2f,0
+4,2
+3
+2b,0
+3,3
+2,2
+2f,0
+3,3
+2,2
+2b,0
+3,2
+2,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+5,3
+2b,0
+2,2
+3,3
+2f,0
+5,3
+2b,0
+5,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+4,3
+2
+2b,0
+3,2
+2,3
+2f,0
+3,3
+2
+3
+2b,0
+3,3
+2,2
+2f,0
+4,2
+3
+2b,0
+5,3
+2f,0
+3,2
+3
+2
+2b,0
+3,3
+2,2
+2f,0
+3,2
+3
+2
+2b,0
+3,2
+3
+2
+2f,0
+2,2
+3
+2
+3
+2b,0
+2,3
+2,2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+3,3
+2
+3
+2f,0
+5,3
+2b,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+3,3
+2
+3
+2f,0
+2,2
+3
+2
+3
+2b,0
+2,3
+2,2
+3
+2f,0
+3,2
+3
+2
+2b,0
+3,2
+3
+2
+2f,0
+3,2
+3
+2
+2b,0
+3,3
+2,2
+2f,0
+4,2
+3
+2b,0
+5,3
+2f,0
+4,2
+3
+2b,0
+3,3
+2,2
+2f,0
+3,3
+2,2
+2b,0
+3,2
+2,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+5,3
+2b,0
+2,2
+3,3
+2f,0
+5,3
+2b,0
+5,3
+2f,0
+5,2
+2b,0
+3,3
+2,2
+2f,0
+4,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2f,0
+3,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2f,0
+4,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2f,0
+3,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+2f,0
+3,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+2d9,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a45.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a45.dat
new file mode 100644
index 000000000..c5d5614e8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a45.dat
@@ -0,0 +1,1173 @@
+! $XConsortium$
+100 90 32
+332,0
+3,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+1
+30,0
+2,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+3a,0
+4,1
+2c,0
+4,1
+94,0
+4,1
+2c,0
+4,1
+30,0
+2,1
+2e,0
+2,1
+34,0
+2,1
+2e,0
+2,1
+30,0
+3,1
+2d,0
+3,1
+34,0
+1
+2f,0
+1
+30,0
+3,1
+2d,0
+3,1
+34,0
+1
+2f,0
+1
+30,0
+2,1
+2e,0
+2,1
+96,0
+4,1
+2c,0
+4,1
+94,0
+4,1
+2c,0
+4,1
+30,0
+2,1
+2e,0
+2,1
+34,0
+2,1
+2e,0
+2,1
+30,0
+3,1
+a,0
+5,1
+3,0
+6,1
+15,0
+3,1
+34,0
+1
+7,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+11,0
+1
+30,0
+3,1
+a,0
+4,1
+6,0
+4,1
+15,0
+3,1
+34,0
+1
+7,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+11,0
+1
+30,0
+2,1
+b,0
+1
+22,0
+2,1
+3c,0
+4,1
+10,0
+4,1
+42,0
+4,1
+6,0
+2,1
+12,0
+4,1
+e,0
+4,1
+3c,0
+2,1
+10,0
+4,1
+42,0
+4,1
+6,0
+4,1
+10,0
+3,1
+f,0
+4,1
+30,0
+2,1
+8,0
+4,1
+10,0
+4,1
+e,0
+2,1
+34,0
+2,1
+6,0
+3,1
+14,0
+1
+10,0
+2,1
+30,0
+3,1
+a,0
+1
+22,0
+3,1
+34,0
+1
+7,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+11,0
+1
+30,0
+3,1
+a,0
+4,1
+6,0
+4,1
+15,0
+3,1
+34,0
+1
+7,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+11,0
+1
+30,0
+2,1
+b,0
+d,1
+16,0
+2,1
+96,0
+4,1
+2c,0
+4,1
+94,0
+4,1
+2c,0
+4,1
+30,0
+2,1
+2e,0
+2,1
+34,0
+2,1
+2e,0
+2,1
+30,0
+3,1
+2d,0
+3,1
+34,0
+1
+2f,0
+1
+30,0
+3,1
+2d,0
+3,1
+34,0
+1
+2f,0
+1
+30,0
+2,1
+2e,0
+2,1
+96,0
+4,1
+2c,0
+4,1
+94,0
+4,1
+2c,0
+4,1
+30,0
+2,1
+2e,0
+2,1
+34,0
+2,1
+2e,0
+2,1
+30,0
+3,1
+2d,0
+3,1
+34,0
+1
+2f,0
+1
+30,0
+3,1
+2d,0
+3,1
+34,0
+1
+2f,0
+1
+30,0
+2,1
+2e,0
+2,1
+96,0
+4,1
+2c,0
+4,1
+94,0
+4,1
+2c,0
+4,1
+30,0
+2,1
+2e,0
+2,1
+34,0
+2,1
+2e,0
+2,1
+30,0
+3,1
+2d,0
+3,1
+34,0
+1
+2f,0
+1
+30,0
+3,1
+2d,0
+3,1
+34,0
+1
+2f,0
+1
+30,0
+2,1
+2e,0
+2,1
+96,0
+c,1
+6,0
+12,1
+6,0
+a,1
+36,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+34,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+4,1
+30,0
+2,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+340,0
+100 90 32
+332,0
+3,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+2,1
+2f,0
+2,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+3a,0
+c,1
+6,0
+12,1
+6,0
+b,1
+93,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+96,0
+5,1
+2b,0
+5,1
+93,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+a,0
+5,1
+3,0
+6,1
+15,0
+3,1
+34,0
+2,1
+6,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+11,0
+2,1
+2f,0
+3,1
+a,0
+4,1
+6,0
+4,1
+15,0
+3,1
+34,0
+2,1
+6,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+11,0
+2,1
+2f,0
+2,1
+b,0
+d,1
+16,0
+2,1
+3c,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+2,1
+12,0
+5,1
+d,0
+5,1
+3b,0
+3,1
+f,0
+4,1
+42,0
+5,1
+5,0
+5,1
+f,0
+3,1
+0
+1
+d,0
+5,1
+2f,0
+2,1
+8,0
+5,1
+f,0
+5,1
+d,0
+2,1
+34,0
+3,1
+5,0
+3,1
+14,0
+2,1
+f,0
+3,1
+2f,0
+3,1
+a,0
+2,1
+21,0
+3,1
+34,0
+2,1
+6,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+11,0
+2,1
+2f,0
+3,1
+a,0
+4,1
+6,0
+4,1
+15,0
+3,1
+34,0
+2,1
+6,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+11,0
+2,1
+2f,0
+2,1
+b,0
+d,1
+16,0
+2,1
+3c,0
+8,1
+c,0
+5,1
+41,0
+5,1
+2b,0
+5,1
+93,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+96,0
+5,1
+2b,0
+5,1
+93,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+96,0
+5,1
+2b,0
+5,1
+93,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+96,0
+c,1
+6,0
+12,1
+6,0
+b,1
+35,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+34,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+5,1
+2f,0
+2,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+34,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+3,1
+2d9,0
+100 90 32
+332,0
+3,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+2,1
+2f,0
+2,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+3a,0
+c,1
+6,0
+12,1
+6,0
+b,1
+93,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+96,0
+5,1
+2b,0
+5,1
+93,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+a,0
+5,1
+3,0
+6,1
+15,0
+3,1
+34,0
+2,1
+6,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+11,0
+2,1
+2f,0
+3,1
+a,0
+4,1
+6,0
+4,1
+15,0
+3,1
+34,0
+2,1
+6,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+11,0
+2,1
+2f,0
+2,1
+b,0
+d,1
+16,0
+2,1
+3c,0
+5,1
+f,0
+5,1
+41,0
+5,1
+5,0
+2,1
+12,0
+5,1
+d,0
+5,1
+3b,0
+3,1
+f,0
+4,1
+42,0
+5,1
+5,0
+5,1
+f,0
+3,1
+0
+1
+d,0
+5,1
+2f,0
+2,1
+8,0
+5,1
+f,0
+5,1
+d,0
+2,1
+34,0
+3,1
+5,0
+3,1
+14,0
+2,1
+f,0
+3,1
+2f,0
+3,1
+a,0
+2,1
+21,0
+3,1
+34,0
+2,1
+6,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+11,0
+2,1
+2f,0
+3,1
+a,0
+4,1
+6,0
+4,1
+15,0
+3,1
+34,0
+2,1
+6,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+11,0
+2,1
+2f,0
+2,1
+b,0
+d,1
+16,0
+2,1
+3c,0
+8,1
+c,0
+5,1
+41,0
+5,1
+2b,0
+5,1
+93,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+96,0
+5,1
+2b,0
+5,1
+93,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+96,0
+5,1
+2b,0
+5,1
+93,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+96,0
+c,1
+6,0
+12,1
+6,0
+b,1
+35,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+34,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+5,1
+2f,0
+2,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+34,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+3,1
+2d9,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a46.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a46.dat
new file mode 100644
index 000000000..7fabf9eb8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a46.dat
@@ -0,0 +1,689 @@
+! $XConsortium$
+100 90 32
+332,0
+3,1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+38,0
+2,1
+b,0
+3,1
+15,0
+7,1
+3e,0
+a,1
+e,0
+c,1
+3a,0
+4,1
+c4,0
+4,1
+60,0
+2,1
+64,0
+2,1
+60,0
+3,1
+64,0
+1
+2f,0
+1
+30,0
+3,1
+2d,0
+3,1
+34,0
+1
+2f,0
+1
+30,0
+2,1
+2e,0
+2,1
+c6,0
+4,1
+c4,0
+4,1
+60,0
+2,1
+64,0
+2,1
+3d,0
+5,1
+3,0
+5,1
+16,0
+3,1
+3c,0
+1
+6,0
+5,1
+1c,0
+1
+3d,0
+4,1
+6,0
+3,1
+16,0
+3,1
+3c,0
+1
+0
+9,1
+1d,0
+1
+3d,0
+1
+60,0
+4,1
+60,0
+2,1
+64,0
+2,1
+56,0
+4,1
+6,0
+4,1
+56,0
+2,1
+8,0
+4,1
+58,0
+2,1
+1d,0
+1
+42,0
+3,1
+64,0
+1
+12,0
+1
+4,0
+3,1
+0
+1
+0
+1
+42,0
+3,1
+14,0
+4,1
+4c,0
+1
+17,0
+3,1
+0
+1
+0
+1
+42,0
+2,1
+14,0
+4,1
+ae,0
+4,1
+c4,0
+4,1
+2c,0
+4,1
+30,0
+2,1
+2e,0
+2,1
+34,0
+2,1
+2e,0
+2,1
+60,0
+3,1
+64,0
+1
+60,0
+3,1
+64,0
+1
+60,0
+2,1
+c6,0
+4,1
+c4,0
+4,1
+60,0
+2,1
+1c5,0
+1
+60,0
+2,1
+c6,0
+4,1
+c4,0
+4,1
+60,0
+2,1
+64,0
+2,1
+60,0
+3,1
+64,0
+1
+60,0
+3,1
+2d,0
+3,1
+34,0
+1
+2f,0
+1
+30,0
+2,1
+2e,0
+2,1
+a8,0
+a,1
+e,0
+a,1
+3e,0
+a,1
+12,0
+6,1
+42,0
+4,1
+6,0
+4,1
+14,0
+4,1
+3e,0
+1
+3,0
+8,1
+10,0
+8,1
+340,0
+100 90 32
+332,0
+3,1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+38,0
+2,1
+b,0
+3,1
+15,0
+7,1
+3e,0
+a,1
+e,0
+c,1
+3a,0
+c,1
+12,0
+6,1
+6,0
+2,1
+9c,0
+5,1
+5f,0
+2,1
+64,0
+3,1
+5f,0
+3,1
+64,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+c6,0
+5,1
+c3,0
+5,1
+5f,0
+2,1
+64,0
+3,1
+3c,0
+5,1
+3,0
+5,1
+16,0
+3,1
+3c,0
+1
+6,0
+5,1
+1c,0
+2,1
+3c,0
+4,1
+6,0
+3,1
+16,0
+3,1
+3c,0
+1
+0
+9,1
+1d,0
+2,1
+3c,0
+d,1
+54,0
+5,1
+5f,0
+2,1
+64,0
+3,1
+55,0
+5,1
+5,0
+5,1
+55,0
+2,1
+8,0
+5,1
+57,0
+3,1
+1c,0
+2,1
+41,0
+3,1
+64,0
+2,1
+11,0
+1
+4,0
+3,1
+0
+1
+0
+1
+42,0
+3,1
+14,0
+4,1
+4c,0
+2,1
+16,0
+3,1
+0
+1
+0
+1
+42,0
+2,1
+14,0
+4,1
+68,0
+5,1
+41,0
+5,1
+c3,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+5f,0
+3,1
+64,0
+2,1
+5f,0
+3,1
+64,0
+2,1
+5f,0
+2,1
+c6,0
+5,1
+c3,0
+5,1
+5f,0
+2,1
+1c5,0
+2,1
+5f,0
+2,1
+c6,0
+5,1
+c3,0
+5,1
+5f,0
+2,1
+64,0
+3,1
+5f,0
+3,1
+64,0
+2,1
+5f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+a8,0
+a,1
+e,0
+b,1
+3d,0
+a,1
+12,0
+6,1
+42,0
+4,1
+6,0
+4,1
+14,0
+5,1
+3d,0
+1
+3,0
+8,1
+10,0
+8,1
+41,0
+6,1
+5,0
+2,1
+e,0
+3,1
+5,0
+3,1
+2d9,0
+100 90 32
+332,0
+3,1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+38,0
+2,1
+b,0
+3,1
+15,0
+7,1
+3e,0
+a,1
+e,0
+c,1
+3a,0
+c,1
+12,0
+6,1
+6,0
+2,1
+9c,0
+5,1
+5f,0
+2,1
+64,0
+3,1
+5f,0
+3,1
+64,0
+2,1
+2e,0
+2,1
+2f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+c6,0
+5,1
+c3,0
+5,1
+5f,0
+2,1
+64,0
+3,1
+3c,0
+5,1
+3,0
+5,1
+16,0
+3,1
+3c,0
+1
+6,0
+5,1
+1c,0
+2,1
+3c,0
+4,1
+6,0
+3,1
+16,0
+3,1
+3c,0
+1
+0
+9,1
+1d,0
+2,1
+3c,0
+d,1
+54,0
+5,1
+5f,0
+2,1
+64,0
+3,1
+55,0
+5,1
+5,0
+5,1
+55,0
+2,1
+8,0
+5,1
+57,0
+3,1
+1c,0
+2,1
+41,0
+3,1
+64,0
+2,1
+11,0
+1
+4,0
+3,1
+0
+1
+0
+1
+42,0
+3,1
+14,0
+4,1
+4c,0
+2,1
+16,0
+3,1
+0
+1
+0
+1
+42,0
+2,1
+14,0
+4,1
+68,0
+5,1
+41,0
+5,1
+c3,0
+5,1
+2b,0
+5,1
+2f,0
+2,1
+2e,0
+2,1
+34,0
+3,1
+2d,0
+3,1
+5f,0
+3,1
+64,0
+2,1
+5f,0
+3,1
+64,0
+2,1
+5f,0
+2,1
+c6,0
+5,1
+c3,0
+5,1
+5f,0
+2,1
+1c5,0
+2,1
+5f,0
+2,1
+c6,0
+5,1
+c3,0
+5,1
+5f,0
+2,1
+64,0
+3,1
+5f,0
+3,1
+64,0
+2,1
+5f,0
+3,1
+2d,0
+3,1
+34,0
+2,1
+2e,0
+2,1
+2f,0
+2,1
+2e,0
+2,1
+a8,0
+a,1
+e,0
+b,1
+3d,0
+a,1
+12,0
+6,1
+42,0
+4,1
+6,0
+4,1
+14,0
+5,1
+3d,0
+1
+3,0
+8,1
+10,0
+8,1
+41,0
+6,1
+5,0
+2,1
+e,0
+3,1
+5,0
+3,1
+2d9,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a5.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a5.dat
new file mode 100644
index 000000000..f39b967ae
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a5.dat
@@ -0,0 +1,79 @@
+! $XConsortium$
+100 90 32
+3f2,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+4d7,0
+47,1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+47,1
+126f,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a52.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a52.dat
new file mode 100644
index 000000000..26d5ccdf9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a52.dat
@@ -0,0 +1,79 @@
+! $XConsortium$
+100 90 32
+2c3,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+279,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+1140,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a53.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a53.dat
new file mode 100644
index 000000000..b368740f9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a53.dat
@@ -0,0 +1,17 @@
+! $XConsortium$
+100 90 32
+4bf,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1bcb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a54.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a54.dat
new file mode 100644
index 000000000..e41b558e9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a54.dat
@@ -0,0 +1,79 @@
+! $XConsortium$
+100 90 32
+2c5,0
+3f,1
+24,0
+41,1
+22,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+22,0
+41,1
+24,0
+3f,1
+27d,0
+49,1
+1a,0
+4b,1
+18,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+18,0
+4b,1
+1a,0
+49,1
+1142,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a55.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a55.dat
new file mode 100644
index 000000000..5a4c20b78
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a55.dat
@@ -0,0 +1,79 @@
+! $XConsortium$
+100 90 32
+2c6,0
+3d,1
+26,0
+3f,1
+24,0
+41,1
+22,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+21,0
+43,1
+22,0
+41,1
+24,0
+3f,1
+26,0
+3d,1
+27f,0
+47,1
+1c,0
+49,1
+1a,0
+4b,1
+18,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+7,1
+3f,0
+7,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+17,0
+4d,1
+18,0
+4b,1
+1a,0
+49,1
+1c,0
+47,1
+1143,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a56.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a56.dat
new file mode 100644
index 000000000..b368740f9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a56.dat
@@ -0,0 +1,17 @@
+! $XConsortium$
+100 90 32
+4bf,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1bcb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a59.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a59.dat
new file mode 100644
index 000000000..f39b967ae
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a59.dat
@@ -0,0 +1,79 @@
+! $XConsortium$
+100 90 32
+3f2,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+4d7,0
+47,1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+47,1
+126f,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a6.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a6.dat
new file mode 100644
index 000000000..4ffbe78f9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a6.dat
@@ -0,0 +1,163 @@
+! $XConsortium$
+100 90 32
+32a,0
+15,1
+4f,0
+1
+13,0
+1
+50,0
+13,1
+0
+28,1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+28,0
+13,1
+0
+28,1
+27,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+50,0
+13,1
+0
+32,1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+31,0
+1
+1e,0
+13,1
+0
+32,1
+1d,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+4f,0
+15,1
+1049,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a60.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a60.dat
new file mode 100644
index 000000000..9d4b08953
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a60.dat
@@ -0,0 +1,1134 @@
+! $XConsortium$
+100 90 32
+25e,0
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+20,0
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+20,0
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+20,0
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+2,3
+20,0
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+20,0
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+20,0
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+20,0
+2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+20,0
+8,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+2
+20,0
+2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+20,0
+3
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3,2
+20,0
+2
+5,3
+e,2
+5,3
+e,2
+5,3
+e,2
+5,3
+5,2
+20,0
+2,3
+3,2
+10,3
+3,2
+10,3
+3,2
+10,3
+3,2
+6,3
+20,0
+44,3
+20,0
+2
+5,3
+e,2
+5,3
+e,2
+5,3
+e,2
+5,3
+5,2
+214,0
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+16,0
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+3
+16,0
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+3
+16,0
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+3
+16,0
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+16,0
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+2
+16,0
+2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+3
+16,0
+8,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+3,3
+16,0
+2
+5,3
+2,2
+3e,0
+3,2
+2,3
+2,2
+3
+16,0
+3
+5,2
+2,3
+3e,0
+2,3
+3,2
+2,3
+2
+16,0
+2
+5,3
+2,2
+3e,0
+7,2
+3
+16,0
+2,3
+3,2
+3,3
+3e,0
+8,3
+16,0
+4e,3
+16,0
+2
+5,3
+e,2
+5,3
+e,2
+5,3
+e,2
+5,3
+e,2
+3
+16,0
+3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+2
+16,0
+2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+3
+16,0
+8,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+3,3
+16,0
+2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+3
+16,0
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+2
+16,0
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+1140,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a61.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a61.dat
new file mode 100644
index 000000000..241d18264
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a61.dat
@@ -0,0 +1,563 @@
+! $XConsortium$
+100 90 32
+25e,0
+2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+5,2
+20,0
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+20,0
+2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+5,2
+20,0
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+20,0
+2
+d,3
+b,2
+d,3
+b,2
+d,3
+6,2
+20,0
+6,3
+c,2
+c,3
+c,2
+c,3
+c,2
+2,3
+20,0
+6,2
+12,3
+6,2
+12,3
+6,2
+e,3
+20,0
+c,3
+6,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+c,3
+6,2
+2,3
+20,0
+6,3
+6,2
+9,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+8,3
+20,0
+3,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+2,3
+20,0
+3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+2,2
+20,0
+2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+5,2
+20,0
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+20,0
+2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+5,2
+20,0
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+214,0
+3,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+16,0
+3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+3,3
+16,0
+2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+16,0
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+16,0
+2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+2
+16,0
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+5,3
+16,0
+2
+d,3
+b,2
+d,3
+b,2
+d,3
+b,2
+5,3
+16,0
+6,3
+c,2
+c,3
+c,2
+c,3
+c,2
+c,3
+16,0
+6,2
+2,3
+3e,0
+2,3
+6,2
+16,0
+8,3
+3e,0
+2,2
+6,3
+16,0
+6,3
+2,2
+3e,0
+8,3
+16,0
+3,3
+3,2
+2,3
+3e,0
+5,3
+3,2
+16,0
+3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+3,3
+16,0
+2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+16,0
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+16,0
+2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+2
+16,0
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+5,3
+16,0
+2
+d,3
+b,2
+d,3
+b,2
+d,3
+b,2
+5,3
+16,0
+6,3
+c,2
+c,3
+c,2
+c,3
+c,2
+c,3
+16,0
+6,2
+12,3
+6,2
+12,3
+6,2
+12,3
+6,2
+1140,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a62.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a62.dat
new file mode 100644
index 000000000..c4b80526c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a62.dat
@@ -0,0 +1,525 @@
+! $XConsortium$
+100 90 32
+25f,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+21,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+26,0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+21,0
+d,1
+b,0
+d,1
+b,0
+d,1
+26,0
+6,1
+c,0
+c,1
+c,0
+c,1
+c,0
+2,1
+26,0
+12,1
+6,0
+12,1
+6,0
+e,1
+20,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+2,1
+20,0
+6,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+8,1
+20,0
+3,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+2,1
+20,0
+1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+23,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+21,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+26,0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+214,0
+3,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+19,0
+1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+3,1
+17,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+1c,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+1d,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+18,0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+5,1
+17,0
+d,1
+b,0
+d,1
+b,0
+d,1
+b,0
+5,1
+16,0
+6,1
+c,0
+c,1
+c,0
+c,1
+c,0
+c,1
+1c,0
+2,1
+3e,0
+2,1
+1c,0
+8,1
+40,0
+6,1
+16,0
+6,1
+40,0
+8,1
+16,0
+3,1
+3,0
+2,1
+3e,0
+5,1
+19,0
+1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+3,1
+17,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+1c,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+1d,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+18,0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+5,1
+17,0
+d,1
+b,0
+d,1
+b,0
+d,1
+b,0
+5,1
+16,0
+6,1
+c,0
+c,1
+c,0
+c,1
+c,0
+c,1
+1c,0
+12,1
+6,0
+12,1
+6,0
+12,1
+1146,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a66.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a66.dat
new file mode 100644
index 000000000..d9189538b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a66.dat
@@ -0,0 +1,203 @@
+! $XConsortium$
+100 90 32
+3f2,0
+17,1
+4d,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+17,1
+1c63,0
+100 90 32
+bc2,0
+17,1
+4d,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+17,1
+129f,0
+100 90 32
+2328,0
+100 90 32
+409,0
+21,1
+29b,0
+21,1
+1c42,0
+100 90 32
+bd9,0
+21,1
+48f,0
+21,1
+127e,0
+100 90 32
+2328,0
+100 90 32
+42a,0
+5,1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+5f,0
+5,1
+1c3d,0
+100 90 32
+bfa,0
+f,1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+55,0
+f,1
+126f,0
+100 90 32
+2328,0
+100 90 32
+bc2,0
+17,1
+4d,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+17,1
+129f,0
+100 90 32
+2328,0
+100 90 32
+409,0
+21,1
+29b,0
+21,1
+1c42,0
+100 90 32
+bd9,0
+21,1
+48f,0
+21,1
+127e,0
+100 90 32
+2328,0
+100 90 32
+42a,0
+5,1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+5f,0
+5,1
+1c3d,0
+100 90 32
+bfa,0
+f,1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+55,0
+f,1
+126f,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a69.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a69.dat
new file mode 100644
index 000000000..2875f8801
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a69.dat
@@ -0,0 +1,113 @@
+! $XConsortium$
+100 90 32
+3f2,0
+a,1
+b,0
+d,1
+b,0
+d,1
+2a,0
+1
+9f,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+2,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+4d9,0
+1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+2,1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+81,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+63,0
+1
+1d,0
+1
+63,0
+1
+45,0
+1
+81,0
+1
+45,0
+1
+1d,0
+6,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+126f,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a71.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a71.dat
new file mode 100644
index 000000000..29b2f385f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a71.dat
@@ -0,0 +1,2655 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+3f2,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+4d7,0
+47,1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+47,1
+126f,0
+100 90 32
+3f2,0
+3d,2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+3d,2
+4d7,0
+47,2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+47,2
+126f,0
+100 90 32
+3f2,0
+3d,3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3d,3
+4d7,0
+47,3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+47,3
+126f,0
+100 90 32
+3f2,0
+3d,4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+3d,4
+4d7,0
+47,4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+47,4
+126f,0
+100 90 32
+3f2,0
+3d,6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+3d,6
+4d7,0
+47,6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+47,6
+126f,0
+100 90 32
+3f2,0
+3d,7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+3d,7
+4d7,0
+47,7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+47,7
+126f,0
+100 90 32
+3f2,0
+3d,10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+3d,10
+4d7,0
+47,10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+47,10
+126f,0
+100 90 32
+3f2,0
+3d,33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+3d,33
+4d7,0
+47,33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+47,33
+126f,0
+100 90 32
+3f2,0
+3d,81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+3d,81
+4d7,0
+47,81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+47,81
+126f,0
+100 90 32
+3f2,0
+3d,a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+3d,a3
+4d7,0
+47,a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+47,a3
+126f,0
+100 90 32
+3f2,0
+3d,ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+3d,ff
+4d7,0
+47,ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+47,ff
+126f,0
+100 90 32
+3f2,0
+3d,100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+3d,100
+4d7,0
+47,100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+47,100
+126f,0
+100 90 32
+3f2,0
+3d,12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+3d,12c
+4d7,0
+47,12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+47,12c
+126f,0
+100 90 32
+3f2,0
+3d,3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3d,3e8
+4d7,0
+47,3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+47,3e8
+126f,0
+100 90 32
+3f2,0
+3d,111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+3d,111111
+4d7,0
+47,111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+47,111111
+126f,0
+100 90 32
+3f2,0
+3d,400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+3d,400200
+4d7,0
+47,400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+47,400200
+126f,0
+100 90 32
+3f2,0
+3d,777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+3d,777777
+4d7,0
+47,777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+47,777777
+126f,0
+100 90 32
+3f2,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+4d7,0
+47,1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+47,1
+126f,0
+100 90 32
+3f2,0
+3d,2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+3d,2
+4d7,0
+47,2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+47,2
+126f,0
+100 90 32
+3f2,0
+3d,3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3d,3
+4d7,0
+47,3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+47,3
+126f,0
+100 90 32
+3f2,0
+3d,4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+3d,4
+4d7,0
+47,4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+47,4
+126f,0
+100 90 32
+3f2,0
+3d,6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+3d,6
+4d7,0
+47,6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+47,6
+126f,0
+100 90 32
+3f2,0
+3d,7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+3d,7
+4d7,0
+47,7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+47,7
+126f,0
+100 90 32
+3f2,0
+3d,10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+3d,10
+4d7,0
+47,10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+47,10
+126f,0
+100 90 32
+3f2,0
+3d,33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+3d,33
+4d7,0
+47,33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+47,33
+126f,0
+100 90 32
+3f2,0
+3d,81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+3d,81
+4d7,0
+47,81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+47,81
+126f,0
+100 90 32
+3f2,0
+3d,a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+3d,a3
+4d7,0
+47,a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+47,a3
+126f,0
+100 90 32
+3f2,0
+3d,ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+3d,ff
+4d7,0
+47,ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+47,ff
+126f,0
+100 90 32
+3f2,0
+3d,100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+3d,100
+4d7,0
+47,100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+47,100
+126f,0
+100 90 32
+3f2,0
+3d,12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+3d,12c
+4d7,0
+47,12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+47,12c
+126f,0
+100 90 32
+3f2,0
+3d,3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3d,3e8
+4d7,0
+47,3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+47,3e8
+126f,0
+100 90 32
+3f2,0
+3d,111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+3d,111111
+4d7,0
+47,111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+47,111111
+126f,0
+100 90 32
+3f2,0
+3d,400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+3d,400200
+4d7,0
+47,400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+47,400200
+126f,0
+100 90 32
+3f2,0
+3d,777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+3d,777777
+4d7,0
+47,777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+47,777777
+126f,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a73.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a73.dat
new file mode 100644
index 000000000..29b2f385f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a73.dat
@@ -0,0 +1,2655 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+3f2,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+4d7,0
+47,1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+47,1
+126f,0
+100 90 32
+3f2,0
+3d,2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+3d,2
+4d7,0
+47,2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+47,2
+126f,0
+100 90 32
+3f2,0
+3d,3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3d,3
+4d7,0
+47,3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+47,3
+126f,0
+100 90 32
+3f2,0
+3d,4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+3d,4
+4d7,0
+47,4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+47,4
+126f,0
+100 90 32
+3f2,0
+3d,6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+3d,6
+4d7,0
+47,6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+47,6
+126f,0
+100 90 32
+3f2,0
+3d,7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+3d,7
+4d7,0
+47,7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+47,7
+126f,0
+100 90 32
+3f2,0
+3d,10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+3d,10
+4d7,0
+47,10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+47,10
+126f,0
+100 90 32
+3f2,0
+3d,33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+3d,33
+4d7,0
+47,33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+47,33
+126f,0
+100 90 32
+3f2,0
+3d,81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+3d,81
+4d7,0
+47,81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+47,81
+126f,0
+100 90 32
+3f2,0
+3d,a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+3d,a3
+4d7,0
+47,a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+47,a3
+126f,0
+100 90 32
+3f2,0
+3d,ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+3d,ff
+4d7,0
+47,ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+47,ff
+126f,0
+100 90 32
+3f2,0
+3d,100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+3d,100
+4d7,0
+47,100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+47,100
+126f,0
+100 90 32
+3f2,0
+3d,12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+3d,12c
+4d7,0
+47,12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+47,12c
+126f,0
+100 90 32
+3f2,0
+3d,3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3d,3e8
+4d7,0
+47,3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+47,3e8
+126f,0
+100 90 32
+3f2,0
+3d,111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+3d,111111
+4d7,0
+47,111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+47,111111
+126f,0
+100 90 32
+3f2,0
+3d,400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+3d,400200
+4d7,0
+47,400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+47,400200
+126f,0
+100 90 32
+3f2,0
+3d,777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+3d,777777
+4d7,0
+47,777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+47,777777
+126f,0
+100 90 32
+3f2,0
+3d,1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3d,1
+4d7,0
+47,1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+47,1
+126f,0
+100 90 32
+3f2,0
+3d,2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+2
+3b,0
+2
+27,0
+3d,2
+4d7,0
+47,2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+2
+45,0
+2
+1d,0
+47,2
+126f,0
+100 90 32
+3f2,0
+3d,3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3
+3b,0
+3
+27,0
+3d,3
+4d7,0
+47,3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+3
+45,0
+3
+1d,0
+47,3
+126f,0
+100 90 32
+3f2,0
+3d,4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+4
+3b,0
+4
+27,0
+3d,4
+4d7,0
+47,4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+4
+45,0
+4
+1d,0
+47,4
+126f,0
+100 90 32
+3f2,0
+3d,6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+6
+3b,0
+6
+27,0
+3d,6
+4d7,0
+47,6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+6
+45,0
+6
+1d,0
+47,6
+126f,0
+100 90 32
+3f2,0
+3d,7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+7
+3b,0
+7
+27,0
+3d,7
+4d7,0
+47,7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+7
+45,0
+7
+1d,0
+47,7
+126f,0
+100 90 32
+3f2,0
+3d,10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+10
+3b,0
+10
+27,0
+3d,10
+4d7,0
+47,10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+10
+45,0
+10
+1d,0
+47,10
+126f,0
+100 90 32
+3f2,0
+3d,33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+33
+3b,0
+33
+27,0
+3d,33
+4d7,0
+47,33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+33
+45,0
+33
+1d,0
+47,33
+126f,0
+100 90 32
+3f2,0
+3d,81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+81
+3b,0
+81
+27,0
+3d,81
+4d7,0
+47,81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+81
+45,0
+81
+1d,0
+47,81
+126f,0
+100 90 32
+3f2,0
+3d,a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+a3
+3b,0
+a3
+27,0
+3d,a3
+4d7,0
+47,a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+a3
+45,0
+a3
+1d,0
+47,a3
+126f,0
+100 90 32
+3f2,0
+3d,ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+ff
+3b,0
+ff
+27,0
+3d,ff
+4d7,0
+47,ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+ff
+45,0
+ff
+1d,0
+47,ff
+126f,0
+100 90 32
+3f2,0
+3d,100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+100
+3b,0
+100
+27,0
+3d,100
+4d7,0
+47,100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+100
+45,0
+100
+1d,0
+47,100
+126f,0
+100 90 32
+3f2,0
+3d,12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+12c
+3b,0
+12c
+27,0
+3d,12c
+4d7,0
+47,12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+12c
+45,0
+12c
+1d,0
+47,12c
+126f,0
+100 90 32
+3f2,0
+3d,3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3e8
+3b,0
+3e8
+27,0
+3d,3e8
+4d7,0
+47,3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+3e8
+45,0
+3e8
+1d,0
+47,3e8
+126f,0
+100 90 32
+3f2,0
+3d,111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+111111
+3b,0
+111111
+27,0
+3d,111111
+4d7,0
+47,111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+111111
+45,0
+111111
+1d,0
+47,111111
+126f,0
+100 90 32
+3f2,0
+3d,400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+400200
+3b,0
+400200
+27,0
+3d,400200
+4d7,0
+47,400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+400200
+45,0
+400200
+1d,0
+47,400200
+126f,0
+100 90 32
+3f2,0
+3d,777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+777777
+3b,0
+777777
+27,0
+3d,777777
+4d7,0
+47,777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+777777
+45,0
+777777
+1d,0
+47,777777
+126f,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a75.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a75.dat
new file mode 100644
index 000000000..c1503c1e7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a75.dat
@@ -0,0 +1,1379 @@
+! $XConsortium$
+100 90 32
+3f2,0
+8,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+2,1
+63,0
+1
+8b,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+63,0
+1
+27,0
+b,1
+c,0
+c,1
+c,0
+c,1
+4d9,0
+3,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+23,0
+1
+45,0
+1
+1d,0
+1
+a9,0
+1
+81,0
+1
+45,0
+1
+81,0
+1
+45,0
+1
+81,0
+1
+63,0
+1
+45,0
+1
+1d,0
+1
+63,0
+2,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+6,1
+126f,0
+100 90 32
+3f3,0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+1
+c7,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+4db,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+3,1
+c7,0
+1
+c7,0
+1
+81,0
+1
+63,0
+1
+45,0
+1
+1d,0
+1
+63,0
+1
+45,0
+1
+1d,0
+1
+a9,0
+1
+24,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+1271,0
+100 90 32
+3f7,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+8,1
+27,0
+1
+3b,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+7,1
+b,0
+d,1
+b,0
+d,1
+4dd,0
+11,1
+6,0
+12,1
+6,0
+12,1
+23,0
+1
+45,0
+1
+63,0
+1
+1d,0
+1
+63,0
+1
+45,0
+1
+63,0
+1
+1d,0
+1
+c7,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+63,0
+1
+1d,0
+1
+63,0
+5,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+6,1
+126f,0
+100 90 32
+3f3,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+63,0
+1
+c7,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+27,0
+3d,1
+4d8,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+c7,0
+1
+1d,0
+1
+c7,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+81,0
+1
+63,0
+1
+45,0
+1
+c7,0
+1
+1e,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+126f,0
+100 90 32
+3fe,0
+5,1
+e,0
+5,1
+e,0
+5,1
+69,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+63,0
+1
+9f,0
+1
+28,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+4d9,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+1f,0
+1
+45,0
+1
+63,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+a9,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+1d,0
+1
+63,0
+1
+45,0
+1
+1e,0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+4,1
+126f,0
+100 90 32
+3f3,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+28,0
+1
+9f,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+4d8,0
+1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+3,1
+63,0
+1
+81,0
+1
+63,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+10d,0
+1
+1d,0
+1
+45,0
+1
+63,0
+1
+1d,0
+1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+1270,0
+100 90 32
+3f3,0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+1
+c7,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+3b,0
+1
+27,0
+3,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+4db,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+3,1
+c7,0
+1
+c7,0
+1
+81,0
+1
+63,0
+1
+45,0
+1
+1d,0
+1
+63,0
+1
+45,0
+1
+1d,0
+1
+a9,0
+1
+24,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+1271,0
+100 90 32
+3f7,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+8,1
+27,0
+1
+3b,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+8b,0
+1
+3b,0
+1
+27,0
+7,1
+b,0
+d,1
+b,0
+d,1
+4dd,0
+11,1
+6,0
+12,1
+6,0
+12,1
+23,0
+1
+45,0
+1
+63,0
+1
+1d,0
+1
+63,0
+1
+45,0
+1
+63,0
+1
+1d,0
+1
+c7,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+63,0
+1
+1d,0
+1
+63,0
+5,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+6,1
+126f,0
+100 90 32
+3f3,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+63,0
+1
+c7,0
+1
+27,0
+1
+c7,0
+1
+3b,0
+1
+27,0
+3d,1
+4d8,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+c7,0
+1
+1d,0
+1
+c7,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+81,0
+1
+63,0
+1
+45,0
+1
+c7,0
+1
+1e,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+126f,0
+100 90 32
+3fe,0
+5,1
+e,0
+5,1
+e,0
+5,1
+69,0
+1
+27,0
+1
+3b,0
+1
+8b,0
+1
+63,0
+1
+9f,0
+1
+28,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+4d9,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+1f,0
+1
+45,0
+1
+63,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+a9,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+1d,0
+1
+63,0
+1
+45,0
+1
+1e,0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+4,1
+126f,0
+100 90 32
+3f3,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+28,0
+1
+9f,0
+1
+63,0
+1
+27,0
+1
+63,0
+1
+63,0
+1
+3b,0
+1
+27,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+4d8,0
+1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+3,1
+63,0
+1
+81,0
+1
+63,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+45,0
+1
+1d,0
+1
+10d,0
+1
+1d,0
+1
+45,0
+1
+63,0
+1
+1d,0
+1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+1270,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a76.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a76.dat
new file mode 100644
index 000000000..5e6867bcd
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a76.dat
@@ -0,0 +1,10083 @@
+! $XConsortium$
+100 90 32
+208,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+d,1
+2f,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+d,1
+2f,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+2f,0
+d,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+2f,0
+a,1
+8a,0
+a,1
+be,0
+a,1
+be,0
+a,1
+1c9,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+a,1
+5,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+a,1
+5,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+a,1
+5,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+e,0
+a,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+e,0
+a,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+14,1
+50,0
+a,1
+64,0
+11,1
+49,0
+a,1
+6,0
+2,1
+0
+8,1
+49,0
+1b,1
+49,0
+a,1
+6,0
+2,1
+0
+8,1
+3,0
+a,1
+3c,0
+a,1
+6,0
+2,1
+0
+8,1
+3,0
+a,1
+3c,0
+a,1
+6,0
+2,1
+0
+8,1
+15,0
+a,1
+2a,0
+a,1
+6,0
+2,1
+0
+8,1
+15,0
+a,1
+2a,0
+a,1
+6,0
+2,1
+0
+8,1
+15,0
+a,1
+2a,0
+a,1
+6,0
+2,1
+0
+8,1
+15,0
+a,1
+3a,0
+2,1
+0
+8,1
+15,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+8e,0
+a,1
+5a,0
+a,1
+8a,0
+a,1
+be,0
+a,1
+be,0
+a,1
+282,0
+a,1
+be,0
+a,1
+be,0
+a,1
+8a,0
+a,1
+5a,0
+a,1
+8e,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+36,0
+6,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+216,0
+100 90 32
+208,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+f,1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+f,1
+8e,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+8a,0
+a,1
+291,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+44,0
+a,1
+5,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+a,1
+2a,0
+a,1
+5,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+a,1
+39,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+44,0
+a,1
+5,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10c,0
+14,1
+0
+8,1
+47,0
+a,1
+8,0
+2,1
+0
+8,1
+0
+a,1
+46,0
+a,1
+0
+8,1
+0
+a,1
+3c,0
+a,1
+8,0
+2,1
+0
+8,1
+13,0
+a,1
+2a,0
+14,1
+0
+8,1
+13,0
+a,1
+2a,0
+a,1
+8,0
+2,1
+0
+8,1
+13,0
+a,1
+2a,0
+a,1
+8,0
+2,1
+0
+8,1
+13,0
+a,1
+2a,0
+a,1
+8,0
+2,1
+0
+8,1
+13,0
+a,1
+2a,0
+a,1
+8,0
+2,1
+0
+8,1
+13,0
+a,1
+2a,0
+a,1
+8,0
+2,1
+0
+8,1
+13,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+8e,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+8a,0
+a,1
+412,0
+a,1
+8a,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+8e,0
+a,1
+c3,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+2f,0
+d,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+2f,0
+d,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+214,0
+100 90 32
+203,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+b,1
+2a,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+b,1
+2f,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+287,0
+a,1
+5a,0
+a,1
+12c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+15,0
+a,1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+15,0
+a,1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+a,1
+2,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+3,0
+a,1
+3c,0
+a,1
+5,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+3,0
+a,1
+6c,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+39,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+2a,0
+a,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+39,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+39,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+39,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+2a,0
+a,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+2a,0
+a,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+51,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+2a,0
+a,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+2a,0
+a,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+42,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+5a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+8a,0
+a,1
+2e6,0
+a,1
+5a,0
+a,1
+152,0
+a,1
+5a,0
+a,1
+2e6,0
+a,1
+61,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+b,1
+2a,0
+12,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+b,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+b,1
+2a,0
+12,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+b,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+b,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+20f,0
+100 90 32
+20f,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+6,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+6,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+6,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+6,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+6,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+a,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+a,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+a,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+a,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+2a,0
+a,1
+be,0
+a,1
+8a,0
+a,1
+2a,0
+a,1
+70,0
+8,1
+0
+2,1
+f,0
+a,1
+40,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+f,0
+a,1
+2a,0
+a,1
+c,0
+8,1
+0
+2,1
+43,0
+a,1
+c,0
+8,1
+0
+2,1
+4d,0
+a,1
+2,0
+8,1
+0
+2,1
+43,0
+a,1
+c,0
+12,1
+3c,0
+14,1
+2,0
+8,1
+0
+2,1
+43,0
+a,1
+c,0
+12,1
+3c,0
+a,1
+c,0
+8,1
+0
+2,1
+43,0
+a,1
+14,0
+a,1
+3c,0
+14,1
+50,0
+14,1
+8,0
+2,1
+46,0
+a,1
+5,0
+5,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+12,0
+a,1
+34,0
+a,1
+8,0
+2,1
+12,0
+a,1
+34,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+46,0
+a,1
+5a,0
+a,1
+8a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+2a,0
+a,1
+be,0
+a,1
+8a,0
+a,1
+2a,0
+a,1
+8a,0
+a,1
+be,0
+a,1
+2a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+2,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+2f,0
+a,1
+2,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+2f,0
+a,1
+2,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+2f,0
+a,1
+2,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+3b,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+4,0
+a,1
+36,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+6,1
+36,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+6,1
+36,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+6,1
+36,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+6,1
+36,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+6,1
+20f,0
+100 90 32
+20e,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+a,1
+0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+a,1
+0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+a,1
+152,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+5a,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+b,0
+2,1
+8,0
+9,1
+8,0
+a,1
+2a,0
+a,1
+b,0
+2,1
+8,0
+9,1
+3c,0
+a,1
+b,0
+2,1
+8,0
+9,1
+8,0
+a,1
+2a,0
+a,1
+b,0
+2,1
+8,0
+9,1
+8,0
+a,1
+2a,0
+a,1
+b,0
+2,1
+8,0
+9,1
+46,0
+a,1
+0
+2,1
+7,0
+a,1
+46,0
+a,1
+0
+2,1
+7,0
+a,1
+46,0
+a,1
+0
+2,1
+7,0
+a,1
+8,0
+a,1
+34,0
+a,1
+0
+2,1
+7,0
+a,1
+46,0
+a,1
+0
+2,1
+8,0
+4,1
+d,0
+a,1
+34,0
+a,1
+a,0
+a,1
+46,0
+a,1
+a,0
+a,1
+8,0
+a,1
+34,0
+b,1
+b,0
+1
+0
+1
+41,0
+a,1
+9,0
+2,1
+b,0
+1
+0
+1
+41,0
+a,1
+9,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+9,0
+a,1
+4f,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+d5,0
+a,1
+5a,0
+a,1
+8e,0
+a,1
+be,0
+a,1
+be,0
+a,1
+152,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+5a,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+5a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+152,0
+a,1
+be,0
+a,1
+3a,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3,0
+a,1
+3a,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+37,0
+a,1
+6,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+37,0
+a,1
+6,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+21c,0
+100 90 32
+208,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+e,1
+2e,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+e,1
+2e,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+2f,0
+d,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+2f,0
+d,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+5f,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+1c8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+b,1
+4,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+b,1
+4,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+b,1
+4,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+e,0
+b,1
+38,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+e,0
+b,1
+38,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+17,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+b,1
+63,0
+11,1
+49,0
+b,1
+5,0
+2,1
+0
+8,1
+49,0
+1b,1
+49,0
+b,1
+5,0
+2,1
+0
+8,1
+3,0
+b,1
+3b,0
+b,1
+5,0
+2,1
+0
+8,1
+3,0
+b,1
+3b,0
+b,1
+5,0
+2,1
+0
+8,1
+15,0
+b,1
+29,0
+b,1
+5,0
+2,1
+0
+8,1
+15,0
+b,1
+29,0
+b,1
+5,0
+2,1
+0
+8,1
+15,0
+b,1
+29,0
+b,1
+5,0
+2,1
+0
+8,1
+15,0
+b,1
+39,0
+2,1
+0
+8,1
+15,0
+b,1
+39,0
+2,1
+0
+8,1
+15,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+8d,0
+b,1
+59,0
+b,1
+89,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+281,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+89,0
+b,1
+59,0
+b,1
+8d,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+36,0
+6,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+1b2,0
+100 90 32
+208,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+2f,0
+b,1
+25,0
+b,1
+29,0
+b,1
+89,0
+b,1
+290,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+44,0
+b,1
+4,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+b,1
+29,0
+b,1
+4,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+b,1
+38,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+44,0
+b,1
+4,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+a8,0
+1d,1
+47,0
+b,1
+7,0
+2,1
+0
+8,1
+0
+b,1
+45,0
+13,1
+0
+b,1
+3b,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+29,0
+1d,1
+13,0
+b,1
+29,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+29,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+29,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+29,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+29,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+29,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+8d,0
+b,1
+25,0
+b,1
+29,0
+b,1
+89,0
+b,1
+411,0
+b,1
+89,0
+b,1
+29,0
+b,1
+25,0
+b,1
+8d,0
+b,1
+c2,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+2f,0
+d,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+2f,0
+d,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+1b0,0
+100 90 32
+203,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+c,1
+29,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+c,1
+2e,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+223,0
+b,1
+59,0
+b,1
+12b,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+15,0
+b,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+15,0
+b,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+b,1
+0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+3,0
+b,1
+3b,0
+b,1
+4,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+3,0
+b,1
+4a,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+15,0
+b,1
+29,0
+b,1
+25,0
+b,1
+38,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+29,0
+b,1
+4,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+38,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+38,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+38,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+29,0
+b,1
+4,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+29,0
+b,1
+4,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+51,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+29,0
+b,1
+4,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+29,0
+b,1
+4,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+42,0
+b,1
+4,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+42,0
+b,1
+59,0
+b,1
+25,0
+b,1
+29,0
+b,1
+59,0
+b,1
+25,0
+b,1
+29,0
+b,1
+89,0
+b,1
+2e5,0
+b,1
+59,0
+b,1
+151,0
+b,1
+59,0
+b,1
+2e5,0
+b,1
+60,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+29,0
+12,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+29,0
+12,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+1aa,0
+100 90 32
+20f,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+7,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+7,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+7,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+7,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+7,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+b,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+b,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+b,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+b,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+b,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+29,0
+b,1
+bd,0
+b,1
+89,0
+b,1
+29,0
+b,1
+6f,0
+8,1
+0
+2,1
+f,0
+b,1
+3f,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+f,0
+b,1
+29,0
+b,1
+b,0
+8,1
+0
+2,1
+43,0
+b,1
+b,0
+8,1
+0
+2,1
+4d,0
+b,1
+0
+8,1
+0
+2,1
+43,0
+b,1
+b,0
+13,1
+3b,0
+15,1
+0
+8,1
+0
+2,1
+43,0
+b,1
+b,0
+13,1
+3b,0
+b,1
+b,0
+8,1
+0
+2,1
+43,0
+b,1
+b,0
+13,1
+3b,0
+15,1
+4f,0
+15,1
+7,0
+2,1
+46,0
+b,1
+4,0
+5,1
+8,0
+2,1
+50,0
+b,1
+7,0
+2,1
+12,0
+b,1
+33,0
+b,1
+7,0
+2,1
+12,0
+b,1
+33,0
+b,1
+7,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+46,0
+14,1
+8,0
+2,1
+46,0
+b,1
+89,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+29,0
+b,1
+bd,0
+b,1
+89,0
+b,1
+29,0
+b,1
+89,0
+b,1
+bd,0
+b,1
+29,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+2f,0
+b,1
+0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+2f,0
+b,1
+0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+2f,0
+b,1
+0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+3b,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+4,0
+b,1
+35,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+7,1
+35,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+7,1
+35,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+7,1
+35,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+7,1
+35,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+7,1
+35,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+7,1
+1aa,0
+100 90 32
+20e,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+d,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+d,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+d,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+127,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+59,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+a,0
+2,1
+8,0
+a,1
+7,0
+b,1
+29,0
+b,1
+a,0
+2,1
+8,0
+a,1
+3b,0
+b,1
+a,0
+2,1
+8,0
+a,1
+7,0
+b,1
+29,0
+b,1
+a,0
+2,1
+8,0
+a,1
+7,0
+b,1
+29,0
+b,1
+a,0
+2,1
+8,0
+a,1
+45,0
+d,1
+7,0
+b,1
+45,0
+d,1
+7,0
+b,1
+45,0
+d,1
+7,0
+b,1
+7,0
+b,1
+33,0
+d,1
+7,0
+b,1
+45,0
+d,1
+8,0
+4,1
+d,0
+b,1
+33,0
+d,1
+7,0
+b,1
+45,0
+b,1
+9,0
+b,1
+7,0
+b,1
+33,0
+b,1
+b,0
+1
+0
+1
+41,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+41,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+9,0
+b,1
+4e,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+71,0
+b,1
+59,0
+b,1
+8d,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+151,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+59,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+59,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+151,0
+b,1
+bd,0
+b,1
+39,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3,0
+b,1
+39,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+37,0
+b,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+37,0
+b,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+1b8,0
+100 90 32
+208,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+6,1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+f,1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+f,1
+8e,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+8a,0
+a,1
+291,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+44,0
+a,1
+5,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+a,1
+2a,0
+a,1
+5,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+a,1
+39,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+44,0
+a,1
+5,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10c,0
+14,1
+0
+8,1
+47,0
+a,1
+8,0
+2,1
+0
+8,1
+0
+a,1
+46,0
+a,1
+0
+8,1
+0
+a,1
+3c,0
+a,1
+8,0
+2,1
+0
+8,1
+13,0
+a,1
+2a,0
+14,1
+0
+8,1
+13,0
+a,1
+2a,0
+a,1
+8,0
+2,1
+0
+8,1
+13,0
+a,1
+2a,0
+a,1
+8,0
+2,1
+0
+8,1
+13,0
+a,1
+2a,0
+a,1
+8,0
+2,1
+0
+8,1
+13,0
+a,1
+2a,0
+a,1
+8,0
+2,1
+0
+8,1
+13,0
+a,1
+2a,0
+a,1
+8,0
+2,1
+0
+8,1
+13,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+8e,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+8a,0
+a,1
+412,0
+a,1
+8a,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+8e,0
+a,1
+c3,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+2f,0
+d,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+2f,0
+d,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+214,0
+100 90 32
+203,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+b,1
+2a,0
+a,1
+2,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+b,1
+2f,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+287,0
+a,1
+5a,0
+a,1
+12c,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+15,0
+a,1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+15,0
+a,1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+a,1
+2,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+3,0
+a,1
+3c,0
+a,1
+5,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+3,0
+a,1
+6c,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+39,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+2a,0
+a,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+39,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+39,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+39,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+2a,0
+a,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+2a,0
+a,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+51,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+2a,0
+a,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+a,1
+2a,0
+a,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+42,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+5a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+8a,0
+a,1
+2e6,0
+a,1
+5a,0
+a,1
+152,0
+a,1
+5a,0
+a,1
+2e6,0
+a,1
+61,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+b,1
+2a,0
+12,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+b,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+b,1
+2a,0
+12,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+b,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+b,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+20f,0
+100 90 32
+20f,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+6,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+6,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+6,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+6,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+6,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+a,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+a,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+a,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+a,1
+36,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+2a,0
+a,1
+be,0
+a,1
+8a,0
+a,1
+2a,0
+a,1
+70,0
+8,1
+0
+2,1
+f,0
+a,1
+40,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+f,0
+a,1
+2a,0
+a,1
+c,0
+8,1
+0
+2,1
+43,0
+a,1
+c,0
+8,1
+0
+2,1
+4d,0
+a,1
+2,0
+8,1
+0
+2,1
+43,0
+a,1
+c,0
+12,1
+3c,0
+14,1
+2,0
+8,1
+0
+2,1
+43,0
+a,1
+c,0
+12,1
+3c,0
+a,1
+c,0
+8,1
+0
+2,1
+43,0
+a,1
+14,0
+a,1
+3c,0
+14,1
+50,0
+14,1
+8,0
+2,1
+46,0
+a,1
+5,0
+5,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+12,0
+a,1
+34,0
+a,1
+8,0
+2,1
+12,0
+a,1
+34,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+46,0
+a,1
+5a,0
+a,1
+8a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+2a,0
+a,1
+be,0
+a,1
+8a,0
+a,1
+2a,0
+a,1
+8a,0
+a,1
+be,0
+a,1
+2a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+2,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+2f,0
+a,1
+2,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+2f,0
+a,1
+2,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+2f,0
+a,1
+2,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+3b,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+4,0
+a,1
+36,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+6,1
+36,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+6,1
+36,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+6,1
+36,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+6,1
+36,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+6,1
+20f,0
+100 90 32
+20e,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+a,1
+0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+a,1
+0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+a,1
+152,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+5a,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+b,0
+2,1
+8,0
+9,1
+8,0
+a,1
+2a,0
+a,1
+b,0
+2,1
+8,0
+9,1
+3c,0
+a,1
+b,0
+2,1
+8,0
+9,1
+8,0
+a,1
+2a,0
+a,1
+b,0
+2,1
+8,0
+9,1
+8,0
+a,1
+2a,0
+a,1
+b,0
+2,1
+8,0
+9,1
+46,0
+a,1
+0
+2,1
+7,0
+a,1
+46,0
+a,1
+0
+2,1
+7,0
+a,1
+46,0
+a,1
+0
+2,1
+7,0
+a,1
+8,0
+a,1
+34,0
+a,1
+0
+2,1
+7,0
+a,1
+46,0
+a,1
+0
+2,1
+8,0
+4,1
+d,0
+a,1
+34,0
+a,1
+a,0
+a,1
+46,0
+a,1
+a,0
+a,1
+8,0
+a,1
+34,0
+b,1
+b,0
+1
+0
+1
+41,0
+a,1
+9,0
+2,1
+b,0
+1
+0
+1
+41,0
+a,1
+9,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+9,0
+a,1
+4f,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+d5,0
+a,1
+5a,0
+a,1
+8e,0
+a,1
+be,0
+a,1
+be,0
+a,1
+152,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+5a,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+5a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+26,0
+a,1
+2a,0
+a,1
+152,0
+a,1
+be,0
+a,1
+3a,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3,0
+a,1
+3a,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+37,0
+a,1
+6,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+37,0
+a,1
+6,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+21c,0
+100 90 32
+208,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+34,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+e,1
+2e,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+e,1
+2e,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+2f,0
+d,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+2f,0
+d,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+5f,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+1c8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+b,1
+4,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+b,1
+4,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+b,1
+4,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+51,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+e,0
+b,1
+38,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+e,0
+b,1
+38,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+17,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+42,0
+b,1
+63,0
+11,1
+49,0
+b,1
+5,0
+2,1
+0
+8,1
+49,0
+1b,1
+49,0
+b,1
+5,0
+2,1
+0
+8,1
+3,0
+b,1
+3b,0
+b,1
+5,0
+2,1
+0
+8,1
+3,0
+b,1
+3b,0
+b,1
+5,0
+2,1
+0
+8,1
+15,0
+b,1
+29,0
+b,1
+5,0
+2,1
+0
+8,1
+15,0
+b,1
+29,0
+b,1
+5,0
+2,1
+0
+8,1
+15,0
+b,1
+29,0
+b,1
+5,0
+2,1
+0
+8,1
+15,0
+b,1
+39,0
+2,1
+0
+8,1
+15,0
+b,1
+39,0
+2,1
+0
+8,1
+15,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+8d,0
+b,1
+59,0
+b,1
+89,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+281,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+89,0
+b,1
+59,0
+b,1
+8d,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+36,0
+6,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+31,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+1b2,0
+100 90 32
+208,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+7,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+34,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+10,1
+2e,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+2f,0
+b,1
+25,0
+b,1
+29,0
+b,1
+89,0
+b,1
+290,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+44,0
+b,1
+4,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+b,1
+29,0
+b,1
+4,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+10,0
+b,1
+38,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+44,0
+b,1
+4,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+a8,0
+1d,1
+47,0
+b,1
+7,0
+2,1
+0
+8,1
+0
+b,1
+45,0
+13,1
+0
+b,1
+3b,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+29,0
+1d,1
+13,0
+b,1
+29,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+29,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+29,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+29,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+29,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+29,0
+b,1
+7,0
+2,1
+0
+8,1
+13,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+8d,0
+b,1
+25,0
+b,1
+29,0
+b,1
+89,0
+b,1
+411,0
+b,1
+89,0
+b,1
+29,0
+b,1
+25,0
+b,1
+8d,0
+b,1
+c2,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+2f,0
+d,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+2f,0
+d,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+34,0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+1b0,0
+100 90 32
+203,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+2f,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+c,1
+29,0
+b,1
+0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+c,1
+2e,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+34,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+223,0
+b,1
+59,0
+b,1
+12b,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+15,0
+b,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+15,0
+b,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+53,0
+b,1
+0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+58,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+3,0
+b,1
+3b,0
+b,1
+4,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+3,0
+b,1
+4a,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+15,0
+b,1
+29,0
+b,1
+25,0
+b,1
+38,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+29,0
+b,1
+4,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+38,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+38,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+38,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+29,0
+b,1
+4,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+29,0
+b,1
+4,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+51,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+29,0
+b,1
+4,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+e,0
+b,1
+29,0
+b,1
+4,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+42,0
+b,1
+4,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+42,0
+b,1
+59,0
+b,1
+25,0
+b,1
+29,0
+b,1
+59,0
+b,1
+25,0
+b,1
+29,0
+b,1
+89,0
+b,1
+2e5,0
+b,1
+59,0
+b,1
+151,0
+b,1
+59,0
+b,1
+2e5,0
+b,1
+60,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+29,0
+12,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+29,0
+12,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+c,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+30,0
+2,1
+0
+8,1
+8,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+9,1
+1aa,0
+100 90 32
+20f,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+7,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+7,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+7,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+7,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+7,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+b,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+b,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+b,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+b,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+b,1
+35,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+4,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+29,0
+b,1
+bd,0
+b,1
+89,0
+b,1
+29,0
+b,1
+6f,0
+8,1
+0
+2,1
+f,0
+b,1
+3f,0
+8,1
+0
+2,1
+59,0
+8,1
+0
+2,1
+f,0
+b,1
+29,0
+b,1
+b,0
+8,1
+0
+2,1
+43,0
+b,1
+b,0
+8,1
+0
+2,1
+4d,0
+b,1
+0
+8,1
+0
+2,1
+43,0
+b,1
+b,0
+13,1
+3b,0
+15,1
+0
+8,1
+0
+2,1
+43,0
+b,1
+b,0
+13,1
+3b,0
+b,1
+b,0
+8,1
+0
+2,1
+43,0
+b,1
+b,0
+13,1
+3b,0
+15,1
+4f,0
+15,1
+7,0
+2,1
+46,0
+b,1
+4,0
+5,1
+8,0
+2,1
+50,0
+b,1
+7,0
+2,1
+12,0
+b,1
+33,0
+b,1
+7,0
+2,1
+12,0
+b,1
+33,0
+b,1
+7,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+50,0
+a,1
+8,0
+2,1
+46,0
+14,1
+8,0
+2,1
+46,0
+b,1
+89,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+29,0
+b,1
+bd,0
+b,1
+89,0
+b,1
+29,0
+b,1
+89,0
+b,1
+bd,0
+b,1
+29,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+2f,0
+b,1
+0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+2f,0
+b,1
+0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+2f,0
+b,1
+0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+1
+3b,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+4,0
+b,1
+35,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+7,1
+35,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+7,1
+35,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+7,1
+35,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+7,1
+35,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+7,1
+35,0
+2,1
+b,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+7,1
+1aa,0
+100 90 32
+20e,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+d,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+d,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2f,0
+d,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+127,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+59,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+a,0
+2,1
+8,0
+a,1
+7,0
+b,1
+29,0
+b,1
+a,0
+2,1
+8,0
+a,1
+3b,0
+b,1
+a,0
+2,1
+8,0
+a,1
+7,0
+b,1
+29,0
+b,1
+a,0
+2,1
+8,0
+a,1
+7,0
+b,1
+29,0
+b,1
+a,0
+2,1
+8,0
+a,1
+45,0
+d,1
+7,0
+b,1
+45,0
+d,1
+7,0
+b,1
+45,0
+d,1
+7,0
+b,1
+7,0
+b,1
+33,0
+d,1
+7,0
+b,1
+45,0
+d,1
+8,0
+4,1
+d,0
+b,1
+33,0
+d,1
+7,0
+b,1
+45,0
+b,1
+9,0
+b,1
+7,0
+b,1
+33,0
+b,1
+b,0
+1
+0
+1
+41,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+41,0
+b,1
+8,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+9,0
+b,1
+4e,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+54,0
+2,1
+b,0
+1
+0
+1
+71,0
+b,1
+59,0
+b,1
+8d,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+151,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+59,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+59,0
+b,1
+25,0
+b,1
+29,0
+b,1
+25,0
+b,1
+29,0
+b,1
+151,0
+b,1
+bd,0
+b,1
+39,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+3,0
+b,1
+39,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+37,0
+b,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+37,0
+b,1
+5,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+47,0
+1
+0
+1
+0
+1
+3,0
+2,1
+0
+8,1
+8,0
+2,1
+1b8,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a77.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a77.dat
new file mode 100644
index 000000000..587af4f65
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a77.dat
@@ -0,0 +1,1401 @@
+! $XConsortium$
+100 90 32
+3fc,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+2,1
+33,0
+1
+2f,0
+1
+33,0
+1
+63,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+63,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+a1,0
+1
+5,0
+3,1
+9,0
+3,1
+11,0
+1
+3d,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+45,0
+1
+9,0
+1
+13,0
+1
+45,0
+1
+9,0
+1
+13,0
+1
+45,0
+1
+9,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+11,0
+1
+51,0
+1
+11,0
+1
+3d,0
+1
+13,0
+1
+11,0
+1
+3d,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+45,0
+1
+9,0
+1
+13,0
+1
+4f,0
+1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+2,0
+1
+0
+2,1
+45,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+63,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+63,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+c7,0
+1
+33,0
+1
+63,0
+1
+63,0
+1
+2f,0
+1
+63,0
+1
+fb,0
+1
+63,0
+1
+2f,0
+1
+63,0
+1
+63,0
+1
+33,0
+1
+c7,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+c,1
+9,0
+3,1
+5,0
+1
+0
+2,1
+0
+7,1
+0
+5,1
+3a5,0
+100 90 32
+3fc,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+2,1
+33,0
+1
+2f,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+97,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+63,0
+1
+9,0
+1
+5,0
+3,1
+9,0
+3,1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+63,0
+1
+4f,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+2,0
+1
+0
+2,1
+11,0
+1
+33,0
+1
+2f,0
+1
+63,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+97,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+2f,0
+1
+33,0
+1
+63,0
+1
+2f,0
+1
+63,0
+1
+97,0
+1
+63,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+63,0
+1
+fb,0
+1
+63,0
+1
+2f,0
+1
+63,0
+1
+97,0
+1
+c7,0
+1
+2f,0
+1
+33,0
+e,1
+9,0
+3,1
+5,0
+1
+2,0
+1
+7,0
+1
+3a9,0
+100 90 32
+3fc,0
+31,1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+9,0
+15,1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+15,1
+11,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+31,1
+3a3,0
+100 90 32
+3fc,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+2,1
+33,0
+1
+2f,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+97,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+63,0
+1
+9,0
+1
+5,0
+3,1
+9,0
+3,1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+4f,0
+1
+13,0
+1
+63,0
+1
+4f,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+2,0
+1
+0
+2,1
+11,0
+1
+33,0
+1
+2f,0
+1
+63,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+97,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+2f,0
+1
+33,0
+1
+63,0
+1
+2f,0
+1
+63,0
+1
+97,0
+1
+63,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+63,0
+1
+fb,0
+1
+63,0
+1
+2f,0
+1
+63,0
+1
+97,0
+1
+c7,0
+1
+2f,0
+1
+33,0
+e,1
+9,0
+3,1
+5,0
+1
+2,0
+1
+7,0
+1
+3a9,0
+100 90 32
+3fc,0
+31,1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+9,0
+15,1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+1
+13,0
+1
+11,0
+1
+33,0
+1
+9,0
+15,1
+11,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+31,1
+3a3,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a78.dat b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a78.dat
new file mode 100644
index 000000000..678ac463b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/a78.dat
@@ -0,0 +1,183 @@
+! $XConsortium$
+100 90 32
+3fc,0
+8,1
+8,0
+8,1
+8,0
+8,1
+8,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+223,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+33,0
+1
+9,0
+8,1
+8,0
+5,1
+11,0
+1
+33,0
+1
+1d,0
+1
+11,0
+1
+33,0
+1
+1d,0
+1
+11,0
+1
+33,0
+1
+1d,0
+1
+11,0
+1
+33,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+6d,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+4,1
+8,0
+8,1
+12,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+223,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+223,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+33,0
+1
+2f,0
+1
+33,0
+1
+2f,0
+1
+33,0
+6,1
+8,0
+8,1
+8,0
+8,1
+8,0
+3,1
+3a3,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwrctngls/drwrctngls.m b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/drwrctngls.m
new file mode 100644
index 000000000..d2ee87d1b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwrctngls/drwrctngls.m
@@ -0,0 +1,186 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawRectangles CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+XRectangle *rectangles = defrects;;
+int nrectangles = NRECTS;
+>>EXTERN
+
+static XRectangle defrects[] = {
+ {10, 10, 60, 7},
+ {10, 30, 70, 12},
+ {10, 8, 20, 40},
+};
+
+#define NRECTS 2
+#define NRECTSCROSS 3 /* +extra that intersects */
+
+#ifdef MIN
+#undef MIN
+#endif
+#define MIN(a,b) (((a)<(b)) ? (a) : (b))
+
+#ifdef MAX
+#undef MAX
+#endif
+#define MAX(a,b) (((a)>(b)) ? (a) : (b))
+
+static void
+drawline(ax1, ay1, ax2, ay2)
+int ax1, ay1, ax2, ay2;
+{
+XRectangle rect;
+int pass = 0, fail = 0;
+int x2 = MAX(ax1,ax2), y2 = MAX(ay1,ay2);
+ /*
+ * Draw a rectangle that has the two given points as vertices.
+ * Some tests then do not apply or need slight modification.
+ * Sort them as the protocol specifies rects as top-left and w & h
+ * so drawing a rectangle "in reverse" isn't possible.
+ */
+ rect.x = MIN(ax1,ax2); rect.y = MIN(ay1,ay2);
+ rect.width = x2 - rect.x;
+ rect.height = y2 - rect.y;
+ rectangles = &rect;
+ nrectangles = 1;
+ XCALL;
+}
+#undef MIN
+#undef MAX
+
+static void
+setfordash()
+{
+static XRectangle rects[] = {
+ {20, 10, 48, 70},
+ {30, 30, 20, 12},
+ };
+ rectangles = rects;
+ nrectangles = NELEM(rects);
+}
+>>ASSERTION Good A
+A call to xname draws the outlines of
+.A nrectangles
+rectangles
+specified by
+.A rectangles
+in the drawable
+.A d .
+>>STRATEGY
+Draw rectangles.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+>>ASSERTION def
+A call to xname draws each rectangle as if a five-point PolyLine protocol
+request were specified for each rectangle in the order
+[x, y], [x+width, y], [x+width, y+height], [x, y+height], [x, y].
+>>ASSERTION def
+All four
+corners of each rectangle join.
+>>ASSERTION Good B 1
+A call to xname draws the rectangles in the order listed in the array.
+>>ASSERTION Good A
+A call to xname does not draw each pixel of a particular rectangle more than
+once.
+>>STRATEGY
+Set function to GXxor
+Draw rectangles
+Pixmap verify
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When the rectangles intersect,
+then the intersecting pixels are drawn multiple times.
+>>STRATEGY
+Set function to GXxor
+Draw rectangles which intersect
+Pixmap verify
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+ nrectangles = NRECTSCROSS;
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M line-width ,
+.M line-style ,
+.M join-style
+.M fill-style ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin ,
+.M tile-stipple-y-origin ,
+.M dash-offset
+and
+.M dash-list
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a1.dat
new file mode 100644
index 000000000..d72a85bbc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a1.dat
@@ -0,0 +1,81 @@
+! $XConsortium$
+100 90 32
+2d5,0
+3,1
+64,0
+4,1
+64,0
+4,1
+4a,0
+1
+19,0
+5,1
+46,0
+2,1
+1c,0
+4,1
+43,0
+2,1
+1f,0
+5,1
+40,0
+1
+23,0
+4,1
+3d,0
+2,1
+25,0
+4,1
+3a,0
+2,1
+28,0
+2,1
+3a,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+13ba,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a24.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a24.dat
new file mode 100644
index 000000000..efd7c8be0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a24.dat
@@ -0,0 +1,205 @@
+! $XConsortium$
+100 90 32
+1c0,0
+2,1
+11,0
+1
+4f,0
+6,1
+d,0
+3,1
+4e,0
+5,1
+e,0
+4,1
+4d,0
+5,1
+d,0
+7,1
+4a,0
+6,1
+c,0
+9,1
+49,0
+5,1
+c,0
+a,1
+2a,0
+2,1
+1c,0
+6,1
+c,0
+a,1
+2b,0
+2,1
+1b,0
+5,1
+c,0
+a,1
+2e,0
+2,1
+19,0
+5,1
+b,0
+a,1
+2a,0
+2,1
+5,0
+2,1
+16,0
+5,1
+c,0
+9,1
+2b,0
+2,1
+6,0
+3,1
+14,0
+5,1
+b,0
+a,1
+2b,0
+2,1
+8,0
+2,1
+12,0
+6,1
+a,0
+a,1
+2c,0
+2,1
+a,0
+2,1
+10,0
+5,1
+a,0
+a,1
+2d,0
+2,1
+c,0
+2,1
+d,0
+6,1
+a,0
+a,1
+2d,0
+2,1
+d,0
+3,1
+b,0
+5,1
+a,0
+a,1
+2f,0
+2,1
+e,0
+2,1
+a,0
+5,1
+9,0
+a,1
+30,0
+2,1
+10,0
+2,1
+7,0
+6,1
+9,0
+9,1
+31,0
+2,1
+12,0
+2,1
+7,0
+3,1
+9,0
+a,1
+31,0
+2,1
+13,0
+3,1
+10,0
+a,1
+32,0
+2,1
+15,0
+2,1
+e,0
+a,1
+33,0
+1
+18,0
+2,1
+c,0
+a,1
+4e,0
+2,1
+a,0
+9,1
+50,0
+3,1
+9,0
+7,1
+53,0
+2,1
+9,0
+5,1
+56,0
+2,1
+9,0
+3,1
+58,0
+2,1
+8,0
+1
+5a,0
+1
+552,0
+2,1
+62,0
+6,1
+5e,0
+a,1
+59,0
+10,1
+54,0
+14,1
+50,0
+18,1
+4c,0
+1d,1
+46,0
+22,1
+42,0
+26,1
+3e,0
+29,1
+3b,0
+29,1
+3b,0
+29,1
+3a,0
+29,1
+3b,0
+29,1
+3b,0
+29,1
+3e,0
+26,1
+42,0
+21,1
+47,0
+1d,1
+4c,0
+18,1
+50,0
+14,1
+54,0
+10,1
+59,0
+a,1
+5e,0
+6,1
+62,0
+2,1
+8cc,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a3.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a3.dat
new file mode 100644
index 000000000..dc14ed9da
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a3.dat
@@ -0,0 +1,91 @@
+! $XConsortium$
+100 90 32
+26c,0
+5,1
+0
+4,1
+55,0
+13,1
+4c,0
+1d,1
+47,0
+21,1
+43,0
+b,1
+9,0
+12,1
+3e,0
+6,1
+12,0
+12,1
+3a,0
+6,1
+16,0
+12,1
+37,0
+7,1
+19,0
+12,1
+33,0
+7,1
+1c,0
+e,1
+35,0
+6,1
+20,0
+8,1
+37,0
+7,1
+22,0
+4,1
+38,0
+7,1
+5f,0
+6,1
+5f,0
+7,1
+5e,0
+7,1
+5f,0
+6,1
+5f,0
+7,1
+5e,0
+7,1
+5f,0
+6,1
+5f,0
+7,1
+5e,0
+7,1
+5f,0
+6,1
+5f,0
+7,1
+5e,0
+7,1
+5f,0
+6,1
+5f,0
+7,1
+5e,0
+7,1
+5f,0
+6,1
+5f,0
+7,1
+5e,0
+7,1
+5f,0
+6,1
+5f,0
+7,1
+5e,0
+7,1
+5f,0
+5,1
+60,0
+3,1
+62,0
+2,1
+12f2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a32.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a32.dat
new file mode 100644
index 000000000..4d8f230e6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a32.dat
@@ -0,0 +1,1479 @@
+! $XConsortium$
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+10,0
+4,1
+26,0
+e,1
+e,0
+e,1
+10,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5d8,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5d8,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3fa,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+10,0
+4,1
+26,0
+e,1
+e,0
+e,1
+10,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5d8,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5d8,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3fa,0
+100 90 32
+71a,0
+12,1
+a,0
+12,1
+e,0
+4,1
+24,0
+12,1
+a,0
+12,1
+e,0
+4,1
+24,0
+12,1
+a,0
+12,1
+e,0
+4,1
+24,0
+12,1
+a,0
+12,1
+e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+448,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+448,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+332,0
+100 90 32
+71c,0
+f,1
+d,0
+f,1
+11,0
+1
+26,0
+11,1
+b,0
+11,1
+f,0
+3,1
+24,0
+12,1
+a,0
+12,1
+e,0
+4,1
+25,0
+11,1
+b,0
+11,1
+e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+44a,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+44a,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+332,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+10,0
+5,1
+25,0
+e,1
+e,0
+e,1
+10,0
+5,1
+25,0
+e,1
+e,0
+e,1
+10,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+3f9,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+10,0
+5,1
+25,0
+e,1
+e,0
+e,1
+10,0
+5,1
+25,0
+e,1
+e,0
+e,1
+10,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+3f9,0
+100 90 32
+71a,0
+13,1
+9,0
+13,1
+d,0
+5,1
+23,0
+13,1
+9,0
+13,1
+d,0
+5,1
+23,0
+13,1
+9,0
+13,1
+d,0
+5,1
+23,0
+13,1
+9,0
+13,1
+d,0
+5,1
+23,0
+13,1
+9,0
+13,1
+d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+3e3,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+3e3,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2cd,0
+100 90 32
+71b,0
+11,1
+b,0
+11,1
+f,0
+3,1
+24,0
+13,1
+9,0
+13,1
+d,0
+5,1
+23,0
+13,1
+9,0
+13,1
+d,0
+5,1
+23,0
+13,1
+9,0
+13,1
+d,0
+5,1
+24,0
+11,1
+b,0
+11,1
+e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+3e5,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+3e5,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+2ce,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+10,0
+4,1
+26,0
+e,1
+e,0
+e,1
+10,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5d8,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5d8,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3fa,0
+100 90 32
+71a,0
+12,1
+a,0
+12,1
+e,0
+4,1
+24,0
+12,1
+a,0
+12,1
+e,0
+4,1
+24,0
+12,1
+a,0
+12,1
+e,0
+4,1
+24,0
+12,1
+a,0
+12,1
+e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+448,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+448,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+332,0
+100 90 32
+71c,0
+f,1
+d,0
+f,1
+11,0
+1
+26,0
+11,1
+b,0
+11,1
+f,0
+3,1
+24,0
+12,1
+a,0
+12,1
+e,0
+4,1
+25,0
+11,1
+b,0
+11,1
+e,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+44a,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+44a,0
+1
+62,0
+3,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+61,0
+3,1
+332,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+10,0
+5,1
+25,0
+e,1
+e,0
+e,1
+10,0
+5,1
+25,0
+e,1
+e,0
+e,1
+10,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+3f9,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+10,0
+5,1
+25,0
+e,1
+e,0
+e,1
+10,0
+5,1
+25,0
+e,1
+e,0
+e,1
+10,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+3f9,0
+100 90 32
+71a,0
+13,1
+9,0
+13,1
+d,0
+5,1
+23,0
+13,1
+9,0
+13,1
+d,0
+5,1
+23,0
+13,1
+9,0
+13,1
+d,0
+5,1
+23,0
+13,1
+9,0
+13,1
+d,0
+5,1
+23,0
+13,1
+9,0
+13,1
+d,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+3e3,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+3e3,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+2cd,0
+100 90 32
+71b,0
+11,1
+b,0
+11,1
+f,0
+3,1
+24,0
+13,1
+9,0
+13,1
+d,0
+5,1
+23,0
+13,1
+9,0
+13,1
+d,0
+5,1
+23,0
+13,1
+9,0
+13,1
+d,0
+5,1
+24,0
+11,1
+b,0
+11,1
+e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+3e5,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+3e5,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+2ce,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a39.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a39.dat
new file mode 100644
index 000000000..8b30697c9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a39.dat
@@ -0,0 +1,749 @@
+! $XConsortium$
+100 90 32
+71c,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+2,3
+32,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+2,3
+32,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+2
+8,0
+5,2
+25,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+4,0
+2
+3
+8,0
+3
+2,2
+2,3
+25,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+8,0
+2
+2,3
+2,2
+5f,0
+2
+3
+2
+2,3
+1ef,0
+2,3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2
+3
+2
+3
+1ef,0
+5,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+5,2
+1ef,0
+3
+2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,3
+2
+3
+2
+1ef,0
+2
+3
+2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3,2
+2,3
+5f,0
+5,2
+1ef,0
+2
+2,3
+2,2
+5f,0
+2
+3
+2
+2,3
+5f,0
+3
+2
+3
+2,2
+5f,0
+3
+2
+3
+2
+3
+1ef,0
+2
+3
+2
+3
+2
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2,2
+5f,0
+2
+3
+2
+2,3
+1ef,0
+5,3
+5f,0
+5,2
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+3f9,0
+100 90 32
+6b8,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+2
+32,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+2,3
+32,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+2,3
+32,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+2
+7,0
+6,2
+25,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+4,0
+2
+3
+7,0
+2,3
+2,2
+2,3
+25,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+7,0
+3
+2
+2,3
+2,2
+5e,0
+2,2
+3
+2
+2,3
+1ee,0
+3,3
+2
+3
+2
+5e,0
+3
+2
+3
+2
+3
+2
+5e,0
+3
+2
+3
+2
+3
+2
+5e,0
+2
+3
+2
+3
+2
+3
+1ee,0
+6,2
+5e,0
+6,3
+5e,0
+6,3
+5e,0
+6,2
+1ee,0
+2
+3
+2
+3
+2
+3
+5e,0
+3
+2
+3
+2
+3
+2
+5e,0
+3
+2
+3
+2
+3
+2
+5e,0
+3,3
+2
+3
+2
+1ee,0
+2,2
+3
+2
+2,3
+5e,0
+2,2
+2,3
+2,2
+5e,0
+3
+3,2
+2,3
+5e,0
+6,2
+1ee,0
+3
+2
+2,3
+2,2
+5e,0
+2,2
+3
+2
+2,3
+5e,0
+2
+3
+2
+3
+2,2
+5e,0
+2
+3
+2
+3
+2
+3
+1ee,0
+3
+2
+3
+2
+3
+2
+5e,0
+2
+3
+2
+3
+2
+3
+5e,0
+2
+3
+2
+3
+2,2
+5e,0
+2,2
+3
+2
+2,3
+1ee,0
+6,3
+5e,0
+6,2
+5e,0
+2,3
+2,2
+2,3
+5e,0
+3
+2
+2,3
+2,2
+3f9,0
+100 90 32
+6b8,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+2
+32,0
+4,3
+4,0
+2,2
+2,3
+4,0
+4,3
+4,0
+2,3
+2,2
+4,0
+4,3
+4,0
+4,3
+4,0
+2,3
+32,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+4,3
+4,0
+2,3
+32,0
+4,2
+4,0
+3,3
+2
+4,0
+4,2
+4,0
+2
+3,3
+4,0
+4,2
+4,0
+4,2
+4,0
+3
+2
+7,0
+6,2
+25,0
+2,3
+2,2
+4,0
+3,2
+3
+4,0
+4,3
+4,0
+3
+3,2
+4,0
+2,2
+2,3
+4,0
+2,2
+2,3
+4,0
+2
+3
+7,0
+2,3
+2,2
+2,3
+25,0
+3
+2
+2,3
+4,0
+3,3
+2
+4,0
+4,3
+4,0
+2
+3,3
+4,0
+2,3
+2
+3
+4,0
+2,3
+2,2
+4,0
+3
+2
+7,0
+3
+2
+2,3
+2,2
+5e,0
+2,2
+3
+2
+2,3
+1ee,0
+3,3
+2
+3
+2
+5e,0
+3
+2
+3
+2
+3
+2
+5e,0
+3
+2
+3
+2
+3
+2
+5e,0
+2
+3
+2
+3
+2
+3
+1ee,0
+6,2
+5e,0
+6,3
+5e,0
+6,3
+5e,0
+6,2
+1ee,0
+2
+3
+2
+3
+2
+3
+5e,0
+3
+2
+3
+2
+3
+2
+5e,0
+3
+2
+3
+2
+3
+2
+5e,0
+3,3
+2
+3
+2
+1ee,0
+2,2
+3
+2
+2,3
+5e,0
+2,2
+2,3
+2,2
+5e,0
+3
+3,2
+2,3
+5e,0
+6,2
+1ee,0
+3
+2
+2,3
+2,2
+5e,0
+2,2
+3
+2
+2,3
+5e,0
+2
+3
+2
+3
+2,2
+5e,0
+2
+3
+2
+3
+2
+3
+1ee,0
+3
+2
+3
+2
+3
+2
+5e,0
+2
+3
+2
+3
+2
+3
+5e,0
+2
+3
+2
+3
+2,2
+5e,0
+2,2
+3
+2
+2,3
+1ee,0
+6,3
+5e,0
+6,2
+5e,0
+2,3
+2,2
+2,3
+5e,0
+3
+2
+2,3
+2,2
+3f9,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a4.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a4.dat
new file mode 100644
index 000000000..d72a85bbc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a4.dat
@@ -0,0 +1,81 @@
+! $XConsortium$
+100 90 32
+2d5,0
+3,1
+64,0
+4,1
+64,0
+4,1
+4a,0
+1
+19,0
+5,1
+46,0
+2,1
+1c,0
+4,1
+43,0
+2,1
+1f,0
+5,1
+40,0
+1
+23,0
+4,1
+3d,0
+2,1
+25,0
+4,1
+3a,0
+2,1
+28,0
+2,1
+3a,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+13ba,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a40.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a40.dat
new file mode 100644
index 000000000..ff919861a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a40.dat
@@ -0,0 +1,409 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+1
+32,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+9,0
+4,1
+30,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+f,0
+4,1
+2d,0
+4,1
+14,0
+4,1
+16,0
+5,1
+254,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+1ef,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+1ef,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+1f0,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+1ef,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+1ef,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+1f0,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+3f9,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+1
+32,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+7,0
+1
+0
+4,1
+30,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+f,0
+4,1
+2d,0
+4,1
+14,0
+4,1
+15,0
+6,1
+5e,0
+1
+1f5,0
+4,1
+5e,0
+1
+65,0
+4,1
+5e,0
+1
+0
+4,1
+1ee,0
+6,1
+5e,0
+4,1
+60,0
+2,1
+2,0
+2,1
+60,0
+4,1
+1ee,0
+6,1
+5e,0
+1
+64,0
+5,1
+5e,0
+6,1
+1f0,0
+4,1
+5e,0
+1
+0
+4,1
+60,0
+4,1
+5e,0
+6,1
+1ee,0
+2,1
+2,0
+2,1
+60,0
+4,1
+5e,0
+1
+65,0
+4,1
+1ef,0
+5,1
+5e,0
+6,1
+5e,0
+4,1
+60,0
+2,1
+2,0
+2,1
+1f0,0
+4,1
+5e,0
+6,1
+5e,0
+1
+64,0
+5,1
+3f9,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+1
+32,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+7,0
+1
+0
+4,1
+30,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+f,0
+4,1
+2d,0
+4,1
+14,0
+4,1
+15,0
+6,1
+5e,0
+1
+1f5,0
+4,1
+5e,0
+1
+65,0
+4,1
+5e,0
+1
+0
+4,1
+1ee,0
+6,1
+5e,0
+4,1
+60,0
+2,1
+2,0
+2,1
+60,0
+4,1
+1ee,0
+6,1
+5e,0
+1
+64,0
+5,1
+5e,0
+6,1
+1f0,0
+4,1
+5e,0
+1
+0
+4,1
+60,0
+4,1
+5e,0
+6,1
+1ee,0
+2,1
+2,0
+2,1
+60,0
+4,1
+5e,0
+1
+65,0
+4,1
+1ef,0
+5,1
+5e,0
+6,1
+5e,0
+4,1
+60,0
+2,1
+2,0
+2,1
+1f0,0
+4,1
+5e,0
+6,1
+5e,0
+1
+64,0
+5,1
+3f9,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a41.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a41.dat
new file mode 100644
index 000000000..ff919861a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a41.dat
@@ -0,0 +1,409 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+1
+32,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+9,0
+4,1
+30,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+f,0
+4,1
+2d,0
+4,1
+14,0
+4,1
+16,0
+5,1
+254,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+1ef,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+1ef,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+1f0,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+1ef,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+1ef,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+1f0,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+3f9,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+1
+32,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+7,0
+1
+0
+4,1
+30,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+f,0
+4,1
+2d,0
+4,1
+14,0
+4,1
+15,0
+6,1
+5e,0
+1
+1f5,0
+4,1
+5e,0
+1
+65,0
+4,1
+5e,0
+1
+0
+4,1
+1ee,0
+6,1
+5e,0
+4,1
+60,0
+2,1
+2,0
+2,1
+60,0
+4,1
+1ee,0
+6,1
+5e,0
+1
+64,0
+5,1
+5e,0
+6,1
+1f0,0
+4,1
+5e,0
+1
+0
+4,1
+60,0
+4,1
+5e,0
+6,1
+1ee,0
+2,1
+2,0
+2,1
+60,0
+4,1
+5e,0
+1
+65,0
+4,1
+1ef,0
+5,1
+5e,0
+6,1
+5e,0
+4,1
+60,0
+2,1
+2,0
+2,1
+1f0,0
+4,1
+5e,0
+6,1
+5e,0
+1
+64,0
+5,1
+3f9,0
+100 90 32
+6b8,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+a,0
+1
+7,0
+1
+4,0
+1
+34,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+3,1
+5,0
+1
+6,0
+4,1
+5,0
+1
+32,0
+1
+a,0
+1
+c,0
+1
+a,0
+1
+c,0
+1
+34,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+3,1
+5,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+7,0
+1
+0
+4,1
+30,0
+1
+4,0
+4,1
+f,0
+1
+4,0
+4,1
+f,0
+4,1
+2d,0
+4,1
+14,0
+4,1
+15,0
+6,1
+5e,0
+1
+1f5,0
+4,1
+5e,0
+1
+65,0
+4,1
+5e,0
+1
+0
+4,1
+1ee,0
+6,1
+5e,0
+4,1
+60,0
+2,1
+2,0
+2,1
+60,0
+4,1
+1ee,0
+6,1
+5e,0
+1
+64,0
+5,1
+5e,0
+6,1
+1f0,0
+4,1
+5e,0
+1
+0
+4,1
+60,0
+4,1
+5e,0
+6,1
+1ee,0
+2,1
+2,0
+2,1
+60,0
+4,1
+5e,0
+1
+65,0
+4,1
+1ef,0
+5,1
+5e,0
+6,1
+5e,0
+4,1
+60,0
+2,1
+2,0
+2,1
+1f0,0
+4,1
+5e,0
+6,1
+5e,0
+1
+64,0
+5,1
+3f9,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a42.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a42.dat
new file mode 100644
index 000000000..26d1d3080
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a42.dat
@@ -0,0 +1,255 @@
+! $XConsortium$
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+10,0
+4,1
+26,0
+e,1
+e,0
+e,1
+10,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5d8,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5d8,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+4,1
+3fa,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+10,0
+5,1
+25,0
+e,1
+e,0
+e,1
+10,0
+5,1
+25,0
+e,1
+e,0
+e,1
+10,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+3f9,0
+100 90 32
+71c,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+3a,0
+e,1
+e,0
+e,1
+10,0
+5,1
+25,0
+e,1
+e,0
+e,1
+10,0
+5,1
+25,0
+e,1
+e,0
+e,1
+10,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5d7,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+3f9,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a43.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a43.dat
new file mode 100644
index 000000000..1244d600a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a43.dat
@@ -0,0 +1,926 @@
+! $XConsortium$
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+2,3
+32,0
+32,3
+32,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+2
+8,0
+4,2
+26,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+3
+8,0
+3
+2,2
+3
+60,0
+2
+2,3
+2
+60,0
+2
+3
+2
+3
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+2
+3
+2
+3
+60,0
+2
+3
+2
+3
+60,0
+2,3
+2
+3
+60,0
+2
+3
+2
+3
+60,0
+2
+3
+2
+3
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+2
+3
+2
+3
+60,0
+2
+2,3
+2
+60,0
+3,2
+3
+60,0
+4,2
+60,0
+4,3
+60,0
+4,3
+60,0
+4,2
+60,0
+3
+2,2
+3
+60,0
+2
+2,3
+2
+60,0
+2
+3
+2
+3
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+2
+3
+2
+3
+60,0
+2
+3
+2
+3
+60,0
+2,3
+2
+3
+60,0
+2
+3
+2
+3
+60,0
+2
+3
+2
+3
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+2
+3
+2
+3
+60,0
+2
+2,3
+2
+60,0
+3,2
+3
+60,0
+4,2
+60,0
+4,3
+60,0
+4,3
+60,0
+4,2
+60,0
+3
+2,2
+3
+60,0
+2
+2,3
+2
+60,0
+2
+3
+2
+3
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+2
+3
+2
+3
+60,0
+2
+3
+2
+3
+60,0
+2,3
+2
+3
+60,0
+2
+3
+2
+3
+60,0
+2
+3
+2
+3
+60,0
+3
+2
+3
+2
+60,0
+3
+2
+3
+2
+60,0
+2
+3
+2
+3
+60,0
+2
+2,3
+2
+60,0
+3,2
+3
+60,0
+4,2
+60,0
+4,3
+60,0
+4,3
+60,0
+4,2
+60,0
+3
+2,2
+3
+60,0
+2
+2,3
+2
+3fa,0
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+2,3
+32,0
+32,3
+32,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+2
+8,0
+5,2
+25,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+3
+8,0
+3
+2,2
+2,3
+25,0
+3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2
+8,0
+2
+2,3
+2,2
+5f,0
+2
+3
+2
+2,3
+5f,0
+3
+2
+3
+2,2
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2,2
+5f,0
+2
+3
+2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3,2
+2,3
+5f,0
+5,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+5,2
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+2
+3
+2
+2,3
+5f,0
+3
+2
+3
+2,2
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2,2
+5f,0
+2
+3
+2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3,2
+2,3
+5f,0
+5,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+5,2
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+2
+3
+2
+2,3
+5f,0
+3
+2
+3
+2,2
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2,2
+5f,0
+2
+3
+2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3,2
+2,3
+5f,0
+5,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+5,2
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+3f9,0
+100 90 32
+71c,0
+7,3
+3,2
+10,3
+3,2
+10,3
+3,2
+2,3
+32,0
+32,3
+32,0
+6,2
+5,3
+e,2
+5,3
+e,2
+5,3
+2
+8,0
+5,2
+25,0
+2,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+3
+8,0
+3
+2,2
+2,3
+25,0
+3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2
+8,0
+2
+2,3
+2,2
+5f,0
+2
+3
+2
+2,3
+5f,0
+3
+2
+3
+2,2
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2,2
+5f,0
+2
+3
+2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3,2
+2,3
+5f,0
+5,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+5,2
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+2
+3
+2
+2,3
+5f,0
+3
+2
+3
+2,2
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2,2
+5f,0
+2
+3
+2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3,2
+2,3
+5f,0
+5,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+5,2
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+2
+3
+2
+2,3
+5f,0
+3
+2
+3
+2,2
+5f,0
+3
+2
+3
+2
+3
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2,3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+2
+3
+2
+3
+2
+5f,0
+3
+2
+3
+2
+3
+5f,0
+3
+2
+3
+2,2
+5f,0
+2
+3
+2
+2,3
+5f,0
+2
+2,3
+2,2
+5f,0
+3,2
+2,3
+5f,0
+5,2
+5f,0
+5,3
+5f,0
+5,3
+5f,0
+5,2
+5f,0
+3
+2,2
+2,3
+5f,0
+2
+2,3
+2,2
+3f9,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a44.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a44.dat
new file mode 100644
index 000000000..cf76b799b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a44.dat
@@ -0,0 +1,513 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+32,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+1
+9,0
+3,1
+31,0
+d,1
+b,0
+d,1
+b,0
+3,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+3,1
+61,0
+1
+2,0
+1
+61,0
+3,1
+c5,0
+3,1
+61,0
+3,1
+61,0
+3,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+3,1
+61,0
+1
+2,0
+1
+61,0
+3,1
+c5,0
+3,1
+61,0
+3,1
+61,0
+3,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+3,1
+61,0
+1
+2,0
+1
+61,0
+3,1
+c5,0
+3,1
+61,0
+3,1
+61,0
+3,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+3,1
+61,0
+1
+2,0
+1
+61,0
+3,1
+c5,0
+3,1
+61,0
+3,1
+61,0
+3,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+3,1
+61,0
+1
+2,0
+1
+61,0
+3,1
+c5,0
+3,1
+61,0
+3,1
+61,0
+3,1
+60,0
+4,1
+c4,0
+4,1
+3fa,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+32,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+1
+9,0
+4,1
+30,0
+d,1
+b,0
+d,1
+b,0
+4,1
+29,0
+c,1
+c,0
+c,1
+12,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+3f9,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+32,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+1
+9,0
+4,1
+30,0
+d,1
+b,0
+d,1
+b,0
+4,1
+29,0
+c,1
+c,0
+c,1
+12,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+3f9,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a45.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a45.dat
new file mode 100644
index 000000000..236811a39
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a45.dat
@@ -0,0 +1,327 @@
+! $XConsortium$
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+11,0
+3,1
+31,0
+3,1
+15,0
+7,1
+11,0
+3,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+3,1
+61,0
+1
+2,0
+1
+61,0
+3,1
+c5,0
+3,1
+61,0
+3,1
+61,0
+3,1
+60,0
+4,1
+5d8,0
+3,1
+61,0
+1
+2,0
+1
+61,0
+3,1
+c5,0
+3,1
+61,0
+3,1
+61,0
+3,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+3,1
+61,0
+1
+2,0
+1
+61,0
+3,1
+5d9,0
+3,1
+60,0
+4,1
+c4,0
+4,1
+3fa,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+11,0
+4,1
+30,0
+3,1
+15,0
+7,1
+11,0
+4,1
+29,0
+a,1
+e,0
+c,1
+12,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+5d7,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+5d8,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+3f9,0
+100 90 32
+71d,0
+3,1
+0
+1
+0
+1
+0
+1
+13,0
+1
+0
+1
+0
+1
+6,0
+2,1
+3a,0
+1
+a,0
+3,1
+15,0
+4,1
+3e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+f,0
+1
+0
+1
+0
+1
+0
+7,1
+11,0
+4,1
+30,0
+3,1
+15,0
+7,1
+11,0
+4,1
+29,0
+a,1
+e,0
+c,1
+12,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+5d7,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+c4,0
+4,1
+60,0
+4,1
+60,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+5f,0
+5,1
+5f,0
+3,1
+61,0
+1
+2,0
+2,1
+60,0
+4,1
+5d8,0
+4,1
+5f,0
+5,1
+c3,0
+5,1
+3f9,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a5.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a5.dat
new file mode 100644
index 000000000..f8cbeb820
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a5.dat
@@ -0,0 +1,155 @@
+! $XConsortium$
+100 90 32
+26f,0
+2,1
+0
+2,1
+5a,0
+e,1
+51,0
+c,1
+0
+b,1
+49,0
+1
+0
+b,1
+5,0
+d,1
+48,0
+5,1
+e,0
+6,1
+2,0
+5,1
+41,0
+1
+2,0
+1
+16,0
+1
+4,0
+9,1
+3d,0
+5,1
+14,0
+12,1
+3a,0
+5,1
+12,0
+5,1
+5,0
+d,1
+37,0
+5,1
+10,0
+5,1
+a,0
+c,1
+36,0
+5,1
+d,0
+5,1
+10,0
+6,1
+38,0
+5,1
+b,0
+5,1
+15,0
+2,1
+39,0
+5,1
+9,0
+5,1
+53,0
+5,1
+6,0
+5,1
+55,0
+5,1
+4,0
+5,1
+57,0
+5,1
+2,0
+5,1
+5a,0
+4,1
+0
+4,1
+5c,0
+2,1
+3,0
+2,1
+c1,0
+3,1
+2,0
+3,1
+5b,0
+a,1
+59,0
+5,1
+2,0
+5,1
+57,0
+5,1
+5,0
+5,1
+54,0
+5,1
+7,0
+5,1
+52,0
+5,1
+9,0
+5,1
+50,0
+5,1
+c,0
+5,1
+4d,0
+5,1
+e,0
+5,1
+4b,0
+5,1
+10,0
+5,1
+49,0
+5,1
+13,0
+5,1
+46,0
+5,1
+15,0
+5,1
+44,0
+5,1
+17,0
+5,1
+42,0
+5,1
+1a,0
+5,1
+3f,0
+5,1
+1c,0
+5,1
+3d,0
+5,1
+1e,0
+5,1
+3b,0
+5,1
+21,0
+4,1
+3b,0
+3,1
+23,0
+2,1
+3d,0
+1
+25,0
+1
+12f2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a54.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a54.dat
new file mode 100644
index 000000000..970367c62
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a54.dat
@@ -0,0 +1,157 @@
+! $XConsortium$
+100 90 32
+4c1,0
+1
+63,0
+3,1
+60,0
+6,1
+5d,0
+9,1
+5b,0
+b,1
+58,0
+e,1
+56,0
+10,1
+55,0
+11,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+12,1
+54,0
+11,1
+55,0
+10,1
+56,0
+e,1
+58,0
+b,1
+5b,0
+8,1
+5e,0
+6,1
+60,0
+3,1
+63,0
+1
+14e7,0
+100 90 32
+4c1,0
+3,1
+61,0
+4,1
+5f,0
+7,1
+5c,0
+a,1
+5a,0
+c,1
+57,0
+f,1
+55,0
+11,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+11,1
+55,0
+f,1
+57,0
+c,1
+5a,0
+9,1
+5d,0
+7,1
+5f,0
+4,1
+61,0
+3,1
+14e7,0
+100 90 32
+4c1,0
+3,1
+61,0
+4,1
+5f,0
+7,1
+5c,0
+a,1
+5a,0
+c,1
+57,0
+f,1
+55,0
+11,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+14,1
+52,0
+11,1
+55,0
+f,1
+57,0
+c,1
+5a,0
+9,1
+5d,0
+7,1
+5f,0
+4,1
+61,0
+3,1
+14e7,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a56.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a56.dat
new file mode 100644
index 000000000..63946d976
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a56.dat
@@ -0,0 +1,1255 @@
+! $XConsortium$
+100 90 32
+5eb,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+3,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+3,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+64,0
+2,1
+64,0
+2,1
+64,0
+2,1
+63,0
+2,1
+1280,0
+100 90 32
+587,0
+1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+5,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+5,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+3,1
+1280,0
+100 90 32
+523,0
+1
+62,0
+4,1
+5f,0
+7,1
+5e,0
+7,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+9,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+9,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+7,1
+5e,0
+6,1
+60,0
+4,1
+121b,0
+100 90 32
+522,0
+3,1
+60,0
+6,1
+5e,0
+8,1
+5c,0
+9,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+b,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+b,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+9,1
+5c,0
+8,1
+5e,0
+6,1
+60,0
+3,1
+11b7,0
+100 90 32
+3f7,0
+1
+60,0
+7,1
+5c,0
+9,1
+5b,0
+b,1
+59,0
+d,1
+56,0
+10,1
+55,0
+10,1
+54,0
+12,1
+52,0
+14,1
+51,0
+15,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+13,1
+53,0
+12,1
+54,0
+10,1
+55,0
+f,1
+57,0
+d,1
+59,0
+b,1
+5b,0
+8,1
+5d,0
+6,1
+10ee,0
+100 90 32
+3f5,0
+5,1
+5e,0
+8,1
+5b,0
+a,1
+59,0
+d,1
+57,0
+f,1
+55,0
+11,1
+53,0
+12,1
+52,0
+14,1
+51,0
+15,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+15,1
+51,0
+14,1
+52,0
+12,1
+53,0
+11,1
+55,0
+f,1
+57,0
+d,1
+59,0
+a,1
+5b,0
+8,1
+5e,0
+5,1
+108a,0
+100 90 32
+2,0
+1c,1
+47,0
+1e,1
+45,0
+21,1
+43,0
+23,1
+41,0
+25,1
+3f,0
+27,1
+3d,0
+28,1
+3c,0
+2a,1
+3a,0
+2c,1
+38,0
+2e,1
+36,0
+2f,1
+35,0
+31,1
+33,0
+33,1
+31,0
+35,1
+2f,0
+37,1
+2d,0
+38,1
+2c,0
+3a,1
+2a,0
+3c,1
+28,0
+3e,1
+26,0
+3f,1
+25,0
+41,1
+23,0
+43,1
+21,0
+45,1
+1f,0
+47,1
+1d,0
+48,1
+1c,0
+4a,1
+1a,0
+4b,1
+19,0
+4d,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4d,1
+18,0
+4d,1
+19,0
+4c,1
+1a,0
+4a,1
+1b,0
+4a,1
+1c,0
+48,1
+1e,0
+47,1
+1f,0
+45,1
+21,0
+43,1
+22,0
+42,1
+24,0
+40,1
+26,0
+3e,1
+28,0
+3c,1
+29,0
+3b,1
+2b,0
+39,1
+2d,0
+37,1
+2f,0
+35,1
+31,0
+33,1
+32,0
+32,1
+34,0
+2f,1
+37,0
+2d,1
+39,0
+2a,1
+3b,0
+29,1
+3d,0
+26,1
+40,0
+23,1
+43,0
+21,1
+45,0
+1e,1
+47,0
+1c,1
+4a,0
+18,1
+4e,0
+15,1
+51,0
+11,1
+55,0
+d,1
+b0e,0
+100 90 32
+2,0
+1d,1
+46,0
+1f,1
+44,0
+22,1
+42,0
+24,1
+40,0
+26,1
+3e,0
+28,1
+3c,0
+29,1
+3b,0
+2b,1
+39,0
+2d,1
+37,0
+2f,1
+35,0
+30,1
+34,0
+32,1
+32,0
+34,1
+30,0
+36,1
+2e,0
+38,1
+2c,0
+39,1
+2b,0
+3b,1
+29,0
+3d,1
+27,0
+3f,1
+25,0
+40,1
+24,0
+42,1
+22,0
+44,1
+20,0
+46,1
+1e,0
+48,1
+1c,0
+49,1
+1b,0
+4b,1
+19,0
+4c,1
+18,0
+4d,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4d,1
+19,0
+4c,1
+19,0
+4b,1
+1b,0
+4a,1
+1c,0
+48,1
+1e,0
+46,1
+20,0
+45,1
+20,0
+44,1
+22,0
+42,1
+24,0
+40,1
+26,0
+3e,1
+27,0
+3d,1
+29,0
+3b,1
+2b,0
+39,1
+2d,0
+37,1
+2f,0
+34,1
+31,0
+33,1
+33,0
+31,1
+35,0
+2e,1
+38,0
+2c,1
+39,0
+2a,1
+3c,0
+28,1
+3e,0
+25,1
+41,0
+22,1
+44,0
+1f,1
+46,0
+1d,1
+49,0
+1a,1
+4c,0
+17,1
+4f,0
+13,1
+53,0
+f,1
+58,0
+9,1
+aac,0
+100 90 32
+587,0
+1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+5,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+5,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+4,1
+62,0
+4,1
+62,0
+4,1
+62,0
+4,1
+61,0
+3,1
+1280,0
+100 90 32
+523,0
+1
+62,0
+4,1
+5f,0
+7,1
+5e,0
+7,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+9,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+9,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5d,0
+8,1
+5e,0
+8,1
+5e,0
+8,1
+5e,0
+7,1
+5e,0
+6,1
+60,0
+4,1
+121b,0
+100 90 32
+522,0
+3,1
+60,0
+6,1
+5e,0
+8,1
+5c,0
+9,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+b,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+b,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5b,0
+a,1
+5c,0
+a,1
+5c,0
+a,1
+5c,0
+9,1
+5c,0
+8,1
+5e,0
+6,1
+60,0
+3,1
+11b7,0
+100 90 32
+3f7,0
+1
+60,0
+7,1
+5c,0
+9,1
+5b,0
+b,1
+59,0
+d,1
+56,0
+10,1
+55,0
+10,1
+54,0
+12,1
+52,0
+14,1
+51,0
+15,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+14,1
+52,0
+14,1
+51,0
+15,1
+51,0
+14,1
+52,0
+13,1
+53,0
+12,1
+54,0
+10,1
+55,0
+f,1
+57,0
+d,1
+59,0
+b,1
+5b,0
+8,1
+5d,0
+6,1
+10ee,0
+100 90 32
+3f5,0
+5,1
+5e,0
+8,1
+5b,0
+a,1
+59,0
+d,1
+57,0
+f,1
+55,0
+11,1
+53,0
+12,1
+52,0
+14,1
+51,0
+15,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+15,1
+51,0
+14,1
+52,0
+12,1
+53,0
+11,1
+55,0
+f,1
+57,0
+d,1
+59,0
+a,1
+5b,0
+8,1
+5e,0
+5,1
+108a,0
+100 90 32
+2,0
+1c,1
+47,0
+1e,1
+45,0
+21,1
+43,0
+23,1
+41,0
+25,1
+3f,0
+27,1
+3d,0
+28,1
+3c,0
+2a,1
+3a,0
+2c,1
+38,0
+2e,1
+36,0
+2f,1
+35,0
+31,1
+33,0
+33,1
+31,0
+35,1
+2f,0
+37,1
+2d,0
+38,1
+2c,0
+3a,1
+2a,0
+3c,1
+28,0
+3e,1
+26,0
+3f,1
+25,0
+41,1
+23,0
+43,1
+21,0
+45,1
+1f,0
+47,1
+1d,0
+48,1
+1c,0
+4a,1
+1a,0
+4b,1
+19,0
+4d,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4d,1
+18,0
+4d,1
+19,0
+4c,1
+1a,0
+4a,1
+1b,0
+4a,1
+1c,0
+48,1
+1e,0
+47,1
+1f,0
+45,1
+21,0
+43,1
+22,0
+42,1
+24,0
+40,1
+26,0
+3e,1
+28,0
+3c,1
+29,0
+3b,1
+2b,0
+39,1
+2d,0
+37,1
+2f,0
+35,1
+31,0
+33,1
+32,0
+32,1
+34,0
+2f,1
+37,0
+2d,1
+39,0
+2a,1
+3b,0
+29,1
+3d,0
+26,1
+40,0
+23,1
+43,0
+21,1
+45,0
+1e,1
+47,0
+1c,1
+4a,0
+18,1
+4e,0
+15,1
+51,0
+11,1
+55,0
+d,1
+b0e,0
+100 90 32
+2,0
+1d,1
+46,0
+1f,1
+44,0
+22,1
+42,0
+24,1
+40,0
+26,1
+3e,0
+28,1
+3c,0
+29,1
+3b,0
+2b,1
+39,0
+2d,1
+37,0
+2f,1
+35,0
+30,1
+34,0
+32,1
+32,0
+34,1
+30,0
+36,1
+2e,0
+38,1
+2c,0
+39,1
+2b,0
+3b,1
+29,0
+3d,1
+27,0
+3f,1
+25,0
+40,1
+24,0
+42,1
+22,0
+44,1
+20,0
+46,1
+1e,0
+48,1
+1c,0
+49,1
+1b,0
+4b,1
+19,0
+4c,1
+18,0
+4d,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4e,1
+17,0
+4d,1
+19,0
+4c,1
+19,0
+4b,1
+1b,0
+4a,1
+1c,0
+48,1
+1e,0
+46,1
+20,0
+45,1
+20,0
+44,1
+22,0
+42,1
+24,0
+40,1
+26,0
+3e,1
+27,0
+3d,1
+29,0
+3b,1
+2b,0
+39,1
+2d,0
+37,1
+2f,0
+34,1
+31,0
+33,1
+33,0
+31,1
+35,0
+2e,1
+38,0
+2c,1
+39,0
+2a,1
+3c,0
+28,1
+3e,0
+25,1
+41,0
+22,1
+44,0
+1f,1
+46,0
+1d,1
+49,0
+1a,1
+4c,0
+17,1
+4f,0
+13,1
+53,0
+f,1
+58,0
+9,1
+aac,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a58.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a58.dat
new file mode 100644
index 000000000..b0d16e0df
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a58.dat
@@ -0,0 +1,267 @@
+! $XConsortium$
+100 90 32
+32d,0
+1
+63,0
+3,1
+60,0
+6,1
+5d,0
+9,1
+5b,0
+a,1
+59,0
+d,1
+57,0
+f,1
+54,0
+12,1
+52,0
+13,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+16,1
+4f,0
+17,1
+4f,0
+17,1
+4f,0
+16,1
+50,0
+16,1
+50,0
+13,1
+52,0
+12,1
+54,0
+f,1
+57,0
+d,1
+59,0
+a,1
+5b,0
+9,1
+5d,0
+6,1
+60,0
+3,1
+63,0
+1
+fc2,0
+100 90 32
+2c9,0
+1
+63,0
+2,1
+61,0
+5,1
+5e,0
+8,1
+5c,0
+a,1
+59,0
+c,1
+58,0
+e,1
+55,0
+11,1
+53,0
+13,1
+50,0
+16,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+16,1
+50,0
+13,1
+53,0
+11,1
+55,0
+e,1
+58,0
+c,1
+59,0
+a,1
+5c,0
+8,1
+5e,0
+5,1
+61,0
+2,1
+63,0
+1
+f5e,0
+100 90 32
+2c9,0
+1
+63,0
+2,1
+61,0
+5,1
+5e,0
+8,1
+5c,0
+a,1
+59,0
+c,1
+58,0
+e,1
+55,0
+11,1
+53,0
+13,1
+50,0
+16,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+19,1
+4d,0
+19,1
+4d,0
+18,1
+4e,0
+18,1
+4d,0
+16,1
+50,0
+13,1
+53,0
+11,1
+55,0
+e,1
+58,0
+c,1
+59,0
+a,1
+5c,0
+8,1
+5e,0
+5,1
+61,0
+2,1
+63,0
+1
+f5e,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a63.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a63.dat
new file mode 100644
index 000000000..2d7bc0f33
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a63.dat
@@ -0,0 +1,35 @@
+! $XConsortium$
+100 90 32
+71c,0
+1
+62,0
+3,1
+60,0
+4,1
+61,0
+3,1
+1ade,0
+100 90 32
+71b,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+1a7a,0
+100 90 32
+71b,0
+3,1
+60,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+60,0
+3,1
+1a7a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a66.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a66.dat
new file mode 100644
index 000000000..d72a85bbc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a66.dat
@@ -0,0 +1,81 @@
+! $XConsortium$
+100 90 32
+2d5,0
+3,1
+64,0
+4,1
+64,0
+4,1
+4a,0
+1
+19,0
+5,1
+46,0
+2,1
+1c,0
+4,1
+43,0
+2,1
+1f,0
+5,1
+40,0
+1
+23,0
+4,1
+3d,0
+2,1
+25,0
+4,1
+3a,0
+2,1
+28,0
+2,1
+3a,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+13ba,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a67.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a67.dat
new file mode 100644
index 000000000..74e16bf2a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a67.dat
@@ -0,0 +1,389 @@
+! $XConsortium$
+100 90 32
+1aa,0
+4,3
+60,0
+5,3
+2,2
+3
+2
+5b,0
+5,2
+3
+2
+3
+2
+3
+3,2
+56,0
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+45,0
+2
+3
+b,0
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+3,3
+3f,0
+3
+2
+3
+2
+3
+9,0
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+3a,0
+2,3
+2
+3
+2
+3
+2
+8,0
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2
+35,0
+3
+2,2
+3
+2
+3
+2
+3
+7,0
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+30,0
+3,2
+3
+2
+3
+2
+3
+3,2
+9,0
+2,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+2f,0
+4,3
+2,2
+3
+2
+3
+4,2
+d,0
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+30,0
+5,3
+2
+3
+6,2
+10,0
+3,2
+3
+2
+9,3
+2
+3
+6,2
+3
+31,0
+2,3
+2,2
+2,3
+6,2
+2,3
+13,0
+2,2
+5,3
+2,2
+2,3
+6,2
+34,0
+2,3
+3,2
+4,3
+3,2
+3
+16,0
+3,2
+2,3
+3,2
+4,3
+2
+35,0
+d,2
+19,0
+9,2
+36,0
+d,3
+2
+1c,0
+4,3
+38,0
+d,3
+58,0
+9,2
+4,3
+58,0
+4,3
+2,2
+2,3
+5,2
+3
+58,0
+3
+2
+2,3
+2,2
+5,3
+2,2
+58,0
+2
+3
+2
+9,3
+2
+58,0
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+58,0
+2
+3
+5,2
+3
+2
+3
+2
+3
+2
+58,0
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2
+58,0
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+58,0
+3,3
+2
+3
+2
+7,3
+58,0
+2,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+58,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+58,0
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+58,0
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+3
+58,0
+3
+6,2
+3
+2
+5,3
+58,0
+5,2
+2,3
+2,2
+4,3
+58,0
+3,3
+3,2
+2,3
+5,2
+58,0
+7,2
+5,3
+2,2
+58,0
+6,3
+3,2
+4,3
+58,0
+b,3
+5a,0
+3,2
+5,3
+2
+5d,0
+3
+5,2
+5f,0
+5,3
+60,0
+3,3
+128f,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a68.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a68.dat
new file mode 100644
index 000000000..69de6d59f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a68.dat
@@ -0,0 +1,226 @@
+! $XConsortium$
+100 90 32
+1aa,0
+4,3
+60,0
+2
+4,3
+2,2
+2,3
+5b,0
+5,2
+5,3
+3,2
+56,0
+3
+2
+3
+2
+3
+6,2
+5,3
+2,2
+45,0
+2,2
+b,0
+6,2
+4,3
+6,2
+4,3
+3,2
+3f,0
+5,3
+9,0
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+3a,0
+7,3
+8,0
+6,2
+d,3
+b,2
+2,3
+35,0
+2,3
+6,2
+7,0
+b,3
+c,2
+c,3
+2
+30,0
+3,2
+8,3
+9,0
+3
+6,2
+12,3
+6,2
+3
+2f,0
+a,3
+3,2
+d,0
+8,3
+6,2
+4,3
+2,2
+7,3
+30,0
+3,3
+6,2
+4,3
+10,0
+4,2
+9,3
+2
+8,3
+2
+31,0
+2,2
+8,3
+4,2
+13,0
+3
+4,2
+9,3
+3,2
+34,0
+3,3
+5,2
+4,3
+2
+16,0
+3
+3,2
+4,3
+2,2
+3,3
+35,0
+2,2
+6,3
+5,2
+19,0
+4,2
+5,3
+36,0
+3,3
+4,2
+3,3
+2
+3
+2
+3
+1c,0
+4,2
+38,0
+2
+4,3
+8,2
+58,0
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+58,0
+2,3
+b,2
+3
+58,0
+4,2
+9,3
+58,0
+9,3
+4,2
+58,0
+2,2
+4,3
+2,2
+6,3
+58,0
+3,3
+2
+8,3
+2
+58,0
+8,3
+3,2
+2,3
+58,0
+2
+4,3
+2,2
+6,3
+2
+58,0
+3,2
+5,3
+3,2
+2,3
+58,0
+3
+6,2
+5,3
+2
+58,0
+2
+4,3
+6,2
+3,3
+58,0
+8,3
+5,2
+58,0
+b,3
+2,2
+58,0
+2,3
+c,2
+58,0
+d,3
+58,0
+5,3
+6,2
+2,3
+58,0
+4,2
+9,3
+2
+58,0
+4,3
+4,2
+5,3
+58,0
+3,2
+4,3
+3,2
+3
+5a,0
+3,3
+6,2
+5d,0
+2
+3,3
+2
+3
+5f,0
+5,2
+60,0
+2,3
+2
+128f,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a69.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a69.dat
new file mode 100644
index 000000000..27afe61ac
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a69.dat
@@ -0,0 +1,179 @@
+! $XConsortium$
+100 90 32
+1aa,0
+4,1
+61,0
+4,1
+2,0
+2,1
+60,0
+5,1
+59,0
+1
+0
+1
+0
+1
+6,0
+5,1
+5a,0
+4,1
+6,0
+4,1
+42,0
+5,1
+9,0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+3a,0
+7,1
+e,0
+d,1
+b,0
+2,1
+35,0
+2,1
+d,0
+b,1
+c,0
+c,1
+34,0
+8,1
+9,0
+1
+6,0
+12,1
+6,0
+1
+2f,0
+a,1
+10,0
+8,1
+6,0
+4,1
+2,0
+7,1
+30,0
+3,1
+6,0
+4,1
+14,0
+9,1
+0
+8,1
+34,0
+8,1
+17,0
+1
+4,0
+9,1
+37,0
+3,1
+5,0
+4,1
+17,0
+1
+3,0
+4,1
+2,0
+3,1
+37,0
+6,1
+22,0
+5,1
+36,0
+3,1
+4,0
+3,1
+0
+1
+0
+1
+59,0
+4,1
+64,0
+3,1
+0
+1
+0
+1
+0
+1
+58,0
+2,1
+b,0
+1
+5c,0
+9,1
+58,0
+9,1
+5e,0
+4,1
+2,0
+6,1
+58,0
+3,1
+0
+8,1
+59,0
+8,1
+3,0
+2,1
+59,0
+4,1
+2,0
+6,1
+5c,0
+5,1
+3,0
+2,1
+58,0
+1
+6,0
+5,1
+5a,0
+4,1
+6,0
+3,1
+58,0
+8,1
+5d,0
+b,1
+5a,0
+2,1
+64,0
+d,1
+58,0
+5,1
+6,0
+2,1
+5c,0
+9,1
+59,0
+4,1
+4,0
+5,1
+5b,0
+4,1
+3,0
+1
+5a,0
+3,1
+64,0
+3,1
+0
+1
+c4,0
+2,1
+1290,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a73.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a73.dat
new file mode 100644
index 000000000..de2b84181
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a73.dat
@@ -0,0 +1,157 @@
+! $XConsortium$
+100 90 32
+2d5,0
+3,1
+64,0
+4,1
+64,0
+1
+4d,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+1
+187b,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+3a5,0
+3,1
+64,0
+5,1
+64,0
+4,1
+64,0
+5,1
+64,0
+4,1
+64,0
+4,1
+64,0
+2,1
+495,0
+1
+64,0
+1
+64,0
+2,1
+17af,0
+100 90 32
+bdc,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+13ba,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+3a5,0
+3,1
+64,0
+5,1
+64,0
+4,1
+64,0
+5,1
+64,0
+4,1
+64,0
+4,1
+64,0
+2,1
+495,0
+1
+64,0
+1
+64,0
+2,1
+17af,0
+100 90 32
+bdc,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+13ba,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a76.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a76.dat
new file mode 100644
index 000000000..f6e66ab81
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a76.dat
@@ -0,0 +1,59 @@
+! $XConsortium$
+100 90 32
+2d5,0
+1
+0
+1
+67,0
+1
+64,0
+4,1
+4a,0
+1
+19,0
+5,1
+46,0
+1
+64,0
+2,1
+1f,0
+5,1
+40,0
+1
+23,0
+2,1
+66,0
+4,1
+3a,0
+2,1
+c9,0
+2,1
+64,0
+1
+c9,0
+1
+ca,0
+1
+64,0
+2,1
+c9,0
+1
+64,0
+2,1
+64,0
+1
+64,0
+1
+65,0
+1
+c9,0
+1
+64,0
+2,1
+c9,0
+1
+c9,0
+2,1
+c9,0
+1
+1420,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a78.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a78.dat
new file mode 100644
index 000000000..4d15024b0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a78.dat
@@ -0,0 +1,2723 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+2d5,0
+3,1
+64,0
+4,1
+64,0
+4,1
+4a,0
+1
+19,0
+5,1
+46,0
+2,1
+1c,0
+4,1
+43,0
+2,1
+1f,0
+5,1
+40,0
+1
+23,0
+4,1
+3d,0
+2,1
+25,0
+4,1
+3a,0
+2,1
+28,0
+2,1
+3a,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+13ba,0
+100 90 32
+2d5,0
+3,2
+64,0
+4,2
+64,0
+4,2
+4a,0
+2
+19,0
+5,2
+46,0
+2,2
+1c,0
+4,2
+43,0
+2,2
+1f,0
+5,2
+40,0
+2
+23,0
+4,2
+3d,0
+2,2
+25,0
+4,2
+3a,0
+2,2
+28,0
+2,2
+3a,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+13ba,0
+100 90 32
+2d5,0
+3,3
+64,0
+4,3
+64,0
+4,3
+4a,0
+3
+19,0
+5,3
+46,0
+2,3
+1c,0
+4,3
+43,0
+2,3
+1f,0
+5,3
+40,0
+3
+23,0
+4,3
+3d,0
+2,3
+25,0
+4,3
+3a,0
+2,3
+28,0
+2,3
+3a,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+13ba,0
+100 90 32
+2d5,0
+3,4
+64,0
+4,4
+64,0
+4,4
+4a,0
+4
+19,0
+5,4
+46,0
+2,4
+1c,0
+4,4
+43,0
+2,4
+1f,0
+5,4
+40,0
+4
+23,0
+4,4
+3d,0
+2,4
+25,0
+4,4
+3a,0
+2,4
+28,0
+2,4
+3a,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+13ba,0
+100 90 32
+2d5,0
+3,6
+64,0
+4,6
+64,0
+4,6
+4a,0
+6
+19,0
+5,6
+46,0
+2,6
+1c,0
+4,6
+43,0
+2,6
+1f,0
+5,6
+40,0
+6
+23,0
+4,6
+3d,0
+2,6
+25,0
+4,6
+3a,0
+2,6
+28,0
+2,6
+3a,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+13ba,0
+100 90 32
+2d5,0
+3,7
+64,0
+4,7
+64,0
+4,7
+4a,0
+7
+19,0
+5,7
+46,0
+2,7
+1c,0
+4,7
+43,0
+2,7
+1f,0
+5,7
+40,0
+7
+23,0
+4,7
+3d,0
+2,7
+25,0
+4,7
+3a,0
+2,7
+28,0
+2,7
+3a,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+13ba,0
+100 90 32
+2d5,0
+3,10
+64,0
+4,10
+64,0
+4,10
+4a,0
+10
+19,0
+5,10
+46,0
+2,10
+1c,0
+4,10
+43,0
+2,10
+1f,0
+5,10
+40,0
+10
+23,0
+4,10
+3d,0
+2,10
+25,0
+4,10
+3a,0
+2,10
+28,0
+2,10
+3a,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+13ba,0
+100 90 32
+2d5,0
+3,33
+64,0
+4,33
+64,0
+4,33
+4a,0
+33
+19,0
+5,33
+46,0
+2,33
+1c,0
+4,33
+43,0
+2,33
+1f,0
+5,33
+40,0
+33
+23,0
+4,33
+3d,0
+2,33
+25,0
+4,33
+3a,0
+2,33
+28,0
+2,33
+3a,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+13ba,0
+100 90 32
+2d5,0
+3,81
+64,0
+4,81
+64,0
+4,81
+4a,0
+81
+19,0
+5,81
+46,0
+2,81
+1c,0
+4,81
+43,0
+2,81
+1f,0
+5,81
+40,0
+81
+23,0
+4,81
+3d,0
+2,81
+25,0
+4,81
+3a,0
+2,81
+28,0
+2,81
+3a,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+13ba,0
+100 90 32
+2d5,0
+3,a3
+64,0
+4,a3
+64,0
+4,a3
+4a,0
+a3
+19,0
+5,a3
+46,0
+2,a3
+1c,0
+4,a3
+43,0
+2,a3
+1f,0
+5,a3
+40,0
+a3
+23,0
+4,a3
+3d,0
+2,a3
+25,0
+4,a3
+3a,0
+2,a3
+28,0
+2,a3
+3a,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+13ba,0
+100 90 32
+2d5,0
+3,ff
+64,0
+4,ff
+64,0
+4,ff
+4a,0
+ff
+19,0
+5,ff
+46,0
+2,ff
+1c,0
+4,ff
+43,0
+2,ff
+1f,0
+5,ff
+40,0
+ff
+23,0
+4,ff
+3d,0
+2,ff
+25,0
+4,ff
+3a,0
+2,ff
+28,0
+2,ff
+3a,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+13ba,0
+100 90 32
+2d5,0
+3,100
+64,0
+4,100
+64,0
+4,100
+4a,0
+100
+19,0
+5,100
+46,0
+2,100
+1c,0
+4,100
+43,0
+2,100
+1f,0
+5,100
+40,0
+100
+23,0
+4,100
+3d,0
+2,100
+25,0
+4,100
+3a,0
+2,100
+28,0
+2,100
+3a,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+13ba,0
+100 90 32
+2d5,0
+3,12c
+64,0
+4,12c
+64,0
+4,12c
+4a,0
+12c
+19,0
+5,12c
+46,0
+2,12c
+1c,0
+4,12c
+43,0
+2,12c
+1f,0
+5,12c
+40,0
+12c
+23,0
+4,12c
+3d,0
+2,12c
+25,0
+4,12c
+3a,0
+2,12c
+28,0
+2,12c
+3a,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+13ba,0
+100 90 32
+2d5,0
+3,3e8
+64,0
+4,3e8
+64,0
+4,3e8
+4a,0
+3e8
+19,0
+5,3e8
+46,0
+2,3e8
+1c,0
+4,3e8
+43,0
+2,3e8
+1f,0
+5,3e8
+40,0
+3e8
+23,0
+4,3e8
+3d,0
+2,3e8
+25,0
+4,3e8
+3a,0
+2,3e8
+28,0
+2,3e8
+3a,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+13ba,0
+100 90 32
+2d5,0
+3,111111
+64,0
+4,111111
+64,0
+4,111111
+4a,0
+111111
+19,0
+5,111111
+46,0
+2,111111
+1c,0
+4,111111
+43,0
+2,111111
+1f,0
+5,111111
+40,0
+111111
+23,0
+4,111111
+3d,0
+2,111111
+25,0
+4,111111
+3a,0
+2,111111
+28,0
+2,111111
+3a,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+13ba,0
+100 90 32
+2d5,0
+3,400200
+64,0
+4,400200
+64,0
+4,400200
+4a,0
+400200
+19,0
+5,400200
+46,0
+2,400200
+1c,0
+4,400200
+43,0
+2,400200
+1f,0
+5,400200
+40,0
+400200
+23,0
+4,400200
+3d,0
+2,400200
+25,0
+4,400200
+3a,0
+2,400200
+28,0
+2,400200
+3a,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+13ba,0
+100 90 32
+2d5,0
+3,777777
+64,0
+4,777777
+64,0
+4,777777
+4a,0
+777777
+19,0
+5,777777
+46,0
+2,777777
+1c,0
+4,777777
+43,0
+2,777777
+1f,0
+5,777777
+40,0
+777777
+23,0
+4,777777
+3d,0
+2,777777
+25,0
+4,777777
+3a,0
+2,777777
+28,0
+2,777777
+3a,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+13ba,0
+100 90 32
+2d5,0
+3,1
+64,0
+4,1
+64,0
+4,1
+4a,0
+1
+19,0
+5,1
+46,0
+2,1
+1c,0
+4,1
+43,0
+2,1
+1f,0
+5,1
+40,0
+1
+23,0
+4,1
+3d,0
+2,1
+25,0
+4,1
+3a,0
+2,1
+28,0
+2,1
+3a,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+13ba,0
+100 90 32
+2d5,0
+3,2
+64,0
+4,2
+64,0
+4,2
+4a,0
+2
+19,0
+5,2
+46,0
+2,2
+1c,0
+4,2
+43,0
+2,2
+1f,0
+5,2
+40,0
+2
+23,0
+4,2
+3d,0
+2,2
+25,0
+4,2
+3a,0
+2,2
+28,0
+2,2
+3a,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+13ba,0
+100 90 32
+2d5,0
+3,3
+64,0
+4,3
+64,0
+4,3
+4a,0
+3
+19,0
+5,3
+46,0
+2,3
+1c,0
+4,3
+43,0
+2,3
+1f,0
+5,3
+40,0
+3
+23,0
+4,3
+3d,0
+2,3
+25,0
+4,3
+3a,0
+2,3
+28,0
+2,3
+3a,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+13ba,0
+100 90 32
+2d5,0
+3,4
+64,0
+4,4
+64,0
+4,4
+4a,0
+4
+19,0
+5,4
+46,0
+2,4
+1c,0
+4,4
+43,0
+2,4
+1f,0
+5,4
+40,0
+4
+23,0
+4,4
+3d,0
+2,4
+25,0
+4,4
+3a,0
+2,4
+28,0
+2,4
+3a,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+13ba,0
+100 90 32
+2d5,0
+3,6
+64,0
+4,6
+64,0
+4,6
+4a,0
+6
+19,0
+5,6
+46,0
+2,6
+1c,0
+4,6
+43,0
+2,6
+1f,0
+5,6
+40,0
+6
+23,0
+4,6
+3d,0
+2,6
+25,0
+4,6
+3a,0
+2,6
+28,0
+2,6
+3a,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+13ba,0
+100 90 32
+2d5,0
+3,7
+64,0
+4,7
+64,0
+4,7
+4a,0
+7
+19,0
+5,7
+46,0
+2,7
+1c,0
+4,7
+43,0
+2,7
+1f,0
+5,7
+40,0
+7
+23,0
+4,7
+3d,0
+2,7
+25,0
+4,7
+3a,0
+2,7
+28,0
+2,7
+3a,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+13ba,0
+100 90 32
+2d5,0
+3,10
+64,0
+4,10
+64,0
+4,10
+4a,0
+10
+19,0
+5,10
+46,0
+2,10
+1c,0
+4,10
+43,0
+2,10
+1f,0
+5,10
+40,0
+10
+23,0
+4,10
+3d,0
+2,10
+25,0
+4,10
+3a,0
+2,10
+28,0
+2,10
+3a,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+13ba,0
+100 90 32
+2d5,0
+3,33
+64,0
+4,33
+64,0
+4,33
+4a,0
+33
+19,0
+5,33
+46,0
+2,33
+1c,0
+4,33
+43,0
+2,33
+1f,0
+5,33
+40,0
+33
+23,0
+4,33
+3d,0
+2,33
+25,0
+4,33
+3a,0
+2,33
+28,0
+2,33
+3a,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+13ba,0
+100 90 32
+2d5,0
+3,81
+64,0
+4,81
+64,0
+4,81
+4a,0
+81
+19,0
+5,81
+46,0
+2,81
+1c,0
+4,81
+43,0
+2,81
+1f,0
+5,81
+40,0
+81
+23,0
+4,81
+3d,0
+2,81
+25,0
+4,81
+3a,0
+2,81
+28,0
+2,81
+3a,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+13ba,0
+100 90 32
+2d5,0
+3,a3
+64,0
+4,a3
+64,0
+4,a3
+4a,0
+a3
+19,0
+5,a3
+46,0
+2,a3
+1c,0
+4,a3
+43,0
+2,a3
+1f,0
+5,a3
+40,0
+a3
+23,0
+4,a3
+3d,0
+2,a3
+25,0
+4,a3
+3a,0
+2,a3
+28,0
+2,a3
+3a,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+13ba,0
+100 90 32
+2d5,0
+3,ff
+64,0
+4,ff
+64,0
+4,ff
+4a,0
+ff
+19,0
+5,ff
+46,0
+2,ff
+1c,0
+4,ff
+43,0
+2,ff
+1f,0
+5,ff
+40,0
+ff
+23,0
+4,ff
+3d,0
+2,ff
+25,0
+4,ff
+3a,0
+2,ff
+28,0
+2,ff
+3a,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+13ba,0
+100 90 32
+2d5,0
+3,100
+64,0
+4,100
+64,0
+4,100
+4a,0
+100
+19,0
+5,100
+46,0
+2,100
+1c,0
+4,100
+43,0
+2,100
+1f,0
+5,100
+40,0
+100
+23,0
+4,100
+3d,0
+2,100
+25,0
+4,100
+3a,0
+2,100
+28,0
+2,100
+3a,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+13ba,0
+100 90 32
+2d5,0
+3,12c
+64,0
+4,12c
+64,0
+4,12c
+4a,0
+12c
+19,0
+5,12c
+46,0
+2,12c
+1c,0
+4,12c
+43,0
+2,12c
+1f,0
+5,12c
+40,0
+12c
+23,0
+4,12c
+3d,0
+2,12c
+25,0
+4,12c
+3a,0
+2,12c
+28,0
+2,12c
+3a,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+13ba,0
+100 90 32
+2d5,0
+3,3e8
+64,0
+4,3e8
+64,0
+4,3e8
+4a,0
+3e8
+19,0
+5,3e8
+46,0
+2,3e8
+1c,0
+4,3e8
+43,0
+2,3e8
+1f,0
+5,3e8
+40,0
+3e8
+23,0
+4,3e8
+3d,0
+2,3e8
+25,0
+4,3e8
+3a,0
+2,3e8
+28,0
+2,3e8
+3a,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+13ba,0
+100 90 32
+2d5,0
+3,111111
+64,0
+4,111111
+64,0
+4,111111
+4a,0
+111111
+19,0
+5,111111
+46,0
+2,111111
+1c,0
+4,111111
+43,0
+2,111111
+1f,0
+5,111111
+40,0
+111111
+23,0
+4,111111
+3d,0
+2,111111
+25,0
+4,111111
+3a,0
+2,111111
+28,0
+2,111111
+3a,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+13ba,0
+100 90 32
+2d5,0
+3,400200
+64,0
+4,400200
+64,0
+4,400200
+4a,0
+400200
+19,0
+5,400200
+46,0
+2,400200
+1c,0
+4,400200
+43,0
+2,400200
+1f,0
+5,400200
+40,0
+400200
+23,0
+4,400200
+3d,0
+2,400200
+25,0
+4,400200
+3a,0
+2,400200
+28,0
+2,400200
+3a,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+13ba,0
+100 90 32
+2d5,0
+3,777777
+64,0
+4,777777
+64,0
+4,777777
+4a,0
+777777
+19,0
+5,777777
+46,0
+2,777777
+1c,0
+4,777777
+43,0
+2,777777
+1f,0
+5,777777
+40,0
+777777
+23,0
+4,777777
+3d,0
+2,777777
+25,0
+4,777777
+3a,0
+2,777777
+28,0
+2,777777
+3a,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+13ba,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a80.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a80.dat
new file mode 100644
index 000000000..4d15024b0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a80.dat
@@ -0,0 +1,2723 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+2d5,0
+3,1
+64,0
+4,1
+64,0
+4,1
+4a,0
+1
+19,0
+5,1
+46,0
+2,1
+1c,0
+4,1
+43,0
+2,1
+1f,0
+5,1
+40,0
+1
+23,0
+4,1
+3d,0
+2,1
+25,0
+4,1
+3a,0
+2,1
+28,0
+2,1
+3a,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+13ba,0
+100 90 32
+2d5,0
+3,2
+64,0
+4,2
+64,0
+4,2
+4a,0
+2
+19,0
+5,2
+46,0
+2,2
+1c,0
+4,2
+43,0
+2,2
+1f,0
+5,2
+40,0
+2
+23,0
+4,2
+3d,0
+2,2
+25,0
+4,2
+3a,0
+2,2
+28,0
+2,2
+3a,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+13ba,0
+100 90 32
+2d5,0
+3,3
+64,0
+4,3
+64,0
+4,3
+4a,0
+3
+19,0
+5,3
+46,0
+2,3
+1c,0
+4,3
+43,0
+2,3
+1f,0
+5,3
+40,0
+3
+23,0
+4,3
+3d,0
+2,3
+25,0
+4,3
+3a,0
+2,3
+28,0
+2,3
+3a,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+13ba,0
+100 90 32
+2d5,0
+3,4
+64,0
+4,4
+64,0
+4,4
+4a,0
+4
+19,0
+5,4
+46,0
+2,4
+1c,0
+4,4
+43,0
+2,4
+1f,0
+5,4
+40,0
+4
+23,0
+4,4
+3d,0
+2,4
+25,0
+4,4
+3a,0
+2,4
+28,0
+2,4
+3a,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+13ba,0
+100 90 32
+2d5,0
+3,6
+64,0
+4,6
+64,0
+4,6
+4a,0
+6
+19,0
+5,6
+46,0
+2,6
+1c,0
+4,6
+43,0
+2,6
+1f,0
+5,6
+40,0
+6
+23,0
+4,6
+3d,0
+2,6
+25,0
+4,6
+3a,0
+2,6
+28,0
+2,6
+3a,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+13ba,0
+100 90 32
+2d5,0
+3,7
+64,0
+4,7
+64,0
+4,7
+4a,0
+7
+19,0
+5,7
+46,0
+2,7
+1c,0
+4,7
+43,0
+2,7
+1f,0
+5,7
+40,0
+7
+23,0
+4,7
+3d,0
+2,7
+25,0
+4,7
+3a,0
+2,7
+28,0
+2,7
+3a,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+13ba,0
+100 90 32
+2d5,0
+3,10
+64,0
+4,10
+64,0
+4,10
+4a,0
+10
+19,0
+5,10
+46,0
+2,10
+1c,0
+4,10
+43,0
+2,10
+1f,0
+5,10
+40,0
+10
+23,0
+4,10
+3d,0
+2,10
+25,0
+4,10
+3a,0
+2,10
+28,0
+2,10
+3a,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+13ba,0
+100 90 32
+2d5,0
+3,33
+64,0
+4,33
+64,0
+4,33
+4a,0
+33
+19,0
+5,33
+46,0
+2,33
+1c,0
+4,33
+43,0
+2,33
+1f,0
+5,33
+40,0
+33
+23,0
+4,33
+3d,0
+2,33
+25,0
+4,33
+3a,0
+2,33
+28,0
+2,33
+3a,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+13ba,0
+100 90 32
+2d5,0
+3,81
+64,0
+4,81
+64,0
+4,81
+4a,0
+81
+19,0
+5,81
+46,0
+2,81
+1c,0
+4,81
+43,0
+2,81
+1f,0
+5,81
+40,0
+81
+23,0
+4,81
+3d,0
+2,81
+25,0
+4,81
+3a,0
+2,81
+28,0
+2,81
+3a,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+13ba,0
+100 90 32
+2d5,0
+3,a3
+64,0
+4,a3
+64,0
+4,a3
+4a,0
+a3
+19,0
+5,a3
+46,0
+2,a3
+1c,0
+4,a3
+43,0
+2,a3
+1f,0
+5,a3
+40,0
+a3
+23,0
+4,a3
+3d,0
+2,a3
+25,0
+4,a3
+3a,0
+2,a3
+28,0
+2,a3
+3a,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+13ba,0
+100 90 32
+2d5,0
+3,ff
+64,0
+4,ff
+64,0
+4,ff
+4a,0
+ff
+19,0
+5,ff
+46,0
+2,ff
+1c,0
+4,ff
+43,0
+2,ff
+1f,0
+5,ff
+40,0
+ff
+23,0
+4,ff
+3d,0
+2,ff
+25,0
+4,ff
+3a,0
+2,ff
+28,0
+2,ff
+3a,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+13ba,0
+100 90 32
+2d5,0
+3,100
+64,0
+4,100
+64,0
+4,100
+4a,0
+100
+19,0
+5,100
+46,0
+2,100
+1c,0
+4,100
+43,0
+2,100
+1f,0
+5,100
+40,0
+100
+23,0
+4,100
+3d,0
+2,100
+25,0
+4,100
+3a,0
+2,100
+28,0
+2,100
+3a,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+13ba,0
+100 90 32
+2d5,0
+3,12c
+64,0
+4,12c
+64,0
+4,12c
+4a,0
+12c
+19,0
+5,12c
+46,0
+2,12c
+1c,0
+4,12c
+43,0
+2,12c
+1f,0
+5,12c
+40,0
+12c
+23,0
+4,12c
+3d,0
+2,12c
+25,0
+4,12c
+3a,0
+2,12c
+28,0
+2,12c
+3a,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+13ba,0
+100 90 32
+2d5,0
+3,3e8
+64,0
+4,3e8
+64,0
+4,3e8
+4a,0
+3e8
+19,0
+5,3e8
+46,0
+2,3e8
+1c,0
+4,3e8
+43,0
+2,3e8
+1f,0
+5,3e8
+40,0
+3e8
+23,0
+4,3e8
+3d,0
+2,3e8
+25,0
+4,3e8
+3a,0
+2,3e8
+28,0
+2,3e8
+3a,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+13ba,0
+100 90 32
+2d5,0
+3,111111
+64,0
+4,111111
+64,0
+4,111111
+4a,0
+111111
+19,0
+5,111111
+46,0
+2,111111
+1c,0
+4,111111
+43,0
+2,111111
+1f,0
+5,111111
+40,0
+111111
+23,0
+4,111111
+3d,0
+2,111111
+25,0
+4,111111
+3a,0
+2,111111
+28,0
+2,111111
+3a,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+13ba,0
+100 90 32
+2d5,0
+3,400200
+64,0
+4,400200
+64,0
+4,400200
+4a,0
+400200
+19,0
+5,400200
+46,0
+2,400200
+1c,0
+4,400200
+43,0
+2,400200
+1f,0
+5,400200
+40,0
+400200
+23,0
+4,400200
+3d,0
+2,400200
+25,0
+4,400200
+3a,0
+2,400200
+28,0
+2,400200
+3a,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+13ba,0
+100 90 32
+2d5,0
+3,777777
+64,0
+4,777777
+64,0
+4,777777
+4a,0
+777777
+19,0
+5,777777
+46,0
+2,777777
+1c,0
+4,777777
+43,0
+2,777777
+1f,0
+5,777777
+40,0
+777777
+23,0
+4,777777
+3d,0
+2,777777
+25,0
+4,777777
+3a,0
+2,777777
+28,0
+2,777777
+3a,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+13ba,0
+100 90 32
+2d5,0
+3,1
+64,0
+4,1
+64,0
+4,1
+4a,0
+1
+19,0
+5,1
+46,0
+2,1
+1c,0
+4,1
+43,0
+2,1
+1f,0
+5,1
+40,0
+1
+23,0
+4,1
+3d,0
+2,1
+25,0
+4,1
+3a,0
+2,1
+28,0
+2,1
+3a,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+13ba,0
+100 90 32
+2d5,0
+3,2
+64,0
+4,2
+64,0
+4,2
+4a,0
+2
+19,0
+5,2
+46,0
+2,2
+1c,0
+4,2
+43,0
+2,2
+1f,0
+5,2
+40,0
+2
+23,0
+4,2
+3d,0
+2,2
+25,0
+4,2
+3a,0
+2,2
+28,0
+2,2
+3a,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+64,0
+2
+64,0
+2,2
+63,0
+2,2
+13ba,0
+100 90 32
+2d5,0
+3,3
+64,0
+4,3
+64,0
+4,3
+4a,0
+3
+19,0
+5,3
+46,0
+2,3
+1c,0
+4,3
+43,0
+2,3
+1f,0
+5,3
+40,0
+3
+23,0
+4,3
+3d,0
+2,3
+25,0
+4,3
+3a,0
+2,3
+28,0
+2,3
+3a,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+64,0
+3
+64,0
+2,3
+63,0
+2,3
+13ba,0
+100 90 32
+2d5,0
+3,4
+64,0
+4,4
+64,0
+4,4
+4a,0
+4
+19,0
+5,4
+46,0
+2,4
+1c,0
+4,4
+43,0
+2,4
+1f,0
+5,4
+40,0
+4
+23,0
+4,4
+3d,0
+2,4
+25,0
+4,4
+3a,0
+2,4
+28,0
+2,4
+3a,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+64,0
+4
+64,0
+2,4
+63,0
+2,4
+13ba,0
+100 90 32
+2d5,0
+3,6
+64,0
+4,6
+64,0
+4,6
+4a,0
+6
+19,0
+5,6
+46,0
+2,6
+1c,0
+4,6
+43,0
+2,6
+1f,0
+5,6
+40,0
+6
+23,0
+4,6
+3d,0
+2,6
+25,0
+4,6
+3a,0
+2,6
+28,0
+2,6
+3a,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+64,0
+6
+64,0
+2,6
+63,0
+2,6
+13ba,0
+100 90 32
+2d5,0
+3,7
+64,0
+4,7
+64,0
+4,7
+4a,0
+7
+19,0
+5,7
+46,0
+2,7
+1c,0
+4,7
+43,0
+2,7
+1f,0
+5,7
+40,0
+7
+23,0
+4,7
+3d,0
+2,7
+25,0
+4,7
+3a,0
+2,7
+28,0
+2,7
+3a,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+64,0
+7
+64,0
+2,7
+63,0
+2,7
+13ba,0
+100 90 32
+2d5,0
+3,10
+64,0
+4,10
+64,0
+4,10
+4a,0
+10
+19,0
+5,10
+46,0
+2,10
+1c,0
+4,10
+43,0
+2,10
+1f,0
+5,10
+40,0
+10
+23,0
+4,10
+3d,0
+2,10
+25,0
+4,10
+3a,0
+2,10
+28,0
+2,10
+3a,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+64,0
+10
+64,0
+2,10
+63,0
+2,10
+13ba,0
+100 90 32
+2d5,0
+3,33
+64,0
+4,33
+64,0
+4,33
+4a,0
+33
+19,0
+5,33
+46,0
+2,33
+1c,0
+4,33
+43,0
+2,33
+1f,0
+5,33
+40,0
+33
+23,0
+4,33
+3d,0
+2,33
+25,0
+4,33
+3a,0
+2,33
+28,0
+2,33
+3a,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+64,0
+33
+64,0
+2,33
+63,0
+2,33
+13ba,0
+100 90 32
+2d5,0
+3,81
+64,0
+4,81
+64,0
+4,81
+4a,0
+81
+19,0
+5,81
+46,0
+2,81
+1c,0
+4,81
+43,0
+2,81
+1f,0
+5,81
+40,0
+81
+23,0
+4,81
+3d,0
+2,81
+25,0
+4,81
+3a,0
+2,81
+28,0
+2,81
+3a,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+64,0
+81
+64,0
+2,81
+63,0
+2,81
+13ba,0
+100 90 32
+2d5,0
+3,a3
+64,0
+4,a3
+64,0
+4,a3
+4a,0
+a3
+19,0
+5,a3
+46,0
+2,a3
+1c,0
+4,a3
+43,0
+2,a3
+1f,0
+5,a3
+40,0
+a3
+23,0
+4,a3
+3d,0
+2,a3
+25,0
+4,a3
+3a,0
+2,a3
+28,0
+2,a3
+3a,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+64,0
+a3
+64,0
+2,a3
+63,0
+2,a3
+13ba,0
+100 90 32
+2d5,0
+3,ff
+64,0
+4,ff
+64,0
+4,ff
+4a,0
+ff
+19,0
+5,ff
+46,0
+2,ff
+1c,0
+4,ff
+43,0
+2,ff
+1f,0
+5,ff
+40,0
+ff
+23,0
+4,ff
+3d,0
+2,ff
+25,0
+4,ff
+3a,0
+2,ff
+28,0
+2,ff
+3a,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+64,0
+ff
+64,0
+2,ff
+63,0
+2,ff
+13ba,0
+100 90 32
+2d5,0
+3,100
+64,0
+4,100
+64,0
+4,100
+4a,0
+100
+19,0
+5,100
+46,0
+2,100
+1c,0
+4,100
+43,0
+2,100
+1f,0
+5,100
+40,0
+100
+23,0
+4,100
+3d,0
+2,100
+25,0
+4,100
+3a,0
+2,100
+28,0
+2,100
+3a,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+64,0
+100
+64,0
+2,100
+63,0
+2,100
+13ba,0
+100 90 32
+2d5,0
+3,12c
+64,0
+4,12c
+64,0
+4,12c
+4a,0
+12c
+19,0
+5,12c
+46,0
+2,12c
+1c,0
+4,12c
+43,0
+2,12c
+1f,0
+5,12c
+40,0
+12c
+23,0
+4,12c
+3d,0
+2,12c
+25,0
+4,12c
+3a,0
+2,12c
+28,0
+2,12c
+3a,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+64,0
+12c
+64,0
+2,12c
+63,0
+2,12c
+13ba,0
+100 90 32
+2d5,0
+3,3e8
+64,0
+4,3e8
+64,0
+4,3e8
+4a,0
+3e8
+19,0
+5,3e8
+46,0
+2,3e8
+1c,0
+4,3e8
+43,0
+2,3e8
+1f,0
+5,3e8
+40,0
+3e8
+23,0
+4,3e8
+3d,0
+2,3e8
+25,0
+4,3e8
+3a,0
+2,3e8
+28,0
+2,3e8
+3a,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+64,0
+3e8
+64,0
+2,3e8
+63,0
+2,3e8
+13ba,0
+100 90 32
+2d5,0
+3,111111
+64,0
+4,111111
+64,0
+4,111111
+4a,0
+111111
+19,0
+5,111111
+46,0
+2,111111
+1c,0
+4,111111
+43,0
+2,111111
+1f,0
+5,111111
+40,0
+111111
+23,0
+4,111111
+3d,0
+2,111111
+25,0
+4,111111
+3a,0
+2,111111
+28,0
+2,111111
+3a,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+64,0
+111111
+64,0
+2,111111
+63,0
+2,111111
+13ba,0
+100 90 32
+2d5,0
+3,400200
+64,0
+4,400200
+64,0
+4,400200
+4a,0
+400200
+19,0
+5,400200
+46,0
+2,400200
+1c,0
+4,400200
+43,0
+2,400200
+1f,0
+5,400200
+40,0
+400200
+23,0
+4,400200
+3d,0
+2,400200
+25,0
+4,400200
+3a,0
+2,400200
+28,0
+2,400200
+3a,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+64,0
+400200
+64,0
+2,400200
+63,0
+2,400200
+13ba,0
+100 90 32
+2d5,0
+3,777777
+64,0
+4,777777
+64,0
+4,777777
+4a,0
+777777
+19,0
+5,777777
+46,0
+2,777777
+1c,0
+4,777777
+43,0
+2,777777
+1f,0
+5,777777
+40,0
+777777
+23,0
+4,777777
+3d,0
+2,777777
+25,0
+4,777777
+3a,0
+2,777777
+28,0
+2,777777
+3a,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+64,0
+777777
+64,0
+2,777777
+63,0
+2,777777
+13ba,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a82.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a82.dat
new file mode 100644
index 000000000..2234b9b63
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a82.dat
@@ -0,0 +1,651 @@
+! $XConsortium$
+100 90 32
+2d5,0
+3,1
+cc,0
+4,1
+4a,0
+1
+19,0
+5,1
+47,0
+1
+1d,0
+3,1
+67,0
+2,1
+40,0
+1
+65,0
+1
+63,0
+2,1
+28,0
+1
+3b,0
+1
+64,0
+2,1
+64,0
+1
+64,0
+1
+c9,0
+2,1
+c9,0
+2,1
+12e,0
+2,1
+c9,0
+1
+64,0
+2,1
+63,0
+1
+65,0
+1
+64,0
+2,1
+c9,0
+1
+12f,0
+1
+64,0
+2,1
+141f,0
+100 90 32
+2d5,0
+3,1
+66,0
+2,1
+cd,0
+1
+0
+1
+65,0
+4,1
+44,0
+1
+1f,0
+5,1
+64,0
+4,1
+3d,0
+2,1
+8d,0
+2,1
+3a,0
+1
+64,0
+2,1
+c9,0
+1
+c9,0
+2,1
+12e,0
+2,1
+c9,0
+2,1
+c9,0
+1
+64,0
+2,1
+64,0
+1
+c9,0
+1
+65,0
+1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+141f,0
+100 90 32
+2d5,0
+3,1
+cc,0
+4,1
+67,0
+2,1
+46,0
+2,1
+87,0
+2,1
+40,0
+1
+25,0
+2,1
+67,0
+1
+3a,0
+2,1
+64,0
+1
+ca,0
+1
+64,0
+1
+64,0
+2,1
+64,0
+1
+64,0
+1
+64,0
+1
+64,0
+2,1
+c9,0
+1
+64,0
+2,1
+64,0
+1
+c9,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+1
+65,0
+1
+c9,0
+1
+cb,0
+1
+141f,0
+100 90 32
+2d5,0
+3,1
+65,0
+1
+0
+1
+65,0
+1
+6a,0
+1
+46,0
+1
+1e,0
+1
+0
+1
+43,0
+1
+89,0
+2,1
+3f,0
+1
+64,0
+2,1
+28,0
+1
+a0,0
+2,1
+63,0
+1
+65,0
+1
+64,0
+2,1
+63,0
+1
+130,0
+1
+c9,0
+1
+65,0
+1
+12e,0
+2,1
+64,0
+1
+64,0
+1
+64,0
+2,1
+c9,0
+2,1
+63,0
+2,1
+c9,0
+2,1
+63,0
+1
+13bb,0
+100 90 32
+2d5,0
+2,1
+65,0
+4,1
+64,0
+4,1
+b0,0
+1
+64,0
+1
+1f,0
+1
+2,0
+2,1
+cd,0
+1
+0
+1
+3b,0
+1
+29,0
+1
+3a,0
+1
+65,0
+1
+63,0
+1
+65,0
+1
+64,0
+2,1
+c9,0
+1
+64,0
+2,1
+64,0
+1
+12e,0
+2,1
+64,0
+1
+c9,0
+1
+65,0
+1
+64,0
+2,1
+64,0
+1
+c9,0
+2,1
+63,0
+2,1
+c9,0
+1
+65,0
+1
+13ba,0
+100 90 32
+2d5,0
+3,1
+cc,0
+4,1
+64,0
+1
+0
+2,1
+48,0
+1
+1c,0
+4,1
+44,0
+1
+1f,0
+2,1
+2,0
+1
+65,0
+1
+67,0
+1
+0
+1
+3b,0
+1
+29,0
+1
+3a,0
+1
+64,0
+1
+65,0
+1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+65,0
+1
+c9,0
+1
+64,0
+2,1
+c9,0
+1
+64,0
+2,1
+12e,0
+1
+64,0
+1
+65,0
+1
+64,0
+2,1
+63,0
+2,1
+c9,0
+1
+65,0
+1
+13ba,0
+100 90 32
+2d5,0
+3,1
+66,0
+2,1
+cd,0
+1
+0
+1
+65,0
+4,1
+44,0
+1
+1f,0
+5,1
+64,0
+4,1
+3d,0
+2,1
+8d,0
+2,1
+3a,0
+1
+64,0
+2,1
+c9,0
+1
+c9,0
+2,1
+12e,0
+2,1
+c9,0
+2,1
+c9,0
+1
+64,0
+2,1
+64,0
+1
+c9,0
+1
+65,0
+1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+64,0
+2,1
+141f,0
+100 90 32
+2d5,0
+3,1
+cc,0
+4,1
+67,0
+2,1
+46,0
+2,1
+87,0
+2,1
+40,0
+1
+25,0
+2,1
+67,0
+1
+3a,0
+2,1
+64,0
+1
+ca,0
+1
+64,0
+1
+64,0
+2,1
+64,0
+1
+64,0
+1
+64,0
+1
+64,0
+2,1
+c9,0
+1
+64,0
+2,1
+64,0
+1
+c9,0
+2,1
+64,0
+1
+64,0
+2,1
+63,0
+1
+65,0
+1
+c9,0
+1
+cb,0
+1
+141f,0
+100 90 32
+2d5,0
+3,1
+65,0
+1
+0
+1
+65,0
+1
+6a,0
+1
+46,0
+1
+1e,0
+1
+0
+1
+43,0
+1
+89,0
+2,1
+3f,0
+1
+64,0
+2,1
+28,0
+1
+a0,0
+2,1
+63,0
+1
+65,0
+1
+64,0
+2,1
+63,0
+1
+130,0
+1
+c9,0
+1
+65,0
+1
+12e,0
+2,1
+64,0
+1
+64,0
+1
+64,0
+2,1
+c9,0
+2,1
+63,0
+2,1
+c9,0
+2,1
+63,0
+1
+13bb,0
+100 90 32
+2d5,0
+2,1
+65,0
+4,1
+64,0
+4,1
+b0,0
+1
+64,0
+1
+1f,0
+1
+2,0
+2,1
+cd,0
+1
+0
+1
+3b,0
+1
+29,0
+1
+3a,0
+1
+65,0
+1
+63,0
+1
+65,0
+1
+64,0
+2,1
+c9,0
+1
+64,0
+2,1
+64,0
+1
+12e,0
+2,1
+64,0
+1
+c9,0
+1
+65,0
+1
+64,0
+2,1
+64,0
+1
+c9,0
+2,1
+63,0
+2,1
+c9,0
+1
+65,0
+1
+13ba,0
+100 90 32
+2d5,0
+3,1
+cc,0
+4,1
+64,0
+1
+0
+2,1
+48,0
+1
+1c,0
+4,1
+44,0
+1
+1f,0
+2,1
+2,0
+1
+65,0
+1
+67,0
+1
+0
+1
+3b,0
+1
+29,0
+1
+3a,0
+1
+64,0
+1
+65,0
+1
+64,0
+1
+64,0
+2,1
+63,0
+2,1
+64,0
+1
+65,0
+1
+c9,0
+1
+64,0
+2,1
+c9,0
+1
+64,0
+2,1
+12e,0
+1
+64,0
+1
+65,0
+1
+64,0
+2,1
+63,0
+2,1
+c9,0
+1
+65,0
+1
+13ba,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a83.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a83.dat
new file mode 100644
index 000000000..02013d8ec
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a83.dat
@@ -0,0 +1,4151 @@
+! $XConsortium$
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+a,1
+23,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+a,1
+23,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+a,1
+23,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+a,1
+23,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+45b,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+a,1
+23,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+a,1
+23,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+a,1
+23,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+a,1
+23,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+523,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+5,0
+a,1
+23,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+5,0
+a,1
+23,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+5,0
+a,1
+23,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+131,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+717,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+131,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+4bf,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+cf,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+3f7,0
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+b,1
+22,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+b,1
+22,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+b,1
+22,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+b,1
+22,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+b,1
+22,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+45a,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+b,1
+22,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+b,1
+22,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+b,1
+22,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+b,1
+22,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+b,1
+22,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+522,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+5,0
+b,1
+22,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+5,0
+b,1
+22,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+5,0
+b,1
+22,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+cd,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+716,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+cd,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+4be,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6b,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+3f6,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+a,1
+23,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+a,1
+23,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+a,1
+23,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+a,1
+23,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+523,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+5,0
+a,1
+23,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+5,0
+a,1
+23,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+5,0
+a,1
+23,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+131,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+717,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+131,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+4bf,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+cf,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+be,0
+a,1
+5a,0
+a,1
+186,0
+a,1
+be,0
+a,1
+be,0
+a,1
+4a6,0
+a,1
+5a,0
+a,1
+37a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+3f7,0
+100 90 32
+5f0,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+32,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+b,1
+22,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+b,1
+22,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+b,1
+22,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+b,1
+22,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+b,1
+22,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+1
+5,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+45a,0
+100 90 32
+5f0,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+33,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+b,1
+22,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+b,1
+22,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+b,1
+22,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+b,1
+22,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+b,1
+22,0
+6,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+6,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+522,0
+100 90 32
+5f0,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+5,0
+b,1
+22,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+5,0
+b,1
+22,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+5,0
+b,1
+22,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+32,0
+1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+cd,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+716,0
+100 90 32
+5f7,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+39,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+8,0
+3,1
+cd,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+4be,0
+100 90 32
+5f6,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+3a,0
+2,1
+8,0
+8,1
+0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+2,1
+6b,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+bd,0
+b,1
+59,0
+b,1
+185,0
+b,1
+bd,0
+b,1
+bd,0
+b,1
+4a5,0
+b,1
+59,0
+b,1
+379,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+3f6,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a84.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a84.dat
new file mode 100644
index 000000000..dffe9c0d3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a84.dat
@@ -0,0 +1,513 @@
+! $XConsortium$
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+a,0
+1
+257,0
+1
+63,0
+1
+63,0
+1
+3e7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+12b,0
+1
+63,0
+1
+18f,0
+1
+63,0
+1
+63,0
+1
+12b,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+3fb,0
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+a,0
+1
+257,0
+1
+63,0
+1
+63,0
+1
+3e7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+12b,0
+1
+63,0
+1
+18f,0
+1
+63,0
+1
+63,0
+1
+12b,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+3fb,0
+100 90 32
+7e4,0
+32,1
+a,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+3fb,0
+100 90 32
+7e4,0
+1
+5,0
+3,1
+9,0
+f,1
+0
+1
+2,0
+2,1
+3,0
+3,1
+2,0
+3,1
+a,0
+1
+257,0
+1
+63,0
+1
+63,0
+1
+3e7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+12b,0
+1
+63,0
+1
+18f,0
+1
+63,0
+1
+63,0
+1
+12b,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+c7,0
+1
+63,0
+1
+63,0
+1
+3fb,0
+100 90 32
+7e4,0
+32,1
+a,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+3fb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a85.dat b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a85.dat
new file mode 100644
index 000000000..07571e530
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/a85.dat
@@ -0,0 +1,75 @@
+! $XConsortium$
+100 90 32
+7e4,0
+8,1
+8,0
+8,1
+8,0
+8,1
+8,0
+2,1
+a,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+383,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+383,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+383,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+63,0
+1
+58b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/drwsgmnts.m b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/drwsgmnts.m
new file mode 100644
index 000000000..80a645027
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwsgmnts/drwsgmnts.m
@@ -0,0 +1,193 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawSegments CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+XSegment *segments = defsegs;
+int nsegments = NSEGS;
+>>EXTERN
+
+XSegment defsegs[] = {
+ {10, 10, 50, 40},
+ {25, 7, 60, 15},
+ {10, 10, 25, 7},
+ {10, 40, 40, 10},
+};
+
+#define NSEGS 2 /* Number of segments that don't touch */
+#define NSEGSJOIN 3 /* + extra segment to test joins */
+#define NSEGSCROSS 4/* + extra segment to test intersecting lines */
+
+static void
+drawline(ax1, ay1, ax2, ay2)
+int ax1, ay1, ax2, ay2;
+{
+XSegment segs[1];
+int pass = 0, fail = 0;
+
+ segs[0].x1 = ax1; segs[0].y1 = ay1;
+ segs[0].x2 = ax2; segs[0].y2 = ay2;
+ segments = segs;
+ nsegments = 1;
+ XCALL;
+}
+
+static void
+setfordash()
+{
+static XSegment segs[2];
+ segs[0].x1 = 20; segs[0].y1 = 20;
+ segs[0].x2 = 70; segs[0].y2 = 20;
+
+ segs[1].x1 = 80; segs[1].y1 = 20;
+ segs[1].x2 = 80; segs[1].y2 = 80;
+ segments = segs;
+ nsegments = 2;
+}
+
+>>ASSERTION Good A
+A call to xname
+draws
+.A nsegments
+lines between the points
+.A "" ( x1 , y1 )
+and
+.A "" ( x2 , y2 )
+in
+.A segments
+in the drawable
+.A d .
+>>STRATEGY
+Draw segments.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+>>ASSERTION Good B 1
+A call to xname draws the lines in the order listed in the array of
+.S XSegment
+structures.
+>>ASSERTION Good A
+A call to xname does not perform joining at coincident endpoints.
+>>STRATEGY
+Set line-width component of GC to 4.
+Set line-style component of GC to LineSolid.
+Set cap-style component of GC to CapButt.
+Set join-style component of GC to JoinRound.
+Draw segments which include joins.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ nsegments = NSEGSJOIN;
+ XSetLineAttributes(display, gc, 4, LineSolid, CapButt, JoinRound);
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+A call to xname does not draw each pixel for a particular line more than once.
+>>STRATEGY
+Set function component of GC to GXxor.
+Draw segments.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+When lines intersect, then the intersecting pixels are drawn multiple times.
+>>STRATEGY
+Set function component of GC to GXxor.
+Set line-width component of GC to 3.
+Set line-style component of GC to LineSolid.
+Set cap-style component of GC to CapButt.
+Set join-style component of GC to JoinRound.
+Draw segments which include joins and intersections.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+ XSetLineAttributes(display, gc, 3, LineSolid, CapButt, JoinRound);
+ nsegments = NSEGSCROSS;
+ XCALL;
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M line-width ,
+.M line-style ,
+.M cap-style ,
+.M fill-style ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin ,
+.M tile-stipple-y-origin ,
+.M dash-offset
+and
+.M dash-list
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER Match gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr/a1.dat
new file mode 100644
index 000000000..1f04f569e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr/a1.dat
@@ -0,0 +1,40487 @@
+! $XConsortium$
+100 90 32
+2cd,0
+2,1
+0
+1
+0
+1
+0
+5,1
+10f,0
+a,1
+16,0
+2,1
+42,0
+a,1
+d,0
+9,1
+44,0
+a,1
+11,0
+2,1
+47,0
+a,1
+11,0
+a,1
+3f,0
+a,1
+9,0
+a,1
+5,0
+1
+41,0
+a,1
+5a,0
+a,1
+9,0
+c,1
+45,0
+a,1
+9,0
+7,1
+4a,0
+a,1
+5a,0
+a,1
+1bb2,0
+100 90 32
+2328,0
+100 90 32
+4b1,0
+4,1
+60,0
+6,1
+5e,0
+2,1
+3,0
+2,1
+5d,0
+2,1
+4,0
+2,1
+5c,0
+2,1
+5,0
+2,1
+5b,0
+2,1
+6,0
+1
+5b,0
+2,1
+6,0
+1
+5b,0
+2,1
+5,0
+1
+5c,0
+2,1
+4,0
+1
+5d,0
+2,1
+3,0
+1
+5e,0
+5,1
+1a8a,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+461,0
+2,1
+0
+2,1
+2,0
+4,1
+4,0
+3,1
+3,0
+2,1
+4d,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+4,1
+3c,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+3,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3b,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+36,0
+2,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+3,1
+3,0
+4,1
+4,0
+4,1
+36,0
+4,1
+2,0
+2,1
+2,0
+2,1
+57,0
+6,1
+0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+4,1
+3,0
+3,1
+4,0
+4,1
+3c,0
+4,1
+4,0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+1
+3,0
+2,1
+3f,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+3,1
+4,0
+3,1
+4,0
+3,1
+43,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+1
+3,0
+2,1
+4e,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+1
+3,0
+2,1
+36d,0
+2,1
+13,0
+2,1
+5,0
+2,1
+36,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+5,0
+2,1
+31,0
+2,1
+3,0
+3,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+5,0
+2,1
+31,0
+2,1
+3,0
+6,1
+2,0
+1
+2,0
+1
+4,0
+2,1
+13,0
+2,1
+5,0
+2,1
+2f,0
+6,1
+0
+2,1
+0
+3,1
+2,0
+4,1
+4,0
+2,1
+13,0
+2,1
+5,0
+2,1
+2f,0
+6,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+13,0
+2,1
+5,0
+2,1
+31,0
+2,1
+11,0
+4,1
+3,0
+4,1
+5,0
+5,1
+2,0
+c,1
+2e,0
+2,1
+5,0
+2,1
+5,0
+4,1
+0
+4,1
+3,0
+4,1
+5,0
+5,1
+2,0
+c,1
+35,0
+2,1
+6,0
+2,1
+b,0
+2,1
+5,0
+2,1
+c,0
+2,1
+2f,0
+6,1
+3,0
+2,1
+6,0
+2,1
+b,0
+2,1
+5,0
+2,1
+c,0
+2,1
+2f,0
+6,1
+3,0
+2,1
+6,0
+2,1
+b,0
+2,1
+5,0
+2,1
+c,0
+2,1
+38,0
+4,1
+4,0
+2,1
+b,0
+2,1
+5,0
+2,1
+c,0
+2,1
+4d,0
+2,1
+5,0
+2,1
+c,0
+2,1
+310,0
+2,1
+5,0
+2,1
+5,0
+2,1
+54,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2f,0
+7,1
+1e,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2f,0
+7,1
+1e,0
+2,1
+5,0
+2,1
+5,0
+2,1
+36,0
+7,1
+17,0
+2,1
+5,0
+2,1
+5,0
+2,1
+36,0
+7,1
+17,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3d,0
+7,1
+10,0
+9,1
+3,0
+7,1
+3a,0
+7,1
+10,0
+9,1
+3,0
+7,1
+41,0
+7,1
+9,0
+2,1
+5,0
+2,1
+4b,0
+7,1
+9,0
+2,1
+5,0
+2,1
+52,0
+7,1
+2,0
+2,1
+5,0
+2,1
+52,0
+7,1
+2,0
+2,1
+5,0
+2,1
+5b,0
+2,1
+5,0
+2,1
+2fb,0
+2,1
+62,0
+2,1
+62,0
+2,1
+7,0
+2,1
+0
+2,1
+11,0
+1
+3,0
+3,1
+3e,0
+2,1
+6,0
+2,1
+3,0
+2,1
+f,0
+2,1
+2,0
+2,1
+0
+2,1
+3d,0
+2,1
+4,0
+2,1
+7,0
+2,1
+9,0
+6,1
+2,0
+2,1
+40,0
+2,1
+3,0
+2,1
+9,0
+2,1
+0
+6,1
+0
+6,1
+2,0
+2,1
+37,0
+7,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+4,1
+5,0
+2,1
+2f,0
+7,1
+2,0
+2,1
+6,0
+2,1
+3,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+6,1
+2,0
+2,1
+6,0
+2,1
+31,0
+2,1
+5,0
+2,1
+7,0
+2,1
+0
+2,1
+6,0
+2,1
+0
+2,1
+0
+6,1
+2,0
+2,1
+39,0
+2,1
+5,0
+2,1
+3,0
+6,1
+0
+6,1
+0
+3,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+2,1
+36,0
+2,1
+5,0
+2,1
+3,0
+6,1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+1
+6,0
+1
+0
+3,1
+37,0
+2,1
+5,0
+2,1
+5b,0
+2,1
+5,0
+2,1
+315,0
+100 90 32
+4b9,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+0
+1
+4,0
+2,1
+3,0
+3,1
+2,0
+1
+2,0
+3,1
+5,0
+3,1
+37,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+0
+1
+3,0
+4,1
+2,0
+1
+0
+1
+0
+2,1
+0
+2,1
+0
+2,1
+4,0
+3,1
+37,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+5,1
+0
+1
+0
+2,1
+0
+1
+0
+3,1
+0
+1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+38,0
+2,1
+b,0
+5,1
+0
+1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+39,0
+2,1
+c,0
+1
+0
+1
+3,0
+4,1
+4,0
+2,1
+4,0
+3,1
+3f,0
+2,1
+b,0
+5,1
+3,0
+2,1
+0
+1
+2,0
+2,1
+4,0
+2,1
+0
+1
+0
+1
+4a,0
+5,1
+0
+1
+0
+2,1
+0
+1
+2,0
+1
+0
+3,1
+0
+2,1
+0
+3,1
+3d,0
+2,1
+c,0
+1
+0
+1
+3,0
+4,1
+2,0
+2,1
+0
+1
+0
+1
+0
+2,1
+0
+2,1
+3e,0
+2,1
+c,0
+1
+0
+1
+4,0
+2,1
+3,0
+1
+2,0
+3,1
+2,0
+3,1
+0
+1
+483,0
+2,1
+3,0
+2,1
+2b,0
+2,1
+2f,0
+2,1
+5,0
+2,1
+2a,0
+2,1
+2f,0
+2,1
+5,0
+2,1
+4,0
+1
+2,0
+1
+4,0
+2,1
+1b,0
+2,1
+2f,0
+2,1
+7,0
+2,1
+4,0
+2,1
+5,0
+2,1
+1b,0
+2,1
+2f,0
+2,1
+7,0
+2,1
+2,0
+6,1
+0
+6,1
+8,0
+6,1
+a,0
+2,1
+30,0
+2,1
+7,0
+2,1
+2,0
+6,1
+0
+6,1
+8,0
+6,1
+9,0
+2,1
+32,0
+2,1
+5,0
+2,1
+5,0
+2,1
+5,0
+2,1
+5,0
+3,1
+11,0
+2,1
+32,0
+2,1
+5,0
+2,1
+4,0
+1
+2,0
+1
+4,0
+2,1
+5,0
+3,1
+b,0
+2,1
+3,0
+2,1
+34,0
+2,1
+3,0
+2,1
+14,0
+2,1
+b,0
+4,1
+2,0
+2,1
+4e,0
+2,1
+d,0
+2,1
+420,0
+2,1
+5,0
+2,1
+4,0
+4,1
+3,0
+4,1
+6,0
+2,1
+0
+6,1
+2,0
+4,1
+2,0
+6,1
+2e,0
+1
+2,0
+1
+3,0
+3,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+3,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+4,1
+0
+2,1
+5,0
+2,1
+9,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+5,1
+2,0
+2,1
+8,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+4,0
+3,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+5,1
+5,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+2,1
+8,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+9,0
+2,1
+0
+6,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+30,0
+1
+2,0
+1
+4,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+32,0
+2,1
+3,0
+6,1
+0
+6,1
+2,0
+4,1
+6,0
+2,1
+2,0
+4,1
+3,0
+4,1
+3,0
+2,1
+47d,0
+4,1
+3,0
+4,1
+14,0
+2,1
+8,0
+2,1
+6,0
+4,1
+2e,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+12,0
+2,1
+a,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+6,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+3,0
+4,1
+3,0
+2,1
+4,0
+6,1
+4,0
+2,1
+6,0
+2,1
+2e,0
+4,1
+3,0
+5,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+3,1
+2e,0
+2,1
+2,0
+2,1
+5,0
+2,1
+10,0
+2,1
+4,0
+6,1
+4,0
+2,1
+4,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+5,0
+2,1
+a,0
+3,1
+4,0
+2,1
+3,0
+6,1
+3,0
+2,1
+36,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+5,0
+2,1
+a,0
+2,1
+6,0
+2,1
+30,0
+4,1
+3,0
+4,1
+3,0
+4,1
+4,0
+2,1
+7,0
+2,1
+8,0
+2,1
+7,0
+2,1
+3f,0
+2,1
+4,0
+2,1
+36c,0
+100 90 32
+4b1,0
+4,1
+3,0
+4,1
+2,0
+5,1
+3,0
+4,1
+2,0
+5,1
+2,0
+6,1
+0
+6,1
+2,0
+4,1
+2e,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2d,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+2,1
+31,0
+1
+0
+4,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+2,1
+31,0
+1
+0
+1
+0
+2,1
+0
+6,1
+0
+5,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+5,1
+2,0
+2,1
+0
+3,1
+2d,0
+1
+0
+4,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2d,0
+1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2d,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2e,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+4,1
+2,0
+5,1
+2,0
+6,1
+0
+2,1
+6,0
+5,1
+479,0
+2,1
+2,0
+2,1
+0
+6,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+0
+2,1
+5,0
+1
+4,0
+1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+2e,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+6,1
+0
+3,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+3,0
+2,1
+5,0
+6,1
+0
+3,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+6,1
+3,0
+2,1
+7,0
+2,1
+0
+3,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+6,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+3,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+6,1
+2,0
+4,1
+2,0
+2,1
+3,0
+1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+47a,0
+5,1
+3,0
+4,1
+2,0
+5,1
+3,0
+4,1
+2,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+1
+2,0
+1
+2,0
+2,1
+2,0
+2,1
+2d,0
+5,1
+2,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+4,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+1
+2,0
+1
+2,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+4,1
+7,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+2d,0
+2,1
+5,0
+3,1
+0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+6,1
+2d,0
+2,1
+5,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+6,0
+4,1
+2,0
+2,1
+3,0
+1
+2,0
+4,1
+4,0
+2,1
+4,0
+4,1
+4,0
+2,1
+3,0
+1
+4,0
+1
+38,0
+2,1
+43f,0
+1
+4,0
+1
+0
+2,1
+2,0
+2,1
+0
+6,1
+2,0
+4,1
+2,0
+2,1
+6,0
+4,1
+4,0
+2,1
+36,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+4,0
+2,1
+8,0
+2,1
+3,0
+4,1
+36,0
+1
+2,0
+1
+3,0
+4,1
+6,0
+2,1
+2,0
+2,1
+5,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+35,0
+4,1
+3,0
+4,1
+5,0
+2,1
+3,0
+2,1
+5,0
+2,1
+7,0
+2,1
+2,0
+1
+4,0
+1
+36,0
+2,1
+5,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3d,0
+4,1
+4,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+5,0
+2,1
+3d,0
+1
+2,0
+1
+4,0
+2,1
+3,0
+2,1
+6,0
+2,1
+7,0
+2,1
+5,0
+2,1
+3c,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+8,0
+2,1
+4,0
+2,1
+3c,0
+1
+4,0
+1
+3,0
+2,1
+3,0
+6,1
+2,0
+4,1
+6,0
+2,1
+2,0
+4,1
+9,0
+6,1
+5e,0
+6,1
+34d,0
+100 90 32
+4b1,0
+3,1
+a,0
+2,1
+10,0
+2,1
+a,0
+3,1
+36,0
+3,1
+a,0
+2,1
+10,0
+2,1
+9,0
+2,1
+0
+2,1
+36,0
+2,1
+a,0
+2,1
+10,0
+2,1
+9,0
+2,1
+3a,0
+2,1
+3,0
+4,1
+2,0
+5,1
+3,0
+4,1
+3,0
+5,1
+2,0
+4,1
+3,0
+2,1
+5,0
+3,1
+0
+1
+38,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+4,1
+3,0
+2,1
+2,0
+2,1
+35,0
+5,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+6,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+34,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+5,0
+4,1
+35,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+39,0
+5,1
+0
+5,1
+3,0
+4,1
+3,0
+5,1
+2,0
+4,1
+3,0
+2,1
+5,0
+4,1
+5f,0
+2,1
+2,0
+2,1
+5f,0
+4,1
+3b2,0
+2,1
+7,0
+2,1
+7,0
+2,1
+0
+2,1
+6,0
+3,1
+44,0
+2,1
+7,0
+2,1
+7,0
+2,1
+0
+2,1
+7,0
+2,1
+44,0
+2,1
+13,0
+2,1
+7,0
+2,1
+44,0
+5,1
+3,0
+3,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+5,1
+3,0
+4,1
+2e,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+6,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+3c,0
+2,1
+2,0
+2,1
+5f,0
+4,1
+455,0
+2,1
+62,0
+2,1
+46,0
+5,1
+3,0
+5,1
+0
+5,1
+3,0
+4,1
+2,0
+4,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+8,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+2d,0
+5,1
+3,0
+5,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+2d,0
+2,1
+9,0
+2,1
+0
+2,1
+6,0
+4,1
+3,0
+4,1
+3,0
+5,1
+3,0
+2,1
+4,0
+1
+2,0
+1
+2e,0
+2,1
+9,0
+2,1
+57,0
+2,1
+9,0
+2,1
+345,0
+1
+0
+1
+0
+1
+60,0
+1
+0
+1
+45,0
+3,1
+4,0
+2,1
+4,0
+3,1
+4,0
+2,1
+2,0
+1
+2,0
+1
+0
+1
+0
+1
+43,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+6,1
+3,0
+1
+0
+1
+44,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+0
+1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+6,1
+3,0
+2,1
+5,0
+2,1
+5,0
+2,1
+c,0
+1
+0
+1
+2e,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+1
+0
+1
+0
+1
+2e,0
+4,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+c,0
+1
+0
+1
+2f,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+1
+0
+1
+0
+1
+2d,0
+2,1
+2,0
+2,1
+2,0
+5,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+1
+0
+1
+2e,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+6,1
+3,0
+3,1
+4,0
+2,1
+4,0
+3,1
+b,0
+1
+0
+1
+0
+1
+34,0
+2,1
+2,0
+2,1
+26,0
+1
+0
+1
+36,0
+4,1
+26,0
+1
+0
+1
+0
+1
+2e9,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+38d,0
+2,1
+3,0
+2,1
+1a,0
+2,1
+3b,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+c,0
+2,1
+2,0
+2,1
+4,0
+2,1
+3,0
+3,1
+2,0
+3,1
+0
+2,1
+2c,0
+2,1
+6,0
+3,1
+5,0
+2,1
+c,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+59,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+e,0
+2,1
+4,0
+5,1
+10,0
+d,1
+2c,0
+2,1
+e,0
+2,1
+3,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+2,0
+3,1
+2b,0
+2,1
+e,0
+2,1
+4,0
+2,1
+15,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+e,0
+2,1
+5,0
+2,1
+15,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+30,0
+4,1
+c,0
+4,1
+3,0
+5,1
+11,0
+2,1
+3,0
+2,1
+ad,0
+2,1
+61,0
+2,1
+2a9,0
+2,1
+5a,0
+2,1
+5,0
+2,1
+3,0
+5,1
+53,0
+2,1
+4,0
+2,1
+4,0
+5,1
+b7,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+434,0
+1
+4,0
+1
+11,0
+3,1
+0
+2,1
+2,0
+3,1
+2,0
+3,1
+0
+2,1
+3,0
+3,1
+2,0
+3,1
+0
+2,1
+13,0
+3,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+a,0
+6,1
+10,0
+2,1
+0
+3,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+b,0
+4,1
+19,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+7,0
+2,1
+3,0
+2,1
+27,0
+a,1
+0
+2,1
+0
+a,1
+0
+2,1
+11,0
+5,1
+0
+2,1
+0
+5,1
+0
+2,1
+28,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+8,1
+1f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+8,1
+1f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3d5,0
+3,1
+58,0
+3,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+56,0
+2,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+60,0
+3,1
+fb,0
+8,1
+5c,0
+8,1
+20d,0
+2,1
+62,0
+2,1
+2f9,0
+100 90 32
+3a6,0
+1
+49,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+5,1
+4,0
+3,1
+3,0
+2,1
+7,0
+3,1
+5,0
+3,1
+29,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+3,1
+29,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+5,0
+2,1
+29,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+9,1
+2,0
+2,1
+0
+1
+6,0
+3,1
+2,0
+2,1
+8,0
+1
+0
+1
+6,0
+2,1
+29,0
+2,1
+b,0
+2,1
+2,0
+2,1
+4,0
+5,1
+9,0
+2,1
+9,0
+3,1
+5,0
+2,1
+2a,0
+2,1
+b,0
+2,1
+2,0
+2,1
+6,0
+4,1
+8,0
+2,1
+8,0
+5,1
+0
+2,1
+2d,0
+2,1
+9,0
+9,1
+6,0
+1
+0
+2,1
+6,0
+2,1
+2,0
+3,1
+3,0
+2,1
+3,0
+3,1
+3a,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+6,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+9,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+2e,0
+2,1
+9,0
+2,1
+2,0
+2,1
+7,0
+5,1
+6,0
+2,1
+3,0
+3,1
+4,0
+4,1
+0
+3,1
+47,0
+1
+370,0
+1
+57,0
+2,1
+2,0
+2,1
+4,0
+1
+0
+1
+0
+1
+21,0
+2,1
+31,0
+2,1
+4,0
+2,1
+4,0
+3,1
+22,0
+2,1
+31,0
+2,1
+4,0
+2,1
+4,0
+3,1
+6,0
+2,1
+19,0
+2,1
+31,0
+2,1
+6,0
+2,1
+2,0
+1
+0
+1
+0
+1
+5,0
+2,1
+19,0
+2,1
+31,0
+2,1
+6,0
+2,1
+4,0
+1
+7,0
+2,1
+18,0
+2,1
+32,0
+2,1
+6,0
+2,1
+9,0
+8,1
+7,0
+6,1
+8,0
+2,1
+32,0
+2,1
+6,0
+2,1
+9,0
+8,1
+7,0
+6,1
+7,0
+2,1
+33,0
+2,1
+6,0
+2,1
+c,0
+2,1
+17,0
+2,1
+33,0
+2,1
+6,0
+2,1
+c,0
+2,1
+5,0
+2,1
+b,0
+2,1
+2,0
+2,1
+35,0
+2,1
+4,0
+2,1
+d,0
+2,1
+5,0
+2,1
+b,0
+2,1
+2,0
+2,1
+35,0
+2,1
+4,0
+2,1
+15,0
+1
+47,0
+2,1
+2,0
+2,1
+16,0
+1
+62,0
+1
+304,0
+3,1
+8,0
+2,1
+4,0
+5,1
+4,0
+5,1
+7,0
+2,1
+4,0
+6,1
+4,0
+4,1
+3,0
+7,1
+1f,0
+2,1
+0
+2,1
+6,0
+3,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+7,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+4,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+3,0
+2,1
+6,0
+2,1
+8,0
+2,1
+7,0
+2,1
+4,0
+1
+0
+2,1
+3,0
+6,1
+3,0
+2,1
+a,0
+2,1
+20,0
+2,1
+3,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+3,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+6,1
+6,0
+2,1
+20,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+2,1
+21,0
+2,1
+3,0
+2,1
+6,0
+2,1
+5,0
+2,1
+a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+2,1
+21,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+23,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+24,0
+3,1
+8,0
+2,1
+3,0
+7,1
+3,0
+5,1
+7,0
+2,1
+4,0
+5,1
+4,0
+5,1
+4,0
+2,1
+40b,0
+5,1
+4,0
+5,1
+f,0
+2,1
+a,0
+2,1
+7,0
+4,1
+2d,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+d,0
+2,1
+c,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+c,0
+2,1
+e,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+10,0
+2,1
+7,0
+2,1
+2d,0
+5,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+5,1
+6,0
+2,1
+5,0
+2,1
+2d,0
+2,1
+3,0
+2,1
+3,0
+6,1
+a,0
+2,1
+7,0
+5,1
+6,0
+2,1
+4,0
+2,1
+2e,0
+2,1
+3,0
+2,1
+7,0
+2,1
+b,0
+2,1
+10,0
+2,1
+5,0
+2,1
+2e,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+c,0
+2,1
+5,0
+5,1
+4,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+4,0
+5,1
+3,0
+2,1
+7,0
+2,1
+2f,0
+5,1
+4,0
+4,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+a,0
+2,1
+8,0
+2,1
+45,0
+1
+63,0
+1
+62,0
+1
+308,0
+100 90 32
+3eb,0
+8,1
+6,0
+2,1
+4,0
+5,1
+5,0
+5,1
+2,0
+6,1
+3,0
+7,1
+0
+7,1
+3,0
+6,1
+1d,0
+2,1
+6,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+6,0
+2,1
+7,0
+2,1
+4,0
+2,1
+1b,0
+2,1
+2,0
+4,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+22,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+1
+2,0
+1
+3,0
+6,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+0
+6,1
+2,0
+6,1
+2,0
+2,1
+22,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+7,0
+2,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+4,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+3,0
+6,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+1b,0
+2,1
+2,0
+3,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+1c,0
+2,1
+8,0
+1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+6,0
+2,1
+7,0
+2,1
+3,0
+3,1
+1d,0
+9,1
+2,0
+2,1
+4,0
+2,1
+0
+6,1
+4,0
+5,1
+2,0
+6,1
+3,0
+7,1
+0
+2,1
+8,0
+4,1
+0
+2,1
+402,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+3,1
+5,0
+3,1
+0
+2,1
+4,0
+2,1
+3,0
+5,1
+25,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+5,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+24,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+5,0
+4,1
+3,0
+4,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+23,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+4,1
+5,0
+2,1
+5,0
+4,1
+3,0
+4,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+23,0
+8,1
+0
+2,1
+5,0
+2,1
+0
+3,1
+6,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+23,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+4,1
+5,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+23,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+23,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+2,1
+5,0
+2,1
+23,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+4,1
+2,0
+2,1
+3,0
+2,1
+24,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+4,1
+2,0
+2,1
+4,0
+2,1
+0
+6,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+3,0
+3,1
+3,0
+5,1
+40d,0
+6,1
+4,0
+5,1
+3,0
+7,1
+3,0
+5,1
+2,0
+8,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+4,0
+2,1
+19,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+4,0
+2,1
+19,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+4,1
+7,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+3,1
+2,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+7,1
+3,0
+5,1
+5,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+3,1
+2,0
+2,1
+1a,0
+6,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+4,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+1
+0
+5,1
+0
+1
+1b,0
+2,1
+6,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+1
+2,0
+1
+5,0
+4,1
+0
+4,1
+1b,0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+4,1
+5,0
+3,1
+3,0
+3,1
+1b,0
+2,1
+7,0
+2,1
+2,0
+3,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+7,0
+2,1
+3,0
+2,1
+1c,0
+2,1
+8,0
+6,1
+2,0
+2,1
+4,0
+2,1
+2,0
+5,1
+5,0
+2,1
+6,0
+4,1
+6,0
+2,1
+7,0
+2,1
+3,0
+2,1
+2b,0
+2,1
+3d7,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+8,1
+2,0
+5,1
+2,0
+2,1
+6,0
+5,1
+34,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+5,0
+2,1
+9,0
+2,1
+4,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+7,0
+2,1
+3,0
+2,1
+6,0
+2,1
+8,0
+2,1
+3,0
+4,1
+5,0
+2,1
+28,0
+4,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+2,0
+6,1
+3,0
+2,1
+2a,0
+2,1
+6,0
+4,1
+6,0
+2,1
+5,0
+2,1
+7,0
+2,1
+7,0
+2,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+8,1
+25,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+7,0
+2,1
+7,0
+2,1
+4,0
+2,1
+4,0
+8,1
+24,0
+4,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+28,0
+2,1
+2,0
+2,1
+5,0
+2,1
+5,0
+2,1
+7,0
+2,1
+8,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+26,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+8,0
+2,1
+9,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2e,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+8,1
+2,0
+2,1
+9,0
+2,1
+5,0
+2,1
+50,0
+2,1
+10,0
+2,1
+50,0
+2,1
+10,0
+2,1
+50,0
+5,1
+a,0
+5,1
+2f0,0
+100 90 32
+3e9,0
+2,1
+9,0
+2,1
+13,0
+2,1
+b,0
+3,1
+33,0
+2,1
+a,0
+2,1
+13,0
+2,1
+a,0
+2,1
+35,0
+2,1
+a,0
+2,1
+13,0
+2,1
+a,0
+2,1
+35,0
+3,1
+2,0
+4,1
+3,0
+6,1
+3,0
+5,1
+3,0
+6,1
+2,0
+5,1
+2,0
+5,1
+2,0
+6,1
+2b,0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+33,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+30,0
+5,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+7,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+30,0
+3,1
+0
+2,1
+0
+6,1
+3,0
+5,1
+3,0
+6,1
+2,0
+5,1
+3,0
+2,1
+4,0
+6,1
+62,0
+2,1
+5d,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+2e8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+4a,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+4a,0
+2,1
+e,0
+2,1
+6,0
+2,1
+4a,0
+6,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+5,1
+0
+3,1
+2,0
+6,1
+3,0
+5,1
+30,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+4,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+4,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+5,1
+3d,0
+2,1
+60,0
+3,1
+3f8,0
+2,1
+62,0
+2,1
+44,0
+6,1
+3,0
+6,1
+0
+5,1
+2,0
+4,1
+2,0
+5,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+25,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+25,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+5,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+26,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+4,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+26,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+7,0
+3,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+1
+2,0
+1
+4,0
+4,1
+0
+4,1
+26,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+4,1
+5,0
+2,1
+3,0
+2,1
+27,0
+6,1
+3,0
+6,1
+0
+2,1
+5,0
+4,1
+4,0
+3,1
+2,0
+6,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+27,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+32b,0
+3,1
+3,0
+2,1
+2,0
+3,1
+11,0
+2,1
+43,0
+2,1
+5,0
+2,1
+4,0
+2,1
+10,0
+2,1
+43,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3c,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+6,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+10,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2b,0
+4,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+4,0
+2,1
+5,0
+6,1
+4,0
+2,1
+2d,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+3,1
+6,0
+2,1
+5,0
+3,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2d,0
+4,1
+4,0
+1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+5,0
+2,1
+4,0
+2,1
+e,0
+2,1
+2,0
+2,1
+28,0
+2,1
+2,0
+2,1
+3,0
+4,1
+2,0
+2,1
+8,0
+2,1
+5,0
+2,1
+4,0
+2,1
+e,0
+2,1
+2,0
+2,1
+28,0
+2,1
+2,0
+2,1
+4,0
+2,1
+3,0
+6,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+f,0
+4,1
+33,0
+2,1
+d,0
+2,1
+5,0
+2,1
+4,0
+2,1
+43,0
+2,1
+0
+2,1
+d,0
+2,1
+5,0
+2,1
+4,0
+2,1
+44,0
+3,1
+f,0
+3,1
+3,0
+2,1
+2,0
+3,1
+2f9,0
+100 90 32
+3eb,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40e,0
+100 90 32
+3eb,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40e,0
+100 90 32
+3eb,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40e,0
+100 90 32
+3eb,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40e,0
+100 90 32
+3b8,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+32,0
+2,1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+4,0
+2,1
+2,0
+2,1
+c,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+c,0
+2,1
+5,0
+3,1
+6,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+58,0
+d,1
+10,0
+5,1
+4,0
+2,1
+e,0
+2,1
+2c,0
+3,1
+2,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+3,0
+2,1
+e,0
+2,1
+31,0
+2,1
+3,0
+2,1
+15,0
+2,1
+4,0
+2,1
+e,0
+2,1
+30,0
+2,1
+3,0
+2,1
+15,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+11,0
+5,1
+3,0
+4,1
+c,0
+4,1
+ad,0
+2,1
+63,0
+2,1
+2cb,0
+2,1
+5b,0
+5,1
+3,0
+2,1
+5,0
+2,1
+53,0
+5,1
+4,0
+2,1
+4,0
+2,1
+c6,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+394,0
+1
+4,0
+1
+5e,0
+6,1
+a,0
+2,1
+0
+3,1
+3,0
+2,1
+0
+3,1
+13,0
+2,1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+0
+3,1
+2,0
+3,1
+2,0
+2,1
+0
+3,1
+12,0
+4,1
+b,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+20,0
+2,1
+3,0
+2,1
+7,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+28,0
+2,1
+0
+5,1
+0
+2,1
+0
+5,1
+11,0
+2,1
+0
+a,1
+0
+2,1
+0
+a,1
+27,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1f,0
+8,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1f,0
+8,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3bc,0
+3,1
+60,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+3,1
+57,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+57,0
+3,1
+152,0
+8,1
+5c,0
+8,1
+1d1,0
+2,1
+62,0
+2,1
+2e5,0
+100 90 32
+3c1,0
+1
+43,0
+3,1
+5,0
+3,1
+7,0
+2,1
+3,0
+3,1
+4,0
+5,1
+3,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+3,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+2,1
+5,0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+2,1
+6,0
+1
+0
+1
+8,0
+2,1
+2,0
+3,1
+6,0
+1
+0
+2,1
+2,0
+9,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2a,0
+2,1
+5,0
+3,1
+9,0
+2,1
+9,0
+5,1
+4,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2d,0
+2,1
+0
+5,1
+8,0
+2,1
+8,0
+4,1
+6,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2e,0
+3,1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+6,0
+9,1
+9,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+3a,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2d,0
+3,1
+0
+4,1
+4,0
+3,1
+3,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+2,1
+9,0
+2,1
+49,0
+1
+396,0
+1
+3e,0
+2,1
+21,0
+1
+0
+1
+0
+1
+4,0
+2,1
+2,0
+2,1
+32,0
+2,1
+22,0
+3,1
+4,0
+2,1
+4,0
+2,1
+32,0
+2,1
+19,0
+2,1
+6,0
+3,1
+4,0
+2,1
+4,0
+2,1
+32,0
+2,1
+19,0
+2,1
+5,0
+1
+0
+1
+0
+1
+2,0
+2,1
+6,0
+2,1
+32,0
+2,1
+18,0
+2,1
+7,0
+1
+4,0
+2,1
+6,0
+2,1
+32,0
+2,1
+8,0
+6,1
+7,0
+8,1
+9,0
+2,1
+6,0
+2,1
+33,0
+2,1
+7,0
+6,1
+7,0
+8,1
+9,0
+2,1
+6,0
+2,1
+33,0
+2,1
+17,0
+2,1
+c,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+b,0
+2,1
+5,0
+2,1
+c,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+b,0
+2,1
+5,0
+2,1
+d,0
+2,1
+4,0
+2,1
+46,0
+1
+15,0
+2,1
+4,0
+2,1
+46,0
+1
+16,0
+2,1
+2,0
+2,1
+48,0
+1
+2f7,0
+7,1
+3,0
+4,1
+4,0
+6,1
+4,0
+2,1
+7,0
+5,1
+4,0
+5,1
+4,0
+2,1
+8,0
+3,1
+20,0
+2,1
+7,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+3,1
+6,0
+2,1
+0
+2,1
+20,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+4,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+2,1
+20,0
+2,1
+a,0
+2,1
+3,0
+6,1
+3,0
+2,1
+0
+1
+4,0
+2,1
+7,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+20,0
+2,1
+6,0
+6,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+2,1
+21,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+21,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+a,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+22,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+22,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+23,0
+2,1
+4,0
+5,1
+4,0
+5,1
+4,0
+2,1
+7,0
+5,1
+3,0
+7,1
+3,0
+2,1
+8,0
+3,1
+417,0
+4,1
+7,0
+2,1
+a,0
+2,1
+f,0
+5,1
+4,0
+5,1
+2d,0
+2,1
+2,0
+2,1
+5,0
+2,1
+c,0
+2,1
+d,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+2,0
+2,1
+4,0
+2,1
+e,0
+2,1
+c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+7,0
+2,1
+10,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2d,0
+2,1
+5,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+5,1
+2f,0
+2,1
+4,0
+2,1
+6,0
+5,1
+7,0
+2,1
+a,0
+6,1
+3,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+5,0
+2,1
+10,0
+2,1
+b,0
+2,1
+7,0
+2,1
+3,0
+2,1
+36,0
+2,1
+4,0
+5,1
+5,0
+2,1
+c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+7,0
+2,1
+3,0
+5,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+8,0
+2,1
+a,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+4,1
+4,0
+5,1
+4d,0
+1
+63,0
+1
+64,0
+1
+2d7,0
+100 90 32
+3ff,0
+6,1
+3,0
+7,1
+0
+7,1
+3,0
+6,1
+2,0
+5,1
+5,0
+5,1
+4,0
+2,1
+6,0
+8,1
+1d,0
+2,1
+4,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+22,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+22,0
+2,1
+2,0
+6,1
+2,0
+6,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+6,1
+3,0
+1
+2,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+1b,0
+4,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+1b,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+6,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+1b,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+1b,0
+3,1
+3,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+1
+8,0
+2,1
+1c,0
+2,1
+0
+4,1
+8,0
+2,1
+0
+7,1
+3,0
+6,1
+2,0
+5,1
+4,0
+6,1
+0
+2,1
+4,0
+2,1
+2,0
+9,1
+410,0
+5,1
+3,0
+2,1
+4,0
+2,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+24,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+3,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+5,0
+4,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+3,1
+0
+2,1
+5,0
+2,1
+0
+8,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+4,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+24,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+25,0
+5,1
+3,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+6,1
+0
+2,1
+4,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+401,0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+8,1
+2,0
+5,1
+3,0
+7,1
+3,0
+5,1
+4,0
+6,1
+19,0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+7,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+5,1
+3,0
+7,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+1b,0
+1
+0
+5,1
+0
+1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+4,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+6,1
+1b,0
+4,1
+0
+4,1
+5,0
+1
+2,0
+1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+2,1
+1b,0
+3,1
+3,0
+3,1
+5,0
+4,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+3,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+7,0
+2,1
+1c,0
+2,1
+3,0
+2,1
+7,0
+2,1
+6,0
+4,1
+6,0
+2,1
+5,0
+5,1
+2,0
+2,1
+4,0
+2,1
+2,0
+6,1
+8,0
+2,1
+53,0
+2,1
+3c7,0
+5,1
+6,0
+2,1
+2,0
+5,1
+2,0
+8,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2e,0
+2,1
+4,0
+2,1
+9,0
+2,1
+5,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+26,0
+2,1
+5,0
+4,1
+3,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+28,0
+2,1
+3,0
+6,1
+2,0
+2,1
+8,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+4,1
+24,0
+8,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+6,0
+4,1
+6,0
+2,1
+25,0
+8,1
+4,0
+2,1
+4,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+7,0
+2,1
+7,0
+2,1
+2a,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+4,1
+28,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+7,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+4,0
+2,1
+5,0
+2,1
+9,0
+2,1
+8,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+34,0
+2,1
+5,0
+2,1
+9,0
+2,1
+2,0
+8,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+34,0
+2,1
+10,0
+2,1
+50,0
+2,1
+10,0
+2,1
+50,0
+5,1
+a,0
+5,1
+2dc,0
+100 90 32
+417,0
+3,1
+b,0
+2,1
+13,0
+2,1
+9,0
+2,1
+36,0
+2,1
+a,0
+2,1
+13,0
+2,1
+a,0
+2,1
+35,0
+2,1
+a,0
+2,1
+13,0
+2,1
+a,0
+2,1
+2b,0
+6,1
+2,0
+5,1
+2,0
+5,1
+2,0
+6,1
+3,0
+5,1
+3,0
+6,1
+3,0
+4,1
+2,0
+3,1
+2b,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+2b,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+33,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+7,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+5,1
+30,0
+2,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2f,0
+6,1
+4,0
+2,1
+3,0
+5,1
+2,0
+6,1
+3,0
+5,1
+3,0
+6,1
+0
+2,1
+0
+3,1
+30,0
+2,1
+62,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+339,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+4a,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+4a,0
+2,1
+6,0
+2,1
+e,0
+2,1
+30,0
+5,1
+3,0
+6,1
+2,0
+3,1
+0
+5,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+6,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+30,0
+5,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+55,0
+2,1
+63,0
+3,1
+3d3,0
+2,1
+62,0
+2,1
+43,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+5,1
+2,0
+4,1
+2,0
+5,1
+0
+6,1
+3,0
+6,1
+25,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+26,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+5,0
+3,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+26,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+4,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+26,0
+4,1
+0
+4,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+27,0
+2,1
+3,0
+2,1
+5,0
+4,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+27,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+6,1
+2,0
+3,1
+4,0
+4,1
+5,0
+2,1
+0
+6,1
+3,0
+6,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+2e6,0
+2,1
+11,0
+3,1
+2,0
+2,1
+3,0
+3,1
+44,0
+2,1
+10,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+43,0
+2,1
+10,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+6,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2a,0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2b,0
+2,1
+4,0
+6,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+4,1
+2d,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+3,1
+5,0
+2,1
+6,0
+3,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+e,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+1
+4,0
+4,1
+29,0
+2,1
+2,0
+2,1
+e,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+2,0
+4,1
+3,0
+2,1
+2,0
+2,1
+29,0
+4,1
+f,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+6,1
+3,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+d,0
+2,1
+46,0
+2,1
+4,0
+2,1
+5,0
+2,1
+d,0
+2,1
+0
+2,1
+44,0
+3,1
+2,0
+2,1
+3,0
+3,1
+f,0
+3,1
+2c8,0
+100 90 32
+40b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3ee,0
+100 90 32
+40b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3ee,0
+100 90 32
+40b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3ee,0
+100 90 32
+40b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3ee,0
+100 90 32
+3,0
+1
+8,0
+2,1
+2,0
+3,1
+9,0
+1
+5,0
+1
+b,0
+1
+0
+2,1
+9,0
+1
+6,0
+1
+b,0
+1
+0
+2,1
+9,0
+1
+6,0
+1
+4,0
+1
+9,0
+2,1
+0
+2,1
+a,0
+1
+3,0
+e,1
+0
+1
+0
+e,1
+0
+e,1
+0
+1
+0
+e,1
+3,0
+1
+0
+e,1
+0
+1
+0
+e,1
+3,0
+1
+a,0
+2,1
+0
+2,1
+9,0
+1
+6,0
+1
+a,0
+2,1
+0
+2,1
+9,0
+1
+4,0
+4,1
+3,0
+1
+9,0
+2,1
+0
+1
+b,0
+1
+5,0
+1
+9,0
+3,1
+2,0
+2,1
+8,0
+1
+6,0
+1
+9,0
+3,1
+2,0
+2,1
+8,0
+1
+6,0
+1
+4,0
+1
+8,0
+2,1
+3,0
+1
+a,0
+1
+5,0
+1
+8,0
+3,1
+4,0
+2,1
+7,0
+1
+6,0
+1
+8,0
+3,1
+4,0
+2,1
+7,0
+1
+6,0
+1
+4,0
+1
+7,0
+2,1
+5,0
+1
+9,0
+1
+5,0
+1
+7,0
+3,1
+0
+3,1
+2,0
+2,1
+6,0
+1
+6,0
+1
+7,0
+3,1
+0
+3,1
+2,0
+2,1
+6,0
+1
+6,0
+1
+4,0
+1
+6,0
+2,1
+2,0
+3,1
+2,0
+1
+8,0
+1
+c,0
+3,1
+2,0
+3,1
+3,0
+2,1
+13,0
+3,1
+2,0
+3,1
+3,0
+2,1
+c,0
+1
+a,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+3,1
+3,0
+3,1
+4,0
+2,1
+11,0
+3,1
+3,0
+3,1
+4,0
+2,1
+15,0
+2,1
+4,0
+3,1
+4,0
+1
+11,0
+3,1
+4,0
+3,1
+5,0
+2,1
+f,0
+3,1
+4,0
+3,1
+5,0
+2,1
+13,0
+2,1
+5,0
+3,1
+5,0
+1
+f,0
+3,1
+5,0
+3,1
+6,0
+2,1
+d,0
+3,1
+5,0
+3,1
+6,0
+2,1
+11,0
+2,1
+6,0
+3,1
+6,0
+1
+d,0
+3,1
+6,0
+3,1
+7,0
+2,1
+b,0
+3,1
+6,0
+3,1
+7,0
+2,1
+f,0
+2,1
+7,0
+3,1
+7,0
+1
+b,0
+3,1
+7,0
+3,1
+8,0
+2,1
+9,0
+3,1
+7,0
+3,1
+8,0
+2,1
+d,0
+2,1
+8,0
+3,1
+8,0
+1
+9,0
+3,1
+8,0
+3,1
+9,0
+2,1
+7,0
+3,1
+8,0
+3,1
+9,0
+2,1
+b,0
+2,1
+9,0
+3,1
+9,0
+1
+7,0
+3,1
+9,0
+3,1
+a,0
+2,1
+5,0
+3,1
+9,0
+3,1
+a,0
+2,1
+9,0
+2,1
+a,0
+3,1
+a,0
+1
+5,0
+3,1
+a,0
+3,1
+b,0
+2,1
+3,0
+3,1
+a,0
+3,1
+b,0
+2,1
+5,0
+1
+0
+2,1
+b,0
+3,1
+c,0
+1
+2,0
+3,1
+b,0
+3,1
+c,0
+2,1
+0
+3,1
+b,0
+3,1
+c,0
+2,1
+2,0
+1
+2,0
+2,1
+c,0
+3,1
+c,0
+1
+2,0
+2,1
+9,0
+9,1
+a,0
+1
+0
+2,1
+9,0
+9,1
+a,0
+1
+2,0
+1
+1c86,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+3b8,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+32,0
+2,1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+4,0
+2,1
+2,0
+2,1
+c,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+c,0
+2,1
+5,0
+3,1
+6,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+58,0
+d,1
+10,0
+5,1
+4,0
+2,1
+e,0
+2,1
+2c,0
+3,1
+2,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+3,0
+2,1
+e,0
+2,1
+31,0
+2,1
+3,0
+2,1
+15,0
+2,1
+4,0
+2,1
+e,0
+2,1
+30,0
+2,1
+3,0
+2,1
+15,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+11,0
+5,1
+3,0
+4,1
+c,0
+4,1
+ad,0
+2,1
+63,0
+2,1
+2cb,0
+2,1
+5b,0
+5,1
+3,0
+2,1
+5,0
+2,1
+53,0
+5,1
+4,0
+2,1
+4,0
+2,1
+c6,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+394,0
+1
+4,0
+1
+5e,0
+6,1
+a,0
+2,1
+0
+3,1
+3,0
+2,1
+0
+3,1
+13,0
+2,1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+0
+3,1
+2,0
+3,1
+2,0
+2,1
+0
+3,1
+12,0
+4,1
+b,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+20,0
+2,1
+3,0
+2,1
+7,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+28,0
+2,1
+0
+5,1
+0
+2,1
+0
+5,1
+11,0
+2,1
+0
+a,1
+0
+2,1
+0
+a,1
+27,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1f,0
+8,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1f,0
+8,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3bc,0
+3,1
+60,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+3,1
+57,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+57,0
+3,1
+152,0
+8,1
+5c,0
+8,1
+1d1,0
+2,1
+62,0
+2,1
+2e5,0
+100 90 32
+3c1,0
+1
+43,0
+3,1
+5,0
+3,1
+7,0
+2,1
+3,0
+3,1
+4,0
+5,1
+3,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+3,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+2,1
+5,0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+2,1
+6,0
+1
+0
+1
+8,0
+2,1
+2,0
+3,1
+6,0
+1
+0
+2,1
+2,0
+9,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2a,0
+2,1
+5,0
+3,1
+9,0
+2,1
+9,0
+5,1
+4,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2d,0
+2,1
+0
+5,1
+8,0
+2,1
+8,0
+4,1
+6,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2e,0
+3,1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+6,0
+9,1
+9,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+3a,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2d,0
+3,1
+0
+4,1
+4,0
+3,1
+3,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+2,1
+9,0
+2,1
+49,0
+1
+396,0
+1
+3e,0
+2,1
+21,0
+1
+0
+1
+0
+1
+4,0
+2,1
+2,0
+2,1
+32,0
+2,1
+22,0
+3,1
+4,0
+2,1
+4,0
+2,1
+32,0
+2,1
+19,0
+2,1
+6,0
+3,1
+4,0
+2,1
+4,0
+2,1
+32,0
+2,1
+19,0
+2,1
+5,0
+1
+0
+1
+0
+1
+2,0
+2,1
+6,0
+2,1
+32,0
+2,1
+18,0
+2,1
+7,0
+1
+4,0
+2,1
+6,0
+2,1
+32,0
+2,1
+8,0
+6,1
+7,0
+8,1
+9,0
+2,1
+6,0
+2,1
+33,0
+2,1
+7,0
+6,1
+7,0
+8,1
+9,0
+2,1
+6,0
+2,1
+33,0
+2,1
+17,0
+2,1
+c,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+b,0
+2,1
+5,0
+2,1
+c,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+b,0
+2,1
+5,0
+2,1
+d,0
+2,1
+4,0
+2,1
+46,0
+1
+15,0
+2,1
+4,0
+2,1
+46,0
+1
+16,0
+2,1
+2,0
+2,1
+48,0
+1
+2f7,0
+7,1
+3,0
+4,1
+4,0
+6,1
+4,0
+2,1
+7,0
+5,1
+4,0
+5,1
+4,0
+2,1
+8,0
+3,1
+20,0
+2,1
+7,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+3,1
+6,0
+2,1
+0
+2,1
+20,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+4,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+2,1
+20,0
+2,1
+a,0
+2,1
+3,0
+6,1
+3,0
+2,1
+0
+1
+4,0
+2,1
+7,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+20,0
+2,1
+6,0
+6,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+2,1
+21,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+21,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+a,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+22,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+22,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+23,0
+2,1
+4,0
+5,1
+4,0
+5,1
+4,0
+2,1
+7,0
+5,1
+3,0
+7,1
+3,0
+2,1
+8,0
+3,1
+417,0
+4,1
+7,0
+2,1
+a,0
+2,1
+f,0
+5,1
+4,0
+5,1
+2d,0
+2,1
+2,0
+2,1
+5,0
+2,1
+c,0
+2,1
+d,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+2,0
+2,1
+4,0
+2,1
+e,0
+2,1
+c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+7,0
+2,1
+10,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2d,0
+2,1
+5,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+5,1
+2f,0
+2,1
+4,0
+2,1
+6,0
+5,1
+7,0
+2,1
+a,0
+6,1
+3,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+5,0
+2,1
+10,0
+2,1
+b,0
+2,1
+7,0
+2,1
+3,0
+2,1
+36,0
+2,1
+4,0
+5,1
+5,0
+2,1
+c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+7,0
+2,1
+3,0
+5,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+8,0
+2,1
+a,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+4,1
+4,0
+5,1
+4d,0
+1
+63,0
+1
+64,0
+1
+2d7,0
+100 90 32
+3ff,0
+6,1
+3,0
+7,1
+0
+7,1
+3,0
+6,1
+2,0
+5,1
+5,0
+5,1
+4,0
+2,1
+6,0
+8,1
+1d,0
+2,1
+4,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+22,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+22,0
+2,1
+2,0
+6,1
+2,0
+6,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+6,1
+3,0
+1
+2,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+1b,0
+4,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+1b,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+6,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+1b,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+1b,0
+3,1
+3,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+1
+8,0
+2,1
+1c,0
+2,1
+0
+4,1
+8,0
+2,1
+0
+7,1
+3,0
+6,1
+2,0
+5,1
+4,0
+6,1
+0
+2,1
+4,0
+2,1
+2,0
+9,1
+410,0
+5,1
+3,0
+2,1
+4,0
+2,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+24,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+3,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+5,0
+4,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+3,1
+0
+2,1
+5,0
+2,1
+0
+8,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+4,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+24,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+25,0
+5,1
+3,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+6,1
+0
+2,1
+4,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+401,0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+8,1
+2,0
+5,1
+3,0
+7,1
+3,0
+5,1
+4,0
+6,1
+19,0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+7,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+5,1
+3,0
+7,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+1b,0
+1
+0
+5,1
+0
+1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+4,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+6,1
+1b,0
+4,1
+0
+4,1
+5,0
+1
+2,0
+1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+2,1
+1b,0
+3,1
+3,0
+3,1
+5,0
+4,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+3,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+7,0
+2,1
+1c,0
+2,1
+3,0
+2,1
+7,0
+2,1
+6,0
+4,1
+6,0
+2,1
+5,0
+5,1
+2,0
+2,1
+4,0
+2,1
+2,0
+6,1
+8,0
+2,1
+53,0
+2,1
+3c7,0
+5,1
+6,0
+2,1
+2,0
+5,1
+2,0
+8,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2e,0
+2,1
+4,0
+2,1
+9,0
+2,1
+5,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+26,0
+2,1
+5,0
+4,1
+3,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+28,0
+2,1
+3,0
+6,1
+2,0
+2,1
+8,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+4,1
+24,0
+8,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+6,0
+4,1
+6,0
+2,1
+25,0
+8,1
+4,0
+2,1
+4,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+7,0
+2,1
+7,0
+2,1
+2a,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+4,1
+28,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+7,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+4,0
+2,1
+5,0
+2,1
+9,0
+2,1
+8,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+34,0
+2,1
+5,0
+2,1
+9,0
+2,1
+2,0
+8,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+34,0
+2,1
+10,0
+2,1
+50,0
+2,1
+10,0
+2,1
+50,0
+5,1
+a,0
+5,1
+2dc,0
+100 90 32
+417,0
+3,1
+b,0
+2,1
+13,0
+2,1
+9,0
+2,1
+36,0
+2,1
+a,0
+2,1
+13,0
+2,1
+a,0
+2,1
+35,0
+2,1
+a,0
+2,1
+13,0
+2,1
+a,0
+2,1
+2b,0
+6,1
+2,0
+5,1
+2,0
+5,1
+2,0
+6,1
+3,0
+5,1
+3,0
+6,1
+3,0
+4,1
+2,0
+3,1
+2b,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+2b,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+33,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+7,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+5,1
+30,0
+2,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2f,0
+6,1
+4,0
+2,1
+3,0
+5,1
+2,0
+6,1
+3,0
+5,1
+3,0
+6,1
+0
+2,1
+0
+3,1
+30,0
+2,1
+62,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+339,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+4a,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+4a,0
+2,1
+6,0
+2,1
+e,0
+2,1
+30,0
+5,1
+3,0
+6,1
+2,0
+3,1
+0
+5,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+6,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+30,0
+5,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+55,0
+2,1
+63,0
+3,1
+3d3,0
+2,1
+62,0
+2,1
+43,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+5,1
+2,0
+4,1
+2,0
+5,1
+0
+6,1
+3,0
+6,1
+25,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+26,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+5,0
+3,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+26,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+4,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+26,0
+4,1
+0
+4,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+27,0
+2,1
+3,0
+2,1
+5,0
+4,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+27,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+6,1
+2,0
+3,1
+4,0
+4,1
+5,0
+2,1
+0
+6,1
+3,0
+6,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+281,0
+3,1
+60,0
+2,1
+0
+2,1
+10,0
+3,1
+2,0
+2,1
+3,0
+3,1
+41,0
+2,1
+3,0
+2,1
+e,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+6,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+30,0
+2,1
+2,0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+31,0
+6,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+4,1
+33,0
+2,1
+2,0
+2,1
+2,0
+3,1
+5,0
+2,1
+6,0
+3,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+3e,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+1
+4,0
+4,1
+3d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+2,0
+4,1
+3,0
+2,1
+2,0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+6,1
+3,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+d,0
+2,1
+46,0
+2,1
+4,0
+2,1
+5,0
+2,1
+d,0
+2,1
+0
+2,1
+44,0
+3,1
+2,0
+2,1
+3,0
+3,1
+f,0
+3,1
+2c8,0
+100 90 32
+3c6,0
+2,1
+51,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+b,0
+4,1
+37,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+18,0
+2,1
+2,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+7,0
+2,1
+36,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+7,0
+2,1
+37,0
+2,1
+7,0
+2,1
+3,0
+2,1
+1a,0
+2,1
+38,0
+2,1
+5,0
+a,1
+10,0
+5,1
+4,0
+2,1
+41,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+3d,0
+2,1
+7,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+3,0
+2,1
+38,0
+2,1
+5,0
+3,1
+2,0
+3,1
+16,0
+2,1
+3,0
+2,1
+5d,0
+2,1
+5d,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+2c1,0
+2,1
+34,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+11,0
+5,1
+3,0
+2,1
+35,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+3,1
+12,0
+5,1
+2,0
+2,1
+36,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+0
+a,1
+5c,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+0
+3,1
+2,0
+3,1
+3d1,0
+4,1
+5f,0
+6,1
+a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+26,0
+1
+4,0
+1
+a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1a,0
+8,1
+b,0
+8,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+1a,0
+8,1
+b,0
+8,1
+0
+2,1
+0
+5,1
+0
+2,1
+0
+15,1
+0
+2,1
+0
+a,1
+35,0
+2,1
+3,0
+2,1
+7,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+36,0
+2,1
+0
+3,1
+3,0
+2,1
+0
+3,1
+13,0
+2,1
+0
+3,1
+2,0
+3,1
+3ce,0
+3,1
+56,0
+2,1
+8,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+4c,0
+2,1
+8,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+3,1
+58,0
+3,1
+56,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+df,0
+2,1
+62,0
+2,1
+2cc,0
+100 90 32
+3cc,0
+1
+39,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+3,1
+0
+4,1
+4,0
+3,1
+3,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+22,0
+2,1
+4,0
+2,1
+3,0
+2,1
+3,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+22,0
+2,1
+4,0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+21,0
+2,1
+6,0
+2,1
+2,0
+3,1
+2,0
+3,1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+6,0
+9,1
+2,0
+2,1
+0
+2,1
+21,0
+2,1
+6,0
+2,1
+2,0
+3,1
+0
+2,1
+0
+5,1
+8,0
+2,1
+8,0
+4,1
+6,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+a,0
+3,1
+9,0
+2,1
+9,0
+5,1
+4,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+a,0
+1
+0
+1
+8,0
+2,1
+2,0
+3,1
+6,0
+1
+0
+2,1
+2,0
+9,1
+29,0
+2,1
+6,0
+2,1
+9,0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+9,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+4,0
+2,1
+b,0
+3,1
+7,0
+2,1
+3,0
+3,1
+4,0
+5,1
+3,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+4,0
+2,1
+23,0
+1
+39,0
+2,1
+2,0
+2,1
+358,0
+1
+2d,0
+2,1
+8,0
+3,1
+8,0
+2,1
+1d,0
+1
+0
+1
+0
+1
+2b,0
+2,1
+7,0
+2,1
+0
+2,1
+7,0
+2,1
+1e,0
+3,1
+2c,0
+2,1
+6,0
+2,1
+3,0
+2,1
+5,0
+2,1
+17,0
+2,1
+6,0
+3,1
+2c,0
+2,1
+6,0
+2,1
+3,0
+2,1
+5,0
+2,1
+17,0
+2,1
+5,0
+1
+0
+1
+0
+1
+2b,0
+2,1
+6,0
+2,1
+3,0
+2,1
+4,0
+2,1
+18,0
+2,1
+7,0
+1
+2d,0
+2,1
+6,0
+2,1
+3,0
+2,1
+4,0
+2,1
+8,0
+6,1
+7,0
+8,1
+32,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+9,0
+6,1
+7,0
+8,1
+32,0
+5,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+19,0
+2,1
+35,0
+3,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+c,0
+1
+5,0
+2,1
+35,0
+2,1
+8,0
+3,1
+4,0
+2,1
+6,0
+2,1
+b,0
+1
+6,0
+2,1
+5b,0
+1
+63,0
+2,1
+62,0
+2,1
+2ed,0
+4,1
+4,0
+5,1
+7,0
+2,1
+4,0
+5,1
+4,0
+5,1
+4,0
+2,1
+7,0
+5,1
+3,0
+7,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+7,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+7,0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+a,0
+2,1
+20,0
+6,1
+3,0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+21,0
+2,1
+3,0
+2,1
+3,0
+5,1
+5,0
+2,1
+6,0
+6,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+6,0
+2,1
+22,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+2,1
+a,0
+2,1
+3,0
+6,1
+3,0
+2,1
+0
+1
+4,0
+2,1
+7,0
+2,1
+23,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+4,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+1f,0
+5,1
+4,0
+5,1
+3,0
+7,1
+3,0
+4,1
+4,0
+6,1
+4,0
+2,1
+7,0
+5,1
+4,0
+5,1
+410,0
+2,1
+4,0
+2,1
+2,0
+9,1
+6,0
+2,1
+8,0
+2,1
+a,0
+2,1
+33,0
+2,1
+4,0
+2,1
+0
+1
+8,0
+2,1
+5,0
+2,1
+7,0
+2,1
+c,0
+2,1
+33,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+c,0
+2,1
+e,0
+2,1
+32,0
+6,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+5,0
+2,1
+10,0
+2,1
+4,0
+1
+2,0
+2,1
+28,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+1
+3,0
+2,1
+29,0
+1
+2,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+5,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+1
+2e,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+7,0
+2,1
+10,0
+2,1
+3,0
+2,1
+2d,0
+4,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+5,1
+5,0
+2,1
+4,0
+2,1
+2e,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+5,1
+4,0
+2,1
+9,0
+2,1
+2a,0
+2,1
+6,0
+8,1
+5,0
+4,1
+7,0
+2,1
+a,0
+2,1
+a,0
+2,1
+c2,0
+2,1
+62,0
+2,1
+2c5,0
+100 90 32
+409,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+4,1
+8,0
+2,1
+0
+7,1
+3,0
+6,1
+2,0
+5,1
+4,0
+6,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+3,1
+3,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+4,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+25,0
+2,1
+0
+8,1
+8,0
+2,1
+2,0
+6,1
+2,0
+6,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+6,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+6,1
+3,0
+7,1
+0
+7,1
+3,0
+6,1
+2,0
+5,1
+5,0
+5,1
+405,0
+2,1
+d,0
+2,1
+3,0
+5,1
+3,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+6,1
+0
+2,1
+4,0
+2,1
+2,0
+4,1
+1f,0
+6,1
+8,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+1e,0
+3,1
+2,0
+2,1
+7,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1d,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+21,0
+2,1
+5,0
+2,1
+2,0
+6,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+4,1
+0
+2,1
+21,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+3,1
+0
+2,1
+21,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+5,0
+4,1
+0
+2,1
+21,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+21,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+3,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+22,0
+2,1
+3,0
+2,1
+3,0
+6,1
+3,0
+5,1
+3,0
+2,1
+4,0
+2,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+23,0
+5,1
+3e0,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+7,0
+2,1
+6,0
+4,1
+6,0
+2,1
+5,0
+5,1
+2,0
+2,1
+4,0
+2,1
+1c,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+1c,0
+2,1
+5,0
+2,1
+2,0
+2,1
+4,0
+3,1
+3,0
+3,1
+5,0
+4,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+1c,0
+2,1
+6,0
+4,1
+5,0
+4,1
+0
+4,1
+5,0
+1
+2,0
+1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+1c,0
+2,1
+7,0
+2,1
+6,0
+1
+0
+5,1
+0
+1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+4,1
+4,0
+2,1
+4,0
+2,1
+1b,0
+4,1
+6,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+5,1
+3,0
+7,1
+1a,0
+2,1
+2,0
+2,1
+4,0
+4,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+7,0
+4,1
+0
+2,1
+4,0
+2,1
+1a,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+19,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+19,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+8,1
+2,0
+5,1
+3,0
+7,1
+418,0
+3,1
+13,0
+5,1
+2,0
+2,1
+6,0
+5,1
+2,0
+8,1
+30,0
+3,1
+d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+9,0
+2,1
+8,0
+2,1
+31,0
+2,1
+5,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+7,0
+2,1
+29,0
+2,1
+0
+3,1
+3,0
+2,1
+6,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+8,1
+4,0
+2,1
+4,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2c,0
+2,1
+2,0
+2,1
+5,0
+8,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2c,0
+5,1
+b,0
+2,1
+3,0
+6,1
+2,0
+2,1
+8,0
+2,1
+6,0
+2,1
+4,0
+2,1
+2d,0
+2,1
+d,0
+2,1
+5,0
+4,1
+3,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+11,0
+2,1
+4,0
+2,1
+9,0
+2,1
+5,0
+2,1
+2,0
+2,1
+30,0
+4,1
+18,0
+2,1
+9,0
+2,1
+5,0
+2,1
+2,0
+8,1
+46,0
+2,1
+10,0
+2,1
+50,0
+2,1
+10,0
+2,1
+50,0
+5,1
+a,0
+5,1
+2ca,0
+100 90 32
+410,0
+2,1
+0
+2,1
+3,0
+2,1
+b,0
+2,1
+a,0
+6,1
+b,0
+6,1
+2c,0
+2,1
+0
+2,1
+3,0
+2,1
+b,0
+2,1
+a,0
+2,1
+3,0
+2,1
+9,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+0
+2,1
+3,0
+2,1
+b,0
+2,1
+a,0
+2,1
+3,0
+2,1
+9,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+5,1
+4,0
+2,1
+3,0
+5,1
+2,0
+2,1
+3,0
+2,1
+2,0
+5,1
+2,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2c,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+8,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2c,0
+2,1
+2,0
+6,1
+0
+6,1
+2,0
+5,1
+0
+7,1
+0
+6,1
+7,0
+2,1
+2,0
+6,1
+34,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+b,0
+2,1
+6,0
+2,1
+2c,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+2c,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+3,1
+4,0
+5,1
+2,0
+2,1
+7,0
+5,1
+7,0
+2,1
+37,0
+2,1
+3,0
+2,1
+5d,0
+2,1
+3,0
+2,1
+5d,0
+6,1
+338,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+3,1
+55,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+57,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+2c,0
+2,1
+b,0
+2,1
+2,0
+5,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+2,1
+2c,0
+2,1
+b,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+2,1
+2c,0
+2,1
+b,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+2c,0
+6,1
+3,0
+6,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2c,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+0
+2,1
+2c,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+0
+2,1
+2c,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+5,1
+3,0
+6,1
+2,0
+3,1
+0
+5,1
+0
+2,1
+6,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+27,0
+2,1
+2c,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+27,0
+2,1
+2c,0
+6,1
+3,0
+6,1
+39d,0
+3,1
+63,0
+2,1
+37,0
+3,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+6,1
+4,0
+2,1
+3,0
+4,1
+5,0
+2,1
+28,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+5,0
+4,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+28,0
+2,1
+5,0
+4,1
+3,0
+4,1
+0
+4,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+7,0
+2,1
+28,0
+2,1
+6,0
+2,1
+4,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+4,1
+5,0
+2,1
+27,0
+4,1
+4,0
+4,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+5,1
+4,0
+3,1
+4,0
+2,1
+27,0
+2,1
+0
+1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+27,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+4,1
+2,0
+5,1
+26,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+3,0
+2,1
+5d,0
+2,1
+3,0
+2,1
+2c5,0
+2,1
+3,0
+2,1
+58,0
+2,1
+4,0
+2,1
+0
+2,1
+10,0
+3,1
+2,0
+2,1
+3,0
+3,1
+3c,0
+2,1
+5,0
+3,1
+10,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+32,0
+5,1
+4,0
+2,1
+18,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+6,1
+27,0
+2,1
+3,0
+2,1
+3,0
+2,1
+e,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+27,0
+2,1
+7,0
+2,1
+e,0
+6,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+28,0
+2,1
+6,0
+2,1
+e,0
+2,1
+2,0
+2,1
+4,0
+3,1
+5,0
+2,1
+6,0
+3,1
+4,0
+2,1
+29,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+16,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2a,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+16,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2c,0
+5,1
+3,0
+4,1
+17,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+6,1
+4b,0
+2,1
+4,0
+2,1
+5,0
+2,1
+34,0
+2,1
+1f,0
+2,1
+4,0
+2,1
+5,0
+2,1
+33,0
+2,1
+21,0
+3,1
+2,0
+2,1
+3,0
+3,1
+2cb,0
+100 90 32
+2328,0
+100 90 32
+4b1,0
+4,1
+60,0
+6,1
+5e,0
+2,1
+3,0
+2,1
+5d,0
+2,1
+4,0
+2,1
+5c,0
+2,1
+5,0
+2,1
+5b,0
+2,1
+6,0
+1
+5b,0
+2,1
+6,0
+1
+5b,0
+2,1
+5,0
+1
+5c,0
+2,1
+4,0
+1
+5d,0
+2,1
+3,0
+1
+5e,0
+5,1
+1a8a,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+461,0
+2,1
+0
+2,1
+2,0
+4,1
+4,0
+3,1
+3,0
+2,1
+4d,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+4,1
+3c,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+3,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3b,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+36,0
+2,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+3,1
+3,0
+4,1
+4,0
+4,1
+36,0
+4,1
+2,0
+2,1
+2,0
+2,1
+57,0
+6,1
+0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+4,1
+3,0
+3,1
+4,0
+4,1
+3c,0
+4,1
+4,0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+1
+3,0
+2,1
+3f,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+3,1
+4,0
+3,1
+4,0
+3,1
+43,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+1
+3,0
+2,1
+4e,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+1
+3,0
+2,1
+36d,0
+2,1
+13,0
+2,1
+5,0
+2,1
+36,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+5,0
+2,1
+31,0
+2,1
+3,0
+3,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+5,0
+2,1
+31,0
+2,1
+3,0
+6,1
+2,0
+1
+2,0
+1
+4,0
+2,1
+13,0
+2,1
+5,0
+2,1
+2f,0
+6,1
+0
+2,1
+0
+3,1
+2,0
+4,1
+4,0
+2,1
+13,0
+2,1
+5,0
+2,1
+2f,0
+6,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+13,0
+2,1
+5,0
+2,1
+31,0
+2,1
+11,0
+4,1
+3,0
+4,1
+5,0
+5,1
+2,0
+c,1
+2e,0
+2,1
+5,0
+2,1
+5,0
+4,1
+0
+4,1
+3,0
+4,1
+5,0
+5,1
+2,0
+c,1
+35,0
+2,1
+6,0
+2,1
+b,0
+2,1
+5,0
+2,1
+c,0
+2,1
+2f,0
+6,1
+3,0
+2,1
+6,0
+2,1
+b,0
+2,1
+5,0
+2,1
+c,0
+2,1
+2f,0
+6,1
+3,0
+2,1
+6,0
+2,1
+b,0
+2,1
+5,0
+2,1
+c,0
+2,1
+38,0
+4,1
+4,0
+2,1
+b,0
+2,1
+5,0
+2,1
+c,0
+2,1
+4d,0
+2,1
+5,0
+2,1
+c,0
+2,1
+310,0
+2,1
+5,0
+2,1
+5,0
+2,1
+54,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2f,0
+7,1
+1e,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2f,0
+7,1
+1e,0
+2,1
+5,0
+2,1
+5,0
+2,1
+36,0
+7,1
+17,0
+2,1
+5,0
+2,1
+5,0
+2,1
+36,0
+7,1
+17,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3d,0
+7,1
+10,0
+9,1
+3,0
+7,1
+3a,0
+7,1
+10,0
+9,1
+3,0
+7,1
+41,0
+7,1
+9,0
+2,1
+5,0
+2,1
+4b,0
+7,1
+9,0
+2,1
+5,0
+2,1
+52,0
+7,1
+2,0
+2,1
+5,0
+2,1
+52,0
+7,1
+2,0
+2,1
+5,0
+2,1
+5b,0
+2,1
+5,0
+2,1
+2fb,0
+2,1
+62,0
+2,1
+62,0
+2,1
+7,0
+2,1
+0
+2,1
+11,0
+1
+3,0
+3,1
+3e,0
+2,1
+6,0
+2,1
+3,0
+2,1
+f,0
+2,1
+2,0
+2,1
+0
+2,1
+3d,0
+2,1
+4,0
+2,1
+7,0
+2,1
+9,0
+6,1
+2,0
+2,1
+40,0
+2,1
+3,0
+2,1
+9,0
+2,1
+0
+6,1
+0
+6,1
+2,0
+2,1
+37,0
+7,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+4,1
+5,0
+2,1
+2f,0
+7,1
+2,0
+2,1
+6,0
+2,1
+3,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+6,1
+2,0
+2,1
+6,0
+2,1
+31,0
+2,1
+5,0
+2,1
+7,0
+2,1
+0
+2,1
+6,0
+2,1
+0
+2,1
+0
+6,1
+2,0
+2,1
+39,0
+2,1
+5,0
+2,1
+3,0
+6,1
+0
+6,1
+0
+3,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+2,1
+36,0
+2,1
+5,0
+2,1
+3,0
+6,1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+1
+6,0
+1
+0
+3,1
+37,0
+2,1
+5,0
+2,1
+5b,0
+2,1
+5,0
+2,1
+315,0
+100 90 32
+4b9,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+0
+1
+4,0
+2,1
+3,0
+3,1
+2,0
+1
+2,0
+3,1
+5,0
+3,1
+37,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+0
+1
+3,0
+4,1
+2,0
+1
+0
+1
+0
+2,1
+0
+2,1
+0
+2,1
+4,0
+3,1
+37,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+5,1
+0
+1
+0
+2,1
+0
+1
+0
+3,1
+0
+1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+38,0
+2,1
+b,0
+5,1
+0
+1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+39,0
+2,1
+c,0
+1
+0
+1
+3,0
+4,1
+4,0
+2,1
+4,0
+3,1
+3f,0
+2,1
+b,0
+5,1
+3,0
+2,1
+0
+1
+2,0
+2,1
+4,0
+2,1
+0
+1
+0
+1
+4a,0
+5,1
+0
+1
+0
+2,1
+0
+1
+2,0
+1
+0
+3,1
+0
+2,1
+0
+3,1
+3d,0
+2,1
+c,0
+1
+0
+1
+3,0
+4,1
+2,0
+2,1
+0
+1
+0
+1
+0
+2,1
+0
+2,1
+3e,0
+2,1
+c,0
+1
+0
+1
+4,0
+2,1
+3,0
+1
+2,0
+3,1
+2,0
+3,1
+0
+1
+483,0
+2,1
+3,0
+2,1
+2b,0
+2,1
+2f,0
+2,1
+5,0
+2,1
+2a,0
+2,1
+2f,0
+2,1
+5,0
+2,1
+4,0
+1
+2,0
+1
+4,0
+2,1
+1b,0
+2,1
+2f,0
+2,1
+7,0
+2,1
+4,0
+2,1
+5,0
+2,1
+1b,0
+2,1
+2f,0
+2,1
+7,0
+2,1
+2,0
+6,1
+0
+6,1
+8,0
+6,1
+a,0
+2,1
+30,0
+2,1
+7,0
+2,1
+2,0
+6,1
+0
+6,1
+8,0
+6,1
+9,0
+2,1
+32,0
+2,1
+5,0
+2,1
+5,0
+2,1
+5,0
+2,1
+5,0
+3,1
+11,0
+2,1
+32,0
+2,1
+5,0
+2,1
+4,0
+1
+2,0
+1
+4,0
+2,1
+5,0
+3,1
+b,0
+2,1
+3,0
+2,1
+34,0
+2,1
+3,0
+2,1
+14,0
+2,1
+b,0
+4,1
+2,0
+2,1
+4e,0
+2,1
+d,0
+2,1
+420,0
+2,1
+5,0
+2,1
+4,0
+4,1
+3,0
+4,1
+6,0
+2,1
+0
+6,1
+2,0
+4,1
+2,0
+6,1
+2e,0
+1
+2,0
+1
+3,0
+3,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+3,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+4,1
+0
+2,1
+5,0
+2,1
+9,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+5,1
+2,0
+2,1
+8,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+4,0
+3,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+5,1
+5,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+2,1
+8,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+9,0
+2,1
+0
+6,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+30,0
+1
+2,0
+1
+4,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+32,0
+2,1
+3,0
+6,1
+0
+6,1
+2,0
+4,1
+6,0
+2,1
+2,0
+4,1
+3,0
+4,1
+3,0
+2,1
+47d,0
+4,1
+3,0
+4,1
+14,0
+2,1
+8,0
+2,1
+6,0
+4,1
+2e,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+12,0
+2,1
+a,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+6,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+3,0
+4,1
+3,0
+2,1
+4,0
+6,1
+4,0
+2,1
+6,0
+2,1
+2e,0
+4,1
+3,0
+5,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+3,1
+2e,0
+2,1
+2,0
+2,1
+5,0
+2,1
+10,0
+2,1
+4,0
+6,1
+4,0
+2,1
+4,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+5,0
+2,1
+a,0
+3,1
+4,0
+2,1
+3,0
+6,1
+3,0
+2,1
+36,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+5,0
+2,1
+a,0
+2,1
+6,0
+2,1
+30,0
+4,1
+3,0
+4,1
+3,0
+4,1
+4,0
+2,1
+7,0
+2,1
+8,0
+2,1
+7,0
+2,1
+3f,0
+2,1
+4,0
+2,1
+36c,0
+100 90 32
+4b1,0
+4,1
+3,0
+4,1
+2,0
+5,1
+3,0
+4,1
+2,0
+5,1
+2,0
+6,1
+0
+6,1
+2,0
+4,1
+2e,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2d,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+2,1
+31,0
+1
+0
+4,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+2,1
+31,0
+1
+0
+1
+0
+2,1
+0
+6,1
+0
+5,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+5,1
+2,0
+2,1
+0
+3,1
+2d,0
+1
+0
+4,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2d,0
+1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2d,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2e,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+4,1
+2,0
+5,1
+2,0
+6,1
+0
+2,1
+6,0
+5,1
+479,0
+2,1
+2,0
+2,1
+0
+6,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+0
+2,1
+5,0
+1
+4,0
+1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+2e,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+6,1
+0
+3,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+3,0
+2,1
+5,0
+6,1
+0
+3,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+6,1
+3,0
+2,1
+7,0
+2,1
+0
+3,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+6,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+3,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+6,1
+2,0
+4,1
+2,0
+2,1
+3,0
+1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+47a,0
+5,1
+3,0
+4,1
+2,0
+5,1
+3,0
+4,1
+2,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+1
+2,0
+1
+2,0
+2,1
+2,0
+2,1
+2d,0
+5,1
+2,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+4,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+1
+2,0
+1
+2,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+4,1
+7,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+2d,0
+2,1
+5,0
+3,1
+0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+6,1
+2d,0
+2,1
+5,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+6,0
+4,1
+2,0
+2,1
+3,0
+1
+2,0
+4,1
+4,0
+2,1
+4,0
+4,1
+4,0
+2,1
+3,0
+1
+4,0
+1
+38,0
+2,1
+43f,0
+1
+4,0
+1
+0
+2,1
+2,0
+2,1
+0
+6,1
+2,0
+4,1
+2,0
+2,1
+6,0
+4,1
+4,0
+2,1
+36,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+4,0
+2,1
+8,0
+2,1
+3,0
+4,1
+36,0
+1
+2,0
+1
+3,0
+4,1
+6,0
+2,1
+2,0
+2,1
+5,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+35,0
+4,1
+3,0
+4,1
+5,0
+2,1
+3,0
+2,1
+5,0
+2,1
+7,0
+2,1
+2,0
+1
+4,0
+1
+36,0
+2,1
+5,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3d,0
+4,1
+4,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+5,0
+2,1
+3d,0
+1
+2,0
+1
+4,0
+2,1
+3,0
+2,1
+6,0
+2,1
+7,0
+2,1
+5,0
+2,1
+3c,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+8,0
+2,1
+4,0
+2,1
+3c,0
+1
+4,0
+1
+3,0
+2,1
+3,0
+6,1
+2,0
+4,1
+6,0
+2,1
+2,0
+4,1
+9,0
+6,1
+5e,0
+6,1
+34d,0
+100 90 32
+4b1,0
+3,1
+a,0
+2,1
+10,0
+2,1
+a,0
+3,1
+36,0
+3,1
+a,0
+2,1
+10,0
+2,1
+9,0
+2,1
+0
+2,1
+36,0
+2,1
+a,0
+2,1
+10,0
+2,1
+9,0
+2,1
+3a,0
+2,1
+3,0
+4,1
+2,0
+5,1
+3,0
+4,1
+3,0
+5,1
+2,0
+4,1
+3,0
+2,1
+5,0
+3,1
+0
+1
+38,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+4,1
+3,0
+2,1
+2,0
+2,1
+35,0
+5,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+6,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+34,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+5,0
+4,1
+35,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+39,0
+5,1
+0
+5,1
+3,0
+4,1
+3,0
+5,1
+2,0
+4,1
+3,0
+2,1
+5,0
+4,1
+5f,0
+2,1
+2,0
+2,1
+5f,0
+4,1
+3b2,0
+2,1
+7,0
+2,1
+7,0
+2,1
+0
+2,1
+6,0
+3,1
+44,0
+2,1
+7,0
+2,1
+7,0
+2,1
+0
+2,1
+7,0
+2,1
+44,0
+2,1
+13,0
+2,1
+7,0
+2,1
+44,0
+5,1
+3,0
+3,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+5,1
+3,0
+4,1
+2e,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+6,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+3c,0
+2,1
+2,0
+2,1
+5f,0
+4,1
+455,0
+2,1
+62,0
+2,1
+46,0
+5,1
+3,0
+5,1
+0
+5,1
+3,0
+4,1
+2,0
+4,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+8,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+2d,0
+5,1
+3,0
+5,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+2d,0
+2,1
+9,0
+2,1
+0
+2,1
+6,0
+4,1
+3,0
+4,1
+3,0
+5,1
+3,0
+2,1
+4,0
+1
+2,0
+1
+2e,0
+2,1
+9,0
+2,1
+57,0
+2,1
+9,0
+2,1
+345,0
+1
+0
+1
+0
+1
+60,0
+1
+0
+1
+45,0
+3,1
+4,0
+2,1
+4,0
+3,1
+4,0
+2,1
+2,0
+1
+2,0
+1
+0
+1
+0
+1
+43,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+6,1
+3,0
+1
+0
+1
+44,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+0
+1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+6,1
+3,0
+2,1
+5,0
+2,1
+5,0
+2,1
+c,0
+1
+0
+1
+2e,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+1
+0
+1
+0
+1
+2e,0
+4,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+c,0
+1
+0
+1
+2f,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+1
+0
+1
+0
+1
+2d,0
+2,1
+2,0
+2,1
+2,0
+5,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+1
+0
+1
+2e,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+6,1
+3,0
+3,1
+4,0
+2,1
+4,0
+3,1
+b,0
+1
+0
+1
+0
+1
+34,0
+2,1
+2,0
+2,1
+26,0
+1
+0
+1
+36,0
+4,1
+26,0
+1
+0
+1
+0
+1
+2e9,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+38d,0
+2,1
+3,0
+2,1
+1a,0
+2,1
+3b,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+c,0
+2,1
+2,0
+2,1
+4,0
+2,1
+3,0
+3,1
+2,0
+3,1
+0
+2,1
+2c,0
+2,1
+6,0
+3,1
+5,0
+2,1
+c,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+59,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+e,0
+2,1
+4,0
+5,1
+10,0
+d,1
+2c,0
+2,1
+e,0
+2,1
+3,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+2,0
+3,1
+2b,0
+2,1
+e,0
+2,1
+4,0
+2,1
+15,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+e,0
+2,1
+5,0
+2,1
+15,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+30,0
+4,1
+c,0
+4,1
+3,0
+5,1
+11,0
+2,1
+3,0
+2,1
+ad,0
+2,1
+61,0
+2,1
+2a9,0
+2,1
+5a,0
+2,1
+5,0
+2,1
+3,0
+5,1
+53,0
+2,1
+4,0
+2,1
+4,0
+5,1
+b7,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+434,0
+1
+4,0
+1
+11,0
+3,1
+0
+2,1
+2,0
+3,1
+2,0
+3,1
+0
+2,1
+3,0
+3,1
+2,0
+3,1
+0
+2,1
+13,0
+3,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+a,0
+6,1
+10,0
+2,1
+0
+3,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+b,0
+4,1
+19,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+7,0
+2,1
+3,0
+2,1
+27,0
+a,1
+0
+2,1
+0
+a,1
+0
+2,1
+11,0
+5,1
+0
+2,1
+0
+5,1
+0
+2,1
+28,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+8,1
+1f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+8,1
+1f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3d5,0
+3,1
+58,0
+3,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+56,0
+2,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+60,0
+3,1
+fb,0
+8,1
+5c,0
+8,1
+20d,0
+2,1
+62,0
+2,1
+2f9,0
+100 90 32
+3a6,0
+1
+49,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+5,1
+4,0
+3,1
+3,0
+2,1
+7,0
+3,1
+5,0
+3,1
+29,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+3,1
+29,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+5,0
+2,1
+29,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+9,1
+2,0
+2,1
+0
+1
+6,0
+3,1
+2,0
+2,1
+8,0
+1
+0
+1
+6,0
+2,1
+29,0
+2,1
+b,0
+2,1
+2,0
+2,1
+4,0
+5,1
+9,0
+2,1
+9,0
+3,1
+5,0
+2,1
+2a,0
+2,1
+b,0
+2,1
+2,0
+2,1
+6,0
+4,1
+8,0
+2,1
+8,0
+5,1
+0
+2,1
+2d,0
+2,1
+9,0
+9,1
+6,0
+1
+0
+2,1
+6,0
+2,1
+2,0
+3,1
+3,0
+2,1
+3,0
+3,1
+3a,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+6,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+9,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+2e,0
+2,1
+9,0
+2,1
+2,0
+2,1
+7,0
+5,1
+6,0
+2,1
+3,0
+3,1
+4,0
+4,1
+0
+3,1
+47,0
+1
+370,0
+1
+57,0
+2,1
+2,0
+2,1
+4,0
+1
+0
+1
+0
+1
+21,0
+2,1
+31,0
+2,1
+4,0
+2,1
+4,0
+3,1
+22,0
+2,1
+31,0
+2,1
+4,0
+2,1
+4,0
+3,1
+6,0
+2,1
+19,0
+2,1
+31,0
+2,1
+6,0
+2,1
+2,0
+1
+0
+1
+0
+1
+5,0
+2,1
+19,0
+2,1
+31,0
+2,1
+6,0
+2,1
+4,0
+1
+7,0
+2,1
+18,0
+2,1
+32,0
+2,1
+6,0
+2,1
+9,0
+8,1
+7,0
+6,1
+8,0
+2,1
+32,0
+2,1
+6,0
+2,1
+9,0
+8,1
+7,0
+6,1
+7,0
+2,1
+33,0
+2,1
+6,0
+2,1
+c,0
+2,1
+17,0
+2,1
+33,0
+2,1
+6,0
+2,1
+c,0
+2,1
+5,0
+2,1
+b,0
+2,1
+2,0
+2,1
+35,0
+2,1
+4,0
+2,1
+d,0
+2,1
+5,0
+2,1
+b,0
+2,1
+2,0
+2,1
+35,0
+2,1
+4,0
+2,1
+15,0
+1
+47,0
+2,1
+2,0
+2,1
+16,0
+1
+62,0
+1
+304,0
+3,1
+8,0
+2,1
+4,0
+5,1
+4,0
+5,1
+7,0
+2,1
+4,0
+6,1
+4,0
+4,1
+3,0
+7,1
+1f,0
+2,1
+0
+2,1
+6,0
+3,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+7,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+4,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+3,0
+2,1
+6,0
+2,1
+8,0
+2,1
+7,0
+2,1
+4,0
+1
+0
+2,1
+3,0
+6,1
+3,0
+2,1
+a,0
+2,1
+20,0
+2,1
+3,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+3,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+6,1
+6,0
+2,1
+20,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+2,1
+21,0
+2,1
+3,0
+2,1
+6,0
+2,1
+5,0
+2,1
+a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+2,1
+21,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+23,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+24,0
+3,1
+8,0
+2,1
+3,0
+7,1
+3,0
+5,1
+7,0
+2,1
+4,0
+5,1
+4,0
+5,1
+4,0
+2,1
+40b,0
+5,1
+4,0
+5,1
+f,0
+2,1
+a,0
+2,1
+7,0
+4,1
+2d,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+d,0
+2,1
+c,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+c,0
+2,1
+e,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+10,0
+2,1
+7,0
+2,1
+2d,0
+5,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+5,1
+6,0
+2,1
+5,0
+2,1
+2d,0
+2,1
+3,0
+2,1
+3,0
+6,1
+a,0
+2,1
+7,0
+5,1
+6,0
+2,1
+4,0
+2,1
+2e,0
+2,1
+3,0
+2,1
+7,0
+2,1
+b,0
+2,1
+10,0
+2,1
+5,0
+2,1
+2e,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+c,0
+2,1
+5,0
+5,1
+4,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+4,0
+5,1
+3,0
+2,1
+7,0
+2,1
+2f,0
+5,1
+4,0
+4,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+a,0
+2,1
+8,0
+2,1
+45,0
+1
+63,0
+1
+62,0
+1
+308,0
+100 90 32
+3eb,0
+8,1
+6,0
+2,1
+4,0
+5,1
+5,0
+5,1
+2,0
+6,1
+3,0
+7,1
+0
+7,1
+3,0
+6,1
+1d,0
+2,1
+6,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+6,0
+2,1
+7,0
+2,1
+4,0
+2,1
+1b,0
+2,1
+2,0
+4,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+22,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+1
+2,0
+1
+3,0
+6,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+0
+6,1
+2,0
+6,1
+2,0
+2,1
+22,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+7,0
+2,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+4,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+3,0
+6,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+1b,0
+2,1
+2,0
+3,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+1c,0
+2,1
+8,0
+1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+6,0
+2,1
+7,0
+2,1
+3,0
+3,1
+1d,0
+9,1
+2,0
+2,1
+4,0
+2,1
+0
+6,1
+4,0
+5,1
+2,0
+6,1
+3,0
+7,1
+0
+2,1
+8,0
+4,1
+0
+2,1
+402,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+3,1
+5,0
+3,1
+0
+2,1
+4,0
+2,1
+3,0
+5,1
+25,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+5,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+24,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+5,0
+4,1
+3,0
+4,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+23,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+4,1
+5,0
+2,1
+5,0
+4,1
+3,0
+4,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+23,0
+8,1
+0
+2,1
+5,0
+2,1
+0
+3,1
+6,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+23,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+4,1
+5,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+23,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+23,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+2,1
+5,0
+2,1
+23,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+4,1
+2,0
+2,1
+3,0
+2,1
+24,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+4,1
+2,0
+2,1
+4,0
+2,1
+0
+6,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+3,0
+3,1
+3,0
+5,1
+40d,0
+6,1
+4,0
+5,1
+3,0
+7,1
+3,0
+5,1
+2,0
+8,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+4,0
+2,1
+19,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+4,0
+2,1
+19,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+4,1
+7,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+3,1
+2,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+7,1
+3,0
+5,1
+5,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+3,1
+2,0
+2,1
+1a,0
+6,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+4,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+1
+0
+5,1
+0
+1
+1b,0
+2,1
+6,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+1
+2,0
+1
+5,0
+4,1
+0
+4,1
+1b,0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+4,1
+5,0
+3,1
+3,0
+3,1
+1b,0
+2,1
+7,0
+2,1
+2,0
+3,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+7,0
+2,1
+3,0
+2,1
+1c,0
+2,1
+8,0
+6,1
+2,0
+2,1
+4,0
+2,1
+2,0
+5,1
+5,0
+2,1
+6,0
+4,1
+6,0
+2,1
+7,0
+2,1
+3,0
+2,1
+2b,0
+2,1
+3d7,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+8,1
+2,0
+5,1
+2,0
+2,1
+6,0
+5,1
+34,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+5,0
+2,1
+9,0
+2,1
+4,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+7,0
+2,1
+3,0
+2,1
+6,0
+2,1
+8,0
+2,1
+3,0
+4,1
+5,0
+2,1
+28,0
+4,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+2,0
+6,1
+3,0
+2,1
+2a,0
+2,1
+6,0
+4,1
+6,0
+2,1
+5,0
+2,1
+7,0
+2,1
+7,0
+2,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+8,1
+25,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+7,0
+2,1
+7,0
+2,1
+4,0
+2,1
+4,0
+8,1
+24,0
+4,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+28,0
+2,1
+2,0
+2,1
+5,0
+2,1
+5,0
+2,1
+7,0
+2,1
+8,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+26,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+8,0
+2,1
+9,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2e,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+8,1
+2,0
+2,1
+9,0
+2,1
+5,0
+2,1
+50,0
+2,1
+10,0
+2,1
+50,0
+2,1
+10,0
+2,1
+50,0
+5,1
+a,0
+5,1
+2f0,0
+100 90 32
+3e9,0
+2,1
+9,0
+2,1
+13,0
+2,1
+b,0
+3,1
+33,0
+2,1
+a,0
+2,1
+13,0
+2,1
+a,0
+2,1
+35,0
+2,1
+a,0
+2,1
+13,0
+2,1
+a,0
+2,1
+35,0
+3,1
+2,0
+4,1
+3,0
+6,1
+3,0
+5,1
+3,0
+6,1
+2,0
+5,1
+2,0
+5,1
+2,0
+6,1
+2b,0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+33,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+30,0
+5,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+7,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+30,0
+3,1
+0
+2,1
+0
+6,1
+3,0
+5,1
+3,0
+6,1
+2,0
+5,1
+3,0
+2,1
+4,0
+6,1
+62,0
+2,1
+5d,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+2e8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+4a,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+4a,0
+2,1
+e,0
+2,1
+6,0
+2,1
+4a,0
+6,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+5,1
+0
+3,1
+2,0
+6,1
+3,0
+5,1
+30,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+4,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+4,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+5,1
+3d,0
+2,1
+60,0
+3,1
+3f8,0
+2,1
+62,0
+2,1
+44,0
+6,1
+3,0
+6,1
+0
+5,1
+2,0
+4,1
+2,0
+5,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+25,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+25,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+5,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+26,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+4,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+26,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+7,0
+3,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+1
+2,0
+1
+4,0
+4,1
+0
+4,1
+26,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+4,1
+5,0
+2,1
+3,0
+2,1
+27,0
+6,1
+3,0
+6,1
+0
+2,1
+5,0
+4,1
+4,0
+3,1
+2,0
+6,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+27,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+32b,0
+3,1
+3,0
+2,1
+2,0
+3,1
+11,0
+2,1
+43,0
+2,1
+5,0
+2,1
+4,0
+2,1
+10,0
+2,1
+43,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3c,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+6,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+10,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2b,0
+4,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+4,0
+2,1
+5,0
+6,1
+4,0
+2,1
+2d,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+3,1
+6,0
+2,1
+5,0
+3,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2d,0
+4,1
+4,0
+1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+5,0
+2,1
+4,0
+2,1
+e,0
+2,1
+2,0
+2,1
+28,0
+2,1
+2,0
+2,1
+3,0
+4,1
+2,0
+2,1
+8,0
+2,1
+5,0
+2,1
+4,0
+2,1
+e,0
+2,1
+2,0
+2,1
+28,0
+2,1
+2,0
+2,1
+4,0
+2,1
+3,0
+6,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+f,0
+4,1
+33,0
+2,1
+d,0
+2,1
+5,0
+2,1
+4,0
+2,1
+43,0
+2,1
+0
+2,1
+d,0
+2,1
+5,0
+2,1
+4,0
+2,1
+44,0
+3,1
+f,0
+3,1
+3,0
+2,1
+2,0
+3,1
+2f9,0
+100 90 32
+3eb,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40e,0
+100 90 32
+3eb,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40e,0
+100 90 32
+3eb,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40e,0
+100 90 32
+3eb,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40e,0
+100 90 32
+3b8,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+32,0
+2,1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+4,0
+2,1
+2,0
+2,1
+c,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+c,0
+2,1
+5,0
+3,1
+6,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+58,0
+d,1
+10,0
+5,1
+4,0
+2,1
+e,0
+2,1
+2c,0
+3,1
+2,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+3,0
+2,1
+e,0
+2,1
+31,0
+2,1
+3,0
+2,1
+15,0
+2,1
+4,0
+2,1
+e,0
+2,1
+30,0
+2,1
+3,0
+2,1
+15,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+11,0
+5,1
+3,0
+4,1
+c,0
+4,1
+ad,0
+2,1
+63,0
+2,1
+2cb,0
+2,1
+5b,0
+5,1
+3,0
+2,1
+5,0
+2,1
+53,0
+5,1
+4,0
+2,1
+4,0
+2,1
+c6,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+394,0
+1
+4,0
+1
+5e,0
+6,1
+a,0
+2,1
+0
+3,1
+3,0
+2,1
+0
+3,1
+13,0
+2,1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+0
+3,1
+2,0
+3,1
+2,0
+2,1
+0
+3,1
+12,0
+4,1
+b,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+20,0
+2,1
+3,0
+2,1
+7,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+28,0
+2,1
+0
+5,1
+0
+2,1
+0
+5,1
+11,0
+2,1
+0
+a,1
+0
+2,1
+0
+a,1
+27,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1f,0
+8,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1f,0
+8,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3bc,0
+3,1
+60,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+3,1
+57,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+57,0
+3,1
+152,0
+8,1
+5c,0
+8,1
+1d1,0
+2,1
+62,0
+2,1
+2e5,0
+100 90 32
+3c1,0
+1
+43,0
+3,1
+5,0
+3,1
+7,0
+2,1
+3,0
+3,1
+4,0
+5,1
+3,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+3,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+2,1
+5,0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+2,1
+6,0
+1
+0
+1
+8,0
+2,1
+2,0
+3,1
+6,0
+1
+0
+2,1
+2,0
+9,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2a,0
+2,1
+5,0
+3,1
+9,0
+2,1
+9,0
+5,1
+4,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2d,0
+2,1
+0
+5,1
+8,0
+2,1
+8,0
+4,1
+6,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2e,0
+3,1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+6,0
+9,1
+9,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+3a,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2d,0
+3,1
+0
+4,1
+4,0
+3,1
+3,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+2,1
+9,0
+2,1
+49,0
+1
+396,0
+1
+3e,0
+2,1
+21,0
+1
+0
+1
+0
+1
+4,0
+2,1
+2,0
+2,1
+32,0
+2,1
+22,0
+3,1
+4,0
+2,1
+4,0
+2,1
+32,0
+2,1
+19,0
+2,1
+6,0
+3,1
+4,0
+2,1
+4,0
+2,1
+32,0
+2,1
+19,0
+2,1
+5,0
+1
+0
+1
+0
+1
+2,0
+2,1
+6,0
+2,1
+32,0
+2,1
+18,0
+2,1
+7,0
+1
+4,0
+2,1
+6,0
+2,1
+32,0
+2,1
+8,0
+6,1
+7,0
+8,1
+9,0
+2,1
+6,0
+2,1
+33,0
+2,1
+7,0
+6,1
+7,0
+8,1
+9,0
+2,1
+6,0
+2,1
+33,0
+2,1
+17,0
+2,1
+c,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+b,0
+2,1
+5,0
+2,1
+c,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+b,0
+2,1
+5,0
+2,1
+d,0
+2,1
+4,0
+2,1
+46,0
+1
+15,0
+2,1
+4,0
+2,1
+46,0
+1
+16,0
+2,1
+2,0
+2,1
+48,0
+1
+2f7,0
+7,1
+3,0
+4,1
+4,0
+6,1
+4,0
+2,1
+7,0
+5,1
+4,0
+5,1
+4,0
+2,1
+8,0
+3,1
+20,0
+2,1
+7,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+3,1
+6,0
+2,1
+0
+2,1
+20,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+4,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+2,1
+20,0
+2,1
+a,0
+2,1
+3,0
+6,1
+3,0
+2,1
+0
+1
+4,0
+2,1
+7,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+20,0
+2,1
+6,0
+6,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+2,1
+21,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+21,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+a,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+22,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+22,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+23,0
+2,1
+4,0
+5,1
+4,0
+5,1
+4,0
+2,1
+7,0
+5,1
+3,0
+7,1
+3,0
+2,1
+8,0
+3,1
+417,0
+4,1
+7,0
+2,1
+a,0
+2,1
+f,0
+5,1
+4,0
+5,1
+2d,0
+2,1
+2,0
+2,1
+5,0
+2,1
+c,0
+2,1
+d,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+2,0
+2,1
+4,0
+2,1
+e,0
+2,1
+c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+7,0
+2,1
+10,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2d,0
+2,1
+5,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+5,1
+2f,0
+2,1
+4,0
+2,1
+6,0
+5,1
+7,0
+2,1
+a,0
+6,1
+3,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+5,0
+2,1
+10,0
+2,1
+b,0
+2,1
+7,0
+2,1
+3,0
+2,1
+36,0
+2,1
+4,0
+5,1
+5,0
+2,1
+c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+7,0
+2,1
+3,0
+5,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+8,0
+2,1
+a,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+4,1
+4,0
+5,1
+4d,0
+1
+63,0
+1
+64,0
+1
+2d7,0
+100 90 32
+3ff,0
+6,1
+3,0
+7,1
+0
+7,1
+3,0
+6,1
+2,0
+5,1
+5,0
+5,1
+4,0
+2,1
+6,0
+8,1
+1d,0
+2,1
+4,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+22,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+22,0
+2,1
+2,0
+6,1
+2,0
+6,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+6,1
+3,0
+1
+2,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+1b,0
+4,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+1b,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+6,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+1b,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+1b,0
+3,1
+3,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+1
+8,0
+2,1
+1c,0
+2,1
+0
+4,1
+8,0
+2,1
+0
+7,1
+3,0
+6,1
+2,0
+5,1
+4,0
+6,1
+0
+2,1
+4,0
+2,1
+2,0
+9,1
+410,0
+5,1
+3,0
+2,1
+4,0
+2,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+24,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+3,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+5,0
+4,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+3,1
+0
+2,1
+5,0
+2,1
+0
+8,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+4,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+24,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+25,0
+5,1
+3,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+6,1
+0
+2,1
+4,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+401,0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+8,1
+2,0
+5,1
+3,0
+7,1
+3,0
+5,1
+4,0
+6,1
+19,0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+7,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+5,1
+3,0
+7,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+1b,0
+1
+0
+5,1
+0
+1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+4,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+6,1
+1b,0
+4,1
+0
+4,1
+5,0
+1
+2,0
+1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+2,1
+1b,0
+3,1
+3,0
+3,1
+5,0
+4,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+3,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+7,0
+2,1
+1c,0
+2,1
+3,0
+2,1
+7,0
+2,1
+6,0
+4,1
+6,0
+2,1
+5,0
+5,1
+2,0
+2,1
+4,0
+2,1
+2,0
+6,1
+8,0
+2,1
+53,0
+2,1
+3c7,0
+5,1
+6,0
+2,1
+2,0
+5,1
+2,0
+8,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2e,0
+2,1
+4,0
+2,1
+9,0
+2,1
+5,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+26,0
+2,1
+5,0
+4,1
+3,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+28,0
+2,1
+3,0
+6,1
+2,0
+2,1
+8,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+4,1
+24,0
+8,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+6,0
+4,1
+6,0
+2,1
+25,0
+8,1
+4,0
+2,1
+4,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+7,0
+2,1
+7,0
+2,1
+2a,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+4,1
+28,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+7,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+4,0
+2,1
+5,0
+2,1
+9,0
+2,1
+8,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+34,0
+2,1
+5,0
+2,1
+9,0
+2,1
+2,0
+8,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+34,0
+2,1
+10,0
+2,1
+50,0
+2,1
+10,0
+2,1
+50,0
+5,1
+a,0
+5,1
+2dc,0
+100 90 32
+417,0
+3,1
+b,0
+2,1
+13,0
+2,1
+9,0
+2,1
+36,0
+2,1
+a,0
+2,1
+13,0
+2,1
+a,0
+2,1
+35,0
+2,1
+a,0
+2,1
+13,0
+2,1
+a,0
+2,1
+2b,0
+6,1
+2,0
+5,1
+2,0
+5,1
+2,0
+6,1
+3,0
+5,1
+3,0
+6,1
+3,0
+4,1
+2,0
+3,1
+2b,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+2b,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+33,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+7,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+5,1
+30,0
+2,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2f,0
+6,1
+4,0
+2,1
+3,0
+5,1
+2,0
+6,1
+3,0
+5,1
+3,0
+6,1
+0
+2,1
+0
+3,1
+30,0
+2,1
+62,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+339,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+4a,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+4a,0
+2,1
+6,0
+2,1
+e,0
+2,1
+30,0
+5,1
+3,0
+6,1
+2,0
+3,1
+0
+5,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+6,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+30,0
+5,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+55,0
+2,1
+63,0
+3,1
+3d3,0
+2,1
+62,0
+2,1
+43,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+5,1
+2,0
+4,1
+2,0
+5,1
+0
+6,1
+3,0
+6,1
+25,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+26,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+5,0
+3,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+26,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+4,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+26,0
+4,1
+0
+4,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+27,0
+2,1
+3,0
+2,1
+5,0
+4,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+27,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+6,1
+2,0
+3,1
+4,0
+4,1
+5,0
+2,1
+0
+6,1
+3,0
+6,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+2e6,0
+2,1
+11,0
+3,1
+2,0
+2,1
+3,0
+3,1
+44,0
+2,1
+10,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+43,0
+2,1
+10,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+6,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2a,0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2b,0
+2,1
+4,0
+6,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+4,1
+2d,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+3,1
+5,0
+2,1
+6,0
+3,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+e,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+1
+4,0
+4,1
+29,0
+2,1
+2,0
+2,1
+e,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+2,0
+4,1
+3,0
+2,1
+2,0
+2,1
+29,0
+4,1
+f,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+6,1
+3,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+d,0
+2,1
+46,0
+2,1
+4,0
+2,1
+5,0
+2,1
+d,0
+2,1
+0
+2,1
+44,0
+3,1
+2,0
+2,1
+3,0
+3,1
+f,0
+3,1
+2c8,0
+100 90 32
+40b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3ee,0
+100 90 32
+40b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3ee,0
+100 90 32
+40b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3ee,0
+100 90 32
+40b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3ee,0
+100 90 32
+3,0
+1
+8,0
+2,1
+2,0
+3,1
+9,0
+1
+5,0
+1
+b,0
+1
+0
+2,1
+9,0
+1
+6,0
+1
+b,0
+1
+0
+2,1
+9,0
+1
+6,0
+1
+4,0
+1
+9,0
+2,1
+0
+2,1
+a,0
+1
+3,0
+e,1
+0
+1
+0
+e,1
+0
+e,1
+0
+1
+0
+e,1
+3,0
+1
+0
+e,1
+0
+1
+0
+e,1
+3,0
+1
+a,0
+2,1
+0
+2,1
+9,0
+1
+6,0
+1
+a,0
+2,1
+0
+2,1
+9,0
+1
+4,0
+4,1
+3,0
+1
+9,0
+2,1
+0
+1
+b,0
+1
+5,0
+1
+9,0
+3,1
+2,0
+2,1
+8,0
+1
+6,0
+1
+9,0
+3,1
+2,0
+2,1
+8,0
+1
+6,0
+1
+4,0
+1
+8,0
+2,1
+3,0
+1
+a,0
+1
+5,0
+1
+8,0
+3,1
+4,0
+2,1
+7,0
+1
+6,0
+1
+8,0
+3,1
+4,0
+2,1
+7,0
+1
+6,0
+1
+4,0
+1
+7,0
+2,1
+5,0
+1
+9,0
+1
+5,0
+1
+7,0
+3,1
+0
+3,1
+2,0
+2,1
+6,0
+1
+6,0
+1
+7,0
+3,1
+0
+3,1
+2,0
+2,1
+6,0
+1
+6,0
+1
+4,0
+1
+6,0
+2,1
+2,0
+3,1
+2,0
+1
+8,0
+1
+c,0
+3,1
+2,0
+3,1
+3,0
+2,1
+13,0
+3,1
+2,0
+3,1
+3,0
+2,1
+c,0
+1
+a,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+3,1
+3,0
+3,1
+4,0
+2,1
+11,0
+3,1
+3,0
+3,1
+4,0
+2,1
+15,0
+2,1
+4,0
+3,1
+4,0
+1
+11,0
+3,1
+4,0
+3,1
+5,0
+2,1
+f,0
+3,1
+4,0
+3,1
+5,0
+2,1
+13,0
+2,1
+5,0
+3,1
+5,0
+1
+f,0
+3,1
+5,0
+3,1
+6,0
+2,1
+d,0
+3,1
+5,0
+3,1
+6,0
+2,1
+11,0
+2,1
+6,0
+3,1
+6,0
+1
+d,0
+3,1
+6,0
+3,1
+7,0
+2,1
+b,0
+3,1
+6,0
+3,1
+7,0
+2,1
+f,0
+2,1
+7,0
+3,1
+7,0
+1
+b,0
+3,1
+7,0
+3,1
+8,0
+2,1
+9,0
+3,1
+7,0
+3,1
+8,0
+2,1
+d,0
+2,1
+8,0
+3,1
+8,0
+1
+9,0
+3,1
+8,0
+3,1
+9,0
+2,1
+7,0
+3,1
+8,0
+3,1
+9,0
+2,1
+b,0
+2,1
+9,0
+3,1
+9,0
+1
+7,0
+3,1
+9,0
+3,1
+a,0
+2,1
+5,0
+3,1
+9,0
+3,1
+a,0
+2,1
+9,0
+2,1
+a,0
+3,1
+a,0
+1
+5,0
+3,1
+a,0
+3,1
+b,0
+2,1
+3,0
+3,1
+a,0
+3,1
+b,0
+2,1
+5,0
+1
+0
+2,1
+b,0
+3,1
+c,0
+1
+2,0
+3,1
+b,0
+3,1
+c,0
+2,1
+0
+3,1
+b,0
+3,1
+c,0
+2,1
+2,0
+1
+2,0
+2,1
+c,0
+3,1
+c,0
+1
+2,0
+2,1
+9,0
+9,1
+a,0
+1
+0
+2,1
+9,0
+9,1
+a,0
+1
+2,0
+1
+1c86,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+3b8,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+32,0
+2,1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+4,0
+2,1
+2,0
+2,1
+c,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+c,0
+2,1
+5,0
+3,1
+6,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+3,0
+2,1
+58,0
+d,1
+10,0
+5,1
+4,0
+2,1
+e,0
+2,1
+2c,0
+3,1
+2,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+3,0
+2,1
+e,0
+2,1
+31,0
+2,1
+3,0
+2,1
+15,0
+2,1
+4,0
+2,1
+e,0
+2,1
+30,0
+2,1
+3,0
+2,1
+15,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+11,0
+5,1
+3,0
+4,1
+c,0
+4,1
+ad,0
+2,1
+63,0
+2,1
+2cb,0
+2,1
+5b,0
+5,1
+3,0
+2,1
+5,0
+2,1
+53,0
+5,1
+4,0
+2,1
+4,0
+2,1
+c6,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+394,0
+1
+4,0
+1
+5e,0
+6,1
+a,0
+2,1
+0
+3,1
+3,0
+2,1
+0
+3,1
+13,0
+2,1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+0
+3,1
+2,0
+3,1
+2,0
+2,1
+0
+3,1
+12,0
+4,1
+b,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+20,0
+2,1
+3,0
+2,1
+7,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+28,0
+2,1
+0
+5,1
+0
+2,1
+0
+5,1
+11,0
+2,1
+0
+a,1
+0
+2,1
+0
+a,1
+27,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1f,0
+8,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1f,0
+8,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3bc,0
+3,1
+60,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+3,1
+57,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+57,0
+3,1
+152,0
+8,1
+5c,0
+8,1
+1d1,0
+2,1
+62,0
+2,1
+2e5,0
+100 90 32
+3c1,0
+1
+43,0
+3,1
+5,0
+3,1
+7,0
+2,1
+3,0
+3,1
+4,0
+5,1
+3,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+3,1
+4,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+2,1
+5,0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+2,1
+6,0
+1
+0
+1
+8,0
+2,1
+2,0
+3,1
+6,0
+1
+0
+2,1
+2,0
+9,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2a,0
+2,1
+5,0
+3,1
+9,0
+2,1
+9,0
+5,1
+4,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2d,0
+2,1
+0
+5,1
+8,0
+2,1
+8,0
+4,1
+6,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2e,0
+3,1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+6,0
+9,1
+9,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+3a,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2d,0
+3,1
+0
+4,1
+4,0
+3,1
+3,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+2,1
+9,0
+2,1
+49,0
+1
+396,0
+1
+3e,0
+2,1
+21,0
+1
+0
+1
+0
+1
+4,0
+2,1
+2,0
+2,1
+32,0
+2,1
+22,0
+3,1
+4,0
+2,1
+4,0
+2,1
+32,0
+2,1
+19,0
+2,1
+6,0
+3,1
+4,0
+2,1
+4,0
+2,1
+32,0
+2,1
+19,0
+2,1
+5,0
+1
+0
+1
+0
+1
+2,0
+2,1
+6,0
+2,1
+32,0
+2,1
+18,0
+2,1
+7,0
+1
+4,0
+2,1
+6,0
+2,1
+32,0
+2,1
+8,0
+6,1
+7,0
+8,1
+9,0
+2,1
+6,0
+2,1
+33,0
+2,1
+7,0
+6,1
+7,0
+8,1
+9,0
+2,1
+6,0
+2,1
+33,0
+2,1
+17,0
+2,1
+c,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+b,0
+2,1
+5,0
+2,1
+c,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+b,0
+2,1
+5,0
+2,1
+d,0
+2,1
+4,0
+2,1
+46,0
+1
+15,0
+2,1
+4,0
+2,1
+46,0
+1
+16,0
+2,1
+2,0
+2,1
+48,0
+1
+2f7,0
+7,1
+3,0
+4,1
+4,0
+6,1
+4,0
+2,1
+7,0
+5,1
+4,0
+5,1
+4,0
+2,1
+8,0
+3,1
+20,0
+2,1
+7,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+3,1
+6,0
+2,1
+0
+2,1
+20,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+4,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+2,1
+20,0
+2,1
+a,0
+2,1
+3,0
+6,1
+3,0
+2,1
+0
+1
+4,0
+2,1
+7,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+20,0
+2,1
+6,0
+6,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+2,1
+21,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+21,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+a,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+22,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+22,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+23,0
+2,1
+4,0
+5,1
+4,0
+5,1
+4,0
+2,1
+7,0
+5,1
+3,0
+7,1
+3,0
+2,1
+8,0
+3,1
+417,0
+4,1
+7,0
+2,1
+a,0
+2,1
+f,0
+5,1
+4,0
+5,1
+2d,0
+2,1
+2,0
+2,1
+5,0
+2,1
+c,0
+2,1
+d,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+2,0
+2,1
+4,0
+2,1
+e,0
+2,1
+c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+7,0
+2,1
+10,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2d,0
+2,1
+5,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+5,1
+2f,0
+2,1
+4,0
+2,1
+6,0
+5,1
+7,0
+2,1
+a,0
+6,1
+3,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+5,0
+2,1
+10,0
+2,1
+b,0
+2,1
+7,0
+2,1
+3,0
+2,1
+36,0
+2,1
+4,0
+5,1
+5,0
+2,1
+c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+7,0
+2,1
+3,0
+5,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+8,0
+2,1
+a,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+4,1
+4,0
+5,1
+4d,0
+1
+63,0
+1
+64,0
+1
+2d7,0
+100 90 32
+3ff,0
+6,1
+3,0
+7,1
+0
+7,1
+3,0
+6,1
+2,0
+5,1
+5,0
+5,1
+4,0
+2,1
+6,0
+8,1
+1d,0
+2,1
+4,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+22,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+22,0
+2,1
+2,0
+6,1
+2,0
+6,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+6,1
+3,0
+1
+2,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+1b,0
+4,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+1b,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+6,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+1b,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+1b,0
+3,1
+3,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+1
+8,0
+2,1
+1c,0
+2,1
+0
+4,1
+8,0
+2,1
+0
+7,1
+3,0
+6,1
+2,0
+5,1
+4,0
+6,1
+0
+2,1
+4,0
+2,1
+2,0
+9,1
+410,0
+5,1
+3,0
+2,1
+4,0
+2,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+24,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+3,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+5,0
+4,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+3,1
+0
+2,1
+5,0
+2,1
+0
+8,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+4,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+5,0
+2,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+24,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+25,0
+5,1
+3,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+6,1
+0
+2,1
+4,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+401,0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+8,1
+2,0
+5,1
+3,0
+7,1
+3,0
+5,1
+4,0
+6,1
+19,0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+7,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+5,1
+3,0
+7,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+1b,0
+1
+0
+5,1
+0
+1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+4,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+6,1
+1b,0
+4,1
+0
+4,1
+5,0
+1
+2,0
+1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+2,1
+1b,0
+3,1
+3,0
+3,1
+5,0
+4,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+3,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+7,0
+2,1
+1c,0
+2,1
+3,0
+2,1
+7,0
+2,1
+6,0
+4,1
+6,0
+2,1
+5,0
+5,1
+2,0
+2,1
+4,0
+2,1
+2,0
+6,1
+8,0
+2,1
+53,0
+2,1
+3c7,0
+5,1
+6,0
+2,1
+2,0
+5,1
+2,0
+8,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2e,0
+2,1
+4,0
+2,1
+9,0
+2,1
+5,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+26,0
+2,1
+5,0
+4,1
+3,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+28,0
+2,1
+3,0
+6,1
+2,0
+2,1
+8,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+4,1
+24,0
+8,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+6,0
+4,1
+6,0
+2,1
+25,0
+8,1
+4,0
+2,1
+4,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+7,0
+2,1
+7,0
+2,1
+2a,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+4,1
+28,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+7,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+4,0
+2,1
+5,0
+2,1
+9,0
+2,1
+8,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+34,0
+2,1
+5,0
+2,1
+9,0
+2,1
+2,0
+8,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+34,0
+2,1
+10,0
+2,1
+50,0
+2,1
+10,0
+2,1
+50,0
+5,1
+a,0
+5,1
+2dc,0
+100 90 32
+417,0
+3,1
+b,0
+2,1
+13,0
+2,1
+9,0
+2,1
+36,0
+2,1
+a,0
+2,1
+13,0
+2,1
+a,0
+2,1
+35,0
+2,1
+a,0
+2,1
+13,0
+2,1
+a,0
+2,1
+2b,0
+6,1
+2,0
+5,1
+2,0
+5,1
+2,0
+6,1
+3,0
+5,1
+3,0
+6,1
+3,0
+4,1
+2,0
+3,1
+2b,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+2b,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+33,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+7,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+5,1
+30,0
+2,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2f,0
+6,1
+4,0
+2,1
+3,0
+5,1
+2,0
+6,1
+3,0
+5,1
+3,0
+6,1
+0
+2,1
+0
+3,1
+30,0
+2,1
+62,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+339,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+4a,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+4a,0
+2,1
+6,0
+2,1
+e,0
+2,1
+30,0
+5,1
+3,0
+6,1
+2,0
+3,1
+0
+5,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+6,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+30,0
+5,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+55,0
+2,1
+63,0
+3,1
+3d3,0
+2,1
+62,0
+2,1
+43,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+5,1
+2,0
+4,1
+2,0
+5,1
+0
+6,1
+3,0
+6,1
+25,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+26,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+5,0
+3,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+26,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+4,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+26,0
+4,1
+0
+4,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+27,0
+2,1
+3,0
+2,1
+5,0
+4,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+27,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+6,1
+2,0
+3,1
+4,0
+4,1
+5,0
+2,1
+0
+6,1
+3,0
+6,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+281,0
+3,1
+60,0
+2,1
+0
+2,1
+10,0
+3,1
+2,0
+2,1
+3,0
+3,1
+41,0
+2,1
+3,0
+2,1
+e,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+6,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+30,0
+2,1
+2,0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+31,0
+6,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+4,1
+33,0
+2,1
+2,0
+2,1
+2,0
+3,1
+5,0
+2,1
+6,0
+3,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+3e,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+1
+4,0
+4,1
+3d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+2,0
+4,1
+3,0
+2,1
+2,0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+6,1
+3,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+d,0
+2,1
+46,0
+2,1
+4,0
+2,1
+5,0
+2,1
+d,0
+2,1
+0
+2,1
+44,0
+3,1
+2,0
+2,1
+3,0
+3,1
+f,0
+3,1
+2c8,0
+100 90 32
+3c6,0
+2,1
+51,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+b,0
+4,1
+37,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+18,0
+2,1
+2,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+7,0
+2,1
+36,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+7,0
+2,1
+37,0
+2,1
+7,0
+2,1
+3,0
+2,1
+1a,0
+2,1
+38,0
+2,1
+5,0
+a,1
+10,0
+5,1
+4,0
+2,1
+41,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+3d,0
+2,1
+7,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+3,0
+2,1
+38,0
+2,1
+5,0
+3,1
+2,0
+3,1
+16,0
+2,1
+3,0
+2,1
+5d,0
+2,1
+5d,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+2c1,0
+2,1
+34,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+11,0
+5,1
+3,0
+2,1
+35,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+3,1
+12,0
+5,1
+2,0
+2,1
+36,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+0
+a,1
+5c,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+0
+3,1
+2,0
+3,1
+3d1,0
+4,1
+5f,0
+6,1
+a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+26,0
+1
+4,0
+1
+a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1a,0
+8,1
+b,0
+8,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+1a,0
+8,1
+b,0
+8,1
+0
+2,1
+0
+5,1
+0
+2,1
+0
+15,1
+0
+2,1
+0
+a,1
+35,0
+2,1
+3,0
+2,1
+7,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+36,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+36,0
+2,1
+0
+3,1
+3,0
+2,1
+0
+3,1
+13,0
+2,1
+0
+3,1
+2,0
+3,1
+3ce,0
+3,1
+56,0
+2,1
+8,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+4c,0
+2,1
+8,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+3,1
+58,0
+3,1
+56,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+df,0
+2,1
+62,0
+2,1
+2cc,0
+100 90 32
+3cc,0
+1
+39,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+3,1
+0
+4,1
+4,0
+3,1
+3,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+22,0
+2,1
+4,0
+2,1
+3,0
+2,1
+3,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+22,0
+2,1
+4,0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+21,0
+2,1
+6,0
+2,1
+2,0
+3,1
+2,0
+3,1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+6,0
+9,1
+2,0
+2,1
+0
+2,1
+21,0
+2,1
+6,0
+2,1
+2,0
+3,1
+0
+2,1
+0
+5,1
+8,0
+2,1
+8,0
+4,1
+6,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+a,0
+3,1
+9,0
+2,1
+9,0
+5,1
+4,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+a,0
+1
+0
+1
+8,0
+2,1
+2,0
+3,1
+6,0
+1
+0
+2,1
+2,0
+9,1
+29,0
+2,1
+6,0
+2,1
+9,0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+9,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+4,0
+2,1
+b,0
+3,1
+7,0
+2,1
+3,0
+3,1
+4,0
+5,1
+3,0
+2,1
+2,0
+2,1
+2d,0
+2,1
+4,0
+2,1
+23,0
+1
+39,0
+2,1
+2,0
+2,1
+358,0
+1
+2d,0
+2,1
+8,0
+3,1
+8,0
+2,1
+1d,0
+1
+0
+1
+0
+1
+2b,0
+2,1
+7,0
+2,1
+0
+2,1
+7,0
+2,1
+1e,0
+3,1
+2c,0
+2,1
+6,0
+2,1
+3,0
+2,1
+5,0
+2,1
+17,0
+2,1
+6,0
+3,1
+2c,0
+2,1
+6,0
+2,1
+3,0
+2,1
+5,0
+2,1
+17,0
+2,1
+5,0
+1
+0
+1
+0
+1
+2b,0
+2,1
+6,0
+2,1
+3,0
+2,1
+4,0
+2,1
+18,0
+2,1
+7,0
+1
+2d,0
+2,1
+6,0
+2,1
+3,0
+2,1
+4,0
+2,1
+8,0
+6,1
+7,0
+8,1
+32,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+9,0
+6,1
+7,0
+8,1
+32,0
+5,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+19,0
+2,1
+35,0
+3,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+c,0
+1
+5,0
+2,1
+35,0
+2,1
+8,0
+3,1
+4,0
+2,1
+6,0
+2,1
+b,0
+1
+6,0
+2,1
+5b,0
+1
+63,0
+2,1
+62,0
+2,1
+2ed,0
+4,1
+4,0
+5,1
+7,0
+2,1
+4,0
+5,1
+4,0
+5,1
+4,0
+2,1
+7,0
+5,1
+3,0
+7,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+7,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+7,0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+a,0
+2,1
+20,0
+6,1
+3,0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+21,0
+2,1
+3,0
+2,1
+3,0
+5,1
+5,0
+2,1
+6,0
+6,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+6,0
+2,1
+22,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+2,1
+a,0
+2,1
+3,0
+6,1
+3,0
+2,1
+0
+1
+4,0
+2,1
+7,0
+2,1
+23,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+4,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+1f,0
+5,1
+4,0
+5,1
+3,0
+7,1
+3,0
+4,1
+4,0
+6,1
+4,0
+2,1
+7,0
+5,1
+4,0
+5,1
+410,0
+2,1
+4,0
+2,1
+2,0
+9,1
+6,0
+2,1
+8,0
+2,1
+a,0
+2,1
+33,0
+2,1
+4,0
+2,1
+0
+1
+8,0
+2,1
+5,0
+2,1
+7,0
+2,1
+c,0
+2,1
+33,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+c,0
+2,1
+e,0
+2,1
+32,0
+6,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+5,0
+2,1
+10,0
+2,1
+4,0
+1
+2,0
+2,1
+28,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+1
+3,0
+2,1
+29,0
+1
+2,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+5,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+1
+2e,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+7,0
+2,1
+10,0
+2,1
+3,0
+2,1
+2d,0
+4,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+5,1
+5,0
+2,1
+4,0
+2,1
+2e,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+5,1
+4,0
+2,1
+9,0
+2,1
+2a,0
+2,1
+6,0
+8,1
+5,0
+4,1
+7,0
+2,1
+a,0
+2,1
+a,0
+2,1
+c2,0
+2,1
+62,0
+2,1
+2c5,0
+100 90 32
+409,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+4,1
+8,0
+2,1
+0
+7,1
+3,0
+6,1
+2,0
+5,1
+4,0
+6,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+3,1
+3,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+4,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+25,0
+2,1
+0
+8,1
+8,0
+2,1
+2,0
+6,1
+2,0
+6,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+6,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+25,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+6,1
+3,0
+7,1
+0
+7,1
+3,0
+6,1
+2,0
+5,1
+5,0
+5,1
+405,0
+2,1
+d,0
+2,1
+3,0
+5,1
+3,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+6,1
+0
+2,1
+4,0
+2,1
+2,0
+4,1
+1f,0
+6,1
+8,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+1e,0
+3,1
+2,0
+2,1
+7,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1d,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+21,0
+2,1
+5,0
+2,1
+2,0
+6,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+4,1
+0
+2,1
+21,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+3,1
+0
+2,1
+21,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+5,0
+4,1
+0
+2,1
+21,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+21,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+3,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+22,0
+2,1
+3,0
+2,1
+3,0
+6,1
+3,0
+5,1
+3,0
+2,1
+4,0
+2,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+23,0
+5,1
+3e0,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+7,0
+2,1
+6,0
+4,1
+6,0
+2,1
+5,0
+5,1
+2,0
+2,1
+4,0
+2,1
+1c,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+1c,0
+2,1
+5,0
+2,1
+2,0
+2,1
+4,0
+3,1
+3,0
+3,1
+5,0
+4,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+1c,0
+2,1
+6,0
+4,1
+5,0
+4,1
+0
+4,1
+5,0
+1
+2,0
+1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+1c,0
+2,1
+7,0
+2,1
+6,0
+1
+0
+5,1
+0
+1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+4,1
+4,0
+2,1
+4,0
+2,1
+1b,0
+4,1
+6,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+5,1
+3,0
+7,1
+1a,0
+2,1
+2,0
+2,1
+4,0
+4,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+7,0
+4,1
+0
+2,1
+4,0
+2,1
+1a,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+19,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+19,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+8,1
+2,0
+5,1
+3,0
+7,1
+418,0
+3,1
+13,0
+5,1
+2,0
+2,1
+6,0
+5,1
+2,0
+8,1
+30,0
+3,1
+d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+9,0
+2,1
+8,0
+2,1
+31,0
+2,1
+5,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+7,0
+2,1
+29,0
+2,1
+0
+3,1
+3,0
+2,1
+6,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+8,1
+4,0
+2,1
+4,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2c,0
+2,1
+2,0
+2,1
+5,0
+8,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+2,1
+7,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2c,0
+5,1
+b,0
+2,1
+3,0
+6,1
+2,0
+2,1
+8,0
+2,1
+6,0
+2,1
+4,0
+2,1
+2d,0
+2,1
+d,0
+2,1
+5,0
+4,1
+3,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+11,0
+2,1
+4,0
+2,1
+9,0
+2,1
+5,0
+2,1
+2,0
+2,1
+30,0
+4,1
+18,0
+2,1
+9,0
+2,1
+5,0
+2,1
+2,0
+8,1
+46,0
+2,1
+10,0
+2,1
+50,0
+2,1
+10,0
+2,1
+50,0
+5,1
+a,0
+5,1
+2ca,0
+100 90 32
+410,0
+2,1
+0
+2,1
+3,0
+2,1
+b,0
+2,1
+a,0
+6,1
+b,0
+6,1
+2c,0
+2,1
+0
+2,1
+3,0
+2,1
+b,0
+2,1
+a,0
+2,1
+3,0
+2,1
+9,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+0
+2,1
+3,0
+2,1
+b,0
+2,1
+a,0
+2,1
+3,0
+2,1
+9,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+5,1
+4,0
+2,1
+3,0
+5,1
+2,0
+2,1
+3,0
+2,1
+2,0
+5,1
+2,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2c,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+8,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2c,0
+2,1
+2,0
+6,1
+0
+6,1
+2,0
+5,1
+0
+7,1
+0
+6,1
+7,0
+2,1
+2,0
+6,1
+34,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+b,0
+2,1
+6,0
+2,1
+2c,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+2c,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+3,1
+4,0
+5,1
+2,0
+2,1
+7,0
+5,1
+7,0
+2,1
+37,0
+2,1
+3,0
+2,1
+5d,0
+2,1
+3,0
+2,1
+5d,0
+6,1
+338,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+3,1
+55,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+57,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+2c,0
+2,1
+b,0
+2,1
+2,0
+5,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+2,1
+2c,0
+2,1
+b,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+2,1
+2c,0
+2,1
+b,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+2c,0
+6,1
+3,0
+6,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2c,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+0
+2,1
+2c,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+0
+2,1
+2c,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+5,1
+3,0
+6,1
+2,0
+3,1
+0
+5,1
+0
+2,1
+6,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+27,0
+2,1
+2c,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+27,0
+2,1
+2c,0
+6,1
+3,0
+6,1
+39d,0
+3,1
+63,0
+2,1
+37,0
+3,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+6,1
+4,0
+2,1
+3,0
+4,1
+5,0
+2,1
+28,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+5,0
+4,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+28,0
+2,1
+5,0
+4,1
+3,0
+4,1
+0
+4,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+7,0
+2,1
+28,0
+2,1
+6,0
+2,1
+4,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+4,1
+5,0
+2,1
+27,0
+4,1
+4,0
+4,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+5,1
+4,0
+3,1
+4,0
+2,1
+27,0
+2,1
+0
+1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+27,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+4,1
+2,0
+5,1
+26,0
+2,1
+2,0
+2,1
+5e,0
+2,1
+3,0
+2,1
+5d,0
+2,1
+3,0
+2,1
+2c5,0
+2,1
+3,0
+2,1
+58,0
+2,1
+4,0
+2,1
+0
+2,1
+10,0
+3,1
+2,0
+2,1
+3,0
+3,1
+3c,0
+2,1
+5,0
+3,1
+10,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+32,0
+5,1
+4,0
+2,1
+18,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+6,1
+27,0
+2,1
+3,0
+2,1
+3,0
+2,1
+e,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+27,0
+2,1
+7,0
+2,1
+e,0
+6,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+28,0
+2,1
+6,0
+2,1
+e,0
+2,1
+2,0
+2,1
+4,0
+3,1
+5,0
+2,1
+6,0
+3,1
+4,0
+2,1
+29,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+16,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+2a,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+16,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2c,0
+5,1
+3,0
+4,1
+17,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+6,1
+4b,0
+2,1
+4,0
+2,1
+5,0
+2,1
+34,0
+2,1
+1f,0
+2,1
+4,0
+2,1
+5,0
+2,1
+33,0
+2,1
+21,0
+3,1
+2,0
+2,1
+3,0
+3,1
+2cb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr/a23.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr/a23.dat
new file mode 100644
index 000000000..46abb69f7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr/a23.dat
@@ -0,0 +1,345 @@
+! $XConsortium$
+100 90 32
+4b3,0
+4,1
+2,0
+2,1
+6,0
+4,1
+6,0
+2,1
+0
+6,1
+3,0
+3,1
+3,0
+4,1
+2,0
+2,1
+5,0
+6,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+2,0
+3,1
+3,0
+1
+4,0
+1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+6,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+9,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+a,0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+6,1
+a,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+2,1
+6,0
+5,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+5,1
+4,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+6,1
+0
+5,1
+4,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+4,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+3,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+4,1
+3,0
+5,1
+0
+6,1
+2,0
+2,1
+5,0
+5,1
+0
+2,1
+2,0
+2,1
+0
+6,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+42,0
+2,1
+2,0
+2,1
+5f,0
+4,1
+1a4a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr/a24.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr/a24.dat
new file mode 100644
index 000000000..88fcd20ed
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr/a24.dat
@@ -0,0 +1,415 @@
+! $XConsortium$
+100 90 32
+4b3,0
+2
+3
+2
+3
+2,0
+2,2
+6,0
+4,2
+6,0
+2,2
+0
+2
+3
+2
+3
+2
+3
+3,0
+2
+3
+2
+3,0
+4,2
+2,0
+2
+3
+5,0
+2
+3
+2
+3
+2
+3
+5,0
+3
+2
+0
+2
+3
+3,0
+2
+2,0
+3
+2
+3
+3,0
+2
+4,0
+2
+a,0
+3
+2
+2,0
+2
+3
+0
+2,3
+5,0
+3
+2
+2,0
+2
+3
+5,0
+2,3
+0
+3
+2
+6,0
+2,2
+0
+2
+3
+0
+2
+3
+2,0
+2,3
+0
+2
+3
+7,0
+2
+3
+7,0
+2,2
+0
+2
+3
+2,0
+2,2
+3,0
+2,2
+3,0
+2,3
+2,0
+3
+2
+a,0
+2
+3
+2,0
+2,3
+0
+2,3
+5,0
+2,2
+9,0
+2,3
+0
+2,3
+6,0
+2,2
+4,0
+2,3
+5,0
+3
+2
+7,0
+3
+2
+a,0
+3
+2
+0
+2,2
+4,0
+2,3
+3,0
+4,3
+2
+3
+a,0
+2
+3
+2,0
+2
+3
+0
+3,3
+2,2
+2,0
+2,2
+6,0
+2,2
+3,3
+0
+3
+2
+6,0
+2,2
+4,0
+2
+3
+5,0
+2
+2,3
+2,2
+4,0
+2,3
+7,0
+2,2
+0
+3
+3,2
+5,0
+2,2
+3,0
+2,3
+2,2
+2,3
+0
+5,2
+4,0
+3,2
+2,3
+2
+0
+2,2
+2,0
+3
+2
+0
+2
+3
+5,0
+2
+3
+2,0
+2,2
+0
+2
+2,3
+2,2
+2,0
+3,3
+2
+3,0
+3
+2
+0
+3,2
+0
+3
+2
+2,0
+2,3
+3,0
+2,2
+7,0
+2,3
+0
+2,2
+3
+6,0
+2,3
+3,0
+2,2
+2,0
+2,2
+0
+2,3
+2,0
+2,2
+3,0
+2,2
+2,0
+2
+3
+0
+2,3
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,3
+0
+3
+2
+6,0
+2,2
+4,0
+2
+3
+2,0
+2,3
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+4,2
+5,0
+2,2
+3,0
+2,3
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,3
+2,0
+2,3
+0
+2,2
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,2
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2
+3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+2,3
+0
+2,3
+4,0
+2,3
+3,0
+2
+3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,2
+2,0
+2
+3
+0
+3,3
+2,2
+3,0
+4,2
+3,0
+2,2
+3,3
+0
+3
+5,2
+2,0
+2,2
+5,0
+5,3
+0
+2,2
+2,0
+2,2
+0
+6,2
+5,0
+2,2
+0
+2,2
+3,0
+2
+0
+4,2
+2,3
+0
+2,3
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+42,0
+2,2
+2,0
+2,3
+5f,0
+3,3
+2
+1a4a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr/a25.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr/a25.dat
new file mode 100644
index 000000000..1b73dc843
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr/a25.dat
@@ -0,0 +1,397 @@
+! $XConsortium$
+100 90 32
+4b3,0
+3,3
+2
+2,0
+2,2
+6,0
+4,3
+6,0
+2,3
+0
+6,2
+3,0
+3,3
+3,0
+4,3
+2,0
+2,3
+5,0
+2,2
+4,3
+5,0
+2,3
+0
+2,3
+3,0
+3
+2,0
+3,2
+3,0
+3
+4,0
+3
+a,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,2
+5,0
+3
+2
+0
+2,3
+6,0
+2,3
+0
+3
+2
+0
+2,2
+2,0
+2,3
+0
+3
+2
+7,0
+2,3
+7,0
+2,2
+0
+2,3
+2,0
+2,2
+3,0
+2,3
+3,0
+2,3
+2,0
+2,2
+a,0
+3
+2
+2,0
+2,3
+0
+2,3
+5,0
+2,2
+9,0
+2
+3
+0
+2,3
+6,0
+2,2
+4,0
+2,3
+5,0
+2
+3
+7,0
+2,2
+a,0
+2,3
+0
+2
+3
+4,0
+2,3
+3,0
+4,2
+2,3
+a,0
+2,3
+2,0
+2,3
+0
+3,2
+2,3
+2,0
+2,3
+6,0
+5,3
+0
+2,3
+6,0
+2,3
+4,0
+2,2
+5,0
+5,3
+4,0
+2,3
+7,0
+2,2
+0
+4,3
+5,0
+2,2
+3,0
+6,3
+0
+3,2
+2,3
+4,0
+2
+4,3
+2
+0
+2,3
+2,0
+2,3
+0
+2,2
+5,0
+3
+2
+2,0
+2,3
+0
+3
+2,2
+2,3
+2,0
+2,3
+2,2
+3,0
+2,3
+0
+3
+2,2
+0
+2,3
+2,0
+2,2
+3,0
+2,3
+7,0
+2,3
+0
+3,2
+6,0
+2,3
+3,0
+3
+2
+2,0
+2,2
+0
+2,3
+2,0
+2,2
+3,0
+2,2
+2,0
+2
+3
+0
+2,3
+2,0
+2,2
+0
+2,3
+5,0
+2,2
+2,0
+2,2
+0
+2
+3
+6,0
+2
+3
+4,0
+3
+2
+2,0
+2,2
+0
+2,2
+2,0
+2,3
+3,0
+2,2
+7,0
+2,2
+0
+4,2
+5,0
+2,3
+3,0
+2
+3
+2,0
+2,3
+0
+2,2
+2,0
+2,2
+3,0
+2
+3
+2,0
+2,2
+0
+2,2
+2,0
+2,3
+0
+3
+2
+5,0
+3
+2
+2,0
+3
+2
+0
+2,2
+6,0
+2,3
+4,0
+2
+3
+2,0
+2
+3
+0
+3
+2
+2,0
+2,2
+3,0
+2,3
+7,0
+2,3
+0
+2
+3
+0
+3
+2
+4,0
+2,2
+3,0
+2,3
+2,0
+2,2
+0
+2,3
+2,0
+3
+2
+3,0
+2,2
+2,0
+2
+3
+0
+2,3
+2,0
+2,2
+0
+2
+3
+2,0
+3
+2
+0
+2,2
+2,0
+2,2
+0
+2
+3
+6,0
+2,2
+4,0
+3
+2
+2,0
+2,2
+0
+2,2
+2,0
+2,3
+3,0
+2,2
+7,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,3
+3,0
+2,2
+2,0
+2,3
+0
+2,2
+2,0
+2,2
+3,0
+2
+3
+2,0
+2
+3
+0
+5,3
+3,0
+4,2
+3,0
+2
+3
+2
+3
+2
+0
+2
+5,3
+2,0
+2,3
+5,0
+3,3
+2
+3
+0
+3
+2
+2,0
+2,3
+0
+6,3
+5,0
+2,3
+0
+2
+3
+3,0
+3
+0
+6,3
+0
+2,3
+2,0
+2,2
+0
+2,3
+2,0
+3
+2
+42,0
+2,3
+2,0
+2,2
+5f,0
+4,2
+1a4a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr/a26.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr/a26.dat
new file mode 100644
index 000000000..b1295d7d0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr/a26.dat
@@ -0,0 +1,243 @@
+! $XConsortium$
+100 90 32
+4b3,0
+3,1
+b,0
+4,1
+6,0
+2,1
+a,0
+3,1
+3,0
+4,1
+2,0
+2,1
+7,0
+4,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+8,0
+1
+4,0
+1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+9,0
+1
+2,0
+2,1
+6,0
+2,1
+0
+1
+6,0
+2,1
+0
+1
+8,0
+2,1
+a,0
+2,1
+7,0
+2,1
+3,0
+2,1
+e,0
+1
+3,0
+2,1
+0
+2,1
+11,0
+1
+0
+2,1
+c,0
+2,1
+6,0
+1
+13,0
+2,1
+2,0
+1
+4,0
+2,1
+7,0
+2,1
+a,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+5,1
+0
+2,1
+6,0
+2,1
+b,0
+5,1
+4,0
+2,1
+a,0
+4,1
+a,0
+6,1
+4,0
+2,1
+5,0
+4,1
+2,0
+2,1
+2,0
+2,1
+8,0
+1
+3,0
+2,1
+0
+1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+3,0
+2,1
+7,0
+2,1
+7,0
+2,1
+a,0
+2,1
+3,0
+1
+6,0
+2,1
+c,0
+1
+0
+2,1
+5,0
+2,1
+d,0
+1
+7,0
+1
+4,0
+1
+a,0
+2,1
+18,0
+2,1
+4,0
+1
+2,0
+2,1
+b,0
+1
+9,0
+2,1
+0
+1
+6,0
+1
+3,0
+1
+a,0
+2,1
+5,0
+1
+3,0
+1
+0
+1
+8,0
+2,1
+7,0
+2,1
+2,0
+1
+0
+1
+a,0
+2,1
+5,0
+2,1
+2,0
+1
+9,0
+1
+0
+2,1
+6,0
+1
+2,0
+1
+a,0
+1
+c,0
+1
+a,0
+2,1
+18,0
+2,1
+7,0
+2,1
+b,0
+1
+3,0
+1
+0
+5,1
+b,0
+1
+0
+1
+3,0
+5,1
+2,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+3,0
+2,1
+0
+6,1
+5,0
+2,1
+2,0
+1
+3,0
+1
+0
+6,1
+0
+2,1
+5,0
+2,1
+2,0
+1
+43,0
+2,1
+1ab1,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr/a3.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr/a3.dat
new file mode 100644
index 000000000..73e5cda36
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr/a3.dat
@@ -0,0 +1,436 @@
+! $XConsortium$
+100 90 32
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+388,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+8,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+7,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+6,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+7,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+8,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+388,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+8,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+7,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+6,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+7,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+8,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+388,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+8,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+7,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+6,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+7,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+8,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+388,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+8,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+7,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+6,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+7,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+8,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+388,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+8,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+7,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+6,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+7,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+d,0
+2,1
+8,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+9,0
+6,1
+57c,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr/a30.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr/a30.dat
new file mode 100644
index 000000000..60c52713b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr/a30.dat
@@ -0,0 +1,611 @@
+! $XConsortium$
+100 90 32
+4b3,0
+4,1
+2,0
+2,1
+6,0
+4,1
+6,0
+2,1
+0
+3,1
+45,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+46,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+9,0
+2,1
+0
+2,1
+46,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+2,1
+6,0
+5,1
+0
+2,1
+46,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+3,1
+45,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+46,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+46,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+46,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+4,1
+3,0
+5,1
+0
+3,1
+1b37,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+4d1,0
+3,1
+3,0
+3,1
+3,0
+4,1
+2,0
+2,1
+5,0
+6,1
+4a,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+4c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+4c,0
+2,1
+4,0
+2,1
+5,0
+5,1
+4,0
+2,1
+47,0
+2,1
+2,0
+4,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+4c,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+4c,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+4c,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+47,0
+3,1
+2,0
+2,1
+5,0
+5,1
+0
+2,1
+2,0
+2,1
+0
+6,1
+65,0
+1
+1ab2,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+4f5,0
+2,1
+0
+2,1
+3,0
+1
+2,0
+3,1
+3,0
+1
+4,0
+1
+4d,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+50,0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+6,1
+4d,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+6,1
+0
+5,1
+47,0
+2,1
+0
+3,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+2,1
+3,0
+1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+43,0
+1
+2,0
+2,1
+5f,0
+4,1
+1a4a,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+4d1,0
+3,1
+3,0
+3,1
+3,0
+4,1
+2,0
+2,1
+5,0
+6,1
+4a,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+4c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+4c,0
+2,1
+4,0
+2,1
+5,0
+5,1
+4,0
+2,1
+47,0
+2,1
+2,0
+4,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+4c,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+4c,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+4c,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+47,0
+3,1
+2,0
+2,1
+5,0
+5,1
+0
+2,1
+2,0
+2,1
+0
+6,1
+65,0
+1
+1ab2,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+4f5,0
+2,1
+0
+2,1
+3,0
+1
+2,0
+3,1
+3,0
+1
+4,0
+1
+4d,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+50,0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+6,1
+4d,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+6,1
+0
+5,1
+47,0
+2,1
+0
+3,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+46,0
+2,1
+0
+2,1
+3,0
+1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+43,0
+1
+2,0
+2,1
+5f,0
+4,1
+1a4a,0
+100 90 32
+2328,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr/a33.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr/a33.dat
new file mode 100644
index 000000000..b1295d7d0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr/a33.dat
@@ -0,0 +1,243 @@
+! $XConsortium$
+100 90 32
+4b3,0
+3,1
+b,0
+4,1
+6,0
+2,1
+a,0
+3,1
+3,0
+4,1
+2,0
+2,1
+7,0
+4,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+8,0
+1
+4,0
+1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+9,0
+1
+2,0
+2,1
+6,0
+2,1
+0
+1
+6,0
+2,1
+0
+1
+8,0
+2,1
+a,0
+2,1
+7,0
+2,1
+3,0
+2,1
+e,0
+1
+3,0
+2,1
+0
+2,1
+11,0
+1
+0
+2,1
+c,0
+2,1
+6,0
+1
+13,0
+2,1
+2,0
+1
+4,0
+2,1
+7,0
+2,1
+a,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+5,1
+0
+2,1
+6,0
+2,1
+b,0
+5,1
+4,0
+2,1
+a,0
+4,1
+a,0
+6,1
+4,0
+2,1
+5,0
+4,1
+2,0
+2,1
+2,0
+2,1
+8,0
+1
+3,0
+2,1
+0
+1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+3,0
+2,1
+7,0
+2,1
+7,0
+2,1
+a,0
+2,1
+3,0
+1
+6,0
+2,1
+c,0
+1
+0
+2,1
+5,0
+2,1
+d,0
+1
+7,0
+1
+4,0
+1
+a,0
+2,1
+18,0
+2,1
+4,0
+1
+2,0
+2,1
+b,0
+1
+9,0
+2,1
+0
+1
+6,0
+1
+3,0
+1
+a,0
+2,1
+5,0
+1
+3,0
+1
+0
+1
+8,0
+2,1
+7,0
+2,1
+2,0
+1
+0
+1
+a,0
+2,1
+5,0
+2,1
+2,0
+1
+9,0
+1
+0
+2,1
+6,0
+1
+2,0
+1
+a,0
+1
+c,0
+1
+a,0
+2,1
+18,0
+2,1
+7,0
+2,1
+b,0
+1
+3,0
+1
+0
+5,1
+b,0
+1
+0
+1
+3,0
+5,1
+2,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+3,0
+2,1
+0
+6,1
+5,0
+2,1
+2,0
+1
+3,0
+1
+0
+6,1
+0
+2,1
+5,0
+2,1
+2,0
+1
+43,0
+2,1
+1ab1,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr/a35.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr/a35.dat
new file mode 100644
index 000000000..e8fd2852a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr/a35.dat
@@ -0,0 +1,11699 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+4b3,0
+4,1
+2,0
+2,1
+6,0
+4,1
+6,0
+2,1
+0
+6,1
+3,0
+3,1
+3,0
+4,1
+2,0
+2,1
+5,0
+6,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+2,0
+3,1
+3,0
+1
+4,0
+1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+6,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+9,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+a,0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+6,1
+a,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+2,1
+6,0
+5,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+5,1
+4,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+6,1
+0
+5,1
+4,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+4,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+3,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+4,1
+3,0
+5,1
+0
+6,1
+2,0
+2,1
+5,0
+5,1
+0
+2,1
+2,0
+2,1
+0
+6,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+42,0
+2,1
+2,0
+2,1
+5f,0
+4,1
+1a4a,0
+100 90 32
+4b3,0
+4,2
+2,0
+2,2
+6,0
+4,2
+6,0
+2,2
+0
+6,2
+3,0
+3,2
+3,0
+4,2
+2,0
+2,2
+5,0
+6,2
+5,0
+2,2
+0
+2,2
+3,0
+2
+2,0
+3,2
+3,0
+2
+4,0
+2
+a,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+5,0
+2,2
+0
+2,2
+6,0
+2,2
+0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+7,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+3,0
+2,2
+2,0
+2,2
+a,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+9,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+5,0
+2,2
+7,0
+2,2
+a,0
+2,2
+0
+2,2
+4,0
+2,2
+3,0
+6,2
+a,0
+2,2
+2,0
+2,2
+0
+5,2
+2,0
+2,2
+6,0
+5,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+5,0
+5,2
+4,0
+2,2
+7,0
+2,2
+0
+4,2
+5,0
+2,2
+3,0
+6,2
+0
+5,2
+4,0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+5,2
+2,0
+4,2
+3,0
+2,2
+0
+3,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+3,2
+6,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+4,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+2,2
+0
+2,2
+4,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+5,2
+3,0
+4,2
+3,0
+5,2
+0
+6,2
+2,0
+2,2
+5,0
+5,2
+0
+2,2
+2,0
+2,2
+0
+6,2
+5,0
+2,2
+0
+2,2
+3,0
+2
+0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+42,0
+2,2
+2,0
+2,2
+5f,0
+4,2
+1a4a,0
+100 90 32
+4b3,0
+4,3
+2,0
+2,3
+6,0
+4,3
+6,0
+2,3
+0
+6,3
+3,0
+3,3
+3,0
+4,3
+2,0
+2,3
+5,0
+6,3
+5,0
+2,3
+0
+2,3
+3,0
+3
+2,0
+3,3
+3,0
+3
+4,0
+3
+a,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+5,0
+2,3
+0
+2,3
+6,0
+2,3
+0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+7,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+3,0
+2,3
+2,0
+2,3
+a,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+9,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+5,0
+2,3
+7,0
+2,3
+a,0
+2,3
+0
+2,3
+4,0
+2,3
+3,0
+6,3
+a,0
+2,3
+2,0
+2,3
+0
+5,3
+2,0
+2,3
+6,0
+5,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+5,0
+5,3
+4,0
+2,3
+7,0
+2,3
+0
+4,3
+5,0
+2,3
+3,0
+6,3
+0
+5,3
+4,0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+5,3
+2,0
+4,3
+3,0
+2,3
+0
+3,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+3,3
+6,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+4,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+2,3
+0
+2,3
+4,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+5,3
+3,0
+4,3
+3,0
+5,3
+0
+6,3
+2,0
+2,3
+5,0
+5,3
+0
+2,3
+2,0
+2,3
+0
+6,3
+5,0
+2,3
+0
+2,3
+3,0
+3
+0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+42,0
+2,3
+2,0
+2,3
+5f,0
+4,3
+1a4a,0
+100 90 32
+4b3,0
+4,4
+2,0
+2,4
+6,0
+4,4
+6,0
+2,4
+0
+6,4
+3,0
+3,4
+3,0
+4,4
+2,0
+2,4
+5,0
+6,4
+5,0
+2,4
+0
+2,4
+3,0
+4
+2,0
+3,4
+3,0
+4
+4,0
+4
+a,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+5,0
+2,4
+0
+2,4
+6,0
+2,4
+0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+7,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+3,0
+2,4
+2,0
+2,4
+a,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+9,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+5,0
+2,4
+7,0
+2,4
+a,0
+2,4
+0
+2,4
+4,0
+2,4
+3,0
+6,4
+a,0
+2,4
+2,0
+2,4
+0
+5,4
+2,0
+2,4
+6,0
+5,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+5,0
+5,4
+4,0
+2,4
+7,0
+2,4
+0
+4,4
+5,0
+2,4
+3,0
+6,4
+0
+5,4
+4,0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+5,4
+2,0
+4,4
+3,0
+2,4
+0
+3,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+3,4
+6,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+4,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+2,4
+0
+2,4
+4,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+5,4
+3,0
+4,4
+3,0
+5,4
+0
+6,4
+2,0
+2,4
+5,0
+5,4
+0
+2,4
+2,0
+2,4
+0
+6,4
+5,0
+2,4
+0
+2,4
+3,0
+4
+0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+42,0
+2,4
+2,0
+2,4
+5f,0
+4,4
+1a4a,0
+100 90 32
+4b3,0
+4,6
+2,0
+2,6
+6,0
+4,6
+6,0
+2,6
+0
+6,6
+3,0
+3,6
+3,0
+4,6
+2,0
+2,6
+5,0
+6,6
+5,0
+2,6
+0
+2,6
+3,0
+6
+2,0
+3,6
+3,0
+6
+4,0
+6
+a,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+5,0
+2,6
+0
+2,6
+6,0
+2,6
+0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+7,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+3,0
+2,6
+2,0
+2,6
+a,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+9,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+5,0
+2,6
+7,0
+2,6
+a,0
+2,6
+0
+2,6
+4,0
+2,6
+3,0
+6,6
+a,0
+2,6
+2,0
+2,6
+0
+5,6
+2,0
+2,6
+6,0
+5,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+5,0
+5,6
+4,0
+2,6
+7,0
+2,6
+0
+4,6
+5,0
+2,6
+3,0
+6,6
+0
+5,6
+4,0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+5,6
+2,0
+4,6
+3,0
+2,6
+0
+3,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+3,6
+6,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+4,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+2,6
+0
+2,6
+4,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+5,6
+3,0
+4,6
+3,0
+5,6
+0
+6,6
+2,0
+2,6
+5,0
+5,6
+0
+2,6
+2,0
+2,6
+0
+6,6
+5,0
+2,6
+0
+2,6
+3,0
+6
+0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+42,0
+2,6
+2,0
+2,6
+5f,0
+4,6
+1a4a,0
+100 90 32
+4b3,0
+4,7
+2,0
+2,7
+6,0
+4,7
+6,0
+2,7
+0
+6,7
+3,0
+3,7
+3,0
+4,7
+2,0
+2,7
+5,0
+6,7
+5,0
+2,7
+0
+2,7
+3,0
+7
+2,0
+3,7
+3,0
+7
+4,0
+7
+a,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+5,0
+2,7
+0
+2,7
+6,0
+2,7
+0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+7,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+3,0
+2,7
+2,0
+2,7
+a,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+9,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+5,0
+2,7
+7,0
+2,7
+a,0
+2,7
+0
+2,7
+4,0
+2,7
+3,0
+6,7
+a,0
+2,7
+2,0
+2,7
+0
+5,7
+2,0
+2,7
+6,0
+5,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+5,0
+5,7
+4,0
+2,7
+7,0
+2,7
+0
+4,7
+5,0
+2,7
+3,0
+6,7
+0
+5,7
+4,0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+5,7
+2,0
+4,7
+3,0
+2,7
+0
+3,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+3,7
+6,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+4,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+2,7
+0
+2,7
+4,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+5,7
+3,0
+4,7
+3,0
+5,7
+0
+6,7
+2,0
+2,7
+5,0
+5,7
+0
+2,7
+2,0
+2,7
+0
+6,7
+5,0
+2,7
+0
+2,7
+3,0
+7
+0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+42,0
+2,7
+2,0
+2,7
+5f,0
+4,7
+1a4a,0
+100 90 32
+4b3,0
+4,10
+2,0
+2,10
+6,0
+4,10
+6,0
+2,10
+0
+6,10
+3,0
+3,10
+3,0
+4,10
+2,0
+2,10
+5,0
+6,10
+5,0
+2,10
+0
+2,10
+3,0
+10
+2,0
+3,10
+3,0
+10
+4,0
+10
+a,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+5,0
+2,10
+0
+2,10
+6,0
+2,10
+0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+7,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+3,0
+2,10
+2,0
+2,10
+a,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+9,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+5,0
+2,10
+7,0
+2,10
+a,0
+2,10
+0
+2,10
+4,0
+2,10
+3,0
+6,10
+a,0
+2,10
+2,0
+2,10
+0
+5,10
+2,0
+2,10
+6,0
+5,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+5,0
+5,10
+4,0
+2,10
+7,0
+2,10
+0
+4,10
+5,0
+2,10
+3,0
+6,10
+0
+5,10
+4,0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+5,10
+2,0
+4,10
+3,0
+2,10
+0
+3,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+3,10
+6,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+4,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+2,10
+0
+2,10
+4,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+5,10
+3,0
+4,10
+3,0
+5,10
+0
+6,10
+2,0
+2,10
+5,0
+5,10
+0
+2,10
+2,0
+2,10
+0
+6,10
+5,0
+2,10
+0
+2,10
+3,0
+10
+0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+42,0
+2,10
+2,0
+2,10
+5f,0
+4,10
+1a4a,0
+100 90 32
+4b3,0
+4,33
+2,0
+2,33
+6,0
+4,33
+6,0
+2,33
+0
+6,33
+3,0
+3,33
+3,0
+4,33
+2,0
+2,33
+5,0
+6,33
+5,0
+2,33
+0
+2,33
+3,0
+33
+2,0
+3,33
+3,0
+33
+4,0
+33
+a,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+5,0
+2,33
+0
+2,33
+6,0
+2,33
+0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+7,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+3,0
+2,33
+2,0
+2,33
+a,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+9,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+5,0
+2,33
+7,0
+2,33
+a,0
+2,33
+0
+2,33
+4,0
+2,33
+3,0
+6,33
+a,0
+2,33
+2,0
+2,33
+0
+5,33
+2,0
+2,33
+6,0
+5,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+5,0
+5,33
+4,0
+2,33
+7,0
+2,33
+0
+4,33
+5,0
+2,33
+3,0
+6,33
+0
+5,33
+4,0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+5,33
+2,0
+4,33
+3,0
+2,33
+0
+3,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+3,33
+6,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+4,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+2,33
+0
+2,33
+4,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+5,33
+3,0
+4,33
+3,0
+5,33
+0
+6,33
+2,0
+2,33
+5,0
+5,33
+0
+2,33
+2,0
+2,33
+0
+6,33
+5,0
+2,33
+0
+2,33
+3,0
+33
+0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+42,0
+2,33
+2,0
+2,33
+5f,0
+4,33
+1a4a,0
+100 90 32
+4b3,0
+4,81
+2,0
+2,81
+6,0
+4,81
+6,0
+2,81
+0
+6,81
+3,0
+3,81
+3,0
+4,81
+2,0
+2,81
+5,0
+6,81
+5,0
+2,81
+0
+2,81
+3,0
+81
+2,0
+3,81
+3,0
+81
+4,0
+81
+a,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+5,0
+2,81
+0
+2,81
+6,0
+2,81
+0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+7,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+3,0
+2,81
+2,0
+2,81
+a,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+9,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+5,0
+2,81
+7,0
+2,81
+a,0
+2,81
+0
+2,81
+4,0
+2,81
+3,0
+6,81
+a,0
+2,81
+2,0
+2,81
+0
+5,81
+2,0
+2,81
+6,0
+5,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+5,0
+5,81
+4,0
+2,81
+7,0
+2,81
+0
+4,81
+5,0
+2,81
+3,0
+6,81
+0
+5,81
+4,0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+5,81
+2,0
+4,81
+3,0
+2,81
+0
+3,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+3,81
+6,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+4,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+2,81
+0
+2,81
+4,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+5,81
+3,0
+4,81
+3,0
+5,81
+0
+6,81
+2,0
+2,81
+5,0
+5,81
+0
+2,81
+2,0
+2,81
+0
+6,81
+5,0
+2,81
+0
+2,81
+3,0
+81
+0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+42,0
+2,81
+2,0
+2,81
+5f,0
+4,81
+1a4a,0
+100 90 32
+4b3,0
+4,a3
+2,0
+2,a3
+6,0
+4,a3
+6,0
+2,a3
+0
+6,a3
+3,0
+3,a3
+3,0
+4,a3
+2,0
+2,a3
+5,0
+6,a3
+5,0
+2,a3
+0
+2,a3
+3,0
+a3
+2,0
+3,a3
+3,0
+a3
+4,0
+a3
+a,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+5,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+7,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+a,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+9,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+5,0
+2,a3
+7,0
+2,a3
+a,0
+2,a3
+0
+2,a3
+4,0
+2,a3
+3,0
+6,a3
+a,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+2,0
+2,a3
+6,0
+5,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+5,0
+5,a3
+4,0
+2,a3
+7,0
+2,a3
+0
+4,a3
+5,0
+2,a3
+3,0
+6,a3
+0
+5,a3
+4,0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+2,0
+4,a3
+3,0
+2,a3
+0
+3,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+3,a3
+6,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+4,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+2,a3
+0
+2,a3
+4,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+3,0
+4,a3
+3,0
+5,a3
+0
+6,a3
+2,0
+2,a3
+5,0
+5,a3
+0
+2,a3
+2,0
+2,a3
+0
+6,a3
+5,0
+2,a3
+0
+2,a3
+3,0
+a3
+0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+42,0
+2,a3
+2,0
+2,a3
+5f,0
+4,a3
+1a4a,0
+100 90 32
+4b3,0
+4,ff
+2,0
+2,ff
+6,0
+4,ff
+6,0
+2,ff
+0
+6,ff
+3,0
+3,ff
+3,0
+4,ff
+2,0
+2,ff
+5,0
+6,ff
+5,0
+2,ff
+0
+2,ff
+3,0
+ff
+2,0
+3,ff
+3,0
+ff
+4,0
+ff
+a,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+5,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+7,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+a,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+9,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+5,0
+2,ff
+7,0
+2,ff
+a,0
+2,ff
+0
+2,ff
+4,0
+2,ff
+3,0
+6,ff
+a,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+2,0
+2,ff
+6,0
+5,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+5,0
+5,ff
+4,0
+2,ff
+7,0
+2,ff
+0
+4,ff
+5,0
+2,ff
+3,0
+6,ff
+0
+5,ff
+4,0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+2,0
+4,ff
+3,0
+2,ff
+0
+3,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+3,ff
+6,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+4,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+2,ff
+0
+2,ff
+4,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+3,0
+4,ff
+3,0
+5,ff
+0
+6,ff
+2,0
+2,ff
+5,0
+5,ff
+0
+2,ff
+2,0
+2,ff
+0
+6,ff
+5,0
+2,ff
+0
+2,ff
+3,0
+ff
+0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+42,0
+2,ff
+2,0
+2,ff
+5f,0
+4,ff
+1a4a,0
+100 90 32
+4b3,0
+4,100
+2,0
+2,100
+6,0
+4,100
+6,0
+2,100
+0
+6,100
+3,0
+3,100
+3,0
+4,100
+2,0
+2,100
+5,0
+6,100
+5,0
+2,100
+0
+2,100
+3,0
+100
+2,0
+3,100
+3,0
+100
+4,0
+100
+a,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+5,0
+2,100
+0
+2,100
+6,0
+2,100
+0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+7,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+3,0
+2,100
+2,0
+2,100
+a,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+9,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+5,0
+2,100
+7,0
+2,100
+a,0
+2,100
+0
+2,100
+4,0
+2,100
+3,0
+6,100
+a,0
+2,100
+2,0
+2,100
+0
+5,100
+2,0
+2,100
+6,0
+5,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+5,0
+5,100
+4,0
+2,100
+7,0
+2,100
+0
+4,100
+5,0
+2,100
+3,0
+6,100
+0
+5,100
+4,0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+5,100
+2,0
+4,100
+3,0
+2,100
+0
+3,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+3,100
+6,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+4,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+2,100
+0
+2,100
+4,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+5,100
+3,0
+4,100
+3,0
+5,100
+0
+6,100
+2,0
+2,100
+5,0
+5,100
+0
+2,100
+2,0
+2,100
+0
+6,100
+5,0
+2,100
+0
+2,100
+3,0
+100
+0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+42,0
+2,100
+2,0
+2,100
+5f,0
+4,100
+1a4a,0
+100 90 32
+4b3,0
+4,12c
+2,0
+2,12c
+6,0
+4,12c
+6,0
+2,12c
+0
+6,12c
+3,0
+3,12c
+3,0
+4,12c
+2,0
+2,12c
+5,0
+6,12c
+5,0
+2,12c
+0
+2,12c
+3,0
+12c
+2,0
+3,12c
+3,0
+12c
+4,0
+12c
+a,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+5,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+7,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+a,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+9,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+5,0
+2,12c
+7,0
+2,12c
+a,0
+2,12c
+0
+2,12c
+4,0
+2,12c
+3,0
+6,12c
+a,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+2,0
+2,12c
+6,0
+5,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+5,0
+5,12c
+4,0
+2,12c
+7,0
+2,12c
+0
+4,12c
+5,0
+2,12c
+3,0
+6,12c
+0
+5,12c
+4,0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+2,0
+4,12c
+3,0
+2,12c
+0
+3,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+3,12c
+6,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+4,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+2,12c
+0
+2,12c
+4,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+3,0
+4,12c
+3,0
+5,12c
+0
+6,12c
+2,0
+2,12c
+5,0
+5,12c
+0
+2,12c
+2,0
+2,12c
+0
+6,12c
+5,0
+2,12c
+0
+2,12c
+3,0
+12c
+0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+42,0
+2,12c
+2,0
+2,12c
+5f,0
+4,12c
+1a4a,0
+100 90 32
+4b3,0
+4,3e8
+2,0
+2,3e8
+6,0
+4,3e8
+6,0
+2,3e8
+0
+6,3e8
+3,0
+3,3e8
+3,0
+4,3e8
+2,0
+2,3e8
+5,0
+6,3e8
+5,0
+2,3e8
+0
+2,3e8
+3,0
+3e8
+2,0
+3,3e8
+3,0
+3e8
+4,0
+3e8
+a,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+5,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+7,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+a,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+9,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+5,0
+2,3e8
+7,0
+2,3e8
+a,0
+2,3e8
+0
+2,3e8
+4,0
+2,3e8
+3,0
+6,3e8
+a,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+2,0
+2,3e8
+6,0
+5,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+5,0
+5,3e8
+4,0
+2,3e8
+7,0
+2,3e8
+0
+4,3e8
+5,0
+2,3e8
+3,0
+6,3e8
+0
+5,3e8
+4,0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+2,0
+4,3e8
+3,0
+2,3e8
+0
+3,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+3,3e8
+6,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+4,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+2,3e8
+0
+2,3e8
+4,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+3,0
+4,3e8
+3,0
+5,3e8
+0
+6,3e8
+2,0
+2,3e8
+5,0
+5,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+6,3e8
+5,0
+2,3e8
+0
+2,3e8
+3,0
+3e8
+0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+42,0
+2,3e8
+2,0
+2,3e8
+5f,0
+4,3e8
+1a4a,0
+100 90 32
+4b3,0
+4,111111
+2,0
+2,111111
+6,0
+4,111111
+6,0
+2,111111
+0
+6,111111
+3,0
+3,111111
+3,0
+4,111111
+2,0
+2,111111
+5,0
+6,111111
+5,0
+2,111111
+0
+2,111111
+3,0
+111111
+2,0
+3,111111
+3,0
+111111
+4,0
+111111
+a,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+5,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+7,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+a,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+9,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+5,0
+2,111111
+7,0
+2,111111
+a,0
+2,111111
+0
+2,111111
+4,0
+2,111111
+3,0
+6,111111
+a,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+2,0
+2,111111
+6,0
+5,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+5,0
+5,111111
+4,0
+2,111111
+7,0
+2,111111
+0
+4,111111
+5,0
+2,111111
+3,0
+6,111111
+0
+5,111111
+4,0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+2,0
+4,111111
+3,0
+2,111111
+0
+3,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+3,111111
+6,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+4,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+2,111111
+0
+2,111111
+4,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+3,0
+4,111111
+3,0
+5,111111
+0
+6,111111
+2,0
+2,111111
+5,0
+5,111111
+0
+2,111111
+2,0
+2,111111
+0
+6,111111
+5,0
+2,111111
+0
+2,111111
+3,0
+111111
+0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+42,0
+2,111111
+2,0
+2,111111
+5f,0
+4,111111
+1a4a,0
+100 90 32
+4b3,0
+4,400200
+2,0
+2,400200
+6,0
+4,400200
+6,0
+2,400200
+0
+6,400200
+3,0
+3,400200
+3,0
+4,400200
+2,0
+2,400200
+5,0
+6,400200
+5,0
+2,400200
+0
+2,400200
+3,0
+400200
+2,0
+3,400200
+3,0
+400200
+4,0
+400200
+a,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+5,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+7,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+a,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+9,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+5,0
+2,400200
+7,0
+2,400200
+a,0
+2,400200
+0
+2,400200
+4,0
+2,400200
+3,0
+6,400200
+a,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+2,0
+2,400200
+6,0
+5,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+5,0
+5,400200
+4,0
+2,400200
+7,0
+2,400200
+0
+4,400200
+5,0
+2,400200
+3,0
+6,400200
+0
+5,400200
+4,0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+2,0
+4,400200
+3,0
+2,400200
+0
+3,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+3,400200
+6,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+4,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+2,400200
+0
+2,400200
+4,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+3,0
+4,400200
+3,0
+5,400200
+0
+6,400200
+2,0
+2,400200
+5,0
+5,400200
+0
+2,400200
+2,0
+2,400200
+0
+6,400200
+5,0
+2,400200
+0
+2,400200
+3,0
+400200
+0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+42,0
+2,400200
+2,0
+2,400200
+5f,0
+4,400200
+1a4a,0
+100 90 32
+4b3,0
+4,777777
+2,0
+2,777777
+6,0
+4,777777
+6,0
+2,777777
+0
+6,777777
+3,0
+3,777777
+3,0
+4,777777
+2,0
+2,777777
+5,0
+6,777777
+5,0
+2,777777
+0
+2,777777
+3,0
+777777
+2,0
+3,777777
+3,0
+777777
+4,0
+777777
+a,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+5,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+7,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+a,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+9,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+5,0
+2,777777
+7,0
+2,777777
+a,0
+2,777777
+0
+2,777777
+4,0
+2,777777
+3,0
+6,777777
+a,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+2,0
+2,777777
+6,0
+5,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+5,0
+5,777777
+4,0
+2,777777
+7,0
+2,777777
+0
+4,777777
+5,0
+2,777777
+3,0
+6,777777
+0
+5,777777
+4,0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+2,0
+4,777777
+3,0
+2,777777
+0
+3,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+3,777777
+6,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+4,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+2,777777
+0
+2,777777
+4,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+3,0
+4,777777
+3,0
+5,777777
+0
+6,777777
+2,0
+2,777777
+5,0
+5,777777
+0
+2,777777
+2,0
+2,777777
+0
+6,777777
+5,0
+2,777777
+0
+2,777777
+3,0
+777777
+0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+42,0
+2,777777
+2,0
+2,777777
+5f,0
+4,777777
+1a4a,0
+100 90 32
+4b3,0
+4,1
+2,0
+2,1
+6,0
+4,1
+6,0
+2,1
+0
+6,1
+3,0
+3,1
+3,0
+4,1
+2,0
+2,1
+5,0
+6,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+2,0
+3,1
+3,0
+1
+4,0
+1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+6,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+9,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+a,0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+6,1
+a,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+2,1
+6,0
+5,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+5,1
+4,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+6,1
+0
+5,1
+4,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+4,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+3,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+4,1
+3,0
+5,1
+0
+6,1
+2,0
+2,1
+5,0
+5,1
+0
+2,1
+2,0
+2,1
+0
+6,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+42,0
+2,1
+2,0
+2,1
+5f,0
+4,1
+1a4a,0
+100 90 32
+4b3,0
+4,2
+2,0
+2,2
+6,0
+4,2
+6,0
+2,2
+0
+6,2
+3,0
+3,2
+3,0
+4,2
+2,0
+2,2
+5,0
+6,2
+5,0
+2,2
+0
+2,2
+3,0
+2
+2,0
+3,2
+3,0
+2
+4,0
+2
+a,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+5,0
+2,2
+0
+2,2
+6,0
+2,2
+0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+7,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+3,0
+2,2
+2,0
+2,2
+a,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+9,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+5,0
+2,2
+7,0
+2,2
+a,0
+2,2
+0
+2,2
+4,0
+2,2
+3,0
+6,2
+a,0
+2,2
+2,0
+2,2
+0
+5,2
+2,0
+2,2
+6,0
+5,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+5,0
+5,2
+4,0
+2,2
+7,0
+2,2
+0
+4,2
+5,0
+2,2
+3,0
+6,2
+0
+5,2
+4,0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+5,2
+2,0
+4,2
+3,0
+2,2
+0
+3,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+3,2
+6,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+4,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+2,2
+0
+2,2
+4,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+5,2
+3,0
+4,2
+3,0
+5,2
+0
+6,2
+2,0
+2,2
+5,0
+5,2
+0
+2,2
+2,0
+2,2
+0
+6,2
+5,0
+2,2
+0
+2,2
+3,0
+2
+0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+42,0
+2,2
+2,0
+2,2
+5f,0
+4,2
+1a4a,0
+100 90 32
+4b3,0
+4,3
+2,0
+2,3
+6,0
+4,3
+6,0
+2,3
+0
+6,3
+3,0
+3,3
+3,0
+4,3
+2,0
+2,3
+5,0
+6,3
+5,0
+2,3
+0
+2,3
+3,0
+3
+2,0
+3,3
+3,0
+3
+4,0
+3
+a,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+5,0
+2,3
+0
+2,3
+6,0
+2,3
+0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+7,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+3,0
+2,3
+2,0
+2,3
+a,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+9,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+5,0
+2,3
+7,0
+2,3
+a,0
+2,3
+0
+2,3
+4,0
+2,3
+3,0
+6,3
+a,0
+2,3
+2,0
+2,3
+0
+5,3
+2,0
+2,3
+6,0
+5,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+5,0
+5,3
+4,0
+2,3
+7,0
+2,3
+0
+4,3
+5,0
+2,3
+3,0
+6,3
+0
+5,3
+4,0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+5,3
+2,0
+4,3
+3,0
+2,3
+0
+3,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+3,3
+6,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+4,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+2,3
+0
+2,3
+4,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+5,3
+3,0
+4,3
+3,0
+5,3
+0
+6,3
+2,0
+2,3
+5,0
+5,3
+0
+2,3
+2,0
+2,3
+0
+6,3
+5,0
+2,3
+0
+2,3
+3,0
+3
+0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+42,0
+2,3
+2,0
+2,3
+5f,0
+4,3
+1a4a,0
+100 90 32
+4b3,0
+4,4
+2,0
+2,4
+6,0
+4,4
+6,0
+2,4
+0
+6,4
+3,0
+3,4
+3,0
+4,4
+2,0
+2,4
+5,0
+6,4
+5,0
+2,4
+0
+2,4
+3,0
+4
+2,0
+3,4
+3,0
+4
+4,0
+4
+a,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+5,0
+2,4
+0
+2,4
+6,0
+2,4
+0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+7,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+3,0
+2,4
+2,0
+2,4
+a,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+9,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+5,0
+2,4
+7,0
+2,4
+a,0
+2,4
+0
+2,4
+4,0
+2,4
+3,0
+6,4
+a,0
+2,4
+2,0
+2,4
+0
+5,4
+2,0
+2,4
+6,0
+5,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+5,0
+5,4
+4,0
+2,4
+7,0
+2,4
+0
+4,4
+5,0
+2,4
+3,0
+6,4
+0
+5,4
+4,0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+5,4
+2,0
+4,4
+3,0
+2,4
+0
+3,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+3,4
+6,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+4,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+2,4
+0
+2,4
+4,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+5,4
+3,0
+4,4
+3,0
+5,4
+0
+6,4
+2,0
+2,4
+5,0
+5,4
+0
+2,4
+2,0
+2,4
+0
+6,4
+5,0
+2,4
+0
+2,4
+3,0
+4
+0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+42,0
+2,4
+2,0
+2,4
+5f,0
+4,4
+1a4a,0
+100 90 32
+4b3,0
+4,6
+2,0
+2,6
+6,0
+4,6
+6,0
+2,6
+0
+6,6
+3,0
+3,6
+3,0
+4,6
+2,0
+2,6
+5,0
+6,6
+5,0
+2,6
+0
+2,6
+3,0
+6
+2,0
+3,6
+3,0
+6
+4,0
+6
+a,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+5,0
+2,6
+0
+2,6
+6,0
+2,6
+0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+7,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+3,0
+2,6
+2,0
+2,6
+a,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+9,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+5,0
+2,6
+7,0
+2,6
+a,0
+2,6
+0
+2,6
+4,0
+2,6
+3,0
+6,6
+a,0
+2,6
+2,0
+2,6
+0
+5,6
+2,0
+2,6
+6,0
+5,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+5,0
+5,6
+4,0
+2,6
+7,0
+2,6
+0
+4,6
+5,0
+2,6
+3,0
+6,6
+0
+5,6
+4,0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+5,6
+2,0
+4,6
+3,0
+2,6
+0
+3,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+3,6
+6,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+4,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+2,6
+0
+2,6
+4,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+5,6
+3,0
+4,6
+3,0
+5,6
+0
+6,6
+2,0
+2,6
+5,0
+5,6
+0
+2,6
+2,0
+2,6
+0
+6,6
+5,0
+2,6
+0
+2,6
+3,0
+6
+0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+42,0
+2,6
+2,0
+2,6
+5f,0
+4,6
+1a4a,0
+100 90 32
+4b3,0
+4,7
+2,0
+2,7
+6,0
+4,7
+6,0
+2,7
+0
+6,7
+3,0
+3,7
+3,0
+4,7
+2,0
+2,7
+5,0
+6,7
+5,0
+2,7
+0
+2,7
+3,0
+7
+2,0
+3,7
+3,0
+7
+4,0
+7
+a,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+5,0
+2,7
+0
+2,7
+6,0
+2,7
+0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+7,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+3,0
+2,7
+2,0
+2,7
+a,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+9,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+5,0
+2,7
+7,0
+2,7
+a,0
+2,7
+0
+2,7
+4,0
+2,7
+3,0
+6,7
+a,0
+2,7
+2,0
+2,7
+0
+5,7
+2,0
+2,7
+6,0
+5,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+5,0
+5,7
+4,0
+2,7
+7,0
+2,7
+0
+4,7
+5,0
+2,7
+3,0
+6,7
+0
+5,7
+4,0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+5,7
+2,0
+4,7
+3,0
+2,7
+0
+3,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+3,7
+6,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+4,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+2,7
+0
+2,7
+4,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+5,7
+3,0
+4,7
+3,0
+5,7
+0
+6,7
+2,0
+2,7
+5,0
+5,7
+0
+2,7
+2,0
+2,7
+0
+6,7
+5,0
+2,7
+0
+2,7
+3,0
+7
+0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+42,0
+2,7
+2,0
+2,7
+5f,0
+4,7
+1a4a,0
+100 90 32
+4b3,0
+4,10
+2,0
+2,10
+6,0
+4,10
+6,0
+2,10
+0
+6,10
+3,0
+3,10
+3,0
+4,10
+2,0
+2,10
+5,0
+6,10
+5,0
+2,10
+0
+2,10
+3,0
+10
+2,0
+3,10
+3,0
+10
+4,0
+10
+a,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+5,0
+2,10
+0
+2,10
+6,0
+2,10
+0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+7,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+3,0
+2,10
+2,0
+2,10
+a,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+9,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+5,0
+2,10
+7,0
+2,10
+a,0
+2,10
+0
+2,10
+4,0
+2,10
+3,0
+6,10
+a,0
+2,10
+2,0
+2,10
+0
+5,10
+2,0
+2,10
+6,0
+5,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+5,0
+5,10
+4,0
+2,10
+7,0
+2,10
+0
+4,10
+5,0
+2,10
+3,0
+6,10
+0
+5,10
+4,0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+5,10
+2,0
+4,10
+3,0
+2,10
+0
+3,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+3,10
+6,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+4,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+2,10
+0
+2,10
+4,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+5,10
+3,0
+4,10
+3,0
+5,10
+0
+6,10
+2,0
+2,10
+5,0
+5,10
+0
+2,10
+2,0
+2,10
+0
+6,10
+5,0
+2,10
+0
+2,10
+3,0
+10
+0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+42,0
+2,10
+2,0
+2,10
+5f,0
+4,10
+1a4a,0
+100 90 32
+4b3,0
+4,33
+2,0
+2,33
+6,0
+4,33
+6,0
+2,33
+0
+6,33
+3,0
+3,33
+3,0
+4,33
+2,0
+2,33
+5,0
+6,33
+5,0
+2,33
+0
+2,33
+3,0
+33
+2,0
+3,33
+3,0
+33
+4,0
+33
+a,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+5,0
+2,33
+0
+2,33
+6,0
+2,33
+0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+7,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+3,0
+2,33
+2,0
+2,33
+a,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+9,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+5,0
+2,33
+7,0
+2,33
+a,0
+2,33
+0
+2,33
+4,0
+2,33
+3,0
+6,33
+a,0
+2,33
+2,0
+2,33
+0
+5,33
+2,0
+2,33
+6,0
+5,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+5,0
+5,33
+4,0
+2,33
+7,0
+2,33
+0
+4,33
+5,0
+2,33
+3,0
+6,33
+0
+5,33
+4,0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+5,33
+2,0
+4,33
+3,0
+2,33
+0
+3,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+3,33
+6,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+4,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+2,33
+0
+2,33
+4,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+5,33
+3,0
+4,33
+3,0
+5,33
+0
+6,33
+2,0
+2,33
+5,0
+5,33
+0
+2,33
+2,0
+2,33
+0
+6,33
+5,0
+2,33
+0
+2,33
+3,0
+33
+0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+42,0
+2,33
+2,0
+2,33
+5f,0
+4,33
+1a4a,0
+100 90 32
+4b3,0
+4,81
+2,0
+2,81
+6,0
+4,81
+6,0
+2,81
+0
+6,81
+3,0
+3,81
+3,0
+4,81
+2,0
+2,81
+5,0
+6,81
+5,0
+2,81
+0
+2,81
+3,0
+81
+2,0
+3,81
+3,0
+81
+4,0
+81
+a,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+5,0
+2,81
+0
+2,81
+6,0
+2,81
+0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+7,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+3,0
+2,81
+2,0
+2,81
+a,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+9,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+5,0
+2,81
+7,0
+2,81
+a,0
+2,81
+0
+2,81
+4,0
+2,81
+3,0
+6,81
+a,0
+2,81
+2,0
+2,81
+0
+5,81
+2,0
+2,81
+6,0
+5,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+5,0
+5,81
+4,0
+2,81
+7,0
+2,81
+0
+4,81
+5,0
+2,81
+3,0
+6,81
+0
+5,81
+4,0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+5,81
+2,0
+4,81
+3,0
+2,81
+0
+3,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+3,81
+6,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+4,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+2,81
+0
+2,81
+4,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+5,81
+3,0
+4,81
+3,0
+5,81
+0
+6,81
+2,0
+2,81
+5,0
+5,81
+0
+2,81
+2,0
+2,81
+0
+6,81
+5,0
+2,81
+0
+2,81
+3,0
+81
+0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+42,0
+2,81
+2,0
+2,81
+5f,0
+4,81
+1a4a,0
+100 90 32
+4b3,0
+4,a3
+2,0
+2,a3
+6,0
+4,a3
+6,0
+2,a3
+0
+6,a3
+3,0
+3,a3
+3,0
+4,a3
+2,0
+2,a3
+5,0
+6,a3
+5,0
+2,a3
+0
+2,a3
+3,0
+a3
+2,0
+3,a3
+3,0
+a3
+4,0
+a3
+a,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+5,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+7,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+a,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+9,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+5,0
+2,a3
+7,0
+2,a3
+a,0
+2,a3
+0
+2,a3
+4,0
+2,a3
+3,0
+6,a3
+a,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+2,0
+2,a3
+6,0
+5,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+5,0
+5,a3
+4,0
+2,a3
+7,0
+2,a3
+0
+4,a3
+5,0
+2,a3
+3,0
+6,a3
+0
+5,a3
+4,0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+2,0
+4,a3
+3,0
+2,a3
+0
+3,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+3,a3
+6,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+4,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+2,a3
+0
+2,a3
+4,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+3,0
+4,a3
+3,0
+5,a3
+0
+6,a3
+2,0
+2,a3
+5,0
+5,a3
+0
+2,a3
+2,0
+2,a3
+0
+6,a3
+5,0
+2,a3
+0
+2,a3
+3,0
+a3
+0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+42,0
+2,a3
+2,0
+2,a3
+5f,0
+4,a3
+1a4a,0
+100 90 32
+4b3,0
+4,ff
+2,0
+2,ff
+6,0
+4,ff
+6,0
+2,ff
+0
+6,ff
+3,0
+3,ff
+3,0
+4,ff
+2,0
+2,ff
+5,0
+6,ff
+5,0
+2,ff
+0
+2,ff
+3,0
+ff
+2,0
+3,ff
+3,0
+ff
+4,0
+ff
+a,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+5,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+7,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+a,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+9,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+5,0
+2,ff
+7,0
+2,ff
+a,0
+2,ff
+0
+2,ff
+4,0
+2,ff
+3,0
+6,ff
+a,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+2,0
+2,ff
+6,0
+5,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+5,0
+5,ff
+4,0
+2,ff
+7,0
+2,ff
+0
+4,ff
+5,0
+2,ff
+3,0
+6,ff
+0
+5,ff
+4,0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+2,0
+4,ff
+3,0
+2,ff
+0
+3,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+3,ff
+6,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+4,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+2,ff
+0
+2,ff
+4,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+3,0
+4,ff
+3,0
+5,ff
+0
+6,ff
+2,0
+2,ff
+5,0
+5,ff
+0
+2,ff
+2,0
+2,ff
+0
+6,ff
+5,0
+2,ff
+0
+2,ff
+3,0
+ff
+0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+42,0
+2,ff
+2,0
+2,ff
+5f,0
+4,ff
+1a4a,0
+100 90 32
+4b3,0
+4,100
+2,0
+2,100
+6,0
+4,100
+6,0
+2,100
+0
+6,100
+3,0
+3,100
+3,0
+4,100
+2,0
+2,100
+5,0
+6,100
+5,0
+2,100
+0
+2,100
+3,0
+100
+2,0
+3,100
+3,0
+100
+4,0
+100
+a,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+5,0
+2,100
+0
+2,100
+6,0
+2,100
+0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+7,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+3,0
+2,100
+2,0
+2,100
+a,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+9,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+5,0
+2,100
+7,0
+2,100
+a,0
+2,100
+0
+2,100
+4,0
+2,100
+3,0
+6,100
+a,0
+2,100
+2,0
+2,100
+0
+5,100
+2,0
+2,100
+6,0
+5,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+5,0
+5,100
+4,0
+2,100
+7,0
+2,100
+0
+4,100
+5,0
+2,100
+3,0
+6,100
+0
+5,100
+4,0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+5,100
+2,0
+4,100
+3,0
+2,100
+0
+3,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+3,100
+6,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+4,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+2,100
+0
+2,100
+4,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+5,100
+3,0
+4,100
+3,0
+5,100
+0
+6,100
+2,0
+2,100
+5,0
+5,100
+0
+2,100
+2,0
+2,100
+0
+6,100
+5,0
+2,100
+0
+2,100
+3,0
+100
+0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+42,0
+2,100
+2,0
+2,100
+5f,0
+4,100
+1a4a,0
+100 90 32
+4b3,0
+4,12c
+2,0
+2,12c
+6,0
+4,12c
+6,0
+2,12c
+0
+6,12c
+3,0
+3,12c
+3,0
+4,12c
+2,0
+2,12c
+5,0
+6,12c
+5,0
+2,12c
+0
+2,12c
+3,0
+12c
+2,0
+3,12c
+3,0
+12c
+4,0
+12c
+a,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+5,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+7,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+a,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+9,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+5,0
+2,12c
+7,0
+2,12c
+a,0
+2,12c
+0
+2,12c
+4,0
+2,12c
+3,0
+6,12c
+a,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+2,0
+2,12c
+6,0
+5,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+5,0
+5,12c
+4,0
+2,12c
+7,0
+2,12c
+0
+4,12c
+5,0
+2,12c
+3,0
+6,12c
+0
+5,12c
+4,0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+2,0
+4,12c
+3,0
+2,12c
+0
+3,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+3,12c
+6,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+4,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+2,12c
+0
+2,12c
+4,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+3,0
+4,12c
+3,0
+5,12c
+0
+6,12c
+2,0
+2,12c
+5,0
+5,12c
+0
+2,12c
+2,0
+2,12c
+0
+6,12c
+5,0
+2,12c
+0
+2,12c
+3,0
+12c
+0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+42,0
+2,12c
+2,0
+2,12c
+5f,0
+4,12c
+1a4a,0
+100 90 32
+4b3,0
+4,3e8
+2,0
+2,3e8
+6,0
+4,3e8
+6,0
+2,3e8
+0
+6,3e8
+3,0
+3,3e8
+3,0
+4,3e8
+2,0
+2,3e8
+5,0
+6,3e8
+5,0
+2,3e8
+0
+2,3e8
+3,0
+3e8
+2,0
+3,3e8
+3,0
+3e8
+4,0
+3e8
+a,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+5,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+7,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+a,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+9,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+5,0
+2,3e8
+7,0
+2,3e8
+a,0
+2,3e8
+0
+2,3e8
+4,0
+2,3e8
+3,0
+6,3e8
+a,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+2,0
+2,3e8
+6,0
+5,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+5,0
+5,3e8
+4,0
+2,3e8
+7,0
+2,3e8
+0
+4,3e8
+5,0
+2,3e8
+3,0
+6,3e8
+0
+5,3e8
+4,0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+2,0
+4,3e8
+3,0
+2,3e8
+0
+3,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+3,3e8
+6,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+4,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+2,3e8
+0
+2,3e8
+4,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+3,0
+4,3e8
+3,0
+5,3e8
+0
+6,3e8
+2,0
+2,3e8
+5,0
+5,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+6,3e8
+5,0
+2,3e8
+0
+2,3e8
+3,0
+3e8
+0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+42,0
+2,3e8
+2,0
+2,3e8
+5f,0
+4,3e8
+1a4a,0
+100 90 32
+4b3,0
+4,111111
+2,0
+2,111111
+6,0
+4,111111
+6,0
+2,111111
+0
+6,111111
+3,0
+3,111111
+3,0
+4,111111
+2,0
+2,111111
+5,0
+6,111111
+5,0
+2,111111
+0
+2,111111
+3,0
+111111
+2,0
+3,111111
+3,0
+111111
+4,0
+111111
+a,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+5,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+7,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+a,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+9,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+5,0
+2,111111
+7,0
+2,111111
+a,0
+2,111111
+0
+2,111111
+4,0
+2,111111
+3,0
+6,111111
+a,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+2,0
+2,111111
+6,0
+5,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+5,0
+5,111111
+4,0
+2,111111
+7,0
+2,111111
+0
+4,111111
+5,0
+2,111111
+3,0
+6,111111
+0
+5,111111
+4,0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+2,0
+4,111111
+3,0
+2,111111
+0
+3,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+3,111111
+6,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+4,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+2,111111
+0
+2,111111
+4,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+3,0
+4,111111
+3,0
+5,111111
+0
+6,111111
+2,0
+2,111111
+5,0
+5,111111
+0
+2,111111
+2,0
+2,111111
+0
+6,111111
+5,0
+2,111111
+0
+2,111111
+3,0
+111111
+0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+42,0
+2,111111
+2,0
+2,111111
+5f,0
+4,111111
+1a4a,0
+100 90 32
+4b3,0
+4,400200
+2,0
+2,400200
+6,0
+4,400200
+6,0
+2,400200
+0
+6,400200
+3,0
+3,400200
+3,0
+4,400200
+2,0
+2,400200
+5,0
+6,400200
+5,0
+2,400200
+0
+2,400200
+3,0
+400200
+2,0
+3,400200
+3,0
+400200
+4,0
+400200
+a,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+5,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+7,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+a,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+9,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+5,0
+2,400200
+7,0
+2,400200
+a,0
+2,400200
+0
+2,400200
+4,0
+2,400200
+3,0
+6,400200
+a,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+2,0
+2,400200
+6,0
+5,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+5,0
+5,400200
+4,0
+2,400200
+7,0
+2,400200
+0
+4,400200
+5,0
+2,400200
+3,0
+6,400200
+0
+5,400200
+4,0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+2,0
+4,400200
+3,0
+2,400200
+0
+3,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+3,400200
+6,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+4,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+2,400200
+0
+2,400200
+4,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+3,0
+4,400200
+3,0
+5,400200
+0
+6,400200
+2,0
+2,400200
+5,0
+5,400200
+0
+2,400200
+2,0
+2,400200
+0
+6,400200
+5,0
+2,400200
+0
+2,400200
+3,0
+400200
+0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+42,0
+2,400200
+2,0
+2,400200
+5f,0
+4,400200
+1a4a,0
+100 90 32
+4b3,0
+4,777777
+2,0
+2,777777
+6,0
+4,777777
+6,0
+2,777777
+0
+6,777777
+3,0
+3,777777
+3,0
+4,777777
+2,0
+2,777777
+5,0
+6,777777
+5,0
+2,777777
+0
+2,777777
+3,0
+777777
+2,0
+3,777777
+3,0
+777777
+4,0
+777777
+a,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+5,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+7,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+a,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+9,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+5,0
+2,777777
+7,0
+2,777777
+a,0
+2,777777
+0
+2,777777
+4,0
+2,777777
+3,0
+6,777777
+a,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+2,0
+2,777777
+6,0
+5,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+5,0
+5,777777
+4,0
+2,777777
+7,0
+2,777777
+0
+4,777777
+5,0
+2,777777
+3,0
+6,777777
+0
+5,777777
+4,0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+2,0
+4,777777
+3,0
+2,777777
+0
+3,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+3,777777
+6,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+4,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+2,777777
+0
+2,777777
+4,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+3,0
+4,777777
+3,0
+5,777777
+0
+6,777777
+2,0
+2,777777
+5,0
+5,777777
+0
+2,777777
+2,0
+2,777777
+0
+6,777777
+5,0
+2,777777
+0
+2,777777
+3,0
+777777
+0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+42,0
+2,777777
+2,0
+2,777777
+5f,0
+4,777777
+1a4a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr/a37.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr/a37.dat
new file mode 100644
index 000000000..e8fd2852a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr/a37.dat
@@ -0,0 +1,11699 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+4b3,0
+4,1
+2,0
+2,1
+6,0
+4,1
+6,0
+2,1
+0
+6,1
+3,0
+3,1
+3,0
+4,1
+2,0
+2,1
+5,0
+6,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+2,0
+3,1
+3,0
+1
+4,0
+1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+6,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+9,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+a,0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+6,1
+a,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+2,1
+6,0
+5,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+5,1
+4,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+6,1
+0
+5,1
+4,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+4,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+3,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+4,1
+3,0
+5,1
+0
+6,1
+2,0
+2,1
+5,0
+5,1
+0
+2,1
+2,0
+2,1
+0
+6,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+42,0
+2,1
+2,0
+2,1
+5f,0
+4,1
+1a4a,0
+100 90 32
+4b3,0
+4,2
+2,0
+2,2
+6,0
+4,2
+6,0
+2,2
+0
+6,2
+3,0
+3,2
+3,0
+4,2
+2,0
+2,2
+5,0
+6,2
+5,0
+2,2
+0
+2,2
+3,0
+2
+2,0
+3,2
+3,0
+2
+4,0
+2
+a,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+5,0
+2,2
+0
+2,2
+6,0
+2,2
+0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+7,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+3,0
+2,2
+2,0
+2,2
+a,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+9,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+5,0
+2,2
+7,0
+2,2
+a,0
+2,2
+0
+2,2
+4,0
+2,2
+3,0
+6,2
+a,0
+2,2
+2,0
+2,2
+0
+5,2
+2,0
+2,2
+6,0
+5,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+5,0
+5,2
+4,0
+2,2
+7,0
+2,2
+0
+4,2
+5,0
+2,2
+3,0
+6,2
+0
+5,2
+4,0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+5,2
+2,0
+4,2
+3,0
+2,2
+0
+3,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+3,2
+6,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+4,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+2,2
+0
+2,2
+4,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+5,2
+3,0
+4,2
+3,0
+5,2
+0
+6,2
+2,0
+2,2
+5,0
+5,2
+0
+2,2
+2,0
+2,2
+0
+6,2
+5,0
+2,2
+0
+2,2
+3,0
+2
+0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+42,0
+2,2
+2,0
+2,2
+5f,0
+4,2
+1a4a,0
+100 90 32
+4b3,0
+4,3
+2,0
+2,3
+6,0
+4,3
+6,0
+2,3
+0
+6,3
+3,0
+3,3
+3,0
+4,3
+2,0
+2,3
+5,0
+6,3
+5,0
+2,3
+0
+2,3
+3,0
+3
+2,0
+3,3
+3,0
+3
+4,0
+3
+a,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+5,0
+2,3
+0
+2,3
+6,0
+2,3
+0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+7,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+3,0
+2,3
+2,0
+2,3
+a,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+9,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+5,0
+2,3
+7,0
+2,3
+a,0
+2,3
+0
+2,3
+4,0
+2,3
+3,0
+6,3
+a,0
+2,3
+2,0
+2,3
+0
+5,3
+2,0
+2,3
+6,0
+5,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+5,0
+5,3
+4,0
+2,3
+7,0
+2,3
+0
+4,3
+5,0
+2,3
+3,0
+6,3
+0
+5,3
+4,0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+5,3
+2,0
+4,3
+3,0
+2,3
+0
+3,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+3,3
+6,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+4,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+2,3
+0
+2,3
+4,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+5,3
+3,0
+4,3
+3,0
+5,3
+0
+6,3
+2,0
+2,3
+5,0
+5,3
+0
+2,3
+2,0
+2,3
+0
+6,3
+5,0
+2,3
+0
+2,3
+3,0
+3
+0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+42,0
+2,3
+2,0
+2,3
+5f,0
+4,3
+1a4a,0
+100 90 32
+4b3,0
+4,4
+2,0
+2,4
+6,0
+4,4
+6,0
+2,4
+0
+6,4
+3,0
+3,4
+3,0
+4,4
+2,0
+2,4
+5,0
+6,4
+5,0
+2,4
+0
+2,4
+3,0
+4
+2,0
+3,4
+3,0
+4
+4,0
+4
+a,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+5,0
+2,4
+0
+2,4
+6,0
+2,4
+0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+7,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+3,0
+2,4
+2,0
+2,4
+a,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+9,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+5,0
+2,4
+7,0
+2,4
+a,0
+2,4
+0
+2,4
+4,0
+2,4
+3,0
+6,4
+a,0
+2,4
+2,0
+2,4
+0
+5,4
+2,0
+2,4
+6,0
+5,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+5,0
+5,4
+4,0
+2,4
+7,0
+2,4
+0
+4,4
+5,0
+2,4
+3,0
+6,4
+0
+5,4
+4,0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+5,4
+2,0
+4,4
+3,0
+2,4
+0
+3,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+3,4
+6,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+4,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+2,4
+0
+2,4
+4,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+5,4
+3,0
+4,4
+3,0
+5,4
+0
+6,4
+2,0
+2,4
+5,0
+5,4
+0
+2,4
+2,0
+2,4
+0
+6,4
+5,0
+2,4
+0
+2,4
+3,0
+4
+0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+42,0
+2,4
+2,0
+2,4
+5f,0
+4,4
+1a4a,0
+100 90 32
+4b3,0
+4,6
+2,0
+2,6
+6,0
+4,6
+6,0
+2,6
+0
+6,6
+3,0
+3,6
+3,0
+4,6
+2,0
+2,6
+5,0
+6,6
+5,0
+2,6
+0
+2,6
+3,0
+6
+2,0
+3,6
+3,0
+6
+4,0
+6
+a,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+5,0
+2,6
+0
+2,6
+6,0
+2,6
+0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+7,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+3,0
+2,6
+2,0
+2,6
+a,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+9,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+5,0
+2,6
+7,0
+2,6
+a,0
+2,6
+0
+2,6
+4,0
+2,6
+3,0
+6,6
+a,0
+2,6
+2,0
+2,6
+0
+5,6
+2,0
+2,6
+6,0
+5,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+5,0
+5,6
+4,0
+2,6
+7,0
+2,6
+0
+4,6
+5,0
+2,6
+3,0
+6,6
+0
+5,6
+4,0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+5,6
+2,0
+4,6
+3,0
+2,6
+0
+3,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+3,6
+6,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+4,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+2,6
+0
+2,6
+4,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+5,6
+3,0
+4,6
+3,0
+5,6
+0
+6,6
+2,0
+2,6
+5,0
+5,6
+0
+2,6
+2,0
+2,6
+0
+6,6
+5,0
+2,6
+0
+2,6
+3,0
+6
+0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+42,0
+2,6
+2,0
+2,6
+5f,0
+4,6
+1a4a,0
+100 90 32
+4b3,0
+4,7
+2,0
+2,7
+6,0
+4,7
+6,0
+2,7
+0
+6,7
+3,0
+3,7
+3,0
+4,7
+2,0
+2,7
+5,0
+6,7
+5,0
+2,7
+0
+2,7
+3,0
+7
+2,0
+3,7
+3,0
+7
+4,0
+7
+a,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+5,0
+2,7
+0
+2,7
+6,0
+2,7
+0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+7,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+3,0
+2,7
+2,0
+2,7
+a,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+9,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+5,0
+2,7
+7,0
+2,7
+a,0
+2,7
+0
+2,7
+4,0
+2,7
+3,0
+6,7
+a,0
+2,7
+2,0
+2,7
+0
+5,7
+2,0
+2,7
+6,0
+5,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+5,0
+5,7
+4,0
+2,7
+7,0
+2,7
+0
+4,7
+5,0
+2,7
+3,0
+6,7
+0
+5,7
+4,0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+5,7
+2,0
+4,7
+3,0
+2,7
+0
+3,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+3,7
+6,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+4,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+2,7
+0
+2,7
+4,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+5,7
+3,0
+4,7
+3,0
+5,7
+0
+6,7
+2,0
+2,7
+5,0
+5,7
+0
+2,7
+2,0
+2,7
+0
+6,7
+5,0
+2,7
+0
+2,7
+3,0
+7
+0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+42,0
+2,7
+2,0
+2,7
+5f,0
+4,7
+1a4a,0
+100 90 32
+4b3,0
+4,10
+2,0
+2,10
+6,0
+4,10
+6,0
+2,10
+0
+6,10
+3,0
+3,10
+3,0
+4,10
+2,0
+2,10
+5,0
+6,10
+5,0
+2,10
+0
+2,10
+3,0
+10
+2,0
+3,10
+3,0
+10
+4,0
+10
+a,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+5,0
+2,10
+0
+2,10
+6,0
+2,10
+0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+7,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+3,0
+2,10
+2,0
+2,10
+a,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+9,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+5,0
+2,10
+7,0
+2,10
+a,0
+2,10
+0
+2,10
+4,0
+2,10
+3,0
+6,10
+a,0
+2,10
+2,0
+2,10
+0
+5,10
+2,0
+2,10
+6,0
+5,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+5,0
+5,10
+4,0
+2,10
+7,0
+2,10
+0
+4,10
+5,0
+2,10
+3,0
+6,10
+0
+5,10
+4,0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+5,10
+2,0
+4,10
+3,0
+2,10
+0
+3,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+3,10
+6,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+4,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+2,10
+0
+2,10
+4,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+5,10
+3,0
+4,10
+3,0
+5,10
+0
+6,10
+2,0
+2,10
+5,0
+5,10
+0
+2,10
+2,0
+2,10
+0
+6,10
+5,0
+2,10
+0
+2,10
+3,0
+10
+0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+42,0
+2,10
+2,0
+2,10
+5f,0
+4,10
+1a4a,0
+100 90 32
+4b3,0
+4,33
+2,0
+2,33
+6,0
+4,33
+6,0
+2,33
+0
+6,33
+3,0
+3,33
+3,0
+4,33
+2,0
+2,33
+5,0
+6,33
+5,0
+2,33
+0
+2,33
+3,0
+33
+2,0
+3,33
+3,0
+33
+4,0
+33
+a,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+5,0
+2,33
+0
+2,33
+6,0
+2,33
+0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+7,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+3,0
+2,33
+2,0
+2,33
+a,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+9,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+5,0
+2,33
+7,0
+2,33
+a,0
+2,33
+0
+2,33
+4,0
+2,33
+3,0
+6,33
+a,0
+2,33
+2,0
+2,33
+0
+5,33
+2,0
+2,33
+6,0
+5,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+5,0
+5,33
+4,0
+2,33
+7,0
+2,33
+0
+4,33
+5,0
+2,33
+3,0
+6,33
+0
+5,33
+4,0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+5,33
+2,0
+4,33
+3,0
+2,33
+0
+3,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+3,33
+6,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+4,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+2,33
+0
+2,33
+4,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+5,33
+3,0
+4,33
+3,0
+5,33
+0
+6,33
+2,0
+2,33
+5,0
+5,33
+0
+2,33
+2,0
+2,33
+0
+6,33
+5,0
+2,33
+0
+2,33
+3,0
+33
+0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+42,0
+2,33
+2,0
+2,33
+5f,0
+4,33
+1a4a,0
+100 90 32
+4b3,0
+4,81
+2,0
+2,81
+6,0
+4,81
+6,0
+2,81
+0
+6,81
+3,0
+3,81
+3,0
+4,81
+2,0
+2,81
+5,0
+6,81
+5,0
+2,81
+0
+2,81
+3,0
+81
+2,0
+3,81
+3,0
+81
+4,0
+81
+a,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+5,0
+2,81
+0
+2,81
+6,0
+2,81
+0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+7,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+3,0
+2,81
+2,0
+2,81
+a,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+9,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+5,0
+2,81
+7,0
+2,81
+a,0
+2,81
+0
+2,81
+4,0
+2,81
+3,0
+6,81
+a,0
+2,81
+2,0
+2,81
+0
+5,81
+2,0
+2,81
+6,0
+5,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+5,0
+5,81
+4,0
+2,81
+7,0
+2,81
+0
+4,81
+5,0
+2,81
+3,0
+6,81
+0
+5,81
+4,0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+5,81
+2,0
+4,81
+3,0
+2,81
+0
+3,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+3,81
+6,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+4,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+2,81
+0
+2,81
+4,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+5,81
+3,0
+4,81
+3,0
+5,81
+0
+6,81
+2,0
+2,81
+5,0
+5,81
+0
+2,81
+2,0
+2,81
+0
+6,81
+5,0
+2,81
+0
+2,81
+3,0
+81
+0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+42,0
+2,81
+2,0
+2,81
+5f,0
+4,81
+1a4a,0
+100 90 32
+4b3,0
+4,a3
+2,0
+2,a3
+6,0
+4,a3
+6,0
+2,a3
+0
+6,a3
+3,0
+3,a3
+3,0
+4,a3
+2,0
+2,a3
+5,0
+6,a3
+5,0
+2,a3
+0
+2,a3
+3,0
+a3
+2,0
+3,a3
+3,0
+a3
+4,0
+a3
+a,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+5,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+7,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+a,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+9,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+5,0
+2,a3
+7,0
+2,a3
+a,0
+2,a3
+0
+2,a3
+4,0
+2,a3
+3,0
+6,a3
+a,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+2,0
+2,a3
+6,0
+5,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+5,0
+5,a3
+4,0
+2,a3
+7,0
+2,a3
+0
+4,a3
+5,0
+2,a3
+3,0
+6,a3
+0
+5,a3
+4,0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+2,0
+4,a3
+3,0
+2,a3
+0
+3,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+3,a3
+6,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+4,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+2,a3
+0
+2,a3
+4,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+3,0
+4,a3
+3,0
+5,a3
+0
+6,a3
+2,0
+2,a3
+5,0
+5,a3
+0
+2,a3
+2,0
+2,a3
+0
+6,a3
+5,0
+2,a3
+0
+2,a3
+3,0
+a3
+0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+42,0
+2,a3
+2,0
+2,a3
+5f,0
+4,a3
+1a4a,0
+100 90 32
+4b3,0
+4,ff
+2,0
+2,ff
+6,0
+4,ff
+6,0
+2,ff
+0
+6,ff
+3,0
+3,ff
+3,0
+4,ff
+2,0
+2,ff
+5,0
+6,ff
+5,0
+2,ff
+0
+2,ff
+3,0
+ff
+2,0
+3,ff
+3,0
+ff
+4,0
+ff
+a,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+5,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+7,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+a,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+9,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+5,0
+2,ff
+7,0
+2,ff
+a,0
+2,ff
+0
+2,ff
+4,0
+2,ff
+3,0
+6,ff
+a,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+2,0
+2,ff
+6,0
+5,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+5,0
+5,ff
+4,0
+2,ff
+7,0
+2,ff
+0
+4,ff
+5,0
+2,ff
+3,0
+6,ff
+0
+5,ff
+4,0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+2,0
+4,ff
+3,0
+2,ff
+0
+3,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+3,ff
+6,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+4,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+2,ff
+0
+2,ff
+4,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+3,0
+4,ff
+3,0
+5,ff
+0
+6,ff
+2,0
+2,ff
+5,0
+5,ff
+0
+2,ff
+2,0
+2,ff
+0
+6,ff
+5,0
+2,ff
+0
+2,ff
+3,0
+ff
+0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+42,0
+2,ff
+2,0
+2,ff
+5f,0
+4,ff
+1a4a,0
+100 90 32
+4b3,0
+4,100
+2,0
+2,100
+6,0
+4,100
+6,0
+2,100
+0
+6,100
+3,0
+3,100
+3,0
+4,100
+2,0
+2,100
+5,0
+6,100
+5,0
+2,100
+0
+2,100
+3,0
+100
+2,0
+3,100
+3,0
+100
+4,0
+100
+a,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+5,0
+2,100
+0
+2,100
+6,0
+2,100
+0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+7,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+3,0
+2,100
+2,0
+2,100
+a,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+9,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+5,0
+2,100
+7,0
+2,100
+a,0
+2,100
+0
+2,100
+4,0
+2,100
+3,0
+6,100
+a,0
+2,100
+2,0
+2,100
+0
+5,100
+2,0
+2,100
+6,0
+5,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+5,0
+5,100
+4,0
+2,100
+7,0
+2,100
+0
+4,100
+5,0
+2,100
+3,0
+6,100
+0
+5,100
+4,0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+5,100
+2,0
+4,100
+3,0
+2,100
+0
+3,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+3,100
+6,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+4,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+2,100
+0
+2,100
+4,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+5,100
+3,0
+4,100
+3,0
+5,100
+0
+6,100
+2,0
+2,100
+5,0
+5,100
+0
+2,100
+2,0
+2,100
+0
+6,100
+5,0
+2,100
+0
+2,100
+3,0
+100
+0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+42,0
+2,100
+2,0
+2,100
+5f,0
+4,100
+1a4a,0
+100 90 32
+4b3,0
+4,12c
+2,0
+2,12c
+6,0
+4,12c
+6,0
+2,12c
+0
+6,12c
+3,0
+3,12c
+3,0
+4,12c
+2,0
+2,12c
+5,0
+6,12c
+5,0
+2,12c
+0
+2,12c
+3,0
+12c
+2,0
+3,12c
+3,0
+12c
+4,0
+12c
+a,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+5,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+7,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+a,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+9,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+5,0
+2,12c
+7,0
+2,12c
+a,0
+2,12c
+0
+2,12c
+4,0
+2,12c
+3,0
+6,12c
+a,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+2,0
+2,12c
+6,0
+5,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+5,0
+5,12c
+4,0
+2,12c
+7,0
+2,12c
+0
+4,12c
+5,0
+2,12c
+3,0
+6,12c
+0
+5,12c
+4,0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+2,0
+4,12c
+3,0
+2,12c
+0
+3,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+3,12c
+6,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+4,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+2,12c
+0
+2,12c
+4,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+3,0
+4,12c
+3,0
+5,12c
+0
+6,12c
+2,0
+2,12c
+5,0
+5,12c
+0
+2,12c
+2,0
+2,12c
+0
+6,12c
+5,0
+2,12c
+0
+2,12c
+3,0
+12c
+0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+42,0
+2,12c
+2,0
+2,12c
+5f,0
+4,12c
+1a4a,0
+100 90 32
+4b3,0
+4,3e8
+2,0
+2,3e8
+6,0
+4,3e8
+6,0
+2,3e8
+0
+6,3e8
+3,0
+3,3e8
+3,0
+4,3e8
+2,0
+2,3e8
+5,0
+6,3e8
+5,0
+2,3e8
+0
+2,3e8
+3,0
+3e8
+2,0
+3,3e8
+3,0
+3e8
+4,0
+3e8
+a,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+5,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+7,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+a,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+9,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+5,0
+2,3e8
+7,0
+2,3e8
+a,0
+2,3e8
+0
+2,3e8
+4,0
+2,3e8
+3,0
+6,3e8
+a,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+2,0
+2,3e8
+6,0
+5,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+5,0
+5,3e8
+4,0
+2,3e8
+7,0
+2,3e8
+0
+4,3e8
+5,0
+2,3e8
+3,0
+6,3e8
+0
+5,3e8
+4,0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+2,0
+4,3e8
+3,0
+2,3e8
+0
+3,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+3,3e8
+6,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+4,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+2,3e8
+0
+2,3e8
+4,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+3,0
+4,3e8
+3,0
+5,3e8
+0
+6,3e8
+2,0
+2,3e8
+5,0
+5,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+6,3e8
+5,0
+2,3e8
+0
+2,3e8
+3,0
+3e8
+0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+42,0
+2,3e8
+2,0
+2,3e8
+5f,0
+4,3e8
+1a4a,0
+100 90 32
+4b3,0
+4,111111
+2,0
+2,111111
+6,0
+4,111111
+6,0
+2,111111
+0
+6,111111
+3,0
+3,111111
+3,0
+4,111111
+2,0
+2,111111
+5,0
+6,111111
+5,0
+2,111111
+0
+2,111111
+3,0
+111111
+2,0
+3,111111
+3,0
+111111
+4,0
+111111
+a,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+5,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+7,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+a,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+9,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+5,0
+2,111111
+7,0
+2,111111
+a,0
+2,111111
+0
+2,111111
+4,0
+2,111111
+3,0
+6,111111
+a,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+2,0
+2,111111
+6,0
+5,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+5,0
+5,111111
+4,0
+2,111111
+7,0
+2,111111
+0
+4,111111
+5,0
+2,111111
+3,0
+6,111111
+0
+5,111111
+4,0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+2,0
+4,111111
+3,0
+2,111111
+0
+3,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+3,111111
+6,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+4,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+2,111111
+0
+2,111111
+4,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+3,0
+4,111111
+3,0
+5,111111
+0
+6,111111
+2,0
+2,111111
+5,0
+5,111111
+0
+2,111111
+2,0
+2,111111
+0
+6,111111
+5,0
+2,111111
+0
+2,111111
+3,0
+111111
+0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+42,0
+2,111111
+2,0
+2,111111
+5f,0
+4,111111
+1a4a,0
+100 90 32
+4b3,0
+4,400200
+2,0
+2,400200
+6,0
+4,400200
+6,0
+2,400200
+0
+6,400200
+3,0
+3,400200
+3,0
+4,400200
+2,0
+2,400200
+5,0
+6,400200
+5,0
+2,400200
+0
+2,400200
+3,0
+400200
+2,0
+3,400200
+3,0
+400200
+4,0
+400200
+a,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+5,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+7,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+a,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+9,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+5,0
+2,400200
+7,0
+2,400200
+a,0
+2,400200
+0
+2,400200
+4,0
+2,400200
+3,0
+6,400200
+a,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+2,0
+2,400200
+6,0
+5,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+5,0
+5,400200
+4,0
+2,400200
+7,0
+2,400200
+0
+4,400200
+5,0
+2,400200
+3,0
+6,400200
+0
+5,400200
+4,0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+2,0
+4,400200
+3,0
+2,400200
+0
+3,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+3,400200
+6,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+4,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+2,400200
+0
+2,400200
+4,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+3,0
+4,400200
+3,0
+5,400200
+0
+6,400200
+2,0
+2,400200
+5,0
+5,400200
+0
+2,400200
+2,0
+2,400200
+0
+6,400200
+5,0
+2,400200
+0
+2,400200
+3,0
+400200
+0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+42,0
+2,400200
+2,0
+2,400200
+5f,0
+4,400200
+1a4a,0
+100 90 32
+4b3,0
+4,777777
+2,0
+2,777777
+6,0
+4,777777
+6,0
+2,777777
+0
+6,777777
+3,0
+3,777777
+3,0
+4,777777
+2,0
+2,777777
+5,0
+6,777777
+5,0
+2,777777
+0
+2,777777
+3,0
+777777
+2,0
+3,777777
+3,0
+777777
+4,0
+777777
+a,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+5,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+7,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+a,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+9,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+5,0
+2,777777
+7,0
+2,777777
+a,0
+2,777777
+0
+2,777777
+4,0
+2,777777
+3,0
+6,777777
+a,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+2,0
+2,777777
+6,0
+5,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+5,0
+5,777777
+4,0
+2,777777
+7,0
+2,777777
+0
+4,777777
+5,0
+2,777777
+3,0
+6,777777
+0
+5,777777
+4,0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+2,0
+4,777777
+3,0
+2,777777
+0
+3,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+3,777777
+6,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+4,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+2,777777
+0
+2,777777
+4,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+3,0
+4,777777
+3,0
+5,777777
+0
+6,777777
+2,0
+2,777777
+5,0
+5,777777
+0
+2,777777
+2,0
+2,777777
+0
+6,777777
+5,0
+2,777777
+0
+2,777777
+3,0
+777777
+0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+42,0
+2,777777
+2,0
+2,777777
+5f,0
+4,777777
+1a4a,0
+100 90 32
+4b3,0
+4,1
+2,0
+2,1
+6,0
+4,1
+6,0
+2,1
+0
+6,1
+3,0
+3,1
+3,0
+4,1
+2,0
+2,1
+5,0
+6,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+2,0
+3,1
+3,0
+1
+4,0
+1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+6,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+9,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+2,1
+7,0
+2,1
+a,0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+6,1
+a,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+2,1
+6,0
+5,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+5,0
+5,1
+4,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+6,1
+0
+5,1
+4,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+4,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+3,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+4,1
+3,0
+5,1
+0
+6,1
+2,0
+2,1
+5,0
+5,1
+0
+2,1
+2,0
+2,1
+0
+6,1
+5,0
+2,1
+0
+2,1
+3,0
+1
+0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+42,0
+2,1
+2,0
+2,1
+5f,0
+4,1
+1a4a,0
+100 90 32
+4b3,0
+4,2
+2,0
+2,2
+6,0
+4,2
+6,0
+2,2
+0
+6,2
+3,0
+3,2
+3,0
+4,2
+2,0
+2,2
+5,0
+6,2
+5,0
+2,2
+0
+2,2
+3,0
+2
+2,0
+3,2
+3,0
+2
+4,0
+2
+a,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+5,0
+2,2
+0
+2,2
+6,0
+2,2
+0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+7,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+3,0
+2,2
+2,0
+2,2
+a,0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+9,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+5,0
+2,2
+7,0
+2,2
+a,0
+2,2
+0
+2,2
+4,0
+2,2
+3,0
+6,2
+a,0
+2,2
+2,0
+2,2
+0
+5,2
+2,0
+2,2
+6,0
+5,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+5,0
+5,2
+4,0
+2,2
+7,0
+2,2
+0
+4,2
+5,0
+2,2
+3,0
+6,2
+0
+5,2
+4,0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+5,2
+2,0
+4,2
+3,0
+2,2
+0
+3,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+3,2
+6,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+4,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+5,0
+2,2
+2,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+2,2
+0
+2,2
+4,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+6,0
+2,2
+4,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+7,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+2,0
+2,2
+0
+5,2
+3,0
+4,2
+3,0
+5,2
+0
+6,2
+2,0
+2,2
+5,0
+5,2
+0
+2,2
+2,0
+2,2
+0
+6,2
+5,0
+2,2
+0
+2,2
+3,0
+2
+0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+42,0
+2,2
+2,0
+2,2
+5f,0
+4,2
+1a4a,0
+100 90 32
+4b3,0
+4,3
+2,0
+2,3
+6,0
+4,3
+6,0
+2,3
+0
+6,3
+3,0
+3,3
+3,0
+4,3
+2,0
+2,3
+5,0
+6,3
+5,0
+2,3
+0
+2,3
+3,0
+3
+2,0
+3,3
+3,0
+3
+4,0
+3
+a,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+5,0
+2,3
+0
+2,3
+6,0
+2,3
+0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+7,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+3,0
+2,3
+2,0
+2,3
+a,0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+9,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+5,0
+2,3
+7,0
+2,3
+a,0
+2,3
+0
+2,3
+4,0
+2,3
+3,0
+6,3
+a,0
+2,3
+2,0
+2,3
+0
+5,3
+2,0
+2,3
+6,0
+5,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+5,0
+5,3
+4,0
+2,3
+7,0
+2,3
+0
+4,3
+5,0
+2,3
+3,0
+6,3
+0
+5,3
+4,0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+5,3
+2,0
+4,3
+3,0
+2,3
+0
+3,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+3,3
+6,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+4,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+5,0
+2,3
+2,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+2,3
+0
+2,3
+4,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+6,0
+2,3
+4,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+7,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+2,0
+2,3
+0
+5,3
+3,0
+4,3
+3,0
+5,3
+0
+6,3
+2,0
+2,3
+5,0
+5,3
+0
+2,3
+2,0
+2,3
+0
+6,3
+5,0
+2,3
+0
+2,3
+3,0
+3
+0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+42,0
+2,3
+2,0
+2,3
+5f,0
+4,3
+1a4a,0
+100 90 32
+4b3,0
+4,4
+2,0
+2,4
+6,0
+4,4
+6,0
+2,4
+0
+6,4
+3,0
+3,4
+3,0
+4,4
+2,0
+2,4
+5,0
+6,4
+5,0
+2,4
+0
+2,4
+3,0
+4
+2,0
+3,4
+3,0
+4
+4,0
+4
+a,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+5,0
+2,4
+0
+2,4
+6,0
+2,4
+0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+7,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+3,0
+2,4
+2,0
+2,4
+a,0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+9,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+5,0
+2,4
+7,0
+2,4
+a,0
+2,4
+0
+2,4
+4,0
+2,4
+3,0
+6,4
+a,0
+2,4
+2,0
+2,4
+0
+5,4
+2,0
+2,4
+6,0
+5,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+5,0
+5,4
+4,0
+2,4
+7,0
+2,4
+0
+4,4
+5,0
+2,4
+3,0
+6,4
+0
+5,4
+4,0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+5,4
+2,0
+4,4
+3,0
+2,4
+0
+3,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+3,4
+6,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+4,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+5,0
+2,4
+2,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+2,4
+0
+2,4
+4,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+6,0
+2,4
+4,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+7,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+2,0
+2,4
+0
+5,4
+3,0
+4,4
+3,0
+5,4
+0
+6,4
+2,0
+2,4
+5,0
+5,4
+0
+2,4
+2,0
+2,4
+0
+6,4
+5,0
+2,4
+0
+2,4
+3,0
+4
+0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+42,0
+2,4
+2,0
+2,4
+5f,0
+4,4
+1a4a,0
+100 90 32
+4b3,0
+4,6
+2,0
+2,6
+6,0
+4,6
+6,0
+2,6
+0
+6,6
+3,0
+3,6
+3,0
+4,6
+2,0
+2,6
+5,0
+6,6
+5,0
+2,6
+0
+2,6
+3,0
+6
+2,0
+3,6
+3,0
+6
+4,0
+6
+a,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+5,0
+2,6
+0
+2,6
+6,0
+2,6
+0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+7,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+3,0
+2,6
+2,0
+2,6
+a,0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+9,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+5,0
+2,6
+7,0
+2,6
+a,0
+2,6
+0
+2,6
+4,0
+2,6
+3,0
+6,6
+a,0
+2,6
+2,0
+2,6
+0
+5,6
+2,0
+2,6
+6,0
+5,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+5,0
+5,6
+4,0
+2,6
+7,0
+2,6
+0
+4,6
+5,0
+2,6
+3,0
+6,6
+0
+5,6
+4,0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+5,6
+2,0
+4,6
+3,0
+2,6
+0
+3,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+3,6
+6,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+4,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+5,0
+2,6
+2,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+2,6
+0
+2,6
+4,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+6,0
+2,6
+4,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+7,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+2,0
+2,6
+0
+5,6
+3,0
+4,6
+3,0
+5,6
+0
+6,6
+2,0
+2,6
+5,0
+5,6
+0
+2,6
+2,0
+2,6
+0
+6,6
+5,0
+2,6
+0
+2,6
+3,0
+6
+0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+42,0
+2,6
+2,0
+2,6
+5f,0
+4,6
+1a4a,0
+100 90 32
+4b3,0
+4,7
+2,0
+2,7
+6,0
+4,7
+6,0
+2,7
+0
+6,7
+3,0
+3,7
+3,0
+4,7
+2,0
+2,7
+5,0
+6,7
+5,0
+2,7
+0
+2,7
+3,0
+7
+2,0
+3,7
+3,0
+7
+4,0
+7
+a,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+5,0
+2,7
+0
+2,7
+6,0
+2,7
+0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+7,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+3,0
+2,7
+2,0
+2,7
+a,0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+9,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+5,0
+2,7
+7,0
+2,7
+a,0
+2,7
+0
+2,7
+4,0
+2,7
+3,0
+6,7
+a,0
+2,7
+2,0
+2,7
+0
+5,7
+2,0
+2,7
+6,0
+5,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+5,0
+5,7
+4,0
+2,7
+7,0
+2,7
+0
+4,7
+5,0
+2,7
+3,0
+6,7
+0
+5,7
+4,0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+5,7
+2,0
+4,7
+3,0
+2,7
+0
+3,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+3,7
+6,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+4,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+5,0
+2,7
+2,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+2,7
+0
+2,7
+4,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+6,0
+2,7
+4,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+7,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+2,0
+2,7
+0
+5,7
+3,0
+4,7
+3,0
+5,7
+0
+6,7
+2,0
+2,7
+5,0
+5,7
+0
+2,7
+2,0
+2,7
+0
+6,7
+5,0
+2,7
+0
+2,7
+3,0
+7
+0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+42,0
+2,7
+2,0
+2,7
+5f,0
+4,7
+1a4a,0
+100 90 32
+4b3,0
+4,10
+2,0
+2,10
+6,0
+4,10
+6,0
+2,10
+0
+6,10
+3,0
+3,10
+3,0
+4,10
+2,0
+2,10
+5,0
+6,10
+5,0
+2,10
+0
+2,10
+3,0
+10
+2,0
+3,10
+3,0
+10
+4,0
+10
+a,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+5,0
+2,10
+0
+2,10
+6,0
+2,10
+0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+7,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+3,0
+2,10
+2,0
+2,10
+a,0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+9,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+5,0
+2,10
+7,0
+2,10
+a,0
+2,10
+0
+2,10
+4,0
+2,10
+3,0
+6,10
+a,0
+2,10
+2,0
+2,10
+0
+5,10
+2,0
+2,10
+6,0
+5,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+5,0
+5,10
+4,0
+2,10
+7,0
+2,10
+0
+4,10
+5,0
+2,10
+3,0
+6,10
+0
+5,10
+4,0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+5,10
+2,0
+4,10
+3,0
+2,10
+0
+3,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+3,10
+6,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+4,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+5,0
+2,10
+2,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+2,10
+0
+2,10
+4,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+6,0
+2,10
+4,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+7,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+2,0
+2,10
+0
+5,10
+3,0
+4,10
+3,0
+5,10
+0
+6,10
+2,0
+2,10
+5,0
+5,10
+0
+2,10
+2,0
+2,10
+0
+6,10
+5,0
+2,10
+0
+2,10
+3,0
+10
+0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+42,0
+2,10
+2,0
+2,10
+5f,0
+4,10
+1a4a,0
+100 90 32
+4b3,0
+4,33
+2,0
+2,33
+6,0
+4,33
+6,0
+2,33
+0
+6,33
+3,0
+3,33
+3,0
+4,33
+2,0
+2,33
+5,0
+6,33
+5,0
+2,33
+0
+2,33
+3,0
+33
+2,0
+3,33
+3,0
+33
+4,0
+33
+a,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+5,0
+2,33
+0
+2,33
+6,0
+2,33
+0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+7,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+3,0
+2,33
+2,0
+2,33
+a,0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+9,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+5,0
+2,33
+7,0
+2,33
+a,0
+2,33
+0
+2,33
+4,0
+2,33
+3,0
+6,33
+a,0
+2,33
+2,0
+2,33
+0
+5,33
+2,0
+2,33
+6,0
+5,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+5,0
+5,33
+4,0
+2,33
+7,0
+2,33
+0
+4,33
+5,0
+2,33
+3,0
+6,33
+0
+5,33
+4,0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+5,33
+2,0
+4,33
+3,0
+2,33
+0
+3,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+3,33
+6,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+4,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+5,0
+2,33
+2,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+2,33
+0
+2,33
+4,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+6,0
+2,33
+4,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+7,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+2,0
+2,33
+0
+5,33
+3,0
+4,33
+3,0
+5,33
+0
+6,33
+2,0
+2,33
+5,0
+5,33
+0
+2,33
+2,0
+2,33
+0
+6,33
+5,0
+2,33
+0
+2,33
+3,0
+33
+0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+42,0
+2,33
+2,0
+2,33
+5f,0
+4,33
+1a4a,0
+100 90 32
+4b3,0
+4,81
+2,0
+2,81
+6,0
+4,81
+6,0
+2,81
+0
+6,81
+3,0
+3,81
+3,0
+4,81
+2,0
+2,81
+5,0
+6,81
+5,0
+2,81
+0
+2,81
+3,0
+81
+2,0
+3,81
+3,0
+81
+4,0
+81
+a,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+5,0
+2,81
+0
+2,81
+6,0
+2,81
+0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+7,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+3,0
+2,81
+2,0
+2,81
+a,0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+9,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+5,0
+2,81
+7,0
+2,81
+a,0
+2,81
+0
+2,81
+4,0
+2,81
+3,0
+6,81
+a,0
+2,81
+2,0
+2,81
+0
+5,81
+2,0
+2,81
+6,0
+5,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+5,0
+5,81
+4,0
+2,81
+7,0
+2,81
+0
+4,81
+5,0
+2,81
+3,0
+6,81
+0
+5,81
+4,0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+5,81
+2,0
+4,81
+3,0
+2,81
+0
+3,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+3,81
+6,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+4,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+5,0
+2,81
+2,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+2,81
+0
+2,81
+4,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+6,0
+2,81
+4,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+7,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+2,0
+2,81
+0
+5,81
+3,0
+4,81
+3,0
+5,81
+0
+6,81
+2,0
+2,81
+5,0
+5,81
+0
+2,81
+2,0
+2,81
+0
+6,81
+5,0
+2,81
+0
+2,81
+3,0
+81
+0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+42,0
+2,81
+2,0
+2,81
+5f,0
+4,81
+1a4a,0
+100 90 32
+4b3,0
+4,a3
+2,0
+2,a3
+6,0
+4,a3
+6,0
+2,a3
+0
+6,a3
+3,0
+3,a3
+3,0
+4,a3
+2,0
+2,a3
+5,0
+6,a3
+5,0
+2,a3
+0
+2,a3
+3,0
+a3
+2,0
+3,a3
+3,0
+a3
+4,0
+a3
+a,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+5,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+7,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+a,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+9,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+5,0
+2,a3
+7,0
+2,a3
+a,0
+2,a3
+0
+2,a3
+4,0
+2,a3
+3,0
+6,a3
+a,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+2,0
+2,a3
+6,0
+5,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+5,0
+5,a3
+4,0
+2,a3
+7,0
+2,a3
+0
+4,a3
+5,0
+2,a3
+3,0
+6,a3
+0
+5,a3
+4,0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+2,0
+4,a3
+3,0
+2,a3
+0
+3,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+3,a3
+6,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+4,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+5,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+2,a3
+0
+2,a3
+4,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+6,0
+2,a3
+4,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+7,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+0
+5,a3
+3,0
+4,a3
+3,0
+5,a3
+0
+6,a3
+2,0
+2,a3
+5,0
+5,a3
+0
+2,a3
+2,0
+2,a3
+0
+6,a3
+5,0
+2,a3
+0
+2,a3
+3,0
+a3
+0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+42,0
+2,a3
+2,0
+2,a3
+5f,0
+4,a3
+1a4a,0
+100 90 32
+4b3,0
+4,ff
+2,0
+2,ff
+6,0
+4,ff
+6,0
+2,ff
+0
+6,ff
+3,0
+3,ff
+3,0
+4,ff
+2,0
+2,ff
+5,0
+6,ff
+5,0
+2,ff
+0
+2,ff
+3,0
+ff
+2,0
+3,ff
+3,0
+ff
+4,0
+ff
+a,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+5,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+7,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+a,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+9,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+5,0
+2,ff
+7,0
+2,ff
+a,0
+2,ff
+0
+2,ff
+4,0
+2,ff
+3,0
+6,ff
+a,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+2,0
+2,ff
+6,0
+5,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+5,0
+5,ff
+4,0
+2,ff
+7,0
+2,ff
+0
+4,ff
+5,0
+2,ff
+3,0
+6,ff
+0
+5,ff
+4,0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+2,0
+4,ff
+3,0
+2,ff
+0
+3,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+3,ff
+6,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+4,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+5,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+2,ff
+0
+2,ff
+4,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+6,0
+2,ff
+4,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+7,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+0
+5,ff
+3,0
+4,ff
+3,0
+5,ff
+0
+6,ff
+2,0
+2,ff
+5,0
+5,ff
+0
+2,ff
+2,0
+2,ff
+0
+6,ff
+5,0
+2,ff
+0
+2,ff
+3,0
+ff
+0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+42,0
+2,ff
+2,0
+2,ff
+5f,0
+4,ff
+1a4a,0
+100 90 32
+4b3,0
+4,100
+2,0
+2,100
+6,0
+4,100
+6,0
+2,100
+0
+6,100
+3,0
+3,100
+3,0
+4,100
+2,0
+2,100
+5,0
+6,100
+5,0
+2,100
+0
+2,100
+3,0
+100
+2,0
+3,100
+3,0
+100
+4,0
+100
+a,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+5,0
+2,100
+0
+2,100
+6,0
+2,100
+0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+7,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+3,0
+2,100
+2,0
+2,100
+a,0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+9,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+5,0
+2,100
+7,0
+2,100
+a,0
+2,100
+0
+2,100
+4,0
+2,100
+3,0
+6,100
+a,0
+2,100
+2,0
+2,100
+0
+5,100
+2,0
+2,100
+6,0
+5,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+5,0
+5,100
+4,0
+2,100
+7,0
+2,100
+0
+4,100
+5,0
+2,100
+3,0
+6,100
+0
+5,100
+4,0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+5,100
+2,0
+4,100
+3,0
+2,100
+0
+3,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+3,100
+6,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+4,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+5,0
+2,100
+2,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+2,100
+0
+2,100
+4,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+6,0
+2,100
+4,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+7,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+2,0
+2,100
+0
+5,100
+3,0
+4,100
+3,0
+5,100
+0
+6,100
+2,0
+2,100
+5,0
+5,100
+0
+2,100
+2,0
+2,100
+0
+6,100
+5,0
+2,100
+0
+2,100
+3,0
+100
+0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+42,0
+2,100
+2,0
+2,100
+5f,0
+4,100
+1a4a,0
+100 90 32
+4b3,0
+4,12c
+2,0
+2,12c
+6,0
+4,12c
+6,0
+2,12c
+0
+6,12c
+3,0
+3,12c
+3,0
+4,12c
+2,0
+2,12c
+5,0
+6,12c
+5,0
+2,12c
+0
+2,12c
+3,0
+12c
+2,0
+3,12c
+3,0
+12c
+4,0
+12c
+a,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+5,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+7,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+a,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+9,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+5,0
+2,12c
+7,0
+2,12c
+a,0
+2,12c
+0
+2,12c
+4,0
+2,12c
+3,0
+6,12c
+a,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+2,0
+2,12c
+6,0
+5,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+5,0
+5,12c
+4,0
+2,12c
+7,0
+2,12c
+0
+4,12c
+5,0
+2,12c
+3,0
+6,12c
+0
+5,12c
+4,0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+2,0
+4,12c
+3,0
+2,12c
+0
+3,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+3,12c
+6,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+4,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+5,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+2,12c
+0
+2,12c
+4,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+6,0
+2,12c
+4,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+7,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+0
+5,12c
+3,0
+4,12c
+3,0
+5,12c
+0
+6,12c
+2,0
+2,12c
+5,0
+5,12c
+0
+2,12c
+2,0
+2,12c
+0
+6,12c
+5,0
+2,12c
+0
+2,12c
+3,0
+12c
+0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+42,0
+2,12c
+2,0
+2,12c
+5f,0
+4,12c
+1a4a,0
+100 90 32
+4b3,0
+4,3e8
+2,0
+2,3e8
+6,0
+4,3e8
+6,0
+2,3e8
+0
+6,3e8
+3,0
+3,3e8
+3,0
+4,3e8
+2,0
+2,3e8
+5,0
+6,3e8
+5,0
+2,3e8
+0
+2,3e8
+3,0
+3e8
+2,0
+3,3e8
+3,0
+3e8
+4,0
+3e8
+a,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+5,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+7,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+a,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+9,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+5,0
+2,3e8
+7,0
+2,3e8
+a,0
+2,3e8
+0
+2,3e8
+4,0
+2,3e8
+3,0
+6,3e8
+a,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+2,0
+2,3e8
+6,0
+5,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+5,0
+5,3e8
+4,0
+2,3e8
+7,0
+2,3e8
+0
+4,3e8
+5,0
+2,3e8
+3,0
+6,3e8
+0
+5,3e8
+4,0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+2,0
+4,3e8
+3,0
+2,3e8
+0
+3,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+3,3e8
+6,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+4,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+5,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+2,3e8
+0
+2,3e8
+4,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+6,0
+2,3e8
+4,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+7,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+0
+5,3e8
+3,0
+4,3e8
+3,0
+5,3e8
+0
+6,3e8
+2,0
+2,3e8
+5,0
+5,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+6,3e8
+5,0
+2,3e8
+0
+2,3e8
+3,0
+3e8
+0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+42,0
+2,3e8
+2,0
+2,3e8
+5f,0
+4,3e8
+1a4a,0
+100 90 32
+4b3,0
+4,111111
+2,0
+2,111111
+6,0
+4,111111
+6,0
+2,111111
+0
+6,111111
+3,0
+3,111111
+3,0
+4,111111
+2,0
+2,111111
+5,0
+6,111111
+5,0
+2,111111
+0
+2,111111
+3,0
+111111
+2,0
+3,111111
+3,0
+111111
+4,0
+111111
+a,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+5,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+7,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+a,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+9,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+5,0
+2,111111
+7,0
+2,111111
+a,0
+2,111111
+0
+2,111111
+4,0
+2,111111
+3,0
+6,111111
+a,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+2,0
+2,111111
+6,0
+5,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+5,0
+5,111111
+4,0
+2,111111
+7,0
+2,111111
+0
+4,111111
+5,0
+2,111111
+3,0
+6,111111
+0
+5,111111
+4,0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+2,0
+4,111111
+3,0
+2,111111
+0
+3,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+3,111111
+6,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+4,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+5,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+2,111111
+0
+2,111111
+4,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+6,0
+2,111111
+4,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+7,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+0
+5,111111
+3,0
+4,111111
+3,0
+5,111111
+0
+6,111111
+2,0
+2,111111
+5,0
+5,111111
+0
+2,111111
+2,0
+2,111111
+0
+6,111111
+5,0
+2,111111
+0
+2,111111
+3,0
+111111
+0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+42,0
+2,111111
+2,0
+2,111111
+5f,0
+4,111111
+1a4a,0
+100 90 32
+4b3,0
+4,400200
+2,0
+2,400200
+6,0
+4,400200
+6,0
+2,400200
+0
+6,400200
+3,0
+3,400200
+3,0
+4,400200
+2,0
+2,400200
+5,0
+6,400200
+5,0
+2,400200
+0
+2,400200
+3,0
+400200
+2,0
+3,400200
+3,0
+400200
+4,0
+400200
+a,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+5,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+7,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+a,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+9,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+5,0
+2,400200
+7,0
+2,400200
+a,0
+2,400200
+0
+2,400200
+4,0
+2,400200
+3,0
+6,400200
+a,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+2,0
+2,400200
+6,0
+5,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+5,0
+5,400200
+4,0
+2,400200
+7,0
+2,400200
+0
+4,400200
+5,0
+2,400200
+3,0
+6,400200
+0
+5,400200
+4,0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+2,0
+4,400200
+3,0
+2,400200
+0
+3,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+3,400200
+6,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+4,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+5,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+2,400200
+0
+2,400200
+4,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+6,0
+2,400200
+4,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+7,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+0
+5,400200
+3,0
+4,400200
+3,0
+5,400200
+0
+6,400200
+2,0
+2,400200
+5,0
+5,400200
+0
+2,400200
+2,0
+2,400200
+0
+6,400200
+5,0
+2,400200
+0
+2,400200
+3,0
+400200
+0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+42,0
+2,400200
+2,0
+2,400200
+5f,0
+4,400200
+1a4a,0
+100 90 32
+4b3,0
+4,777777
+2,0
+2,777777
+6,0
+4,777777
+6,0
+2,777777
+0
+6,777777
+3,0
+3,777777
+3,0
+4,777777
+2,0
+2,777777
+5,0
+6,777777
+5,0
+2,777777
+0
+2,777777
+3,0
+777777
+2,0
+3,777777
+3,0
+777777
+4,0
+777777
+a,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+5,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+7,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+a,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+9,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+5,0
+2,777777
+7,0
+2,777777
+a,0
+2,777777
+0
+2,777777
+4,0
+2,777777
+3,0
+6,777777
+a,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+2,0
+2,777777
+6,0
+5,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+5,0
+5,777777
+4,0
+2,777777
+7,0
+2,777777
+0
+4,777777
+5,0
+2,777777
+3,0
+6,777777
+0
+5,777777
+4,0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+2,0
+4,777777
+3,0
+2,777777
+0
+3,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+3,777777
+6,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+4,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+5,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+2,777777
+0
+2,777777
+4,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+6,0
+2,777777
+4,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+7,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+0
+5,777777
+3,0
+4,777777
+3,0
+5,777777
+0
+6,777777
+2,0
+2,777777
+5,0
+5,777777
+0
+2,777777
+2,0
+2,777777
+0
+6,777777
+5,0
+2,777777
+0
+2,777777
+3,0
+777777
+0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+42,0
+2,777777
+2,0
+2,777777
+5f,0
+4,777777
+1a4a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr/a39.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr/a39.dat
new file mode 100644
index 000000000..0f425ecc9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr/a39.dat
@@ -0,0 +1,3091 @@
+! $XConsortium$
+100 90 32
+4b3,0
+3,1
+b,0
+4,1
+6,0
+2,1
+b,0
+2,1
+6,0
+1
+2,0
+2,1
+13,0
+2,1
+3,0
+1
+d,0
+1
+e,0
+2,1
+2,0
+1
+a,0
+1
+8,0
+2,1
+6,0
+1
+6,0
+1
+2,0
+2,1
+a,0
+1
+8,0
+2,1
+0
+2,1
+8,0
+1
+3,0
+1
+f,0
+2,1
+c,0
+2,1
+9,0
+2,1
+16,0
+2,1
+16,0
+2,1
+b,0
+4,1
+e,0
+2,1
+2,0
+1
+0
+1
+3,0
+2,1
+6,0
+1
+5,0
+2,1
+6,0
+1
+5,0
+2,1
+8,0
+2,1
+4,0
+1
+8,0
+2,1
+0
+1
+9,0
+1
+3,0
+1
+0
+4,1
+0
+4,1
+5,0
+3,1
+b,0
+2,1
+5,0
+2,1
+2,0
+2,1
+b,0
+1
+3,0
+2,1
+0
+3,1
+0
+2,1
+10,0
+2,1
+0
+3,1
+f,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+14,0
+2,1
+4,0
+1
+f,0
+2,1
+13,0
+2,1
+3,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+1
+6,0
+1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+1
+6,0
+2,1
+2,0
+2,1
+3,0
+1
+6,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+e,0
+1
+4,0
+2,1
+2,0
+2,1
+a,0
+1
+8,0
+2,1
+0
+2,1
+7,0
+2,1
+4,0
+1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+1
+2,0
+2,1
+0
+3,1
+0
+1
+3,0
+4,1
+6,0
+2,1
+0
+6,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+3,1
+d,0
+1
+0
+5,1
+2,0
+2,1
+2,0
+2,1
+49,0
+1
+3,0
+2,1
+5f,0
+4,1
+1a4a,0
+100 90 32
+4b9,0
+1
+7,0
+4,1
+a,0
+3,1
+0
+1
+3,0
+1
+0
+1
+3,0
+4,1
+a,0
+1
+0
+1
+0
+1
+5,0
+2,1
+0
+2,1
+6,0
+2,1
+9,0
+1
+a,0
+2,1
+d,0
+1
+2,0
+2,1
+5,0
+2,1
+c,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+10,0
+2,1
+0
+2,1
+2,0
+2,1
+c,0
+2,1
+12,0
+1
+5,0
+2,1
+14,0
+2,1
+4,0
+2,1
+e,0
+2,1
+14,0
+1
+3,0
+6,1
+a,0
+2,1
+2,0
+2,1
+0
+5,1
+a,0
+5,1
+0
+2,1
+6,0
+2,1
+b,0
+5,1
+4,0
+2,1
+8,0
+1
+0
+4,1
+5,0
+2,1
+3,0
+2,1
+6,0
+4,1
+4,0
+2,1
+6,0
+1
+2,0
+1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+3,0
+2,1
+0
+3,1
+0
+1
+8,0
+2,1
+7,0
+2,1
+0
+3,1
+7,0
+1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+1
+0
+2,1
+a,0
+1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+1
+2,0
+2,1
+3,0
+1
+8,0
+1
+b,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+1
+8,0
+2,1
+6,0
+1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+9,0
+2,1
+8,0
+2,1
+0
+2,1
+7,0
+2,1
+8,0
+1
+0
+2,1
+0
+2,1
+5,0
+1
+3,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+2,1
+7,0
+2,1
+0
+1
+3,0
+2,1
+0
+1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+1
+6,0
+2,1
+4,0
+1
+7,0
+2,1
+0
+1
+8,0
+1
+4,0
+2,1
+3,0
+1
+0
+2,1
+7,0
+2,1
+2,0
+1
+a,0
+4,1
+4,0
+4,1
+0
+1
+e,0
+1
+3,0
+1
+0
+2,1
+10,0
+1
+3,0
+1
+3,0
+1
+c,0
+2,1
+0
+1
+3,0
+2,1
+47,0
+1
+5f,0
+3,1
+1a4b,0
+100 90 32
+4b3,0
+1
+2,0
+1
+2,0
+2,1
+6,0
+4,1
+6,0
+1
+2,0
+6,1
+5,0
+1
+6,0
+1
+2,0
+1
+6,0
+2,1
+c,0
+2,1
+6,0
+3,1
+8,0
+1
+e,0
+2,1
+8,0
+2,1
+a,0
+1
+0
+2,1
+6,0
+2,1
+0
+1
+a,0
+1
+7,0
+2,1
+e,0
+2,1
+8,0
+2,1
+e,0
+1
+6,0
+2,1
+21,0
+1
+f,0
+2,1
+a,0
+1
+8,0
+2,1
+7,0
+2,1
+e,0
+2,1
+8,0
+2,1
+a,0
+1
+0
+2,1
+6,0
+2,1
+c,0
+4,1
+1e,0
+4,1
+c,0
+1
+0
+4,1
+0
+2,1
+d,0
+1
+3,0
+1
+0
+5,1
+9,0
+1
+3,0
+1
+3,0
+1
+2,0
+2,1
+3,0
+1
+9,0
+1
+0
+1
+0
+1
+6,0
+2,1
+7,0
+2,1
+2,0
+1
+3,0
+1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+b,0
+1
+0
+2,1
+6,0
+2,1
+c,0
+1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+3,0
+2,1
+e,0
+2,1
+2,0
+2,1
+f,0
+2,1
+2,0
+2,1
+0
+2,1
+d,0
+1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+c,0
+2,1
+0
+2,1
+0
+2,1
+10,0
+2,1
+2,0
+2,1
+3,0
+1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+d,0
+2,1
+4,0
+2,1
+2,0
+2,1
+a,0
+2,1
+7,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+1
+2,0
+2,1
+0
+5,1
+a,0
+1
+2,0
+2,1
+0
+6,1
+2,0
+1
+6,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+5,1
+6,0
+2,1
+0
+1
+4,0
+1
+0
+6,1
+0
+1
+6,0
+2,1
+46,0
+2,1
+2,0
+2,1
+62,0
+1
+1a4a,0
+100 90 32
+4b3,0
+1
+0
+1
+b,0
+4,1
+a,0
+1
+0
+3,1
+3,0
+3,1
+a,0
+1
+5,0
+3,1
+0
+1
+6,0
+1
+2,0
+2,1
+3,0
+1
+3,0
+1
+9,0
+1
+18,0
+2,1
+2,0
+1
+a,0
+1
+6,0
+2,1
+2,0
+1
+8,0
+1
+9,0
+1
+7,0
+2,1
+2,0
+1
+2,0
+2,1
+3,0
+1
+14,0
+2,1
+3,0
+1
+0
+2,1
+10,0
+2,1
+10,0
+1
+6,0
+1
+7,0
+1
+b,0
+1
+d,0
+1
+3,0
+2,1
+18,0
+2,1
+14,0
+2,1
+e,0
+2,1
+11,0
+3,1
+11,0
+4,1
+5,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+1
+6,0
+2,1
+2,0
+2,1
+0
+5,1
+4,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+7,0
+2,1
+7,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+11,0
+2,1
+14,0
+2,1
+f,0
+2,1
+10,0
+1
+0
+2,1
+10,0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+1
+6,0
+1
+5,0
+2,1
+0
+1
+d,0
+2,1
+2,0
+2,1
+2,0
+1
+7,0
+1
+b,0
+1
+9,0
+1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+8,0
+1
+0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+1
+0
+3,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+5,0
+4,1
+2,0
+1
+3,0
+2,1
+0
+1
+2,0
+2,1
+6,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+2,1
+0
+2,1
+0
+1
+6,0
+2,1
+4a,0
+1
+62,0
+1
+1a4b,0
+100 90 32
+4b3,0
+4,1
+3,0
+1
+7,0
+2,1
+a,0
+1
+0
+4,1
+5,0
+1
+3,0
+1
+2,0
+1
+2,0
+2,1
+7,0
+4,1
+6,0
+1
+0
+2,1
+6,0
+3,1
+3,0
+1
+4,0
+1
+a,0
+2,1
+2,0
+2,1
+0
+1
+a,0
+2,1
+5,0
+2,1
+0
+1
+8,0
+1
+0
+2,1
+0
+2,1
+3,0
+1
+a,0
+2,1
+f,0
+1
+3,0
+2,1
+4,0
+1
+f,0
+1
+2,0
+2,1
+2,0
+1
+6,0
+1
+d,0
+1
+6,0
+1
+5,0
+2,1
+e,0
+2,1
+e,0
+1
+4,0
+2,1
+3,0
+1
+0
+1
+d,0
+1
+7,0
+1
+0
+1
+4,0
+1
+9,0
+1
+3,0
+1
+6,0
+1
+10,0
+1
+d,0
+1
+4,0
+1
+b,0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+6,0
+3,1
+2,0
+1
+3,0
+1
+2,0
+1
+6,0
+2,1
+3,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+4,0
+1
+2,0
+1
+0
+1
+0
+1
+4,0
+1
+4,0
+1
+8,0
+1
+2,0
+1
+7,0
+2,1
+4,0
+1
+6,0
+1
+8,0
+1
+2,0
+2,1
+0
+1
+3,0
+1
+2,0
+1
+6,0
+2,1
+3,0
+1
+0
+1
+8,0
+1
+4,0
+2,1
+3,0
+1
+0
+1
+4,0
+1
+3,0
+2,1
+8,0
+1
+2,0
+1
+0
+1
+5,0
+2,1
+4,0
+1
+6,0
+1
+3,0
+1
+4,0
+1
+2,0
+2,1
+0
+1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+3,0
+1
+0
+2,1
+7,0
+1
+4,0
+2,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+1
+5,0
+2,1
+4,0
+1
+2,0
+2,1
+0
+2,1
+3,0
+1
+4,0
+1
+2,0
+2,1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+8,0
+1
+4,0
+2,1
+3,0
+1
+0
+1
+4,0
+1
+3,0
+2,1
+8,0
+1
+2,0
+1
+3,0
+1
+3,0
+2,1
+4,0
+1
+6,0
+1
+3,0
+1
+7,0
+1
+2,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+3,0
+2,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+3,0
+1
+7,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+3,1
+6,0
+1
+2,0
+1
+3,0
+1
+2,0
+3,1
+4,0
+1
+6,0
+1
+46,0
+1
+3,0
+1
+61,0
+1
+0
+1
+1a4a,0
+100 90 32
+4b4,0
+3,1
+b,0
+1
+0
+1
+6,0
+1
+2,0
+1
+0
+1
+6,0
+1
+5,0
+2,1
+4,0
+1
+6,0
+1
+2,0
+3,1
+6,0
+1
+6,0
+1
+2,0
+3,1
+14,0
+1
+5,0
+1
+a,0
+1
+7,0
+1
+0
+1
+8,0
+1
+0
+1
+7,0
+1
+0
+1
+8,0
+1
+9,0
+1
+6,0
+1
+9,0
+1
+e,0
+1
+3,0
+2,1
+2,0
+1
+6,0
+1
+d,0
+1
+6,0
+1
+5,0
+2,1
+6,0
+1
+17,0
+1
+4,0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+1
+3,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+6,0
+4,1
+3,0
+1
+6,0
+1
+5,0
+2,1
+6,0
+1
+2,0
+1
+5,0
+1
+7,0
+1
+4,0
+1
+6,0
+2,1
+3,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+4,1
+2,0
+1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+1
+3,0
+4,1
+2,0
+2,1
+0
+1
+3,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+2,1
+4,0
+1
+7,0
+2,1
+0
+3,1
+6,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+1
+4,0
+1
+3,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+1
+5,0
+2,1
+2,0
+1
+3,0
+1
+6,0
+1
+5,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+1
+5,0
+1
+7,0
+1
+4,0
+1
+6,0
+2,1
+3,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+4,0
+1
+3,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+5,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+1
+d,0
+1
+6,0
+1
+4,0
+2,1
+3,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+5,0
+1
+5,0
+1
+3,0
+1
+6,0
+1
+7,0
+1
+0
+1
+8,0
+1
+9,0
+1
+0
+1
+4,0
+1
+3,0
+1
+9,0
+1
+6,0
+1
+9,0
+1
+6,0
+1
+3,0
+1
+7,0
+2,1
+3,0
+1
+0
+1
+4,0
+1
+0
+1
+3,0
+4,1
+2,0
+1
+0
+1
+6,0
+1
+5,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+3,1
+6,0
+1
+6,0
+1
+2,0
+5,1
+2,0
+1
+6,0
+1
+46,0
+2,1
+2,0
+1
+62,0
+2,1
+1a4a,0
+100 90 32
+4b9,0
+1
+7,0
+4,1
+a,0
+3,1
+0
+1
+3,0
+1
+0
+1
+3,0
+4,1
+a,0
+1
+0
+1
+0
+1
+5,0
+2,1
+0
+2,1
+6,0
+2,1
+9,0
+1
+a,0
+2,1
+d,0
+1
+2,0
+2,1
+5,0
+2,1
+c,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+10,0
+2,1
+0
+2,1
+2,0
+2,1
+c,0
+2,1
+12,0
+1
+5,0
+2,1
+14,0
+2,1
+4,0
+2,1
+e,0
+2,1
+14,0
+1
+3,0
+6,1
+a,0
+2,1
+2,0
+2,1
+0
+5,1
+a,0
+5,1
+0
+2,1
+6,0
+2,1
+b,0
+5,1
+4,0
+2,1
+8,0
+1
+0
+4,1
+5,0
+2,1
+3,0
+2,1
+6,0
+4,1
+4,0
+2,1
+6,0
+1
+2,0
+1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+3,0
+2,1
+0
+3,1
+0
+1
+8,0
+2,1
+7,0
+2,1
+0
+3,1
+7,0
+1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+1
+0
+2,1
+a,0
+1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+1
+2,0
+2,1
+3,0
+1
+8,0
+1
+b,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+1
+8,0
+2,1
+6,0
+1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+9,0
+2,1
+8,0
+2,1
+0
+2,1
+7,0
+2,1
+8,0
+1
+0
+2,1
+0
+2,1
+5,0
+1
+3,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+2,1
+7,0
+2,1
+0
+1
+3,0
+2,1
+0
+1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+1
+6,0
+2,1
+4,0
+1
+7,0
+2,1
+0
+1
+8,0
+1
+4,0
+2,1
+3,0
+1
+0
+2,1
+7,0
+2,1
+2,0
+1
+a,0
+4,1
+4,0
+4,1
+0
+1
+e,0
+1
+3,0
+1
+0
+2,1
+10,0
+1
+3,0
+1
+3,0
+1
+c,0
+2,1
+0
+1
+3,0
+2,1
+47,0
+1
+5f,0
+3,1
+1a4b,0
+100 90 32
+4b3,0
+1
+2,0
+1
+2,0
+2,1
+6,0
+4,1
+6,0
+1
+2,0
+6,1
+5,0
+1
+6,0
+1
+2,0
+1
+6,0
+2,1
+c,0
+2,1
+6,0
+3,1
+8,0
+1
+e,0
+2,1
+8,0
+2,1
+a,0
+1
+0
+2,1
+6,0
+2,1
+0
+1
+a,0
+1
+7,0
+2,1
+e,0
+2,1
+8,0
+2,1
+e,0
+1
+6,0
+2,1
+21,0
+1
+f,0
+2,1
+a,0
+1
+8,0
+2,1
+7,0
+2,1
+e,0
+2,1
+8,0
+2,1
+a,0
+1
+0
+2,1
+6,0
+2,1
+c,0
+4,1
+1e,0
+4,1
+c,0
+1
+0
+4,1
+0
+2,1
+d,0
+1
+3,0
+1
+0
+5,1
+9,0
+1
+3,0
+1
+3,0
+1
+2,0
+2,1
+3,0
+1
+9,0
+1
+0
+1
+0
+1
+6,0
+2,1
+7,0
+2,1
+2,0
+1
+3,0
+1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+b,0
+1
+0
+2,1
+6,0
+2,1
+c,0
+1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+3,0
+2,1
+e,0
+2,1
+2,0
+2,1
+f,0
+2,1
+2,0
+2,1
+0
+2,1
+d,0
+1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+c,0
+2,1
+0
+2,1
+0
+2,1
+10,0
+2,1
+2,0
+2,1
+3,0
+1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+d,0
+2,1
+4,0
+2,1
+2,0
+2,1
+a,0
+2,1
+7,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+1
+2,0
+2,1
+0
+5,1
+a,0
+1
+2,0
+2,1
+0
+6,1
+2,0
+1
+6,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+5,1
+6,0
+2,1
+0
+1
+4,0
+1
+0
+6,1
+0
+1
+6,0
+2,1
+46,0
+2,1
+2,0
+2,1
+62,0
+1
+1a4a,0
+100 90 32
+4b3,0
+1
+0
+1
+b,0
+4,1
+a,0
+1
+0
+3,1
+3,0
+3,1
+a,0
+1
+5,0
+3,1
+0
+1
+6,0
+1
+2,0
+2,1
+3,0
+1
+3,0
+1
+9,0
+1
+18,0
+2,1
+2,0
+1
+a,0
+1
+6,0
+2,1
+2,0
+1
+8,0
+1
+9,0
+1
+7,0
+2,1
+2,0
+1
+2,0
+2,1
+3,0
+1
+14,0
+2,1
+3,0
+1
+0
+2,1
+10,0
+2,1
+10,0
+1
+6,0
+1
+7,0
+1
+b,0
+1
+d,0
+1
+3,0
+2,1
+18,0
+2,1
+14,0
+2,1
+e,0
+2,1
+11,0
+3,1
+11,0
+4,1
+5,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+1
+6,0
+2,1
+2,0
+2,1
+0
+5,1
+4,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+7,0
+2,1
+7,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+4,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+11,0
+2,1
+14,0
+2,1
+f,0
+2,1
+10,0
+1
+0
+2,1
+10,0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+1
+6,0
+1
+5,0
+2,1
+0
+1
+d,0
+2,1
+2,0
+2,1
+2,0
+1
+7,0
+1
+b,0
+1
+9,0
+1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+8,0
+1
+0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+1
+0
+3,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+5,0
+4,1
+2,0
+1
+3,0
+2,1
+0
+1
+2,0
+2,1
+6,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+2,1
+0
+2,1
+0
+1
+6,0
+2,1
+4a,0
+1
+62,0
+1
+1a4b,0
+100 90 32
+4b3,0
+4,1
+3,0
+1
+7,0
+2,1
+a,0
+1
+0
+4,1
+5,0
+1
+3,0
+1
+2,0
+1
+2,0
+2,1
+7,0
+4,1
+6,0
+1
+0
+2,1
+6,0
+3,1
+3,0
+1
+4,0
+1
+a,0
+2,1
+2,0
+2,1
+0
+1
+a,0
+2,1
+5,0
+2,1
+0
+1
+8,0
+1
+0
+2,1
+0
+2,1
+3,0
+1
+a,0
+2,1
+f,0
+1
+3,0
+2,1
+4,0
+1
+f,0
+1
+2,0
+2,1
+2,0
+1
+6,0
+1
+d,0
+1
+6,0
+1
+5,0
+2,1
+e,0
+2,1
+e,0
+1
+4,0
+2,1
+3,0
+1
+0
+1
+d,0
+1
+7,0
+1
+0
+1
+4,0
+1
+9,0
+1
+3,0
+1
+6,0
+1
+10,0
+1
+d,0
+1
+4,0
+1
+b,0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+6,0
+3,1
+2,0
+1
+3,0
+1
+2,0
+1
+6,0
+2,1
+3,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+4,0
+1
+2,0
+1
+0
+1
+0
+1
+4,0
+1
+4,0
+1
+8,0
+1
+2,0
+1
+7,0
+2,1
+4,0
+1
+6,0
+1
+8,0
+1
+2,0
+2,1
+0
+1
+3,0
+1
+2,0
+1
+6,0
+2,1
+3,0
+1
+0
+1
+8,0
+1
+4,0
+2,1
+3,0
+1
+0
+1
+4,0
+1
+3,0
+2,1
+8,0
+1
+2,0
+1
+0
+1
+5,0
+2,1
+4,0
+1
+6,0
+1
+3,0
+1
+4,0
+1
+2,0
+2,1
+0
+1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+3,0
+1
+0
+2,1
+7,0
+1
+4,0
+2,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+1
+5,0
+2,1
+4,0
+1
+2,0
+2,1
+0
+2,1
+3,0
+1
+4,0
+1
+2,0
+2,1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+8,0
+1
+4,0
+2,1
+3,0
+1
+0
+1
+4,0
+1
+3,0
+2,1
+8,0
+1
+2,0
+1
+3,0
+1
+3,0
+2,1
+4,0
+1
+6,0
+1
+3,0
+1
+7,0
+1
+2,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+3,0
+2,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+3,0
+1
+7,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+3,1
+6,0
+1
+2,0
+1
+3,0
+1
+2,0
+3,1
+4,0
+1
+6,0
+1
+46,0
+1
+3,0
+1
+61,0
+1
+0
+1
+1a4a,0
+100 90 32
+4b4,0
+3,1
+b,0
+1
+0
+1
+6,0
+1
+2,0
+1
+0
+1
+6,0
+1
+5,0
+2,1
+4,0
+1
+6,0
+1
+2,0
+3,1
+6,0
+1
+6,0
+1
+2,0
+3,1
+14,0
+1
+5,0
+1
+a,0
+1
+7,0
+1
+0
+1
+8,0
+1
+0
+1
+7,0
+1
+0
+1
+8,0
+1
+9,0
+1
+6,0
+1
+9,0
+1
+e,0
+1
+3,0
+2,1
+2,0
+1
+6,0
+1
+d,0
+1
+6,0
+1
+5,0
+2,1
+6,0
+1
+17,0
+1
+4,0
+2,1
+3,0
+1
+0
+1
+0
+1
+b,0
+1
+3,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+6,0
+4,1
+3,0
+1
+6,0
+1
+5,0
+2,1
+6,0
+1
+2,0
+1
+5,0
+1
+7,0
+1
+4,0
+1
+6,0
+2,1
+3,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+4,1
+2,0
+1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+1
+3,0
+4,1
+2,0
+2,1
+0
+1
+3,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+2,1
+4,0
+1
+7,0
+2,1
+0
+3,1
+6,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+1
+4,0
+1
+3,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+1
+5,0
+2,1
+2,0
+1
+3,0
+1
+6,0
+1
+5,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+1
+5,0
+1
+7,0
+1
+4,0
+1
+6,0
+2,1
+3,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+4,0
+1
+3,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+1
+6,0
+1
+6,0
+1
+6,0
+1
+5,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+1
+d,0
+1
+6,0
+1
+4,0
+2,1
+3,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+5,0
+1
+5,0
+1
+3,0
+1
+6,0
+1
+7,0
+1
+0
+1
+8,0
+1
+9,0
+1
+0
+1
+4,0
+1
+3,0
+1
+9,0
+1
+6,0
+1
+9,0
+1
+6,0
+1
+3,0
+1
+7,0
+2,1
+3,0
+1
+0
+1
+4,0
+1
+0
+1
+3,0
+4,1
+2,0
+1
+0
+1
+6,0
+1
+5,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+3,1
+6,0
+1
+6,0
+1
+2,0
+5,1
+2,0
+1
+6,0
+1
+46,0
+2,1
+2,0
+1
+62,0
+2,1
+1a4a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr/drwstr.m b/xc/test/xsuite/xtest/tset/CH06/drwstr/drwstr.m
new file mode 100644
index 000000000..d615d79b3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr/drwstr.m
@@ -0,0 +1,184 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawString CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+int x = 2;
+int y = 20;
+char *string = "AbCdEfGhIjKlMnOpQrStUv";
+int length = strlen(string);
+>>EXTERN
+
+static Font Xtfonts[XT_NFONTS];
+>>SET startup localstartup
+>>SET cleanup fontcleanup
+static void
+localstartup()
+{
+ fontstartup();
+ if(Dsp) {
+ openfonts(Xtfonts, XT_NFONTS);
+ setgcfont(Xtfonts[1]);
+ }
+}
+
+static void
+fillbuf(bp)
+char *bp;
+{
+int i;
+
+ for (i = 0; i < 256; i++)
+ *bp++ = i;
+}
+>>ASSERTION Good A
+On a call to xname
+the image of each 8-bit character in the
+.A string ,
+as defined by the
+.M font
+in the
+.A gc ,
+is treated as an
+additional mask for a fill operation on the
+.A drawable .
+>>STRATEGY
+For each font
+ Draw string to draw each character in font.
+ Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+char buf[256];
+unsigned int width, height;
+int ncheck;
+int c;
+int fn;
+
+ fillbuf(buf);
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ getsize(display, d, &width, &height);
+
+ ncheck = 0;
+ for (fn = 0; fn < XT_NFONTS; fn++) {
+ XSetFont(display, gc, Xtfonts[fn]);
+
+ if (fn == 4 || fn == 6)
+ x = width - 4;
+ else
+ x = 0;
+
+ for (c = 0; c < 256; ) {
+ debug(1, "Chars from %d...", c);
+ for (y = 20; y < height; y += 20) {
+ if (c < 256) {
+ string = buf+c;
+ length = (256-c < 8)? 256-c: 8;
+ c += 8;
+
+ XCALL;
+ }
+ }
+ debug(1, "..to char %d", c);
+
+ ncheck++;
+ PIXCHECK(display, d);
+ dclear(display, d);
+ }
+ }
+ }
+
+ CHECKPASS(ncheck*nvinf());
+
+>>ASSERTION Good B 3
+When the font is defined with 2-byte matrix indexing, then
+each byte is used as a byte2 with a byte1 of zero.
+>>ASSERTION Good A
+The origin of the string is at
+[
+.A x ,
+.A y
+].
+>>STRATEGY
+Vary x and y.
+Draw string with single character.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+unsigned int width, height;
+
+ string = "z";
+ length = 1;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ getsize(display, d, &width, &height);
+
+ for (x = 0; x < width; x += 15) {
+ for (y = 0; y < height; y += 15) {
+ XCALL;
+ }
+ }
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+The drawable is modified only where the font character has a bit set to 1.
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M fill-style ,
+.M font ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin
+and
+.M tile-stipple-y-origin
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY kieron Completed Checked and passed ac
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr16/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a1.dat
new file mode 100644
index 000000000..f1992290c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a1.dat
@@ -0,0 +1,385 @@
+! $XConsortium$
+100 90 32
+720,0
+1
+3,0
+1
+6,0
+1
+3,0
+1
+b,0
+2,1
+33,0
+b,1
+2,0
+1
+7,0
+1
+3,0
+1
+5,0
+1
+3,0
+1
+a,0
+2,1
+34,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+6,0
+1
+0
+1
+3,0
+d,1
+5,0
+1
+36,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+6,0
+1
+3,0
+1
+40,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+2,0
+5,1
+5,0
+d,1
+3c,0
+b,1
+2,0
+1
+7,0
+1
+9,0
+1
+2,0
+1
+41,0
+1
+4,0
+1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+b,1
+3d,0
+1
+3,0
+2,1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3d,0
+1
+3,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3d,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+0
+1
+2,0
+4,1
+6,0
+1
+0
+1
+4,0
+4,1
+3d,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+3d,0
+1
+9,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+1
+9,0
+1
+3d,0
+b,1
+3,0
+1
+3,0
+3,1
+7,0
+b,1
+3d,0
+1
+9,0
+1
+11,0
+1
+9,0
+1
+76f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+5,1
+2,0
+2,1
+4,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+3,1
+3,0
+2,1
+54,0
+2,1
+3,0
+2,1
+0
+3,1
+3,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+4,1
+4,0
+4,1
+2,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+5,1
+2,0
+4,1
+2,0
+2,1
+2f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+4,1
+0
+2,1
+0
+2,1
+0
+2,1
+30,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+2c,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+4,1
+2c,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+4,1
+2d,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+5,1
+2,0
+2,1
+3,0
+3,1
+bb8,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr16/a23.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a23.dat
new file mode 100644
index 000000000..575af7465
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a23.dat
@@ -0,0 +1,201 @@
+! $XConsortium$
+100 90 32
+720,0
+1
+3,0
+1
+6,0
+1
+3,0
+1
+b,0
+2,1
+33,0
+b,1
+2,0
+1
+7,0
+1
+3,0
+1
+5,0
+1
+3,0
+1
+a,0
+2,1
+34,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+6,0
+1
+0
+1
+3,0
+d,1
+5,0
+1
+36,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+6,0
+1
+3,0
+1
+40,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+2,0
+5,1
+5,0
+d,1
+3c,0
+b,1
+2,0
+1
+7,0
+1
+9,0
+1
+2,0
+1
+41,0
+1
+4,0
+1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+b,1
+3d,0
+1
+3,0
+2,1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3d,0
+1
+3,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3d,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+0
+1
+2,0
+4,1
+6,0
+1
+0
+1
+4,0
+4,1
+3d,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+3d,0
+1
+9,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+1
+9,0
+1
+3d,0
+b,1
+3,0
+1
+3,0
+3,1
+7,0
+b,1
+3d,0
+1
+9,0
+1
+11,0
+1
+9,0
+1
+16e1,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr16/a24.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a24.dat
new file mode 100644
index 000000000..0367ac0d7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a24.dat
@@ -0,0 +1,245 @@
+! $XConsortium$
+100 90 32
+720,0
+3
+3,0
+2
+6,0
+3
+3,0
+3
+b,0
+2,3
+33,0
+b,3
+2,0
+3
+7,0
+3
+3,0
+3
+5,0
+3
+3,0
+3
+a,0
+2,3
+34,0
+2
+4,0
+3
+4,0
+2
+3,0
+2
+6,0
+2
+0
+3
+3,0
+d,2
+5,0
+3
+36,0
+2
+4,0
+2
+4,0
+2
+3,0
+3
+0
+3
+4,0
+3
+3,2
+6,0
+3
+3,0
+3
+40,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+2,0
+2
+2,3
+2,2
+5,0
+2,2
+2,3
+2
+4,3
+2
+2,3
+2
+3c,0
+2
+9,3
+2
+2,0
+2
+7,0
+3
+9,0
+2
+2,0
+2
+41,0
+3
+4,0
+3
+4,0
+3
+2,0
+2
+7,0
+2
+6,0
+2
+3
+2
+3
+4,2
+3
+2
+3
+3d,0
+3
+3,0
+2,2
+4,0
+3
+2,0
+2
+7,0
+3
+6,0
+2
+2,0
+3
+2,0
+2
+3,0
+3
+3d,0
+2
+3,0
+3
+0
+3
+3,0
+2
+2,0
+3
+7,0
+2
+6,0
+3
+2,0
+2
+2,0
+2
+2,0
+3
+2
+3d,0
+2
+2,0
+3
+3,0
+3
+2,0
+2
+2,0
+3
+0
+2
+2,0
+3
+2
+3
+2
+6,0
+3
+0
+3
+4,0
+3
+2
+3
+2
+3d,0
+2
+0
+2
+5,0
+2
+0
+2
+3,0
+3
+2,0
+3
+3,0
+2
+3
+5,0
+3
+2
+8,0
+2
+3d,0
+2
+9,0
+2
+3,0
+2
+2,0
+2
+3,0
+2
+0
+3
+4,0
+3
+9,0
+2
+3d,0
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3,0
+2
+3,0
+3
+2
+3
+7,0
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3d,0
+3
+9,0
+3
+11,0
+2
+9,0
+3
+16e1,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr16/a25.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a25.dat
new file mode 100644
index 000000000..5aaf7a47f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a25.dat
@@ -0,0 +1,215 @@
+! $XConsortium$
+100 90 32
+720,0
+2
+3,0
+2
+6,0
+2
+3,0
+3
+b,0
+3
+2
+33,0
+3,2
+4,3
+4,2
+2,0
+3
+7,0
+2
+3,0
+2
+5,0
+2
+3,0
+2
+a,0
+2,2
+34,0
+2
+4,0
+3
+4,0
+3
+3,0
+2
+6,0
+3
+0
+3
+3,0
+9,3
+4,2
+5,0
+3
+36,0
+2
+4,0
+3
+4,0
+3
+3,0
+3
+0
+2
+4,0
+4,2
+6,0
+3
+3,0
+3
+40,0
+3
+4,0
+3
+4,0
+2
+3,0
+2
+2,0
+3,2
+2,3
+5,0
+5,3
+8,2
+3c,0
+2,3
+6,2
+3,3
+2,0
+3
+7,0
+3
+9,0
+2
+2,0
+3
+41,0
+2
+4,0
+3
+4,0
+3
+2,0
+3
+7,0
+3
+6,0
+a,3
+2
+3d,0
+3
+3,0
+2,3
+4,0
+2
+2,0
+2
+7,0
+3
+6,0
+3
+2,0
+3
+2,0
+2
+3,0
+3
+3d,0
+3
+3,0
+3
+0
+2
+3,0
+3
+2,0
+3
+7,0
+3
+6,0
+3
+2,0
+2
+2,0
+3
+2,0
+2,3
+3d,0
+3
+2,0
+2
+3,0
+3
+2,0
+3
+2,0
+2
+0
+2
+2,0
+2,3
+2,2
+6,0
+2
+0
+3
+4,0
+4,2
+3d,0
+2
+0
+2
+5,0
+2
+0
+2
+3,0
+3
+2,0
+2
+3,0
+2,2
+5,0
+2,3
+8,0
+3
+3d,0
+2
+9,0
+3
+3,0
+2
+2,0
+3
+3,0
+3
+0
+3
+4,0
+2
+9,0
+2
+3d,0
+3,2
+4,3
+4,2
+3,0
+3
+3,0
+3,2
+7,0
+3,3
+6,2
+2,3
+3d,0
+2
+9,0
+3
+11,0
+3
+9,0
+2
+16e1,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr16/a26.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a26.dat
new file mode 100644
index 000000000..5b1136c59
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a26.dat
@@ -0,0 +1,125 @@
+! $XConsortium$
+100 90 32
+72f,0
+1
+b,0
+1
+37,0
+4,1
+6,0
+1
+5b,0
+1
+4,0
+1
+a,0
+1
+0
+1
+3,0
+9,1
+9,0
+1
+3b,0
+1
+4,0
+1
+3,0
+1
+10,0
+1
+3,0
+1
+40,0
+1
+4,0
+1
+e,0
+2,1
+5,0
+5,1
+44,0
+2,1
+6,0
+3,1
+2,0
+1
+7,0
+1
+c,0
+1
+46,0
+1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+a,1
+3e,0
+1
+3,0
+2,1
+f,0
+1
+6,0
+1
+2,0
+1
+6,0
+1
+3d,0
+1
+3,0
+1
+5,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+5,0
+1
+2,0
+2,1
+3d,0
+1
+6,0
+1
+2,0
+1
+7,0
+2,1
+a,0
+1
+53,0
+1
+d,0
+2,1
+8,0
+1
+47,0
+1
+6,0
+1
+3,0
+1
+0
+1
+4f,0
+4,1
+7,0
+1
+d,0
+3,1
+6,0
+2,1
+47,0
+1
+11,0
+1
+16eb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr16/a3.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a3.dat
new file mode 100644
index 000000000..cb510fc0e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a3.dat
@@ -0,0 +1,1073 @@
+! $XConsortium$
+100 90 32
+0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+269,0
+3,1
+11,0
+3,1
+11,0
+3,1
+11,0
+3,1
+11,0
+3,1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+269,0
+3,1
+11,0
+3,1
+11,0
+3,1
+11,0
+3,1
+11,0
+3,1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+269,0
+3,1
+11,0
+3,1
+11,0
+3,1
+11,0
+3,1
+11,0
+3,1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+269,0
+3,1
+11,0
+3,1
+11,0
+3,1
+11,0
+3,1
+11,0
+3,1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+11,0
+1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+5,1
+0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+1
+5,0
+1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+d,0
+7,1
+32c,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr16/a30.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a30.dat
new file mode 100644
index 000000000..2bdb1e21f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a30.dat
@@ -0,0 +1,311 @@
+! $XConsortium$
+100 90 32
+720,0
+1
+3,0
+1
+4b,0
+b,1
+2,0
+1
+7,0
+1
+3,0
+1
+4a,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+6,0
+1
+0
+1
+3,0
+2,1
+47,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+4b,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+2,0
+5,1
+5,0
+2,1
+47,0
+b,1
+2,0
+1
+7,0
+1
+4e,0
+1
+4,0
+1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+47,0
+1
+3,0
+2,1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+47,0
+1
+3,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+47,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+0
+1
+2,0
+4,1
+6,0
+1
+47,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+2,1
+5,0
+1
+47,0
+1
+9,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+1
+17b3,0
+100 90 32
+bbc,0
+b,1
+3,0
+1
+3,0
+3,1
+7,0
+1
+47,0
+1
+9,0
+1
+11,0
+1
+16eb,0
+100 90 32
+2328,0
+100 90 32
+72b,0
+1
+3,0
+1
+b,0
+2,1
+52,0
+1
+3,0
+1
+a,0
+2,1
+51,0
+b,1
+5,0
+1
+55,0
+1
+3,0
+1
+5d,0
+b,1
+5b,0
+1
+2,0
+1
+5e,0
+a,1
+5c,0
+1
+2,0
+1
+3,0
+1
+5c,0
+1
+2,0
+1
+2,0
+2,1
+5b,0
+1
+4,0
+4,1
+5a,0
+1
+8,0
+1
+63,0
+1
+17a9,0
+100 90 32
+bd9,0
+a,1
+63,0
+1
+16e1,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+bbc,0
+b,1
+3,0
+1
+3,0
+3,1
+7,0
+1
+47,0
+1
+9,0
+1
+11,0
+1
+16eb,0
+100 90 32
+2328,0
+100 90 32
+72b,0
+1
+3,0
+1
+b,0
+2,1
+52,0
+1
+3,0
+1
+a,0
+2,1
+51,0
+b,1
+5,0
+1
+55,0
+1
+3,0
+1
+5d,0
+b,1
+5b,0
+1
+2,0
+1
+5e,0
+a,1
+5c,0
+1
+2,0
+1
+3,0
+1
+5c,0
+1
+2,0
+1
+2,0
+2,1
+5b,0
+1
+4,0
+4,1
+5a,0
+1
+8,0
+1
+63,0
+1
+17a9,0
+100 90 32
+bd9,0
+a,1
+63,0
+1
+16e1,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr16/a33.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a33.dat
new file mode 100644
index 000000000..5b1136c59
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a33.dat
@@ -0,0 +1,125 @@
+! $XConsortium$
+100 90 32
+72f,0
+1
+b,0
+1
+37,0
+4,1
+6,0
+1
+5b,0
+1
+4,0
+1
+a,0
+1
+0
+1
+3,0
+9,1
+9,0
+1
+3b,0
+1
+4,0
+1
+3,0
+1
+10,0
+1
+3,0
+1
+40,0
+1
+4,0
+1
+e,0
+2,1
+5,0
+5,1
+44,0
+2,1
+6,0
+3,1
+2,0
+1
+7,0
+1
+c,0
+1
+46,0
+1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+a,1
+3e,0
+1
+3,0
+2,1
+f,0
+1
+6,0
+1
+2,0
+1
+6,0
+1
+3d,0
+1
+3,0
+1
+5,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+5,0
+1
+2,0
+2,1
+3d,0
+1
+6,0
+1
+2,0
+1
+7,0
+2,1
+a,0
+1
+53,0
+1
+d,0
+2,1
+8,0
+1
+47,0
+1
+6,0
+1
+3,0
+1
+0
+1
+4f,0
+4,1
+7,0
+1
+d,0
+3,1
+6,0
+2,1
+47,0
+1
+11,0
+1
+16eb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr16/a35.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a35.dat
new file mode 100644
index 000000000..0f3f3565b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a35.dat
@@ -0,0 +1,6803 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+720,0
+1
+3,0
+1
+6,0
+1
+3,0
+1
+b,0
+2,1
+33,0
+b,1
+2,0
+1
+7,0
+1
+3,0
+1
+5,0
+1
+3,0
+1
+a,0
+2,1
+34,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+6,0
+1
+0
+1
+3,0
+d,1
+5,0
+1
+36,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+6,0
+1
+3,0
+1
+40,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+2,0
+5,1
+5,0
+d,1
+3c,0
+b,1
+2,0
+1
+7,0
+1
+9,0
+1
+2,0
+1
+41,0
+1
+4,0
+1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+b,1
+3d,0
+1
+3,0
+2,1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3d,0
+1
+3,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3d,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+0
+1
+2,0
+4,1
+6,0
+1
+0
+1
+4,0
+4,1
+3d,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+3d,0
+1
+9,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+1
+9,0
+1
+3d,0
+b,1
+3,0
+1
+3,0
+3,1
+7,0
+b,1
+3d,0
+1
+9,0
+1
+11,0
+1
+9,0
+1
+16e1,0
+100 90 32
+720,0
+2
+3,0
+2
+6,0
+2
+3,0
+2
+b,0
+2,2
+33,0
+b,2
+2,0
+2
+7,0
+2
+3,0
+2
+5,0
+2
+3,0
+2
+a,0
+2,2
+34,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+6,0
+2
+0
+2
+3,0
+d,2
+5,0
+2
+36,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+6,0
+2
+3,0
+2
+40,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+2,0
+5,2
+5,0
+d,2
+3c,0
+b,2
+2,0
+2
+7,0
+2
+9,0
+2
+2,0
+2
+41,0
+2
+4,0
+2
+4,0
+2
+2,0
+2
+7,0
+2
+6,0
+b,2
+3d,0
+2
+3,0
+2,2
+4,0
+2
+2,0
+2
+7,0
+2
+6,0
+2
+2,0
+2
+2,0
+2
+3,0
+2
+3d,0
+2
+3,0
+2
+0
+2
+3,0
+2
+2,0
+2
+7,0
+2
+6,0
+2
+2,0
+2
+2,0
+2
+2,0
+2,2
+3d,0
+2
+2,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+0
+2
+2,0
+4,2
+6,0
+2
+0
+2
+4,0
+4,2
+3d,0
+2
+0
+2
+5,0
+2
+0
+2
+3,0
+2
+2,0
+2
+3,0
+2,2
+5,0
+2,2
+8,0
+2
+3d,0
+2
+9,0
+2
+3,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+2
+9,0
+2
+3d,0
+b,2
+3,0
+2
+3,0
+3,2
+7,0
+b,2
+3d,0
+2
+9,0
+2
+11,0
+2
+9,0
+2
+16e1,0
+100 90 32
+720,0
+3
+3,0
+3
+6,0
+3
+3,0
+3
+b,0
+2,3
+33,0
+b,3
+2,0
+3
+7,0
+3
+3,0
+3
+5,0
+3
+3,0
+3
+a,0
+2,3
+34,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+6,0
+3
+0
+3
+3,0
+d,3
+5,0
+3
+36,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+6,0
+3
+3,0
+3
+40,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+2,0
+5,3
+5,0
+d,3
+3c,0
+b,3
+2,0
+3
+7,0
+3
+9,0
+3
+2,0
+3
+41,0
+3
+4,0
+3
+4,0
+3
+2,0
+3
+7,0
+3
+6,0
+b,3
+3d,0
+3
+3,0
+2,3
+4,0
+3
+2,0
+3
+7,0
+3
+6,0
+3
+2,0
+3
+2,0
+3
+3,0
+3
+3d,0
+3
+3,0
+3
+0
+3
+3,0
+3
+2,0
+3
+7,0
+3
+6,0
+3
+2,0
+3
+2,0
+3
+2,0
+2,3
+3d,0
+3
+2,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+0
+3
+2,0
+4,3
+6,0
+3
+0
+3
+4,0
+4,3
+3d,0
+3
+0
+3
+5,0
+3
+0
+3
+3,0
+3
+2,0
+3
+3,0
+2,3
+5,0
+2,3
+8,0
+3
+3d,0
+3
+9,0
+3
+3,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+3
+9,0
+3
+3d,0
+b,3
+3,0
+3
+3,0
+3,3
+7,0
+b,3
+3d,0
+3
+9,0
+3
+11,0
+3
+9,0
+3
+16e1,0
+100 90 32
+720,0
+4
+3,0
+4
+6,0
+4
+3,0
+4
+b,0
+2,4
+33,0
+b,4
+2,0
+4
+7,0
+4
+3,0
+4
+5,0
+4
+3,0
+4
+a,0
+2,4
+34,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+6,0
+4
+0
+4
+3,0
+d,4
+5,0
+4
+36,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+6,0
+4
+3,0
+4
+40,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+2,0
+5,4
+5,0
+d,4
+3c,0
+b,4
+2,0
+4
+7,0
+4
+9,0
+4
+2,0
+4
+41,0
+4
+4,0
+4
+4,0
+4
+2,0
+4
+7,0
+4
+6,0
+b,4
+3d,0
+4
+3,0
+2,4
+4,0
+4
+2,0
+4
+7,0
+4
+6,0
+4
+2,0
+4
+2,0
+4
+3,0
+4
+3d,0
+4
+3,0
+4
+0
+4
+3,0
+4
+2,0
+4
+7,0
+4
+6,0
+4
+2,0
+4
+2,0
+4
+2,0
+2,4
+3d,0
+4
+2,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+0
+4
+2,0
+4,4
+6,0
+4
+0
+4
+4,0
+4,4
+3d,0
+4
+0
+4
+5,0
+4
+0
+4
+3,0
+4
+2,0
+4
+3,0
+2,4
+5,0
+2,4
+8,0
+4
+3d,0
+4
+9,0
+4
+3,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4
+9,0
+4
+3d,0
+b,4
+3,0
+4
+3,0
+3,4
+7,0
+b,4
+3d,0
+4
+9,0
+4
+11,0
+4
+9,0
+4
+16e1,0
+100 90 32
+720,0
+6
+3,0
+6
+6,0
+6
+3,0
+6
+b,0
+2,6
+33,0
+b,6
+2,0
+6
+7,0
+6
+3,0
+6
+5,0
+6
+3,0
+6
+a,0
+2,6
+34,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+6,0
+6
+0
+6
+3,0
+d,6
+5,0
+6
+36,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+6,0
+6
+3,0
+6
+40,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+2,0
+5,6
+5,0
+d,6
+3c,0
+b,6
+2,0
+6
+7,0
+6
+9,0
+6
+2,0
+6
+41,0
+6
+4,0
+6
+4,0
+6
+2,0
+6
+7,0
+6
+6,0
+b,6
+3d,0
+6
+3,0
+2,6
+4,0
+6
+2,0
+6
+7,0
+6
+6,0
+6
+2,0
+6
+2,0
+6
+3,0
+6
+3d,0
+6
+3,0
+6
+0
+6
+3,0
+6
+2,0
+6
+7,0
+6
+6,0
+6
+2,0
+6
+2,0
+6
+2,0
+2,6
+3d,0
+6
+2,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+0
+6
+2,0
+4,6
+6,0
+6
+0
+6
+4,0
+4,6
+3d,0
+6
+0
+6
+5,0
+6
+0
+6
+3,0
+6
+2,0
+6
+3,0
+2,6
+5,0
+2,6
+8,0
+6
+3d,0
+6
+9,0
+6
+3,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+6
+9,0
+6
+3d,0
+b,6
+3,0
+6
+3,0
+3,6
+7,0
+b,6
+3d,0
+6
+9,0
+6
+11,0
+6
+9,0
+6
+16e1,0
+100 90 32
+720,0
+7
+3,0
+7
+6,0
+7
+3,0
+7
+b,0
+2,7
+33,0
+b,7
+2,0
+7
+7,0
+7
+3,0
+7
+5,0
+7
+3,0
+7
+a,0
+2,7
+34,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+6,0
+7
+0
+7
+3,0
+d,7
+5,0
+7
+36,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+6,0
+7
+3,0
+7
+40,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+2,0
+5,7
+5,0
+d,7
+3c,0
+b,7
+2,0
+7
+7,0
+7
+9,0
+7
+2,0
+7
+41,0
+7
+4,0
+7
+4,0
+7
+2,0
+7
+7,0
+7
+6,0
+b,7
+3d,0
+7
+3,0
+2,7
+4,0
+7
+2,0
+7
+7,0
+7
+6,0
+7
+2,0
+7
+2,0
+7
+3,0
+7
+3d,0
+7
+3,0
+7
+0
+7
+3,0
+7
+2,0
+7
+7,0
+7
+6,0
+7
+2,0
+7
+2,0
+7
+2,0
+2,7
+3d,0
+7
+2,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+0
+7
+2,0
+4,7
+6,0
+7
+0
+7
+4,0
+4,7
+3d,0
+7
+0
+7
+5,0
+7
+0
+7
+3,0
+7
+2,0
+7
+3,0
+2,7
+5,0
+2,7
+8,0
+7
+3d,0
+7
+9,0
+7
+3,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+7
+9,0
+7
+3d,0
+b,7
+3,0
+7
+3,0
+3,7
+7,0
+b,7
+3d,0
+7
+9,0
+7
+11,0
+7
+9,0
+7
+16e1,0
+100 90 32
+720,0
+10
+3,0
+10
+6,0
+10
+3,0
+10
+b,0
+2,10
+33,0
+b,10
+2,0
+10
+7,0
+10
+3,0
+10
+5,0
+10
+3,0
+10
+a,0
+2,10
+34,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+6,0
+10
+0
+10
+3,0
+d,10
+5,0
+10
+36,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+6,0
+10
+3,0
+10
+40,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+2,0
+5,10
+5,0
+d,10
+3c,0
+b,10
+2,0
+10
+7,0
+10
+9,0
+10
+2,0
+10
+41,0
+10
+4,0
+10
+4,0
+10
+2,0
+10
+7,0
+10
+6,0
+b,10
+3d,0
+10
+3,0
+2,10
+4,0
+10
+2,0
+10
+7,0
+10
+6,0
+10
+2,0
+10
+2,0
+10
+3,0
+10
+3d,0
+10
+3,0
+10
+0
+10
+3,0
+10
+2,0
+10
+7,0
+10
+6,0
+10
+2,0
+10
+2,0
+10
+2,0
+2,10
+3d,0
+10
+2,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+0
+10
+2,0
+4,10
+6,0
+10
+0
+10
+4,0
+4,10
+3d,0
+10
+0
+10
+5,0
+10
+0
+10
+3,0
+10
+2,0
+10
+3,0
+2,10
+5,0
+2,10
+8,0
+10
+3d,0
+10
+9,0
+10
+3,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+10
+9,0
+10
+3d,0
+b,10
+3,0
+10
+3,0
+3,10
+7,0
+b,10
+3d,0
+10
+9,0
+10
+11,0
+10
+9,0
+10
+16e1,0
+100 90 32
+720,0
+33
+3,0
+33
+6,0
+33
+3,0
+33
+b,0
+2,33
+33,0
+b,33
+2,0
+33
+7,0
+33
+3,0
+33
+5,0
+33
+3,0
+33
+a,0
+2,33
+34,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+6,0
+33
+0
+33
+3,0
+d,33
+5,0
+33
+36,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+6,0
+33
+3,0
+33
+40,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+2,0
+5,33
+5,0
+d,33
+3c,0
+b,33
+2,0
+33
+7,0
+33
+9,0
+33
+2,0
+33
+41,0
+33
+4,0
+33
+4,0
+33
+2,0
+33
+7,0
+33
+6,0
+b,33
+3d,0
+33
+3,0
+2,33
+4,0
+33
+2,0
+33
+7,0
+33
+6,0
+33
+2,0
+33
+2,0
+33
+3,0
+33
+3d,0
+33
+3,0
+33
+0
+33
+3,0
+33
+2,0
+33
+7,0
+33
+6,0
+33
+2,0
+33
+2,0
+33
+2,0
+2,33
+3d,0
+33
+2,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+0
+33
+2,0
+4,33
+6,0
+33
+0
+33
+4,0
+4,33
+3d,0
+33
+0
+33
+5,0
+33
+0
+33
+3,0
+33
+2,0
+33
+3,0
+2,33
+5,0
+2,33
+8,0
+33
+3d,0
+33
+9,0
+33
+3,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+33
+9,0
+33
+3d,0
+b,33
+3,0
+33
+3,0
+3,33
+7,0
+b,33
+3d,0
+33
+9,0
+33
+11,0
+33
+9,0
+33
+16e1,0
+100 90 32
+720,0
+81
+3,0
+81
+6,0
+81
+3,0
+81
+b,0
+2,81
+33,0
+b,81
+2,0
+81
+7,0
+81
+3,0
+81
+5,0
+81
+3,0
+81
+a,0
+2,81
+34,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+6,0
+81
+0
+81
+3,0
+d,81
+5,0
+81
+36,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+6,0
+81
+3,0
+81
+40,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+2,0
+5,81
+5,0
+d,81
+3c,0
+b,81
+2,0
+81
+7,0
+81
+9,0
+81
+2,0
+81
+41,0
+81
+4,0
+81
+4,0
+81
+2,0
+81
+7,0
+81
+6,0
+b,81
+3d,0
+81
+3,0
+2,81
+4,0
+81
+2,0
+81
+7,0
+81
+6,0
+81
+2,0
+81
+2,0
+81
+3,0
+81
+3d,0
+81
+3,0
+81
+0
+81
+3,0
+81
+2,0
+81
+7,0
+81
+6,0
+81
+2,0
+81
+2,0
+81
+2,0
+2,81
+3d,0
+81
+2,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+0
+81
+2,0
+4,81
+6,0
+81
+0
+81
+4,0
+4,81
+3d,0
+81
+0
+81
+5,0
+81
+0
+81
+3,0
+81
+2,0
+81
+3,0
+2,81
+5,0
+2,81
+8,0
+81
+3d,0
+81
+9,0
+81
+3,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+81
+9,0
+81
+3d,0
+b,81
+3,0
+81
+3,0
+3,81
+7,0
+b,81
+3d,0
+81
+9,0
+81
+11,0
+81
+9,0
+81
+16e1,0
+100 90 32
+720,0
+a3
+3,0
+a3
+6,0
+a3
+3,0
+a3
+b,0
+2,a3
+33,0
+b,a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+5,0
+a3
+3,0
+a3
+a,0
+2,a3
+34,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+6,0
+a3
+0
+a3
+3,0
+d,a3
+5,0
+a3
+36,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+6,0
+a3
+3,0
+a3
+40,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+2,0
+5,a3
+5,0
+d,a3
+3c,0
+b,a3
+2,0
+a3
+7,0
+a3
+9,0
+a3
+2,0
+a3
+41,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+b,a3
+3d,0
+a3
+3,0
+2,a3
+4,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+a3
+2,0
+a3
+2,0
+a3
+3,0
+a3
+3d,0
+a3
+3,0
+a3
+0
+a3
+3,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+a3
+2,0
+a3
+2,0
+a3
+2,0
+2,a3
+3d,0
+a3
+2,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+0
+a3
+2,0
+4,a3
+6,0
+a3
+0
+a3
+4,0
+4,a3
+3d,0
+a3
+0
+a3
+5,0
+a3
+0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+2,a3
+5,0
+2,a3
+8,0
+a3
+3d,0
+a3
+9,0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+a3
+9,0
+a3
+3d,0
+b,a3
+3,0
+a3
+3,0
+3,a3
+7,0
+b,a3
+3d,0
+a3
+9,0
+a3
+11,0
+a3
+9,0
+a3
+16e1,0
+100 90 32
+720,0
+ff
+3,0
+ff
+6,0
+ff
+3,0
+ff
+b,0
+2,ff
+33,0
+b,ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+5,0
+ff
+3,0
+ff
+a,0
+2,ff
+34,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+6,0
+ff
+0
+ff
+3,0
+d,ff
+5,0
+ff
+36,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+6,0
+ff
+3,0
+ff
+40,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+2,0
+5,ff
+5,0
+d,ff
+3c,0
+b,ff
+2,0
+ff
+7,0
+ff
+9,0
+ff
+2,0
+ff
+41,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+b,ff
+3d,0
+ff
+3,0
+2,ff
+4,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+ff
+2,0
+ff
+2,0
+ff
+3,0
+ff
+3d,0
+ff
+3,0
+ff
+0
+ff
+3,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+ff
+2,0
+ff
+2,0
+ff
+2,0
+2,ff
+3d,0
+ff
+2,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+0
+ff
+2,0
+4,ff
+6,0
+ff
+0
+ff
+4,0
+4,ff
+3d,0
+ff
+0
+ff
+5,0
+ff
+0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+2,ff
+5,0
+2,ff
+8,0
+ff
+3d,0
+ff
+9,0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+ff
+9,0
+ff
+3d,0
+b,ff
+3,0
+ff
+3,0
+3,ff
+7,0
+b,ff
+3d,0
+ff
+9,0
+ff
+11,0
+ff
+9,0
+ff
+16e1,0
+100 90 32
+720,0
+100
+3,0
+100
+6,0
+100
+3,0
+100
+b,0
+2,100
+33,0
+b,100
+2,0
+100
+7,0
+100
+3,0
+100
+5,0
+100
+3,0
+100
+a,0
+2,100
+34,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+6,0
+100
+0
+100
+3,0
+d,100
+5,0
+100
+36,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+6,0
+100
+3,0
+100
+40,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+2,0
+5,100
+5,0
+d,100
+3c,0
+b,100
+2,0
+100
+7,0
+100
+9,0
+100
+2,0
+100
+41,0
+100
+4,0
+100
+4,0
+100
+2,0
+100
+7,0
+100
+6,0
+b,100
+3d,0
+100
+3,0
+2,100
+4,0
+100
+2,0
+100
+7,0
+100
+6,0
+100
+2,0
+100
+2,0
+100
+3,0
+100
+3d,0
+100
+3,0
+100
+0
+100
+3,0
+100
+2,0
+100
+7,0
+100
+6,0
+100
+2,0
+100
+2,0
+100
+2,0
+2,100
+3d,0
+100
+2,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+0
+100
+2,0
+4,100
+6,0
+100
+0
+100
+4,0
+4,100
+3d,0
+100
+0
+100
+5,0
+100
+0
+100
+3,0
+100
+2,0
+100
+3,0
+2,100
+5,0
+2,100
+8,0
+100
+3d,0
+100
+9,0
+100
+3,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+100
+9,0
+100
+3d,0
+b,100
+3,0
+100
+3,0
+3,100
+7,0
+b,100
+3d,0
+100
+9,0
+100
+11,0
+100
+9,0
+100
+16e1,0
+100 90 32
+720,0
+12c
+3,0
+12c
+6,0
+12c
+3,0
+12c
+b,0
+2,12c
+33,0
+b,12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+5,0
+12c
+3,0
+12c
+a,0
+2,12c
+34,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+6,0
+12c
+0
+12c
+3,0
+d,12c
+5,0
+12c
+36,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+6,0
+12c
+3,0
+12c
+40,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+2,0
+5,12c
+5,0
+d,12c
+3c,0
+b,12c
+2,0
+12c
+7,0
+12c
+9,0
+12c
+2,0
+12c
+41,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+b,12c
+3d,0
+12c
+3,0
+2,12c
+4,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+12c
+2,0
+12c
+2,0
+12c
+3,0
+12c
+3d,0
+12c
+3,0
+12c
+0
+12c
+3,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+12c
+2,0
+12c
+2,0
+12c
+2,0
+2,12c
+3d,0
+12c
+2,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+0
+12c
+2,0
+4,12c
+6,0
+12c
+0
+12c
+4,0
+4,12c
+3d,0
+12c
+0
+12c
+5,0
+12c
+0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+2,12c
+5,0
+2,12c
+8,0
+12c
+3d,0
+12c
+9,0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+12c
+9,0
+12c
+3d,0
+b,12c
+3,0
+12c
+3,0
+3,12c
+7,0
+b,12c
+3d,0
+12c
+9,0
+12c
+11,0
+12c
+9,0
+12c
+16e1,0
+100 90 32
+720,0
+3e8
+3,0
+3e8
+6,0
+3e8
+3,0
+3e8
+b,0
+2,3e8
+33,0
+b,3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+5,0
+3e8
+3,0
+3e8
+a,0
+2,3e8
+34,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+6,0
+3e8
+0
+3e8
+3,0
+d,3e8
+5,0
+3e8
+36,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+6,0
+3e8
+3,0
+3e8
+40,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+2,0
+5,3e8
+5,0
+d,3e8
+3c,0
+b,3e8
+2,0
+3e8
+7,0
+3e8
+9,0
+3e8
+2,0
+3e8
+41,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+b,3e8
+3d,0
+3e8
+3,0
+2,3e8
+4,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+3e8
+2,0
+3e8
+2,0
+3e8
+3,0
+3e8
+3d,0
+3e8
+3,0
+3e8
+0
+3e8
+3,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+3e8
+2,0
+3e8
+2,0
+3e8
+2,0
+2,3e8
+3d,0
+3e8
+2,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+0
+3e8
+2,0
+4,3e8
+6,0
+3e8
+0
+3e8
+4,0
+4,3e8
+3d,0
+3e8
+0
+3e8
+5,0
+3e8
+0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+2,3e8
+5,0
+2,3e8
+8,0
+3e8
+3d,0
+3e8
+9,0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+3e8
+9,0
+3e8
+3d,0
+b,3e8
+3,0
+3e8
+3,0
+3,3e8
+7,0
+b,3e8
+3d,0
+3e8
+9,0
+3e8
+11,0
+3e8
+9,0
+3e8
+16e1,0
+100 90 32
+720,0
+111111
+3,0
+111111
+6,0
+111111
+3,0
+111111
+b,0
+2,111111
+33,0
+b,111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+5,0
+111111
+3,0
+111111
+a,0
+2,111111
+34,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+6,0
+111111
+0
+111111
+3,0
+d,111111
+5,0
+111111
+36,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+6,0
+111111
+3,0
+111111
+40,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+2,0
+5,111111
+5,0
+d,111111
+3c,0
+b,111111
+2,0
+111111
+7,0
+111111
+9,0
+111111
+2,0
+111111
+41,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+b,111111
+3d,0
+111111
+3,0
+2,111111
+4,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+111111
+2,0
+111111
+2,0
+111111
+3,0
+111111
+3d,0
+111111
+3,0
+111111
+0
+111111
+3,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+111111
+2,0
+111111
+2,0
+111111
+2,0
+2,111111
+3d,0
+111111
+2,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+0
+111111
+2,0
+4,111111
+6,0
+111111
+0
+111111
+4,0
+4,111111
+3d,0
+111111
+0
+111111
+5,0
+111111
+0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+2,111111
+5,0
+2,111111
+8,0
+111111
+3d,0
+111111
+9,0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+111111
+9,0
+111111
+3d,0
+b,111111
+3,0
+111111
+3,0
+3,111111
+7,0
+b,111111
+3d,0
+111111
+9,0
+111111
+11,0
+111111
+9,0
+111111
+16e1,0
+100 90 32
+720,0
+400200
+3,0
+400200
+6,0
+400200
+3,0
+400200
+b,0
+2,400200
+33,0
+b,400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+5,0
+400200
+3,0
+400200
+a,0
+2,400200
+34,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+6,0
+400200
+0
+400200
+3,0
+d,400200
+5,0
+400200
+36,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+6,0
+400200
+3,0
+400200
+40,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+2,0
+5,400200
+5,0
+d,400200
+3c,0
+b,400200
+2,0
+400200
+7,0
+400200
+9,0
+400200
+2,0
+400200
+41,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+b,400200
+3d,0
+400200
+3,0
+2,400200
+4,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+400200
+2,0
+400200
+2,0
+400200
+3,0
+400200
+3d,0
+400200
+3,0
+400200
+0
+400200
+3,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+400200
+2,0
+400200
+2,0
+400200
+2,0
+2,400200
+3d,0
+400200
+2,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+0
+400200
+2,0
+4,400200
+6,0
+400200
+0
+400200
+4,0
+4,400200
+3d,0
+400200
+0
+400200
+5,0
+400200
+0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+2,400200
+5,0
+2,400200
+8,0
+400200
+3d,0
+400200
+9,0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+400200
+9,0
+400200
+3d,0
+b,400200
+3,0
+400200
+3,0
+3,400200
+7,0
+b,400200
+3d,0
+400200
+9,0
+400200
+11,0
+400200
+9,0
+400200
+16e1,0
+100 90 32
+720,0
+777777
+3,0
+777777
+6,0
+777777
+3,0
+777777
+b,0
+2,777777
+33,0
+b,777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+5,0
+777777
+3,0
+777777
+a,0
+2,777777
+34,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+6,0
+777777
+0
+777777
+3,0
+d,777777
+5,0
+777777
+36,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+6,0
+777777
+3,0
+777777
+40,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+2,0
+5,777777
+5,0
+d,777777
+3c,0
+b,777777
+2,0
+777777
+7,0
+777777
+9,0
+777777
+2,0
+777777
+41,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+b,777777
+3d,0
+777777
+3,0
+2,777777
+4,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+777777
+2,0
+777777
+2,0
+777777
+3,0
+777777
+3d,0
+777777
+3,0
+777777
+0
+777777
+3,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+777777
+2,0
+777777
+2,0
+777777
+2,0
+2,777777
+3d,0
+777777
+2,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+0
+777777
+2,0
+4,777777
+6,0
+777777
+0
+777777
+4,0
+4,777777
+3d,0
+777777
+0
+777777
+5,0
+777777
+0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+2,777777
+5,0
+2,777777
+8,0
+777777
+3d,0
+777777
+9,0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+777777
+9,0
+777777
+3d,0
+b,777777
+3,0
+777777
+3,0
+3,777777
+7,0
+b,777777
+3d,0
+777777
+9,0
+777777
+11,0
+777777
+9,0
+777777
+16e1,0
+100 90 32
+720,0
+1
+3,0
+1
+6,0
+1
+3,0
+1
+b,0
+2,1
+33,0
+b,1
+2,0
+1
+7,0
+1
+3,0
+1
+5,0
+1
+3,0
+1
+a,0
+2,1
+34,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+6,0
+1
+0
+1
+3,0
+d,1
+5,0
+1
+36,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+6,0
+1
+3,0
+1
+40,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+2,0
+5,1
+5,0
+d,1
+3c,0
+b,1
+2,0
+1
+7,0
+1
+9,0
+1
+2,0
+1
+41,0
+1
+4,0
+1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+b,1
+3d,0
+1
+3,0
+2,1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3d,0
+1
+3,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3d,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+0
+1
+2,0
+4,1
+6,0
+1
+0
+1
+4,0
+4,1
+3d,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+3d,0
+1
+9,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+1
+9,0
+1
+3d,0
+b,1
+3,0
+1
+3,0
+3,1
+7,0
+b,1
+3d,0
+1
+9,0
+1
+11,0
+1
+9,0
+1
+16e1,0
+100 90 32
+720,0
+2
+3,0
+2
+6,0
+2
+3,0
+2
+b,0
+2,2
+33,0
+b,2
+2,0
+2
+7,0
+2
+3,0
+2
+5,0
+2
+3,0
+2
+a,0
+2,2
+34,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+6,0
+2
+0
+2
+3,0
+d,2
+5,0
+2
+36,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+6,0
+2
+3,0
+2
+40,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+2,0
+5,2
+5,0
+d,2
+3c,0
+b,2
+2,0
+2
+7,0
+2
+9,0
+2
+2,0
+2
+41,0
+2
+4,0
+2
+4,0
+2
+2,0
+2
+7,0
+2
+6,0
+b,2
+3d,0
+2
+3,0
+2,2
+4,0
+2
+2,0
+2
+7,0
+2
+6,0
+2
+2,0
+2
+2,0
+2
+3,0
+2
+3d,0
+2
+3,0
+2
+0
+2
+3,0
+2
+2,0
+2
+7,0
+2
+6,0
+2
+2,0
+2
+2,0
+2
+2,0
+2,2
+3d,0
+2
+2,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+0
+2
+2,0
+4,2
+6,0
+2
+0
+2
+4,0
+4,2
+3d,0
+2
+0
+2
+5,0
+2
+0
+2
+3,0
+2
+2,0
+2
+3,0
+2,2
+5,0
+2,2
+8,0
+2
+3d,0
+2
+9,0
+2
+3,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+2
+9,0
+2
+3d,0
+b,2
+3,0
+2
+3,0
+3,2
+7,0
+b,2
+3d,0
+2
+9,0
+2
+11,0
+2
+9,0
+2
+16e1,0
+100 90 32
+720,0
+3
+3,0
+3
+6,0
+3
+3,0
+3
+b,0
+2,3
+33,0
+b,3
+2,0
+3
+7,0
+3
+3,0
+3
+5,0
+3
+3,0
+3
+a,0
+2,3
+34,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+6,0
+3
+0
+3
+3,0
+d,3
+5,0
+3
+36,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+6,0
+3
+3,0
+3
+40,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+2,0
+5,3
+5,0
+d,3
+3c,0
+b,3
+2,0
+3
+7,0
+3
+9,0
+3
+2,0
+3
+41,0
+3
+4,0
+3
+4,0
+3
+2,0
+3
+7,0
+3
+6,0
+b,3
+3d,0
+3
+3,0
+2,3
+4,0
+3
+2,0
+3
+7,0
+3
+6,0
+3
+2,0
+3
+2,0
+3
+3,0
+3
+3d,0
+3
+3,0
+3
+0
+3
+3,0
+3
+2,0
+3
+7,0
+3
+6,0
+3
+2,0
+3
+2,0
+3
+2,0
+2,3
+3d,0
+3
+2,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+0
+3
+2,0
+4,3
+6,0
+3
+0
+3
+4,0
+4,3
+3d,0
+3
+0
+3
+5,0
+3
+0
+3
+3,0
+3
+2,0
+3
+3,0
+2,3
+5,0
+2,3
+8,0
+3
+3d,0
+3
+9,0
+3
+3,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+3
+9,0
+3
+3d,0
+b,3
+3,0
+3
+3,0
+3,3
+7,0
+b,3
+3d,0
+3
+9,0
+3
+11,0
+3
+9,0
+3
+16e1,0
+100 90 32
+720,0
+4
+3,0
+4
+6,0
+4
+3,0
+4
+b,0
+2,4
+33,0
+b,4
+2,0
+4
+7,0
+4
+3,0
+4
+5,0
+4
+3,0
+4
+a,0
+2,4
+34,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+6,0
+4
+0
+4
+3,0
+d,4
+5,0
+4
+36,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+6,0
+4
+3,0
+4
+40,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+2,0
+5,4
+5,0
+d,4
+3c,0
+b,4
+2,0
+4
+7,0
+4
+9,0
+4
+2,0
+4
+41,0
+4
+4,0
+4
+4,0
+4
+2,0
+4
+7,0
+4
+6,0
+b,4
+3d,0
+4
+3,0
+2,4
+4,0
+4
+2,0
+4
+7,0
+4
+6,0
+4
+2,0
+4
+2,0
+4
+3,0
+4
+3d,0
+4
+3,0
+4
+0
+4
+3,0
+4
+2,0
+4
+7,0
+4
+6,0
+4
+2,0
+4
+2,0
+4
+2,0
+2,4
+3d,0
+4
+2,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+0
+4
+2,0
+4,4
+6,0
+4
+0
+4
+4,0
+4,4
+3d,0
+4
+0
+4
+5,0
+4
+0
+4
+3,0
+4
+2,0
+4
+3,0
+2,4
+5,0
+2,4
+8,0
+4
+3d,0
+4
+9,0
+4
+3,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4
+9,0
+4
+3d,0
+b,4
+3,0
+4
+3,0
+3,4
+7,0
+b,4
+3d,0
+4
+9,0
+4
+11,0
+4
+9,0
+4
+16e1,0
+100 90 32
+720,0
+6
+3,0
+6
+6,0
+6
+3,0
+6
+b,0
+2,6
+33,0
+b,6
+2,0
+6
+7,0
+6
+3,0
+6
+5,0
+6
+3,0
+6
+a,0
+2,6
+34,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+6,0
+6
+0
+6
+3,0
+d,6
+5,0
+6
+36,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+6,0
+6
+3,0
+6
+40,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+2,0
+5,6
+5,0
+d,6
+3c,0
+b,6
+2,0
+6
+7,0
+6
+9,0
+6
+2,0
+6
+41,0
+6
+4,0
+6
+4,0
+6
+2,0
+6
+7,0
+6
+6,0
+b,6
+3d,0
+6
+3,0
+2,6
+4,0
+6
+2,0
+6
+7,0
+6
+6,0
+6
+2,0
+6
+2,0
+6
+3,0
+6
+3d,0
+6
+3,0
+6
+0
+6
+3,0
+6
+2,0
+6
+7,0
+6
+6,0
+6
+2,0
+6
+2,0
+6
+2,0
+2,6
+3d,0
+6
+2,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+0
+6
+2,0
+4,6
+6,0
+6
+0
+6
+4,0
+4,6
+3d,0
+6
+0
+6
+5,0
+6
+0
+6
+3,0
+6
+2,0
+6
+3,0
+2,6
+5,0
+2,6
+8,0
+6
+3d,0
+6
+9,0
+6
+3,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+6
+9,0
+6
+3d,0
+b,6
+3,0
+6
+3,0
+3,6
+7,0
+b,6
+3d,0
+6
+9,0
+6
+11,0
+6
+9,0
+6
+16e1,0
+100 90 32
+720,0
+7
+3,0
+7
+6,0
+7
+3,0
+7
+b,0
+2,7
+33,0
+b,7
+2,0
+7
+7,0
+7
+3,0
+7
+5,0
+7
+3,0
+7
+a,0
+2,7
+34,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+6,0
+7
+0
+7
+3,0
+d,7
+5,0
+7
+36,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+6,0
+7
+3,0
+7
+40,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+2,0
+5,7
+5,0
+d,7
+3c,0
+b,7
+2,0
+7
+7,0
+7
+9,0
+7
+2,0
+7
+41,0
+7
+4,0
+7
+4,0
+7
+2,0
+7
+7,0
+7
+6,0
+b,7
+3d,0
+7
+3,0
+2,7
+4,0
+7
+2,0
+7
+7,0
+7
+6,0
+7
+2,0
+7
+2,0
+7
+3,0
+7
+3d,0
+7
+3,0
+7
+0
+7
+3,0
+7
+2,0
+7
+7,0
+7
+6,0
+7
+2,0
+7
+2,0
+7
+2,0
+2,7
+3d,0
+7
+2,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+0
+7
+2,0
+4,7
+6,0
+7
+0
+7
+4,0
+4,7
+3d,0
+7
+0
+7
+5,0
+7
+0
+7
+3,0
+7
+2,0
+7
+3,0
+2,7
+5,0
+2,7
+8,0
+7
+3d,0
+7
+9,0
+7
+3,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+7
+9,0
+7
+3d,0
+b,7
+3,0
+7
+3,0
+3,7
+7,0
+b,7
+3d,0
+7
+9,0
+7
+11,0
+7
+9,0
+7
+16e1,0
+100 90 32
+720,0
+10
+3,0
+10
+6,0
+10
+3,0
+10
+b,0
+2,10
+33,0
+b,10
+2,0
+10
+7,0
+10
+3,0
+10
+5,0
+10
+3,0
+10
+a,0
+2,10
+34,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+6,0
+10
+0
+10
+3,0
+d,10
+5,0
+10
+36,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+6,0
+10
+3,0
+10
+40,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+2,0
+5,10
+5,0
+d,10
+3c,0
+b,10
+2,0
+10
+7,0
+10
+9,0
+10
+2,0
+10
+41,0
+10
+4,0
+10
+4,0
+10
+2,0
+10
+7,0
+10
+6,0
+b,10
+3d,0
+10
+3,0
+2,10
+4,0
+10
+2,0
+10
+7,0
+10
+6,0
+10
+2,0
+10
+2,0
+10
+3,0
+10
+3d,0
+10
+3,0
+10
+0
+10
+3,0
+10
+2,0
+10
+7,0
+10
+6,0
+10
+2,0
+10
+2,0
+10
+2,0
+2,10
+3d,0
+10
+2,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+0
+10
+2,0
+4,10
+6,0
+10
+0
+10
+4,0
+4,10
+3d,0
+10
+0
+10
+5,0
+10
+0
+10
+3,0
+10
+2,0
+10
+3,0
+2,10
+5,0
+2,10
+8,0
+10
+3d,0
+10
+9,0
+10
+3,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+10
+9,0
+10
+3d,0
+b,10
+3,0
+10
+3,0
+3,10
+7,0
+b,10
+3d,0
+10
+9,0
+10
+11,0
+10
+9,0
+10
+16e1,0
+100 90 32
+720,0
+33
+3,0
+33
+6,0
+33
+3,0
+33
+b,0
+2,33
+33,0
+b,33
+2,0
+33
+7,0
+33
+3,0
+33
+5,0
+33
+3,0
+33
+a,0
+2,33
+34,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+6,0
+33
+0
+33
+3,0
+d,33
+5,0
+33
+36,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+6,0
+33
+3,0
+33
+40,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+2,0
+5,33
+5,0
+d,33
+3c,0
+b,33
+2,0
+33
+7,0
+33
+9,0
+33
+2,0
+33
+41,0
+33
+4,0
+33
+4,0
+33
+2,0
+33
+7,0
+33
+6,0
+b,33
+3d,0
+33
+3,0
+2,33
+4,0
+33
+2,0
+33
+7,0
+33
+6,0
+33
+2,0
+33
+2,0
+33
+3,0
+33
+3d,0
+33
+3,0
+33
+0
+33
+3,0
+33
+2,0
+33
+7,0
+33
+6,0
+33
+2,0
+33
+2,0
+33
+2,0
+2,33
+3d,0
+33
+2,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+0
+33
+2,0
+4,33
+6,0
+33
+0
+33
+4,0
+4,33
+3d,0
+33
+0
+33
+5,0
+33
+0
+33
+3,0
+33
+2,0
+33
+3,0
+2,33
+5,0
+2,33
+8,0
+33
+3d,0
+33
+9,0
+33
+3,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+33
+9,0
+33
+3d,0
+b,33
+3,0
+33
+3,0
+3,33
+7,0
+b,33
+3d,0
+33
+9,0
+33
+11,0
+33
+9,0
+33
+16e1,0
+100 90 32
+720,0
+81
+3,0
+81
+6,0
+81
+3,0
+81
+b,0
+2,81
+33,0
+b,81
+2,0
+81
+7,0
+81
+3,0
+81
+5,0
+81
+3,0
+81
+a,0
+2,81
+34,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+6,0
+81
+0
+81
+3,0
+d,81
+5,0
+81
+36,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+6,0
+81
+3,0
+81
+40,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+2,0
+5,81
+5,0
+d,81
+3c,0
+b,81
+2,0
+81
+7,0
+81
+9,0
+81
+2,0
+81
+41,0
+81
+4,0
+81
+4,0
+81
+2,0
+81
+7,0
+81
+6,0
+b,81
+3d,0
+81
+3,0
+2,81
+4,0
+81
+2,0
+81
+7,0
+81
+6,0
+81
+2,0
+81
+2,0
+81
+3,0
+81
+3d,0
+81
+3,0
+81
+0
+81
+3,0
+81
+2,0
+81
+7,0
+81
+6,0
+81
+2,0
+81
+2,0
+81
+2,0
+2,81
+3d,0
+81
+2,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+0
+81
+2,0
+4,81
+6,0
+81
+0
+81
+4,0
+4,81
+3d,0
+81
+0
+81
+5,0
+81
+0
+81
+3,0
+81
+2,0
+81
+3,0
+2,81
+5,0
+2,81
+8,0
+81
+3d,0
+81
+9,0
+81
+3,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+81
+9,0
+81
+3d,0
+b,81
+3,0
+81
+3,0
+3,81
+7,0
+b,81
+3d,0
+81
+9,0
+81
+11,0
+81
+9,0
+81
+16e1,0
+100 90 32
+720,0
+a3
+3,0
+a3
+6,0
+a3
+3,0
+a3
+b,0
+2,a3
+33,0
+b,a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+5,0
+a3
+3,0
+a3
+a,0
+2,a3
+34,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+6,0
+a3
+0
+a3
+3,0
+d,a3
+5,0
+a3
+36,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+6,0
+a3
+3,0
+a3
+40,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+2,0
+5,a3
+5,0
+d,a3
+3c,0
+b,a3
+2,0
+a3
+7,0
+a3
+9,0
+a3
+2,0
+a3
+41,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+b,a3
+3d,0
+a3
+3,0
+2,a3
+4,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+a3
+2,0
+a3
+2,0
+a3
+3,0
+a3
+3d,0
+a3
+3,0
+a3
+0
+a3
+3,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+a3
+2,0
+a3
+2,0
+a3
+2,0
+2,a3
+3d,0
+a3
+2,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+0
+a3
+2,0
+4,a3
+6,0
+a3
+0
+a3
+4,0
+4,a3
+3d,0
+a3
+0
+a3
+5,0
+a3
+0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+2,a3
+5,0
+2,a3
+8,0
+a3
+3d,0
+a3
+9,0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+a3
+9,0
+a3
+3d,0
+b,a3
+3,0
+a3
+3,0
+3,a3
+7,0
+b,a3
+3d,0
+a3
+9,0
+a3
+11,0
+a3
+9,0
+a3
+16e1,0
+100 90 32
+720,0
+ff
+3,0
+ff
+6,0
+ff
+3,0
+ff
+b,0
+2,ff
+33,0
+b,ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+5,0
+ff
+3,0
+ff
+a,0
+2,ff
+34,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+6,0
+ff
+0
+ff
+3,0
+d,ff
+5,0
+ff
+36,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+6,0
+ff
+3,0
+ff
+40,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+2,0
+5,ff
+5,0
+d,ff
+3c,0
+b,ff
+2,0
+ff
+7,0
+ff
+9,0
+ff
+2,0
+ff
+41,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+b,ff
+3d,0
+ff
+3,0
+2,ff
+4,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+ff
+2,0
+ff
+2,0
+ff
+3,0
+ff
+3d,0
+ff
+3,0
+ff
+0
+ff
+3,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+ff
+2,0
+ff
+2,0
+ff
+2,0
+2,ff
+3d,0
+ff
+2,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+0
+ff
+2,0
+4,ff
+6,0
+ff
+0
+ff
+4,0
+4,ff
+3d,0
+ff
+0
+ff
+5,0
+ff
+0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+2,ff
+5,0
+2,ff
+8,0
+ff
+3d,0
+ff
+9,0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+ff
+9,0
+ff
+3d,0
+b,ff
+3,0
+ff
+3,0
+3,ff
+7,0
+b,ff
+3d,0
+ff
+9,0
+ff
+11,0
+ff
+9,0
+ff
+16e1,0
+100 90 32
+720,0
+100
+3,0
+100
+6,0
+100
+3,0
+100
+b,0
+2,100
+33,0
+b,100
+2,0
+100
+7,0
+100
+3,0
+100
+5,0
+100
+3,0
+100
+a,0
+2,100
+34,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+6,0
+100
+0
+100
+3,0
+d,100
+5,0
+100
+36,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+6,0
+100
+3,0
+100
+40,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+2,0
+5,100
+5,0
+d,100
+3c,0
+b,100
+2,0
+100
+7,0
+100
+9,0
+100
+2,0
+100
+41,0
+100
+4,0
+100
+4,0
+100
+2,0
+100
+7,0
+100
+6,0
+b,100
+3d,0
+100
+3,0
+2,100
+4,0
+100
+2,0
+100
+7,0
+100
+6,0
+100
+2,0
+100
+2,0
+100
+3,0
+100
+3d,0
+100
+3,0
+100
+0
+100
+3,0
+100
+2,0
+100
+7,0
+100
+6,0
+100
+2,0
+100
+2,0
+100
+2,0
+2,100
+3d,0
+100
+2,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+0
+100
+2,0
+4,100
+6,0
+100
+0
+100
+4,0
+4,100
+3d,0
+100
+0
+100
+5,0
+100
+0
+100
+3,0
+100
+2,0
+100
+3,0
+2,100
+5,0
+2,100
+8,0
+100
+3d,0
+100
+9,0
+100
+3,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+100
+9,0
+100
+3d,0
+b,100
+3,0
+100
+3,0
+3,100
+7,0
+b,100
+3d,0
+100
+9,0
+100
+11,0
+100
+9,0
+100
+16e1,0
+100 90 32
+720,0
+12c
+3,0
+12c
+6,0
+12c
+3,0
+12c
+b,0
+2,12c
+33,0
+b,12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+5,0
+12c
+3,0
+12c
+a,0
+2,12c
+34,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+6,0
+12c
+0
+12c
+3,0
+d,12c
+5,0
+12c
+36,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+6,0
+12c
+3,0
+12c
+40,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+2,0
+5,12c
+5,0
+d,12c
+3c,0
+b,12c
+2,0
+12c
+7,0
+12c
+9,0
+12c
+2,0
+12c
+41,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+b,12c
+3d,0
+12c
+3,0
+2,12c
+4,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+12c
+2,0
+12c
+2,0
+12c
+3,0
+12c
+3d,0
+12c
+3,0
+12c
+0
+12c
+3,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+12c
+2,0
+12c
+2,0
+12c
+2,0
+2,12c
+3d,0
+12c
+2,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+0
+12c
+2,0
+4,12c
+6,0
+12c
+0
+12c
+4,0
+4,12c
+3d,0
+12c
+0
+12c
+5,0
+12c
+0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+2,12c
+5,0
+2,12c
+8,0
+12c
+3d,0
+12c
+9,0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+12c
+9,0
+12c
+3d,0
+b,12c
+3,0
+12c
+3,0
+3,12c
+7,0
+b,12c
+3d,0
+12c
+9,0
+12c
+11,0
+12c
+9,0
+12c
+16e1,0
+100 90 32
+720,0
+3e8
+3,0
+3e8
+6,0
+3e8
+3,0
+3e8
+b,0
+2,3e8
+33,0
+b,3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+5,0
+3e8
+3,0
+3e8
+a,0
+2,3e8
+34,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+6,0
+3e8
+0
+3e8
+3,0
+d,3e8
+5,0
+3e8
+36,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+6,0
+3e8
+3,0
+3e8
+40,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+2,0
+5,3e8
+5,0
+d,3e8
+3c,0
+b,3e8
+2,0
+3e8
+7,0
+3e8
+9,0
+3e8
+2,0
+3e8
+41,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+b,3e8
+3d,0
+3e8
+3,0
+2,3e8
+4,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+3e8
+2,0
+3e8
+2,0
+3e8
+3,0
+3e8
+3d,0
+3e8
+3,0
+3e8
+0
+3e8
+3,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+3e8
+2,0
+3e8
+2,0
+3e8
+2,0
+2,3e8
+3d,0
+3e8
+2,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+0
+3e8
+2,0
+4,3e8
+6,0
+3e8
+0
+3e8
+4,0
+4,3e8
+3d,0
+3e8
+0
+3e8
+5,0
+3e8
+0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+2,3e8
+5,0
+2,3e8
+8,0
+3e8
+3d,0
+3e8
+9,0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+3e8
+9,0
+3e8
+3d,0
+b,3e8
+3,0
+3e8
+3,0
+3,3e8
+7,0
+b,3e8
+3d,0
+3e8
+9,0
+3e8
+11,0
+3e8
+9,0
+3e8
+16e1,0
+100 90 32
+720,0
+111111
+3,0
+111111
+6,0
+111111
+3,0
+111111
+b,0
+2,111111
+33,0
+b,111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+5,0
+111111
+3,0
+111111
+a,0
+2,111111
+34,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+6,0
+111111
+0
+111111
+3,0
+d,111111
+5,0
+111111
+36,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+6,0
+111111
+3,0
+111111
+40,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+2,0
+5,111111
+5,0
+d,111111
+3c,0
+b,111111
+2,0
+111111
+7,0
+111111
+9,0
+111111
+2,0
+111111
+41,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+b,111111
+3d,0
+111111
+3,0
+2,111111
+4,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+111111
+2,0
+111111
+2,0
+111111
+3,0
+111111
+3d,0
+111111
+3,0
+111111
+0
+111111
+3,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+111111
+2,0
+111111
+2,0
+111111
+2,0
+2,111111
+3d,0
+111111
+2,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+0
+111111
+2,0
+4,111111
+6,0
+111111
+0
+111111
+4,0
+4,111111
+3d,0
+111111
+0
+111111
+5,0
+111111
+0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+2,111111
+5,0
+2,111111
+8,0
+111111
+3d,0
+111111
+9,0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+111111
+9,0
+111111
+3d,0
+b,111111
+3,0
+111111
+3,0
+3,111111
+7,0
+b,111111
+3d,0
+111111
+9,0
+111111
+11,0
+111111
+9,0
+111111
+16e1,0
+100 90 32
+720,0
+400200
+3,0
+400200
+6,0
+400200
+3,0
+400200
+b,0
+2,400200
+33,0
+b,400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+5,0
+400200
+3,0
+400200
+a,0
+2,400200
+34,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+6,0
+400200
+0
+400200
+3,0
+d,400200
+5,0
+400200
+36,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+6,0
+400200
+3,0
+400200
+40,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+2,0
+5,400200
+5,0
+d,400200
+3c,0
+b,400200
+2,0
+400200
+7,0
+400200
+9,0
+400200
+2,0
+400200
+41,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+b,400200
+3d,0
+400200
+3,0
+2,400200
+4,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+400200
+2,0
+400200
+2,0
+400200
+3,0
+400200
+3d,0
+400200
+3,0
+400200
+0
+400200
+3,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+400200
+2,0
+400200
+2,0
+400200
+2,0
+2,400200
+3d,0
+400200
+2,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+0
+400200
+2,0
+4,400200
+6,0
+400200
+0
+400200
+4,0
+4,400200
+3d,0
+400200
+0
+400200
+5,0
+400200
+0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+2,400200
+5,0
+2,400200
+8,0
+400200
+3d,0
+400200
+9,0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+400200
+9,0
+400200
+3d,0
+b,400200
+3,0
+400200
+3,0
+3,400200
+7,0
+b,400200
+3d,0
+400200
+9,0
+400200
+11,0
+400200
+9,0
+400200
+16e1,0
+100 90 32
+720,0
+777777
+3,0
+777777
+6,0
+777777
+3,0
+777777
+b,0
+2,777777
+33,0
+b,777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+5,0
+777777
+3,0
+777777
+a,0
+2,777777
+34,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+6,0
+777777
+0
+777777
+3,0
+d,777777
+5,0
+777777
+36,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+6,0
+777777
+3,0
+777777
+40,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+2,0
+5,777777
+5,0
+d,777777
+3c,0
+b,777777
+2,0
+777777
+7,0
+777777
+9,0
+777777
+2,0
+777777
+41,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+b,777777
+3d,0
+777777
+3,0
+2,777777
+4,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+777777
+2,0
+777777
+2,0
+777777
+3,0
+777777
+3d,0
+777777
+3,0
+777777
+0
+777777
+3,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+777777
+2,0
+777777
+2,0
+777777
+2,0
+2,777777
+3d,0
+777777
+2,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+0
+777777
+2,0
+4,777777
+6,0
+777777
+0
+777777
+4,0
+4,777777
+3d,0
+777777
+0
+777777
+5,0
+777777
+0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+2,777777
+5,0
+2,777777
+8,0
+777777
+3d,0
+777777
+9,0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+777777
+9,0
+777777
+3d,0
+b,777777
+3,0
+777777
+3,0
+3,777777
+7,0
+b,777777
+3d,0
+777777
+9,0
+777777
+11,0
+777777
+9,0
+777777
+16e1,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr16/a37.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a37.dat
new file mode 100644
index 000000000..0f3f3565b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a37.dat
@@ -0,0 +1,6803 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+720,0
+1
+3,0
+1
+6,0
+1
+3,0
+1
+b,0
+2,1
+33,0
+b,1
+2,0
+1
+7,0
+1
+3,0
+1
+5,0
+1
+3,0
+1
+a,0
+2,1
+34,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+6,0
+1
+0
+1
+3,0
+d,1
+5,0
+1
+36,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+6,0
+1
+3,0
+1
+40,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+2,0
+5,1
+5,0
+d,1
+3c,0
+b,1
+2,0
+1
+7,0
+1
+9,0
+1
+2,0
+1
+41,0
+1
+4,0
+1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+b,1
+3d,0
+1
+3,0
+2,1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3d,0
+1
+3,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3d,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+0
+1
+2,0
+4,1
+6,0
+1
+0
+1
+4,0
+4,1
+3d,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+3d,0
+1
+9,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+1
+9,0
+1
+3d,0
+b,1
+3,0
+1
+3,0
+3,1
+7,0
+b,1
+3d,0
+1
+9,0
+1
+11,0
+1
+9,0
+1
+16e1,0
+100 90 32
+720,0
+2
+3,0
+2
+6,0
+2
+3,0
+2
+b,0
+2,2
+33,0
+b,2
+2,0
+2
+7,0
+2
+3,0
+2
+5,0
+2
+3,0
+2
+a,0
+2,2
+34,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+6,0
+2
+0
+2
+3,0
+d,2
+5,0
+2
+36,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+6,0
+2
+3,0
+2
+40,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+2,0
+5,2
+5,0
+d,2
+3c,0
+b,2
+2,0
+2
+7,0
+2
+9,0
+2
+2,0
+2
+41,0
+2
+4,0
+2
+4,0
+2
+2,0
+2
+7,0
+2
+6,0
+b,2
+3d,0
+2
+3,0
+2,2
+4,0
+2
+2,0
+2
+7,0
+2
+6,0
+2
+2,0
+2
+2,0
+2
+3,0
+2
+3d,0
+2
+3,0
+2
+0
+2
+3,0
+2
+2,0
+2
+7,0
+2
+6,0
+2
+2,0
+2
+2,0
+2
+2,0
+2,2
+3d,0
+2
+2,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+0
+2
+2,0
+4,2
+6,0
+2
+0
+2
+4,0
+4,2
+3d,0
+2
+0
+2
+5,0
+2
+0
+2
+3,0
+2
+2,0
+2
+3,0
+2,2
+5,0
+2,2
+8,0
+2
+3d,0
+2
+9,0
+2
+3,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+2
+9,0
+2
+3d,0
+b,2
+3,0
+2
+3,0
+3,2
+7,0
+b,2
+3d,0
+2
+9,0
+2
+11,0
+2
+9,0
+2
+16e1,0
+100 90 32
+720,0
+3
+3,0
+3
+6,0
+3
+3,0
+3
+b,0
+2,3
+33,0
+b,3
+2,0
+3
+7,0
+3
+3,0
+3
+5,0
+3
+3,0
+3
+a,0
+2,3
+34,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+6,0
+3
+0
+3
+3,0
+d,3
+5,0
+3
+36,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+6,0
+3
+3,0
+3
+40,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+2,0
+5,3
+5,0
+d,3
+3c,0
+b,3
+2,0
+3
+7,0
+3
+9,0
+3
+2,0
+3
+41,0
+3
+4,0
+3
+4,0
+3
+2,0
+3
+7,0
+3
+6,0
+b,3
+3d,0
+3
+3,0
+2,3
+4,0
+3
+2,0
+3
+7,0
+3
+6,0
+3
+2,0
+3
+2,0
+3
+3,0
+3
+3d,0
+3
+3,0
+3
+0
+3
+3,0
+3
+2,0
+3
+7,0
+3
+6,0
+3
+2,0
+3
+2,0
+3
+2,0
+2,3
+3d,0
+3
+2,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+0
+3
+2,0
+4,3
+6,0
+3
+0
+3
+4,0
+4,3
+3d,0
+3
+0
+3
+5,0
+3
+0
+3
+3,0
+3
+2,0
+3
+3,0
+2,3
+5,0
+2,3
+8,0
+3
+3d,0
+3
+9,0
+3
+3,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+3
+9,0
+3
+3d,0
+b,3
+3,0
+3
+3,0
+3,3
+7,0
+b,3
+3d,0
+3
+9,0
+3
+11,0
+3
+9,0
+3
+16e1,0
+100 90 32
+720,0
+4
+3,0
+4
+6,0
+4
+3,0
+4
+b,0
+2,4
+33,0
+b,4
+2,0
+4
+7,0
+4
+3,0
+4
+5,0
+4
+3,0
+4
+a,0
+2,4
+34,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+6,0
+4
+0
+4
+3,0
+d,4
+5,0
+4
+36,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+6,0
+4
+3,0
+4
+40,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+2,0
+5,4
+5,0
+d,4
+3c,0
+b,4
+2,0
+4
+7,0
+4
+9,0
+4
+2,0
+4
+41,0
+4
+4,0
+4
+4,0
+4
+2,0
+4
+7,0
+4
+6,0
+b,4
+3d,0
+4
+3,0
+2,4
+4,0
+4
+2,0
+4
+7,0
+4
+6,0
+4
+2,0
+4
+2,0
+4
+3,0
+4
+3d,0
+4
+3,0
+4
+0
+4
+3,0
+4
+2,0
+4
+7,0
+4
+6,0
+4
+2,0
+4
+2,0
+4
+2,0
+2,4
+3d,0
+4
+2,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+0
+4
+2,0
+4,4
+6,0
+4
+0
+4
+4,0
+4,4
+3d,0
+4
+0
+4
+5,0
+4
+0
+4
+3,0
+4
+2,0
+4
+3,0
+2,4
+5,0
+2,4
+8,0
+4
+3d,0
+4
+9,0
+4
+3,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4
+9,0
+4
+3d,0
+b,4
+3,0
+4
+3,0
+3,4
+7,0
+b,4
+3d,0
+4
+9,0
+4
+11,0
+4
+9,0
+4
+16e1,0
+100 90 32
+720,0
+6
+3,0
+6
+6,0
+6
+3,0
+6
+b,0
+2,6
+33,0
+b,6
+2,0
+6
+7,0
+6
+3,0
+6
+5,0
+6
+3,0
+6
+a,0
+2,6
+34,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+6,0
+6
+0
+6
+3,0
+d,6
+5,0
+6
+36,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+6,0
+6
+3,0
+6
+40,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+2,0
+5,6
+5,0
+d,6
+3c,0
+b,6
+2,0
+6
+7,0
+6
+9,0
+6
+2,0
+6
+41,0
+6
+4,0
+6
+4,0
+6
+2,0
+6
+7,0
+6
+6,0
+b,6
+3d,0
+6
+3,0
+2,6
+4,0
+6
+2,0
+6
+7,0
+6
+6,0
+6
+2,0
+6
+2,0
+6
+3,0
+6
+3d,0
+6
+3,0
+6
+0
+6
+3,0
+6
+2,0
+6
+7,0
+6
+6,0
+6
+2,0
+6
+2,0
+6
+2,0
+2,6
+3d,0
+6
+2,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+0
+6
+2,0
+4,6
+6,0
+6
+0
+6
+4,0
+4,6
+3d,0
+6
+0
+6
+5,0
+6
+0
+6
+3,0
+6
+2,0
+6
+3,0
+2,6
+5,0
+2,6
+8,0
+6
+3d,0
+6
+9,0
+6
+3,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+6
+9,0
+6
+3d,0
+b,6
+3,0
+6
+3,0
+3,6
+7,0
+b,6
+3d,0
+6
+9,0
+6
+11,0
+6
+9,0
+6
+16e1,0
+100 90 32
+720,0
+7
+3,0
+7
+6,0
+7
+3,0
+7
+b,0
+2,7
+33,0
+b,7
+2,0
+7
+7,0
+7
+3,0
+7
+5,0
+7
+3,0
+7
+a,0
+2,7
+34,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+6,0
+7
+0
+7
+3,0
+d,7
+5,0
+7
+36,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+6,0
+7
+3,0
+7
+40,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+2,0
+5,7
+5,0
+d,7
+3c,0
+b,7
+2,0
+7
+7,0
+7
+9,0
+7
+2,0
+7
+41,0
+7
+4,0
+7
+4,0
+7
+2,0
+7
+7,0
+7
+6,0
+b,7
+3d,0
+7
+3,0
+2,7
+4,0
+7
+2,0
+7
+7,0
+7
+6,0
+7
+2,0
+7
+2,0
+7
+3,0
+7
+3d,0
+7
+3,0
+7
+0
+7
+3,0
+7
+2,0
+7
+7,0
+7
+6,0
+7
+2,0
+7
+2,0
+7
+2,0
+2,7
+3d,0
+7
+2,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+0
+7
+2,0
+4,7
+6,0
+7
+0
+7
+4,0
+4,7
+3d,0
+7
+0
+7
+5,0
+7
+0
+7
+3,0
+7
+2,0
+7
+3,0
+2,7
+5,0
+2,7
+8,0
+7
+3d,0
+7
+9,0
+7
+3,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+7
+9,0
+7
+3d,0
+b,7
+3,0
+7
+3,0
+3,7
+7,0
+b,7
+3d,0
+7
+9,0
+7
+11,0
+7
+9,0
+7
+16e1,0
+100 90 32
+720,0
+10
+3,0
+10
+6,0
+10
+3,0
+10
+b,0
+2,10
+33,0
+b,10
+2,0
+10
+7,0
+10
+3,0
+10
+5,0
+10
+3,0
+10
+a,0
+2,10
+34,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+6,0
+10
+0
+10
+3,0
+d,10
+5,0
+10
+36,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+6,0
+10
+3,0
+10
+40,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+2,0
+5,10
+5,0
+d,10
+3c,0
+b,10
+2,0
+10
+7,0
+10
+9,0
+10
+2,0
+10
+41,0
+10
+4,0
+10
+4,0
+10
+2,0
+10
+7,0
+10
+6,0
+b,10
+3d,0
+10
+3,0
+2,10
+4,0
+10
+2,0
+10
+7,0
+10
+6,0
+10
+2,0
+10
+2,0
+10
+3,0
+10
+3d,0
+10
+3,0
+10
+0
+10
+3,0
+10
+2,0
+10
+7,0
+10
+6,0
+10
+2,0
+10
+2,0
+10
+2,0
+2,10
+3d,0
+10
+2,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+0
+10
+2,0
+4,10
+6,0
+10
+0
+10
+4,0
+4,10
+3d,0
+10
+0
+10
+5,0
+10
+0
+10
+3,0
+10
+2,0
+10
+3,0
+2,10
+5,0
+2,10
+8,0
+10
+3d,0
+10
+9,0
+10
+3,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+10
+9,0
+10
+3d,0
+b,10
+3,0
+10
+3,0
+3,10
+7,0
+b,10
+3d,0
+10
+9,0
+10
+11,0
+10
+9,0
+10
+16e1,0
+100 90 32
+720,0
+33
+3,0
+33
+6,0
+33
+3,0
+33
+b,0
+2,33
+33,0
+b,33
+2,0
+33
+7,0
+33
+3,0
+33
+5,0
+33
+3,0
+33
+a,0
+2,33
+34,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+6,0
+33
+0
+33
+3,0
+d,33
+5,0
+33
+36,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+6,0
+33
+3,0
+33
+40,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+2,0
+5,33
+5,0
+d,33
+3c,0
+b,33
+2,0
+33
+7,0
+33
+9,0
+33
+2,0
+33
+41,0
+33
+4,0
+33
+4,0
+33
+2,0
+33
+7,0
+33
+6,0
+b,33
+3d,0
+33
+3,0
+2,33
+4,0
+33
+2,0
+33
+7,0
+33
+6,0
+33
+2,0
+33
+2,0
+33
+3,0
+33
+3d,0
+33
+3,0
+33
+0
+33
+3,0
+33
+2,0
+33
+7,0
+33
+6,0
+33
+2,0
+33
+2,0
+33
+2,0
+2,33
+3d,0
+33
+2,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+0
+33
+2,0
+4,33
+6,0
+33
+0
+33
+4,0
+4,33
+3d,0
+33
+0
+33
+5,0
+33
+0
+33
+3,0
+33
+2,0
+33
+3,0
+2,33
+5,0
+2,33
+8,0
+33
+3d,0
+33
+9,0
+33
+3,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+33
+9,0
+33
+3d,0
+b,33
+3,0
+33
+3,0
+3,33
+7,0
+b,33
+3d,0
+33
+9,0
+33
+11,0
+33
+9,0
+33
+16e1,0
+100 90 32
+720,0
+81
+3,0
+81
+6,0
+81
+3,0
+81
+b,0
+2,81
+33,0
+b,81
+2,0
+81
+7,0
+81
+3,0
+81
+5,0
+81
+3,0
+81
+a,0
+2,81
+34,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+6,0
+81
+0
+81
+3,0
+d,81
+5,0
+81
+36,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+6,0
+81
+3,0
+81
+40,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+2,0
+5,81
+5,0
+d,81
+3c,0
+b,81
+2,0
+81
+7,0
+81
+9,0
+81
+2,0
+81
+41,0
+81
+4,0
+81
+4,0
+81
+2,0
+81
+7,0
+81
+6,0
+b,81
+3d,0
+81
+3,0
+2,81
+4,0
+81
+2,0
+81
+7,0
+81
+6,0
+81
+2,0
+81
+2,0
+81
+3,0
+81
+3d,0
+81
+3,0
+81
+0
+81
+3,0
+81
+2,0
+81
+7,0
+81
+6,0
+81
+2,0
+81
+2,0
+81
+2,0
+2,81
+3d,0
+81
+2,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+0
+81
+2,0
+4,81
+6,0
+81
+0
+81
+4,0
+4,81
+3d,0
+81
+0
+81
+5,0
+81
+0
+81
+3,0
+81
+2,0
+81
+3,0
+2,81
+5,0
+2,81
+8,0
+81
+3d,0
+81
+9,0
+81
+3,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+81
+9,0
+81
+3d,0
+b,81
+3,0
+81
+3,0
+3,81
+7,0
+b,81
+3d,0
+81
+9,0
+81
+11,0
+81
+9,0
+81
+16e1,0
+100 90 32
+720,0
+a3
+3,0
+a3
+6,0
+a3
+3,0
+a3
+b,0
+2,a3
+33,0
+b,a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+5,0
+a3
+3,0
+a3
+a,0
+2,a3
+34,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+6,0
+a3
+0
+a3
+3,0
+d,a3
+5,0
+a3
+36,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+6,0
+a3
+3,0
+a3
+40,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+2,0
+5,a3
+5,0
+d,a3
+3c,0
+b,a3
+2,0
+a3
+7,0
+a3
+9,0
+a3
+2,0
+a3
+41,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+b,a3
+3d,0
+a3
+3,0
+2,a3
+4,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+a3
+2,0
+a3
+2,0
+a3
+3,0
+a3
+3d,0
+a3
+3,0
+a3
+0
+a3
+3,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+a3
+2,0
+a3
+2,0
+a3
+2,0
+2,a3
+3d,0
+a3
+2,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+0
+a3
+2,0
+4,a3
+6,0
+a3
+0
+a3
+4,0
+4,a3
+3d,0
+a3
+0
+a3
+5,0
+a3
+0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+2,a3
+5,0
+2,a3
+8,0
+a3
+3d,0
+a3
+9,0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+a3
+9,0
+a3
+3d,0
+b,a3
+3,0
+a3
+3,0
+3,a3
+7,0
+b,a3
+3d,0
+a3
+9,0
+a3
+11,0
+a3
+9,0
+a3
+16e1,0
+100 90 32
+720,0
+ff
+3,0
+ff
+6,0
+ff
+3,0
+ff
+b,0
+2,ff
+33,0
+b,ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+5,0
+ff
+3,0
+ff
+a,0
+2,ff
+34,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+6,0
+ff
+0
+ff
+3,0
+d,ff
+5,0
+ff
+36,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+6,0
+ff
+3,0
+ff
+40,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+2,0
+5,ff
+5,0
+d,ff
+3c,0
+b,ff
+2,0
+ff
+7,0
+ff
+9,0
+ff
+2,0
+ff
+41,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+b,ff
+3d,0
+ff
+3,0
+2,ff
+4,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+ff
+2,0
+ff
+2,0
+ff
+3,0
+ff
+3d,0
+ff
+3,0
+ff
+0
+ff
+3,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+ff
+2,0
+ff
+2,0
+ff
+2,0
+2,ff
+3d,0
+ff
+2,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+0
+ff
+2,0
+4,ff
+6,0
+ff
+0
+ff
+4,0
+4,ff
+3d,0
+ff
+0
+ff
+5,0
+ff
+0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+2,ff
+5,0
+2,ff
+8,0
+ff
+3d,0
+ff
+9,0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+ff
+9,0
+ff
+3d,0
+b,ff
+3,0
+ff
+3,0
+3,ff
+7,0
+b,ff
+3d,0
+ff
+9,0
+ff
+11,0
+ff
+9,0
+ff
+16e1,0
+100 90 32
+720,0
+100
+3,0
+100
+6,0
+100
+3,0
+100
+b,0
+2,100
+33,0
+b,100
+2,0
+100
+7,0
+100
+3,0
+100
+5,0
+100
+3,0
+100
+a,0
+2,100
+34,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+6,0
+100
+0
+100
+3,0
+d,100
+5,0
+100
+36,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+6,0
+100
+3,0
+100
+40,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+2,0
+5,100
+5,0
+d,100
+3c,0
+b,100
+2,0
+100
+7,0
+100
+9,0
+100
+2,0
+100
+41,0
+100
+4,0
+100
+4,0
+100
+2,0
+100
+7,0
+100
+6,0
+b,100
+3d,0
+100
+3,0
+2,100
+4,0
+100
+2,0
+100
+7,0
+100
+6,0
+100
+2,0
+100
+2,0
+100
+3,0
+100
+3d,0
+100
+3,0
+100
+0
+100
+3,0
+100
+2,0
+100
+7,0
+100
+6,0
+100
+2,0
+100
+2,0
+100
+2,0
+2,100
+3d,0
+100
+2,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+0
+100
+2,0
+4,100
+6,0
+100
+0
+100
+4,0
+4,100
+3d,0
+100
+0
+100
+5,0
+100
+0
+100
+3,0
+100
+2,0
+100
+3,0
+2,100
+5,0
+2,100
+8,0
+100
+3d,0
+100
+9,0
+100
+3,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+100
+9,0
+100
+3d,0
+b,100
+3,0
+100
+3,0
+3,100
+7,0
+b,100
+3d,0
+100
+9,0
+100
+11,0
+100
+9,0
+100
+16e1,0
+100 90 32
+720,0
+12c
+3,0
+12c
+6,0
+12c
+3,0
+12c
+b,0
+2,12c
+33,0
+b,12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+5,0
+12c
+3,0
+12c
+a,0
+2,12c
+34,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+6,0
+12c
+0
+12c
+3,0
+d,12c
+5,0
+12c
+36,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+6,0
+12c
+3,0
+12c
+40,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+2,0
+5,12c
+5,0
+d,12c
+3c,0
+b,12c
+2,0
+12c
+7,0
+12c
+9,0
+12c
+2,0
+12c
+41,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+b,12c
+3d,0
+12c
+3,0
+2,12c
+4,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+12c
+2,0
+12c
+2,0
+12c
+3,0
+12c
+3d,0
+12c
+3,0
+12c
+0
+12c
+3,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+12c
+2,0
+12c
+2,0
+12c
+2,0
+2,12c
+3d,0
+12c
+2,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+0
+12c
+2,0
+4,12c
+6,0
+12c
+0
+12c
+4,0
+4,12c
+3d,0
+12c
+0
+12c
+5,0
+12c
+0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+2,12c
+5,0
+2,12c
+8,0
+12c
+3d,0
+12c
+9,0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+12c
+9,0
+12c
+3d,0
+b,12c
+3,0
+12c
+3,0
+3,12c
+7,0
+b,12c
+3d,0
+12c
+9,0
+12c
+11,0
+12c
+9,0
+12c
+16e1,0
+100 90 32
+720,0
+3e8
+3,0
+3e8
+6,0
+3e8
+3,0
+3e8
+b,0
+2,3e8
+33,0
+b,3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+5,0
+3e8
+3,0
+3e8
+a,0
+2,3e8
+34,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+6,0
+3e8
+0
+3e8
+3,0
+d,3e8
+5,0
+3e8
+36,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+6,0
+3e8
+3,0
+3e8
+40,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+2,0
+5,3e8
+5,0
+d,3e8
+3c,0
+b,3e8
+2,0
+3e8
+7,0
+3e8
+9,0
+3e8
+2,0
+3e8
+41,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+b,3e8
+3d,0
+3e8
+3,0
+2,3e8
+4,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+3e8
+2,0
+3e8
+2,0
+3e8
+3,0
+3e8
+3d,0
+3e8
+3,0
+3e8
+0
+3e8
+3,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+3e8
+2,0
+3e8
+2,0
+3e8
+2,0
+2,3e8
+3d,0
+3e8
+2,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+0
+3e8
+2,0
+4,3e8
+6,0
+3e8
+0
+3e8
+4,0
+4,3e8
+3d,0
+3e8
+0
+3e8
+5,0
+3e8
+0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+2,3e8
+5,0
+2,3e8
+8,0
+3e8
+3d,0
+3e8
+9,0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+3e8
+9,0
+3e8
+3d,0
+b,3e8
+3,0
+3e8
+3,0
+3,3e8
+7,0
+b,3e8
+3d,0
+3e8
+9,0
+3e8
+11,0
+3e8
+9,0
+3e8
+16e1,0
+100 90 32
+720,0
+111111
+3,0
+111111
+6,0
+111111
+3,0
+111111
+b,0
+2,111111
+33,0
+b,111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+5,0
+111111
+3,0
+111111
+a,0
+2,111111
+34,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+6,0
+111111
+0
+111111
+3,0
+d,111111
+5,0
+111111
+36,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+6,0
+111111
+3,0
+111111
+40,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+2,0
+5,111111
+5,0
+d,111111
+3c,0
+b,111111
+2,0
+111111
+7,0
+111111
+9,0
+111111
+2,0
+111111
+41,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+b,111111
+3d,0
+111111
+3,0
+2,111111
+4,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+111111
+2,0
+111111
+2,0
+111111
+3,0
+111111
+3d,0
+111111
+3,0
+111111
+0
+111111
+3,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+111111
+2,0
+111111
+2,0
+111111
+2,0
+2,111111
+3d,0
+111111
+2,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+0
+111111
+2,0
+4,111111
+6,0
+111111
+0
+111111
+4,0
+4,111111
+3d,0
+111111
+0
+111111
+5,0
+111111
+0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+2,111111
+5,0
+2,111111
+8,0
+111111
+3d,0
+111111
+9,0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+111111
+9,0
+111111
+3d,0
+b,111111
+3,0
+111111
+3,0
+3,111111
+7,0
+b,111111
+3d,0
+111111
+9,0
+111111
+11,0
+111111
+9,0
+111111
+16e1,0
+100 90 32
+720,0
+400200
+3,0
+400200
+6,0
+400200
+3,0
+400200
+b,0
+2,400200
+33,0
+b,400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+5,0
+400200
+3,0
+400200
+a,0
+2,400200
+34,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+6,0
+400200
+0
+400200
+3,0
+d,400200
+5,0
+400200
+36,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+6,0
+400200
+3,0
+400200
+40,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+2,0
+5,400200
+5,0
+d,400200
+3c,0
+b,400200
+2,0
+400200
+7,0
+400200
+9,0
+400200
+2,0
+400200
+41,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+b,400200
+3d,0
+400200
+3,0
+2,400200
+4,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+400200
+2,0
+400200
+2,0
+400200
+3,0
+400200
+3d,0
+400200
+3,0
+400200
+0
+400200
+3,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+400200
+2,0
+400200
+2,0
+400200
+2,0
+2,400200
+3d,0
+400200
+2,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+0
+400200
+2,0
+4,400200
+6,0
+400200
+0
+400200
+4,0
+4,400200
+3d,0
+400200
+0
+400200
+5,0
+400200
+0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+2,400200
+5,0
+2,400200
+8,0
+400200
+3d,0
+400200
+9,0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+400200
+9,0
+400200
+3d,0
+b,400200
+3,0
+400200
+3,0
+3,400200
+7,0
+b,400200
+3d,0
+400200
+9,0
+400200
+11,0
+400200
+9,0
+400200
+16e1,0
+100 90 32
+720,0
+777777
+3,0
+777777
+6,0
+777777
+3,0
+777777
+b,0
+2,777777
+33,0
+b,777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+5,0
+777777
+3,0
+777777
+a,0
+2,777777
+34,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+6,0
+777777
+0
+777777
+3,0
+d,777777
+5,0
+777777
+36,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+6,0
+777777
+3,0
+777777
+40,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+2,0
+5,777777
+5,0
+d,777777
+3c,0
+b,777777
+2,0
+777777
+7,0
+777777
+9,0
+777777
+2,0
+777777
+41,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+b,777777
+3d,0
+777777
+3,0
+2,777777
+4,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+777777
+2,0
+777777
+2,0
+777777
+3,0
+777777
+3d,0
+777777
+3,0
+777777
+0
+777777
+3,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+777777
+2,0
+777777
+2,0
+777777
+2,0
+2,777777
+3d,0
+777777
+2,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+0
+777777
+2,0
+4,777777
+6,0
+777777
+0
+777777
+4,0
+4,777777
+3d,0
+777777
+0
+777777
+5,0
+777777
+0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+2,777777
+5,0
+2,777777
+8,0
+777777
+3d,0
+777777
+9,0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+777777
+9,0
+777777
+3d,0
+b,777777
+3,0
+777777
+3,0
+3,777777
+7,0
+b,777777
+3d,0
+777777
+9,0
+777777
+11,0
+777777
+9,0
+777777
+16e1,0
+100 90 32
+720,0
+1
+3,0
+1
+6,0
+1
+3,0
+1
+b,0
+2,1
+33,0
+b,1
+2,0
+1
+7,0
+1
+3,0
+1
+5,0
+1
+3,0
+1
+a,0
+2,1
+34,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+6,0
+1
+0
+1
+3,0
+d,1
+5,0
+1
+36,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+6,0
+1
+3,0
+1
+40,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+2,0
+5,1
+5,0
+d,1
+3c,0
+b,1
+2,0
+1
+7,0
+1
+9,0
+1
+2,0
+1
+41,0
+1
+4,0
+1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+b,1
+3d,0
+1
+3,0
+2,1
+4,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3d,0
+1
+3,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3d,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+0
+1
+2,0
+4,1
+6,0
+1
+0
+1
+4,0
+4,1
+3d,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+3d,0
+1
+9,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+1
+9,0
+1
+3d,0
+b,1
+3,0
+1
+3,0
+3,1
+7,0
+b,1
+3d,0
+1
+9,0
+1
+11,0
+1
+9,0
+1
+16e1,0
+100 90 32
+720,0
+2
+3,0
+2
+6,0
+2
+3,0
+2
+b,0
+2,2
+33,0
+b,2
+2,0
+2
+7,0
+2
+3,0
+2
+5,0
+2
+3,0
+2
+a,0
+2,2
+34,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+6,0
+2
+0
+2
+3,0
+d,2
+5,0
+2
+36,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+6,0
+2
+3,0
+2
+40,0
+2
+4,0
+2
+4,0
+2
+3,0
+2
+2,0
+5,2
+5,0
+d,2
+3c,0
+b,2
+2,0
+2
+7,0
+2
+9,0
+2
+2,0
+2
+41,0
+2
+4,0
+2
+4,0
+2
+2,0
+2
+7,0
+2
+6,0
+b,2
+3d,0
+2
+3,0
+2,2
+4,0
+2
+2,0
+2
+7,0
+2
+6,0
+2
+2,0
+2
+2,0
+2
+3,0
+2
+3d,0
+2
+3,0
+2
+0
+2
+3,0
+2
+2,0
+2
+7,0
+2
+6,0
+2
+2,0
+2
+2,0
+2
+2,0
+2,2
+3d,0
+2
+2,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+0
+2
+2,0
+4,2
+6,0
+2
+0
+2
+4,0
+4,2
+3d,0
+2
+0
+2
+5,0
+2
+0
+2
+3,0
+2
+2,0
+2
+3,0
+2,2
+5,0
+2,2
+8,0
+2
+3d,0
+2
+9,0
+2
+3,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+2
+9,0
+2
+3d,0
+b,2
+3,0
+2
+3,0
+3,2
+7,0
+b,2
+3d,0
+2
+9,0
+2
+11,0
+2
+9,0
+2
+16e1,0
+100 90 32
+720,0
+3
+3,0
+3
+6,0
+3
+3,0
+3
+b,0
+2,3
+33,0
+b,3
+2,0
+3
+7,0
+3
+3,0
+3
+5,0
+3
+3,0
+3
+a,0
+2,3
+34,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+6,0
+3
+0
+3
+3,0
+d,3
+5,0
+3
+36,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+6,0
+3
+3,0
+3
+40,0
+3
+4,0
+3
+4,0
+3
+3,0
+3
+2,0
+5,3
+5,0
+d,3
+3c,0
+b,3
+2,0
+3
+7,0
+3
+9,0
+3
+2,0
+3
+41,0
+3
+4,0
+3
+4,0
+3
+2,0
+3
+7,0
+3
+6,0
+b,3
+3d,0
+3
+3,0
+2,3
+4,0
+3
+2,0
+3
+7,0
+3
+6,0
+3
+2,0
+3
+2,0
+3
+3,0
+3
+3d,0
+3
+3,0
+3
+0
+3
+3,0
+3
+2,0
+3
+7,0
+3
+6,0
+3
+2,0
+3
+2,0
+3
+2,0
+2,3
+3d,0
+3
+2,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+0
+3
+2,0
+4,3
+6,0
+3
+0
+3
+4,0
+4,3
+3d,0
+3
+0
+3
+5,0
+3
+0
+3
+3,0
+3
+2,0
+3
+3,0
+2,3
+5,0
+2,3
+8,0
+3
+3d,0
+3
+9,0
+3
+3,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+3
+9,0
+3
+3d,0
+b,3
+3,0
+3
+3,0
+3,3
+7,0
+b,3
+3d,0
+3
+9,0
+3
+11,0
+3
+9,0
+3
+16e1,0
+100 90 32
+720,0
+4
+3,0
+4
+6,0
+4
+3,0
+4
+b,0
+2,4
+33,0
+b,4
+2,0
+4
+7,0
+4
+3,0
+4
+5,0
+4
+3,0
+4
+a,0
+2,4
+34,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+6,0
+4
+0
+4
+3,0
+d,4
+5,0
+4
+36,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+6,0
+4
+3,0
+4
+40,0
+4
+4,0
+4
+4,0
+4
+3,0
+4
+2,0
+5,4
+5,0
+d,4
+3c,0
+b,4
+2,0
+4
+7,0
+4
+9,0
+4
+2,0
+4
+41,0
+4
+4,0
+4
+4,0
+4
+2,0
+4
+7,0
+4
+6,0
+b,4
+3d,0
+4
+3,0
+2,4
+4,0
+4
+2,0
+4
+7,0
+4
+6,0
+4
+2,0
+4
+2,0
+4
+3,0
+4
+3d,0
+4
+3,0
+4
+0
+4
+3,0
+4
+2,0
+4
+7,0
+4
+6,0
+4
+2,0
+4
+2,0
+4
+2,0
+2,4
+3d,0
+4
+2,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+0
+4
+2,0
+4,4
+6,0
+4
+0
+4
+4,0
+4,4
+3d,0
+4
+0
+4
+5,0
+4
+0
+4
+3,0
+4
+2,0
+4
+3,0
+2,4
+5,0
+2,4
+8,0
+4
+3d,0
+4
+9,0
+4
+3,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4
+9,0
+4
+3d,0
+b,4
+3,0
+4
+3,0
+3,4
+7,0
+b,4
+3d,0
+4
+9,0
+4
+11,0
+4
+9,0
+4
+16e1,0
+100 90 32
+720,0
+6
+3,0
+6
+6,0
+6
+3,0
+6
+b,0
+2,6
+33,0
+b,6
+2,0
+6
+7,0
+6
+3,0
+6
+5,0
+6
+3,0
+6
+a,0
+2,6
+34,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+6,0
+6
+0
+6
+3,0
+d,6
+5,0
+6
+36,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+6,0
+6
+3,0
+6
+40,0
+6
+4,0
+6
+4,0
+6
+3,0
+6
+2,0
+5,6
+5,0
+d,6
+3c,0
+b,6
+2,0
+6
+7,0
+6
+9,0
+6
+2,0
+6
+41,0
+6
+4,0
+6
+4,0
+6
+2,0
+6
+7,0
+6
+6,0
+b,6
+3d,0
+6
+3,0
+2,6
+4,0
+6
+2,0
+6
+7,0
+6
+6,0
+6
+2,0
+6
+2,0
+6
+3,0
+6
+3d,0
+6
+3,0
+6
+0
+6
+3,0
+6
+2,0
+6
+7,0
+6
+6,0
+6
+2,0
+6
+2,0
+6
+2,0
+2,6
+3d,0
+6
+2,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+0
+6
+2,0
+4,6
+6,0
+6
+0
+6
+4,0
+4,6
+3d,0
+6
+0
+6
+5,0
+6
+0
+6
+3,0
+6
+2,0
+6
+3,0
+2,6
+5,0
+2,6
+8,0
+6
+3d,0
+6
+9,0
+6
+3,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+6
+9,0
+6
+3d,0
+b,6
+3,0
+6
+3,0
+3,6
+7,0
+b,6
+3d,0
+6
+9,0
+6
+11,0
+6
+9,0
+6
+16e1,0
+100 90 32
+720,0
+7
+3,0
+7
+6,0
+7
+3,0
+7
+b,0
+2,7
+33,0
+b,7
+2,0
+7
+7,0
+7
+3,0
+7
+5,0
+7
+3,0
+7
+a,0
+2,7
+34,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+6,0
+7
+0
+7
+3,0
+d,7
+5,0
+7
+36,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+6,0
+7
+3,0
+7
+40,0
+7
+4,0
+7
+4,0
+7
+3,0
+7
+2,0
+5,7
+5,0
+d,7
+3c,0
+b,7
+2,0
+7
+7,0
+7
+9,0
+7
+2,0
+7
+41,0
+7
+4,0
+7
+4,0
+7
+2,0
+7
+7,0
+7
+6,0
+b,7
+3d,0
+7
+3,0
+2,7
+4,0
+7
+2,0
+7
+7,0
+7
+6,0
+7
+2,0
+7
+2,0
+7
+3,0
+7
+3d,0
+7
+3,0
+7
+0
+7
+3,0
+7
+2,0
+7
+7,0
+7
+6,0
+7
+2,0
+7
+2,0
+7
+2,0
+2,7
+3d,0
+7
+2,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+0
+7
+2,0
+4,7
+6,0
+7
+0
+7
+4,0
+4,7
+3d,0
+7
+0
+7
+5,0
+7
+0
+7
+3,0
+7
+2,0
+7
+3,0
+2,7
+5,0
+2,7
+8,0
+7
+3d,0
+7
+9,0
+7
+3,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+7
+9,0
+7
+3d,0
+b,7
+3,0
+7
+3,0
+3,7
+7,0
+b,7
+3d,0
+7
+9,0
+7
+11,0
+7
+9,0
+7
+16e1,0
+100 90 32
+720,0
+10
+3,0
+10
+6,0
+10
+3,0
+10
+b,0
+2,10
+33,0
+b,10
+2,0
+10
+7,0
+10
+3,0
+10
+5,0
+10
+3,0
+10
+a,0
+2,10
+34,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+6,0
+10
+0
+10
+3,0
+d,10
+5,0
+10
+36,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+6,0
+10
+3,0
+10
+40,0
+10
+4,0
+10
+4,0
+10
+3,0
+10
+2,0
+5,10
+5,0
+d,10
+3c,0
+b,10
+2,0
+10
+7,0
+10
+9,0
+10
+2,0
+10
+41,0
+10
+4,0
+10
+4,0
+10
+2,0
+10
+7,0
+10
+6,0
+b,10
+3d,0
+10
+3,0
+2,10
+4,0
+10
+2,0
+10
+7,0
+10
+6,0
+10
+2,0
+10
+2,0
+10
+3,0
+10
+3d,0
+10
+3,0
+10
+0
+10
+3,0
+10
+2,0
+10
+7,0
+10
+6,0
+10
+2,0
+10
+2,0
+10
+2,0
+2,10
+3d,0
+10
+2,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+0
+10
+2,0
+4,10
+6,0
+10
+0
+10
+4,0
+4,10
+3d,0
+10
+0
+10
+5,0
+10
+0
+10
+3,0
+10
+2,0
+10
+3,0
+2,10
+5,0
+2,10
+8,0
+10
+3d,0
+10
+9,0
+10
+3,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+10
+9,0
+10
+3d,0
+b,10
+3,0
+10
+3,0
+3,10
+7,0
+b,10
+3d,0
+10
+9,0
+10
+11,0
+10
+9,0
+10
+16e1,0
+100 90 32
+720,0
+33
+3,0
+33
+6,0
+33
+3,0
+33
+b,0
+2,33
+33,0
+b,33
+2,0
+33
+7,0
+33
+3,0
+33
+5,0
+33
+3,0
+33
+a,0
+2,33
+34,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+6,0
+33
+0
+33
+3,0
+d,33
+5,0
+33
+36,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+6,0
+33
+3,0
+33
+40,0
+33
+4,0
+33
+4,0
+33
+3,0
+33
+2,0
+5,33
+5,0
+d,33
+3c,0
+b,33
+2,0
+33
+7,0
+33
+9,0
+33
+2,0
+33
+41,0
+33
+4,0
+33
+4,0
+33
+2,0
+33
+7,0
+33
+6,0
+b,33
+3d,0
+33
+3,0
+2,33
+4,0
+33
+2,0
+33
+7,0
+33
+6,0
+33
+2,0
+33
+2,0
+33
+3,0
+33
+3d,0
+33
+3,0
+33
+0
+33
+3,0
+33
+2,0
+33
+7,0
+33
+6,0
+33
+2,0
+33
+2,0
+33
+2,0
+2,33
+3d,0
+33
+2,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+0
+33
+2,0
+4,33
+6,0
+33
+0
+33
+4,0
+4,33
+3d,0
+33
+0
+33
+5,0
+33
+0
+33
+3,0
+33
+2,0
+33
+3,0
+2,33
+5,0
+2,33
+8,0
+33
+3d,0
+33
+9,0
+33
+3,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+33
+9,0
+33
+3d,0
+b,33
+3,0
+33
+3,0
+3,33
+7,0
+b,33
+3d,0
+33
+9,0
+33
+11,0
+33
+9,0
+33
+16e1,0
+100 90 32
+720,0
+81
+3,0
+81
+6,0
+81
+3,0
+81
+b,0
+2,81
+33,0
+b,81
+2,0
+81
+7,0
+81
+3,0
+81
+5,0
+81
+3,0
+81
+a,0
+2,81
+34,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+6,0
+81
+0
+81
+3,0
+d,81
+5,0
+81
+36,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+6,0
+81
+3,0
+81
+40,0
+81
+4,0
+81
+4,0
+81
+3,0
+81
+2,0
+5,81
+5,0
+d,81
+3c,0
+b,81
+2,0
+81
+7,0
+81
+9,0
+81
+2,0
+81
+41,0
+81
+4,0
+81
+4,0
+81
+2,0
+81
+7,0
+81
+6,0
+b,81
+3d,0
+81
+3,0
+2,81
+4,0
+81
+2,0
+81
+7,0
+81
+6,0
+81
+2,0
+81
+2,0
+81
+3,0
+81
+3d,0
+81
+3,0
+81
+0
+81
+3,0
+81
+2,0
+81
+7,0
+81
+6,0
+81
+2,0
+81
+2,0
+81
+2,0
+2,81
+3d,0
+81
+2,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+0
+81
+2,0
+4,81
+6,0
+81
+0
+81
+4,0
+4,81
+3d,0
+81
+0
+81
+5,0
+81
+0
+81
+3,0
+81
+2,0
+81
+3,0
+2,81
+5,0
+2,81
+8,0
+81
+3d,0
+81
+9,0
+81
+3,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+81
+9,0
+81
+3d,0
+b,81
+3,0
+81
+3,0
+3,81
+7,0
+b,81
+3d,0
+81
+9,0
+81
+11,0
+81
+9,0
+81
+16e1,0
+100 90 32
+720,0
+a3
+3,0
+a3
+6,0
+a3
+3,0
+a3
+b,0
+2,a3
+33,0
+b,a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+5,0
+a3
+3,0
+a3
+a,0
+2,a3
+34,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+6,0
+a3
+0
+a3
+3,0
+d,a3
+5,0
+a3
+36,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+6,0
+a3
+3,0
+a3
+40,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+a3
+2,0
+5,a3
+5,0
+d,a3
+3c,0
+b,a3
+2,0
+a3
+7,0
+a3
+9,0
+a3
+2,0
+a3
+41,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+b,a3
+3d,0
+a3
+3,0
+2,a3
+4,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+a3
+2,0
+a3
+2,0
+a3
+3,0
+a3
+3d,0
+a3
+3,0
+a3
+0
+a3
+3,0
+a3
+2,0
+a3
+7,0
+a3
+6,0
+a3
+2,0
+a3
+2,0
+a3
+2,0
+2,a3
+3d,0
+a3
+2,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+0
+a3
+2,0
+4,a3
+6,0
+a3
+0
+a3
+4,0
+4,a3
+3d,0
+a3
+0
+a3
+5,0
+a3
+0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+2,a3
+5,0
+2,a3
+8,0
+a3
+3d,0
+a3
+9,0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+a3
+9,0
+a3
+3d,0
+b,a3
+3,0
+a3
+3,0
+3,a3
+7,0
+b,a3
+3d,0
+a3
+9,0
+a3
+11,0
+a3
+9,0
+a3
+16e1,0
+100 90 32
+720,0
+ff
+3,0
+ff
+6,0
+ff
+3,0
+ff
+b,0
+2,ff
+33,0
+b,ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+5,0
+ff
+3,0
+ff
+a,0
+2,ff
+34,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+6,0
+ff
+0
+ff
+3,0
+d,ff
+5,0
+ff
+36,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+6,0
+ff
+3,0
+ff
+40,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+ff
+2,0
+5,ff
+5,0
+d,ff
+3c,0
+b,ff
+2,0
+ff
+7,0
+ff
+9,0
+ff
+2,0
+ff
+41,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+b,ff
+3d,0
+ff
+3,0
+2,ff
+4,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+ff
+2,0
+ff
+2,0
+ff
+3,0
+ff
+3d,0
+ff
+3,0
+ff
+0
+ff
+3,0
+ff
+2,0
+ff
+7,0
+ff
+6,0
+ff
+2,0
+ff
+2,0
+ff
+2,0
+2,ff
+3d,0
+ff
+2,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+0
+ff
+2,0
+4,ff
+6,0
+ff
+0
+ff
+4,0
+4,ff
+3d,0
+ff
+0
+ff
+5,0
+ff
+0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+2,ff
+5,0
+2,ff
+8,0
+ff
+3d,0
+ff
+9,0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+ff
+9,0
+ff
+3d,0
+b,ff
+3,0
+ff
+3,0
+3,ff
+7,0
+b,ff
+3d,0
+ff
+9,0
+ff
+11,0
+ff
+9,0
+ff
+16e1,0
+100 90 32
+720,0
+100
+3,0
+100
+6,0
+100
+3,0
+100
+b,0
+2,100
+33,0
+b,100
+2,0
+100
+7,0
+100
+3,0
+100
+5,0
+100
+3,0
+100
+a,0
+2,100
+34,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+6,0
+100
+0
+100
+3,0
+d,100
+5,0
+100
+36,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+6,0
+100
+3,0
+100
+40,0
+100
+4,0
+100
+4,0
+100
+3,0
+100
+2,0
+5,100
+5,0
+d,100
+3c,0
+b,100
+2,0
+100
+7,0
+100
+9,0
+100
+2,0
+100
+41,0
+100
+4,0
+100
+4,0
+100
+2,0
+100
+7,0
+100
+6,0
+b,100
+3d,0
+100
+3,0
+2,100
+4,0
+100
+2,0
+100
+7,0
+100
+6,0
+100
+2,0
+100
+2,0
+100
+3,0
+100
+3d,0
+100
+3,0
+100
+0
+100
+3,0
+100
+2,0
+100
+7,0
+100
+6,0
+100
+2,0
+100
+2,0
+100
+2,0
+2,100
+3d,0
+100
+2,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+0
+100
+2,0
+4,100
+6,0
+100
+0
+100
+4,0
+4,100
+3d,0
+100
+0
+100
+5,0
+100
+0
+100
+3,0
+100
+2,0
+100
+3,0
+2,100
+5,0
+2,100
+8,0
+100
+3d,0
+100
+9,0
+100
+3,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+100
+9,0
+100
+3d,0
+b,100
+3,0
+100
+3,0
+3,100
+7,0
+b,100
+3d,0
+100
+9,0
+100
+11,0
+100
+9,0
+100
+16e1,0
+100 90 32
+720,0
+12c
+3,0
+12c
+6,0
+12c
+3,0
+12c
+b,0
+2,12c
+33,0
+b,12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+5,0
+12c
+3,0
+12c
+a,0
+2,12c
+34,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+6,0
+12c
+0
+12c
+3,0
+d,12c
+5,0
+12c
+36,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+6,0
+12c
+3,0
+12c
+40,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+12c
+2,0
+5,12c
+5,0
+d,12c
+3c,0
+b,12c
+2,0
+12c
+7,0
+12c
+9,0
+12c
+2,0
+12c
+41,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+b,12c
+3d,0
+12c
+3,0
+2,12c
+4,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+12c
+2,0
+12c
+2,0
+12c
+3,0
+12c
+3d,0
+12c
+3,0
+12c
+0
+12c
+3,0
+12c
+2,0
+12c
+7,0
+12c
+6,0
+12c
+2,0
+12c
+2,0
+12c
+2,0
+2,12c
+3d,0
+12c
+2,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+0
+12c
+2,0
+4,12c
+6,0
+12c
+0
+12c
+4,0
+4,12c
+3d,0
+12c
+0
+12c
+5,0
+12c
+0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+2,12c
+5,0
+2,12c
+8,0
+12c
+3d,0
+12c
+9,0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+12c
+9,0
+12c
+3d,0
+b,12c
+3,0
+12c
+3,0
+3,12c
+7,0
+b,12c
+3d,0
+12c
+9,0
+12c
+11,0
+12c
+9,0
+12c
+16e1,0
+100 90 32
+720,0
+3e8
+3,0
+3e8
+6,0
+3e8
+3,0
+3e8
+b,0
+2,3e8
+33,0
+b,3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+5,0
+3e8
+3,0
+3e8
+a,0
+2,3e8
+34,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+6,0
+3e8
+0
+3e8
+3,0
+d,3e8
+5,0
+3e8
+36,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+6,0
+3e8
+3,0
+3e8
+40,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+3e8
+2,0
+5,3e8
+5,0
+d,3e8
+3c,0
+b,3e8
+2,0
+3e8
+7,0
+3e8
+9,0
+3e8
+2,0
+3e8
+41,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+b,3e8
+3d,0
+3e8
+3,0
+2,3e8
+4,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+3e8
+2,0
+3e8
+2,0
+3e8
+3,0
+3e8
+3d,0
+3e8
+3,0
+3e8
+0
+3e8
+3,0
+3e8
+2,0
+3e8
+7,0
+3e8
+6,0
+3e8
+2,0
+3e8
+2,0
+3e8
+2,0
+2,3e8
+3d,0
+3e8
+2,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+0
+3e8
+2,0
+4,3e8
+6,0
+3e8
+0
+3e8
+4,0
+4,3e8
+3d,0
+3e8
+0
+3e8
+5,0
+3e8
+0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+2,3e8
+5,0
+2,3e8
+8,0
+3e8
+3d,0
+3e8
+9,0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+3e8
+9,0
+3e8
+3d,0
+b,3e8
+3,0
+3e8
+3,0
+3,3e8
+7,0
+b,3e8
+3d,0
+3e8
+9,0
+3e8
+11,0
+3e8
+9,0
+3e8
+16e1,0
+100 90 32
+720,0
+111111
+3,0
+111111
+6,0
+111111
+3,0
+111111
+b,0
+2,111111
+33,0
+b,111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+5,0
+111111
+3,0
+111111
+a,0
+2,111111
+34,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+6,0
+111111
+0
+111111
+3,0
+d,111111
+5,0
+111111
+36,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+6,0
+111111
+3,0
+111111
+40,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+111111
+2,0
+5,111111
+5,0
+d,111111
+3c,0
+b,111111
+2,0
+111111
+7,0
+111111
+9,0
+111111
+2,0
+111111
+41,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+b,111111
+3d,0
+111111
+3,0
+2,111111
+4,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+111111
+2,0
+111111
+2,0
+111111
+3,0
+111111
+3d,0
+111111
+3,0
+111111
+0
+111111
+3,0
+111111
+2,0
+111111
+7,0
+111111
+6,0
+111111
+2,0
+111111
+2,0
+111111
+2,0
+2,111111
+3d,0
+111111
+2,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+0
+111111
+2,0
+4,111111
+6,0
+111111
+0
+111111
+4,0
+4,111111
+3d,0
+111111
+0
+111111
+5,0
+111111
+0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+2,111111
+5,0
+2,111111
+8,0
+111111
+3d,0
+111111
+9,0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+111111
+9,0
+111111
+3d,0
+b,111111
+3,0
+111111
+3,0
+3,111111
+7,0
+b,111111
+3d,0
+111111
+9,0
+111111
+11,0
+111111
+9,0
+111111
+16e1,0
+100 90 32
+720,0
+400200
+3,0
+400200
+6,0
+400200
+3,0
+400200
+b,0
+2,400200
+33,0
+b,400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+5,0
+400200
+3,0
+400200
+a,0
+2,400200
+34,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+6,0
+400200
+0
+400200
+3,0
+d,400200
+5,0
+400200
+36,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+6,0
+400200
+3,0
+400200
+40,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+400200
+2,0
+5,400200
+5,0
+d,400200
+3c,0
+b,400200
+2,0
+400200
+7,0
+400200
+9,0
+400200
+2,0
+400200
+41,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+b,400200
+3d,0
+400200
+3,0
+2,400200
+4,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+400200
+2,0
+400200
+2,0
+400200
+3,0
+400200
+3d,0
+400200
+3,0
+400200
+0
+400200
+3,0
+400200
+2,0
+400200
+7,0
+400200
+6,0
+400200
+2,0
+400200
+2,0
+400200
+2,0
+2,400200
+3d,0
+400200
+2,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+0
+400200
+2,0
+4,400200
+6,0
+400200
+0
+400200
+4,0
+4,400200
+3d,0
+400200
+0
+400200
+5,0
+400200
+0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+2,400200
+5,0
+2,400200
+8,0
+400200
+3d,0
+400200
+9,0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+400200
+9,0
+400200
+3d,0
+b,400200
+3,0
+400200
+3,0
+3,400200
+7,0
+b,400200
+3d,0
+400200
+9,0
+400200
+11,0
+400200
+9,0
+400200
+16e1,0
+100 90 32
+720,0
+777777
+3,0
+777777
+6,0
+777777
+3,0
+777777
+b,0
+2,777777
+33,0
+b,777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+5,0
+777777
+3,0
+777777
+a,0
+2,777777
+34,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+6,0
+777777
+0
+777777
+3,0
+d,777777
+5,0
+777777
+36,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+6,0
+777777
+3,0
+777777
+40,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+777777
+2,0
+5,777777
+5,0
+d,777777
+3c,0
+b,777777
+2,0
+777777
+7,0
+777777
+9,0
+777777
+2,0
+777777
+41,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+b,777777
+3d,0
+777777
+3,0
+2,777777
+4,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+777777
+2,0
+777777
+2,0
+777777
+3,0
+777777
+3d,0
+777777
+3,0
+777777
+0
+777777
+3,0
+777777
+2,0
+777777
+7,0
+777777
+6,0
+777777
+2,0
+777777
+2,0
+777777
+2,0
+2,777777
+3d,0
+777777
+2,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+0
+777777
+2,0
+4,777777
+6,0
+777777
+0
+777777
+4,0
+4,777777
+3d,0
+777777
+0
+777777
+5,0
+777777
+0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+2,777777
+5,0
+2,777777
+8,0
+777777
+3d,0
+777777
+9,0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+777777
+9,0
+777777
+3d,0
+b,777777
+3,0
+777777
+3,0
+3,777777
+7,0
+b,777777
+3d,0
+777777
+9,0
+777777
+11,0
+777777
+9,0
+777777
+16e1,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr16/a39.dat b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a39.dat
new file mode 100644
index 000000000..06aea7592
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr16/a39.dat
@@ -0,0 +1,1593 @@
+! $XConsortium$
+100 90 32
+720,0
+1
+3,0
+1
+6,0
+1
+f,0
+2,1
+38,0
+4,1
+4,0
+1
+7,0
+1
+9,0
+1
+3,0
+1
+a,0
+1
+35,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+8,0
+1
+3,0
+5,1
+0
+7,1
+3c,0
+1
+4,0
+1
+4,0
+1
+a,0
+4,1
+6,0
+1
+3,0
+1
+4a,0
+1
+3,0
+1
+2,0
+3,1
+7,0
+2,1
+3,0
+4,1
+2,0
+2,1
+3c,0
+2,1
+b,0
+1
+7,0
+1
+58,0
+1
+a,0
+1
+6,0
+1
+0
+1
+0
+1
+0
+1
+41,0
+1
+c,0
+1
+18,0
+1
+41,0
+1
+0
+1
+3,0
+1
+2,0
+1
+e,0
+1
+5,0
+1
+2,0
+2,1
+3d,0
+1
+c,0
+1
+0
+1
+2,0
+4,1
+e,0
+3,1
+45,0
+1
+0
+1
+3,0
+1
+e,0
+1
+8,0
+1
+3d,0
+1
+9,0
+1
+6,0
+1
+3,0
+1
+0
+1
+4,0
+1
+4c,0
+4,1
+5,0
+1
+3,0
+3,1
+8,0
+4,1
+2,0
+4,1
+3d,0
+1
+9,0
+1
+11,0
+1
+9,0
+1
+16e1,0
+100 90 32
+720,0
+1
+3,0
+1
+6,0
+1
+3,0
+1
+b,0
+2,1
+35,0
+4,1
+3,0
+2,1
+18,0
+1
+40,0
+1
+d,0
+1
+6,0
+1
+0
+1
+d,0
+3,1
+5,0
+1
+3b,0
+1
+f,0
+2,1
+8,0
+1
+3,0
+1
+40,0
+1
+d,0
+1
+16,0
+3,1
+3f,0
+3,1
+0
+1
+0
+1
+3,0
+1
+7,0
+1
+9,0
+1
+44,0
+1
+c,0
+1
+7,0
+1
+f,0
+2,1
+47,0
+1
+2,0
+1
+11,0
+1
+2,0
+1
+3,0
+1
+3d,0
+1
+3,0
+1
+0
+1
+3,0
+1
+a,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+48,0
+1
+5,0
+1
+0
+1
+2,0
+4,1
+8,0
+1
+5,0
+3,1
+3d,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+a,0
+2,1
+8,0
+1
+3d,0
+1
+9,0
+1
+3,0
+1
+6,0
+1
+0
+1
+e,0
+1
+3f,0
+4,1
+3,0
+2,1
+7,0
+3,1
+7,0
+2,1
+3,0
+4,1
+3f,0
+1
+25,0
+1
+16e1,0
+100 90 32
+720,0
+1
+3,0
+1
+16,0
+2,1
+38,0
+6,1
+2,0
+1
+7,0
+1
+9,0
+1
+3,0
+1
+a,0
+1
+35,0
+1
+4,0
+1
+4,0
+1
+c,0
+1
+3,0
+8,1
+41,0
+1
+d,0
+1
+0
+1
+4,0
+4,1
+a,0
+1
+40,0
+1
+4,0
+1
+4,0
+1
+6,0
+5,1
+7,0
+8,1
+41,0
+6,1
+5,0
+1
+7,0
+1
+9,0
+1
+44,0
+1
+9,0
+1
+2,0
+1
+e,0
+1
+3,0
+6,1
+43,0
+1
+19,0
+1
+6,0
+1
+3d,0
+1
+9,0
+1
+2,0
+1
+14,0
+1
+2,0
+1
+3e,0
+1
+2,0
+1
+3,0
+1
+7,0
+1
+2,0
+1
+0
+1
+7,0
+1
+0
+1
+7,0
+1
+3d,0
+1
+0
+1
+5,0
+1
+0
+1
+11,0
+2,1
+46,0
+1
+10,0
+1
+3,0
+1
+0
+1
+4,0
+1
+4c,0
+6,1
+3,0
+1
+3,0
+3,1
+8,0
+a,1
+3d,0
+1
+9,0
+1
+11,0
+1
+16eb,0
+100 90 32
+72b,0
+1
+3,0
+1
+42,0
+6,1
+2,0
+1
+a,0
+1
+3,0
+1
+4a,0
+1
+4,0
+1
+8,0
+1
+8,0
+1
+3,0
+2,1
+2,0
+5,1
+2,0
+2,1
+46,0
+1
+3,0
+1
+0
+1
+e,0
+1
+3,0
+1
+40,0
+1
+d,0
+1
+4,0
+1
+0
+1
+6,0
+1
+2,0
+5,1
+2,0
+1
+3d,0
+1
+0
+1
+4,0
+1
+0
+1
+b,0
+1
+58,0
+1
+2,0
+1
+f,0
+1
+2,0
+3,1
+2,0
+1
+48,0
+1
+2,0
+1
+11,0
+1
+2,0
+1
+45,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+9,0
+1
+2,0
+1
+2,0
+1
+41,0
+1
+6,0
+1
+2,0
+1
+0
+1
+2,0
+1
+0
+1
+e,0
+1
+0
+1
+46,0
+1
+0
+1
+3,0
+1
+7,0
+1
+6,0
+1
+46,0
+1
+10,0
+1
+3,0
+1
+6,0
+1
+9,0
+1
+3d,0
+1
+0
+1
+4,0
+1
+0
+1
+4,0
+1
+4,0
+1
+8,0
+1
+2,0
+5,1
+2,0
+1
+47,0
+1
+16fd,0
+100 90 32
+720,0
+1
+3,0
+1
+6,0
+1
+3,0
+1
+b,0
+2,1
+33,0
+4,1
+0
+1
+0
+1
+0
+1
+b,0
+1
+9,0
+1
+3,0
+1
+b,0
+1
+34,0
+1
+4,0
+1
+8,0
+1
+6,0
+1
+6,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+2,1
+5,0
+1
+4d,0
+1
+4c,0
+1
+11,0
+4,1
+5,0
+1
+4,0
+1
+0
+1
+2,0
+3,1
+3c,0
+6,1
+0
+1
+d,0
+1
+4e,0
+1
+14,0
+1
+b,0
+2,1
+2,0
+2,1
+41,0
+2,1
+4,0
+1
+11,0
+1
+2,0
+1
+44,0
+1
+14,0
+1
+f,0
+2,1
+40,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+0
+1
+2,0
+1
+9,0
+1
+0
+1
+4,0
+3,1
+3e,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+3d,0
+1
+14,0
+1
+10,0
+1
+41,0
+2,1
+2,0
+3,1
+11,0
+5,1
+2,0
+2,1
+3f,0
+1
+9,0
+1
+11,0
+1
+9,0
+1
+16e1,0
+100 90 32
+720,0
+1
+1b,0
+1
+38,0
+1
+0
+1
+0
+1
+19,0
+1
+b,0
+1
+34,0
+1
+d,0
+1
+6,0
+1
+0
+1
+4,0
+1
+4,0
+1
+0
+1
+2,0
+2,1
+5,0
+1
+36,0
+1
+4,0
+1
+f,0
+4,1
+4b,0
+1
+12,0
+3,1
+5,0
+1
+6,0
+2,1
+2,0
+2,1
+41,0
+2,1
+3,0
+1
+2,0
+1
+11,0
+1
+44,0
+1
+14,0
+1
+10,0
+1
+3d,0
+1
+3,0
+2,1
+4,0
+1
+2,0
+1
+e,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3d,0
+1
+3,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3d,0
+1
+2,0
+1
+f,0
+3,1
+10,0
+1
+47,0
+1
+3,0
+1
+2,0
+1
+a,0
+2,1
+46,0
+1
+9,0
+1
+a,0
+1
+0
+1
+e,0
+1
+3d,0
+7,1
+0
+1
+9,0
+3,1
+d,0
+1
+0
+3,1
+3d,0
+1
+1b,0
+1
+9,0
+1
+16e1,0
+100 90 32
+720,0
+1
+3,0
+1
+6,0
+1
+3,0
+1
+b,0
+2,1
+35,0
+4,1
+3,0
+2,1
+18,0
+1
+40,0
+1
+d,0
+1
+6,0
+1
+0
+1
+d,0
+3,1
+5,0
+1
+3b,0
+1
+f,0
+2,1
+8,0
+1
+3,0
+1
+40,0
+1
+d,0
+1
+16,0
+3,1
+3f,0
+3,1
+0
+1
+0
+1
+3,0
+1
+7,0
+1
+9,0
+1
+44,0
+1
+c,0
+1
+7,0
+1
+f,0
+2,1
+47,0
+1
+2,0
+1
+11,0
+1
+2,0
+1
+3,0
+1
+3d,0
+1
+3,0
+1
+0
+1
+3,0
+1
+a,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+48,0
+1
+5,0
+1
+0
+1
+2,0
+4,1
+8,0
+1
+5,0
+3,1
+3d,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+a,0
+2,1
+8,0
+1
+3d,0
+1
+9,0
+1
+3,0
+1
+6,0
+1
+0
+1
+e,0
+1
+3f,0
+4,1
+3,0
+2,1
+7,0
+3,1
+7,0
+2,1
+3,0
+4,1
+3f,0
+1
+25,0
+1
+16e1,0
+100 90 32
+720,0
+1
+3,0
+1
+16,0
+2,1
+38,0
+6,1
+2,0
+1
+7,0
+1
+9,0
+1
+3,0
+1
+a,0
+1
+35,0
+1
+4,0
+1
+4,0
+1
+c,0
+1
+3,0
+8,1
+41,0
+1
+d,0
+1
+0
+1
+4,0
+4,1
+a,0
+1
+40,0
+1
+4,0
+1
+4,0
+1
+6,0
+5,1
+7,0
+8,1
+41,0
+6,1
+5,0
+1
+7,0
+1
+9,0
+1
+44,0
+1
+9,0
+1
+2,0
+1
+e,0
+1
+3,0
+6,1
+43,0
+1
+19,0
+1
+6,0
+1
+3d,0
+1
+9,0
+1
+2,0
+1
+14,0
+1
+2,0
+1
+3e,0
+1
+2,0
+1
+3,0
+1
+7,0
+1
+2,0
+1
+0
+1
+7,0
+1
+0
+1
+7,0
+1
+3d,0
+1
+0
+1
+5,0
+1
+0
+1
+11,0
+2,1
+46,0
+1
+10,0
+1
+3,0
+1
+0
+1
+4,0
+1
+4c,0
+6,1
+3,0
+1
+3,0
+3,1
+8,0
+a,1
+3d,0
+1
+9,0
+1
+11,0
+1
+16eb,0
+100 90 32
+72b,0
+1
+3,0
+1
+42,0
+6,1
+2,0
+1
+a,0
+1
+3,0
+1
+4a,0
+1
+4,0
+1
+8,0
+1
+8,0
+1
+3,0
+2,1
+2,0
+5,1
+2,0
+2,1
+46,0
+1
+3,0
+1
+0
+1
+e,0
+1
+3,0
+1
+40,0
+1
+d,0
+1
+4,0
+1
+0
+1
+6,0
+1
+2,0
+5,1
+2,0
+1
+3d,0
+1
+0
+1
+4,0
+1
+0
+1
+b,0
+1
+58,0
+1
+2,0
+1
+f,0
+1
+2,0
+3,1
+2,0
+1
+48,0
+1
+2,0
+1
+11,0
+1
+2,0
+1
+45,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+9,0
+1
+2,0
+1
+2,0
+1
+41,0
+1
+6,0
+1
+2,0
+1
+0
+1
+2,0
+1
+0
+1
+e,0
+1
+0
+1
+46,0
+1
+0
+1
+3,0
+1
+7,0
+1
+6,0
+1
+46,0
+1
+10,0
+1
+3,0
+1
+6,0
+1
+9,0
+1
+3d,0
+1
+0
+1
+4,0
+1
+0
+1
+4,0
+1
+4,0
+1
+8,0
+1
+2,0
+5,1
+2,0
+1
+47,0
+1
+16fd,0
+100 90 32
+720,0
+1
+3,0
+1
+6,0
+1
+3,0
+1
+b,0
+2,1
+33,0
+4,1
+0
+1
+0
+1
+0
+1
+b,0
+1
+9,0
+1
+3,0
+1
+b,0
+1
+34,0
+1
+4,0
+1
+8,0
+1
+6,0
+1
+6,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+2,1
+5,0
+1
+4d,0
+1
+4c,0
+1
+11,0
+4,1
+5,0
+1
+4,0
+1
+0
+1
+2,0
+3,1
+3c,0
+6,1
+0
+1
+d,0
+1
+4e,0
+1
+14,0
+1
+b,0
+2,1
+2,0
+2,1
+41,0
+2,1
+4,0
+1
+11,0
+1
+2,0
+1
+44,0
+1
+14,0
+1
+f,0
+2,1
+40,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+0
+1
+2,0
+1
+9,0
+1
+0
+1
+4,0
+3,1
+3e,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+2,0
+1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+3d,0
+1
+14,0
+1
+10,0
+1
+41,0
+2,1
+2,0
+3,1
+11,0
+5,1
+2,0
+2,1
+3f,0
+1
+9,0
+1
+11,0
+1
+9,0
+1
+16e1,0
+100 90 32
+720,0
+1
+1b,0
+1
+38,0
+1
+0
+1
+0
+1
+19,0
+1
+b,0
+1
+34,0
+1
+d,0
+1
+6,0
+1
+0
+1
+4,0
+1
+4,0
+1
+0
+1
+2,0
+2,1
+5,0
+1
+36,0
+1
+4,0
+1
+f,0
+4,1
+4b,0
+1
+12,0
+3,1
+5,0
+1
+6,0
+2,1
+2,0
+2,1
+41,0
+2,1
+3,0
+1
+2,0
+1
+11,0
+1
+44,0
+1
+14,0
+1
+10,0
+1
+3d,0
+1
+3,0
+2,1
+4,0
+1
+2,0
+1
+e,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3d,0
+1
+3,0
+1
+0
+1
+3,0
+1
+2,0
+1
+7,0
+1
+6,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3d,0
+1
+2,0
+1
+f,0
+3,1
+10,0
+1
+47,0
+1
+3,0
+1
+2,0
+1
+a,0
+2,1
+46,0
+1
+9,0
+1
+a,0
+1
+0
+1
+e,0
+1
+3d,0
+7,1
+0
+1
+9,0
+3,1
+d,0
+1
+0
+3,1
+3d,0
+1
+1b,0
+1
+9,0
+1
+16e1,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwstr16/drwstr16.m b/xc/test/xsuite/xtest/tset/CH06/drwstr16/drwstr16.m
new file mode 100644
index 000000000..1b4a3638a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwstr16/drwstr16.m
@@ -0,0 +1,164 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawString16 CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+int x = 2;
+int y = 30;
+XChar2b *string = defstr;
+int length = NELEM(defstr);
+>>EXTERN
+
+static XChar2b defstr[] = {
+ {1, 74},
+ {1, 79},
+ {48, 120},
+ {36, 116},
+ {36, 80},
+ {48, 43},
+ {33, 45},
+};
+
+static Font Xtfonts[XT_NFONTS];
+
+>>SET startup localstartup
+>>SET cleanup fontcleanup
+static void
+localstartup()
+{
+ fontstartup();
+ if(Dsp) {
+ openfonts(Xtfonts, XT_NFONTS);
+ setgcfont(Xtfonts[2]);
+ }
+}
+>>ASSERTION Good A
+On a call to xname
+the image of each 2-byte or 16-bit character in the
+.A string ,
+as defined by the
+.M font
+in the
+.A gc ,
+is treated as an
+additional mask for a fill operation on the
+.A drawable .
+>>STRATEGY
+Draw string in different fonts
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XSetFont(display, gc, Xtfonts[2]);
+ x = 2;
+ y = 30;
+ XCALL;
+
+ XSetFont(display, gc, Xtfonts[6]);
+ x = 100;
+ y = 60;
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good B 3
+When fonts are defined with linear indexing rather than 2-byte matrix indexing,
+then each
+.S XChar2b
+structure is interpreted as a 16-bit number with byte1 as the
+most-significant byte.
+>>ASSERTION Good A
+The origin of the string is at
+[
+.A x ,
+.A y
+].
+>>STRATEGY
+Vary x and y.
+Draw string with single character.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+static XChar2b ti[] = {
+ {33, 89},
+ };
+unsigned int width, height;
+
+ string = ti;
+ length = NELEM(ti);
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ getsize(display, d, &width, &height);
+
+ for (x = 0; x < width; x += 20) {
+ for (y = 0; y < height; y += 20) {
+ XCALL;
+ }
+ }
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION def
+The drawable is modified only where the font character has a bit set to 1.
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M fill-style ,
+.M font ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin ,
+and
+.M tile-stipple-y-origin
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY kieron Completed Check format and pass ac
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a1.dat
new file mode 100644
index 000000000..7adaac750
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a1.dat
@@ -0,0 +1,41427 @@
+! $XConsortium$
+100 90 32
+2d2,0
+2,1
+0
+1
+0
+1
+0
+5,1
+10e,0
+a,1
+17,0
+2,1
+41,0
+a,1
+e,0
+9,1
+43,0
+a,1
+12,0
+2,1
+46,0
+a,1
+12,0
+a,1
+3e,0
+a,1
+a,0
+a,1
+5,0
+1
+40,0
+a,1
+5a,0
+a,1
+a,0
+c,1
+44,0
+a,1
+a,0
+7,1
+49,0
+a,1
+5a,0
+a,1
+1bae,0
+100 90 32
+1c28,0
+4,1
+60,0
+6,1
+5e,0
+2,1
+3,0
+2,1
+5d,0
+2,1
+4,0
+2,1
+5c,0
+2,1
+5,0
+2,1
+5b,0
+2,1
+6,0
+1
+5b,0
+2,1
+6,0
+1
+5b,0
+2,1
+5,0
+1
+5c,0
+2,1
+4,0
+1
+5d,0
+2,1
+3,0
+1
+5e,0
+5,1
+313,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+472,0
+2,1
+0
+2,1
+2,0
+4,1
+4,0
+3,1
+0
+2,1
+4f,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+6,0
+4,1
+4,0
+2,1
+31,0
+2,1
+2,0
+2,1
+8,0
+5,1
+2,0
+3,1
+4,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+31,0
+2,1
+2,0
+2,1
+8,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+6,1
+2a,0
+2,1
+5,0
+2,1
+a,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+3,1
+0
+4,1
+4,0
+4,1
+2,0
+6,1
+29,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+2a,0
+6,1
+0
+2,1
+2,0
+2,1
+a,0
+4,1
+3,0
+4,1
+3,0
+3,1
+2,0
+4,1
+a,0
+2,1
+2b,0
+4,1
+4,0
+2,1
+d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+3a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+4,0
+3,1
+4,0
+3,1
+2,0
+3,1
+9,0
+6,1
+2f,0
+2,1
+2,0
+2,1
+b,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+a,0
+6,1
+40,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+35a,0
+2,1
+13,0
+2,1
+6,0
+2,1
+35,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+6,0
+2,1
+35,0
+3,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+6,0
+2,1
+3,0
+7,1
+2b,0
+6,1
+2,0
+1
+2,0
+1
+4,0
+2,1
+13,0
+2,1
+6,0
+2,1
+3,0
+7,1
+2b,0
+2,1
+0
+3,1
+2,0
+4,1
+4,0
+2,1
+13,0
+2,1
+6,0
+2,1
+a,0
+7,1
+24,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+13,0
+2,1
+6,0
+2,1
+a,0
+7,1
+32,0
+4,1
+3,0
+4,1
+5,0
+5,1
+2,0
+5,1
+0
+7,1
+34,0
+2,1
+5,0
+4,1
+0
+4,1
+3,0
+4,1
+5,0
+5,1
+2,0
+5,1
+0
+7,1
+34,0
+2,1
+6,0
+2,1
+b,0
+2,1
+5,0
+2,1
+d,0
+2,1
+37,0
+2,1
+6,0
+2,1
+b,0
+2,1
+5,0
+2,1
+d,0
+2,1
+37,0
+2,1
+6,0
+2,1
+b,0
+2,1
+5,0
+2,1
+d,0
+2,1
+37,0
+4,1
+4,0
+2,1
+b,0
+2,1
+5,0
+2,1
+d,0
+2,1
+4c,0
+2,1
+5,0
+2,1
+d,0
+2,1
+30e,0
+2,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+42,0
+2,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+42,0
+2,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+7,0
+2,1
+39,0
+2,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+6,0
+2,1
+3a,0
+2,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+4,0
+2,1
+3c,0
+2,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+3,0
+2,1
+23,0
+7,1
+13,0
+9,1
+3,0
+7,1
+4,0
+7,1
+2,0
+2,1
+4,0
+2,1
+22,0
+7,1
+13,0
+9,1
+3,0
+7,1
+4,0
+7,1
+2,0
+2,1
+6,0
+2,1
+27,0
+7,1
+c,0
+2,1
+5,0
+2,1
+10,0
+2,1
+5,0
+2,1
+7,0
+2,1
+26,0
+7,1
+c,0
+2,1
+5,0
+2,1
+10,0
+2,1
+5,0
+2,1
+3,0
+6,1
+2d,0
+7,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+5,0
+2,1
+3,0
+6,1
+2d,0
+7,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+5,0
+2,1
+42,0
+2,1
+5,0
+2,1
+10,0
+2,1
+5,0
+2,1
+3af,0
+2,1
+11,0
+1
+9,0
+3,1
+19,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+0
+1
+1b,0
+2,1
+f,0
+2,1
+8,0
+2,1
+0
+2,1
+18,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+0
+1
+1d,0
+2,1
+9,0
+6,1
+8,0
+2,1
+1b,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+5,1
+1d,0
+2,1
+0
+6,1
+0
+6,1
+8,0
+2,1
+1b,0
+2,1
+b,0
+5,1
+1c,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+9,0
+4,1
+5,0
+2,1
+13,0
+2,1
+c,0
+1
+0
+1
+1b,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+6,1
+8,0
+2,1
+6,0
+2,1
+13,0
+2,1
+b,0
+5,1
+19,0
+2,1
+6,0
+2,1
+0
+2,1
+0
+6,1
+8,0
+2,1
+28,0
+5,1
+19,0
+6,1
+0
+3,1
+0
+2,1
+0
+2,1
+c,0
+2,1
+0
+2,1
+18,0
+2,1
+c,0
+1
+0
+1
+1a,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+1
+c,0
+1
+0
+3,1
+19,0
+2,1
+c,0
+1
+0
+1
+395,0
+100 90 32
+4b4,0
+2,1
+3,0
+3,1
+2,0
+1
+2,0
+3,1
+4,0
+3,1
+5,0
+2,1
+3,0
+2,1
+40,0
+4,1
+2,0
+1
+0
+1
+0
+2,1
+0
+2,1
+0
+2,1
+3,0
+3,1
+4,0
+2,1
+5,0
+2,1
+3e,0
+1
+0
+2,1
+0
+1
+0
+3,1
+0
+1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+5,0
+2,1
+5,0
+2,1
+4,0
+1
+2,0
+1
+4,0
+2,1
+30,0
+1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+7,0
+2,1
+4,0
+2,1
+5,0
+2,1
+31,0
+4,1
+4,0
+2,1
+4,0
+3,1
+a,0
+2,1
+7,0
+2,1
+2,0
+6,1
+0
+6,1
+30,0
+2,1
+0
+1
+2,0
+2,1
+4,0
+2,1
+0
+1
+0
+1
+8,0
+2,1
+7,0
+2,1
+2,0
+6,1
+0
+6,1
+2e,0
+1
+0
+2,1
+0
+1
+2,0
+1
+0
+3,1
+0
+2,1
+0
+3,1
+9,0
+2,1
+5,0
+2,1
+5,0
+2,1
+5,0
+2,1
+5,0
+3,1
+29,0
+4,1
+2,0
+2,1
+0
+1
+0
+1
+0
+2,1
+0
+2,1
+a,0
+2,1
+5,0
+2,1
+4,0
+1
+2,0
+1
+4,0
+2,1
+5,0
+3,1
+2a,0
+2,1
+3,0
+1
+2,0
+3,1
+2,0
+3,1
+0
+1
+a,0
+2,1
+3,0
+2,1
+14,0
+2,1
+61,0
+2,1
+427,0
+2,1
+5,0
+2,1
+5,0
+2,1
+4,0
+4,1
+6,0
+4,1
+6,0
+2,1
+0
+6,1
+33,0
+2,1
+4,0
+1
+2,0
+1
+3,0
+3,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+4,0
+3,1
+0
+2,1
+36,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+8,0
+2,1
+3,0
+4,1
+0
+2,1
+36,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+5,1
+22,0
+6,1
+a,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+7,0
+3,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+21,0
+6,1
+9,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+2,1
+b,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+30,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+c,0
+2,1
+0
+6,1
+5,0
+2,1
+2a,0
+2,1
+3,0
+2,1
+8,0
+1
+2,0
+1
+4,0
+2,1
+3,0
+2,1
+8,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+4,1
+2,0
+2,1
+9,0
+2,1
+3,0
+6,1
+0
+6,1
+5,0
+4,1
+6,0
+2,1
+2,0
+4,1
+2b,0
+2,1
+445,0
+4,1
+2,0
+6,1
+2,0
+4,1
+8,0
+4,1
+1a,0
+2,1
+8,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+18,0
+2,1
+a,0
+2,1
+1e,0
+2,1
+9,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+b,0
+2,1
+3,0
+6,1
+3,0
+2,1
+1d,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+4,1
+3,0
+4,1
+9,0
+2,1
+4,0
+6,1
+4,0
+2,1
+1c,0
+5,1
+5,0
+2,1
+3,0
+4,1
+8,0
+5,1
+3,0
+2,1
+5,0
+2,1
+9,0
+2,1
+10,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+a,0
+2,1
+16,0
+2,1
+4,0
+6,1
+4,0
+2,1
+1c,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+a,0
+2,1
+a,0
+3,1
+a,0
+2,1
+3,0
+6,1
+3,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+b,0
+2,1
+a,0
+2,1
+1f,0
+4,1
+3,0
+2,1
+5,0
+4,1
+8,0
+4,1
+3,0
+4,1
+4,0
+2,1
+d,0
+2,1
+8,0
+2,1
+42,0
+2,1
+4,0
+2,1
+425,0
+4,1
+3,0
+4,1
+3,0
+9,1
+3,0
+4,1
+2,0
+5,1
+0
+6,1
+0
+6,1
+2,0
+4,1
+2a,0
+2,1
+2,0
+2,1
+0
+1
+3,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+4,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+29,0
+2,1
+2,0
+2,1
+0
+1
+3,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+4,1
+5,0
+2,1
+5,0
+2,1
+31,0
+2,1
+0
+1
+0
+4,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+4,1
+5,0
+2,1
+5,0
+2,1
+2f,0
+3,1
+2,0
+1
+0
+1
+0
+2,1
+0
+a,1
+2,0
+2,1
+5,0
+2,1
+2,0
+7,1
+2,0
+5,1
+2,0
+2,1
+0
+3,1
+2b,0
+2,1
+3,0
+1
+0
+4,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+4,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+30,0
+1
+6,0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+4,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+4,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+4,0
+4,1
+2,0
+2,1
+2,0
+6,1
+3,0
+4,1
+2,0
+5,1
+0
+6,1
+0
+2,1
+6,0
+5,1
+3a2,0
+100 90 32
+4b4,0
+2,1
+2,0
+2,1
+0
+6,1
+5,0
+2,1
+2,0
+2,1
+3,0
+1
+0
+2,1
+5,0
+1
+4,0
+1
+3,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+5,1
+24,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+23,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+6,1
+3,0
+3,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+23,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+4,1
+3,0
+2,1
+5,0
+6,1
+3,0
+3,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+23,0
+6,1
+3,0
+2,1
+7,0
+2,1
+2,0
+3,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+5,1
+24,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+4,1
+3,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+27,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+27,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+27,0
+2,1
+2,0
+2,1
+0
+6,1
+2,0
+4,1
+3,0
+2,1
+3,0
+1
+0
+6,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+477,0
+4,1
+2,0
+5,1
+3,0
+4,1
+6,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+1
+4,0
+1
+0
+2,1
+2,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+b,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+1
+2,0
+1
+3,0
+4,1
+1e,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+b,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+1
+2,0
+1
+7,0
+2,1
+2,0
+2,1
+2,0
+4,1
+3,0
+4,1
+1e,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+4,1
+8,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+1
+2,0
+1
+7,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+0
+4,1
+7,0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+4,1
+7,0
+6,1
+2,0
+4,1
+4,0
+2,1
+1f,0
+3,1
+0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+8,0
+6,1
+2,0
+1
+2,0
+1
+4,0
+2,1
+1f,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+20,0
+4,1
+2,0
+2,1
+3,0
+1
+2,0
+4,1
+8,0
+2,1
+4,0
+4,1
+4,0
+2,1
+8,0
+1
+4,0
+1
+0
+1
+4,0
+1
+3,0
+2,1
+23,0
+2,1
+449,0
+6,1
+2,0
+4,1
+2,0
+2,1
+d,0
+4,1
+4,0
+2,1
+9,0
+3,1
+a,0
+2,1
+29,0
+2,1
+2,0
+2,1
+4,0
+2,1
+f,0
+2,1
+3,0
+4,1
+8,0
+3,1
+a,0
+2,1
+29,0
+2,1
+2,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+a,0
+2,1
+28,0
+2,1
+3,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2,0
+1
+4,0
+1
+9,0
+2,1
+3,0
+4,1
+2,0
+5,1
+24,0
+2,1
+4,0
+2,1
+6,0
+2,1
+d,0
+2,1
+19,0
+2,1
+0
+2,1
+2,0
+2,1
+22,0
+2,1
+5,0
+2,1
+7,0
+2,1
+c,0
+2,1
+16,0
+5,1
+0
+2,1
+2,0
+2,1
+21,0
+2,1
+6,0
+2,1
+7,0
+2,1
+c,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+21,0
+2,1
+6,0
+2,1
+8,0
+2,1
+b,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+21,0
+6,1
+2,0
+4,1
+6,0
+2,1
+9,0
+4,1
+9,0
+6,1
+7,0
+5,1
+0
+5,1
+4c,0
+6,1
+420,0
+2,1
+a,0
+3,1
+9,0
+2,1
+8,0
+2,1
+7,0
+2,1
+0
+2,1
+34,0
+2,1
+9,0
+2,1
+0
+2,1
+8,0
+2,1
+8,0
+2,1
+7,0
+2,1
+0
+2,1
+34,0
+2,1
+9,0
+2,1
+b,0
+2,1
+14,0
+2,1
+2a,0
+4,1
+3,0
+5,1
+2,0
+4,1
+3,0
+2,1
+5,0
+3,1
+0
+1
+0
+5,1
+4,0
+3,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+25,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+4,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+26,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+6,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+4,1
+27,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+5,0
+4,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+4,1
+27,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+27,0
+4,1
+3,0
+5,1
+2,0
+4,1
+3,0
+2,1
+5,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+6,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+41,0
+2,1
+2,0
+2,1
+10,0
+2,1
+2,0
+2,1
+49,0
+4,1
+12,0
+4,1
+2e6,0
+100 90 32
+4b7,0
+3,1
+62,0
+2,1
+3b,0
+2,1
+25,0
+2,1
+3b,0
+2,1
+25,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+5,1
+6,0
+4,1
+2,0
+5,1
+3,0
+5,1
+5,0
+5,1
+3,0
+4,1
+2,0
+4,1
+23,0
+2,1
+3,0
+6,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+25,0
+2,1
+3,0
+6,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+6,0
+2,1
+4,0
+2,1
+25,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+8,0
+2,1
+2,0
+2,1
+25,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+5,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+4,1
+2,0
+2,1
+9,0
+2,1
+5,0
+2,1
+6,0
+4,1
+3,0
+4,1
+3f,0
+2,1
+9,0
+2,1
+57,0
+2,1
+9,0
+2,1
+3f8,0
+3,1
+4,0
+2,1
+4,0
+3,1
+53,0
+2,1
+6,0
+2,1
+6,0
+2,1
+52,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+6,1
+a,0
+2,1
+5,0
+2,1
+5,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+8,0
+4,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+b,0
+2,1
+5,0
+2,1
+5,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+8,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1a,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+7,0
+2,1
+2,0
+2,1
+2,0
+5,1
+0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1b,0
+5,1
+3,0
+2,1
+4,0
+1
+2,0
+1
+8,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+6,1
+a,0
+3,1
+4,0
+2,1
+4,0
+3,1
+3d,0
+2,1
+2,0
+2,1
+5f,0
+4,1
+2fa,0
+1
+0
+1
+0
+1
+60,0
+1
+0
+1
+59,0
+2,1
+2,0
+1
+2,0
+1
+0
+1
+0
+1
+57,0
+6,1
+3,0
+1
+0
+1
+58,0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+0
+1
+60,0
+1
+0
+1
+60,0
+1
+0
+1
+0
+1
+60,0
+1
+0
+1
+60,0
+1
+0
+1
+0
+1
+60,0
+1
+0
+1
+60,0
+1
+0
+1
+0
+1
+60,0
+1
+0
+1
+60,0
+1
+0
+1
+0
+1
+ae1,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+38f,0
+2,1
+3,0
+2,1
+19,0
+2,1
+3c,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+b,0
+2,1
+2,0
+2,1
+4,0
+2,1
+3,0
+3,1
+2,0
+3,1
+0
+2,1
+2,0
+2,1
+29,0
+2,1
+6,0
+3,1
+5,0
+2,1
+b,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+54,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2e,0
+2,1
+e,0
+2,1
+3,0
+5,1
+10,0
+d,1
+2,0
+2,1
+29,0
+2,1
+e,0
+2,1
+2,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+2,0
+3,1
+2,0
+2,1
+28,0
+2,1
+e,0
+2,1
+3,0
+2,1
+15,0
+2,1
+3,0
+2,1
+7,0
+2,1
+27,0
+2,1
+e,0
+2,1
+4,0
+2,1
+15,0
+2,1
+3,0
+2,1
+7,0
+2,1
+27,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+4,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+7,0
+2,1
+27,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+4,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+7,0
+2,1
+28,0
+4,1
+c,0
+4,1
+2,0
+5,1
+11,0
+2,1
+3,0
+2,1
+7,0
+2,1
+a4,0
+2,1
+61,0
+2,1
+2a8,0
+2,1
+61,0
+2,1
+5,0
+5,1
+15,0
+3,1
+0
+2,1
+2,0
+3,1
+2,0
+3,1
+0
+2,1
+2f,0
+2,1
+6,0
+5,1
+14,0
+2,1
+0
+3,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+5c,0
+a,1
+0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3f2,0
+1
+4,0
+1
+22,0
+3,1
+2,0
+3,1
+0
+2,1
+13,0
+3,1
+0
+2,1
+8,0
+3,1
+0
+2,1
+a,0
+6,1
+21,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+b,0
+4,1
+22,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+c,0
+2,1
+3,0
+2,1
+30,0
+a,1
+0
+2,1
+11,0
+5,1
+0
+2,1
+6,0
+5,1
+0
+2,1
+31,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+31,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+8,1
+11,0
+8,1
+f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+8,1
+11,0
+8,1
+f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+31,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+31,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+3ce,0
+3,1
+58,0
+3,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+3a,0
+2,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+44,0
+3,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+50,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+9,1
+4f,0
+2,1
+b,0
+2,1
+2,0
+2,1
+51,0
+2,1
+b,0
+2,1
+2,0
+2,1
+51,0
+2,1
+9,0
+9,1
+5c,0
+2,1
+2,0
+2,1
+52,0
+2,1
+9,0
+2,1
+2,0
+2,1
+53,0
+2,1
+9,0
+2,1
+2,0
+2,1
+a1,0
+2,1
+62,0
+2,1
+307,0
+100 90 32
+38c,0
+1
+33,0
+1
+2d,0
+5,1
+4,0
+3,1
+3,0
+2,1
+7,0
+3,1
+6,0
+3,1
+4,0
+2,1
+2,0
+2,1
+6,0
+1
+0
+1
+0
+1
+2a,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+5,0
+3,1
+3,0
+2,1
+4,0
+2,1
+6,0
+3,1
+2b,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+4,0
+2,1
+6,0
+3,1
+6,0
+2,1
+23,0
+2,1
+0
+1
+6,0
+3,1
+2,0
+2,1
+8,0
+1
+0
+1
+7,0
+2,1
+2,0
+2,1
+6,0
+2,1
+4,0
+1
+0
+1
+0
+1
+5,0
+2,1
+23,0
+5,1
+9,0
+2,1
+9,0
+3,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+1
+7,0
+2,1
+25,0
+4,1
+8,0
+2,1
+8,0
+5,1
+0
+2,1
+7,0
+2,1
+6,0
+2,1
+b,0
+8,1
+23,0
+1
+0
+2,1
+6,0
+2,1
+2,0
+3,1
+3,0
+2,1
+3,0
+3,1
+8,0
+2,1
+6,0
+2,1
+b,0
+8,1
+20,0
+2,1
+0
+1
+0
+2,1
+6,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+9,0
+2,1
+6,0
+2,1
+e,0
+2,1
+23,0
+2,1
+0
+1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+8,0
+2,1
+6,0
+2,1
+e,0
+2,1
+5,0
+2,1
+1d,0
+5,1
+6,0
+2,1
+3,0
+3,1
+4,0
+4,1
+0
+3,1
+8,0
+2,1
+4,0
+2,1
+f,0
+2,1
+5,0
+2,1
+1f,0
+1
+24,0
+2,1
+4,0
+2,1
+17,0
+1
+45,0
+2,1
+2,0
+2,1
+18,0
+1
+62,0
+1
+2ed,0
+2,1
+8,0
+3,1
+8,0
+2,1
+4,0
+5,1
+9,0
+5,1
+7,0
+2,1
+4,0
+6,1
+23,0
+2,1
+7,0
+2,1
+0
+2,1
+6,0
+3,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+5,0
+3,1
+4,0
+2,1
+26,0
+2,1
+7,0
+2,1
+3,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+4,0
+4,1
+4,0
+2,1
+26,0
+2,1
+7,0
+2,1
+3,0
+2,1
+6,0
+2,1
+8,0
+2,1
+c,0
+2,1
+4,0
+1
+0
+2,1
+3,0
+6,1
+22,0
+2,1
+8,0
+2,1
+3,0
+2,1
+6,0
+2,1
+7,0
+2,1
+b,0
+3,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+13,0
+6,1
+8,0
+2,1
+8,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+e,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+13,0
+6,1
+7,0
+2,1
+9,0
+2,1
+3,0
+2,1
+6,0
+2,1
+5,0
+2,1
+f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+20,0
+2,1
+9,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+2,1
+b,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+b,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+c,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+c,0
+3,1
+8,0
+2,1
+3,0
+7,1
+8,0
+5,1
+7,0
+2,1
+4,0
+5,1
+400,0
+4,1
+3,0
+7,1
+3,0
+5,1
+b,0
+5,1
+d,0
+2,1
+a,0
+2,1
+22,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+3,0
+2,1
+9,0
+2,1
+3,0
+2,1
+b,0
+2,1
+c,0
+2,1
+20,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+9,0
+2,1
+3,0
+2,1
+a,0
+2,1
+e,0
+2,1
+1f,0
+2,1
+a,0
+2,1
+4,0
+2,1
+3,0
+2,1
+9,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+10,0
+2,1
+1e,0
+6,1
+6,0
+2,1
+5,0
+5,1
+a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+4,1
+7,0
+5,1
+6,0
+2,1
+1d,0
+2,1
+3,0
+2,1
+4,0
+2,1
+5,0
+2,1
+3,0
+2,1
+a,0
+6,1
+8,0
+2,1
+7,0
+5,1
+6,0
+2,1
+1d,0
+2,1
+3,0
+2,1
+4,0
+2,1
+5,0
+2,1
+3,0
+2,1
+e,0
+2,1
+9,0
+2,1
+10,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+9,0
+2,1
+3,0
+2,1
+a,0
+2,1
+5,0
+5,1
+4,0
+2,1
+1f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+9,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+5,1
+3,0
+2,1
+21,0
+5,1
+4,0
+2,1
+7,0
+5,1
+b,0
+4,1
+4,0
+2,1
+2,0
+2,1
+4,0
+2,1
+a,0
+2,1
+51,0
+1
+63,0
+1
+62,0
+1
+2ea,0
+4,1
+5,0
+8,1
+6,0
+2,1
+4,0
+5,1
+5,0
+5,1
+2,0
+6,1
+4,0
+7,1
+0
+7,1
+3,0
+6,1
+13,0
+2,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+7,0
+2,1
+4,0
+2,1
+12,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+16,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+1
+2,0
+1
+3,0
+6,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+2,0
+6,1
+2,0
+6,1
+2,0
+2,1
+1b,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+7,0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+4,1
+14,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+3,0
+6,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+14,0
+2,1
+5,0
+2,1
+8,0
+1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+7,0
+2,1
+3,0
+3,1
+14,0
+2,1
+6,0
+9,1
+2,0
+2,1
+4,0
+2,1
+0
+6,1
+4,0
+5,1
+2,0
+6,1
+4,0
+7,1
+0
+2,1
+8,0
+4,1
+0
+2,1
+3f6,0
+100 90 32
+3ee,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+3,1
+5,0
+3,1
+5,0
+2,1
+4,0
+2,1
+3,0
+5,1
+3,0
+6,1
+15,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+5,0
+3,1
+5,0
+3,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+14,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+5,0
+4,1
+3,0
+4,1
+5,0
+3,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+14,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+4,1
+5,0
+2,1
+5,0
+4,1
+3,0
+4,1
+5,0
+4,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+14,0
+8,1
+0
+2,1
+5,0
+2,1
+4,0
+3,1
+6,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+4,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+14,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+4,1
+5,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+6,1
+15,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+19,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+4,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+19,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+4,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+19,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+6,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+5,0
+2,1
+3,0
+3,1
+3,0
+5,1
+3,0
+2,1
+406,0
+5,1
+3,0
+7,1
+3,0
+5,1
+8,0
+8,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+8,0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+1
+a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+a,0
+2,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+8,0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+1
+9,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+a,0
+2,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+9,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+c,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+4,1
+d,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+4,0
+4,1
+d,0
+2,1
+5,0
+2,1
+0
+7,1
+3,0
+5,1
+b,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+e,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+4,1
+a,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+b,0
+1
+0
+5,1
+0
+1
+6,0
+2,1
+e,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+a,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+1
+2,0
+1
+c,0
+4,1
+0
+4,1
+5,0
+4,1
+d,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+a,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+4,1
+c,0
+3,1
+3,0
+3,1
+4,0
+2,1
+2,0
+2,1
+d,0
+2,1
+2,0
+3,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+a,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+e,0
+2,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+d,0
+6,1
+2,0
+2,1
+4,0
+2,1
+2,0
+5,1
+b,0
+2,1
+6,0
+4,1
+6,0
+2,1
+e,0
+2,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+12,0
+2,1
+3d8,0
+8,1
+2,0
+5,1
+2,0
+2,1
+5,0
+5,1
+14,0
+2,1
+9,0
+2,1
+2c,0
+2,1
+2,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4,0
+2,1
+d,0
+2,1
+a,0
+2,1
+2b,0
+2,1
+3,0
+2,1
+6,0
+2,1
+7,0
+2,1
+3,0
+4,1
+5,0
+2,1
+5,0
+2,1
+a,0
+2,1
+2a,0
+2,1
+4,0
+2,1
+6,0
+2,1
+7,0
+2,1
+2,0
+6,1
+3,0
+2,1
+6,0
+3,1
+2,0
+4,1
+3,0
+6,1
+25,0
+2,1
+5,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+8,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+24,0
+2,1
+5,0
+2,1
+7,0
+2,1
+6,0
+2,1
+4,0
+2,1
+4,0
+8,1
+9,0
+2,1
+2,0
+2,1
+3,0
+2,1
+23,0
+2,1
+6,0
+2,1
+8,0
+2,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+b,0
+5,1
+2,0
+2,1
+3,0
+2,1
+22,0
+2,1
+7,0
+2,1
+8,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+21,0
+2,1
+8,0
+2,1
+9,0
+2,1
+4,0
+2,1
+4,0
+2,1
+11,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+21,0
+8,1
+2,0
+2,1
+9,0
+2,1
+4,0
+2,1
+18,0
+3,1
+0
+2,1
+0
+6,1
+2c,0
+2,1
+f,0
+2,1
+51,0
+2,1
+f,0
+2,1
+51,0
+5,1
+9,0
+5,1
+313,0
+2,1
+d,0
+3,1
+9,0
+2,1
+9,0
+2,1
+3,0
+2,1
+0
+2,1
+34,0
+2,1
+c,0
+2,1
+b,0
+2,1
+9,0
+2,1
+3,0
+2,1
+0
+2,1
+34,0
+2,1
+c,0
+2,1
+b,0
+2,1
+11,0
+2,1
+28,0
+5,1
+3,0
+6,1
+2,0
+5,1
+4,0
+5,1
+2,0
+6,1
+0
+6,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+23,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+24,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+4,1
+25,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+7,1
+4,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+4,1
+25,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+9,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+24,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+24,0
+5,1
+3,0
+6,1
+2,0
+5,1
+5,0
+2,1
+4,0
+6,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+47,0
+2,1
+11,0
+2,1
+4a,0
+2,1
+3,0
+2,1
+f,0
+3,1
+4c,0
+5,1
+2f5,0
+100 90 32
+3f0,0
+2,1
+62,0
+2,1
+45,0
+2,1
+1b,0
+2,1
+45,0
+2,1
+1b,0
+2,1
+0
+5,1
+0
+3,1
+2,0
+6,1
+8,0
+5,1
+2,0
+6,1
+3,0
+6,1
+7,0
+5,1
+2,0
+4,1
+2,0
+5,1
+19,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+4,0
+3,1
+5,0
+2,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+5,0
+4,1
+3,0
+2,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+7,0
+3,1
+2,0
+2,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+5,1
+2,0
+6,1
+3,0
+6,1
+7,0
+2,1
+5,0
+4,1
+4,0
+3,1
+3c,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+325,0
+3,1
+3,0
+2,1
+2,0
+3,1
+56,0
+2,1
+5,0
+2,1
+4,0
+2,1
+55,0
+2,1
+5,0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+3,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+6,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+3,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+0
+4,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+3,1
+6,0
+2,1
+5,0
+3,1
+20,0
+2,1
+3,0
+2,1
+3,0
+1
+2,0
+1
+4,0
+4,1
+0
+4,1
+0
+4,1
+4,0
+1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+5,0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+3,0
+4,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+4,1
+2,0
+2,1
+7,0
+2,1
+5,0
+2,1
+4,0
+2,1
+23,0
+6,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+3,0
+6,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+47,0
+2,1
+c,0
+2,1
+5,0
+2,1
+4,0
+2,1
+44,0
+2,1
+0
+2,1
+c,0
+2,1
+5,0
+2,1
+4,0
+2,1
+45,0
+3,1
+e,0
+3,1
+3,0
+2,1
+2,0
+3,1
+2e5,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8b,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+4,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+6,1
+4,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+2,0
+2,1
+4,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+23,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+24,0
+4,1
+4,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+6,0
+4,1
+4,0
+4,1
+4,0
+4,1
+407,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+19,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+19,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+18,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+18,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+19,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+16,0
+4,1
+4,0
+4,1
+4,0
+4,1
+8,0
+4,1
+4,0
+4,1
+4,0
+4,1
+9,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3f6,0
+100 90 32
+3f5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+81,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+19,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1a,0
+4,1
+4,0
+4,1
+4,0
+4,1
+b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+2,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3fd,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+85,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+20,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+20,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1e,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+17,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+18,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+4,1
+4,0
+4,1
+4,0
+4,1
+8,0
+4,1
+4,0
+4,1
+4,0
+4,1
+405,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+15,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+79,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+15,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+14,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+14,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+15,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+11,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+12,0
+4,1
+4,0
+4,1
+4,0
+4,1
+a,0
+4,1
+4,0
+4,1
+4,0
+4,1
+b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3f0,0
+100 90 32
+3ed,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+87,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+22,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+22,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+20,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+81,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+19,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1a,0
+4,1
+4,0
+4,1
+4,0
+4,1
+6,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+4,1
+4,0
+4,1
+4,0
+4,1
+407,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+17,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+17,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+16,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+16,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+17,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+13,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+14,0
+4,1
+4,0
+4,1
+4,0
+4,1
+9,0
+4,1
+4,0
+4,1
+4,0
+4,1
+a,0
+4,1
+4,0
+4,1
+4,0
+4,1
+401,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+89,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+24,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+24,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+21,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+22,0
+4,1
+4,0
+4,1
+4,0
+4,1
+2,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3fe,0
+100 90 32
+3ef,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+83,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1c,0
+4,1
+4,0
+4,1
+4,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+6,0
+4,1
+4,0
+4,1
+4,0
+4,1
+409,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+19,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+19,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+18,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+18,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+19,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+16,0
+4,1
+4,0
+4,1
+4,0
+4,1
+8,0
+4,1
+4,0
+4,1
+4,0
+4,1
+9,0
+4,1
+4,0
+4,1
+4,0
+4,1
+403,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+81,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+19,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1a,0
+4,1
+4,0
+4,1
+4,0
+4,1
+b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+2,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3fd,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+85,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+20,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+20,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1e,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+402,0
+100 90 32
+3f1,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+92,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+415,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+92,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+415,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+92,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+415,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+92,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40c,0
+100 90 32
+3c1,0
+2,1
+15,0
+2,1
+3,0
+2,1
+39,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+33,0
+2,1
+3,0
+2,1
+2,0
+4,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+5,0
+3,1
+6,0
+2,1
+38,0
+2,1
+2,0
+2,1
+3,0
+2,1
+54,0
+2,1
+2,0
+d,1
+a,0
+6,1
+e,0
+2,1
+33,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+a,0
+2,1
+3,0
+2,1
+e,0
+2,1
+33,0
+2,1
+7,0
+2,1
+3,0
+2,1
+f,0
+3,1
+e,0
+2,1
+32,0
+2,1
+7,0
+2,1
+3,0
+2,1
+f,0
+4,1
+e,0
+2,1
+31,0
+2,1
+7,0
+2,1
+3,0
+2,1
+a,0
+2,1
+0
+6,1
+a,0
+2,1
+2,0
+2,1
+31,0
+2,1
+7,0
+2,1
+3,0
+2,1
+a,0
+2,1
+0
+6,1
+a,0
+2,1
+2,0
+2,1
+31,0
+2,1
+7,0
+2,1
+3,0
+2,1
+b,0
+7,1
+c,0
+4,1
+b2,0
+2,1
+63,0
+2,1
+2ce,0
+2,1
+33,0
+2,1
+0
+3,1
+2,0
+3,1
+2,0
+2,1
+0
+3,1
+13,0
+5,1
+5,0
+2,1
+32,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+12,0
+5,1
+6,0
+1
+37,0
+2,1
+3,0
+2,1
+58,0
+2,1
+0
+a,1
+57,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3cc,0
+1
+4,0
+1
+5e,0
+6,1
+a,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+3,1
+13,0
+2,1
+0
+3,1
+2,0
+3,1
+29,0
+4,1
+b,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+37,0
+2,1
+3,0
+2,1
+6,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+37,0
+2,1
+0
+7,1
+0
+5,1
+11,0
+2,1
+0
+a,1
+36,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1d,0
+8,1
+9,0
+8,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+1d,0
+8,1
+9,0
+8,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+37,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+37,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+37,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3d4,0
+3,1
+48,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+3,1
+3f,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+3f,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+3,1
+48,0
+9,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+51,0
+2,1
+2,0
+2,1
+b,0
+2,1
+51,0
+2,1
+2,0
+2,1
+b,0
+2,1
+50,0
+9,1
+9,0
+2,1
+52,0
+2,1
+2,0
+2,1
+5f,0
+2,1
+2,0
+2,1
+9,0
+2,1
+53,0
+2,1
+2,0
+2,1
+9,0
+2,1
+d6,0
+2,1
+62,0
+2,1
+2c9,0
+100 90 32
+3b9,0
+1
+2b,0
+1
+35,0
+1
+0
+1
+0
+1
+6,0
+2,1
+2,0
+2,1
+4,0
+4,1
+7,0
+2,1
+3,0
+3,1
+4,0
+5,1
+34,0
+3,1
+6,0
+2,1
+4,0
+2,1
+3,0
+5,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+1
+2c,0
+2,1
+6,0
+3,1
+6,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+1
+2c,0
+2,1
+5,0
+1
+0
+1
+0
+1
+4,0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+1
+8,0
+2,1
+2,0
+3,1
+6,0
+1
+0
+1
+2c,0
+2,1
+7,0
+1
+6,0
+2,1
+6,0
+2,1
+3,0
+3,1
+9,0
+2,1
+9,0
+4,1
+29,0
+8,1
+b,0
+2,1
+6,0
+3,1
+0
+5,1
+8,0
+2,1
+8,0
+4,1
+2a,0
+8,1
+b,0
+2,1
+6,0
+5,1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+2e,0
+2,1
+e,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+1
+0
+1
+25,0
+2,1
+5,0
+2,1
+e,0
+2,1
+6,0
+6,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+1
+25,0
+2,1
+5,0
+2,1
+f,0
+2,1
+4,0
+5,1
+0
+4,1
+4,0
+3,1
+3,0
+2,1
+6,0
+5,1
+25,0
+1
+17,0
+2,1
+4,0
+2,1
+1c,0
+1
+27,0
+1
+18,0
+2,1
+2,0
+2,1
+46,0
+1
+30f,0
+6,1
+4,0
+2,1
+7,0
+5,1
+3,0
+5,1
+4,0
+2,1
+8,0
+3,1
+4,0
+2,1
+31,0
+2,1
+4,0
+3,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+3,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+31,0
+2,1
+4,0
+4,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2d,0
+6,1
+3,0
+2,1
+0
+1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+5,0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+2,1
+4,0
+2,1
+2b,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+4,0
+2,1
+8,0
+6,1
+1d,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+5,0
+2,1
+7,0
+6,1
+1d,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2a,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+7,0
+2,1
+2,0
+2,1
+26,0
+5,1
+4,0
+2,1
+7,0
+5,1
+2,0
+7,1
+3,0
+2,1
+8,0
+3,1
+8,0
+2,1
+2,0
+2,1
+421,0
+2,1
+a,0
+2,1
+b,0
+5,1
+0
+5,1
+3,0
+7,1
+3,0
+4,1
+2e,0
+2,1
+c,0
+2,1
+9,0
+2,1
+3,0
+3,1
+3,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2c,0
+2,1
+e,0
+2,1
+8,0
+2,1
+3,0
+3,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2a,0
+2,1
+10,0
+3,1
+2,0
+2,1
+2,0
+2,1
+3,0
+3,1
+3,0
+2,1
+4,0
+2,1
+a,0
+2,1
+29,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+7,1
+5,0
+2,1
+6,0
+6,1
+29,0
+2,1
+6,0
+5,1
+7,0
+2,1
+6,0
+8,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2a,0
+2,1
+10,0
+2,1
+7,0
+2,1
+4,0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2b,0
+2,1
+4,0
+5,1
+5,0
+2,1
+8,0
+2,1
+3,0
+3,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+3,0
+5,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+3,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2d,0
+2,1
+a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+4,1
+0
+5,1
+7,0
+2,1
+4,0
+5,1
+3e,0
+1
+63,0
+1
+64,0
+1
+305,0
+6,1
+3,0
+7,1
+0
+9,1
+2,0
+5,1
+5,0
+5,1
+6,0
+8,1
+5,0
+4,1
+21,0
+2,1
+4,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+4,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+20,0
+2,1
+5,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+4,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+4,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+4,1
+7,0
+2,1
+2,0
+2,1
+0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2b,0
+2,1
+2,0
+6,1
+2,0
+8,1
+7,0
+2,1
+2,0
+7,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+23,0
+4,1
+3,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+4,1
+7,0
+2,1
+0
+2,1
+0
+6,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+22,0
+2,1
+5,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+6,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+22,0
+2,1
+5,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+6,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+28,0
+3,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+4,1
+0
+2,1
+3,0
+2,1
+2,0
+4,1
+0
+2,1
+0
+2,1
+0
+1
+8,0
+2,1
+5,0
+2,1
+22,0
+2,1
+0
+4,1
+8,0
+2,1
+0
+9,1
+2,0
+5,1
+4,0
+6,1
+0
+2,1
+2,0
+9,1
+6,0
+2,1
+3ea,0
+100 90 32
+3fd,0
+6,1
+3,0
+5,1
+3,0
+2,1
+4,0
+2,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+3,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+5,0
+4,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+3,1
+2,0
+2,1
+5,0
+2,1
+0
+8,1
+1b,0
+6,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+4,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1f,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1f,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+1f,0
+2,1
+3,0
+5,1
+3,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+6,1
+0
+2,1
+4,0
+2,1
+3,0
+4,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+3ff,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+d,1
+3,0
+7,1
+3,0
+5,1
+16,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+16,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+3,1
+2,0
+3,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+15,0
+2,1
+2,0
+2,1
+4,0
+4,1
+4,0
+2,1
+2,0
+3,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+16,0
+4,1
+6,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+5,1
+3,0
+7,1
+0
+2,1
+5,0
+2,1
+17,0
+2,1
+7,0
+2,1
+6,0
+1
+0
+5,1
+0
+1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+4,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+17,0
+2,1
+6,0
+4,1
+5,0
+4,1
+0
+4,1
+2,0
+1
+2,0
+1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+17,0
+2,1
+5,0
+2,1
+2,0
+2,1
+4,0
+3,1
+3,0
+3,1
+2,0
+4,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+17,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+18,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+4,0
+2,1
+6,0
+4,1
+6,0
+2,1
+3,0
+5,1
+2,0
+2,1
+4,0
+2,1
+2,0
+6,1
+5d,0
+2,1
+3be,0
+2,1
+9,0
+2,1
+e,0
+5,1
+0
+2,1
+2,0
+5,1
+2,0
+8,1
+30,0
+2,1
+a,0
+2,1
+7,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+36,0
+2,1
+a,0
+3,1
+5,0
+4,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+31,0
+6,1
+3,0
+4,1
+2,0
+5,1
+3,0
+6,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+9,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2e,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+8,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2e,0
+2,1
+3,0
+2,1
+2,0
+5,1
+5,0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+8,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+2,1
+0
+2,1
+8,0
+2,1
+7,0
+2,1
+2c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+b,0
+2,1
+4,0
+4,1
+9,0
+2,1
+8,0
+2,1
+2c,0
+6,1
+0
+2,1
+0
+3,1
+12,0
+4,1
+9,0
+2,1
+2,0
+8,1
+4b,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+5,1
+5,0
+5,1
+2f2,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+9,0
+3,1
+d,0
+2,1
+36,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+b,0
+2,1
+c,0
+2,1
+36,0
+2,1
+f,0
+2,1
+b,0
+2,1
+c,0
+2,1
+32,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+6,1
+0
+6,1
+2,0
+5,1
+4,0
+5,1
+2,0
+6,1
+3,0
+3,1
+29,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2c,0
+4,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+4,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+4,0
+7,1
+0
+2,1
+3,0
+2,1
+2e,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+9,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2a,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+29,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+6,1
+4,0
+2,1
+5,0
+5,1
+2,0
+6,1
+3,0
+3,1
+2f,0
+2,1
+f,0
+2,1
+52,0
+3,1
+d,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+2da,0
+100 90 32
+446,0
+2,1
+29,0
+2,1
+37,0
+2,1
+29,0
+2,1
+37,0
+2,1
+27,0
+5,1
+2,0
+4,1
+2,0
+a,1
+3,0
+6,1
+2,0
+5,1
+2,0
+6,1
+2,0
+3,1
+0
+5,1
+0
+2,1
+29,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+29,0
+2,1
+5,0
+3,1
+4,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+29,0
+2,1
+3,0
+4,1
+5,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+29,0
+2,1
+2,0
+3,1
+7,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+29,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+27,0
+3,1
+4,0
+4,1
+5,0
+7,1
+3,0
+6,1
+2,0
+5,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+38,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+305,0
+3,1
+2,0
+2,1
+3,0
+3,1
+56,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+7,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+3,1
+2,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+28,0
+2,1
+4,0
+2,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+3,1
+2,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+28,0
+2,1
+4,0
+2,1
+5,0
+4,1
+4,0
+2,1
+2,0
+2,1
+3,0
+5,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+26,0
+3,1
+5,0
+2,1
+6,0
+4,1
+4,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+28,0
+2,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+1
+4,0
+7,1
+0
+4,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+4,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+4,1
+3,0
+2,1
+2,0
+3,1
+3,0
+2,1
+5,0
+4,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+4,0
+2,1
+5,0
+7,1
+3,0
+2,1
+4,0
+2,1
+2,0
+3,1
+3,0
+2,1
+6,0
+2,1
+4,0
+6,1
+29,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4b,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+0
+2,1
+49,0
+3,1
+2,0
+2,1
+3,0
+3,1
+a,0
+3,1
+302,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+2f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+93,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+2f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+26,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+4,0
+6,1
+26,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+4,0
+2,1
+2,0
+1
+22,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2c,0
+4,1
+4,0
+4,1
+4,0
+4,1
+6,0
+4,1
+4,0
+4,1
+4,0
+5,1
+4,0
+4,1
+40d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+87,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+24,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+24,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+20,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3ef,0
+100 90 32
+40c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+25,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+4,1
+4,0
+4,1
+4,0
+8,1
+4,0
+4,1
+4,0
+4,1
+0
+4,1
+4,0
+4,1
+4,0
+4,1
+419,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+2f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+93,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+2f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+30,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+30,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2c,0
+4,1
+4,0
+4,1
+4,0
+5,1
+4,0
+4,1
+4,0
+6,1
+4,0
+4,1
+4,0
+4,1
+401,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+85,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+22,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+22,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1e,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+28,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+28,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+23,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+24,0
+4,1
+4,0
+4,1
+4,0
+4,1
+0
+4,1
+4,0
+4,1
+4,0
+4,1
+2,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3ed,0
+100 90 32
+412,0
+2,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+91,0
+2,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+29,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2a,0
+4,1
+4,0
+4,1
+4,0
+6,1
+4,0
+4,1
+4,0
+7,1
+4,0
+4,1
+4,0
+4,1
+409,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+83,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+20,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+23,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+20,0
+4,1
+4,0
+4,1
+4,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+6,0
+4,1
+4,0
+4,1
+4,0
+3,1
+406,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+89,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+21,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+22,0
+4,1
+4,0
+4,1
+4,0
+4,1
+2,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3,0
+4,1
+4,0
+4,1
+4,0
+4,1
+415,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+28,0
+4,1
+4,0
+4,1
+4,0
+7,1
+4,0
+4,1
+4,0
+8,1
+4,0
+4,1
+4,0
+4,1
+3eb,0
+100 90 32
+40e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+2,1
+8b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+2,1
+28,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+2,1
+28,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+1
+24,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+1
+24,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+1
+25,0
+4,1
+4,0
+4,1
+4,0
+4,1
+6,0
+4,1
+4,0
+4,1
+4,0
+5,1
+4,0
+4,1
+4,0
+4,1
+403,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+87,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+24,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+24,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+20,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+413,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+25,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+4,1
+4,0
+4,1
+4,0
+8,1
+4,0
+4,1
+4,0
+4,1
+0
+4,1
+4,0
+4,1
+4,0
+4,1
+419,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+2f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+93,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+2f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+30,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+30,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2c,0
+4,1
+4,0
+4,1
+4,0
+5,1
+4,0
+4,1
+4,0
+6,1
+4,0
+4,1
+4,0
+4,1
+3e9,0
+100 90 32
+417,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9c,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+35,0
+4,1
+4,0
+4,1
+4,0
+5,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+41f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9c,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+35,0
+4,1
+4,0
+4,1
+4,0
+5,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+41f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9c,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+35,0
+4,1
+4,0
+4,1
+4,0
+5,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+41f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9c,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+35,0
+4,1
+4,0
+4,1
+4,0
+5,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3f0,0
+100 90 32
+7,0
+1
+8,0
+2,1
+2,0
+3,1
+9,0
+1
+5,0
+1
+b,0
+1
+0
+2,1
+9,0
+1
+6,0
+1
+b,0
+1
+0
+2,1
+9,0
+1
+b,0
+1
+9,0
+2,1
+0
+2,1
+a,0
+1
+3,0
+e,1
+0
+1
+0
+e,1
+0
+e,1
+0
+1
+0
+e,1
+5,0
+e,1
+0
+1
+0
+e,1
+3,0
+1
+a,0
+2,1
+0
+2,1
+9,0
+1
+6,0
+1
+a,0
+2,1
+0
+2,1
+9,0
+1
+b,0
+1
+9,0
+2,1
+0
+1
+b,0
+1
+5,0
+1
+9,0
+3,1
+2,0
+2,1
+8,0
+1
+6,0
+1
+9,0
+3,1
+2,0
+2,1
+8,0
+1
+b,0
+1
+8,0
+2,1
+3,0
+1
+a,0
+1
+5,0
+1
+8,0
+3,1
+4,0
+2,1
+7,0
+1
+6,0
+1
+8,0
+3,1
+4,0
+2,1
+7,0
+1
+b,0
+1
+7,0
+2,1
+5,0
+1
+9,0
+1
+5,0
+1
+7,0
+3,1
+0
+3,1
+2,0
+2,1
+6,0
+1
+6,0
+1
+7,0
+3,1
+0
+3,1
+2,0
+2,1
+6,0
+1
+b,0
+1
+6,0
+2,1
+2,0
+3,1
+2,0
+1
+8,0
+1
+c,0
+3,1
+2,0
+3,1
+3,0
+2,1
+13,0
+3,1
+2,0
+3,1
+3,0
+2,1
+17,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+3,1
+3,0
+3,1
+4,0
+2,1
+11,0
+3,1
+3,0
+3,1
+4,0
+2,1
+15,0
+2,1
+4,0
+3,1
+4,0
+1
+11,0
+3,1
+4,0
+3,1
+5,0
+2,1
+f,0
+3,1
+4,0
+3,1
+5,0
+2,1
+13,0
+2,1
+5,0
+3,1
+5,0
+1
+f,0
+3,1
+5,0
+3,1
+6,0
+2,1
+d,0
+3,1
+5,0
+3,1
+6,0
+2,1
+11,0
+2,1
+6,0
+3,1
+6,0
+1
+d,0
+3,1
+6,0
+3,1
+7,0
+2,1
+b,0
+3,1
+6,0
+3,1
+7,0
+2,1
+f,0
+2,1
+7,0
+3,1
+7,0
+1
+b,0
+3,1
+7,0
+3,1
+8,0
+2,1
+9,0
+3,1
+7,0
+3,1
+8,0
+2,1
+d,0
+2,1
+8,0
+3,1
+8,0
+1
+9,0
+3,1
+8,0
+3,1
+9,0
+2,1
+7,0
+3,1
+8,0
+3,1
+9,0
+2,1
+b,0
+2,1
+9,0
+3,1
+9,0
+1
+7,0
+3,1
+9,0
+3,1
+a,0
+2,1
+5,0
+3,1
+9,0
+3,1
+a,0
+2,1
+9,0
+2,1
+a,0
+3,1
+a,0
+1
+5,0
+3,1
+a,0
+3,1
+b,0
+2,1
+3,0
+3,1
+a,0
+3,1
+b,0
+2,1
+7,0
+2,1
+b,0
+3,1
+c,0
+1
+2,0
+3,1
+b,0
+3,1
+c,0
+2,1
+0
+3,1
+b,0
+3,1
+c,0
+2,1
+5,0
+2,1
+c,0
+3,1
+c,0
+1
+2,0
+2,1
+9,0
+9,1
+a,0
+1
+0
+2,1
+9,0
+9,1
+a,0
+1
+1c85,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+3c5,0
+2,1
+13,0
+2,1
+3,0
+2,1
+33,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+3,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+2d,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+5,0
+3,1
+6,0
+2,1
+32,0
+2,1
+2,0
+2,1
+3,0
+2,1
+54,0
+2,1
+2,0
+d,1
+12,0
+5,1
+d,0
+2,1
+2d,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+0
+4,1
+c,0
+2,1
+2d,0
+2,1
+7,0
+2,1
+3,0
+2,1
+16,0
+3,1
+d,0
+2,1
+2c,0
+2,1
+7,0
+2,1
+3,0
+2,1
+17,0
+2,1
+e,0
+1
+2c,0
+2,1
+7,0
+2,1
+3,0
+2,1
+12,0
+3,1
+2,0
+2,1
+a,0
+2,1
+2,0
+1
+2c,0
+2,1
+7,0
+2,1
+3,0
+2,1
+12,0
+3,1
+2,0
+2,1
+a,0
+2,1
+2,0
+1
+2c,0
+2,1
+7,0
+2,1
+3,0
+2,1
+13,0
+5,1
+c,0
+4,1
+b4,0
+2,1
+63,0
+2,1
+2c2,0
+2,1
+37,0
+2,1
+0
+3,1
+2,0
+3,1
+2,0
+2,1
+0
+3,1
+11,0
+5,1
+3,0
+2,1
+36,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+10,0
+5,1
+4,0
+2,1
+3a,0
+2,1
+3,0
+2,1
+58,0
+2,1
+0
+a,1
+57,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3d4,0
+1
+4,0
+1
+5e,0
+6,1
+a,0
+2,1
+0
+5,1
+0
+3,1
+13,0
+2,1
+0
+3,1
+2,0
+3,1
+2b,0
+4,1
+b,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+39,0
+2,1
+3,0
+2,1
+4,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+39,0
+2,1
+0
+5,1
+0
+5,1
+11,0
+2,1
+0
+a,1
+38,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+21,0
+8,1
+7,0
+8,1
+0
+2,1
+3,0
+3,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+21,0
+8,1
+7,0
+8,1
+0
+2,1
+3,0
+3,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+39,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+39,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+39,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3d6,0
+3,1
+4a,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+3,1
+41,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+41,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+3,1
+4a,0
+9,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+51,0
+2,1
+2,0
+2,1
+b,0
+2,1
+51,0
+2,1
+2,0
+2,1
+b,0
+2,1
+50,0
+9,1
+9,0
+2,1
+52,0
+2,1
+2,0
+2,1
+5f,0
+2,1
+2,0
+2,1
+9,0
+2,1
+53,0
+2,1
+2,0
+2,1
+9,0
+2,1
+d2,0
+2,1
+62,0
+2,1
+2c7,0
+100 90 32
+3ab,0
+1
+31,0
+1
+2f,0
+1
+0
+1
+0
+1
+4,0
+2,1
+2,0
+2,1
+4,0
+3,1
+6,0
+3,1
+7,0
+2,1
+3,0
+3,1
+4,0
+5,1
+2e,0
+3,1
+4,0
+2,1
+4,0
+2,1
+3,0
+3,1
+5,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+25,0
+2,1
+6,0
+3,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+6,0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+25,0
+2,1
+5,0
+1
+0
+1
+0
+1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+7,0
+1
+0
+1
+8,0
+2,1
+2,0
+3,1
+6,0
+1
+0
+2,1
+25,0
+2,1
+7,0
+1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+3,1
+9,0
+2,1
+9,0
+5,1
+22,0
+8,1
+9,0
+2,1
+6,0
+2,1
+7,0
+2,1
+0
+5,1
+8,0
+2,1
+8,0
+4,1
+24,0
+8,1
+9,0
+2,1
+6,0
+2,1
+8,0
+3,1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+28,0
+2,1
+c,0
+2,1
+6,0
+2,1
+9,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+1
+0
+2,1
+1e,0
+2,1
+5,0
+2,1
+c,0
+2,1
+6,0
+2,1
+8,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+1e,0
+2,1
+5,0
+2,1
+d,0
+2,1
+4,0
+2,1
+8,0
+3,1
+0
+4,1
+4,0
+3,1
+3,0
+2,1
+6,0
+5,1
+1f,0
+1
+15,0
+2,1
+4,0
+2,1
+24,0
+1
+21,0
+1
+16,0
+2,1
+2,0
+2,1
+48,0
+1
+323,0
+6,1
+4,0
+2,1
+7,0
+5,1
+0
+5,1
+4,0
+2,1
+8,0
+3,1
+2,0
+2,1
+35,0
+2,1
+4,0
+3,1
+5,0
+2,1
+3,0
+3,1
+3,0
+2,1
+3,0
+3,1
+6,0
+2,1
+0
+2,1
+0
+2,1
+35,0
+2,1
+4,0
+4,1
+4,0
+2,1
+3,0
+3,1
+3,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+31,0
+6,1
+3,0
+2,1
+0
+1
+4,0
+2,1
+4,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+30,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+3,0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+8,0
+6,1
+21,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+7,0
+6,1
+21,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+2a,0
+5,1
+4,0
+2,1
+7,0
+c,1
+3,0
+2,1
+8,0
+3,1
+6,0
+2,1
+2,0
+2,1
+425,0
+2,1
+a,0
+2,1
+9,0
+9,1
+3,0
+7,1
+3,0
+4,1
+32,0
+2,1
+c,0
+2,1
+7,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+30,0
+2,1
+e,0
+2,1
+6,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+f,0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+4,0
+2,1
+a,0
+2,1
+2d,0
+2,1
+6,0
+5,1
+5,0
+6,1
+2,0
+2,1
+3,0
+5,1
+5,0
+2,1
+6,0
+6,1
+2d,0
+2,1
+6,0
+5,1
+7,0
+2,1
+4,0
+6,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+10,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+4,0
+5,1
+5,0
+2,1
+6,0
+2,1
+2,0
+3,1
+2,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+30,0
+2,1
+3,0
+5,1
+4,0
+3,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+2,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+31,0
+2,1
+a,0
+4,1
+2,0
+2,1
+4,0
+8,1
+7,0
+2,1
+4,0
+5,1
+40,0
+1
+63,0
+1
+64,0
+1
+2f3,0
+6,1
+3,0
+7,1
+0
+7,1
+4,0
+6,1
+2,0
+5,1
+5,0
+5,1
+6,0
+2,1
+6,0
+8,1
+5,0
+3,1
+12,0
+2,1
+4,0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+14,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+4,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+1b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1b,0
+2,1
+2,0
+6,1
+2,0
+6,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+6,1
+5,0
+1
+2,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+13,0
+4,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+12,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+6,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+12,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+18,0
+3,1
+3,0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+4,0
+2,1
+0
+1
+8,0
+2,1
+5,0
+2,1
+12,0
+2,1
+0
+4,1
+8,0
+2,1
+0
+7,1
+4,0
+6,1
+2,0
+5,1
+4,0
+6,1
+3,0
+2,1
+4,0
+2,1
+2,0
+9,1
+6,0
+2,1
+3e8,0
+100 90 32
+403,0
+6,1
+3,0
+5,1
+3,0
+2,1
+4,0
+4,1
+5,0
+3,1
+5,0
+2,1
+2,0
+2,1
+3,0
+4,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+5,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+4,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+6,1
+3,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+4,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+7,1
+3,0
+4,1
+5,0
+2,1
+5,0
+6,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+5,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+5,1
+5,0
+2,1
+0
+8,1
+1f,0
+6,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+6,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+4,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+4,1
+2,0
+3,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+3,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+4,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+3,0
+5,1
+3,0
+3,1
+3,0
+3,1
+3,0
+1
+3,0
+2,1
+0
+6,1
+0
+2,1
+4,0
+2,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+403,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+b,1
+3,0
+7,1
+3,0
+5,1
+1a,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+4,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+4,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+19,0
+2,1
+2,0
+2,1
+4,0
+4,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+1a,0
+4,1
+6,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+0
+5,1
+3,0
+7,1
+0
+2,1
+5,0
+2,1
+1b,0
+2,1
+7,0
+2,1
+6,0
+1
+0
+5,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+6,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+1b,0
+2,1
+6,0
+4,1
+5,0
+4,1
+0
+5,1
+2,0
+1
+3,0
+2,1
+4,0
+2,1
+4,0
+4,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+1b,0
+2,1
+5,0
+2,1
+2,0
+2,1
+4,0
+3,1
+3,0
+7,1
+3,0
+2,1
+4,0
+2,1
+4,0
+4,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+1b,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+4,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+1c,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+6,0
+4,1
+6,0
+2,1
+0
+5,1
+2,0
+2,1
+4,0
+2,1
+2,0
+6,1
+5d,0
+2,1
+3b8,0
+2,1
+9,0
+2,1
+16,0
+6,1
+2,0
+5,1
+2,0
+6,1
+2c,0
+2,1
+a,0
+2,1
+f,0
+2,1
+4,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+30,0
+2,1
+a,0
+2,1
+7,0
+2,1
+5,0
+4,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+2b,0
+6,1
+3,0
+4,1
+2,0
+3,1
+8,0
+2,1
+3,0
+6,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+29,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+3,0
+8,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+4,1
+7,0
+2,1
+5,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+8,1
+4,0
+2,1
+4,0
+4,1
+7,0
+2,1
+5,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+5,1
+d,0
+2,1
+5,0
+2,1
+4,0
+3,1
+8,0
+2,1
+6,0
+2,1
+27,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+b,0
+2,1
+6,0
+2,1
+4,0
+3,1
+8,0
+2,1
+7,0
+1
+27,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+13,0
+2,1
+4,0
+2,1
+9,0
+2,1
+30,0
+6,1
+0
+2,1
+0
+3,1
+1a,0
+2,1
+9,0
+2,1
+2,0
+6,1
+4f,0
+2,1
+9,0
+2,1
+57,0
+2,1
+9,0
+2,1
+57,0
+5,1
+3,0
+5,1
+2ec,0
+2,1
+0
+2,1
+3,0
+2,1
+5,0
+2,1
+9,0
+3,1
+b,0
+2,1
+3a,0
+2,1
+0
+2,1
+3,0
+2,1
+5,0
+2,1
+b,0
+2,1
+a,0
+2,1
+3a,0
+2,1
+d,0
+2,1
+b,0
+2,1
+a,0
+2,1
+36,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+6,1
+0
+6,1
+2,0
+5,1
+2,0
+5,1
+2,0
+6,1
+3,0
+5,1
+2b,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2b,0
+4,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+2b,0
+4,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+7,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+29,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+6,1
+4,0
+2,1
+3,0
+5,1
+2,0
+6,1
+3,0
+5,1
+31,0
+2,1
+d,0
+2,1
+54,0
+3,1
+b,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+2e0,0
+100 90 32
+448,0
+2,1
+2d,0
+2,1
+33,0
+2,1
+2d,0
+2,1
+33,0
+2,1
+2b,0
+5,1
+2,0
+4,1
+2,0
+8,1
+3,0
+6,1
+2,0
+b,1
+2,0
+3,1
+0
+5,1
+0
+2,1
+2d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2d,0
+2,1
+5,0
+3,1
+3,0
+3,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2d,0
+2,1
+3,0
+4,1
+4,0
+3,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2d,0
+2,1
+2,0
+3,1
+6,0
+3,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+3,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2b,0
+3,1
+4,0
+4,1
+4,0
+6,1
+3,0
+6,1
+2,0
+6,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3a,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+307,0
+3,1
+2,0
+2,1
+3,0
+3,1
+56,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+4,0
+6,1
+0
+2,1
+3,0
+2,1
+0
+3,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+2d,0
+2,1
+4,0
+2,1
+4,0
+3,1
+4,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+2d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+7,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+1
+2b,0
+3,1
+5,0
+2,1
+6,0
+3,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+1
+2d,0
+2,1
+4,0
+2,1
+5,0
+4,1
+3,0
+2,1
+0
+1
+4,0
+5,1
+0
+4,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+3,0
+1
+2d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+3,0
+2,1
+0
+3,1
+2,0
+2,1
+5,0
+4,1
+3,0
+2,1
+3,0
+1
+2d,0
+2,1
+4,0
+2,1
+4,0
+6,1
+3,0
+2,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+6,0
+2,1
+4,0
+6,1
+2d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+2,1
+4d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+2,1
+0
+2,1
+4b,0
+3,1
+2,0
+2,1
+3,0
+3,1
+8,0
+3,1
+2a3,0
+2,1
+1f,0
+3,1
+2f,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+c,0
+4,1
+3,0
+2,1
+0
+2,1
+2e,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+2d,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+19,0
+2,1
+2,0
+2,1
+35,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+8,0
+2,1
+35,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+8,0
+2,1
+b,0
+2,1
+2,0
+2,1
+25,0
+2,1
+7,0
+2,1
+3,0
+2,1
+1b,0
+2,1
+d,0
+6,1
+24,0
+2,1
+5,0
+a,1
+10,0
+5,1
+5,0
+2,1
+e,0
+2,1
+2,0
+2,1
+2c,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+3d,0
+2,1
+7,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+4,0
+2,1
+37,0
+2,1
+5,0
+3,1
+2,0
+3,1
+16,0
+2,1
+4,0
+2,1
+5c,0
+2,1
+5d,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+2d7,0
+2,1
+39,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+e,0
+5,1
+0
+2,1
+3a,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+3,1
+f,0
+7,1
+3b,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+0
+a,1
+5c,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+0
+3,1
+2,0
+3,1
+40d,0
+100 90 32
+3af,0
+4,1
+5f,0
+6,1
+a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2b,0
+1
+4,0
+1
+a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3b,0
+2,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3b,0
+2,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3b,0
+2,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+25,0
+8,1
+5,0
+8,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+25,0
+8,1
+5,0
+8,1
+0
+2,1
+0
+19,1
+0
+2,1
+0
+a,1
+3a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3b,0
+2,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3b,0
+2,1
+0
+3,1
+0
+3,1
+13,0
+2,1
+0
+3,1
+2,0
+3,1
+3cf,0
+3,1
+46,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+9,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+3c,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+9,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+3,1
+3c,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+e,0
+3,1
+43,0
+9,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+51,0
+2,1
+2,0
+2,1
+b,0
+2,1
+51,0
+2,1
+2,0
+2,1
+b,0
+2,1
+4f,0
+9,1
+a,0
+2,1
+50,0
+2,1
+2,0
+2,1
+c,0
+2,1
+4f,0
+2,1
+2,0
+2,1
+d,0
+2,1
+4f,0
+2,1
+2,0
+2,1
+d,0
+2,1
+e2,0
+2,1
+62,0
+2,1
+28e,0
+1
+2d,0
+1
+33,0
+1
+0
+1
+0
+1
+2,0
+2,1
+2,0
+2,1
+5,0
+5,1
+0
+4,1
+4,0
+3,1
+3,0
+2,1
+6,0
+5,1
+32,0
+3,1
+2,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+29,0
+2,1
+6,0
+3,1
+2,0
+2,1
+4,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+1
+0
+2,1
+29,0
+2,1
+5,0
+1
+0
+1
+0
+3,1
+6,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+2c,0
+2,1
+7,0
+1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+0
+5,1
+8,0
+2,1
+8,0
+4,1
+28,0
+8,1
+7,0
+2,1
+6,0
+2,1
+9,0
+3,1
+9,0
+2,1
+9,0
+5,1
+26,0
+8,1
+7,0
+2,1
+6,0
+2,1
+9,0
+1
+0
+1
+8,0
+2,1
+2,0
+3,1
+6,0
+1
+0
+2,1
+29,0
+2,1
+a,0
+2,1
+6,0
+2,1
+8,0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+23,0
+1
+5,0
+2,1
+a,0
+2,1
+6,0
+2,1
+8,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+22,0
+1
+6,0
+2,1
+b,0
+2,1
+4,0
+2,1
+a,0
+3,1
+7,0
+2,1
+3,0
+3,1
+4,0
+5,1
+23,0
+1
+13,0
+2,1
+4,0
+2,1
+22,0
+1
+25,0
+2,1
+13,0
+2,1
+2,0
+2,1
+49,0
+2,1
+324,0
+5,1
+4,0
+2,1
+7,0
+a,1
+3,0
+2,1
+8,0
+3,1
+4,0
+2,1
+31,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+31,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+32,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+32,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+4,1
+33,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+4,1
+8,0
+6,1
+26,0
+6,1
+3,0
+2,1
+0
+1
+4,0
+2,1
+2,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+3,1
+9,0
+6,1
+29,0
+2,1
+4,0
+4,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+3,1
+38,0
+2,1
+4,0
+3,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+3,1
+6,0
+2,1
+0
+3,1
+6,0
+2,1
+2d,0
+6,1
+4,0
+2,1
+7,0
+9,1
+4,0
+2,1
+8,0
+5,1
+6,0
+2,1
+3f3,0
+100 90 32
+414,0
+2,1
+a,0
+2,1
+12,0
+6,1
+7,0
+2,1
+4,0
+5,1
+2b,0
+2,1
+c,0
+2,1
+10,0
+3,1
+0
+4,1
+6,0
+2,1
+3,0
+2,1
+3,0
+1
+2a,0
+2,1
+e,0
+2,1
+e,0
+4,1
+0
+4,1
+6,0
+2,1
+3,0
+2,1
+3,0
+1
+29,0
+2,1
+10,0
+2,1
+6,0
+1
+2,0
+2,1
+2,0
+4,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+1
+28,0
+2,1
+6,0
+5,1
+7,0
+2,1
+4,0
+1
+3,0
+2,1
+2,0
+6,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+1
+28,0
+2,1
+6,0
+5,1
+7,0
+2,1
+4,0
+1
+7,0
+2,1
+0
+5,1
+5,0
+2,1
+6,0
+5,1
+29,0
+2,1
+10,0
+2,1
+5,0
+2,1
+6,0
+4,1
+0
+4,1
+4,0
+2,1
+a,0
+1
+2a,0
+2,1
+4,0
+5,1
+5,0
+2,1
+6,0
+2,1
+6,0
+4,1
+0
+4,1
+3,0
+2,1
+6,0
+2,1
+3,0
+1
+2b,0
+2,1
+3,0
+5,1
+4,0
+2,1
+b,0
+2,1
+2,0
+4,1
+0
+4,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2c,0
+2,1
+a,0
+2,1
+c,0
+2,1
+3,0
+7,1
+3,0
+7,1
+3,0
+4,1
+a7,0
+2,1
+62,0
+2,1
+2ea,0
+2,1
+0
+4,1
+8,0
+2,1
+0
+7,1
+2,0
+6,1
+2,0
+5,1
+4,0
+6,1
+0
+2,1
+4,0
+2,1
+2,0
+9,1
+6,0
+2,1
+16,0
+3,1
+3,0
+2,1
+7,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+1
+8,0
+2,1
+5,0
+2,1
+16,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+4,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+1c,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+4,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+6,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+16,0
+4,1
+3,0
+2,1
+6,0
+2,1
+6,0
+4,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+1d,0
+2,1
+2,0
+6,1
+2,0
+8,1
+4,0
+2,1
+7,0
+2,1
+2,0
+6,1
+3,0
+1
+2,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+1e,0
+2,1
+6,0
+2,1
+6,0
+4,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+18,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+4,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+14,0
+2,1
+4,0
+2,1
+7,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+6,1
+3,0
+7,1
+0
+7,1
+2,0
+6,1
+2,0
+5,1
+5,0
+5,1
+4,0
+2,1
+6,0
+8,1
+5,0
+4,1
+414,0
+2,1
+3,0
+5,1
+3,0
+3,1
+2,0
+3,1
+2,0
+1
+3,0
+2,1
+0
+6,1
+0
+2,1
+4,0
+5,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+27,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+4,1
+0
+3,1
+0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+27,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+4,1
+0
+3,1
+0
+3,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+27,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+7,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+6,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+7,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+4,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+6,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+3,1
+5,0
+2,1
+0
+8,1
+22,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+5,1
+3,0
+4,1
+5,0
+2,1
+5,0
+4,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+3,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+6,1
+3,0
+5,1
+3,0
+2,1
+3,0
+3,1
+5,0
+3,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+40a,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+4,1
+6,0
+4,1
+6,0
+6,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+26,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+4,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+6,1
+21,0
+2,1
+5,0
+2,1
+2,0
+2,1
+4,0
+3,1
+3,0
+5,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+20,0
+2,1
+6,0
+4,1
+5,0
+4,1
+0
+4,1
+0
+1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+1
+20,0
+2,1
+7,0
+2,1
+6,0
+1
+0
+7,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+4,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+1
+1f,0
+4,1
+6,0
+2,1
+5,0
+2,1
+2,0
+9,1
+2,0
+2,1
+4,0
+2,1
+4,0
+6,1
+3,0
+7,1
+0
+2,1
+5,0
+1
+1e,0
+2,1
+2,0
+2,1
+4,0
+4,1
+4,0
+2,1
+2,0
+9,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+1
+1e,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+4,1
+0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+1
+1d,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+3,1
+2,0
+4,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+1
+1d,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+3,1
+2,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+9,1
+3,0
+7,1
+2,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+385,0
+100 90 32
+402,0
+6,1
+9,0
+3,1
+13,0
+5,1
+3,0
+2,1
+6,0
+5,1
+2,0
+8,1
+1f,0
+2,1
+3,0
+2,1
+9,0
+3,1
+d,0
+2,1
+4,0
+2,1
+6,0
+2,1
+9,0
+2,1
+8,0
+2,1
+1f,0
+2,1
+3,0
+2,1
+a,0
+2,1
+5,0
+2,1
+6,0
+2,1
+4,0
+2,1
+7,0
+2,1
+8,0
+2,1
+7,0
+2,1
+20,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+3,1
+3,0
+2,1
+6,0
+2,1
+5,0
+2,1
+4,0
+2,1
+7,0
+2,1
+8,0
+2,1
+6,0
+2,1
+21,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+8,1
+4,0
+2,1
+4,0
+2,1
+8,0
+2,1
+7,0
+2,1
+5,0
+2,1
+22,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+8,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+2,1
+8,0
+2,1
+7,0
+2,1
+5,0
+2,1
+23,0
+6,1
+2,0
+5,1
+b,0
+2,1
+3,0
+6,1
+2,0
+2,1
+9,0
+2,1
+6,0
+2,1
+4,0
+2,1
+28,0
+2,1
+2,0
+2,1
+d,0
+2,1
+5,0
+4,1
+3,0
+2,1
+9,0
+2,1
+6,0
+2,1
+3,0
+2,1
+29,0
+2,1
+2,0
+2,1
+2,0
+2,1
+11,0
+2,1
+4,0
+2,1
+a,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+3,0
+4,1
+18,0
+2,1
+a,0
+2,1
+5,0
+2,1
+2,0
+8,1
+45,0
+2,1
+11,0
+2,1
+4f,0
+2,1
+11,0
+2,1
+4f,0
+5,1
+b,0
+5,1
+2f5,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+3,0
+2,1
+b,0
+2,1
+8,0
+6,1
+36,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+b,0
+2,1
+8,0
+2,1
+3,0
+2,1
+36,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+b,0
+2,1
+8,0
+2,1
+3,0
+2,1
+37,0
+4,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+5,1
+4,0
+2,1
+0
+5,1
+2,0
+2,1
+3,0
+2,1
+2,0
+5,1
+30,0
+4,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2e,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+8,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+7,1
+0
+6,1
+2,0
+b,1
+0
+6,1
+7,0
+2,1
+31,0
+2,1
+0
+2,1
+8,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+b,0
+2,1
+31,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+31,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+3,1
+2,0
+5,1
+2,0
+2,1
+7,0
+5,1
+35,0
+2,1
+b,0
+2,1
+3,0
+2,1
+50,0
+2,1
+b,0
+2,1
+3,0
+2,1
+5d,0
+6,1
+33e,0
+2,1
+2f,0
+3,1
+30,0
+2,1
+31,0
+2,1
+2f,0
+2,1
+31,0
+2,1
+3,0
+4,1
+2,0
+2,1
+0
+2,1
+8,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+31,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+8,0
+2,1
+0
+2,1
+0
+4,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+31,0
+2,1
+2,0
+3,1
+4,0
+2,1
+0
+2,1
+8,0
+2,1
+0
+2,1
+0
+4,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+31,0
+2,1
+3,0
+4,1
+2,0
+6,1
+3,0
+6,1
+0
+2,1
+0
+4,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2f,0
+5,1
+4,0
+3,1
+0
+2,1
+0
+4,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+4,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+31,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+4,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+4,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+31,0
+2,1
+3,0
+4,1
+2,0
+7,1
+0
+2,1
+3,0
+2,1
+2,0
+9,1
+2,0
+3,1
+0
+5,1
+0
+2,1
+3c,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+55,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+55,0
+6,1
+3,0
+6,1
+2f5,0
+3,1
+2,0
+2,1
+3,0
+3,1
+56,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+6,1
+4,0
+3,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+4,1
+1f,0
+2,1
+4,0
+2,1
+5,0
+2,1
+9,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+5,0
+4,1
+3,0
+2,1
+21,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4,0
+2,1
+5,0
+4,1
+5,0
+4,1
+0
+4,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+1f,0
+3,1
+5,0
+2,1
+6,0
+3,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+21,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+2,1
+5,0
+4,1
+4,0
+4,1
+5,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+21,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+0
+1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+21,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+6,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+21,0
+2,1
+4,0
+2,1
+5,0
+2,1
+c,0
+2,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+c,0
+2,1
+3,0
+2,1
+43,0
+3,1
+2,0
+2,1
+3,0
+3,1
+d,0
+2,1
+3,0
+2,1
+2df,0
+100 90 32
+3d2,0
+2,1
+3,0
+2,1
+3c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+f,0
+2,1
+4,0
+2,1
+0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+e,0
+2,1
+5,0
+3,1
+3d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+3,0
+2,1
+45,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+31,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+e,0
+6,1
+30,0
+3,1
+5,0
+2,1
+6,0
+3,1
+3,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2,0
+2,1
+33,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+2,0
+4,1
+44,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+8,0
+2,1
+2c6,0
+2,1
+3,0
+2,1
+3c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+f,0
+2,1
+4,0
+2,1
+0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+e,0
+2,1
+5,0
+3,1
+3d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+3,0
+2,1
+45,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+31,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+e,0
+6,1
+30,0
+3,1
+5,0
+2,1
+6,0
+3,1
+3,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2,0
+2,1
+33,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+2,0
+4,1
+44,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+8,0
+2,1
+2c6,0
+2,1
+3,0
+2,1
+3c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+f,0
+2,1
+4,0
+2,1
+0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+e,0
+2,1
+5,0
+3,1
+3d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+3,0
+2,1
+45,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+31,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+e,0
+6,1
+30,0
+3,1
+5,0
+2,1
+6,0
+3,1
+3,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2,0
+2,1
+33,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+2,0
+4,1
+44,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+8,0
+2,1
+2c6,0
+2,1
+3,0
+2,1
+3c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+f,0
+2,1
+4,0
+2,1
+0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+e,0
+2,1
+5,0
+3,1
+3d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+3,0
+2,1
+45,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+31,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+e,0
+6,1
+30,0
+3,1
+5,0
+2,1
+6,0
+3,1
+3,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2,0
+2,1
+33,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+2,0
+4,1
+44,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+8,0
+2,1
+2dc,0
+100 90 32
+1c28,0
+4,1
+60,0
+6,1
+5e,0
+2,1
+3,0
+2,1
+5d,0
+2,1
+4,0
+2,1
+5c,0
+2,1
+5,0
+2,1
+5b,0
+2,1
+6,0
+1
+5b,0
+2,1
+6,0
+1
+5b,0
+2,1
+5,0
+1
+5c,0
+2,1
+4,0
+1
+5d,0
+2,1
+3,0
+1
+5e,0
+5,1
+313,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+472,0
+2,1
+0
+2,1
+2,0
+4,1
+4,0
+3,1
+0
+2,1
+4f,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+6,0
+4,1
+4,0
+2,1
+31,0
+2,1
+2,0
+2,1
+8,0
+5,1
+2,0
+3,1
+4,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+31,0
+2,1
+2,0
+2,1
+8,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+6,1
+2a,0
+2,1
+5,0
+2,1
+a,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+3,1
+0
+4,1
+4,0
+4,1
+2,0
+6,1
+29,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+2a,0
+6,1
+0
+2,1
+2,0
+2,1
+a,0
+4,1
+3,0
+4,1
+3,0
+3,1
+2,0
+4,1
+a,0
+2,1
+2b,0
+4,1
+4,0
+2,1
+d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+3a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+4,0
+3,1
+4,0
+3,1
+2,0
+3,1
+9,0
+6,1
+2f,0
+2,1
+2,0
+2,1
+b,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+a,0
+6,1
+40,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+35a,0
+2,1
+13,0
+2,1
+6,0
+2,1
+35,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+6,0
+2,1
+35,0
+3,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+6,0
+2,1
+3,0
+7,1
+2b,0
+6,1
+2,0
+1
+2,0
+1
+4,0
+2,1
+13,0
+2,1
+6,0
+2,1
+3,0
+7,1
+2b,0
+2,1
+0
+3,1
+2,0
+4,1
+4,0
+2,1
+13,0
+2,1
+6,0
+2,1
+a,0
+7,1
+24,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+13,0
+2,1
+6,0
+2,1
+a,0
+7,1
+32,0
+4,1
+3,0
+4,1
+5,0
+5,1
+2,0
+5,1
+0
+7,1
+34,0
+2,1
+5,0
+4,1
+0
+4,1
+3,0
+4,1
+5,0
+5,1
+2,0
+5,1
+0
+7,1
+34,0
+2,1
+6,0
+2,1
+b,0
+2,1
+5,0
+2,1
+d,0
+2,1
+37,0
+2,1
+6,0
+2,1
+b,0
+2,1
+5,0
+2,1
+d,0
+2,1
+37,0
+2,1
+6,0
+2,1
+b,0
+2,1
+5,0
+2,1
+d,0
+2,1
+37,0
+4,1
+4,0
+2,1
+b,0
+2,1
+5,0
+2,1
+d,0
+2,1
+4c,0
+2,1
+5,0
+2,1
+d,0
+2,1
+30e,0
+2,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+42,0
+2,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+42,0
+2,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+7,0
+2,1
+39,0
+2,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+6,0
+2,1
+3a,0
+2,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+4,0
+2,1
+3c,0
+2,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+3,0
+2,1
+23,0
+7,1
+13,0
+9,1
+3,0
+7,1
+4,0
+7,1
+2,0
+2,1
+4,0
+2,1
+22,0
+7,1
+13,0
+9,1
+3,0
+7,1
+4,0
+7,1
+2,0
+2,1
+6,0
+2,1
+27,0
+7,1
+c,0
+2,1
+5,0
+2,1
+10,0
+2,1
+5,0
+2,1
+7,0
+2,1
+26,0
+7,1
+c,0
+2,1
+5,0
+2,1
+10,0
+2,1
+5,0
+2,1
+3,0
+6,1
+2d,0
+7,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+5,0
+2,1
+3,0
+6,1
+2d,0
+7,1
+5,0
+2,1
+5,0
+2,1
+10,0
+2,1
+5,0
+2,1
+42,0
+2,1
+5,0
+2,1
+10,0
+2,1
+5,0
+2,1
+3af,0
+2,1
+11,0
+1
+9,0
+3,1
+19,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+0
+1
+1b,0
+2,1
+f,0
+2,1
+8,0
+2,1
+0
+2,1
+18,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+0
+1
+1d,0
+2,1
+9,0
+6,1
+8,0
+2,1
+1b,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+5,1
+1d,0
+2,1
+0
+6,1
+0
+6,1
+8,0
+2,1
+1b,0
+2,1
+b,0
+5,1
+1c,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+9,0
+4,1
+5,0
+2,1
+13,0
+2,1
+c,0
+1
+0
+1
+1b,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+6,1
+8,0
+2,1
+6,0
+2,1
+13,0
+2,1
+b,0
+5,1
+19,0
+2,1
+6,0
+2,1
+0
+2,1
+0
+6,1
+8,0
+2,1
+28,0
+5,1
+19,0
+6,1
+0
+3,1
+0
+2,1
+0
+2,1
+c,0
+2,1
+0
+2,1
+18,0
+2,1
+c,0
+1
+0
+1
+1a,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+1
+c,0
+1
+0
+3,1
+19,0
+2,1
+c,0
+1
+0
+1
+395,0
+100 90 32
+4b4,0
+2,1
+3,0
+3,1
+2,0
+1
+2,0
+3,1
+4,0
+3,1
+5,0
+2,1
+3,0
+2,1
+40,0
+4,1
+2,0
+1
+0
+1
+0
+2,1
+0
+2,1
+0
+2,1
+3,0
+3,1
+4,0
+2,1
+5,0
+2,1
+3e,0
+1
+0
+2,1
+0
+1
+0
+3,1
+0
+1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+5,0
+2,1
+5,0
+2,1
+4,0
+1
+2,0
+1
+4,0
+2,1
+30,0
+1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+7,0
+2,1
+4,0
+2,1
+5,0
+2,1
+31,0
+4,1
+4,0
+2,1
+4,0
+3,1
+a,0
+2,1
+7,0
+2,1
+2,0
+6,1
+0
+6,1
+30,0
+2,1
+0
+1
+2,0
+2,1
+4,0
+2,1
+0
+1
+0
+1
+8,0
+2,1
+7,0
+2,1
+2,0
+6,1
+0
+6,1
+2e,0
+1
+0
+2,1
+0
+1
+2,0
+1
+0
+3,1
+0
+2,1
+0
+3,1
+9,0
+2,1
+5,0
+2,1
+5,0
+2,1
+5,0
+2,1
+5,0
+3,1
+29,0
+4,1
+2,0
+2,1
+0
+1
+0
+1
+0
+2,1
+0
+2,1
+a,0
+2,1
+5,0
+2,1
+4,0
+1
+2,0
+1
+4,0
+2,1
+5,0
+3,1
+2a,0
+2,1
+3,0
+1
+2,0
+3,1
+2,0
+3,1
+0
+1
+a,0
+2,1
+3,0
+2,1
+14,0
+2,1
+61,0
+2,1
+427,0
+2,1
+5,0
+2,1
+5,0
+2,1
+4,0
+4,1
+6,0
+4,1
+6,0
+2,1
+0
+6,1
+33,0
+2,1
+4,0
+1
+2,0
+1
+3,0
+3,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+4,0
+3,1
+0
+2,1
+36,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+8,0
+2,1
+3,0
+4,1
+0
+2,1
+36,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+5,1
+22,0
+6,1
+a,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+7,0
+3,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+21,0
+6,1
+9,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+2,1
+b,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+30,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+c,0
+2,1
+0
+6,1
+5,0
+2,1
+2a,0
+2,1
+3,0
+2,1
+8,0
+1
+2,0
+1
+4,0
+2,1
+3,0
+2,1
+8,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+29,0
+4,1
+2,0
+2,1
+9,0
+2,1
+3,0
+6,1
+0
+6,1
+5,0
+4,1
+6,0
+2,1
+2,0
+4,1
+2b,0
+2,1
+445,0
+4,1
+2,0
+6,1
+2,0
+4,1
+8,0
+4,1
+1a,0
+2,1
+8,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+18,0
+2,1
+a,0
+2,1
+1e,0
+2,1
+9,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+b,0
+2,1
+3,0
+6,1
+3,0
+2,1
+1d,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+4,1
+3,0
+4,1
+9,0
+2,1
+4,0
+6,1
+4,0
+2,1
+1c,0
+5,1
+5,0
+2,1
+3,0
+4,1
+8,0
+5,1
+3,0
+2,1
+5,0
+2,1
+9,0
+2,1
+10,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+a,0
+2,1
+16,0
+2,1
+4,0
+6,1
+4,0
+2,1
+1c,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+a,0
+2,1
+a,0
+3,1
+a,0
+2,1
+3,0
+6,1
+3,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+b,0
+2,1
+a,0
+2,1
+1f,0
+4,1
+3,0
+2,1
+5,0
+4,1
+8,0
+4,1
+3,0
+4,1
+4,0
+2,1
+d,0
+2,1
+8,0
+2,1
+42,0
+2,1
+4,0
+2,1
+425,0
+4,1
+3,0
+4,1
+3,0
+9,1
+3,0
+4,1
+2,0
+5,1
+0
+6,1
+0
+6,1
+2,0
+4,1
+2a,0
+2,1
+2,0
+2,1
+0
+1
+3,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+4,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+29,0
+2,1
+2,0
+2,1
+0
+1
+3,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+4,1
+5,0
+2,1
+5,0
+2,1
+31,0
+2,1
+0
+1
+0
+4,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+4,1
+5,0
+2,1
+5,0
+2,1
+2f,0
+3,1
+2,0
+1
+0
+1
+0
+2,1
+0
+a,1
+2,0
+2,1
+5,0
+2,1
+2,0
+7,1
+2,0
+5,1
+2,0
+2,1
+0
+3,1
+2b,0
+2,1
+3,0
+1
+0
+4,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+4,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+30,0
+1
+6,0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+4,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+4,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+4,0
+4,1
+2,0
+2,1
+2,0
+6,1
+3,0
+4,1
+2,0
+5,1
+0
+6,1
+0
+2,1
+6,0
+5,1
+3a2,0
+100 90 32
+4b4,0
+2,1
+2,0
+2,1
+0
+6,1
+5,0
+2,1
+2,0
+2,1
+3,0
+1
+0
+2,1
+5,0
+1
+4,0
+1
+3,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+5,1
+24,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+23,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+6,1
+3,0
+3,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+23,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+4,1
+3,0
+2,1
+5,0
+6,1
+3,0
+3,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+23,0
+6,1
+3,0
+2,1
+7,0
+2,1
+2,0
+3,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+5,1
+24,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+4,1
+3,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+27,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+27,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+27,0
+2,1
+2,0
+2,1
+0
+6,1
+2,0
+4,1
+3,0
+2,1
+3,0
+1
+0
+6,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+477,0
+4,1
+2,0
+5,1
+3,0
+4,1
+6,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+1
+4,0
+1
+0
+2,1
+2,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+b,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+1
+2,0
+1
+3,0
+4,1
+1e,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+b,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+1
+2,0
+1
+7,0
+2,1
+2,0
+2,1
+2,0
+4,1
+3,0
+4,1
+1e,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+4,1
+8,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+1
+2,0
+1
+7,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+0
+4,1
+7,0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+4,1
+7,0
+6,1
+2,0
+4,1
+4,0
+2,1
+1f,0
+3,1
+0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+8,0
+6,1
+2,0
+1
+2,0
+1
+4,0
+2,1
+1f,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+20,0
+4,1
+2,0
+2,1
+3,0
+1
+2,0
+4,1
+8,0
+2,1
+4,0
+4,1
+4,0
+2,1
+8,0
+1
+4,0
+1
+0
+1
+4,0
+1
+3,0
+2,1
+23,0
+2,1
+449,0
+6,1
+2,0
+4,1
+2,0
+2,1
+d,0
+4,1
+4,0
+2,1
+9,0
+3,1
+a,0
+2,1
+29,0
+2,1
+2,0
+2,1
+4,0
+2,1
+f,0
+2,1
+3,0
+4,1
+8,0
+3,1
+a,0
+2,1
+29,0
+2,1
+2,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+a,0
+2,1
+28,0
+2,1
+3,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2,0
+1
+4,0
+1
+9,0
+2,1
+3,0
+4,1
+2,0
+5,1
+24,0
+2,1
+4,0
+2,1
+6,0
+2,1
+d,0
+2,1
+19,0
+2,1
+0
+2,1
+2,0
+2,1
+22,0
+2,1
+5,0
+2,1
+7,0
+2,1
+c,0
+2,1
+16,0
+5,1
+0
+2,1
+2,0
+2,1
+21,0
+2,1
+6,0
+2,1
+7,0
+2,1
+c,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+21,0
+2,1
+6,0
+2,1
+8,0
+2,1
+b,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+21,0
+6,1
+2,0
+4,1
+6,0
+2,1
+9,0
+4,1
+9,0
+6,1
+7,0
+5,1
+0
+5,1
+4c,0
+6,1
+420,0
+2,1
+a,0
+3,1
+9,0
+2,1
+8,0
+2,1
+7,0
+2,1
+0
+2,1
+34,0
+2,1
+9,0
+2,1
+0
+2,1
+8,0
+2,1
+8,0
+2,1
+7,0
+2,1
+0
+2,1
+34,0
+2,1
+9,0
+2,1
+b,0
+2,1
+14,0
+2,1
+2a,0
+4,1
+3,0
+5,1
+2,0
+4,1
+3,0
+2,1
+5,0
+3,1
+0
+1
+0
+5,1
+4,0
+3,1
+7,0
+2,1
+0
+2,1
+2,0
+2,1
+25,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+4,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+26,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+6,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+4,1
+27,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+5,0
+4,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+4,1
+27,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+27,0
+4,1
+3,0
+5,1
+2,0
+4,1
+3,0
+2,1
+5,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+6,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+41,0
+2,1
+2,0
+2,1
+10,0
+2,1
+2,0
+2,1
+49,0
+4,1
+12,0
+4,1
+2e6,0
+100 90 32
+4b7,0
+3,1
+62,0
+2,1
+3b,0
+2,1
+25,0
+2,1
+3b,0
+2,1
+25,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+5,1
+6,0
+4,1
+2,0
+5,1
+3,0
+5,1
+5,0
+5,1
+3,0
+4,1
+2,0
+4,1
+23,0
+2,1
+3,0
+6,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+25,0
+2,1
+3,0
+6,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+6,0
+2,1
+4,0
+2,1
+25,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+8,0
+2,1
+2,0
+2,1
+25,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+5,1
+3,0
+5,1
+5,0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1f,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+4,1
+2,0
+2,1
+9,0
+2,1
+5,0
+2,1
+6,0
+4,1
+3,0
+4,1
+3f,0
+2,1
+9,0
+2,1
+57,0
+2,1
+9,0
+2,1
+3f8,0
+3,1
+4,0
+2,1
+4,0
+3,1
+53,0
+2,1
+6,0
+2,1
+6,0
+2,1
+52,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+6,1
+a,0
+2,1
+5,0
+2,1
+5,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+8,0
+4,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+b,0
+2,1
+5,0
+2,1
+5,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+8,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1a,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+7,0
+2,1
+2,0
+2,1
+2,0
+5,1
+0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1b,0
+5,1
+3,0
+2,1
+4,0
+1
+2,0
+1
+8,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+6,1
+a,0
+3,1
+4,0
+2,1
+4,0
+3,1
+3d,0
+2,1
+2,0
+2,1
+5f,0
+4,1
+2fa,0
+1
+0
+1
+0
+1
+60,0
+1
+0
+1
+59,0
+2,1
+2,0
+1
+2,0
+1
+0
+1
+0
+1
+57,0
+6,1
+3,0
+1
+0
+1
+58,0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+0
+1
+60,0
+1
+0
+1
+60,0
+1
+0
+1
+0
+1
+60,0
+1
+0
+1
+60,0
+1
+0
+1
+0
+1
+60,0
+1
+0
+1
+60,0
+1
+0
+1
+0
+1
+60,0
+1
+0
+1
+60,0
+1
+0
+1
+0
+1
+ae1,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+38f,0
+2,1
+3,0
+2,1
+19,0
+2,1
+3c,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+b,0
+2,1
+2,0
+2,1
+4,0
+2,1
+3,0
+3,1
+2,0
+3,1
+0
+2,1
+2,0
+2,1
+29,0
+2,1
+6,0
+3,1
+5,0
+2,1
+b,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+54,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2e,0
+2,1
+e,0
+2,1
+3,0
+5,1
+10,0
+d,1
+2,0
+2,1
+29,0
+2,1
+e,0
+2,1
+2,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+2,0
+3,1
+2,0
+2,1
+28,0
+2,1
+e,0
+2,1
+3,0
+2,1
+15,0
+2,1
+3,0
+2,1
+7,0
+2,1
+27,0
+2,1
+e,0
+2,1
+4,0
+2,1
+15,0
+2,1
+3,0
+2,1
+7,0
+2,1
+27,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+4,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+7,0
+2,1
+27,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+4,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+7,0
+2,1
+28,0
+4,1
+c,0
+4,1
+2,0
+5,1
+11,0
+2,1
+3,0
+2,1
+7,0
+2,1
+a4,0
+2,1
+61,0
+2,1
+2a8,0
+2,1
+61,0
+2,1
+5,0
+5,1
+15,0
+3,1
+0
+2,1
+2,0
+3,1
+2,0
+3,1
+0
+2,1
+2f,0
+2,1
+6,0
+5,1
+14,0
+2,1
+0
+3,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+5c,0
+a,1
+0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3f2,0
+1
+4,0
+1
+22,0
+3,1
+2,0
+3,1
+0
+2,1
+13,0
+3,1
+0
+2,1
+8,0
+3,1
+0
+2,1
+a,0
+6,1
+21,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+b,0
+4,1
+22,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+c,0
+2,1
+3,0
+2,1
+30,0
+a,1
+0
+2,1
+11,0
+5,1
+0
+2,1
+6,0
+5,1
+0
+2,1
+31,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+31,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+8,1
+11,0
+8,1
+f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+8,1
+11,0
+8,1
+f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+31,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+31,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+3ce,0
+3,1
+58,0
+3,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+3a,0
+2,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+7,0
+2,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+44,0
+3,1
+8,0
+2,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+50,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+9,1
+4f,0
+2,1
+b,0
+2,1
+2,0
+2,1
+51,0
+2,1
+b,0
+2,1
+2,0
+2,1
+51,0
+2,1
+9,0
+9,1
+5c,0
+2,1
+2,0
+2,1
+52,0
+2,1
+9,0
+2,1
+2,0
+2,1
+53,0
+2,1
+9,0
+2,1
+2,0
+2,1
+a1,0
+2,1
+62,0
+2,1
+307,0
+100 90 32
+38c,0
+1
+33,0
+1
+2d,0
+5,1
+4,0
+3,1
+3,0
+2,1
+7,0
+3,1
+6,0
+3,1
+4,0
+2,1
+2,0
+2,1
+6,0
+1
+0
+1
+0
+1
+2a,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+5,0
+3,1
+3,0
+2,1
+4,0
+2,1
+6,0
+3,1
+2b,0
+2,1
+0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+4,0
+2,1
+6,0
+3,1
+6,0
+2,1
+23,0
+2,1
+0
+1
+6,0
+3,1
+2,0
+2,1
+8,0
+1
+0
+1
+7,0
+2,1
+2,0
+2,1
+6,0
+2,1
+4,0
+1
+0
+1
+0
+1
+5,0
+2,1
+23,0
+5,1
+9,0
+2,1
+9,0
+3,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+1
+7,0
+2,1
+25,0
+4,1
+8,0
+2,1
+8,0
+5,1
+0
+2,1
+7,0
+2,1
+6,0
+2,1
+b,0
+8,1
+23,0
+1
+0
+2,1
+6,0
+2,1
+2,0
+3,1
+3,0
+2,1
+3,0
+3,1
+8,0
+2,1
+6,0
+2,1
+b,0
+8,1
+20,0
+2,1
+0
+1
+0
+2,1
+6,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+9,0
+2,1
+6,0
+2,1
+e,0
+2,1
+23,0
+2,1
+0
+1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+4,1
+8,0
+2,1
+6,0
+2,1
+e,0
+2,1
+5,0
+2,1
+1d,0
+5,1
+6,0
+2,1
+3,0
+3,1
+4,0
+4,1
+0
+3,1
+8,0
+2,1
+4,0
+2,1
+f,0
+2,1
+5,0
+2,1
+1f,0
+1
+24,0
+2,1
+4,0
+2,1
+17,0
+1
+45,0
+2,1
+2,0
+2,1
+18,0
+1
+62,0
+1
+2ed,0
+2,1
+8,0
+3,1
+8,0
+2,1
+4,0
+5,1
+9,0
+5,1
+7,0
+2,1
+4,0
+6,1
+23,0
+2,1
+7,0
+2,1
+0
+2,1
+6,0
+3,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+5,0
+3,1
+4,0
+2,1
+26,0
+2,1
+7,0
+2,1
+3,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+4,0
+4,1
+4,0
+2,1
+26,0
+2,1
+7,0
+2,1
+3,0
+2,1
+6,0
+2,1
+8,0
+2,1
+c,0
+2,1
+4,0
+1
+0
+2,1
+3,0
+6,1
+22,0
+2,1
+8,0
+2,1
+3,0
+2,1
+6,0
+2,1
+7,0
+2,1
+b,0
+3,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+13,0
+6,1
+8,0
+2,1
+8,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+e,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+13,0
+6,1
+7,0
+2,1
+9,0
+2,1
+3,0
+2,1
+6,0
+2,1
+5,0
+2,1
+f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+20,0
+2,1
+9,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+2,1
+b,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+b,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+c,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+c,0
+3,1
+8,0
+2,1
+3,0
+7,1
+8,0
+5,1
+7,0
+2,1
+4,0
+5,1
+400,0
+4,1
+3,0
+7,1
+3,0
+5,1
+b,0
+5,1
+d,0
+2,1
+a,0
+2,1
+22,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+3,0
+2,1
+9,0
+2,1
+3,0
+2,1
+b,0
+2,1
+c,0
+2,1
+20,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+9,0
+2,1
+3,0
+2,1
+a,0
+2,1
+e,0
+2,1
+1f,0
+2,1
+a,0
+2,1
+4,0
+2,1
+3,0
+2,1
+9,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+10,0
+2,1
+1e,0
+6,1
+6,0
+2,1
+5,0
+5,1
+a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+4,1
+7,0
+5,1
+6,0
+2,1
+1d,0
+2,1
+3,0
+2,1
+4,0
+2,1
+5,0
+2,1
+3,0
+2,1
+a,0
+6,1
+8,0
+2,1
+7,0
+5,1
+6,0
+2,1
+1d,0
+2,1
+3,0
+2,1
+4,0
+2,1
+5,0
+2,1
+3,0
+2,1
+e,0
+2,1
+9,0
+2,1
+10,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+9,0
+2,1
+3,0
+2,1
+a,0
+2,1
+5,0
+5,1
+4,0
+2,1
+1f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+9,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+4,0
+5,1
+3,0
+2,1
+21,0
+5,1
+4,0
+2,1
+7,0
+5,1
+b,0
+4,1
+4,0
+2,1
+2,0
+2,1
+4,0
+2,1
+a,0
+2,1
+51,0
+1
+63,0
+1
+62,0
+1
+2ea,0
+4,1
+5,0
+8,1
+6,0
+2,1
+4,0
+5,1
+5,0
+5,1
+2,0
+6,1
+4,0
+7,1
+0
+7,1
+3,0
+6,1
+13,0
+2,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+7,0
+2,1
+4,0
+2,1
+12,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+16,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+1
+2,0
+1
+3,0
+6,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+2,0
+6,1
+2,0
+6,1
+2,0
+2,1
+1b,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+7,0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+4,1
+14,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+3,0
+6,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+1a,0
+2,1
+2,0
+3,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+14,0
+2,1
+5,0
+2,1
+8,0
+1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+7,0
+2,1
+3,0
+3,1
+14,0
+2,1
+6,0
+9,1
+2,0
+2,1
+4,0
+2,1
+0
+6,1
+4,0
+5,1
+2,0
+6,1
+4,0
+7,1
+0
+2,1
+8,0
+4,1
+0
+2,1
+3f6,0
+100 90 32
+3ee,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+3,1
+5,0
+3,1
+5,0
+2,1
+4,0
+2,1
+3,0
+5,1
+3,0
+6,1
+15,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+3,1
+5,0
+3,1
+5,0
+3,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+14,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+5,0
+4,1
+3,0
+4,1
+5,0
+3,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+14,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+4,1
+5,0
+2,1
+5,0
+4,1
+3,0
+4,1
+5,0
+4,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+14,0
+8,1
+0
+2,1
+5,0
+2,1
+4,0
+3,1
+6,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+4,1
+2,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+14,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+4,1
+5,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+6,1
+15,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+19,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+4,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+19,0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+4,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+19,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+6,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+5,0
+2,1
+3,0
+3,1
+3,0
+5,1
+3,0
+2,1
+406,0
+5,1
+3,0
+7,1
+3,0
+5,1
+8,0
+8,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+8,0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+1
+a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+a,0
+2,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+8,0
+2,1
+4,0
+1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+1
+9,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+a,0
+2,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+9,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+c,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+4,1
+d,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+4,0
+4,1
+d,0
+2,1
+5,0
+2,1
+0
+7,1
+3,0
+5,1
+b,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+e,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+4,1
+a,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+b,0
+1
+0
+5,1
+0
+1
+6,0
+2,1
+e,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+a,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+1
+2,0
+1
+c,0
+4,1
+0
+4,1
+5,0
+4,1
+d,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+a,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+4,1
+c,0
+3,1
+3,0
+3,1
+4,0
+2,1
+2,0
+2,1
+d,0
+2,1
+2,0
+3,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+a,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+e,0
+2,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+d,0
+6,1
+2,0
+2,1
+4,0
+2,1
+2,0
+5,1
+b,0
+2,1
+6,0
+4,1
+6,0
+2,1
+e,0
+2,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+12,0
+2,1
+3d8,0
+8,1
+2,0
+5,1
+2,0
+2,1
+5,0
+5,1
+14,0
+2,1
+9,0
+2,1
+2c,0
+2,1
+2,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4,0
+2,1
+d,0
+2,1
+a,0
+2,1
+2b,0
+2,1
+3,0
+2,1
+6,0
+2,1
+7,0
+2,1
+3,0
+4,1
+5,0
+2,1
+5,0
+2,1
+a,0
+2,1
+2a,0
+2,1
+4,0
+2,1
+6,0
+2,1
+7,0
+2,1
+2,0
+6,1
+3,0
+2,1
+6,0
+3,1
+2,0
+4,1
+3,0
+6,1
+25,0
+2,1
+5,0
+2,1
+7,0
+2,1
+6,0
+2,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+8,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+24,0
+2,1
+5,0
+2,1
+7,0
+2,1
+6,0
+2,1
+4,0
+2,1
+4,0
+8,1
+9,0
+2,1
+2,0
+2,1
+3,0
+2,1
+23,0
+2,1
+6,0
+2,1
+8,0
+2,1
+5,0
+2,1
+4,0
+2,1
+5,0
+2,1
+b,0
+5,1
+2,0
+2,1
+3,0
+2,1
+22,0
+2,1
+7,0
+2,1
+8,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+21,0
+2,1
+8,0
+2,1
+9,0
+2,1
+4,0
+2,1
+4,0
+2,1
+11,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+21,0
+8,1
+2,0
+2,1
+9,0
+2,1
+4,0
+2,1
+18,0
+3,1
+0
+2,1
+0
+6,1
+2c,0
+2,1
+f,0
+2,1
+51,0
+2,1
+f,0
+2,1
+51,0
+5,1
+9,0
+5,1
+313,0
+2,1
+d,0
+3,1
+9,0
+2,1
+9,0
+2,1
+3,0
+2,1
+0
+2,1
+34,0
+2,1
+c,0
+2,1
+b,0
+2,1
+9,0
+2,1
+3,0
+2,1
+0
+2,1
+34,0
+2,1
+c,0
+2,1
+b,0
+2,1
+11,0
+2,1
+28,0
+5,1
+3,0
+6,1
+2,0
+5,1
+4,0
+5,1
+2,0
+6,1
+0
+6,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+23,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+24,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+4,1
+25,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+7,1
+4,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+4,1
+25,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+9,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+24,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+24,0
+5,1
+3,0
+6,1
+2,0
+5,1
+5,0
+2,1
+4,0
+6,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+47,0
+2,1
+11,0
+2,1
+4a,0
+2,1
+3,0
+2,1
+f,0
+3,1
+4c,0
+5,1
+2f5,0
+100 90 32
+3f0,0
+2,1
+62,0
+2,1
+45,0
+2,1
+1b,0
+2,1
+45,0
+2,1
+1b,0
+2,1
+0
+5,1
+0
+3,1
+2,0
+6,1
+8,0
+5,1
+2,0
+6,1
+3,0
+6,1
+7,0
+5,1
+2,0
+4,1
+2,0
+5,1
+19,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+4,0
+3,1
+5,0
+2,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+5,0
+4,1
+3,0
+2,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+7,0
+3,1
+2,0
+2,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1b,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+5,1
+2,0
+6,1
+3,0
+6,1
+7,0
+2,1
+5,0
+4,1
+4,0
+3,1
+3c,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+325,0
+3,1
+3,0
+2,1
+2,0
+3,1
+56,0
+2,1
+5,0
+2,1
+4,0
+2,1
+55,0
+2,1
+5,0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+3,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+6,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+3,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+0
+4,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+3,0
+3,1
+6,0
+2,1
+5,0
+3,1
+20,0
+2,1
+3,0
+2,1
+3,0
+1
+2,0
+1
+4,0
+4,1
+0
+4,1
+0
+4,1
+4,0
+1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+5,0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+3,0
+4,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+4,1
+2,0
+2,1
+7,0
+2,1
+5,0
+2,1
+4,0
+2,1
+23,0
+6,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+3,0
+6,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+47,0
+2,1
+c,0
+2,1
+5,0
+2,1
+4,0
+2,1
+44,0
+2,1
+0
+2,1
+c,0
+2,1
+5,0
+2,1
+4,0
+2,1
+45,0
+3,1
+e,0
+3,1
+3,0
+2,1
+2,0
+3,1
+2e5,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8b,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+4,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+6,1
+4,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+2,0
+2,1
+4,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+23,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+24,0
+4,1
+4,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+6,0
+4,1
+4,0
+4,1
+4,0
+4,1
+407,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+19,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+19,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+18,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+18,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+19,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+16,0
+4,1
+4,0
+4,1
+4,0
+4,1
+8,0
+4,1
+4,0
+4,1
+4,0
+4,1
+9,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3f6,0
+100 90 32
+3f5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+81,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+19,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1a,0
+4,1
+4,0
+4,1
+4,0
+4,1
+b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+2,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3fd,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+85,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+20,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+20,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1e,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+17,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+18,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+4,1
+4,0
+4,1
+4,0
+4,1
+8,0
+4,1
+4,0
+4,1
+4,0
+4,1
+405,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+15,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+79,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+15,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+14,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+14,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+15,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+11,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+12,0
+4,1
+4,0
+4,1
+4,0
+4,1
+a,0
+4,1
+4,0
+4,1
+4,0
+4,1
+b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3f0,0
+100 90 32
+3ed,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+87,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+22,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+22,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+20,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+81,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+19,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1a,0
+4,1
+4,0
+4,1
+4,0
+4,1
+6,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+4,1
+4,0
+4,1
+4,0
+4,1
+407,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+17,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+17,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+16,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+16,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+17,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+13,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+14,0
+4,1
+4,0
+4,1
+4,0
+4,1
+9,0
+4,1
+4,0
+4,1
+4,0
+4,1
+a,0
+4,1
+4,0
+4,1
+4,0
+4,1
+401,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+89,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+24,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+24,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+21,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+22,0
+4,1
+4,0
+4,1
+4,0
+4,1
+2,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3fe,0
+100 90 32
+3ef,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+83,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1c,0
+4,1
+4,0
+4,1
+4,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+6,0
+4,1
+4,0
+4,1
+4,0
+4,1
+409,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+19,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+19,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+18,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+18,0
+2,1
+6,0
+2,1
+6,0
+2,1
+a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+19,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+16,0
+4,1
+4,0
+4,1
+4,0
+4,1
+8,0
+4,1
+4,0
+4,1
+4,0
+4,1
+9,0
+4,1
+4,0
+4,1
+4,0
+4,1
+403,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+81,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+19,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1a,0
+4,1
+4,0
+4,1
+4,0
+4,1
+b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+2,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3fd,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+85,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+20,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+20,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1e,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+402,0
+100 90 32
+3f1,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+92,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+415,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+92,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+415,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+92,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+415,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+92,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+40c,0
+100 90 32
+3c1,0
+2,1
+15,0
+2,1
+3,0
+2,1
+39,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+3,1
+3,0
+2,1
+2,0
+2,1
+7,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+33,0
+2,1
+3,0
+2,1
+2,0
+4,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+5,0
+3,1
+6,0
+2,1
+38,0
+2,1
+2,0
+2,1
+3,0
+2,1
+54,0
+2,1
+2,0
+d,1
+a,0
+6,1
+e,0
+2,1
+33,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+a,0
+2,1
+3,0
+2,1
+e,0
+2,1
+33,0
+2,1
+7,0
+2,1
+3,0
+2,1
+f,0
+3,1
+e,0
+2,1
+32,0
+2,1
+7,0
+2,1
+3,0
+2,1
+f,0
+4,1
+e,0
+2,1
+31,0
+2,1
+7,0
+2,1
+3,0
+2,1
+a,0
+2,1
+0
+6,1
+a,0
+2,1
+2,0
+2,1
+31,0
+2,1
+7,0
+2,1
+3,0
+2,1
+a,0
+2,1
+0
+6,1
+a,0
+2,1
+2,0
+2,1
+31,0
+2,1
+7,0
+2,1
+3,0
+2,1
+b,0
+7,1
+c,0
+4,1
+b2,0
+2,1
+63,0
+2,1
+2ce,0
+2,1
+33,0
+2,1
+0
+3,1
+2,0
+3,1
+2,0
+2,1
+0
+3,1
+13,0
+5,1
+5,0
+2,1
+32,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+12,0
+5,1
+6,0
+1
+37,0
+2,1
+3,0
+2,1
+58,0
+2,1
+0
+a,1
+57,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3cc,0
+1
+4,0
+1
+5e,0
+6,1
+a,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+3,1
+13,0
+2,1
+0
+3,1
+2,0
+3,1
+29,0
+4,1
+b,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+37,0
+2,1
+3,0
+2,1
+6,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+37,0
+2,1
+0
+7,1
+0
+5,1
+11,0
+2,1
+0
+a,1
+36,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+1d,0
+8,1
+9,0
+8,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+1d,0
+8,1
+9,0
+8,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+37,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+37,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+37,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3d4,0
+3,1
+48,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+3,1
+3f,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+3f,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+4,0
+3,1
+48,0
+9,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+51,0
+2,1
+2,0
+2,1
+b,0
+2,1
+51,0
+2,1
+2,0
+2,1
+b,0
+2,1
+50,0
+9,1
+9,0
+2,1
+52,0
+2,1
+2,0
+2,1
+5f,0
+2,1
+2,0
+2,1
+9,0
+2,1
+53,0
+2,1
+2,0
+2,1
+9,0
+2,1
+d6,0
+2,1
+62,0
+2,1
+2c9,0
+100 90 32
+3b9,0
+1
+2b,0
+1
+35,0
+1
+0
+1
+0
+1
+6,0
+2,1
+2,0
+2,1
+4,0
+4,1
+7,0
+2,1
+3,0
+3,1
+4,0
+5,1
+34,0
+3,1
+6,0
+2,1
+4,0
+2,1
+3,0
+5,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+1
+2c,0
+2,1
+6,0
+3,1
+6,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+1
+2c,0
+2,1
+5,0
+1
+0
+1
+0
+1
+4,0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+1
+8,0
+2,1
+2,0
+3,1
+6,0
+1
+0
+1
+2c,0
+2,1
+7,0
+1
+6,0
+2,1
+6,0
+2,1
+3,0
+3,1
+9,0
+2,1
+9,0
+4,1
+29,0
+8,1
+b,0
+2,1
+6,0
+3,1
+0
+5,1
+8,0
+2,1
+8,0
+4,1
+2a,0
+8,1
+b,0
+2,1
+6,0
+5,1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+2e,0
+2,1
+e,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+1
+0
+1
+25,0
+2,1
+5,0
+2,1
+e,0
+2,1
+6,0
+6,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+1
+25,0
+2,1
+5,0
+2,1
+f,0
+2,1
+4,0
+5,1
+0
+4,1
+4,0
+3,1
+3,0
+2,1
+6,0
+5,1
+25,0
+1
+17,0
+2,1
+4,0
+2,1
+1c,0
+1
+27,0
+1
+18,0
+2,1
+2,0
+2,1
+46,0
+1
+30f,0
+6,1
+4,0
+2,1
+7,0
+5,1
+3,0
+5,1
+4,0
+2,1
+8,0
+3,1
+4,0
+2,1
+31,0
+2,1
+4,0
+3,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+3,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+31,0
+2,1
+4,0
+4,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2d,0
+6,1
+3,0
+2,1
+0
+1
+4,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+5,0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+2,1
+4,0
+2,1
+2b,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+4,0
+2,1
+8,0
+6,1
+1d,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+9,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+5,0
+2,1
+7,0
+6,1
+1d,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2a,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+7,0
+2,1
+2,0
+2,1
+26,0
+5,1
+4,0
+2,1
+7,0
+5,1
+2,0
+7,1
+3,0
+2,1
+8,0
+3,1
+8,0
+2,1
+2,0
+2,1
+421,0
+2,1
+a,0
+2,1
+b,0
+5,1
+0
+5,1
+3,0
+7,1
+3,0
+4,1
+2e,0
+2,1
+c,0
+2,1
+9,0
+2,1
+3,0
+3,1
+3,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2c,0
+2,1
+e,0
+2,1
+8,0
+2,1
+3,0
+3,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2a,0
+2,1
+10,0
+3,1
+2,0
+2,1
+2,0
+2,1
+3,0
+3,1
+3,0
+2,1
+4,0
+2,1
+a,0
+2,1
+29,0
+2,1
+6,0
+5,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+7,1
+5,0
+2,1
+6,0
+6,1
+29,0
+2,1
+6,0
+5,1
+7,0
+2,1
+6,0
+8,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2a,0
+2,1
+10,0
+2,1
+7,0
+2,1
+4,0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2b,0
+2,1
+4,0
+5,1
+5,0
+2,1
+8,0
+2,1
+3,0
+3,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2c,0
+2,1
+3,0
+5,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+3,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2d,0
+2,1
+a,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+4,1
+0
+5,1
+7,0
+2,1
+4,0
+5,1
+3e,0
+1
+63,0
+1
+64,0
+1
+305,0
+6,1
+3,0
+7,1
+0
+9,1
+2,0
+5,1
+5,0
+5,1
+6,0
+8,1
+5,0
+4,1
+21,0
+2,1
+4,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+4,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+20,0
+2,1
+5,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+4,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+0
+4,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+4,1
+7,0
+2,1
+2,0
+2,1
+0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2b,0
+2,1
+2,0
+6,1
+2,0
+8,1
+7,0
+2,1
+2,0
+7,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+23,0
+4,1
+3,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+4,1
+7,0
+2,1
+0
+2,1
+0
+6,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+22,0
+2,1
+5,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+6,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+22,0
+2,1
+5,0
+2,1
+6,0
+2,1
+2,0
+2,1
+2,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+6,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+28,0
+3,1
+3,0
+2,1
+7,0
+2,1
+3,0
+2,1
+0
+4,1
+0
+2,1
+3,0
+2,1
+2,0
+4,1
+0
+2,1
+0
+2,1
+0
+1
+8,0
+2,1
+5,0
+2,1
+22,0
+2,1
+0
+4,1
+8,0
+2,1
+0
+9,1
+2,0
+5,1
+4,0
+6,1
+0
+2,1
+2,0
+9,1
+6,0
+2,1
+3ea,0
+100 90 32
+3fd,0
+6,1
+3,0
+5,1
+3,0
+2,1
+4,0
+2,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+3,1
+0
+3,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+4,1
+3,0
+4,1
+5,0
+2,1
+5,0
+4,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1a,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+3,1
+2,0
+2,1
+5,0
+2,1
+0
+8,1
+1b,0
+6,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+4,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1f,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1f,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+1f,0
+2,1
+3,0
+5,1
+3,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+0
+6,1
+0
+2,1
+4,0
+2,1
+3,0
+4,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+3ff,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+d,1
+3,0
+7,1
+3,0
+5,1
+16,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+16,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+3,1
+2,0
+3,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+15,0
+2,1
+2,0
+2,1
+4,0
+4,1
+4,0
+2,1
+2,0
+3,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+16,0
+4,1
+6,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+5,1
+3,0
+7,1
+0
+2,1
+5,0
+2,1
+17,0
+2,1
+7,0
+2,1
+6,0
+1
+0
+5,1
+0
+1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+4,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+17,0
+2,1
+6,0
+4,1
+5,0
+4,1
+0
+4,1
+2,0
+1
+2,0
+1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+17,0
+2,1
+5,0
+2,1
+2,0
+2,1
+4,0
+3,1
+3,0
+3,1
+2,0
+4,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+17,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+18,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+4,0
+2,1
+6,0
+4,1
+6,0
+2,1
+3,0
+5,1
+2,0
+2,1
+4,0
+2,1
+2,0
+6,1
+5d,0
+2,1
+3be,0
+2,1
+9,0
+2,1
+e,0
+5,1
+0
+2,1
+2,0
+5,1
+2,0
+8,1
+30,0
+2,1
+a,0
+2,1
+7,0
+2,1
+4,0
+2,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+36,0
+2,1
+a,0
+3,1
+5,0
+4,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+31,0
+6,1
+3,0
+4,1
+2,0
+5,1
+3,0
+6,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+9,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2e,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+8,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+7,0
+2,1
+5,0
+2,1
+2e,0
+2,1
+3,0
+2,1
+2,0
+5,1
+5,0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+8,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+2,1
+0
+2,1
+8,0
+2,1
+7,0
+2,1
+2c,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+b,0
+2,1
+4,0
+4,1
+9,0
+2,1
+8,0
+2,1
+2c,0
+6,1
+0
+2,1
+0
+3,1
+12,0
+4,1
+9,0
+2,1
+2,0
+8,1
+4b,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+5,1
+5,0
+5,1
+2f2,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+9,0
+3,1
+d,0
+2,1
+36,0
+2,1
+0
+2,1
+3,0
+2,1
+7,0
+2,1
+b,0
+2,1
+c,0
+2,1
+36,0
+2,1
+f,0
+2,1
+b,0
+2,1
+c,0
+2,1
+32,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+6,1
+0
+6,1
+2,0
+5,1
+4,0
+5,1
+2,0
+6,1
+3,0
+3,1
+29,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2c,0
+4,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2f,0
+4,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+4,0
+7,1
+0
+2,1
+3,0
+2,1
+2e,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+9,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2a,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+29,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+6,1
+4,0
+2,1
+5,0
+5,1
+2,0
+6,1
+3,0
+3,1
+2f,0
+2,1
+f,0
+2,1
+52,0
+3,1
+d,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+2da,0
+100 90 32
+446,0
+2,1
+29,0
+2,1
+37,0
+2,1
+29,0
+2,1
+37,0
+2,1
+27,0
+5,1
+2,0
+4,1
+2,0
+a,1
+3,0
+6,1
+2,0
+5,1
+2,0
+6,1
+2,0
+3,1
+0
+5,1
+0
+2,1
+29,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+29,0
+2,1
+5,0
+3,1
+4,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+29,0
+2,1
+3,0
+4,1
+5,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+29,0
+2,1
+2,0
+3,1
+7,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+29,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+3,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+27,0
+3,1
+4,0
+4,1
+5,0
+7,1
+3,0
+6,1
+2,0
+5,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+38,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+305,0
+3,1
+2,0
+2,1
+3,0
+3,1
+56,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+7,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+3,1
+2,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+28,0
+2,1
+4,0
+2,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+3,1
+2,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+28,0
+2,1
+4,0
+2,1
+5,0
+4,1
+4,0
+2,1
+2,0
+2,1
+3,0
+5,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+26,0
+3,1
+5,0
+2,1
+6,0
+4,1
+4,0
+2,1
+0
+2,1
+4,0
+4,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+28,0
+2,1
+4,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+1
+4,0
+7,1
+0
+4,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+4,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+4,1
+3,0
+2,1
+2,0
+3,1
+3,0
+2,1
+5,0
+4,1
+3,0
+2,1
+3,0
+2,1
+28,0
+2,1
+4,0
+2,1
+5,0
+7,1
+3,0
+2,1
+4,0
+2,1
+2,0
+3,1
+3,0
+2,1
+6,0
+2,1
+4,0
+6,1
+29,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4b,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+0
+2,1
+49,0
+3,1
+2,0
+2,1
+3,0
+3,1
+a,0
+3,1
+302,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+2f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+93,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+2f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+4,0
+2,1
+2,0
+2,1
+26,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+4,0
+6,1
+26,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+4,0
+2,1
+2,0
+1
+22,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2c,0
+4,1
+4,0
+4,1
+4,0
+4,1
+6,0
+4,1
+4,0
+4,1
+4,0
+5,1
+4,0
+4,1
+40d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+87,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+24,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+24,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+20,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3ef,0
+100 90 32
+40c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+25,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+4,1
+4,0
+4,1
+4,0
+8,1
+4,0
+4,1
+4,0
+4,1
+0
+4,1
+4,0
+4,1
+4,0
+4,1
+419,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+2f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+93,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+2f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+30,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+30,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2c,0
+4,1
+4,0
+4,1
+4,0
+5,1
+4,0
+4,1
+4,0
+6,1
+4,0
+4,1
+4,0
+4,1
+401,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+85,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+22,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+22,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1e,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+411,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+28,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+28,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+23,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+24,0
+4,1
+4,0
+4,1
+4,0
+4,1
+0
+4,1
+4,0
+4,1
+4,0
+4,1
+2,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3ed,0
+100 90 32
+412,0
+2,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+91,0
+2,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2d,0
+2,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2e,0
+2,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+29,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2a,0
+4,1
+4,0
+4,1
+4,0
+6,1
+4,0
+4,1
+4,0
+7,1
+4,0
+4,1
+4,0
+4,1
+409,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+83,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+20,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+1
+21,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+23,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+20,0
+4,1
+4,0
+4,1
+4,0
+4,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+6,0
+4,1
+4,0
+4,1
+4,0
+3,1
+406,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+89,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+26,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+21,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+21,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+22,0
+4,1
+4,0
+4,1
+4,0
+4,1
+2,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3,0
+4,1
+4,0
+4,1
+4,0
+4,1
+415,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8f,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2c,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+27,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+28,0
+4,1
+4,0
+4,1
+4,0
+7,1
+4,0
+4,1
+4,0
+8,1
+4,0
+4,1
+4,0
+4,1
+3eb,0
+100 90 32
+40e,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+2,1
+8b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+2,1
+27,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+2,1
+28,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+2,1
+28,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+1
+24,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+1
+24,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+1
+25,0
+4,1
+4,0
+4,1
+4,0
+4,1
+6,0
+4,1
+4,0
+4,1
+4,0
+5,1
+4,0
+4,1
+4,0
+4,1
+403,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+87,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+23,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+24,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+24,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+1f,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+20,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+4,0
+4,1
+413,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8d,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+29,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+25,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+25,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+26,0
+4,1
+4,0
+4,1
+4,0
+8,1
+4,0
+4,1
+4,0
+4,1
+0
+4,1
+4,0
+4,1
+4,0
+4,1
+419,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+2f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+93,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+2f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+30,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+30,0
+2,1
+6,0
+2,1
+6,0
+3,1
+6,0
+2,1
+6,0
+4,1
+6,0
+2,1
+6,0
+2,1
+2b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2b,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+8,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2c,0
+4,1
+4,0
+4,1
+4,0
+5,1
+4,0
+4,1
+4,0
+6,1
+4,0
+4,1
+4,0
+4,1
+3e9,0
+100 90 32
+417,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9c,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+35,0
+4,1
+4,0
+4,1
+4,0
+5,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+41f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9c,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+35,0
+4,1
+4,0
+4,1
+4,0
+5,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+41f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9c,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+35,0
+4,1
+4,0
+4,1
+4,0
+5,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+41f,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+9c,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+38,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+39,0
+2,1
+6,0
+2,1
+6,0
+3,1
+7,0
+2,1
+6,0
+2,1
+6,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+34,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+35,0
+4,1
+4,0
+4,1
+4,0
+5,1
+5,0
+4,1
+4,0
+4,1
+4,0
+4,1
+3f0,0
+100 90 32
+7,0
+1
+8,0
+2,1
+2,0
+3,1
+9,0
+1
+5,0
+1
+b,0
+1
+0
+2,1
+9,0
+1
+6,0
+1
+b,0
+1
+0
+2,1
+9,0
+1
+b,0
+1
+9,0
+2,1
+0
+2,1
+a,0
+1
+3,0
+e,1
+0
+1
+0
+e,1
+0
+e,1
+0
+1
+0
+e,1
+5,0
+e,1
+0
+1
+0
+e,1
+3,0
+1
+a,0
+2,1
+0
+2,1
+9,0
+1
+6,0
+1
+a,0
+2,1
+0
+2,1
+9,0
+1
+b,0
+1
+9,0
+2,1
+0
+1
+b,0
+1
+5,0
+1
+9,0
+3,1
+2,0
+2,1
+8,0
+1
+6,0
+1
+9,0
+3,1
+2,0
+2,1
+8,0
+1
+b,0
+1
+8,0
+2,1
+3,0
+1
+a,0
+1
+5,0
+1
+8,0
+3,1
+4,0
+2,1
+7,0
+1
+6,0
+1
+8,0
+3,1
+4,0
+2,1
+7,0
+1
+b,0
+1
+7,0
+2,1
+5,0
+1
+9,0
+1
+5,0
+1
+7,0
+3,1
+0
+3,1
+2,0
+2,1
+6,0
+1
+6,0
+1
+7,0
+3,1
+0
+3,1
+2,0
+2,1
+6,0
+1
+b,0
+1
+6,0
+2,1
+2,0
+3,1
+2,0
+1
+8,0
+1
+c,0
+3,1
+2,0
+3,1
+3,0
+2,1
+13,0
+3,1
+2,0
+3,1
+3,0
+2,1
+17,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+3,1
+3,0
+3,1
+4,0
+2,1
+11,0
+3,1
+3,0
+3,1
+4,0
+2,1
+15,0
+2,1
+4,0
+3,1
+4,0
+1
+11,0
+3,1
+4,0
+3,1
+5,0
+2,1
+f,0
+3,1
+4,0
+3,1
+5,0
+2,1
+13,0
+2,1
+5,0
+3,1
+5,0
+1
+f,0
+3,1
+5,0
+3,1
+6,0
+2,1
+d,0
+3,1
+5,0
+3,1
+6,0
+2,1
+11,0
+2,1
+6,0
+3,1
+6,0
+1
+d,0
+3,1
+6,0
+3,1
+7,0
+2,1
+b,0
+3,1
+6,0
+3,1
+7,0
+2,1
+f,0
+2,1
+7,0
+3,1
+7,0
+1
+b,0
+3,1
+7,0
+3,1
+8,0
+2,1
+9,0
+3,1
+7,0
+3,1
+8,0
+2,1
+d,0
+2,1
+8,0
+3,1
+8,0
+1
+9,0
+3,1
+8,0
+3,1
+9,0
+2,1
+7,0
+3,1
+8,0
+3,1
+9,0
+2,1
+b,0
+2,1
+9,0
+3,1
+9,0
+1
+7,0
+3,1
+9,0
+3,1
+a,0
+2,1
+5,0
+3,1
+9,0
+3,1
+a,0
+2,1
+9,0
+2,1
+a,0
+3,1
+a,0
+1
+5,0
+3,1
+a,0
+3,1
+b,0
+2,1
+3,0
+3,1
+a,0
+3,1
+b,0
+2,1
+7,0
+2,1
+b,0
+3,1
+c,0
+1
+2,0
+3,1
+b,0
+3,1
+c,0
+2,1
+0
+3,1
+b,0
+3,1
+c,0
+2,1
+5,0
+2,1
+c,0
+3,1
+c,0
+1
+2,0
+2,1
+9,0
+9,1
+a,0
+1
+0
+2,1
+9,0
+9,1
+a,0
+1
+1c85,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+3c5,0
+2,1
+13,0
+2,1
+3,0
+2,1
+33,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+3,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+2d,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+5,0
+3,1
+6,0
+2,1
+32,0
+2,1
+2,0
+2,1
+3,0
+2,1
+54,0
+2,1
+2,0
+d,1
+12,0
+5,1
+d,0
+2,1
+2d,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+12,0
+2,1
+0
+4,1
+c,0
+2,1
+2d,0
+2,1
+7,0
+2,1
+3,0
+2,1
+16,0
+3,1
+d,0
+2,1
+2c,0
+2,1
+7,0
+2,1
+3,0
+2,1
+17,0
+2,1
+e,0
+1
+2c,0
+2,1
+7,0
+2,1
+3,0
+2,1
+12,0
+3,1
+2,0
+2,1
+a,0
+2,1
+2,0
+1
+2c,0
+2,1
+7,0
+2,1
+3,0
+2,1
+12,0
+3,1
+2,0
+2,1
+a,0
+2,1
+2,0
+1
+2c,0
+2,1
+7,0
+2,1
+3,0
+2,1
+13,0
+5,1
+c,0
+4,1
+b4,0
+2,1
+63,0
+2,1
+2c2,0
+2,1
+37,0
+2,1
+0
+3,1
+2,0
+3,1
+2,0
+2,1
+0
+3,1
+11,0
+5,1
+3,0
+2,1
+36,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+10,0
+5,1
+4,0
+2,1
+3a,0
+2,1
+3,0
+2,1
+58,0
+2,1
+0
+a,1
+57,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3d4,0
+1
+4,0
+1
+5e,0
+6,1
+a,0
+2,1
+0
+5,1
+0
+3,1
+13,0
+2,1
+0
+3,1
+2,0
+3,1
+2b,0
+4,1
+b,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+39,0
+2,1
+3,0
+2,1
+4,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+39,0
+2,1
+0
+5,1
+0
+5,1
+11,0
+2,1
+0
+a,1
+38,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+21,0
+8,1
+7,0
+8,1
+0
+2,1
+3,0
+3,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+21,0
+8,1
+7,0
+8,1
+0
+2,1
+3,0
+3,1
+3,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+39,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+39,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+39,0
+2,1
+3,0
+3,1
+3,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3d6,0
+3,1
+4a,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+3,1
+41,0
+2,1
+2,0
+2,1
+6,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+41,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+3,1
+4a,0
+9,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+51,0
+2,1
+2,0
+2,1
+b,0
+2,1
+51,0
+2,1
+2,0
+2,1
+b,0
+2,1
+50,0
+9,1
+9,0
+2,1
+52,0
+2,1
+2,0
+2,1
+5f,0
+2,1
+2,0
+2,1
+9,0
+2,1
+53,0
+2,1
+2,0
+2,1
+9,0
+2,1
+d2,0
+2,1
+62,0
+2,1
+2c7,0
+100 90 32
+3ab,0
+1
+31,0
+1
+2f,0
+1
+0
+1
+0
+1
+4,0
+2,1
+2,0
+2,1
+4,0
+3,1
+6,0
+3,1
+7,0
+2,1
+3,0
+3,1
+4,0
+5,1
+2e,0
+3,1
+4,0
+2,1
+4,0
+2,1
+3,0
+3,1
+5,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+25,0
+2,1
+6,0
+3,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+6,0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+25,0
+2,1
+5,0
+1
+0
+1
+0
+1
+2,0
+2,1
+6,0
+2,1
+2,0
+2,1
+7,0
+1
+0
+1
+8,0
+2,1
+2,0
+3,1
+6,0
+1
+0
+2,1
+25,0
+2,1
+7,0
+1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+6,0
+3,1
+9,0
+2,1
+9,0
+5,1
+22,0
+8,1
+9,0
+2,1
+6,0
+2,1
+7,0
+2,1
+0
+5,1
+8,0
+2,1
+8,0
+4,1
+24,0
+8,1
+9,0
+2,1
+6,0
+2,1
+8,0
+3,1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+28,0
+2,1
+c,0
+2,1
+6,0
+2,1
+9,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+1
+0
+2,1
+1e,0
+2,1
+5,0
+2,1
+c,0
+2,1
+6,0
+2,1
+8,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+1e,0
+2,1
+5,0
+2,1
+d,0
+2,1
+4,0
+2,1
+8,0
+3,1
+0
+4,1
+4,0
+3,1
+3,0
+2,1
+6,0
+5,1
+1f,0
+1
+15,0
+2,1
+4,0
+2,1
+24,0
+1
+21,0
+1
+16,0
+2,1
+2,0
+2,1
+48,0
+1
+323,0
+6,1
+4,0
+2,1
+7,0
+5,1
+0
+5,1
+4,0
+2,1
+8,0
+3,1
+2,0
+2,1
+35,0
+2,1
+4,0
+3,1
+5,0
+2,1
+3,0
+3,1
+3,0
+2,1
+3,0
+3,1
+6,0
+2,1
+0
+2,1
+0
+2,1
+35,0
+2,1
+4,0
+4,1
+4,0
+2,1
+3,0
+3,1
+3,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+31,0
+6,1
+3,0
+2,1
+0
+1
+4,0
+2,1
+4,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+30,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+3,0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2f,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+6,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+8,0
+6,1
+21,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+7,0
+6,1
+21,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+4,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+5,0
+2,1
+2,0
+2,1
+2a,0
+5,1
+4,0
+2,1
+7,0
+c,1
+3,0
+2,1
+8,0
+3,1
+6,0
+2,1
+2,0
+2,1
+425,0
+2,1
+a,0
+2,1
+9,0
+9,1
+3,0
+7,1
+3,0
+4,1
+32,0
+2,1
+c,0
+2,1
+7,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+30,0
+2,1
+e,0
+2,1
+6,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+f,0
+3,1
+0
+2,1
+2,0
+2,1
+2,0
+3,1
+2,0
+2,1
+4,0
+2,1
+a,0
+2,1
+2d,0
+2,1
+6,0
+5,1
+5,0
+6,1
+2,0
+2,1
+3,0
+5,1
+5,0
+2,1
+6,0
+6,1
+2d,0
+2,1
+6,0
+5,1
+7,0
+2,1
+4,0
+6,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2e,0
+2,1
+10,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2f,0
+2,1
+4,0
+5,1
+5,0
+2,1
+6,0
+2,1
+2,0
+3,1
+2,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+30,0
+2,1
+3,0
+5,1
+4,0
+3,1
+2,0
+2,1
+3,0
+2,1
+0
+3,1
+2,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+31,0
+2,1
+a,0
+4,1
+2,0
+2,1
+4,0
+8,1
+7,0
+2,1
+4,0
+5,1
+40,0
+1
+63,0
+1
+64,0
+1
+2f3,0
+6,1
+3,0
+7,1
+0
+7,1
+4,0
+6,1
+2,0
+5,1
+5,0
+5,1
+6,0
+2,1
+6,0
+8,1
+5,0
+3,1
+12,0
+2,1
+4,0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+6,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+14,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+4,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+1b,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+1b,0
+2,1
+2,0
+6,1
+2,0
+6,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+2,0
+6,1
+5,0
+1
+2,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+13,0
+4,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+12,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+6,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+12,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+4,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+18,0
+3,1
+3,0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+4,0
+2,1
+0
+1
+8,0
+2,1
+5,0
+2,1
+12,0
+2,1
+0
+4,1
+8,0
+2,1
+0
+7,1
+4,0
+6,1
+2,0
+5,1
+4,0
+6,1
+3,0
+2,1
+4,0
+2,1
+2,0
+9,1
+6,0
+2,1
+3e8,0
+100 90 32
+403,0
+6,1
+3,0
+5,1
+3,0
+2,1
+4,0
+4,1
+5,0
+3,1
+5,0
+2,1
+2,0
+2,1
+3,0
+4,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+5,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+4,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+6,1
+3,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+4,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+7,1
+3,0
+4,1
+5,0
+2,1
+5,0
+6,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+1e,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+5,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+5,1
+5,0
+2,1
+0
+8,1
+1f,0
+6,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+6,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+2,1
+0
+3,1
+0
+2,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+4,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+4,1
+2,0
+3,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+3,1
+2,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+4,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+2,1
+3,0
+5,1
+3,0
+3,1
+3,0
+3,1
+3,0
+1
+3,0
+2,1
+0
+6,1
+0
+2,1
+4,0
+2,1
+0
+4,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+403,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+b,1
+3,0
+7,1
+3,0
+5,1
+1a,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+1
+2,0
+4,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+4,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+2,1
+1a,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+4,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+19,0
+2,1
+2,0
+2,1
+4,0
+4,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+1a,0
+4,1
+6,0
+2,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+0
+5,1
+3,0
+7,1
+0
+2,1
+5,0
+2,1
+1b,0
+2,1
+7,0
+2,1
+6,0
+1
+0
+5,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+6,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+1b,0
+2,1
+6,0
+4,1
+5,0
+4,1
+0
+5,1
+2,0
+1
+3,0
+2,1
+4,0
+2,1
+4,0
+4,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+1b,0
+2,1
+5,0
+2,1
+2,0
+2,1
+4,0
+3,1
+3,0
+7,1
+3,0
+2,1
+4,0
+2,1
+4,0
+4,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+1b,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+5,0
+4,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+1c,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+6,0
+4,1
+6,0
+2,1
+0
+5,1
+2,0
+2,1
+4,0
+2,1
+2,0
+6,1
+5d,0
+2,1
+3b8,0
+2,1
+9,0
+2,1
+16,0
+6,1
+2,0
+5,1
+2,0
+6,1
+2c,0
+2,1
+a,0
+2,1
+f,0
+2,1
+4,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+30,0
+2,1
+a,0
+2,1
+7,0
+2,1
+5,0
+4,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+2b,0
+6,1
+3,0
+4,1
+2,0
+3,1
+8,0
+2,1
+3,0
+6,1
+2,0
+2,1
+0
+2,1
+6,0
+2,1
+4,0
+2,1
+29,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+3,1
+3,0
+8,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+4,1
+7,0
+2,1
+5,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+8,1
+4,0
+2,1
+4,0
+4,1
+7,0
+2,1
+5,0
+2,1
+28,0
+2,1
+3,0
+2,1
+2,0
+5,1
+d,0
+2,1
+5,0
+2,1
+4,0
+3,1
+8,0
+2,1
+6,0
+2,1
+27,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+b,0
+2,1
+6,0
+2,1
+4,0
+3,1
+8,0
+2,1
+7,0
+1
+27,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+13,0
+2,1
+4,0
+2,1
+9,0
+2,1
+30,0
+6,1
+0
+2,1
+0
+3,1
+1a,0
+2,1
+9,0
+2,1
+2,0
+6,1
+4f,0
+2,1
+9,0
+2,1
+57,0
+2,1
+9,0
+2,1
+57,0
+5,1
+3,0
+5,1
+2ec,0
+2,1
+0
+2,1
+3,0
+2,1
+5,0
+2,1
+9,0
+3,1
+b,0
+2,1
+3a,0
+2,1
+0
+2,1
+3,0
+2,1
+5,0
+2,1
+b,0
+2,1
+a,0
+2,1
+3a,0
+2,1
+d,0
+2,1
+b,0
+2,1
+a,0
+2,1
+36,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+6,1
+0
+6,1
+2,0
+5,1
+2,0
+5,1
+2,0
+6,1
+3,0
+5,1
+2b,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2b,0
+4,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+2b,0
+4,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+7,1
+0
+2,1
+3,0
+2,1
+6,0
+2,1
+2a,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+29,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+28,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+6,1
+4,0
+2,1
+3,0
+5,1
+2,0
+6,1
+3,0
+5,1
+31,0
+2,1
+d,0
+2,1
+54,0
+3,1
+b,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+2e0,0
+100 90 32
+448,0
+2,1
+2d,0
+2,1
+33,0
+2,1
+2d,0
+2,1
+33,0
+2,1
+2b,0
+5,1
+2,0
+4,1
+2,0
+8,1
+3,0
+6,1
+2,0
+b,1
+2,0
+3,1
+0
+5,1
+0
+2,1
+2d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+5,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2d,0
+2,1
+5,0
+3,1
+3,0
+3,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2d,0
+2,1
+3,0
+4,1
+4,0
+3,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2d,0
+2,1
+2,0
+3,1
+6,0
+3,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2d,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+3,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2b,0
+3,1
+4,0
+4,1
+4,0
+6,1
+3,0
+6,1
+2,0
+6,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+3a,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+55,0
+2,1
+b,0
+2,1
+307,0
+3,1
+2,0
+2,1
+3,0
+3,1
+56,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+4,0
+6,1
+0
+2,1
+3,0
+2,1
+0
+3,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+2d,0
+2,1
+4,0
+2,1
+4,0
+3,1
+4,0
+2,1
+3,0
+2,1
+0
+3,1
+0
+3,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+1
+2d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+7,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+1
+2b,0
+3,1
+5,0
+2,1
+6,0
+3,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+1
+2d,0
+2,1
+4,0
+2,1
+5,0
+4,1
+3,0
+2,1
+0
+1
+4,0
+5,1
+0
+4,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+3,0
+1
+2d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+4,1
+3,0
+2,1
+0
+3,1
+2,0
+2,1
+5,0
+4,1
+3,0
+2,1
+3,0
+1
+2d,0
+2,1
+4,0
+2,1
+4,0
+6,1
+3,0
+2,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+6,0
+2,1
+4,0
+6,1
+2d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+2,1
+4d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+2,1
+0
+2,1
+4b,0
+3,1
+2,0
+2,1
+3,0
+3,1
+8,0
+3,1
+2a3,0
+2,1
+1f,0
+3,1
+2f,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+2,0
+2,1
+c,0
+4,1
+3,0
+2,1
+0
+2,1
+2e,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+2d,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+19,0
+2,1
+2,0
+2,1
+35,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+13,0
+2,1
+8,0
+2,1
+35,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+12,0
+2,1
+8,0
+2,1
+b,0
+2,1
+2,0
+2,1
+25,0
+2,1
+7,0
+2,1
+3,0
+2,1
+1b,0
+2,1
+d,0
+6,1
+24,0
+2,1
+5,0
+a,1
+10,0
+5,1
+5,0
+2,1
+e,0
+2,1
+2,0
+2,1
+2c,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+3d,0
+2,1
+7,0
+2,1
+3,0
+2,1
+10,0
+2,1
+3,0
+2,1
+4,0
+2,1
+37,0
+2,1
+5,0
+3,1
+2,0
+3,1
+16,0
+2,1
+4,0
+2,1
+5c,0
+2,1
+5d,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+2d7,0
+2,1
+39,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+e,0
+5,1
+0
+2,1
+3a,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+3,1
+f,0
+7,1
+3b,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+0
+a,1
+5c,0
+2,1
+3,0
+2,1
+58,0
+2,1
+3,0
+2,1
+3,0
+2,1
+58,0
+2,1
+0
+3,1
+2,0
+3,1
+40d,0
+100 90 32
+3af,0
+4,1
+5f,0
+6,1
+a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2b,0
+1
+4,0
+1
+a,0
+2,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3b,0
+2,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3b,0
+2,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3b,0
+2,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+25,0
+8,1
+5,0
+8,1
+0
+2,1
+2,0
+3,1
+2,0
+2,1
+0
+10,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+25,0
+8,1
+5,0
+8,1
+0
+2,1
+0
+19,1
+0
+2,1
+0
+a,1
+3a,0
+2,1
+3,0
+2,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3b,0
+2,1
+2,0
+3,1
+2,0
+2,1
+12,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3b,0
+2,1
+0
+3,1
+0
+3,1
+13,0
+2,1
+0
+3,1
+2,0
+3,1
+3cf,0
+3,1
+46,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+9,0
+2,1
+0
+2,1
+3,0
+3,1
+0
+2,1
+3c,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+9,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+3,1
+3c,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+e,0
+3,1
+43,0
+9,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+51,0
+2,1
+2,0
+2,1
+b,0
+2,1
+51,0
+2,1
+2,0
+2,1
+b,0
+2,1
+4f,0
+9,1
+a,0
+2,1
+50,0
+2,1
+2,0
+2,1
+c,0
+2,1
+4f,0
+2,1
+2,0
+2,1
+d,0
+2,1
+4f,0
+2,1
+2,0
+2,1
+d,0
+2,1
+e2,0
+2,1
+62,0
+2,1
+28e,0
+1
+2d,0
+1
+33,0
+1
+0
+1
+0
+1
+2,0
+2,1
+2,0
+2,1
+5,0
+5,1
+0
+4,1
+4,0
+3,1
+3,0
+2,1
+6,0
+5,1
+32,0
+3,1
+2,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+1
+0
+2,1
+29,0
+2,1
+6,0
+3,1
+2,0
+2,1
+4,0
+2,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+6,0
+2,1
+0
+1
+0
+2,1
+29,0
+2,1
+5,0
+1
+0
+1
+0
+3,1
+6,0
+2,1
+2,0
+3,1
+0
+3,1
+3,0
+2,1
+3,0
+3,1
+2,0
+2,1
+6,0
+2,1
+0
+1
+2c,0
+2,1
+7,0
+1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+0
+5,1
+8,0
+2,1
+8,0
+4,1
+28,0
+8,1
+7,0
+2,1
+6,0
+2,1
+9,0
+3,1
+9,0
+2,1
+9,0
+5,1
+26,0
+8,1
+7,0
+2,1
+6,0
+2,1
+9,0
+1
+0
+1
+8,0
+2,1
+2,0
+3,1
+6,0
+1
+0
+2,1
+29,0
+2,1
+a,0
+2,1
+6,0
+2,1
+8,0
+2,1
+0
+2,1
+7,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+23,0
+1
+5,0
+2,1
+a,0
+2,1
+6,0
+2,1
+8,0
+2,1
+0
+2,1
+6,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+0
+2,1
+22,0
+1
+6,0
+2,1
+b,0
+2,1
+4,0
+2,1
+a,0
+3,1
+7,0
+2,1
+3,0
+3,1
+4,0
+5,1
+23,0
+1
+13,0
+2,1
+4,0
+2,1
+22,0
+1
+25,0
+2,1
+13,0
+2,1
+2,0
+2,1
+49,0
+2,1
+324,0
+5,1
+4,0
+2,1
+7,0
+a,1
+3,0
+2,1
+8,0
+3,1
+4,0
+2,1
+31,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+31,0
+2,1
+3,0
+2,1
+2,0
+7,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+32,0
+2,1
+8,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+32,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+4,1
+33,0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+3,1
+0
+2,1
+7,0
+2,1
+6,0
+2,1
+3,0
+4,1
+8,0
+6,1
+26,0
+6,1
+3,0
+2,1
+0
+1
+4,0
+2,1
+2,0
+2,1
+8,0
+2,1
+6,0
+2,1
+3,0
+3,1
+9,0
+6,1
+29,0
+2,1
+4,0
+4,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+5,1
+3,0
+2,1
+3,0
+3,1
+38,0
+2,1
+4,0
+3,1
+5,0
+2,1
+2,0
+3,1
+2,0
+2,1
+3,0
+3,1
+6,0
+2,1
+0
+3,1
+6,0
+2,1
+2d,0
+6,1
+4,0
+2,1
+7,0
+9,1
+4,0
+2,1
+8,0
+5,1
+6,0
+2,1
+3f3,0
+100 90 32
+414,0
+2,1
+a,0
+2,1
+12,0
+6,1
+7,0
+2,1
+4,0
+5,1
+2b,0
+2,1
+c,0
+2,1
+10,0
+3,1
+0
+4,1
+6,0
+2,1
+3,0
+2,1
+3,0
+1
+2a,0
+2,1
+e,0
+2,1
+e,0
+4,1
+0
+4,1
+6,0
+2,1
+3,0
+2,1
+3,0
+1
+29,0
+2,1
+10,0
+2,1
+6,0
+1
+2,0
+2,1
+2,0
+4,1
+3,0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+1
+28,0
+2,1
+6,0
+5,1
+7,0
+2,1
+4,0
+1
+3,0
+2,1
+2,0
+6,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+3,0
+1
+28,0
+2,1
+6,0
+5,1
+7,0
+2,1
+4,0
+1
+7,0
+2,1
+0
+5,1
+5,0
+2,1
+6,0
+5,1
+29,0
+2,1
+10,0
+2,1
+5,0
+2,1
+6,0
+4,1
+0
+4,1
+4,0
+2,1
+a,0
+1
+2a,0
+2,1
+4,0
+5,1
+5,0
+2,1
+6,0
+2,1
+6,0
+4,1
+0
+4,1
+3,0
+2,1
+6,0
+2,1
+3,0
+1
+2b,0
+2,1
+3,0
+5,1
+4,0
+2,1
+b,0
+2,1
+2,0
+4,1
+0
+4,1
+2,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2c,0
+2,1
+a,0
+2,1
+c,0
+2,1
+3,0
+7,1
+3,0
+7,1
+3,0
+4,1
+a7,0
+2,1
+62,0
+2,1
+2ea,0
+2,1
+0
+4,1
+8,0
+2,1
+0
+7,1
+2,0
+6,1
+2,0
+5,1
+4,0
+6,1
+0
+2,1
+4,0
+2,1
+2,0
+9,1
+6,0
+2,1
+16,0
+3,1
+3,0
+2,1
+7,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+1
+8,0
+2,1
+5,0
+2,1
+16,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+4,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+3,1
+2,0
+2,1
+1c,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+4,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+6,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+16,0
+4,1
+3,0
+2,1
+6,0
+2,1
+6,0
+4,1
+4,0
+2,1
+7,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+1d,0
+2,1
+2,0
+6,1
+2,0
+8,1
+4,0
+2,1
+7,0
+2,1
+2,0
+6,1
+3,0
+1
+2,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+1e,0
+2,1
+6,0
+2,1
+6,0
+4,1
+4,0
+2,1
+7,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+18,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+4,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+3,0
+2,1
+2,0
+4,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+14,0
+2,1
+4,0
+2,1
+7,0
+2,1
+6,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+6,1
+3,0
+7,1
+0
+7,1
+2,0
+6,1
+2,0
+5,1
+5,0
+5,1
+4,0
+2,1
+6,0
+8,1
+5,0
+4,1
+414,0
+2,1
+3,0
+5,1
+3,0
+3,1
+2,0
+3,1
+2,0
+1
+3,0
+2,1
+0
+6,1
+0
+2,1
+4,0
+5,1
+2,0
+2,1
+0
+2,1
+4,0
+2,1
+27,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+4,1
+0
+3,1
+0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+27,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+4,1
+0
+3,1
+0
+3,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+27,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+7,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+6,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+0
+7,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+5,0
+4,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+6,1
+0
+2,1
+0
+2,1
+5,0
+2,1
+6,0
+3,1
+5,0
+2,1
+0
+8,1
+22,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+5,1
+3,0
+4,1
+5,0
+2,1
+5,0
+4,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+4,1
+3,0
+4,1
+5,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+22,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+3,1
+5,0
+3,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+23,0
+6,1
+3,0
+5,1
+3,0
+2,1
+3,0
+3,1
+5,0
+3,1
+5,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+0
+2,1
+4,0
+2,1
+40a,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+4,1
+6,0
+4,1
+6,0
+6,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+26,0
+2,1
+4,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+4,1
+5,0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+6,1
+21,0
+2,1
+5,0
+2,1
+2,0
+2,1
+4,0
+3,1
+3,0
+5,1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+2,0
+3,1
+2,0
+2,1
+20,0
+2,1
+6,0
+4,1
+5,0
+4,1
+0
+4,1
+0
+1
+3,0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+1
+20,0
+2,1
+7,0
+2,1
+6,0
+1
+0
+7,1
+0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+4,1
+4,0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+1
+1f,0
+4,1
+6,0
+2,1
+5,0
+2,1
+2,0
+9,1
+2,0
+2,1
+4,0
+2,1
+4,0
+6,1
+3,0
+7,1
+0
+2,1
+5,0
+1
+1e,0
+2,1
+2,0
+2,1
+4,0
+4,1
+4,0
+2,1
+2,0
+9,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+0
+4,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+1
+1e,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+2,0
+4,1
+0
+2,1
+0
+2,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+1
+1d,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+3,1
+2,0
+4,1
+0
+2,1
+4,0
+2,1
+4,0
+2,1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+5,0
+1
+1d,0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+4,0
+3,1
+2,0
+4,1
+0
+2,1
+4,0
+2,1
+0
+9,1
+3,0
+7,1
+2,0
+2,1
+3,0
+2,1
+5e,0
+5,1
+385,0
+100 90 32
+402,0
+6,1
+9,0
+3,1
+13,0
+5,1
+3,0
+2,1
+6,0
+5,1
+2,0
+8,1
+1f,0
+2,1
+3,0
+2,1
+9,0
+3,1
+d,0
+2,1
+4,0
+2,1
+6,0
+2,1
+9,0
+2,1
+8,0
+2,1
+1f,0
+2,1
+3,0
+2,1
+a,0
+2,1
+5,0
+2,1
+6,0
+2,1
+4,0
+2,1
+7,0
+2,1
+8,0
+2,1
+7,0
+2,1
+20,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+3,1
+3,0
+2,1
+6,0
+2,1
+5,0
+2,1
+4,0
+2,1
+7,0
+2,1
+8,0
+2,1
+6,0
+2,1
+21,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+8,1
+4,0
+2,1
+4,0
+2,1
+8,0
+2,1
+7,0
+2,1
+5,0
+2,1
+22,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+8,1
+2,0
+1
+0
+2,1
+0
+1
+2,0
+2,1
+8,0
+2,1
+7,0
+2,1
+5,0
+2,1
+23,0
+6,1
+2,0
+5,1
+b,0
+2,1
+3,0
+6,1
+2,0
+2,1
+9,0
+2,1
+6,0
+2,1
+4,0
+2,1
+28,0
+2,1
+2,0
+2,1
+d,0
+2,1
+5,0
+4,1
+3,0
+2,1
+9,0
+2,1
+6,0
+2,1
+3,0
+2,1
+29,0
+2,1
+2,0
+2,1
+2,0
+2,1
+11,0
+2,1
+4,0
+2,1
+a,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2a,0
+2,1
+3,0
+4,1
+18,0
+2,1
+a,0
+2,1
+5,0
+2,1
+2,0
+8,1
+45,0
+2,1
+11,0
+2,1
+4f,0
+2,1
+11,0
+2,1
+4f,0
+5,1
+b,0
+5,1
+2f5,0
+2,1
+3,0
+2,1
+2,0
+3,1
+0
+2,1
+3,0
+2,1
+b,0
+2,1
+8,0
+6,1
+36,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+b,0
+2,1
+8,0
+2,1
+3,0
+2,1
+36,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+b,0
+2,1
+8,0
+2,1
+3,0
+2,1
+37,0
+4,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+5,1
+4,0
+2,1
+0
+5,1
+2,0
+2,1
+3,0
+2,1
+2,0
+5,1
+30,0
+4,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2e,0
+2,1
+0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+8,0
+2,1
+5,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+2d,0
+2,1
+2,0
+2,1
+0
+2,1
+3,0
+7,1
+0
+6,1
+2,0
+b,1
+0
+6,1
+7,0
+2,1
+31,0
+2,1
+0
+2,1
+8,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+b,0
+2,1
+31,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+3,0
+4,1
+3,0
+2,1
+0
+2,1
+6,0
+2,1
+3,0
+2,1
+31,0
+2,1
+6,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+3,1
+2,0
+5,1
+2,0
+2,1
+7,0
+5,1
+35,0
+2,1
+b,0
+2,1
+3,0
+2,1
+50,0
+2,1
+b,0
+2,1
+3,0
+2,1
+5d,0
+6,1
+33e,0
+2,1
+2f,0
+3,1
+30,0
+2,1
+31,0
+2,1
+2f,0
+2,1
+31,0
+2,1
+3,0
+4,1
+2,0
+2,1
+0
+2,1
+8,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+31,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+2,1
+8,0
+2,1
+0
+2,1
+0
+4,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+31,0
+2,1
+2,0
+3,1
+4,0
+2,1
+0
+2,1
+8,0
+2,1
+0
+2,1
+0
+4,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+31,0
+2,1
+3,0
+4,1
+2,0
+6,1
+3,0
+6,1
+0
+2,1
+0
+4,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+2f,0
+5,1
+4,0
+3,1
+0
+2,1
+0
+4,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+4,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+31,0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+0
+4,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+0
+4,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+0
+2,1
+31,0
+2,1
+3,0
+4,1
+2,0
+7,1
+0
+2,1
+3,0
+2,1
+2,0
+9,1
+2,0
+3,1
+0
+5,1
+0
+2,1
+3c,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+55,0
+2,1
+3,0
+2,1
+0
+2,1
+3,0
+2,1
+55,0
+6,1
+3,0
+6,1
+2f5,0
+3,1
+2,0
+2,1
+3,0
+3,1
+56,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+6,1
+4,0
+3,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+6,0
+2,1
+4,0
+4,1
+1f,0
+2,1
+4,0
+2,1
+5,0
+2,1
+9,0
+2,1
+3,0
+2,1
+0
+2,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+5,0
+4,1
+3,0
+2,1
+21,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4,0
+2,1
+5,0
+4,1
+5,0
+4,1
+0
+4,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+1f,0
+3,1
+5,0
+2,1
+6,0
+3,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+21,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+2,1
+5,0
+4,1
+4,0
+4,1
+5,0
+2,1
+0
+3,1
+0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+21,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+0
+1
+3,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+21,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+6,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+1
+3,0
+2,1
+0
+2,1
+4,0
+2,1
+0
+2,1
+21,0
+2,1
+4,0
+2,1
+5,0
+2,1
+c,0
+2,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+c,0
+2,1
+3,0
+2,1
+43,0
+3,1
+2,0
+2,1
+3,0
+3,1
+d,0
+2,1
+3,0
+2,1
+2df,0
+100 90 32
+3d2,0
+2,1
+3,0
+2,1
+3c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+f,0
+2,1
+4,0
+2,1
+0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+e,0
+2,1
+5,0
+3,1
+3d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+3,0
+2,1
+45,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+31,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+e,0
+6,1
+30,0
+3,1
+5,0
+2,1
+6,0
+3,1
+3,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2,0
+2,1
+33,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+2,0
+4,1
+44,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+8,0
+2,1
+2c6,0
+2,1
+3,0
+2,1
+3c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+f,0
+2,1
+4,0
+2,1
+0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+e,0
+2,1
+5,0
+3,1
+3d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+3,0
+2,1
+45,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+31,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+e,0
+6,1
+30,0
+3,1
+5,0
+2,1
+6,0
+3,1
+3,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2,0
+2,1
+33,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+2,0
+4,1
+44,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+8,0
+2,1
+2c6,0
+2,1
+3,0
+2,1
+3c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+f,0
+2,1
+4,0
+2,1
+0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+e,0
+2,1
+5,0
+3,1
+3d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+3,0
+2,1
+45,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+31,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+e,0
+6,1
+30,0
+3,1
+5,0
+2,1
+6,0
+3,1
+3,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2,0
+2,1
+33,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+2,0
+4,1
+44,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+8,0
+2,1
+2c6,0
+2,1
+3,0
+2,1
+3c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+f,0
+2,1
+4,0
+2,1
+0
+2,1
+3c,0
+2,1
+4,0
+2,1
+5,0
+2,1
+e,0
+2,1
+5,0
+3,1
+3d,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+3,0
+2,1
+45,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+e,0
+2,1
+2,0
+2,1
+31,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+6,0
+2,1
+e,0
+6,1
+30,0
+3,1
+5,0
+2,1
+6,0
+3,1
+3,0
+2,1
+5,0
+2,1
+e,0
+2,1
+2,0
+2,1
+33,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+5,0
+2,1
+3,0
+4,1
+2,0
+2,1
+43,0
+2,1
+4,0
+2,1
+5,0
+2,1
+6,0
+5,1
+2,0
+4,1
+44,0
+2,1
+4,0
+2,1
+5,0
+2,1
+55,0
+2,1
+4,0
+2,1
+5,0
+2,1
+8,0
+2,1
+4c,0
+3,1
+2,0
+2,1
+3,0
+3,1
+8,0
+2,1
+2dc,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt/a27.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a27.dat
new file mode 100644
index 000000000..855e206dc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a27.dat
@@ -0,0 +1,201 @@
+! $XConsortium$
+100 90 32
+4b0,0
+2,1
+d,0
+3,1
+4,0
+3,1
+34,0
+3,1
+7,0
+2,1
+b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+35,0
+2,1
+7,0
+2,1
+b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+35,0
+2,1
+7,0
+2,1
+b,0
+5,1
+3,0
+4,1
+4,0
+2,1
+5,0
+2,1
+4,0
+4,1
+16,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+5,1
+4,0
+2,1
+4,0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+6,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+0
+6,1
+2,0
+4,1
+17,0
+1
+2,0
+1
+3,0
+4,1
+2,0
+2,1
+5,0
+6,1
+2,0
+5,1
+1aff,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt/a28.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a28.dat
new file mode 100644
index 000000000..a785773f8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a28.dat
@@ -0,0 +1,238 @@
+! $XConsortium$
+100 90 32
+4b0,0
+2,2
+d,0
+2
+3
+2
+4,0
+2
+3
+2
+34,0
+2
+3
+2
+7,0
+2
+3
+b,0
+2,2
+e,0
+3
+2
+5,0
+3
+2
+35,0
+3
+2
+7,0
+3
+2
+b,0
+2,2
+e,0
+2,2
+5,0
+2
+3
+35,0
+2
+3
+7,0
+2,3
+b,0
+3,2
+2,3
+3,0
+4,3
+4,0
+2,2
+5,0
+3
+2
+4,0
+2,3
+2,2
+16,0
+2,2
+2,0
+2
+3
+2,0
+2
+3,3
+2,0
+2,2
+2,3
+2
+4,0
+2
+3
+4,0
+4,3
+2
+b,0
+2,3
+2,0
+2
+3
+0
+2,2
+2,0
+2
+3
+3,0
+2
+3
+5,0
+2
+3
+3,0
+2,2
+2,0
+3
+2
+15,0
+2,3
+2,0
+2,2
+0
+2,3
+2,0
+2,2
+0
+2,3
+2,0
+2
+3
+3,0
+2,2
+3,0
+2,2
+2,0
+2
+3
+b,0
+2,2
+2,0
+2,2
+0
+5,3
+2
+3,0
+2,2
+5,0
+2,2
+3,0
+2,3
+2,0
+2,2
+15,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,3
+0
+2,2
+7,0
+2,2
+3,0
+2,3
+2,0
+3
+2
+b,0
+2,3
+2,0
+2,3
+0
+3
+2
+7,0
+2,3
+5,0
+2,3
+3,0
+2,2
+2,0
+2,3
+15,0
+6,3
+0
+2,3
+2,0
+2,2
+0
+2,3
+7,0
+2,3
+3,0
+3
+2
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,2
+2,0
+2,2
+2,0
+4,3
+2,0
+6,2
+0
+5,2
+3
+2,0
+2,3
+2,2
+17,0
+2
+2,0
+2
+3,0
+2
+3,3
+2,0
+2,2
+5,0
+6,2
+2,0
+4,3
+2
+1aff,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt/a29.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a29.dat
new file mode 100644
index 000000000..70c490c47
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a29.dat
@@ -0,0 +1,239 @@
+! $XConsortium$
+100 90 32
+4b0,0
+2,3
+d,0
+3,3
+4,0
+3,3
+34,0
+3
+2,2
+7,0
+2,3
+b,0
+2,3
+e,0
+2,3
+5,0
+2
+3
+35,0
+2,3
+7,0
+2,3
+b,0
+2,3
+e,0
+2,2
+5,0
+2,3
+35,0
+2,3
+7,0
+2,2
+b,0
+5,3
+3,0
+3
+3,2
+4,0
+2,3
+5,0
+2
+3
+4,0
+4,3
+16,0
+2,3
+2,0
+2
+3
+2,0
+4,3
+2,0
+3,2
+2,3
+4,0
+2,3
+4,0
+5,3
+b,0
+2,2
+2,0
+2,3
+0
+2,2
+2,0
+2,3
+3,0
+2,2
+5,0
+3
+2
+3,0
+2,3
+2,0
+2
+3
+15,0
+2,2
+2,0
+2,3
+0
+3
+2
+2,0
+2,2
+0
+2,3
+2,0
+2,2
+3,0
+3
+2
+3,0
+2,3
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+0
+5,3
+2
+3,0
+2,3
+5,0
+2,2
+3,0
+2,2
+2,0
+2,3
+15,0
+2,3
+2,0
+3
+2
+0
+2
+3
+2,0
+2,3
+0
+2,2
+7,0
+2
+3
+3,0
+3
+2
+2,0
+2,3
+b,0
+2
+3
+2,0
+2
+3
+0
+2,2
+7,0
+3
+2
+5,0
+3
+2
+3,0
+2
+3
+2,0
+2,2
+15,0
+5,2
+3
+0
+2,3
+2,0
+2,2
+0
+2,3
+7,0
+2,2
+3,0
+2
+3
+2,0
+2,3
+b,0
+2,2
+2,0
+2,2
+0
+2,3
+2,0
+2,2
+3,0
+2
+3
+5,0
+2,2
+3,0
+2,2
+2,0
+2,3
+15,0
+4,3
+2,2
+0
+2,2
+2,0
+2,3
+0
+2,2
+7,0
+2
+3
+3,0
+2,2
+2,0
+2,2
+b,0
+2
+3
+2,0
+2
+3
+2,0
+4,3
+2,0
+2,3
+4,2
+0
+3,3
+2
+3
+2
+2,0
+3
+2
+2,3
+17,0
+3
+2,0
+3
+3,0
+3
+3,2
+2,0
+2,3
+5,0
+2
+3
+2
+3,3
+2,0
+4,3
+2
+1aff,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt/a3.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a3.dat
new file mode 100644
index 000000000..d9b425e3b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a3.dat
@@ -0,0 +1,125 @@
+! $XConsortium$
+100 90 32
+fcd,0
+b,1
+58,0
+3,1
+2,0
+3,1
+2,0
+2,1
+43,0
+4,1
+7,0
+5,1
+4,0
+4,1
+0
+5,1
+0
+2,1
+43,0
+6,1
+5,0
+2,1
+2,0
+2,1
+3,0
+4,1
+0
+5,1
+0
+2,1
+43,0
+2,1
+3,0
+2,1
+4,0
+2,1
+2,0
+2,1
+3,0
+4,1
+0
+5,1
+0
+2,1
+43,0
+2,1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+3,0
+4,1
+0
+5,1
+0
+2,1
+43,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+0
+5,1
+0
+2,1
+43,0
+2,1
+6,0
+1
+2,0
+2,1
+2,0
+2,1
+3,0
+4,1
+0
+5,1
+0
+2,1
+43,0
+2,1
+6,0
+1
+2,0
+2,1
+2,0
+2,1
+4,0
+3,1
+2,0
+3,1
+2,0
+2,1
+43,0
+2,1
+5,0
+1
+3,0
+2,1
+2,0
+2,1
+5,0
+b,1
+43,0
+2,1
+4,0
+1
+4,0
+5,1
+54,0
+2,1
+3,0
+1
+5e,0
+5,1
+ebc,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt/a30.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a30.dat
new file mode 100644
index 000000000..57d2f1f93
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a30.dat
@@ -0,0 +1,153 @@
+! $XConsortium$
+100 90 32
+4b0,0
+2,1
+d,0
+3,1
+4,0
+3,1
+34,0
+1
+9,0
+2,1
+b,0
+2,1
+e,0
+2,1
+6,0
+1
+35,0
+2,1
+7,0
+2,1
+b,0
+2,1
+15,0
+2,1
+35,0
+2,1
+14,0
+5,1
+3,0
+1
+7,0
+2,1
+6,0
+1
+4,0
+4,1
+16,0
+2,1
+3,0
+1
+2,0
+4,1
+5,0
+2,1
+4,0
+2,1
+4,0
+5,1
+f,0
+2,1
+5,0
+2,1
+a,0
+1
+4,0
+2,1
+3,0
+1
+19,0
+2,1
+0
+1
+6,0
+2,1
+7,0
+1
+4,0
+2,1
+16,0
+5,1
+4,0
+2,1
+e,0
+2,1
+15,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+2,1
+b,0
+1
+3,0
+1
+3,0
+2,1
+c,0
+1
+3,0
+1
+a,0
+1
+6,0
+1
+5,0
+1
+1e,0
+1
+0
+2,1
+5,0
+2,1
+d,0
+1
+2,0
+2,1
+12,0
+2,1
+8,0
+1
+e,0
+2,1
+15,0
+4,1
+7,0
+2,1
+b,0
+1
+15,0
+1
+3,0
+1
+2,0
+4,1
+2,0
+2,1
+5,0
+3,1
+0
+1
+3,0
+1
+0
+2,1
+17,0
+1
+2,0
+1
+3,0
+1
+5,0
+2,1
+6,0
+1
+0
+3,1
+2,0
+4,1
+1b00,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt/a34.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a34.dat
new file mode 100644
index 000000000..6c564677b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a34.dat
@@ -0,0 +1,355 @@
+! $XConsortium$
+100 90 32
+4b0,0
+2,1
+d,0
+3,1
+4,0
+3,1
+4b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+4b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+4b,0
+5,1
+3,0
+4,1
+4,0
+2,1
+5,0
+2,1
+4,0
+4,1
+43,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+1
+43,0
+2,1
+2,0
+2,1
+0
+6,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+1
+43,0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+1
+43,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+1
+43,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+0
+6,1
+2,0
+4,1
+1b37,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+613,0
+2,1
+2,0
+2,1
+2,0
+3,1
+43,0
+1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+45,0
+1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+45,0
+1
+15,0
+6,1
+0
+2,1
+45,0
+1
+15,0
+6,1
+0
+2,1
+5c,0
+1
+2,0
+1
+3,0
+3,1
+1b16,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+4fd,0
+3,1
+7,0
+2,1
+59,0
+2,1
+7,0
+2,1
+59,0
+2,1
+7,0
+2,1
+4d,0
+1
+2,0
+5,1
+4,0
+2,1
+4,0
+5,1
+4d,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4d,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4d,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4d,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4d,0
+1
+2,0
+2,1
+5,0
+6,1
+2,0
+5,1
+1aff,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+613,0
+2,1
+2,0
+2,1
+2,0
+3,1
+43,0
+1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+45,0
+1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+45,0
+1
+15,0
+6,1
+0
+2,1
+45,0
+1
+15,0
+6,1
+0
+2,1
+5c,0
+1
+2,0
+1
+3,0
+3,1
+1b16,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+4fd,0
+3,1
+7,0
+2,1
+59,0
+2,1
+7,0
+2,1
+59,0
+2,1
+7,0
+2,1
+4d,0
+1
+2,0
+5,1
+4,0
+2,1
+4,0
+5,1
+4d,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4d,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4d,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4d,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+4d,0
+1
+2,0
+2,1
+5,0
+6,1
+2,0
+5,1
+1aff,0
+100 90 32
+2328,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt/a37.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a37.dat
new file mode 100644
index 000000000..57d2f1f93
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a37.dat
@@ -0,0 +1,153 @@
+! $XConsortium$
+100 90 32
+4b0,0
+2,1
+d,0
+3,1
+4,0
+3,1
+34,0
+1
+9,0
+2,1
+b,0
+2,1
+e,0
+2,1
+6,0
+1
+35,0
+2,1
+7,0
+2,1
+b,0
+2,1
+15,0
+2,1
+35,0
+2,1
+14,0
+5,1
+3,0
+1
+7,0
+2,1
+6,0
+1
+4,0
+4,1
+16,0
+2,1
+3,0
+1
+2,0
+4,1
+5,0
+2,1
+4,0
+2,1
+4,0
+5,1
+f,0
+2,1
+5,0
+2,1
+a,0
+1
+4,0
+2,1
+3,0
+1
+19,0
+2,1
+0
+1
+6,0
+2,1
+7,0
+1
+4,0
+2,1
+16,0
+5,1
+4,0
+2,1
+e,0
+2,1
+15,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+2,1
+b,0
+1
+3,0
+1
+3,0
+2,1
+c,0
+1
+3,0
+1
+a,0
+1
+6,0
+1
+5,0
+1
+1e,0
+1
+0
+2,1
+5,0
+2,1
+d,0
+1
+2,0
+2,1
+12,0
+2,1
+8,0
+1
+e,0
+2,1
+15,0
+4,1
+7,0
+2,1
+b,0
+1
+15,0
+1
+3,0
+1
+2,0
+4,1
+2,0
+2,1
+5,0
+3,1
+0
+1
+3,0
+1
+0
+2,1
+17,0
+1
+2,0
+1
+3,0
+1
+5,0
+2,1
+6,0
+1
+0
+3,1
+2,0
+4,1
+1b00,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt/a39.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a39.dat
new file mode 100644
index 000000000..4a848ab59
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a39.dat
@@ -0,0 +1,6803 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+4b0,0
+2,1
+d,0
+3,1
+4,0
+3,1
+34,0
+3,1
+7,0
+2,1
+b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+35,0
+2,1
+7,0
+2,1
+b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+35,0
+2,1
+7,0
+2,1
+b,0
+5,1
+3,0
+4,1
+4,0
+2,1
+5,0
+2,1
+4,0
+4,1
+16,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+5,1
+4,0
+2,1
+4,0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+6,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+0
+6,1
+2,0
+4,1
+17,0
+1
+2,0
+1
+3,0
+4,1
+2,0
+2,1
+5,0
+6,1
+2,0
+5,1
+1aff,0
+100 90 32
+4b0,0
+2,2
+d,0
+3,2
+4,0
+3,2
+34,0
+3,2
+7,0
+2,2
+b,0
+2,2
+e,0
+2,2
+5,0
+2,2
+35,0
+2,2
+7,0
+2,2
+b,0
+2,2
+e,0
+2,2
+5,0
+2,2
+35,0
+2,2
+7,0
+2,2
+b,0
+5,2
+3,0
+4,2
+4,0
+2,2
+5,0
+2,2
+4,0
+4,2
+16,0
+2,2
+2,0
+2,2
+2,0
+4,2
+2,0
+5,2
+4,0
+2,2
+4,0
+5,2
+b,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+0
+6,2
+3,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+2,0
+4,2
+2,0
+6,2
+0
+6,2
+2,0
+4,2
+17,0
+2
+2,0
+2
+3,0
+4,2
+2,0
+2,2
+5,0
+6,2
+2,0
+5,2
+1aff,0
+100 90 32
+4b0,0
+2,3
+d,0
+3,3
+4,0
+3,3
+34,0
+3,3
+7,0
+2,3
+b,0
+2,3
+e,0
+2,3
+5,0
+2,3
+35,0
+2,3
+7,0
+2,3
+b,0
+2,3
+e,0
+2,3
+5,0
+2,3
+35,0
+2,3
+7,0
+2,3
+b,0
+5,3
+3,0
+4,3
+4,0
+2,3
+5,0
+2,3
+4,0
+4,3
+16,0
+2,3
+2,0
+2,3
+2,0
+4,3
+2,0
+5,3
+4,0
+2,3
+4,0
+5,3
+b,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+0
+6,3
+3,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+2,0
+4,3
+2,0
+6,3
+0
+6,3
+2,0
+4,3
+17,0
+3
+2,0
+3
+3,0
+4,3
+2,0
+2,3
+5,0
+6,3
+2,0
+5,3
+1aff,0
+100 90 32
+4b0,0
+2,4
+d,0
+3,4
+4,0
+3,4
+34,0
+3,4
+7,0
+2,4
+b,0
+2,4
+e,0
+2,4
+5,0
+2,4
+35,0
+2,4
+7,0
+2,4
+b,0
+2,4
+e,0
+2,4
+5,0
+2,4
+35,0
+2,4
+7,0
+2,4
+b,0
+5,4
+3,0
+4,4
+4,0
+2,4
+5,0
+2,4
+4,0
+4,4
+16,0
+2,4
+2,0
+2,4
+2,0
+4,4
+2,0
+5,4
+4,0
+2,4
+4,0
+5,4
+b,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+0
+6,4
+3,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+2,0
+4,4
+2,0
+6,4
+0
+6,4
+2,0
+4,4
+17,0
+4
+2,0
+4
+3,0
+4,4
+2,0
+2,4
+5,0
+6,4
+2,0
+5,4
+1aff,0
+100 90 32
+4b0,0
+2,6
+d,0
+3,6
+4,0
+3,6
+34,0
+3,6
+7,0
+2,6
+b,0
+2,6
+e,0
+2,6
+5,0
+2,6
+35,0
+2,6
+7,0
+2,6
+b,0
+2,6
+e,0
+2,6
+5,0
+2,6
+35,0
+2,6
+7,0
+2,6
+b,0
+5,6
+3,0
+4,6
+4,0
+2,6
+5,0
+2,6
+4,0
+4,6
+16,0
+2,6
+2,0
+2,6
+2,0
+4,6
+2,0
+5,6
+4,0
+2,6
+4,0
+5,6
+b,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+0
+6,6
+3,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+2,0
+4,6
+2,0
+6,6
+0
+6,6
+2,0
+4,6
+17,0
+6
+2,0
+6
+3,0
+4,6
+2,0
+2,6
+5,0
+6,6
+2,0
+5,6
+1aff,0
+100 90 32
+4b0,0
+2,7
+d,0
+3,7
+4,0
+3,7
+34,0
+3,7
+7,0
+2,7
+b,0
+2,7
+e,0
+2,7
+5,0
+2,7
+35,0
+2,7
+7,0
+2,7
+b,0
+2,7
+e,0
+2,7
+5,0
+2,7
+35,0
+2,7
+7,0
+2,7
+b,0
+5,7
+3,0
+4,7
+4,0
+2,7
+5,0
+2,7
+4,0
+4,7
+16,0
+2,7
+2,0
+2,7
+2,0
+4,7
+2,0
+5,7
+4,0
+2,7
+4,0
+5,7
+b,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+0
+6,7
+3,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+2,0
+4,7
+2,0
+6,7
+0
+6,7
+2,0
+4,7
+17,0
+7
+2,0
+7
+3,0
+4,7
+2,0
+2,7
+5,0
+6,7
+2,0
+5,7
+1aff,0
+100 90 32
+4b0,0
+2,10
+d,0
+3,10
+4,0
+3,10
+34,0
+3,10
+7,0
+2,10
+b,0
+2,10
+e,0
+2,10
+5,0
+2,10
+35,0
+2,10
+7,0
+2,10
+b,0
+2,10
+e,0
+2,10
+5,0
+2,10
+35,0
+2,10
+7,0
+2,10
+b,0
+5,10
+3,0
+4,10
+4,0
+2,10
+5,0
+2,10
+4,0
+4,10
+16,0
+2,10
+2,0
+2,10
+2,0
+4,10
+2,0
+5,10
+4,0
+2,10
+4,0
+5,10
+b,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+0
+6,10
+3,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+2,0
+4,10
+2,0
+6,10
+0
+6,10
+2,0
+4,10
+17,0
+10
+2,0
+10
+3,0
+4,10
+2,0
+2,10
+5,0
+6,10
+2,0
+5,10
+1aff,0
+100 90 32
+4b0,0
+2,33
+d,0
+3,33
+4,0
+3,33
+34,0
+3,33
+7,0
+2,33
+b,0
+2,33
+e,0
+2,33
+5,0
+2,33
+35,0
+2,33
+7,0
+2,33
+b,0
+2,33
+e,0
+2,33
+5,0
+2,33
+35,0
+2,33
+7,0
+2,33
+b,0
+5,33
+3,0
+4,33
+4,0
+2,33
+5,0
+2,33
+4,0
+4,33
+16,0
+2,33
+2,0
+2,33
+2,0
+4,33
+2,0
+5,33
+4,0
+2,33
+4,0
+5,33
+b,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+0
+6,33
+3,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+2,0
+4,33
+2,0
+6,33
+0
+6,33
+2,0
+4,33
+17,0
+33
+2,0
+33
+3,0
+4,33
+2,0
+2,33
+5,0
+6,33
+2,0
+5,33
+1aff,0
+100 90 32
+4b0,0
+2,81
+d,0
+3,81
+4,0
+3,81
+34,0
+3,81
+7,0
+2,81
+b,0
+2,81
+e,0
+2,81
+5,0
+2,81
+35,0
+2,81
+7,0
+2,81
+b,0
+2,81
+e,0
+2,81
+5,0
+2,81
+35,0
+2,81
+7,0
+2,81
+b,0
+5,81
+3,0
+4,81
+4,0
+2,81
+5,0
+2,81
+4,0
+4,81
+16,0
+2,81
+2,0
+2,81
+2,0
+4,81
+2,0
+5,81
+4,0
+2,81
+4,0
+5,81
+b,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+0
+6,81
+3,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+2,0
+4,81
+2,0
+6,81
+0
+6,81
+2,0
+4,81
+17,0
+81
+2,0
+81
+3,0
+4,81
+2,0
+2,81
+5,0
+6,81
+2,0
+5,81
+1aff,0
+100 90 32
+4b0,0
+2,a3
+d,0
+3,a3
+4,0
+3,a3
+34,0
+3,a3
+7,0
+2,a3
+b,0
+2,a3
+e,0
+2,a3
+5,0
+2,a3
+35,0
+2,a3
+7,0
+2,a3
+b,0
+2,a3
+e,0
+2,a3
+5,0
+2,a3
+35,0
+2,a3
+7,0
+2,a3
+b,0
+5,a3
+3,0
+4,a3
+4,0
+2,a3
+5,0
+2,a3
+4,0
+4,a3
+16,0
+2,a3
+2,0
+2,a3
+2,0
+4,a3
+2,0
+5,a3
+4,0
+2,a3
+4,0
+5,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+6,a3
+3,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+2,0
+4,a3
+2,0
+6,a3
+0
+6,a3
+2,0
+4,a3
+17,0
+a3
+2,0
+a3
+3,0
+4,a3
+2,0
+2,a3
+5,0
+6,a3
+2,0
+5,a3
+1aff,0
+100 90 32
+4b0,0
+2,ff
+d,0
+3,ff
+4,0
+3,ff
+34,0
+3,ff
+7,0
+2,ff
+b,0
+2,ff
+e,0
+2,ff
+5,0
+2,ff
+35,0
+2,ff
+7,0
+2,ff
+b,0
+2,ff
+e,0
+2,ff
+5,0
+2,ff
+35,0
+2,ff
+7,0
+2,ff
+b,0
+5,ff
+3,0
+4,ff
+4,0
+2,ff
+5,0
+2,ff
+4,0
+4,ff
+16,0
+2,ff
+2,0
+2,ff
+2,0
+4,ff
+2,0
+5,ff
+4,0
+2,ff
+4,0
+5,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+6,ff
+3,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+2,0
+4,ff
+2,0
+6,ff
+0
+6,ff
+2,0
+4,ff
+17,0
+ff
+2,0
+ff
+3,0
+4,ff
+2,0
+2,ff
+5,0
+6,ff
+2,0
+5,ff
+1aff,0
+100 90 32
+4b0,0
+2,100
+d,0
+3,100
+4,0
+3,100
+34,0
+3,100
+7,0
+2,100
+b,0
+2,100
+e,0
+2,100
+5,0
+2,100
+35,0
+2,100
+7,0
+2,100
+b,0
+2,100
+e,0
+2,100
+5,0
+2,100
+35,0
+2,100
+7,0
+2,100
+b,0
+5,100
+3,0
+4,100
+4,0
+2,100
+5,0
+2,100
+4,0
+4,100
+16,0
+2,100
+2,0
+2,100
+2,0
+4,100
+2,0
+5,100
+4,0
+2,100
+4,0
+5,100
+b,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+0
+6,100
+3,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+2,0
+4,100
+2,0
+6,100
+0
+6,100
+2,0
+4,100
+17,0
+100
+2,0
+100
+3,0
+4,100
+2,0
+2,100
+5,0
+6,100
+2,0
+5,100
+1aff,0
+100 90 32
+4b0,0
+2,12c
+d,0
+3,12c
+4,0
+3,12c
+34,0
+3,12c
+7,0
+2,12c
+b,0
+2,12c
+e,0
+2,12c
+5,0
+2,12c
+35,0
+2,12c
+7,0
+2,12c
+b,0
+2,12c
+e,0
+2,12c
+5,0
+2,12c
+35,0
+2,12c
+7,0
+2,12c
+b,0
+5,12c
+3,0
+4,12c
+4,0
+2,12c
+5,0
+2,12c
+4,0
+4,12c
+16,0
+2,12c
+2,0
+2,12c
+2,0
+4,12c
+2,0
+5,12c
+4,0
+2,12c
+4,0
+5,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+6,12c
+3,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+2,0
+4,12c
+2,0
+6,12c
+0
+6,12c
+2,0
+4,12c
+17,0
+12c
+2,0
+12c
+3,0
+4,12c
+2,0
+2,12c
+5,0
+6,12c
+2,0
+5,12c
+1aff,0
+100 90 32
+4b0,0
+2,3e8
+d,0
+3,3e8
+4,0
+3,3e8
+34,0
+3,3e8
+7,0
+2,3e8
+b,0
+2,3e8
+e,0
+2,3e8
+5,0
+2,3e8
+35,0
+2,3e8
+7,0
+2,3e8
+b,0
+2,3e8
+e,0
+2,3e8
+5,0
+2,3e8
+35,0
+2,3e8
+7,0
+2,3e8
+b,0
+5,3e8
+3,0
+4,3e8
+4,0
+2,3e8
+5,0
+2,3e8
+4,0
+4,3e8
+16,0
+2,3e8
+2,0
+2,3e8
+2,0
+4,3e8
+2,0
+5,3e8
+4,0
+2,3e8
+4,0
+5,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+6,3e8
+3,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+2,0
+4,3e8
+2,0
+6,3e8
+0
+6,3e8
+2,0
+4,3e8
+17,0
+3e8
+2,0
+3e8
+3,0
+4,3e8
+2,0
+2,3e8
+5,0
+6,3e8
+2,0
+5,3e8
+1aff,0
+100 90 32
+4b0,0
+2,111111
+d,0
+3,111111
+4,0
+3,111111
+34,0
+3,111111
+7,0
+2,111111
+b,0
+2,111111
+e,0
+2,111111
+5,0
+2,111111
+35,0
+2,111111
+7,0
+2,111111
+b,0
+2,111111
+e,0
+2,111111
+5,0
+2,111111
+35,0
+2,111111
+7,0
+2,111111
+b,0
+5,111111
+3,0
+4,111111
+4,0
+2,111111
+5,0
+2,111111
+4,0
+4,111111
+16,0
+2,111111
+2,0
+2,111111
+2,0
+4,111111
+2,0
+5,111111
+4,0
+2,111111
+4,0
+5,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+6,111111
+3,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+2,0
+4,111111
+2,0
+6,111111
+0
+6,111111
+2,0
+4,111111
+17,0
+111111
+2,0
+111111
+3,0
+4,111111
+2,0
+2,111111
+5,0
+6,111111
+2,0
+5,111111
+1aff,0
+100 90 32
+4b0,0
+2,400200
+d,0
+3,400200
+4,0
+3,400200
+34,0
+3,400200
+7,0
+2,400200
+b,0
+2,400200
+e,0
+2,400200
+5,0
+2,400200
+35,0
+2,400200
+7,0
+2,400200
+b,0
+2,400200
+e,0
+2,400200
+5,0
+2,400200
+35,0
+2,400200
+7,0
+2,400200
+b,0
+5,400200
+3,0
+4,400200
+4,0
+2,400200
+5,0
+2,400200
+4,0
+4,400200
+16,0
+2,400200
+2,0
+2,400200
+2,0
+4,400200
+2,0
+5,400200
+4,0
+2,400200
+4,0
+5,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+6,400200
+3,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+2,0
+4,400200
+2,0
+6,400200
+0
+6,400200
+2,0
+4,400200
+17,0
+400200
+2,0
+400200
+3,0
+4,400200
+2,0
+2,400200
+5,0
+6,400200
+2,0
+5,400200
+1aff,0
+100 90 32
+4b0,0
+2,777777
+d,0
+3,777777
+4,0
+3,777777
+34,0
+3,777777
+7,0
+2,777777
+b,0
+2,777777
+e,0
+2,777777
+5,0
+2,777777
+35,0
+2,777777
+7,0
+2,777777
+b,0
+2,777777
+e,0
+2,777777
+5,0
+2,777777
+35,0
+2,777777
+7,0
+2,777777
+b,0
+5,777777
+3,0
+4,777777
+4,0
+2,777777
+5,0
+2,777777
+4,0
+4,777777
+16,0
+2,777777
+2,0
+2,777777
+2,0
+4,777777
+2,0
+5,777777
+4,0
+2,777777
+4,0
+5,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+6,777777
+3,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+2,0
+4,777777
+2,0
+6,777777
+0
+6,777777
+2,0
+4,777777
+17,0
+777777
+2,0
+777777
+3,0
+4,777777
+2,0
+2,777777
+5,0
+6,777777
+2,0
+5,777777
+1aff,0
+100 90 32
+4b0,0
+2,1
+d,0
+3,1
+4,0
+3,1
+34,0
+3,1
+7,0
+2,1
+b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+35,0
+2,1
+7,0
+2,1
+b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+35,0
+2,1
+7,0
+2,1
+b,0
+5,1
+3,0
+4,1
+4,0
+2,1
+5,0
+2,1
+4,0
+4,1
+16,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+5,1
+4,0
+2,1
+4,0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+6,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+0
+6,1
+2,0
+4,1
+17,0
+1
+2,0
+1
+3,0
+4,1
+2,0
+2,1
+5,0
+6,1
+2,0
+5,1
+1aff,0
+100 90 32
+4b0,0
+2,2
+d,0
+3,2
+4,0
+3,2
+34,0
+3,2
+7,0
+2,2
+b,0
+2,2
+e,0
+2,2
+5,0
+2,2
+35,0
+2,2
+7,0
+2,2
+b,0
+2,2
+e,0
+2,2
+5,0
+2,2
+35,0
+2,2
+7,0
+2,2
+b,0
+5,2
+3,0
+4,2
+4,0
+2,2
+5,0
+2,2
+4,0
+4,2
+16,0
+2,2
+2,0
+2,2
+2,0
+4,2
+2,0
+5,2
+4,0
+2,2
+4,0
+5,2
+b,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+0
+6,2
+3,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+2,0
+4,2
+2,0
+6,2
+0
+6,2
+2,0
+4,2
+17,0
+2
+2,0
+2
+3,0
+4,2
+2,0
+2,2
+5,0
+6,2
+2,0
+5,2
+1aff,0
+100 90 32
+4b0,0
+2,3
+d,0
+3,3
+4,0
+3,3
+34,0
+3,3
+7,0
+2,3
+b,0
+2,3
+e,0
+2,3
+5,0
+2,3
+35,0
+2,3
+7,0
+2,3
+b,0
+2,3
+e,0
+2,3
+5,0
+2,3
+35,0
+2,3
+7,0
+2,3
+b,0
+5,3
+3,0
+4,3
+4,0
+2,3
+5,0
+2,3
+4,0
+4,3
+16,0
+2,3
+2,0
+2,3
+2,0
+4,3
+2,0
+5,3
+4,0
+2,3
+4,0
+5,3
+b,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+0
+6,3
+3,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+2,0
+4,3
+2,0
+6,3
+0
+6,3
+2,0
+4,3
+17,0
+3
+2,0
+3
+3,0
+4,3
+2,0
+2,3
+5,0
+6,3
+2,0
+5,3
+1aff,0
+100 90 32
+4b0,0
+2,4
+d,0
+3,4
+4,0
+3,4
+34,0
+3,4
+7,0
+2,4
+b,0
+2,4
+e,0
+2,4
+5,0
+2,4
+35,0
+2,4
+7,0
+2,4
+b,0
+2,4
+e,0
+2,4
+5,0
+2,4
+35,0
+2,4
+7,0
+2,4
+b,0
+5,4
+3,0
+4,4
+4,0
+2,4
+5,0
+2,4
+4,0
+4,4
+16,0
+2,4
+2,0
+2,4
+2,0
+4,4
+2,0
+5,4
+4,0
+2,4
+4,0
+5,4
+b,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+0
+6,4
+3,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+2,0
+4,4
+2,0
+6,4
+0
+6,4
+2,0
+4,4
+17,0
+4
+2,0
+4
+3,0
+4,4
+2,0
+2,4
+5,0
+6,4
+2,0
+5,4
+1aff,0
+100 90 32
+4b0,0
+2,6
+d,0
+3,6
+4,0
+3,6
+34,0
+3,6
+7,0
+2,6
+b,0
+2,6
+e,0
+2,6
+5,0
+2,6
+35,0
+2,6
+7,0
+2,6
+b,0
+2,6
+e,0
+2,6
+5,0
+2,6
+35,0
+2,6
+7,0
+2,6
+b,0
+5,6
+3,0
+4,6
+4,0
+2,6
+5,0
+2,6
+4,0
+4,6
+16,0
+2,6
+2,0
+2,6
+2,0
+4,6
+2,0
+5,6
+4,0
+2,6
+4,0
+5,6
+b,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+0
+6,6
+3,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+2,0
+4,6
+2,0
+6,6
+0
+6,6
+2,0
+4,6
+17,0
+6
+2,0
+6
+3,0
+4,6
+2,0
+2,6
+5,0
+6,6
+2,0
+5,6
+1aff,0
+100 90 32
+4b0,0
+2,7
+d,0
+3,7
+4,0
+3,7
+34,0
+3,7
+7,0
+2,7
+b,0
+2,7
+e,0
+2,7
+5,0
+2,7
+35,0
+2,7
+7,0
+2,7
+b,0
+2,7
+e,0
+2,7
+5,0
+2,7
+35,0
+2,7
+7,0
+2,7
+b,0
+5,7
+3,0
+4,7
+4,0
+2,7
+5,0
+2,7
+4,0
+4,7
+16,0
+2,7
+2,0
+2,7
+2,0
+4,7
+2,0
+5,7
+4,0
+2,7
+4,0
+5,7
+b,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+0
+6,7
+3,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+2,0
+4,7
+2,0
+6,7
+0
+6,7
+2,0
+4,7
+17,0
+7
+2,0
+7
+3,0
+4,7
+2,0
+2,7
+5,0
+6,7
+2,0
+5,7
+1aff,0
+100 90 32
+4b0,0
+2,10
+d,0
+3,10
+4,0
+3,10
+34,0
+3,10
+7,0
+2,10
+b,0
+2,10
+e,0
+2,10
+5,0
+2,10
+35,0
+2,10
+7,0
+2,10
+b,0
+2,10
+e,0
+2,10
+5,0
+2,10
+35,0
+2,10
+7,0
+2,10
+b,0
+5,10
+3,0
+4,10
+4,0
+2,10
+5,0
+2,10
+4,0
+4,10
+16,0
+2,10
+2,0
+2,10
+2,0
+4,10
+2,0
+5,10
+4,0
+2,10
+4,0
+5,10
+b,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+0
+6,10
+3,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+2,0
+4,10
+2,0
+6,10
+0
+6,10
+2,0
+4,10
+17,0
+10
+2,0
+10
+3,0
+4,10
+2,0
+2,10
+5,0
+6,10
+2,0
+5,10
+1aff,0
+100 90 32
+4b0,0
+2,33
+d,0
+3,33
+4,0
+3,33
+34,0
+3,33
+7,0
+2,33
+b,0
+2,33
+e,0
+2,33
+5,0
+2,33
+35,0
+2,33
+7,0
+2,33
+b,0
+2,33
+e,0
+2,33
+5,0
+2,33
+35,0
+2,33
+7,0
+2,33
+b,0
+5,33
+3,0
+4,33
+4,0
+2,33
+5,0
+2,33
+4,0
+4,33
+16,0
+2,33
+2,0
+2,33
+2,0
+4,33
+2,0
+5,33
+4,0
+2,33
+4,0
+5,33
+b,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+0
+6,33
+3,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+2,0
+4,33
+2,0
+6,33
+0
+6,33
+2,0
+4,33
+17,0
+33
+2,0
+33
+3,0
+4,33
+2,0
+2,33
+5,0
+6,33
+2,0
+5,33
+1aff,0
+100 90 32
+4b0,0
+2,81
+d,0
+3,81
+4,0
+3,81
+34,0
+3,81
+7,0
+2,81
+b,0
+2,81
+e,0
+2,81
+5,0
+2,81
+35,0
+2,81
+7,0
+2,81
+b,0
+2,81
+e,0
+2,81
+5,0
+2,81
+35,0
+2,81
+7,0
+2,81
+b,0
+5,81
+3,0
+4,81
+4,0
+2,81
+5,0
+2,81
+4,0
+4,81
+16,0
+2,81
+2,0
+2,81
+2,0
+4,81
+2,0
+5,81
+4,0
+2,81
+4,0
+5,81
+b,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+0
+6,81
+3,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+2,0
+4,81
+2,0
+6,81
+0
+6,81
+2,0
+4,81
+17,0
+81
+2,0
+81
+3,0
+4,81
+2,0
+2,81
+5,0
+6,81
+2,0
+5,81
+1aff,0
+100 90 32
+4b0,0
+2,a3
+d,0
+3,a3
+4,0
+3,a3
+34,0
+3,a3
+7,0
+2,a3
+b,0
+2,a3
+e,0
+2,a3
+5,0
+2,a3
+35,0
+2,a3
+7,0
+2,a3
+b,0
+2,a3
+e,0
+2,a3
+5,0
+2,a3
+35,0
+2,a3
+7,0
+2,a3
+b,0
+5,a3
+3,0
+4,a3
+4,0
+2,a3
+5,0
+2,a3
+4,0
+4,a3
+16,0
+2,a3
+2,0
+2,a3
+2,0
+4,a3
+2,0
+5,a3
+4,0
+2,a3
+4,0
+5,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+6,a3
+3,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+2,0
+4,a3
+2,0
+6,a3
+0
+6,a3
+2,0
+4,a3
+17,0
+a3
+2,0
+a3
+3,0
+4,a3
+2,0
+2,a3
+5,0
+6,a3
+2,0
+5,a3
+1aff,0
+100 90 32
+4b0,0
+2,ff
+d,0
+3,ff
+4,0
+3,ff
+34,0
+3,ff
+7,0
+2,ff
+b,0
+2,ff
+e,0
+2,ff
+5,0
+2,ff
+35,0
+2,ff
+7,0
+2,ff
+b,0
+2,ff
+e,0
+2,ff
+5,0
+2,ff
+35,0
+2,ff
+7,0
+2,ff
+b,0
+5,ff
+3,0
+4,ff
+4,0
+2,ff
+5,0
+2,ff
+4,0
+4,ff
+16,0
+2,ff
+2,0
+2,ff
+2,0
+4,ff
+2,0
+5,ff
+4,0
+2,ff
+4,0
+5,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+6,ff
+3,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+2,0
+4,ff
+2,0
+6,ff
+0
+6,ff
+2,0
+4,ff
+17,0
+ff
+2,0
+ff
+3,0
+4,ff
+2,0
+2,ff
+5,0
+6,ff
+2,0
+5,ff
+1aff,0
+100 90 32
+4b0,0
+2,100
+d,0
+3,100
+4,0
+3,100
+34,0
+3,100
+7,0
+2,100
+b,0
+2,100
+e,0
+2,100
+5,0
+2,100
+35,0
+2,100
+7,0
+2,100
+b,0
+2,100
+e,0
+2,100
+5,0
+2,100
+35,0
+2,100
+7,0
+2,100
+b,0
+5,100
+3,0
+4,100
+4,0
+2,100
+5,0
+2,100
+4,0
+4,100
+16,0
+2,100
+2,0
+2,100
+2,0
+4,100
+2,0
+5,100
+4,0
+2,100
+4,0
+5,100
+b,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+0
+6,100
+3,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+2,0
+4,100
+2,0
+6,100
+0
+6,100
+2,0
+4,100
+17,0
+100
+2,0
+100
+3,0
+4,100
+2,0
+2,100
+5,0
+6,100
+2,0
+5,100
+1aff,0
+100 90 32
+4b0,0
+2,12c
+d,0
+3,12c
+4,0
+3,12c
+34,0
+3,12c
+7,0
+2,12c
+b,0
+2,12c
+e,0
+2,12c
+5,0
+2,12c
+35,0
+2,12c
+7,0
+2,12c
+b,0
+2,12c
+e,0
+2,12c
+5,0
+2,12c
+35,0
+2,12c
+7,0
+2,12c
+b,0
+5,12c
+3,0
+4,12c
+4,0
+2,12c
+5,0
+2,12c
+4,0
+4,12c
+16,0
+2,12c
+2,0
+2,12c
+2,0
+4,12c
+2,0
+5,12c
+4,0
+2,12c
+4,0
+5,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+6,12c
+3,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+2,0
+4,12c
+2,0
+6,12c
+0
+6,12c
+2,0
+4,12c
+17,0
+12c
+2,0
+12c
+3,0
+4,12c
+2,0
+2,12c
+5,0
+6,12c
+2,0
+5,12c
+1aff,0
+100 90 32
+4b0,0
+2,3e8
+d,0
+3,3e8
+4,0
+3,3e8
+34,0
+3,3e8
+7,0
+2,3e8
+b,0
+2,3e8
+e,0
+2,3e8
+5,0
+2,3e8
+35,0
+2,3e8
+7,0
+2,3e8
+b,0
+2,3e8
+e,0
+2,3e8
+5,0
+2,3e8
+35,0
+2,3e8
+7,0
+2,3e8
+b,0
+5,3e8
+3,0
+4,3e8
+4,0
+2,3e8
+5,0
+2,3e8
+4,0
+4,3e8
+16,0
+2,3e8
+2,0
+2,3e8
+2,0
+4,3e8
+2,0
+5,3e8
+4,0
+2,3e8
+4,0
+5,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+6,3e8
+3,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+2,0
+4,3e8
+2,0
+6,3e8
+0
+6,3e8
+2,0
+4,3e8
+17,0
+3e8
+2,0
+3e8
+3,0
+4,3e8
+2,0
+2,3e8
+5,0
+6,3e8
+2,0
+5,3e8
+1aff,0
+100 90 32
+4b0,0
+2,111111
+d,0
+3,111111
+4,0
+3,111111
+34,0
+3,111111
+7,0
+2,111111
+b,0
+2,111111
+e,0
+2,111111
+5,0
+2,111111
+35,0
+2,111111
+7,0
+2,111111
+b,0
+2,111111
+e,0
+2,111111
+5,0
+2,111111
+35,0
+2,111111
+7,0
+2,111111
+b,0
+5,111111
+3,0
+4,111111
+4,0
+2,111111
+5,0
+2,111111
+4,0
+4,111111
+16,0
+2,111111
+2,0
+2,111111
+2,0
+4,111111
+2,0
+5,111111
+4,0
+2,111111
+4,0
+5,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+6,111111
+3,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+2,0
+4,111111
+2,0
+6,111111
+0
+6,111111
+2,0
+4,111111
+17,0
+111111
+2,0
+111111
+3,0
+4,111111
+2,0
+2,111111
+5,0
+6,111111
+2,0
+5,111111
+1aff,0
+100 90 32
+4b0,0
+2,400200
+d,0
+3,400200
+4,0
+3,400200
+34,0
+3,400200
+7,0
+2,400200
+b,0
+2,400200
+e,0
+2,400200
+5,0
+2,400200
+35,0
+2,400200
+7,0
+2,400200
+b,0
+2,400200
+e,0
+2,400200
+5,0
+2,400200
+35,0
+2,400200
+7,0
+2,400200
+b,0
+5,400200
+3,0
+4,400200
+4,0
+2,400200
+5,0
+2,400200
+4,0
+4,400200
+16,0
+2,400200
+2,0
+2,400200
+2,0
+4,400200
+2,0
+5,400200
+4,0
+2,400200
+4,0
+5,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+6,400200
+3,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+2,0
+4,400200
+2,0
+6,400200
+0
+6,400200
+2,0
+4,400200
+17,0
+400200
+2,0
+400200
+3,0
+4,400200
+2,0
+2,400200
+5,0
+6,400200
+2,0
+5,400200
+1aff,0
+100 90 32
+4b0,0
+2,777777
+d,0
+3,777777
+4,0
+3,777777
+34,0
+3,777777
+7,0
+2,777777
+b,0
+2,777777
+e,0
+2,777777
+5,0
+2,777777
+35,0
+2,777777
+7,0
+2,777777
+b,0
+2,777777
+e,0
+2,777777
+5,0
+2,777777
+35,0
+2,777777
+7,0
+2,777777
+b,0
+5,777777
+3,0
+4,777777
+4,0
+2,777777
+5,0
+2,777777
+4,0
+4,777777
+16,0
+2,777777
+2,0
+2,777777
+2,0
+4,777777
+2,0
+5,777777
+4,0
+2,777777
+4,0
+5,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+6,777777
+3,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+2,0
+4,777777
+2,0
+6,777777
+0
+6,777777
+2,0
+4,777777
+17,0
+777777
+2,0
+777777
+3,0
+4,777777
+2,0
+2,777777
+5,0
+6,777777
+2,0
+5,777777
+1aff,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt/a41.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a41.dat
new file mode 100644
index 000000000..4a848ab59
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a41.dat
@@ -0,0 +1,6803 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+4b0,0
+2,1
+d,0
+3,1
+4,0
+3,1
+34,0
+3,1
+7,0
+2,1
+b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+35,0
+2,1
+7,0
+2,1
+b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+35,0
+2,1
+7,0
+2,1
+b,0
+5,1
+3,0
+4,1
+4,0
+2,1
+5,0
+2,1
+4,0
+4,1
+16,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+5,1
+4,0
+2,1
+4,0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+6,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+0
+6,1
+2,0
+4,1
+17,0
+1
+2,0
+1
+3,0
+4,1
+2,0
+2,1
+5,0
+6,1
+2,0
+5,1
+1aff,0
+100 90 32
+4b0,0
+2,2
+d,0
+3,2
+4,0
+3,2
+34,0
+3,2
+7,0
+2,2
+b,0
+2,2
+e,0
+2,2
+5,0
+2,2
+35,0
+2,2
+7,0
+2,2
+b,0
+2,2
+e,0
+2,2
+5,0
+2,2
+35,0
+2,2
+7,0
+2,2
+b,0
+5,2
+3,0
+4,2
+4,0
+2,2
+5,0
+2,2
+4,0
+4,2
+16,0
+2,2
+2,0
+2,2
+2,0
+4,2
+2,0
+5,2
+4,0
+2,2
+4,0
+5,2
+b,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+0
+6,2
+3,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+2,0
+4,2
+2,0
+6,2
+0
+6,2
+2,0
+4,2
+17,0
+2
+2,0
+2
+3,0
+4,2
+2,0
+2,2
+5,0
+6,2
+2,0
+5,2
+1aff,0
+100 90 32
+4b0,0
+2,3
+d,0
+3,3
+4,0
+3,3
+34,0
+3,3
+7,0
+2,3
+b,0
+2,3
+e,0
+2,3
+5,0
+2,3
+35,0
+2,3
+7,0
+2,3
+b,0
+2,3
+e,0
+2,3
+5,0
+2,3
+35,0
+2,3
+7,0
+2,3
+b,0
+5,3
+3,0
+4,3
+4,0
+2,3
+5,0
+2,3
+4,0
+4,3
+16,0
+2,3
+2,0
+2,3
+2,0
+4,3
+2,0
+5,3
+4,0
+2,3
+4,0
+5,3
+b,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+0
+6,3
+3,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+2,0
+4,3
+2,0
+6,3
+0
+6,3
+2,0
+4,3
+17,0
+3
+2,0
+3
+3,0
+4,3
+2,0
+2,3
+5,0
+6,3
+2,0
+5,3
+1aff,0
+100 90 32
+4b0,0
+2,4
+d,0
+3,4
+4,0
+3,4
+34,0
+3,4
+7,0
+2,4
+b,0
+2,4
+e,0
+2,4
+5,0
+2,4
+35,0
+2,4
+7,0
+2,4
+b,0
+2,4
+e,0
+2,4
+5,0
+2,4
+35,0
+2,4
+7,0
+2,4
+b,0
+5,4
+3,0
+4,4
+4,0
+2,4
+5,0
+2,4
+4,0
+4,4
+16,0
+2,4
+2,0
+2,4
+2,0
+4,4
+2,0
+5,4
+4,0
+2,4
+4,0
+5,4
+b,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+0
+6,4
+3,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+2,0
+4,4
+2,0
+6,4
+0
+6,4
+2,0
+4,4
+17,0
+4
+2,0
+4
+3,0
+4,4
+2,0
+2,4
+5,0
+6,4
+2,0
+5,4
+1aff,0
+100 90 32
+4b0,0
+2,6
+d,0
+3,6
+4,0
+3,6
+34,0
+3,6
+7,0
+2,6
+b,0
+2,6
+e,0
+2,6
+5,0
+2,6
+35,0
+2,6
+7,0
+2,6
+b,0
+2,6
+e,0
+2,6
+5,0
+2,6
+35,0
+2,6
+7,0
+2,6
+b,0
+5,6
+3,0
+4,6
+4,0
+2,6
+5,0
+2,6
+4,0
+4,6
+16,0
+2,6
+2,0
+2,6
+2,0
+4,6
+2,0
+5,6
+4,0
+2,6
+4,0
+5,6
+b,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+0
+6,6
+3,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+2,0
+4,6
+2,0
+6,6
+0
+6,6
+2,0
+4,6
+17,0
+6
+2,0
+6
+3,0
+4,6
+2,0
+2,6
+5,0
+6,6
+2,0
+5,6
+1aff,0
+100 90 32
+4b0,0
+2,7
+d,0
+3,7
+4,0
+3,7
+34,0
+3,7
+7,0
+2,7
+b,0
+2,7
+e,0
+2,7
+5,0
+2,7
+35,0
+2,7
+7,0
+2,7
+b,0
+2,7
+e,0
+2,7
+5,0
+2,7
+35,0
+2,7
+7,0
+2,7
+b,0
+5,7
+3,0
+4,7
+4,0
+2,7
+5,0
+2,7
+4,0
+4,7
+16,0
+2,7
+2,0
+2,7
+2,0
+4,7
+2,0
+5,7
+4,0
+2,7
+4,0
+5,7
+b,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+0
+6,7
+3,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+2,0
+4,7
+2,0
+6,7
+0
+6,7
+2,0
+4,7
+17,0
+7
+2,0
+7
+3,0
+4,7
+2,0
+2,7
+5,0
+6,7
+2,0
+5,7
+1aff,0
+100 90 32
+4b0,0
+2,10
+d,0
+3,10
+4,0
+3,10
+34,0
+3,10
+7,0
+2,10
+b,0
+2,10
+e,0
+2,10
+5,0
+2,10
+35,0
+2,10
+7,0
+2,10
+b,0
+2,10
+e,0
+2,10
+5,0
+2,10
+35,0
+2,10
+7,0
+2,10
+b,0
+5,10
+3,0
+4,10
+4,0
+2,10
+5,0
+2,10
+4,0
+4,10
+16,0
+2,10
+2,0
+2,10
+2,0
+4,10
+2,0
+5,10
+4,0
+2,10
+4,0
+5,10
+b,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+0
+6,10
+3,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+2,0
+4,10
+2,0
+6,10
+0
+6,10
+2,0
+4,10
+17,0
+10
+2,0
+10
+3,0
+4,10
+2,0
+2,10
+5,0
+6,10
+2,0
+5,10
+1aff,0
+100 90 32
+4b0,0
+2,33
+d,0
+3,33
+4,0
+3,33
+34,0
+3,33
+7,0
+2,33
+b,0
+2,33
+e,0
+2,33
+5,0
+2,33
+35,0
+2,33
+7,0
+2,33
+b,0
+2,33
+e,0
+2,33
+5,0
+2,33
+35,0
+2,33
+7,0
+2,33
+b,0
+5,33
+3,0
+4,33
+4,0
+2,33
+5,0
+2,33
+4,0
+4,33
+16,0
+2,33
+2,0
+2,33
+2,0
+4,33
+2,0
+5,33
+4,0
+2,33
+4,0
+5,33
+b,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+0
+6,33
+3,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+2,0
+4,33
+2,0
+6,33
+0
+6,33
+2,0
+4,33
+17,0
+33
+2,0
+33
+3,0
+4,33
+2,0
+2,33
+5,0
+6,33
+2,0
+5,33
+1aff,0
+100 90 32
+4b0,0
+2,81
+d,0
+3,81
+4,0
+3,81
+34,0
+3,81
+7,0
+2,81
+b,0
+2,81
+e,0
+2,81
+5,0
+2,81
+35,0
+2,81
+7,0
+2,81
+b,0
+2,81
+e,0
+2,81
+5,0
+2,81
+35,0
+2,81
+7,0
+2,81
+b,0
+5,81
+3,0
+4,81
+4,0
+2,81
+5,0
+2,81
+4,0
+4,81
+16,0
+2,81
+2,0
+2,81
+2,0
+4,81
+2,0
+5,81
+4,0
+2,81
+4,0
+5,81
+b,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+0
+6,81
+3,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+2,0
+4,81
+2,0
+6,81
+0
+6,81
+2,0
+4,81
+17,0
+81
+2,0
+81
+3,0
+4,81
+2,0
+2,81
+5,0
+6,81
+2,0
+5,81
+1aff,0
+100 90 32
+4b0,0
+2,a3
+d,0
+3,a3
+4,0
+3,a3
+34,0
+3,a3
+7,0
+2,a3
+b,0
+2,a3
+e,0
+2,a3
+5,0
+2,a3
+35,0
+2,a3
+7,0
+2,a3
+b,0
+2,a3
+e,0
+2,a3
+5,0
+2,a3
+35,0
+2,a3
+7,0
+2,a3
+b,0
+5,a3
+3,0
+4,a3
+4,0
+2,a3
+5,0
+2,a3
+4,0
+4,a3
+16,0
+2,a3
+2,0
+2,a3
+2,0
+4,a3
+2,0
+5,a3
+4,0
+2,a3
+4,0
+5,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+6,a3
+3,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+2,0
+4,a3
+2,0
+6,a3
+0
+6,a3
+2,0
+4,a3
+17,0
+a3
+2,0
+a3
+3,0
+4,a3
+2,0
+2,a3
+5,0
+6,a3
+2,0
+5,a3
+1aff,0
+100 90 32
+4b0,0
+2,ff
+d,0
+3,ff
+4,0
+3,ff
+34,0
+3,ff
+7,0
+2,ff
+b,0
+2,ff
+e,0
+2,ff
+5,0
+2,ff
+35,0
+2,ff
+7,0
+2,ff
+b,0
+2,ff
+e,0
+2,ff
+5,0
+2,ff
+35,0
+2,ff
+7,0
+2,ff
+b,0
+5,ff
+3,0
+4,ff
+4,0
+2,ff
+5,0
+2,ff
+4,0
+4,ff
+16,0
+2,ff
+2,0
+2,ff
+2,0
+4,ff
+2,0
+5,ff
+4,0
+2,ff
+4,0
+5,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+6,ff
+3,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+2,0
+4,ff
+2,0
+6,ff
+0
+6,ff
+2,0
+4,ff
+17,0
+ff
+2,0
+ff
+3,0
+4,ff
+2,0
+2,ff
+5,0
+6,ff
+2,0
+5,ff
+1aff,0
+100 90 32
+4b0,0
+2,100
+d,0
+3,100
+4,0
+3,100
+34,0
+3,100
+7,0
+2,100
+b,0
+2,100
+e,0
+2,100
+5,0
+2,100
+35,0
+2,100
+7,0
+2,100
+b,0
+2,100
+e,0
+2,100
+5,0
+2,100
+35,0
+2,100
+7,0
+2,100
+b,0
+5,100
+3,0
+4,100
+4,0
+2,100
+5,0
+2,100
+4,0
+4,100
+16,0
+2,100
+2,0
+2,100
+2,0
+4,100
+2,0
+5,100
+4,0
+2,100
+4,0
+5,100
+b,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+0
+6,100
+3,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+2,0
+4,100
+2,0
+6,100
+0
+6,100
+2,0
+4,100
+17,0
+100
+2,0
+100
+3,0
+4,100
+2,0
+2,100
+5,0
+6,100
+2,0
+5,100
+1aff,0
+100 90 32
+4b0,0
+2,12c
+d,0
+3,12c
+4,0
+3,12c
+34,0
+3,12c
+7,0
+2,12c
+b,0
+2,12c
+e,0
+2,12c
+5,0
+2,12c
+35,0
+2,12c
+7,0
+2,12c
+b,0
+2,12c
+e,0
+2,12c
+5,0
+2,12c
+35,0
+2,12c
+7,0
+2,12c
+b,0
+5,12c
+3,0
+4,12c
+4,0
+2,12c
+5,0
+2,12c
+4,0
+4,12c
+16,0
+2,12c
+2,0
+2,12c
+2,0
+4,12c
+2,0
+5,12c
+4,0
+2,12c
+4,0
+5,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+6,12c
+3,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+2,0
+4,12c
+2,0
+6,12c
+0
+6,12c
+2,0
+4,12c
+17,0
+12c
+2,0
+12c
+3,0
+4,12c
+2,0
+2,12c
+5,0
+6,12c
+2,0
+5,12c
+1aff,0
+100 90 32
+4b0,0
+2,3e8
+d,0
+3,3e8
+4,0
+3,3e8
+34,0
+3,3e8
+7,0
+2,3e8
+b,0
+2,3e8
+e,0
+2,3e8
+5,0
+2,3e8
+35,0
+2,3e8
+7,0
+2,3e8
+b,0
+2,3e8
+e,0
+2,3e8
+5,0
+2,3e8
+35,0
+2,3e8
+7,0
+2,3e8
+b,0
+5,3e8
+3,0
+4,3e8
+4,0
+2,3e8
+5,0
+2,3e8
+4,0
+4,3e8
+16,0
+2,3e8
+2,0
+2,3e8
+2,0
+4,3e8
+2,0
+5,3e8
+4,0
+2,3e8
+4,0
+5,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+6,3e8
+3,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+2,0
+4,3e8
+2,0
+6,3e8
+0
+6,3e8
+2,0
+4,3e8
+17,0
+3e8
+2,0
+3e8
+3,0
+4,3e8
+2,0
+2,3e8
+5,0
+6,3e8
+2,0
+5,3e8
+1aff,0
+100 90 32
+4b0,0
+2,111111
+d,0
+3,111111
+4,0
+3,111111
+34,0
+3,111111
+7,0
+2,111111
+b,0
+2,111111
+e,0
+2,111111
+5,0
+2,111111
+35,0
+2,111111
+7,0
+2,111111
+b,0
+2,111111
+e,0
+2,111111
+5,0
+2,111111
+35,0
+2,111111
+7,0
+2,111111
+b,0
+5,111111
+3,0
+4,111111
+4,0
+2,111111
+5,0
+2,111111
+4,0
+4,111111
+16,0
+2,111111
+2,0
+2,111111
+2,0
+4,111111
+2,0
+5,111111
+4,0
+2,111111
+4,0
+5,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+6,111111
+3,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+2,0
+4,111111
+2,0
+6,111111
+0
+6,111111
+2,0
+4,111111
+17,0
+111111
+2,0
+111111
+3,0
+4,111111
+2,0
+2,111111
+5,0
+6,111111
+2,0
+5,111111
+1aff,0
+100 90 32
+4b0,0
+2,400200
+d,0
+3,400200
+4,0
+3,400200
+34,0
+3,400200
+7,0
+2,400200
+b,0
+2,400200
+e,0
+2,400200
+5,0
+2,400200
+35,0
+2,400200
+7,0
+2,400200
+b,0
+2,400200
+e,0
+2,400200
+5,0
+2,400200
+35,0
+2,400200
+7,0
+2,400200
+b,0
+5,400200
+3,0
+4,400200
+4,0
+2,400200
+5,0
+2,400200
+4,0
+4,400200
+16,0
+2,400200
+2,0
+2,400200
+2,0
+4,400200
+2,0
+5,400200
+4,0
+2,400200
+4,0
+5,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+6,400200
+3,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+2,0
+4,400200
+2,0
+6,400200
+0
+6,400200
+2,0
+4,400200
+17,0
+400200
+2,0
+400200
+3,0
+4,400200
+2,0
+2,400200
+5,0
+6,400200
+2,0
+5,400200
+1aff,0
+100 90 32
+4b0,0
+2,777777
+d,0
+3,777777
+4,0
+3,777777
+34,0
+3,777777
+7,0
+2,777777
+b,0
+2,777777
+e,0
+2,777777
+5,0
+2,777777
+35,0
+2,777777
+7,0
+2,777777
+b,0
+2,777777
+e,0
+2,777777
+5,0
+2,777777
+35,0
+2,777777
+7,0
+2,777777
+b,0
+5,777777
+3,0
+4,777777
+4,0
+2,777777
+5,0
+2,777777
+4,0
+4,777777
+16,0
+2,777777
+2,0
+2,777777
+2,0
+4,777777
+2,0
+5,777777
+4,0
+2,777777
+4,0
+5,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+6,777777
+3,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+2,0
+4,777777
+2,0
+6,777777
+0
+6,777777
+2,0
+4,777777
+17,0
+777777
+2,0
+777777
+3,0
+4,777777
+2,0
+2,777777
+5,0
+6,777777
+2,0
+5,777777
+1aff,0
+100 90 32
+4b0,0
+2,1
+d,0
+3,1
+4,0
+3,1
+34,0
+3,1
+7,0
+2,1
+b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+35,0
+2,1
+7,0
+2,1
+b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+35,0
+2,1
+7,0
+2,1
+b,0
+5,1
+3,0
+4,1
+4,0
+2,1
+5,0
+2,1
+4,0
+4,1
+16,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+5,1
+4,0
+2,1
+4,0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+6,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+6,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+2,0
+4,1
+2,0
+6,1
+0
+6,1
+2,0
+4,1
+17,0
+1
+2,0
+1
+3,0
+4,1
+2,0
+2,1
+5,0
+6,1
+2,0
+5,1
+1aff,0
+100 90 32
+4b0,0
+2,2
+d,0
+3,2
+4,0
+3,2
+34,0
+3,2
+7,0
+2,2
+b,0
+2,2
+e,0
+2,2
+5,0
+2,2
+35,0
+2,2
+7,0
+2,2
+b,0
+2,2
+e,0
+2,2
+5,0
+2,2
+35,0
+2,2
+7,0
+2,2
+b,0
+5,2
+3,0
+4,2
+4,0
+2,2
+5,0
+2,2
+4,0
+4,2
+16,0
+2,2
+2,0
+2,2
+2,0
+4,2
+2,0
+5,2
+4,0
+2,2
+4,0
+5,2
+b,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+0
+6,2
+3,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+0
+2,2
+2,0
+2,2
+3,0
+2,2
+5,0
+2,2
+3,0
+2,2
+2,0
+2,2
+15,0
+6,2
+0
+2,2
+2,0
+2,2
+0
+2,2
+7,0
+2,2
+3,0
+2,2
+2,0
+2,2
+b,0
+2,2
+2,0
+2,2
+2,0
+4,2
+2,0
+6,2
+0
+6,2
+2,0
+4,2
+17,0
+2
+2,0
+2
+3,0
+4,2
+2,0
+2,2
+5,0
+6,2
+2,0
+5,2
+1aff,0
+100 90 32
+4b0,0
+2,3
+d,0
+3,3
+4,0
+3,3
+34,0
+3,3
+7,0
+2,3
+b,0
+2,3
+e,0
+2,3
+5,0
+2,3
+35,0
+2,3
+7,0
+2,3
+b,0
+2,3
+e,0
+2,3
+5,0
+2,3
+35,0
+2,3
+7,0
+2,3
+b,0
+5,3
+3,0
+4,3
+4,0
+2,3
+5,0
+2,3
+4,0
+4,3
+16,0
+2,3
+2,0
+2,3
+2,0
+4,3
+2,0
+5,3
+4,0
+2,3
+4,0
+5,3
+b,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+0
+6,3
+3,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+0
+2,3
+2,0
+2,3
+3,0
+2,3
+5,0
+2,3
+3,0
+2,3
+2,0
+2,3
+15,0
+6,3
+0
+2,3
+2,0
+2,3
+0
+2,3
+7,0
+2,3
+3,0
+2,3
+2,0
+2,3
+b,0
+2,3
+2,0
+2,3
+2,0
+4,3
+2,0
+6,3
+0
+6,3
+2,0
+4,3
+17,0
+3
+2,0
+3
+3,0
+4,3
+2,0
+2,3
+5,0
+6,3
+2,0
+5,3
+1aff,0
+100 90 32
+4b0,0
+2,4
+d,0
+3,4
+4,0
+3,4
+34,0
+3,4
+7,0
+2,4
+b,0
+2,4
+e,0
+2,4
+5,0
+2,4
+35,0
+2,4
+7,0
+2,4
+b,0
+2,4
+e,0
+2,4
+5,0
+2,4
+35,0
+2,4
+7,0
+2,4
+b,0
+5,4
+3,0
+4,4
+4,0
+2,4
+5,0
+2,4
+4,0
+4,4
+16,0
+2,4
+2,0
+2,4
+2,0
+4,4
+2,0
+5,4
+4,0
+2,4
+4,0
+5,4
+b,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+0
+6,4
+3,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+0
+2,4
+2,0
+2,4
+3,0
+2,4
+5,0
+2,4
+3,0
+2,4
+2,0
+2,4
+15,0
+6,4
+0
+2,4
+2,0
+2,4
+0
+2,4
+7,0
+2,4
+3,0
+2,4
+2,0
+2,4
+b,0
+2,4
+2,0
+2,4
+2,0
+4,4
+2,0
+6,4
+0
+6,4
+2,0
+4,4
+17,0
+4
+2,0
+4
+3,0
+4,4
+2,0
+2,4
+5,0
+6,4
+2,0
+5,4
+1aff,0
+100 90 32
+4b0,0
+2,6
+d,0
+3,6
+4,0
+3,6
+34,0
+3,6
+7,0
+2,6
+b,0
+2,6
+e,0
+2,6
+5,0
+2,6
+35,0
+2,6
+7,0
+2,6
+b,0
+2,6
+e,0
+2,6
+5,0
+2,6
+35,0
+2,6
+7,0
+2,6
+b,0
+5,6
+3,0
+4,6
+4,0
+2,6
+5,0
+2,6
+4,0
+4,6
+16,0
+2,6
+2,0
+2,6
+2,0
+4,6
+2,0
+5,6
+4,0
+2,6
+4,0
+5,6
+b,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+0
+6,6
+3,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+0
+2,6
+2,0
+2,6
+3,0
+2,6
+5,0
+2,6
+3,0
+2,6
+2,0
+2,6
+15,0
+6,6
+0
+2,6
+2,0
+2,6
+0
+2,6
+7,0
+2,6
+3,0
+2,6
+2,0
+2,6
+b,0
+2,6
+2,0
+2,6
+2,0
+4,6
+2,0
+6,6
+0
+6,6
+2,0
+4,6
+17,0
+6
+2,0
+6
+3,0
+4,6
+2,0
+2,6
+5,0
+6,6
+2,0
+5,6
+1aff,0
+100 90 32
+4b0,0
+2,7
+d,0
+3,7
+4,0
+3,7
+34,0
+3,7
+7,0
+2,7
+b,0
+2,7
+e,0
+2,7
+5,0
+2,7
+35,0
+2,7
+7,0
+2,7
+b,0
+2,7
+e,0
+2,7
+5,0
+2,7
+35,0
+2,7
+7,0
+2,7
+b,0
+5,7
+3,0
+4,7
+4,0
+2,7
+5,0
+2,7
+4,0
+4,7
+16,0
+2,7
+2,0
+2,7
+2,0
+4,7
+2,0
+5,7
+4,0
+2,7
+4,0
+5,7
+b,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+0
+6,7
+3,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+0
+2,7
+2,0
+2,7
+3,0
+2,7
+5,0
+2,7
+3,0
+2,7
+2,0
+2,7
+15,0
+6,7
+0
+2,7
+2,0
+2,7
+0
+2,7
+7,0
+2,7
+3,0
+2,7
+2,0
+2,7
+b,0
+2,7
+2,0
+2,7
+2,0
+4,7
+2,0
+6,7
+0
+6,7
+2,0
+4,7
+17,0
+7
+2,0
+7
+3,0
+4,7
+2,0
+2,7
+5,0
+6,7
+2,0
+5,7
+1aff,0
+100 90 32
+4b0,0
+2,10
+d,0
+3,10
+4,0
+3,10
+34,0
+3,10
+7,0
+2,10
+b,0
+2,10
+e,0
+2,10
+5,0
+2,10
+35,0
+2,10
+7,0
+2,10
+b,0
+2,10
+e,0
+2,10
+5,0
+2,10
+35,0
+2,10
+7,0
+2,10
+b,0
+5,10
+3,0
+4,10
+4,0
+2,10
+5,0
+2,10
+4,0
+4,10
+16,0
+2,10
+2,0
+2,10
+2,0
+4,10
+2,0
+5,10
+4,0
+2,10
+4,0
+5,10
+b,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+0
+6,10
+3,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+0
+2,10
+2,0
+2,10
+3,0
+2,10
+5,0
+2,10
+3,0
+2,10
+2,0
+2,10
+15,0
+6,10
+0
+2,10
+2,0
+2,10
+0
+2,10
+7,0
+2,10
+3,0
+2,10
+2,0
+2,10
+b,0
+2,10
+2,0
+2,10
+2,0
+4,10
+2,0
+6,10
+0
+6,10
+2,0
+4,10
+17,0
+10
+2,0
+10
+3,0
+4,10
+2,0
+2,10
+5,0
+6,10
+2,0
+5,10
+1aff,0
+100 90 32
+4b0,0
+2,33
+d,0
+3,33
+4,0
+3,33
+34,0
+3,33
+7,0
+2,33
+b,0
+2,33
+e,0
+2,33
+5,0
+2,33
+35,0
+2,33
+7,0
+2,33
+b,0
+2,33
+e,0
+2,33
+5,0
+2,33
+35,0
+2,33
+7,0
+2,33
+b,0
+5,33
+3,0
+4,33
+4,0
+2,33
+5,0
+2,33
+4,0
+4,33
+16,0
+2,33
+2,0
+2,33
+2,0
+4,33
+2,0
+5,33
+4,0
+2,33
+4,0
+5,33
+b,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+0
+6,33
+3,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+0
+2,33
+2,0
+2,33
+3,0
+2,33
+5,0
+2,33
+3,0
+2,33
+2,0
+2,33
+15,0
+6,33
+0
+2,33
+2,0
+2,33
+0
+2,33
+7,0
+2,33
+3,0
+2,33
+2,0
+2,33
+b,0
+2,33
+2,0
+2,33
+2,0
+4,33
+2,0
+6,33
+0
+6,33
+2,0
+4,33
+17,0
+33
+2,0
+33
+3,0
+4,33
+2,0
+2,33
+5,0
+6,33
+2,0
+5,33
+1aff,0
+100 90 32
+4b0,0
+2,81
+d,0
+3,81
+4,0
+3,81
+34,0
+3,81
+7,0
+2,81
+b,0
+2,81
+e,0
+2,81
+5,0
+2,81
+35,0
+2,81
+7,0
+2,81
+b,0
+2,81
+e,0
+2,81
+5,0
+2,81
+35,0
+2,81
+7,0
+2,81
+b,0
+5,81
+3,0
+4,81
+4,0
+2,81
+5,0
+2,81
+4,0
+4,81
+16,0
+2,81
+2,0
+2,81
+2,0
+4,81
+2,0
+5,81
+4,0
+2,81
+4,0
+5,81
+b,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+0
+6,81
+3,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+0
+2,81
+2,0
+2,81
+3,0
+2,81
+5,0
+2,81
+3,0
+2,81
+2,0
+2,81
+15,0
+6,81
+0
+2,81
+2,0
+2,81
+0
+2,81
+7,0
+2,81
+3,0
+2,81
+2,0
+2,81
+b,0
+2,81
+2,0
+2,81
+2,0
+4,81
+2,0
+6,81
+0
+6,81
+2,0
+4,81
+17,0
+81
+2,0
+81
+3,0
+4,81
+2,0
+2,81
+5,0
+6,81
+2,0
+5,81
+1aff,0
+100 90 32
+4b0,0
+2,a3
+d,0
+3,a3
+4,0
+3,a3
+34,0
+3,a3
+7,0
+2,a3
+b,0
+2,a3
+e,0
+2,a3
+5,0
+2,a3
+35,0
+2,a3
+7,0
+2,a3
+b,0
+2,a3
+e,0
+2,a3
+5,0
+2,a3
+35,0
+2,a3
+7,0
+2,a3
+b,0
+5,a3
+3,0
+4,a3
+4,0
+2,a3
+5,0
+2,a3
+4,0
+4,a3
+16,0
+2,a3
+2,0
+2,a3
+2,0
+4,a3
+2,0
+5,a3
+4,0
+2,a3
+4,0
+5,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+6,a3
+3,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+0
+2,a3
+2,0
+2,a3
+3,0
+2,a3
+5,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+15,0
+6,a3
+0
+2,a3
+2,0
+2,a3
+0
+2,a3
+7,0
+2,a3
+3,0
+2,a3
+2,0
+2,a3
+b,0
+2,a3
+2,0
+2,a3
+2,0
+4,a3
+2,0
+6,a3
+0
+6,a3
+2,0
+4,a3
+17,0
+a3
+2,0
+a3
+3,0
+4,a3
+2,0
+2,a3
+5,0
+6,a3
+2,0
+5,a3
+1aff,0
+100 90 32
+4b0,0
+2,ff
+d,0
+3,ff
+4,0
+3,ff
+34,0
+3,ff
+7,0
+2,ff
+b,0
+2,ff
+e,0
+2,ff
+5,0
+2,ff
+35,0
+2,ff
+7,0
+2,ff
+b,0
+2,ff
+e,0
+2,ff
+5,0
+2,ff
+35,0
+2,ff
+7,0
+2,ff
+b,0
+5,ff
+3,0
+4,ff
+4,0
+2,ff
+5,0
+2,ff
+4,0
+4,ff
+16,0
+2,ff
+2,0
+2,ff
+2,0
+4,ff
+2,0
+5,ff
+4,0
+2,ff
+4,0
+5,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+6,ff
+3,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+0
+2,ff
+2,0
+2,ff
+3,0
+2,ff
+5,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+15,0
+6,ff
+0
+2,ff
+2,0
+2,ff
+0
+2,ff
+7,0
+2,ff
+3,0
+2,ff
+2,0
+2,ff
+b,0
+2,ff
+2,0
+2,ff
+2,0
+4,ff
+2,0
+6,ff
+0
+6,ff
+2,0
+4,ff
+17,0
+ff
+2,0
+ff
+3,0
+4,ff
+2,0
+2,ff
+5,0
+6,ff
+2,0
+5,ff
+1aff,0
+100 90 32
+4b0,0
+2,100
+d,0
+3,100
+4,0
+3,100
+34,0
+3,100
+7,0
+2,100
+b,0
+2,100
+e,0
+2,100
+5,0
+2,100
+35,0
+2,100
+7,0
+2,100
+b,0
+2,100
+e,0
+2,100
+5,0
+2,100
+35,0
+2,100
+7,0
+2,100
+b,0
+5,100
+3,0
+4,100
+4,0
+2,100
+5,0
+2,100
+4,0
+4,100
+16,0
+2,100
+2,0
+2,100
+2,0
+4,100
+2,0
+5,100
+4,0
+2,100
+4,0
+5,100
+b,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+0
+6,100
+3,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+0
+2,100
+2,0
+2,100
+3,0
+2,100
+5,0
+2,100
+3,0
+2,100
+2,0
+2,100
+15,0
+6,100
+0
+2,100
+2,0
+2,100
+0
+2,100
+7,0
+2,100
+3,0
+2,100
+2,0
+2,100
+b,0
+2,100
+2,0
+2,100
+2,0
+4,100
+2,0
+6,100
+0
+6,100
+2,0
+4,100
+17,0
+100
+2,0
+100
+3,0
+4,100
+2,0
+2,100
+5,0
+6,100
+2,0
+5,100
+1aff,0
+100 90 32
+4b0,0
+2,12c
+d,0
+3,12c
+4,0
+3,12c
+34,0
+3,12c
+7,0
+2,12c
+b,0
+2,12c
+e,0
+2,12c
+5,0
+2,12c
+35,0
+2,12c
+7,0
+2,12c
+b,0
+2,12c
+e,0
+2,12c
+5,0
+2,12c
+35,0
+2,12c
+7,0
+2,12c
+b,0
+5,12c
+3,0
+4,12c
+4,0
+2,12c
+5,0
+2,12c
+4,0
+4,12c
+16,0
+2,12c
+2,0
+2,12c
+2,0
+4,12c
+2,0
+5,12c
+4,0
+2,12c
+4,0
+5,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+6,12c
+3,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+0
+2,12c
+2,0
+2,12c
+3,0
+2,12c
+5,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+15,0
+6,12c
+0
+2,12c
+2,0
+2,12c
+0
+2,12c
+7,0
+2,12c
+3,0
+2,12c
+2,0
+2,12c
+b,0
+2,12c
+2,0
+2,12c
+2,0
+4,12c
+2,0
+6,12c
+0
+6,12c
+2,0
+4,12c
+17,0
+12c
+2,0
+12c
+3,0
+4,12c
+2,0
+2,12c
+5,0
+6,12c
+2,0
+5,12c
+1aff,0
+100 90 32
+4b0,0
+2,3e8
+d,0
+3,3e8
+4,0
+3,3e8
+34,0
+3,3e8
+7,0
+2,3e8
+b,0
+2,3e8
+e,0
+2,3e8
+5,0
+2,3e8
+35,0
+2,3e8
+7,0
+2,3e8
+b,0
+2,3e8
+e,0
+2,3e8
+5,0
+2,3e8
+35,0
+2,3e8
+7,0
+2,3e8
+b,0
+5,3e8
+3,0
+4,3e8
+4,0
+2,3e8
+5,0
+2,3e8
+4,0
+4,3e8
+16,0
+2,3e8
+2,0
+2,3e8
+2,0
+4,3e8
+2,0
+5,3e8
+4,0
+2,3e8
+4,0
+5,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+6,3e8
+3,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+2,0
+2,3e8
+3,0
+2,3e8
+5,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+15,0
+6,3e8
+0
+2,3e8
+2,0
+2,3e8
+0
+2,3e8
+7,0
+2,3e8
+3,0
+2,3e8
+2,0
+2,3e8
+b,0
+2,3e8
+2,0
+2,3e8
+2,0
+4,3e8
+2,0
+6,3e8
+0
+6,3e8
+2,0
+4,3e8
+17,0
+3e8
+2,0
+3e8
+3,0
+4,3e8
+2,0
+2,3e8
+5,0
+6,3e8
+2,0
+5,3e8
+1aff,0
+100 90 32
+4b0,0
+2,111111
+d,0
+3,111111
+4,0
+3,111111
+34,0
+3,111111
+7,0
+2,111111
+b,0
+2,111111
+e,0
+2,111111
+5,0
+2,111111
+35,0
+2,111111
+7,0
+2,111111
+b,0
+2,111111
+e,0
+2,111111
+5,0
+2,111111
+35,0
+2,111111
+7,0
+2,111111
+b,0
+5,111111
+3,0
+4,111111
+4,0
+2,111111
+5,0
+2,111111
+4,0
+4,111111
+16,0
+2,111111
+2,0
+2,111111
+2,0
+4,111111
+2,0
+5,111111
+4,0
+2,111111
+4,0
+5,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+6,111111
+3,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+0
+2,111111
+2,0
+2,111111
+3,0
+2,111111
+5,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+15,0
+6,111111
+0
+2,111111
+2,0
+2,111111
+0
+2,111111
+7,0
+2,111111
+3,0
+2,111111
+2,0
+2,111111
+b,0
+2,111111
+2,0
+2,111111
+2,0
+4,111111
+2,0
+6,111111
+0
+6,111111
+2,0
+4,111111
+17,0
+111111
+2,0
+111111
+3,0
+4,111111
+2,0
+2,111111
+5,0
+6,111111
+2,0
+5,111111
+1aff,0
+100 90 32
+4b0,0
+2,400200
+d,0
+3,400200
+4,0
+3,400200
+34,0
+3,400200
+7,0
+2,400200
+b,0
+2,400200
+e,0
+2,400200
+5,0
+2,400200
+35,0
+2,400200
+7,0
+2,400200
+b,0
+2,400200
+e,0
+2,400200
+5,0
+2,400200
+35,0
+2,400200
+7,0
+2,400200
+b,0
+5,400200
+3,0
+4,400200
+4,0
+2,400200
+5,0
+2,400200
+4,0
+4,400200
+16,0
+2,400200
+2,0
+2,400200
+2,0
+4,400200
+2,0
+5,400200
+4,0
+2,400200
+4,0
+5,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+6,400200
+3,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+0
+2,400200
+2,0
+2,400200
+3,0
+2,400200
+5,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+15,0
+6,400200
+0
+2,400200
+2,0
+2,400200
+0
+2,400200
+7,0
+2,400200
+3,0
+2,400200
+2,0
+2,400200
+b,0
+2,400200
+2,0
+2,400200
+2,0
+4,400200
+2,0
+6,400200
+0
+6,400200
+2,0
+4,400200
+17,0
+400200
+2,0
+400200
+3,0
+4,400200
+2,0
+2,400200
+5,0
+6,400200
+2,0
+5,400200
+1aff,0
+100 90 32
+4b0,0
+2,777777
+d,0
+3,777777
+4,0
+3,777777
+34,0
+3,777777
+7,0
+2,777777
+b,0
+2,777777
+e,0
+2,777777
+5,0
+2,777777
+35,0
+2,777777
+7,0
+2,777777
+b,0
+2,777777
+e,0
+2,777777
+5,0
+2,777777
+35,0
+2,777777
+7,0
+2,777777
+b,0
+5,777777
+3,0
+4,777777
+4,0
+2,777777
+5,0
+2,777777
+4,0
+4,777777
+16,0
+2,777777
+2,0
+2,777777
+2,0
+4,777777
+2,0
+5,777777
+4,0
+2,777777
+4,0
+5,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+6,777777
+3,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+0
+2,777777
+2,0
+2,777777
+3,0
+2,777777
+5,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+15,0
+6,777777
+0
+2,777777
+2,0
+2,777777
+0
+2,777777
+7,0
+2,777777
+3,0
+2,777777
+2,0
+2,777777
+b,0
+2,777777
+2,0
+2,777777
+2,0
+4,777777
+2,0
+6,777777
+0
+6,777777
+2,0
+4,777777
+17,0
+777777
+2,0
+777777
+3,0
+4,777777
+2,0
+2,777777
+5,0
+6,777777
+2,0
+5,777777
+1aff,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt/a43.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a43.dat
new file mode 100644
index 000000000..f580c7539
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a43.dat
@@ -0,0 +1,1911 @@
+! $XConsortium$
+100 90 32
+4b0,0
+2,1
+e,0
+2,1
+6,0
+1
+34,0
+1
+a,0
+1
+b,0
+2,1
+15,0
+2,1
+35,0
+2,1
+24,0
+2,1
+46,0
+1
+b,0
+1
+7,0
+1
+0
+1
+5,0
+2,1
+5,0
+2,1
+5,0
+3,1
+16,0
+2,1
+3,0
+1
+3,0
+3,1
+2,0
+4,1
+5,0
+2,1
+4,0
+1
+0
+1
+0
+1
+b,0
+2,1
+2,0
+1
+b,0
+2,1
+5,0
+2,1
+3,0
+1
+25,0
+2,1
+0
+2,1
+2,0
+2,1
+d,0
+1
+14,0
+4,1
+3,0
+2,1
+f,0
+1
+19,0
+2,1
+0
+2,1
+2,0
+2,1
+f,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+e,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+6,1
+0
+1
+6,0
+2,1
+7,0
+2,1
+3,0
+2,1
+f,0
+2,1
+9,0
+2,1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+17,0
+4,1
+2,0
+1
+2,0
+2,1
+0
+2,1
+c,0
+2,1
+2,0
+2,1
+f,0
+2,1
+2,0
+4,1
+2,0
+6,1
+9,0
+4,1
+17,0
+1
+2,0
+1
+3,0
+4,1
+9,0
+6,1
+3,0
+4,1
+1aff,0
+100 90 32
+4b0,0
+2,1
+d,0
+1
+0
+1
+4,0
+3,1
+36,0
+1
+7,0
+1
+c,0
+2,1
+f,0
+1
+5,0
+2,1
+5b,0
+2,1
+45,0
+2,1
+b,0
+5,1
+3,0
+4,1
+b,0
+2,1
+4,0
+4,1
+16,0
+2,1
+2,0
+2,1
+2,0
+1
+6,0
+4,1
+4,0
+2,1
+4,0
+4,1
+c,0
+2,1
+9,0
+2,1
+3,0
+2,1
+5,0
+2,1
+22,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+8,0
+2,1
+3,0
+1
+f,0
+2,1
+0
+6,1
+3,0
+2,1
+a,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+8,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+a,0
+2,1
+5,0
+2,1
+3,0
+2,1
+1c,0
+3,1
+0
+2,1
+2,0
+1
+3,0
+1
+c,0
+2,1
+2,0
+2,1
+b,0
+1
+6,0
+2,1
+7,0
+1
+6,0
+2,1
+7,0
+2,1
+15,0
+3,1
+4,0
+2,1
+3,0
+1
+0
+2,1
+7,0
+2,1
+7,0
+2,1
+c,0
+1
+2,0
+2,1
+b,0
+3,1
+0
+1
+3,0
+2,1
+2,0
+2,1
+22,0
+2,1
+2,0
+1
+6,0
+3,1
+1b09,0
+100 90 32
+4b0,0
+2,1
+f,0
+1
+6,0
+1
+35,0
+2,1
+24,0
+2,1
+3c,0
+2,1
+7,0
+2,1
+b,0
+1
+17,0
+1
+4f,0
+1
+b,0
+2,1
+b,0
+3,1
+17,0
+1
+7,0
+3,1
+c,0
+2,1
+6,0
+3,1
+b,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+b,0
+1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+3,0
+1
+3,0
+2,1
+3,0
+2,1
+13,0
+2,1
+0
+6,1
+3,0
+1
+b,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+e,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+e,0
+2,1
+3,0
+2,1
+2,0
+1
+16,0
+2,1
+c,0
+2,1
+7,0
+2,1
+14,0
+2,1
+9,0
+2,1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+17,0
+4,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+c,0
+2,1
+2,0
+2,1
+b,0
+1
+3,0
+2,1
+2,0
+4,1
+2,0
+1
+6,0
+4,1
+4,0
+4,1
+17,0
+1
+2,0
+1
+9,0
+2,1
+5,0
+6,1
+2,0
+3,1
+1b01,0
+100 90 32
+4b0,0
+2,1
+d,0
+3,1
+4,0
+1
+0
+1
+34,0
+3,1
+8,0
+1
+b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+3f,0
+1
+59,0
+2,1
+14,0
+2,1
+e,0
+2,1
+25,0
+2,1
+10,0
+1
+1b,0
+1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+19,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+6,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+e,0
+2,1
+25,0
+4,1
+30,0
+2,1
+2,0
+1
+10,0
+2,1
+3,0
+1
+19,0
+2,1
+2,0
+1
+2,0
+2,1
+a,0
+2,1
+3,0
+2,1
+2,0
+1
+c,0
+2,1
+2,0
+2,1
+2,0
+3,1
+5,0
+4,1
+3,0
+2,1
+0
+1
+2,0
+1
+0
+2,1
+17,0
+1
+7,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+1
+1aff,0
+100 90 32
+4b0,0
+1
+e,0
+2,1
+5,0
+3,1
+36,0
+1
+7,0
+1
+d,0
+1
+15,0
+2,1
+35,0
+2,1
+7,0
+1
+c,0
+1
+10,0
+1
+5,0
+2,1
+36,0
+1
+8,0
+1
+b,0
+1
+0
+1
+5,0
+1
+0
+1
+6,0
+1
+b,0
+1
+0
+1
+17,0
+1
+3,0
+1
+5,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+0
+1
+0
+1
+c,0
+1
+2,0
+2,1
+5,0
+1
+4,0
+1
+6,0
+2,1
+3,0
+1
+3,0
+1
+17,0
+1
+5,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+1
+d,0
+1
+d,0
+1
+2,0
+2,1
+0
+1
+0
+1
+0
+1
+4,0
+1
+6,0
+2,1
+3,0
+1
+3,0
+1
+17,0
+1
+3,0
+1
+0
+2,1
+2,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+d,0
+1
+2,0
+2,1
+0
+1
+8,0
+2,1
+5,0
+2,1
+3,0
+1
+3,0
+2,1
+15,0
+2,1
+0
+1
+0
+1
+0
+2,1
+2,0
+1
+2,0
+2,1
+8,0
+1
+3,0
+1
+3,0
+2,1
+c,0
+1
+2,0
+2,1
+0
+1
+3,0
+1
+4,0
+1
+6,0
+2,1
+3,0
+1
+3,0
+1
+17,0
+1
+0
+1
+0
+1
+0
+2,1
+2,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+d,0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+4,0
+1
+0
+1
+4,0
+3,1
+4,0
+1
+0
+1
+17,0
+1
+6,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+1b00,0
+100 90 32
+4b1,0
+1
+15,0
+2,1
+34,0
+1
+9,0
+1
+d,0
+1
+4d,0
+1
+7,0
+1
+c,0
+1
+10,0
+1
+6,0
+1
+35,0
+1
+9,0
+1
+b,0
+1
+0
+1
+0
+1
+3,0
+1
+0
+1
+6,0
+1
+5,0
+2,1
+4,0
+1
+0
+1
+17,0
+1
+3,0
+1
+3,0
+3,1
+3,0
+1
+0
+1
+6,0
+1
+5,0
+1
+0
+1
+0
+1
+b,0
+1
+3,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+5,0
+2,1
+4,0
+1
+2,0
+2,1
+15,0
+2,1
+2,0
+1
+2,0
+2,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+3,0
+1
+4,0
+2,1
+3,0
+1
+b,0
+1
+3,0
+2,1
+0
+2,1
+0
+1
+0
+1
+4,0
+1
+5,0
+2,1
+4,0
+1
+3,0
+1
+15,0
+1
+3,0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+8,0
+1
+4,0
+2,1
+3,0
+1
+b,0
+1
+4,0
+1
+0
+1
+9,0
+1
+6,0
+1
+4,0
+1
+3,0
+1
+15,0
+1
+0
+1
+0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+8,0
+1
+4,0
+1
+4,0
+1
+c,0
+1
+9,0
+1
+10,0
+1
+3,0
+1
+17,0
+1
+0
+1
+0
+1
+5,0
+1
+3,0
+1
+8,0
+1
+7,0
+1
+d,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+1
+6,0
+1
+4,0
+4,1
+3,0
+1
+0
+1
+17,0
+1
+6,0
+3,1
+4,0
+1
+6,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+1
+1b00,0
+100 90 32
+4b0,0
+2,1
+d,0
+1
+0
+1
+4,0
+3,1
+36,0
+1
+7,0
+1
+c,0
+2,1
+f,0
+1
+5,0
+2,1
+5b,0
+2,1
+45,0
+2,1
+b,0
+5,1
+3,0
+4,1
+b,0
+2,1
+4,0
+4,1
+16,0
+2,1
+2,0
+2,1
+2,0
+1
+6,0
+4,1
+4,0
+2,1
+4,0
+4,1
+c,0
+2,1
+9,0
+2,1
+3,0
+2,1
+5,0
+2,1
+22,0
+2,1
+5,0
+2,1
+0
+2,1
+2,0
+2,1
+8,0
+2,1
+3,0
+1
+f,0
+2,1
+0
+6,1
+3,0
+2,1
+a,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+1
+8,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+a,0
+2,1
+5,0
+2,1
+3,0
+2,1
+1c,0
+3,1
+0
+2,1
+2,0
+1
+3,0
+1
+c,0
+2,1
+2,0
+2,1
+b,0
+1
+6,0
+2,1
+7,0
+1
+6,0
+2,1
+7,0
+2,1
+15,0
+3,1
+4,0
+2,1
+3,0
+1
+0
+2,1
+7,0
+2,1
+7,0
+2,1
+c,0
+1
+2,0
+2,1
+b,0
+3,1
+0
+1
+3,0
+2,1
+2,0
+2,1
+22,0
+2,1
+2,0
+1
+6,0
+3,1
+1b09,0
+100 90 32
+4b0,0
+2,1
+f,0
+1
+6,0
+1
+35,0
+2,1
+24,0
+2,1
+3c,0
+2,1
+7,0
+2,1
+b,0
+1
+17,0
+1
+4f,0
+1
+b,0
+2,1
+b,0
+3,1
+17,0
+1
+7,0
+3,1
+c,0
+2,1
+6,0
+3,1
+b,0
+1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+b,0
+1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+3,0
+1
+3,0
+2,1
+3,0
+2,1
+13,0
+2,1
+0
+6,1
+3,0
+1
+b,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+e,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+2,1
+e,0
+2,1
+3,0
+2,1
+2,0
+1
+16,0
+2,1
+c,0
+2,1
+7,0
+2,1
+14,0
+2,1
+9,0
+2,1
+3,0
+2,1
+5,0
+2,1
+8,0
+1
+17,0
+4,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+c,0
+2,1
+2,0
+2,1
+b,0
+1
+3,0
+2,1
+2,0
+4,1
+2,0
+1
+6,0
+4,1
+4,0
+4,1
+17,0
+1
+2,0
+1
+9,0
+2,1
+5,0
+6,1
+2,0
+3,1
+1b01,0
+100 90 32
+4b0,0
+2,1
+d,0
+3,1
+4,0
+1
+0
+1
+34,0
+3,1
+8,0
+1
+b,0
+2,1
+e,0
+2,1
+5,0
+2,1
+3f,0
+1
+59,0
+2,1
+14,0
+2,1
+e,0
+2,1
+25,0
+2,1
+10,0
+1
+1b,0
+1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+3,0
+1
+6,0
+2,1
+3,0
+2,1
+2,0
+2,1
+19,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+1
+4,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+2,0
+2,1
+0
+6,1
+3,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+15,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+0
+2,1
+7,0
+2,1
+3,0
+2,1
+2,0
+2,1
+b,0
+2,1
+e,0
+2,1
+25,0
+4,1
+30,0
+2,1
+2,0
+1
+10,0
+2,1
+3,0
+1
+19,0
+2,1
+2,0
+1
+2,0
+2,1
+a,0
+2,1
+3,0
+2,1
+2,0
+1
+c,0
+2,1
+2,0
+2,1
+2,0
+3,1
+5,0
+4,1
+3,0
+2,1
+0
+1
+2,0
+1
+0
+2,1
+17,0
+1
+7,0
+3,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+2,0
+3,1
+0
+1
+1aff,0
+100 90 32
+4b0,0
+1
+e,0
+2,1
+5,0
+3,1
+36,0
+1
+7,0
+1
+d,0
+1
+15,0
+2,1
+35,0
+2,1
+7,0
+1
+c,0
+1
+10,0
+1
+5,0
+2,1
+36,0
+1
+8,0
+1
+b,0
+1
+0
+1
+5,0
+1
+0
+1
+6,0
+1
+b,0
+1
+0
+1
+17,0
+1
+3,0
+1
+5,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+0
+1
+0
+1
+c,0
+1
+2,0
+2,1
+5,0
+1
+4,0
+1
+6,0
+2,1
+3,0
+1
+3,0
+1
+17,0
+1
+5,0
+2,1
+2,0
+1
+3,0
+1
+2,0
+1
+d,0
+1
+d,0
+1
+2,0
+2,1
+0
+1
+0
+1
+0
+1
+4,0
+1
+6,0
+2,1
+3,0
+1
+3,0
+1
+17,0
+1
+3,0
+1
+0
+2,1
+2,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+d,0
+1
+2,0
+2,1
+0
+1
+8,0
+2,1
+5,0
+2,1
+3,0
+1
+3,0
+2,1
+15,0
+2,1
+0
+1
+0
+1
+0
+2,1
+2,0
+1
+2,0
+2,1
+8,0
+1
+3,0
+1
+3,0
+2,1
+c,0
+1
+2,0
+2,1
+0
+1
+3,0
+1
+4,0
+1
+6,0
+2,1
+3,0
+1
+3,0
+1
+17,0
+1
+0
+1
+0
+1
+0
+2,1
+2,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+d,0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+4,0
+1
+0
+1
+4,0
+3,1
+4,0
+1
+0
+1
+17,0
+1
+6,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+1b00,0
+100 90 32
+4b1,0
+1
+15,0
+2,1
+34,0
+1
+9,0
+1
+d,0
+1
+4d,0
+1
+7,0
+1
+c,0
+1
+10,0
+1
+6,0
+1
+35,0
+1
+9,0
+1
+b,0
+1
+0
+1
+0
+1
+3,0
+1
+0
+1
+6,0
+1
+5,0
+2,1
+4,0
+1
+0
+1
+17,0
+1
+3,0
+1
+3,0
+3,1
+3,0
+1
+0
+1
+6,0
+1
+5,0
+1
+0
+1
+0
+1
+b,0
+1
+3,0
+2,1
+0
+2,1
+3,0
+1
+3,0
+2,1
+5,0
+2,1
+4,0
+1
+2,0
+2,1
+15,0
+2,1
+2,0
+1
+2,0
+2,1
+3,0
+1
+0
+2,1
+2,0
+2,1
+3,0
+1
+4,0
+2,1
+3,0
+1
+b,0
+1
+3,0
+2,1
+0
+2,1
+0
+1
+0
+1
+4,0
+1
+5,0
+2,1
+4,0
+1
+3,0
+1
+15,0
+1
+3,0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+8,0
+1
+4,0
+2,1
+3,0
+1
+b,0
+1
+4,0
+1
+0
+1
+9,0
+1
+6,0
+1
+4,0
+1
+3,0
+1
+15,0
+1
+0
+1
+0
+1
+2,0
+2,1
+3,0
+1
+0
+1
+8,0
+1
+4,0
+1
+4,0
+1
+c,0
+1
+9,0
+1
+10,0
+1
+3,0
+1
+17,0
+1
+0
+1
+0
+1
+5,0
+1
+3,0
+1
+8,0
+1
+7,0
+1
+d,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+1
+6,0
+1
+4,0
+4,1
+3,0
+1
+0
+1
+17,0
+1
+6,0
+3,1
+4,0
+1
+6,0
+1
+2,0
+2,1
+2,0
+1
+2,0
+1
+1b00,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt/a5.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a5.dat
new file mode 100644
index 000000000..516dc7768
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt/a5.dat
@@ -0,0 +1,1131 @@
+! $XConsortium$
+100 90 32
+3e9,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+7,1
+0
+5,1
+b,0
+6,1
+0
+5,1
+b,0
+6,1
+0
+5,1
+b,0
+6,1
+0
+5,1
+b,0
+6,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+1
+385,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+7,1
+0
+5,1
+b,0
+6,1
+0
+5,1
+b,0
+6,1
+0
+5,1
+b,0
+6,1
+0
+5,1
+b,0
+6,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+1
+385,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+7,1
+0
+5,1
+b,0
+6,1
+0
+5,1
+b,0
+6,1
+0
+5,1
+b,0
+6,1
+0
+5,1
+b,0
+6,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+1
+385,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+5,1
+c,0
+4,1
+2,0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+7,1
+0
+5,1
+b,0
+6,1
+0
+5,1
+b,0
+6,1
+0
+5,1
+b,0
+6,1
+0
+5,1
+b,0
+6,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+2,1
+2,0
+2,1
+a,0
+2,1
+2,0
+2,1
+0
+3,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+5,1
+b,0
+2,1
+2,0
+2,1
+0
+1
+6a4,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt/drwtxt.m b/xc/test/xsuite/xtest/tset/CH06/drwtxt/drwtxt.m
new file mode 100644
index 000000000..490ffcb15
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt/drwtxt.m
@@ -0,0 +1,432 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawText CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+int x = 0;
+int y = 20;
+XTextItem *items = deftext;
+int nitems = NELEM(deftext);
+>>EXTERN
+
+static XTextItem deftext[] = {
+ {"hello", 5, 0, None},
+ {"world", 5, 20, None},
+};
+
+/*
+ * Since we are not interested in testing loading fonts in this test then
+ * they will all be opened at the beginning, and no test will be run
+ * if they cannot be loaded.
+ */
+static Font Xtfonts[XT_NFONTS];
+
+>>SET startup localstartup
+>>SET cleanup fontcleanup
+static void
+localstartup()
+{
+ fontstartup();
+ if(Dsp) {
+ openfonts(Xtfonts, XT_NFONTS);
+ deftext[0].font = Xtfonts[1];
+ }
+}
+
+static void
+fillbuf(bp)
+char *bp;
+{
+int i;
+
+ for (i = 0; i < 256; i++)
+ *bp++ = i;
+}
+
+>>ASSERTION Good A
+On a call to xname each of the text
+.A items ,
+specifying a string
+.M chars
+of 8-bit characters
+from a
+.M font
+with interstring spacing given by
+.M delta ,
+is drawn in turn.
+>>STRATEGY
+Draw all the characters between 0&255 in all the xtest fonts, by setting
+up XTestItem structs to point to groups of characters at a time.
+Pixmap verify.
+>>EXTERN
+#define T1_NITEMS 3
+#define T1_GROUPSIZE 3
+>>CODE
+XVisualInfo *vp;
+XTextItem ti[T1_NITEMS];
+char buf[256];
+int c;
+int delta;
+unsigned int width, height;
+int i;
+int fn;
+int ncheck = 0;
+
+ fillbuf(buf);
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ for (i = 0; i < T1_NITEMS; i++)
+ ti[i].font = None;
+
+ x = 4;
+
+ items = ti;
+ nitems = T1_NITEMS;
+ delta = 0;
+
+ getsize(display, d, &width, &height);
+ for (fn = 0; fn < XT_NFONTS; fn++) {
+ trace("Using font xtfont%d\n", fn);
+ ti[0].font = Xtfonts[fn];
+ /*
+ * Fonts 4 and 6 are in the Right to Left direction.
+ * When the font info structures are implemented could use
+ * them here.
+ */
+ if (fn == 4 || fn == 6)
+ x = width - 4;
+ else
+ x = 4;
+
+ for (c = 0; c < 256; ) {
+ debug(1, "Chars from %d...", c);
+ for (y = 20; y < height; y += 20) {
+ for (i = 0; i < T1_GROUPSIZE; i++) {
+ if (c < 256) {
+ ti[i].chars = buf+c;
+ ti[i].nchars = (256-c<=T1_GROUPSIZE)? 256-c: T1_GROUPSIZE;
+ c += T1_GROUPSIZE;
+ ti[i].delta = delta;
+ if (delta++ >= 7)
+ delta = -2;
+ }
+ }
+ XCALL;
+ }
+ debug(1, "..to char %d", c);
+ /*
+ * Since font2 does not have a row zero then nothing
+ * should be printed.
+ */
+ if (fn == 2 && !checkclear(display, d)) {
+ report("Something was drawn when using xtfont2");
+ FAIL;
+ }
+ ncheck++;
+ PIXCHECK(display, d);
+ dclear(display, d);
+ }
+ }
+
+ }
+
+ CHECKPASS(ncheck);
+
+>>ASSERTION Good B 3
+When the font is defined with 2-byte matrix indexing, then
+each byte is used as a byte2 with a byte1 of zero.
+>>ASSERTION Good A
+A
+.M font
+other than
+.S None
+in one of the
+.A items
+causes the
+.M font
+to be stored in the GC
+and used for subsequent text.
+>>STRATEGY
+Set a different font in each of the members of a XTextItem array.
+Draw text using XTextItem array.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+XTextItem ti[XT_NFONTS];
+int fn;
+
+ items = ti;
+ nitems = NELEM(ti);
+ x = 20;
+ y = 50;
+
+ /*
+ * Some fonts are left-to-right some left-to-right so this makes
+ * an interesting mess.
+ */
+ for (fn = 0; fn < XT_NFONTS; fn++) {
+ ti[fn].chars = "\104"; /* hex 44, dec 68 */
+ ti[fn].nchars = 1;
+ ti[fn].delta = 2;
+ ti[fn].font = Xtfonts[fn];
+ }
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+On a call to xname the final drawing position of the string
+.M chars
+is given by adding
+.M delta
+to the x coordinate of the initial position of the string origin.
+>>STRATEGY
+For a series of positive and negative values of delta
+ Draw character string
+ Verify that character drawn in specified place.
+>>CODE
+XVisualInfo *vp;
+static XTextItem ti[] = {
+ {"\1", 1, 30, None},
+ {"\1", 1, -25, None},
+ {"\1", 1, 36, None},
+};
+struct area area;
+int pos;
+int i;
+
+ ti[0].font = Xtfonts[0];
+ items = ti;
+ nitems = NELEM(ti);
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+
+ pos = x;
+ for (i = 0; i < NELEM(ti); i++) {
+ pos += ti[i].delta;
+
+ /*
+ * Char 1 in font0 is a 10x10 block, so check that it is in
+ * drawn directly.
+ */
+ setarea(&area, pos, y-10, 10, 10);
+ if (checkarea(display, d, &area, W_FG, W_BG, CHECK_IN))
+ CHECK;
+ else {
+ report("character not drawn in expected place");
+ FAIL;
+ }
+
+ pos += 10; /* Width of char1 */
+ }
+ }
+
+ CHECKPASS(NELEM(ti)*nvinf());
+>>ASSERTION Good A
+The initial position of the first string's origin is at [
+.A x ,
+.A y
+].
+>>STRATEGY
+Vary x and y co-ordinates
+Draw string
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+XTextItem ti;
+unsigned int width, height;
+
+ ti.chars = "AB";
+ ti.nchars = 2;
+ ti.delta = 0;
+ ti.font = Xtfonts[1];
+
+ items = &ti;
+ nitems = 1;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ getsize(display, d, &width, &height);
+ for (x = 0; x < width; x += 23) {
+ for (y = 18; y < height; y += 18) {
+ XCALL;
+ }
+ }
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+The initial position of the second and subsequent strings
+is displaced in the x direction
+by a distance equal to the width of the previous string
+from the final drawing position of the previous string.
+>>ASSERTION def
+Each character image, as defined by the
+.M font
+in the GC, is treated as an
+additional mask for a fill operation on the drawable.
+>>ASSERTION def
+The drawable is modified only where the font character has a bit set to 1.
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M fill-style ,
+.M font ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin ,
+and
+.M tile-stipple-y-origin
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>>ASSERTION Bad A
+.ER BadFont bad-font
+>>STRATEGY
+Place a bad font ID into the font member of a XTextItem array.
+Draw text using XTextItem array.
+Verify that a BadFont error occurs.
+>>CODE BadFont
+
+ seterrdef();
+
+ deftext[0].font = badfont(display);
+
+ XCALL;
+ if (geterr() == BadFont)
+ PASS;
+ else
+ FAIL;
+
+>>ASSERTION Bad A
+When a text item generates a
+.S BadFont
+error, then either the text of
+the previous items is drawn or nothing is drawn.
+>>STRATEGY
+Place None into the font member of the first XTextItem array.
+Set nitems to 1.
+Draw text using XTextItem array.
+Save image on drawable.
+Place a bad font ID into the font member of the second XTextItem array.
+Set nitems to 2.
+Draw text using XTextItem array.
+Verify that either the saved image was drawn or nothing was drawn.
+>>CODE
+XVisualInfo *vp;
+XImage *image1;
+XImage *image2;
+
+ seterrdef();
+
+ resetvinf(VI_WIN_PIX);
+ nextvinf(&vp);
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ /* Assume drawable clear at start of test purpose, and save image */
+ image2 = savimage(display, d);
+
+ deftext[0].font = None;
+ items = deftext;
+ nitems = 1;
+
+ startcall(Dsp);
+ if (isdeleted())
+ return;
+ XDrawText(display, d, gc, x, y, items, nitems);
+ endcall(Dsp);
+ if (geterr() != Success) {
+ delete("Got %s, Expecting Success", errorname(geterr()));
+ return;
+ }
+
+ /* Draw text from previous item and save image */
+ image1 = savimage(display, d);
+ dclear(display, d);
+
+ deftext[1].font = badfont(display);
+ items = deftext;
+ nitems = 2;
+
+ startcall(Dsp);
+ if (isdeleted())
+ return;
+ XDrawText(display, d, gc, x, y, items, nitems);
+ endcall(Dsp);
+ if (geterr() != BadFont) {
+ delete("Got %s, Expecting BadFont", errorname(geterr()));
+ return;
+ }
+
+ if (compsavimage(display, d, image1))
+ PASS;
+ else {
+ if (compsavimage(display, d, image2))
+ PASS;
+ else
+ {
+ report("When a BadFont error occurred, text was drawn");
+ report("differing from the text of the previous item");
+ FAIL;
+ }
+ }
+
+
+>># HISTORY kieron Completed Check format and pass ac
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a1.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a1.dat
new file mode 100644
index 000000000..ba5a65eeb
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a1.dat
@@ -0,0 +1,561 @@
+! $XConsortium$
+100 90 32
+329,0
+2,1
+18,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+11,0
+1
+3,0
+1
+17,0
+2,1
+8,0
+b,1
+6,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+0
+7,1
+2,0
+1
+7,0
+1
+3,0
+1
+15,0
+1
+a,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+0
+7,1
+0
+1
+0
+1
+6,0
+1
+4,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+0
+1
+22,0
+1
+4,0
+1
+4,0
+1
+6,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+4,0
+1
+5,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+21,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+2,0
+6,1
+0
+1
+0
+1
+0
+1
+3,0
+1
+0
+9,1
+2,0
+1
+2,0
+5,1
+24,0
+b,1
+6,0
+1
+2,0
+1
+7,0
+1
+3,0
+1
+3,0
+2,1
+4,0
+2,1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+4,0
+1
+4,0
+1
+3,0
+b,1
+3,0
+5,1
+0
+1
+2,0
+1
+3,0
+1
+0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+2,1
+4,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+0
+1
+5,0
+1
+2,0
+7,1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+1
+0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3,0
+5,1
+2,0
+1
+0
+1
+5,0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+6,0
+3,1
+3,0
+1
+5,0
+1
+5,0
+1
+0
+1
+2,0
+4,1
+24,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+2,1
+8,0
+1
+2,0
+b,1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+2,1
+23,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+1
+0
+1
+22,0
+b,1
+3,0
+b,1
+5,0
+1
+6,0
+1
+5,0
+1
+3,0
+1
+8,0
+1
+3,0
+3,1
+25,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+2,0
+1
+2e1,0
+1
+61,0
+3,1
+2,0
+5,1
+b,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+4,0
+2,1
+6,0
+2,1
+1b,0
+2,1
+6,0
+2,1
+b,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+5,0
+2,1
+6,0
+2,1
+23,0
+2,1
+b,0
+2,1
+20,0
+2,1
+33,0
+2,1
+5,0
+2,1
+4,0
+6,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+7,0
+2,1
+6,0
+2,1
+23,0
+2,1
+4,0
+4,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+8,0
+2,1
+6,0
+2,1
+23,0
+2,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+3,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+8,1
+14,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+9,0
+2,1
+6,0
+2,1
+5,0
+8,1
+14,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+21,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+21,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+2,1
+3,0
+4,1
+4,0
+4,1
+22,0
+2,1
+62,0
+2,1
+5f,0
+5,1
+12b6,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a27.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a27.dat
new file mode 100644
index 000000000..9e2f0ff82
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a27.dat
@@ -0,0 +1,339 @@
+! $XConsortium$
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+11,0
+1
+3,0
+1
+17,0
+2,1
+8,0
+b,1
+6,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+0
+7,1
+2,0
+1
+7,0
+1
+3,0
+1
+15,0
+1
+a,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+0
+7,1
+0
+1
+0
+1
+6,0
+1
+4,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+0
+1
+22,0
+1
+4,0
+1
+4,0
+1
+6,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+4,0
+1
+5,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+21,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+2,0
+6,1
+0
+1
+0
+1
+0
+1
+3,0
+1
+0
+9,1
+2,0
+1
+2,0
+5,1
+24,0
+b,1
+6,0
+1
+2,0
+1
+7,0
+1
+3,0
+1
+3,0
+2,1
+4,0
+2,1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+4,0
+1
+4,0
+1
+3,0
+b,1
+3,0
+5,1
+0
+1
+2,0
+1
+3,0
+1
+0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+2,1
+4,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+0
+1
+5,0
+1
+2,0
+7,1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+1
+0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3,0
+5,1
+2,0
+1
+0
+1
+5,0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+6,0
+3,1
+3,0
+1
+5,0
+1
+5,0
+1
+0
+1
+2,0
+4,1
+24,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+2,1
+8,0
+1
+2,0
+b,1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+2,1
+23,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+1
+0
+1
+22,0
+b,1
+3,0
+b,1
+5,0
+1
+6,0
+1
+5,0
+1
+3,0
+1
+8,0
+1
+3,0
+3,1
+25,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+2,0
+1
+1b7b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a28.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a28.dat
new file mode 100644
index 000000000..98f98e466
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a28.dat
@@ -0,0 +1,413 @@
+! $XConsortium$
+100 90 32
+261,0
+2,2
+18,0
+3
+3,0
+2
+8,0
+2
+5,0
+3
+7,0
+2
+11,0
+3
+3,0
+2
+17,0
+2,3
+8,0
+2,2
+3
+2
+3
+2
+3
+2,2
+2,3
+6,0
+2
+3,0
+3
+8,0
+3
+5,0
+2
+7,0
+3
+0
+2
+3,3
+2,2
+3
+2,0
+2
+7,0
+3
+3,0
+3
+15,0
+3
+a,0
+2
+4,0
+2
+4,0
+3
+2,0
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+0
+5,3
+2
+3
+0
+3
+0
+3
+6,0
+3
+4,0
+3
+2,0
+3
+3,0
+3
+6,0
+3
+0
+3
+22,0
+3
+4,0
+2
+4,0
+3
+6,0
+3
+3,0
+3
+8,0
+3
+3,0
+2
+3,0
+3
+4,0
+2
+5,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+3
+2
+2,3
+21,0
+2
+4,0
+2
+4,0
+3
+2,0
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,0
+4,3
+2
+3
+0
+3
+0
+3
+0
+2
+3,0
+2
+0
+2
+5,3
+2
+3
+2
+2,0
+3
+2,0
+3
+2
+3
+2
+3
+24,0
+2,2
+3
+2
+3
+2
+3
+2,2
+2,3
+6,0
+2
+2,0
+2
+7,0
+3
+3,0
+2
+3,0
+2
+3
+4,0
+3
+2
+5,0
+3
+2,0
+3
+2,0
+2
+7,0
+3
+24,0
+2
+4,0
+3
+4,0
+2
+3,0
+2
+3
+2
+3
+4,2
+3
+2
+3
+3,0
+4,2
+3
+0
+3
+2,0
+2
+3,0
+3
+0
+3
+5,0
+2
+2,0
+2
+2,0
+3
+7,0
+2
+24,0
+2
+3,0
+2
+3
+4,0
+3
+3,0
+2
+2,0
+3
+2,0
+2
+3,0
+3
+3,0
+3
+3,0
+2
+2,0
+2
+0
+2
+5,0
+3
+2,0
+5,3
+2,2
+2,0
+3
+7,0
+2
+24,0
+2
+3,0
+3
+0
+3
+3,0
+3
+3,0
+3
+2,0
+2
+2,0
+2
+2,0
+3
+2
+3,0
+5,3
+2,0
+3
+0
+2
+5,0
+2
+5,0
+3
+2,0
+3
+2,0
+2
+7,0
+3
+24,0
+2
+2,0
+2
+3,0
+2
+2,0
+3
+3,0
+2
+0
+3
+4,0
+2,2
+2,3
+5,0
+3
+6,0
+3,2
+3,0
+3
+5,0
+3
+5,0
+2
+0
+2
+2,0
+2
+2,3
+2
+24,0
+3
+0
+3
+5,0
+2
+0
+2
+3,0
+3
+2
+8,0
+2
+2,0
+5,2
+2,3
+3,2
+3
+5,0
+2
+4,0
+2
+7,0
+3
+2,0
+3
+3,0
+2,3
+23,0
+2
+9,0
+3
+3,0
+2
+9,0
+2
+5,0
+3
+6,0
+2
+5,0
+2
+4,0
+3
+7,0
+2
+2,0
+2
+3,0
+2
+0
+3
+22,0
+9,3
+2,2
+3,0
+b,3
+5,0
+2
+6,0
+3
+5,0
+3
+3,0
+2
+8,0
+3
+3,0
+3,3
+25,0
+3
+9,0
+3
+3,0
+3
+9,0
+3
+5,0
+3
+6,0
+3
+5,0
+3
+2,0
+3
+1b7b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a29.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a29.dat
new file mode 100644
index 000000000..98778b429
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a29.dat
@@ -0,0 +1,369 @@
+! $XConsortium$
+100 90 32
+261,0
+2,3
+18,0
+3
+3,0
+3
+8,0
+2
+5,0
+2
+7,0
+2
+11,0
+3
+3,0
+2
+17,0
+2,2
+8,0
+3,2
+3,3
+2
+3
+2
+3
+2
+6,0
+2
+3,0
+3
+8,0
+2
+5,0
+2
+7,0
+3
+0
+3
+4,2
+2,3
+2,0
+3
+7,0
+2
+3,0
+3
+15,0
+3
+a,0
+3
+4,0
+2
+4,0
+2
+2,0
+4,3
+6,2
+3,3
+0
+7,2
+0
+2
+0
+3
+6,0
+2
+4,0
+3
+2,0
+2
+3,0
+2
+6,0
+3
+0
+2
+22,0
+2
+4,0
+3
+4,0
+2
+6,0
+3
+3,0
+3
+8,0
+2
+3,0
+2
+3,0
+3
+4,0
+3
+5,0
+2
+2,0
+3
+3,0
+2
+0
+2
+4,0
+4,3
+21,0
+3
+4,0
+2
+4,0
+2
+2,0
+d,3
+2,0
+6,2
+0
+2
+0
+3
+0
+3
+3,0
+3
+0
+5,3
+4,2
+2,0
+2
+2,0
+2,2
+3,3
+24,0
+6,2
+5,3
+6,0
+3
+2,0
+2
+7,0
+2
+3,0
+3
+3,0
+2,3
+4,0
+2,2
+5,0
+2
+2,0
+2
+2,0
+3
+7,0
+3
+24,0
+3
+4,0
+3
+4,0
+3
+3,0
+4,2
+7,3
+3,0
+5,3
+0
+3
+2,0
+2
+3,0
+2
+0
+3
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+2
+24,0
+2
+3,0
+2,2
+4,0
+2
+3,0
+3
+2,0
+3
+2,0
+3
+3,0
+2
+3,0
+2
+3,0
+3
+2,0
+2
+0
+3
+5,0
+3
+2,0
+2,3
+5,2
+2,0
+3
+7,0
+3
+24,0
+3
+3,0
+3
+0
+3
+3,0
+3
+3,0
+3
+2,0
+3
+2,0
+2
+2,0
+2
+3
+3,0
+5,3
+2,0
+3
+0
+3
+5,0
+2
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+3
+24,0
+3
+2,0
+2
+3,0
+3
+2,0
+3
+3,0
+3
+0
+2
+4,0
+4,3
+5,0
+3
+6,0
+2,3
+2
+3,0
+3
+5,0
+3
+5,0
+3
+0
+3
+2,0
+3,3
+2
+24,0
+2
+0
+3
+5,0
+2
+0
+3
+3,0
+2
+3
+8,0
+2
+2,0
+3,3
+3,2
+4,3
+2
+5,0
+3
+4,0
+2
+7,0
+2
+2,0
+3
+3,0
+2,3
+23,0
+3
+9,0
+2
+3,0
+3
+9,0
+3
+5,0
+2
+6,0
+3
+5,0
+2
+4,0
+3
+7,0
+2
+2,0
+2
+3,0
+3
+0
+3
+22,0
+3,2
+3,3
+2
+3
+2
+3
+2
+3,0
+4,2
+5,3
+2,2
+5,0
+2
+6,0
+2
+5,0
+3
+3,0
+2
+8,0
+2
+3,0
+3,2
+25,0
+3
+9,0
+2
+3,0
+3
+9,0
+3
+5,0
+2
+6,0
+3
+5,0
+2
+2,0
+2
+1b7b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a3.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a3.dat
new file mode 100644
index 000000000..60a349437
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a3.dat
@@ -0,0 +1,575 @@
+! $XConsortium$
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+11,0
+1
+3,0
+1
+17,0
+2,1
+8,0
+b,1
+6,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+0
+7,1
+2,0
+1
+7,0
+1
+3,0
+1
+15,0
+1
+a,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+0
+7,1
+0
+1
+0
+1
+6,0
+1
+4,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+0
+1
+22,0
+1
+4,0
+1
+4,0
+1
+6,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+4,0
+1
+5,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+21,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+2,0
+6,1
+0
+1
+0
+1
+0
+1
+3,0
+1
+0
+9,1
+2,0
+1
+2,0
+5,1
+24,0
+b,1
+6,0
+1
+2,0
+1
+7,0
+1
+3,0
+1
+3,0
+2,1
+4,0
+2,1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+4,0
+1
+4,0
+1
+3,0
+b,1
+3,0
+5,1
+0
+1
+2,0
+1
+3,0
+1
+0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+2,1
+4,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+0
+1
+5,0
+1
+2,0
+7,1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+1
+0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3,0
+5,1
+2,0
+1
+0
+1
+5,0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+6,0
+3,1
+3,0
+1
+5,0
+1
+5,0
+1
+0
+1
+2,0
+4,1
+24,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+2,1
+8,0
+1
+2,0
+b,1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+2,1
+23,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+1
+0
+1
+22,0
+b,1
+3,0
+b,1
+5,0
+1
+6,0
+1
+5,0
+1
+3,0
+1
+8,0
+1
+3,0
+3,1
+25,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+2,0
+1
+218,0
+1
+4,0
+1
+5e,0
+6,1
+2,0
+5,1
+b,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+8,0
+2,1
+4,0
+2,1
+6,0
+2,1
+19,0
+4,1
+6,0
+2,1
+b,0
+2,1
+8,0
+2,1
+6,0
+2,1
+6,0
+2,1
+7,0
+2,1
+5,0
+2,1
+6,0
+2,1
+17,0
+1
+b,0
+2,1
+b,0
+2,1
+20,0
+2,1
+27,0
+1
+b,0
+2,1
+5,0
+2,1
+4,0
+6,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+5,0
+2,1
+7,0
+2,1
+6,0
+2,1
+17,0
+1
+b,0
+2,1
+4,0
+4,1
+3,0
+2,1
+3,0
+2,1
+3,0
+2,1
+6,0
+2,1
+6,0
+2,1
+4,0
+2,1
+8,0
+2,1
+6,0
+2,1
+17,0
+1
+b,0
+2,1
+4,0
+1
+2,0
+1
+3,0
+2,1
+3,0
+2,1
+4,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+9,0
+2,1
+6,0
+2,1
+6,0
+8,1
+8,0
+1
+b,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+5,0
+2,1
+6,0
+2,1
+6,0
+2,1
+3,0
+2,1
+9,0
+2,1
+6,0
+2,1
+5,0
+8,1
+8,0
+1
+b,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+4,0
+2,1
+4,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+21,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+5,0
+2,1
+3,0
+2,1
+2,0
+2,1
+2,0
+2,1
+2,0
+2,1
+21,0
+2,1
+2,0
+2,1
+4,0
+2,1
+0
+2,1
+3,0
+2,1
+2,0
+4,1
+4,0
+4,1
+4,0
+4,1
+7,0
+2,1
+3,0
+4,1
+4,0
+4,1
+22,0
+2,1
+62,0
+2,1
+5f,0
+5,1
+1442,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a30.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a30.dat
new file mode 100644
index 000000000..ddf3d99e5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a30.dat
@@ -0,0 +1,221 @@
+! $XConsortium$
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+28,0
+1
+28,0
+3,1
+0
+1
+0
+1
+b,0
+1
+16,0
+1
+0
+1
+4,0
+2,1
+2,0
+1
+b,0
+1
+15,0
+1
+a,0
+1
+c,0
+4,1
+6,0
+3,1
+b,0
+1
+b,0
+1
+d,0
+1
+29,0
+1
+b,0
+1
+3,0
+1
+10,0
+1
+4,0
+1
+8,0
+1
+a,0
+4,1
+21,0
+1
+c,0
+d,1
+b,0
+1
+0
+1
+3,0
+1
+0
+5,1
+b,0
+3,1
+2a,0
+5,1
+6,0
+1
+e,0
+1
+3,0
+2,1
+11,0
+1
+7,0
+1
+24,0
+1
+4,0
+1
+4,0
+1
+7,0
+7,1
+3,0
+5,1
+0
+1
+8,0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+3a,0
+1
+2,0
+1
+2,0
+1
+b,0
+1
+4,0
+1
+5,0
+1
+2,0
+2,1
+7,0
+1
+7,0
+1
+24,0
+1
+3,0
+1
+0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+6,0
+1
+3,0
+5,1
+2,0
+1
+0
+1
+b,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+6,0
+1
+2,0
+1
+3,0
+1
+6,0
+4,1
+5,0
+1
+6,0
+2,1
+4,0
+1
+5,0
+1
+5,0
+1
+0
+1
+2,0
+3,1
+27,0
+1
+7,0
+1
+4,0
+1
+b,0
+3,1
+3,0
+4,1
+6,0
+1
+f,0
+1
+3,0
+2,1
+23,0
+1
+d,0
+1
+9,0
+1
+c,0
+1
+a,0
+1
+e,0
+1
+0
+1
+25,0
+3,1
+0
+1
+0
+1
+8,0
+5,1
+14,0
+1
+38,0
+1
+d,0
+1
+9,0
+1
+c,0
+1
+1b84,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a34.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a34.dat
new file mode 100644
index 000000000..ecda4495a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a34.dat
@@ -0,0 +1,645 @@
+! $XConsortium$
+100 90 32
+261,0
+2,1
+61,0
+2,1
+8,0
+b,1
+4e,0
+1
+a,0
+1
+4,0
+1
+4,0
+1
+2,0
+2,1
+55,0
+1
+4,0
+1
+4,0
+1
+59,0
+1
+4,0
+1
+4,0
+1
+2,0
+2,1
+55,0
+b,1
+59,0
+1
+4,0
+1
+4,0
+1
+3,0
+1
+55,0
+1
+3,0
+2,1
+4,0
+1
+3,0
+1
+55,0
+1
+3,0
+1
+0
+1
+3,0
+1
+3,0
+1
+55,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+55,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+1
+55,0
+1
+9,0
+1
+3,0
+1
+55,0
+b,1
+3,0
+1
+55,0
+1
+9,0
+1
+3,0
+1
+1b9b,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+27b,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+48,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+0
+2,1
+43,0
+b,1
+0
+7,1
+0
+1
+0
+1
+6,0
+1
+48,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+4,0
+1
+47,0
+b,1
+2,0
+6,1
+0
+1
+0
+1
+0
+1
+3,0
+1
+0
+3,1
+45,0
+1
+2,0
+1
+7,0
+1
+3,0
+1
+3,0
+2,1
+4,0
+2,1
+47,0
+a,1
+3,0
+5,1
+0
+1
+2,0
+1
+3,0
+1
+0
+1
+49,0
+1
+2,0
+1
+3,0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+0
+1
+5,0
+1
+2,0
+2,1
+45,0
+1
+2,0
+1
+2,0
+2,1
+3,0
+5,1
+2,0
+1
+0
+1
+5,0
+1
+48,0
+1
+4,0
+4,1
+5,0
+1
+6,0
+3,1
+3,0
+1
+47,0
+1
+8,0
+1
+2,0
+b,1
+5,0
+1
+50,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+47,0
+a,1
+5,0
+1
+6,0
+1
+5,0
+1
+3,0
+1
+4c,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+2,0
+1
+1b7b,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2a8,0
+1
+3,0
+1
+51,0
+5,1
+2,0
+1
+7,0
+1
+3,0
+1
+51,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+0
+1
+53,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+51,0
+6,1
+2,0
+1
+2,0
+5,1
+55,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+55,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+54,0
+5,1
+2,0
+1
+7,0
+1
+55,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+55,0
+1
+5,0
+1
+0
+1
+2,0
+4,1
+54,0
+1
+7,0
+1
+2,0
+1
+3,0
+2,1
+53,0
+1
+7,0
+1
+2,0
+1
+3,0
+1
+0
+1
+5a,0
+1
+3,0
+3,1
+1bcf,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+27b,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+48,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+0
+2,1
+43,0
+b,1
+0
+7,1
+0
+1
+0
+1
+6,0
+1
+48,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+4,0
+1
+47,0
+b,1
+2,0
+6,1
+0
+1
+0
+1
+0
+1
+3,0
+1
+0
+3,1
+45,0
+1
+2,0
+1
+7,0
+1
+3,0
+1
+3,0
+2,1
+4,0
+2,1
+47,0
+a,1
+3,0
+5,1
+0
+1
+2,0
+1
+3,0
+1
+0
+1
+49,0
+1
+2,0
+1
+3,0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+0
+1
+5,0
+1
+2,0
+2,1
+45,0
+1
+2,0
+1
+2,0
+2,1
+3,0
+5,1
+2,0
+1
+0
+1
+5,0
+1
+48,0
+1
+4,0
+4,1
+5,0
+1
+6,0
+3,1
+3,0
+1
+47,0
+1
+8,0
+1
+2,0
+b,1
+5,0
+1
+50,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+47,0
+a,1
+5,0
+1
+6,0
+1
+5,0
+1
+3,0
+1
+4c,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+2,0
+1
+1b7b,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2a8,0
+1
+3,0
+1
+51,0
+5,1
+2,0
+1
+7,0
+1
+3,0
+1
+51,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+0
+1
+53,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+51,0
+6,1
+2,0
+1
+2,0
+5,1
+55,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+55,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+54,0
+5,1
+2,0
+1
+7,0
+1
+55,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+55,0
+1
+5,0
+1
+0
+1
+2,0
+4,1
+54,0
+1
+7,0
+1
+2,0
+1
+3,0
+2,1
+53,0
+1
+7,0
+1
+2,0
+1
+3,0
+1
+0
+1
+5a,0
+1
+3,0
+3,1
+1bcf,0
+100 90 32
+2328,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a37.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a37.dat
new file mode 100644
index 000000000..ddf3d99e5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a37.dat
@@ -0,0 +1,221 @@
+! $XConsortium$
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+28,0
+1
+28,0
+3,1
+0
+1
+0
+1
+b,0
+1
+16,0
+1
+0
+1
+4,0
+2,1
+2,0
+1
+b,0
+1
+15,0
+1
+a,0
+1
+c,0
+4,1
+6,0
+3,1
+b,0
+1
+b,0
+1
+d,0
+1
+29,0
+1
+b,0
+1
+3,0
+1
+10,0
+1
+4,0
+1
+8,0
+1
+a,0
+4,1
+21,0
+1
+c,0
+d,1
+b,0
+1
+0
+1
+3,0
+1
+0
+5,1
+b,0
+3,1
+2a,0
+5,1
+6,0
+1
+e,0
+1
+3,0
+2,1
+11,0
+1
+7,0
+1
+24,0
+1
+4,0
+1
+4,0
+1
+7,0
+7,1
+3,0
+5,1
+0
+1
+8,0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+3a,0
+1
+2,0
+1
+2,0
+1
+b,0
+1
+4,0
+1
+5,0
+1
+2,0
+2,1
+7,0
+1
+7,0
+1
+24,0
+1
+3,0
+1
+0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+6,0
+1
+3,0
+5,1
+2,0
+1
+0
+1
+b,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+6,0
+1
+2,0
+1
+3,0
+1
+6,0
+4,1
+5,0
+1
+6,0
+2,1
+4,0
+1
+5,0
+1
+5,0
+1
+0
+1
+2,0
+3,1
+27,0
+1
+7,0
+1
+4,0
+1
+b,0
+3,1
+3,0
+4,1
+6,0
+1
+f,0
+1
+3,0
+2,1
+23,0
+1
+d,0
+1
+9,0
+1
+c,0
+1
+a,0
+1
+e,0
+1
+0
+1
+25,0
+3,1
+0
+1
+0
+1
+8,0
+5,1
+14,0
+1
+38,0
+1
+d,0
+1
+9,0
+1
+c,0
+1
+1b84,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a39.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a39.dat
new file mode 100644
index 000000000..2d8987b57
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a39.dat
@@ -0,0 +1,11495 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+11,0
+1
+3,0
+1
+17,0
+2,1
+8,0
+b,1
+6,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+0
+7,1
+2,0
+1
+7,0
+1
+3,0
+1
+15,0
+1
+a,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+0
+7,1
+0
+1
+0
+1
+6,0
+1
+4,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+0
+1
+22,0
+1
+4,0
+1
+4,0
+1
+6,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+4,0
+1
+5,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+21,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+2,0
+6,1
+0
+1
+0
+1
+0
+1
+3,0
+1
+0
+9,1
+2,0
+1
+2,0
+5,1
+24,0
+b,1
+6,0
+1
+2,0
+1
+7,0
+1
+3,0
+1
+3,0
+2,1
+4,0
+2,1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+4,0
+1
+4,0
+1
+3,0
+b,1
+3,0
+5,1
+0
+1
+2,0
+1
+3,0
+1
+0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+2,1
+4,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+0
+1
+5,0
+1
+2,0
+7,1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+1
+0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3,0
+5,1
+2,0
+1
+0
+1
+5,0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+6,0
+3,1
+3,0
+1
+5,0
+1
+5,0
+1
+0
+1
+2,0
+4,1
+24,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+2,1
+8,0
+1
+2,0
+b,1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+2,1
+23,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+1
+0
+1
+22,0
+b,1
+3,0
+b,1
+5,0
+1
+6,0
+1
+5,0
+1
+3,0
+1
+8,0
+1
+3,0
+3,1
+25,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+2,0
+1
+1b7b,0
+100 90 32
+261,0
+2,2
+18,0
+2
+3,0
+2
+8,0
+2
+5,0
+2
+7,0
+2
+11,0
+2
+3,0
+2
+17,0
+2,2
+8,0
+b,2
+6,0
+2
+3,0
+2
+8,0
+2
+5,0
+2
+7,0
+2
+0
+7,2
+2,0
+2
+7,0
+2
+3,0
+2
+15,0
+2
+a,0
+2
+4,0
+2
+4,0
+2
+2,0
+d,2
+0
+7,2
+0
+2
+0
+2
+6,0
+2
+4,0
+2
+2,0
+2
+3,0
+2
+6,0
+2
+0
+2
+22,0
+2
+4,0
+2
+4,0
+2
+6,0
+2
+3,0
+2
+8,0
+2
+3,0
+2
+3,0
+2
+4,0
+2
+5,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+21,0
+2
+4,0
+2
+4,0
+2
+2,0
+d,2
+2,0
+6,2
+0
+2
+0
+2
+0
+2
+3,0
+2
+0
+9,2
+2,0
+2
+2,0
+5,2
+24,0
+b,2
+6,0
+2
+2,0
+2
+7,0
+2
+3,0
+2
+3,0
+2,2
+4,0
+2,2
+5,0
+2
+2,0
+2
+2,0
+2
+7,0
+2
+24,0
+2
+4,0
+2
+4,0
+2
+3,0
+b,2
+3,0
+5,2
+0
+2
+2,0
+2
+3,0
+2
+0
+2
+5,0
+2
+2,0
+2
+2,0
+2
+7,0
+2
+24,0
+2
+3,0
+2,2
+4,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+3,0
+2
+3,0
+2
+3,0
+2
+2,0
+2
+0
+2
+5,0
+2
+2,0
+7,2
+2,0
+2
+7,0
+2
+24,0
+2
+3,0
+2
+0
+2
+3,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+2,0
+2,2
+3,0
+5,2
+2,0
+2
+0
+2
+5,0
+2
+5,0
+2
+2,0
+2
+2,0
+2
+7,0
+2
+24,0
+2
+2,0
+2
+3,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+5,0
+2
+6,0
+3,2
+3,0
+2
+5,0
+2
+5,0
+2
+0
+2
+2,0
+4,2
+24,0
+2
+0
+2
+5,0
+2
+0
+2
+3,0
+2,2
+8,0
+2
+2,0
+b,2
+5,0
+2
+4,0
+2
+7,0
+2
+2,0
+2
+3,0
+2,2
+23,0
+2
+9,0
+2
+3,0
+2
+9,0
+2
+5,0
+2
+6,0
+2
+5,0
+2
+4,0
+2
+7,0
+2
+2,0
+2
+3,0
+2
+0
+2
+22,0
+b,2
+3,0
+b,2
+5,0
+2
+6,0
+2
+5,0
+2
+3,0
+2
+8,0
+2
+3,0
+3,2
+25,0
+2
+9,0
+2
+3,0
+2
+9,0
+2
+5,0
+2
+6,0
+2
+5,0
+2
+2,0
+2
+1b7b,0
+100 90 32
+261,0
+2,3
+18,0
+3
+3,0
+3
+8,0
+3
+5,0
+3
+7,0
+3
+11,0
+3
+3,0
+3
+17,0
+2,3
+8,0
+b,3
+6,0
+3
+3,0
+3
+8,0
+3
+5,0
+3
+7,0
+3
+0
+7,3
+2,0
+3
+7,0
+3
+3,0
+3
+15,0
+3
+a,0
+3
+4,0
+3
+4,0
+3
+2,0
+d,3
+0
+7,3
+0
+3
+0
+3
+6,0
+3
+4,0
+3
+2,0
+3
+3,0
+3
+6,0
+3
+0
+3
+22,0
+3
+4,0
+3
+4,0
+3
+6,0
+3
+3,0
+3
+8,0
+3
+3,0
+3
+3,0
+3
+4,0
+3
+5,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+21,0
+3
+4,0
+3
+4,0
+3
+2,0
+d,3
+2,0
+6,3
+0
+3
+0
+3
+0
+3
+3,0
+3
+0
+9,3
+2,0
+3
+2,0
+5,3
+24,0
+b,3
+6,0
+3
+2,0
+3
+7,0
+3
+3,0
+3
+3,0
+2,3
+4,0
+2,3
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+3
+24,0
+3
+4,0
+3
+4,0
+3
+3,0
+b,3
+3,0
+5,3
+0
+3
+2,0
+3
+3,0
+3
+0
+3
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+3
+24,0
+3
+3,0
+2,3
+4,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+3,0
+3
+3,0
+3
+3,0
+3
+2,0
+3
+0
+3
+5,0
+3
+2,0
+7,3
+2,0
+3
+7,0
+3
+24,0
+3
+3,0
+3
+0
+3
+3,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+2,0
+2,3
+3,0
+5,3
+2,0
+3
+0
+3
+5,0
+3
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+3
+24,0
+3
+2,0
+3
+3,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+5,0
+3
+6,0
+3,3
+3,0
+3
+5,0
+3
+5,0
+3
+0
+3
+2,0
+4,3
+24,0
+3
+0
+3
+5,0
+3
+0
+3
+3,0
+2,3
+8,0
+3
+2,0
+b,3
+5,0
+3
+4,0
+3
+7,0
+3
+2,0
+3
+3,0
+2,3
+23,0
+3
+9,0
+3
+3,0
+3
+9,0
+3
+5,0
+3
+6,0
+3
+5,0
+3
+4,0
+3
+7,0
+3
+2,0
+3
+3,0
+3
+0
+3
+22,0
+b,3
+3,0
+b,3
+5,0
+3
+6,0
+3
+5,0
+3
+3,0
+3
+8,0
+3
+3,0
+3,3
+25,0
+3
+9,0
+3
+3,0
+3
+9,0
+3
+5,0
+3
+6,0
+3
+5,0
+3
+2,0
+3
+1b7b,0
+100 90 32
+261,0
+2,4
+18,0
+4
+3,0
+4
+8,0
+4
+5,0
+4
+7,0
+4
+11,0
+4
+3,0
+4
+17,0
+2,4
+8,0
+b,4
+6,0
+4
+3,0
+4
+8,0
+4
+5,0
+4
+7,0
+4
+0
+7,4
+2,0
+4
+7,0
+4
+3,0
+4
+15,0
+4
+a,0
+4
+4,0
+4
+4,0
+4
+2,0
+d,4
+0
+7,4
+0
+4
+0
+4
+6,0
+4
+4,0
+4
+2,0
+4
+3,0
+4
+6,0
+4
+0
+4
+22,0
+4
+4,0
+4
+4,0
+4
+6,0
+4
+3,0
+4
+8,0
+4
+3,0
+4
+3,0
+4
+4,0
+4
+5,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+21,0
+4
+4,0
+4
+4,0
+4
+2,0
+d,4
+2,0
+6,4
+0
+4
+0
+4
+0
+4
+3,0
+4
+0
+9,4
+2,0
+4
+2,0
+5,4
+24,0
+b,4
+6,0
+4
+2,0
+4
+7,0
+4
+3,0
+4
+3,0
+2,4
+4,0
+2,4
+5,0
+4
+2,0
+4
+2,0
+4
+7,0
+4
+24,0
+4
+4,0
+4
+4,0
+4
+3,0
+b,4
+3,0
+5,4
+0
+4
+2,0
+4
+3,0
+4
+0
+4
+5,0
+4
+2,0
+4
+2,0
+4
+7,0
+4
+24,0
+4
+3,0
+2,4
+4,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+3,0
+4
+3,0
+4
+3,0
+4
+2,0
+4
+0
+4
+5,0
+4
+2,0
+7,4
+2,0
+4
+7,0
+4
+24,0
+4
+3,0
+4
+0
+4
+3,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+2,0
+2,4
+3,0
+5,4
+2,0
+4
+0
+4
+5,0
+4
+5,0
+4
+2,0
+4
+2,0
+4
+7,0
+4
+24,0
+4
+2,0
+4
+3,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+5,0
+4
+6,0
+3,4
+3,0
+4
+5,0
+4
+5,0
+4
+0
+4
+2,0
+4,4
+24,0
+4
+0
+4
+5,0
+4
+0
+4
+3,0
+2,4
+8,0
+4
+2,0
+b,4
+5,0
+4
+4,0
+4
+7,0
+4
+2,0
+4
+3,0
+2,4
+23,0
+4
+9,0
+4
+3,0
+4
+9,0
+4
+5,0
+4
+6,0
+4
+5,0
+4
+4,0
+4
+7,0
+4
+2,0
+4
+3,0
+4
+0
+4
+22,0
+b,4
+3,0
+b,4
+5,0
+4
+6,0
+4
+5,0
+4
+3,0
+4
+8,0
+4
+3,0
+3,4
+25,0
+4
+9,0
+4
+3,0
+4
+9,0
+4
+5,0
+4
+6,0
+4
+5,0
+4
+2,0
+4
+1b7b,0
+100 90 32
+261,0
+2,6
+18,0
+6
+3,0
+6
+8,0
+6
+5,0
+6
+7,0
+6
+11,0
+6
+3,0
+6
+17,0
+2,6
+8,0
+b,6
+6,0
+6
+3,0
+6
+8,0
+6
+5,0
+6
+7,0
+6
+0
+7,6
+2,0
+6
+7,0
+6
+3,0
+6
+15,0
+6
+a,0
+6
+4,0
+6
+4,0
+6
+2,0
+d,6
+0
+7,6
+0
+6
+0
+6
+6,0
+6
+4,0
+6
+2,0
+6
+3,0
+6
+6,0
+6
+0
+6
+22,0
+6
+4,0
+6
+4,0
+6
+6,0
+6
+3,0
+6
+8,0
+6
+3,0
+6
+3,0
+6
+4,0
+6
+5,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+21,0
+6
+4,0
+6
+4,0
+6
+2,0
+d,6
+2,0
+6,6
+0
+6
+0
+6
+0
+6
+3,0
+6
+0
+9,6
+2,0
+6
+2,0
+5,6
+24,0
+b,6
+6,0
+6
+2,0
+6
+7,0
+6
+3,0
+6
+3,0
+2,6
+4,0
+2,6
+5,0
+6
+2,0
+6
+2,0
+6
+7,0
+6
+24,0
+6
+4,0
+6
+4,0
+6
+3,0
+b,6
+3,0
+5,6
+0
+6
+2,0
+6
+3,0
+6
+0
+6
+5,0
+6
+2,0
+6
+2,0
+6
+7,0
+6
+24,0
+6
+3,0
+2,6
+4,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+3,0
+6
+3,0
+6
+3,0
+6
+2,0
+6
+0
+6
+5,0
+6
+2,0
+7,6
+2,0
+6
+7,0
+6
+24,0
+6
+3,0
+6
+0
+6
+3,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+2,0
+2,6
+3,0
+5,6
+2,0
+6
+0
+6
+5,0
+6
+5,0
+6
+2,0
+6
+2,0
+6
+7,0
+6
+24,0
+6
+2,0
+6
+3,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+5,0
+6
+6,0
+3,6
+3,0
+6
+5,0
+6
+5,0
+6
+0
+6
+2,0
+4,6
+24,0
+6
+0
+6
+5,0
+6
+0
+6
+3,0
+2,6
+8,0
+6
+2,0
+b,6
+5,0
+6
+4,0
+6
+7,0
+6
+2,0
+6
+3,0
+2,6
+23,0
+6
+9,0
+6
+3,0
+6
+9,0
+6
+5,0
+6
+6,0
+6
+5,0
+6
+4,0
+6
+7,0
+6
+2,0
+6
+3,0
+6
+0
+6
+22,0
+b,6
+3,0
+b,6
+5,0
+6
+6,0
+6
+5,0
+6
+3,0
+6
+8,0
+6
+3,0
+3,6
+25,0
+6
+9,0
+6
+3,0
+6
+9,0
+6
+5,0
+6
+6,0
+6
+5,0
+6
+2,0
+6
+1b7b,0
+100 90 32
+261,0
+2,7
+18,0
+7
+3,0
+7
+8,0
+7
+5,0
+7
+7,0
+7
+11,0
+7
+3,0
+7
+17,0
+2,7
+8,0
+b,7
+6,0
+7
+3,0
+7
+8,0
+7
+5,0
+7
+7,0
+7
+0
+7,7
+2,0
+7
+7,0
+7
+3,0
+7
+15,0
+7
+a,0
+7
+4,0
+7
+4,0
+7
+2,0
+d,7
+0
+7,7
+0
+7
+0
+7
+6,0
+7
+4,0
+7
+2,0
+7
+3,0
+7
+6,0
+7
+0
+7
+22,0
+7
+4,0
+7
+4,0
+7
+6,0
+7
+3,0
+7
+8,0
+7
+3,0
+7
+3,0
+7
+4,0
+7
+5,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+21,0
+7
+4,0
+7
+4,0
+7
+2,0
+d,7
+2,0
+6,7
+0
+7
+0
+7
+0
+7
+3,0
+7
+0
+9,7
+2,0
+7
+2,0
+5,7
+24,0
+b,7
+6,0
+7
+2,0
+7
+7,0
+7
+3,0
+7
+3,0
+2,7
+4,0
+2,7
+5,0
+7
+2,0
+7
+2,0
+7
+7,0
+7
+24,0
+7
+4,0
+7
+4,0
+7
+3,0
+b,7
+3,0
+5,7
+0
+7
+2,0
+7
+3,0
+7
+0
+7
+5,0
+7
+2,0
+7
+2,0
+7
+7,0
+7
+24,0
+7
+3,0
+2,7
+4,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+3,0
+7
+3,0
+7
+3,0
+7
+2,0
+7
+0
+7
+5,0
+7
+2,0
+7,7
+2,0
+7
+7,0
+7
+24,0
+7
+3,0
+7
+0
+7
+3,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+2,0
+2,7
+3,0
+5,7
+2,0
+7
+0
+7
+5,0
+7
+5,0
+7
+2,0
+7
+2,0
+7
+7,0
+7
+24,0
+7
+2,0
+7
+3,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+5,0
+7
+6,0
+3,7
+3,0
+7
+5,0
+7
+5,0
+7
+0
+7
+2,0
+4,7
+24,0
+7
+0
+7
+5,0
+7
+0
+7
+3,0
+2,7
+8,0
+7
+2,0
+b,7
+5,0
+7
+4,0
+7
+7,0
+7
+2,0
+7
+3,0
+2,7
+23,0
+7
+9,0
+7
+3,0
+7
+9,0
+7
+5,0
+7
+6,0
+7
+5,0
+7
+4,0
+7
+7,0
+7
+2,0
+7
+3,0
+7
+0
+7
+22,0
+b,7
+3,0
+b,7
+5,0
+7
+6,0
+7
+5,0
+7
+3,0
+7
+8,0
+7
+3,0
+3,7
+25,0
+7
+9,0
+7
+3,0
+7
+9,0
+7
+5,0
+7
+6,0
+7
+5,0
+7
+2,0
+7
+1b7b,0
+100 90 32
+261,0
+2,10
+18,0
+10
+3,0
+10
+8,0
+10
+5,0
+10
+7,0
+10
+11,0
+10
+3,0
+10
+17,0
+2,10
+8,0
+b,10
+6,0
+10
+3,0
+10
+8,0
+10
+5,0
+10
+7,0
+10
+0
+7,10
+2,0
+10
+7,0
+10
+3,0
+10
+15,0
+10
+a,0
+10
+4,0
+10
+4,0
+10
+2,0
+d,10
+0
+7,10
+0
+10
+0
+10
+6,0
+10
+4,0
+10
+2,0
+10
+3,0
+10
+6,0
+10
+0
+10
+22,0
+10
+4,0
+10
+4,0
+10
+6,0
+10
+3,0
+10
+8,0
+10
+3,0
+10
+3,0
+10
+4,0
+10
+5,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+21,0
+10
+4,0
+10
+4,0
+10
+2,0
+d,10
+2,0
+6,10
+0
+10
+0
+10
+0
+10
+3,0
+10
+0
+9,10
+2,0
+10
+2,0
+5,10
+24,0
+b,10
+6,0
+10
+2,0
+10
+7,0
+10
+3,0
+10
+3,0
+2,10
+4,0
+2,10
+5,0
+10
+2,0
+10
+2,0
+10
+7,0
+10
+24,0
+10
+4,0
+10
+4,0
+10
+3,0
+b,10
+3,0
+5,10
+0
+10
+2,0
+10
+3,0
+10
+0
+10
+5,0
+10
+2,0
+10
+2,0
+10
+7,0
+10
+24,0
+10
+3,0
+2,10
+4,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+3,0
+10
+3,0
+10
+3,0
+10
+2,0
+10
+0
+10
+5,0
+10
+2,0
+7,10
+2,0
+10
+7,0
+10
+24,0
+10
+3,0
+10
+0
+10
+3,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+2,0
+2,10
+3,0
+5,10
+2,0
+10
+0
+10
+5,0
+10
+5,0
+10
+2,0
+10
+2,0
+10
+7,0
+10
+24,0
+10
+2,0
+10
+3,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+5,0
+10
+6,0
+3,10
+3,0
+10
+5,0
+10
+5,0
+10
+0
+10
+2,0
+4,10
+24,0
+10
+0
+10
+5,0
+10
+0
+10
+3,0
+2,10
+8,0
+10
+2,0
+b,10
+5,0
+10
+4,0
+10
+7,0
+10
+2,0
+10
+3,0
+2,10
+23,0
+10
+9,0
+10
+3,0
+10
+9,0
+10
+5,0
+10
+6,0
+10
+5,0
+10
+4,0
+10
+7,0
+10
+2,0
+10
+3,0
+10
+0
+10
+22,0
+b,10
+3,0
+b,10
+5,0
+10
+6,0
+10
+5,0
+10
+3,0
+10
+8,0
+10
+3,0
+3,10
+25,0
+10
+9,0
+10
+3,0
+10
+9,0
+10
+5,0
+10
+6,0
+10
+5,0
+10
+2,0
+10
+1b7b,0
+100 90 32
+261,0
+2,33
+18,0
+33
+3,0
+33
+8,0
+33
+5,0
+33
+7,0
+33
+11,0
+33
+3,0
+33
+17,0
+2,33
+8,0
+b,33
+6,0
+33
+3,0
+33
+8,0
+33
+5,0
+33
+7,0
+33
+0
+7,33
+2,0
+33
+7,0
+33
+3,0
+33
+15,0
+33
+a,0
+33
+4,0
+33
+4,0
+33
+2,0
+d,33
+0
+7,33
+0
+33
+0
+33
+6,0
+33
+4,0
+33
+2,0
+33
+3,0
+33
+6,0
+33
+0
+33
+22,0
+33
+4,0
+33
+4,0
+33
+6,0
+33
+3,0
+33
+8,0
+33
+3,0
+33
+3,0
+33
+4,0
+33
+5,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+21,0
+33
+4,0
+33
+4,0
+33
+2,0
+d,33
+2,0
+6,33
+0
+33
+0
+33
+0
+33
+3,0
+33
+0
+9,33
+2,0
+33
+2,0
+5,33
+24,0
+b,33
+6,0
+33
+2,0
+33
+7,0
+33
+3,0
+33
+3,0
+2,33
+4,0
+2,33
+5,0
+33
+2,0
+33
+2,0
+33
+7,0
+33
+24,0
+33
+4,0
+33
+4,0
+33
+3,0
+b,33
+3,0
+5,33
+0
+33
+2,0
+33
+3,0
+33
+0
+33
+5,0
+33
+2,0
+33
+2,0
+33
+7,0
+33
+24,0
+33
+3,0
+2,33
+4,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+3,0
+33
+3,0
+33
+3,0
+33
+2,0
+33
+0
+33
+5,0
+33
+2,0
+7,33
+2,0
+33
+7,0
+33
+24,0
+33
+3,0
+33
+0
+33
+3,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+2,0
+2,33
+3,0
+5,33
+2,0
+33
+0
+33
+5,0
+33
+5,0
+33
+2,0
+33
+2,0
+33
+7,0
+33
+24,0
+33
+2,0
+33
+3,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+5,0
+33
+6,0
+3,33
+3,0
+33
+5,0
+33
+5,0
+33
+0
+33
+2,0
+4,33
+24,0
+33
+0
+33
+5,0
+33
+0
+33
+3,0
+2,33
+8,0
+33
+2,0
+b,33
+5,0
+33
+4,0
+33
+7,0
+33
+2,0
+33
+3,0
+2,33
+23,0
+33
+9,0
+33
+3,0
+33
+9,0
+33
+5,0
+33
+6,0
+33
+5,0
+33
+4,0
+33
+7,0
+33
+2,0
+33
+3,0
+33
+0
+33
+22,0
+b,33
+3,0
+b,33
+5,0
+33
+6,0
+33
+5,0
+33
+3,0
+33
+8,0
+33
+3,0
+3,33
+25,0
+33
+9,0
+33
+3,0
+33
+9,0
+33
+5,0
+33
+6,0
+33
+5,0
+33
+2,0
+33
+1b7b,0
+100 90 32
+261,0
+2,81
+18,0
+81
+3,0
+81
+8,0
+81
+5,0
+81
+7,0
+81
+11,0
+81
+3,0
+81
+17,0
+2,81
+8,0
+b,81
+6,0
+81
+3,0
+81
+8,0
+81
+5,0
+81
+7,0
+81
+0
+7,81
+2,0
+81
+7,0
+81
+3,0
+81
+15,0
+81
+a,0
+81
+4,0
+81
+4,0
+81
+2,0
+d,81
+0
+7,81
+0
+81
+0
+81
+6,0
+81
+4,0
+81
+2,0
+81
+3,0
+81
+6,0
+81
+0
+81
+22,0
+81
+4,0
+81
+4,0
+81
+6,0
+81
+3,0
+81
+8,0
+81
+3,0
+81
+3,0
+81
+4,0
+81
+5,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+21,0
+81
+4,0
+81
+4,0
+81
+2,0
+d,81
+2,0
+6,81
+0
+81
+0
+81
+0
+81
+3,0
+81
+0
+9,81
+2,0
+81
+2,0
+5,81
+24,0
+b,81
+6,0
+81
+2,0
+81
+7,0
+81
+3,0
+81
+3,0
+2,81
+4,0
+2,81
+5,0
+81
+2,0
+81
+2,0
+81
+7,0
+81
+24,0
+81
+4,0
+81
+4,0
+81
+3,0
+b,81
+3,0
+5,81
+0
+81
+2,0
+81
+3,0
+81
+0
+81
+5,0
+81
+2,0
+81
+2,0
+81
+7,0
+81
+24,0
+81
+3,0
+2,81
+4,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+3,0
+81
+3,0
+81
+3,0
+81
+2,0
+81
+0
+81
+5,0
+81
+2,0
+7,81
+2,0
+81
+7,0
+81
+24,0
+81
+3,0
+81
+0
+81
+3,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+2,0
+2,81
+3,0
+5,81
+2,0
+81
+0
+81
+5,0
+81
+5,0
+81
+2,0
+81
+2,0
+81
+7,0
+81
+24,0
+81
+2,0
+81
+3,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+5,0
+81
+6,0
+3,81
+3,0
+81
+5,0
+81
+5,0
+81
+0
+81
+2,0
+4,81
+24,0
+81
+0
+81
+5,0
+81
+0
+81
+3,0
+2,81
+8,0
+81
+2,0
+b,81
+5,0
+81
+4,0
+81
+7,0
+81
+2,0
+81
+3,0
+2,81
+23,0
+81
+9,0
+81
+3,0
+81
+9,0
+81
+5,0
+81
+6,0
+81
+5,0
+81
+4,0
+81
+7,0
+81
+2,0
+81
+3,0
+81
+0
+81
+22,0
+b,81
+3,0
+b,81
+5,0
+81
+6,0
+81
+5,0
+81
+3,0
+81
+8,0
+81
+3,0
+3,81
+25,0
+81
+9,0
+81
+3,0
+81
+9,0
+81
+5,0
+81
+6,0
+81
+5,0
+81
+2,0
+81
+1b7b,0
+100 90 32
+261,0
+2,a3
+18,0
+a3
+3,0
+a3
+8,0
+a3
+5,0
+a3
+7,0
+a3
+11,0
+a3
+3,0
+a3
+17,0
+2,a3
+8,0
+b,a3
+6,0
+a3
+3,0
+a3
+8,0
+a3
+5,0
+a3
+7,0
+a3
+0
+7,a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+15,0
+a3
+a,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+d,a3
+0
+7,a3
+0
+a3
+0
+a3
+6,0
+a3
+4,0
+a3
+2,0
+a3
+3,0
+a3
+6,0
+a3
+0
+a3
+22,0
+a3
+4,0
+a3
+4,0
+a3
+6,0
+a3
+3,0
+a3
+8,0
+a3
+3,0
+a3
+3,0
+a3
+4,0
+a3
+5,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+21,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+d,a3
+2,0
+6,a3
+0
+a3
+0
+a3
+0
+a3
+3,0
+a3
+0
+9,a3
+2,0
+a3
+2,0
+5,a3
+24,0
+b,a3
+6,0
+a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+3,0
+2,a3
+4,0
+2,a3
+5,0
+a3
+2,0
+a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+b,a3
+3,0
+5,a3
+0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+5,0
+a3
+2,0
+a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+3,0
+2,a3
+4,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+3,0
+a3
+3,0
+a3
+3,0
+a3
+2,0
+a3
+0
+a3
+5,0
+a3
+2,0
+7,a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+3,0
+a3
+0
+a3
+3,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+2,0
+2,a3
+3,0
+5,a3
+2,0
+a3
+0
+a3
+5,0
+a3
+5,0
+a3
+2,0
+a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+2,0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+5,0
+a3
+6,0
+3,a3
+3,0
+a3
+5,0
+a3
+5,0
+a3
+0
+a3
+2,0
+4,a3
+24,0
+a3
+0
+a3
+5,0
+a3
+0
+a3
+3,0
+2,a3
+8,0
+a3
+2,0
+b,a3
+5,0
+a3
+4,0
+a3
+7,0
+a3
+2,0
+a3
+3,0
+2,a3
+23,0
+a3
+9,0
+a3
+3,0
+a3
+9,0
+a3
+5,0
+a3
+6,0
+a3
+5,0
+a3
+4,0
+a3
+7,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+22,0
+b,a3
+3,0
+b,a3
+5,0
+a3
+6,0
+a3
+5,0
+a3
+3,0
+a3
+8,0
+a3
+3,0
+3,a3
+25,0
+a3
+9,0
+a3
+3,0
+a3
+9,0
+a3
+5,0
+a3
+6,0
+a3
+5,0
+a3
+2,0
+a3
+1b7b,0
+100 90 32
+261,0
+2,ff
+18,0
+ff
+3,0
+ff
+8,0
+ff
+5,0
+ff
+7,0
+ff
+11,0
+ff
+3,0
+ff
+17,0
+2,ff
+8,0
+b,ff
+6,0
+ff
+3,0
+ff
+8,0
+ff
+5,0
+ff
+7,0
+ff
+0
+7,ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+15,0
+ff
+a,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+d,ff
+0
+7,ff
+0
+ff
+0
+ff
+6,0
+ff
+4,0
+ff
+2,0
+ff
+3,0
+ff
+6,0
+ff
+0
+ff
+22,0
+ff
+4,0
+ff
+4,0
+ff
+6,0
+ff
+3,0
+ff
+8,0
+ff
+3,0
+ff
+3,0
+ff
+4,0
+ff
+5,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+21,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+d,ff
+2,0
+6,ff
+0
+ff
+0
+ff
+0
+ff
+3,0
+ff
+0
+9,ff
+2,0
+ff
+2,0
+5,ff
+24,0
+b,ff
+6,0
+ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+3,0
+2,ff
+4,0
+2,ff
+5,0
+ff
+2,0
+ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+b,ff
+3,0
+5,ff
+0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+5,0
+ff
+2,0
+ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+3,0
+2,ff
+4,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+3,0
+ff
+3,0
+ff
+3,0
+ff
+2,0
+ff
+0
+ff
+5,0
+ff
+2,0
+7,ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+3,0
+ff
+0
+ff
+3,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+2,0
+2,ff
+3,0
+5,ff
+2,0
+ff
+0
+ff
+5,0
+ff
+5,0
+ff
+2,0
+ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+2,0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+5,0
+ff
+6,0
+3,ff
+3,0
+ff
+5,0
+ff
+5,0
+ff
+0
+ff
+2,0
+4,ff
+24,0
+ff
+0
+ff
+5,0
+ff
+0
+ff
+3,0
+2,ff
+8,0
+ff
+2,0
+b,ff
+5,0
+ff
+4,0
+ff
+7,0
+ff
+2,0
+ff
+3,0
+2,ff
+23,0
+ff
+9,0
+ff
+3,0
+ff
+9,0
+ff
+5,0
+ff
+6,0
+ff
+5,0
+ff
+4,0
+ff
+7,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+22,0
+b,ff
+3,0
+b,ff
+5,0
+ff
+6,0
+ff
+5,0
+ff
+3,0
+ff
+8,0
+ff
+3,0
+3,ff
+25,0
+ff
+9,0
+ff
+3,0
+ff
+9,0
+ff
+5,0
+ff
+6,0
+ff
+5,0
+ff
+2,0
+ff
+1b7b,0
+100 90 32
+261,0
+2,100
+18,0
+100
+3,0
+100
+8,0
+100
+5,0
+100
+7,0
+100
+11,0
+100
+3,0
+100
+17,0
+2,100
+8,0
+b,100
+6,0
+100
+3,0
+100
+8,0
+100
+5,0
+100
+7,0
+100
+0
+7,100
+2,0
+100
+7,0
+100
+3,0
+100
+15,0
+100
+a,0
+100
+4,0
+100
+4,0
+100
+2,0
+d,100
+0
+7,100
+0
+100
+0
+100
+6,0
+100
+4,0
+100
+2,0
+100
+3,0
+100
+6,0
+100
+0
+100
+22,0
+100
+4,0
+100
+4,0
+100
+6,0
+100
+3,0
+100
+8,0
+100
+3,0
+100
+3,0
+100
+4,0
+100
+5,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+21,0
+100
+4,0
+100
+4,0
+100
+2,0
+d,100
+2,0
+6,100
+0
+100
+0
+100
+0
+100
+3,0
+100
+0
+9,100
+2,0
+100
+2,0
+5,100
+24,0
+b,100
+6,0
+100
+2,0
+100
+7,0
+100
+3,0
+100
+3,0
+2,100
+4,0
+2,100
+5,0
+100
+2,0
+100
+2,0
+100
+7,0
+100
+24,0
+100
+4,0
+100
+4,0
+100
+3,0
+b,100
+3,0
+5,100
+0
+100
+2,0
+100
+3,0
+100
+0
+100
+5,0
+100
+2,0
+100
+2,0
+100
+7,0
+100
+24,0
+100
+3,0
+2,100
+4,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+3,0
+100
+3,0
+100
+3,0
+100
+2,0
+100
+0
+100
+5,0
+100
+2,0
+7,100
+2,0
+100
+7,0
+100
+24,0
+100
+3,0
+100
+0
+100
+3,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+2,0
+2,100
+3,0
+5,100
+2,0
+100
+0
+100
+5,0
+100
+5,0
+100
+2,0
+100
+2,0
+100
+7,0
+100
+24,0
+100
+2,0
+100
+3,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+5,0
+100
+6,0
+3,100
+3,0
+100
+5,0
+100
+5,0
+100
+0
+100
+2,0
+4,100
+24,0
+100
+0
+100
+5,0
+100
+0
+100
+3,0
+2,100
+8,0
+100
+2,0
+b,100
+5,0
+100
+4,0
+100
+7,0
+100
+2,0
+100
+3,0
+2,100
+23,0
+100
+9,0
+100
+3,0
+100
+9,0
+100
+5,0
+100
+6,0
+100
+5,0
+100
+4,0
+100
+7,0
+100
+2,0
+100
+3,0
+100
+0
+100
+22,0
+b,100
+3,0
+b,100
+5,0
+100
+6,0
+100
+5,0
+100
+3,0
+100
+8,0
+100
+3,0
+3,100
+25,0
+100
+9,0
+100
+3,0
+100
+9,0
+100
+5,0
+100
+6,0
+100
+5,0
+100
+2,0
+100
+1b7b,0
+100 90 32
+261,0
+2,12c
+18,0
+12c
+3,0
+12c
+8,0
+12c
+5,0
+12c
+7,0
+12c
+11,0
+12c
+3,0
+12c
+17,0
+2,12c
+8,0
+b,12c
+6,0
+12c
+3,0
+12c
+8,0
+12c
+5,0
+12c
+7,0
+12c
+0
+7,12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+15,0
+12c
+a,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+d,12c
+0
+7,12c
+0
+12c
+0
+12c
+6,0
+12c
+4,0
+12c
+2,0
+12c
+3,0
+12c
+6,0
+12c
+0
+12c
+22,0
+12c
+4,0
+12c
+4,0
+12c
+6,0
+12c
+3,0
+12c
+8,0
+12c
+3,0
+12c
+3,0
+12c
+4,0
+12c
+5,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+21,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+d,12c
+2,0
+6,12c
+0
+12c
+0
+12c
+0
+12c
+3,0
+12c
+0
+9,12c
+2,0
+12c
+2,0
+5,12c
+24,0
+b,12c
+6,0
+12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+3,0
+2,12c
+4,0
+2,12c
+5,0
+12c
+2,0
+12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+b,12c
+3,0
+5,12c
+0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+5,0
+12c
+2,0
+12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+3,0
+2,12c
+4,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+3,0
+12c
+3,0
+12c
+3,0
+12c
+2,0
+12c
+0
+12c
+5,0
+12c
+2,0
+7,12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+3,0
+12c
+0
+12c
+3,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+2,0
+2,12c
+3,0
+5,12c
+2,0
+12c
+0
+12c
+5,0
+12c
+5,0
+12c
+2,0
+12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+2,0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+5,0
+12c
+6,0
+3,12c
+3,0
+12c
+5,0
+12c
+5,0
+12c
+0
+12c
+2,0
+4,12c
+24,0
+12c
+0
+12c
+5,0
+12c
+0
+12c
+3,0
+2,12c
+8,0
+12c
+2,0
+b,12c
+5,0
+12c
+4,0
+12c
+7,0
+12c
+2,0
+12c
+3,0
+2,12c
+23,0
+12c
+9,0
+12c
+3,0
+12c
+9,0
+12c
+5,0
+12c
+6,0
+12c
+5,0
+12c
+4,0
+12c
+7,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+22,0
+b,12c
+3,0
+b,12c
+5,0
+12c
+6,0
+12c
+5,0
+12c
+3,0
+12c
+8,0
+12c
+3,0
+3,12c
+25,0
+12c
+9,0
+12c
+3,0
+12c
+9,0
+12c
+5,0
+12c
+6,0
+12c
+5,0
+12c
+2,0
+12c
+1b7b,0
+100 90 32
+261,0
+2,3e8
+18,0
+3e8
+3,0
+3e8
+8,0
+3e8
+5,0
+3e8
+7,0
+3e8
+11,0
+3e8
+3,0
+3e8
+17,0
+2,3e8
+8,0
+b,3e8
+6,0
+3e8
+3,0
+3e8
+8,0
+3e8
+5,0
+3e8
+7,0
+3e8
+0
+7,3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+15,0
+3e8
+a,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+d,3e8
+0
+7,3e8
+0
+3e8
+0
+3e8
+6,0
+3e8
+4,0
+3e8
+2,0
+3e8
+3,0
+3e8
+6,0
+3e8
+0
+3e8
+22,0
+3e8
+4,0
+3e8
+4,0
+3e8
+6,0
+3e8
+3,0
+3e8
+8,0
+3e8
+3,0
+3e8
+3,0
+3e8
+4,0
+3e8
+5,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+21,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+d,3e8
+2,0
+6,3e8
+0
+3e8
+0
+3e8
+0
+3e8
+3,0
+3e8
+0
+9,3e8
+2,0
+3e8
+2,0
+5,3e8
+24,0
+b,3e8
+6,0
+3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+3,0
+2,3e8
+4,0
+2,3e8
+5,0
+3e8
+2,0
+3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+b,3e8
+3,0
+5,3e8
+0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+5,0
+3e8
+2,0
+3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+3,0
+2,3e8
+4,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+3,0
+3e8
+3,0
+3e8
+3,0
+3e8
+2,0
+3e8
+0
+3e8
+5,0
+3e8
+2,0
+7,3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+3,0
+3e8
+0
+3e8
+3,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+2,0
+2,3e8
+3,0
+5,3e8
+2,0
+3e8
+0
+3e8
+5,0
+3e8
+5,0
+3e8
+2,0
+3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+2,0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+5,0
+3e8
+6,0
+3,3e8
+3,0
+3e8
+5,0
+3e8
+5,0
+3e8
+0
+3e8
+2,0
+4,3e8
+24,0
+3e8
+0
+3e8
+5,0
+3e8
+0
+3e8
+3,0
+2,3e8
+8,0
+3e8
+2,0
+b,3e8
+5,0
+3e8
+4,0
+3e8
+7,0
+3e8
+2,0
+3e8
+3,0
+2,3e8
+23,0
+3e8
+9,0
+3e8
+3,0
+3e8
+9,0
+3e8
+5,0
+3e8
+6,0
+3e8
+5,0
+3e8
+4,0
+3e8
+7,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+22,0
+b,3e8
+3,0
+b,3e8
+5,0
+3e8
+6,0
+3e8
+5,0
+3e8
+3,0
+3e8
+8,0
+3e8
+3,0
+3,3e8
+25,0
+3e8
+9,0
+3e8
+3,0
+3e8
+9,0
+3e8
+5,0
+3e8
+6,0
+3e8
+5,0
+3e8
+2,0
+3e8
+1b7b,0
+100 90 32
+261,0
+2,111111
+18,0
+111111
+3,0
+111111
+8,0
+111111
+5,0
+111111
+7,0
+111111
+11,0
+111111
+3,0
+111111
+17,0
+2,111111
+8,0
+b,111111
+6,0
+111111
+3,0
+111111
+8,0
+111111
+5,0
+111111
+7,0
+111111
+0
+7,111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+15,0
+111111
+a,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+d,111111
+0
+7,111111
+0
+111111
+0
+111111
+6,0
+111111
+4,0
+111111
+2,0
+111111
+3,0
+111111
+6,0
+111111
+0
+111111
+22,0
+111111
+4,0
+111111
+4,0
+111111
+6,0
+111111
+3,0
+111111
+8,0
+111111
+3,0
+111111
+3,0
+111111
+4,0
+111111
+5,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+21,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+d,111111
+2,0
+6,111111
+0
+111111
+0
+111111
+0
+111111
+3,0
+111111
+0
+9,111111
+2,0
+111111
+2,0
+5,111111
+24,0
+b,111111
+6,0
+111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+3,0
+2,111111
+4,0
+2,111111
+5,0
+111111
+2,0
+111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+b,111111
+3,0
+5,111111
+0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+5,0
+111111
+2,0
+111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+3,0
+2,111111
+4,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+3,0
+111111
+3,0
+111111
+3,0
+111111
+2,0
+111111
+0
+111111
+5,0
+111111
+2,0
+7,111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+3,0
+111111
+0
+111111
+3,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+2,0
+2,111111
+3,0
+5,111111
+2,0
+111111
+0
+111111
+5,0
+111111
+5,0
+111111
+2,0
+111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+2,0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+5,0
+111111
+6,0
+3,111111
+3,0
+111111
+5,0
+111111
+5,0
+111111
+0
+111111
+2,0
+4,111111
+24,0
+111111
+0
+111111
+5,0
+111111
+0
+111111
+3,0
+2,111111
+8,0
+111111
+2,0
+b,111111
+5,0
+111111
+4,0
+111111
+7,0
+111111
+2,0
+111111
+3,0
+2,111111
+23,0
+111111
+9,0
+111111
+3,0
+111111
+9,0
+111111
+5,0
+111111
+6,0
+111111
+5,0
+111111
+4,0
+111111
+7,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+22,0
+b,111111
+3,0
+b,111111
+5,0
+111111
+6,0
+111111
+5,0
+111111
+3,0
+111111
+8,0
+111111
+3,0
+3,111111
+25,0
+111111
+9,0
+111111
+3,0
+111111
+9,0
+111111
+5,0
+111111
+6,0
+111111
+5,0
+111111
+2,0
+111111
+1b7b,0
+100 90 32
+261,0
+2,400200
+18,0
+400200
+3,0
+400200
+8,0
+400200
+5,0
+400200
+7,0
+400200
+11,0
+400200
+3,0
+400200
+17,0
+2,400200
+8,0
+b,400200
+6,0
+400200
+3,0
+400200
+8,0
+400200
+5,0
+400200
+7,0
+400200
+0
+7,400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+15,0
+400200
+a,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+d,400200
+0
+7,400200
+0
+400200
+0
+400200
+6,0
+400200
+4,0
+400200
+2,0
+400200
+3,0
+400200
+6,0
+400200
+0
+400200
+22,0
+400200
+4,0
+400200
+4,0
+400200
+6,0
+400200
+3,0
+400200
+8,0
+400200
+3,0
+400200
+3,0
+400200
+4,0
+400200
+5,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+21,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+d,400200
+2,0
+6,400200
+0
+400200
+0
+400200
+0
+400200
+3,0
+400200
+0
+9,400200
+2,0
+400200
+2,0
+5,400200
+24,0
+b,400200
+6,0
+400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+3,0
+2,400200
+4,0
+2,400200
+5,0
+400200
+2,0
+400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+b,400200
+3,0
+5,400200
+0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+5,0
+400200
+2,0
+400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+3,0
+2,400200
+4,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+3,0
+400200
+3,0
+400200
+3,0
+400200
+2,0
+400200
+0
+400200
+5,0
+400200
+2,0
+7,400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+3,0
+400200
+0
+400200
+3,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+2,0
+2,400200
+3,0
+5,400200
+2,0
+400200
+0
+400200
+5,0
+400200
+5,0
+400200
+2,0
+400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+2,0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+5,0
+400200
+6,0
+3,400200
+3,0
+400200
+5,0
+400200
+5,0
+400200
+0
+400200
+2,0
+4,400200
+24,0
+400200
+0
+400200
+5,0
+400200
+0
+400200
+3,0
+2,400200
+8,0
+400200
+2,0
+b,400200
+5,0
+400200
+4,0
+400200
+7,0
+400200
+2,0
+400200
+3,0
+2,400200
+23,0
+400200
+9,0
+400200
+3,0
+400200
+9,0
+400200
+5,0
+400200
+6,0
+400200
+5,0
+400200
+4,0
+400200
+7,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+22,0
+b,400200
+3,0
+b,400200
+5,0
+400200
+6,0
+400200
+5,0
+400200
+3,0
+400200
+8,0
+400200
+3,0
+3,400200
+25,0
+400200
+9,0
+400200
+3,0
+400200
+9,0
+400200
+5,0
+400200
+6,0
+400200
+5,0
+400200
+2,0
+400200
+1b7b,0
+100 90 32
+261,0
+2,777777
+18,0
+777777
+3,0
+777777
+8,0
+777777
+5,0
+777777
+7,0
+777777
+11,0
+777777
+3,0
+777777
+17,0
+2,777777
+8,0
+b,777777
+6,0
+777777
+3,0
+777777
+8,0
+777777
+5,0
+777777
+7,0
+777777
+0
+7,777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+15,0
+777777
+a,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+d,777777
+0
+7,777777
+0
+777777
+0
+777777
+6,0
+777777
+4,0
+777777
+2,0
+777777
+3,0
+777777
+6,0
+777777
+0
+777777
+22,0
+777777
+4,0
+777777
+4,0
+777777
+6,0
+777777
+3,0
+777777
+8,0
+777777
+3,0
+777777
+3,0
+777777
+4,0
+777777
+5,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+21,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+d,777777
+2,0
+6,777777
+0
+777777
+0
+777777
+0
+777777
+3,0
+777777
+0
+9,777777
+2,0
+777777
+2,0
+5,777777
+24,0
+b,777777
+6,0
+777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+3,0
+2,777777
+4,0
+2,777777
+5,0
+777777
+2,0
+777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+b,777777
+3,0
+5,777777
+0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+5,0
+777777
+2,0
+777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+3,0
+2,777777
+4,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+3,0
+777777
+3,0
+777777
+3,0
+777777
+2,0
+777777
+0
+777777
+5,0
+777777
+2,0
+7,777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+3,0
+777777
+0
+777777
+3,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+2,0
+2,777777
+3,0
+5,777777
+2,0
+777777
+0
+777777
+5,0
+777777
+5,0
+777777
+2,0
+777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+2,0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+5,0
+777777
+6,0
+3,777777
+3,0
+777777
+5,0
+777777
+5,0
+777777
+0
+777777
+2,0
+4,777777
+24,0
+777777
+0
+777777
+5,0
+777777
+0
+777777
+3,0
+2,777777
+8,0
+777777
+2,0
+b,777777
+5,0
+777777
+4,0
+777777
+7,0
+777777
+2,0
+777777
+3,0
+2,777777
+23,0
+777777
+9,0
+777777
+3,0
+777777
+9,0
+777777
+5,0
+777777
+6,0
+777777
+5,0
+777777
+4,0
+777777
+7,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+22,0
+b,777777
+3,0
+b,777777
+5,0
+777777
+6,0
+777777
+5,0
+777777
+3,0
+777777
+8,0
+777777
+3,0
+3,777777
+25,0
+777777
+9,0
+777777
+3,0
+777777
+9,0
+777777
+5,0
+777777
+6,0
+777777
+5,0
+777777
+2,0
+777777
+1b7b,0
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+11,0
+1
+3,0
+1
+17,0
+2,1
+8,0
+b,1
+6,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+0
+7,1
+2,0
+1
+7,0
+1
+3,0
+1
+15,0
+1
+a,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+0
+7,1
+0
+1
+0
+1
+6,0
+1
+4,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+0
+1
+22,0
+1
+4,0
+1
+4,0
+1
+6,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+4,0
+1
+5,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+21,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+2,0
+6,1
+0
+1
+0
+1
+0
+1
+3,0
+1
+0
+9,1
+2,0
+1
+2,0
+5,1
+24,0
+b,1
+6,0
+1
+2,0
+1
+7,0
+1
+3,0
+1
+3,0
+2,1
+4,0
+2,1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+4,0
+1
+4,0
+1
+3,0
+b,1
+3,0
+5,1
+0
+1
+2,0
+1
+3,0
+1
+0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+2,1
+4,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+0
+1
+5,0
+1
+2,0
+7,1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+1
+0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3,0
+5,1
+2,0
+1
+0
+1
+5,0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+6,0
+3,1
+3,0
+1
+5,0
+1
+5,0
+1
+0
+1
+2,0
+4,1
+24,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+2,1
+8,0
+1
+2,0
+b,1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+2,1
+23,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+1
+0
+1
+22,0
+b,1
+3,0
+b,1
+5,0
+1
+6,0
+1
+5,0
+1
+3,0
+1
+8,0
+1
+3,0
+3,1
+25,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+2,0
+1
+1b7b,0
+100 90 32
+261,0
+2,2
+18,0
+2
+3,0
+2
+8,0
+2
+5,0
+2
+7,0
+2
+11,0
+2
+3,0
+2
+17,0
+2,2
+8,0
+b,2
+6,0
+2
+3,0
+2
+8,0
+2
+5,0
+2
+7,0
+2
+0
+7,2
+2,0
+2
+7,0
+2
+3,0
+2
+15,0
+2
+a,0
+2
+4,0
+2
+4,0
+2
+2,0
+d,2
+0
+7,2
+0
+2
+0
+2
+6,0
+2
+4,0
+2
+2,0
+2
+3,0
+2
+6,0
+2
+0
+2
+22,0
+2
+4,0
+2
+4,0
+2
+6,0
+2
+3,0
+2
+8,0
+2
+3,0
+2
+3,0
+2
+4,0
+2
+5,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+21,0
+2
+4,0
+2
+4,0
+2
+2,0
+d,2
+2,0
+6,2
+0
+2
+0
+2
+0
+2
+3,0
+2
+0
+9,2
+2,0
+2
+2,0
+5,2
+24,0
+b,2
+6,0
+2
+2,0
+2
+7,0
+2
+3,0
+2
+3,0
+2,2
+4,0
+2,2
+5,0
+2
+2,0
+2
+2,0
+2
+7,0
+2
+24,0
+2
+4,0
+2
+4,0
+2
+3,0
+b,2
+3,0
+5,2
+0
+2
+2,0
+2
+3,0
+2
+0
+2
+5,0
+2
+2,0
+2
+2,0
+2
+7,0
+2
+24,0
+2
+3,0
+2,2
+4,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+3,0
+2
+3,0
+2
+3,0
+2
+2,0
+2
+0
+2
+5,0
+2
+2,0
+7,2
+2,0
+2
+7,0
+2
+24,0
+2
+3,0
+2
+0
+2
+3,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+2,0
+2,2
+3,0
+5,2
+2,0
+2
+0
+2
+5,0
+2
+5,0
+2
+2,0
+2
+2,0
+2
+7,0
+2
+24,0
+2
+2,0
+2
+3,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+5,0
+2
+6,0
+3,2
+3,0
+2
+5,0
+2
+5,0
+2
+0
+2
+2,0
+4,2
+24,0
+2
+0
+2
+5,0
+2
+0
+2
+3,0
+2,2
+8,0
+2
+2,0
+b,2
+5,0
+2
+4,0
+2
+7,0
+2
+2,0
+2
+3,0
+2,2
+23,0
+2
+9,0
+2
+3,0
+2
+9,0
+2
+5,0
+2
+6,0
+2
+5,0
+2
+4,0
+2
+7,0
+2
+2,0
+2
+3,0
+2
+0
+2
+22,0
+b,2
+3,0
+b,2
+5,0
+2
+6,0
+2
+5,0
+2
+3,0
+2
+8,0
+2
+3,0
+3,2
+25,0
+2
+9,0
+2
+3,0
+2
+9,0
+2
+5,0
+2
+6,0
+2
+5,0
+2
+2,0
+2
+1b7b,0
+100 90 32
+261,0
+2,3
+18,0
+3
+3,0
+3
+8,0
+3
+5,0
+3
+7,0
+3
+11,0
+3
+3,0
+3
+17,0
+2,3
+8,0
+b,3
+6,0
+3
+3,0
+3
+8,0
+3
+5,0
+3
+7,0
+3
+0
+7,3
+2,0
+3
+7,0
+3
+3,0
+3
+15,0
+3
+a,0
+3
+4,0
+3
+4,0
+3
+2,0
+d,3
+0
+7,3
+0
+3
+0
+3
+6,0
+3
+4,0
+3
+2,0
+3
+3,0
+3
+6,0
+3
+0
+3
+22,0
+3
+4,0
+3
+4,0
+3
+6,0
+3
+3,0
+3
+8,0
+3
+3,0
+3
+3,0
+3
+4,0
+3
+5,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+21,0
+3
+4,0
+3
+4,0
+3
+2,0
+d,3
+2,0
+6,3
+0
+3
+0
+3
+0
+3
+3,0
+3
+0
+9,3
+2,0
+3
+2,0
+5,3
+24,0
+b,3
+6,0
+3
+2,0
+3
+7,0
+3
+3,0
+3
+3,0
+2,3
+4,0
+2,3
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+3
+24,0
+3
+4,0
+3
+4,0
+3
+3,0
+b,3
+3,0
+5,3
+0
+3
+2,0
+3
+3,0
+3
+0
+3
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+3
+24,0
+3
+3,0
+2,3
+4,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+3,0
+3
+3,0
+3
+3,0
+3
+2,0
+3
+0
+3
+5,0
+3
+2,0
+7,3
+2,0
+3
+7,0
+3
+24,0
+3
+3,0
+3
+0
+3
+3,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+2,0
+2,3
+3,0
+5,3
+2,0
+3
+0
+3
+5,0
+3
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+3
+24,0
+3
+2,0
+3
+3,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+5,0
+3
+6,0
+3,3
+3,0
+3
+5,0
+3
+5,0
+3
+0
+3
+2,0
+4,3
+24,0
+3
+0
+3
+5,0
+3
+0
+3
+3,0
+2,3
+8,0
+3
+2,0
+b,3
+5,0
+3
+4,0
+3
+7,0
+3
+2,0
+3
+3,0
+2,3
+23,0
+3
+9,0
+3
+3,0
+3
+9,0
+3
+5,0
+3
+6,0
+3
+5,0
+3
+4,0
+3
+7,0
+3
+2,0
+3
+3,0
+3
+0
+3
+22,0
+b,3
+3,0
+b,3
+5,0
+3
+6,0
+3
+5,0
+3
+3,0
+3
+8,0
+3
+3,0
+3,3
+25,0
+3
+9,0
+3
+3,0
+3
+9,0
+3
+5,0
+3
+6,0
+3
+5,0
+3
+2,0
+3
+1b7b,0
+100 90 32
+261,0
+2,4
+18,0
+4
+3,0
+4
+8,0
+4
+5,0
+4
+7,0
+4
+11,0
+4
+3,0
+4
+17,0
+2,4
+8,0
+b,4
+6,0
+4
+3,0
+4
+8,0
+4
+5,0
+4
+7,0
+4
+0
+7,4
+2,0
+4
+7,0
+4
+3,0
+4
+15,0
+4
+a,0
+4
+4,0
+4
+4,0
+4
+2,0
+d,4
+0
+7,4
+0
+4
+0
+4
+6,0
+4
+4,0
+4
+2,0
+4
+3,0
+4
+6,0
+4
+0
+4
+22,0
+4
+4,0
+4
+4,0
+4
+6,0
+4
+3,0
+4
+8,0
+4
+3,0
+4
+3,0
+4
+4,0
+4
+5,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+21,0
+4
+4,0
+4
+4,0
+4
+2,0
+d,4
+2,0
+6,4
+0
+4
+0
+4
+0
+4
+3,0
+4
+0
+9,4
+2,0
+4
+2,0
+5,4
+24,0
+b,4
+6,0
+4
+2,0
+4
+7,0
+4
+3,0
+4
+3,0
+2,4
+4,0
+2,4
+5,0
+4
+2,0
+4
+2,0
+4
+7,0
+4
+24,0
+4
+4,0
+4
+4,0
+4
+3,0
+b,4
+3,0
+5,4
+0
+4
+2,0
+4
+3,0
+4
+0
+4
+5,0
+4
+2,0
+4
+2,0
+4
+7,0
+4
+24,0
+4
+3,0
+2,4
+4,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+3,0
+4
+3,0
+4
+3,0
+4
+2,0
+4
+0
+4
+5,0
+4
+2,0
+7,4
+2,0
+4
+7,0
+4
+24,0
+4
+3,0
+4
+0
+4
+3,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+2,0
+2,4
+3,0
+5,4
+2,0
+4
+0
+4
+5,0
+4
+5,0
+4
+2,0
+4
+2,0
+4
+7,0
+4
+24,0
+4
+2,0
+4
+3,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+5,0
+4
+6,0
+3,4
+3,0
+4
+5,0
+4
+5,0
+4
+0
+4
+2,0
+4,4
+24,0
+4
+0
+4
+5,0
+4
+0
+4
+3,0
+2,4
+8,0
+4
+2,0
+b,4
+5,0
+4
+4,0
+4
+7,0
+4
+2,0
+4
+3,0
+2,4
+23,0
+4
+9,0
+4
+3,0
+4
+9,0
+4
+5,0
+4
+6,0
+4
+5,0
+4
+4,0
+4
+7,0
+4
+2,0
+4
+3,0
+4
+0
+4
+22,0
+b,4
+3,0
+b,4
+5,0
+4
+6,0
+4
+5,0
+4
+3,0
+4
+8,0
+4
+3,0
+3,4
+25,0
+4
+9,0
+4
+3,0
+4
+9,0
+4
+5,0
+4
+6,0
+4
+5,0
+4
+2,0
+4
+1b7b,0
+100 90 32
+261,0
+2,6
+18,0
+6
+3,0
+6
+8,0
+6
+5,0
+6
+7,0
+6
+11,0
+6
+3,0
+6
+17,0
+2,6
+8,0
+b,6
+6,0
+6
+3,0
+6
+8,0
+6
+5,0
+6
+7,0
+6
+0
+7,6
+2,0
+6
+7,0
+6
+3,0
+6
+15,0
+6
+a,0
+6
+4,0
+6
+4,0
+6
+2,0
+d,6
+0
+7,6
+0
+6
+0
+6
+6,0
+6
+4,0
+6
+2,0
+6
+3,0
+6
+6,0
+6
+0
+6
+22,0
+6
+4,0
+6
+4,0
+6
+6,0
+6
+3,0
+6
+8,0
+6
+3,0
+6
+3,0
+6
+4,0
+6
+5,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+21,0
+6
+4,0
+6
+4,0
+6
+2,0
+d,6
+2,0
+6,6
+0
+6
+0
+6
+0
+6
+3,0
+6
+0
+9,6
+2,0
+6
+2,0
+5,6
+24,0
+b,6
+6,0
+6
+2,0
+6
+7,0
+6
+3,0
+6
+3,0
+2,6
+4,0
+2,6
+5,0
+6
+2,0
+6
+2,0
+6
+7,0
+6
+24,0
+6
+4,0
+6
+4,0
+6
+3,0
+b,6
+3,0
+5,6
+0
+6
+2,0
+6
+3,0
+6
+0
+6
+5,0
+6
+2,0
+6
+2,0
+6
+7,0
+6
+24,0
+6
+3,0
+2,6
+4,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+3,0
+6
+3,0
+6
+3,0
+6
+2,0
+6
+0
+6
+5,0
+6
+2,0
+7,6
+2,0
+6
+7,0
+6
+24,0
+6
+3,0
+6
+0
+6
+3,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+2,0
+2,6
+3,0
+5,6
+2,0
+6
+0
+6
+5,0
+6
+5,0
+6
+2,0
+6
+2,0
+6
+7,0
+6
+24,0
+6
+2,0
+6
+3,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+5,0
+6
+6,0
+3,6
+3,0
+6
+5,0
+6
+5,0
+6
+0
+6
+2,0
+4,6
+24,0
+6
+0
+6
+5,0
+6
+0
+6
+3,0
+2,6
+8,0
+6
+2,0
+b,6
+5,0
+6
+4,0
+6
+7,0
+6
+2,0
+6
+3,0
+2,6
+23,0
+6
+9,0
+6
+3,0
+6
+9,0
+6
+5,0
+6
+6,0
+6
+5,0
+6
+4,0
+6
+7,0
+6
+2,0
+6
+3,0
+6
+0
+6
+22,0
+b,6
+3,0
+b,6
+5,0
+6
+6,0
+6
+5,0
+6
+3,0
+6
+8,0
+6
+3,0
+3,6
+25,0
+6
+9,0
+6
+3,0
+6
+9,0
+6
+5,0
+6
+6,0
+6
+5,0
+6
+2,0
+6
+1b7b,0
+100 90 32
+261,0
+2,7
+18,0
+7
+3,0
+7
+8,0
+7
+5,0
+7
+7,0
+7
+11,0
+7
+3,0
+7
+17,0
+2,7
+8,0
+b,7
+6,0
+7
+3,0
+7
+8,0
+7
+5,0
+7
+7,0
+7
+0
+7,7
+2,0
+7
+7,0
+7
+3,0
+7
+15,0
+7
+a,0
+7
+4,0
+7
+4,0
+7
+2,0
+d,7
+0
+7,7
+0
+7
+0
+7
+6,0
+7
+4,0
+7
+2,0
+7
+3,0
+7
+6,0
+7
+0
+7
+22,0
+7
+4,0
+7
+4,0
+7
+6,0
+7
+3,0
+7
+8,0
+7
+3,0
+7
+3,0
+7
+4,0
+7
+5,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+21,0
+7
+4,0
+7
+4,0
+7
+2,0
+d,7
+2,0
+6,7
+0
+7
+0
+7
+0
+7
+3,0
+7
+0
+9,7
+2,0
+7
+2,0
+5,7
+24,0
+b,7
+6,0
+7
+2,0
+7
+7,0
+7
+3,0
+7
+3,0
+2,7
+4,0
+2,7
+5,0
+7
+2,0
+7
+2,0
+7
+7,0
+7
+24,0
+7
+4,0
+7
+4,0
+7
+3,0
+b,7
+3,0
+5,7
+0
+7
+2,0
+7
+3,0
+7
+0
+7
+5,0
+7
+2,0
+7
+2,0
+7
+7,0
+7
+24,0
+7
+3,0
+2,7
+4,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+3,0
+7
+3,0
+7
+3,0
+7
+2,0
+7
+0
+7
+5,0
+7
+2,0
+7,7
+2,0
+7
+7,0
+7
+24,0
+7
+3,0
+7
+0
+7
+3,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+2,0
+2,7
+3,0
+5,7
+2,0
+7
+0
+7
+5,0
+7
+5,0
+7
+2,0
+7
+2,0
+7
+7,0
+7
+24,0
+7
+2,0
+7
+3,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+5,0
+7
+6,0
+3,7
+3,0
+7
+5,0
+7
+5,0
+7
+0
+7
+2,0
+4,7
+24,0
+7
+0
+7
+5,0
+7
+0
+7
+3,0
+2,7
+8,0
+7
+2,0
+b,7
+5,0
+7
+4,0
+7
+7,0
+7
+2,0
+7
+3,0
+2,7
+23,0
+7
+9,0
+7
+3,0
+7
+9,0
+7
+5,0
+7
+6,0
+7
+5,0
+7
+4,0
+7
+7,0
+7
+2,0
+7
+3,0
+7
+0
+7
+22,0
+b,7
+3,0
+b,7
+5,0
+7
+6,0
+7
+5,0
+7
+3,0
+7
+8,0
+7
+3,0
+3,7
+25,0
+7
+9,0
+7
+3,0
+7
+9,0
+7
+5,0
+7
+6,0
+7
+5,0
+7
+2,0
+7
+1b7b,0
+100 90 32
+261,0
+2,10
+18,0
+10
+3,0
+10
+8,0
+10
+5,0
+10
+7,0
+10
+11,0
+10
+3,0
+10
+17,0
+2,10
+8,0
+b,10
+6,0
+10
+3,0
+10
+8,0
+10
+5,0
+10
+7,0
+10
+0
+7,10
+2,0
+10
+7,0
+10
+3,0
+10
+15,0
+10
+a,0
+10
+4,0
+10
+4,0
+10
+2,0
+d,10
+0
+7,10
+0
+10
+0
+10
+6,0
+10
+4,0
+10
+2,0
+10
+3,0
+10
+6,0
+10
+0
+10
+22,0
+10
+4,0
+10
+4,0
+10
+6,0
+10
+3,0
+10
+8,0
+10
+3,0
+10
+3,0
+10
+4,0
+10
+5,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+21,0
+10
+4,0
+10
+4,0
+10
+2,0
+d,10
+2,0
+6,10
+0
+10
+0
+10
+0
+10
+3,0
+10
+0
+9,10
+2,0
+10
+2,0
+5,10
+24,0
+b,10
+6,0
+10
+2,0
+10
+7,0
+10
+3,0
+10
+3,0
+2,10
+4,0
+2,10
+5,0
+10
+2,0
+10
+2,0
+10
+7,0
+10
+24,0
+10
+4,0
+10
+4,0
+10
+3,0
+b,10
+3,0
+5,10
+0
+10
+2,0
+10
+3,0
+10
+0
+10
+5,0
+10
+2,0
+10
+2,0
+10
+7,0
+10
+24,0
+10
+3,0
+2,10
+4,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+3,0
+10
+3,0
+10
+3,0
+10
+2,0
+10
+0
+10
+5,0
+10
+2,0
+7,10
+2,0
+10
+7,0
+10
+24,0
+10
+3,0
+10
+0
+10
+3,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+2,0
+2,10
+3,0
+5,10
+2,0
+10
+0
+10
+5,0
+10
+5,0
+10
+2,0
+10
+2,0
+10
+7,0
+10
+24,0
+10
+2,0
+10
+3,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+5,0
+10
+6,0
+3,10
+3,0
+10
+5,0
+10
+5,0
+10
+0
+10
+2,0
+4,10
+24,0
+10
+0
+10
+5,0
+10
+0
+10
+3,0
+2,10
+8,0
+10
+2,0
+b,10
+5,0
+10
+4,0
+10
+7,0
+10
+2,0
+10
+3,0
+2,10
+23,0
+10
+9,0
+10
+3,0
+10
+9,0
+10
+5,0
+10
+6,0
+10
+5,0
+10
+4,0
+10
+7,0
+10
+2,0
+10
+3,0
+10
+0
+10
+22,0
+b,10
+3,0
+b,10
+5,0
+10
+6,0
+10
+5,0
+10
+3,0
+10
+8,0
+10
+3,0
+3,10
+25,0
+10
+9,0
+10
+3,0
+10
+9,0
+10
+5,0
+10
+6,0
+10
+5,0
+10
+2,0
+10
+1b7b,0
+100 90 32
+261,0
+2,33
+18,0
+33
+3,0
+33
+8,0
+33
+5,0
+33
+7,0
+33
+11,0
+33
+3,0
+33
+17,0
+2,33
+8,0
+b,33
+6,0
+33
+3,0
+33
+8,0
+33
+5,0
+33
+7,0
+33
+0
+7,33
+2,0
+33
+7,0
+33
+3,0
+33
+15,0
+33
+a,0
+33
+4,0
+33
+4,0
+33
+2,0
+d,33
+0
+7,33
+0
+33
+0
+33
+6,0
+33
+4,0
+33
+2,0
+33
+3,0
+33
+6,0
+33
+0
+33
+22,0
+33
+4,0
+33
+4,0
+33
+6,0
+33
+3,0
+33
+8,0
+33
+3,0
+33
+3,0
+33
+4,0
+33
+5,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+21,0
+33
+4,0
+33
+4,0
+33
+2,0
+d,33
+2,0
+6,33
+0
+33
+0
+33
+0
+33
+3,0
+33
+0
+9,33
+2,0
+33
+2,0
+5,33
+24,0
+b,33
+6,0
+33
+2,0
+33
+7,0
+33
+3,0
+33
+3,0
+2,33
+4,0
+2,33
+5,0
+33
+2,0
+33
+2,0
+33
+7,0
+33
+24,0
+33
+4,0
+33
+4,0
+33
+3,0
+b,33
+3,0
+5,33
+0
+33
+2,0
+33
+3,0
+33
+0
+33
+5,0
+33
+2,0
+33
+2,0
+33
+7,0
+33
+24,0
+33
+3,0
+2,33
+4,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+3,0
+33
+3,0
+33
+3,0
+33
+2,0
+33
+0
+33
+5,0
+33
+2,0
+7,33
+2,0
+33
+7,0
+33
+24,0
+33
+3,0
+33
+0
+33
+3,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+2,0
+2,33
+3,0
+5,33
+2,0
+33
+0
+33
+5,0
+33
+5,0
+33
+2,0
+33
+2,0
+33
+7,0
+33
+24,0
+33
+2,0
+33
+3,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+5,0
+33
+6,0
+3,33
+3,0
+33
+5,0
+33
+5,0
+33
+0
+33
+2,0
+4,33
+24,0
+33
+0
+33
+5,0
+33
+0
+33
+3,0
+2,33
+8,0
+33
+2,0
+b,33
+5,0
+33
+4,0
+33
+7,0
+33
+2,0
+33
+3,0
+2,33
+23,0
+33
+9,0
+33
+3,0
+33
+9,0
+33
+5,0
+33
+6,0
+33
+5,0
+33
+4,0
+33
+7,0
+33
+2,0
+33
+3,0
+33
+0
+33
+22,0
+b,33
+3,0
+b,33
+5,0
+33
+6,0
+33
+5,0
+33
+3,0
+33
+8,0
+33
+3,0
+3,33
+25,0
+33
+9,0
+33
+3,0
+33
+9,0
+33
+5,0
+33
+6,0
+33
+5,0
+33
+2,0
+33
+1b7b,0
+100 90 32
+261,0
+2,81
+18,0
+81
+3,0
+81
+8,0
+81
+5,0
+81
+7,0
+81
+11,0
+81
+3,0
+81
+17,0
+2,81
+8,0
+b,81
+6,0
+81
+3,0
+81
+8,0
+81
+5,0
+81
+7,0
+81
+0
+7,81
+2,0
+81
+7,0
+81
+3,0
+81
+15,0
+81
+a,0
+81
+4,0
+81
+4,0
+81
+2,0
+d,81
+0
+7,81
+0
+81
+0
+81
+6,0
+81
+4,0
+81
+2,0
+81
+3,0
+81
+6,0
+81
+0
+81
+22,0
+81
+4,0
+81
+4,0
+81
+6,0
+81
+3,0
+81
+8,0
+81
+3,0
+81
+3,0
+81
+4,0
+81
+5,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+21,0
+81
+4,0
+81
+4,0
+81
+2,0
+d,81
+2,0
+6,81
+0
+81
+0
+81
+0
+81
+3,0
+81
+0
+9,81
+2,0
+81
+2,0
+5,81
+24,0
+b,81
+6,0
+81
+2,0
+81
+7,0
+81
+3,0
+81
+3,0
+2,81
+4,0
+2,81
+5,0
+81
+2,0
+81
+2,0
+81
+7,0
+81
+24,0
+81
+4,0
+81
+4,0
+81
+3,0
+b,81
+3,0
+5,81
+0
+81
+2,0
+81
+3,0
+81
+0
+81
+5,0
+81
+2,0
+81
+2,0
+81
+7,0
+81
+24,0
+81
+3,0
+2,81
+4,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+3,0
+81
+3,0
+81
+3,0
+81
+2,0
+81
+0
+81
+5,0
+81
+2,0
+7,81
+2,0
+81
+7,0
+81
+24,0
+81
+3,0
+81
+0
+81
+3,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+2,0
+2,81
+3,0
+5,81
+2,0
+81
+0
+81
+5,0
+81
+5,0
+81
+2,0
+81
+2,0
+81
+7,0
+81
+24,0
+81
+2,0
+81
+3,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+5,0
+81
+6,0
+3,81
+3,0
+81
+5,0
+81
+5,0
+81
+0
+81
+2,0
+4,81
+24,0
+81
+0
+81
+5,0
+81
+0
+81
+3,0
+2,81
+8,0
+81
+2,0
+b,81
+5,0
+81
+4,0
+81
+7,0
+81
+2,0
+81
+3,0
+2,81
+23,0
+81
+9,0
+81
+3,0
+81
+9,0
+81
+5,0
+81
+6,0
+81
+5,0
+81
+4,0
+81
+7,0
+81
+2,0
+81
+3,0
+81
+0
+81
+22,0
+b,81
+3,0
+b,81
+5,0
+81
+6,0
+81
+5,0
+81
+3,0
+81
+8,0
+81
+3,0
+3,81
+25,0
+81
+9,0
+81
+3,0
+81
+9,0
+81
+5,0
+81
+6,0
+81
+5,0
+81
+2,0
+81
+1b7b,0
+100 90 32
+261,0
+2,a3
+18,0
+a3
+3,0
+a3
+8,0
+a3
+5,0
+a3
+7,0
+a3
+11,0
+a3
+3,0
+a3
+17,0
+2,a3
+8,0
+b,a3
+6,0
+a3
+3,0
+a3
+8,0
+a3
+5,0
+a3
+7,0
+a3
+0
+7,a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+15,0
+a3
+a,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+d,a3
+0
+7,a3
+0
+a3
+0
+a3
+6,0
+a3
+4,0
+a3
+2,0
+a3
+3,0
+a3
+6,0
+a3
+0
+a3
+22,0
+a3
+4,0
+a3
+4,0
+a3
+6,0
+a3
+3,0
+a3
+8,0
+a3
+3,0
+a3
+3,0
+a3
+4,0
+a3
+5,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+21,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+d,a3
+2,0
+6,a3
+0
+a3
+0
+a3
+0
+a3
+3,0
+a3
+0
+9,a3
+2,0
+a3
+2,0
+5,a3
+24,0
+b,a3
+6,0
+a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+3,0
+2,a3
+4,0
+2,a3
+5,0
+a3
+2,0
+a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+b,a3
+3,0
+5,a3
+0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+5,0
+a3
+2,0
+a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+3,0
+2,a3
+4,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+3,0
+a3
+3,0
+a3
+3,0
+a3
+2,0
+a3
+0
+a3
+5,0
+a3
+2,0
+7,a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+3,0
+a3
+0
+a3
+3,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+2,0
+2,a3
+3,0
+5,a3
+2,0
+a3
+0
+a3
+5,0
+a3
+5,0
+a3
+2,0
+a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+2,0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+5,0
+a3
+6,0
+3,a3
+3,0
+a3
+5,0
+a3
+5,0
+a3
+0
+a3
+2,0
+4,a3
+24,0
+a3
+0
+a3
+5,0
+a3
+0
+a3
+3,0
+2,a3
+8,0
+a3
+2,0
+b,a3
+5,0
+a3
+4,0
+a3
+7,0
+a3
+2,0
+a3
+3,0
+2,a3
+23,0
+a3
+9,0
+a3
+3,0
+a3
+9,0
+a3
+5,0
+a3
+6,0
+a3
+5,0
+a3
+4,0
+a3
+7,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+22,0
+b,a3
+3,0
+b,a3
+5,0
+a3
+6,0
+a3
+5,0
+a3
+3,0
+a3
+8,0
+a3
+3,0
+3,a3
+25,0
+a3
+9,0
+a3
+3,0
+a3
+9,0
+a3
+5,0
+a3
+6,0
+a3
+5,0
+a3
+2,0
+a3
+1b7b,0
+100 90 32
+261,0
+2,ff
+18,0
+ff
+3,0
+ff
+8,0
+ff
+5,0
+ff
+7,0
+ff
+11,0
+ff
+3,0
+ff
+17,0
+2,ff
+8,0
+b,ff
+6,0
+ff
+3,0
+ff
+8,0
+ff
+5,0
+ff
+7,0
+ff
+0
+7,ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+15,0
+ff
+a,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+d,ff
+0
+7,ff
+0
+ff
+0
+ff
+6,0
+ff
+4,0
+ff
+2,0
+ff
+3,0
+ff
+6,0
+ff
+0
+ff
+22,0
+ff
+4,0
+ff
+4,0
+ff
+6,0
+ff
+3,0
+ff
+8,0
+ff
+3,0
+ff
+3,0
+ff
+4,0
+ff
+5,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+21,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+d,ff
+2,0
+6,ff
+0
+ff
+0
+ff
+0
+ff
+3,0
+ff
+0
+9,ff
+2,0
+ff
+2,0
+5,ff
+24,0
+b,ff
+6,0
+ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+3,0
+2,ff
+4,0
+2,ff
+5,0
+ff
+2,0
+ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+b,ff
+3,0
+5,ff
+0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+5,0
+ff
+2,0
+ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+3,0
+2,ff
+4,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+3,0
+ff
+3,0
+ff
+3,0
+ff
+2,0
+ff
+0
+ff
+5,0
+ff
+2,0
+7,ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+3,0
+ff
+0
+ff
+3,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+2,0
+2,ff
+3,0
+5,ff
+2,0
+ff
+0
+ff
+5,0
+ff
+5,0
+ff
+2,0
+ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+2,0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+5,0
+ff
+6,0
+3,ff
+3,0
+ff
+5,0
+ff
+5,0
+ff
+0
+ff
+2,0
+4,ff
+24,0
+ff
+0
+ff
+5,0
+ff
+0
+ff
+3,0
+2,ff
+8,0
+ff
+2,0
+b,ff
+5,0
+ff
+4,0
+ff
+7,0
+ff
+2,0
+ff
+3,0
+2,ff
+23,0
+ff
+9,0
+ff
+3,0
+ff
+9,0
+ff
+5,0
+ff
+6,0
+ff
+5,0
+ff
+4,0
+ff
+7,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+22,0
+b,ff
+3,0
+b,ff
+5,0
+ff
+6,0
+ff
+5,0
+ff
+3,0
+ff
+8,0
+ff
+3,0
+3,ff
+25,0
+ff
+9,0
+ff
+3,0
+ff
+9,0
+ff
+5,0
+ff
+6,0
+ff
+5,0
+ff
+2,0
+ff
+1b7b,0
+100 90 32
+261,0
+2,100
+18,0
+100
+3,0
+100
+8,0
+100
+5,0
+100
+7,0
+100
+11,0
+100
+3,0
+100
+17,0
+2,100
+8,0
+b,100
+6,0
+100
+3,0
+100
+8,0
+100
+5,0
+100
+7,0
+100
+0
+7,100
+2,0
+100
+7,0
+100
+3,0
+100
+15,0
+100
+a,0
+100
+4,0
+100
+4,0
+100
+2,0
+d,100
+0
+7,100
+0
+100
+0
+100
+6,0
+100
+4,0
+100
+2,0
+100
+3,0
+100
+6,0
+100
+0
+100
+22,0
+100
+4,0
+100
+4,0
+100
+6,0
+100
+3,0
+100
+8,0
+100
+3,0
+100
+3,0
+100
+4,0
+100
+5,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+21,0
+100
+4,0
+100
+4,0
+100
+2,0
+d,100
+2,0
+6,100
+0
+100
+0
+100
+0
+100
+3,0
+100
+0
+9,100
+2,0
+100
+2,0
+5,100
+24,0
+b,100
+6,0
+100
+2,0
+100
+7,0
+100
+3,0
+100
+3,0
+2,100
+4,0
+2,100
+5,0
+100
+2,0
+100
+2,0
+100
+7,0
+100
+24,0
+100
+4,0
+100
+4,0
+100
+3,0
+b,100
+3,0
+5,100
+0
+100
+2,0
+100
+3,0
+100
+0
+100
+5,0
+100
+2,0
+100
+2,0
+100
+7,0
+100
+24,0
+100
+3,0
+2,100
+4,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+3,0
+100
+3,0
+100
+3,0
+100
+2,0
+100
+0
+100
+5,0
+100
+2,0
+7,100
+2,0
+100
+7,0
+100
+24,0
+100
+3,0
+100
+0
+100
+3,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+2,0
+2,100
+3,0
+5,100
+2,0
+100
+0
+100
+5,0
+100
+5,0
+100
+2,0
+100
+2,0
+100
+7,0
+100
+24,0
+100
+2,0
+100
+3,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+5,0
+100
+6,0
+3,100
+3,0
+100
+5,0
+100
+5,0
+100
+0
+100
+2,0
+4,100
+24,0
+100
+0
+100
+5,0
+100
+0
+100
+3,0
+2,100
+8,0
+100
+2,0
+b,100
+5,0
+100
+4,0
+100
+7,0
+100
+2,0
+100
+3,0
+2,100
+23,0
+100
+9,0
+100
+3,0
+100
+9,0
+100
+5,0
+100
+6,0
+100
+5,0
+100
+4,0
+100
+7,0
+100
+2,0
+100
+3,0
+100
+0
+100
+22,0
+b,100
+3,0
+b,100
+5,0
+100
+6,0
+100
+5,0
+100
+3,0
+100
+8,0
+100
+3,0
+3,100
+25,0
+100
+9,0
+100
+3,0
+100
+9,0
+100
+5,0
+100
+6,0
+100
+5,0
+100
+2,0
+100
+1b7b,0
+100 90 32
+261,0
+2,12c
+18,0
+12c
+3,0
+12c
+8,0
+12c
+5,0
+12c
+7,0
+12c
+11,0
+12c
+3,0
+12c
+17,0
+2,12c
+8,0
+b,12c
+6,0
+12c
+3,0
+12c
+8,0
+12c
+5,0
+12c
+7,0
+12c
+0
+7,12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+15,0
+12c
+a,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+d,12c
+0
+7,12c
+0
+12c
+0
+12c
+6,0
+12c
+4,0
+12c
+2,0
+12c
+3,0
+12c
+6,0
+12c
+0
+12c
+22,0
+12c
+4,0
+12c
+4,0
+12c
+6,0
+12c
+3,0
+12c
+8,0
+12c
+3,0
+12c
+3,0
+12c
+4,0
+12c
+5,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+21,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+d,12c
+2,0
+6,12c
+0
+12c
+0
+12c
+0
+12c
+3,0
+12c
+0
+9,12c
+2,0
+12c
+2,0
+5,12c
+24,0
+b,12c
+6,0
+12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+3,0
+2,12c
+4,0
+2,12c
+5,0
+12c
+2,0
+12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+b,12c
+3,0
+5,12c
+0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+5,0
+12c
+2,0
+12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+3,0
+2,12c
+4,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+3,0
+12c
+3,0
+12c
+3,0
+12c
+2,0
+12c
+0
+12c
+5,0
+12c
+2,0
+7,12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+3,0
+12c
+0
+12c
+3,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+2,0
+2,12c
+3,0
+5,12c
+2,0
+12c
+0
+12c
+5,0
+12c
+5,0
+12c
+2,0
+12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+2,0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+5,0
+12c
+6,0
+3,12c
+3,0
+12c
+5,0
+12c
+5,0
+12c
+0
+12c
+2,0
+4,12c
+24,0
+12c
+0
+12c
+5,0
+12c
+0
+12c
+3,0
+2,12c
+8,0
+12c
+2,0
+b,12c
+5,0
+12c
+4,0
+12c
+7,0
+12c
+2,0
+12c
+3,0
+2,12c
+23,0
+12c
+9,0
+12c
+3,0
+12c
+9,0
+12c
+5,0
+12c
+6,0
+12c
+5,0
+12c
+4,0
+12c
+7,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+22,0
+b,12c
+3,0
+b,12c
+5,0
+12c
+6,0
+12c
+5,0
+12c
+3,0
+12c
+8,0
+12c
+3,0
+3,12c
+25,0
+12c
+9,0
+12c
+3,0
+12c
+9,0
+12c
+5,0
+12c
+6,0
+12c
+5,0
+12c
+2,0
+12c
+1b7b,0
+100 90 32
+261,0
+2,3e8
+18,0
+3e8
+3,0
+3e8
+8,0
+3e8
+5,0
+3e8
+7,0
+3e8
+11,0
+3e8
+3,0
+3e8
+17,0
+2,3e8
+8,0
+b,3e8
+6,0
+3e8
+3,0
+3e8
+8,0
+3e8
+5,0
+3e8
+7,0
+3e8
+0
+7,3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+15,0
+3e8
+a,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+d,3e8
+0
+7,3e8
+0
+3e8
+0
+3e8
+6,0
+3e8
+4,0
+3e8
+2,0
+3e8
+3,0
+3e8
+6,0
+3e8
+0
+3e8
+22,0
+3e8
+4,0
+3e8
+4,0
+3e8
+6,0
+3e8
+3,0
+3e8
+8,0
+3e8
+3,0
+3e8
+3,0
+3e8
+4,0
+3e8
+5,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+21,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+d,3e8
+2,0
+6,3e8
+0
+3e8
+0
+3e8
+0
+3e8
+3,0
+3e8
+0
+9,3e8
+2,0
+3e8
+2,0
+5,3e8
+24,0
+b,3e8
+6,0
+3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+3,0
+2,3e8
+4,0
+2,3e8
+5,0
+3e8
+2,0
+3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+b,3e8
+3,0
+5,3e8
+0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+5,0
+3e8
+2,0
+3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+3,0
+2,3e8
+4,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+3,0
+3e8
+3,0
+3e8
+3,0
+3e8
+2,0
+3e8
+0
+3e8
+5,0
+3e8
+2,0
+7,3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+3,0
+3e8
+0
+3e8
+3,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+2,0
+2,3e8
+3,0
+5,3e8
+2,0
+3e8
+0
+3e8
+5,0
+3e8
+5,0
+3e8
+2,0
+3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+2,0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+5,0
+3e8
+6,0
+3,3e8
+3,0
+3e8
+5,0
+3e8
+5,0
+3e8
+0
+3e8
+2,0
+4,3e8
+24,0
+3e8
+0
+3e8
+5,0
+3e8
+0
+3e8
+3,0
+2,3e8
+8,0
+3e8
+2,0
+b,3e8
+5,0
+3e8
+4,0
+3e8
+7,0
+3e8
+2,0
+3e8
+3,0
+2,3e8
+23,0
+3e8
+9,0
+3e8
+3,0
+3e8
+9,0
+3e8
+5,0
+3e8
+6,0
+3e8
+5,0
+3e8
+4,0
+3e8
+7,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+22,0
+b,3e8
+3,0
+b,3e8
+5,0
+3e8
+6,0
+3e8
+5,0
+3e8
+3,0
+3e8
+8,0
+3e8
+3,0
+3,3e8
+25,0
+3e8
+9,0
+3e8
+3,0
+3e8
+9,0
+3e8
+5,0
+3e8
+6,0
+3e8
+5,0
+3e8
+2,0
+3e8
+1b7b,0
+100 90 32
+261,0
+2,111111
+18,0
+111111
+3,0
+111111
+8,0
+111111
+5,0
+111111
+7,0
+111111
+11,0
+111111
+3,0
+111111
+17,0
+2,111111
+8,0
+b,111111
+6,0
+111111
+3,0
+111111
+8,0
+111111
+5,0
+111111
+7,0
+111111
+0
+7,111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+15,0
+111111
+a,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+d,111111
+0
+7,111111
+0
+111111
+0
+111111
+6,0
+111111
+4,0
+111111
+2,0
+111111
+3,0
+111111
+6,0
+111111
+0
+111111
+22,0
+111111
+4,0
+111111
+4,0
+111111
+6,0
+111111
+3,0
+111111
+8,0
+111111
+3,0
+111111
+3,0
+111111
+4,0
+111111
+5,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+21,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+d,111111
+2,0
+6,111111
+0
+111111
+0
+111111
+0
+111111
+3,0
+111111
+0
+9,111111
+2,0
+111111
+2,0
+5,111111
+24,0
+b,111111
+6,0
+111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+3,0
+2,111111
+4,0
+2,111111
+5,0
+111111
+2,0
+111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+b,111111
+3,0
+5,111111
+0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+5,0
+111111
+2,0
+111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+3,0
+2,111111
+4,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+3,0
+111111
+3,0
+111111
+3,0
+111111
+2,0
+111111
+0
+111111
+5,0
+111111
+2,0
+7,111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+3,0
+111111
+0
+111111
+3,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+2,0
+2,111111
+3,0
+5,111111
+2,0
+111111
+0
+111111
+5,0
+111111
+5,0
+111111
+2,0
+111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+2,0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+5,0
+111111
+6,0
+3,111111
+3,0
+111111
+5,0
+111111
+5,0
+111111
+0
+111111
+2,0
+4,111111
+24,0
+111111
+0
+111111
+5,0
+111111
+0
+111111
+3,0
+2,111111
+8,0
+111111
+2,0
+b,111111
+5,0
+111111
+4,0
+111111
+7,0
+111111
+2,0
+111111
+3,0
+2,111111
+23,0
+111111
+9,0
+111111
+3,0
+111111
+9,0
+111111
+5,0
+111111
+6,0
+111111
+5,0
+111111
+4,0
+111111
+7,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+22,0
+b,111111
+3,0
+b,111111
+5,0
+111111
+6,0
+111111
+5,0
+111111
+3,0
+111111
+8,0
+111111
+3,0
+3,111111
+25,0
+111111
+9,0
+111111
+3,0
+111111
+9,0
+111111
+5,0
+111111
+6,0
+111111
+5,0
+111111
+2,0
+111111
+1b7b,0
+100 90 32
+261,0
+2,400200
+18,0
+400200
+3,0
+400200
+8,0
+400200
+5,0
+400200
+7,0
+400200
+11,0
+400200
+3,0
+400200
+17,0
+2,400200
+8,0
+b,400200
+6,0
+400200
+3,0
+400200
+8,0
+400200
+5,0
+400200
+7,0
+400200
+0
+7,400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+15,0
+400200
+a,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+d,400200
+0
+7,400200
+0
+400200
+0
+400200
+6,0
+400200
+4,0
+400200
+2,0
+400200
+3,0
+400200
+6,0
+400200
+0
+400200
+22,0
+400200
+4,0
+400200
+4,0
+400200
+6,0
+400200
+3,0
+400200
+8,0
+400200
+3,0
+400200
+3,0
+400200
+4,0
+400200
+5,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+21,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+d,400200
+2,0
+6,400200
+0
+400200
+0
+400200
+0
+400200
+3,0
+400200
+0
+9,400200
+2,0
+400200
+2,0
+5,400200
+24,0
+b,400200
+6,0
+400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+3,0
+2,400200
+4,0
+2,400200
+5,0
+400200
+2,0
+400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+b,400200
+3,0
+5,400200
+0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+5,0
+400200
+2,0
+400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+3,0
+2,400200
+4,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+3,0
+400200
+3,0
+400200
+3,0
+400200
+2,0
+400200
+0
+400200
+5,0
+400200
+2,0
+7,400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+3,0
+400200
+0
+400200
+3,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+2,0
+2,400200
+3,0
+5,400200
+2,0
+400200
+0
+400200
+5,0
+400200
+5,0
+400200
+2,0
+400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+2,0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+5,0
+400200
+6,0
+3,400200
+3,0
+400200
+5,0
+400200
+5,0
+400200
+0
+400200
+2,0
+4,400200
+24,0
+400200
+0
+400200
+5,0
+400200
+0
+400200
+3,0
+2,400200
+8,0
+400200
+2,0
+b,400200
+5,0
+400200
+4,0
+400200
+7,0
+400200
+2,0
+400200
+3,0
+2,400200
+23,0
+400200
+9,0
+400200
+3,0
+400200
+9,0
+400200
+5,0
+400200
+6,0
+400200
+5,0
+400200
+4,0
+400200
+7,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+22,0
+b,400200
+3,0
+b,400200
+5,0
+400200
+6,0
+400200
+5,0
+400200
+3,0
+400200
+8,0
+400200
+3,0
+3,400200
+25,0
+400200
+9,0
+400200
+3,0
+400200
+9,0
+400200
+5,0
+400200
+6,0
+400200
+5,0
+400200
+2,0
+400200
+1b7b,0
+100 90 32
+261,0
+2,777777
+18,0
+777777
+3,0
+777777
+8,0
+777777
+5,0
+777777
+7,0
+777777
+11,0
+777777
+3,0
+777777
+17,0
+2,777777
+8,0
+b,777777
+6,0
+777777
+3,0
+777777
+8,0
+777777
+5,0
+777777
+7,0
+777777
+0
+7,777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+15,0
+777777
+a,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+d,777777
+0
+7,777777
+0
+777777
+0
+777777
+6,0
+777777
+4,0
+777777
+2,0
+777777
+3,0
+777777
+6,0
+777777
+0
+777777
+22,0
+777777
+4,0
+777777
+4,0
+777777
+6,0
+777777
+3,0
+777777
+8,0
+777777
+3,0
+777777
+3,0
+777777
+4,0
+777777
+5,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+21,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+d,777777
+2,0
+6,777777
+0
+777777
+0
+777777
+0
+777777
+3,0
+777777
+0
+9,777777
+2,0
+777777
+2,0
+5,777777
+24,0
+b,777777
+6,0
+777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+3,0
+2,777777
+4,0
+2,777777
+5,0
+777777
+2,0
+777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+b,777777
+3,0
+5,777777
+0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+5,0
+777777
+2,0
+777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+3,0
+2,777777
+4,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+3,0
+777777
+3,0
+777777
+3,0
+777777
+2,0
+777777
+0
+777777
+5,0
+777777
+2,0
+7,777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+3,0
+777777
+0
+777777
+3,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+2,0
+2,777777
+3,0
+5,777777
+2,0
+777777
+0
+777777
+5,0
+777777
+5,0
+777777
+2,0
+777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+2,0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+5,0
+777777
+6,0
+3,777777
+3,0
+777777
+5,0
+777777
+5,0
+777777
+0
+777777
+2,0
+4,777777
+24,0
+777777
+0
+777777
+5,0
+777777
+0
+777777
+3,0
+2,777777
+8,0
+777777
+2,0
+b,777777
+5,0
+777777
+4,0
+777777
+7,0
+777777
+2,0
+777777
+3,0
+2,777777
+23,0
+777777
+9,0
+777777
+3,0
+777777
+9,0
+777777
+5,0
+777777
+6,0
+777777
+5,0
+777777
+4,0
+777777
+7,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+22,0
+b,777777
+3,0
+b,777777
+5,0
+777777
+6,0
+777777
+5,0
+777777
+3,0
+777777
+8,0
+777777
+3,0
+3,777777
+25,0
+777777
+9,0
+777777
+3,0
+777777
+9,0
+777777
+5,0
+777777
+6,0
+777777
+5,0
+777777
+2,0
+777777
+1b7b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a4.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a4.dat
new file mode 100644
index 000000000..308ad0581
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a4.dat
@@ -0,0 +1,363 @@
+! $XConsortium$
+100 90 32
+25e,0
+1
+5,0
+1
+9,0
+1
+5,0
+1
+9,0
+1
+5,0
+1
+9,0
+1
+5,0
+1
+9,0
+1
+5,0
+1
+1d,0
+1
+5,0
+1
+9,0
+1
+5,0
+1
+9,0
+1
+5,0
+1
+9,0
+1
+5,0
+1
+9,0
+1
+5,0
+1
+1a,0
+7,1
+0
+1
+0
+1
+5,0
+7,1
+0
+1
+0
+1
+5,0
+7,1
+0
+1
+0
+1
+5,0
+7,1
+0
+1
+0
+1
+5,0
+7,1
+0
+1
+0
+1
+1c,0
+1
+3,0
+1
+3,0
+1
+7,0
+1
+3,0
+1
+3,0
+1
+7,0
+1
+3,0
+1
+3,0
+1
+7,0
+1
+3,0
+1
+3,0
+1
+7,0
+1
+3,0
+1
+3,0
+1
+19,0
+6,1
+0
+1
+0
+1
+0
+1
+4,0
+6,1
+0
+1
+0
+1
+0
+1
+4,0
+6,1
+0
+1
+0
+1
+0
+1
+4,0
+6,1
+0
+1
+0
+1
+0
+1
+4,0
+6,1
+0
+1
+0
+1
+0
+1
+18,0
+1
+3,0
+1
+3,0
+2,1
+6,0
+1
+3,0
+1
+3,0
+2,1
+6,0
+1
+3,0
+1
+3,0
+2,1
+6,0
+1
+3,0
+1
+3,0
+2,1
+6,0
+1
+3,0
+1
+3,0
+2,1
+1a,0
+5,1
+0
+1
+2,0
+1
+6,0
+5,1
+0
+1
+2,0
+1
+6,0
+5,1
+0
+1
+2,0
+1
+6,0
+5,1
+0
+1
+2,0
+1
+6,0
+5,1
+0
+1
+2,0
+1
+1a,0
+1
+3,0
+1
+2,0
+1
+0
+1
+6,0
+1
+3,0
+1
+2,0
+1
+0
+1
+6,0
+1
+3,0
+1
+2,0
+1
+0
+1
+6,0
+1
+3,0
+1
+2,0
+1
+0
+1
+6,0
+1
+3,0
+1
+2,0
+1
+0
+1
+1a,0
+5,1
+2,0
+1
+0
+1
+6,0
+5,1
+2,0
+1
+0
+1
+6,0
+5,1
+2,0
+1
+0
+1
+6,0
+5,1
+2,0
+1
+0
+1
+6,0
+5,1
+2,0
+1
+0
+1
+1c,0
+1
+6,0
+3,1
+6,0
+1
+6,0
+3,1
+6,0
+1
+6,0
+3,1
+6,0
+1
+6,0
+3,1
+6,0
+1
+6,0
+3,1
+17,0
+b,1
+5,0
+b,1
+5,0
+b,1
+5,0
+b,1
+5,0
+b,1
+1c,0
+1
+6,0
+1
+8,0
+1
+6,0
+1
+8,0
+1
+6,0
+1
+8,0
+1
+6,0
+1
+8,0
+1
+6,0
+1
+1c,0
+1
+6,0
+1
+8,0
+1
+6,0
+1
+8,0
+1
+6,0
+1
+8,0
+1
+6,0
+1
+8,0
+1
+6,0
+1
+1c,0
+1
+6,0
+1
+8,0
+1
+6,0
+1
+8,0
+1
+6,0
+1
+8,0
+1
+6,0
+1
+8,0
+1
+6,0
+1
+1b6e,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a41.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a41.dat
new file mode 100644
index 000000000..2d8987b57
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a41.dat
@@ -0,0 +1,11495 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+11,0
+1
+3,0
+1
+17,0
+2,1
+8,0
+b,1
+6,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+0
+7,1
+2,0
+1
+7,0
+1
+3,0
+1
+15,0
+1
+a,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+0
+7,1
+0
+1
+0
+1
+6,0
+1
+4,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+0
+1
+22,0
+1
+4,0
+1
+4,0
+1
+6,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+4,0
+1
+5,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+21,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+2,0
+6,1
+0
+1
+0
+1
+0
+1
+3,0
+1
+0
+9,1
+2,0
+1
+2,0
+5,1
+24,0
+b,1
+6,0
+1
+2,0
+1
+7,0
+1
+3,0
+1
+3,0
+2,1
+4,0
+2,1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+4,0
+1
+4,0
+1
+3,0
+b,1
+3,0
+5,1
+0
+1
+2,0
+1
+3,0
+1
+0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+2,1
+4,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+0
+1
+5,0
+1
+2,0
+7,1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+1
+0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3,0
+5,1
+2,0
+1
+0
+1
+5,0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+6,0
+3,1
+3,0
+1
+5,0
+1
+5,0
+1
+0
+1
+2,0
+4,1
+24,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+2,1
+8,0
+1
+2,0
+b,1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+2,1
+23,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+1
+0
+1
+22,0
+b,1
+3,0
+b,1
+5,0
+1
+6,0
+1
+5,0
+1
+3,0
+1
+8,0
+1
+3,0
+3,1
+25,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+2,0
+1
+1b7b,0
+100 90 32
+261,0
+2,2
+18,0
+2
+3,0
+2
+8,0
+2
+5,0
+2
+7,0
+2
+11,0
+2
+3,0
+2
+17,0
+2,2
+8,0
+b,2
+6,0
+2
+3,0
+2
+8,0
+2
+5,0
+2
+7,0
+2
+0
+7,2
+2,0
+2
+7,0
+2
+3,0
+2
+15,0
+2
+a,0
+2
+4,0
+2
+4,0
+2
+2,0
+d,2
+0
+7,2
+0
+2
+0
+2
+6,0
+2
+4,0
+2
+2,0
+2
+3,0
+2
+6,0
+2
+0
+2
+22,0
+2
+4,0
+2
+4,0
+2
+6,0
+2
+3,0
+2
+8,0
+2
+3,0
+2
+3,0
+2
+4,0
+2
+5,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+21,0
+2
+4,0
+2
+4,0
+2
+2,0
+d,2
+2,0
+6,2
+0
+2
+0
+2
+0
+2
+3,0
+2
+0
+9,2
+2,0
+2
+2,0
+5,2
+24,0
+b,2
+6,0
+2
+2,0
+2
+7,0
+2
+3,0
+2
+3,0
+2,2
+4,0
+2,2
+5,0
+2
+2,0
+2
+2,0
+2
+7,0
+2
+24,0
+2
+4,0
+2
+4,0
+2
+3,0
+b,2
+3,0
+5,2
+0
+2
+2,0
+2
+3,0
+2
+0
+2
+5,0
+2
+2,0
+2
+2,0
+2
+7,0
+2
+24,0
+2
+3,0
+2,2
+4,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+3,0
+2
+3,0
+2
+3,0
+2
+2,0
+2
+0
+2
+5,0
+2
+2,0
+7,2
+2,0
+2
+7,0
+2
+24,0
+2
+3,0
+2
+0
+2
+3,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+2,0
+2,2
+3,0
+5,2
+2,0
+2
+0
+2
+5,0
+2
+5,0
+2
+2,0
+2
+2,0
+2
+7,0
+2
+24,0
+2
+2,0
+2
+3,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+5,0
+2
+6,0
+3,2
+3,0
+2
+5,0
+2
+5,0
+2
+0
+2
+2,0
+4,2
+24,0
+2
+0
+2
+5,0
+2
+0
+2
+3,0
+2,2
+8,0
+2
+2,0
+b,2
+5,0
+2
+4,0
+2
+7,0
+2
+2,0
+2
+3,0
+2,2
+23,0
+2
+9,0
+2
+3,0
+2
+9,0
+2
+5,0
+2
+6,0
+2
+5,0
+2
+4,0
+2
+7,0
+2
+2,0
+2
+3,0
+2
+0
+2
+22,0
+b,2
+3,0
+b,2
+5,0
+2
+6,0
+2
+5,0
+2
+3,0
+2
+8,0
+2
+3,0
+3,2
+25,0
+2
+9,0
+2
+3,0
+2
+9,0
+2
+5,0
+2
+6,0
+2
+5,0
+2
+2,0
+2
+1b7b,0
+100 90 32
+261,0
+2,3
+18,0
+3
+3,0
+3
+8,0
+3
+5,0
+3
+7,0
+3
+11,0
+3
+3,0
+3
+17,0
+2,3
+8,0
+b,3
+6,0
+3
+3,0
+3
+8,0
+3
+5,0
+3
+7,0
+3
+0
+7,3
+2,0
+3
+7,0
+3
+3,0
+3
+15,0
+3
+a,0
+3
+4,0
+3
+4,0
+3
+2,0
+d,3
+0
+7,3
+0
+3
+0
+3
+6,0
+3
+4,0
+3
+2,0
+3
+3,0
+3
+6,0
+3
+0
+3
+22,0
+3
+4,0
+3
+4,0
+3
+6,0
+3
+3,0
+3
+8,0
+3
+3,0
+3
+3,0
+3
+4,0
+3
+5,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+21,0
+3
+4,0
+3
+4,0
+3
+2,0
+d,3
+2,0
+6,3
+0
+3
+0
+3
+0
+3
+3,0
+3
+0
+9,3
+2,0
+3
+2,0
+5,3
+24,0
+b,3
+6,0
+3
+2,0
+3
+7,0
+3
+3,0
+3
+3,0
+2,3
+4,0
+2,3
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+3
+24,0
+3
+4,0
+3
+4,0
+3
+3,0
+b,3
+3,0
+5,3
+0
+3
+2,0
+3
+3,0
+3
+0
+3
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+3
+24,0
+3
+3,0
+2,3
+4,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+3,0
+3
+3,0
+3
+3,0
+3
+2,0
+3
+0
+3
+5,0
+3
+2,0
+7,3
+2,0
+3
+7,0
+3
+24,0
+3
+3,0
+3
+0
+3
+3,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+2,0
+2,3
+3,0
+5,3
+2,0
+3
+0
+3
+5,0
+3
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+3
+24,0
+3
+2,0
+3
+3,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+5,0
+3
+6,0
+3,3
+3,0
+3
+5,0
+3
+5,0
+3
+0
+3
+2,0
+4,3
+24,0
+3
+0
+3
+5,0
+3
+0
+3
+3,0
+2,3
+8,0
+3
+2,0
+b,3
+5,0
+3
+4,0
+3
+7,0
+3
+2,0
+3
+3,0
+2,3
+23,0
+3
+9,0
+3
+3,0
+3
+9,0
+3
+5,0
+3
+6,0
+3
+5,0
+3
+4,0
+3
+7,0
+3
+2,0
+3
+3,0
+3
+0
+3
+22,0
+b,3
+3,0
+b,3
+5,0
+3
+6,0
+3
+5,0
+3
+3,0
+3
+8,0
+3
+3,0
+3,3
+25,0
+3
+9,0
+3
+3,0
+3
+9,0
+3
+5,0
+3
+6,0
+3
+5,0
+3
+2,0
+3
+1b7b,0
+100 90 32
+261,0
+2,4
+18,0
+4
+3,0
+4
+8,0
+4
+5,0
+4
+7,0
+4
+11,0
+4
+3,0
+4
+17,0
+2,4
+8,0
+b,4
+6,0
+4
+3,0
+4
+8,0
+4
+5,0
+4
+7,0
+4
+0
+7,4
+2,0
+4
+7,0
+4
+3,0
+4
+15,0
+4
+a,0
+4
+4,0
+4
+4,0
+4
+2,0
+d,4
+0
+7,4
+0
+4
+0
+4
+6,0
+4
+4,0
+4
+2,0
+4
+3,0
+4
+6,0
+4
+0
+4
+22,0
+4
+4,0
+4
+4,0
+4
+6,0
+4
+3,0
+4
+8,0
+4
+3,0
+4
+3,0
+4
+4,0
+4
+5,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+21,0
+4
+4,0
+4
+4,0
+4
+2,0
+d,4
+2,0
+6,4
+0
+4
+0
+4
+0
+4
+3,0
+4
+0
+9,4
+2,0
+4
+2,0
+5,4
+24,0
+b,4
+6,0
+4
+2,0
+4
+7,0
+4
+3,0
+4
+3,0
+2,4
+4,0
+2,4
+5,0
+4
+2,0
+4
+2,0
+4
+7,0
+4
+24,0
+4
+4,0
+4
+4,0
+4
+3,0
+b,4
+3,0
+5,4
+0
+4
+2,0
+4
+3,0
+4
+0
+4
+5,0
+4
+2,0
+4
+2,0
+4
+7,0
+4
+24,0
+4
+3,0
+2,4
+4,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+3,0
+4
+3,0
+4
+3,0
+4
+2,0
+4
+0
+4
+5,0
+4
+2,0
+7,4
+2,0
+4
+7,0
+4
+24,0
+4
+3,0
+4
+0
+4
+3,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+2,0
+2,4
+3,0
+5,4
+2,0
+4
+0
+4
+5,0
+4
+5,0
+4
+2,0
+4
+2,0
+4
+7,0
+4
+24,0
+4
+2,0
+4
+3,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+5,0
+4
+6,0
+3,4
+3,0
+4
+5,0
+4
+5,0
+4
+0
+4
+2,0
+4,4
+24,0
+4
+0
+4
+5,0
+4
+0
+4
+3,0
+2,4
+8,0
+4
+2,0
+b,4
+5,0
+4
+4,0
+4
+7,0
+4
+2,0
+4
+3,0
+2,4
+23,0
+4
+9,0
+4
+3,0
+4
+9,0
+4
+5,0
+4
+6,0
+4
+5,0
+4
+4,0
+4
+7,0
+4
+2,0
+4
+3,0
+4
+0
+4
+22,0
+b,4
+3,0
+b,4
+5,0
+4
+6,0
+4
+5,0
+4
+3,0
+4
+8,0
+4
+3,0
+3,4
+25,0
+4
+9,0
+4
+3,0
+4
+9,0
+4
+5,0
+4
+6,0
+4
+5,0
+4
+2,0
+4
+1b7b,0
+100 90 32
+261,0
+2,6
+18,0
+6
+3,0
+6
+8,0
+6
+5,0
+6
+7,0
+6
+11,0
+6
+3,0
+6
+17,0
+2,6
+8,0
+b,6
+6,0
+6
+3,0
+6
+8,0
+6
+5,0
+6
+7,0
+6
+0
+7,6
+2,0
+6
+7,0
+6
+3,0
+6
+15,0
+6
+a,0
+6
+4,0
+6
+4,0
+6
+2,0
+d,6
+0
+7,6
+0
+6
+0
+6
+6,0
+6
+4,0
+6
+2,0
+6
+3,0
+6
+6,0
+6
+0
+6
+22,0
+6
+4,0
+6
+4,0
+6
+6,0
+6
+3,0
+6
+8,0
+6
+3,0
+6
+3,0
+6
+4,0
+6
+5,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+21,0
+6
+4,0
+6
+4,0
+6
+2,0
+d,6
+2,0
+6,6
+0
+6
+0
+6
+0
+6
+3,0
+6
+0
+9,6
+2,0
+6
+2,0
+5,6
+24,0
+b,6
+6,0
+6
+2,0
+6
+7,0
+6
+3,0
+6
+3,0
+2,6
+4,0
+2,6
+5,0
+6
+2,0
+6
+2,0
+6
+7,0
+6
+24,0
+6
+4,0
+6
+4,0
+6
+3,0
+b,6
+3,0
+5,6
+0
+6
+2,0
+6
+3,0
+6
+0
+6
+5,0
+6
+2,0
+6
+2,0
+6
+7,0
+6
+24,0
+6
+3,0
+2,6
+4,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+3,0
+6
+3,0
+6
+3,0
+6
+2,0
+6
+0
+6
+5,0
+6
+2,0
+7,6
+2,0
+6
+7,0
+6
+24,0
+6
+3,0
+6
+0
+6
+3,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+2,0
+2,6
+3,0
+5,6
+2,0
+6
+0
+6
+5,0
+6
+5,0
+6
+2,0
+6
+2,0
+6
+7,0
+6
+24,0
+6
+2,0
+6
+3,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+5,0
+6
+6,0
+3,6
+3,0
+6
+5,0
+6
+5,0
+6
+0
+6
+2,0
+4,6
+24,0
+6
+0
+6
+5,0
+6
+0
+6
+3,0
+2,6
+8,0
+6
+2,0
+b,6
+5,0
+6
+4,0
+6
+7,0
+6
+2,0
+6
+3,0
+2,6
+23,0
+6
+9,0
+6
+3,0
+6
+9,0
+6
+5,0
+6
+6,0
+6
+5,0
+6
+4,0
+6
+7,0
+6
+2,0
+6
+3,0
+6
+0
+6
+22,0
+b,6
+3,0
+b,6
+5,0
+6
+6,0
+6
+5,0
+6
+3,0
+6
+8,0
+6
+3,0
+3,6
+25,0
+6
+9,0
+6
+3,0
+6
+9,0
+6
+5,0
+6
+6,0
+6
+5,0
+6
+2,0
+6
+1b7b,0
+100 90 32
+261,0
+2,7
+18,0
+7
+3,0
+7
+8,0
+7
+5,0
+7
+7,0
+7
+11,0
+7
+3,0
+7
+17,0
+2,7
+8,0
+b,7
+6,0
+7
+3,0
+7
+8,0
+7
+5,0
+7
+7,0
+7
+0
+7,7
+2,0
+7
+7,0
+7
+3,0
+7
+15,0
+7
+a,0
+7
+4,0
+7
+4,0
+7
+2,0
+d,7
+0
+7,7
+0
+7
+0
+7
+6,0
+7
+4,0
+7
+2,0
+7
+3,0
+7
+6,0
+7
+0
+7
+22,0
+7
+4,0
+7
+4,0
+7
+6,0
+7
+3,0
+7
+8,0
+7
+3,0
+7
+3,0
+7
+4,0
+7
+5,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+21,0
+7
+4,0
+7
+4,0
+7
+2,0
+d,7
+2,0
+6,7
+0
+7
+0
+7
+0
+7
+3,0
+7
+0
+9,7
+2,0
+7
+2,0
+5,7
+24,0
+b,7
+6,0
+7
+2,0
+7
+7,0
+7
+3,0
+7
+3,0
+2,7
+4,0
+2,7
+5,0
+7
+2,0
+7
+2,0
+7
+7,0
+7
+24,0
+7
+4,0
+7
+4,0
+7
+3,0
+b,7
+3,0
+5,7
+0
+7
+2,0
+7
+3,0
+7
+0
+7
+5,0
+7
+2,0
+7
+2,0
+7
+7,0
+7
+24,0
+7
+3,0
+2,7
+4,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+3,0
+7
+3,0
+7
+3,0
+7
+2,0
+7
+0
+7
+5,0
+7
+2,0
+7,7
+2,0
+7
+7,0
+7
+24,0
+7
+3,0
+7
+0
+7
+3,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+2,0
+2,7
+3,0
+5,7
+2,0
+7
+0
+7
+5,0
+7
+5,0
+7
+2,0
+7
+2,0
+7
+7,0
+7
+24,0
+7
+2,0
+7
+3,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+5,0
+7
+6,0
+3,7
+3,0
+7
+5,0
+7
+5,0
+7
+0
+7
+2,0
+4,7
+24,0
+7
+0
+7
+5,0
+7
+0
+7
+3,0
+2,7
+8,0
+7
+2,0
+b,7
+5,0
+7
+4,0
+7
+7,0
+7
+2,0
+7
+3,0
+2,7
+23,0
+7
+9,0
+7
+3,0
+7
+9,0
+7
+5,0
+7
+6,0
+7
+5,0
+7
+4,0
+7
+7,0
+7
+2,0
+7
+3,0
+7
+0
+7
+22,0
+b,7
+3,0
+b,7
+5,0
+7
+6,0
+7
+5,0
+7
+3,0
+7
+8,0
+7
+3,0
+3,7
+25,0
+7
+9,0
+7
+3,0
+7
+9,0
+7
+5,0
+7
+6,0
+7
+5,0
+7
+2,0
+7
+1b7b,0
+100 90 32
+261,0
+2,10
+18,0
+10
+3,0
+10
+8,0
+10
+5,0
+10
+7,0
+10
+11,0
+10
+3,0
+10
+17,0
+2,10
+8,0
+b,10
+6,0
+10
+3,0
+10
+8,0
+10
+5,0
+10
+7,0
+10
+0
+7,10
+2,0
+10
+7,0
+10
+3,0
+10
+15,0
+10
+a,0
+10
+4,0
+10
+4,0
+10
+2,0
+d,10
+0
+7,10
+0
+10
+0
+10
+6,0
+10
+4,0
+10
+2,0
+10
+3,0
+10
+6,0
+10
+0
+10
+22,0
+10
+4,0
+10
+4,0
+10
+6,0
+10
+3,0
+10
+8,0
+10
+3,0
+10
+3,0
+10
+4,0
+10
+5,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+21,0
+10
+4,0
+10
+4,0
+10
+2,0
+d,10
+2,0
+6,10
+0
+10
+0
+10
+0
+10
+3,0
+10
+0
+9,10
+2,0
+10
+2,0
+5,10
+24,0
+b,10
+6,0
+10
+2,0
+10
+7,0
+10
+3,0
+10
+3,0
+2,10
+4,0
+2,10
+5,0
+10
+2,0
+10
+2,0
+10
+7,0
+10
+24,0
+10
+4,0
+10
+4,0
+10
+3,0
+b,10
+3,0
+5,10
+0
+10
+2,0
+10
+3,0
+10
+0
+10
+5,0
+10
+2,0
+10
+2,0
+10
+7,0
+10
+24,0
+10
+3,0
+2,10
+4,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+3,0
+10
+3,0
+10
+3,0
+10
+2,0
+10
+0
+10
+5,0
+10
+2,0
+7,10
+2,0
+10
+7,0
+10
+24,0
+10
+3,0
+10
+0
+10
+3,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+2,0
+2,10
+3,0
+5,10
+2,0
+10
+0
+10
+5,0
+10
+5,0
+10
+2,0
+10
+2,0
+10
+7,0
+10
+24,0
+10
+2,0
+10
+3,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+5,0
+10
+6,0
+3,10
+3,0
+10
+5,0
+10
+5,0
+10
+0
+10
+2,0
+4,10
+24,0
+10
+0
+10
+5,0
+10
+0
+10
+3,0
+2,10
+8,0
+10
+2,0
+b,10
+5,0
+10
+4,0
+10
+7,0
+10
+2,0
+10
+3,0
+2,10
+23,0
+10
+9,0
+10
+3,0
+10
+9,0
+10
+5,0
+10
+6,0
+10
+5,0
+10
+4,0
+10
+7,0
+10
+2,0
+10
+3,0
+10
+0
+10
+22,0
+b,10
+3,0
+b,10
+5,0
+10
+6,0
+10
+5,0
+10
+3,0
+10
+8,0
+10
+3,0
+3,10
+25,0
+10
+9,0
+10
+3,0
+10
+9,0
+10
+5,0
+10
+6,0
+10
+5,0
+10
+2,0
+10
+1b7b,0
+100 90 32
+261,0
+2,33
+18,0
+33
+3,0
+33
+8,0
+33
+5,0
+33
+7,0
+33
+11,0
+33
+3,0
+33
+17,0
+2,33
+8,0
+b,33
+6,0
+33
+3,0
+33
+8,0
+33
+5,0
+33
+7,0
+33
+0
+7,33
+2,0
+33
+7,0
+33
+3,0
+33
+15,0
+33
+a,0
+33
+4,0
+33
+4,0
+33
+2,0
+d,33
+0
+7,33
+0
+33
+0
+33
+6,0
+33
+4,0
+33
+2,0
+33
+3,0
+33
+6,0
+33
+0
+33
+22,0
+33
+4,0
+33
+4,0
+33
+6,0
+33
+3,0
+33
+8,0
+33
+3,0
+33
+3,0
+33
+4,0
+33
+5,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+21,0
+33
+4,0
+33
+4,0
+33
+2,0
+d,33
+2,0
+6,33
+0
+33
+0
+33
+0
+33
+3,0
+33
+0
+9,33
+2,0
+33
+2,0
+5,33
+24,0
+b,33
+6,0
+33
+2,0
+33
+7,0
+33
+3,0
+33
+3,0
+2,33
+4,0
+2,33
+5,0
+33
+2,0
+33
+2,0
+33
+7,0
+33
+24,0
+33
+4,0
+33
+4,0
+33
+3,0
+b,33
+3,0
+5,33
+0
+33
+2,0
+33
+3,0
+33
+0
+33
+5,0
+33
+2,0
+33
+2,0
+33
+7,0
+33
+24,0
+33
+3,0
+2,33
+4,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+3,0
+33
+3,0
+33
+3,0
+33
+2,0
+33
+0
+33
+5,0
+33
+2,0
+7,33
+2,0
+33
+7,0
+33
+24,0
+33
+3,0
+33
+0
+33
+3,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+2,0
+2,33
+3,0
+5,33
+2,0
+33
+0
+33
+5,0
+33
+5,0
+33
+2,0
+33
+2,0
+33
+7,0
+33
+24,0
+33
+2,0
+33
+3,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+5,0
+33
+6,0
+3,33
+3,0
+33
+5,0
+33
+5,0
+33
+0
+33
+2,0
+4,33
+24,0
+33
+0
+33
+5,0
+33
+0
+33
+3,0
+2,33
+8,0
+33
+2,0
+b,33
+5,0
+33
+4,0
+33
+7,0
+33
+2,0
+33
+3,0
+2,33
+23,0
+33
+9,0
+33
+3,0
+33
+9,0
+33
+5,0
+33
+6,0
+33
+5,0
+33
+4,0
+33
+7,0
+33
+2,0
+33
+3,0
+33
+0
+33
+22,0
+b,33
+3,0
+b,33
+5,0
+33
+6,0
+33
+5,0
+33
+3,0
+33
+8,0
+33
+3,0
+3,33
+25,0
+33
+9,0
+33
+3,0
+33
+9,0
+33
+5,0
+33
+6,0
+33
+5,0
+33
+2,0
+33
+1b7b,0
+100 90 32
+261,0
+2,81
+18,0
+81
+3,0
+81
+8,0
+81
+5,0
+81
+7,0
+81
+11,0
+81
+3,0
+81
+17,0
+2,81
+8,0
+b,81
+6,0
+81
+3,0
+81
+8,0
+81
+5,0
+81
+7,0
+81
+0
+7,81
+2,0
+81
+7,0
+81
+3,0
+81
+15,0
+81
+a,0
+81
+4,0
+81
+4,0
+81
+2,0
+d,81
+0
+7,81
+0
+81
+0
+81
+6,0
+81
+4,0
+81
+2,0
+81
+3,0
+81
+6,0
+81
+0
+81
+22,0
+81
+4,0
+81
+4,0
+81
+6,0
+81
+3,0
+81
+8,0
+81
+3,0
+81
+3,0
+81
+4,0
+81
+5,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+21,0
+81
+4,0
+81
+4,0
+81
+2,0
+d,81
+2,0
+6,81
+0
+81
+0
+81
+0
+81
+3,0
+81
+0
+9,81
+2,0
+81
+2,0
+5,81
+24,0
+b,81
+6,0
+81
+2,0
+81
+7,0
+81
+3,0
+81
+3,0
+2,81
+4,0
+2,81
+5,0
+81
+2,0
+81
+2,0
+81
+7,0
+81
+24,0
+81
+4,0
+81
+4,0
+81
+3,0
+b,81
+3,0
+5,81
+0
+81
+2,0
+81
+3,0
+81
+0
+81
+5,0
+81
+2,0
+81
+2,0
+81
+7,0
+81
+24,0
+81
+3,0
+2,81
+4,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+3,0
+81
+3,0
+81
+3,0
+81
+2,0
+81
+0
+81
+5,0
+81
+2,0
+7,81
+2,0
+81
+7,0
+81
+24,0
+81
+3,0
+81
+0
+81
+3,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+2,0
+2,81
+3,0
+5,81
+2,0
+81
+0
+81
+5,0
+81
+5,0
+81
+2,0
+81
+2,0
+81
+7,0
+81
+24,0
+81
+2,0
+81
+3,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+5,0
+81
+6,0
+3,81
+3,0
+81
+5,0
+81
+5,0
+81
+0
+81
+2,0
+4,81
+24,0
+81
+0
+81
+5,0
+81
+0
+81
+3,0
+2,81
+8,0
+81
+2,0
+b,81
+5,0
+81
+4,0
+81
+7,0
+81
+2,0
+81
+3,0
+2,81
+23,0
+81
+9,0
+81
+3,0
+81
+9,0
+81
+5,0
+81
+6,0
+81
+5,0
+81
+4,0
+81
+7,0
+81
+2,0
+81
+3,0
+81
+0
+81
+22,0
+b,81
+3,0
+b,81
+5,0
+81
+6,0
+81
+5,0
+81
+3,0
+81
+8,0
+81
+3,0
+3,81
+25,0
+81
+9,0
+81
+3,0
+81
+9,0
+81
+5,0
+81
+6,0
+81
+5,0
+81
+2,0
+81
+1b7b,0
+100 90 32
+261,0
+2,a3
+18,0
+a3
+3,0
+a3
+8,0
+a3
+5,0
+a3
+7,0
+a3
+11,0
+a3
+3,0
+a3
+17,0
+2,a3
+8,0
+b,a3
+6,0
+a3
+3,0
+a3
+8,0
+a3
+5,0
+a3
+7,0
+a3
+0
+7,a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+15,0
+a3
+a,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+d,a3
+0
+7,a3
+0
+a3
+0
+a3
+6,0
+a3
+4,0
+a3
+2,0
+a3
+3,0
+a3
+6,0
+a3
+0
+a3
+22,0
+a3
+4,0
+a3
+4,0
+a3
+6,0
+a3
+3,0
+a3
+8,0
+a3
+3,0
+a3
+3,0
+a3
+4,0
+a3
+5,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+21,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+d,a3
+2,0
+6,a3
+0
+a3
+0
+a3
+0
+a3
+3,0
+a3
+0
+9,a3
+2,0
+a3
+2,0
+5,a3
+24,0
+b,a3
+6,0
+a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+3,0
+2,a3
+4,0
+2,a3
+5,0
+a3
+2,0
+a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+b,a3
+3,0
+5,a3
+0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+5,0
+a3
+2,0
+a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+3,0
+2,a3
+4,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+3,0
+a3
+3,0
+a3
+3,0
+a3
+2,0
+a3
+0
+a3
+5,0
+a3
+2,0
+7,a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+3,0
+a3
+0
+a3
+3,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+2,0
+2,a3
+3,0
+5,a3
+2,0
+a3
+0
+a3
+5,0
+a3
+5,0
+a3
+2,0
+a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+2,0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+5,0
+a3
+6,0
+3,a3
+3,0
+a3
+5,0
+a3
+5,0
+a3
+0
+a3
+2,0
+4,a3
+24,0
+a3
+0
+a3
+5,0
+a3
+0
+a3
+3,0
+2,a3
+8,0
+a3
+2,0
+b,a3
+5,0
+a3
+4,0
+a3
+7,0
+a3
+2,0
+a3
+3,0
+2,a3
+23,0
+a3
+9,0
+a3
+3,0
+a3
+9,0
+a3
+5,0
+a3
+6,0
+a3
+5,0
+a3
+4,0
+a3
+7,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+22,0
+b,a3
+3,0
+b,a3
+5,0
+a3
+6,0
+a3
+5,0
+a3
+3,0
+a3
+8,0
+a3
+3,0
+3,a3
+25,0
+a3
+9,0
+a3
+3,0
+a3
+9,0
+a3
+5,0
+a3
+6,0
+a3
+5,0
+a3
+2,0
+a3
+1b7b,0
+100 90 32
+261,0
+2,ff
+18,0
+ff
+3,0
+ff
+8,0
+ff
+5,0
+ff
+7,0
+ff
+11,0
+ff
+3,0
+ff
+17,0
+2,ff
+8,0
+b,ff
+6,0
+ff
+3,0
+ff
+8,0
+ff
+5,0
+ff
+7,0
+ff
+0
+7,ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+15,0
+ff
+a,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+d,ff
+0
+7,ff
+0
+ff
+0
+ff
+6,0
+ff
+4,0
+ff
+2,0
+ff
+3,0
+ff
+6,0
+ff
+0
+ff
+22,0
+ff
+4,0
+ff
+4,0
+ff
+6,0
+ff
+3,0
+ff
+8,0
+ff
+3,0
+ff
+3,0
+ff
+4,0
+ff
+5,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+21,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+d,ff
+2,0
+6,ff
+0
+ff
+0
+ff
+0
+ff
+3,0
+ff
+0
+9,ff
+2,0
+ff
+2,0
+5,ff
+24,0
+b,ff
+6,0
+ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+3,0
+2,ff
+4,0
+2,ff
+5,0
+ff
+2,0
+ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+b,ff
+3,0
+5,ff
+0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+5,0
+ff
+2,0
+ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+3,0
+2,ff
+4,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+3,0
+ff
+3,0
+ff
+3,0
+ff
+2,0
+ff
+0
+ff
+5,0
+ff
+2,0
+7,ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+3,0
+ff
+0
+ff
+3,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+2,0
+2,ff
+3,0
+5,ff
+2,0
+ff
+0
+ff
+5,0
+ff
+5,0
+ff
+2,0
+ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+2,0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+5,0
+ff
+6,0
+3,ff
+3,0
+ff
+5,0
+ff
+5,0
+ff
+0
+ff
+2,0
+4,ff
+24,0
+ff
+0
+ff
+5,0
+ff
+0
+ff
+3,0
+2,ff
+8,0
+ff
+2,0
+b,ff
+5,0
+ff
+4,0
+ff
+7,0
+ff
+2,0
+ff
+3,0
+2,ff
+23,0
+ff
+9,0
+ff
+3,0
+ff
+9,0
+ff
+5,0
+ff
+6,0
+ff
+5,0
+ff
+4,0
+ff
+7,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+22,0
+b,ff
+3,0
+b,ff
+5,0
+ff
+6,0
+ff
+5,0
+ff
+3,0
+ff
+8,0
+ff
+3,0
+3,ff
+25,0
+ff
+9,0
+ff
+3,0
+ff
+9,0
+ff
+5,0
+ff
+6,0
+ff
+5,0
+ff
+2,0
+ff
+1b7b,0
+100 90 32
+261,0
+2,100
+18,0
+100
+3,0
+100
+8,0
+100
+5,0
+100
+7,0
+100
+11,0
+100
+3,0
+100
+17,0
+2,100
+8,0
+b,100
+6,0
+100
+3,0
+100
+8,0
+100
+5,0
+100
+7,0
+100
+0
+7,100
+2,0
+100
+7,0
+100
+3,0
+100
+15,0
+100
+a,0
+100
+4,0
+100
+4,0
+100
+2,0
+d,100
+0
+7,100
+0
+100
+0
+100
+6,0
+100
+4,0
+100
+2,0
+100
+3,0
+100
+6,0
+100
+0
+100
+22,0
+100
+4,0
+100
+4,0
+100
+6,0
+100
+3,0
+100
+8,0
+100
+3,0
+100
+3,0
+100
+4,0
+100
+5,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+21,0
+100
+4,0
+100
+4,0
+100
+2,0
+d,100
+2,0
+6,100
+0
+100
+0
+100
+0
+100
+3,0
+100
+0
+9,100
+2,0
+100
+2,0
+5,100
+24,0
+b,100
+6,0
+100
+2,0
+100
+7,0
+100
+3,0
+100
+3,0
+2,100
+4,0
+2,100
+5,0
+100
+2,0
+100
+2,0
+100
+7,0
+100
+24,0
+100
+4,0
+100
+4,0
+100
+3,0
+b,100
+3,0
+5,100
+0
+100
+2,0
+100
+3,0
+100
+0
+100
+5,0
+100
+2,0
+100
+2,0
+100
+7,0
+100
+24,0
+100
+3,0
+2,100
+4,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+3,0
+100
+3,0
+100
+3,0
+100
+2,0
+100
+0
+100
+5,0
+100
+2,0
+7,100
+2,0
+100
+7,0
+100
+24,0
+100
+3,0
+100
+0
+100
+3,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+2,0
+2,100
+3,0
+5,100
+2,0
+100
+0
+100
+5,0
+100
+5,0
+100
+2,0
+100
+2,0
+100
+7,0
+100
+24,0
+100
+2,0
+100
+3,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+5,0
+100
+6,0
+3,100
+3,0
+100
+5,0
+100
+5,0
+100
+0
+100
+2,0
+4,100
+24,0
+100
+0
+100
+5,0
+100
+0
+100
+3,0
+2,100
+8,0
+100
+2,0
+b,100
+5,0
+100
+4,0
+100
+7,0
+100
+2,0
+100
+3,0
+2,100
+23,0
+100
+9,0
+100
+3,0
+100
+9,0
+100
+5,0
+100
+6,0
+100
+5,0
+100
+4,0
+100
+7,0
+100
+2,0
+100
+3,0
+100
+0
+100
+22,0
+b,100
+3,0
+b,100
+5,0
+100
+6,0
+100
+5,0
+100
+3,0
+100
+8,0
+100
+3,0
+3,100
+25,0
+100
+9,0
+100
+3,0
+100
+9,0
+100
+5,0
+100
+6,0
+100
+5,0
+100
+2,0
+100
+1b7b,0
+100 90 32
+261,0
+2,12c
+18,0
+12c
+3,0
+12c
+8,0
+12c
+5,0
+12c
+7,0
+12c
+11,0
+12c
+3,0
+12c
+17,0
+2,12c
+8,0
+b,12c
+6,0
+12c
+3,0
+12c
+8,0
+12c
+5,0
+12c
+7,0
+12c
+0
+7,12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+15,0
+12c
+a,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+d,12c
+0
+7,12c
+0
+12c
+0
+12c
+6,0
+12c
+4,0
+12c
+2,0
+12c
+3,0
+12c
+6,0
+12c
+0
+12c
+22,0
+12c
+4,0
+12c
+4,0
+12c
+6,0
+12c
+3,0
+12c
+8,0
+12c
+3,0
+12c
+3,0
+12c
+4,0
+12c
+5,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+21,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+d,12c
+2,0
+6,12c
+0
+12c
+0
+12c
+0
+12c
+3,0
+12c
+0
+9,12c
+2,0
+12c
+2,0
+5,12c
+24,0
+b,12c
+6,0
+12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+3,0
+2,12c
+4,0
+2,12c
+5,0
+12c
+2,0
+12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+b,12c
+3,0
+5,12c
+0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+5,0
+12c
+2,0
+12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+3,0
+2,12c
+4,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+3,0
+12c
+3,0
+12c
+3,0
+12c
+2,0
+12c
+0
+12c
+5,0
+12c
+2,0
+7,12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+3,0
+12c
+0
+12c
+3,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+2,0
+2,12c
+3,0
+5,12c
+2,0
+12c
+0
+12c
+5,0
+12c
+5,0
+12c
+2,0
+12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+2,0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+5,0
+12c
+6,0
+3,12c
+3,0
+12c
+5,0
+12c
+5,0
+12c
+0
+12c
+2,0
+4,12c
+24,0
+12c
+0
+12c
+5,0
+12c
+0
+12c
+3,0
+2,12c
+8,0
+12c
+2,0
+b,12c
+5,0
+12c
+4,0
+12c
+7,0
+12c
+2,0
+12c
+3,0
+2,12c
+23,0
+12c
+9,0
+12c
+3,0
+12c
+9,0
+12c
+5,0
+12c
+6,0
+12c
+5,0
+12c
+4,0
+12c
+7,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+22,0
+b,12c
+3,0
+b,12c
+5,0
+12c
+6,0
+12c
+5,0
+12c
+3,0
+12c
+8,0
+12c
+3,0
+3,12c
+25,0
+12c
+9,0
+12c
+3,0
+12c
+9,0
+12c
+5,0
+12c
+6,0
+12c
+5,0
+12c
+2,0
+12c
+1b7b,0
+100 90 32
+261,0
+2,3e8
+18,0
+3e8
+3,0
+3e8
+8,0
+3e8
+5,0
+3e8
+7,0
+3e8
+11,0
+3e8
+3,0
+3e8
+17,0
+2,3e8
+8,0
+b,3e8
+6,0
+3e8
+3,0
+3e8
+8,0
+3e8
+5,0
+3e8
+7,0
+3e8
+0
+7,3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+15,0
+3e8
+a,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+d,3e8
+0
+7,3e8
+0
+3e8
+0
+3e8
+6,0
+3e8
+4,0
+3e8
+2,0
+3e8
+3,0
+3e8
+6,0
+3e8
+0
+3e8
+22,0
+3e8
+4,0
+3e8
+4,0
+3e8
+6,0
+3e8
+3,0
+3e8
+8,0
+3e8
+3,0
+3e8
+3,0
+3e8
+4,0
+3e8
+5,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+21,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+d,3e8
+2,0
+6,3e8
+0
+3e8
+0
+3e8
+0
+3e8
+3,0
+3e8
+0
+9,3e8
+2,0
+3e8
+2,0
+5,3e8
+24,0
+b,3e8
+6,0
+3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+3,0
+2,3e8
+4,0
+2,3e8
+5,0
+3e8
+2,0
+3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+b,3e8
+3,0
+5,3e8
+0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+5,0
+3e8
+2,0
+3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+3,0
+2,3e8
+4,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+3,0
+3e8
+3,0
+3e8
+3,0
+3e8
+2,0
+3e8
+0
+3e8
+5,0
+3e8
+2,0
+7,3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+3,0
+3e8
+0
+3e8
+3,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+2,0
+2,3e8
+3,0
+5,3e8
+2,0
+3e8
+0
+3e8
+5,0
+3e8
+5,0
+3e8
+2,0
+3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+2,0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+5,0
+3e8
+6,0
+3,3e8
+3,0
+3e8
+5,0
+3e8
+5,0
+3e8
+0
+3e8
+2,0
+4,3e8
+24,0
+3e8
+0
+3e8
+5,0
+3e8
+0
+3e8
+3,0
+2,3e8
+8,0
+3e8
+2,0
+b,3e8
+5,0
+3e8
+4,0
+3e8
+7,0
+3e8
+2,0
+3e8
+3,0
+2,3e8
+23,0
+3e8
+9,0
+3e8
+3,0
+3e8
+9,0
+3e8
+5,0
+3e8
+6,0
+3e8
+5,0
+3e8
+4,0
+3e8
+7,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+22,0
+b,3e8
+3,0
+b,3e8
+5,0
+3e8
+6,0
+3e8
+5,0
+3e8
+3,0
+3e8
+8,0
+3e8
+3,0
+3,3e8
+25,0
+3e8
+9,0
+3e8
+3,0
+3e8
+9,0
+3e8
+5,0
+3e8
+6,0
+3e8
+5,0
+3e8
+2,0
+3e8
+1b7b,0
+100 90 32
+261,0
+2,111111
+18,0
+111111
+3,0
+111111
+8,0
+111111
+5,0
+111111
+7,0
+111111
+11,0
+111111
+3,0
+111111
+17,0
+2,111111
+8,0
+b,111111
+6,0
+111111
+3,0
+111111
+8,0
+111111
+5,0
+111111
+7,0
+111111
+0
+7,111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+15,0
+111111
+a,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+d,111111
+0
+7,111111
+0
+111111
+0
+111111
+6,0
+111111
+4,0
+111111
+2,0
+111111
+3,0
+111111
+6,0
+111111
+0
+111111
+22,0
+111111
+4,0
+111111
+4,0
+111111
+6,0
+111111
+3,0
+111111
+8,0
+111111
+3,0
+111111
+3,0
+111111
+4,0
+111111
+5,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+21,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+d,111111
+2,0
+6,111111
+0
+111111
+0
+111111
+0
+111111
+3,0
+111111
+0
+9,111111
+2,0
+111111
+2,0
+5,111111
+24,0
+b,111111
+6,0
+111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+3,0
+2,111111
+4,0
+2,111111
+5,0
+111111
+2,0
+111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+b,111111
+3,0
+5,111111
+0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+5,0
+111111
+2,0
+111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+3,0
+2,111111
+4,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+3,0
+111111
+3,0
+111111
+3,0
+111111
+2,0
+111111
+0
+111111
+5,0
+111111
+2,0
+7,111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+3,0
+111111
+0
+111111
+3,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+2,0
+2,111111
+3,0
+5,111111
+2,0
+111111
+0
+111111
+5,0
+111111
+5,0
+111111
+2,0
+111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+2,0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+5,0
+111111
+6,0
+3,111111
+3,0
+111111
+5,0
+111111
+5,0
+111111
+0
+111111
+2,0
+4,111111
+24,0
+111111
+0
+111111
+5,0
+111111
+0
+111111
+3,0
+2,111111
+8,0
+111111
+2,0
+b,111111
+5,0
+111111
+4,0
+111111
+7,0
+111111
+2,0
+111111
+3,0
+2,111111
+23,0
+111111
+9,0
+111111
+3,0
+111111
+9,0
+111111
+5,0
+111111
+6,0
+111111
+5,0
+111111
+4,0
+111111
+7,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+22,0
+b,111111
+3,0
+b,111111
+5,0
+111111
+6,0
+111111
+5,0
+111111
+3,0
+111111
+8,0
+111111
+3,0
+3,111111
+25,0
+111111
+9,0
+111111
+3,0
+111111
+9,0
+111111
+5,0
+111111
+6,0
+111111
+5,0
+111111
+2,0
+111111
+1b7b,0
+100 90 32
+261,0
+2,400200
+18,0
+400200
+3,0
+400200
+8,0
+400200
+5,0
+400200
+7,0
+400200
+11,0
+400200
+3,0
+400200
+17,0
+2,400200
+8,0
+b,400200
+6,0
+400200
+3,0
+400200
+8,0
+400200
+5,0
+400200
+7,0
+400200
+0
+7,400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+15,0
+400200
+a,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+d,400200
+0
+7,400200
+0
+400200
+0
+400200
+6,0
+400200
+4,0
+400200
+2,0
+400200
+3,0
+400200
+6,0
+400200
+0
+400200
+22,0
+400200
+4,0
+400200
+4,0
+400200
+6,0
+400200
+3,0
+400200
+8,0
+400200
+3,0
+400200
+3,0
+400200
+4,0
+400200
+5,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+21,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+d,400200
+2,0
+6,400200
+0
+400200
+0
+400200
+0
+400200
+3,0
+400200
+0
+9,400200
+2,0
+400200
+2,0
+5,400200
+24,0
+b,400200
+6,0
+400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+3,0
+2,400200
+4,0
+2,400200
+5,0
+400200
+2,0
+400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+b,400200
+3,0
+5,400200
+0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+5,0
+400200
+2,0
+400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+3,0
+2,400200
+4,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+3,0
+400200
+3,0
+400200
+3,0
+400200
+2,0
+400200
+0
+400200
+5,0
+400200
+2,0
+7,400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+3,0
+400200
+0
+400200
+3,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+2,0
+2,400200
+3,0
+5,400200
+2,0
+400200
+0
+400200
+5,0
+400200
+5,0
+400200
+2,0
+400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+2,0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+5,0
+400200
+6,0
+3,400200
+3,0
+400200
+5,0
+400200
+5,0
+400200
+0
+400200
+2,0
+4,400200
+24,0
+400200
+0
+400200
+5,0
+400200
+0
+400200
+3,0
+2,400200
+8,0
+400200
+2,0
+b,400200
+5,0
+400200
+4,0
+400200
+7,0
+400200
+2,0
+400200
+3,0
+2,400200
+23,0
+400200
+9,0
+400200
+3,0
+400200
+9,0
+400200
+5,0
+400200
+6,0
+400200
+5,0
+400200
+4,0
+400200
+7,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+22,0
+b,400200
+3,0
+b,400200
+5,0
+400200
+6,0
+400200
+5,0
+400200
+3,0
+400200
+8,0
+400200
+3,0
+3,400200
+25,0
+400200
+9,0
+400200
+3,0
+400200
+9,0
+400200
+5,0
+400200
+6,0
+400200
+5,0
+400200
+2,0
+400200
+1b7b,0
+100 90 32
+261,0
+2,777777
+18,0
+777777
+3,0
+777777
+8,0
+777777
+5,0
+777777
+7,0
+777777
+11,0
+777777
+3,0
+777777
+17,0
+2,777777
+8,0
+b,777777
+6,0
+777777
+3,0
+777777
+8,0
+777777
+5,0
+777777
+7,0
+777777
+0
+7,777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+15,0
+777777
+a,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+d,777777
+0
+7,777777
+0
+777777
+0
+777777
+6,0
+777777
+4,0
+777777
+2,0
+777777
+3,0
+777777
+6,0
+777777
+0
+777777
+22,0
+777777
+4,0
+777777
+4,0
+777777
+6,0
+777777
+3,0
+777777
+8,0
+777777
+3,0
+777777
+3,0
+777777
+4,0
+777777
+5,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+21,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+d,777777
+2,0
+6,777777
+0
+777777
+0
+777777
+0
+777777
+3,0
+777777
+0
+9,777777
+2,0
+777777
+2,0
+5,777777
+24,0
+b,777777
+6,0
+777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+3,0
+2,777777
+4,0
+2,777777
+5,0
+777777
+2,0
+777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+b,777777
+3,0
+5,777777
+0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+5,0
+777777
+2,0
+777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+3,0
+2,777777
+4,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+3,0
+777777
+3,0
+777777
+3,0
+777777
+2,0
+777777
+0
+777777
+5,0
+777777
+2,0
+7,777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+3,0
+777777
+0
+777777
+3,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+2,0
+2,777777
+3,0
+5,777777
+2,0
+777777
+0
+777777
+5,0
+777777
+5,0
+777777
+2,0
+777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+2,0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+5,0
+777777
+6,0
+3,777777
+3,0
+777777
+5,0
+777777
+5,0
+777777
+0
+777777
+2,0
+4,777777
+24,0
+777777
+0
+777777
+5,0
+777777
+0
+777777
+3,0
+2,777777
+8,0
+777777
+2,0
+b,777777
+5,0
+777777
+4,0
+777777
+7,0
+777777
+2,0
+777777
+3,0
+2,777777
+23,0
+777777
+9,0
+777777
+3,0
+777777
+9,0
+777777
+5,0
+777777
+6,0
+777777
+5,0
+777777
+4,0
+777777
+7,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+22,0
+b,777777
+3,0
+b,777777
+5,0
+777777
+6,0
+777777
+5,0
+777777
+3,0
+777777
+8,0
+777777
+3,0
+3,777777
+25,0
+777777
+9,0
+777777
+3,0
+777777
+9,0
+777777
+5,0
+777777
+6,0
+777777
+5,0
+777777
+2,0
+777777
+1b7b,0
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+11,0
+1
+3,0
+1
+17,0
+2,1
+8,0
+b,1
+6,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+0
+7,1
+2,0
+1
+7,0
+1
+3,0
+1
+15,0
+1
+a,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+0
+7,1
+0
+1
+0
+1
+6,0
+1
+4,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+0
+1
+22,0
+1
+4,0
+1
+4,0
+1
+6,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+4,0
+1
+5,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+21,0
+1
+4,0
+1
+4,0
+1
+2,0
+d,1
+2,0
+6,1
+0
+1
+0
+1
+0
+1
+3,0
+1
+0
+9,1
+2,0
+1
+2,0
+5,1
+24,0
+b,1
+6,0
+1
+2,0
+1
+7,0
+1
+3,0
+1
+3,0
+2,1
+4,0
+2,1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+4,0
+1
+4,0
+1
+3,0
+b,1
+3,0
+5,1
+0
+1
+2,0
+1
+3,0
+1
+0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+2,1
+4,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+0
+1
+5,0
+1
+2,0
+7,1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+1
+0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+3,0
+5,1
+2,0
+1
+0
+1
+5,0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+5,0
+1
+6,0
+3,1
+3,0
+1
+5,0
+1
+5,0
+1
+0
+1
+2,0
+4,1
+24,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+2,1
+8,0
+1
+2,0
+b,1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+2,1
+23,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+1
+0
+1
+22,0
+b,1
+3,0
+b,1
+5,0
+1
+6,0
+1
+5,0
+1
+3,0
+1
+8,0
+1
+3,0
+3,1
+25,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+2,0
+1
+1b7b,0
+100 90 32
+261,0
+2,2
+18,0
+2
+3,0
+2
+8,0
+2
+5,0
+2
+7,0
+2
+11,0
+2
+3,0
+2
+17,0
+2,2
+8,0
+b,2
+6,0
+2
+3,0
+2
+8,0
+2
+5,0
+2
+7,0
+2
+0
+7,2
+2,0
+2
+7,0
+2
+3,0
+2
+15,0
+2
+a,0
+2
+4,0
+2
+4,0
+2
+2,0
+d,2
+0
+7,2
+0
+2
+0
+2
+6,0
+2
+4,0
+2
+2,0
+2
+3,0
+2
+6,0
+2
+0
+2
+22,0
+2
+4,0
+2
+4,0
+2
+6,0
+2
+3,0
+2
+8,0
+2
+3,0
+2
+3,0
+2
+4,0
+2
+5,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+21,0
+2
+4,0
+2
+4,0
+2
+2,0
+d,2
+2,0
+6,2
+0
+2
+0
+2
+0
+2
+3,0
+2
+0
+9,2
+2,0
+2
+2,0
+5,2
+24,0
+b,2
+6,0
+2
+2,0
+2
+7,0
+2
+3,0
+2
+3,0
+2,2
+4,0
+2,2
+5,0
+2
+2,0
+2
+2,0
+2
+7,0
+2
+24,0
+2
+4,0
+2
+4,0
+2
+3,0
+b,2
+3,0
+5,2
+0
+2
+2,0
+2
+3,0
+2
+0
+2
+5,0
+2
+2,0
+2
+2,0
+2
+7,0
+2
+24,0
+2
+3,0
+2,2
+4,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+3,0
+2
+3,0
+2
+3,0
+2
+2,0
+2
+0
+2
+5,0
+2
+2,0
+7,2
+2,0
+2
+7,0
+2
+24,0
+2
+3,0
+2
+0
+2
+3,0
+2
+3,0
+2
+2,0
+2
+2,0
+2
+2,0
+2,2
+3,0
+5,2
+2,0
+2
+0
+2
+5,0
+2
+5,0
+2
+2,0
+2
+2,0
+2
+7,0
+2
+24,0
+2
+2,0
+2
+3,0
+2
+2,0
+2
+3,0
+2
+0
+2
+4,0
+4,2
+5,0
+2
+6,0
+3,2
+3,0
+2
+5,0
+2
+5,0
+2
+0
+2
+2,0
+4,2
+24,0
+2
+0
+2
+5,0
+2
+0
+2
+3,0
+2,2
+8,0
+2
+2,0
+b,2
+5,0
+2
+4,0
+2
+7,0
+2
+2,0
+2
+3,0
+2,2
+23,0
+2
+9,0
+2
+3,0
+2
+9,0
+2
+5,0
+2
+6,0
+2
+5,0
+2
+4,0
+2
+7,0
+2
+2,0
+2
+3,0
+2
+0
+2
+22,0
+b,2
+3,0
+b,2
+5,0
+2
+6,0
+2
+5,0
+2
+3,0
+2
+8,0
+2
+3,0
+3,2
+25,0
+2
+9,0
+2
+3,0
+2
+9,0
+2
+5,0
+2
+6,0
+2
+5,0
+2
+2,0
+2
+1b7b,0
+100 90 32
+261,0
+2,3
+18,0
+3
+3,0
+3
+8,0
+3
+5,0
+3
+7,0
+3
+11,0
+3
+3,0
+3
+17,0
+2,3
+8,0
+b,3
+6,0
+3
+3,0
+3
+8,0
+3
+5,0
+3
+7,0
+3
+0
+7,3
+2,0
+3
+7,0
+3
+3,0
+3
+15,0
+3
+a,0
+3
+4,0
+3
+4,0
+3
+2,0
+d,3
+0
+7,3
+0
+3
+0
+3
+6,0
+3
+4,0
+3
+2,0
+3
+3,0
+3
+6,0
+3
+0
+3
+22,0
+3
+4,0
+3
+4,0
+3
+6,0
+3
+3,0
+3
+8,0
+3
+3,0
+3
+3,0
+3
+4,0
+3
+5,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+21,0
+3
+4,0
+3
+4,0
+3
+2,0
+d,3
+2,0
+6,3
+0
+3
+0
+3
+0
+3
+3,0
+3
+0
+9,3
+2,0
+3
+2,0
+5,3
+24,0
+b,3
+6,0
+3
+2,0
+3
+7,0
+3
+3,0
+3
+3,0
+2,3
+4,0
+2,3
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+3
+24,0
+3
+4,0
+3
+4,0
+3
+3,0
+b,3
+3,0
+5,3
+0
+3
+2,0
+3
+3,0
+3
+0
+3
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+3
+24,0
+3
+3,0
+2,3
+4,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+3,0
+3
+3,0
+3
+3,0
+3
+2,0
+3
+0
+3
+5,0
+3
+2,0
+7,3
+2,0
+3
+7,0
+3
+24,0
+3
+3,0
+3
+0
+3
+3,0
+3
+3,0
+3
+2,0
+3
+2,0
+3
+2,0
+2,3
+3,0
+5,3
+2,0
+3
+0
+3
+5,0
+3
+5,0
+3
+2,0
+3
+2,0
+3
+7,0
+3
+24,0
+3
+2,0
+3
+3,0
+3
+2,0
+3
+3,0
+3
+0
+3
+4,0
+4,3
+5,0
+3
+6,0
+3,3
+3,0
+3
+5,0
+3
+5,0
+3
+0
+3
+2,0
+4,3
+24,0
+3
+0
+3
+5,0
+3
+0
+3
+3,0
+2,3
+8,0
+3
+2,0
+b,3
+5,0
+3
+4,0
+3
+7,0
+3
+2,0
+3
+3,0
+2,3
+23,0
+3
+9,0
+3
+3,0
+3
+9,0
+3
+5,0
+3
+6,0
+3
+5,0
+3
+4,0
+3
+7,0
+3
+2,0
+3
+3,0
+3
+0
+3
+22,0
+b,3
+3,0
+b,3
+5,0
+3
+6,0
+3
+5,0
+3
+3,0
+3
+8,0
+3
+3,0
+3,3
+25,0
+3
+9,0
+3
+3,0
+3
+9,0
+3
+5,0
+3
+6,0
+3
+5,0
+3
+2,0
+3
+1b7b,0
+100 90 32
+261,0
+2,4
+18,0
+4
+3,0
+4
+8,0
+4
+5,0
+4
+7,0
+4
+11,0
+4
+3,0
+4
+17,0
+2,4
+8,0
+b,4
+6,0
+4
+3,0
+4
+8,0
+4
+5,0
+4
+7,0
+4
+0
+7,4
+2,0
+4
+7,0
+4
+3,0
+4
+15,0
+4
+a,0
+4
+4,0
+4
+4,0
+4
+2,0
+d,4
+0
+7,4
+0
+4
+0
+4
+6,0
+4
+4,0
+4
+2,0
+4
+3,0
+4
+6,0
+4
+0
+4
+22,0
+4
+4,0
+4
+4,0
+4
+6,0
+4
+3,0
+4
+8,0
+4
+3,0
+4
+3,0
+4
+4,0
+4
+5,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+21,0
+4
+4,0
+4
+4,0
+4
+2,0
+d,4
+2,0
+6,4
+0
+4
+0
+4
+0
+4
+3,0
+4
+0
+9,4
+2,0
+4
+2,0
+5,4
+24,0
+b,4
+6,0
+4
+2,0
+4
+7,0
+4
+3,0
+4
+3,0
+2,4
+4,0
+2,4
+5,0
+4
+2,0
+4
+2,0
+4
+7,0
+4
+24,0
+4
+4,0
+4
+4,0
+4
+3,0
+b,4
+3,0
+5,4
+0
+4
+2,0
+4
+3,0
+4
+0
+4
+5,0
+4
+2,0
+4
+2,0
+4
+7,0
+4
+24,0
+4
+3,0
+2,4
+4,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+3,0
+4
+3,0
+4
+3,0
+4
+2,0
+4
+0
+4
+5,0
+4
+2,0
+7,4
+2,0
+4
+7,0
+4
+24,0
+4
+3,0
+4
+0
+4
+3,0
+4
+3,0
+4
+2,0
+4
+2,0
+4
+2,0
+2,4
+3,0
+5,4
+2,0
+4
+0
+4
+5,0
+4
+5,0
+4
+2,0
+4
+2,0
+4
+7,0
+4
+24,0
+4
+2,0
+4
+3,0
+4
+2,0
+4
+3,0
+4
+0
+4
+4,0
+4,4
+5,0
+4
+6,0
+3,4
+3,0
+4
+5,0
+4
+5,0
+4
+0
+4
+2,0
+4,4
+24,0
+4
+0
+4
+5,0
+4
+0
+4
+3,0
+2,4
+8,0
+4
+2,0
+b,4
+5,0
+4
+4,0
+4
+7,0
+4
+2,0
+4
+3,0
+2,4
+23,0
+4
+9,0
+4
+3,0
+4
+9,0
+4
+5,0
+4
+6,0
+4
+5,0
+4
+4,0
+4
+7,0
+4
+2,0
+4
+3,0
+4
+0
+4
+22,0
+b,4
+3,0
+b,4
+5,0
+4
+6,0
+4
+5,0
+4
+3,0
+4
+8,0
+4
+3,0
+3,4
+25,0
+4
+9,0
+4
+3,0
+4
+9,0
+4
+5,0
+4
+6,0
+4
+5,0
+4
+2,0
+4
+1b7b,0
+100 90 32
+261,0
+2,6
+18,0
+6
+3,0
+6
+8,0
+6
+5,0
+6
+7,0
+6
+11,0
+6
+3,0
+6
+17,0
+2,6
+8,0
+b,6
+6,0
+6
+3,0
+6
+8,0
+6
+5,0
+6
+7,0
+6
+0
+7,6
+2,0
+6
+7,0
+6
+3,0
+6
+15,0
+6
+a,0
+6
+4,0
+6
+4,0
+6
+2,0
+d,6
+0
+7,6
+0
+6
+0
+6
+6,0
+6
+4,0
+6
+2,0
+6
+3,0
+6
+6,0
+6
+0
+6
+22,0
+6
+4,0
+6
+4,0
+6
+6,0
+6
+3,0
+6
+8,0
+6
+3,0
+6
+3,0
+6
+4,0
+6
+5,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+21,0
+6
+4,0
+6
+4,0
+6
+2,0
+d,6
+2,0
+6,6
+0
+6
+0
+6
+0
+6
+3,0
+6
+0
+9,6
+2,0
+6
+2,0
+5,6
+24,0
+b,6
+6,0
+6
+2,0
+6
+7,0
+6
+3,0
+6
+3,0
+2,6
+4,0
+2,6
+5,0
+6
+2,0
+6
+2,0
+6
+7,0
+6
+24,0
+6
+4,0
+6
+4,0
+6
+3,0
+b,6
+3,0
+5,6
+0
+6
+2,0
+6
+3,0
+6
+0
+6
+5,0
+6
+2,0
+6
+2,0
+6
+7,0
+6
+24,0
+6
+3,0
+2,6
+4,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+3,0
+6
+3,0
+6
+3,0
+6
+2,0
+6
+0
+6
+5,0
+6
+2,0
+7,6
+2,0
+6
+7,0
+6
+24,0
+6
+3,0
+6
+0
+6
+3,0
+6
+3,0
+6
+2,0
+6
+2,0
+6
+2,0
+2,6
+3,0
+5,6
+2,0
+6
+0
+6
+5,0
+6
+5,0
+6
+2,0
+6
+2,0
+6
+7,0
+6
+24,0
+6
+2,0
+6
+3,0
+6
+2,0
+6
+3,0
+6
+0
+6
+4,0
+4,6
+5,0
+6
+6,0
+3,6
+3,0
+6
+5,0
+6
+5,0
+6
+0
+6
+2,0
+4,6
+24,0
+6
+0
+6
+5,0
+6
+0
+6
+3,0
+2,6
+8,0
+6
+2,0
+b,6
+5,0
+6
+4,0
+6
+7,0
+6
+2,0
+6
+3,0
+2,6
+23,0
+6
+9,0
+6
+3,0
+6
+9,0
+6
+5,0
+6
+6,0
+6
+5,0
+6
+4,0
+6
+7,0
+6
+2,0
+6
+3,0
+6
+0
+6
+22,0
+b,6
+3,0
+b,6
+5,0
+6
+6,0
+6
+5,0
+6
+3,0
+6
+8,0
+6
+3,0
+3,6
+25,0
+6
+9,0
+6
+3,0
+6
+9,0
+6
+5,0
+6
+6,0
+6
+5,0
+6
+2,0
+6
+1b7b,0
+100 90 32
+261,0
+2,7
+18,0
+7
+3,0
+7
+8,0
+7
+5,0
+7
+7,0
+7
+11,0
+7
+3,0
+7
+17,0
+2,7
+8,0
+b,7
+6,0
+7
+3,0
+7
+8,0
+7
+5,0
+7
+7,0
+7
+0
+7,7
+2,0
+7
+7,0
+7
+3,0
+7
+15,0
+7
+a,0
+7
+4,0
+7
+4,0
+7
+2,0
+d,7
+0
+7,7
+0
+7
+0
+7
+6,0
+7
+4,0
+7
+2,0
+7
+3,0
+7
+6,0
+7
+0
+7
+22,0
+7
+4,0
+7
+4,0
+7
+6,0
+7
+3,0
+7
+8,0
+7
+3,0
+7
+3,0
+7
+4,0
+7
+5,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+21,0
+7
+4,0
+7
+4,0
+7
+2,0
+d,7
+2,0
+6,7
+0
+7
+0
+7
+0
+7
+3,0
+7
+0
+9,7
+2,0
+7
+2,0
+5,7
+24,0
+b,7
+6,0
+7
+2,0
+7
+7,0
+7
+3,0
+7
+3,0
+2,7
+4,0
+2,7
+5,0
+7
+2,0
+7
+2,0
+7
+7,0
+7
+24,0
+7
+4,0
+7
+4,0
+7
+3,0
+b,7
+3,0
+5,7
+0
+7
+2,0
+7
+3,0
+7
+0
+7
+5,0
+7
+2,0
+7
+2,0
+7
+7,0
+7
+24,0
+7
+3,0
+2,7
+4,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+3,0
+7
+3,0
+7
+3,0
+7
+2,0
+7
+0
+7
+5,0
+7
+2,0
+7,7
+2,0
+7
+7,0
+7
+24,0
+7
+3,0
+7
+0
+7
+3,0
+7
+3,0
+7
+2,0
+7
+2,0
+7
+2,0
+2,7
+3,0
+5,7
+2,0
+7
+0
+7
+5,0
+7
+5,0
+7
+2,0
+7
+2,0
+7
+7,0
+7
+24,0
+7
+2,0
+7
+3,0
+7
+2,0
+7
+3,0
+7
+0
+7
+4,0
+4,7
+5,0
+7
+6,0
+3,7
+3,0
+7
+5,0
+7
+5,0
+7
+0
+7
+2,0
+4,7
+24,0
+7
+0
+7
+5,0
+7
+0
+7
+3,0
+2,7
+8,0
+7
+2,0
+b,7
+5,0
+7
+4,0
+7
+7,0
+7
+2,0
+7
+3,0
+2,7
+23,0
+7
+9,0
+7
+3,0
+7
+9,0
+7
+5,0
+7
+6,0
+7
+5,0
+7
+4,0
+7
+7,0
+7
+2,0
+7
+3,0
+7
+0
+7
+22,0
+b,7
+3,0
+b,7
+5,0
+7
+6,0
+7
+5,0
+7
+3,0
+7
+8,0
+7
+3,0
+3,7
+25,0
+7
+9,0
+7
+3,0
+7
+9,0
+7
+5,0
+7
+6,0
+7
+5,0
+7
+2,0
+7
+1b7b,0
+100 90 32
+261,0
+2,10
+18,0
+10
+3,0
+10
+8,0
+10
+5,0
+10
+7,0
+10
+11,0
+10
+3,0
+10
+17,0
+2,10
+8,0
+b,10
+6,0
+10
+3,0
+10
+8,0
+10
+5,0
+10
+7,0
+10
+0
+7,10
+2,0
+10
+7,0
+10
+3,0
+10
+15,0
+10
+a,0
+10
+4,0
+10
+4,0
+10
+2,0
+d,10
+0
+7,10
+0
+10
+0
+10
+6,0
+10
+4,0
+10
+2,0
+10
+3,0
+10
+6,0
+10
+0
+10
+22,0
+10
+4,0
+10
+4,0
+10
+6,0
+10
+3,0
+10
+8,0
+10
+3,0
+10
+3,0
+10
+4,0
+10
+5,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+21,0
+10
+4,0
+10
+4,0
+10
+2,0
+d,10
+2,0
+6,10
+0
+10
+0
+10
+0
+10
+3,0
+10
+0
+9,10
+2,0
+10
+2,0
+5,10
+24,0
+b,10
+6,0
+10
+2,0
+10
+7,0
+10
+3,0
+10
+3,0
+2,10
+4,0
+2,10
+5,0
+10
+2,0
+10
+2,0
+10
+7,0
+10
+24,0
+10
+4,0
+10
+4,0
+10
+3,0
+b,10
+3,0
+5,10
+0
+10
+2,0
+10
+3,0
+10
+0
+10
+5,0
+10
+2,0
+10
+2,0
+10
+7,0
+10
+24,0
+10
+3,0
+2,10
+4,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+3,0
+10
+3,0
+10
+3,0
+10
+2,0
+10
+0
+10
+5,0
+10
+2,0
+7,10
+2,0
+10
+7,0
+10
+24,0
+10
+3,0
+10
+0
+10
+3,0
+10
+3,0
+10
+2,0
+10
+2,0
+10
+2,0
+2,10
+3,0
+5,10
+2,0
+10
+0
+10
+5,0
+10
+5,0
+10
+2,0
+10
+2,0
+10
+7,0
+10
+24,0
+10
+2,0
+10
+3,0
+10
+2,0
+10
+3,0
+10
+0
+10
+4,0
+4,10
+5,0
+10
+6,0
+3,10
+3,0
+10
+5,0
+10
+5,0
+10
+0
+10
+2,0
+4,10
+24,0
+10
+0
+10
+5,0
+10
+0
+10
+3,0
+2,10
+8,0
+10
+2,0
+b,10
+5,0
+10
+4,0
+10
+7,0
+10
+2,0
+10
+3,0
+2,10
+23,0
+10
+9,0
+10
+3,0
+10
+9,0
+10
+5,0
+10
+6,0
+10
+5,0
+10
+4,0
+10
+7,0
+10
+2,0
+10
+3,0
+10
+0
+10
+22,0
+b,10
+3,0
+b,10
+5,0
+10
+6,0
+10
+5,0
+10
+3,0
+10
+8,0
+10
+3,0
+3,10
+25,0
+10
+9,0
+10
+3,0
+10
+9,0
+10
+5,0
+10
+6,0
+10
+5,0
+10
+2,0
+10
+1b7b,0
+100 90 32
+261,0
+2,33
+18,0
+33
+3,0
+33
+8,0
+33
+5,0
+33
+7,0
+33
+11,0
+33
+3,0
+33
+17,0
+2,33
+8,0
+b,33
+6,0
+33
+3,0
+33
+8,0
+33
+5,0
+33
+7,0
+33
+0
+7,33
+2,0
+33
+7,0
+33
+3,0
+33
+15,0
+33
+a,0
+33
+4,0
+33
+4,0
+33
+2,0
+d,33
+0
+7,33
+0
+33
+0
+33
+6,0
+33
+4,0
+33
+2,0
+33
+3,0
+33
+6,0
+33
+0
+33
+22,0
+33
+4,0
+33
+4,0
+33
+6,0
+33
+3,0
+33
+8,0
+33
+3,0
+33
+3,0
+33
+4,0
+33
+5,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+21,0
+33
+4,0
+33
+4,0
+33
+2,0
+d,33
+2,0
+6,33
+0
+33
+0
+33
+0
+33
+3,0
+33
+0
+9,33
+2,0
+33
+2,0
+5,33
+24,0
+b,33
+6,0
+33
+2,0
+33
+7,0
+33
+3,0
+33
+3,0
+2,33
+4,0
+2,33
+5,0
+33
+2,0
+33
+2,0
+33
+7,0
+33
+24,0
+33
+4,0
+33
+4,0
+33
+3,0
+b,33
+3,0
+5,33
+0
+33
+2,0
+33
+3,0
+33
+0
+33
+5,0
+33
+2,0
+33
+2,0
+33
+7,0
+33
+24,0
+33
+3,0
+2,33
+4,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+3,0
+33
+3,0
+33
+3,0
+33
+2,0
+33
+0
+33
+5,0
+33
+2,0
+7,33
+2,0
+33
+7,0
+33
+24,0
+33
+3,0
+33
+0
+33
+3,0
+33
+3,0
+33
+2,0
+33
+2,0
+33
+2,0
+2,33
+3,0
+5,33
+2,0
+33
+0
+33
+5,0
+33
+5,0
+33
+2,0
+33
+2,0
+33
+7,0
+33
+24,0
+33
+2,0
+33
+3,0
+33
+2,0
+33
+3,0
+33
+0
+33
+4,0
+4,33
+5,0
+33
+6,0
+3,33
+3,0
+33
+5,0
+33
+5,0
+33
+0
+33
+2,0
+4,33
+24,0
+33
+0
+33
+5,0
+33
+0
+33
+3,0
+2,33
+8,0
+33
+2,0
+b,33
+5,0
+33
+4,0
+33
+7,0
+33
+2,0
+33
+3,0
+2,33
+23,0
+33
+9,0
+33
+3,0
+33
+9,0
+33
+5,0
+33
+6,0
+33
+5,0
+33
+4,0
+33
+7,0
+33
+2,0
+33
+3,0
+33
+0
+33
+22,0
+b,33
+3,0
+b,33
+5,0
+33
+6,0
+33
+5,0
+33
+3,0
+33
+8,0
+33
+3,0
+3,33
+25,0
+33
+9,0
+33
+3,0
+33
+9,0
+33
+5,0
+33
+6,0
+33
+5,0
+33
+2,0
+33
+1b7b,0
+100 90 32
+261,0
+2,81
+18,0
+81
+3,0
+81
+8,0
+81
+5,0
+81
+7,0
+81
+11,0
+81
+3,0
+81
+17,0
+2,81
+8,0
+b,81
+6,0
+81
+3,0
+81
+8,0
+81
+5,0
+81
+7,0
+81
+0
+7,81
+2,0
+81
+7,0
+81
+3,0
+81
+15,0
+81
+a,0
+81
+4,0
+81
+4,0
+81
+2,0
+d,81
+0
+7,81
+0
+81
+0
+81
+6,0
+81
+4,0
+81
+2,0
+81
+3,0
+81
+6,0
+81
+0
+81
+22,0
+81
+4,0
+81
+4,0
+81
+6,0
+81
+3,0
+81
+8,0
+81
+3,0
+81
+3,0
+81
+4,0
+81
+5,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+21,0
+81
+4,0
+81
+4,0
+81
+2,0
+d,81
+2,0
+6,81
+0
+81
+0
+81
+0
+81
+3,0
+81
+0
+9,81
+2,0
+81
+2,0
+5,81
+24,0
+b,81
+6,0
+81
+2,0
+81
+7,0
+81
+3,0
+81
+3,0
+2,81
+4,0
+2,81
+5,0
+81
+2,0
+81
+2,0
+81
+7,0
+81
+24,0
+81
+4,0
+81
+4,0
+81
+3,0
+b,81
+3,0
+5,81
+0
+81
+2,0
+81
+3,0
+81
+0
+81
+5,0
+81
+2,0
+81
+2,0
+81
+7,0
+81
+24,0
+81
+3,0
+2,81
+4,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+3,0
+81
+3,0
+81
+3,0
+81
+2,0
+81
+0
+81
+5,0
+81
+2,0
+7,81
+2,0
+81
+7,0
+81
+24,0
+81
+3,0
+81
+0
+81
+3,0
+81
+3,0
+81
+2,0
+81
+2,0
+81
+2,0
+2,81
+3,0
+5,81
+2,0
+81
+0
+81
+5,0
+81
+5,0
+81
+2,0
+81
+2,0
+81
+7,0
+81
+24,0
+81
+2,0
+81
+3,0
+81
+2,0
+81
+3,0
+81
+0
+81
+4,0
+4,81
+5,0
+81
+6,0
+3,81
+3,0
+81
+5,0
+81
+5,0
+81
+0
+81
+2,0
+4,81
+24,0
+81
+0
+81
+5,0
+81
+0
+81
+3,0
+2,81
+8,0
+81
+2,0
+b,81
+5,0
+81
+4,0
+81
+7,0
+81
+2,0
+81
+3,0
+2,81
+23,0
+81
+9,0
+81
+3,0
+81
+9,0
+81
+5,0
+81
+6,0
+81
+5,0
+81
+4,0
+81
+7,0
+81
+2,0
+81
+3,0
+81
+0
+81
+22,0
+b,81
+3,0
+b,81
+5,0
+81
+6,0
+81
+5,0
+81
+3,0
+81
+8,0
+81
+3,0
+3,81
+25,0
+81
+9,0
+81
+3,0
+81
+9,0
+81
+5,0
+81
+6,0
+81
+5,0
+81
+2,0
+81
+1b7b,0
+100 90 32
+261,0
+2,a3
+18,0
+a3
+3,0
+a3
+8,0
+a3
+5,0
+a3
+7,0
+a3
+11,0
+a3
+3,0
+a3
+17,0
+2,a3
+8,0
+b,a3
+6,0
+a3
+3,0
+a3
+8,0
+a3
+5,0
+a3
+7,0
+a3
+0
+7,a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+15,0
+a3
+a,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+d,a3
+0
+7,a3
+0
+a3
+0
+a3
+6,0
+a3
+4,0
+a3
+2,0
+a3
+3,0
+a3
+6,0
+a3
+0
+a3
+22,0
+a3
+4,0
+a3
+4,0
+a3
+6,0
+a3
+3,0
+a3
+8,0
+a3
+3,0
+a3
+3,0
+a3
+4,0
+a3
+5,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+21,0
+a3
+4,0
+a3
+4,0
+a3
+2,0
+d,a3
+2,0
+6,a3
+0
+a3
+0
+a3
+0
+a3
+3,0
+a3
+0
+9,a3
+2,0
+a3
+2,0
+5,a3
+24,0
+b,a3
+6,0
+a3
+2,0
+a3
+7,0
+a3
+3,0
+a3
+3,0
+2,a3
+4,0
+2,a3
+5,0
+a3
+2,0
+a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+4,0
+a3
+4,0
+a3
+3,0
+b,a3
+3,0
+5,a3
+0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+5,0
+a3
+2,0
+a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+3,0
+2,a3
+4,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+3,0
+a3
+3,0
+a3
+3,0
+a3
+2,0
+a3
+0
+a3
+5,0
+a3
+2,0
+7,a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+3,0
+a3
+0
+a3
+3,0
+a3
+3,0
+a3
+2,0
+a3
+2,0
+a3
+2,0
+2,a3
+3,0
+5,a3
+2,0
+a3
+0
+a3
+5,0
+a3
+5,0
+a3
+2,0
+a3
+2,0
+a3
+7,0
+a3
+24,0
+a3
+2,0
+a3
+3,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+4,0
+4,a3
+5,0
+a3
+6,0
+3,a3
+3,0
+a3
+5,0
+a3
+5,0
+a3
+0
+a3
+2,0
+4,a3
+24,0
+a3
+0
+a3
+5,0
+a3
+0
+a3
+3,0
+2,a3
+8,0
+a3
+2,0
+b,a3
+5,0
+a3
+4,0
+a3
+7,0
+a3
+2,0
+a3
+3,0
+2,a3
+23,0
+a3
+9,0
+a3
+3,0
+a3
+9,0
+a3
+5,0
+a3
+6,0
+a3
+5,0
+a3
+4,0
+a3
+7,0
+a3
+2,0
+a3
+3,0
+a3
+0
+a3
+22,0
+b,a3
+3,0
+b,a3
+5,0
+a3
+6,0
+a3
+5,0
+a3
+3,0
+a3
+8,0
+a3
+3,0
+3,a3
+25,0
+a3
+9,0
+a3
+3,0
+a3
+9,0
+a3
+5,0
+a3
+6,0
+a3
+5,0
+a3
+2,0
+a3
+1b7b,0
+100 90 32
+261,0
+2,ff
+18,0
+ff
+3,0
+ff
+8,0
+ff
+5,0
+ff
+7,0
+ff
+11,0
+ff
+3,0
+ff
+17,0
+2,ff
+8,0
+b,ff
+6,0
+ff
+3,0
+ff
+8,0
+ff
+5,0
+ff
+7,0
+ff
+0
+7,ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+15,0
+ff
+a,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+d,ff
+0
+7,ff
+0
+ff
+0
+ff
+6,0
+ff
+4,0
+ff
+2,0
+ff
+3,0
+ff
+6,0
+ff
+0
+ff
+22,0
+ff
+4,0
+ff
+4,0
+ff
+6,0
+ff
+3,0
+ff
+8,0
+ff
+3,0
+ff
+3,0
+ff
+4,0
+ff
+5,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+21,0
+ff
+4,0
+ff
+4,0
+ff
+2,0
+d,ff
+2,0
+6,ff
+0
+ff
+0
+ff
+0
+ff
+3,0
+ff
+0
+9,ff
+2,0
+ff
+2,0
+5,ff
+24,0
+b,ff
+6,0
+ff
+2,0
+ff
+7,0
+ff
+3,0
+ff
+3,0
+2,ff
+4,0
+2,ff
+5,0
+ff
+2,0
+ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+4,0
+ff
+4,0
+ff
+3,0
+b,ff
+3,0
+5,ff
+0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+5,0
+ff
+2,0
+ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+3,0
+2,ff
+4,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+3,0
+ff
+3,0
+ff
+3,0
+ff
+2,0
+ff
+0
+ff
+5,0
+ff
+2,0
+7,ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+3,0
+ff
+0
+ff
+3,0
+ff
+3,0
+ff
+2,0
+ff
+2,0
+ff
+2,0
+2,ff
+3,0
+5,ff
+2,0
+ff
+0
+ff
+5,0
+ff
+5,0
+ff
+2,0
+ff
+2,0
+ff
+7,0
+ff
+24,0
+ff
+2,0
+ff
+3,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+4,0
+4,ff
+5,0
+ff
+6,0
+3,ff
+3,0
+ff
+5,0
+ff
+5,0
+ff
+0
+ff
+2,0
+4,ff
+24,0
+ff
+0
+ff
+5,0
+ff
+0
+ff
+3,0
+2,ff
+8,0
+ff
+2,0
+b,ff
+5,0
+ff
+4,0
+ff
+7,0
+ff
+2,0
+ff
+3,0
+2,ff
+23,0
+ff
+9,0
+ff
+3,0
+ff
+9,0
+ff
+5,0
+ff
+6,0
+ff
+5,0
+ff
+4,0
+ff
+7,0
+ff
+2,0
+ff
+3,0
+ff
+0
+ff
+22,0
+b,ff
+3,0
+b,ff
+5,0
+ff
+6,0
+ff
+5,0
+ff
+3,0
+ff
+8,0
+ff
+3,0
+3,ff
+25,0
+ff
+9,0
+ff
+3,0
+ff
+9,0
+ff
+5,0
+ff
+6,0
+ff
+5,0
+ff
+2,0
+ff
+1b7b,0
+100 90 32
+261,0
+2,100
+18,0
+100
+3,0
+100
+8,0
+100
+5,0
+100
+7,0
+100
+11,0
+100
+3,0
+100
+17,0
+2,100
+8,0
+b,100
+6,0
+100
+3,0
+100
+8,0
+100
+5,0
+100
+7,0
+100
+0
+7,100
+2,0
+100
+7,0
+100
+3,0
+100
+15,0
+100
+a,0
+100
+4,0
+100
+4,0
+100
+2,0
+d,100
+0
+7,100
+0
+100
+0
+100
+6,0
+100
+4,0
+100
+2,0
+100
+3,0
+100
+6,0
+100
+0
+100
+22,0
+100
+4,0
+100
+4,0
+100
+6,0
+100
+3,0
+100
+8,0
+100
+3,0
+100
+3,0
+100
+4,0
+100
+5,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+21,0
+100
+4,0
+100
+4,0
+100
+2,0
+d,100
+2,0
+6,100
+0
+100
+0
+100
+0
+100
+3,0
+100
+0
+9,100
+2,0
+100
+2,0
+5,100
+24,0
+b,100
+6,0
+100
+2,0
+100
+7,0
+100
+3,0
+100
+3,0
+2,100
+4,0
+2,100
+5,0
+100
+2,0
+100
+2,0
+100
+7,0
+100
+24,0
+100
+4,0
+100
+4,0
+100
+3,0
+b,100
+3,0
+5,100
+0
+100
+2,0
+100
+3,0
+100
+0
+100
+5,0
+100
+2,0
+100
+2,0
+100
+7,0
+100
+24,0
+100
+3,0
+2,100
+4,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+3,0
+100
+3,0
+100
+3,0
+100
+2,0
+100
+0
+100
+5,0
+100
+2,0
+7,100
+2,0
+100
+7,0
+100
+24,0
+100
+3,0
+100
+0
+100
+3,0
+100
+3,0
+100
+2,0
+100
+2,0
+100
+2,0
+2,100
+3,0
+5,100
+2,0
+100
+0
+100
+5,0
+100
+5,0
+100
+2,0
+100
+2,0
+100
+7,0
+100
+24,0
+100
+2,0
+100
+3,0
+100
+2,0
+100
+3,0
+100
+0
+100
+4,0
+4,100
+5,0
+100
+6,0
+3,100
+3,0
+100
+5,0
+100
+5,0
+100
+0
+100
+2,0
+4,100
+24,0
+100
+0
+100
+5,0
+100
+0
+100
+3,0
+2,100
+8,0
+100
+2,0
+b,100
+5,0
+100
+4,0
+100
+7,0
+100
+2,0
+100
+3,0
+2,100
+23,0
+100
+9,0
+100
+3,0
+100
+9,0
+100
+5,0
+100
+6,0
+100
+5,0
+100
+4,0
+100
+7,0
+100
+2,0
+100
+3,0
+100
+0
+100
+22,0
+b,100
+3,0
+b,100
+5,0
+100
+6,0
+100
+5,0
+100
+3,0
+100
+8,0
+100
+3,0
+3,100
+25,0
+100
+9,0
+100
+3,0
+100
+9,0
+100
+5,0
+100
+6,0
+100
+5,0
+100
+2,0
+100
+1b7b,0
+100 90 32
+261,0
+2,12c
+18,0
+12c
+3,0
+12c
+8,0
+12c
+5,0
+12c
+7,0
+12c
+11,0
+12c
+3,0
+12c
+17,0
+2,12c
+8,0
+b,12c
+6,0
+12c
+3,0
+12c
+8,0
+12c
+5,0
+12c
+7,0
+12c
+0
+7,12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+15,0
+12c
+a,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+d,12c
+0
+7,12c
+0
+12c
+0
+12c
+6,0
+12c
+4,0
+12c
+2,0
+12c
+3,0
+12c
+6,0
+12c
+0
+12c
+22,0
+12c
+4,0
+12c
+4,0
+12c
+6,0
+12c
+3,0
+12c
+8,0
+12c
+3,0
+12c
+3,0
+12c
+4,0
+12c
+5,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+21,0
+12c
+4,0
+12c
+4,0
+12c
+2,0
+d,12c
+2,0
+6,12c
+0
+12c
+0
+12c
+0
+12c
+3,0
+12c
+0
+9,12c
+2,0
+12c
+2,0
+5,12c
+24,0
+b,12c
+6,0
+12c
+2,0
+12c
+7,0
+12c
+3,0
+12c
+3,0
+2,12c
+4,0
+2,12c
+5,0
+12c
+2,0
+12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+4,0
+12c
+4,0
+12c
+3,0
+b,12c
+3,0
+5,12c
+0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+5,0
+12c
+2,0
+12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+3,0
+2,12c
+4,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+3,0
+12c
+3,0
+12c
+3,0
+12c
+2,0
+12c
+0
+12c
+5,0
+12c
+2,0
+7,12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+3,0
+12c
+0
+12c
+3,0
+12c
+3,0
+12c
+2,0
+12c
+2,0
+12c
+2,0
+2,12c
+3,0
+5,12c
+2,0
+12c
+0
+12c
+5,0
+12c
+5,0
+12c
+2,0
+12c
+2,0
+12c
+7,0
+12c
+24,0
+12c
+2,0
+12c
+3,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+4,0
+4,12c
+5,0
+12c
+6,0
+3,12c
+3,0
+12c
+5,0
+12c
+5,0
+12c
+0
+12c
+2,0
+4,12c
+24,0
+12c
+0
+12c
+5,0
+12c
+0
+12c
+3,0
+2,12c
+8,0
+12c
+2,0
+b,12c
+5,0
+12c
+4,0
+12c
+7,0
+12c
+2,0
+12c
+3,0
+2,12c
+23,0
+12c
+9,0
+12c
+3,0
+12c
+9,0
+12c
+5,0
+12c
+6,0
+12c
+5,0
+12c
+4,0
+12c
+7,0
+12c
+2,0
+12c
+3,0
+12c
+0
+12c
+22,0
+b,12c
+3,0
+b,12c
+5,0
+12c
+6,0
+12c
+5,0
+12c
+3,0
+12c
+8,0
+12c
+3,0
+3,12c
+25,0
+12c
+9,0
+12c
+3,0
+12c
+9,0
+12c
+5,0
+12c
+6,0
+12c
+5,0
+12c
+2,0
+12c
+1b7b,0
+100 90 32
+261,0
+2,3e8
+18,0
+3e8
+3,0
+3e8
+8,0
+3e8
+5,0
+3e8
+7,0
+3e8
+11,0
+3e8
+3,0
+3e8
+17,0
+2,3e8
+8,0
+b,3e8
+6,0
+3e8
+3,0
+3e8
+8,0
+3e8
+5,0
+3e8
+7,0
+3e8
+0
+7,3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+15,0
+3e8
+a,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+d,3e8
+0
+7,3e8
+0
+3e8
+0
+3e8
+6,0
+3e8
+4,0
+3e8
+2,0
+3e8
+3,0
+3e8
+6,0
+3e8
+0
+3e8
+22,0
+3e8
+4,0
+3e8
+4,0
+3e8
+6,0
+3e8
+3,0
+3e8
+8,0
+3e8
+3,0
+3e8
+3,0
+3e8
+4,0
+3e8
+5,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+21,0
+3e8
+4,0
+3e8
+4,0
+3e8
+2,0
+d,3e8
+2,0
+6,3e8
+0
+3e8
+0
+3e8
+0
+3e8
+3,0
+3e8
+0
+9,3e8
+2,0
+3e8
+2,0
+5,3e8
+24,0
+b,3e8
+6,0
+3e8
+2,0
+3e8
+7,0
+3e8
+3,0
+3e8
+3,0
+2,3e8
+4,0
+2,3e8
+5,0
+3e8
+2,0
+3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+4,0
+3e8
+4,0
+3e8
+3,0
+b,3e8
+3,0
+5,3e8
+0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+5,0
+3e8
+2,0
+3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+3,0
+2,3e8
+4,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+3,0
+3e8
+3,0
+3e8
+3,0
+3e8
+2,0
+3e8
+0
+3e8
+5,0
+3e8
+2,0
+7,3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+3,0
+3e8
+0
+3e8
+3,0
+3e8
+3,0
+3e8
+2,0
+3e8
+2,0
+3e8
+2,0
+2,3e8
+3,0
+5,3e8
+2,0
+3e8
+0
+3e8
+5,0
+3e8
+5,0
+3e8
+2,0
+3e8
+2,0
+3e8
+7,0
+3e8
+24,0
+3e8
+2,0
+3e8
+3,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+4,0
+4,3e8
+5,0
+3e8
+6,0
+3,3e8
+3,0
+3e8
+5,0
+3e8
+5,0
+3e8
+0
+3e8
+2,0
+4,3e8
+24,0
+3e8
+0
+3e8
+5,0
+3e8
+0
+3e8
+3,0
+2,3e8
+8,0
+3e8
+2,0
+b,3e8
+5,0
+3e8
+4,0
+3e8
+7,0
+3e8
+2,0
+3e8
+3,0
+2,3e8
+23,0
+3e8
+9,0
+3e8
+3,0
+3e8
+9,0
+3e8
+5,0
+3e8
+6,0
+3e8
+5,0
+3e8
+4,0
+3e8
+7,0
+3e8
+2,0
+3e8
+3,0
+3e8
+0
+3e8
+22,0
+b,3e8
+3,0
+b,3e8
+5,0
+3e8
+6,0
+3e8
+5,0
+3e8
+3,0
+3e8
+8,0
+3e8
+3,0
+3,3e8
+25,0
+3e8
+9,0
+3e8
+3,0
+3e8
+9,0
+3e8
+5,0
+3e8
+6,0
+3e8
+5,0
+3e8
+2,0
+3e8
+1b7b,0
+100 90 32
+261,0
+2,111111
+18,0
+111111
+3,0
+111111
+8,0
+111111
+5,0
+111111
+7,0
+111111
+11,0
+111111
+3,0
+111111
+17,0
+2,111111
+8,0
+b,111111
+6,0
+111111
+3,0
+111111
+8,0
+111111
+5,0
+111111
+7,0
+111111
+0
+7,111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+15,0
+111111
+a,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+d,111111
+0
+7,111111
+0
+111111
+0
+111111
+6,0
+111111
+4,0
+111111
+2,0
+111111
+3,0
+111111
+6,0
+111111
+0
+111111
+22,0
+111111
+4,0
+111111
+4,0
+111111
+6,0
+111111
+3,0
+111111
+8,0
+111111
+3,0
+111111
+3,0
+111111
+4,0
+111111
+5,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+21,0
+111111
+4,0
+111111
+4,0
+111111
+2,0
+d,111111
+2,0
+6,111111
+0
+111111
+0
+111111
+0
+111111
+3,0
+111111
+0
+9,111111
+2,0
+111111
+2,0
+5,111111
+24,0
+b,111111
+6,0
+111111
+2,0
+111111
+7,0
+111111
+3,0
+111111
+3,0
+2,111111
+4,0
+2,111111
+5,0
+111111
+2,0
+111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+4,0
+111111
+4,0
+111111
+3,0
+b,111111
+3,0
+5,111111
+0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+5,0
+111111
+2,0
+111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+3,0
+2,111111
+4,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+3,0
+111111
+3,0
+111111
+3,0
+111111
+2,0
+111111
+0
+111111
+5,0
+111111
+2,0
+7,111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+3,0
+111111
+0
+111111
+3,0
+111111
+3,0
+111111
+2,0
+111111
+2,0
+111111
+2,0
+2,111111
+3,0
+5,111111
+2,0
+111111
+0
+111111
+5,0
+111111
+5,0
+111111
+2,0
+111111
+2,0
+111111
+7,0
+111111
+24,0
+111111
+2,0
+111111
+3,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+4,0
+4,111111
+5,0
+111111
+6,0
+3,111111
+3,0
+111111
+5,0
+111111
+5,0
+111111
+0
+111111
+2,0
+4,111111
+24,0
+111111
+0
+111111
+5,0
+111111
+0
+111111
+3,0
+2,111111
+8,0
+111111
+2,0
+b,111111
+5,0
+111111
+4,0
+111111
+7,0
+111111
+2,0
+111111
+3,0
+2,111111
+23,0
+111111
+9,0
+111111
+3,0
+111111
+9,0
+111111
+5,0
+111111
+6,0
+111111
+5,0
+111111
+4,0
+111111
+7,0
+111111
+2,0
+111111
+3,0
+111111
+0
+111111
+22,0
+b,111111
+3,0
+b,111111
+5,0
+111111
+6,0
+111111
+5,0
+111111
+3,0
+111111
+8,0
+111111
+3,0
+3,111111
+25,0
+111111
+9,0
+111111
+3,0
+111111
+9,0
+111111
+5,0
+111111
+6,0
+111111
+5,0
+111111
+2,0
+111111
+1b7b,0
+100 90 32
+261,0
+2,400200
+18,0
+400200
+3,0
+400200
+8,0
+400200
+5,0
+400200
+7,0
+400200
+11,0
+400200
+3,0
+400200
+17,0
+2,400200
+8,0
+b,400200
+6,0
+400200
+3,0
+400200
+8,0
+400200
+5,0
+400200
+7,0
+400200
+0
+7,400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+15,0
+400200
+a,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+d,400200
+0
+7,400200
+0
+400200
+0
+400200
+6,0
+400200
+4,0
+400200
+2,0
+400200
+3,0
+400200
+6,0
+400200
+0
+400200
+22,0
+400200
+4,0
+400200
+4,0
+400200
+6,0
+400200
+3,0
+400200
+8,0
+400200
+3,0
+400200
+3,0
+400200
+4,0
+400200
+5,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+21,0
+400200
+4,0
+400200
+4,0
+400200
+2,0
+d,400200
+2,0
+6,400200
+0
+400200
+0
+400200
+0
+400200
+3,0
+400200
+0
+9,400200
+2,0
+400200
+2,0
+5,400200
+24,0
+b,400200
+6,0
+400200
+2,0
+400200
+7,0
+400200
+3,0
+400200
+3,0
+2,400200
+4,0
+2,400200
+5,0
+400200
+2,0
+400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+4,0
+400200
+4,0
+400200
+3,0
+b,400200
+3,0
+5,400200
+0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+5,0
+400200
+2,0
+400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+3,0
+2,400200
+4,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+3,0
+400200
+3,0
+400200
+3,0
+400200
+2,0
+400200
+0
+400200
+5,0
+400200
+2,0
+7,400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+3,0
+400200
+0
+400200
+3,0
+400200
+3,0
+400200
+2,0
+400200
+2,0
+400200
+2,0
+2,400200
+3,0
+5,400200
+2,0
+400200
+0
+400200
+5,0
+400200
+5,0
+400200
+2,0
+400200
+2,0
+400200
+7,0
+400200
+24,0
+400200
+2,0
+400200
+3,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+4,0
+4,400200
+5,0
+400200
+6,0
+3,400200
+3,0
+400200
+5,0
+400200
+5,0
+400200
+0
+400200
+2,0
+4,400200
+24,0
+400200
+0
+400200
+5,0
+400200
+0
+400200
+3,0
+2,400200
+8,0
+400200
+2,0
+b,400200
+5,0
+400200
+4,0
+400200
+7,0
+400200
+2,0
+400200
+3,0
+2,400200
+23,0
+400200
+9,0
+400200
+3,0
+400200
+9,0
+400200
+5,0
+400200
+6,0
+400200
+5,0
+400200
+4,0
+400200
+7,0
+400200
+2,0
+400200
+3,0
+400200
+0
+400200
+22,0
+b,400200
+3,0
+b,400200
+5,0
+400200
+6,0
+400200
+5,0
+400200
+3,0
+400200
+8,0
+400200
+3,0
+3,400200
+25,0
+400200
+9,0
+400200
+3,0
+400200
+9,0
+400200
+5,0
+400200
+6,0
+400200
+5,0
+400200
+2,0
+400200
+1b7b,0
+100 90 32
+261,0
+2,777777
+18,0
+777777
+3,0
+777777
+8,0
+777777
+5,0
+777777
+7,0
+777777
+11,0
+777777
+3,0
+777777
+17,0
+2,777777
+8,0
+b,777777
+6,0
+777777
+3,0
+777777
+8,0
+777777
+5,0
+777777
+7,0
+777777
+0
+7,777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+15,0
+777777
+a,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+d,777777
+0
+7,777777
+0
+777777
+0
+777777
+6,0
+777777
+4,0
+777777
+2,0
+777777
+3,0
+777777
+6,0
+777777
+0
+777777
+22,0
+777777
+4,0
+777777
+4,0
+777777
+6,0
+777777
+3,0
+777777
+8,0
+777777
+3,0
+777777
+3,0
+777777
+4,0
+777777
+5,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+21,0
+777777
+4,0
+777777
+4,0
+777777
+2,0
+d,777777
+2,0
+6,777777
+0
+777777
+0
+777777
+0
+777777
+3,0
+777777
+0
+9,777777
+2,0
+777777
+2,0
+5,777777
+24,0
+b,777777
+6,0
+777777
+2,0
+777777
+7,0
+777777
+3,0
+777777
+3,0
+2,777777
+4,0
+2,777777
+5,0
+777777
+2,0
+777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+4,0
+777777
+4,0
+777777
+3,0
+b,777777
+3,0
+5,777777
+0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+5,0
+777777
+2,0
+777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+3,0
+2,777777
+4,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+3,0
+777777
+3,0
+777777
+3,0
+777777
+2,0
+777777
+0
+777777
+5,0
+777777
+2,0
+7,777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+3,0
+777777
+0
+777777
+3,0
+777777
+3,0
+777777
+2,0
+777777
+2,0
+777777
+2,0
+2,777777
+3,0
+5,777777
+2,0
+777777
+0
+777777
+5,0
+777777
+5,0
+777777
+2,0
+777777
+2,0
+777777
+7,0
+777777
+24,0
+777777
+2,0
+777777
+3,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+4,0
+4,777777
+5,0
+777777
+6,0
+3,777777
+3,0
+777777
+5,0
+777777
+5,0
+777777
+0
+777777
+2,0
+4,777777
+24,0
+777777
+0
+777777
+5,0
+777777
+0
+777777
+3,0
+2,777777
+8,0
+777777
+2,0
+b,777777
+5,0
+777777
+4,0
+777777
+7,0
+777777
+2,0
+777777
+3,0
+2,777777
+23,0
+777777
+9,0
+777777
+3,0
+777777
+9,0
+777777
+5,0
+777777
+6,0
+777777
+5,0
+777777
+4,0
+777777
+7,0
+777777
+2,0
+777777
+3,0
+777777
+0
+777777
+22,0
+b,777777
+3,0
+b,777777
+5,0
+777777
+6,0
+777777
+5,0
+777777
+3,0
+777777
+8,0
+777777
+3,0
+3,777777
+25,0
+777777
+9,0
+777777
+3,0
+777777
+9,0
+777777
+5,0
+777777
+6,0
+777777
+5,0
+777777
+2,0
+777777
+1b7b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a43.dat b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a43.dat
new file mode 100644
index 000000000..94262b1d9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/a43.dat
@@ -0,0 +1,2703 @@
+! $XConsortium$
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+16,0
+1
+15,0
+1
+17,0
+2,1
+b,0
+8,1
+6,0
+1
+c,0
+1
+5,0
+1
+7,0
+1
+6,0
+2,1
+2,0
+1
+7,0
+1
+3,0
+1
+20,0
+1
+4,0
+1
+9,0
+4,1
+2,0
+5,1
+0
+6,1
+10,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+0
+1
+22,0
+1
+9,0
+1
+6,0
+1
+3,0
+1
+c,0
+1
+3,0
+1
+4,0
+1
+5,0
+1
+8,0
+1
+4,0
+3,1
+27,0
+1
+4,0
+1
+4,0
+9,1
+4,0
+6,1
+5,0
+1
+3,0
+1
+0
+3,1
+3,0
+3,1
+2,0
+1
+6,0
+1
+24,0
+6,1
+e,0
+1
+7,0
+1
+7,0
+2,1
+4,0
+2,1
+5,0
+1
+2,0
+1
+2f,0
+1
+9,0
+1
+b,0
+3,1
+5,0
+3,1
+0
+1
+e,0
+1
+5,0
+1
+30,0
+2,1
+8,0
+1
+5,0
+1
+7,0
+1
+8,0
+1
+d,0
+2,1
+2,0
+1
+2c,0
+1
+9,0
+1
+c,0
+2,1
+7,0
+1
+2,0
+1
+d,0
+1
+32,0
+1
+2,0
+1
+a,0
+1
+0
+1
+5,0
+3,1
+5,0
+1
+6,0
+2,1
+a,0
+1
+a,0
+3,1
+25,0
+1
+0
+1
+5,0
+1
+0
+1
+d,0
+1
+2,0
+8,1
+d,0
+1
+7,0
+1
+2b,0
+1
+17,0
+1
+12,0
+1
+4,0
+1
+e,0
+1
+0
+1
+25,0
+8,1
+3,0
+7,1
+9,0
+1
+6,0
+1
+5,0
+1
+c,0
+1
+3,0
+3,1
+25,0
+1
+17,0
+1
+5,0
+1
+f,0
+1
+1b7b,0
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+e,0
+1
+7,0
+1
+11,0
+1
+3,0
+1
+21,0
+1
+3,0
+7,1
+6,0
+1
+3,0
+1
+8,0
+1
+d,0
+1
+0
+3,1
+3,0
+1
+2,0
+1
+b,0
+1
+15,0
+1
+f,0
+1
+7,0
+3,1
+3,0
+4,1
+2,0
+1
+0
+4,1
+6,0
+1
+6,0
+1
+4,0
+1
+2,0
+1
+a,0
+1
+24,0
+1
+9,0
+1
+17,0
+1
+e,0
+1
+6,0
+1
+0
+1
+2e,0
+1
+7,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+0
+1
+3,0
+1
+0
+1
+6,0
+2,1
+2,0
+1
+4,0
+3,1
+24,0
+3,1
+6,0
+2,1
+19,0
+1
+c,0
+1
+32,0
+1
+4,0
+1
+8,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+3,0
+4,1
+5,0
+1
+3,0
+1
+0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+2,1
+4,0
+1
+d,0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+b,0
+6,1
+2,0
+1
+2c,0
+1
+10,0
+1
+2,0
+1
+2,0
+2,1
+12,0
+1
+5,0
+1
+39,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+1
+8,0
+1
+6,0
+3,1
+3,0
+1
+b,0
+1
+0
+1
+2,0
+4,1
+24,0
+1
+0
+1
+5,0
+1
+f,0
+1
+2,0
+7,1
+9,0
+1
+4,0
+1
+7,0
+1
+7,0
+1
+23,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+c,0
+1
+a,0
+1
+a,0
+1
+3,0
+1
+0
+1
+22,0
+1
+3,0
+7,1
+5,0
+9,1
+5,0
+1
+c,0
+1
+3,0
+1
+8,0
+1
+39,0
+1
+f,0
+1
+6,0
+1
+5,0
+1
+2,0
+1
+1b7b,0
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+e,0
+1
+7,0
+1
+11,0
+1
+3,0
+1
+17,0
+1
+c,0
+8,1
+13,0
+1
+5,0
+1
+e,0
+2,1
+2,0
+1
+2c,0
+1
+4,0
+1
+9,0
+b,1
+0
+6,1
+b,0
+1
+4,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+0
+1
+27,0
+1
+4,0
+1
+6,0
+1
+c,0
+1
+3,0
+1
+3,0
+1
+4,0
+1
+8,0
+1
+5,0
+1
+4,0
+4,1
+21,0
+1
+4,0
+1
+4,0
+1
+2,0
+2,1
+6,0
+5,1
+2,0
+2,1
+0
+3,1
+0
+1
+0
+1
+7,0
+9,1
+2,0
+1
+2,0
+4,1
+28,0
+8,1
+6,0
+1
+2,0
+1
+7,0
+1
+3,0
+1
+9,0
+2,1
+8,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+d,0
+4,1
+5,0
+2,1
+5,0
+3,1
+4,0
+1
+3,0
+1
+7,0
+1
+5,0
+1
+7,0
+1
+2e,0
+1
+3,0
+1
+5,0
+1
+e,0
+1
+0
+1
+5,0
+1
+2,0
+2,1
+34,0
+1
+3,0
+1
+0
+1
+a,0
+1
+6,0
+1
+3,0
+1
+0
+1
+0
+1
+a,0
+1
+5,0
+1
+2,0
+1
+a,0
+1
+2e,0
+1
+a,0
+3,1
+d,0
+1
+16,0
+2,1
+26,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+2,1
+8,0
+1
+3,0
+1
+0
+1
+0
+1
+0
+4,1
+a,0
+1
+7,0
+1
+2,0
+1
+3,0
+2,1
+2d,0
+1
+3,0
+1
+16,0
+1
+5,0
+1
+f,0
+1
+3,0
+1
+0
+1
+25,0
+8,1
+3,0
+1
+f,0
+1
+6,0
+1
+12,0
+1
+3,0
+3,1
+25,0
+1
+17,0
+1
+5,0
+1
+c,0
+1
+2,0
+1
+1b7b,0
+100 90 32
+262,0
+1
+18,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+2d,0
+2,1
+8,0
+3,1
+0
+1
+0
+5,1
+6,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+0
+6,1
+3,0
+1
+7,0
+1
+3,0
+1
+15,0
+1
+a,0
+1
+c,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+4,0
+1
+6,0
+1
+4,0
+1
+6,0
+1
+6,0
+1
+0
+1
+22,0
+1
+1d,0
+1
+3,0
+1
+3,0
+1
+a,0
+1
+6,0
+1
+0
+1
+4,0
+1
+0
+1
+27,0
+1
+8,0
+1
+0
+1
+5,0
+1
+0
+1
+6,0
+1
+0
+1
+0
+1
+7,0
+1
+0
+1
+4,0
+1
+0
+1
+7,0
+1
+0
+1
+25,0
+3,1
+2,0
+1
+0
+1
+9,0
+1
+2,0
+1
+f,0
+2,1
+5,0
+1
+8,0
+1
+2,0
+1
+2c,0
+1
+e,0
+9,1
+8,0
+1
+0
+1
+2,0
+1
+3,0
+1
+d,0
+1
+7,0
+1
+24,0
+1
+4,0
+1
+8,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+7,0
+1
+4,0
+1
+5,0
+1
+7,0
+2,1
+2,0
+1
+7,0
+1
+28,0
+1
+5,0
+1
+c,0
+1
+4,0
+3,1
+4,0
+1
+d,0
+1
+32,0
+1
+14,0
+1
+f,0
+3,1
+f,0
+1
+0
+1
+2c,0
+1
+5,0
+1
+0
+1
+3,0
+2,1
+8,0
+1
+2,0
+a,1
+6,0
+1
+4,0
+1
+a,0
+1
+3,0
+2,1
+23,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+1
+0
+1
+22,0
+3,1
+e,0
+5,1
+f,0
+1
+12,0
+1
+35,0
+1
+13,0
+1
+f,0
+1
+1b7b,0
+100 90 32
+261,0
+1
+19,0
+1
+3,0
+1
+e,0
+1
+1d,0
+1
+25,0
+5,1
+23,0
+1
+0
+1
+10,0
+1
+19,0
+1
+a,0
+1
+9,0
+1
+2,0
+b,1
+3,0
+7,1
+0
+1
+0
+1
+b,0
+1
+2,0
+1
+3,0
+1
+8,0
+1
+22,0
+1
+4,0
+1
+4,0
+1
+6,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+4,0
+1
+5,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+26,0
+1
+11,0
+3,1
+11,0
+1
+0
+2,1
+e,0
+3,1
+26,0
+2,1
+5,0
+2,1
+6,0
+1
+a,0
+1
+3,0
+1
+3,0
+2,1
+e,0
+1
+2,0
+1
+2c,0
+1
+4,0
+1
+8,0
+4,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+8,0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+2,1
+4,0
+1
+d,0
+1
+3,0
+1
+e,0
+1
+2,0
+3,1
+0
+1
+c,0
+1
+28,0
+1
+0
+1
+d,0
+1
+2,0
+2,1
+5,0
+1
+0
+1
+4,0
+1
+5,0
+1
+5,0
+1
+d,0
+1
+27,0
+1
+12,0
+1
+7,0
+1
+6,0
+1
+0
+1
+9,0
+1
+a,0
+1
+27,0
+1
+0
+1
+7,0
+1
+3,0
+1
+9,0
+1
+4,0
+1
+0
+1
+0
+1
+2,0
+1
+6,0
+1
+4,0
+1
+a,0
+1
+3,0
+2,1
+23,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+12,0
+1
+4,0
+1
+a,0
+1
+3,0
+1
+0
+1
+22,0
+1
+0
+1
+0
+5,1
+0
+1
+3,0
+6,1
+0
+1
+0
+2,1
+c,0
+1
+5,0
+1
+c,0
+1
+4,0
+2,1
+25,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+12,0
+1
+2,0
+1
+1b7b,0
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+19,0
+1
+3,0
+1
+17,0
+2,1
+8,0
+b,1
+6,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+0
+7,1
+2,0
+1
+7,0
+1
+3,0
+1
+15,0
+1
+f,0
+1
+12,0
+2,1
+0
+2,1
+f,0
+1
+12,0
+1
+0
+1
+22,0
+1
+9,0
+1
+6,0
+1
+c,0
+1
+3,0
+1
+3,0
+1
+a,0
+1
+2,0
+1
+3,0
+1
+30,0
+1
+7,0
+1
+0
+4,1
+0
+2,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+0
+1
+0
+1
+3,0
+1
+0
+3,1
+2,0
+2,1
+0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+25,0
+1
+0
+8,1
+9,0
+1
+7,0
+1
+3,0
+1
+9,0
+2,1
+5,0
+1
+d,0
+1
+24,0
+1
+4,0
+1
+8,0
+1
+4,0
+1
+0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+b,0
+1
+8,0
+1
+a,0
+1
+24,0
+1
+3,0
+1
+5,0
+1
+3,0
+1
+21,0
+1
+0
+1
+0
+1
+35,0
+1
+d,0
+1
+9,0
+1
+0
+1
+4,0
+1
+b,0
+1
+d,0
+1
+27,0
+1
+3,0
+1
+e,0
+1
+0
+1
+5,0
+1
+6,0
+1
+0
+1
+3,0
+1
+5,0
+1
+a,0
+1
+0
+2,1
+24,0
+1
+7,0
+1
+5,0
+2,1
+8,0
+1
+2,0
+2,1
+0
+1
+0
+6,1
+5,0
+1
+c,0
+1
+6,0
+2,1
+3b,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+c,0
+1
+6,0
+1
+0
+1
+23,0
+1
+0
+1
+2,0
+3,1
+6,0
+1
+2,0
+1
+0
+1
+0
+1
+7,0
+1
+6,0
+1
+12,0
+1
+3,0
+1
+27,0
+1
+9,0
+1
+3,0
+1
+1b9b,0
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+e,0
+1
+7,0
+1
+11,0
+1
+3,0
+1
+21,0
+1
+3,0
+7,1
+6,0
+1
+3,0
+1
+8,0
+1
+d,0
+1
+0
+3,1
+3,0
+1
+2,0
+1
+b,0
+1
+15,0
+1
+f,0
+1
+7,0
+3,1
+3,0
+4,1
+2,0
+1
+0
+4,1
+6,0
+1
+6,0
+1
+4,0
+1
+2,0
+1
+a,0
+1
+24,0
+1
+9,0
+1
+17,0
+1
+e,0
+1
+6,0
+1
+0
+1
+2e,0
+1
+7,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+0
+1
+3,0
+1
+0
+1
+6,0
+2,1
+2,0
+1
+4,0
+3,1
+24,0
+3,1
+6,0
+2,1
+19,0
+1
+c,0
+1
+32,0
+1
+4,0
+1
+8,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+3,0
+4,1
+5,0
+1
+3,0
+1
+0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+2,1
+4,0
+1
+d,0
+1
+3,0
+1
+3,0
+1
+2,0
+1
+b,0
+6,1
+2,0
+1
+2c,0
+1
+10,0
+1
+2,0
+1
+2,0
+2,1
+12,0
+1
+5,0
+1
+39,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+1
+8,0
+1
+6,0
+3,1
+3,0
+1
+b,0
+1
+0
+1
+2,0
+4,1
+24,0
+1
+0
+1
+5,0
+1
+f,0
+1
+2,0
+7,1
+9,0
+1
+4,0
+1
+7,0
+1
+7,0
+1
+23,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+c,0
+1
+a,0
+1
+a,0
+1
+3,0
+1
+0
+1
+22,0
+1
+3,0
+7,1
+5,0
+9,1
+5,0
+1
+c,0
+1
+3,0
+1
+8,0
+1
+39,0
+1
+f,0
+1
+6,0
+1
+5,0
+1
+2,0
+1
+1b7b,0
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+e,0
+1
+7,0
+1
+11,0
+1
+3,0
+1
+17,0
+1
+c,0
+8,1
+13,0
+1
+5,0
+1
+e,0
+2,1
+2,0
+1
+2c,0
+1
+4,0
+1
+9,0
+b,1
+0
+6,1
+b,0
+1
+4,0
+1
+2,0
+1
+3,0
+1
+6,0
+1
+0
+1
+27,0
+1
+4,0
+1
+6,0
+1
+c,0
+1
+3,0
+1
+3,0
+1
+4,0
+1
+8,0
+1
+5,0
+1
+4,0
+4,1
+21,0
+1
+4,0
+1
+4,0
+1
+2,0
+2,1
+6,0
+5,1
+2,0
+2,1
+0
+3,1
+0
+1
+0
+1
+7,0
+9,1
+2,0
+1
+2,0
+4,1
+28,0
+8,1
+6,0
+1
+2,0
+1
+7,0
+1
+3,0
+1
+9,0
+2,1
+8,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+d,0
+4,1
+5,0
+2,1
+5,0
+3,1
+4,0
+1
+3,0
+1
+7,0
+1
+5,0
+1
+7,0
+1
+2e,0
+1
+3,0
+1
+5,0
+1
+e,0
+1
+0
+1
+5,0
+1
+2,0
+2,1
+34,0
+1
+3,0
+1
+0
+1
+a,0
+1
+6,0
+1
+3,0
+1
+0
+1
+0
+1
+a,0
+1
+5,0
+1
+2,0
+1
+a,0
+1
+2e,0
+1
+a,0
+3,1
+d,0
+1
+16,0
+2,1
+26,0
+1
+0
+1
+5,0
+1
+0
+1
+3,0
+2,1
+8,0
+1
+3,0
+1
+0
+1
+0
+1
+0
+4,1
+a,0
+1
+7,0
+1
+2,0
+1
+3,0
+2,1
+2d,0
+1
+3,0
+1
+16,0
+1
+5,0
+1
+f,0
+1
+3,0
+1
+0
+1
+25,0
+8,1
+3,0
+1
+f,0
+1
+6,0
+1
+12,0
+1
+3,0
+3,1
+25,0
+1
+17,0
+1
+5,0
+1
+c,0
+1
+2,0
+1
+1b7b,0
+100 90 32
+262,0
+1
+18,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+2d,0
+2,1
+8,0
+3,1
+0
+1
+0
+5,1
+6,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+0
+6,1
+3,0
+1
+7,0
+1
+3,0
+1
+15,0
+1
+a,0
+1
+c,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+4,0
+1
+6,0
+1
+4,0
+1
+6,0
+1
+6,0
+1
+0
+1
+22,0
+1
+1d,0
+1
+3,0
+1
+3,0
+1
+a,0
+1
+6,0
+1
+0
+1
+4,0
+1
+0
+1
+27,0
+1
+8,0
+1
+0
+1
+5,0
+1
+0
+1
+6,0
+1
+0
+1
+0
+1
+7,0
+1
+0
+1
+4,0
+1
+0
+1
+7,0
+1
+0
+1
+25,0
+3,1
+2,0
+1
+0
+1
+9,0
+1
+2,0
+1
+f,0
+2,1
+5,0
+1
+8,0
+1
+2,0
+1
+2c,0
+1
+e,0
+9,1
+8,0
+1
+0
+1
+2,0
+1
+3,0
+1
+d,0
+1
+7,0
+1
+24,0
+1
+4,0
+1
+8,0
+1
+2,0
+1
+2,0
+1
+3,0
+1
+7,0
+1
+4,0
+1
+5,0
+1
+7,0
+2,1
+2,0
+1
+7,0
+1
+28,0
+1
+5,0
+1
+c,0
+1
+4,0
+3,1
+4,0
+1
+d,0
+1
+32,0
+1
+14,0
+1
+f,0
+3,1
+f,0
+1
+0
+1
+2c,0
+1
+5,0
+1
+0
+1
+3,0
+2,1
+8,0
+1
+2,0
+a,1
+6,0
+1
+4,0
+1
+a,0
+1
+3,0
+2,1
+23,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+4,0
+1
+7,0
+1
+2,0
+1
+3,0
+1
+0
+1
+22,0
+3,1
+e,0
+5,1
+f,0
+1
+12,0
+1
+35,0
+1
+13,0
+1
+f,0
+1
+1b7b,0
+100 90 32
+261,0
+1
+19,0
+1
+3,0
+1
+e,0
+1
+1d,0
+1
+25,0
+5,1
+23,0
+1
+0
+1
+10,0
+1
+19,0
+1
+a,0
+1
+9,0
+1
+2,0
+b,1
+3,0
+7,1
+0
+1
+0
+1
+b,0
+1
+2,0
+1
+3,0
+1
+8,0
+1
+22,0
+1
+4,0
+1
+4,0
+1
+6,0
+1
+3,0
+1
+8,0
+1
+3,0
+1
+3,0
+1
+4,0
+1
+5,0
+1
+2,0
+1
+3,0
+1
+0
+1
+4,0
+4,1
+26,0
+1
+11,0
+3,1
+11,0
+1
+0
+2,1
+e,0
+3,1
+26,0
+2,1
+5,0
+2,1
+6,0
+1
+a,0
+1
+3,0
+1
+3,0
+2,1
+e,0
+1
+2,0
+1
+2c,0
+1
+4,0
+1
+8,0
+4,1
+0
+2,1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+8,0
+1
+5,0
+1
+2,0
+1
+2,0
+1
+7,0
+1
+24,0
+1
+3,0
+2,1
+4,0
+1
+d,0
+1
+3,0
+1
+e,0
+1
+2,0
+3,1
+0
+1
+c,0
+1
+28,0
+1
+0
+1
+d,0
+1
+2,0
+2,1
+5,0
+1
+0
+1
+4,0
+1
+5,0
+1
+5,0
+1
+d,0
+1
+27,0
+1
+12,0
+1
+7,0
+1
+6,0
+1
+0
+1
+9,0
+1
+a,0
+1
+27,0
+1
+0
+1
+7,0
+1
+3,0
+1
+9,0
+1
+4,0
+1
+0
+1
+0
+1
+2,0
+1
+6,0
+1
+4,0
+1
+a,0
+1
+3,0
+2,1
+23,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+12,0
+1
+4,0
+1
+a,0
+1
+3,0
+1
+0
+1
+22,0
+1
+0
+1
+0
+5,1
+0
+1
+3,0
+6,1
+0
+1
+0
+2,1
+c,0
+1
+5,0
+1
+c,0
+1
+4,0
+2,1
+25,0
+1
+9,0
+1
+3,0
+1
+9,0
+1
+12,0
+1
+2,0
+1
+1b7b,0
+100 90 32
+261,0
+2,1
+18,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+19,0
+1
+3,0
+1
+17,0
+2,1
+8,0
+b,1
+6,0
+1
+3,0
+1
+8,0
+1
+5,0
+1
+7,0
+1
+0
+7,1
+2,0
+1
+7,0
+1
+3,0
+1
+15,0
+1
+f,0
+1
+12,0
+2,1
+0
+2,1
+f,0
+1
+12,0
+1
+0
+1
+22,0
+1
+9,0
+1
+6,0
+1
+c,0
+1
+3,0
+1
+3,0
+1
+a,0
+1
+2,0
+1
+3,0
+1
+30,0
+1
+7,0
+1
+0
+4,1
+0
+2,1
+2,0
+2,1
+2,0
+1
+2,0
+2,1
+2,0
+1
+0
+1
+0
+1
+3,0
+1
+0
+3,1
+2,0
+2,1
+0
+1
+2,0
+1
+2,0
+1
+2,0
+2,1
+25,0
+1
+0
+8,1
+9,0
+1
+7,0
+1
+3,0
+1
+9,0
+2,1
+5,0
+1
+d,0
+1
+24,0
+1
+4,0
+1
+8,0
+1
+4,0
+1
+0
+1
+2,0
+1
+3,0
+1
+2,0
+1
+b,0
+1
+8,0
+1
+a,0
+1
+24,0
+1
+3,0
+1
+5,0
+1
+3,0
+1
+21,0
+1
+0
+1
+0
+1
+35,0
+1
+d,0
+1
+9,0
+1
+0
+1
+4,0
+1
+b,0
+1
+d,0
+1
+27,0
+1
+3,0
+1
+e,0
+1
+0
+1
+5,0
+1
+6,0
+1
+0
+1
+3,0
+1
+5,0
+1
+a,0
+1
+0
+2,1
+24,0
+1
+7,0
+1
+5,0
+2,1
+8,0
+1
+2,0
+2,1
+0
+1
+0
+6,1
+5,0
+1
+c,0
+1
+6,0
+2,1
+3b,0
+1
+5,0
+1
+6,0
+1
+5,0
+1
+c,0
+1
+6,0
+1
+0
+1
+23,0
+1
+0
+1
+2,0
+3,1
+6,0
+1
+2,0
+1
+0
+1
+0
+1
+7,0
+1
+6,0
+1
+12,0
+1
+3,0
+1
+27,0
+1
+9,0
+1
+3,0
+1
+1b9b,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/drwtxt16/drwtxt16.m b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/drwtxt16.m
new file mode 100644
index 000000000..053d00cb5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/drwtxt16/drwtxt16.m
@@ -0,0 +1,365 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDrawText16 CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+int x = 2;
+int y = 18;
+XTextItem16 *items = deftext;
+int nitems = NELEM(deftext);
+>>EXTERN
+
+static XChar2b chlist1[] = {
+ {0, 24},
+ {33, 0},
+ {33, 45},
+ {1, 56},
+ {48, 120},
+ {36, 116},
+ {89, 94},
+ {1, 100},
+ {1, 240},
+};
+static XChar2b chlist2[] = {
+ { 1, 89},
+ { 0, 23},
+ { 1, 190},
+ { 3, 89},
+ { 4, 99},
+ {48, 43},
+ {48, 54 },
+ {48, 75},
+ {36, 80},
+};
+static XChar2b chlist3[] = {
+ {48, 54},
+};
+
+static XTextItem16 deftext[] = {
+ {chlist1, NELEM(chlist1), 0, None},
+ {chlist2, NELEM(chlist2), 0, None},
+};
+
+/* List of the 16 bit fonts */
+static int list16font[] = {
+ 2, 6};
+
+static Font Xtfonts[XT_NFONTS];
+>>SET startup localstartup
+>>SET cleanup fontcleanup
+static void
+localstartup()
+{
+ fontstartup();
+ if(Dsp) {
+ openfonts(Xtfonts, XT_NFONTS);
+ deftext[0].font = Xtfonts[2];
+ }
+}
+
+>>ASSERTION Good A
+On a call to xname each of the text
+.A items ,
+specifying a string
+.M chars
+of 16-bit or 2-byte characters
+from a
+.M font
+with interstring spacing given by
+.M delta ,
+is drawn in turn.
+>>STRATEGY
+For each 2 byte font.
+ Set font in gc with XSetFont.
+ Call XDrawText16.
+ Move drawing position down.
+Pixmap verify
+>>CODE
+XVisualInfo *vp;
+int fn;
+unsigned int width;
+static XTextItem16 ti[] = {
+ {chlist1, NELEM(chlist1), 0, None},
+ {chlist2, NELEM(chlist2), 0, None},
+};
+
+ items = ti;
+ nitems = NELEM(ti);
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ y = 0;
+ getsize(display, d, &width, (unsigned int*)0);
+ for (fn = 0; fn < NELEM(list16font); fn++) {
+ y += 20;
+ /* This is a reverse font */
+ if (list16font[fn] == 6)
+ x = width - 8;
+ else
+ x = 2;
+ XSetFont(display, gc, Xtfonts[list16font[fn]]);
+ XCALL;
+ }
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good B 3
+When fonts are defined with linear indexing rather than 2-byte matrix indexing,
+then each
+.S XChar2b
+structure is interpreted as a 16-bit number with byte1 as the
+most-significant byte.
+>>ASSERTION Good A
+A
+.M font
+other than
+.S None
+in one of the
+.A items
+causes the
+.M font
+to be stored in the GC
+and used for subsequent text.
+>>STRATEGY
+For each 16 bit font
+ Set font member to Font ID.
+ Call XDrawText16.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+static XTextItem16 ti[] = {
+ {chlist1, NELEM(chlist1), 0, None},
+ {chlist2, NELEM(chlist2), 0, None},
+};
+int i;
+int fn;
+unsigned int width;
+
+ items = ti;
+ nitems = NELEM(ti);
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ getsize(display, d, &width, (unsigned int*)0);
+
+ x = 2;
+ y = 18;
+ for (i = 0; i < NELEM(list16font); i++) {
+ fn = list16font[i];
+
+ if (fn == 6 || fn == 4)
+ x = width-4;
+ else
+ x = 2;
+
+ ti[0].font = Xtfonts[fn];
+ XCALL;
+ y += 18;
+ }
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION Good A
+On a call to xname the final drawing position of the string
+.M chars
+is given by adding
+.M delta
+to the x coordinate of the initial position of the string origin.
+>>STRATEGY
+Draw with various values of delta.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+static XTextItem16 ti = {
+ chlist3, NELEM(chlist3), 0, None
+};
+int i;
+
+ ti.font = Xtfonts[2];
+ items = &ti;
+ nitems = 1;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ for (i = 0; i < 80; i+= 16) {
+ ti.delta = i;
+
+ XCALL;
+ }
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+>>ASSERTION def
+The initial position of the first string's origin is at [
+.A x ,
+.A y
+].
+>>ASSERTION def
+The initial position of the second and subsequent strings
+is displaced in the x direction
+by a distance equal to the width of the previous string
+from the final drawing position of the previous string.
+>>ASSERTION def
+Each character image, as defined by the
+.M font
+in the GC, is treated as an
+additional mask for a fill operation on the drawable.
+>>ASSERTION def
+The drawable is modified only where the font character has a bit set to 1.
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M fill-style ,
+.M font ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin ,
+and
+.M tile-stipple-y-origin
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>>ASSERTION Bad A
+.ER BadFont bad-font
+>>STRATEGY
+Cant be tested by the generic test.
+Place a bad font ID into the font member of a XTextItem array.
+Draw text using XTextItem array.
+Check for BadFont.
+>>CODE BadFont
+
+ seterrdef();
+
+ deftext[0].font = badfont(display);
+
+ XCALL;
+ if (geterr() == BadFont)
+ PASS;
+ else
+ FAIL;
+
+>>ASSERTION Bad A
+When a text item generates a
+.S BadFont
+error, then either the text of
+the previous items is drawn or nothing is drawn.
+>>STRATEGY
+Place None into the font member of the first XTextItem array.
+Set nitems to 1.
+Draw text using XTextItem array.
+Save image on drawable.
+Place a bad font ID into the font member of the second XTextItem array.
+Set nitems to 2.
+Draw text using XTextItem array.
+Verify that either the saved image was drawn or nothing was drawn.
+>>CODE
+XVisualInfo *vp;
+XImage *image1;
+XImage *image2;
+
+ seterrdef();
+
+ resetvinf(VI_WIN_PIX);
+ nextvinf(&vp);
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ /* Assume drawable clear at start of test purpose, and save image */
+ image2 = savimage(display, d);
+
+ deftext[0].font = None;
+ items = deftext;
+ nitems = 1;
+
+ startcall(Dsp);
+ if (isdeleted())
+ return;
+ XDrawText16(display, d, gc, x, y, items, nitems);
+ endcall(Dsp);
+ if (geterr() != Success) {
+ delete("Got %s, Expecting Success", errorname(geterr()));
+ return;
+ }
+
+ /* Draw text from previous item and save image */
+ image1 = savimage(display, d);
+ dclear(display, d);
+
+ deftext[1].font = badfont(display);
+ items = deftext;
+ nitems = 2;
+
+ startcall(Dsp);
+ if (isdeleted())
+ return;
+ XDrawText16(display, d, gc, x, y, items, nitems);
+ endcall(Dsp);
+ if (geterr() != BadFont) {
+ delete("Got %s, Expecting BadFont", errorname(geterr()));
+ return;
+ }
+
+ if (compsavimage(display, d, image1))
+ PASS;
+ else {
+ if (compsavimage(display, d, image2))
+ PASS;
+ else
+ {
+ report("When a BadFont error occurred, text was drawn");
+ report("differing from the text of the previous item");
+ FAIL;
+ }
+ }
+
+
+>># HISTORY kieron Completed Check format and pass ac
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarc/a1.dat b/xc/test/xsuite/xtest/tset/CH06/fllarc/a1.dat
new file mode 100644
index 000000000..5005d3632
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarc/a1.dat
@@ -0,0 +1,123 @@
+! $XConsortium$
+100 90 32
+802,0
+1
+5c,0
+f,1
+52,0
+15,1
+4c,0
+1b,1
+48,0
+1d,1
+45,0
+21,1
+41,0
+24,1
+3f,0
+27,1
+3c,0
+29,1
+3a,0
+2b,1
+38,0
+2d,1
+36,0
+2f,1
+34,0
+30,1
+34,0
+31,1
+32,0
+33,1
+31,0
+33,1
+30,0
+35,1
+2e,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2c,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2a,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+28,0
+1e,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+49,0
+1b,1
+49,0
+1b,1
+49,0
+1b,1
+4a,0
+1a,1
+4b,0
+19,1
+4b,0
+19,1
+4c,0
+18,1
+4c,0
+18,1
+4d,0
+17,1
+4e,0
+16,1
+4f,0
+15,1
+50,0
+14,1
+51,0
+13,1
+52,0
+12,1
+54,0
+10,1
+56,0
+e,1
+57,0
+d,1
+5a,0
+a,1
+5d,0
+7,1
+41a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarc/a2.dat b/xc/test/xsuite/xtest/tset/CH06/fllarc/a2.dat
new file mode 100644
index 000000000..01e45686b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarc/a2.dat
@@ -0,0 +1,123 @@
+! $XConsortium$
+100 90 32
+802,0
+1
+5c,0
+f,1
+52,0
+15,1
+4c,0
+1b,1
+48,0
+1d,1
+45,0
+21,1
+41,0
+24,1
+3f,0
+27,1
+3c,0
+29,1
+3a,0
+2b,1
+38,0
+2d,1
+36,0
+2f,1
+34,0
+30,1
+34,0
+31,1
+32,0
+33,1
+31,0
+33,1
+30,0
+35,1
+2e,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2c,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2a,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+28,0
+3c,1
+29,0
+3a,1
+2a,0
+39,1
+2b,0
+38,1
+2c,0
+37,1
+2d,0
+36,1
+2e,0
+35,1
+2f,0
+34,1
+31,0
+32,1
+32,0
+31,1
+33,0
+30,1
+35,0
+2e,1
+36,0
+2d,1
+37,0
+2c,1
+39,0
+2a,1
+3b,0
+28,1
+3c,0
+27,1
+3e,0
+25,1
+3f,0
+24,1
+41,0
+22,1
+43,0
+20,1
+45,0
+1e,1
+47,0
+1c,1
+49,0
+1a,1
+4b,0
+18,1
+4e,0
+15,1
+51,0
+12,1
+53,0
+10,1
+57,0
+c,1
+5b,0
+8,1
+419,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarc/a23.dat b/xc/test/xsuite/xtest/tset/CH06/fllarc/a23.dat
new file mode 100644
index 000000000..5005d3632
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarc/a23.dat
@@ -0,0 +1,123 @@
+! $XConsortium$
+100 90 32
+802,0
+1
+5c,0
+f,1
+52,0
+15,1
+4c,0
+1b,1
+48,0
+1d,1
+45,0
+21,1
+41,0
+24,1
+3f,0
+27,1
+3c,0
+29,1
+3a,0
+2b,1
+38,0
+2d,1
+36,0
+2f,1
+34,0
+30,1
+34,0
+31,1
+32,0
+33,1
+31,0
+33,1
+30,0
+35,1
+2e,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2c,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2a,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+28,0
+1e,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+49,0
+1b,1
+49,0
+1b,1
+49,0
+1b,1
+4a,0
+1a,1
+4b,0
+19,1
+4b,0
+19,1
+4c,0
+18,1
+4c,0
+18,1
+4d,0
+17,1
+4e,0
+16,1
+4f,0
+15,1
+50,0
+14,1
+51,0
+13,1
+52,0
+12,1
+54,0
+10,1
+56,0
+e,1
+57,0
+d,1
+5a,0
+a,1
+5d,0
+7,1
+41a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarc/a24.dat b/xc/test/xsuite/xtest/tset/CH06/fllarc/a24.dat
new file mode 100644
index 000000000..b731d6dae
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarc/a24.dat
@@ -0,0 +1,992 @@
+! $XConsortium$
+100 90 32
+802,0
+2
+5c,0
+2,3
+5,2
+2,3
+2,2
+4,3
+52,0
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+3
+4c,0
+4,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+2,3
+48,0
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+3
+45,0
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+3,2
+41,0
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+3f,0
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3c,0
+3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+3a,0
+2,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+38,0
+2,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+36,0
+4,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+34,0
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+34,0
+7,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+2,2
+32,0
+2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+3,2
+31,0
+3
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3,2
+2,3
+30,0
+2,2
+5,3
+e,2
+5,3
+e,2
+5,3
+8,2
+2e,0
+4,3
+3,2
+10,3
+3,2
+10,3
+3,2
+a,3
+2d,0
+37,3
+2d,0
+3,2
+5,3
+e,2
+5,3
+e,2
+5,3
+9,2
+2c,0
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2b,0
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2b,0
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+2a,0
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+29,0
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+29,0
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+29,0
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+29,0
+2,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+29,0
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+29,0
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+28,0
+2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+47,0
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+47,0
+2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+7,3
+47,0
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+47,0
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+47,0
+5,2
+5,3
+e,2
+5,3
+47,0
+6,3
+3,2
+10,3
+3,2
+3
+47,0
+1d,3
+48,0
+4,2
+5,3
+e,2
+5,3
+48,0
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+48,0
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+49,0
+2
+9,3
+2
+3
+6,2
+3
+2
+7,3
+49,0
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+49,0
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+4a,0
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2
+4b,0
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+4b,0
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+4c,0
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+4c,0
+2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2
+4d,0
+4,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+4e,0
+3,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+4f,0
+4,3
+2
+3
+6,2
+3
+2
+7,3
+50,0
+3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+51,0
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+52,0
+d,2
+5,3
+54,0
+c,3
+3,2
+3
+56,0
+e,3
+57,0
+8,2
+5,3
+5a,0
+3
+2,2
+2,3
+5,2
+5d,0
+2,2
+5,3
+41a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarc/a25.dat b/xc/test/xsuite/xtest/tset/CH06/fllarc/a25.dat
new file mode 100644
index 000000000..4be64a30c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarc/a25.dat
@@ -0,0 +1,518 @@
+! $XConsortium$
+100 90 32
+802,0
+2
+5c,0
+3
+b,2
+3,3
+52,0
+8,2
+c,3
+2
+4c,0
+11,3
+6,2
+4,3
+48,0
+6,3
+6,2
+4,3
+2,2
+b,3
+45,0
+2,3
+6,2
+9,3
+2
+8,3
+6,2
+3
+41,0
+3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+3f,0
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+2,3
+3c,0
+2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+2,2
+3a,0
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+38,0
+3,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+4,2
+36,0
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+34,0
+5,2
+d,3
+b,2
+d,3
+6,2
+34,0
+a,3
+c,2
+c,3
+c,2
+3,3
+32,0
+5,3
+6,2
+12,3
+6,2
+10,3
+31,0
+3,3
+2,2
+c,3
+6,2
+4,3
+2,2
+c,3
+6,2
+4,3
+30,0
+3,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+9,3
+2
+3
+2e,0
+2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+6,3
+2d,0
+3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+3,3
+2d,0
+8,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+9,2
+2c,0
+2,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+2b,0
+9,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+2b,0
+2,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+2a,0
+a,2
+d,3
+b,2
+d,3
+b,2
+3
+29,0
+3,2
+c,3
+c,2
+c,3
+c,2
+8,3
+29,0
+9,3
+6,2
+12,3
+6,2
+12,3
+2,2
+29,0
+3,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+2,3
+29,0
+6,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+9,3
+2
+4,3
+29,0
+3,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+8,3
+29,0
+3,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2
+28,0
+3
+a,2
+5,3
+3,2
+6,3
+5,2
+47,0
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+47,0
+a,2
+4,3
+6,2
+4,3
+5,2
+47,0
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+47,0
+a,2
+d,3
+6,2
+47,0
+3,2
+c,3
+c,2
+2,3
+47,0
+9,3
+6,2
+e,3
+47,0
+3,2
+4,3
+2,2
+c,3
+6,2
+2,3
+48,0
+5,3
+2
+8,3
+6,2
+8,3
+48,0
+2,2
+9,3
+3,2
+8,3
+4,2
+2,3
+48,0
+2,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+2,2
+49,0
+8,2
+5,3
+3,2
+6,3
+5,2
+49,0
+3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+49,0
+8,2
+4,3
+6,2
+4,3
+5,2
+4a,0
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+4b,0
+6,2
+d,3
+6,2
+4b,0
+b,3
+c,2
+2,3
+4c,0
+4,3
+6,2
+e,3
+4c,0
+2,3
+2,2
+c,3
+6,2
+2,3
+4d,0
+2
+8,3
+6,2
+8,3
+4e,0
+5,3
+3,2
+8,3
+4,2
+2,3
+4f,0
+2,3
+2,2
+6,3
+5,2
+4,3
+2,2
+50,0
+2
+5,3
+3,2
+6,3
+5,2
+51,0
+5,2
+5,3
+4,2
+3,3
+2
+3
+52,0
+3,3
+6,2
+4,3
+5,2
+54,0
+6,3
+5,2
+3,3
+2
+3
+56,0
+8,3
+6,2
+57,0
+b,2
+2,3
+5a,0
+a,3
+5d,0
+5,2
+2,3
+41a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarc/a26.dat b/xc/test/xsuite/xtest/tset/CH06/fllarc/a26.dat
new file mode 100644
index 000000000..2f7b5c76e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarc/a26.dat
@@ -0,0 +1,469 @@
+! $XConsortium$
+100 90 32
+85f,0
+1
+b,0
+3,1
+5a,0
+c,1
+4d,0
+11,1
+6,0
+4,1
+48,0
+6,1
+6,0
+4,1
+2,0
+b,1
+45,0
+2,1
+6,0
+9,1
+0
+8,1
+6,0
+1
+41,0
+1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+41,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+2,1
+3d,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+3c,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+3b,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+3a,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+39,0
+d,1
+b,0
+d,1
+3a,0
+a,1
+c,0
+c,1
+c,0
+3,1
+32,0
+5,1
+6,0
+12,1
+6,0
+10,1
+31,0
+3,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+30,0
+3,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+1
+2f,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+6,1
+2d,0
+1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+3,1
+35,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+35,0
+2,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+35,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+35,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+35,0
+d,1
+b,0
+d,1
+b,0
+1
+2c,0
+c,1
+c,0
+c,1
+c,0
+8,1
+29,0
+9,1
+6,0
+12,1
+6,0
+12,1
+2e,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+2,1
+29,0
+6,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+4,1
+2c,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+8,1
+29,0
+3,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+29,0
+1
+a,0
+5,1
+3,0
+6,1
+4c,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+51,0
+4,1
+6,0
+4,1
+4c,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+51,0
+d,1
+50,0
+c,1
+c,0
+2,1
+47,0
+9,1
+6,0
+e,1
+4a,0
+4,1
+2,0
+c,1
+6,0
+2,1
+48,0
+5,1
+0
+8,1
+6,0
+8,1
+4a,0
+9,1
+3,0
+8,1
+4,0
+2,1
+48,0
+2,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+53,0
+5,1
+3,0
+6,1
+4e,0
+1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+51,0
+4,1
+6,0
+4,1
+50,0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+51,0
+d,1
+51,0
+b,1
+c,0
+2,1
+4c,0
+4,1
+6,0
+e,1
+4c,0
+2,1
+2,0
+c,1
+6,0
+2,1
+4e,0
+8,1
+6,0
+8,1
+4e,0
+5,1
+3,0
+8,1
+4,0
+2,1
+4f,0
+2,1
+2,0
+6,1
+5,0
+4,1
+53,0
+5,1
+3,0
+6,1
+5b,0
+5,1
+4,0
+3,1
+0
+1
+52,0
+3,1
+6,0
+4,1
+59,0
+6,1
+5,0
+3,1
+0
+1
+56,0
+8,1
+68,0
+2,1
+5a,0
+a,1
+62,0
+2,1
+41a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarc/a3.dat b/xc/test/xsuite/xtest/tset/CH06/fllarc/a3.dat
new file mode 100644
index 000000000..5005d3632
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarc/a3.dat
@@ -0,0 +1,123 @@
+! $XConsortium$
+100 90 32
+802,0
+1
+5c,0
+f,1
+52,0
+15,1
+4c,0
+1b,1
+48,0
+1d,1
+45,0
+21,1
+41,0
+24,1
+3f,0
+27,1
+3c,0
+29,1
+3a,0
+2b,1
+38,0
+2d,1
+36,0
+2f,1
+34,0
+30,1
+34,0
+31,1
+32,0
+33,1
+31,0
+33,1
+30,0
+35,1
+2e,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2c,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2a,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+28,0
+1e,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+49,0
+1b,1
+49,0
+1b,1
+49,0
+1b,1
+4a,0
+1a,1
+4b,0
+19,1
+4b,0
+19,1
+4c,0
+18,1
+4c,0
+18,1
+4d,0
+17,1
+4e,0
+16,1
+4f,0
+15,1
+50,0
+14,1
+51,0
+13,1
+52,0
+12,1
+54,0
+10,1
+56,0
+e,1
+57,0
+d,1
+5a,0
+a,1
+5d,0
+7,1
+41a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarc/a30.dat b/xc/test/xsuite/xtest/tset/CH06/fllarc/a30.dat
new file mode 100644
index 000000000..3745252de
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarc/a30.dat
@@ -0,0 +1,563 @@
+! $XConsortium$
+100 90 32
+a48,0
+1
+62,0
+2,1
+61,0
+3,1
+60,0
+4,1
+17b3,0
+100 90 32
+bd4,0
+5,1
+5e,0
+6,1
+5d,0
+7,1
+5d,0
+7,1
+5c,0
+8,1
+5c,0
+8,1
+5b,0
+9,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+57,0
+d,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+59,0
+b,1
+59,0
+b,1
+bfb,0
+100 90 32
+1786,0
+b,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5b,0
+9,1
+5c,0
+8,1
+5c,0
+8,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+6,1
+5f,0
+5,1
+60,0
+4,1
+61,0
+3,1
+62,0
+2,1
+63,0
+1
+61f,0
+100 90 32
+802,0
+1
+5c,0
+f,1
+52,0
+15,1
+4c,0
+1b,1
+48,0
+1d,1
+45,0
+20,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+1792,0
+100 90 32
+bd9,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+bea,0
+100 90 32
+1791,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+54,0
+10,1
+56,0
+e,1
+57,0
+d,1
+5a,0
+a,1
+5d,0
+7,1
+41a,0
+100 90 32
+a06,0
+1
+63,0
+2,1
+62,0
+4,1
+60,0
+5,1
+5f,0
+6,1
+178c,0
+100 90 32
+bfa,0
+7,1
+5d,0
+8,1
+5c,0
+8,1
+5c,0
+9,1
+5b,0
+a,1
+5a,0
+a,1
+5a,0
+b,1
+59,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+e,1
+56,0
+e,1
+56,0
+e,1
+56,0
+e,1
+56,0
+e,1
+56,0
+e,1
+56,0
+e,1
+fb4,0
+100 90 32
+2328,0
+100 90 32
+bd4,0
+5,1
+5e,0
+6,1
+5d,0
+7,1
+5d,0
+7,1
+5c,0
+8,1
+5c,0
+8,1
+5b,0
+9,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+59,0
+b,1
+59,0
+b,1
+59,0
+b,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+57,0
+d,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+c,1
+59,0
+b,1
+59,0
+b,1
+bfb,0
+100 90 32
+1786,0
+b,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5b,0
+9,1
+5c,0
+8,1
+5c,0
+8,1
+5d,0
+7,1
+5d,0
+7,1
+5e,0
+6,1
+5f,0
+5,1
+60,0
+4,1
+61,0
+3,1
+62,0
+2,1
+63,0
+1
+61f,0
+100 90 32
+802,0
+1
+5c,0
+f,1
+52,0
+15,1
+4c,0
+1b,1
+48,0
+1d,1
+45,0
+20,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+1792,0
+100 90 32
+bd9,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+bea,0
+100 90 32
+1791,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+53,0
+11,1
+54,0
+10,1
+56,0
+e,1
+57,0
+d,1
+5a,0
+a,1
+5d,0
+7,1
+41a,0
+100 90 32
+a06,0
+1
+63,0
+2,1
+62,0
+4,1
+60,0
+5,1
+5f,0
+6,1
+178c,0
+100 90 32
+bfa,0
+7,1
+5d,0
+8,1
+5c,0
+8,1
+5c,0
+9,1
+5b,0
+a,1
+5a,0
+a,1
+5a,0
+b,1
+59,0
+c,1
+58,0
+c,1
+58,0
+c,1
+58,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+e,1
+56,0
+e,1
+56,0
+e,1
+56,0
+e,1
+56,0
+e,1
+56,0
+e,1
+56,0
+e,1
+fb4,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarc/a33.dat b/xc/test/xsuite/xtest/tset/CH06/fllarc/a33.dat
new file mode 100644
index 000000000..2f7b5c76e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarc/a33.dat
@@ -0,0 +1,469 @@
+! $XConsortium$
+100 90 32
+85f,0
+1
+b,0
+3,1
+5a,0
+c,1
+4d,0
+11,1
+6,0
+4,1
+48,0
+6,1
+6,0
+4,1
+2,0
+b,1
+45,0
+2,1
+6,0
+9,1
+0
+8,1
+6,0
+1
+41,0
+1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+41,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+2,1
+3d,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+3c,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+3b,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+3a,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+39,0
+d,1
+b,0
+d,1
+3a,0
+a,1
+c,0
+c,1
+c,0
+3,1
+32,0
+5,1
+6,0
+12,1
+6,0
+10,1
+31,0
+3,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+30,0
+3,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+1
+2f,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+6,1
+2d,0
+1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+3,1
+35,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+35,0
+2,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+35,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+35,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+35,0
+d,1
+b,0
+d,1
+b,0
+1
+2c,0
+c,1
+c,0
+c,1
+c,0
+8,1
+29,0
+9,1
+6,0
+12,1
+6,0
+12,1
+2e,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+2,1
+29,0
+6,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+4,1
+2c,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+8,1
+29,0
+3,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+29,0
+1
+a,0
+5,1
+3,0
+6,1
+4c,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+51,0
+4,1
+6,0
+4,1
+4c,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+51,0
+d,1
+50,0
+c,1
+c,0
+2,1
+47,0
+9,1
+6,0
+e,1
+4a,0
+4,1
+2,0
+c,1
+6,0
+2,1
+48,0
+5,1
+0
+8,1
+6,0
+8,1
+4a,0
+9,1
+3,0
+8,1
+4,0
+2,1
+48,0
+2,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+53,0
+5,1
+3,0
+6,1
+4e,0
+1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+51,0
+4,1
+6,0
+4,1
+50,0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+51,0
+d,1
+51,0
+b,1
+c,0
+2,1
+4c,0
+4,1
+6,0
+e,1
+4c,0
+2,1
+2,0
+c,1
+6,0
+2,1
+4e,0
+8,1
+6,0
+8,1
+4e,0
+5,1
+3,0
+8,1
+4,0
+2,1
+4f,0
+2,1
+2,0
+6,1
+5,0
+4,1
+53,0
+5,1
+3,0
+6,1
+5b,0
+5,1
+4,0
+3,1
+0
+1
+52,0
+3,1
+6,0
+4,1
+59,0
+6,1
+5,0
+3,1
+0
+1
+56,0
+8,1
+68,0
+2,1
+5a,0
+a,1
+62,0
+2,1
+41a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarc/a35.dat b/xc/test/xsuite/xtest/tset/CH06/fllarc/a35.dat
new file mode 100644
index 000000000..8708c2224
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarc/a35.dat
@@ -0,0 +1,4151 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+802,0
+1
+5c,0
+f,1
+52,0
+15,1
+4c,0
+1b,1
+48,0
+1d,1
+45,0
+21,1
+41,0
+24,1
+3f,0
+27,1
+3c,0
+29,1
+3a,0
+2b,1
+38,0
+2d,1
+36,0
+2f,1
+34,0
+30,1
+34,0
+31,1
+32,0
+33,1
+31,0
+33,1
+30,0
+35,1
+2e,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2c,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2a,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+28,0
+1e,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+49,0
+1b,1
+49,0
+1b,1
+49,0
+1b,1
+4a,0
+1a,1
+4b,0
+19,1
+4b,0
+19,1
+4c,0
+18,1
+4c,0
+18,1
+4d,0
+17,1
+4e,0
+16,1
+4f,0
+15,1
+50,0
+14,1
+51,0
+13,1
+52,0
+12,1
+54,0
+10,1
+56,0
+e,1
+57,0
+d,1
+5a,0
+a,1
+5d,0
+7,1
+41a,0
+100 90 32
+802,0
+2
+5c,0
+f,2
+52,0
+15,2
+4c,0
+1b,2
+48,0
+1d,2
+45,0
+21,2
+41,0
+24,2
+3f,0
+27,2
+3c,0
+29,2
+3a,0
+2b,2
+38,0
+2d,2
+36,0
+2f,2
+34,0
+30,2
+34,0
+31,2
+32,0
+33,2
+31,0
+33,2
+30,0
+35,2
+2e,0
+37,2
+2d,0
+37,2
+2d,0
+37,2
+2c,0
+39,2
+2b,0
+39,2
+2b,0
+39,2
+2a,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+28,0
+1e,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+48,0
+1c,2
+48,0
+1c,2
+48,0
+1c,2
+49,0
+1b,2
+49,0
+1b,2
+49,0
+1b,2
+4a,0
+1a,2
+4b,0
+19,2
+4b,0
+19,2
+4c,0
+18,2
+4c,0
+18,2
+4d,0
+17,2
+4e,0
+16,2
+4f,0
+15,2
+50,0
+14,2
+51,0
+13,2
+52,0
+12,2
+54,0
+10,2
+56,0
+e,2
+57,0
+d,2
+5a,0
+a,2
+5d,0
+7,2
+41a,0
+100 90 32
+802,0
+3
+5c,0
+f,3
+52,0
+15,3
+4c,0
+1b,3
+48,0
+1d,3
+45,0
+21,3
+41,0
+24,3
+3f,0
+27,3
+3c,0
+29,3
+3a,0
+2b,3
+38,0
+2d,3
+36,0
+2f,3
+34,0
+30,3
+34,0
+31,3
+32,0
+33,3
+31,0
+33,3
+30,0
+35,3
+2e,0
+37,3
+2d,0
+37,3
+2d,0
+37,3
+2c,0
+39,3
+2b,0
+39,3
+2b,0
+39,3
+2a,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+28,0
+1e,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+48,0
+1c,3
+48,0
+1c,3
+48,0
+1c,3
+49,0
+1b,3
+49,0
+1b,3
+49,0
+1b,3
+4a,0
+1a,3
+4b,0
+19,3
+4b,0
+19,3
+4c,0
+18,3
+4c,0
+18,3
+4d,0
+17,3
+4e,0
+16,3
+4f,0
+15,3
+50,0
+14,3
+51,0
+13,3
+52,0
+12,3
+54,0
+10,3
+56,0
+e,3
+57,0
+d,3
+5a,0
+a,3
+5d,0
+7,3
+41a,0
+100 90 32
+802,0
+4
+5c,0
+f,4
+52,0
+15,4
+4c,0
+1b,4
+48,0
+1d,4
+45,0
+21,4
+41,0
+24,4
+3f,0
+27,4
+3c,0
+29,4
+3a,0
+2b,4
+38,0
+2d,4
+36,0
+2f,4
+34,0
+30,4
+34,0
+31,4
+32,0
+33,4
+31,0
+33,4
+30,0
+35,4
+2e,0
+37,4
+2d,0
+37,4
+2d,0
+37,4
+2c,0
+39,4
+2b,0
+39,4
+2b,0
+39,4
+2a,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+28,0
+1e,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+48,0
+1c,4
+48,0
+1c,4
+48,0
+1c,4
+49,0
+1b,4
+49,0
+1b,4
+49,0
+1b,4
+4a,0
+1a,4
+4b,0
+19,4
+4b,0
+19,4
+4c,0
+18,4
+4c,0
+18,4
+4d,0
+17,4
+4e,0
+16,4
+4f,0
+15,4
+50,0
+14,4
+51,0
+13,4
+52,0
+12,4
+54,0
+10,4
+56,0
+e,4
+57,0
+d,4
+5a,0
+a,4
+5d,0
+7,4
+41a,0
+100 90 32
+802,0
+6
+5c,0
+f,6
+52,0
+15,6
+4c,0
+1b,6
+48,0
+1d,6
+45,0
+21,6
+41,0
+24,6
+3f,0
+27,6
+3c,0
+29,6
+3a,0
+2b,6
+38,0
+2d,6
+36,0
+2f,6
+34,0
+30,6
+34,0
+31,6
+32,0
+33,6
+31,0
+33,6
+30,0
+35,6
+2e,0
+37,6
+2d,0
+37,6
+2d,0
+37,6
+2c,0
+39,6
+2b,0
+39,6
+2b,0
+39,6
+2a,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+28,0
+1e,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+48,0
+1c,6
+48,0
+1c,6
+48,0
+1c,6
+49,0
+1b,6
+49,0
+1b,6
+49,0
+1b,6
+4a,0
+1a,6
+4b,0
+19,6
+4b,0
+19,6
+4c,0
+18,6
+4c,0
+18,6
+4d,0
+17,6
+4e,0
+16,6
+4f,0
+15,6
+50,0
+14,6
+51,0
+13,6
+52,0
+12,6
+54,0
+10,6
+56,0
+e,6
+57,0
+d,6
+5a,0
+a,6
+5d,0
+7,6
+41a,0
+100 90 32
+802,0
+7
+5c,0
+f,7
+52,0
+15,7
+4c,0
+1b,7
+48,0
+1d,7
+45,0
+21,7
+41,0
+24,7
+3f,0
+27,7
+3c,0
+29,7
+3a,0
+2b,7
+38,0
+2d,7
+36,0
+2f,7
+34,0
+30,7
+34,0
+31,7
+32,0
+33,7
+31,0
+33,7
+30,0
+35,7
+2e,0
+37,7
+2d,0
+37,7
+2d,0
+37,7
+2c,0
+39,7
+2b,0
+39,7
+2b,0
+39,7
+2a,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+28,0
+1e,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+48,0
+1c,7
+48,0
+1c,7
+48,0
+1c,7
+49,0
+1b,7
+49,0
+1b,7
+49,0
+1b,7
+4a,0
+1a,7
+4b,0
+19,7
+4b,0
+19,7
+4c,0
+18,7
+4c,0
+18,7
+4d,0
+17,7
+4e,0
+16,7
+4f,0
+15,7
+50,0
+14,7
+51,0
+13,7
+52,0
+12,7
+54,0
+10,7
+56,0
+e,7
+57,0
+d,7
+5a,0
+a,7
+5d,0
+7,7
+41a,0
+100 90 32
+802,0
+10
+5c,0
+f,10
+52,0
+15,10
+4c,0
+1b,10
+48,0
+1d,10
+45,0
+21,10
+41,0
+24,10
+3f,0
+27,10
+3c,0
+29,10
+3a,0
+2b,10
+38,0
+2d,10
+36,0
+2f,10
+34,0
+30,10
+34,0
+31,10
+32,0
+33,10
+31,0
+33,10
+30,0
+35,10
+2e,0
+37,10
+2d,0
+37,10
+2d,0
+37,10
+2c,0
+39,10
+2b,0
+39,10
+2b,0
+39,10
+2a,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+28,0
+1e,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+48,0
+1c,10
+48,0
+1c,10
+48,0
+1c,10
+49,0
+1b,10
+49,0
+1b,10
+49,0
+1b,10
+4a,0
+1a,10
+4b,0
+19,10
+4b,0
+19,10
+4c,0
+18,10
+4c,0
+18,10
+4d,0
+17,10
+4e,0
+16,10
+4f,0
+15,10
+50,0
+14,10
+51,0
+13,10
+52,0
+12,10
+54,0
+10,10
+56,0
+e,10
+57,0
+d,10
+5a,0
+a,10
+5d,0
+7,10
+41a,0
+100 90 32
+802,0
+33
+5c,0
+f,33
+52,0
+15,33
+4c,0
+1b,33
+48,0
+1d,33
+45,0
+21,33
+41,0
+24,33
+3f,0
+27,33
+3c,0
+29,33
+3a,0
+2b,33
+38,0
+2d,33
+36,0
+2f,33
+34,0
+30,33
+34,0
+31,33
+32,0
+33,33
+31,0
+33,33
+30,0
+35,33
+2e,0
+37,33
+2d,0
+37,33
+2d,0
+37,33
+2c,0
+39,33
+2b,0
+39,33
+2b,0
+39,33
+2a,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+28,0
+1e,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+48,0
+1c,33
+48,0
+1c,33
+48,0
+1c,33
+49,0
+1b,33
+49,0
+1b,33
+49,0
+1b,33
+4a,0
+1a,33
+4b,0
+19,33
+4b,0
+19,33
+4c,0
+18,33
+4c,0
+18,33
+4d,0
+17,33
+4e,0
+16,33
+4f,0
+15,33
+50,0
+14,33
+51,0
+13,33
+52,0
+12,33
+54,0
+10,33
+56,0
+e,33
+57,0
+d,33
+5a,0
+a,33
+5d,0
+7,33
+41a,0
+100 90 32
+802,0
+81
+5c,0
+f,81
+52,0
+15,81
+4c,0
+1b,81
+48,0
+1d,81
+45,0
+21,81
+41,0
+24,81
+3f,0
+27,81
+3c,0
+29,81
+3a,0
+2b,81
+38,0
+2d,81
+36,0
+2f,81
+34,0
+30,81
+34,0
+31,81
+32,0
+33,81
+31,0
+33,81
+30,0
+35,81
+2e,0
+37,81
+2d,0
+37,81
+2d,0
+37,81
+2c,0
+39,81
+2b,0
+39,81
+2b,0
+39,81
+2a,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+28,0
+1e,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+48,0
+1c,81
+48,0
+1c,81
+48,0
+1c,81
+49,0
+1b,81
+49,0
+1b,81
+49,0
+1b,81
+4a,0
+1a,81
+4b,0
+19,81
+4b,0
+19,81
+4c,0
+18,81
+4c,0
+18,81
+4d,0
+17,81
+4e,0
+16,81
+4f,0
+15,81
+50,0
+14,81
+51,0
+13,81
+52,0
+12,81
+54,0
+10,81
+56,0
+e,81
+57,0
+d,81
+5a,0
+a,81
+5d,0
+7,81
+41a,0
+100 90 32
+802,0
+a3
+5c,0
+f,a3
+52,0
+15,a3
+4c,0
+1b,a3
+48,0
+1d,a3
+45,0
+21,a3
+41,0
+24,a3
+3f,0
+27,a3
+3c,0
+29,a3
+3a,0
+2b,a3
+38,0
+2d,a3
+36,0
+2f,a3
+34,0
+30,a3
+34,0
+31,a3
+32,0
+33,a3
+31,0
+33,a3
+30,0
+35,a3
+2e,0
+37,a3
+2d,0
+37,a3
+2d,0
+37,a3
+2c,0
+39,a3
+2b,0
+39,a3
+2b,0
+39,a3
+2a,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+28,0
+1e,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+48,0
+1c,a3
+48,0
+1c,a3
+48,0
+1c,a3
+49,0
+1b,a3
+49,0
+1b,a3
+49,0
+1b,a3
+4a,0
+1a,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4c,0
+18,a3
+4c,0
+18,a3
+4d,0
+17,a3
+4e,0
+16,a3
+4f,0
+15,a3
+50,0
+14,a3
+51,0
+13,a3
+52,0
+12,a3
+54,0
+10,a3
+56,0
+e,a3
+57,0
+d,a3
+5a,0
+a,a3
+5d,0
+7,a3
+41a,0
+100 90 32
+802,0
+ff
+5c,0
+f,ff
+52,0
+15,ff
+4c,0
+1b,ff
+48,0
+1d,ff
+45,0
+21,ff
+41,0
+24,ff
+3f,0
+27,ff
+3c,0
+29,ff
+3a,0
+2b,ff
+38,0
+2d,ff
+36,0
+2f,ff
+34,0
+30,ff
+34,0
+31,ff
+32,0
+33,ff
+31,0
+33,ff
+30,0
+35,ff
+2e,0
+37,ff
+2d,0
+37,ff
+2d,0
+37,ff
+2c,0
+39,ff
+2b,0
+39,ff
+2b,0
+39,ff
+2a,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+28,0
+1e,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+48,0
+1c,ff
+48,0
+1c,ff
+48,0
+1c,ff
+49,0
+1b,ff
+49,0
+1b,ff
+49,0
+1b,ff
+4a,0
+1a,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4c,0
+18,ff
+4c,0
+18,ff
+4d,0
+17,ff
+4e,0
+16,ff
+4f,0
+15,ff
+50,0
+14,ff
+51,0
+13,ff
+52,0
+12,ff
+54,0
+10,ff
+56,0
+e,ff
+57,0
+d,ff
+5a,0
+a,ff
+5d,0
+7,ff
+41a,0
+100 90 32
+802,0
+100
+5c,0
+f,100
+52,0
+15,100
+4c,0
+1b,100
+48,0
+1d,100
+45,0
+21,100
+41,0
+24,100
+3f,0
+27,100
+3c,0
+29,100
+3a,0
+2b,100
+38,0
+2d,100
+36,0
+2f,100
+34,0
+30,100
+34,0
+31,100
+32,0
+33,100
+31,0
+33,100
+30,0
+35,100
+2e,0
+37,100
+2d,0
+37,100
+2d,0
+37,100
+2c,0
+39,100
+2b,0
+39,100
+2b,0
+39,100
+2a,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+28,0
+1e,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+48,0
+1c,100
+48,0
+1c,100
+48,0
+1c,100
+49,0
+1b,100
+49,0
+1b,100
+49,0
+1b,100
+4a,0
+1a,100
+4b,0
+19,100
+4b,0
+19,100
+4c,0
+18,100
+4c,0
+18,100
+4d,0
+17,100
+4e,0
+16,100
+4f,0
+15,100
+50,0
+14,100
+51,0
+13,100
+52,0
+12,100
+54,0
+10,100
+56,0
+e,100
+57,0
+d,100
+5a,0
+a,100
+5d,0
+7,100
+41a,0
+100 90 32
+802,0
+12c
+5c,0
+f,12c
+52,0
+15,12c
+4c,0
+1b,12c
+48,0
+1d,12c
+45,0
+21,12c
+41,0
+24,12c
+3f,0
+27,12c
+3c,0
+29,12c
+3a,0
+2b,12c
+38,0
+2d,12c
+36,0
+2f,12c
+34,0
+30,12c
+34,0
+31,12c
+32,0
+33,12c
+31,0
+33,12c
+30,0
+35,12c
+2e,0
+37,12c
+2d,0
+37,12c
+2d,0
+37,12c
+2c,0
+39,12c
+2b,0
+39,12c
+2b,0
+39,12c
+2a,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+28,0
+1e,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+48,0
+1c,12c
+48,0
+1c,12c
+48,0
+1c,12c
+49,0
+1b,12c
+49,0
+1b,12c
+49,0
+1b,12c
+4a,0
+1a,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4c,0
+18,12c
+4c,0
+18,12c
+4d,0
+17,12c
+4e,0
+16,12c
+4f,0
+15,12c
+50,0
+14,12c
+51,0
+13,12c
+52,0
+12,12c
+54,0
+10,12c
+56,0
+e,12c
+57,0
+d,12c
+5a,0
+a,12c
+5d,0
+7,12c
+41a,0
+100 90 32
+802,0
+3e8
+5c,0
+f,3e8
+52,0
+15,3e8
+4c,0
+1b,3e8
+48,0
+1d,3e8
+45,0
+21,3e8
+41,0
+24,3e8
+3f,0
+27,3e8
+3c,0
+29,3e8
+3a,0
+2b,3e8
+38,0
+2d,3e8
+36,0
+2f,3e8
+34,0
+30,3e8
+34,0
+31,3e8
+32,0
+33,3e8
+31,0
+33,3e8
+30,0
+35,3e8
+2e,0
+37,3e8
+2d,0
+37,3e8
+2d,0
+37,3e8
+2c,0
+39,3e8
+2b,0
+39,3e8
+2b,0
+39,3e8
+2a,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+28,0
+1e,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+48,0
+1c,3e8
+48,0
+1c,3e8
+48,0
+1c,3e8
+49,0
+1b,3e8
+49,0
+1b,3e8
+49,0
+1b,3e8
+4a,0
+1a,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4c,0
+18,3e8
+4c,0
+18,3e8
+4d,0
+17,3e8
+4e,0
+16,3e8
+4f,0
+15,3e8
+50,0
+14,3e8
+51,0
+13,3e8
+52,0
+12,3e8
+54,0
+10,3e8
+56,0
+e,3e8
+57,0
+d,3e8
+5a,0
+a,3e8
+5d,0
+7,3e8
+41a,0
+100 90 32
+802,0
+111111
+5c,0
+f,111111
+52,0
+15,111111
+4c,0
+1b,111111
+48,0
+1d,111111
+45,0
+21,111111
+41,0
+24,111111
+3f,0
+27,111111
+3c,0
+29,111111
+3a,0
+2b,111111
+38,0
+2d,111111
+36,0
+2f,111111
+34,0
+30,111111
+34,0
+31,111111
+32,0
+33,111111
+31,0
+33,111111
+30,0
+35,111111
+2e,0
+37,111111
+2d,0
+37,111111
+2d,0
+37,111111
+2c,0
+39,111111
+2b,0
+39,111111
+2b,0
+39,111111
+2a,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+28,0
+1e,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+48,0
+1c,111111
+48,0
+1c,111111
+48,0
+1c,111111
+49,0
+1b,111111
+49,0
+1b,111111
+49,0
+1b,111111
+4a,0
+1a,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4c,0
+18,111111
+4c,0
+18,111111
+4d,0
+17,111111
+4e,0
+16,111111
+4f,0
+15,111111
+50,0
+14,111111
+51,0
+13,111111
+52,0
+12,111111
+54,0
+10,111111
+56,0
+e,111111
+57,0
+d,111111
+5a,0
+a,111111
+5d,0
+7,111111
+41a,0
+100 90 32
+802,0
+400200
+5c,0
+f,400200
+52,0
+15,400200
+4c,0
+1b,400200
+48,0
+1d,400200
+45,0
+21,400200
+41,0
+24,400200
+3f,0
+27,400200
+3c,0
+29,400200
+3a,0
+2b,400200
+38,0
+2d,400200
+36,0
+2f,400200
+34,0
+30,400200
+34,0
+31,400200
+32,0
+33,400200
+31,0
+33,400200
+30,0
+35,400200
+2e,0
+37,400200
+2d,0
+37,400200
+2d,0
+37,400200
+2c,0
+39,400200
+2b,0
+39,400200
+2b,0
+39,400200
+2a,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+28,0
+1e,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+48,0
+1c,400200
+48,0
+1c,400200
+48,0
+1c,400200
+49,0
+1b,400200
+49,0
+1b,400200
+49,0
+1b,400200
+4a,0
+1a,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4c,0
+18,400200
+4c,0
+18,400200
+4d,0
+17,400200
+4e,0
+16,400200
+4f,0
+15,400200
+50,0
+14,400200
+51,0
+13,400200
+52,0
+12,400200
+54,0
+10,400200
+56,0
+e,400200
+57,0
+d,400200
+5a,0
+a,400200
+5d,0
+7,400200
+41a,0
+100 90 32
+802,0
+777777
+5c,0
+f,777777
+52,0
+15,777777
+4c,0
+1b,777777
+48,0
+1d,777777
+45,0
+21,777777
+41,0
+24,777777
+3f,0
+27,777777
+3c,0
+29,777777
+3a,0
+2b,777777
+38,0
+2d,777777
+36,0
+2f,777777
+34,0
+30,777777
+34,0
+31,777777
+32,0
+33,777777
+31,0
+33,777777
+30,0
+35,777777
+2e,0
+37,777777
+2d,0
+37,777777
+2d,0
+37,777777
+2c,0
+39,777777
+2b,0
+39,777777
+2b,0
+39,777777
+2a,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+28,0
+1e,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+48,0
+1c,777777
+48,0
+1c,777777
+48,0
+1c,777777
+49,0
+1b,777777
+49,0
+1b,777777
+49,0
+1b,777777
+4a,0
+1a,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4c,0
+18,777777
+4c,0
+18,777777
+4d,0
+17,777777
+4e,0
+16,777777
+4f,0
+15,777777
+50,0
+14,777777
+51,0
+13,777777
+52,0
+12,777777
+54,0
+10,777777
+56,0
+e,777777
+57,0
+d,777777
+5a,0
+a,777777
+5d,0
+7,777777
+41a,0
+100 90 32
+802,0
+1
+5c,0
+f,1
+52,0
+15,1
+4c,0
+1b,1
+48,0
+1d,1
+45,0
+21,1
+41,0
+24,1
+3f,0
+27,1
+3c,0
+29,1
+3a,0
+2b,1
+38,0
+2d,1
+36,0
+2f,1
+34,0
+30,1
+34,0
+31,1
+32,0
+33,1
+31,0
+33,1
+30,0
+35,1
+2e,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2c,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2a,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+28,0
+1e,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+49,0
+1b,1
+49,0
+1b,1
+49,0
+1b,1
+4a,0
+1a,1
+4b,0
+19,1
+4b,0
+19,1
+4c,0
+18,1
+4c,0
+18,1
+4d,0
+17,1
+4e,0
+16,1
+4f,0
+15,1
+50,0
+14,1
+51,0
+13,1
+52,0
+12,1
+54,0
+10,1
+56,0
+e,1
+57,0
+d,1
+5a,0
+a,1
+5d,0
+7,1
+41a,0
+100 90 32
+802,0
+2
+5c,0
+f,2
+52,0
+15,2
+4c,0
+1b,2
+48,0
+1d,2
+45,0
+21,2
+41,0
+24,2
+3f,0
+27,2
+3c,0
+29,2
+3a,0
+2b,2
+38,0
+2d,2
+36,0
+2f,2
+34,0
+30,2
+34,0
+31,2
+32,0
+33,2
+31,0
+33,2
+30,0
+35,2
+2e,0
+37,2
+2d,0
+37,2
+2d,0
+37,2
+2c,0
+39,2
+2b,0
+39,2
+2b,0
+39,2
+2a,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+28,0
+1e,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+48,0
+1c,2
+48,0
+1c,2
+48,0
+1c,2
+49,0
+1b,2
+49,0
+1b,2
+49,0
+1b,2
+4a,0
+1a,2
+4b,0
+19,2
+4b,0
+19,2
+4c,0
+18,2
+4c,0
+18,2
+4d,0
+17,2
+4e,0
+16,2
+4f,0
+15,2
+50,0
+14,2
+51,0
+13,2
+52,0
+12,2
+54,0
+10,2
+56,0
+e,2
+57,0
+d,2
+5a,0
+a,2
+5d,0
+7,2
+41a,0
+100 90 32
+802,0
+3
+5c,0
+f,3
+52,0
+15,3
+4c,0
+1b,3
+48,0
+1d,3
+45,0
+21,3
+41,0
+24,3
+3f,0
+27,3
+3c,0
+29,3
+3a,0
+2b,3
+38,0
+2d,3
+36,0
+2f,3
+34,0
+30,3
+34,0
+31,3
+32,0
+33,3
+31,0
+33,3
+30,0
+35,3
+2e,0
+37,3
+2d,0
+37,3
+2d,0
+37,3
+2c,0
+39,3
+2b,0
+39,3
+2b,0
+39,3
+2a,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+28,0
+1e,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+48,0
+1c,3
+48,0
+1c,3
+48,0
+1c,3
+49,0
+1b,3
+49,0
+1b,3
+49,0
+1b,3
+4a,0
+1a,3
+4b,0
+19,3
+4b,0
+19,3
+4c,0
+18,3
+4c,0
+18,3
+4d,0
+17,3
+4e,0
+16,3
+4f,0
+15,3
+50,0
+14,3
+51,0
+13,3
+52,0
+12,3
+54,0
+10,3
+56,0
+e,3
+57,0
+d,3
+5a,0
+a,3
+5d,0
+7,3
+41a,0
+100 90 32
+802,0
+4
+5c,0
+f,4
+52,0
+15,4
+4c,0
+1b,4
+48,0
+1d,4
+45,0
+21,4
+41,0
+24,4
+3f,0
+27,4
+3c,0
+29,4
+3a,0
+2b,4
+38,0
+2d,4
+36,0
+2f,4
+34,0
+30,4
+34,0
+31,4
+32,0
+33,4
+31,0
+33,4
+30,0
+35,4
+2e,0
+37,4
+2d,0
+37,4
+2d,0
+37,4
+2c,0
+39,4
+2b,0
+39,4
+2b,0
+39,4
+2a,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+28,0
+1e,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+48,0
+1c,4
+48,0
+1c,4
+48,0
+1c,4
+49,0
+1b,4
+49,0
+1b,4
+49,0
+1b,4
+4a,0
+1a,4
+4b,0
+19,4
+4b,0
+19,4
+4c,0
+18,4
+4c,0
+18,4
+4d,0
+17,4
+4e,0
+16,4
+4f,0
+15,4
+50,0
+14,4
+51,0
+13,4
+52,0
+12,4
+54,0
+10,4
+56,0
+e,4
+57,0
+d,4
+5a,0
+a,4
+5d,0
+7,4
+41a,0
+100 90 32
+802,0
+6
+5c,0
+f,6
+52,0
+15,6
+4c,0
+1b,6
+48,0
+1d,6
+45,0
+21,6
+41,0
+24,6
+3f,0
+27,6
+3c,0
+29,6
+3a,0
+2b,6
+38,0
+2d,6
+36,0
+2f,6
+34,0
+30,6
+34,0
+31,6
+32,0
+33,6
+31,0
+33,6
+30,0
+35,6
+2e,0
+37,6
+2d,0
+37,6
+2d,0
+37,6
+2c,0
+39,6
+2b,0
+39,6
+2b,0
+39,6
+2a,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+28,0
+1e,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+48,0
+1c,6
+48,0
+1c,6
+48,0
+1c,6
+49,0
+1b,6
+49,0
+1b,6
+49,0
+1b,6
+4a,0
+1a,6
+4b,0
+19,6
+4b,0
+19,6
+4c,0
+18,6
+4c,0
+18,6
+4d,0
+17,6
+4e,0
+16,6
+4f,0
+15,6
+50,0
+14,6
+51,0
+13,6
+52,0
+12,6
+54,0
+10,6
+56,0
+e,6
+57,0
+d,6
+5a,0
+a,6
+5d,0
+7,6
+41a,0
+100 90 32
+802,0
+7
+5c,0
+f,7
+52,0
+15,7
+4c,0
+1b,7
+48,0
+1d,7
+45,0
+21,7
+41,0
+24,7
+3f,0
+27,7
+3c,0
+29,7
+3a,0
+2b,7
+38,0
+2d,7
+36,0
+2f,7
+34,0
+30,7
+34,0
+31,7
+32,0
+33,7
+31,0
+33,7
+30,0
+35,7
+2e,0
+37,7
+2d,0
+37,7
+2d,0
+37,7
+2c,0
+39,7
+2b,0
+39,7
+2b,0
+39,7
+2a,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+28,0
+1e,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+48,0
+1c,7
+48,0
+1c,7
+48,0
+1c,7
+49,0
+1b,7
+49,0
+1b,7
+49,0
+1b,7
+4a,0
+1a,7
+4b,0
+19,7
+4b,0
+19,7
+4c,0
+18,7
+4c,0
+18,7
+4d,0
+17,7
+4e,0
+16,7
+4f,0
+15,7
+50,0
+14,7
+51,0
+13,7
+52,0
+12,7
+54,0
+10,7
+56,0
+e,7
+57,0
+d,7
+5a,0
+a,7
+5d,0
+7,7
+41a,0
+100 90 32
+802,0
+10
+5c,0
+f,10
+52,0
+15,10
+4c,0
+1b,10
+48,0
+1d,10
+45,0
+21,10
+41,0
+24,10
+3f,0
+27,10
+3c,0
+29,10
+3a,0
+2b,10
+38,0
+2d,10
+36,0
+2f,10
+34,0
+30,10
+34,0
+31,10
+32,0
+33,10
+31,0
+33,10
+30,0
+35,10
+2e,0
+37,10
+2d,0
+37,10
+2d,0
+37,10
+2c,0
+39,10
+2b,0
+39,10
+2b,0
+39,10
+2a,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+28,0
+1e,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+48,0
+1c,10
+48,0
+1c,10
+48,0
+1c,10
+49,0
+1b,10
+49,0
+1b,10
+49,0
+1b,10
+4a,0
+1a,10
+4b,0
+19,10
+4b,0
+19,10
+4c,0
+18,10
+4c,0
+18,10
+4d,0
+17,10
+4e,0
+16,10
+4f,0
+15,10
+50,0
+14,10
+51,0
+13,10
+52,0
+12,10
+54,0
+10,10
+56,0
+e,10
+57,0
+d,10
+5a,0
+a,10
+5d,0
+7,10
+41a,0
+100 90 32
+802,0
+33
+5c,0
+f,33
+52,0
+15,33
+4c,0
+1b,33
+48,0
+1d,33
+45,0
+21,33
+41,0
+24,33
+3f,0
+27,33
+3c,0
+29,33
+3a,0
+2b,33
+38,0
+2d,33
+36,0
+2f,33
+34,0
+30,33
+34,0
+31,33
+32,0
+33,33
+31,0
+33,33
+30,0
+35,33
+2e,0
+37,33
+2d,0
+37,33
+2d,0
+37,33
+2c,0
+39,33
+2b,0
+39,33
+2b,0
+39,33
+2a,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+28,0
+1e,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+48,0
+1c,33
+48,0
+1c,33
+48,0
+1c,33
+49,0
+1b,33
+49,0
+1b,33
+49,0
+1b,33
+4a,0
+1a,33
+4b,0
+19,33
+4b,0
+19,33
+4c,0
+18,33
+4c,0
+18,33
+4d,0
+17,33
+4e,0
+16,33
+4f,0
+15,33
+50,0
+14,33
+51,0
+13,33
+52,0
+12,33
+54,0
+10,33
+56,0
+e,33
+57,0
+d,33
+5a,0
+a,33
+5d,0
+7,33
+41a,0
+100 90 32
+802,0
+81
+5c,0
+f,81
+52,0
+15,81
+4c,0
+1b,81
+48,0
+1d,81
+45,0
+21,81
+41,0
+24,81
+3f,0
+27,81
+3c,0
+29,81
+3a,0
+2b,81
+38,0
+2d,81
+36,0
+2f,81
+34,0
+30,81
+34,0
+31,81
+32,0
+33,81
+31,0
+33,81
+30,0
+35,81
+2e,0
+37,81
+2d,0
+37,81
+2d,0
+37,81
+2c,0
+39,81
+2b,0
+39,81
+2b,0
+39,81
+2a,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+28,0
+1e,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+48,0
+1c,81
+48,0
+1c,81
+48,0
+1c,81
+49,0
+1b,81
+49,0
+1b,81
+49,0
+1b,81
+4a,0
+1a,81
+4b,0
+19,81
+4b,0
+19,81
+4c,0
+18,81
+4c,0
+18,81
+4d,0
+17,81
+4e,0
+16,81
+4f,0
+15,81
+50,0
+14,81
+51,0
+13,81
+52,0
+12,81
+54,0
+10,81
+56,0
+e,81
+57,0
+d,81
+5a,0
+a,81
+5d,0
+7,81
+41a,0
+100 90 32
+802,0
+a3
+5c,0
+f,a3
+52,0
+15,a3
+4c,0
+1b,a3
+48,0
+1d,a3
+45,0
+21,a3
+41,0
+24,a3
+3f,0
+27,a3
+3c,0
+29,a3
+3a,0
+2b,a3
+38,0
+2d,a3
+36,0
+2f,a3
+34,0
+30,a3
+34,0
+31,a3
+32,0
+33,a3
+31,0
+33,a3
+30,0
+35,a3
+2e,0
+37,a3
+2d,0
+37,a3
+2d,0
+37,a3
+2c,0
+39,a3
+2b,0
+39,a3
+2b,0
+39,a3
+2a,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+28,0
+1e,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+48,0
+1c,a3
+48,0
+1c,a3
+48,0
+1c,a3
+49,0
+1b,a3
+49,0
+1b,a3
+49,0
+1b,a3
+4a,0
+1a,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4c,0
+18,a3
+4c,0
+18,a3
+4d,0
+17,a3
+4e,0
+16,a3
+4f,0
+15,a3
+50,0
+14,a3
+51,0
+13,a3
+52,0
+12,a3
+54,0
+10,a3
+56,0
+e,a3
+57,0
+d,a3
+5a,0
+a,a3
+5d,0
+7,a3
+41a,0
+100 90 32
+802,0
+ff
+5c,0
+f,ff
+52,0
+15,ff
+4c,0
+1b,ff
+48,0
+1d,ff
+45,0
+21,ff
+41,0
+24,ff
+3f,0
+27,ff
+3c,0
+29,ff
+3a,0
+2b,ff
+38,0
+2d,ff
+36,0
+2f,ff
+34,0
+30,ff
+34,0
+31,ff
+32,0
+33,ff
+31,0
+33,ff
+30,0
+35,ff
+2e,0
+37,ff
+2d,0
+37,ff
+2d,0
+37,ff
+2c,0
+39,ff
+2b,0
+39,ff
+2b,0
+39,ff
+2a,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+28,0
+1e,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+48,0
+1c,ff
+48,0
+1c,ff
+48,0
+1c,ff
+49,0
+1b,ff
+49,0
+1b,ff
+49,0
+1b,ff
+4a,0
+1a,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4c,0
+18,ff
+4c,0
+18,ff
+4d,0
+17,ff
+4e,0
+16,ff
+4f,0
+15,ff
+50,0
+14,ff
+51,0
+13,ff
+52,0
+12,ff
+54,0
+10,ff
+56,0
+e,ff
+57,0
+d,ff
+5a,0
+a,ff
+5d,0
+7,ff
+41a,0
+100 90 32
+802,0
+100
+5c,0
+f,100
+52,0
+15,100
+4c,0
+1b,100
+48,0
+1d,100
+45,0
+21,100
+41,0
+24,100
+3f,0
+27,100
+3c,0
+29,100
+3a,0
+2b,100
+38,0
+2d,100
+36,0
+2f,100
+34,0
+30,100
+34,0
+31,100
+32,0
+33,100
+31,0
+33,100
+30,0
+35,100
+2e,0
+37,100
+2d,0
+37,100
+2d,0
+37,100
+2c,0
+39,100
+2b,0
+39,100
+2b,0
+39,100
+2a,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+28,0
+1e,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+48,0
+1c,100
+48,0
+1c,100
+48,0
+1c,100
+49,0
+1b,100
+49,0
+1b,100
+49,0
+1b,100
+4a,0
+1a,100
+4b,0
+19,100
+4b,0
+19,100
+4c,0
+18,100
+4c,0
+18,100
+4d,0
+17,100
+4e,0
+16,100
+4f,0
+15,100
+50,0
+14,100
+51,0
+13,100
+52,0
+12,100
+54,0
+10,100
+56,0
+e,100
+57,0
+d,100
+5a,0
+a,100
+5d,0
+7,100
+41a,0
+100 90 32
+802,0
+12c
+5c,0
+f,12c
+52,0
+15,12c
+4c,0
+1b,12c
+48,0
+1d,12c
+45,0
+21,12c
+41,0
+24,12c
+3f,0
+27,12c
+3c,0
+29,12c
+3a,0
+2b,12c
+38,0
+2d,12c
+36,0
+2f,12c
+34,0
+30,12c
+34,0
+31,12c
+32,0
+33,12c
+31,0
+33,12c
+30,0
+35,12c
+2e,0
+37,12c
+2d,0
+37,12c
+2d,0
+37,12c
+2c,0
+39,12c
+2b,0
+39,12c
+2b,0
+39,12c
+2a,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+28,0
+1e,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+48,0
+1c,12c
+48,0
+1c,12c
+48,0
+1c,12c
+49,0
+1b,12c
+49,0
+1b,12c
+49,0
+1b,12c
+4a,0
+1a,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4c,0
+18,12c
+4c,0
+18,12c
+4d,0
+17,12c
+4e,0
+16,12c
+4f,0
+15,12c
+50,0
+14,12c
+51,0
+13,12c
+52,0
+12,12c
+54,0
+10,12c
+56,0
+e,12c
+57,0
+d,12c
+5a,0
+a,12c
+5d,0
+7,12c
+41a,0
+100 90 32
+802,0
+3e8
+5c,0
+f,3e8
+52,0
+15,3e8
+4c,0
+1b,3e8
+48,0
+1d,3e8
+45,0
+21,3e8
+41,0
+24,3e8
+3f,0
+27,3e8
+3c,0
+29,3e8
+3a,0
+2b,3e8
+38,0
+2d,3e8
+36,0
+2f,3e8
+34,0
+30,3e8
+34,0
+31,3e8
+32,0
+33,3e8
+31,0
+33,3e8
+30,0
+35,3e8
+2e,0
+37,3e8
+2d,0
+37,3e8
+2d,0
+37,3e8
+2c,0
+39,3e8
+2b,0
+39,3e8
+2b,0
+39,3e8
+2a,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+28,0
+1e,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+48,0
+1c,3e8
+48,0
+1c,3e8
+48,0
+1c,3e8
+49,0
+1b,3e8
+49,0
+1b,3e8
+49,0
+1b,3e8
+4a,0
+1a,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4c,0
+18,3e8
+4c,0
+18,3e8
+4d,0
+17,3e8
+4e,0
+16,3e8
+4f,0
+15,3e8
+50,0
+14,3e8
+51,0
+13,3e8
+52,0
+12,3e8
+54,0
+10,3e8
+56,0
+e,3e8
+57,0
+d,3e8
+5a,0
+a,3e8
+5d,0
+7,3e8
+41a,0
+100 90 32
+802,0
+111111
+5c,0
+f,111111
+52,0
+15,111111
+4c,0
+1b,111111
+48,0
+1d,111111
+45,0
+21,111111
+41,0
+24,111111
+3f,0
+27,111111
+3c,0
+29,111111
+3a,0
+2b,111111
+38,0
+2d,111111
+36,0
+2f,111111
+34,0
+30,111111
+34,0
+31,111111
+32,0
+33,111111
+31,0
+33,111111
+30,0
+35,111111
+2e,0
+37,111111
+2d,0
+37,111111
+2d,0
+37,111111
+2c,0
+39,111111
+2b,0
+39,111111
+2b,0
+39,111111
+2a,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+28,0
+1e,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+48,0
+1c,111111
+48,0
+1c,111111
+48,0
+1c,111111
+49,0
+1b,111111
+49,0
+1b,111111
+49,0
+1b,111111
+4a,0
+1a,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4c,0
+18,111111
+4c,0
+18,111111
+4d,0
+17,111111
+4e,0
+16,111111
+4f,0
+15,111111
+50,0
+14,111111
+51,0
+13,111111
+52,0
+12,111111
+54,0
+10,111111
+56,0
+e,111111
+57,0
+d,111111
+5a,0
+a,111111
+5d,0
+7,111111
+41a,0
+100 90 32
+802,0
+400200
+5c,0
+f,400200
+52,0
+15,400200
+4c,0
+1b,400200
+48,0
+1d,400200
+45,0
+21,400200
+41,0
+24,400200
+3f,0
+27,400200
+3c,0
+29,400200
+3a,0
+2b,400200
+38,0
+2d,400200
+36,0
+2f,400200
+34,0
+30,400200
+34,0
+31,400200
+32,0
+33,400200
+31,0
+33,400200
+30,0
+35,400200
+2e,0
+37,400200
+2d,0
+37,400200
+2d,0
+37,400200
+2c,0
+39,400200
+2b,0
+39,400200
+2b,0
+39,400200
+2a,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+28,0
+1e,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+48,0
+1c,400200
+48,0
+1c,400200
+48,0
+1c,400200
+49,0
+1b,400200
+49,0
+1b,400200
+49,0
+1b,400200
+4a,0
+1a,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4c,0
+18,400200
+4c,0
+18,400200
+4d,0
+17,400200
+4e,0
+16,400200
+4f,0
+15,400200
+50,0
+14,400200
+51,0
+13,400200
+52,0
+12,400200
+54,0
+10,400200
+56,0
+e,400200
+57,0
+d,400200
+5a,0
+a,400200
+5d,0
+7,400200
+41a,0
+100 90 32
+802,0
+777777
+5c,0
+f,777777
+52,0
+15,777777
+4c,0
+1b,777777
+48,0
+1d,777777
+45,0
+21,777777
+41,0
+24,777777
+3f,0
+27,777777
+3c,0
+29,777777
+3a,0
+2b,777777
+38,0
+2d,777777
+36,0
+2f,777777
+34,0
+30,777777
+34,0
+31,777777
+32,0
+33,777777
+31,0
+33,777777
+30,0
+35,777777
+2e,0
+37,777777
+2d,0
+37,777777
+2d,0
+37,777777
+2c,0
+39,777777
+2b,0
+39,777777
+2b,0
+39,777777
+2a,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+28,0
+1e,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+48,0
+1c,777777
+48,0
+1c,777777
+48,0
+1c,777777
+49,0
+1b,777777
+49,0
+1b,777777
+49,0
+1b,777777
+4a,0
+1a,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4c,0
+18,777777
+4c,0
+18,777777
+4d,0
+17,777777
+4e,0
+16,777777
+4f,0
+15,777777
+50,0
+14,777777
+51,0
+13,777777
+52,0
+12,777777
+54,0
+10,777777
+56,0
+e,777777
+57,0
+d,777777
+5a,0
+a,777777
+5d,0
+7,777777
+41a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarc/a37.dat b/xc/test/xsuite/xtest/tset/CH06/fllarc/a37.dat
new file mode 100644
index 000000000..8708c2224
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarc/a37.dat
@@ -0,0 +1,4151 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+802,0
+1
+5c,0
+f,1
+52,0
+15,1
+4c,0
+1b,1
+48,0
+1d,1
+45,0
+21,1
+41,0
+24,1
+3f,0
+27,1
+3c,0
+29,1
+3a,0
+2b,1
+38,0
+2d,1
+36,0
+2f,1
+34,0
+30,1
+34,0
+31,1
+32,0
+33,1
+31,0
+33,1
+30,0
+35,1
+2e,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2c,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2a,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+28,0
+1e,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+49,0
+1b,1
+49,0
+1b,1
+49,0
+1b,1
+4a,0
+1a,1
+4b,0
+19,1
+4b,0
+19,1
+4c,0
+18,1
+4c,0
+18,1
+4d,0
+17,1
+4e,0
+16,1
+4f,0
+15,1
+50,0
+14,1
+51,0
+13,1
+52,0
+12,1
+54,0
+10,1
+56,0
+e,1
+57,0
+d,1
+5a,0
+a,1
+5d,0
+7,1
+41a,0
+100 90 32
+802,0
+2
+5c,0
+f,2
+52,0
+15,2
+4c,0
+1b,2
+48,0
+1d,2
+45,0
+21,2
+41,0
+24,2
+3f,0
+27,2
+3c,0
+29,2
+3a,0
+2b,2
+38,0
+2d,2
+36,0
+2f,2
+34,0
+30,2
+34,0
+31,2
+32,0
+33,2
+31,0
+33,2
+30,0
+35,2
+2e,0
+37,2
+2d,0
+37,2
+2d,0
+37,2
+2c,0
+39,2
+2b,0
+39,2
+2b,0
+39,2
+2a,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+28,0
+1e,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+48,0
+1c,2
+48,0
+1c,2
+48,0
+1c,2
+49,0
+1b,2
+49,0
+1b,2
+49,0
+1b,2
+4a,0
+1a,2
+4b,0
+19,2
+4b,0
+19,2
+4c,0
+18,2
+4c,0
+18,2
+4d,0
+17,2
+4e,0
+16,2
+4f,0
+15,2
+50,0
+14,2
+51,0
+13,2
+52,0
+12,2
+54,0
+10,2
+56,0
+e,2
+57,0
+d,2
+5a,0
+a,2
+5d,0
+7,2
+41a,0
+100 90 32
+802,0
+3
+5c,0
+f,3
+52,0
+15,3
+4c,0
+1b,3
+48,0
+1d,3
+45,0
+21,3
+41,0
+24,3
+3f,0
+27,3
+3c,0
+29,3
+3a,0
+2b,3
+38,0
+2d,3
+36,0
+2f,3
+34,0
+30,3
+34,0
+31,3
+32,0
+33,3
+31,0
+33,3
+30,0
+35,3
+2e,0
+37,3
+2d,0
+37,3
+2d,0
+37,3
+2c,0
+39,3
+2b,0
+39,3
+2b,0
+39,3
+2a,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+28,0
+1e,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+48,0
+1c,3
+48,0
+1c,3
+48,0
+1c,3
+49,0
+1b,3
+49,0
+1b,3
+49,0
+1b,3
+4a,0
+1a,3
+4b,0
+19,3
+4b,0
+19,3
+4c,0
+18,3
+4c,0
+18,3
+4d,0
+17,3
+4e,0
+16,3
+4f,0
+15,3
+50,0
+14,3
+51,0
+13,3
+52,0
+12,3
+54,0
+10,3
+56,0
+e,3
+57,0
+d,3
+5a,0
+a,3
+5d,0
+7,3
+41a,0
+100 90 32
+802,0
+4
+5c,0
+f,4
+52,0
+15,4
+4c,0
+1b,4
+48,0
+1d,4
+45,0
+21,4
+41,0
+24,4
+3f,0
+27,4
+3c,0
+29,4
+3a,0
+2b,4
+38,0
+2d,4
+36,0
+2f,4
+34,0
+30,4
+34,0
+31,4
+32,0
+33,4
+31,0
+33,4
+30,0
+35,4
+2e,0
+37,4
+2d,0
+37,4
+2d,0
+37,4
+2c,0
+39,4
+2b,0
+39,4
+2b,0
+39,4
+2a,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+28,0
+1e,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+48,0
+1c,4
+48,0
+1c,4
+48,0
+1c,4
+49,0
+1b,4
+49,0
+1b,4
+49,0
+1b,4
+4a,0
+1a,4
+4b,0
+19,4
+4b,0
+19,4
+4c,0
+18,4
+4c,0
+18,4
+4d,0
+17,4
+4e,0
+16,4
+4f,0
+15,4
+50,0
+14,4
+51,0
+13,4
+52,0
+12,4
+54,0
+10,4
+56,0
+e,4
+57,0
+d,4
+5a,0
+a,4
+5d,0
+7,4
+41a,0
+100 90 32
+802,0
+6
+5c,0
+f,6
+52,0
+15,6
+4c,0
+1b,6
+48,0
+1d,6
+45,0
+21,6
+41,0
+24,6
+3f,0
+27,6
+3c,0
+29,6
+3a,0
+2b,6
+38,0
+2d,6
+36,0
+2f,6
+34,0
+30,6
+34,0
+31,6
+32,0
+33,6
+31,0
+33,6
+30,0
+35,6
+2e,0
+37,6
+2d,0
+37,6
+2d,0
+37,6
+2c,0
+39,6
+2b,0
+39,6
+2b,0
+39,6
+2a,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+28,0
+1e,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+48,0
+1c,6
+48,0
+1c,6
+48,0
+1c,6
+49,0
+1b,6
+49,0
+1b,6
+49,0
+1b,6
+4a,0
+1a,6
+4b,0
+19,6
+4b,0
+19,6
+4c,0
+18,6
+4c,0
+18,6
+4d,0
+17,6
+4e,0
+16,6
+4f,0
+15,6
+50,0
+14,6
+51,0
+13,6
+52,0
+12,6
+54,0
+10,6
+56,0
+e,6
+57,0
+d,6
+5a,0
+a,6
+5d,0
+7,6
+41a,0
+100 90 32
+802,0
+7
+5c,0
+f,7
+52,0
+15,7
+4c,0
+1b,7
+48,0
+1d,7
+45,0
+21,7
+41,0
+24,7
+3f,0
+27,7
+3c,0
+29,7
+3a,0
+2b,7
+38,0
+2d,7
+36,0
+2f,7
+34,0
+30,7
+34,0
+31,7
+32,0
+33,7
+31,0
+33,7
+30,0
+35,7
+2e,0
+37,7
+2d,0
+37,7
+2d,0
+37,7
+2c,0
+39,7
+2b,0
+39,7
+2b,0
+39,7
+2a,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+28,0
+1e,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+48,0
+1c,7
+48,0
+1c,7
+48,0
+1c,7
+49,0
+1b,7
+49,0
+1b,7
+49,0
+1b,7
+4a,0
+1a,7
+4b,0
+19,7
+4b,0
+19,7
+4c,0
+18,7
+4c,0
+18,7
+4d,0
+17,7
+4e,0
+16,7
+4f,0
+15,7
+50,0
+14,7
+51,0
+13,7
+52,0
+12,7
+54,0
+10,7
+56,0
+e,7
+57,0
+d,7
+5a,0
+a,7
+5d,0
+7,7
+41a,0
+100 90 32
+802,0
+10
+5c,0
+f,10
+52,0
+15,10
+4c,0
+1b,10
+48,0
+1d,10
+45,0
+21,10
+41,0
+24,10
+3f,0
+27,10
+3c,0
+29,10
+3a,0
+2b,10
+38,0
+2d,10
+36,0
+2f,10
+34,0
+30,10
+34,0
+31,10
+32,0
+33,10
+31,0
+33,10
+30,0
+35,10
+2e,0
+37,10
+2d,0
+37,10
+2d,0
+37,10
+2c,0
+39,10
+2b,0
+39,10
+2b,0
+39,10
+2a,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+28,0
+1e,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+48,0
+1c,10
+48,0
+1c,10
+48,0
+1c,10
+49,0
+1b,10
+49,0
+1b,10
+49,0
+1b,10
+4a,0
+1a,10
+4b,0
+19,10
+4b,0
+19,10
+4c,0
+18,10
+4c,0
+18,10
+4d,0
+17,10
+4e,0
+16,10
+4f,0
+15,10
+50,0
+14,10
+51,0
+13,10
+52,0
+12,10
+54,0
+10,10
+56,0
+e,10
+57,0
+d,10
+5a,0
+a,10
+5d,0
+7,10
+41a,0
+100 90 32
+802,0
+33
+5c,0
+f,33
+52,0
+15,33
+4c,0
+1b,33
+48,0
+1d,33
+45,0
+21,33
+41,0
+24,33
+3f,0
+27,33
+3c,0
+29,33
+3a,0
+2b,33
+38,0
+2d,33
+36,0
+2f,33
+34,0
+30,33
+34,0
+31,33
+32,0
+33,33
+31,0
+33,33
+30,0
+35,33
+2e,0
+37,33
+2d,0
+37,33
+2d,0
+37,33
+2c,0
+39,33
+2b,0
+39,33
+2b,0
+39,33
+2a,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+28,0
+1e,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+48,0
+1c,33
+48,0
+1c,33
+48,0
+1c,33
+49,0
+1b,33
+49,0
+1b,33
+49,0
+1b,33
+4a,0
+1a,33
+4b,0
+19,33
+4b,0
+19,33
+4c,0
+18,33
+4c,0
+18,33
+4d,0
+17,33
+4e,0
+16,33
+4f,0
+15,33
+50,0
+14,33
+51,0
+13,33
+52,0
+12,33
+54,0
+10,33
+56,0
+e,33
+57,0
+d,33
+5a,0
+a,33
+5d,0
+7,33
+41a,0
+100 90 32
+802,0
+81
+5c,0
+f,81
+52,0
+15,81
+4c,0
+1b,81
+48,0
+1d,81
+45,0
+21,81
+41,0
+24,81
+3f,0
+27,81
+3c,0
+29,81
+3a,0
+2b,81
+38,0
+2d,81
+36,0
+2f,81
+34,0
+30,81
+34,0
+31,81
+32,0
+33,81
+31,0
+33,81
+30,0
+35,81
+2e,0
+37,81
+2d,0
+37,81
+2d,0
+37,81
+2c,0
+39,81
+2b,0
+39,81
+2b,0
+39,81
+2a,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+28,0
+1e,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+48,0
+1c,81
+48,0
+1c,81
+48,0
+1c,81
+49,0
+1b,81
+49,0
+1b,81
+49,0
+1b,81
+4a,0
+1a,81
+4b,0
+19,81
+4b,0
+19,81
+4c,0
+18,81
+4c,0
+18,81
+4d,0
+17,81
+4e,0
+16,81
+4f,0
+15,81
+50,0
+14,81
+51,0
+13,81
+52,0
+12,81
+54,0
+10,81
+56,0
+e,81
+57,0
+d,81
+5a,0
+a,81
+5d,0
+7,81
+41a,0
+100 90 32
+802,0
+a3
+5c,0
+f,a3
+52,0
+15,a3
+4c,0
+1b,a3
+48,0
+1d,a3
+45,0
+21,a3
+41,0
+24,a3
+3f,0
+27,a3
+3c,0
+29,a3
+3a,0
+2b,a3
+38,0
+2d,a3
+36,0
+2f,a3
+34,0
+30,a3
+34,0
+31,a3
+32,0
+33,a3
+31,0
+33,a3
+30,0
+35,a3
+2e,0
+37,a3
+2d,0
+37,a3
+2d,0
+37,a3
+2c,0
+39,a3
+2b,0
+39,a3
+2b,0
+39,a3
+2a,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+28,0
+1e,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+48,0
+1c,a3
+48,0
+1c,a3
+48,0
+1c,a3
+49,0
+1b,a3
+49,0
+1b,a3
+49,0
+1b,a3
+4a,0
+1a,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4c,0
+18,a3
+4c,0
+18,a3
+4d,0
+17,a3
+4e,0
+16,a3
+4f,0
+15,a3
+50,0
+14,a3
+51,0
+13,a3
+52,0
+12,a3
+54,0
+10,a3
+56,0
+e,a3
+57,0
+d,a3
+5a,0
+a,a3
+5d,0
+7,a3
+41a,0
+100 90 32
+802,0
+ff
+5c,0
+f,ff
+52,0
+15,ff
+4c,0
+1b,ff
+48,0
+1d,ff
+45,0
+21,ff
+41,0
+24,ff
+3f,0
+27,ff
+3c,0
+29,ff
+3a,0
+2b,ff
+38,0
+2d,ff
+36,0
+2f,ff
+34,0
+30,ff
+34,0
+31,ff
+32,0
+33,ff
+31,0
+33,ff
+30,0
+35,ff
+2e,0
+37,ff
+2d,0
+37,ff
+2d,0
+37,ff
+2c,0
+39,ff
+2b,0
+39,ff
+2b,0
+39,ff
+2a,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+28,0
+1e,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+48,0
+1c,ff
+48,0
+1c,ff
+48,0
+1c,ff
+49,0
+1b,ff
+49,0
+1b,ff
+49,0
+1b,ff
+4a,0
+1a,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4c,0
+18,ff
+4c,0
+18,ff
+4d,0
+17,ff
+4e,0
+16,ff
+4f,0
+15,ff
+50,0
+14,ff
+51,0
+13,ff
+52,0
+12,ff
+54,0
+10,ff
+56,0
+e,ff
+57,0
+d,ff
+5a,0
+a,ff
+5d,0
+7,ff
+41a,0
+100 90 32
+802,0
+100
+5c,0
+f,100
+52,0
+15,100
+4c,0
+1b,100
+48,0
+1d,100
+45,0
+21,100
+41,0
+24,100
+3f,0
+27,100
+3c,0
+29,100
+3a,0
+2b,100
+38,0
+2d,100
+36,0
+2f,100
+34,0
+30,100
+34,0
+31,100
+32,0
+33,100
+31,0
+33,100
+30,0
+35,100
+2e,0
+37,100
+2d,0
+37,100
+2d,0
+37,100
+2c,0
+39,100
+2b,0
+39,100
+2b,0
+39,100
+2a,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+28,0
+1e,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+48,0
+1c,100
+48,0
+1c,100
+48,0
+1c,100
+49,0
+1b,100
+49,0
+1b,100
+49,0
+1b,100
+4a,0
+1a,100
+4b,0
+19,100
+4b,0
+19,100
+4c,0
+18,100
+4c,0
+18,100
+4d,0
+17,100
+4e,0
+16,100
+4f,0
+15,100
+50,0
+14,100
+51,0
+13,100
+52,0
+12,100
+54,0
+10,100
+56,0
+e,100
+57,0
+d,100
+5a,0
+a,100
+5d,0
+7,100
+41a,0
+100 90 32
+802,0
+12c
+5c,0
+f,12c
+52,0
+15,12c
+4c,0
+1b,12c
+48,0
+1d,12c
+45,0
+21,12c
+41,0
+24,12c
+3f,0
+27,12c
+3c,0
+29,12c
+3a,0
+2b,12c
+38,0
+2d,12c
+36,0
+2f,12c
+34,0
+30,12c
+34,0
+31,12c
+32,0
+33,12c
+31,0
+33,12c
+30,0
+35,12c
+2e,0
+37,12c
+2d,0
+37,12c
+2d,0
+37,12c
+2c,0
+39,12c
+2b,0
+39,12c
+2b,0
+39,12c
+2a,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+28,0
+1e,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+48,0
+1c,12c
+48,0
+1c,12c
+48,0
+1c,12c
+49,0
+1b,12c
+49,0
+1b,12c
+49,0
+1b,12c
+4a,0
+1a,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4c,0
+18,12c
+4c,0
+18,12c
+4d,0
+17,12c
+4e,0
+16,12c
+4f,0
+15,12c
+50,0
+14,12c
+51,0
+13,12c
+52,0
+12,12c
+54,0
+10,12c
+56,0
+e,12c
+57,0
+d,12c
+5a,0
+a,12c
+5d,0
+7,12c
+41a,0
+100 90 32
+802,0
+3e8
+5c,0
+f,3e8
+52,0
+15,3e8
+4c,0
+1b,3e8
+48,0
+1d,3e8
+45,0
+21,3e8
+41,0
+24,3e8
+3f,0
+27,3e8
+3c,0
+29,3e8
+3a,0
+2b,3e8
+38,0
+2d,3e8
+36,0
+2f,3e8
+34,0
+30,3e8
+34,0
+31,3e8
+32,0
+33,3e8
+31,0
+33,3e8
+30,0
+35,3e8
+2e,0
+37,3e8
+2d,0
+37,3e8
+2d,0
+37,3e8
+2c,0
+39,3e8
+2b,0
+39,3e8
+2b,0
+39,3e8
+2a,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+28,0
+1e,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+48,0
+1c,3e8
+48,0
+1c,3e8
+48,0
+1c,3e8
+49,0
+1b,3e8
+49,0
+1b,3e8
+49,0
+1b,3e8
+4a,0
+1a,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4c,0
+18,3e8
+4c,0
+18,3e8
+4d,0
+17,3e8
+4e,0
+16,3e8
+4f,0
+15,3e8
+50,0
+14,3e8
+51,0
+13,3e8
+52,0
+12,3e8
+54,0
+10,3e8
+56,0
+e,3e8
+57,0
+d,3e8
+5a,0
+a,3e8
+5d,0
+7,3e8
+41a,0
+100 90 32
+802,0
+111111
+5c,0
+f,111111
+52,0
+15,111111
+4c,0
+1b,111111
+48,0
+1d,111111
+45,0
+21,111111
+41,0
+24,111111
+3f,0
+27,111111
+3c,0
+29,111111
+3a,0
+2b,111111
+38,0
+2d,111111
+36,0
+2f,111111
+34,0
+30,111111
+34,0
+31,111111
+32,0
+33,111111
+31,0
+33,111111
+30,0
+35,111111
+2e,0
+37,111111
+2d,0
+37,111111
+2d,0
+37,111111
+2c,0
+39,111111
+2b,0
+39,111111
+2b,0
+39,111111
+2a,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+28,0
+1e,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+48,0
+1c,111111
+48,0
+1c,111111
+48,0
+1c,111111
+49,0
+1b,111111
+49,0
+1b,111111
+49,0
+1b,111111
+4a,0
+1a,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4c,0
+18,111111
+4c,0
+18,111111
+4d,0
+17,111111
+4e,0
+16,111111
+4f,0
+15,111111
+50,0
+14,111111
+51,0
+13,111111
+52,0
+12,111111
+54,0
+10,111111
+56,0
+e,111111
+57,0
+d,111111
+5a,0
+a,111111
+5d,0
+7,111111
+41a,0
+100 90 32
+802,0
+400200
+5c,0
+f,400200
+52,0
+15,400200
+4c,0
+1b,400200
+48,0
+1d,400200
+45,0
+21,400200
+41,0
+24,400200
+3f,0
+27,400200
+3c,0
+29,400200
+3a,0
+2b,400200
+38,0
+2d,400200
+36,0
+2f,400200
+34,0
+30,400200
+34,0
+31,400200
+32,0
+33,400200
+31,0
+33,400200
+30,0
+35,400200
+2e,0
+37,400200
+2d,0
+37,400200
+2d,0
+37,400200
+2c,0
+39,400200
+2b,0
+39,400200
+2b,0
+39,400200
+2a,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+28,0
+1e,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+48,0
+1c,400200
+48,0
+1c,400200
+48,0
+1c,400200
+49,0
+1b,400200
+49,0
+1b,400200
+49,0
+1b,400200
+4a,0
+1a,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4c,0
+18,400200
+4c,0
+18,400200
+4d,0
+17,400200
+4e,0
+16,400200
+4f,0
+15,400200
+50,0
+14,400200
+51,0
+13,400200
+52,0
+12,400200
+54,0
+10,400200
+56,0
+e,400200
+57,0
+d,400200
+5a,0
+a,400200
+5d,0
+7,400200
+41a,0
+100 90 32
+802,0
+777777
+5c,0
+f,777777
+52,0
+15,777777
+4c,0
+1b,777777
+48,0
+1d,777777
+45,0
+21,777777
+41,0
+24,777777
+3f,0
+27,777777
+3c,0
+29,777777
+3a,0
+2b,777777
+38,0
+2d,777777
+36,0
+2f,777777
+34,0
+30,777777
+34,0
+31,777777
+32,0
+33,777777
+31,0
+33,777777
+30,0
+35,777777
+2e,0
+37,777777
+2d,0
+37,777777
+2d,0
+37,777777
+2c,0
+39,777777
+2b,0
+39,777777
+2b,0
+39,777777
+2a,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+28,0
+1e,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+48,0
+1c,777777
+48,0
+1c,777777
+48,0
+1c,777777
+49,0
+1b,777777
+49,0
+1b,777777
+49,0
+1b,777777
+4a,0
+1a,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4c,0
+18,777777
+4c,0
+18,777777
+4d,0
+17,777777
+4e,0
+16,777777
+4f,0
+15,777777
+50,0
+14,777777
+51,0
+13,777777
+52,0
+12,777777
+54,0
+10,777777
+56,0
+e,777777
+57,0
+d,777777
+5a,0
+a,777777
+5d,0
+7,777777
+41a,0
+100 90 32
+802,0
+1
+5c,0
+f,1
+52,0
+15,1
+4c,0
+1b,1
+48,0
+1d,1
+45,0
+21,1
+41,0
+24,1
+3f,0
+27,1
+3c,0
+29,1
+3a,0
+2b,1
+38,0
+2d,1
+36,0
+2f,1
+34,0
+30,1
+34,0
+31,1
+32,0
+33,1
+31,0
+33,1
+30,0
+35,1
+2e,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2c,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2a,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+28,0
+1e,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+48,0
+1c,1
+48,0
+1c,1
+48,0
+1c,1
+49,0
+1b,1
+49,0
+1b,1
+49,0
+1b,1
+4a,0
+1a,1
+4b,0
+19,1
+4b,0
+19,1
+4c,0
+18,1
+4c,0
+18,1
+4d,0
+17,1
+4e,0
+16,1
+4f,0
+15,1
+50,0
+14,1
+51,0
+13,1
+52,0
+12,1
+54,0
+10,1
+56,0
+e,1
+57,0
+d,1
+5a,0
+a,1
+5d,0
+7,1
+41a,0
+100 90 32
+802,0
+2
+5c,0
+f,2
+52,0
+15,2
+4c,0
+1b,2
+48,0
+1d,2
+45,0
+21,2
+41,0
+24,2
+3f,0
+27,2
+3c,0
+29,2
+3a,0
+2b,2
+38,0
+2d,2
+36,0
+2f,2
+34,0
+30,2
+34,0
+31,2
+32,0
+33,2
+31,0
+33,2
+30,0
+35,2
+2e,0
+37,2
+2d,0
+37,2
+2d,0
+37,2
+2c,0
+39,2
+2b,0
+39,2
+2b,0
+39,2
+2a,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+28,0
+1e,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+48,0
+1c,2
+48,0
+1c,2
+48,0
+1c,2
+49,0
+1b,2
+49,0
+1b,2
+49,0
+1b,2
+4a,0
+1a,2
+4b,0
+19,2
+4b,0
+19,2
+4c,0
+18,2
+4c,0
+18,2
+4d,0
+17,2
+4e,0
+16,2
+4f,0
+15,2
+50,0
+14,2
+51,0
+13,2
+52,0
+12,2
+54,0
+10,2
+56,0
+e,2
+57,0
+d,2
+5a,0
+a,2
+5d,0
+7,2
+41a,0
+100 90 32
+802,0
+3
+5c,0
+f,3
+52,0
+15,3
+4c,0
+1b,3
+48,0
+1d,3
+45,0
+21,3
+41,0
+24,3
+3f,0
+27,3
+3c,0
+29,3
+3a,0
+2b,3
+38,0
+2d,3
+36,0
+2f,3
+34,0
+30,3
+34,0
+31,3
+32,0
+33,3
+31,0
+33,3
+30,0
+35,3
+2e,0
+37,3
+2d,0
+37,3
+2d,0
+37,3
+2c,0
+39,3
+2b,0
+39,3
+2b,0
+39,3
+2a,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+28,0
+1e,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+48,0
+1c,3
+48,0
+1c,3
+48,0
+1c,3
+49,0
+1b,3
+49,0
+1b,3
+49,0
+1b,3
+4a,0
+1a,3
+4b,0
+19,3
+4b,0
+19,3
+4c,0
+18,3
+4c,0
+18,3
+4d,0
+17,3
+4e,0
+16,3
+4f,0
+15,3
+50,0
+14,3
+51,0
+13,3
+52,0
+12,3
+54,0
+10,3
+56,0
+e,3
+57,0
+d,3
+5a,0
+a,3
+5d,0
+7,3
+41a,0
+100 90 32
+802,0
+4
+5c,0
+f,4
+52,0
+15,4
+4c,0
+1b,4
+48,0
+1d,4
+45,0
+21,4
+41,0
+24,4
+3f,0
+27,4
+3c,0
+29,4
+3a,0
+2b,4
+38,0
+2d,4
+36,0
+2f,4
+34,0
+30,4
+34,0
+31,4
+32,0
+33,4
+31,0
+33,4
+30,0
+35,4
+2e,0
+37,4
+2d,0
+37,4
+2d,0
+37,4
+2c,0
+39,4
+2b,0
+39,4
+2b,0
+39,4
+2a,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+28,0
+1e,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+48,0
+1c,4
+48,0
+1c,4
+48,0
+1c,4
+49,0
+1b,4
+49,0
+1b,4
+49,0
+1b,4
+4a,0
+1a,4
+4b,0
+19,4
+4b,0
+19,4
+4c,0
+18,4
+4c,0
+18,4
+4d,0
+17,4
+4e,0
+16,4
+4f,0
+15,4
+50,0
+14,4
+51,0
+13,4
+52,0
+12,4
+54,0
+10,4
+56,0
+e,4
+57,0
+d,4
+5a,0
+a,4
+5d,0
+7,4
+41a,0
+100 90 32
+802,0
+6
+5c,0
+f,6
+52,0
+15,6
+4c,0
+1b,6
+48,0
+1d,6
+45,0
+21,6
+41,0
+24,6
+3f,0
+27,6
+3c,0
+29,6
+3a,0
+2b,6
+38,0
+2d,6
+36,0
+2f,6
+34,0
+30,6
+34,0
+31,6
+32,0
+33,6
+31,0
+33,6
+30,0
+35,6
+2e,0
+37,6
+2d,0
+37,6
+2d,0
+37,6
+2c,0
+39,6
+2b,0
+39,6
+2b,0
+39,6
+2a,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+28,0
+1e,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+48,0
+1c,6
+48,0
+1c,6
+48,0
+1c,6
+49,0
+1b,6
+49,0
+1b,6
+49,0
+1b,6
+4a,0
+1a,6
+4b,0
+19,6
+4b,0
+19,6
+4c,0
+18,6
+4c,0
+18,6
+4d,0
+17,6
+4e,0
+16,6
+4f,0
+15,6
+50,0
+14,6
+51,0
+13,6
+52,0
+12,6
+54,0
+10,6
+56,0
+e,6
+57,0
+d,6
+5a,0
+a,6
+5d,0
+7,6
+41a,0
+100 90 32
+802,0
+7
+5c,0
+f,7
+52,0
+15,7
+4c,0
+1b,7
+48,0
+1d,7
+45,0
+21,7
+41,0
+24,7
+3f,0
+27,7
+3c,0
+29,7
+3a,0
+2b,7
+38,0
+2d,7
+36,0
+2f,7
+34,0
+30,7
+34,0
+31,7
+32,0
+33,7
+31,0
+33,7
+30,0
+35,7
+2e,0
+37,7
+2d,0
+37,7
+2d,0
+37,7
+2c,0
+39,7
+2b,0
+39,7
+2b,0
+39,7
+2a,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+28,0
+1e,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+48,0
+1c,7
+48,0
+1c,7
+48,0
+1c,7
+49,0
+1b,7
+49,0
+1b,7
+49,0
+1b,7
+4a,0
+1a,7
+4b,0
+19,7
+4b,0
+19,7
+4c,0
+18,7
+4c,0
+18,7
+4d,0
+17,7
+4e,0
+16,7
+4f,0
+15,7
+50,0
+14,7
+51,0
+13,7
+52,0
+12,7
+54,0
+10,7
+56,0
+e,7
+57,0
+d,7
+5a,0
+a,7
+5d,0
+7,7
+41a,0
+100 90 32
+802,0
+10
+5c,0
+f,10
+52,0
+15,10
+4c,0
+1b,10
+48,0
+1d,10
+45,0
+21,10
+41,0
+24,10
+3f,0
+27,10
+3c,0
+29,10
+3a,0
+2b,10
+38,0
+2d,10
+36,0
+2f,10
+34,0
+30,10
+34,0
+31,10
+32,0
+33,10
+31,0
+33,10
+30,0
+35,10
+2e,0
+37,10
+2d,0
+37,10
+2d,0
+37,10
+2c,0
+39,10
+2b,0
+39,10
+2b,0
+39,10
+2a,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+28,0
+1e,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+48,0
+1c,10
+48,0
+1c,10
+48,0
+1c,10
+49,0
+1b,10
+49,0
+1b,10
+49,0
+1b,10
+4a,0
+1a,10
+4b,0
+19,10
+4b,0
+19,10
+4c,0
+18,10
+4c,0
+18,10
+4d,0
+17,10
+4e,0
+16,10
+4f,0
+15,10
+50,0
+14,10
+51,0
+13,10
+52,0
+12,10
+54,0
+10,10
+56,0
+e,10
+57,0
+d,10
+5a,0
+a,10
+5d,0
+7,10
+41a,0
+100 90 32
+802,0
+33
+5c,0
+f,33
+52,0
+15,33
+4c,0
+1b,33
+48,0
+1d,33
+45,0
+21,33
+41,0
+24,33
+3f,0
+27,33
+3c,0
+29,33
+3a,0
+2b,33
+38,0
+2d,33
+36,0
+2f,33
+34,0
+30,33
+34,0
+31,33
+32,0
+33,33
+31,0
+33,33
+30,0
+35,33
+2e,0
+37,33
+2d,0
+37,33
+2d,0
+37,33
+2c,0
+39,33
+2b,0
+39,33
+2b,0
+39,33
+2a,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+28,0
+1e,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+48,0
+1c,33
+48,0
+1c,33
+48,0
+1c,33
+49,0
+1b,33
+49,0
+1b,33
+49,0
+1b,33
+4a,0
+1a,33
+4b,0
+19,33
+4b,0
+19,33
+4c,0
+18,33
+4c,0
+18,33
+4d,0
+17,33
+4e,0
+16,33
+4f,0
+15,33
+50,0
+14,33
+51,0
+13,33
+52,0
+12,33
+54,0
+10,33
+56,0
+e,33
+57,0
+d,33
+5a,0
+a,33
+5d,0
+7,33
+41a,0
+100 90 32
+802,0
+81
+5c,0
+f,81
+52,0
+15,81
+4c,0
+1b,81
+48,0
+1d,81
+45,0
+21,81
+41,0
+24,81
+3f,0
+27,81
+3c,0
+29,81
+3a,0
+2b,81
+38,0
+2d,81
+36,0
+2f,81
+34,0
+30,81
+34,0
+31,81
+32,0
+33,81
+31,0
+33,81
+30,0
+35,81
+2e,0
+37,81
+2d,0
+37,81
+2d,0
+37,81
+2c,0
+39,81
+2b,0
+39,81
+2b,0
+39,81
+2a,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+28,0
+1e,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+48,0
+1c,81
+48,0
+1c,81
+48,0
+1c,81
+49,0
+1b,81
+49,0
+1b,81
+49,0
+1b,81
+4a,0
+1a,81
+4b,0
+19,81
+4b,0
+19,81
+4c,0
+18,81
+4c,0
+18,81
+4d,0
+17,81
+4e,0
+16,81
+4f,0
+15,81
+50,0
+14,81
+51,0
+13,81
+52,0
+12,81
+54,0
+10,81
+56,0
+e,81
+57,0
+d,81
+5a,0
+a,81
+5d,0
+7,81
+41a,0
+100 90 32
+802,0
+a3
+5c,0
+f,a3
+52,0
+15,a3
+4c,0
+1b,a3
+48,0
+1d,a3
+45,0
+21,a3
+41,0
+24,a3
+3f,0
+27,a3
+3c,0
+29,a3
+3a,0
+2b,a3
+38,0
+2d,a3
+36,0
+2f,a3
+34,0
+30,a3
+34,0
+31,a3
+32,0
+33,a3
+31,0
+33,a3
+30,0
+35,a3
+2e,0
+37,a3
+2d,0
+37,a3
+2d,0
+37,a3
+2c,0
+39,a3
+2b,0
+39,a3
+2b,0
+39,a3
+2a,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+28,0
+1e,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+48,0
+1c,a3
+48,0
+1c,a3
+48,0
+1c,a3
+49,0
+1b,a3
+49,0
+1b,a3
+49,0
+1b,a3
+4a,0
+1a,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4c,0
+18,a3
+4c,0
+18,a3
+4d,0
+17,a3
+4e,0
+16,a3
+4f,0
+15,a3
+50,0
+14,a3
+51,0
+13,a3
+52,0
+12,a3
+54,0
+10,a3
+56,0
+e,a3
+57,0
+d,a3
+5a,0
+a,a3
+5d,0
+7,a3
+41a,0
+100 90 32
+802,0
+ff
+5c,0
+f,ff
+52,0
+15,ff
+4c,0
+1b,ff
+48,0
+1d,ff
+45,0
+21,ff
+41,0
+24,ff
+3f,0
+27,ff
+3c,0
+29,ff
+3a,0
+2b,ff
+38,0
+2d,ff
+36,0
+2f,ff
+34,0
+30,ff
+34,0
+31,ff
+32,0
+33,ff
+31,0
+33,ff
+30,0
+35,ff
+2e,0
+37,ff
+2d,0
+37,ff
+2d,0
+37,ff
+2c,0
+39,ff
+2b,0
+39,ff
+2b,0
+39,ff
+2a,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+28,0
+1e,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+48,0
+1c,ff
+48,0
+1c,ff
+48,0
+1c,ff
+49,0
+1b,ff
+49,0
+1b,ff
+49,0
+1b,ff
+4a,0
+1a,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4c,0
+18,ff
+4c,0
+18,ff
+4d,0
+17,ff
+4e,0
+16,ff
+4f,0
+15,ff
+50,0
+14,ff
+51,0
+13,ff
+52,0
+12,ff
+54,0
+10,ff
+56,0
+e,ff
+57,0
+d,ff
+5a,0
+a,ff
+5d,0
+7,ff
+41a,0
+100 90 32
+802,0
+100
+5c,0
+f,100
+52,0
+15,100
+4c,0
+1b,100
+48,0
+1d,100
+45,0
+21,100
+41,0
+24,100
+3f,0
+27,100
+3c,0
+29,100
+3a,0
+2b,100
+38,0
+2d,100
+36,0
+2f,100
+34,0
+30,100
+34,0
+31,100
+32,0
+33,100
+31,0
+33,100
+30,0
+35,100
+2e,0
+37,100
+2d,0
+37,100
+2d,0
+37,100
+2c,0
+39,100
+2b,0
+39,100
+2b,0
+39,100
+2a,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+28,0
+1e,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+48,0
+1c,100
+48,0
+1c,100
+48,0
+1c,100
+49,0
+1b,100
+49,0
+1b,100
+49,0
+1b,100
+4a,0
+1a,100
+4b,0
+19,100
+4b,0
+19,100
+4c,0
+18,100
+4c,0
+18,100
+4d,0
+17,100
+4e,0
+16,100
+4f,0
+15,100
+50,0
+14,100
+51,0
+13,100
+52,0
+12,100
+54,0
+10,100
+56,0
+e,100
+57,0
+d,100
+5a,0
+a,100
+5d,0
+7,100
+41a,0
+100 90 32
+802,0
+12c
+5c,0
+f,12c
+52,0
+15,12c
+4c,0
+1b,12c
+48,0
+1d,12c
+45,0
+21,12c
+41,0
+24,12c
+3f,0
+27,12c
+3c,0
+29,12c
+3a,0
+2b,12c
+38,0
+2d,12c
+36,0
+2f,12c
+34,0
+30,12c
+34,0
+31,12c
+32,0
+33,12c
+31,0
+33,12c
+30,0
+35,12c
+2e,0
+37,12c
+2d,0
+37,12c
+2d,0
+37,12c
+2c,0
+39,12c
+2b,0
+39,12c
+2b,0
+39,12c
+2a,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+28,0
+1e,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+48,0
+1c,12c
+48,0
+1c,12c
+48,0
+1c,12c
+49,0
+1b,12c
+49,0
+1b,12c
+49,0
+1b,12c
+4a,0
+1a,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4c,0
+18,12c
+4c,0
+18,12c
+4d,0
+17,12c
+4e,0
+16,12c
+4f,0
+15,12c
+50,0
+14,12c
+51,0
+13,12c
+52,0
+12,12c
+54,0
+10,12c
+56,0
+e,12c
+57,0
+d,12c
+5a,0
+a,12c
+5d,0
+7,12c
+41a,0
+100 90 32
+802,0
+3e8
+5c,0
+f,3e8
+52,0
+15,3e8
+4c,0
+1b,3e8
+48,0
+1d,3e8
+45,0
+21,3e8
+41,0
+24,3e8
+3f,0
+27,3e8
+3c,0
+29,3e8
+3a,0
+2b,3e8
+38,0
+2d,3e8
+36,0
+2f,3e8
+34,0
+30,3e8
+34,0
+31,3e8
+32,0
+33,3e8
+31,0
+33,3e8
+30,0
+35,3e8
+2e,0
+37,3e8
+2d,0
+37,3e8
+2d,0
+37,3e8
+2c,0
+39,3e8
+2b,0
+39,3e8
+2b,0
+39,3e8
+2a,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+28,0
+1e,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+48,0
+1c,3e8
+48,0
+1c,3e8
+48,0
+1c,3e8
+49,0
+1b,3e8
+49,0
+1b,3e8
+49,0
+1b,3e8
+4a,0
+1a,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4c,0
+18,3e8
+4c,0
+18,3e8
+4d,0
+17,3e8
+4e,0
+16,3e8
+4f,0
+15,3e8
+50,0
+14,3e8
+51,0
+13,3e8
+52,0
+12,3e8
+54,0
+10,3e8
+56,0
+e,3e8
+57,0
+d,3e8
+5a,0
+a,3e8
+5d,0
+7,3e8
+41a,0
+100 90 32
+802,0
+111111
+5c,0
+f,111111
+52,0
+15,111111
+4c,0
+1b,111111
+48,0
+1d,111111
+45,0
+21,111111
+41,0
+24,111111
+3f,0
+27,111111
+3c,0
+29,111111
+3a,0
+2b,111111
+38,0
+2d,111111
+36,0
+2f,111111
+34,0
+30,111111
+34,0
+31,111111
+32,0
+33,111111
+31,0
+33,111111
+30,0
+35,111111
+2e,0
+37,111111
+2d,0
+37,111111
+2d,0
+37,111111
+2c,0
+39,111111
+2b,0
+39,111111
+2b,0
+39,111111
+2a,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+28,0
+1e,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+48,0
+1c,111111
+48,0
+1c,111111
+48,0
+1c,111111
+49,0
+1b,111111
+49,0
+1b,111111
+49,0
+1b,111111
+4a,0
+1a,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4c,0
+18,111111
+4c,0
+18,111111
+4d,0
+17,111111
+4e,0
+16,111111
+4f,0
+15,111111
+50,0
+14,111111
+51,0
+13,111111
+52,0
+12,111111
+54,0
+10,111111
+56,0
+e,111111
+57,0
+d,111111
+5a,0
+a,111111
+5d,0
+7,111111
+41a,0
+100 90 32
+802,0
+400200
+5c,0
+f,400200
+52,0
+15,400200
+4c,0
+1b,400200
+48,0
+1d,400200
+45,0
+21,400200
+41,0
+24,400200
+3f,0
+27,400200
+3c,0
+29,400200
+3a,0
+2b,400200
+38,0
+2d,400200
+36,0
+2f,400200
+34,0
+30,400200
+34,0
+31,400200
+32,0
+33,400200
+31,0
+33,400200
+30,0
+35,400200
+2e,0
+37,400200
+2d,0
+37,400200
+2d,0
+37,400200
+2c,0
+39,400200
+2b,0
+39,400200
+2b,0
+39,400200
+2a,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+28,0
+1e,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+48,0
+1c,400200
+48,0
+1c,400200
+48,0
+1c,400200
+49,0
+1b,400200
+49,0
+1b,400200
+49,0
+1b,400200
+4a,0
+1a,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4c,0
+18,400200
+4c,0
+18,400200
+4d,0
+17,400200
+4e,0
+16,400200
+4f,0
+15,400200
+50,0
+14,400200
+51,0
+13,400200
+52,0
+12,400200
+54,0
+10,400200
+56,0
+e,400200
+57,0
+d,400200
+5a,0
+a,400200
+5d,0
+7,400200
+41a,0
+100 90 32
+802,0
+777777
+5c,0
+f,777777
+52,0
+15,777777
+4c,0
+1b,777777
+48,0
+1d,777777
+45,0
+21,777777
+41,0
+24,777777
+3f,0
+27,777777
+3c,0
+29,777777
+3a,0
+2b,777777
+38,0
+2d,777777
+36,0
+2f,777777
+34,0
+30,777777
+34,0
+31,777777
+32,0
+33,777777
+31,0
+33,777777
+30,0
+35,777777
+2e,0
+37,777777
+2d,0
+37,777777
+2d,0
+37,777777
+2c,0
+39,777777
+2b,0
+39,777777
+2b,0
+39,777777
+2a,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+28,0
+1e,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+48,0
+1c,777777
+48,0
+1c,777777
+48,0
+1c,777777
+49,0
+1b,777777
+49,0
+1b,777777
+49,0
+1b,777777
+4a,0
+1a,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4c,0
+18,777777
+4c,0
+18,777777
+4d,0
+17,777777
+4e,0
+16,777777
+4f,0
+15,777777
+50,0
+14,777777
+51,0
+13,777777
+52,0
+12,777777
+54,0
+10,777777
+56,0
+e,777777
+57,0
+d,777777
+5a,0
+a,777777
+5d,0
+7,777777
+41a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarc/a39.dat b/xc/test/xsuite/xtest/tset/CH06/fllarc/a39.dat
new file mode 100644
index 000000000..ffea5bfeb
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarc/a39.dat
@@ -0,0 +1,7743 @@
+! $XConsortium$
+100 90 32
+861,0
+8,1
+4,0
+1
+54,0
+6,1
+5,0
+4,1
+3,0
+1
+4f,0
+5,1
+3,0
+6,1
+52,0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+4,1
+6,0
+4,1
+a,0
+3,1
+41,0
+1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+48,0
+d,1
+b,0
+6,1
+3f,0
+c,1
+c,0
+c,1
+3c,0
+a,1
+6,0
+12,1
+6,0
+3,1
+3d,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+a,1
+36,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+39,0
+3,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+5,1
+37,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+35,0
+5,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+4,1
+31,0
+1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+34,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+3,1
+2e,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+32,0
+6,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+35,0
+11,1
+6,0
+12,1
+6,0
+a,1
+2b,0
+5,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+34,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+4,1
+2a,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+2c,0
+3,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+3,1
+2c,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+2,1
+2e,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+2b,0
+4,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+2,1
+29,0
+8,1
+b,0
+d,1
+b,0
+d,1
+2b,0
+1
+c,0
+c,1
+4c,0
+12,1
+6,0
+5,1
+47,0
+6,1
+6,0
+4,1
+2,0
+b,1
+4d,0
+9,1
+0
+8,1
+4c,0
+8,1
+4,0
+9,1
+3,0
+5,1
+47,0
+3,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4c,0
+6,1
+a,0
+5,1
+3,0
+2,1
+47,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4c,0
+4,1
+a,0
+4,1
+4e,0
+3,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+49,0
+7,1
+b,0
+a,1
+53,0
+c,1
+4e,0
+10,1
+6,0
+5,1
+49,0
+4,1
+6,0
+4,1
+2,0
+b,1
+4d,0
+9,1
+0
+8,1
+50,0
+4,1
+4,0
+9,1
+3,0
+5,1
+4f,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4e,0
+4,1
+a,0
+5,1
+3,0
+2,1
+50,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4d,0
+3,1
+a,0
+4,1
+56,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5b,0
+a,1
+53,0
+c,1
+56,0
+8,1
+6,0
+5,1
+53,0
+4,1
+2,0
+b,1
+54,0
+2,1
+0
+8,1
+5b,0
+6,1
+3,0
+5,1
+57,0
+3,1
+2,0
+6,1
+5c,0
+5,1
+3,0
+2,1
+5f,0
+5,1
+41a,0
+100 90 32
+802,0
+1
+5f,0
+5,1
+4,0
+3,1
+53,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+d,1
+50,0
+c,1
+c,0
+9,1
+41,0
+8,1
+6,0
+12,1
+46,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+6,1
+3c,0
+7,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+3b,0
+1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+2,1
+3a,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+36,0
+4,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+1
+34,0
+1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+4,1
+35,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+38,0
+1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+33,0
+5,1
+b,0
+d,1
+b,0
+b,1
+3a,0
+c,1
+c,0
+c,1
+35,0
+11,1
+6,0
+12,1
+6,0
+8,1
+2d,0
+5,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+34,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+2,1
+2c,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+2c,0
+3,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+1
+2e,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+2f,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+2a,0
+5,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+1
+29,0
+9,1
+b,0
+d,1
+b,0
+d,1
+2b,0
+1
+c,0
+c,1
+c,0
+c,1
+34,0
+12,1
+6,0
+12,1
+6,0
+a,1
+29,0
+7,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+2c,0
+2,1
+6,0
+9,1
+0
+8,1
+4c,0
+8,1
+4,0
+9,1
+3,0
+4,1
+47,0
+4,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+48,0
+1
+3,0
+6,1
+a,0
+5,1
+3,0
+1
+48,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+4,1
+4d,0
+4,1
+a,0
+4,1
+4c,0
+5,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+47,0
+9,1
+b,0
+9,1
+54,0
+c,1
+4c,0
+12,1
+6,0
+4,1
+48,0
+6,1
+6,0
+4,1
+2,0
+a,1
+4e,0
+9,1
+0
+8,1
+4d,0
+7,1
+4,0
+9,1
+3,0
+4,1
+49,0
+2,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4c,0
+6,1
+a,0
+5,1
+3,0
+1
+4b,0
+2,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+4,1
+4d,0
+4,1
+a,0
+4,1
+56,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+4c,0
+4,1
+b,0
+9,1
+54,0
+c,1
+52,0
+c,1
+6,0
+4,1
+54,0
+4,1
+2,0
+a,1
+50,0
+7,1
+0
+8,1
+58,0
+9,1
+3,0
+4,1
+52,0
+2,1
+3,0
+4,1
+2,0
+6,1
+5c,0
+5,1
+3,0
+1
+57,0
+1
+0
+1
+6,0
+4,1
+5b,0
+4,1
+60,0
+9,1
+5d,0
+7,1
+41a,0
+100 90 32
+85f,0
+5,1
+0
+8,1
+53,0
+1
+4,0
+9,1
+3,0
+4,1
+50,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4c,0
+6,1
+a,0
+5,1
+3,0
+5,1
+45,0
+4,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+47,0
+4,1
+a,0
+4,1
+6,0
+4,1
+41,0
+6,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+3d,0
+b,1
+b,0
+d,1
+40,0
+4,1
+c,0
+c,1
+c,0
+3,1
+3d,0
+12,1
+6,0
+10,1
+36,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+35,0
+7,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+1
+34,0
+4,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+6,1
+32,0
+3,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+34,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+3a,0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+35,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+2,1
+2e,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+32,0
+d,1
+b,0
+d,1
+b,0
+2,1
+2c,0
+b,1
+c,0
+c,1
+c,0
+a,1
+2b,0
+5,1
+6,0
+12,1
+6,0
+12,1
+2f,0
+3,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+4,1
+2a,0
+3,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+7,1
+29,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+2e,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+2,1
+30,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+4,1
+2a,0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+35,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+2a,0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+30,0
+d,1
+50,0
+c,1
+c,0
+5,1
+47,0
+6,1
+6,0
+11,1
+47,0
+4,1
+2,0
+c,1
+6,0
+4,1
+48,0
+3,1
+0
+8,1
+6,0
+9,1
+0
+1
+47,0
+9,1
+3,0
+8,1
+4,0
+5,1
+4a,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+2,1
+4e,0
+5,1
+3,0
+6,1
+50,0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+4f,0
+4,1
+6,0
+4,1
+50,0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+4f,0
+d,1
+52,0
+a,1
+c,0
+5,1
+49,0
+4,1
+6,0
+11,1
+4a,0
+1
+2,0
+c,1
+6,0
+4,1
+4c,0
+8,1
+6,0
+9,1
+0
+1
+4b,0
+5,1
+3,0
+8,1
+4,0
+5,1
+4c,0
+2,1
+2,0
+6,1
+5,0
+4,1
+3,0
+2,1
+4e,0
+5,1
+3,0
+6,1
+5b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+4f,0
+4,1
+6,0
+4,1
+57,0
+8,1
+5,0
+3,1
+0
+1
+0
+1
+51,0
+b,1
+5a,0
+2,1
+c,0
+5,1
+53,0
+11,1
+54,0
+5,1
+6,0
+4,1
+5a,0
+9,1
+0
+1
+57,0
+4,1
+4,0
+5,1
+5b,0
+4,1
+3,0
+2,1
+47e,0
+100 90 32
+802,0
+1
+5c,0
+1
+6,0
+1
+0
+6,1
+54,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+51,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+48,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+46,0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+44,0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+6,1
+3f,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+3d,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+3c,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+3b,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+3c,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+3,1
+39,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+1
+34,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+3e,0
+5,1
+e,0
+5,1
+e,0
+3,1
+31,0
+b,1
+3,0
+10,1
+3,0
+10,1
+32,0
+35,1
+3a,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2f,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+32,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2c,0
+1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+8,1
+2c,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2d,0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+2b,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+2a,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+2a,0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+2a,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+2a,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+29,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+2c,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2a,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+4f,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+4d,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+56,0
+5,1
+51,0
+f,1
+3,0
+b,1
+47,0
+1d,1
+55,0
+5,1
+51,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+49,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+49,0
+1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+4f,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+49,0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+4a,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+4b,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+4b,0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+7,1
+4c,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+4d,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+51,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+50,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+51,0
+1
+0
+9,1
+0
+1
+57,0
+2,1
+2,0
+5,1
+2,0
+2,1
+55,0
+1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+56,0
+5,1
+5b,0
+5,1
+3,0
+b,1
+52,0
+12,1
+55,0
+5,1
+64,0
+2,1
+2,0
+6,1
+57,0
+3,1
+2,0
+2,1
+0
+4,1
+5b,0
+2,1
+0
+1
+64,0
+1
+4,0
+1
+41a,0
+100 90 32
+862,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+53,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+1
+4c,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+6,1
+49,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+45,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+4a,0
+5,1
+e,0
+5,1
+42,0
+b,1
+3,0
+10,1
+3,0
+6,1
+3c,0
+29,1
+46,0
+5,1
+e,0
+5,1
+3f,0
+1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+4,1
+38,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+34,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+39,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+34,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+32,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+30,0
+3,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+2f,0
+4,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+2d,0
+4,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2d,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+31,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+2b,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2d,0
+7,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+2b,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+1
+29,0
+1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+2b,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+1
+29,0
+2,1
+3,0
+10,1
+3,0
+10,1
+3,0
+10,1
+29,0
+3b,1
+2a,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+1
+29,0
+1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+2b,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+47,0
+8,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+48,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+48,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+4a,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+48,0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+48,0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+48,0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+49,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+4d,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+49,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+4a,0
+6,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+49,0
+4,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+4d,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+4c,0
+3,1
+e,0
+5,1
+50,0
+10,1
+3,0
+5,1
+4b,0
+19,1
+4c,0
+1
+e,0
+5,1
+51,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+51,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+4e,0
+1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+4f,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+52,0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+53,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+52,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+54,0
+4,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+57,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+57,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+5a,0
+1
+5,0
+1
+0
+1
+5e,0
+3,1
+2,0
+1
+41b,0
+100 90 32
+85f,0
+6,1
+0
+1
+6,0
+1
+54,0
+5,1
+2,0
+2,1
+6,0
+2,1
+51,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+51,0
+5,1
+e,0
+4,1
+45,0
+9,1
+3,0
+10,1
+3,0
+2,1
+41,0
+24,1
+4a,0
+5,1
+e,0
+5,1
+42,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+3b,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+1
+38,0
+2,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+39,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+39,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+37,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+32,0
+3,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+32,0
+3,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+7,1
+30,0
+4,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+2f,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+2d,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2c,0
+8,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+1
+2c,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2c,0
+1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+1
+2c,0
+5,1
+e,0
+5,1
+e,0
+5,1
+37,0
+3,1
+3,0
+10,1
+3,0
+10,1
+3,0
+f,1
+29,0
+3b,1
+2b,0
+5,1
+e,0
+5,1
+e,0
+5,1
+37,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+2b,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2b,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+28,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+48,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+47,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+48,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+48,0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+48,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+48,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+49,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+49,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+48,0
+8,1
+0
+1
+6,0
+1
+0
+9,1
+4a,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+1
+4e,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+4a,0
+5,1
+e,0
+5,1
+4c,0
+1
+3,0
+10,1
+3,0
+4,1
+4a,0
+1a,1
+4b,0
+3,1
+e,0
+5,1
+51,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+4d,0
+2,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+1
+4c,0
+4,1
+0
+1
+6,0
+1
+0
+9,1
+4e,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+4e,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+4f,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+52,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+52,0
+8,1
+0
+1
+0
+5,1
+0
+1
+54,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+57,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+58,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+57,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+5a,0
+9,1
+5e,0
+4,1
+2,0
+1
+41a,0
+100 90 32
+802,0
+1
+5f,0
+5,1
+4,0
+3,1
+53,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+d,1
+50,0
+c,1
+c,0
+9,1
+41,0
+8,1
+6,0
+12,1
+46,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+6,1
+3c,0
+7,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+3b,0
+1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+2,1
+3a,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+36,0
+4,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+1
+34,0
+1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+4,1
+35,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+38,0
+1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+33,0
+5,1
+b,0
+d,1
+b,0
+b,1
+3a,0
+c,1
+c,0
+c,1
+35,0
+11,1
+6,0
+12,1
+6,0
+8,1
+2d,0
+5,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+34,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+2,1
+2c,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+2c,0
+3,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+1
+2e,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+2f,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+2a,0
+5,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+1
+29,0
+9,1
+b,0
+d,1
+b,0
+d,1
+2b,0
+1
+c,0
+c,1
+c,0
+c,1
+34,0
+12,1
+6,0
+12,1
+6,0
+a,1
+29,0
+7,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+2c,0
+2,1
+6,0
+9,1
+0
+8,1
+4c,0
+8,1
+4,0
+9,1
+3,0
+4,1
+47,0
+4,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+48,0
+1
+3,0
+6,1
+a,0
+5,1
+3,0
+1
+48,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+4,1
+4d,0
+4,1
+a,0
+4,1
+4c,0
+5,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+47,0
+9,1
+b,0
+9,1
+54,0
+c,1
+4c,0
+12,1
+6,0
+4,1
+48,0
+6,1
+6,0
+4,1
+2,0
+a,1
+4e,0
+9,1
+0
+8,1
+4d,0
+7,1
+4,0
+9,1
+3,0
+4,1
+49,0
+2,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4c,0
+6,1
+a,0
+5,1
+3,0
+1
+4b,0
+2,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+4,1
+4d,0
+4,1
+a,0
+4,1
+56,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+4c,0
+4,1
+b,0
+9,1
+54,0
+c,1
+52,0
+c,1
+6,0
+4,1
+54,0
+4,1
+2,0
+a,1
+50,0
+7,1
+0
+8,1
+58,0
+9,1
+3,0
+4,1
+52,0
+2,1
+3,0
+4,1
+2,0
+6,1
+5c,0
+5,1
+3,0
+1
+57,0
+1
+0
+1
+6,0
+4,1
+5b,0
+4,1
+60,0
+9,1
+5d,0
+7,1
+41a,0
+100 90 32
+85f,0
+5,1
+0
+8,1
+53,0
+1
+4,0
+9,1
+3,0
+4,1
+50,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4c,0
+6,1
+a,0
+5,1
+3,0
+5,1
+45,0
+4,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+47,0
+4,1
+a,0
+4,1
+6,0
+4,1
+41,0
+6,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+3d,0
+b,1
+b,0
+d,1
+40,0
+4,1
+c,0
+c,1
+c,0
+3,1
+3d,0
+12,1
+6,0
+10,1
+36,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+35,0
+7,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+1
+34,0
+4,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+6,1
+32,0
+3,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+34,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+3a,0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+35,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+2,1
+2e,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+32,0
+d,1
+b,0
+d,1
+b,0
+2,1
+2c,0
+b,1
+c,0
+c,1
+c,0
+a,1
+2b,0
+5,1
+6,0
+12,1
+6,0
+12,1
+2f,0
+3,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+4,1
+2a,0
+3,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+7,1
+29,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+2e,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+2,1
+30,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+4,1
+2a,0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+35,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+2a,0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+30,0
+d,1
+50,0
+c,1
+c,0
+5,1
+47,0
+6,1
+6,0
+11,1
+47,0
+4,1
+2,0
+c,1
+6,0
+4,1
+48,0
+3,1
+0
+8,1
+6,0
+9,1
+0
+1
+47,0
+9,1
+3,0
+8,1
+4,0
+5,1
+4a,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+2,1
+4e,0
+5,1
+3,0
+6,1
+50,0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+4f,0
+4,1
+6,0
+4,1
+50,0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+4f,0
+d,1
+52,0
+a,1
+c,0
+5,1
+49,0
+4,1
+6,0
+11,1
+4a,0
+1
+2,0
+c,1
+6,0
+4,1
+4c,0
+8,1
+6,0
+9,1
+0
+1
+4b,0
+5,1
+3,0
+8,1
+4,0
+5,1
+4c,0
+2,1
+2,0
+6,1
+5,0
+4,1
+3,0
+2,1
+4e,0
+5,1
+3,0
+6,1
+5b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+4f,0
+4,1
+6,0
+4,1
+57,0
+8,1
+5,0
+3,1
+0
+1
+0
+1
+51,0
+b,1
+5a,0
+2,1
+c,0
+5,1
+53,0
+11,1
+54,0
+5,1
+6,0
+4,1
+5a,0
+9,1
+0
+1
+57,0
+4,1
+4,0
+5,1
+5b,0
+4,1
+3,0
+2,1
+47e,0
+100 90 32
+802,0
+1
+5c,0
+1
+6,0
+1
+0
+6,1
+54,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+51,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+48,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+46,0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+44,0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+6,1
+3f,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+3d,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+3c,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+3b,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+3c,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+3,1
+39,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+1
+34,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+3e,0
+5,1
+e,0
+5,1
+e,0
+3,1
+31,0
+b,1
+3,0
+10,1
+3,0
+10,1
+32,0
+35,1
+3a,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2f,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+32,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2c,0
+1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+8,1
+2c,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2d,0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+2b,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+2a,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+2a,0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+2a,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+2a,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+29,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+2c,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2a,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+4f,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+4d,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+56,0
+5,1
+51,0
+f,1
+3,0
+b,1
+47,0
+1d,1
+55,0
+5,1
+51,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+49,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+49,0
+1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+4f,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+49,0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+4a,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+4b,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+4b,0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+7,1
+4c,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+4d,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+51,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+50,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+51,0
+1
+0
+9,1
+0
+1
+57,0
+2,1
+2,0
+5,1
+2,0
+2,1
+55,0
+1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+56,0
+5,1
+5b,0
+5,1
+3,0
+b,1
+52,0
+12,1
+55,0
+5,1
+64,0
+2,1
+2,0
+6,1
+57,0
+3,1
+2,0
+2,1
+0
+4,1
+5b,0
+2,1
+0
+1
+64,0
+1
+4,0
+1
+41a,0
+100 90 32
+862,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+53,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+1
+4c,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+6,1
+49,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+45,0
+2,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+4a,0
+5,1
+e,0
+5,1
+42,0
+b,1
+3,0
+10,1
+3,0
+6,1
+3c,0
+29,1
+46,0
+5,1
+e,0
+5,1
+3f,0
+1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+4,1
+38,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+34,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+39,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+34,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+32,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+30,0
+3,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+2f,0
+4,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+2d,0
+4,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2d,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+31,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+2b,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2d,0
+7,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+2b,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+1
+29,0
+1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+2b,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+1
+29,0
+2,1
+3,0
+10,1
+3,0
+10,1
+3,0
+10,1
+29,0
+3b,1
+2a,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+1
+29,0
+1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+2b,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+47,0
+8,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+48,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+48,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+4a,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+48,0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+48,0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+48,0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+49,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+4d,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+49,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+4a,0
+6,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+49,0
+4,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+4d,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+4c,0
+3,1
+e,0
+5,1
+50,0
+10,1
+3,0
+5,1
+4b,0
+19,1
+4c,0
+1
+e,0
+5,1
+51,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+51,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+4e,0
+1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+4f,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+52,0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+53,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+52,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+54,0
+4,1
+0
+1
+0
+5,1
+0
+1
+0
+1
+57,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+57,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+5a,0
+1
+5,0
+1
+0
+1
+5e,0
+3,1
+2,0
+1
+41b,0
+100 90 32
+85f,0
+6,1
+0
+1
+6,0
+1
+54,0
+5,1
+2,0
+2,1
+6,0
+2,1
+51,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+51,0
+5,1
+e,0
+4,1
+45,0
+9,1
+3,0
+10,1
+3,0
+2,1
+41,0
+24,1
+4a,0
+5,1
+e,0
+5,1
+42,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+3b,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+1
+38,0
+2,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+39,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+39,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+37,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+32,0
+3,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+32,0
+3,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+7,1
+30,0
+4,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+2f,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+2d,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2c,0
+8,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+1
+2c,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2c,0
+1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+1
+2c,0
+5,1
+e,0
+5,1
+e,0
+5,1
+37,0
+3,1
+3,0
+10,1
+3,0
+10,1
+3,0
+f,1
+29,0
+3b,1
+2b,0
+5,1
+e,0
+5,1
+e,0
+5,1
+37,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+2b,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2b,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+28,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+48,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+47,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+48,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+48,0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+48,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+48,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+49,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+49,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+48,0
+8,1
+0
+1
+6,0
+1
+0
+9,1
+4a,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+1
+4e,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+4a,0
+5,1
+e,0
+5,1
+4c,0
+1
+3,0
+10,1
+3,0
+4,1
+4a,0
+1a,1
+4b,0
+3,1
+e,0
+5,1
+51,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+4d,0
+2,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+1
+4c,0
+4,1
+0
+1
+6,0
+1
+0
+9,1
+4e,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+4e,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+4f,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+52,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+52,0
+8,1
+0
+1
+0
+5,1
+0
+1
+54,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+57,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+58,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+57,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+5a,0
+9,1
+5e,0
+4,1
+2,0
+1
+41a,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarc/fllarc.m b/xc/test/xsuite/xtest/tset/CH06/fllarc/fllarc.m
new file mode 100644
index 000000000..d13b7c28d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarc/fllarc.m
@@ -0,0 +1,180 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFillArc CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+int x = 20;
+int y = 20;
+unsigned int width = 60;
+unsigned int height = 60;
+int angle1 = 0;
+int angle2 = 270*64;
+>>ASSERTION Good A
+A call to xname draws a single filled circular or elliptical arc in the drawable
+.A d
+as specified by
+.A x ,
+.A y ,
+.A width ,
+.A height ,
+.A angle1
+and
+.A angle2 .
+>>STRATEGY
+Draw arc
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>># Next 3 assertions used to be included by >>INCLUDE ../fllarcs/arc.inc
+>># Consequently the wording was wrong - I hand included and corrected.
+>># DPJ Cater 17/3/91
+>>ASSERTION Good A
+When the GC component
+.M arc-mode
+is
+.S ArcChord ,
+then a call to xname fills the region closed by the infinitely thin path
+described by the specified arc and the single line segment joining the two
+endpoints of the arc.
+>>STRATEGY
+Set arc-mode to ArcChord
+Draw arcs
+Pixmap check.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XSetArcMode(display, gc, ArcChord);
+
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When the GC component
+.M arc-mode
+is
+.S ArcPieSlice ,
+then a call to xname fills the region closed by the infinitely thin path
+described by the specified arc and
+the two line segments joining the endpoints of the arc with the centre
+point.
+>>STRATEGY
+Set arc-mode to ArcPieSlice
+Draw arcs.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XSetArcMode(display, gc, ArcPieSlice);
+
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+A call to xname does not draw a pixel more than once.
+>>STRATEGY
+Draw with gc function set to GXcopy
+Draw with gc function set to GXxor
+Verify that window is blank
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+
+ XSetFunction(display, gc, GXxor);
+
+ XCALL;
+
+ if (checkarea(display, d, (struct area *)0, W_BG, W_BG, CHECK_IN))
+ CHECK;
+ else {
+ report("Pixels drawn more than once");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M fill-style ,
+.M arc-mode ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin
+and
+.M tile-stipple-y-origin
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/a1.dat b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a1.dat
new file mode 100644
index 000000000..d91148f52
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a1.dat
@@ -0,0 +1,111 @@
+! $XConsortium$
+100 90 32
+46b,0
+9,1
+57,0
+d,1
+55,0
+f,1
+52,0
+12,1
+51,0
+13,1
+4f,0
+15,1
+4e,0
+16,1
+4c,0
+18,1
+4b,0
+19,1
+4b,0
+19,1
+4a,0
+1a,1
+49,0
+1b,1
+48,0
+1c,1
+48,0
+1c,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+663,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4d,0
+16,1
+4e,0
+16,1
+4e,0
+15,1
+4f,0
+15,1
+4f,0
+14,1
+50,0
+14,1
+50,0
+13,1
+51,0
+13,1
+51,0
+12,1
+52,0
+11,1
+53,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+b,1
+59,0
+9,1
+5b,0
+6,1
+3fb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/a2.dat b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a2.dat
new file mode 100644
index 000000000..e27da77df
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a2.dat
@@ -0,0 +1,107 @@
+! $XConsortium$
+100 90 32
+46b,0
+8,1
+58,0
+a,1
+58,0
+b,1
+56,0
+c,1
+57,0
+c,1
+56,0
+c,1
+57,0
+c,1
+56,0
+c,1
+57,0
+c,1
+58,0
+a,1
+59,0
+a,1
+59,0
+9,1
+5a,0
+9,1
+5b,0
+7,1
+5c,0
+7,1
+5d,0
+5,1
+5f,0
+4,1
+60,0
+2,1
+62,0
+1
+75f,0
+1
+62,0
+2,1
+62,0
+2,1
+61,0
+3,1
+60,0
+4,1
+5f,0
+5,1
+5f,0
+5,1
+5e,0
+6,1
+5d,0
+6,1
+5e,0
+6,1
+5d,0
+7,1
+5c,0
+8,1
+5b,0
+8,1
+5c,0
+8,1
+5b,0
+9,1
+5a,0
+9,1
+5b,0
+9,1
+5a,0
+9,1
+5a,0
+a,1
+59,0
+a,1
+5a,0
+a,1
+59,0
+a,1
+59,0
+b,1
+59,0
+a,1
+59,0
+a,1
+59,0
+a,1
+59,0
+a,1
+5a,0
+9,1
+5a,0
+9,1
+5a,0
+9,1
+5b,0
+8,1
+5b,0
+7,1
+5c,0
+5,1
+3fb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/a25.dat b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a25.dat
new file mode 100644
index 000000000..d91148f52
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a25.dat
@@ -0,0 +1,111 @@
+! $XConsortium$
+100 90 32
+46b,0
+9,1
+57,0
+d,1
+55,0
+f,1
+52,0
+12,1
+51,0
+13,1
+4f,0
+15,1
+4e,0
+16,1
+4c,0
+18,1
+4b,0
+19,1
+4b,0
+19,1
+4a,0
+1a,1
+49,0
+1b,1
+48,0
+1c,1
+48,0
+1c,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+663,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4d,0
+16,1
+4e,0
+16,1
+4e,0
+15,1
+4f,0
+15,1
+4f,0
+14,1
+50,0
+14,1
+50,0
+13,1
+51,0
+13,1
+51,0
+12,1
+52,0
+11,1
+53,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+b,1
+59,0
+9,1
+5b,0
+6,1
+3fb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/a26.dat b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a26.dat
new file mode 100644
index 000000000..f7acb2310
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a26.dat
@@ -0,0 +1,577 @@
+! $XConsortium$
+100 90 32
+46b,0
+2
+3
+2
+3
+2
+3
+2,2
+3
+57,0
+4,2
+3
+2
+3
+2
+3
+4,2
+55,0
+2
+5,3
+2,2
+3
+2
+3
+4,2
+52,0
+3
+2
+9,3
+2
+3
+5,2
+51,0
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+5,2
+4f,0
+2,3
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+4e,0
+8,2
+5,3
+9,2
+4c,0
+b,3
+3,2
+a,3
+4b,0
+19,3
+4b,0
+b,2
+5,3
+9,2
+4a,0
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+5,3
+49,0
+2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+48,0
+2,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+5,2
+48,0
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+47,0
+2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+47,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+47,0
+3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+47,0
+3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+6,3
+47,0
+3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+663,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+4b,0
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+4b,0
+5,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+4b,0
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+4b,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+4b,0
+3,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+4b,0
+3,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+4b,0
+4,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+4b,0
+4,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+4b,0
+3,3
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+3,2
+4b,0
+8,2
+5,3
+b,2
+4c,0
+9,3
+3,2
+c,3
+4c,0
+18,3
+4c,0
+8,2
+5,3
+b,2
+4c,0
+4,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+4d,0
+3,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+4d,0
+4,2
+3
+2
+9,3
+2
+3
+6,2
+4d,0
+3,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+4e,0
+3,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+4e,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+4f,0
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+4f,0
+5,3
+2
+3
+2
+5,3
+2
+3
+2
+4,3
+50,0
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2
+50,0
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+51,0
+3,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+2
+51,0
+3,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+52,0
+4,2
+3
+2
+9,3
+2
+3
+53,0
+4,2
+2,3
+2,2
+5,3
+2,2
+3
+54,0
+3,3
+3,2
+2,3
+5,2
+2,3
+55,0
+8,2
+5,3
+2
+56,0
+9,3
+3,2
+3
+57,0
+c,3
+58,0
+8,2
+3,3
+59,0
+4,3
+2,2
+2,3
+2
+5b,0
+3,3
+2
+2,3
+3fb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/a27.dat b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a27.dat
new file mode 100644
index 000000000..e1cebf312
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a27.dat
@@ -0,0 +1,327 @@
+! $XConsortium$
+100 90 32
+46b,0
+5,3
+4,2
+57,0
+3,3
+6,2
+4,3
+55,0
+3,3
+2,2
+a,3
+52,0
+5,3
+2
+8,3
+4,2
+51,0
+3,2
+9,3
+3,2
+4,3
+4f,0
+2
+4,3
+3,2
+4,3
+2,2
+6,3
+2
+4e,0
+3,3
+a,2
+5,3
+3,2
+3
+4c,0
+3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+4,3
+4b,0
+2,2
+4,3
+a,2
+4,3
+5,2
+4b,0
+3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+4a,0
+6,3
+b,2
+9,3
+49,0
+b,2
+c,3
+4,2
+48,0
+12,3
+6,2
+4,3
+48,0
+6,3
+6,2
+4,3
+2,2
+a,3
+47,0
+3
+6,2
+9,3
+2
+8,3
+4,2
+47,0
+2
+8,3
+4,2
+9,3
+3,2
+4,3
+47,0
+4,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+2
+47,0
+3
+3,2
+6,3
+a,2
+5,3
+3,2
+3
+47,0
+2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+4,3
+663,0
+3,3
+6,2
+10,3
+4b,0
+3
+2,2
+c,3
+6,2
+4,3
+4b,0
+2
+8,3
+6,2
+9,3
+2
+4b,0
+6,3
+3,2
+8,3
+4,2
+4,3
+4b,0
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+3
+4b,0
+4,2
+5,3
+3,2
+6,3
+7,2
+4b,0
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+4b,0
+4,2
+4,3
+6,2
+4,3
+7,2
+4b,0
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+4b,0
+4,2
+d,3
+8,2
+4b,0
+9,3
+c,2
+3,3
+4c,0
+3,3
+6,2
+f,3
+4c,0
+3
+2,2
+c,3
+6,2
+3,3
+4c,0
+2
+8,3
+6,2
+9,3
+4c,0
+6,3
+3,2
+8,3
+4,2
+2,3
+4d,0
+4,3
+2,2
+6,3
+5,2
+4,3
+2,2
+4d,0
+4,2
+5,3
+3,2
+6,3
+5,2
+4d,0
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+4e,0
+4,2
+4,3
+6,2
+4,3
+4,2
+4e,0
+3
+2
+3
+2
+9,3
+5,2
+3,3
+4f,0
+4,2
+d,3
+4,2
+4f,0
+9,3
+b,2
+50,0
+3,3
+6,2
+b,3
+50,0
+3
+2,2
+c,3
+4,2
+51,0
+2
+8,3
+6,2
+4,3
+51,0
+6,3
+3,2
+8,3
+2
+52,0
+4,3
+2,2
+6,3
+5,2
+53,0
+4,2
+5,3
+3,2
+4,3
+54,0
+3
+2
+3
+6,2
+5,3
+2
+55,0
+4,2
+4,3
+6,2
+56,0
+3
+2
+3
+2
+9,3
+57,0
+4,2
+8,3
+58,0
+9,3
+2,2
+59,0
+3,3
+6,2
+5b,0
+3
+2,2
+3,3
+3fb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/a28.dat b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a28.dat
new file mode 100644
index 000000000..e9a0643ea
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a28.dat
@@ -0,0 +1,285 @@
+! $XConsortium$
+100 90 32
+46b,0
+5,1
+5b,0
+3,1
+6,0
+4,1
+55,0
+3,1
+2,0
+a,1
+52,0
+5,1
+0
+8,1
+58,0
+9,1
+3,0
+4,1
+50,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4f,0
+3,1
+a,0
+5,1
+3,0
+1
+4c,0
+1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+4,1
+4d,0
+4,1
+a,0
+4,1
+50,0
+1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+4a,0
+6,1
+b,0
+9,1
+54,0
+c,1
+4c,0
+12,1
+6,0
+4,1
+48,0
+6,1
+6,0
+4,1
+2,0
+a,1
+47,0
+1
+6,0
+9,1
+0
+8,1
+4c,0
+8,1
+4,0
+9,1
+3,0
+4,1
+47,0
+4,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+48,0
+1
+3,0
+6,1
+a,0
+5,1
+3,0
+1
+48,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+4,1
+663,0
+3,1
+6,0
+10,1
+4b,0
+1
+2,0
+c,1
+6,0
+4,1
+4c,0
+8,1
+6,0
+9,1
+4c,0
+6,1
+3,0
+8,1
+4,0
+4,1
+4b,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+1
+4f,0
+5,1
+3,0
+6,1
+52,0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+4f,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+4f,0
+d,1
+53,0
+9,1
+c,0
+3,1
+4c,0
+3,1
+6,0
+f,1
+4c,0
+1
+2,0
+c,1
+6,0
+3,1
+4d,0
+8,1
+6,0
+9,1
+4c,0
+6,1
+3,0
+8,1
+4,0
+2,1
+4d,0
+4,1
+2,0
+6,1
+5,0
+4,1
+53,0
+5,1
+3,0
+6,1
+52,0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+53,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+53,0
+d,1
+53,0
+9,1
+5b,0
+3,1
+6,0
+b,1
+50,0
+1
+2,0
+c,1
+56,0
+8,1
+6,0
+4,1
+51,0
+6,1
+3,0
+8,1
+53,0
+4,1
+2,0
+6,1
+5c,0
+5,1
+3,0
+4,1
+54,0
+1
+0
+1
+6,0
+5,1
+5a,0
+4,1
+5c,0
+1
+0
+1
+0
+9,1
+5b,0
+8,1
+58,0
+9,1
+5b,0
+3,1
+61,0
+1
+2,0
+3,1
+3fb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/a3.dat b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a3.dat
new file mode 100644
index 000000000..d91148f52
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a3.dat
@@ -0,0 +1,111 @@
+! $XConsortium$
+100 90 32
+46b,0
+9,1
+57,0
+d,1
+55,0
+f,1
+52,0
+12,1
+51,0
+13,1
+4f,0
+15,1
+4e,0
+16,1
+4c,0
+18,1
+4b,0
+19,1
+4b,0
+19,1
+4a,0
+1a,1
+49,0
+1b,1
+48,0
+1c,1
+48,0
+1c,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+663,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4d,0
+16,1
+4e,0
+16,1
+4e,0
+15,1
+4f,0
+15,1
+4f,0
+14,1
+50,0
+14,1
+50,0
+13,1
+51,0
+13,1
+51,0
+12,1
+52,0
+11,1
+53,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+b,1
+59,0
+9,1
+5b,0
+6,1
+3fb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/a32.dat b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a32.dat
new file mode 100644
index 000000000..954e23b27
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a32.dat
@@ -0,0 +1,289 @@
+! $XConsortium$
+100 90 32
+46b,0
+2,1
+5e,0
+6,1
+5c,0
+8,1
+59,0
+b,1
+58,0
+c,1
+56,0
+e,1
+55,0
+f,1
+53,0
+11,1
+52,0
+12,1
+52,0
+12,1
+51,0
+13,1
+50,0
+14,1
+4f,0
+15,1
+4f,0
+15,1
+4e,0
+16,1
+4e,0
+16,1
+4e,0
+16,1
+4e,0
+16,1
+4e,0
+16,1
+17b3,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+46d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+17ac,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+11df,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+17,1
+bba,0
+100 90 32
+17bb,0
+17,1
+4d,0
+17,1
+4d,0
+16,1
+4e,0
+16,1
+4e,0
+15,1
+4f,0
+15,1
+4f,0
+14,1
+50,0
+14,1
+50,0
+13,1
+51,0
+13,1
+51,0
+12,1
+52,0
+11,1
+53,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+b,1
+59,0
+9,1
+5b,0
+6,1
+3fb,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+46d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+5d,0
+7,1
+17ac,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+11df,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+17,1
+bba,0
+100 90 32
+17bb,0
+17,1
+4d,0
+17,1
+4d,0
+16,1
+4e,0
+16,1
+4e,0
+15,1
+4f,0
+15,1
+4f,0
+14,1
+50,0
+14,1
+50,0
+13,1
+51,0
+13,1
+51,0
+12,1
+52,0
+11,1
+53,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+b,1
+59,0
+9,1
+5b,0
+6,1
+3fb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/a35.dat b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a35.dat
new file mode 100644
index 000000000..e9a0643ea
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a35.dat
@@ -0,0 +1,285 @@
+! $XConsortium$
+100 90 32
+46b,0
+5,1
+5b,0
+3,1
+6,0
+4,1
+55,0
+3,1
+2,0
+a,1
+52,0
+5,1
+0
+8,1
+58,0
+9,1
+3,0
+4,1
+50,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4f,0
+3,1
+a,0
+5,1
+3,0
+1
+4c,0
+1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+4,1
+4d,0
+4,1
+a,0
+4,1
+50,0
+1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+4a,0
+6,1
+b,0
+9,1
+54,0
+c,1
+4c,0
+12,1
+6,0
+4,1
+48,0
+6,1
+6,0
+4,1
+2,0
+a,1
+47,0
+1
+6,0
+9,1
+0
+8,1
+4c,0
+8,1
+4,0
+9,1
+3,0
+4,1
+47,0
+4,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+48,0
+1
+3,0
+6,1
+a,0
+5,1
+3,0
+1
+48,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+4,1
+663,0
+3,1
+6,0
+10,1
+4b,0
+1
+2,0
+c,1
+6,0
+4,1
+4c,0
+8,1
+6,0
+9,1
+4c,0
+6,1
+3,0
+8,1
+4,0
+4,1
+4b,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+1
+4f,0
+5,1
+3,0
+6,1
+52,0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+4f,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+4f,0
+d,1
+53,0
+9,1
+c,0
+3,1
+4c,0
+3,1
+6,0
+f,1
+4c,0
+1
+2,0
+c,1
+6,0
+3,1
+4d,0
+8,1
+6,0
+9,1
+4c,0
+6,1
+3,0
+8,1
+4,0
+2,1
+4d,0
+4,1
+2,0
+6,1
+5,0
+4,1
+53,0
+5,1
+3,0
+6,1
+52,0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+53,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+53,0
+d,1
+53,0
+9,1
+5b,0
+3,1
+6,0
+b,1
+50,0
+1
+2,0
+c,1
+56,0
+8,1
+6,0
+4,1
+51,0
+6,1
+3,0
+8,1
+53,0
+4,1
+2,0
+6,1
+5c,0
+5,1
+3,0
+4,1
+54,0
+1
+0
+1
+6,0
+5,1
+5a,0
+4,1
+5c,0
+1
+0
+1
+0
+9,1
+5b,0
+8,1
+58,0
+9,1
+5b,0
+3,1
+61,0
+1
+2,0
+3,1
+3fb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/a37.dat b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a37.dat
new file mode 100644
index 000000000..0aa32c0ad
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a37.dat
@@ -0,0 +1,3743 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+46b,0
+9,1
+57,0
+d,1
+55,0
+f,1
+52,0
+12,1
+51,0
+13,1
+4f,0
+15,1
+4e,0
+16,1
+4c,0
+18,1
+4b,0
+19,1
+4b,0
+19,1
+4a,0
+1a,1
+49,0
+1b,1
+48,0
+1c,1
+48,0
+1c,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+663,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4d,0
+16,1
+4e,0
+16,1
+4e,0
+15,1
+4f,0
+15,1
+4f,0
+14,1
+50,0
+14,1
+50,0
+13,1
+51,0
+13,1
+51,0
+12,1
+52,0
+11,1
+53,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+b,1
+59,0
+9,1
+5b,0
+6,1
+3fb,0
+100 90 32
+46b,0
+9,2
+57,0
+d,2
+55,0
+f,2
+52,0
+12,2
+51,0
+13,2
+4f,0
+15,2
+4e,0
+16,2
+4c,0
+18,2
+4b,0
+19,2
+4b,0
+19,2
+4a,0
+1a,2
+49,0
+1b,2
+48,0
+1c,2
+48,0
+1c,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+663,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+18,2
+4c,0
+18,2
+4c,0
+18,2
+4c,0
+18,2
+4c,0
+17,2
+4d,0
+17,2
+4d,0
+17,2
+4d,0
+16,2
+4e,0
+16,2
+4e,0
+15,2
+4f,0
+15,2
+4f,0
+14,2
+50,0
+14,2
+50,0
+13,2
+51,0
+13,2
+51,0
+12,2
+52,0
+11,2
+53,0
+10,2
+54,0
+f,2
+55,0
+e,2
+56,0
+d,2
+57,0
+c,2
+58,0
+b,2
+59,0
+9,2
+5b,0
+6,2
+3fb,0
+100 90 32
+46b,0
+9,3
+57,0
+d,3
+55,0
+f,3
+52,0
+12,3
+51,0
+13,3
+4f,0
+15,3
+4e,0
+16,3
+4c,0
+18,3
+4b,0
+19,3
+4b,0
+19,3
+4a,0
+1a,3
+49,0
+1b,3
+48,0
+1c,3
+48,0
+1c,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+663,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+18,3
+4c,0
+18,3
+4c,0
+18,3
+4c,0
+18,3
+4c,0
+17,3
+4d,0
+17,3
+4d,0
+17,3
+4d,0
+16,3
+4e,0
+16,3
+4e,0
+15,3
+4f,0
+15,3
+4f,0
+14,3
+50,0
+14,3
+50,0
+13,3
+51,0
+13,3
+51,0
+12,3
+52,0
+11,3
+53,0
+10,3
+54,0
+f,3
+55,0
+e,3
+56,0
+d,3
+57,0
+c,3
+58,0
+b,3
+59,0
+9,3
+5b,0
+6,3
+3fb,0
+100 90 32
+46b,0
+9,4
+57,0
+d,4
+55,0
+f,4
+52,0
+12,4
+51,0
+13,4
+4f,0
+15,4
+4e,0
+16,4
+4c,0
+18,4
+4b,0
+19,4
+4b,0
+19,4
+4a,0
+1a,4
+49,0
+1b,4
+48,0
+1c,4
+48,0
+1c,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+663,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+18,4
+4c,0
+18,4
+4c,0
+18,4
+4c,0
+18,4
+4c,0
+17,4
+4d,0
+17,4
+4d,0
+17,4
+4d,0
+16,4
+4e,0
+16,4
+4e,0
+15,4
+4f,0
+15,4
+4f,0
+14,4
+50,0
+14,4
+50,0
+13,4
+51,0
+13,4
+51,0
+12,4
+52,0
+11,4
+53,0
+10,4
+54,0
+f,4
+55,0
+e,4
+56,0
+d,4
+57,0
+c,4
+58,0
+b,4
+59,0
+9,4
+5b,0
+6,4
+3fb,0
+100 90 32
+46b,0
+9,6
+57,0
+d,6
+55,0
+f,6
+52,0
+12,6
+51,0
+13,6
+4f,0
+15,6
+4e,0
+16,6
+4c,0
+18,6
+4b,0
+19,6
+4b,0
+19,6
+4a,0
+1a,6
+49,0
+1b,6
+48,0
+1c,6
+48,0
+1c,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+663,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+18,6
+4c,0
+18,6
+4c,0
+18,6
+4c,0
+18,6
+4c,0
+17,6
+4d,0
+17,6
+4d,0
+17,6
+4d,0
+16,6
+4e,0
+16,6
+4e,0
+15,6
+4f,0
+15,6
+4f,0
+14,6
+50,0
+14,6
+50,0
+13,6
+51,0
+13,6
+51,0
+12,6
+52,0
+11,6
+53,0
+10,6
+54,0
+f,6
+55,0
+e,6
+56,0
+d,6
+57,0
+c,6
+58,0
+b,6
+59,0
+9,6
+5b,0
+6,6
+3fb,0
+100 90 32
+46b,0
+9,7
+57,0
+d,7
+55,0
+f,7
+52,0
+12,7
+51,0
+13,7
+4f,0
+15,7
+4e,0
+16,7
+4c,0
+18,7
+4b,0
+19,7
+4b,0
+19,7
+4a,0
+1a,7
+49,0
+1b,7
+48,0
+1c,7
+48,0
+1c,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+663,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+18,7
+4c,0
+18,7
+4c,0
+18,7
+4c,0
+18,7
+4c,0
+17,7
+4d,0
+17,7
+4d,0
+17,7
+4d,0
+16,7
+4e,0
+16,7
+4e,0
+15,7
+4f,0
+15,7
+4f,0
+14,7
+50,0
+14,7
+50,0
+13,7
+51,0
+13,7
+51,0
+12,7
+52,0
+11,7
+53,0
+10,7
+54,0
+f,7
+55,0
+e,7
+56,0
+d,7
+57,0
+c,7
+58,0
+b,7
+59,0
+9,7
+5b,0
+6,7
+3fb,0
+100 90 32
+46b,0
+9,10
+57,0
+d,10
+55,0
+f,10
+52,0
+12,10
+51,0
+13,10
+4f,0
+15,10
+4e,0
+16,10
+4c,0
+18,10
+4b,0
+19,10
+4b,0
+19,10
+4a,0
+1a,10
+49,0
+1b,10
+48,0
+1c,10
+48,0
+1c,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+663,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+18,10
+4c,0
+18,10
+4c,0
+18,10
+4c,0
+18,10
+4c,0
+17,10
+4d,0
+17,10
+4d,0
+17,10
+4d,0
+16,10
+4e,0
+16,10
+4e,0
+15,10
+4f,0
+15,10
+4f,0
+14,10
+50,0
+14,10
+50,0
+13,10
+51,0
+13,10
+51,0
+12,10
+52,0
+11,10
+53,0
+10,10
+54,0
+f,10
+55,0
+e,10
+56,0
+d,10
+57,0
+c,10
+58,0
+b,10
+59,0
+9,10
+5b,0
+6,10
+3fb,0
+100 90 32
+46b,0
+9,33
+57,0
+d,33
+55,0
+f,33
+52,0
+12,33
+51,0
+13,33
+4f,0
+15,33
+4e,0
+16,33
+4c,0
+18,33
+4b,0
+19,33
+4b,0
+19,33
+4a,0
+1a,33
+49,0
+1b,33
+48,0
+1c,33
+48,0
+1c,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+663,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+18,33
+4c,0
+18,33
+4c,0
+18,33
+4c,0
+18,33
+4c,0
+17,33
+4d,0
+17,33
+4d,0
+17,33
+4d,0
+16,33
+4e,0
+16,33
+4e,0
+15,33
+4f,0
+15,33
+4f,0
+14,33
+50,0
+14,33
+50,0
+13,33
+51,0
+13,33
+51,0
+12,33
+52,0
+11,33
+53,0
+10,33
+54,0
+f,33
+55,0
+e,33
+56,0
+d,33
+57,0
+c,33
+58,0
+b,33
+59,0
+9,33
+5b,0
+6,33
+3fb,0
+100 90 32
+46b,0
+9,81
+57,0
+d,81
+55,0
+f,81
+52,0
+12,81
+51,0
+13,81
+4f,0
+15,81
+4e,0
+16,81
+4c,0
+18,81
+4b,0
+19,81
+4b,0
+19,81
+4a,0
+1a,81
+49,0
+1b,81
+48,0
+1c,81
+48,0
+1c,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+663,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+18,81
+4c,0
+18,81
+4c,0
+18,81
+4c,0
+18,81
+4c,0
+17,81
+4d,0
+17,81
+4d,0
+17,81
+4d,0
+16,81
+4e,0
+16,81
+4e,0
+15,81
+4f,0
+15,81
+4f,0
+14,81
+50,0
+14,81
+50,0
+13,81
+51,0
+13,81
+51,0
+12,81
+52,0
+11,81
+53,0
+10,81
+54,0
+f,81
+55,0
+e,81
+56,0
+d,81
+57,0
+c,81
+58,0
+b,81
+59,0
+9,81
+5b,0
+6,81
+3fb,0
+100 90 32
+46b,0
+9,a3
+57,0
+d,a3
+55,0
+f,a3
+52,0
+12,a3
+51,0
+13,a3
+4f,0
+15,a3
+4e,0
+16,a3
+4c,0
+18,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4a,0
+1a,a3
+49,0
+1b,a3
+48,0
+1c,a3
+48,0
+1c,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+663,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+18,a3
+4c,0
+18,a3
+4c,0
+18,a3
+4c,0
+18,a3
+4c,0
+17,a3
+4d,0
+17,a3
+4d,0
+17,a3
+4d,0
+16,a3
+4e,0
+16,a3
+4e,0
+15,a3
+4f,0
+15,a3
+4f,0
+14,a3
+50,0
+14,a3
+50,0
+13,a3
+51,0
+13,a3
+51,0
+12,a3
+52,0
+11,a3
+53,0
+10,a3
+54,0
+f,a3
+55,0
+e,a3
+56,0
+d,a3
+57,0
+c,a3
+58,0
+b,a3
+59,0
+9,a3
+5b,0
+6,a3
+3fb,0
+100 90 32
+46b,0
+9,ff
+57,0
+d,ff
+55,0
+f,ff
+52,0
+12,ff
+51,0
+13,ff
+4f,0
+15,ff
+4e,0
+16,ff
+4c,0
+18,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4a,0
+1a,ff
+49,0
+1b,ff
+48,0
+1c,ff
+48,0
+1c,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+663,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+18,ff
+4c,0
+18,ff
+4c,0
+18,ff
+4c,0
+18,ff
+4c,0
+17,ff
+4d,0
+17,ff
+4d,0
+17,ff
+4d,0
+16,ff
+4e,0
+16,ff
+4e,0
+15,ff
+4f,0
+15,ff
+4f,0
+14,ff
+50,0
+14,ff
+50,0
+13,ff
+51,0
+13,ff
+51,0
+12,ff
+52,0
+11,ff
+53,0
+10,ff
+54,0
+f,ff
+55,0
+e,ff
+56,0
+d,ff
+57,0
+c,ff
+58,0
+b,ff
+59,0
+9,ff
+5b,0
+6,ff
+3fb,0
+100 90 32
+46b,0
+9,100
+57,0
+d,100
+55,0
+f,100
+52,0
+12,100
+51,0
+13,100
+4f,0
+15,100
+4e,0
+16,100
+4c,0
+18,100
+4b,0
+19,100
+4b,0
+19,100
+4a,0
+1a,100
+49,0
+1b,100
+48,0
+1c,100
+48,0
+1c,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+663,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+18,100
+4c,0
+18,100
+4c,0
+18,100
+4c,0
+18,100
+4c,0
+17,100
+4d,0
+17,100
+4d,0
+17,100
+4d,0
+16,100
+4e,0
+16,100
+4e,0
+15,100
+4f,0
+15,100
+4f,0
+14,100
+50,0
+14,100
+50,0
+13,100
+51,0
+13,100
+51,0
+12,100
+52,0
+11,100
+53,0
+10,100
+54,0
+f,100
+55,0
+e,100
+56,0
+d,100
+57,0
+c,100
+58,0
+b,100
+59,0
+9,100
+5b,0
+6,100
+3fb,0
+100 90 32
+46b,0
+9,12c
+57,0
+d,12c
+55,0
+f,12c
+52,0
+12,12c
+51,0
+13,12c
+4f,0
+15,12c
+4e,0
+16,12c
+4c,0
+18,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4a,0
+1a,12c
+49,0
+1b,12c
+48,0
+1c,12c
+48,0
+1c,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+663,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+18,12c
+4c,0
+18,12c
+4c,0
+18,12c
+4c,0
+18,12c
+4c,0
+17,12c
+4d,0
+17,12c
+4d,0
+17,12c
+4d,0
+16,12c
+4e,0
+16,12c
+4e,0
+15,12c
+4f,0
+15,12c
+4f,0
+14,12c
+50,0
+14,12c
+50,0
+13,12c
+51,0
+13,12c
+51,0
+12,12c
+52,0
+11,12c
+53,0
+10,12c
+54,0
+f,12c
+55,0
+e,12c
+56,0
+d,12c
+57,0
+c,12c
+58,0
+b,12c
+59,0
+9,12c
+5b,0
+6,12c
+3fb,0
+100 90 32
+46b,0
+9,3e8
+57,0
+d,3e8
+55,0
+f,3e8
+52,0
+12,3e8
+51,0
+13,3e8
+4f,0
+15,3e8
+4e,0
+16,3e8
+4c,0
+18,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4a,0
+1a,3e8
+49,0
+1b,3e8
+48,0
+1c,3e8
+48,0
+1c,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+663,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+18,3e8
+4c,0
+18,3e8
+4c,0
+18,3e8
+4c,0
+18,3e8
+4c,0
+17,3e8
+4d,0
+17,3e8
+4d,0
+17,3e8
+4d,0
+16,3e8
+4e,0
+16,3e8
+4e,0
+15,3e8
+4f,0
+15,3e8
+4f,0
+14,3e8
+50,0
+14,3e8
+50,0
+13,3e8
+51,0
+13,3e8
+51,0
+12,3e8
+52,0
+11,3e8
+53,0
+10,3e8
+54,0
+f,3e8
+55,0
+e,3e8
+56,0
+d,3e8
+57,0
+c,3e8
+58,0
+b,3e8
+59,0
+9,3e8
+5b,0
+6,3e8
+3fb,0
+100 90 32
+46b,0
+9,111111
+57,0
+d,111111
+55,0
+f,111111
+52,0
+12,111111
+51,0
+13,111111
+4f,0
+15,111111
+4e,0
+16,111111
+4c,0
+18,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4a,0
+1a,111111
+49,0
+1b,111111
+48,0
+1c,111111
+48,0
+1c,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+663,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+18,111111
+4c,0
+18,111111
+4c,0
+18,111111
+4c,0
+18,111111
+4c,0
+17,111111
+4d,0
+17,111111
+4d,0
+17,111111
+4d,0
+16,111111
+4e,0
+16,111111
+4e,0
+15,111111
+4f,0
+15,111111
+4f,0
+14,111111
+50,0
+14,111111
+50,0
+13,111111
+51,0
+13,111111
+51,0
+12,111111
+52,0
+11,111111
+53,0
+10,111111
+54,0
+f,111111
+55,0
+e,111111
+56,0
+d,111111
+57,0
+c,111111
+58,0
+b,111111
+59,0
+9,111111
+5b,0
+6,111111
+3fb,0
+100 90 32
+46b,0
+9,400200
+57,0
+d,400200
+55,0
+f,400200
+52,0
+12,400200
+51,0
+13,400200
+4f,0
+15,400200
+4e,0
+16,400200
+4c,0
+18,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4a,0
+1a,400200
+49,0
+1b,400200
+48,0
+1c,400200
+48,0
+1c,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+663,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+18,400200
+4c,0
+18,400200
+4c,0
+18,400200
+4c,0
+18,400200
+4c,0
+17,400200
+4d,0
+17,400200
+4d,0
+17,400200
+4d,0
+16,400200
+4e,0
+16,400200
+4e,0
+15,400200
+4f,0
+15,400200
+4f,0
+14,400200
+50,0
+14,400200
+50,0
+13,400200
+51,0
+13,400200
+51,0
+12,400200
+52,0
+11,400200
+53,0
+10,400200
+54,0
+f,400200
+55,0
+e,400200
+56,0
+d,400200
+57,0
+c,400200
+58,0
+b,400200
+59,0
+9,400200
+5b,0
+6,400200
+3fb,0
+100 90 32
+46b,0
+9,777777
+57,0
+d,777777
+55,0
+f,777777
+52,0
+12,777777
+51,0
+13,777777
+4f,0
+15,777777
+4e,0
+16,777777
+4c,0
+18,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4a,0
+1a,777777
+49,0
+1b,777777
+48,0
+1c,777777
+48,0
+1c,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+663,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+18,777777
+4c,0
+18,777777
+4c,0
+18,777777
+4c,0
+18,777777
+4c,0
+17,777777
+4d,0
+17,777777
+4d,0
+17,777777
+4d,0
+16,777777
+4e,0
+16,777777
+4e,0
+15,777777
+4f,0
+15,777777
+4f,0
+14,777777
+50,0
+14,777777
+50,0
+13,777777
+51,0
+13,777777
+51,0
+12,777777
+52,0
+11,777777
+53,0
+10,777777
+54,0
+f,777777
+55,0
+e,777777
+56,0
+d,777777
+57,0
+c,777777
+58,0
+b,777777
+59,0
+9,777777
+5b,0
+6,777777
+3fb,0
+100 90 32
+46b,0
+9,1
+57,0
+d,1
+55,0
+f,1
+52,0
+12,1
+51,0
+13,1
+4f,0
+15,1
+4e,0
+16,1
+4c,0
+18,1
+4b,0
+19,1
+4b,0
+19,1
+4a,0
+1a,1
+49,0
+1b,1
+48,0
+1c,1
+48,0
+1c,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+663,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4d,0
+16,1
+4e,0
+16,1
+4e,0
+15,1
+4f,0
+15,1
+4f,0
+14,1
+50,0
+14,1
+50,0
+13,1
+51,0
+13,1
+51,0
+12,1
+52,0
+11,1
+53,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+b,1
+59,0
+9,1
+5b,0
+6,1
+3fb,0
+100 90 32
+46b,0
+9,2
+57,0
+d,2
+55,0
+f,2
+52,0
+12,2
+51,0
+13,2
+4f,0
+15,2
+4e,0
+16,2
+4c,0
+18,2
+4b,0
+19,2
+4b,0
+19,2
+4a,0
+1a,2
+49,0
+1b,2
+48,0
+1c,2
+48,0
+1c,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+663,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+18,2
+4c,0
+18,2
+4c,0
+18,2
+4c,0
+18,2
+4c,0
+17,2
+4d,0
+17,2
+4d,0
+17,2
+4d,0
+16,2
+4e,0
+16,2
+4e,0
+15,2
+4f,0
+15,2
+4f,0
+14,2
+50,0
+14,2
+50,0
+13,2
+51,0
+13,2
+51,0
+12,2
+52,0
+11,2
+53,0
+10,2
+54,0
+f,2
+55,0
+e,2
+56,0
+d,2
+57,0
+c,2
+58,0
+b,2
+59,0
+9,2
+5b,0
+6,2
+3fb,0
+100 90 32
+46b,0
+9,3
+57,0
+d,3
+55,0
+f,3
+52,0
+12,3
+51,0
+13,3
+4f,0
+15,3
+4e,0
+16,3
+4c,0
+18,3
+4b,0
+19,3
+4b,0
+19,3
+4a,0
+1a,3
+49,0
+1b,3
+48,0
+1c,3
+48,0
+1c,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+663,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+18,3
+4c,0
+18,3
+4c,0
+18,3
+4c,0
+18,3
+4c,0
+17,3
+4d,0
+17,3
+4d,0
+17,3
+4d,0
+16,3
+4e,0
+16,3
+4e,0
+15,3
+4f,0
+15,3
+4f,0
+14,3
+50,0
+14,3
+50,0
+13,3
+51,0
+13,3
+51,0
+12,3
+52,0
+11,3
+53,0
+10,3
+54,0
+f,3
+55,0
+e,3
+56,0
+d,3
+57,0
+c,3
+58,0
+b,3
+59,0
+9,3
+5b,0
+6,3
+3fb,0
+100 90 32
+46b,0
+9,4
+57,0
+d,4
+55,0
+f,4
+52,0
+12,4
+51,0
+13,4
+4f,0
+15,4
+4e,0
+16,4
+4c,0
+18,4
+4b,0
+19,4
+4b,0
+19,4
+4a,0
+1a,4
+49,0
+1b,4
+48,0
+1c,4
+48,0
+1c,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+663,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+18,4
+4c,0
+18,4
+4c,0
+18,4
+4c,0
+18,4
+4c,0
+17,4
+4d,0
+17,4
+4d,0
+17,4
+4d,0
+16,4
+4e,0
+16,4
+4e,0
+15,4
+4f,0
+15,4
+4f,0
+14,4
+50,0
+14,4
+50,0
+13,4
+51,0
+13,4
+51,0
+12,4
+52,0
+11,4
+53,0
+10,4
+54,0
+f,4
+55,0
+e,4
+56,0
+d,4
+57,0
+c,4
+58,0
+b,4
+59,0
+9,4
+5b,0
+6,4
+3fb,0
+100 90 32
+46b,0
+9,6
+57,0
+d,6
+55,0
+f,6
+52,0
+12,6
+51,0
+13,6
+4f,0
+15,6
+4e,0
+16,6
+4c,0
+18,6
+4b,0
+19,6
+4b,0
+19,6
+4a,0
+1a,6
+49,0
+1b,6
+48,0
+1c,6
+48,0
+1c,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+663,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+18,6
+4c,0
+18,6
+4c,0
+18,6
+4c,0
+18,6
+4c,0
+17,6
+4d,0
+17,6
+4d,0
+17,6
+4d,0
+16,6
+4e,0
+16,6
+4e,0
+15,6
+4f,0
+15,6
+4f,0
+14,6
+50,0
+14,6
+50,0
+13,6
+51,0
+13,6
+51,0
+12,6
+52,0
+11,6
+53,0
+10,6
+54,0
+f,6
+55,0
+e,6
+56,0
+d,6
+57,0
+c,6
+58,0
+b,6
+59,0
+9,6
+5b,0
+6,6
+3fb,0
+100 90 32
+46b,0
+9,7
+57,0
+d,7
+55,0
+f,7
+52,0
+12,7
+51,0
+13,7
+4f,0
+15,7
+4e,0
+16,7
+4c,0
+18,7
+4b,0
+19,7
+4b,0
+19,7
+4a,0
+1a,7
+49,0
+1b,7
+48,0
+1c,7
+48,0
+1c,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+663,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+18,7
+4c,0
+18,7
+4c,0
+18,7
+4c,0
+18,7
+4c,0
+17,7
+4d,0
+17,7
+4d,0
+17,7
+4d,0
+16,7
+4e,0
+16,7
+4e,0
+15,7
+4f,0
+15,7
+4f,0
+14,7
+50,0
+14,7
+50,0
+13,7
+51,0
+13,7
+51,0
+12,7
+52,0
+11,7
+53,0
+10,7
+54,0
+f,7
+55,0
+e,7
+56,0
+d,7
+57,0
+c,7
+58,0
+b,7
+59,0
+9,7
+5b,0
+6,7
+3fb,0
+100 90 32
+46b,0
+9,10
+57,0
+d,10
+55,0
+f,10
+52,0
+12,10
+51,0
+13,10
+4f,0
+15,10
+4e,0
+16,10
+4c,0
+18,10
+4b,0
+19,10
+4b,0
+19,10
+4a,0
+1a,10
+49,0
+1b,10
+48,0
+1c,10
+48,0
+1c,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+663,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+18,10
+4c,0
+18,10
+4c,0
+18,10
+4c,0
+18,10
+4c,0
+17,10
+4d,0
+17,10
+4d,0
+17,10
+4d,0
+16,10
+4e,0
+16,10
+4e,0
+15,10
+4f,0
+15,10
+4f,0
+14,10
+50,0
+14,10
+50,0
+13,10
+51,0
+13,10
+51,0
+12,10
+52,0
+11,10
+53,0
+10,10
+54,0
+f,10
+55,0
+e,10
+56,0
+d,10
+57,0
+c,10
+58,0
+b,10
+59,0
+9,10
+5b,0
+6,10
+3fb,0
+100 90 32
+46b,0
+9,33
+57,0
+d,33
+55,0
+f,33
+52,0
+12,33
+51,0
+13,33
+4f,0
+15,33
+4e,0
+16,33
+4c,0
+18,33
+4b,0
+19,33
+4b,0
+19,33
+4a,0
+1a,33
+49,0
+1b,33
+48,0
+1c,33
+48,0
+1c,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+663,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+18,33
+4c,0
+18,33
+4c,0
+18,33
+4c,0
+18,33
+4c,0
+17,33
+4d,0
+17,33
+4d,0
+17,33
+4d,0
+16,33
+4e,0
+16,33
+4e,0
+15,33
+4f,0
+15,33
+4f,0
+14,33
+50,0
+14,33
+50,0
+13,33
+51,0
+13,33
+51,0
+12,33
+52,0
+11,33
+53,0
+10,33
+54,0
+f,33
+55,0
+e,33
+56,0
+d,33
+57,0
+c,33
+58,0
+b,33
+59,0
+9,33
+5b,0
+6,33
+3fb,0
+100 90 32
+46b,0
+9,81
+57,0
+d,81
+55,0
+f,81
+52,0
+12,81
+51,0
+13,81
+4f,0
+15,81
+4e,0
+16,81
+4c,0
+18,81
+4b,0
+19,81
+4b,0
+19,81
+4a,0
+1a,81
+49,0
+1b,81
+48,0
+1c,81
+48,0
+1c,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+663,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+18,81
+4c,0
+18,81
+4c,0
+18,81
+4c,0
+18,81
+4c,0
+17,81
+4d,0
+17,81
+4d,0
+17,81
+4d,0
+16,81
+4e,0
+16,81
+4e,0
+15,81
+4f,0
+15,81
+4f,0
+14,81
+50,0
+14,81
+50,0
+13,81
+51,0
+13,81
+51,0
+12,81
+52,0
+11,81
+53,0
+10,81
+54,0
+f,81
+55,0
+e,81
+56,0
+d,81
+57,0
+c,81
+58,0
+b,81
+59,0
+9,81
+5b,0
+6,81
+3fb,0
+100 90 32
+46b,0
+9,a3
+57,0
+d,a3
+55,0
+f,a3
+52,0
+12,a3
+51,0
+13,a3
+4f,0
+15,a3
+4e,0
+16,a3
+4c,0
+18,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4a,0
+1a,a3
+49,0
+1b,a3
+48,0
+1c,a3
+48,0
+1c,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+663,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+18,a3
+4c,0
+18,a3
+4c,0
+18,a3
+4c,0
+18,a3
+4c,0
+17,a3
+4d,0
+17,a3
+4d,0
+17,a3
+4d,0
+16,a3
+4e,0
+16,a3
+4e,0
+15,a3
+4f,0
+15,a3
+4f,0
+14,a3
+50,0
+14,a3
+50,0
+13,a3
+51,0
+13,a3
+51,0
+12,a3
+52,0
+11,a3
+53,0
+10,a3
+54,0
+f,a3
+55,0
+e,a3
+56,0
+d,a3
+57,0
+c,a3
+58,0
+b,a3
+59,0
+9,a3
+5b,0
+6,a3
+3fb,0
+100 90 32
+46b,0
+9,ff
+57,0
+d,ff
+55,0
+f,ff
+52,0
+12,ff
+51,0
+13,ff
+4f,0
+15,ff
+4e,0
+16,ff
+4c,0
+18,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4a,0
+1a,ff
+49,0
+1b,ff
+48,0
+1c,ff
+48,0
+1c,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+663,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+18,ff
+4c,0
+18,ff
+4c,0
+18,ff
+4c,0
+18,ff
+4c,0
+17,ff
+4d,0
+17,ff
+4d,0
+17,ff
+4d,0
+16,ff
+4e,0
+16,ff
+4e,0
+15,ff
+4f,0
+15,ff
+4f,0
+14,ff
+50,0
+14,ff
+50,0
+13,ff
+51,0
+13,ff
+51,0
+12,ff
+52,0
+11,ff
+53,0
+10,ff
+54,0
+f,ff
+55,0
+e,ff
+56,0
+d,ff
+57,0
+c,ff
+58,0
+b,ff
+59,0
+9,ff
+5b,0
+6,ff
+3fb,0
+100 90 32
+46b,0
+9,100
+57,0
+d,100
+55,0
+f,100
+52,0
+12,100
+51,0
+13,100
+4f,0
+15,100
+4e,0
+16,100
+4c,0
+18,100
+4b,0
+19,100
+4b,0
+19,100
+4a,0
+1a,100
+49,0
+1b,100
+48,0
+1c,100
+48,0
+1c,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+663,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+18,100
+4c,0
+18,100
+4c,0
+18,100
+4c,0
+18,100
+4c,0
+17,100
+4d,0
+17,100
+4d,0
+17,100
+4d,0
+16,100
+4e,0
+16,100
+4e,0
+15,100
+4f,0
+15,100
+4f,0
+14,100
+50,0
+14,100
+50,0
+13,100
+51,0
+13,100
+51,0
+12,100
+52,0
+11,100
+53,0
+10,100
+54,0
+f,100
+55,0
+e,100
+56,0
+d,100
+57,0
+c,100
+58,0
+b,100
+59,0
+9,100
+5b,0
+6,100
+3fb,0
+100 90 32
+46b,0
+9,12c
+57,0
+d,12c
+55,0
+f,12c
+52,0
+12,12c
+51,0
+13,12c
+4f,0
+15,12c
+4e,0
+16,12c
+4c,0
+18,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4a,0
+1a,12c
+49,0
+1b,12c
+48,0
+1c,12c
+48,0
+1c,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+663,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+18,12c
+4c,0
+18,12c
+4c,0
+18,12c
+4c,0
+18,12c
+4c,0
+17,12c
+4d,0
+17,12c
+4d,0
+17,12c
+4d,0
+16,12c
+4e,0
+16,12c
+4e,0
+15,12c
+4f,0
+15,12c
+4f,0
+14,12c
+50,0
+14,12c
+50,0
+13,12c
+51,0
+13,12c
+51,0
+12,12c
+52,0
+11,12c
+53,0
+10,12c
+54,0
+f,12c
+55,0
+e,12c
+56,0
+d,12c
+57,0
+c,12c
+58,0
+b,12c
+59,0
+9,12c
+5b,0
+6,12c
+3fb,0
+100 90 32
+46b,0
+9,3e8
+57,0
+d,3e8
+55,0
+f,3e8
+52,0
+12,3e8
+51,0
+13,3e8
+4f,0
+15,3e8
+4e,0
+16,3e8
+4c,0
+18,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4a,0
+1a,3e8
+49,0
+1b,3e8
+48,0
+1c,3e8
+48,0
+1c,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+663,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+18,3e8
+4c,0
+18,3e8
+4c,0
+18,3e8
+4c,0
+18,3e8
+4c,0
+17,3e8
+4d,0
+17,3e8
+4d,0
+17,3e8
+4d,0
+16,3e8
+4e,0
+16,3e8
+4e,0
+15,3e8
+4f,0
+15,3e8
+4f,0
+14,3e8
+50,0
+14,3e8
+50,0
+13,3e8
+51,0
+13,3e8
+51,0
+12,3e8
+52,0
+11,3e8
+53,0
+10,3e8
+54,0
+f,3e8
+55,0
+e,3e8
+56,0
+d,3e8
+57,0
+c,3e8
+58,0
+b,3e8
+59,0
+9,3e8
+5b,0
+6,3e8
+3fb,0
+100 90 32
+46b,0
+9,111111
+57,0
+d,111111
+55,0
+f,111111
+52,0
+12,111111
+51,0
+13,111111
+4f,0
+15,111111
+4e,0
+16,111111
+4c,0
+18,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4a,0
+1a,111111
+49,0
+1b,111111
+48,0
+1c,111111
+48,0
+1c,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+663,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+18,111111
+4c,0
+18,111111
+4c,0
+18,111111
+4c,0
+18,111111
+4c,0
+17,111111
+4d,0
+17,111111
+4d,0
+17,111111
+4d,0
+16,111111
+4e,0
+16,111111
+4e,0
+15,111111
+4f,0
+15,111111
+4f,0
+14,111111
+50,0
+14,111111
+50,0
+13,111111
+51,0
+13,111111
+51,0
+12,111111
+52,0
+11,111111
+53,0
+10,111111
+54,0
+f,111111
+55,0
+e,111111
+56,0
+d,111111
+57,0
+c,111111
+58,0
+b,111111
+59,0
+9,111111
+5b,0
+6,111111
+3fb,0
+100 90 32
+46b,0
+9,400200
+57,0
+d,400200
+55,0
+f,400200
+52,0
+12,400200
+51,0
+13,400200
+4f,0
+15,400200
+4e,0
+16,400200
+4c,0
+18,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4a,0
+1a,400200
+49,0
+1b,400200
+48,0
+1c,400200
+48,0
+1c,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+663,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+18,400200
+4c,0
+18,400200
+4c,0
+18,400200
+4c,0
+18,400200
+4c,0
+17,400200
+4d,0
+17,400200
+4d,0
+17,400200
+4d,0
+16,400200
+4e,0
+16,400200
+4e,0
+15,400200
+4f,0
+15,400200
+4f,0
+14,400200
+50,0
+14,400200
+50,0
+13,400200
+51,0
+13,400200
+51,0
+12,400200
+52,0
+11,400200
+53,0
+10,400200
+54,0
+f,400200
+55,0
+e,400200
+56,0
+d,400200
+57,0
+c,400200
+58,0
+b,400200
+59,0
+9,400200
+5b,0
+6,400200
+3fb,0
+100 90 32
+46b,0
+9,777777
+57,0
+d,777777
+55,0
+f,777777
+52,0
+12,777777
+51,0
+13,777777
+4f,0
+15,777777
+4e,0
+16,777777
+4c,0
+18,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4a,0
+1a,777777
+49,0
+1b,777777
+48,0
+1c,777777
+48,0
+1c,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+663,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+18,777777
+4c,0
+18,777777
+4c,0
+18,777777
+4c,0
+18,777777
+4c,0
+17,777777
+4d,0
+17,777777
+4d,0
+17,777777
+4d,0
+16,777777
+4e,0
+16,777777
+4e,0
+15,777777
+4f,0
+15,777777
+4f,0
+14,777777
+50,0
+14,777777
+50,0
+13,777777
+51,0
+13,777777
+51,0
+12,777777
+52,0
+11,777777
+53,0
+10,777777
+54,0
+f,777777
+55,0
+e,777777
+56,0
+d,777777
+57,0
+c,777777
+58,0
+b,777777
+59,0
+9,777777
+5b,0
+6,777777
+3fb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/a39.dat b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a39.dat
new file mode 100644
index 000000000..0aa32c0ad
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a39.dat
@@ -0,0 +1,3743 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+46b,0
+9,1
+57,0
+d,1
+55,0
+f,1
+52,0
+12,1
+51,0
+13,1
+4f,0
+15,1
+4e,0
+16,1
+4c,0
+18,1
+4b,0
+19,1
+4b,0
+19,1
+4a,0
+1a,1
+49,0
+1b,1
+48,0
+1c,1
+48,0
+1c,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+663,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4d,0
+16,1
+4e,0
+16,1
+4e,0
+15,1
+4f,0
+15,1
+4f,0
+14,1
+50,0
+14,1
+50,0
+13,1
+51,0
+13,1
+51,0
+12,1
+52,0
+11,1
+53,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+b,1
+59,0
+9,1
+5b,0
+6,1
+3fb,0
+100 90 32
+46b,0
+9,2
+57,0
+d,2
+55,0
+f,2
+52,0
+12,2
+51,0
+13,2
+4f,0
+15,2
+4e,0
+16,2
+4c,0
+18,2
+4b,0
+19,2
+4b,0
+19,2
+4a,0
+1a,2
+49,0
+1b,2
+48,0
+1c,2
+48,0
+1c,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+663,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+18,2
+4c,0
+18,2
+4c,0
+18,2
+4c,0
+18,2
+4c,0
+17,2
+4d,0
+17,2
+4d,0
+17,2
+4d,0
+16,2
+4e,0
+16,2
+4e,0
+15,2
+4f,0
+15,2
+4f,0
+14,2
+50,0
+14,2
+50,0
+13,2
+51,0
+13,2
+51,0
+12,2
+52,0
+11,2
+53,0
+10,2
+54,0
+f,2
+55,0
+e,2
+56,0
+d,2
+57,0
+c,2
+58,0
+b,2
+59,0
+9,2
+5b,0
+6,2
+3fb,0
+100 90 32
+46b,0
+9,3
+57,0
+d,3
+55,0
+f,3
+52,0
+12,3
+51,0
+13,3
+4f,0
+15,3
+4e,0
+16,3
+4c,0
+18,3
+4b,0
+19,3
+4b,0
+19,3
+4a,0
+1a,3
+49,0
+1b,3
+48,0
+1c,3
+48,0
+1c,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+663,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+18,3
+4c,0
+18,3
+4c,0
+18,3
+4c,0
+18,3
+4c,0
+17,3
+4d,0
+17,3
+4d,0
+17,3
+4d,0
+16,3
+4e,0
+16,3
+4e,0
+15,3
+4f,0
+15,3
+4f,0
+14,3
+50,0
+14,3
+50,0
+13,3
+51,0
+13,3
+51,0
+12,3
+52,0
+11,3
+53,0
+10,3
+54,0
+f,3
+55,0
+e,3
+56,0
+d,3
+57,0
+c,3
+58,0
+b,3
+59,0
+9,3
+5b,0
+6,3
+3fb,0
+100 90 32
+46b,0
+9,4
+57,0
+d,4
+55,0
+f,4
+52,0
+12,4
+51,0
+13,4
+4f,0
+15,4
+4e,0
+16,4
+4c,0
+18,4
+4b,0
+19,4
+4b,0
+19,4
+4a,0
+1a,4
+49,0
+1b,4
+48,0
+1c,4
+48,0
+1c,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+663,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+18,4
+4c,0
+18,4
+4c,0
+18,4
+4c,0
+18,4
+4c,0
+17,4
+4d,0
+17,4
+4d,0
+17,4
+4d,0
+16,4
+4e,0
+16,4
+4e,0
+15,4
+4f,0
+15,4
+4f,0
+14,4
+50,0
+14,4
+50,0
+13,4
+51,0
+13,4
+51,0
+12,4
+52,0
+11,4
+53,0
+10,4
+54,0
+f,4
+55,0
+e,4
+56,0
+d,4
+57,0
+c,4
+58,0
+b,4
+59,0
+9,4
+5b,0
+6,4
+3fb,0
+100 90 32
+46b,0
+9,6
+57,0
+d,6
+55,0
+f,6
+52,0
+12,6
+51,0
+13,6
+4f,0
+15,6
+4e,0
+16,6
+4c,0
+18,6
+4b,0
+19,6
+4b,0
+19,6
+4a,0
+1a,6
+49,0
+1b,6
+48,0
+1c,6
+48,0
+1c,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+663,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+18,6
+4c,0
+18,6
+4c,0
+18,6
+4c,0
+18,6
+4c,0
+17,6
+4d,0
+17,6
+4d,0
+17,6
+4d,0
+16,6
+4e,0
+16,6
+4e,0
+15,6
+4f,0
+15,6
+4f,0
+14,6
+50,0
+14,6
+50,0
+13,6
+51,0
+13,6
+51,0
+12,6
+52,0
+11,6
+53,0
+10,6
+54,0
+f,6
+55,0
+e,6
+56,0
+d,6
+57,0
+c,6
+58,0
+b,6
+59,0
+9,6
+5b,0
+6,6
+3fb,0
+100 90 32
+46b,0
+9,7
+57,0
+d,7
+55,0
+f,7
+52,0
+12,7
+51,0
+13,7
+4f,0
+15,7
+4e,0
+16,7
+4c,0
+18,7
+4b,0
+19,7
+4b,0
+19,7
+4a,0
+1a,7
+49,0
+1b,7
+48,0
+1c,7
+48,0
+1c,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+663,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+18,7
+4c,0
+18,7
+4c,0
+18,7
+4c,0
+18,7
+4c,0
+17,7
+4d,0
+17,7
+4d,0
+17,7
+4d,0
+16,7
+4e,0
+16,7
+4e,0
+15,7
+4f,0
+15,7
+4f,0
+14,7
+50,0
+14,7
+50,0
+13,7
+51,0
+13,7
+51,0
+12,7
+52,0
+11,7
+53,0
+10,7
+54,0
+f,7
+55,0
+e,7
+56,0
+d,7
+57,0
+c,7
+58,0
+b,7
+59,0
+9,7
+5b,0
+6,7
+3fb,0
+100 90 32
+46b,0
+9,10
+57,0
+d,10
+55,0
+f,10
+52,0
+12,10
+51,0
+13,10
+4f,0
+15,10
+4e,0
+16,10
+4c,0
+18,10
+4b,0
+19,10
+4b,0
+19,10
+4a,0
+1a,10
+49,0
+1b,10
+48,0
+1c,10
+48,0
+1c,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+663,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+18,10
+4c,0
+18,10
+4c,0
+18,10
+4c,0
+18,10
+4c,0
+17,10
+4d,0
+17,10
+4d,0
+17,10
+4d,0
+16,10
+4e,0
+16,10
+4e,0
+15,10
+4f,0
+15,10
+4f,0
+14,10
+50,0
+14,10
+50,0
+13,10
+51,0
+13,10
+51,0
+12,10
+52,0
+11,10
+53,0
+10,10
+54,0
+f,10
+55,0
+e,10
+56,0
+d,10
+57,0
+c,10
+58,0
+b,10
+59,0
+9,10
+5b,0
+6,10
+3fb,0
+100 90 32
+46b,0
+9,33
+57,0
+d,33
+55,0
+f,33
+52,0
+12,33
+51,0
+13,33
+4f,0
+15,33
+4e,0
+16,33
+4c,0
+18,33
+4b,0
+19,33
+4b,0
+19,33
+4a,0
+1a,33
+49,0
+1b,33
+48,0
+1c,33
+48,0
+1c,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+663,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+18,33
+4c,0
+18,33
+4c,0
+18,33
+4c,0
+18,33
+4c,0
+17,33
+4d,0
+17,33
+4d,0
+17,33
+4d,0
+16,33
+4e,0
+16,33
+4e,0
+15,33
+4f,0
+15,33
+4f,0
+14,33
+50,0
+14,33
+50,0
+13,33
+51,0
+13,33
+51,0
+12,33
+52,0
+11,33
+53,0
+10,33
+54,0
+f,33
+55,0
+e,33
+56,0
+d,33
+57,0
+c,33
+58,0
+b,33
+59,0
+9,33
+5b,0
+6,33
+3fb,0
+100 90 32
+46b,0
+9,81
+57,0
+d,81
+55,0
+f,81
+52,0
+12,81
+51,0
+13,81
+4f,0
+15,81
+4e,0
+16,81
+4c,0
+18,81
+4b,0
+19,81
+4b,0
+19,81
+4a,0
+1a,81
+49,0
+1b,81
+48,0
+1c,81
+48,0
+1c,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+663,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+18,81
+4c,0
+18,81
+4c,0
+18,81
+4c,0
+18,81
+4c,0
+17,81
+4d,0
+17,81
+4d,0
+17,81
+4d,0
+16,81
+4e,0
+16,81
+4e,0
+15,81
+4f,0
+15,81
+4f,0
+14,81
+50,0
+14,81
+50,0
+13,81
+51,0
+13,81
+51,0
+12,81
+52,0
+11,81
+53,0
+10,81
+54,0
+f,81
+55,0
+e,81
+56,0
+d,81
+57,0
+c,81
+58,0
+b,81
+59,0
+9,81
+5b,0
+6,81
+3fb,0
+100 90 32
+46b,0
+9,a3
+57,0
+d,a3
+55,0
+f,a3
+52,0
+12,a3
+51,0
+13,a3
+4f,0
+15,a3
+4e,0
+16,a3
+4c,0
+18,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4a,0
+1a,a3
+49,0
+1b,a3
+48,0
+1c,a3
+48,0
+1c,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+663,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+18,a3
+4c,0
+18,a3
+4c,0
+18,a3
+4c,0
+18,a3
+4c,0
+17,a3
+4d,0
+17,a3
+4d,0
+17,a3
+4d,0
+16,a3
+4e,0
+16,a3
+4e,0
+15,a3
+4f,0
+15,a3
+4f,0
+14,a3
+50,0
+14,a3
+50,0
+13,a3
+51,0
+13,a3
+51,0
+12,a3
+52,0
+11,a3
+53,0
+10,a3
+54,0
+f,a3
+55,0
+e,a3
+56,0
+d,a3
+57,0
+c,a3
+58,0
+b,a3
+59,0
+9,a3
+5b,0
+6,a3
+3fb,0
+100 90 32
+46b,0
+9,ff
+57,0
+d,ff
+55,0
+f,ff
+52,0
+12,ff
+51,0
+13,ff
+4f,0
+15,ff
+4e,0
+16,ff
+4c,0
+18,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4a,0
+1a,ff
+49,0
+1b,ff
+48,0
+1c,ff
+48,0
+1c,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+663,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+18,ff
+4c,0
+18,ff
+4c,0
+18,ff
+4c,0
+18,ff
+4c,0
+17,ff
+4d,0
+17,ff
+4d,0
+17,ff
+4d,0
+16,ff
+4e,0
+16,ff
+4e,0
+15,ff
+4f,0
+15,ff
+4f,0
+14,ff
+50,0
+14,ff
+50,0
+13,ff
+51,0
+13,ff
+51,0
+12,ff
+52,0
+11,ff
+53,0
+10,ff
+54,0
+f,ff
+55,0
+e,ff
+56,0
+d,ff
+57,0
+c,ff
+58,0
+b,ff
+59,0
+9,ff
+5b,0
+6,ff
+3fb,0
+100 90 32
+46b,0
+9,100
+57,0
+d,100
+55,0
+f,100
+52,0
+12,100
+51,0
+13,100
+4f,0
+15,100
+4e,0
+16,100
+4c,0
+18,100
+4b,0
+19,100
+4b,0
+19,100
+4a,0
+1a,100
+49,0
+1b,100
+48,0
+1c,100
+48,0
+1c,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+663,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+18,100
+4c,0
+18,100
+4c,0
+18,100
+4c,0
+18,100
+4c,0
+17,100
+4d,0
+17,100
+4d,0
+17,100
+4d,0
+16,100
+4e,0
+16,100
+4e,0
+15,100
+4f,0
+15,100
+4f,0
+14,100
+50,0
+14,100
+50,0
+13,100
+51,0
+13,100
+51,0
+12,100
+52,0
+11,100
+53,0
+10,100
+54,0
+f,100
+55,0
+e,100
+56,0
+d,100
+57,0
+c,100
+58,0
+b,100
+59,0
+9,100
+5b,0
+6,100
+3fb,0
+100 90 32
+46b,0
+9,12c
+57,0
+d,12c
+55,0
+f,12c
+52,0
+12,12c
+51,0
+13,12c
+4f,0
+15,12c
+4e,0
+16,12c
+4c,0
+18,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4a,0
+1a,12c
+49,0
+1b,12c
+48,0
+1c,12c
+48,0
+1c,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+663,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+18,12c
+4c,0
+18,12c
+4c,0
+18,12c
+4c,0
+18,12c
+4c,0
+17,12c
+4d,0
+17,12c
+4d,0
+17,12c
+4d,0
+16,12c
+4e,0
+16,12c
+4e,0
+15,12c
+4f,0
+15,12c
+4f,0
+14,12c
+50,0
+14,12c
+50,0
+13,12c
+51,0
+13,12c
+51,0
+12,12c
+52,0
+11,12c
+53,0
+10,12c
+54,0
+f,12c
+55,0
+e,12c
+56,0
+d,12c
+57,0
+c,12c
+58,0
+b,12c
+59,0
+9,12c
+5b,0
+6,12c
+3fb,0
+100 90 32
+46b,0
+9,3e8
+57,0
+d,3e8
+55,0
+f,3e8
+52,0
+12,3e8
+51,0
+13,3e8
+4f,0
+15,3e8
+4e,0
+16,3e8
+4c,0
+18,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4a,0
+1a,3e8
+49,0
+1b,3e8
+48,0
+1c,3e8
+48,0
+1c,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+663,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+18,3e8
+4c,0
+18,3e8
+4c,0
+18,3e8
+4c,0
+18,3e8
+4c,0
+17,3e8
+4d,0
+17,3e8
+4d,0
+17,3e8
+4d,0
+16,3e8
+4e,0
+16,3e8
+4e,0
+15,3e8
+4f,0
+15,3e8
+4f,0
+14,3e8
+50,0
+14,3e8
+50,0
+13,3e8
+51,0
+13,3e8
+51,0
+12,3e8
+52,0
+11,3e8
+53,0
+10,3e8
+54,0
+f,3e8
+55,0
+e,3e8
+56,0
+d,3e8
+57,0
+c,3e8
+58,0
+b,3e8
+59,0
+9,3e8
+5b,0
+6,3e8
+3fb,0
+100 90 32
+46b,0
+9,111111
+57,0
+d,111111
+55,0
+f,111111
+52,0
+12,111111
+51,0
+13,111111
+4f,0
+15,111111
+4e,0
+16,111111
+4c,0
+18,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4a,0
+1a,111111
+49,0
+1b,111111
+48,0
+1c,111111
+48,0
+1c,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+663,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+18,111111
+4c,0
+18,111111
+4c,0
+18,111111
+4c,0
+18,111111
+4c,0
+17,111111
+4d,0
+17,111111
+4d,0
+17,111111
+4d,0
+16,111111
+4e,0
+16,111111
+4e,0
+15,111111
+4f,0
+15,111111
+4f,0
+14,111111
+50,0
+14,111111
+50,0
+13,111111
+51,0
+13,111111
+51,0
+12,111111
+52,0
+11,111111
+53,0
+10,111111
+54,0
+f,111111
+55,0
+e,111111
+56,0
+d,111111
+57,0
+c,111111
+58,0
+b,111111
+59,0
+9,111111
+5b,0
+6,111111
+3fb,0
+100 90 32
+46b,0
+9,400200
+57,0
+d,400200
+55,0
+f,400200
+52,0
+12,400200
+51,0
+13,400200
+4f,0
+15,400200
+4e,0
+16,400200
+4c,0
+18,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4a,0
+1a,400200
+49,0
+1b,400200
+48,0
+1c,400200
+48,0
+1c,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+663,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+18,400200
+4c,0
+18,400200
+4c,0
+18,400200
+4c,0
+18,400200
+4c,0
+17,400200
+4d,0
+17,400200
+4d,0
+17,400200
+4d,0
+16,400200
+4e,0
+16,400200
+4e,0
+15,400200
+4f,0
+15,400200
+4f,0
+14,400200
+50,0
+14,400200
+50,0
+13,400200
+51,0
+13,400200
+51,0
+12,400200
+52,0
+11,400200
+53,0
+10,400200
+54,0
+f,400200
+55,0
+e,400200
+56,0
+d,400200
+57,0
+c,400200
+58,0
+b,400200
+59,0
+9,400200
+5b,0
+6,400200
+3fb,0
+100 90 32
+46b,0
+9,777777
+57,0
+d,777777
+55,0
+f,777777
+52,0
+12,777777
+51,0
+13,777777
+4f,0
+15,777777
+4e,0
+16,777777
+4c,0
+18,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4a,0
+1a,777777
+49,0
+1b,777777
+48,0
+1c,777777
+48,0
+1c,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+663,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+18,777777
+4c,0
+18,777777
+4c,0
+18,777777
+4c,0
+18,777777
+4c,0
+17,777777
+4d,0
+17,777777
+4d,0
+17,777777
+4d,0
+16,777777
+4e,0
+16,777777
+4e,0
+15,777777
+4f,0
+15,777777
+4f,0
+14,777777
+50,0
+14,777777
+50,0
+13,777777
+51,0
+13,777777
+51,0
+12,777777
+52,0
+11,777777
+53,0
+10,777777
+54,0
+f,777777
+55,0
+e,777777
+56,0
+d,777777
+57,0
+c,777777
+58,0
+b,777777
+59,0
+9,777777
+5b,0
+6,777777
+3fb,0
+100 90 32
+46b,0
+9,1
+57,0
+d,1
+55,0
+f,1
+52,0
+12,1
+51,0
+13,1
+4f,0
+15,1
+4e,0
+16,1
+4c,0
+18,1
+4b,0
+19,1
+4b,0
+19,1
+4a,0
+1a,1
+49,0
+1b,1
+48,0
+1c,1
+48,0
+1c,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+47,0
+1d,1
+663,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4d,0
+16,1
+4e,0
+16,1
+4e,0
+15,1
+4f,0
+15,1
+4f,0
+14,1
+50,0
+14,1
+50,0
+13,1
+51,0
+13,1
+51,0
+12,1
+52,0
+11,1
+53,0
+10,1
+54,0
+f,1
+55,0
+e,1
+56,0
+d,1
+57,0
+c,1
+58,0
+b,1
+59,0
+9,1
+5b,0
+6,1
+3fb,0
+100 90 32
+46b,0
+9,2
+57,0
+d,2
+55,0
+f,2
+52,0
+12,2
+51,0
+13,2
+4f,0
+15,2
+4e,0
+16,2
+4c,0
+18,2
+4b,0
+19,2
+4b,0
+19,2
+4a,0
+1a,2
+49,0
+1b,2
+48,0
+1c,2
+48,0
+1c,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+47,0
+1d,2
+663,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+19,2
+4b,0
+18,2
+4c,0
+18,2
+4c,0
+18,2
+4c,0
+18,2
+4c,0
+17,2
+4d,0
+17,2
+4d,0
+17,2
+4d,0
+16,2
+4e,0
+16,2
+4e,0
+15,2
+4f,0
+15,2
+4f,0
+14,2
+50,0
+14,2
+50,0
+13,2
+51,0
+13,2
+51,0
+12,2
+52,0
+11,2
+53,0
+10,2
+54,0
+f,2
+55,0
+e,2
+56,0
+d,2
+57,0
+c,2
+58,0
+b,2
+59,0
+9,2
+5b,0
+6,2
+3fb,0
+100 90 32
+46b,0
+9,3
+57,0
+d,3
+55,0
+f,3
+52,0
+12,3
+51,0
+13,3
+4f,0
+15,3
+4e,0
+16,3
+4c,0
+18,3
+4b,0
+19,3
+4b,0
+19,3
+4a,0
+1a,3
+49,0
+1b,3
+48,0
+1c,3
+48,0
+1c,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+47,0
+1d,3
+663,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+19,3
+4b,0
+18,3
+4c,0
+18,3
+4c,0
+18,3
+4c,0
+18,3
+4c,0
+17,3
+4d,0
+17,3
+4d,0
+17,3
+4d,0
+16,3
+4e,0
+16,3
+4e,0
+15,3
+4f,0
+15,3
+4f,0
+14,3
+50,0
+14,3
+50,0
+13,3
+51,0
+13,3
+51,0
+12,3
+52,0
+11,3
+53,0
+10,3
+54,0
+f,3
+55,0
+e,3
+56,0
+d,3
+57,0
+c,3
+58,0
+b,3
+59,0
+9,3
+5b,0
+6,3
+3fb,0
+100 90 32
+46b,0
+9,4
+57,0
+d,4
+55,0
+f,4
+52,0
+12,4
+51,0
+13,4
+4f,0
+15,4
+4e,0
+16,4
+4c,0
+18,4
+4b,0
+19,4
+4b,0
+19,4
+4a,0
+1a,4
+49,0
+1b,4
+48,0
+1c,4
+48,0
+1c,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+47,0
+1d,4
+663,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+19,4
+4b,0
+18,4
+4c,0
+18,4
+4c,0
+18,4
+4c,0
+18,4
+4c,0
+17,4
+4d,0
+17,4
+4d,0
+17,4
+4d,0
+16,4
+4e,0
+16,4
+4e,0
+15,4
+4f,0
+15,4
+4f,0
+14,4
+50,0
+14,4
+50,0
+13,4
+51,0
+13,4
+51,0
+12,4
+52,0
+11,4
+53,0
+10,4
+54,0
+f,4
+55,0
+e,4
+56,0
+d,4
+57,0
+c,4
+58,0
+b,4
+59,0
+9,4
+5b,0
+6,4
+3fb,0
+100 90 32
+46b,0
+9,6
+57,0
+d,6
+55,0
+f,6
+52,0
+12,6
+51,0
+13,6
+4f,0
+15,6
+4e,0
+16,6
+4c,0
+18,6
+4b,0
+19,6
+4b,0
+19,6
+4a,0
+1a,6
+49,0
+1b,6
+48,0
+1c,6
+48,0
+1c,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+47,0
+1d,6
+663,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+19,6
+4b,0
+18,6
+4c,0
+18,6
+4c,0
+18,6
+4c,0
+18,6
+4c,0
+17,6
+4d,0
+17,6
+4d,0
+17,6
+4d,0
+16,6
+4e,0
+16,6
+4e,0
+15,6
+4f,0
+15,6
+4f,0
+14,6
+50,0
+14,6
+50,0
+13,6
+51,0
+13,6
+51,0
+12,6
+52,0
+11,6
+53,0
+10,6
+54,0
+f,6
+55,0
+e,6
+56,0
+d,6
+57,0
+c,6
+58,0
+b,6
+59,0
+9,6
+5b,0
+6,6
+3fb,0
+100 90 32
+46b,0
+9,7
+57,0
+d,7
+55,0
+f,7
+52,0
+12,7
+51,0
+13,7
+4f,0
+15,7
+4e,0
+16,7
+4c,0
+18,7
+4b,0
+19,7
+4b,0
+19,7
+4a,0
+1a,7
+49,0
+1b,7
+48,0
+1c,7
+48,0
+1c,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+47,0
+1d,7
+663,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+19,7
+4b,0
+18,7
+4c,0
+18,7
+4c,0
+18,7
+4c,0
+18,7
+4c,0
+17,7
+4d,0
+17,7
+4d,0
+17,7
+4d,0
+16,7
+4e,0
+16,7
+4e,0
+15,7
+4f,0
+15,7
+4f,0
+14,7
+50,0
+14,7
+50,0
+13,7
+51,0
+13,7
+51,0
+12,7
+52,0
+11,7
+53,0
+10,7
+54,0
+f,7
+55,0
+e,7
+56,0
+d,7
+57,0
+c,7
+58,0
+b,7
+59,0
+9,7
+5b,0
+6,7
+3fb,0
+100 90 32
+46b,0
+9,10
+57,0
+d,10
+55,0
+f,10
+52,0
+12,10
+51,0
+13,10
+4f,0
+15,10
+4e,0
+16,10
+4c,0
+18,10
+4b,0
+19,10
+4b,0
+19,10
+4a,0
+1a,10
+49,0
+1b,10
+48,0
+1c,10
+48,0
+1c,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+47,0
+1d,10
+663,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+19,10
+4b,0
+18,10
+4c,0
+18,10
+4c,0
+18,10
+4c,0
+18,10
+4c,0
+17,10
+4d,0
+17,10
+4d,0
+17,10
+4d,0
+16,10
+4e,0
+16,10
+4e,0
+15,10
+4f,0
+15,10
+4f,0
+14,10
+50,0
+14,10
+50,0
+13,10
+51,0
+13,10
+51,0
+12,10
+52,0
+11,10
+53,0
+10,10
+54,0
+f,10
+55,0
+e,10
+56,0
+d,10
+57,0
+c,10
+58,0
+b,10
+59,0
+9,10
+5b,0
+6,10
+3fb,0
+100 90 32
+46b,0
+9,33
+57,0
+d,33
+55,0
+f,33
+52,0
+12,33
+51,0
+13,33
+4f,0
+15,33
+4e,0
+16,33
+4c,0
+18,33
+4b,0
+19,33
+4b,0
+19,33
+4a,0
+1a,33
+49,0
+1b,33
+48,0
+1c,33
+48,0
+1c,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+47,0
+1d,33
+663,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+19,33
+4b,0
+18,33
+4c,0
+18,33
+4c,0
+18,33
+4c,0
+18,33
+4c,0
+17,33
+4d,0
+17,33
+4d,0
+17,33
+4d,0
+16,33
+4e,0
+16,33
+4e,0
+15,33
+4f,0
+15,33
+4f,0
+14,33
+50,0
+14,33
+50,0
+13,33
+51,0
+13,33
+51,0
+12,33
+52,0
+11,33
+53,0
+10,33
+54,0
+f,33
+55,0
+e,33
+56,0
+d,33
+57,0
+c,33
+58,0
+b,33
+59,0
+9,33
+5b,0
+6,33
+3fb,0
+100 90 32
+46b,0
+9,81
+57,0
+d,81
+55,0
+f,81
+52,0
+12,81
+51,0
+13,81
+4f,0
+15,81
+4e,0
+16,81
+4c,0
+18,81
+4b,0
+19,81
+4b,0
+19,81
+4a,0
+1a,81
+49,0
+1b,81
+48,0
+1c,81
+48,0
+1c,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+47,0
+1d,81
+663,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+19,81
+4b,0
+18,81
+4c,0
+18,81
+4c,0
+18,81
+4c,0
+18,81
+4c,0
+17,81
+4d,0
+17,81
+4d,0
+17,81
+4d,0
+16,81
+4e,0
+16,81
+4e,0
+15,81
+4f,0
+15,81
+4f,0
+14,81
+50,0
+14,81
+50,0
+13,81
+51,0
+13,81
+51,0
+12,81
+52,0
+11,81
+53,0
+10,81
+54,0
+f,81
+55,0
+e,81
+56,0
+d,81
+57,0
+c,81
+58,0
+b,81
+59,0
+9,81
+5b,0
+6,81
+3fb,0
+100 90 32
+46b,0
+9,a3
+57,0
+d,a3
+55,0
+f,a3
+52,0
+12,a3
+51,0
+13,a3
+4f,0
+15,a3
+4e,0
+16,a3
+4c,0
+18,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4a,0
+1a,a3
+49,0
+1b,a3
+48,0
+1c,a3
+48,0
+1c,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+47,0
+1d,a3
+663,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+19,a3
+4b,0
+18,a3
+4c,0
+18,a3
+4c,0
+18,a3
+4c,0
+18,a3
+4c,0
+17,a3
+4d,0
+17,a3
+4d,0
+17,a3
+4d,0
+16,a3
+4e,0
+16,a3
+4e,0
+15,a3
+4f,0
+15,a3
+4f,0
+14,a3
+50,0
+14,a3
+50,0
+13,a3
+51,0
+13,a3
+51,0
+12,a3
+52,0
+11,a3
+53,0
+10,a3
+54,0
+f,a3
+55,0
+e,a3
+56,0
+d,a3
+57,0
+c,a3
+58,0
+b,a3
+59,0
+9,a3
+5b,0
+6,a3
+3fb,0
+100 90 32
+46b,0
+9,ff
+57,0
+d,ff
+55,0
+f,ff
+52,0
+12,ff
+51,0
+13,ff
+4f,0
+15,ff
+4e,0
+16,ff
+4c,0
+18,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4a,0
+1a,ff
+49,0
+1b,ff
+48,0
+1c,ff
+48,0
+1c,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+47,0
+1d,ff
+663,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+19,ff
+4b,0
+18,ff
+4c,0
+18,ff
+4c,0
+18,ff
+4c,0
+18,ff
+4c,0
+17,ff
+4d,0
+17,ff
+4d,0
+17,ff
+4d,0
+16,ff
+4e,0
+16,ff
+4e,0
+15,ff
+4f,0
+15,ff
+4f,0
+14,ff
+50,0
+14,ff
+50,0
+13,ff
+51,0
+13,ff
+51,0
+12,ff
+52,0
+11,ff
+53,0
+10,ff
+54,0
+f,ff
+55,0
+e,ff
+56,0
+d,ff
+57,0
+c,ff
+58,0
+b,ff
+59,0
+9,ff
+5b,0
+6,ff
+3fb,0
+100 90 32
+46b,0
+9,100
+57,0
+d,100
+55,0
+f,100
+52,0
+12,100
+51,0
+13,100
+4f,0
+15,100
+4e,0
+16,100
+4c,0
+18,100
+4b,0
+19,100
+4b,0
+19,100
+4a,0
+1a,100
+49,0
+1b,100
+48,0
+1c,100
+48,0
+1c,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+47,0
+1d,100
+663,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+19,100
+4b,0
+18,100
+4c,0
+18,100
+4c,0
+18,100
+4c,0
+18,100
+4c,0
+17,100
+4d,0
+17,100
+4d,0
+17,100
+4d,0
+16,100
+4e,0
+16,100
+4e,0
+15,100
+4f,0
+15,100
+4f,0
+14,100
+50,0
+14,100
+50,0
+13,100
+51,0
+13,100
+51,0
+12,100
+52,0
+11,100
+53,0
+10,100
+54,0
+f,100
+55,0
+e,100
+56,0
+d,100
+57,0
+c,100
+58,0
+b,100
+59,0
+9,100
+5b,0
+6,100
+3fb,0
+100 90 32
+46b,0
+9,12c
+57,0
+d,12c
+55,0
+f,12c
+52,0
+12,12c
+51,0
+13,12c
+4f,0
+15,12c
+4e,0
+16,12c
+4c,0
+18,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4a,0
+1a,12c
+49,0
+1b,12c
+48,0
+1c,12c
+48,0
+1c,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+47,0
+1d,12c
+663,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+19,12c
+4b,0
+18,12c
+4c,0
+18,12c
+4c,0
+18,12c
+4c,0
+18,12c
+4c,0
+17,12c
+4d,0
+17,12c
+4d,0
+17,12c
+4d,0
+16,12c
+4e,0
+16,12c
+4e,0
+15,12c
+4f,0
+15,12c
+4f,0
+14,12c
+50,0
+14,12c
+50,0
+13,12c
+51,0
+13,12c
+51,0
+12,12c
+52,0
+11,12c
+53,0
+10,12c
+54,0
+f,12c
+55,0
+e,12c
+56,0
+d,12c
+57,0
+c,12c
+58,0
+b,12c
+59,0
+9,12c
+5b,0
+6,12c
+3fb,0
+100 90 32
+46b,0
+9,3e8
+57,0
+d,3e8
+55,0
+f,3e8
+52,0
+12,3e8
+51,0
+13,3e8
+4f,0
+15,3e8
+4e,0
+16,3e8
+4c,0
+18,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4a,0
+1a,3e8
+49,0
+1b,3e8
+48,0
+1c,3e8
+48,0
+1c,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+47,0
+1d,3e8
+663,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+19,3e8
+4b,0
+18,3e8
+4c,0
+18,3e8
+4c,0
+18,3e8
+4c,0
+18,3e8
+4c,0
+17,3e8
+4d,0
+17,3e8
+4d,0
+17,3e8
+4d,0
+16,3e8
+4e,0
+16,3e8
+4e,0
+15,3e8
+4f,0
+15,3e8
+4f,0
+14,3e8
+50,0
+14,3e8
+50,0
+13,3e8
+51,0
+13,3e8
+51,0
+12,3e8
+52,0
+11,3e8
+53,0
+10,3e8
+54,0
+f,3e8
+55,0
+e,3e8
+56,0
+d,3e8
+57,0
+c,3e8
+58,0
+b,3e8
+59,0
+9,3e8
+5b,0
+6,3e8
+3fb,0
+100 90 32
+46b,0
+9,111111
+57,0
+d,111111
+55,0
+f,111111
+52,0
+12,111111
+51,0
+13,111111
+4f,0
+15,111111
+4e,0
+16,111111
+4c,0
+18,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4a,0
+1a,111111
+49,0
+1b,111111
+48,0
+1c,111111
+48,0
+1c,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+47,0
+1d,111111
+663,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+19,111111
+4b,0
+18,111111
+4c,0
+18,111111
+4c,0
+18,111111
+4c,0
+18,111111
+4c,0
+17,111111
+4d,0
+17,111111
+4d,0
+17,111111
+4d,0
+16,111111
+4e,0
+16,111111
+4e,0
+15,111111
+4f,0
+15,111111
+4f,0
+14,111111
+50,0
+14,111111
+50,0
+13,111111
+51,0
+13,111111
+51,0
+12,111111
+52,0
+11,111111
+53,0
+10,111111
+54,0
+f,111111
+55,0
+e,111111
+56,0
+d,111111
+57,0
+c,111111
+58,0
+b,111111
+59,0
+9,111111
+5b,0
+6,111111
+3fb,0
+100 90 32
+46b,0
+9,400200
+57,0
+d,400200
+55,0
+f,400200
+52,0
+12,400200
+51,0
+13,400200
+4f,0
+15,400200
+4e,0
+16,400200
+4c,0
+18,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4a,0
+1a,400200
+49,0
+1b,400200
+48,0
+1c,400200
+48,0
+1c,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+47,0
+1d,400200
+663,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+19,400200
+4b,0
+18,400200
+4c,0
+18,400200
+4c,0
+18,400200
+4c,0
+18,400200
+4c,0
+17,400200
+4d,0
+17,400200
+4d,0
+17,400200
+4d,0
+16,400200
+4e,0
+16,400200
+4e,0
+15,400200
+4f,0
+15,400200
+4f,0
+14,400200
+50,0
+14,400200
+50,0
+13,400200
+51,0
+13,400200
+51,0
+12,400200
+52,0
+11,400200
+53,0
+10,400200
+54,0
+f,400200
+55,0
+e,400200
+56,0
+d,400200
+57,0
+c,400200
+58,0
+b,400200
+59,0
+9,400200
+5b,0
+6,400200
+3fb,0
+100 90 32
+46b,0
+9,777777
+57,0
+d,777777
+55,0
+f,777777
+52,0
+12,777777
+51,0
+13,777777
+4f,0
+15,777777
+4e,0
+16,777777
+4c,0
+18,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4a,0
+1a,777777
+49,0
+1b,777777
+48,0
+1c,777777
+48,0
+1c,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+47,0
+1d,777777
+663,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+19,777777
+4b,0
+18,777777
+4c,0
+18,777777
+4c,0
+18,777777
+4c,0
+18,777777
+4c,0
+17,777777
+4d,0
+17,777777
+4d,0
+17,777777
+4d,0
+16,777777
+4e,0
+16,777777
+4e,0
+15,777777
+4f,0
+15,777777
+4f,0
+14,777777
+50,0
+14,777777
+50,0
+13,777777
+51,0
+13,777777
+51,0
+12,777777
+52,0
+11,777777
+53,0
+10,777777
+54,0
+f,777777
+55,0
+e,777777
+56,0
+d,777777
+57,0
+c,777777
+58,0
+b,777777
+59,0
+9,777777
+5b,0
+6,777777
+3fb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/a41.dat b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a41.dat
new file mode 100644
index 000000000..bb8b76644
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a41.dat
@@ -0,0 +1,4509 @@
+! $XConsortium$
+100 90 32
+46b,0
+2,1
+3,0
+4,1
+57,0
+3,1
+5f,0
+1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+57,0
+4,1
+5b,0
+4,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+50,0
+a,1
+59,0
+3,1
+c,0
+7,1
+51,0
+12,1
+4c,0
+c,1
+6,0
+4,1
+2,0
+1
+4b,0
+6,1
+6,0
+9,1
+0
+3,1
+4a,0
+4,1
+3,0
+8,1
+4,0
+7,1
+49,0
+3,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+4c,0
+5,1
+3,0
+6,1
+52,0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+d,1
+52,0
+a,1
+c,0
+7,1
+47,0
+4,1
+6,0
+12,1
+664,0
+3,1
+a,0
+5,1
+3,0
+4,1
+4e,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4d,0
+3,1
+a,0
+4,1
+6,0
+2,1
+4e,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+4e,0
+2,1
+b,0
+c,1
+51,0
+c,1
+52,0
+c,1
+6,0
+7,1
+51,0
+4,1
+2,0
+c,1
+4c,0
+9,1
+0
+8,1
+6,0
+1
+4b,0
+2,1
+4,0
+9,1
+3,0
+7,1
+4d,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4f,0
+3,1
+a,0
+5,1
+3,0
+3,1
+4f,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4d,0
+3,1
+a,0
+4,1
+6,0
+1
+4f,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+4e,0
+2,1
+b,0
+a,1
+53,0
+c,1
+52,0
+c,1
+6,0
+4,1
+54,0
+4,1
+2,0
+a,1
+4e,0
+9,1
+0
+8,1
+52,0
+2,1
+4,0
+9,1
+3,0
+3,1
+51,0
+4,1
+3,0
+4,1
+2,0
+5,1
+50,0
+3,1
+a,0
+5,1
+55,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+1
+51,0
+3,1
+a,0
+4,1
+56,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+5,1
+52,0
+2,1
+b,0
+4,1
+59,0
+a,1
+54,0
+c,1
+5e,0
+4,1
+2,0
+2,1
+56,0
+9,1
+0
+3,1
+57,0
+2,1
+4,0
+6,1
+5a,0
+4,1
+3,0
+2,1
+59,0
+3,1
+64,0
+3,1
+3fb,0
+100 90 32
+4cf,0
+3,1
+0
+1
+0
+1
+0
+1
+55,0
+5,1
+68,0
+6,1
+52,0
+12,1
+4f,0
+9,1
+6,0
+4,1
+50,0
+4,1
+6,0
+9,1
+0
+2,1
+4c,0
+3,1
+3,0
+8,1
+4,0
+6,1
+4b,0
+2,1
+2,0
+6,1
+5,0
+4,1
+3,0
+3,1
+4d,0
+5,1
+3,0
+6,1
+54,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+d,1
+51,0
+b,1
+c,0
+6,1
+47,0
+5,1
+6,0
+12,1
+47,0
+3,1
+2,0
+c,1
+6,0
+4,1
+49,0
+2,1
+0
+8,1
+6,0
+9,1
+0
+2,1
+47,0
+8,1
+3,0
+8,1
+4,0
+6,1
+667,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+4d,0
+3,1
+b,0
+b,1
+52,0
+c,1
+51,0
+d,1
+6,0
+6,1
+4b,0
+1
+6,0
+4,1
+2,0
+c,1
+4c,0
+9,1
+0
+8,1
+51,0
+3,1
+4,0
+9,1
+3,0
+6,1
+4e,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4e,0
+4,1
+a,0
+5,1
+3,0
+3,1
+4f,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4c,0
+4,1
+a,0
+4,1
+56,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+4d,0
+3,1
+b,0
+a,1
+53,0
+c,1
+51,0
+d,1
+6,0
+4,1
+4d,0
+1
+6,0
+4,1
+2,0
+a,1
+4e,0
+9,1
+0
+8,1
+51,0
+3,1
+4,0
+9,1
+3,0
+3,1
+51,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4e,0
+4,1
+a,0
+5,1
+55,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+2,1
+4f,0
+4,1
+a,0
+4,1
+56,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+6,1
+50,0
+3,1
+b,0
+5,1
+58,0
+c,1
+51,0
+d,1
+57,0
+1
+6,0
+4,1
+2,0
+4,1
+54,0
+9,1
+0
+5,1
+54,0
+3,1
+4,0
+8,1
+58,0
+4,1
+3,0
+4,1
+56,0
+4,1
+64,0
+3,1
+0
+1
+0
+1
+59,0
+4,1
+64,0
+3,1
+0
+1
+5b,0
+3,1
+3fe,0
+100 90 32
+46d,0
+7,1
+57,0
+1
+2,0
+6,1
+5c,0
+5,1
+3,0
+4,1
+52,0
+1
+0
+1
+0
+1
+6,0
+5,1
+5a,0
+4,1
+6,0
+2,1
+4f,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5b,0
+c,1
+51,0
+c,1
+52,0
+c,1
+6,0
+7,1
+51,0
+4,1
+2,0
+c,1
+4c,0
+9,1
+0
+8,1
+6,0
+1
+49,0
+4,1
+4,0
+9,1
+3,0
+7,1
+4d,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4c,0
+6,1
+a,0
+5,1
+3,0
+4,1
+47,0
+3,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4c,0
+4,1
+a,0
+4,1
+6,0
+2,1
+47,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+4a,0
+6,1
+b,0
+c,1
+51,0
+c,1
+66a,0
+1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+4c,0
+5,1
+3,0
+6,1
+5b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+4,1
+6,0
+4,1
+56,0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+d,1
+56,0
+6,1
+c,0
+7,1
+51,0
+12,1
+4c,0
+c,1
+6,0
+4,1
+2,0
+1
+4b,0
+6,1
+6,0
+9,1
+0
+3,1
+4b,0
+3,1
+3,0
+8,1
+4,0
+6,1
+4c,0
+1
+2,0
+6,1
+5,0
+4,1
+3,0
+3,1
+4d,0
+5,1
+3,0
+6,1
+5b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+4,1
+6,0
+4,1
+56,0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+4f,0
+d,1
+56,0
+6,1
+c,0
+4,1
+54,0
+10,1
+4e,0
+c,1
+6,0
+3,1
+4f,0
+6,1
+6,0
+9,1
+4f,0
+3,1
+3,0
+8,1
+4,0
+2,1
+50,0
+1
+2,0
+6,1
+5,0
+4,1
+53,0
+5,1
+3,0
+6,1
+5b,0
+5,1
+4,0
+3,1
+53,0
+4,1
+6,0
+4,1
+56,0
+9,1
+5,0
+2,1
+54,0
+d,1
+56,0
+6,1
+64,0
+8,1
+56,0
+c,1
+58,0
+6,1
+5e,0
+3,1
+3,0
+5,1
+59,0
+1
+2,0
+6,1
+5c,0
+5,1
+3fb,0
+100 90 32
+46c,0
+1
+2,0
+5,1
+5b,0
+1
+0
+7,1
+5b,0
+2,1
+2,0
+5,1
+52,0
+1
+3,0
+4,1
+3,0
+2,1
+64,0
+5,1
+50,0
+10,1
+3,0
+1
+4e,0
+16,1
+4c,0
+5,1
+e,0
+5,1
+4b,0
+1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+51,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+4a,0
+9,1
+0
+1
+6,0
+1
+0
+7,1
+49,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+49,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+4d,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+49,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+47,0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+48,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+48,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+48,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+668,0
+3,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+4c,0
+3,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+4c,0
+2,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+4f,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+4b,0
+3,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+4b,0
+5,1
+0
+1
+6,0
+1
+0
+9,1
+4c,0
+3,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+1
+4e,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+4c,0
+3,1
+e,0
+5,1
+50,0
+10,1
+3,0
+4,1
+4b,0
+18,1
+4c,0
+3,1
+e,0
+5,1
+51,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+4c,0
+3,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+4e,0
+5,1
+0
+1
+6,0
+1
+0
+8,1
+4d,0
+3,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+51,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+4d,0
+2,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+4f,0
+3,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+4e,0
+3,1
+0
+1
+0
+8,1
+0
+1
+0
+4,1
+4f,0
+3,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+4,1
+4f,0
+2,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+2,1
+53,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+53,0
+3,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+2,1
+51,0
+5,1
+0
+1
+6,0
+1
+0
+4,1
+51,0
+3,1
+2,0
+2,1
+6,0
+2,1
+2,0
+1
+55,0
+2,1
+3,0
+4,1
+3,0
+2,1
+53,0
+3,1
+63,0
+d,1
+55,0
+e,1
+56,0
+3,1
+64,0
+2,1
+2,0
+5,1
+58,0
+3,1
+2,0
+2,1
+0
+3,1
+59,0
+5,1
+0
+1
+5d,0
+3,1
+2,0
+1
+3fb,0
+100 90 32
+46b,0
+6,1
+2,0
+1
+59,0
+2,1
+0
+4,1
+0
+2,1
+56,0
+4,1
+0
+1
+6,0
+1
+0
+1
+52,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+52,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+51,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4e,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4c,0
+3,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+4c,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4d,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+4e,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+4f,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+1
+4e,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+4a,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+1
+52,0
+5,1
+54,0
+c,1
+3,0
+e,1
+47,0
+1d,1
+52,0
+5,1
+674,0
+5,1
+e,0
+2,1
+4b,0
+5,1
+3,0
+10,1
+4c,0
+19,1
+4f,0
+5,1
+e,0
+2,1
+4d,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+4d,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+2,1
+4b,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+4,1
+4c,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+2,1
+4c,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+4d,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+4b,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4f,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+4e,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+4f,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+4d,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+51,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+1
+52,0
+5,1
+5b,0
+5,1
+3,0
+d,1
+4f,0
+14,1
+54,0
+5,1
+5d,0
+2,1
+5,0
+2,1
+2,0
+6,1
+51,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+52,0
+1
+0
+9,1
+0
+1
+58,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+57,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+56,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+55,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+57,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+57,0
+1
+0
+1
+0
+5,1
+0
+1
+59,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+5a,0
+1
+0
+1
+61,0
+1
+2,0
+2,1
+3fb,0
+100 90 32
+46b,0
+1
+6,0
+1
+58,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+58,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+54,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+52,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+50,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+50,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+4e,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+4f,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+4e,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+4f,0
+1
+0
+9,1
+0
+1
+6,0
+1
+50,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+4a,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+56,0
+5,1
+53,0
+d,1
+3,0
+d,1
+47,0
+1d,1
+53,0
+5,1
+55,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+49,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+663,0
+19,1
+50,0
+5,1
+e,0
+1
+4b,0
+1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+4d,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+1
+4c,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+3,1
+4b,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+1
+4b,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+4d,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4e,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+1
+4b,0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4e,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4d,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+4f,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+1
+4e,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+51,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+1
+52,0
+5,1
+5a,0
+6,1
+3,0
+d,1
+4e,0
+15,1
+54,0
+5,1
+5a,0
+1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+51,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+52,0
+1
+0
+9,1
+0
+1
+56,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+55,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+56,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+55,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+54,0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+56,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+57,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+58,0
+1
+0
+1
+0
+1
+5,0
+1
+59,0
+1
+0
+1
+2,0
+5,1
+5b,0
+1
+0
+6,1
+5c,0
+2,1
+2,0
+1
+3fb,0
+100 90 32
+4cf,0
+3,1
+0
+1
+0
+1
+0
+1
+55,0
+5,1
+68,0
+6,1
+52,0
+12,1
+4f,0
+9,1
+6,0
+4,1
+50,0
+4,1
+6,0
+9,1
+0
+2,1
+4c,0
+3,1
+3,0
+8,1
+4,0
+6,1
+4b,0
+2,1
+2,0
+6,1
+5,0
+4,1
+3,0
+3,1
+4d,0
+5,1
+3,0
+6,1
+54,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+d,1
+51,0
+b,1
+c,0
+6,1
+47,0
+5,1
+6,0
+12,1
+47,0
+3,1
+2,0
+c,1
+6,0
+4,1
+49,0
+2,1
+0
+8,1
+6,0
+9,1
+0
+2,1
+47,0
+8,1
+3,0
+8,1
+4,0
+6,1
+667,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+4d,0
+3,1
+b,0
+b,1
+52,0
+c,1
+51,0
+d,1
+6,0
+6,1
+4b,0
+1
+6,0
+4,1
+2,0
+c,1
+4c,0
+9,1
+0
+8,1
+51,0
+3,1
+4,0
+9,1
+3,0
+6,1
+4e,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4e,0
+4,1
+a,0
+5,1
+3,0
+3,1
+4f,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4c,0
+4,1
+a,0
+4,1
+56,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+4d,0
+3,1
+b,0
+a,1
+53,0
+c,1
+51,0
+d,1
+6,0
+4,1
+4d,0
+1
+6,0
+4,1
+2,0
+a,1
+4e,0
+9,1
+0
+8,1
+51,0
+3,1
+4,0
+9,1
+3,0
+3,1
+51,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4e,0
+4,1
+a,0
+5,1
+55,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+2,1
+4f,0
+4,1
+a,0
+4,1
+56,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+6,1
+50,0
+3,1
+b,0
+5,1
+58,0
+c,1
+51,0
+d,1
+57,0
+1
+6,0
+4,1
+2,0
+4,1
+54,0
+9,1
+0
+5,1
+54,0
+3,1
+4,0
+8,1
+58,0
+4,1
+3,0
+4,1
+56,0
+4,1
+64,0
+3,1
+0
+1
+0
+1
+59,0
+4,1
+64,0
+3,1
+0
+1
+5b,0
+3,1
+3fe,0
+100 90 32
+46d,0
+7,1
+57,0
+1
+2,0
+6,1
+5c,0
+5,1
+3,0
+4,1
+52,0
+1
+0
+1
+0
+1
+6,0
+5,1
+5a,0
+4,1
+6,0
+2,1
+4f,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5b,0
+c,1
+51,0
+c,1
+52,0
+c,1
+6,0
+7,1
+51,0
+4,1
+2,0
+c,1
+4c,0
+9,1
+0
+8,1
+6,0
+1
+49,0
+4,1
+4,0
+9,1
+3,0
+7,1
+4d,0
+4,1
+3,0
+4,1
+2,0
+6,1
+4c,0
+6,1
+a,0
+5,1
+3,0
+4,1
+47,0
+3,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4c,0
+4,1
+a,0
+4,1
+6,0
+2,1
+47,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+4a,0
+6,1
+b,0
+c,1
+51,0
+c,1
+66a,0
+1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+4c,0
+5,1
+3,0
+6,1
+5b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+4,1
+6,0
+4,1
+56,0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+d,1
+56,0
+6,1
+c,0
+7,1
+51,0
+12,1
+4c,0
+c,1
+6,0
+4,1
+2,0
+1
+4b,0
+6,1
+6,0
+9,1
+0
+3,1
+4b,0
+3,1
+3,0
+8,1
+4,0
+6,1
+4c,0
+1
+2,0
+6,1
+5,0
+4,1
+3,0
+3,1
+4d,0
+5,1
+3,0
+6,1
+5b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+4,1
+6,0
+4,1
+56,0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+4f,0
+d,1
+56,0
+6,1
+c,0
+4,1
+54,0
+10,1
+4e,0
+c,1
+6,0
+3,1
+4f,0
+6,1
+6,0
+9,1
+4f,0
+3,1
+3,0
+8,1
+4,0
+2,1
+50,0
+1
+2,0
+6,1
+5,0
+4,1
+53,0
+5,1
+3,0
+6,1
+5b,0
+5,1
+4,0
+3,1
+53,0
+4,1
+6,0
+4,1
+56,0
+9,1
+5,0
+2,1
+54,0
+d,1
+56,0
+6,1
+64,0
+8,1
+56,0
+c,1
+58,0
+6,1
+5e,0
+3,1
+3,0
+5,1
+59,0
+1
+2,0
+6,1
+5c,0
+5,1
+3fb,0
+100 90 32
+46c,0
+1
+2,0
+5,1
+5b,0
+1
+0
+7,1
+5b,0
+2,1
+2,0
+5,1
+52,0
+1
+3,0
+4,1
+3,0
+2,1
+64,0
+5,1
+50,0
+10,1
+3,0
+1
+4e,0
+16,1
+4c,0
+5,1
+e,0
+5,1
+4b,0
+1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+51,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+4a,0
+9,1
+0
+1
+6,0
+1
+0
+7,1
+49,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+49,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+4d,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+49,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+47,0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+48,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+48,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+48,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+668,0
+3,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+4c,0
+3,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+4c,0
+2,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+4f,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+4b,0
+3,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+4b,0
+5,1
+0
+1
+6,0
+1
+0
+9,1
+4c,0
+3,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+1
+4e,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+4c,0
+3,1
+e,0
+5,1
+50,0
+10,1
+3,0
+4,1
+4b,0
+18,1
+4c,0
+3,1
+e,0
+5,1
+51,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+4c,0
+3,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+4e,0
+5,1
+0
+1
+6,0
+1
+0
+8,1
+4d,0
+3,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+51,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+4d,0
+2,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+4f,0
+3,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+4e,0
+3,1
+0
+1
+0
+8,1
+0
+1
+0
+4,1
+4f,0
+3,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+4,1
+4f,0
+2,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+2,1
+53,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+53,0
+3,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+2,1
+51,0
+5,1
+0
+1
+6,0
+1
+0
+4,1
+51,0
+3,1
+2,0
+2,1
+6,0
+2,1
+2,0
+1
+55,0
+2,1
+3,0
+4,1
+3,0
+2,1
+53,0
+3,1
+63,0
+d,1
+55,0
+e,1
+56,0
+3,1
+64,0
+2,1
+2,0
+5,1
+58,0
+3,1
+2,0
+2,1
+0
+3,1
+59,0
+5,1
+0
+1
+5d,0
+3,1
+2,0
+1
+3fb,0
+100 90 32
+46b,0
+6,1
+2,0
+1
+59,0
+2,1
+0
+4,1
+0
+2,1
+56,0
+4,1
+0
+1
+6,0
+1
+0
+1
+52,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+52,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+51,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4e,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4c,0
+3,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+4c,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4d,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+4e,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+4f,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+1
+4e,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+4a,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+1
+52,0
+5,1
+54,0
+c,1
+3,0
+e,1
+47,0
+1d,1
+52,0
+5,1
+674,0
+5,1
+e,0
+2,1
+4b,0
+5,1
+3,0
+10,1
+4c,0
+19,1
+4f,0
+5,1
+e,0
+2,1
+4d,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+4d,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+2,1
+4b,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+4,1
+4c,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+2,1
+4c,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+4d,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+4b,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4f,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+4e,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+4f,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+4d,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+51,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+1
+52,0
+5,1
+5b,0
+5,1
+3,0
+d,1
+4f,0
+14,1
+54,0
+5,1
+5d,0
+2,1
+5,0
+2,1
+2,0
+6,1
+51,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+52,0
+1
+0
+9,1
+0
+1
+58,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+57,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+56,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+55,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+57,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+57,0
+1
+0
+1
+0
+5,1
+0
+1
+59,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+5a,0
+1
+0
+1
+61,0
+1
+2,0
+2,1
+3fb,0
+100 90 32
+46b,0
+1
+6,0
+1
+58,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+58,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+54,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+52,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+50,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+50,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+4e,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+4f,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+4e,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+4f,0
+1
+0
+9,1
+0
+1
+6,0
+1
+50,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+4a,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+56,0
+5,1
+53,0
+d,1
+3,0
+d,1
+47,0
+1d,1
+53,0
+5,1
+55,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+49,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+663,0
+19,1
+50,0
+5,1
+e,0
+1
+4b,0
+1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+4d,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+1
+4c,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+3,1
+4b,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+1
+4b,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+4d,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4e,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+1
+4b,0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4e,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+4d,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+4f,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+1
+4e,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+51,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+1
+52,0
+5,1
+5a,0
+6,1
+3,0
+d,1
+4e,0
+15,1
+54,0
+5,1
+5a,0
+1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+51,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+52,0
+1
+0
+9,1
+0
+1
+56,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+55,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+56,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+55,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+54,0
+2,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+56,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+57,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+58,0
+1
+0
+1
+0
+1
+5,0
+1
+59,0
+1
+0
+1
+2,0
+5,1
+5b,0
+1
+0
+6,1
+5c,0
+2,1
+2,0
+1
+3fb,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/a6.dat b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a6.dat
new file mode 100644
index 000000000..f3e2e2ef7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/a6.dat
@@ -0,0 +1,123 @@
+! $XConsortium$
+100 90 32
+410,0
+1
+5c,0
+f,1
+52,0
+15,1
+4c,0
+1b,1
+48,0
+1d,1
+45,0
+21,1
+41,0
+24,1
+3f,0
+27,1
+3c,0
+29,1
+3a,0
+2b,1
+38,0
+2d,1
+36,0
+2f,1
+34,0
+30,1
+34,0
+31,1
+32,0
+33,1
+31,0
+33,1
+30,0
+35,1
+2e,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2c,0
+30,1
+0
+8,1
+2b,0
+29,1
+f,0
+1
+2b,0
+26,1
+13,0
+2,1
+28,0
+24,1
+17,0
+4,1
+25,0
+23,1
+18,0
+5,1
+24,0
+21,1
+1a,0
+7,1
+22,0
+1f,1
+1c,0
+8,1
+21,0
+1e,1
+1d,0
+a,1
+1f,0
+1d,1
+1e,0
+b,1
+1e,0
+1c,1
+1f,0
+c,1
+38,0
+2d,1
+36,0
+2f,1
+34,0
+30,1
+34,0
+31,1
+32,0
+33,1
+31,0
+33,1
+30,0
+35,1
+2e,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2c,0
+39,1
+2b,0
+39,1
+2b,0
+39,1
+2a,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+bc2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllarcs/fllarcs.m b/xc/test/xsuite/xtest/tset/CH06/fllarcs/fllarcs.m
new file mode 100644
index 000000000..4972762be
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllarcs/fllarcs.m
@@ -0,0 +1,214 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFillArcs CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+XArc *arcs = defarcs;
+int narcs = NARCS(defarcs);
+>>EXTERN
+
+#define NARCS(a) (sizeof(a)/sizeof(XArc))
+
+#define DEG(n) (64*(n))
+
+/* avoid any non-rational chords/pie-faces */
+static XArc defarcs[] = {
+ {10, 10, 60, 40, DEG(90), DEG(90)},
+ {50, 10, 50, 70, DEG(0), DEG(-90)},
+};
+
+>>ASSERTION Good A
+A call to xname draws
+.A narcs
+filled circular or elliptical arcs in the drawable
+.A d
+as specified by the corresponding member of the
+.A arcs
+list.
+>>STRATEGY
+Draw arcs.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>># The next 3 assertions used to be included from arc.inc.
+>># The wording was only correct for fllarcs - so I have hand included them.
+>># DPJ Cater 17/3/91
+>>ASSERTION Good A
+When the GC component
+.M arc-mode
+is
+.S ArcChord ,
+then a call to xname fills the region closed by the infinitely thin path
+described by each specified arc and the single line segment joining the two
+endpoints of that arc.
+>>STRATEGY
+Set arc-mode to ArcChord
+Draw arcs
+Pixmap check.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XSetArcMode(display, gc, ArcChord);
+
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When the GC component
+.M arc-mode
+is
+.S ArcPieSlice ,
+then a call to xname fills the region closed by the infinitely thin path
+described by each specified arc and
+the two line segments joining the endpoints of that arc with the centre
+point of that arc.
+>>STRATEGY
+Set arc-mode to ArcPieSlice
+Draw arcs.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XSetArcMode(display, gc, ArcPieSlice);
+
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+A call to xname does not draw a pixel for any particular arc more than once.
+>>STRATEGY
+Draw with gc function set to GXcopy
+Draw with gc function set to GXxor
+Verify that window is blank
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+
+ XSetFunction(display, gc, GXxor);
+
+ XCALL;
+
+ if (checkarea(display, d, (struct area *)0, W_BG, W_BG, CHECK_IN))
+ CHECK;
+ else {
+ report("Pixels drawn more than once");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good B 1
+A call to xname fills the arcs in the order listed in the array.
+>>ASSERTION Good A
+When arcs intersect, then the intersecting pixels are drawn multiple times.
+>>STRATEGY
+Set gc funcion to GXxor
+Draw intersecting filled arcs.
+>>CODE
+XVisualInfo *vp;
+static XArc intarcs[] = {
+ {10, 10, 60, 60, DEG(0), DEG(180)},
+ {30, 30, 60, 60, DEG(0), DEG(180)},
+};
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XSetFunction(display, gc, GXxor);
+
+ arcs = intarcs;
+ narcs = NARCS(intarcs);
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M fill-style ,
+.M arc-mode ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin
+and
+.M tile-stipple-y-origin
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a1.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a1.dat
new file mode 100644
index 000000000..8196838f3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a1.dat
@@ -0,0 +1,121 @@
+! $XConsortium$
+100 90 32
+25e,0
+6,1
+5e,0
+d,1
+57,0
+14,1
+50,0
+1b,1
+49,0
+4a,1
+1a,0
+4a,1
+1b,0
+49,1
+1b,0
+48,1
+1c,0
+48,1
+1c,0
+48,1
+1c,0
+47,1
+1d,0
+47,1
+1e,0
+45,1
+1f,0
+45,1
+1f,0
+45,1
+1f,0
+44,1
+20,0
+44,1
+20,0
+44,1
+21,0
+42,1
+22,0
+42,1
+22,0
+41,1
+23,0
+41,1
+23,0
+41,1
+23,0
+40,1
+25,0
+3f,1
+25,0
+3f,1
+25,0
+3e,1
+26,0
+3e,1
+26,0
+3d,1
+27,0
+3d,1
+28,0
+3c,1
+28,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3a,1
+2a,0
+3a,1
+2b,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2e,0
+35,1
+2f,0
+35,1
+2f,0
+34,1
+30,0
+31,1
+33,0
+2e,1
+36,0
+2a,1
+3b,0
+26,1
+3e,0
+23,1
+41,0
+1f,1
+45,0
+1c,1
+48,0
+19,1
+4b,0
+15,1
+50,0
+11,1
+53,0
+e,1
+56,0
+a,1
+5a,0
+7,1
+5d,0
+4,1
+a15,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a28.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a28.dat
new file mode 100644
index 000000000..8196838f3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a28.dat
@@ -0,0 +1,121 @@
+! $XConsortium$
+100 90 32
+25e,0
+6,1
+5e,0
+d,1
+57,0
+14,1
+50,0
+1b,1
+49,0
+4a,1
+1a,0
+4a,1
+1b,0
+49,1
+1b,0
+48,1
+1c,0
+48,1
+1c,0
+48,1
+1c,0
+47,1
+1d,0
+47,1
+1e,0
+45,1
+1f,0
+45,1
+1f,0
+45,1
+1f,0
+44,1
+20,0
+44,1
+20,0
+44,1
+21,0
+42,1
+22,0
+42,1
+22,0
+41,1
+23,0
+41,1
+23,0
+41,1
+23,0
+40,1
+25,0
+3f,1
+25,0
+3f,1
+25,0
+3e,1
+26,0
+3e,1
+26,0
+3d,1
+27,0
+3d,1
+28,0
+3c,1
+28,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3a,1
+2a,0
+3a,1
+2b,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2e,0
+35,1
+2f,0
+35,1
+2f,0
+34,1
+30,0
+31,1
+33,0
+2e,1
+36,0
+2a,1
+3b,0
+26,1
+3e,0
+23,1
+41,0
+1f,1
+45,0
+1c,1
+48,0
+19,1
+4b,0
+15,1
+50,0
+11,1
+53,0
+e,1
+56,0
+a,1
+5a,0
+7,1
+5d,0
+4,1
+a15,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a29.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a29.dat
new file mode 100644
index 000000000..489501d68
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a29.dat
@@ -0,0 +1,1381 @@
+! $XConsortium$
+100 90 32
+25e,0
+3
+5,2
+5e,0
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2
+57,0
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+50,0
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+49,0
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+1a,0
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+1b,0
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+1b,0
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+1c,0
+7,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+1c,0
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+1c,0
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+1d,0
+5,3
+e,2
+5,3
+e,2
+5,3
+e,2
+5,3
+9,2
+1e,0
+3,2
+10,3
+3,2
+10,3
+3,2
+10,3
+3,2
+9,3
+1f,0
+45,3
+1f,0
+4,3
+e,2
+5,3
+e,2
+5,3
+e,2
+5,3
+8,2
+1f,0
+4,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+3,3
+20,0
+4,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+2,3
+20,0
+6,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+3,2
+21,0
+3,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+2
+22,0
+3,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+2
+22,0
+2,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+23,0
+3,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+23,0
+3,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+2,3
+23,0
+3,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+25,0
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+25,0
+2,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+25,0
+2,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+26,0
+4,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+26,0
+2,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+27,0
+2,2
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+28,0
+3
+e,2
+5,3
+e,2
+5,3
+e,2
+5,3
+2,2
+28,0
+10,3
+3,2
+10,3
+3,2
+10,3
+3,2
+2,3
+29,0
+3b,3
+29,0
+3
+e,2
+5,3
+e,2
+5,3
+e,2
+5,3
+2
+29,0
+2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+2,2
+2,3
+5,2
+2a,0
+3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2b,0
+2,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+6,3
+2c,0
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+4,3
+2c,0
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+4,2
+2c,0
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+2,3
+2d,0
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+3,3
+2d,0
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+2
+8,3
+2
+3
+2
+3,3
+2e,0
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+2,3
+2f,0
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2f,0
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+2
+30,0
+2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+2
+3
+33,0
+3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+6,2
+3
+2
+9,3
+2
+3
+5,2
+36,0
+2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+3b,0
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+3e,0
+c,2
+5,3
+e,2
+4,3
+41,0
+d,3
+3,2
+f,3
+45,0
+1c,3
+48,0
+c,2
+5,3
+8,2
+4b,0
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+2,2
+50,0
+3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2
+53,0
+3
+6,2
+3
+2
+5,3
+56,0
+2
+3
+4,2
+3
+2
+3
+2
+5a,0
+2
+3
+4,2
+3
+5d,0
+3
+2
+3
+2
+a15,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a30.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a30.dat
new file mode 100644
index 000000000..f2d6bd13b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a30.dat
@@ -0,0 +1,676 @@
+! $XConsortium$
+100 90 32
+25e,0
+2
+5,3
+5e,0
+6,2
+5,3
+2,2
+57,0
+2
+4,3
+6,2
+4,3
+5,2
+50,0
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+2,3
+49,0
+2
+d,3
+b,2
+d,3
+b,2
+d,3
+b,2
+3
+1a,0
+6,3
+c,2
+c,3
+c,2
+c,3
+c,2
+8,3
+1b,0
+5,2
+12,3
+6,2
+12,3
+6,2
+12,3
+2,2
+1b,0
+b,3
+6,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+3
+1c,0
+5,3
+6,2
+9,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+9,3
+2
+3,3
+1c,0
+2,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+7,3
+1c,0
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+3,3
+1d,0
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+9,2
+1e,0
+4,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+1f,0
+3,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+8,2
+1f,0
+8,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+1f,0
+c,3
+b,2
+d,3
+b,2
+d,3
+8,2
+20,0
+4,3
+c,2
+c,3
+c,2
+c,3
+c,2
+4,3
+20,0
+4,2
+12,3
+6,2
+12,3
+6,2
+10,3
+21,0
+9,3
+6,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+c,3
+6,2
+3,3
+22,0
+3,3
+6,2
+9,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+9,3
+22,0
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+2,3
+23,0
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+2,2
+23,0
+3,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+5,2
+23,0
+3,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+25,0
+3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+4,2
+25,0
+6,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+25,0
+a,3
+b,2
+d,3
+b,2
+d,3
+4,2
+26,0
+2,3
+c,2
+c,3
+c,2
+c,3
+c,2
+26,0
+2,2
+12,3
+6,2
+12,3
+6,2
+b,3
+27,0
+8,3
+6,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+c,3
+5,2
+28,0
+3
+6,2
+9,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+5,3
+28,0
+2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+2,2
+29,0
+4,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+2,3
+29,0
+3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+2
+29,0
+2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+2a,0
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+2b,0
+4,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+4,2
+2c,0
+8,3
+b,2
+d,3
+b,2
+d,3
+2c,0
+c,2
+c,3
+c,2
+c,3
+8,2
+2c,0
+12,3
+6,2
+12,3
+6,2
+7,3
+2d,0
+6,3
+6,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+c,3
+2
+2d,0
+6,2
+9,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+3
+2e,0
+7,3
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+6,3
+2f,0
+2,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+3,2
+2f,0
+2,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+2,3
+30,0
+4,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+2,3
+33,0
+4,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+36,0
+3,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+3b,0
+6,3
+b,2
+d,3
+8,2
+3e,0
+a,2
+c,3
+c,2
+3
+41,0
+10,3
+6,2
+9,3
+45,0
+4,3
+6,2
+4,3
+2,2
+c,3
+48,0
+4,2
+9,3
+2
+8,3
+3,2
+4b,0
+6,3
+4,2
+9,3
+2,2
+50,0
+5,2
+4,3
+3,2
+4,3
+2
+53,0
+6,3
+8,2
+56,0
+2,3
+4,2
+3,3
+2
+5a,0
+2,2
+4,3
+2
+5d,0
+3
+3,2
+a15,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a31.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a31.dat
new file mode 100644
index 000000000..c7f116b18
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a31.dat
@@ -0,0 +1,621 @@
+! $XConsortium$
+100 90 32
+25f,0
+5,1
+64,0
+5,1
+5a,0
+4,1
+6,0
+4,1
+56,0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+4a,0
+d,1
+b,0
+d,1
+b,0
+d,1
+b,0
+1
+1a,0
+6,1
+c,0
+c,1
+c,0
+c,1
+c,0
+8,1
+20,0
+12,1
+6,0
+12,1
+6,0
+12,1
+1d,0
+b,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+1
+1c,0
+5,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+3,1
+1c,0
+2,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+7,1
+1e,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+3,1
+1d,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+20,0
+3,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+27,0
+8,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+20,0
+c,1
+b,0
+d,1
+b,0
+d,1
+28,0
+4,1
+c,0
+c,1
+c,0
+c,1
+c,0
+4,1
+24,0
+12,1
+6,0
+12,1
+6,0
+10,1
+21,0
+9,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+3,1
+22,0
+3,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+25,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+2,1
+23,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+25,0
+3,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+26,0
+1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+29,0
+6,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+26,0
+a,1
+b,0
+d,1
+b,0
+d,1
+2a,0
+2,1
+c,0
+c,1
+c,0
+c,1
+34,0
+12,1
+6,0
+12,1
+6,0
+b,1
+27,0
+8,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+2d,0
+1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+5,1
+29,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+2b,0
+4,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+2,1
+29,0
+1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+34,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+2b,0
+4,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+30,0
+8,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+34,0
+12,1
+6,0
+12,1
+6,0
+7,1
+2d,0
+6,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+34,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+1
+2e,0
+7,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+6,1
+2f,0
+2,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+34,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+2,1
+30,0
+4,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+2,1
+37,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+36,0
+3,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+3c,0
+6,1
+b,0
+d,1
+50,0
+c,1
+c,0
+1
+41,0
+10,1
+6,0
+9,1
+45,0
+4,1
+6,0
+4,1
+2,0
+c,1
+4c,0
+9,1
+0
+8,1
+4e,0
+6,1
+4,0
+9,1
+57,0
+4,1
+3,0
+4,1
+54,0
+6,1
+5e,0
+2,1
+4,0
+3,1
+5d,0
+4,1
+5e,0
+1
+a18,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a35.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a35.dat
new file mode 100644
index 000000000..e14b06ec9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a35.dat
@@ -0,0 +1,575 @@
+! $XConsortium$
+100 90 32
+25e,0
+6,1
+5e,0
+d,1
+57,0
+14,1
+50,0
+1b,1
+49,0
+1b,1
+49,0
+1b,1
+4a,0
+1a,1
+4a,0
+1a,1
+4a,0
+1a,1
+4a,0
+1a,1
+4a,0
+1a,1
+4a,0
+1a,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4b,0
+19,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+17b3,0
+100 90 32
+bc2,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4e,0
+16,1
+4e,0
+16,1
+4e,0
+16,1
+4e,0
+16,1
+4e,0
+16,1
+4e,0
+16,1
+4f,0
+15,1
+4f,0
+15,1
+4f,0
+15,1
+4f,0
+15,1
+4f,0
+15,1
+4f,0
+15,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+51,0
+13,1
+51,0
+13,1
+51,0
+13,1
+51,0
+13,1
+51,0
+13,1
+51,0
+13,1
+bfb,0
+100 90 32
+177f,0
+11,1
+53,0
+e,1
+56,0
+a,1
+5a,0
+7,1
+5d,0
+4,1
+a15,0
+100 90 32
+409,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+1792,0
+100 90 32
+bd9,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+20,1
+44,0
+1d,1
+47,0
+1a,1
+4a,0
+16,1
+4e,0
+13,1
+51,0
+10,1
+54,0
+c,1
+58,0
+9,1
+5b,0
+6,1
+5e,0
+2,1
+bf9,0
+100 90 32
+2328,0
+100 90 32
+42a,0
+e,1
+56,0
+e,1
+56,0
+e,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+c,1
+58,0
+c,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+8,1
+5c,0
+8,1
+5c,0
+8,1
+5c,0
+7,1
+178b,0
+100 90 32
+bfa,0
+7,1
+5d,0
+7,1
+5d,0
+6,1
+5e,0
+6,1
+5e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+3,1
+61,0
+3,1
+61,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+1
+63,0
+1
+63,0
+1
+1089,0
+100 90 32
+2328,0
+100 90 32
+bc2,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4d,0
+17,1
+4e,0
+16,1
+4e,0
+16,1
+4e,0
+16,1
+4e,0
+16,1
+4e,0
+16,1
+4e,0
+16,1
+4f,0
+15,1
+4f,0
+15,1
+4f,0
+15,1
+4f,0
+15,1
+4f,0
+15,1
+4f,0
+15,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+51,0
+13,1
+51,0
+13,1
+51,0
+13,1
+51,0
+13,1
+51,0
+13,1
+51,0
+13,1
+bfb,0
+100 90 32
+177f,0
+11,1
+53,0
+e,1
+56,0
+a,1
+5a,0
+7,1
+5d,0
+4,1
+a15,0
+100 90 32
+409,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+1792,0
+100 90 32
+bd9,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+20,1
+44,0
+1d,1
+47,0
+1a,1
+4a,0
+16,1
+4e,0
+13,1
+51,0
+10,1
+54,0
+c,1
+58,0
+9,1
+5b,0
+6,1
+5e,0
+2,1
+bf9,0
+100 90 32
+2328,0
+100 90 32
+42a,0
+e,1
+56,0
+e,1
+56,0
+e,1
+56,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+c,1
+58,0
+c,1
+58,0
+b,1
+59,0
+b,1
+59,0
+b,1
+59,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+9,1
+5b,0
+9,1
+5b,0
+8,1
+5c,0
+8,1
+5c,0
+8,1
+5c,0
+7,1
+178b,0
+100 90 32
+bfa,0
+7,1
+5d,0
+7,1
+5d,0
+6,1
+5e,0
+6,1
+5e,0
+5,1
+5f,0
+5,1
+5f,0
+5,1
+5f,0
+4,1
+60,0
+4,1
+60,0
+4,1
+60,0
+3,1
+61,0
+3,1
+61,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+1
+63,0
+1
+63,0
+1
+1089,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a38.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a38.dat
new file mode 100644
index 000000000..c7f116b18
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a38.dat
@@ -0,0 +1,621 @@
+! $XConsortium$
+100 90 32
+25f,0
+5,1
+64,0
+5,1
+5a,0
+4,1
+6,0
+4,1
+56,0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+4a,0
+d,1
+b,0
+d,1
+b,0
+d,1
+b,0
+1
+1a,0
+6,1
+c,0
+c,1
+c,0
+c,1
+c,0
+8,1
+20,0
+12,1
+6,0
+12,1
+6,0
+12,1
+1d,0
+b,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+1
+1c,0
+5,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+3,1
+1c,0
+2,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+7,1
+1e,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+3,1
+1d,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+20,0
+3,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+27,0
+8,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+20,0
+c,1
+b,0
+d,1
+b,0
+d,1
+28,0
+4,1
+c,0
+c,1
+c,0
+c,1
+c,0
+4,1
+24,0
+12,1
+6,0
+12,1
+6,0
+10,1
+21,0
+9,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+3,1
+22,0
+3,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+25,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+2,1
+23,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+25,0
+3,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+26,0
+1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+29,0
+6,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+26,0
+a,1
+b,0
+d,1
+b,0
+d,1
+2a,0
+2,1
+c,0
+c,1
+c,0
+c,1
+34,0
+12,1
+6,0
+12,1
+6,0
+b,1
+27,0
+8,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+2d,0
+1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+5,1
+29,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+2b,0
+4,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+2,1
+29,0
+1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+34,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+2b,0
+4,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+30,0
+8,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+34,0
+12,1
+6,0
+12,1
+6,0
+7,1
+2d,0
+6,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+34,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+1
+2e,0
+7,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+6,1
+2f,0
+2,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+34,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+2,1
+30,0
+4,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+2,1
+37,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+36,0
+3,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+3c,0
+6,1
+b,0
+d,1
+50,0
+c,1
+c,0
+1
+41,0
+10,1
+6,0
+9,1
+45,0
+4,1
+6,0
+4,1
+2,0
+c,1
+4c,0
+9,1
+0
+8,1
+4e,0
+6,1
+4,0
+9,1
+57,0
+4,1
+3,0
+4,1
+54,0
+6,1
+5e,0
+2,1
+4,0
+3,1
+5d,0
+4,1
+5e,0
+1
+a18,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a40.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a40.dat
new file mode 100644
index 000000000..1fb3cd7a2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a40.dat
@@ -0,0 +1,4083 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+25e,0
+6,1
+5e,0
+d,1
+57,0
+14,1
+50,0
+1b,1
+49,0
+4a,1
+1a,0
+4a,1
+1b,0
+49,1
+1b,0
+48,1
+1c,0
+48,1
+1c,0
+48,1
+1c,0
+47,1
+1d,0
+47,1
+1e,0
+45,1
+1f,0
+45,1
+1f,0
+45,1
+1f,0
+44,1
+20,0
+44,1
+20,0
+44,1
+21,0
+42,1
+22,0
+42,1
+22,0
+41,1
+23,0
+41,1
+23,0
+41,1
+23,0
+40,1
+25,0
+3f,1
+25,0
+3f,1
+25,0
+3e,1
+26,0
+3e,1
+26,0
+3d,1
+27,0
+3d,1
+28,0
+3c,1
+28,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3a,1
+2a,0
+3a,1
+2b,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2e,0
+35,1
+2f,0
+35,1
+2f,0
+34,1
+30,0
+31,1
+33,0
+2e,1
+36,0
+2a,1
+3b,0
+26,1
+3e,0
+23,1
+41,0
+1f,1
+45,0
+1c,1
+48,0
+19,1
+4b,0
+15,1
+50,0
+11,1
+53,0
+e,1
+56,0
+a,1
+5a,0
+7,1
+5d,0
+4,1
+a15,0
+100 90 32
+25e,0
+6,2
+5e,0
+d,2
+57,0
+14,2
+50,0
+1b,2
+49,0
+4a,2
+1a,0
+4a,2
+1b,0
+49,2
+1b,0
+48,2
+1c,0
+48,2
+1c,0
+48,2
+1c,0
+47,2
+1d,0
+47,2
+1e,0
+45,2
+1f,0
+45,2
+1f,0
+45,2
+1f,0
+44,2
+20,0
+44,2
+20,0
+44,2
+21,0
+42,2
+22,0
+42,2
+22,0
+41,2
+23,0
+41,2
+23,0
+41,2
+23,0
+40,2
+25,0
+3f,2
+25,0
+3f,2
+25,0
+3e,2
+26,0
+3e,2
+26,0
+3d,2
+27,0
+3d,2
+28,0
+3c,2
+28,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3a,2
+2a,0
+3a,2
+2b,0
+38,2
+2c,0
+38,2
+2c,0
+38,2
+2c,0
+37,2
+2d,0
+37,2
+2d,0
+37,2
+2e,0
+35,2
+2f,0
+35,2
+2f,0
+34,2
+30,0
+31,2
+33,0
+2e,2
+36,0
+2a,2
+3b,0
+26,2
+3e,0
+23,2
+41,0
+1f,2
+45,0
+1c,2
+48,0
+19,2
+4b,0
+15,2
+50,0
+11,2
+53,0
+e,2
+56,0
+a,2
+5a,0
+7,2
+5d,0
+4,2
+a15,0
+100 90 32
+25e,0
+6,3
+5e,0
+d,3
+57,0
+14,3
+50,0
+1b,3
+49,0
+4a,3
+1a,0
+4a,3
+1b,0
+49,3
+1b,0
+48,3
+1c,0
+48,3
+1c,0
+48,3
+1c,0
+47,3
+1d,0
+47,3
+1e,0
+45,3
+1f,0
+45,3
+1f,0
+45,3
+1f,0
+44,3
+20,0
+44,3
+20,0
+44,3
+21,0
+42,3
+22,0
+42,3
+22,0
+41,3
+23,0
+41,3
+23,0
+41,3
+23,0
+40,3
+25,0
+3f,3
+25,0
+3f,3
+25,0
+3e,3
+26,0
+3e,3
+26,0
+3d,3
+27,0
+3d,3
+28,0
+3c,3
+28,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3a,3
+2a,0
+3a,3
+2b,0
+38,3
+2c,0
+38,3
+2c,0
+38,3
+2c,0
+37,3
+2d,0
+37,3
+2d,0
+37,3
+2e,0
+35,3
+2f,0
+35,3
+2f,0
+34,3
+30,0
+31,3
+33,0
+2e,3
+36,0
+2a,3
+3b,0
+26,3
+3e,0
+23,3
+41,0
+1f,3
+45,0
+1c,3
+48,0
+19,3
+4b,0
+15,3
+50,0
+11,3
+53,0
+e,3
+56,0
+a,3
+5a,0
+7,3
+5d,0
+4,3
+a15,0
+100 90 32
+25e,0
+6,4
+5e,0
+d,4
+57,0
+14,4
+50,0
+1b,4
+49,0
+4a,4
+1a,0
+4a,4
+1b,0
+49,4
+1b,0
+48,4
+1c,0
+48,4
+1c,0
+48,4
+1c,0
+47,4
+1d,0
+47,4
+1e,0
+45,4
+1f,0
+45,4
+1f,0
+45,4
+1f,0
+44,4
+20,0
+44,4
+20,0
+44,4
+21,0
+42,4
+22,0
+42,4
+22,0
+41,4
+23,0
+41,4
+23,0
+41,4
+23,0
+40,4
+25,0
+3f,4
+25,0
+3f,4
+25,0
+3e,4
+26,0
+3e,4
+26,0
+3d,4
+27,0
+3d,4
+28,0
+3c,4
+28,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3a,4
+2a,0
+3a,4
+2b,0
+38,4
+2c,0
+38,4
+2c,0
+38,4
+2c,0
+37,4
+2d,0
+37,4
+2d,0
+37,4
+2e,0
+35,4
+2f,0
+35,4
+2f,0
+34,4
+30,0
+31,4
+33,0
+2e,4
+36,0
+2a,4
+3b,0
+26,4
+3e,0
+23,4
+41,0
+1f,4
+45,0
+1c,4
+48,0
+19,4
+4b,0
+15,4
+50,0
+11,4
+53,0
+e,4
+56,0
+a,4
+5a,0
+7,4
+5d,0
+4,4
+a15,0
+100 90 32
+25e,0
+6,6
+5e,0
+d,6
+57,0
+14,6
+50,0
+1b,6
+49,0
+4a,6
+1a,0
+4a,6
+1b,0
+49,6
+1b,0
+48,6
+1c,0
+48,6
+1c,0
+48,6
+1c,0
+47,6
+1d,0
+47,6
+1e,0
+45,6
+1f,0
+45,6
+1f,0
+45,6
+1f,0
+44,6
+20,0
+44,6
+20,0
+44,6
+21,0
+42,6
+22,0
+42,6
+22,0
+41,6
+23,0
+41,6
+23,0
+41,6
+23,0
+40,6
+25,0
+3f,6
+25,0
+3f,6
+25,0
+3e,6
+26,0
+3e,6
+26,0
+3d,6
+27,0
+3d,6
+28,0
+3c,6
+28,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3a,6
+2a,0
+3a,6
+2b,0
+38,6
+2c,0
+38,6
+2c,0
+38,6
+2c,0
+37,6
+2d,0
+37,6
+2d,0
+37,6
+2e,0
+35,6
+2f,0
+35,6
+2f,0
+34,6
+30,0
+31,6
+33,0
+2e,6
+36,0
+2a,6
+3b,0
+26,6
+3e,0
+23,6
+41,0
+1f,6
+45,0
+1c,6
+48,0
+19,6
+4b,0
+15,6
+50,0
+11,6
+53,0
+e,6
+56,0
+a,6
+5a,0
+7,6
+5d,0
+4,6
+a15,0
+100 90 32
+25e,0
+6,7
+5e,0
+d,7
+57,0
+14,7
+50,0
+1b,7
+49,0
+4a,7
+1a,0
+4a,7
+1b,0
+49,7
+1b,0
+48,7
+1c,0
+48,7
+1c,0
+48,7
+1c,0
+47,7
+1d,0
+47,7
+1e,0
+45,7
+1f,0
+45,7
+1f,0
+45,7
+1f,0
+44,7
+20,0
+44,7
+20,0
+44,7
+21,0
+42,7
+22,0
+42,7
+22,0
+41,7
+23,0
+41,7
+23,0
+41,7
+23,0
+40,7
+25,0
+3f,7
+25,0
+3f,7
+25,0
+3e,7
+26,0
+3e,7
+26,0
+3d,7
+27,0
+3d,7
+28,0
+3c,7
+28,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3a,7
+2a,0
+3a,7
+2b,0
+38,7
+2c,0
+38,7
+2c,0
+38,7
+2c,0
+37,7
+2d,0
+37,7
+2d,0
+37,7
+2e,0
+35,7
+2f,0
+35,7
+2f,0
+34,7
+30,0
+31,7
+33,0
+2e,7
+36,0
+2a,7
+3b,0
+26,7
+3e,0
+23,7
+41,0
+1f,7
+45,0
+1c,7
+48,0
+19,7
+4b,0
+15,7
+50,0
+11,7
+53,0
+e,7
+56,0
+a,7
+5a,0
+7,7
+5d,0
+4,7
+a15,0
+100 90 32
+25e,0
+6,10
+5e,0
+d,10
+57,0
+14,10
+50,0
+1b,10
+49,0
+4a,10
+1a,0
+4a,10
+1b,0
+49,10
+1b,0
+48,10
+1c,0
+48,10
+1c,0
+48,10
+1c,0
+47,10
+1d,0
+47,10
+1e,0
+45,10
+1f,0
+45,10
+1f,0
+45,10
+1f,0
+44,10
+20,0
+44,10
+20,0
+44,10
+21,0
+42,10
+22,0
+42,10
+22,0
+41,10
+23,0
+41,10
+23,0
+41,10
+23,0
+40,10
+25,0
+3f,10
+25,0
+3f,10
+25,0
+3e,10
+26,0
+3e,10
+26,0
+3d,10
+27,0
+3d,10
+28,0
+3c,10
+28,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3a,10
+2a,0
+3a,10
+2b,0
+38,10
+2c,0
+38,10
+2c,0
+38,10
+2c,0
+37,10
+2d,0
+37,10
+2d,0
+37,10
+2e,0
+35,10
+2f,0
+35,10
+2f,0
+34,10
+30,0
+31,10
+33,0
+2e,10
+36,0
+2a,10
+3b,0
+26,10
+3e,0
+23,10
+41,0
+1f,10
+45,0
+1c,10
+48,0
+19,10
+4b,0
+15,10
+50,0
+11,10
+53,0
+e,10
+56,0
+a,10
+5a,0
+7,10
+5d,0
+4,10
+a15,0
+100 90 32
+25e,0
+6,33
+5e,0
+d,33
+57,0
+14,33
+50,0
+1b,33
+49,0
+4a,33
+1a,0
+4a,33
+1b,0
+49,33
+1b,0
+48,33
+1c,0
+48,33
+1c,0
+48,33
+1c,0
+47,33
+1d,0
+47,33
+1e,0
+45,33
+1f,0
+45,33
+1f,0
+45,33
+1f,0
+44,33
+20,0
+44,33
+20,0
+44,33
+21,0
+42,33
+22,0
+42,33
+22,0
+41,33
+23,0
+41,33
+23,0
+41,33
+23,0
+40,33
+25,0
+3f,33
+25,0
+3f,33
+25,0
+3e,33
+26,0
+3e,33
+26,0
+3d,33
+27,0
+3d,33
+28,0
+3c,33
+28,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3a,33
+2a,0
+3a,33
+2b,0
+38,33
+2c,0
+38,33
+2c,0
+38,33
+2c,0
+37,33
+2d,0
+37,33
+2d,0
+37,33
+2e,0
+35,33
+2f,0
+35,33
+2f,0
+34,33
+30,0
+31,33
+33,0
+2e,33
+36,0
+2a,33
+3b,0
+26,33
+3e,0
+23,33
+41,0
+1f,33
+45,0
+1c,33
+48,0
+19,33
+4b,0
+15,33
+50,0
+11,33
+53,0
+e,33
+56,0
+a,33
+5a,0
+7,33
+5d,0
+4,33
+a15,0
+100 90 32
+25e,0
+6,81
+5e,0
+d,81
+57,0
+14,81
+50,0
+1b,81
+49,0
+4a,81
+1a,0
+4a,81
+1b,0
+49,81
+1b,0
+48,81
+1c,0
+48,81
+1c,0
+48,81
+1c,0
+47,81
+1d,0
+47,81
+1e,0
+45,81
+1f,0
+45,81
+1f,0
+45,81
+1f,0
+44,81
+20,0
+44,81
+20,0
+44,81
+21,0
+42,81
+22,0
+42,81
+22,0
+41,81
+23,0
+41,81
+23,0
+41,81
+23,0
+40,81
+25,0
+3f,81
+25,0
+3f,81
+25,0
+3e,81
+26,0
+3e,81
+26,0
+3d,81
+27,0
+3d,81
+28,0
+3c,81
+28,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3a,81
+2a,0
+3a,81
+2b,0
+38,81
+2c,0
+38,81
+2c,0
+38,81
+2c,0
+37,81
+2d,0
+37,81
+2d,0
+37,81
+2e,0
+35,81
+2f,0
+35,81
+2f,0
+34,81
+30,0
+31,81
+33,0
+2e,81
+36,0
+2a,81
+3b,0
+26,81
+3e,0
+23,81
+41,0
+1f,81
+45,0
+1c,81
+48,0
+19,81
+4b,0
+15,81
+50,0
+11,81
+53,0
+e,81
+56,0
+a,81
+5a,0
+7,81
+5d,0
+4,81
+a15,0
+100 90 32
+25e,0
+6,a3
+5e,0
+d,a3
+57,0
+14,a3
+50,0
+1b,a3
+49,0
+4a,a3
+1a,0
+4a,a3
+1b,0
+49,a3
+1b,0
+48,a3
+1c,0
+48,a3
+1c,0
+48,a3
+1c,0
+47,a3
+1d,0
+47,a3
+1e,0
+45,a3
+1f,0
+45,a3
+1f,0
+45,a3
+1f,0
+44,a3
+20,0
+44,a3
+20,0
+44,a3
+21,0
+42,a3
+22,0
+42,a3
+22,0
+41,a3
+23,0
+41,a3
+23,0
+41,a3
+23,0
+40,a3
+25,0
+3f,a3
+25,0
+3f,a3
+25,0
+3e,a3
+26,0
+3e,a3
+26,0
+3d,a3
+27,0
+3d,a3
+28,0
+3c,a3
+28,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3a,a3
+2a,0
+3a,a3
+2b,0
+38,a3
+2c,0
+38,a3
+2c,0
+38,a3
+2c,0
+37,a3
+2d,0
+37,a3
+2d,0
+37,a3
+2e,0
+35,a3
+2f,0
+35,a3
+2f,0
+34,a3
+30,0
+31,a3
+33,0
+2e,a3
+36,0
+2a,a3
+3b,0
+26,a3
+3e,0
+23,a3
+41,0
+1f,a3
+45,0
+1c,a3
+48,0
+19,a3
+4b,0
+15,a3
+50,0
+11,a3
+53,0
+e,a3
+56,0
+a,a3
+5a,0
+7,a3
+5d,0
+4,a3
+a15,0
+100 90 32
+25e,0
+6,ff
+5e,0
+d,ff
+57,0
+14,ff
+50,0
+1b,ff
+49,0
+4a,ff
+1a,0
+4a,ff
+1b,0
+49,ff
+1b,0
+48,ff
+1c,0
+48,ff
+1c,0
+48,ff
+1c,0
+47,ff
+1d,0
+47,ff
+1e,0
+45,ff
+1f,0
+45,ff
+1f,0
+45,ff
+1f,0
+44,ff
+20,0
+44,ff
+20,0
+44,ff
+21,0
+42,ff
+22,0
+42,ff
+22,0
+41,ff
+23,0
+41,ff
+23,0
+41,ff
+23,0
+40,ff
+25,0
+3f,ff
+25,0
+3f,ff
+25,0
+3e,ff
+26,0
+3e,ff
+26,0
+3d,ff
+27,0
+3d,ff
+28,0
+3c,ff
+28,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3a,ff
+2a,0
+3a,ff
+2b,0
+38,ff
+2c,0
+38,ff
+2c,0
+38,ff
+2c,0
+37,ff
+2d,0
+37,ff
+2d,0
+37,ff
+2e,0
+35,ff
+2f,0
+35,ff
+2f,0
+34,ff
+30,0
+31,ff
+33,0
+2e,ff
+36,0
+2a,ff
+3b,0
+26,ff
+3e,0
+23,ff
+41,0
+1f,ff
+45,0
+1c,ff
+48,0
+19,ff
+4b,0
+15,ff
+50,0
+11,ff
+53,0
+e,ff
+56,0
+a,ff
+5a,0
+7,ff
+5d,0
+4,ff
+a15,0
+100 90 32
+25e,0
+6,100
+5e,0
+d,100
+57,0
+14,100
+50,0
+1b,100
+49,0
+4a,100
+1a,0
+4a,100
+1b,0
+49,100
+1b,0
+48,100
+1c,0
+48,100
+1c,0
+48,100
+1c,0
+47,100
+1d,0
+47,100
+1e,0
+45,100
+1f,0
+45,100
+1f,0
+45,100
+1f,0
+44,100
+20,0
+44,100
+20,0
+44,100
+21,0
+42,100
+22,0
+42,100
+22,0
+41,100
+23,0
+41,100
+23,0
+41,100
+23,0
+40,100
+25,0
+3f,100
+25,0
+3f,100
+25,0
+3e,100
+26,0
+3e,100
+26,0
+3d,100
+27,0
+3d,100
+28,0
+3c,100
+28,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3a,100
+2a,0
+3a,100
+2b,0
+38,100
+2c,0
+38,100
+2c,0
+38,100
+2c,0
+37,100
+2d,0
+37,100
+2d,0
+37,100
+2e,0
+35,100
+2f,0
+35,100
+2f,0
+34,100
+30,0
+31,100
+33,0
+2e,100
+36,0
+2a,100
+3b,0
+26,100
+3e,0
+23,100
+41,0
+1f,100
+45,0
+1c,100
+48,0
+19,100
+4b,0
+15,100
+50,0
+11,100
+53,0
+e,100
+56,0
+a,100
+5a,0
+7,100
+5d,0
+4,100
+a15,0
+100 90 32
+25e,0
+6,12c
+5e,0
+d,12c
+57,0
+14,12c
+50,0
+1b,12c
+49,0
+4a,12c
+1a,0
+4a,12c
+1b,0
+49,12c
+1b,0
+48,12c
+1c,0
+48,12c
+1c,0
+48,12c
+1c,0
+47,12c
+1d,0
+47,12c
+1e,0
+45,12c
+1f,0
+45,12c
+1f,0
+45,12c
+1f,0
+44,12c
+20,0
+44,12c
+20,0
+44,12c
+21,0
+42,12c
+22,0
+42,12c
+22,0
+41,12c
+23,0
+41,12c
+23,0
+41,12c
+23,0
+40,12c
+25,0
+3f,12c
+25,0
+3f,12c
+25,0
+3e,12c
+26,0
+3e,12c
+26,0
+3d,12c
+27,0
+3d,12c
+28,0
+3c,12c
+28,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3a,12c
+2a,0
+3a,12c
+2b,0
+38,12c
+2c,0
+38,12c
+2c,0
+38,12c
+2c,0
+37,12c
+2d,0
+37,12c
+2d,0
+37,12c
+2e,0
+35,12c
+2f,0
+35,12c
+2f,0
+34,12c
+30,0
+31,12c
+33,0
+2e,12c
+36,0
+2a,12c
+3b,0
+26,12c
+3e,0
+23,12c
+41,0
+1f,12c
+45,0
+1c,12c
+48,0
+19,12c
+4b,0
+15,12c
+50,0
+11,12c
+53,0
+e,12c
+56,0
+a,12c
+5a,0
+7,12c
+5d,0
+4,12c
+a15,0
+100 90 32
+25e,0
+6,3e8
+5e,0
+d,3e8
+57,0
+14,3e8
+50,0
+1b,3e8
+49,0
+4a,3e8
+1a,0
+4a,3e8
+1b,0
+49,3e8
+1b,0
+48,3e8
+1c,0
+48,3e8
+1c,0
+48,3e8
+1c,0
+47,3e8
+1d,0
+47,3e8
+1e,0
+45,3e8
+1f,0
+45,3e8
+1f,0
+45,3e8
+1f,0
+44,3e8
+20,0
+44,3e8
+20,0
+44,3e8
+21,0
+42,3e8
+22,0
+42,3e8
+22,0
+41,3e8
+23,0
+41,3e8
+23,0
+41,3e8
+23,0
+40,3e8
+25,0
+3f,3e8
+25,0
+3f,3e8
+25,0
+3e,3e8
+26,0
+3e,3e8
+26,0
+3d,3e8
+27,0
+3d,3e8
+28,0
+3c,3e8
+28,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3a,3e8
+2a,0
+3a,3e8
+2b,0
+38,3e8
+2c,0
+38,3e8
+2c,0
+38,3e8
+2c,0
+37,3e8
+2d,0
+37,3e8
+2d,0
+37,3e8
+2e,0
+35,3e8
+2f,0
+35,3e8
+2f,0
+34,3e8
+30,0
+31,3e8
+33,0
+2e,3e8
+36,0
+2a,3e8
+3b,0
+26,3e8
+3e,0
+23,3e8
+41,0
+1f,3e8
+45,0
+1c,3e8
+48,0
+19,3e8
+4b,0
+15,3e8
+50,0
+11,3e8
+53,0
+e,3e8
+56,0
+a,3e8
+5a,0
+7,3e8
+5d,0
+4,3e8
+a15,0
+100 90 32
+25e,0
+6,111111
+5e,0
+d,111111
+57,0
+14,111111
+50,0
+1b,111111
+49,0
+4a,111111
+1a,0
+4a,111111
+1b,0
+49,111111
+1b,0
+48,111111
+1c,0
+48,111111
+1c,0
+48,111111
+1c,0
+47,111111
+1d,0
+47,111111
+1e,0
+45,111111
+1f,0
+45,111111
+1f,0
+45,111111
+1f,0
+44,111111
+20,0
+44,111111
+20,0
+44,111111
+21,0
+42,111111
+22,0
+42,111111
+22,0
+41,111111
+23,0
+41,111111
+23,0
+41,111111
+23,0
+40,111111
+25,0
+3f,111111
+25,0
+3f,111111
+25,0
+3e,111111
+26,0
+3e,111111
+26,0
+3d,111111
+27,0
+3d,111111
+28,0
+3c,111111
+28,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3a,111111
+2a,0
+3a,111111
+2b,0
+38,111111
+2c,0
+38,111111
+2c,0
+38,111111
+2c,0
+37,111111
+2d,0
+37,111111
+2d,0
+37,111111
+2e,0
+35,111111
+2f,0
+35,111111
+2f,0
+34,111111
+30,0
+31,111111
+33,0
+2e,111111
+36,0
+2a,111111
+3b,0
+26,111111
+3e,0
+23,111111
+41,0
+1f,111111
+45,0
+1c,111111
+48,0
+19,111111
+4b,0
+15,111111
+50,0
+11,111111
+53,0
+e,111111
+56,0
+a,111111
+5a,0
+7,111111
+5d,0
+4,111111
+a15,0
+100 90 32
+25e,0
+6,400200
+5e,0
+d,400200
+57,0
+14,400200
+50,0
+1b,400200
+49,0
+4a,400200
+1a,0
+4a,400200
+1b,0
+49,400200
+1b,0
+48,400200
+1c,0
+48,400200
+1c,0
+48,400200
+1c,0
+47,400200
+1d,0
+47,400200
+1e,0
+45,400200
+1f,0
+45,400200
+1f,0
+45,400200
+1f,0
+44,400200
+20,0
+44,400200
+20,0
+44,400200
+21,0
+42,400200
+22,0
+42,400200
+22,0
+41,400200
+23,0
+41,400200
+23,0
+41,400200
+23,0
+40,400200
+25,0
+3f,400200
+25,0
+3f,400200
+25,0
+3e,400200
+26,0
+3e,400200
+26,0
+3d,400200
+27,0
+3d,400200
+28,0
+3c,400200
+28,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3a,400200
+2a,0
+3a,400200
+2b,0
+38,400200
+2c,0
+38,400200
+2c,0
+38,400200
+2c,0
+37,400200
+2d,0
+37,400200
+2d,0
+37,400200
+2e,0
+35,400200
+2f,0
+35,400200
+2f,0
+34,400200
+30,0
+31,400200
+33,0
+2e,400200
+36,0
+2a,400200
+3b,0
+26,400200
+3e,0
+23,400200
+41,0
+1f,400200
+45,0
+1c,400200
+48,0
+19,400200
+4b,0
+15,400200
+50,0
+11,400200
+53,0
+e,400200
+56,0
+a,400200
+5a,0
+7,400200
+5d,0
+4,400200
+a15,0
+100 90 32
+25e,0
+6,777777
+5e,0
+d,777777
+57,0
+14,777777
+50,0
+1b,777777
+49,0
+4a,777777
+1a,0
+4a,777777
+1b,0
+49,777777
+1b,0
+48,777777
+1c,0
+48,777777
+1c,0
+48,777777
+1c,0
+47,777777
+1d,0
+47,777777
+1e,0
+45,777777
+1f,0
+45,777777
+1f,0
+45,777777
+1f,0
+44,777777
+20,0
+44,777777
+20,0
+44,777777
+21,0
+42,777777
+22,0
+42,777777
+22,0
+41,777777
+23,0
+41,777777
+23,0
+41,777777
+23,0
+40,777777
+25,0
+3f,777777
+25,0
+3f,777777
+25,0
+3e,777777
+26,0
+3e,777777
+26,0
+3d,777777
+27,0
+3d,777777
+28,0
+3c,777777
+28,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3a,777777
+2a,0
+3a,777777
+2b,0
+38,777777
+2c,0
+38,777777
+2c,0
+38,777777
+2c,0
+37,777777
+2d,0
+37,777777
+2d,0
+37,777777
+2e,0
+35,777777
+2f,0
+35,777777
+2f,0
+34,777777
+30,0
+31,777777
+33,0
+2e,777777
+36,0
+2a,777777
+3b,0
+26,777777
+3e,0
+23,777777
+41,0
+1f,777777
+45,0
+1c,777777
+48,0
+19,777777
+4b,0
+15,777777
+50,0
+11,777777
+53,0
+e,777777
+56,0
+a,777777
+5a,0
+7,777777
+5d,0
+4,777777
+a15,0
+100 90 32
+25e,0
+6,1
+5e,0
+d,1
+57,0
+14,1
+50,0
+1b,1
+49,0
+4a,1
+1a,0
+4a,1
+1b,0
+49,1
+1b,0
+48,1
+1c,0
+48,1
+1c,0
+48,1
+1c,0
+47,1
+1d,0
+47,1
+1e,0
+45,1
+1f,0
+45,1
+1f,0
+45,1
+1f,0
+44,1
+20,0
+44,1
+20,0
+44,1
+21,0
+42,1
+22,0
+42,1
+22,0
+41,1
+23,0
+41,1
+23,0
+41,1
+23,0
+40,1
+25,0
+3f,1
+25,0
+3f,1
+25,0
+3e,1
+26,0
+3e,1
+26,0
+3d,1
+27,0
+3d,1
+28,0
+3c,1
+28,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3a,1
+2a,0
+3a,1
+2b,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2e,0
+35,1
+2f,0
+35,1
+2f,0
+34,1
+30,0
+31,1
+33,0
+2e,1
+36,0
+2a,1
+3b,0
+26,1
+3e,0
+23,1
+41,0
+1f,1
+45,0
+1c,1
+48,0
+19,1
+4b,0
+15,1
+50,0
+11,1
+53,0
+e,1
+56,0
+a,1
+5a,0
+7,1
+5d,0
+4,1
+a15,0
+100 90 32
+25e,0
+6,2
+5e,0
+d,2
+57,0
+14,2
+50,0
+1b,2
+49,0
+4a,2
+1a,0
+4a,2
+1b,0
+49,2
+1b,0
+48,2
+1c,0
+48,2
+1c,0
+48,2
+1c,0
+47,2
+1d,0
+47,2
+1e,0
+45,2
+1f,0
+45,2
+1f,0
+45,2
+1f,0
+44,2
+20,0
+44,2
+20,0
+44,2
+21,0
+42,2
+22,0
+42,2
+22,0
+41,2
+23,0
+41,2
+23,0
+41,2
+23,0
+40,2
+25,0
+3f,2
+25,0
+3f,2
+25,0
+3e,2
+26,0
+3e,2
+26,0
+3d,2
+27,0
+3d,2
+28,0
+3c,2
+28,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3a,2
+2a,0
+3a,2
+2b,0
+38,2
+2c,0
+38,2
+2c,0
+38,2
+2c,0
+37,2
+2d,0
+37,2
+2d,0
+37,2
+2e,0
+35,2
+2f,0
+35,2
+2f,0
+34,2
+30,0
+31,2
+33,0
+2e,2
+36,0
+2a,2
+3b,0
+26,2
+3e,0
+23,2
+41,0
+1f,2
+45,0
+1c,2
+48,0
+19,2
+4b,0
+15,2
+50,0
+11,2
+53,0
+e,2
+56,0
+a,2
+5a,0
+7,2
+5d,0
+4,2
+a15,0
+100 90 32
+25e,0
+6,3
+5e,0
+d,3
+57,0
+14,3
+50,0
+1b,3
+49,0
+4a,3
+1a,0
+4a,3
+1b,0
+49,3
+1b,0
+48,3
+1c,0
+48,3
+1c,0
+48,3
+1c,0
+47,3
+1d,0
+47,3
+1e,0
+45,3
+1f,0
+45,3
+1f,0
+45,3
+1f,0
+44,3
+20,0
+44,3
+20,0
+44,3
+21,0
+42,3
+22,0
+42,3
+22,0
+41,3
+23,0
+41,3
+23,0
+41,3
+23,0
+40,3
+25,0
+3f,3
+25,0
+3f,3
+25,0
+3e,3
+26,0
+3e,3
+26,0
+3d,3
+27,0
+3d,3
+28,0
+3c,3
+28,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3a,3
+2a,0
+3a,3
+2b,0
+38,3
+2c,0
+38,3
+2c,0
+38,3
+2c,0
+37,3
+2d,0
+37,3
+2d,0
+37,3
+2e,0
+35,3
+2f,0
+35,3
+2f,0
+34,3
+30,0
+31,3
+33,0
+2e,3
+36,0
+2a,3
+3b,0
+26,3
+3e,0
+23,3
+41,0
+1f,3
+45,0
+1c,3
+48,0
+19,3
+4b,0
+15,3
+50,0
+11,3
+53,0
+e,3
+56,0
+a,3
+5a,0
+7,3
+5d,0
+4,3
+a15,0
+100 90 32
+25e,0
+6,4
+5e,0
+d,4
+57,0
+14,4
+50,0
+1b,4
+49,0
+4a,4
+1a,0
+4a,4
+1b,0
+49,4
+1b,0
+48,4
+1c,0
+48,4
+1c,0
+48,4
+1c,0
+47,4
+1d,0
+47,4
+1e,0
+45,4
+1f,0
+45,4
+1f,0
+45,4
+1f,0
+44,4
+20,0
+44,4
+20,0
+44,4
+21,0
+42,4
+22,0
+42,4
+22,0
+41,4
+23,0
+41,4
+23,0
+41,4
+23,0
+40,4
+25,0
+3f,4
+25,0
+3f,4
+25,0
+3e,4
+26,0
+3e,4
+26,0
+3d,4
+27,0
+3d,4
+28,0
+3c,4
+28,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3a,4
+2a,0
+3a,4
+2b,0
+38,4
+2c,0
+38,4
+2c,0
+38,4
+2c,0
+37,4
+2d,0
+37,4
+2d,0
+37,4
+2e,0
+35,4
+2f,0
+35,4
+2f,0
+34,4
+30,0
+31,4
+33,0
+2e,4
+36,0
+2a,4
+3b,0
+26,4
+3e,0
+23,4
+41,0
+1f,4
+45,0
+1c,4
+48,0
+19,4
+4b,0
+15,4
+50,0
+11,4
+53,0
+e,4
+56,0
+a,4
+5a,0
+7,4
+5d,0
+4,4
+a15,0
+100 90 32
+25e,0
+6,6
+5e,0
+d,6
+57,0
+14,6
+50,0
+1b,6
+49,0
+4a,6
+1a,0
+4a,6
+1b,0
+49,6
+1b,0
+48,6
+1c,0
+48,6
+1c,0
+48,6
+1c,0
+47,6
+1d,0
+47,6
+1e,0
+45,6
+1f,0
+45,6
+1f,0
+45,6
+1f,0
+44,6
+20,0
+44,6
+20,0
+44,6
+21,0
+42,6
+22,0
+42,6
+22,0
+41,6
+23,0
+41,6
+23,0
+41,6
+23,0
+40,6
+25,0
+3f,6
+25,0
+3f,6
+25,0
+3e,6
+26,0
+3e,6
+26,0
+3d,6
+27,0
+3d,6
+28,0
+3c,6
+28,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3a,6
+2a,0
+3a,6
+2b,0
+38,6
+2c,0
+38,6
+2c,0
+38,6
+2c,0
+37,6
+2d,0
+37,6
+2d,0
+37,6
+2e,0
+35,6
+2f,0
+35,6
+2f,0
+34,6
+30,0
+31,6
+33,0
+2e,6
+36,0
+2a,6
+3b,0
+26,6
+3e,0
+23,6
+41,0
+1f,6
+45,0
+1c,6
+48,0
+19,6
+4b,0
+15,6
+50,0
+11,6
+53,0
+e,6
+56,0
+a,6
+5a,0
+7,6
+5d,0
+4,6
+a15,0
+100 90 32
+25e,0
+6,7
+5e,0
+d,7
+57,0
+14,7
+50,0
+1b,7
+49,0
+4a,7
+1a,0
+4a,7
+1b,0
+49,7
+1b,0
+48,7
+1c,0
+48,7
+1c,0
+48,7
+1c,0
+47,7
+1d,0
+47,7
+1e,0
+45,7
+1f,0
+45,7
+1f,0
+45,7
+1f,0
+44,7
+20,0
+44,7
+20,0
+44,7
+21,0
+42,7
+22,0
+42,7
+22,0
+41,7
+23,0
+41,7
+23,0
+41,7
+23,0
+40,7
+25,0
+3f,7
+25,0
+3f,7
+25,0
+3e,7
+26,0
+3e,7
+26,0
+3d,7
+27,0
+3d,7
+28,0
+3c,7
+28,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3a,7
+2a,0
+3a,7
+2b,0
+38,7
+2c,0
+38,7
+2c,0
+38,7
+2c,0
+37,7
+2d,0
+37,7
+2d,0
+37,7
+2e,0
+35,7
+2f,0
+35,7
+2f,0
+34,7
+30,0
+31,7
+33,0
+2e,7
+36,0
+2a,7
+3b,0
+26,7
+3e,0
+23,7
+41,0
+1f,7
+45,0
+1c,7
+48,0
+19,7
+4b,0
+15,7
+50,0
+11,7
+53,0
+e,7
+56,0
+a,7
+5a,0
+7,7
+5d,0
+4,7
+a15,0
+100 90 32
+25e,0
+6,10
+5e,0
+d,10
+57,0
+14,10
+50,0
+1b,10
+49,0
+4a,10
+1a,0
+4a,10
+1b,0
+49,10
+1b,0
+48,10
+1c,0
+48,10
+1c,0
+48,10
+1c,0
+47,10
+1d,0
+47,10
+1e,0
+45,10
+1f,0
+45,10
+1f,0
+45,10
+1f,0
+44,10
+20,0
+44,10
+20,0
+44,10
+21,0
+42,10
+22,0
+42,10
+22,0
+41,10
+23,0
+41,10
+23,0
+41,10
+23,0
+40,10
+25,0
+3f,10
+25,0
+3f,10
+25,0
+3e,10
+26,0
+3e,10
+26,0
+3d,10
+27,0
+3d,10
+28,0
+3c,10
+28,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3a,10
+2a,0
+3a,10
+2b,0
+38,10
+2c,0
+38,10
+2c,0
+38,10
+2c,0
+37,10
+2d,0
+37,10
+2d,0
+37,10
+2e,0
+35,10
+2f,0
+35,10
+2f,0
+34,10
+30,0
+31,10
+33,0
+2e,10
+36,0
+2a,10
+3b,0
+26,10
+3e,0
+23,10
+41,0
+1f,10
+45,0
+1c,10
+48,0
+19,10
+4b,0
+15,10
+50,0
+11,10
+53,0
+e,10
+56,0
+a,10
+5a,0
+7,10
+5d,0
+4,10
+a15,0
+100 90 32
+25e,0
+6,33
+5e,0
+d,33
+57,0
+14,33
+50,0
+1b,33
+49,0
+4a,33
+1a,0
+4a,33
+1b,0
+49,33
+1b,0
+48,33
+1c,0
+48,33
+1c,0
+48,33
+1c,0
+47,33
+1d,0
+47,33
+1e,0
+45,33
+1f,0
+45,33
+1f,0
+45,33
+1f,0
+44,33
+20,0
+44,33
+20,0
+44,33
+21,0
+42,33
+22,0
+42,33
+22,0
+41,33
+23,0
+41,33
+23,0
+41,33
+23,0
+40,33
+25,0
+3f,33
+25,0
+3f,33
+25,0
+3e,33
+26,0
+3e,33
+26,0
+3d,33
+27,0
+3d,33
+28,0
+3c,33
+28,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3a,33
+2a,0
+3a,33
+2b,0
+38,33
+2c,0
+38,33
+2c,0
+38,33
+2c,0
+37,33
+2d,0
+37,33
+2d,0
+37,33
+2e,0
+35,33
+2f,0
+35,33
+2f,0
+34,33
+30,0
+31,33
+33,0
+2e,33
+36,0
+2a,33
+3b,0
+26,33
+3e,0
+23,33
+41,0
+1f,33
+45,0
+1c,33
+48,0
+19,33
+4b,0
+15,33
+50,0
+11,33
+53,0
+e,33
+56,0
+a,33
+5a,0
+7,33
+5d,0
+4,33
+a15,0
+100 90 32
+25e,0
+6,81
+5e,0
+d,81
+57,0
+14,81
+50,0
+1b,81
+49,0
+4a,81
+1a,0
+4a,81
+1b,0
+49,81
+1b,0
+48,81
+1c,0
+48,81
+1c,0
+48,81
+1c,0
+47,81
+1d,0
+47,81
+1e,0
+45,81
+1f,0
+45,81
+1f,0
+45,81
+1f,0
+44,81
+20,0
+44,81
+20,0
+44,81
+21,0
+42,81
+22,0
+42,81
+22,0
+41,81
+23,0
+41,81
+23,0
+41,81
+23,0
+40,81
+25,0
+3f,81
+25,0
+3f,81
+25,0
+3e,81
+26,0
+3e,81
+26,0
+3d,81
+27,0
+3d,81
+28,0
+3c,81
+28,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3a,81
+2a,0
+3a,81
+2b,0
+38,81
+2c,0
+38,81
+2c,0
+38,81
+2c,0
+37,81
+2d,0
+37,81
+2d,0
+37,81
+2e,0
+35,81
+2f,0
+35,81
+2f,0
+34,81
+30,0
+31,81
+33,0
+2e,81
+36,0
+2a,81
+3b,0
+26,81
+3e,0
+23,81
+41,0
+1f,81
+45,0
+1c,81
+48,0
+19,81
+4b,0
+15,81
+50,0
+11,81
+53,0
+e,81
+56,0
+a,81
+5a,0
+7,81
+5d,0
+4,81
+a15,0
+100 90 32
+25e,0
+6,a3
+5e,0
+d,a3
+57,0
+14,a3
+50,0
+1b,a3
+49,0
+4a,a3
+1a,0
+4a,a3
+1b,0
+49,a3
+1b,0
+48,a3
+1c,0
+48,a3
+1c,0
+48,a3
+1c,0
+47,a3
+1d,0
+47,a3
+1e,0
+45,a3
+1f,0
+45,a3
+1f,0
+45,a3
+1f,0
+44,a3
+20,0
+44,a3
+20,0
+44,a3
+21,0
+42,a3
+22,0
+42,a3
+22,0
+41,a3
+23,0
+41,a3
+23,0
+41,a3
+23,0
+40,a3
+25,0
+3f,a3
+25,0
+3f,a3
+25,0
+3e,a3
+26,0
+3e,a3
+26,0
+3d,a3
+27,0
+3d,a3
+28,0
+3c,a3
+28,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3a,a3
+2a,0
+3a,a3
+2b,0
+38,a3
+2c,0
+38,a3
+2c,0
+38,a3
+2c,0
+37,a3
+2d,0
+37,a3
+2d,0
+37,a3
+2e,0
+35,a3
+2f,0
+35,a3
+2f,0
+34,a3
+30,0
+31,a3
+33,0
+2e,a3
+36,0
+2a,a3
+3b,0
+26,a3
+3e,0
+23,a3
+41,0
+1f,a3
+45,0
+1c,a3
+48,0
+19,a3
+4b,0
+15,a3
+50,0
+11,a3
+53,0
+e,a3
+56,0
+a,a3
+5a,0
+7,a3
+5d,0
+4,a3
+a15,0
+100 90 32
+25e,0
+6,ff
+5e,0
+d,ff
+57,0
+14,ff
+50,0
+1b,ff
+49,0
+4a,ff
+1a,0
+4a,ff
+1b,0
+49,ff
+1b,0
+48,ff
+1c,0
+48,ff
+1c,0
+48,ff
+1c,0
+47,ff
+1d,0
+47,ff
+1e,0
+45,ff
+1f,0
+45,ff
+1f,0
+45,ff
+1f,0
+44,ff
+20,0
+44,ff
+20,0
+44,ff
+21,0
+42,ff
+22,0
+42,ff
+22,0
+41,ff
+23,0
+41,ff
+23,0
+41,ff
+23,0
+40,ff
+25,0
+3f,ff
+25,0
+3f,ff
+25,0
+3e,ff
+26,0
+3e,ff
+26,0
+3d,ff
+27,0
+3d,ff
+28,0
+3c,ff
+28,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3a,ff
+2a,0
+3a,ff
+2b,0
+38,ff
+2c,0
+38,ff
+2c,0
+38,ff
+2c,0
+37,ff
+2d,0
+37,ff
+2d,0
+37,ff
+2e,0
+35,ff
+2f,0
+35,ff
+2f,0
+34,ff
+30,0
+31,ff
+33,0
+2e,ff
+36,0
+2a,ff
+3b,0
+26,ff
+3e,0
+23,ff
+41,0
+1f,ff
+45,0
+1c,ff
+48,0
+19,ff
+4b,0
+15,ff
+50,0
+11,ff
+53,0
+e,ff
+56,0
+a,ff
+5a,0
+7,ff
+5d,0
+4,ff
+a15,0
+100 90 32
+25e,0
+6,100
+5e,0
+d,100
+57,0
+14,100
+50,0
+1b,100
+49,0
+4a,100
+1a,0
+4a,100
+1b,0
+49,100
+1b,0
+48,100
+1c,0
+48,100
+1c,0
+48,100
+1c,0
+47,100
+1d,0
+47,100
+1e,0
+45,100
+1f,0
+45,100
+1f,0
+45,100
+1f,0
+44,100
+20,0
+44,100
+20,0
+44,100
+21,0
+42,100
+22,0
+42,100
+22,0
+41,100
+23,0
+41,100
+23,0
+41,100
+23,0
+40,100
+25,0
+3f,100
+25,0
+3f,100
+25,0
+3e,100
+26,0
+3e,100
+26,0
+3d,100
+27,0
+3d,100
+28,0
+3c,100
+28,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3a,100
+2a,0
+3a,100
+2b,0
+38,100
+2c,0
+38,100
+2c,0
+38,100
+2c,0
+37,100
+2d,0
+37,100
+2d,0
+37,100
+2e,0
+35,100
+2f,0
+35,100
+2f,0
+34,100
+30,0
+31,100
+33,0
+2e,100
+36,0
+2a,100
+3b,0
+26,100
+3e,0
+23,100
+41,0
+1f,100
+45,0
+1c,100
+48,0
+19,100
+4b,0
+15,100
+50,0
+11,100
+53,0
+e,100
+56,0
+a,100
+5a,0
+7,100
+5d,0
+4,100
+a15,0
+100 90 32
+25e,0
+6,12c
+5e,0
+d,12c
+57,0
+14,12c
+50,0
+1b,12c
+49,0
+4a,12c
+1a,0
+4a,12c
+1b,0
+49,12c
+1b,0
+48,12c
+1c,0
+48,12c
+1c,0
+48,12c
+1c,0
+47,12c
+1d,0
+47,12c
+1e,0
+45,12c
+1f,0
+45,12c
+1f,0
+45,12c
+1f,0
+44,12c
+20,0
+44,12c
+20,0
+44,12c
+21,0
+42,12c
+22,0
+42,12c
+22,0
+41,12c
+23,0
+41,12c
+23,0
+41,12c
+23,0
+40,12c
+25,0
+3f,12c
+25,0
+3f,12c
+25,0
+3e,12c
+26,0
+3e,12c
+26,0
+3d,12c
+27,0
+3d,12c
+28,0
+3c,12c
+28,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3a,12c
+2a,0
+3a,12c
+2b,0
+38,12c
+2c,0
+38,12c
+2c,0
+38,12c
+2c,0
+37,12c
+2d,0
+37,12c
+2d,0
+37,12c
+2e,0
+35,12c
+2f,0
+35,12c
+2f,0
+34,12c
+30,0
+31,12c
+33,0
+2e,12c
+36,0
+2a,12c
+3b,0
+26,12c
+3e,0
+23,12c
+41,0
+1f,12c
+45,0
+1c,12c
+48,0
+19,12c
+4b,0
+15,12c
+50,0
+11,12c
+53,0
+e,12c
+56,0
+a,12c
+5a,0
+7,12c
+5d,0
+4,12c
+a15,0
+100 90 32
+25e,0
+6,3e8
+5e,0
+d,3e8
+57,0
+14,3e8
+50,0
+1b,3e8
+49,0
+4a,3e8
+1a,0
+4a,3e8
+1b,0
+49,3e8
+1b,0
+48,3e8
+1c,0
+48,3e8
+1c,0
+48,3e8
+1c,0
+47,3e8
+1d,0
+47,3e8
+1e,0
+45,3e8
+1f,0
+45,3e8
+1f,0
+45,3e8
+1f,0
+44,3e8
+20,0
+44,3e8
+20,0
+44,3e8
+21,0
+42,3e8
+22,0
+42,3e8
+22,0
+41,3e8
+23,0
+41,3e8
+23,0
+41,3e8
+23,0
+40,3e8
+25,0
+3f,3e8
+25,0
+3f,3e8
+25,0
+3e,3e8
+26,0
+3e,3e8
+26,0
+3d,3e8
+27,0
+3d,3e8
+28,0
+3c,3e8
+28,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3a,3e8
+2a,0
+3a,3e8
+2b,0
+38,3e8
+2c,0
+38,3e8
+2c,0
+38,3e8
+2c,0
+37,3e8
+2d,0
+37,3e8
+2d,0
+37,3e8
+2e,0
+35,3e8
+2f,0
+35,3e8
+2f,0
+34,3e8
+30,0
+31,3e8
+33,0
+2e,3e8
+36,0
+2a,3e8
+3b,0
+26,3e8
+3e,0
+23,3e8
+41,0
+1f,3e8
+45,0
+1c,3e8
+48,0
+19,3e8
+4b,0
+15,3e8
+50,0
+11,3e8
+53,0
+e,3e8
+56,0
+a,3e8
+5a,0
+7,3e8
+5d,0
+4,3e8
+a15,0
+100 90 32
+25e,0
+6,111111
+5e,0
+d,111111
+57,0
+14,111111
+50,0
+1b,111111
+49,0
+4a,111111
+1a,0
+4a,111111
+1b,0
+49,111111
+1b,0
+48,111111
+1c,0
+48,111111
+1c,0
+48,111111
+1c,0
+47,111111
+1d,0
+47,111111
+1e,0
+45,111111
+1f,0
+45,111111
+1f,0
+45,111111
+1f,0
+44,111111
+20,0
+44,111111
+20,0
+44,111111
+21,0
+42,111111
+22,0
+42,111111
+22,0
+41,111111
+23,0
+41,111111
+23,0
+41,111111
+23,0
+40,111111
+25,0
+3f,111111
+25,0
+3f,111111
+25,0
+3e,111111
+26,0
+3e,111111
+26,0
+3d,111111
+27,0
+3d,111111
+28,0
+3c,111111
+28,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3a,111111
+2a,0
+3a,111111
+2b,0
+38,111111
+2c,0
+38,111111
+2c,0
+38,111111
+2c,0
+37,111111
+2d,0
+37,111111
+2d,0
+37,111111
+2e,0
+35,111111
+2f,0
+35,111111
+2f,0
+34,111111
+30,0
+31,111111
+33,0
+2e,111111
+36,0
+2a,111111
+3b,0
+26,111111
+3e,0
+23,111111
+41,0
+1f,111111
+45,0
+1c,111111
+48,0
+19,111111
+4b,0
+15,111111
+50,0
+11,111111
+53,0
+e,111111
+56,0
+a,111111
+5a,0
+7,111111
+5d,0
+4,111111
+a15,0
+100 90 32
+25e,0
+6,400200
+5e,0
+d,400200
+57,0
+14,400200
+50,0
+1b,400200
+49,0
+4a,400200
+1a,0
+4a,400200
+1b,0
+49,400200
+1b,0
+48,400200
+1c,0
+48,400200
+1c,0
+48,400200
+1c,0
+47,400200
+1d,0
+47,400200
+1e,0
+45,400200
+1f,0
+45,400200
+1f,0
+45,400200
+1f,0
+44,400200
+20,0
+44,400200
+20,0
+44,400200
+21,0
+42,400200
+22,0
+42,400200
+22,0
+41,400200
+23,0
+41,400200
+23,0
+41,400200
+23,0
+40,400200
+25,0
+3f,400200
+25,0
+3f,400200
+25,0
+3e,400200
+26,0
+3e,400200
+26,0
+3d,400200
+27,0
+3d,400200
+28,0
+3c,400200
+28,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3a,400200
+2a,0
+3a,400200
+2b,0
+38,400200
+2c,0
+38,400200
+2c,0
+38,400200
+2c,0
+37,400200
+2d,0
+37,400200
+2d,0
+37,400200
+2e,0
+35,400200
+2f,0
+35,400200
+2f,0
+34,400200
+30,0
+31,400200
+33,0
+2e,400200
+36,0
+2a,400200
+3b,0
+26,400200
+3e,0
+23,400200
+41,0
+1f,400200
+45,0
+1c,400200
+48,0
+19,400200
+4b,0
+15,400200
+50,0
+11,400200
+53,0
+e,400200
+56,0
+a,400200
+5a,0
+7,400200
+5d,0
+4,400200
+a15,0
+100 90 32
+25e,0
+6,777777
+5e,0
+d,777777
+57,0
+14,777777
+50,0
+1b,777777
+49,0
+4a,777777
+1a,0
+4a,777777
+1b,0
+49,777777
+1b,0
+48,777777
+1c,0
+48,777777
+1c,0
+48,777777
+1c,0
+47,777777
+1d,0
+47,777777
+1e,0
+45,777777
+1f,0
+45,777777
+1f,0
+45,777777
+1f,0
+44,777777
+20,0
+44,777777
+20,0
+44,777777
+21,0
+42,777777
+22,0
+42,777777
+22,0
+41,777777
+23,0
+41,777777
+23,0
+41,777777
+23,0
+40,777777
+25,0
+3f,777777
+25,0
+3f,777777
+25,0
+3e,777777
+26,0
+3e,777777
+26,0
+3d,777777
+27,0
+3d,777777
+28,0
+3c,777777
+28,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3a,777777
+2a,0
+3a,777777
+2b,0
+38,777777
+2c,0
+38,777777
+2c,0
+38,777777
+2c,0
+37,777777
+2d,0
+37,777777
+2d,0
+37,777777
+2e,0
+35,777777
+2f,0
+35,777777
+2f,0
+34,777777
+30,0
+31,777777
+33,0
+2e,777777
+36,0
+2a,777777
+3b,0
+26,777777
+3e,0
+23,777777
+41,0
+1f,777777
+45,0
+1c,777777
+48,0
+19,777777
+4b,0
+15,777777
+50,0
+11,777777
+53,0
+e,777777
+56,0
+a,777777
+5a,0
+7,777777
+5d,0
+4,777777
+a15,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a42.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a42.dat
new file mode 100644
index 000000000..1fb3cd7a2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a42.dat
@@ -0,0 +1,4083 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+25e,0
+6,1
+5e,0
+d,1
+57,0
+14,1
+50,0
+1b,1
+49,0
+4a,1
+1a,0
+4a,1
+1b,0
+49,1
+1b,0
+48,1
+1c,0
+48,1
+1c,0
+48,1
+1c,0
+47,1
+1d,0
+47,1
+1e,0
+45,1
+1f,0
+45,1
+1f,0
+45,1
+1f,0
+44,1
+20,0
+44,1
+20,0
+44,1
+21,0
+42,1
+22,0
+42,1
+22,0
+41,1
+23,0
+41,1
+23,0
+41,1
+23,0
+40,1
+25,0
+3f,1
+25,0
+3f,1
+25,0
+3e,1
+26,0
+3e,1
+26,0
+3d,1
+27,0
+3d,1
+28,0
+3c,1
+28,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3a,1
+2a,0
+3a,1
+2b,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2e,0
+35,1
+2f,0
+35,1
+2f,0
+34,1
+30,0
+31,1
+33,0
+2e,1
+36,0
+2a,1
+3b,0
+26,1
+3e,0
+23,1
+41,0
+1f,1
+45,0
+1c,1
+48,0
+19,1
+4b,0
+15,1
+50,0
+11,1
+53,0
+e,1
+56,0
+a,1
+5a,0
+7,1
+5d,0
+4,1
+a15,0
+100 90 32
+25e,0
+6,2
+5e,0
+d,2
+57,0
+14,2
+50,0
+1b,2
+49,0
+4a,2
+1a,0
+4a,2
+1b,0
+49,2
+1b,0
+48,2
+1c,0
+48,2
+1c,0
+48,2
+1c,0
+47,2
+1d,0
+47,2
+1e,0
+45,2
+1f,0
+45,2
+1f,0
+45,2
+1f,0
+44,2
+20,0
+44,2
+20,0
+44,2
+21,0
+42,2
+22,0
+42,2
+22,0
+41,2
+23,0
+41,2
+23,0
+41,2
+23,0
+40,2
+25,0
+3f,2
+25,0
+3f,2
+25,0
+3e,2
+26,0
+3e,2
+26,0
+3d,2
+27,0
+3d,2
+28,0
+3c,2
+28,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3a,2
+2a,0
+3a,2
+2b,0
+38,2
+2c,0
+38,2
+2c,0
+38,2
+2c,0
+37,2
+2d,0
+37,2
+2d,0
+37,2
+2e,0
+35,2
+2f,0
+35,2
+2f,0
+34,2
+30,0
+31,2
+33,0
+2e,2
+36,0
+2a,2
+3b,0
+26,2
+3e,0
+23,2
+41,0
+1f,2
+45,0
+1c,2
+48,0
+19,2
+4b,0
+15,2
+50,0
+11,2
+53,0
+e,2
+56,0
+a,2
+5a,0
+7,2
+5d,0
+4,2
+a15,0
+100 90 32
+25e,0
+6,3
+5e,0
+d,3
+57,0
+14,3
+50,0
+1b,3
+49,0
+4a,3
+1a,0
+4a,3
+1b,0
+49,3
+1b,0
+48,3
+1c,0
+48,3
+1c,0
+48,3
+1c,0
+47,3
+1d,0
+47,3
+1e,0
+45,3
+1f,0
+45,3
+1f,0
+45,3
+1f,0
+44,3
+20,0
+44,3
+20,0
+44,3
+21,0
+42,3
+22,0
+42,3
+22,0
+41,3
+23,0
+41,3
+23,0
+41,3
+23,0
+40,3
+25,0
+3f,3
+25,0
+3f,3
+25,0
+3e,3
+26,0
+3e,3
+26,0
+3d,3
+27,0
+3d,3
+28,0
+3c,3
+28,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3a,3
+2a,0
+3a,3
+2b,0
+38,3
+2c,0
+38,3
+2c,0
+38,3
+2c,0
+37,3
+2d,0
+37,3
+2d,0
+37,3
+2e,0
+35,3
+2f,0
+35,3
+2f,0
+34,3
+30,0
+31,3
+33,0
+2e,3
+36,0
+2a,3
+3b,0
+26,3
+3e,0
+23,3
+41,0
+1f,3
+45,0
+1c,3
+48,0
+19,3
+4b,0
+15,3
+50,0
+11,3
+53,0
+e,3
+56,0
+a,3
+5a,0
+7,3
+5d,0
+4,3
+a15,0
+100 90 32
+25e,0
+6,4
+5e,0
+d,4
+57,0
+14,4
+50,0
+1b,4
+49,0
+4a,4
+1a,0
+4a,4
+1b,0
+49,4
+1b,0
+48,4
+1c,0
+48,4
+1c,0
+48,4
+1c,0
+47,4
+1d,0
+47,4
+1e,0
+45,4
+1f,0
+45,4
+1f,0
+45,4
+1f,0
+44,4
+20,0
+44,4
+20,0
+44,4
+21,0
+42,4
+22,0
+42,4
+22,0
+41,4
+23,0
+41,4
+23,0
+41,4
+23,0
+40,4
+25,0
+3f,4
+25,0
+3f,4
+25,0
+3e,4
+26,0
+3e,4
+26,0
+3d,4
+27,0
+3d,4
+28,0
+3c,4
+28,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3a,4
+2a,0
+3a,4
+2b,0
+38,4
+2c,0
+38,4
+2c,0
+38,4
+2c,0
+37,4
+2d,0
+37,4
+2d,0
+37,4
+2e,0
+35,4
+2f,0
+35,4
+2f,0
+34,4
+30,0
+31,4
+33,0
+2e,4
+36,0
+2a,4
+3b,0
+26,4
+3e,0
+23,4
+41,0
+1f,4
+45,0
+1c,4
+48,0
+19,4
+4b,0
+15,4
+50,0
+11,4
+53,0
+e,4
+56,0
+a,4
+5a,0
+7,4
+5d,0
+4,4
+a15,0
+100 90 32
+25e,0
+6,6
+5e,0
+d,6
+57,0
+14,6
+50,0
+1b,6
+49,0
+4a,6
+1a,0
+4a,6
+1b,0
+49,6
+1b,0
+48,6
+1c,0
+48,6
+1c,0
+48,6
+1c,0
+47,6
+1d,0
+47,6
+1e,0
+45,6
+1f,0
+45,6
+1f,0
+45,6
+1f,0
+44,6
+20,0
+44,6
+20,0
+44,6
+21,0
+42,6
+22,0
+42,6
+22,0
+41,6
+23,0
+41,6
+23,0
+41,6
+23,0
+40,6
+25,0
+3f,6
+25,0
+3f,6
+25,0
+3e,6
+26,0
+3e,6
+26,0
+3d,6
+27,0
+3d,6
+28,0
+3c,6
+28,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3a,6
+2a,0
+3a,6
+2b,0
+38,6
+2c,0
+38,6
+2c,0
+38,6
+2c,0
+37,6
+2d,0
+37,6
+2d,0
+37,6
+2e,0
+35,6
+2f,0
+35,6
+2f,0
+34,6
+30,0
+31,6
+33,0
+2e,6
+36,0
+2a,6
+3b,0
+26,6
+3e,0
+23,6
+41,0
+1f,6
+45,0
+1c,6
+48,0
+19,6
+4b,0
+15,6
+50,0
+11,6
+53,0
+e,6
+56,0
+a,6
+5a,0
+7,6
+5d,0
+4,6
+a15,0
+100 90 32
+25e,0
+6,7
+5e,0
+d,7
+57,0
+14,7
+50,0
+1b,7
+49,0
+4a,7
+1a,0
+4a,7
+1b,0
+49,7
+1b,0
+48,7
+1c,0
+48,7
+1c,0
+48,7
+1c,0
+47,7
+1d,0
+47,7
+1e,0
+45,7
+1f,0
+45,7
+1f,0
+45,7
+1f,0
+44,7
+20,0
+44,7
+20,0
+44,7
+21,0
+42,7
+22,0
+42,7
+22,0
+41,7
+23,0
+41,7
+23,0
+41,7
+23,0
+40,7
+25,0
+3f,7
+25,0
+3f,7
+25,0
+3e,7
+26,0
+3e,7
+26,0
+3d,7
+27,0
+3d,7
+28,0
+3c,7
+28,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3a,7
+2a,0
+3a,7
+2b,0
+38,7
+2c,0
+38,7
+2c,0
+38,7
+2c,0
+37,7
+2d,0
+37,7
+2d,0
+37,7
+2e,0
+35,7
+2f,0
+35,7
+2f,0
+34,7
+30,0
+31,7
+33,0
+2e,7
+36,0
+2a,7
+3b,0
+26,7
+3e,0
+23,7
+41,0
+1f,7
+45,0
+1c,7
+48,0
+19,7
+4b,0
+15,7
+50,0
+11,7
+53,0
+e,7
+56,0
+a,7
+5a,0
+7,7
+5d,0
+4,7
+a15,0
+100 90 32
+25e,0
+6,10
+5e,0
+d,10
+57,0
+14,10
+50,0
+1b,10
+49,0
+4a,10
+1a,0
+4a,10
+1b,0
+49,10
+1b,0
+48,10
+1c,0
+48,10
+1c,0
+48,10
+1c,0
+47,10
+1d,0
+47,10
+1e,0
+45,10
+1f,0
+45,10
+1f,0
+45,10
+1f,0
+44,10
+20,0
+44,10
+20,0
+44,10
+21,0
+42,10
+22,0
+42,10
+22,0
+41,10
+23,0
+41,10
+23,0
+41,10
+23,0
+40,10
+25,0
+3f,10
+25,0
+3f,10
+25,0
+3e,10
+26,0
+3e,10
+26,0
+3d,10
+27,0
+3d,10
+28,0
+3c,10
+28,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3a,10
+2a,0
+3a,10
+2b,0
+38,10
+2c,0
+38,10
+2c,0
+38,10
+2c,0
+37,10
+2d,0
+37,10
+2d,0
+37,10
+2e,0
+35,10
+2f,0
+35,10
+2f,0
+34,10
+30,0
+31,10
+33,0
+2e,10
+36,0
+2a,10
+3b,0
+26,10
+3e,0
+23,10
+41,0
+1f,10
+45,0
+1c,10
+48,0
+19,10
+4b,0
+15,10
+50,0
+11,10
+53,0
+e,10
+56,0
+a,10
+5a,0
+7,10
+5d,0
+4,10
+a15,0
+100 90 32
+25e,0
+6,33
+5e,0
+d,33
+57,0
+14,33
+50,0
+1b,33
+49,0
+4a,33
+1a,0
+4a,33
+1b,0
+49,33
+1b,0
+48,33
+1c,0
+48,33
+1c,0
+48,33
+1c,0
+47,33
+1d,0
+47,33
+1e,0
+45,33
+1f,0
+45,33
+1f,0
+45,33
+1f,0
+44,33
+20,0
+44,33
+20,0
+44,33
+21,0
+42,33
+22,0
+42,33
+22,0
+41,33
+23,0
+41,33
+23,0
+41,33
+23,0
+40,33
+25,0
+3f,33
+25,0
+3f,33
+25,0
+3e,33
+26,0
+3e,33
+26,0
+3d,33
+27,0
+3d,33
+28,0
+3c,33
+28,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3a,33
+2a,0
+3a,33
+2b,0
+38,33
+2c,0
+38,33
+2c,0
+38,33
+2c,0
+37,33
+2d,0
+37,33
+2d,0
+37,33
+2e,0
+35,33
+2f,0
+35,33
+2f,0
+34,33
+30,0
+31,33
+33,0
+2e,33
+36,0
+2a,33
+3b,0
+26,33
+3e,0
+23,33
+41,0
+1f,33
+45,0
+1c,33
+48,0
+19,33
+4b,0
+15,33
+50,0
+11,33
+53,0
+e,33
+56,0
+a,33
+5a,0
+7,33
+5d,0
+4,33
+a15,0
+100 90 32
+25e,0
+6,81
+5e,0
+d,81
+57,0
+14,81
+50,0
+1b,81
+49,0
+4a,81
+1a,0
+4a,81
+1b,0
+49,81
+1b,0
+48,81
+1c,0
+48,81
+1c,0
+48,81
+1c,0
+47,81
+1d,0
+47,81
+1e,0
+45,81
+1f,0
+45,81
+1f,0
+45,81
+1f,0
+44,81
+20,0
+44,81
+20,0
+44,81
+21,0
+42,81
+22,0
+42,81
+22,0
+41,81
+23,0
+41,81
+23,0
+41,81
+23,0
+40,81
+25,0
+3f,81
+25,0
+3f,81
+25,0
+3e,81
+26,0
+3e,81
+26,0
+3d,81
+27,0
+3d,81
+28,0
+3c,81
+28,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3a,81
+2a,0
+3a,81
+2b,0
+38,81
+2c,0
+38,81
+2c,0
+38,81
+2c,0
+37,81
+2d,0
+37,81
+2d,0
+37,81
+2e,0
+35,81
+2f,0
+35,81
+2f,0
+34,81
+30,0
+31,81
+33,0
+2e,81
+36,0
+2a,81
+3b,0
+26,81
+3e,0
+23,81
+41,0
+1f,81
+45,0
+1c,81
+48,0
+19,81
+4b,0
+15,81
+50,0
+11,81
+53,0
+e,81
+56,0
+a,81
+5a,0
+7,81
+5d,0
+4,81
+a15,0
+100 90 32
+25e,0
+6,a3
+5e,0
+d,a3
+57,0
+14,a3
+50,0
+1b,a3
+49,0
+4a,a3
+1a,0
+4a,a3
+1b,0
+49,a3
+1b,0
+48,a3
+1c,0
+48,a3
+1c,0
+48,a3
+1c,0
+47,a3
+1d,0
+47,a3
+1e,0
+45,a3
+1f,0
+45,a3
+1f,0
+45,a3
+1f,0
+44,a3
+20,0
+44,a3
+20,0
+44,a3
+21,0
+42,a3
+22,0
+42,a3
+22,0
+41,a3
+23,0
+41,a3
+23,0
+41,a3
+23,0
+40,a3
+25,0
+3f,a3
+25,0
+3f,a3
+25,0
+3e,a3
+26,0
+3e,a3
+26,0
+3d,a3
+27,0
+3d,a3
+28,0
+3c,a3
+28,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3a,a3
+2a,0
+3a,a3
+2b,0
+38,a3
+2c,0
+38,a3
+2c,0
+38,a3
+2c,0
+37,a3
+2d,0
+37,a3
+2d,0
+37,a3
+2e,0
+35,a3
+2f,0
+35,a3
+2f,0
+34,a3
+30,0
+31,a3
+33,0
+2e,a3
+36,0
+2a,a3
+3b,0
+26,a3
+3e,0
+23,a3
+41,0
+1f,a3
+45,0
+1c,a3
+48,0
+19,a3
+4b,0
+15,a3
+50,0
+11,a3
+53,0
+e,a3
+56,0
+a,a3
+5a,0
+7,a3
+5d,0
+4,a3
+a15,0
+100 90 32
+25e,0
+6,ff
+5e,0
+d,ff
+57,0
+14,ff
+50,0
+1b,ff
+49,0
+4a,ff
+1a,0
+4a,ff
+1b,0
+49,ff
+1b,0
+48,ff
+1c,0
+48,ff
+1c,0
+48,ff
+1c,0
+47,ff
+1d,0
+47,ff
+1e,0
+45,ff
+1f,0
+45,ff
+1f,0
+45,ff
+1f,0
+44,ff
+20,0
+44,ff
+20,0
+44,ff
+21,0
+42,ff
+22,0
+42,ff
+22,0
+41,ff
+23,0
+41,ff
+23,0
+41,ff
+23,0
+40,ff
+25,0
+3f,ff
+25,0
+3f,ff
+25,0
+3e,ff
+26,0
+3e,ff
+26,0
+3d,ff
+27,0
+3d,ff
+28,0
+3c,ff
+28,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3a,ff
+2a,0
+3a,ff
+2b,0
+38,ff
+2c,0
+38,ff
+2c,0
+38,ff
+2c,0
+37,ff
+2d,0
+37,ff
+2d,0
+37,ff
+2e,0
+35,ff
+2f,0
+35,ff
+2f,0
+34,ff
+30,0
+31,ff
+33,0
+2e,ff
+36,0
+2a,ff
+3b,0
+26,ff
+3e,0
+23,ff
+41,0
+1f,ff
+45,0
+1c,ff
+48,0
+19,ff
+4b,0
+15,ff
+50,0
+11,ff
+53,0
+e,ff
+56,0
+a,ff
+5a,0
+7,ff
+5d,0
+4,ff
+a15,0
+100 90 32
+25e,0
+6,100
+5e,0
+d,100
+57,0
+14,100
+50,0
+1b,100
+49,0
+4a,100
+1a,0
+4a,100
+1b,0
+49,100
+1b,0
+48,100
+1c,0
+48,100
+1c,0
+48,100
+1c,0
+47,100
+1d,0
+47,100
+1e,0
+45,100
+1f,0
+45,100
+1f,0
+45,100
+1f,0
+44,100
+20,0
+44,100
+20,0
+44,100
+21,0
+42,100
+22,0
+42,100
+22,0
+41,100
+23,0
+41,100
+23,0
+41,100
+23,0
+40,100
+25,0
+3f,100
+25,0
+3f,100
+25,0
+3e,100
+26,0
+3e,100
+26,0
+3d,100
+27,0
+3d,100
+28,0
+3c,100
+28,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3a,100
+2a,0
+3a,100
+2b,0
+38,100
+2c,0
+38,100
+2c,0
+38,100
+2c,0
+37,100
+2d,0
+37,100
+2d,0
+37,100
+2e,0
+35,100
+2f,0
+35,100
+2f,0
+34,100
+30,0
+31,100
+33,0
+2e,100
+36,0
+2a,100
+3b,0
+26,100
+3e,0
+23,100
+41,0
+1f,100
+45,0
+1c,100
+48,0
+19,100
+4b,0
+15,100
+50,0
+11,100
+53,0
+e,100
+56,0
+a,100
+5a,0
+7,100
+5d,0
+4,100
+a15,0
+100 90 32
+25e,0
+6,12c
+5e,0
+d,12c
+57,0
+14,12c
+50,0
+1b,12c
+49,0
+4a,12c
+1a,0
+4a,12c
+1b,0
+49,12c
+1b,0
+48,12c
+1c,0
+48,12c
+1c,0
+48,12c
+1c,0
+47,12c
+1d,0
+47,12c
+1e,0
+45,12c
+1f,0
+45,12c
+1f,0
+45,12c
+1f,0
+44,12c
+20,0
+44,12c
+20,0
+44,12c
+21,0
+42,12c
+22,0
+42,12c
+22,0
+41,12c
+23,0
+41,12c
+23,0
+41,12c
+23,0
+40,12c
+25,0
+3f,12c
+25,0
+3f,12c
+25,0
+3e,12c
+26,0
+3e,12c
+26,0
+3d,12c
+27,0
+3d,12c
+28,0
+3c,12c
+28,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3a,12c
+2a,0
+3a,12c
+2b,0
+38,12c
+2c,0
+38,12c
+2c,0
+38,12c
+2c,0
+37,12c
+2d,0
+37,12c
+2d,0
+37,12c
+2e,0
+35,12c
+2f,0
+35,12c
+2f,0
+34,12c
+30,0
+31,12c
+33,0
+2e,12c
+36,0
+2a,12c
+3b,0
+26,12c
+3e,0
+23,12c
+41,0
+1f,12c
+45,0
+1c,12c
+48,0
+19,12c
+4b,0
+15,12c
+50,0
+11,12c
+53,0
+e,12c
+56,0
+a,12c
+5a,0
+7,12c
+5d,0
+4,12c
+a15,0
+100 90 32
+25e,0
+6,3e8
+5e,0
+d,3e8
+57,0
+14,3e8
+50,0
+1b,3e8
+49,0
+4a,3e8
+1a,0
+4a,3e8
+1b,0
+49,3e8
+1b,0
+48,3e8
+1c,0
+48,3e8
+1c,0
+48,3e8
+1c,0
+47,3e8
+1d,0
+47,3e8
+1e,0
+45,3e8
+1f,0
+45,3e8
+1f,0
+45,3e8
+1f,0
+44,3e8
+20,0
+44,3e8
+20,0
+44,3e8
+21,0
+42,3e8
+22,0
+42,3e8
+22,0
+41,3e8
+23,0
+41,3e8
+23,0
+41,3e8
+23,0
+40,3e8
+25,0
+3f,3e8
+25,0
+3f,3e8
+25,0
+3e,3e8
+26,0
+3e,3e8
+26,0
+3d,3e8
+27,0
+3d,3e8
+28,0
+3c,3e8
+28,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3a,3e8
+2a,0
+3a,3e8
+2b,0
+38,3e8
+2c,0
+38,3e8
+2c,0
+38,3e8
+2c,0
+37,3e8
+2d,0
+37,3e8
+2d,0
+37,3e8
+2e,0
+35,3e8
+2f,0
+35,3e8
+2f,0
+34,3e8
+30,0
+31,3e8
+33,0
+2e,3e8
+36,0
+2a,3e8
+3b,0
+26,3e8
+3e,0
+23,3e8
+41,0
+1f,3e8
+45,0
+1c,3e8
+48,0
+19,3e8
+4b,0
+15,3e8
+50,0
+11,3e8
+53,0
+e,3e8
+56,0
+a,3e8
+5a,0
+7,3e8
+5d,0
+4,3e8
+a15,0
+100 90 32
+25e,0
+6,111111
+5e,0
+d,111111
+57,0
+14,111111
+50,0
+1b,111111
+49,0
+4a,111111
+1a,0
+4a,111111
+1b,0
+49,111111
+1b,0
+48,111111
+1c,0
+48,111111
+1c,0
+48,111111
+1c,0
+47,111111
+1d,0
+47,111111
+1e,0
+45,111111
+1f,0
+45,111111
+1f,0
+45,111111
+1f,0
+44,111111
+20,0
+44,111111
+20,0
+44,111111
+21,0
+42,111111
+22,0
+42,111111
+22,0
+41,111111
+23,0
+41,111111
+23,0
+41,111111
+23,0
+40,111111
+25,0
+3f,111111
+25,0
+3f,111111
+25,0
+3e,111111
+26,0
+3e,111111
+26,0
+3d,111111
+27,0
+3d,111111
+28,0
+3c,111111
+28,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3a,111111
+2a,0
+3a,111111
+2b,0
+38,111111
+2c,0
+38,111111
+2c,0
+38,111111
+2c,0
+37,111111
+2d,0
+37,111111
+2d,0
+37,111111
+2e,0
+35,111111
+2f,0
+35,111111
+2f,0
+34,111111
+30,0
+31,111111
+33,0
+2e,111111
+36,0
+2a,111111
+3b,0
+26,111111
+3e,0
+23,111111
+41,0
+1f,111111
+45,0
+1c,111111
+48,0
+19,111111
+4b,0
+15,111111
+50,0
+11,111111
+53,0
+e,111111
+56,0
+a,111111
+5a,0
+7,111111
+5d,0
+4,111111
+a15,0
+100 90 32
+25e,0
+6,400200
+5e,0
+d,400200
+57,0
+14,400200
+50,0
+1b,400200
+49,0
+4a,400200
+1a,0
+4a,400200
+1b,0
+49,400200
+1b,0
+48,400200
+1c,0
+48,400200
+1c,0
+48,400200
+1c,0
+47,400200
+1d,0
+47,400200
+1e,0
+45,400200
+1f,0
+45,400200
+1f,0
+45,400200
+1f,0
+44,400200
+20,0
+44,400200
+20,0
+44,400200
+21,0
+42,400200
+22,0
+42,400200
+22,0
+41,400200
+23,0
+41,400200
+23,0
+41,400200
+23,0
+40,400200
+25,0
+3f,400200
+25,0
+3f,400200
+25,0
+3e,400200
+26,0
+3e,400200
+26,0
+3d,400200
+27,0
+3d,400200
+28,0
+3c,400200
+28,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3a,400200
+2a,0
+3a,400200
+2b,0
+38,400200
+2c,0
+38,400200
+2c,0
+38,400200
+2c,0
+37,400200
+2d,0
+37,400200
+2d,0
+37,400200
+2e,0
+35,400200
+2f,0
+35,400200
+2f,0
+34,400200
+30,0
+31,400200
+33,0
+2e,400200
+36,0
+2a,400200
+3b,0
+26,400200
+3e,0
+23,400200
+41,0
+1f,400200
+45,0
+1c,400200
+48,0
+19,400200
+4b,0
+15,400200
+50,0
+11,400200
+53,0
+e,400200
+56,0
+a,400200
+5a,0
+7,400200
+5d,0
+4,400200
+a15,0
+100 90 32
+25e,0
+6,777777
+5e,0
+d,777777
+57,0
+14,777777
+50,0
+1b,777777
+49,0
+4a,777777
+1a,0
+4a,777777
+1b,0
+49,777777
+1b,0
+48,777777
+1c,0
+48,777777
+1c,0
+48,777777
+1c,0
+47,777777
+1d,0
+47,777777
+1e,0
+45,777777
+1f,0
+45,777777
+1f,0
+45,777777
+1f,0
+44,777777
+20,0
+44,777777
+20,0
+44,777777
+21,0
+42,777777
+22,0
+42,777777
+22,0
+41,777777
+23,0
+41,777777
+23,0
+41,777777
+23,0
+40,777777
+25,0
+3f,777777
+25,0
+3f,777777
+25,0
+3e,777777
+26,0
+3e,777777
+26,0
+3d,777777
+27,0
+3d,777777
+28,0
+3c,777777
+28,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3a,777777
+2a,0
+3a,777777
+2b,0
+38,777777
+2c,0
+38,777777
+2c,0
+38,777777
+2c,0
+37,777777
+2d,0
+37,777777
+2d,0
+37,777777
+2e,0
+35,777777
+2f,0
+35,777777
+2f,0
+34,777777
+30,0
+31,777777
+33,0
+2e,777777
+36,0
+2a,777777
+3b,0
+26,777777
+3e,0
+23,777777
+41,0
+1f,777777
+45,0
+1c,777777
+48,0
+19,777777
+4b,0
+15,777777
+50,0
+11,777777
+53,0
+e,777777
+56,0
+a,777777
+5a,0
+7,777777
+5d,0
+4,777777
+a15,0
+100 90 32
+25e,0
+6,1
+5e,0
+d,1
+57,0
+14,1
+50,0
+1b,1
+49,0
+4a,1
+1a,0
+4a,1
+1b,0
+49,1
+1b,0
+48,1
+1c,0
+48,1
+1c,0
+48,1
+1c,0
+47,1
+1d,0
+47,1
+1e,0
+45,1
+1f,0
+45,1
+1f,0
+45,1
+1f,0
+44,1
+20,0
+44,1
+20,0
+44,1
+21,0
+42,1
+22,0
+42,1
+22,0
+41,1
+23,0
+41,1
+23,0
+41,1
+23,0
+40,1
+25,0
+3f,1
+25,0
+3f,1
+25,0
+3e,1
+26,0
+3e,1
+26,0
+3d,1
+27,0
+3d,1
+28,0
+3c,1
+28,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3a,1
+2a,0
+3a,1
+2b,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+37,1
+2d,0
+37,1
+2d,0
+37,1
+2e,0
+35,1
+2f,0
+35,1
+2f,0
+34,1
+30,0
+31,1
+33,0
+2e,1
+36,0
+2a,1
+3b,0
+26,1
+3e,0
+23,1
+41,0
+1f,1
+45,0
+1c,1
+48,0
+19,1
+4b,0
+15,1
+50,0
+11,1
+53,0
+e,1
+56,0
+a,1
+5a,0
+7,1
+5d,0
+4,1
+a15,0
+100 90 32
+25e,0
+6,2
+5e,0
+d,2
+57,0
+14,2
+50,0
+1b,2
+49,0
+4a,2
+1a,0
+4a,2
+1b,0
+49,2
+1b,0
+48,2
+1c,0
+48,2
+1c,0
+48,2
+1c,0
+47,2
+1d,0
+47,2
+1e,0
+45,2
+1f,0
+45,2
+1f,0
+45,2
+1f,0
+44,2
+20,0
+44,2
+20,0
+44,2
+21,0
+42,2
+22,0
+42,2
+22,0
+41,2
+23,0
+41,2
+23,0
+41,2
+23,0
+40,2
+25,0
+3f,2
+25,0
+3f,2
+25,0
+3e,2
+26,0
+3e,2
+26,0
+3d,2
+27,0
+3d,2
+28,0
+3c,2
+28,0
+3b,2
+29,0
+3b,2
+29,0
+3b,2
+29,0
+3a,2
+2a,0
+3a,2
+2b,0
+38,2
+2c,0
+38,2
+2c,0
+38,2
+2c,0
+37,2
+2d,0
+37,2
+2d,0
+37,2
+2e,0
+35,2
+2f,0
+35,2
+2f,0
+34,2
+30,0
+31,2
+33,0
+2e,2
+36,0
+2a,2
+3b,0
+26,2
+3e,0
+23,2
+41,0
+1f,2
+45,0
+1c,2
+48,0
+19,2
+4b,0
+15,2
+50,0
+11,2
+53,0
+e,2
+56,0
+a,2
+5a,0
+7,2
+5d,0
+4,2
+a15,0
+100 90 32
+25e,0
+6,3
+5e,0
+d,3
+57,0
+14,3
+50,0
+1b,3
+49,0
+4a,3
+1a,0
+4a,3
+1b,0
+49,3
+1b,0
+48,3
+1c,0
+48,3
+1c,0
+48,3
+1c,0
+47,3
+1d,0
+47,3
+1e,0
+45,3
+1f,0
+45,3
+1f,0
+45,3
+1f,0
+44,3
+20,0
+44,3
+20,0
+44,3
+21,0
+42,3
+22,0
+42,3
+22,0
+41,3
+23,0
+41,3
+23,0
+41,3
+23,0
+40,3
+25,0
+3f,3
+25,0
+3f,3
+25,0
+3e,3
+26,0
+3e,3
+26,0
+3d,3
+27,0
+3d,3
+28,0
+3c,3
+28,0
+3b,3
+29,0
+3b,3
+29,0
+3b,3
+29,0
+3a,3
+2a,0
+3a,3
+2b,0
+38,3
+2c,0
+38,3
+2c,0
+38,3
+2c,0
+37,3
+2d,0
+37,3
+2d,0
+37,3
+2e,0
+35,3
+2f,0
+35,3
+2f,0
+34,3
+30,0
+31,3
+33,0
+2e,3
+36,0
+2a,3
+3b,0
+26,3
+3e,0
+23,3
+41,0
+1f,3
+45,0
+1c,3
+48,0
+19,3
+4b,0
+15,3
+50,0
+11,3
+53,0
+e,3
+56,0
+a,3
+5a,0
+7,3
+5d,0
+4,3
+a15,0
+100 90 32
+25e,0
+6,4
+5e,0
+d,4
+57,0
+14,4
+50,0
+1b,4
+49,0
+4a,4
+1a,0
+4a,4
+1b,0
+49,4
+1b,0
+48,4
+1c,0
+48,4
+1c,0
+48,4
+1c,0
+47,4
+1d,0
+47,4
+1e,0
+45,4
+1f,0
+45,4
+1f,0
+45,4
+1f,0
+44,4
+20,0
+44,4
+20,0
+44,4
+21,0
+42,4
+22,0
+42,4
+22,0
+41,4
+23,0
+41,4
+23,0
+41,4
+23,0
+40,4
+25,0
+3f,4
+25,0
+3f,4
+25,0
+3e,4
+26,0
+3e,4
+26,0
+3d,4
+27,0
+3d,4
+28,0
+3c,4
+28,0
+3b,4
+29,0
+3b,4
+29,0
+3b,4
+29,0
+3a,4
+2a,0
+3a,4
+2b,0
+38,4
+2c,0
+38,4
+2c,0
+38,4
+2c,0
+37,4
+2d,0
+37,4
+2d,0
+37,4
+2e,0
+35,4
+2f,0
+35,4
+2f,0
+34,4
+30,0
+31,4
+33,0
+2e,4
+36,0
+2a,4
+3b,0
+26,4
+3e,0
+23,4
+41,0
+1f,4
+45,0
+1c,4
+48,0
+19,4
+4b,0
+15,4
+50,0
+11,4
+53,0
+e,4
+56,0
+a,4
+5a,0
+7,4
+5d,0
+4,4
+a15,0
+100 90 32
+25e,0
+6,6
+5e,0
+d,6
+57,0
+14,6
+50,0
+1b,6
+49,0
+4a,6
+1a,0
+4a,6
+1b,0
+49,6
+1b,0
+48,6
+1c,0
+48,6
+1c,0
+48,6
+1c,0
+47,6
+1d,0
+47,6
+1e,0
+45,6
+1f,0
+45,6
+1f,0
+45,6
+1f,0
+44,6
+20,0
+44,6
+20,0
+44,6
+21,0
+42,6
+22,0
+42,6
+22,0
+41,6
+23,0
+41,6
+23,0
+41,6
+23,0
+40,6
+25,0
+3f,6
+25,0
+3f,6
+25,0
+3e,6
+26,0
+3e,6
+26,0
+3d,6
+27,0
+3d,6
+28,0
+3c,6
+28,0
+3b,6
+29,0
+3b,6
+29,0
+3b,6
+29,0
+3a,6
+2a,0
+3a,6
+2b,0
+38,6
+2c,0
+38,6
+2c,0
+38,6
+2c,0
+37,6
+2d,0
+37,6
+2d,0
+37,6
+2e,0
+35,6
+2f,0
+35,6
+2f,0
+34,6
+30,0
+31,6
+33,0
+2e,6
+36,0
+2a,6
+3b,0
+26,6
+3e,0
+23,6
+41,0
+1f,6
+45,0
+1c,6
+48,0
+19,6
+4b,0
+15,6
+50,0
+11,6
+53,0
+e,6
+56,0
+a,6
+5a,0
+7,6
+5d,0
+4,6
+a15,0
+100 90 32
+25e,0
+6,7
+5e,0
+d,7
+57,0
+14,7
+50,0
+1b,7
+49,0
+4a,7
+1a,0
+4a,7
+1b,0
+49,7
+1b,0
+48,7
+1c,0
+48,7
+1c,0
+48,7
+1c,0
+47,7
+1d,0
+47,7
+1e,0
+45,7
+1f,0
+45,7
+1f,0
+45,7
+1f,0
+44,7
+20,0
+44,7
+20,0
+44,7
+21,0
+42,7
+22,0
+42,7
+22,0
+41,7
+23,0
+41,7
+23,0
+41,7
+23,0
+40,7
+25,0
+3f,7
+25,0
+3f,7
+25,0
+3e,7
+26,0
+3e,7
+26,0
+3d,7
+27,0
+3d,7
+28,0
+3c,7
+28,0
+3b,7
+29,0
+3b,7
+29,0
+3b,7
+29,0
+3a,7
+2a,0
+3a,7
+2b,0
+38,7
+2c,0
+38,7
+2c,0
+38,7
+2c,0
+37,7
+2d,0
+37,7
+2d,0
+37,7
+2e,0
+35,7
+2f,0
+35,7
+2f,0
+34,7
+30,0
+31,7
+33,0
+2e,7
+36,0
+2a,7
+3b,0
+26,7
+3e,0
+23,7
+41,0
+1f,7
+45,0
+1c,7
+48,0
+19,7
+4b,0
+15,7
+50,0
+11,7
+53,0
+e,7
+56,0
+a,7
+5a,0
+7,7
+5d,0
+4,7
+a15,0
+100 90 32
+25e,0
+6,10
+5e,0
+d,10
+57,0
+14,10
+50,0
+1b,10
+49,0
+4a,10
+1a,0
+4a,10
+1b,0
+49,10
+1b,0
+48,10
+1c,0
+48,10
+1c,0
+48,10
+1c,0
+47,10
+1d,0
+47,10
+1e,0
+45,10
+1f,0
+45,10
+1f,0
+45,10
+1f,0
+44,10
+20,0
+44,10
+20,0
+44,10
+21,0
+42,10
+22,0
+42,10
+22,0
+41,10
+23,0
+41,10
+23,0
+41,10
+23,0
+40,10
+25,0
+3f,10
+25,0
+3f,10
+25,0
+3e,10
+26,0
+3e,10
+26,0
+3d,10
+27,0
+3d,10
+28,0
+3c,10
+28,0
+3b,10
+29,0
+3b,10
+29,0
+3b,10
+29,0
+3a,10
+2a,0
+3a,10
+2b,0
+38,10
+2c,0
+38,10
+2c,0
+38,10
+2c,0
+37,10
+2d,0
+37,10
+2d,0
+37,10
+2e,0
+35,10
+2f,0
+35,10
+2f,0
+34,10
+30,0
+31,10
+33,0
+2e,10
+36,0
+2a,10
+3b,0
+26,10
+3e,0
+23,10
+41,0
+1f,10
+45,0
+1c,10
+48,0
+19,10
+4b,0
+15,10
+50,0
+11,10
+53,0
+e,10
+56,0
+a,10
+5a,0
+7,10
+5d,0
+4,10
+a15,0
+100 90 32
+25e,0
+6,33
+5e,0
+d,33
+57,0
+14,33
+50,0
+1b,33
+49,0
+4a,33
+1a,0
+4a,33
+1b,0
+49,33
+1b,0
+48,33
+1c,0
+48,33
+1c,0
+48,33
+1c,0
+47,33
+1d,0
+47,33
+1e,0
+45,33
+1f,0
+45,33
+1f,0
+45,33
+1f,0
+44,33
+20,0
+44,33
+20,0
+44,33
+21,0
+42,33
+22,0
+42,33
+22,0
+41,33
+23,0
+41,33
+23,0
+41,33
+23,0
+40,33
+25,0
+3f,33
+25,0
+3f,33
+25,0
+3e,33
+26,0
+3e,33
+26,0
+3d,33
+27,0
+3d,33
+28,0
+3c,33
+28,0
+3b,33
+29,0
+3b,33
+29,0
+3b,33
+29,0
+3a,33
+2a,0
+3a,33
+2b,0
+38,33
+2c,0
+38,33
+2c,0
+38,33
+2c,0
+37,33
+2d,0
+37,33
+2d,0
+37,33
+2e,0
+35,33
+2f,0
+35,33
+2f,0
+34,33
+30,0
+31,33
+33,0
+2e,33
+36,0
+2a,33
+3b,0
+26,33
+3e,0
+23,33
+41,0
+1f,33
+45,0
+1c,33
+48,0
+19,33
+4b,0
+15,33
+50,0
+11,33
+53,0
+e,33
+56,0
+a,33
+5a,0
+7,33
+5d,0
+4,33
+a15,0
+100 90 32
+25e,0
+6,81
+5e,0
+d,81
+57,0
+14,81
+50,0
+1b,81
+49,0
+4a,81
+1a,0
+4a,81
+1b,0
+49,81
+1b,0
+48,81
+1c,0
+48,81
+1c,0
+48,81
+1c,0
+47,81
+1d,0
+47,81
+1e,0
+45,81
+1f,0
+45,81
+1f,0
+45,81
+1f,0
+44,81
+20,0
+44,81
+20,0
+44,81
+21,0
+42,81
+22,0
+42,81
+22,0
+41,81
+23,0
+41,81
+23,0
+41,81
+23,0
+40,81
+25,0
+3f,81
+25,0
+3f,81
+25,0
+3e,81
+26,0
+3e,81
+26,0
+3d,81
+27,0
+3d,81
+28,0
+3c,81
+28,0
+3b,81
+29,0
+3b,81
+29,0
+3b,81
+29,0
+3a,81
+2a,0
+3a,81
+2b,0
+38,81
+2c,0
+38,81
+2c,0
+38,81
+2c,0
+37,81
+2d,0
+37,81
+2d,0
+37,81
+2e,0
+35,81
+2f,0
+35,81
+2f,0
+34,81
+30,0
+31,81
+33,0
+2e,81
+36,0
+2a,81
+3b,0
+26,81
+3e,0
+23,81
+41,0
+1f,81
+45,0
+1c,81
+48,0
+19,81
+4b,0
+15,81
+50,0
+11,81
+53,0
+e,81
+56,0
+a,81
+5a,0
+7,81
+5d,0
+4,81
+a15,0
+100 90 32
+25e,0
+6,a3
+5e,0
+d,a3
+57,0
+14,a3
+50,0
+1b,a3
+49,0
+4a,a3
+1a,0
+4a,a3
+1b,0
+49,a3
+1b,0
+48,a3
+1c,0
+48,a3
+1c,0
+48,a3
+1c,0
+47,a3
+1d,0
+47,a3
+1e,0
+45,a3
+1f,0
+45,a3
+1f,0
+45,a3
+1f,0
+44,a3
+20,0
+44,a3
+20,0
+44,a3
+21,0
+42,a3
+22,0
+42,a3
+22,0
+41,a3
+23,0
+41,a3
+23,0
+41,a3
+23,0
+40,a3
+25,0
+3f,a3
+25,0
+3f,a3
+25,0
+3e,a3
+26,0
+3e,a3
+26,0
+3d,a3
+27,0
+3d,a3
+28,0
+3c,a3
+28,0
+3b,a3
+29,0
+3b,a3
+29,0
+3b,a3
+29,0
+3a,a3
+2a,0
+3a,a3
+2b,0
+38,a3
+2c,0
+38,a3
+2c,0
+38,a3
+2c,0
+37,a3
+2d,0
+37,a3
+2d,0
+37,a3
+2e,0
+35,a3
+2f,0
+35,a3
+2f,0
+34,a3
+30,0
+31,a3
+33,0
+2e,a3
+36,0
+2a,a3
+3b,0
+26,a3
+3e,0
+23,a3
+41,0
+1f,a3
+45,0
+1c,a3
+48,0
+19,a3
+4b,0
+15,a3
+50,0
+11,a3
+53,0
+e,a3
+56,0
+a,a3
+5a,0
+7,a3
+5d,0
+4,a3
+a15,0
+100 90 32
+25e,0
+6,ff
+5e,0
+d,ff
+57,0
+14,ff
+50,0
+1b,ff
+49,0
+4a,ff
+1a,0
+4a,ff
+1b,0
+49,ff
+1b,0
+48,ff
+1c,0
+48,ff
+1c,0
+48,ff
+1c,0
+47,ff
+1d,0
+47,ff
+1e,0
+45,ff
+1f,0
+45,ff
+1f,0
+45,ff
+1f,0
+44,ff
+20,0
+44,ff
+20,0
+44,ff
+21,0
+42,ff
+22,0
+42,ff
+22,0
+41,ff
+23,0
+41,ff
+23,0
+41,ff
+23,0
+40,ff
+25,0
+3f,ff
+25,0
+3f,ff
+25,0
+3e,ff
+26,0
+3e,ff
+26,0
+3d,ff
+27,0
+3d,ff
+28,0
+3c,ff
+28,0
+3b,ff
+29,0
+3b,ff
+29,0
+3b,ff
+29,0
+3a,ff
+2a,0
+3a,ff
+2b,0
+38,ff
+2c,0
+38,ff
+2c,0
+38,ff
+2c,0
+37,ff
+2d,0
+37,ff
+2d,0
+37,ff
+2e,0
+35,ff
+2f,0
+35,ff
+2f,0
+34,ff
+30,0
+31,ff
+33,0
+2e,ff
+36,0
+2a,ff
+3b,0
+26,ff
+3e,0
+23,ff
+41,0
+1f,ff
+45,0
+1c,ff
+48,0
+19,ff
+4b,0
+15,ff
+50,0
+11,ff
+53,0
+e,ff
+56,0
+a,ff
+5a,0
+7,ff
+5d,0
+4,ff
+a15,0
+100 90 32
+25e,0
+6,100
+5e,0
+d,100
+57,0
+14,100
+50,0
+1b,100
+49,0
+4a,100
+1a,0
+4a,100
+1b,0
+49,100
+1b,0
+48,100
+1c,0
+48,100
+1c,0
+48,100
+1c,0
+47,100
+1d,0
+47,100
+1e,0
+45,100
+1f,0
+45,100
+1f,0
+45,100
+1f,0
+44,100
+20,0
+44,100
+20,0
+44,100
+21,0
+42,100
+22,0
+42,100
+22,0
+41,100
+23,0
+41,100
+23,0
+41,100
+23,0
+40,100
+25,0
+3f,100
+25,0
+3f,100
+25,0
+3e,100
+26,0
+3e,100
+26,0
+3d,100
+27,0
+3d,100
+28,0
+3c,100
+28,0
+3b,100
+29,0
+3b,100
+29,0
+3b,100
+29,0
+3a,100
+2a,0
+3a,100
+2b,0
+38,100
+2c,0
+38,100
+2c,0
+38,100
+2c,0
+37,100
+2d,0
+37,100
+2d,0
+37,100
+2e,0
+35,100
+2f,0
+35,100
+2f,0
+34,100
+30,0
+31,100
+33,0
+2e,100
+36,0
+2a,100
+3b,0
+26,100
+3e,0
+23,100
+41,0
+1f,100
+45,0
+1c,100
+48,0
+19,100
+4b,0
+15,100
+50,0
+11,100
+53,0
+e,100
+56,0
+a,100
+5a,0
+7,100
+5d,0
+4,100
+a15,0
+100 90 32
+25e,0
+6,12c
+5e,0
+d,12c
+57,0
+14,12c
+50,0
+1b,12c
+49,0
+4a,12c
+1a,0
+4a,12c
+1b,0
+49,12c
+1b,0
+48,12c
+1c,0
+48,12c
+1c,0
+48,12c
+1c,0
+47,12c
+1d,0
+47,12c
+1e,0
+45,12c
+1f,0
+45,12c
+1f,0
+45,12c
+1f,0
+44,12c
+20,0
+44,12c
+20,0
+44,12c
+21,0
+42,12c
+22,0
+42,12c
+22,0
+41,12c
+23,0
+41,12c
+23,0
+41,12c
+23,0
+40,12c
+25,0
+3f,12c
+25,0
+3f,12c
+25,0
+3e,12c
+26,0
+3e,12c
+26,0
+3d,12c
+27,0
+3d,12c
+28,0
+3c,12c
+28,0
+3b,12c
+29,0
+3b,12c
+29,0
+3b,12c
+29,0
+3a,12c
+2a,0
+3a,12c
+2b,0
+38,12c
+2c,0
+38,12c
+2c,0
+38,12c
+2c,0
+37,12c
+2d,0
+37,12c
+2d,0
+37,12c
+2e,0
+35,12c
+2f,0
+35,12c
+2f,0
+34,12c
+30,0
+31,12c
+33,0
+2e,12c
+36,0
+2a,12c
+3b,0
+26,12c
+3e,0
+23,12c
+41,0
+1f,12c
+45,0
+1c,12c
+48,0
+19,12c
+4b,0
+15,12c
+50,0
+11,12c
+53,0
+e,12c
+56,0
+a,12c
+5a,0
+7,12c
+5d,0
+4,12c
+a15,0
+100 90 32
+25e,0
+6,3e8
+5e,0
+d,3e8
+57,0
+14,3e8
+50,0
+1b,3e8
+49,0
+4a,3e8
+1a,0
+4a,3e8
+1b,0
+49,3e8
+1b,0
+48,3e8
+1c,0
+48,3e8
+1c,0
+48,3e8
+1c,0
+47,3e8
+1d,0
+47,3e8
+1e,0
+45,3e8
+1f,0
+45,3e8
+1f,0
+45,3e8
+1f,0
+44,3e8
+20,0
+44,3e8
+20,0
+44,3e8
+21,0
+42,3e8
+22,0
+42,3e8
+22,0
+41,3e8
+23,0
+41,3e8
+23,0
+41,3e8
+23,0
+40,3e8
+25,0
+3f,3e8
+25,0
+3f,3e8
+25,0
+3e,3e8
+26,0
+3e,3e8
+26,0
+3d,3e8
+27,0
+3d,3e8
+28,0
+3c,3e8
+28,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3b,3e8
+29,0
+3a,3e8
+2a,0
+3a,3e8
+2b,0
+38,3e8
+2c,0
+38,3e8
+2c,0
+38,3e8
+2c,0
+37,3e8
+2d,0
+37,3e8
+2d,0
+37,3e8
+2e,0
+35,3e8
+2f,0
+35,3e8
+2f,0
+34,3e8
+30,0
+31,3e8
+33,0
+2e,3e8
+36,0
+2a,3e8
+3b,0
+26,3e8
+3e,0
+23,3e8
+41,0
+1f,3e8
+45,0
+1c,3e8
+48,0
+19,3e8
+4b,0
+15,3e8
+50,0
+11,3e8
+53,0
+e,3e8
+56,0
+a,3e8
+5a,0
+7,3e8
+5d,0
+4,3e8
+a15,0
+100 90 32
+25e,0
+6,111111
+5e,0
+d,111111
+57,0
+14,111111
+50,0
+1b,111111
+49,0
+4a,111111
+1a,0
+4a,111111
+1b,0
+49,111111
+1b,0
+48,111111
+1c,0
+48,111111
+1c,0
+48,111111
+1c,0
+47,111111
+1d,0
+47,111111
+1e,0
+45,111111
+1f,0
+45,111111
+1f,0
+45,111111
+1f,0
+44,111111
+20,0
+44,111111
+20,0
+44,111111
+21,0
+42,111111
+22,0
+42,111111
+22,0
+41,111111
+23,0
+41,111111
+23,0
+41,111111
+23,0
+40,111111
+25,0
+3f,111111
+25,0
+3f,111111
+25,0
+3e,111111
+26,0
+3e,111111
+26,0
+3d,111111
+27,0
+3d,111111
+28,0
+3c,111111
+28,0
+3b,111111
+29,0
+3b,111111
+29,0
+3b,111111
+29,0
+3a,111111
+2a,0
+3a,111111
+2b,0
+38,111111
+2c,0
+38,111111
+2c,0
+38,111111
+2c,0
+37,111111
+2d,0
+37,111111
+2d,0
+37,111111
+2e,0
+35,111111
+2f,0
+35,111111
+2f,0
+34,111111
+30,0
+31,111111
+33,0
+2e,111111
+36,0
+2a,111111
+3b,0
+26,111111
+3e,0
+23,111111
+41,0
+1f,111111
+45,0
+1c,111111
+48,0
+19,111111
+4b,0
+15,111111
+50,0
+11,111111
+53,0
+e,111111
+56,0
+a,111111
+5a,0
+7,111111
+5d,0
+4,111111
+a15,0
+100 90 32
+25e,0
+6,400200
+5e,0
+d,400200
+57,0
+14,400200
+50,0
+1b,400200
+49,0
+4a,400200
+1a,0
+4a,400200
+1b,0
+49,400200
+1b,0
+48,400200
+1c,0
+48,400200
+1c,0
+48,400200
+1c,0
+47,400200
+1d,0
+47,400200
+1e,0
+45,400200
+1f,0
+45,400200
+1f,0
+45,400200
+1f,0
+44,400200
+20,0
+44,400200
+20,0
+44,400200
+21,0
+42,400200
+22,0
+42,400200
+22,0
+41,400200
+23,0
+41,400200
+23,0
+41,400200
+23,0
+40,400200
+25,0
+3f,400200
+25,0
+3f,400200
+25,0
+3e,400200
+26,0
+3e,400200
+26,0
+3d,400200
+27,0
+3d,400200
+28,0
+3c,400200
+28,0
+3b,400200
+29,0
+3b,400200
+29,0
+3b,400200
+29,0
+3a,400200
+2a,0
+3a,400200
+2b,0
+38,400200
+2c,0
+38,400200
+2c,0
+38,400200
+2c,0
+37,400200
+2d,0
+37,400200
+2d,0
+37,400200
+2e,0
+35,400200
+2f,0
+35,400200
+2f,0
+34,400200
+30,0
+31,400200
+33,0
+2e,400200
+36,0
+2a,400200
+3b,0
+26,400200
+3e,0
+23,400200
+41,0
+1f,400200
+45,0
+1c,400200
+48,0
+19,400200
+4b,0
+15,400200
+50,0
+11,400200
+53,0
+e,400200
+56,0
+a,400200
+5a,0
+7,400200
+5d,0
+4,400200
+a15,0
+100 90 32
+25e,0
+6,777777
+5e,0
+d,777777
+57,0
+14,777777
+50,0
+1b,777777
+49,0
+4a,777777
+1a,0
+4a,777777
+1b,0
+49,777777
+1b,0
+48,777777
+1c,0
+48,777777
+1c,0
+48,777777
+1c,0
+47,777777
+1d,0
+47,777777
+1e,0
+45,777777
+1f,0
+45,777777
+1f,0
+45,777777
+1f,0
+44,777777
+20,0
+44,777777
+20,0
+44,777777
+21,0
+42,777777
+22,0
+42,777777
+22,0
+41,777777
+23,0
+41,777777
+23,0
+41,777777
+23,0
+40,777777
+25,0
+3f,777777
+25,0
+3f,777777
+25,0
+3e,777777
+26,0
+3e,777777
+26,0
+3d,777777
+27,0
+3d,777777
+28,0
+3c,777777
+28,0
+3b,777777
+29,0
+3b,777777
+29,0
+3b,777777
+29,0
+3a,777777
+2a,0
+3a,777777
+2b,0
+38,777777
+2c,0
+38,777777
+2c,0
+38,777777
+2c,0
+37,777777
+2d,0
+37,777777
+2d,0
+37,777777
+2e,0
+35,777777
+2f,0
+35,777777
+2f,0
+34,777777
+30,0
+31,777777
+33,0
+2e,777777
+36,0
+2a,777777
+3b,0
+26,777777
+3e,0
+23,777777
+41,0
+1f,777777
+45,0
+1c,777777
+48,0
+19,777777
+4b,0
+15,777777
+50,0
+11,777777
+53,0
+e,777777
+56,0
+a,777777
+5a,0
+7,777777
+5d,0
+4,777777
+a15,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a44.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a44.dat
new file mode 100644
index 000000000..78669201f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a44.dat
@@ -0,0 +1,11313 @@
+! $XConsortium$
+100 90 32
+261,0
+3,1
+5e,0
+9,1
+5e,0
+4,1
+2,0
+b,1
+50,0
+6,1
+0
+8,1
+6,0
+6,1
+4c,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+1d,0
+3,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+3,1
+24,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+1d,0
+2,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+25,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+1d,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+1
+25,0
+d,1
+b,0
+d,1
+b,0
+d,1
+20,0
+c,1
+c,0
+c,1
+c,0
+c,1
+27,0
+7,1
+6,0
+12,1
+6,0
+12,1
+6,0
+8,1
+20,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+21,0
+4,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+2,1
+20,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+7,1
+20,0
+1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+2c,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+4,1
+22,0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+2a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+1
+23,0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+2b,0
+d,1
+b,0
+d,1
+b,0
+a,1
+23,0
+c,1
+c,0
+c,1
+c,0
+c,1
+28,0
+6,1
+6,0
+12,1
+6,0
+12,1
+6,0
+4,1
+25,0
+3,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+a,1
+25,0
+2,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+29,0
+8,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+3,1
+28,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+2c,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+29,0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+2,1
+2d,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+2c,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+6,1
+2e,0
+d,1
+b,0
+d,1
+b,0
+6,1
+29,0
+a,1
+c,0
+c,1
+c,0
+c,1
+2a,0
+4,1
+6,0
+12,1
+6,0
+12,1
+30,0
+2,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+6,1
+2c,0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+7,1
+2c,0
+6,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+2e,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+2,1
+30,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+3,1
+2d,0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+35,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+3,1
+2f,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+32,0
+d,1
+b,0
+d,1
+b,0
+2,1
+2f,0
+8,1
+c,0
+c,1
+c,0
+8,1
+30,0
+2,1
+6,0
+12,1
+6,0
+11,1
+35,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+2,1
+36,0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+4,1
+3b,0
+4,1
+3,0
+8,1
+4,0
+9,1
+3,0
+7,1
+3e,0
+2,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+44,0
+5,1
+3,0
+6,1
+a,0
+5,1
+45,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+4d,0
+4,1
+6,0
+4,1
+54,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+51,0
+d,1
+56,0
+6,1
+64,0
+4,1
+5a,0
+7,1
+5d,0
+4,1
+a15,0
+100 90 32
+25e,0
+6,1
+62,0
+9,1
+57,0
+4,1
+3,0
+4,1
+2,0
+6,1
+51,0
+1
+a,0
+5,1
+3,0
+6,1
+4c,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+1a,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+1c,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+1
+25,0
+d,1
+b,0
+d,1
+b,0
+d,1
+20,0
+c,1
+c,0
+c,1
+c,0
+c,1
+25,0
+9,1
+6,0
+12,1
+6,0
+12,1
+6,0
+9,1
+1f,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+1f,0
+6,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+2,1
+20,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+7,1
+1f,0
+2,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+2c,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+4,1
+1f,0
+2,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+2a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+1
+20,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+2b,0
+d,1
+b,0
+d,1
+b,0
+a,1
+23,0
+c,1
+c,0
+c,1
+c,0
+c,1
+27,0
+7,1
+6,0
+12,1
+6,0
+12,1
+6,0
+4,1
+24,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+a,1
+23,0
+4,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+28,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+3,1
+28,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+2c,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+29,0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+2,1
+2d,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+2a,0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+6,1
+2e,0
+d,1
+b,0
+d,1
+b,0
+6,1
+28,0
+b,1
+c,0
+c,1
+c,0
+c,1
+29,0
+5,1
+6,0
+12,1
+6,0
+12,1
+2f,0
+3,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+6,1
+29,0
+2,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+29,0
+8,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+2e,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+2,1
+30,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+3,1
+2d,0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+35,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+3,1
+2d,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+32,0
+d,1
+b,0
+d,1
+b,0
+2,1
+2d,0
+a,1
+c,0
+c,1
+c,0
+9,1
+2e,0
+3,1
+6,0
+12,1
+6,0
+12,1
+31,0
+1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+2,1
+30,0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+3,1
+30,0
+6,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+4,1
+33,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3b,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+3c,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+42,0
+4,1
+6,0
+4,1
+a,0
+4,1
+46,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+48,0
+d,1
+b,0
+1
+48,0
+8,1
+c,0
+5,1
+4b,0
+2,1
+6,0
+d,1
+51,0
+c,1
+57,0
+7,1
+6,0
+1
+56,0
+4,1
+3,0
+3,1
+5a,0
+2,1
+2,0
+3,1
+5f,0
+2,1
+a15,0
+100 90 32
+25e,0
+6,1
+5e,0
+3,1
+64,0
+11,1
+50,0
+9,1
+6,0
+4,1
+2,0
+6,1
+49,0
+3,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+7,1
+1d,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+1d,0
+5,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+2,1
+1b,0
+2,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+3,1
+1e,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+20,0
+1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+3,1
+1c,0
+6,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+1d,0
+a,1
+b,0
+d,1
+b,0
+d,1
+b,0
+2,1
+1e,0
+1
+c,0
+c,1
+c,0
+c,1
+c,0
+8,1
+20,0
+12,1
+6,0
+12,1
+6,0
+12,1
+21,0
+7,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+2,1
+1f,0
+1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+3,1
+21,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+7,1
+20,0
+4,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+24,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+27,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+2b,0
+4,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+24,0
+8,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+c,0
+4,1
+25,0
+11,1
+6,0
+12,1
+6,0
+10,1
+25,0
+5,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2a,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+26,0
+7,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+3,1
+26,0
+2,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+2b,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2d,0
+3,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+2b,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+2d,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+2a,0
+6,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+36,0
+10,1
+6,0
+12,1
+6,0
+c,1
+2b,0
+3,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+34,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+5,1
+2c,0
+5,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+34,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+2,1
+2d,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2e,0
+2,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+2f,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+34,0
+4,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+38,0
+e,1
+6,0
+12,1
+6,0
+2,1
+36,0
+2,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+4,1
+3c,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+3,1
+3e,0
+3,1
+4,0
+9,1
+3,0
+8,1
+4,0
+4,1
+44,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+45,0
+4,1
+a,0
+5,1
+3,0
+6,1
+4c,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4c,0
+4,1
+a,0
+4,1
+56,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+53,0
+2,1
+b,0
+1
+5c,0
+4,1
+5a,0
+7,1
+a76,0
+100 90 32
+25f,0
+1
+2,0
+1
+5f,0
+7,1
+0
+1
+0
+3,1
+58,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+52,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+4a,0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+1b,0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+22,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+20,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+1d,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+1
+25,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+1d,0
+a,1
+3,0
+10,1
+3,0
+10,1
+3,0
+10,1
+3,0
+1
+1d,0
+47,1
+26,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+4,1
+1f,0
+4,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+23,0
+3,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+4,1
+23,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+5,1
+23,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+3,1
+23,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+25,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+23,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+2,1
+22,0
+4,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+1
+24,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+1
+24,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+27,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+26,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+29,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+27,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+27,0
+1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+1
+2c,0
+5,1
+e,0
+5,1
+e,0
+5,1
+33,0
+7,1
+3,0
+10,1
+3,0
+10,1
+3,0
+d,1
+28,0
+3c,1
+2d,0
+5,1
+e,0
+5,1
+e,0
+5,1
+34,0
+1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2b,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+1
+2a,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+30,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+2c,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+30,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+2c,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+2c,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+5,1
+2d,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2f,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+30,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+31,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+32,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+32,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+1
+34,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+3e,0
+5,1
+e,0
+5,1
+e,0
+1
+3b,0
+3,1
+3,0
+10,1
+3,0
+d,1
+3e,0
+23,1
+43,0
+5,1
+e,0
+5,1
+4a,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+4a,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+4,1
+4b,0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+51,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+54,0
+1
+5,0
+1
+0
+1
+0
+1
+5b,0
+3,1
+2,0
+1
+0
+1
+5b,0
+5,1
+5f,0
+3,1
+a15,0
+100 90 32
+260,0
+2,1
+60,0
+2,1
+63,0
+10,1
+53,0
+1b,1
+49,0
+2,1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+1
+1c,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+1c,0
+1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+1
+1b,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+1c,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+1f,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+1e,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+1d,0
+1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+1f,0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+21,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+21,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+20,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+23,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+21,0
+2,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+22,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+28,0
+1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+30,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2c,0
+e,1
+3,0
+10,1
+3,0
+10,1
+3,0
+a,1
+23,0
+41,1
+30,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2f,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+4,1
+25,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+3,1
+26,0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+29,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+28,0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+29,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+28,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+28,0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+29,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+2a,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+2b,0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+2c,0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+32,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+33,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+1
+2d,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+37,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2f,0
+b,1
+3,0
+10,1
+3,0
+10,1
+3,0
+3,1
+2d,0
+37,1
+37,0
+5,1
+e,0
+5,1
+e,0
+5,1
+30,0
+5,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+1
+2f,0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+35,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+4,1
+37,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+3b,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+41,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+40,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+42,0
+5,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+4,1
+47,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+1
+4a,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+4f,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+55,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+56,0
+1
+0
+9,1
+59,0
+2,1
+2,0
+3,1
+5a,0
+2,1
+3,0
+2,1
+a76,0
+100 90 32
+260,0
+4,1
+5e,0
+d,1
+57,0
+3,1
+e,0
+3,1
+53,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+49,0
+3,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+1c,0
+5,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+1b,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+1f,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+1d,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+1c,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+1c,0
+2,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+1e,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+21,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+20,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+20,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+20,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+26,0
+1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+27,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+30,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2b,0
+f,1
+3,0
+10,1
+3,0
+10,1
+3,0
+a,1
+22,0
+41,1
+31,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2b,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+4,1
+25,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+2,1
+25,0
+1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+29,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+28,0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+27,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+26,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+28,0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+29,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+2a,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+29,0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+2a,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+2b,0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+2b,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+1
+2d,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+37,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2e,0
+c,1
+3,0
+10,1
+3,0
+10,1
+3,0
+3,1
+2c,0
+37,1
+38,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2f,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+1
+2f,0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+35,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+7,1
+2f,0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+4,1
+30,0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+35,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+38,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+3d,0
+6,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+3e,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+41,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+2,1
+49,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+51,0
+1
+0
+9,1
+0
+1
+57,0
+2,1
+2,0
+5,1
+2,0
+2,1
+53,0
+3,1
+3,0
+2,1
+5,0
+1
+5e,0
+2,1
+5a,0
+7,1
+5d,0
+4,1
+a15,0
+100 90 32
+25e,0
+6,1
+62,0
+9,1
+57,0
+4,1
+3,0
+4,1
+2,0
+6,1
+51,0
+1
+a,0
+5,1
+3,0
+6,1
+4c,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+1a,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+1c,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+1
+25,0
+d,1
+b,0
+d,1
+b,0
+d,1
+20,0
+c,1
+c,0
+c,1
+c,0
+c,1
+25,0
+9,1
+6,0
+12,1
+6,0
+12,1
+6,0
+9,1
+1f,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+1f,0
+6,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+2,1
+20,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+7,1
+1f,0
+2,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+2c,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+4,1
+1f,0
+2,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+2a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+1
+20,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+2b,0
+d,1
+b,0
+d,1
+b,0
+a,1
+23,0
+c,1
+c,0
+c,1
+c,0
+c,1
+27,0
+7,1
+6,0
+12,1
+6,0
+12,1
+6,0
+4,1
+24,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+a,1
+23,0
+4,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+28,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+3,1
+28,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+2c,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+29,0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+2,1
+2d,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+2a,0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+6,1
+2e,0
+d,1
+b,0
+d,1
+b,0
+6,1
+28,0
+b,1
+c,0
+c,1
+c,0
+c,1
+29,0
+5,1
+6,0
+12,1
+6,0
+12,1
+2f,0
+3,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+6,1
+29,0
+2,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+29,0
+8,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+2e,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+2,1
+30,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+3,1
+2d,0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+35,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+3,1
+2d,0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+32,0
+d,1
+b,0
+d,1
+b,0
+2,1
+2d,0
+a,1
+c,0
+c,1
+c,0
+9,1
+2e,0
+3,1
+6,0
+12,1
+6,0
+12,1
+31,0
+1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+2,1
+30,0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+3,1
+30,0
+6,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+4,1
+33,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3b,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+3c,0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+42,0
+4,1
+6,0
+4,1
+a,0
+4,1
+46,0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+48,0
+d,1
+b,0
+1
+48,0
+8,1
+c,0
+5,1
+4b,0
+2,1
+6,0
+d,1
+51,0
+c,1
+57,0
+7,1
+6,0
+1
+56,0
+4,1
+3,0
+3,1
+5a,0
+2,1
+2,0
+3,1
+5f,0
+2,1
+a15,0
+100 90 32
+25e,0
+6,1
+5e,0
+3,1
+64,0
+11,1
+50,0
+9,1
+6,0
+4,1
+2,0
+6,1
+49,0
+3,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+7,1
+1d,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+1d,0
+5,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+2,1
+1b,0
+2,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+3,1
+1e,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+20,0
+1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+3,1
+1c,0
+6,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+1d,0
+a,1
+b,0
+d,1
+b,0
+d,1
+b,0
+2,1
+1e,0
+1
+c,0
+c,1
+c,0
+c,1
+c,0
+8,1
+20,0
+12,1
+6,0
+12,1
+6,0
+12,1
+21,0
+7,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+2,1
+1f,0
+1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+3,1
+21,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+7,1
+20,0
+4,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+24,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2b,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+27,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+2b,0
+4,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+24,0
+8,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+c,0
+4,1
+25,0
+11,1
+6,0
+12,1
+6,0
+10,1
+25,0
+5,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2a,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+26,0
+7,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+3,1
+26,0
+2,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+2b,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2d,0
+3,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+2b,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+2d,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+2a,0
+6,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+36,0
+10,1
+6,0
+12,1
+6,0
+c,1
+2b,0
+3,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+34,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+5,1
+2c,0
+5,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+34,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+2,1
+2d,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+2e,0
+2,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+2f,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+34,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+34,0
+4,1
+b,0
+d,1
+b,0
+d,1
+38,0
+c,1
+c,0
+c,1
+38,0
+e,1
+6,0
+12,1
+6,0
+2,1
+36,0
+2,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+4,1
+3c,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+3,1
+3e,0
+3,1
+4,0
+9,1
+3,0
+8,1
+4,0
+4,1
+44,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+45,0
+4,1
+a,0
+5,1
+3,0
+6,1
+4c,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4c,0
+4,1
+a,0
+4,1
+56,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+53,0
+2,1
+b,0
+1
+5c,0
+4,1
+5a,0
+7,1
+a76,0
+100 90 32
+25f,0
+1
+2,0
+1
+5f,0
+7,1
+0
+1
+0
+3,1
+58,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+52,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+4a,0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+1b,0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+22,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+20,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+1d,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+1
+25,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+1d,0
+a,1
+3,0
+10,1
+3,0
+10,1
+3,0
+10,1
+3,0
+1
+1d,0
+47,1
+26,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+4,1
+1f,0
+4,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+23,0
+3,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+4,1
+23,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+5,1
+23,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+3,1
+23,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+25,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+23,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+2,1
+22,0
+4,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+1
+24,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+1
+24,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+27,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+26,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+29,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+27,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+27,0
+1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+1
+2c,0
+5,1
+e,0
+5,1
+e,0
+5,1
+33,0
+7,1
+3,0
+10,1
+3,0
+10,1
+3,0
+d,1
+28,0
+3c,1
+2d,0
+5,1
+e,0
+5,1
+e,0
+5,1
+34,0
+1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2b,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+1
+2a,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+30,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+2c,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+30,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+2c,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+2c,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+5,1
+2d,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2f,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+30,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+31,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+32,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+32,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+1
+34,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+3e,0
+5,1
+e,0
+5,1
+e,0
+1
+3b,0
+3,1
+3,0
+10,1
+3,0
+d,1
+3e,0
+23,1
+43,0
+5,1
+e,0
+5,1
+4a,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+4a,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+4,1
+4b,0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+51,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+54,0
+1
+5,0
+1
+0
+1
+0
+1
+5b,0
+3,1
+2,0
+1
+0
+1
+5b,0
+5,1
+5f,0
+3,1
+a15,0
+100 90 32
+260,0
+2,1
+60,0
+2,1
+63,0
+10,1
+53,0
+1b,1
+49,0
+2,1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+1
+1c,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+1c,0
+1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+1
+1b,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+1c,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+1f,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+1e,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+1d,0
+1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+1f,0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+21,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+21,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+20,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+23,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+21,0
+2,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+22,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+28,0
+1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+30,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2c,0
+e,1
+3,0
+10,1
+3,0
+10,1
+3,0
+a,1
+23,0
+41,1
+30,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2f,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+4,1
+25,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+3,1
+26,0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+29,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+28,0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+29,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+28,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+28,0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+29,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+2a,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+2b,0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+2c,0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+32,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+33,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+1
+2d,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+37,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2f,0
+b,1
+3,0
+10,1
+3,0
+10,1
+3,0
+3,1
+2d,0
+37,1
+37,0
+5,1
+e,0
+5,1
+e,0
+5,1
+30,0
+5,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+1
+2f,0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+35,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+4,1
+37,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+3b,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+41,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+40,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+42,0
+5,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+4,1
+47,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+1
+4a,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+4f,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+55,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+56,0
+1
+0
+9,1
+59,0
+2,1
+2,0
+3,1
+5a,0
+2,1
+3,0
+2,1
+a76,0
+100 90 32
+260,0
+4,1
+5e,0
+d,1
+57,0
+3,1
+e,0
+3,1
+53,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+49,0
+3,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+1c,0
+5,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+2,1
+1b,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+1f,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+1d,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+1c,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+1c,0
+2,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+1e,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+21,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+20,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+20,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+20,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+26,0
+1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+27,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+30,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2b,0
+f,1
+3,0
+10,1
+3,0
+10,1
+3,0
+a,1
+22,0
+41,1
+31,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2b,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+4,1
+25,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+2,1
+25,0
+1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+29,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+28,0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+27,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+26,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+28,0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+29,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+2a,0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+29,0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+2a,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+2b,0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+2b,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+1
+2d,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+37,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2e,0
+c,1
+3,0
+10,1
+3,0
+10,1
+3,0
+3,1
+2c,0
+37,1
+38,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2f,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+1
+2f,0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+35,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+7,1
+2f,0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+4,1
+30,0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+35,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+38,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+3d,0
+6,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+3e,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+41,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+2,1
+49,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+4c,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+51,0
+1
+0
+9,1
+0
+1
+57,0
+2,1
+2,0
+5,1
+2,0
+2,1
+53,0
+3,1
+3,0
+2,1
+5,0
+1
+5e,0
+2,1
+5a,0
+7,1
+5d,0
+4,1
+a15,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a45.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a45.dat
new file mode 100644
index 000000000..301222aef
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a45.dat
@@ -0,0 +1,381 @@
+! $XConsortium$
+100 90 32
+230,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+32,1
+a,0
+a,1
+1e,0
+32,1
+a,0
+b,1
+1d,0
+32,1
+a,0
+c,1
+1c,0
+32,1
+a,0
+d,1
+1b,0
+32,1
+a,0
+e,1
+1a,0
+32,1
+a,0
+f,1
+19,0
+32,1
+a,0
+10,1
+18,0
+32,1
+a,0
+11,1
+17,0
+32,1
+a,0
+12,1
+16,0
+32,1
+a,0
+13,1
+15,0
+32,1
+a,0
+14,1
+14,0
+32,1
+a,0
+15,1
+13,0
+32,1
+a,0
+16,1
+12,0
+32,1
+a,0
+17,1
+11,0
+32,1
+a,0
+18,1
+10,0
+32,1
+a,0
+19,1
+f,0
+32,1
+a,0
+1a,1
+e,0
+32,1
+a,0
+1b,1
+d,0
+32,1
+a,0
+1c,1
+c,0
+32,1
+a,0
+1d,1
+b,0
+32,1
+a,0
+1e,1
+a,0
+32,1
+5,0
+1
+4,0
+1d,1
+b,0
+32,1
+5,0
+2,1
+3,0
+1c,1
+c,0
+32,1
+5,0
+2,1
+3,0
+1b,1
+d,0
+32,1
+5,0
+3,1
+2,0
+1a,1
+e,0
+32,1
+5,0
+4,1
+0
+19,1
+f,0
+32,1
+5,0
+4,1
+0
+17,1
+11,0
+32,1
+5,0
+1b,1
+12,0
+32,1
+5,0
+5,1
+0
+14,1
+13,0
+32,1
+5,0
+5,1
+0
+13,1
+14,0
+32,1
+5,0
+5,1
+2,0
+11,1
+15,0
+32,1
+5,0
+5,1
+3,0
+f,1
+16,0
+32,1
+5,0
+5,1
+3,0
+d,1
+18,0
+32,1
+5,0
+5,1
+4,0
+b,1
+19,0
+32,1
+5,0
+5,1
+5,0
+9,1
+1a,0
+32,1
+5,0
+5,1
+5,0
+8,1
+1b,0
+32,1
+5,0
+5,1
+6,0
+6,1
+1c,0
+32,1
+5,0
+5,1
+7,0
+4,1
+1d,0
+32,1
+5,0
+5,1
+7,0
+2,1
+1f,0
+32,1
+5,0
+5,1
+28,0
+32,1
+5,0
+5,1
+7,0
+2,1
+1f,0
+14,1
+6,0
+18,1
+5,0
+5,1
+6,0
+3,1
+1f,0
+14,1
+b,0
+13,1
+5,0
+5,1
+5,0
+5,1
+1e,0
+14,1
+11,0
+d,1
+5,0
+5,1
+4,0
+7,1
+1d,0
+14,1
+16,0
+8,1
+5,0
+5,1
+2,0
+9,1
+1d,0
+14,1
+1c,0
+2,1
+5,0
+5,1
+0
+b,1
+1c,0
+14,1
+1e,0
+3,1
+2,0
+12,1
+1b,0
+14,1
+1e,0
+5,1
+5,0
+d,1
+1b,0
+14,1
+1e,0
+5,1
+3,0
+2,1
+4,0
+a,1
+1a,0
+14,1
+1e,0
+5,1
+2,0
+3,1
+a,0
+5,1
+19,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+1e,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a46.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a46.dat
new file mode 100644
index 000000000..c2fa036b2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a46.dat
@@ -0,0 +1,235 @@
+! $XConsortium$
+100 90 32
+230,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+5a,0
+a,1
+28,0
+46,1
+1e,0
+47,1
+1d,0
+48,1
+1c,0
+49,1
+1b,0
+4a,1
+1a,0
+4b,1
+19,0
+4c,1
+18,0
+4d,1
+17,0
+4e,1
+16,0
+4f,1
+15,0
+50,1
+14,0
+51,1
+13,0
+52,1
+12,0
+53,1
+11,0
+54,1
+10,0
+55,1
+f,0
+56,1
+e,0
+57,1
+d,0
+58,1
+c,0
+59,1
+b,0
+5a,1
+a,0
+59,1
+b,0
+58,1
+c,0
+57,1
+d,0
+56,1
+e,0
+55,1
+f,0
+53,1
+11,0
+52,1
+12,0
+51,1
+13,0
+50,1
+14,0
+4f,1
+15,0
+4e,1
+16,0
+4c,1
+18,0
+4b,1
+19,0
+4a,1
+1a,0
+49,1
+1b,0
+48,1
+1c,0
+47,1
+1d,0
+45,1
+1f,0
+44,1
+20,0
+45,1
+1f,0
+14,1
+6,0
+2b,1
+1f,0
+14,1
+b,0
+27,1
+1e,0
+14,1
+11,0
+22,1
+1d,0
+14,1
+16,0
+1d,1
+1d,0
+14,1
+1c,0
+18,1
+1c,0
+14,1
+1e,0
+17,1
+1b,0
+14,1
+1e,0
+17,1
+1b,0
+14,1
+1e,0
+a,1
+4,0
+a,1
+1a,0
+14,1
+1e,0
+a,1
+a,0
+5,1
+19,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+14,1
+1e,0
+a,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+28,0
+3c,1
+1e,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a8.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a8.dat
new file mode 100644
index 000000000..e91815d1c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a8.dat
@@ -0,0 +1,121 @@
+! $XConsortium$
+100 90 32
+25f,0
+5,1
+60,0
+b,1
+5a,0
+11,1
+54,0
+17,1
+4e,0
+45,1
+20,0
+44,1
+22,0
+42,1
+23,0
+40,1
+25,0
+3f,1
+26,0
+3e,1
+27,0
+3c,1
+29,0
+3b,1
+2b,0
+38,1
+2d,0
+37,1
+2e,0
+36,1
+2f,0
+34,1
+31,0
+33,1
+32,0
+32,1
+34,0
+2f,1
+36,0
+2e,1
+37,0
+2c,1
+39,0
+2b,1
+3a,0
+2a,1
+3b,0
+28,1
+3e,0
+26,1
+3f,0
+25,1
+40,0
+23,1
+42,0
+22,1
+43,0
+20,1
+45,0
+1f,1
+45,0
+1f,1
+44,0
+1f,1
+44,0
+20,1
+43,0
+21,1
+42,0
+21,1
+42,0
+22,1
+42,0
+21,1
+42,0
+22,1
+41,0
+23,1
+40,0
+23,1
+40,0
+24,1
+3f,0
+25,1
+3f,0
+24,1
+3f,0
+25,1
+3e,0
+25,1
+3e,0
+23,1
+40,0
+21,1
+42,0
+1e,1
+46,0
+1b,1
+48,0
+19,1
+4a,0
+16,1
+4d,0
+14,1
+4f,0
+12,1
+51,0
+f,1
+55,0
+c,1
+57,0
+a,1
+59,0
+7,1
+5c,0
+5,1
+5e,0
+3,1
+a15,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/a9.dat b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a9.dat
new file mode 100644
index 000000000..ae6ff94d4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/a9.dat
@@ -0,0 +1,123 @@
+! $XConsortium$
+100 90 32
+3f2,0
+46,1
+1f,0
+45,1
+1f,0
+45,1
+1f,0
+45,1
+1f,0
+44,1
+20,0
+44,1
+20,0
+44,1
+21,0
+43,1
+21,0
+42,1
+22,0
+42,1
+22,0
+42,1
+22,0
+42,1
+22,0
+41,1
+24,0
+40,1
+24,0
+40,1
+24,0
+40,1
+24,0
+3f,1
+25,0
+3f,1
+25,0
+3f,1
+26,0
+3e,1
+26,0
+3d,1
+27,0
+3d,1
+27,0
+3d,1
+27,0
+3d,1
+27,0
+3c,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3b,1
+29,0
+3a,1
+2a,0
+3a,1
+2a,0
+3a,1
+2b,0
+39,1
+2b,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+38,1
+2c,0
+37,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+36,1
+2e,0
+35,1
+2f,0
+33,1
+31,0
+30,1
+35,0
+2d,1
+37,0
+2a,1
+3a,0
+28,1
+3c,0
+25,1
+3f,0
+23,1
+41,0
+20,1
+45,0
+1d,1
+47,0
+1a,1
+4a,0
+18,1
+4c,0
+15,1
+4f,0
+13,1
+51,0
+10,1
+55,0
+d,1
+57,0
+a,1
+5a,0
+8,1
+5c,0
+5,1
+5f,0
+3,1
+81d,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllplygn/fllplygn.m b/xc/test/xsuite/xtest/tset/CH06/fllplygn/fllplygn.m
new file mode 100644
index 000000000..4e1e5d3a3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllplygn/fllplygn.m
@@ -0,0 +1,439 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFillPolygon CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+XPoint *points = defpoints;
+int npoints = sizeof(defpoints)/sizeof(XPoint);
+int shape = Complex;
+int mode = CoordModeOrigin;
+>>EXTERN
+#define E_TEST
+
+static XPoint defpoints[] = {
+ {5, 5},
+ {40, 10},
+ {80, 10},
+ {65, 50},
+ {15, 65},
+ {5, 5},
+};
+
+>>ASSERTION Good A
+A call to xname
+fills the region enclosed by the polygonal path
+with vertex list
+.A points
+in drawable
+.A d .
+>>STRATEGY
+Fill polygon
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When the last point in the vertex list does not coincide with the
+first point, then the path is closed automatically.
+>>STRATEGY
+Exclude the last point in the list.
+Verify the same result as having the last point coincident with the first.
+>>CODE
+XVisualInfo *vp;
+XImage *xip;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ npoints = sizeof(defpoints)/sizeof(XPoint);
+ XCALL;
+
+ xip = savimage(display, d);
+
+ npoints--;
+ XCALL;
+
+ if (compsavimage(display, d, xip))
+ CHECK;
+ else {
+ report("Path not automatically closed properly");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+A call to xname does not draw a pixel of the region more than once.
+>>STRATEGY
+Draw polygon.
+Set function to GXxor
+Draw same polygon again.
+Verify that the window is blank.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+
+ XSetFunction(display, gc, GXxor);
+
+ XCALL;
+
+ if (checkarea(display, d, (struct area *)0, W_BG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("Points drawn twice");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When
+.A mode
+is
+.S CoordModeOrigin ,
+then all coordinates are taken relative to the origin.
+>>STRATEGY
+Draw simple shape with origin relative co-ordinates.
+Verify that it was drawn correctly.
+>>CODE
+XVisualInfo *vp;
+struct area area;
+static XPoint pnt[] = {
+ {10, 10},
+ {40, 10},
+ {40, 30},
+ {10, 30},
+};
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ points = pnt;
+ npoints = sizeof(pnt)/sizeof(XPoint);
+ mode = CoordModeOrigin;
+ XCALL;
+
+ setarea(&area, pnt[0].x, pnt[0].y, pnt[1].x-pnt[0].x, pnt[2].y-pnt[0].y);
+ if (checkarea(display, d, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("incorrect drawing with CoordModeOrigin");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When
+.A mode
+is
+.S CoordModePrevious ,
+then all coordinates after the first are taken relative to the previous point.
+>>STRATEGY
+Draw simple shape using relative coordinates.
+Verify correct shape drawn.
+>>CODE
+XVisualInfo *vp;
+struct area area;
+static XPoint pnt[] = {
+ {10, 10},
+ {30, 0},
+ {0, 20},
+ {-30, 0},
+};
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ points = pnt;
+ npoints = sizeof(pnt)/sizeof(XPoint);
+ mode = CoordModePrevious;
+ XCALL;
+
+ setarea(&area, pnt[0].x, pnt[0].y, pnt[1].x, pnt[2].y);
+ if (checkarea(display, d, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("incorrect drawing with CoordModePrevious");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+When
+.A shape
+is
+.S Complex ,
+and the path does not
+self-intersect, then the region is filled according to the
+.M fill_style .
+>>ASSERTION def
+When
+.A shape
+is
+.S Complex
+and the path self-intersects, then the region is filled according to the
+.M fill_rule
+and
+.M fill_style .
+>>ASSERTION Good A
+When
+.A shape
+is
+.S Nonconvex ,
+and the path does not
+self-intersect, then the region is filled according to the
+.M fill_style .
+>>STRATEGY
+Set shape to Nonconvex.
+Draw a non convex but non self intersecting polygon.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+static XPoint nonconv[] = {
+ {5, 5},
+ {40, 10},
+ {80, 10},
+ {65, 50},
+ {15, 65},
+ {40, 35},
+ {5, 5},
+};
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ points = nonconv;
+ npoints = sizeof(nonconv)/sizeof(XPoint);
+ shape = Nonconvex;
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When
+.A shape
+is
+.S Convex ,
+and the path is convex, then the region is filled according to the
+.M fill_style .
+>>STRATEGY
+Set shape to Convex.
+Draw convex shape.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+static XPoint convpnts[] = {
+ {10, 10},
+ {80, 10},
+ {70, 50},
+ {20, 70},
+};
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ points = convpnts;
+ npoints = sizeof(convpnts)/sizeof(XPoint);
+ shape = Convex;
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M fill-style ,
+.M fill-rule ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin
+and
+.M tile-stipple-y-origin
+are used.
+>>ASSERTION Good A
+When
+.M fill_rule
+is
+.S EvenOddRule
+and
+.M fill_style
+is
+.S FillSolid
+and
+.M clip_mask
+is
+.S None
+and an infinite ray with a given point as origin crosses
+the path an odd number of times,
+then a pixel is drawn at the point.
+>>STRATEGY
+Set EvenOddRule.
+Draw self intersecting polygon.
+Pixmap verify.
+>>EXTERN
+
+/*
+ * A complex self intersecting shape for use in testing the fill_rule.
+ * The lines have simple slopes.
+ */
+static XPoint compshape[] = {
+ {10, 10},
+ {80, 10},
+ {100, 30},
+ {65, 60},
+ {65, 30},
+ {85, 60},
+ {30, 50},
+ {30, 80},
+ {60, 80},
+ {60, 5},
+ {70, 5},
+ {70, 100},
+ {10, 100},
+};
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XSetFillRule(display, gc, EvenOddRule);
+
+ points = compshape;
+ npoints = sizeof(compshape)/sizeof(XPoint);
+ shape = Complex;
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+When
+.M fill_rule
+is
+.S WindingRule
+and
+.M fill_style
+is
+.S FillSolid
+and
+.M clip_mask
+is
+.S None
+and an infinite ray with a given point as origin crosses
+an unequal number of clockwise and counterclockwise directed path segments,
+then a pixel is drawn at the point.
+>>STRATEGY
+Set fill_rule to WindingRule.
+Draw complex self-intersecting shape.
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XSetFillRule(display, gc, WindingRule);
+
+ points = compshape;
+ npoints = sizeof(compshape)/sizeof(XPoint);
+ shape = Complex;
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+When the center of a pixel is on the boundary,
+and the boundary is not horizontal,
+and the polygon interior is immediately in the x increasing direction,
+then a pixel is drawn at the point.
+>>ASSERTION def
+When the center of a pixel is on the boundary,
+and the boundary is horizontal,
+and the polygon interior is immediately in the y increasing direction,
+then a pixel is drawn at the point.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>>ASSERTION Bad A
+.ER Value shape Complex Convex Nonconvex
+>>ASSERTION Bad A
+.ER Value mode CoordModeOrigin CoordModePrevious
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a22.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a22.dat
new file mode 100644
index 000000000..7a9f2c287
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a22.dat
@@ -0,0 +1,63 @@
+! $XConsortium$
+100 90 32
+bcc,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+bc2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a24.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a24.dat
new file mode 100644
index 000000000..343397b4d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a24.dat
@@ -0,0 +1,457 @@
+! $XConsortium$
+100 90 32
+bcc,0
+3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+3
+1e,0
+2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+2,2
+1e,0
+b,2
+d,3
+b,2
+d,3
+b,2
+b,3
+1e,0
+4,2
+c,3
+c,2
+c,3
+c,2
+c,3
+6,2
+1e,0
+a,3
+6,2
+12,3
+6,2
+12,3
+6,2
+6,3
+1e,0
+4,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+c,3
+1e,0
+7,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+1e,0
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+6,3
+1e,0
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+3,2
+1e,0
+3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+3,3
+1e,0
+2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+2
+1e,0
+3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+3
+1e,0
+2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+2,2
+1e,0
+b,2
+d,3
+b,2
+d,3
+b,2
+b,3
+1e,0
+4,2
+c,3
+c,2
+c,3
+c,2
+c,3
+6,2
+1e,0
+a,3
+6,2
+12,3
+6,2
+12,3
+6,2
+6,3
+1e,0
+4,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+c,3
+1e,0
+7,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+1e,0
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+6,3
+1e,0
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+5,2
+4,3
+3,2
+4,3
+2,2
+6,3
+3,2
+1e,0
+3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+6,3
+a,2
+5,3
+3,2
+3,3
+1e,0
+2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+2
+1e,0
+3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+4,3
+a,2
+4,3
+6,2
+3
+1e,0
+2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+5,2
+3,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+2,2
+1e,0
+b,2
+d,3
+b,2
+d,3
+b,2
+b,3
+1e,0
+4,2
+c,3
+c,2
+c,3
+c,2
+c,3
+6,2
+1e,0
+a,3
+6,2
+12,3
+6,2
+12,3
+6,2
+6,3
+1e,0
+4,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+c,3
+6,2
+4,3
+2,2
+c,3
+1e,0
+7,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+9,3
+2
+8,3
+6,2
+1e,0
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+8,3
+4,2
+9,3
+3,2
+6,3
+bc2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a25.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a25.dat
new file mode 100644
index 000000000..6774892ba
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a25.dat
@@ -0,0 +1,427 @@
+! $XConsortium$
+100 90 32
+bcc,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+1
+1f,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+2b,0
+d,1
+b,0
+d,1
+b,0
+b,1
+22,0
+c,1
+c,0
+c,1
+c,0
+c,1
+24,0
+a,1
+6,0
+12,1
+6,0
+12,1
+6,0
+6,1
+22,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+1e,0
+7,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+28,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+6,1
+1e,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+21,0
+1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+3,1
+1f,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+1f,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+1
+1f,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+2b,0
+d,1
+b,0
+d,1
+b,0
+b,1
+22,0
+c,1
+c,0
+c,1
+c,0
+c,1
+24,0
+a,1
+6,0
+12,1
+6,0
+12,1
+6,0
+6,1
+22,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+1e,0
+7,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+28,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+6,1
+1e,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+21,0
+1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+3,1
+1f,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+1f,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+1
+1f,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+2b,0
+d,1
+b,0
+d,1
+b,0
+b,1
+22,0
+c,1
+c,0
+c,1
+c,0
+c,1
+24,0
+a,1
+6,0
+12,1
+6,0
+12,1
+6,0
+6,1
+22,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+1e,0
+7,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+28,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+6,1
+bc2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a29.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a29.dat
new file mode 100644
index 000000000..1a19bde68
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a29.dat
@@ -0,0 +1,395 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+bcc,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+bfb,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+bd9,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+bda,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+bfa,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+bc2,0
+100 90 32
+2328,0
+100 90 32
+bcc,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+57,0
+d,1
+bfb,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+bd9,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+43,0
+21,1
+bda,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+bfa,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+4c,0
+18,1
+bc2,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a32.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a32.dat
new file mode 100644
index 000000000..6774892ba
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a32.dat
@@ -0,0 +1,427 @@
+! $XConsortium$
+100 90 32
+bcc,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+1
+1f,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+2b,0
+d,1
+b,0
+d,1
+b,0
+b,1
+22,0
+c,1
+c,0
+c,1
+c,0
+c,1
+24,0
+a,1
+6,0
+12,1
+6,0
+12,1
+6,0
+6,1
+22,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+1e,0
+7,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+28,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+6,1
+1e,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+21,0
+1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+3,1
+1f,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+1f,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+1
+1f,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+2b,0
+d,1
+b,0
+d,1
+b,0
+b,1
+22,0
+c,1
+c,0
+c,1
+c,0
+c,1
+24,0
+a,1
+6,0
+12,1
+6,0
+12,1
+6,0
+6,1
+22,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+1e,0
+7,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+28,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+6,1
+1e,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+21,0
+1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+3,1
+1f,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+1f,0
+1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+1
+1f,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+2b,0
+d,1
+b,0
+d,1
+b,0
+b,1
+22,0
+c,1
+c,0
+c,1
+c,0
+c,1
+24,0
+a,1
+6,0
+12,1
+6,0
+12,1
+6,0
+6,1
+22,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+1e,0
+7,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+28,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+6,1
+bc2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a34.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a34.dat
new file mode 100644
index 000000000..3fd45e590
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a34.dat
@@ -0,0 +1,2111 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+bcc,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+bc2,0
+100 90 32
+bcc,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+bc2,0
+100 90 32
+bcc,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+bc2,0
+100 90 32
+bcc,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+bc2,0
+100 90 32
+bcc,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+bc2,0
+100 90 32
+bcc,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+bc2,0
+100 90 32
+bcc,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+bc2,0
+100 90 32
+bcc,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+bc2,0
+100 90 32
+bcc,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+bc2,0
+100 90 32
+bcc,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+bc2,0
+100 90 32
+bcc,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+bc2,0
+100 90 32
+bcc,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+bc2,0
+100 90 32
+bcc,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+bc2,0
+100 90 32
+bcc,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+bc2,0
+100 90 32
+bcc,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+bc2,0
+100 90 32
+bcc,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+bc2,0
+100 90 32
+bcc,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+bc2,0
+100 90 32
+bcc,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+bc2,0
+100 90 32
+bcc,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+bc2,0
+100 90 32
+bcc,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+bc2,0
+100 90 32
+bcc,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+bc2,0
+100 90 32
+bcc,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+bc2,0
+100 90 32
+bcc,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+bc2,0
+100 90 32
+bcc,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+bc2,0
+100 90 32
+bcc,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+bc2,0
+100 90 32
+bcc,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+bc2,0
+100 90 32
+bcc,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+bc2,0
+100 90 32
+bcc,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+bc2,0
+100 90 32
+bcc,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+bc2,0
+100 90 32
+bcc,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+bc2,0
+100 90 32
+bcc,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+bc2,0
+100 90 32
+bcc,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+bc2,0
+100 90 32
+bcc,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+bc2,0
+100 90 32
+bcc,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+bc2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a36.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a36.dat
new file mode 100644
index 000000000..3fd45e590
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a36.dat
@@ -0,0 +1,2111 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+bcc,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+bc2,0
+100 90 32
+bcc,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+bc2,0
+100 90 32
+bcc,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+bc2,0
+100 90 32
+bcc,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+bc2,0
+100 90 32
+bcc,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+bc2,0
+100 90 32
+bcc,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+bc2,0
+100 90 32
+bcc,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+bc2,0
+100 90 32
+bcc,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+bc2,0
+100 90 32
+bcc,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+bc2,0
+100 90 32
+bcc,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+bc2,0
+100 90 32
+bcc,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+bc2,0
+100 90 32
+bcc,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+bc2,0
+100 90 32
+bcc,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+bc2,0
+100 90 32
+bcc,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+bc2,0
+100 90 32
+bcc,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+bc2,0
+100 90 32
+bcc,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+bc2,0
+100 90 32
+bcc,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+bc2,0
+100 90 32
+bcc,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+1e,0
+46,1
+bc2,0
+100 90 32
+bcc,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+1e,0
+46,2
+bc2,0
+100 90 32
+bcc,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+1e,0
+46,3
+bc2,0
+100 90 32
+bcc,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+1e,0
+46,4
+bc2,0
+100 90 32
+bcc,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+1e,0
+46,6
+bc2,0
+100 90 32
+bcc,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+1e,0
+46,7
+bc2,0
+100 90 32
+bcc,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+1e,0
+46,10
+bc2,0
+100 90 32
+bcc,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+1e,0
+46,33
+bc2,0
+100 90 32
+bcc,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+1e,0
+46,81
+bc2,0
+100 90 32
+bcc,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+1e,0
+46,a3
+bc2,0
+100 90 32
+bcc,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+1e,0
+46,ff
+bc2,0
+100 90 32
+bcc,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+1e,0
+46,100
+bc2,0
+100 90 32
+bcc,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+1e,0
+46,12c
+bc2,0
+100 90 32
+bcc,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+1e,0
+46,3e8
+bc2,0
+100 90 32
+bcc,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+1e,0
+46,111111
+bc2,0
+100 90 32
+bcc,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+1e,0
+46,400200
+bc2,0
+100 90 32
+bcc,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+1e,0
+46,777777
+bc2,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a38.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a38.dat
new file mode 100644
index 000000000..fc2a9ca08
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/a38.dat
@@ -0,0 +1,7993 @@
+! $XConsortium$
+100 90 32
+bcc,0
+7,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+3,1
+1e,0
+1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+5,1
+1f,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+1e,0
+4,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+20,0
+1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+2,1
+1f,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+27,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+2,1
+1e,0
+5,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+1e,0
+9,1
+b,0
+d,1
+b,0
+d,1
+b,0
+2,1
+1e,0
+1
+c,0
+c,1
+c,0
+c,1
+c,0
+9,1
+1f,0
+12,1
+6,0
+12,1
+6,0
+12,1
+21,0
+7,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+3,1
+1e,0
+1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+5,1
+1f,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+1e,0
+4,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+20,0
+1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+2,1
+1f,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+27,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+2,1
+1e,0
+5,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+1e,0
+9,1
+b,0
+d,1
+b,0
+d,1
+b,0
+2,1
+1e,0
+1
+c,0
+c,1
+c,0
+c,1
+c,0
+9,1
+1f,0
+12,1
+6,0
+12,1
+6,0
+12,1
+21,0
+7,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+3,1
+1e,0
+1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+5,1
+1f,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+1e,0
+4,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+20,0
+1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+2,1
+1f,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+27,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+2,1
+1e,0
+5,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+bc2,0
+100 90 32
+bcc,0
+5,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+1f,0
+2,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+1
+20,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+20,0
+1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+1
+1e,0
+6,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+1
+1e,0
+a,1
+b,0
+d,1
+b,0
+d,1
+b,0
+1
+1e,0
+2,1
+c,0
+c,1
+c,0
+c,1
+c,0
+8,1
+20,0
+12,1
+6,0
+12,1
+6,0
+12,1
+20,0
+8,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+2,1
+1e,0
+2,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+4,1
+20,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+8,1
+1e,0
+5,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+1f,0
+2,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+1
+20,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+20,0
+1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+1
+1e,0
+6,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+1
+1e,0
+a,1
+b,0
+d,1
+b,0
+d,1
+b,0
+1
+1e,0
+2,1
+c,0
+c,1
+c,0
+c,1
+c,0
+8,1
+20,0
+12,1
+6,0
+12,1
+6,0
+12,1
+20,0
+8,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+2,1
+1e,0
+2,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+4,1
+20,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+8,1
+1e,0
+5,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+1f,0
+2,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+1
+20,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+20,0
+1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+1
+1e,0
+6,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+1
+1e,0
+a,1
+b,0
+d,1
+b,0
+d,1
+b,0
+1
+1e,0
+2,1
+c,0
+c,1
+c,0
+c,1
+c,0
+8,1
+20,0
+12,1
+6,0
+12,1
+6,0
+12,1
+bc4,0
+100 90 32
+bcc,0
+7,1
+6,0
+12,1
+6,0
+12,1
+6,0
+9,1
+1f,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+21,0
+4,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+3,1
+1f,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+1f,0
+1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+1
+26,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+1e,0
+1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+2a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+1e,0
+1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+2b,0
+d,1
+b,0
+d,1
+b,0
+d,1
+20,0
+c,1
+c,0
+c,1
+c,0
+c,1
+27,0
+7,1
+6,0
+12,1
+6,0
+12,1
+6,0
+9,1
+1f,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+21,0
+4,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+3,1
+1f,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+1f,0
+1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+1
+26,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+1e,0
+1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+2a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+1e,0
+1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+2b,0
+d,1
+b,0
+d,1
+b,0
+d,1
+20,0
+c,1
+c,0
+c,1
+c,0
+c,1
+27,0
+7,1
+6,0
+12,1
+6,0
+12,1
+6,0
+9,1
+1f,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+21,0
+4,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+3,1
+1f,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+1f,0
+1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+1
+26,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+1e,0
+1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+2a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+bc2,0
+100 90 32
+bcc,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+1e,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+1f,0
+1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+21,0
+1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2a,0
+10,1
+3,0
+10,1
+3,0
+10,1
+3,0
+d,1
+1e,0
+46,1
+1e,0
+1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2b,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+20,0
+1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+1e,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+1f,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+1f,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+20,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+1f,0
+1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+1f,0
+1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+1f,0
+1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+21,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+20,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+1e,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+1e,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+1f,0
+1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+21,0
+1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2a,0
+10,1
+3,0
+10,1
+3,0
+10,1
+3,0
+d,1
+1e,0
+46,1
+1e,0
+1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2b,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+20,0
+1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+1e,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+bc3,0
+100 90 32
+bcc,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+20,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+1
+1e,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+22,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+20,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+1f,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+1e,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+1e,0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+3,1
+1e,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+1e,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+1f,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+21,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+1f,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+22,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+20,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+1
+20,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+24,0
+3,1
+3,0
+10,1
+3,0
+10,1
+3,0
+10,1
+3,0
+7,1
+1e,0
+46,1
+20,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+24,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+20,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+1
+1e,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+22,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+20,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+1f,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+1e,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+1e,0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+3,1
+1e,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+1e,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+1f,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+bc3,0
+100 90 32
+bcd,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+1f,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+1e,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+1f,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+20,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+20,0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+1f,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+20,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+1f,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+1e,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+1f,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+1f,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+20,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+24,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+23,0
+4,1
+3,0
+10,1
+3,0
+10,1
+3,0
+10,1
+3,0
+6,1
+1e,0
+46,1
+21,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+24,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+1e,0
+1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+20,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+1f,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+1e,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+1f,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+20,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+20,0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+1f,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+20,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+1f,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+1e,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+1f,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+bc3,0
+100 90 32
+bcc,0
+5,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+1f,0
+2,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+1
+20,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+20,0
+1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+1
+1e,0
+6,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+1
+1e,0
+a,1
+b,0
+d,1
+b,0
+d,1
+b,0
+1
+1e,0
+2,1
+c,0
+c,1
+c,0
+c,1
+c,0
+8,1
+20,0
+12,1
+6,0
+12,1
+6,0
+12,1
+20,0
+8,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+2,1
+1e,0
+2,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+4,1
+20,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+8,1
+1e,0
+5,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+1f,0
+2,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+1
+20,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+20,0
+1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+1
+1e,0
+6,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+1
+1e,0
+a,1
+b,0
+d,1
+b,0
+d,1
+b,0
+1
+1e,0
+2,1
+c,0
+c,1
+c,0
+c,1
+c,0
+8,1
+20,0
+12,1
+6,0
+12,1
+6,0
+12,1
+20,0
+8,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+2,1
+1e,0
+2,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+4,1
+20,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+8,1
+1e,0
+5,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+1f,0
+2,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+1
+20,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+20,0
+1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+1
+1e,0
+6,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+1
+1e,0
+a,1
+b,0
+d,1
+b,0
+d,1
+b,0
+1
+1e,0
+2,1
+c,0
+c,1
+c,0
+c,1
+c,0
+8,1
+20,0
+12,1
+6,0
+12,1
+6,0
+12,1
+bc4,0
+100 90 32
+bcc,0
+7,1
+6,0
+12,1
+6,0
+12,1
+6,0
+9,1
+1f,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+21,0
+4,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+3,1
+1f,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+1f,0
+1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+1
+26,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+1e,0
+1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+2a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+1e,0
+1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+2b,0
+d,1
+b,0
+d,1
+b,0
+d,1
+20,0
+c,1
+c,0
+c,1
+c,0
+c,1
+27,0
+7,1
+6,0
+12,1
+6,0
+12,1
+6,0
+9,1
+1f,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+21,0
+4,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+3,1
+1f,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+1f,0
+1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+1
+26,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+1e,0
+1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+2a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+1e,0
+1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+2b,0
+d,1
+b,0
+d,1
+b,0
+d,1
+20,0
+c,1
+c,0
+c,1
+c,0
+c,1
+27,0
+7,1
+6,0
+12,1
+6,0
+12,1
+6,0
+9,1
+1f,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+6,0
+4,1
+2,0
+c,1
+21,0
+4,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+9,1
+0
+8,1
+6,0
+3,1
+1f,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+4,0
+9,1
+3,0
+8,1
+1f,0
+1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+4,1
+3,0
+4,1
+2,0
+6,1
+5,0
+1
+26,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+a,0
+5,1
+3,0
+6,1
+1e,0
+1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+2a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+a,0
+4,1
+6,0
+4,1
+bc2,0
+100 90 32
+bcc,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+1e,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+1f,0
+1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+21,0
+1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2a,0
+10,1
+3,0
+10,1
+3,0
+10,1
+3,0
+d,1
+1e,0
+46,1
+1e,0
+1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2b,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+20,0
+1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+1e,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+1f,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+1f,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+20,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+1f,0
+1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+1f,0
+1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+1f,0
+1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+21,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+20,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+1e,0
+1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+1e,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+1f,0
+1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+1f,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+21,0
+1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2a,0
+10,1
+3,0
+10,1
+3,0
+10,1
+3,0
+d,1
+1e,0
+46,1
+1e,0
+1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+2b,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+20,0
+1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+1e,0
+3,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+bc3,0
+100 90 32
+bcc,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+20,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+1
+1e,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+22,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+20,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+1f,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+1e,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+1e,0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+3,1
+1e,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+1e,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+1f,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+21,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+1f,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+22,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+20,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+1
+20,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+24,0
+3,1
+3,0
+10,1
+3,0
+10,1
+3,0
+10,1
+3,0
+7,1
+1e,0
+46,1
+20,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+24,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+20,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+1
+1e,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+22,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+20,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+1f,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+1e,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+1e,0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+3,1
+1e,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+1e,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+1f,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+bc3,0
+100 90 32
+bcd,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+1f,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+1e,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+1f,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+20,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+20,0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+1f,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+20,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+1f,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+1e,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+1f,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+1f,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+2,0
+5,1
+2,0
+2,1
+20,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+5,0
+2,1
+24,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+23,0
+4,1
+3,0
+10,1
+3,0
+10,1
+3,0
+10,1
+3,0
+6,1
+1e,0
+46,1
+21,0
+5,1
+e,0
+5,1
+e,0
+5,1
+e,0
+5,1
+24,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+1e,0
+1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+20,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+1f,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+1e,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+1f,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+20,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+20,0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+1f,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+20,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+1f,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+1e,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+1f,0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+6,0
+1
+0
+9,1
+0
+1
+bc3,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngl/fllrctngl.m b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/fllrctngl.m
new file mode 100644
index 000000000..786f0ccca
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngl/fllrctngl.m
@@ -0,0 +1,124 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFillRectangle CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+int x = 20;
+int y = 30;
+unsigned int width = 70;
+unsigned int height = 30;
+>>ASSERTION Good A
+A call to xname fills the rectangle specified by
+.A x ,
+.A y ,
+.A width
+and
+.A height
+in the drawable
+.A d .
+>>STRATEGY
+Draw rectangle.
+Call checkarea to verify result.
+>>CODE
+XVisualInfo *vp;
+struct area area;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+
+ setarea(&area, x, y, width, height);
+ if (checkarea(display, d, &area, W_FG, W_BG, CHECK_ALL))
+ CHECK;
+ else {
+ report("XFillRectangle failed");
+ FAIL;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+A call to xname fills the rectangle as if a four-point
+.S FillPolygon
+protocol request were specified in the order
+[x, y], [x+width, y], [x+width, y+height], [x, y+height].
+>>ASSERTION Good A
+A call to xname does not draw a pixel more than once.
+>>STRATEGY
+Set GC Function to GXxor
+Draw rectangle.
+Verify that each pixel is set in the area.
+>>CODE
+XVisualInfo *vp;
+struct area area;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+
+ XCALL;
+
+ setarea(&area, x, y, width, height);
+ if (checkarea(display, d, &area, W_FG, 0, CHECK_IN))
+ CHECK;
+ else {
+ report("XFillRectangle failed");
+ FAIL;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M fill-style ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin
+and
+.M tile-stipple-y-origin
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a1.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a1.dat
new file mode 100644
index 000000000..7ded6c67c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a1.dat
@@ -0,0 +1,153 @@
+! $XConsortium$
+100 90 32
+ca,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+756,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+7da,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a23.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a23.dat
new file mode 100644
index 000000000..7ded6c67c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a23.dat
@@ -0,0 +1,153 @@
+! $XConsortium$
+100 90 32
+ca,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+756,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+7da,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a24.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a24.dat
new file mode 100644
index 000000000..35488eebc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a24.dat
@@ -0,0 +1,767 @@
+! $XConsortium$
+100 90 32
+ca,0
+3
+2,2
+2,3
+5,2
+2,3
+2,2
+6,3
+50,0
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+4,3
+2
+50,0
+2
+3
+2
+9,3
+2
+3
+6,2
+50,0
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+4,2
+3
+50,0
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+4,2
+3
+50,0
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+50,0
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+50,0
+2,3
+2
+3
+2
+5,3
+2
+3
+2
+7,3
+50,0
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+3
+2
+50,0
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+3
+2
+756,0
+2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+a,0
+2,2
+3
+2
+3
+41,0
+2,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+3,2
+a,0
+2
+3
+2
+3
+2
+41,0
+2,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+3,2
+a,0
+3
+2,2
+3
+2
+41,0
+3,2
+3
+2
+9,3
+2
+3
+4,2
+a,0
+3,3
+2
+3
+41,0
+3,2
+2,3
+2,2
+5,3
+2,2
+2,3
+4,2
+a,0
+3
+2,2
+2,3
+41,0
+2,3
+3,2
+2,3
+5,2
+2,3
+3,2
+3,3
+50,0
+7,2
+5,3
+8,2
+50,0
+8,3
+3,2
+9,3
+50,0
+14,3
+50,0
+7,2
+5,3
+8,2
+50,0
+3,3
+2,2
+2,3
+5,2
+2,3
+2,2
+4,3
+50,0
+2,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+3,3
+50,0
+3,2
+3
+2
+9,3
+2
+3
+4,2
+50,0
+2,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+3,2
+50,0
+2,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+3,2
+50,0
+2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+50,0
+2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+50,0
+4,3
+2
+3
+2
+5,3
+2
+3
+2
+5,3
+50,0
+2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+50,0
+2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+50,0
+2,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+3,2
+32,0
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+a,0
+2,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+3,2
+32,0
+2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+a,0
+3,2
+3
+2
+9,3
+2
+3
+4,2
+32,0
+3
+2
+3
+6,2
+3
+2
+9,3
+a,0
+3,2
+2,3
+2,2
+5,3
+2,2
+2,3
+4,2
+32,0
+2
+2,3
+6,2
+2,3
+2,2
+5,3
+2,2
+a,0
+2,3
+3,2
+2,3
+5,2
+2,3
+3,2
+3,3
+32,0
+3
+3,2
+4,3
+3,2
+2,3
+5,2
+2,3
+a,0
+7,2
+5,3
+8,2
+32,0
+d,2
+5,3
+2,2
+a,0
+8,3
+3,2
+9,3
+32,0
+e,3
+3,2
+3,3
+a,0
+14,3
+32,0
+14,3
+a,0
+7,2
+5,3
+8,2
+32,0
+d,2
+5,3
+2,2
+a,0
+3,3
+2,2
+2,3
+5,2
+2,3
+2,2
+4,3
+32,0
+3
+2,2
+6,3
+2,2
+2,3
+5,2
+2,3
+a,0
+2,3
+2
+2,3
+2,2
+5,3
+2,2
+2,3
+2
+3,3
+32,0
+2
+2,3
+2
+4,3
+2
+2,3
+2,2
+5,3
+2,2
+a,0
+3,2
+3
+2
+9,3
+2
+3
+4,2
+32,0
+3
+2
+3
+6,2
+3
+2
+9,3
+a,0
+2,2
+3
+2
+3
+2,2
+5,3
+2,2
+3
+2
+3
+3,2
+32,0
+2
+3
+2
+3
+4,2
+3
+2
+3
+2,2
+5,3
+2,2
+a,0
+2,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+3,2
+32,0
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+a,0
+2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+32,0
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+a,0
+2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+32,0
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+a,0
+4,3
+2
+3
+2
+5,3
+2
+3
+2
+5,3
+32,0
+3
+2
+8,3
+2
+3
+2
+5,3
+2
+3
+a,0
+2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+2
+3
+2
+3
+2,2
+32,0
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2
+5,3
+2
+3
+a,0
+2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+2
+3
+2
+3
+2,2
+32,0
+3
+2
+3
+2
+3
+2,2
+3
+2
+3
+2
+3
+2,2
+3,3
+2,2
+3
+a,0
+2,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+3
+2
+3
+3,2
+32,0
+2
+3
+2
+3
+4,2
+3
+2
+3
+2
+3
+5,2
+3
+2
+7da,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a25.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a25.dat
new file mode 100644
index 000000000..b1d159380
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a25.dat
@@ -0,0 +1,413 @@
+! $XConsortium$
+100 90 32
+ca,0
+2,3
+2,2
+c,3
+4,2
+50,0
+3
+2
+8,3
+6,2
+4,3
+50,0
+7,3
+3,2
+8,3
+2,2
+50,0
+2
+4,3
+2,2
+6,3
+5,2
+2,3
+50,0
+5,2
+5,3
+3,2
+6,3
+2
+50,0
+2
+3
+2
+3
+6,2
+5,3
+4,2
+3
+50,0
+5,2
+4,3
+6,2
+4,3
+2
+50,0
+2
+3
+2
+3
+2
+9,3
+5,2
+3
+50,0
+5,2
+d,3
+2,2
+50,0
+a,3
+a,2
+756,0
+7,2
+4,3
+6,2
+3,3
+a,0
+2
+4,3
+41,0
+2
+3
+2
+3
+2
+3
+2
+9,3
+4,2
+a,0
+2
+4,3
+41,0
+7,2
+d,3
+a,0
+2
+4,3
+41,0
+c,3
+8,2
+a,0
+5,3
+41,0
+6,3
+6,2
+8,3
+a,0
+5,2
+41,0
+4,3
+2,2
+c,3
+2,2
+50,0
+3,3
+2
+8,3
+6,2
+2,3
+50,0
+9,3
+3,2
+8,3
+50,0
+3,2
+4,3
+2,2
+6,3
+5,2
+50,0
+7,2
+5,3
+3,2
+5,3
+50,0
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+3,2
+50,0
+7,2
+4,3
+6,2
+3,3
+50,0
+2
+3
+2
+3
+2
+3
+2
+9,3
+4,2
+50,0
+7,2
+d,3
+50,0
+c,3
+8,2
+50,0
+6,3
+6,2
+8,3
+50,0
+4,3
+2,2
+c,3
+2,2
+50,0
+3,3
+2
+8,3
+6,2
+2,3
+50,0
+9,3
+3,2
+8,3
+50,0
+3,2
+4,3
+2,2
+6,3
+5,2
+50,0
+7,2
+5,3
+3,2
+5,3
+32,0
+9,2
+5,3
+3,2
+3,3
+a,0
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+3,2
+32,0
+2,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+2
+a,0
+7,2
+4,3
+6,2
+3,3
+32,0
+9,2
+4,3
+6,2
+3
+a,0
+2
+3
+2
+3
+2
+3
+2
+9,3
+4,2
+32,0
+2,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+2,2
+a,0
+7,2
+d,3
+32,0
+9,2
+b,3
+a,0
+c,3
+8,2
+32,0
+2,2
+c,3
+6,2
+a,0
+6,3
+6,2
+8,3
+32,0
+8,3
+6,2
+6,3
+a,0
+4,3
+2,2
+c,3
+2,2
+32,0
+2,2
+4,3
+2,2
+c,3
+a,0
+3,3
+2
+8,3
+6,2
+2,3
+32,0
+5,3
+2
+8,3
+6,2
+a,0
+9,3
+3,2
+8,3
+32,0
+2,2
+9,3
+3,2
+6,3
+a,0
+3,2
+4,3
+2,2
+6,3
+5,2
+32,0
+2,3
+3,2
+4,3
+2,2
+6,3
+3,2
+a,0
+7,2
+5,3
+3,2
+5,3
+32,0
+9,2
+5,3
+3,2
+3,3
+a,0
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+3,2
+32,0
+2,3
+2
+3
+2
+3
+2
+3
+6,2
+5,3
+2
+a,0
+7,2
+4,3
+6,2
+3,3
+32,0
+9,2
+4,3
+6,2
+3
+a,0
+2
+3
+2
+3
+2
+3
+2
+9,3
+4,2
+32,0
+2,3
+2
+3
+2
+3
+2
+3
+2
+9,3
+2,2
+a,0
+7,2
+d,3
+32,0
+9,2
+b,3
+a,0
+c,3
+8,2
+32,0
+2,2
+c,3
+6,2
+a,0
+6,3
+6,2
+8,3
+32,0
+8,3
+6,2
+6,3
+a,0
+4,3
+2,2
+c,3
+2,2
+32,0
+2,2
+4,3
+2,2
+c,3
+a,0
+3,3
+2
+8,3
+6,2
+2,3
+32,0
+5,3
+2
+8,3
+6,2
+7da,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a26.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a26.dat
new file mode 100644
index 000000000..76b63387e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a26.dat
@@ -0,0 +1,337 @@
+! $XConsortium$
+100 90 32
+ca,0
+2,1
+2,0
+c,1
+54,0
+1
+0
+8,1
+6,0
+4,1
+50,0
+7,1
+3,0
+8,1
+53,0
+4,1
+2,0
+6,1
+5,0
+2,1
+55,0
+5,1
+3,0
+6,1
+52,0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+55,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+1
+55,0
+d,1
+52,0
+a,1
+767,0
+4,1
+6,0
+3,1
+b,0
+4,1
+42,0
+1
+0
+1
+0
+1
+0
+9,1
+f,0
+4,1
+48,0
+d,1
+b,0
+4,1
+41,0
+c,1
+12,0
+5,1
+41,0
+6,1
+6,0
+8,1
+50,0
+4,1
+2,0
+c,1
+52,0
+3,1
+0
+8,1
+6,0
+2,1
+50,0
+9,1
+3,0
+8,1
+53,0
+4,1
+2,0
+6,1
+5c,0
+5,1
+3,0
+5,1
+51,0
+1
+0
+1
+0
+1
+6,0
+5,1
+5a,0
+4,1
+6,0
+3,1
+51,0
+1
+0
+1
+0
+1
+0
+9,1
+5b,0
+d,1
+50,0
+c,1
+58,0
+6,1
+6,0
+8,1
+50,0
+4,1
+2,0
+c,1
+52,0
+3,1
+0
+8,1
+6,0
+2,1
+50,0
+9,1
+3,0
+8,1
+53,0
+4,1
+2,0
+6,1
+5c,0
+5,1
+3,0
+5,1
+3b,0
+5,1
+3,0
+3,1
+b,0
+1
+0
+1
+0
+1
+6,0
+5,1
+35,0
+2,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+12,0
+4,1
+6,0
+3,1
+3b,0
+4,1
+6,0
+1
+b,0
+1
+0
+1
+0
+1
+0
+9,1
+36,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+13,0
+d,1
+3b,0
+b,1
+a,0
+c,1
+3c,0
+c,1
+10,0
+6,1
+6,0
+8,1
+32,0
+8,1
+6,0
+6,1
+a,0
+4,1
+2,0
+c,1
+36,0
+4,1
+2,0
+c,1
+a,0
+3,1
+0
+8,1
+6,0
+2,1
+32,0
+5,1
+0
+8,1
+10,0
+9,1
+3,0
+8,1
+34,0
+9,1
+3,0
+6,1
+d,0
+4,1
+2,0
+6,1
+37,0
+2,1
+3,0
+4,1
+2,0
+6,1
+14,0
+5,1
+3,0
+5,1
+3b,0
+5,1
+3,0
+3,1
+b,0
+1
+0
+1
+0
+1
+6,0
+5,1
+35,0
+2,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+12,0
+4,1
+6,0
+3,1
+3b,0
+4,1
+6,0
+1
+b,0
+1
+0
+1
+0
+1
+0
+9,1
+36,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+13,0
+d,1
+3b,0
+b,1
+a,0
+c,1
+3c,0
+c,1
+10,0
+6,1
+6,0
+8,1
+32,0
+8,1
+6,0
+6,1
+a,0
+4,1
+2,0
+c,1
+36,0
+4,1
+2,0
+c,1
+a,0
+3,1
+0
+8,1
+6,0
+2,1
+32,0
+5,1
+0
+8,1
+7e0,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a30.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a30.dat
new file mode 100644
index 000000000..906276e4c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a30.dat
@@ -0,0 +1,335 @@
+! $XConsortium$
+100 90 32
+ca,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+1ec6,0
+100 90 32
+bb8,0
+14,1
+a,0
+3,1
+43,0
+14,1
+a,0
+3,1
+43,0
+14,1
+a,0
+3,1
+43,0
+14,1
+a,0
+3,1
+43,0
+14,1
+a,0
+3,1
+43,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+c08,0
+100 90 32
+1770,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+820,0
+100 90 32
+2328,0
+100 90 32
+bd9,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+15bd,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+13ce,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+bc2,0
+100 90 32
+17b6,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+7da,0
+100 90 32
+bb8,0
+14,1
+a,0
+3,1
+43,0
+14,1
+a,0
+3,1
+43,0
+14,1
+a,0
+3,1
+43,0
+14,1
+a,0
+3,1
+43,0
+14,1
+a,0
+3,1
+43,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+c08,0
+100 90 32
+1770,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+820,0
+100 90 32
+2328,0
+100 90 32
+bd9,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+62,0
+2,1
+15bd,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+13ce,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+bc2,0
+100 90 32
+17b6,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+7da,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a33.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a33.dat
new file mode 100644
index 000000000..76b63387e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a33.dat
@@ -0,0 +1,337 @@
+! $XConsortium$
+100 90 32
+ca,0
+2,1
+2,0
+c,1
+54,0
+1
+0
+8,1
+6,0
+4,1
+50,0
+7,1
+3,0
+8,1
+53,0
+4,1
+2,0
+6,1
+5,0
+2,1
+55,0
+5,1
+3,0
+6,1
+52,0
+1
+0
+1
+6,0
+5,1
+4,0
+1
+55,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+1
+55,0
+d,1
+52,0
+a,1
+767,0
+4,1
+6,0
+3,1
+b,0
+4,1
+42,0
+1
+0
+1
+0
+1
+0
+9,1
+f,0
+4,1
+48,0
+d,1
+b,0
+4,1
+41,0
+c,1
+12,0
+5,1
+41,0
+6,1
+6,0
+8,1
+50,0
+4,1
+2,0
+c,1
+52,0
+3,1
+0
+8,1
+6,0
+2,1
+50,0
+9,1
+3,0
+8,1
+53,0
+4,1
+2,0
+6,1
+5c,0
+5,1
+3,0
+5,1
+51,0
+1
+0
+1
+0
+1
+6,0
+5,1
+5a,0
+4,1
+6,0
+3,1
+51,0
+1
+0
+1
+0
+1
+0
+9,1
+5b,0
+d,1
+50,0
+c,1
+58,0
+6,1
+6,0
+8,1
+50,0
+4,1
+2,0
+c,1
+52,0
+3,1
+0
+8,1
+6,0
+2,1
+50,0
+9,1
+3,0
+8,1
+53,0
+4,1
+2,0
+6,1
+5c,0
+5,1
+3,0
+5,1
+3b,0
+5,1
+3,0
+3,1
+b,0
+1
+0
+1
+0
+1
+6,0
+5,1
+35,0
+2,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+12,0
+4,1
+6,0
+3,1
+3b,0
+4,1
+6,0
+1
+b,0
+1
+0
+1
+0
+1
+0
+9,1
+36,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+13,0
+d,1
+3b,0
+b,1
+a,0
+c,1
+3c,0
+c,1
+10,0
+6,1
+6,0
+8,1
+32,0
+8,1
+6,0
+6,1
+a,0
+4,1
+2,0
+c,1
+36,0
+4,1
+2,0
+c,1
+a,0
+3,1
+0
+8,1
+6,0
+2,1
+32,0
+5,1
+0
+8,1
+10,0
+9,1
+3,0
+8,1
+34,0
+9,1
+3,0
+6,1
+d,0
+4,1
+2,0
+6,1
+37,0
+2,1
+3,0
+4,1
+2,0
+6,1
+14,0
+5,1
+3,0
+5,1
+3b,0
+5,1
+3,0
+3,1
+b,0
+1
+0
+1
+0
+1
+6,0
+5,1
+35,0
+2,1
+0
+1
+0
+1
+0
+1
+6,0
+5,1
+12,0
+4,1
+6,0
+3,1
+3b,0
+4,1
+6,0
+1
+b,0
+1
+0
+1
+0
+1
+0
+9,1
+36,0
+2,1
+0
+1
+0
+1
+0
+1
+0
+9,1
+13,0
+d,1
+3b,0
+b,1
+a,0
+c,1
+3c,0
+c,1
+10,0
+6,1
+6,0
+8,1
+32,0
+8,1
+6,0
+6,1
+a,0
+4,1
+2,0
+c,1
+36,0
+4,1
+2,0
+c,1
+a,0
+3,1
+0
+8,1
+6,0
+2,1
+32,0
+5,1
+0
+8,1
+7e0,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a35.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a35.dat
new file mode 100644
index 000000000..229166d2f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a35.dat
@@ -0,0 +1,5171 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+ca,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+756,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+7da,0
+100 90 32
+ca,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+756,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+7da,0
+100 90 32
+ca,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+756,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+7da,0
+100 90 32
+ca,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+756,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+7da,0
+100 90 32
+ca,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+756,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+7da,0
+100 90 32
+ca,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+756,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+7da,0
+100 90 32
+ca,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+756,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+7da,0
+100 90 32
+ca,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+756,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+7da,0
+100 90 32
+ca,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+756,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+7da,0
+100 90 32
+ca,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+756,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+7da,0
+100 90 32
+ca,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+756,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+7da,0
+100 90 32
+ca,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+756,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+7da,0
+100 90 32
+ca,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+756,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+7da,0
+100 90 32
+ca,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+756,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+7da,0
+100 90 32
+ca,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+756,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+7da,0
+100 90 32
+ca,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+756,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+7da,0
+100 90 32
+ca,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+756,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+7da,0
+100 90 32
+ca,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+756,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+7da,0
+100 90 32
+ca,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+756,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+7da,0
+100 90 32
+ca,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+756,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+7da,0
+100 90 32
+ca,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+756,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+7da,0
+100 90 32
+ca,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+756,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+7da,0
+100 90 32
+ca,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+756,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+7da,0
+100 90 32
+ca,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+756,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+7da,0
+100 90 32
+ca,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+756,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+7da,0
+100 90 32
+ca,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+756,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+7da,0
+100 90 32
+ca,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+756,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+7da,0
+100 90 32
+ca,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+756,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+7da,0
+100 90 32
+ca,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+756,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+7da,0
+100 90 32
+ca,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+756,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+7da,0
+100 90 32
+ca,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+756,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+7da,0
+100 90 32
+ca,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+756,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+7da,0
+100 90 32
+ca,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+756,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+7da,0
+100 90 32
+ca,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+756,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+7da,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a37.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a37.dat
new file mode 100644
index 000000000..229166d2f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a37.dat
@@ -0,0 +1,5171 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+ca,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+756,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+7da,0
+100 90 32
+ca,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+756,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+7da,0
+100 90 32
+ca,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+756,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+7da,0
+100 90 32
+ca,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+756,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+7da,0
+100 90 32
+ca,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+756,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+7da,0
+100 90 32
+ca,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+756,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+7da,0
+100 90 32
+ca,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+756,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+7da,0
+100 90 32
+ca,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+756,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+7da,0
+100 90 32
+ca,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+756,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+7da,0
+100 90 32
+ca,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+756,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+7da,0
+100 90 32
+ca,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+756,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+7da,0
+100 90 32
+ca,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+756,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+7da,0
+100 90 32
+ca,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+756,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+7da,0
+100 90 32
+ca,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+756,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+7da,0
+100 90 32
+ca,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+756,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+7da,0
+100 90 32
+ca,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+756,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+7da,0
+100 90 32
+ca,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+756,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+7da,0
+100 90 32
+ca,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+756,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+a,0
+5,1
+41,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+50,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+a,0
+14,1
+32,0
+14,1
+7da,0
+100 90 32
+ca,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+756,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+a,0
+5,2
+41,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+50,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+a,0
+14,2
+32,0
+14,2
+7da,0
+100 90 32
+ca,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+756,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+a,0
+5,3
+41,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+50,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+a,0
+14,3
+32,0
+14,3
+7da,0
+100 90 32
+ca,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+756,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+a,0
+5,4
+41,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+50,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+a,0
+14,4
+32,0
+14,4
+7da,0
+100 90 32
+ca,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+756,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+a,0
+5,6
+41,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+50,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+a,0
+14,6
+32,0
+14,6
+7da,0
+100 90 32
+ca,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+756,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+a,0
+5,7
+41,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+50,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+a,0
+14,7
+32,0
+14,7
+7da,0
+100 90 32
+ca,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+756,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+a,0
+5,10
+41,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+50,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+a,0
+14,10
+32,0
+14,10
+7da,0
+100 90 32
+ca,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+756,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+a,0
+5,33
+41,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+50,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+a,0
+14,33
+32,0
+14,33
+7da,0
+100 90 32
+ca,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+756,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+a,0
+5,81
+41,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+50,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+a,0
+14,81
+32,0
+14,81
+7da,0
+100 90 32
+ca,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+756,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+a,0
+5,a3
+41,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+50,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+a,0
+14,a3
+32,0
+14,a3
+7da,0
+100 90 32
+ca,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+756,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+a,0
+5,ff
+41,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+50,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+a,0
+14,ff
+32,0
+14,ff
+7da,0
+100 90 32
+ca,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+756,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+a,0
+5,100
+41,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+50,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+a,0
+14,100
+32,0
+14,100
+7da,0
+100 90 32
+ca,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+756,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+a,0
+5,12c
+41,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+50,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+a,0
+14,12c
+32,0
+14,12c
+7da,0
+100 90 32
+ca,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+756,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+a,0
+5,3e8
+41,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+50,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+a,0
+14,3e8
+32,0
+14,3e8
+7da,0
+100 90 32
+ca,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+756,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+a,0
+5,111111
+41,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+50,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+a,0
+14,111111
+32,0
+14,111111
+7da,0
+100 90 32
+ca,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+756,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+a,0
+5,400200
+41,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+50,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+a,0
+14,400200
+32,0
+14,400200
+7da,0
+100 90 32
+ca,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+756,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+a,0
+5,777777
+41,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+50,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+a,0
+14,777777
+32,0
+14,777777
+7da,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a39.dat b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a39.dat
new file mode 100644
index 000000000..949770a0a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/a39.dat
@@ -0,0 +1,5667 @@
+! $XConsortium$
+100 90 32
+ce,0
+3,1
+0
+1
+0
+1
+0
+1
+6,0
+1
+50,0
+4,1
+a,0
+4,1
+56,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+6,1
+50,0
+3,1
+b,0
+6,1
+57,0
+c,1
+51,0
+d,1
+6,0
+1
+50,0
+1
+6,0
+4,1
+2,0
+7,1
+51,0
+9,1
+0
+8,1
+51,0
+3,1
+4,0
+9,1
+3,0
+1
+53,0
+4,1
+3,0
+4,1
+2,0
+4,1
+756,0
+3,1
+6,0
+4,1
+2,0
+5,1
+d,0
+2,1
+44,0
+9,1
+0
+7,1
+a,0
+5,1
+41,0
+5,1
+4,0
+9,1
+f,0
+2,1
+46,0
+4,1
+3,0
+4,1
+2,0
+2,1
+a,0
+3,1
+43,0
+6,1
+a,0
+4,1
+50,0
+2,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+57,0
+4,1
+a,0
+4,1
+50,0
+1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+50,0
+5,1
+b,0
+4,1
+59,0
+b,1
+50,0
+f,1
+55,0
+3,1
+6,0
+4,1
+2,0
+5,1
+53,0
+9,1
+0
+7,1
+50,0
+5,1
+4,0
+9,1
+57,0
+4,1
+3,0
+4,1
+2,0
+2,1
+50,0
+6,1
+a,0
+4,1
+50,0
+2,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+57,0
+4,1
+a,0
+4,1
+50,0
+1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+50,0
+5,1
+b,0
+4,1
+59,0
+b,1
+3d,0
+9,1
+a,0
+f,1
+37,0
+11,1
+d,0
+3,1
+6,0
+4,1
+2,0
+5,1
+32,0
+5,1
+6,0
+4,1
+2,0
+3,1
+d,0
+9,1
+0
+7,1
+37,0
+9,1
+0
+5,1
+a,0
+5,1
+4,0
+9,1
+34,0
+7,1
+4,0
+9,1
+f,0
+4,1
+3,0
+4,1
+2,0
+2,1
+32,0
+2,1
+5,0
+4,1
+3,0
+4,1
+c,0
+6,1
+a,0
+4,1
+34,0
+6,1
+a,0
+2,1
+a,0
+2,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+37,0
+4,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+f,0
+4,1
+a,0
+4,1
+36,0
+4,1
+a,0
+2,1
+a,0
+1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+4,1
+32,0
+3,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+2,1
+a,0
+5,1
+b,0
+4,1
+32,0
+7,1
+b,0
+2,1
+13,0
+b,1
+3d,0
+9,1
+a,0
+f,1
+37,0
+11,1
+d,0
+3,1
+6,0
+4,1
+2,0
+5,1
+32,0
+5,1
+6,0
+4,1
+2,0
+3,1
+d,0
+9,1
+0
+7,1
+37,0
+9,1
+0
+5,1
+a,0
+5,1
+4,0
+9,1
+34,0
+7,1
+4,0
+9,1
+f,0
+4,1
+3,0
+4,1
+2,0
+2,1
+32,0
+2,1
+5,0
+4,1
+3,0
+4,1
+c,0
+6,1
+a,0
+4,1
+34,0
+6,1
+a,0
+2,1
+a,0
+2,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+37,0
+4,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+f,0
+4,1
+a,0
+4,1
+36,0
+4,1
+a,0
+2,1
+7da,0
+100 90 32
+ca,0
+4,1
+b,0
+5,1
+58,0
+c,1
+50,0
+e,1
+56,0
+2,1
+6,0
+4,1
+2,0
+6,1
+52,0
+9,1
+0
+8,1
+50,0
+4,1
+4,0
+9,1
+57,0
+4,1
+3,0
+4,1
+2,0
+3,1
+50,0
+5,1
+a,0
+5,1
+50,0
+1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+57,0
+4,1
+a,0
+4,1
+757,0
+1
+5,0
+4,1
+3,0
+4,1
+2,0
+1
+a,0
+4,1
+43,0
+6,1
+a,0
+3,1
+a,0
+1
+45,0
+3,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+f,0
+3,1
+45,0
+4,1
+a,0
+3,1
+a,0
+1
+45,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+b,0
+3,1
+42,0
+6,1
+b,0
+3,1
+5a,0
+a,1
+50,0
+10,1
+54,0
+4,1
+6,0
+4,1
+2,0
+4,1
+54,0
+9,1
+0
+6,1
+50,0
+6,1
+4,0
+9,1
+51,0
+1
+5,0
+4,1
+3,0
+4,1
+2,0
+1
+51,0
+6,1
+a,0
+3,1
+50,0
+3,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+57,0
+4,1
+a,0
+3,1
+50,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+50,0
+6,1
+b,0
+3,1
+5a,0
+a,1
+50,0
+10,1
+54,0
+4,1
+6,0
+4,1
+2,0
+4,1
+54,0
+9,1
+0
+6,1
+38,0
+9,1
+0
+4,1
+a,0
+6,1
+4,0
+9,1
+33,0
+8,1
+4,0
+8,1
+a,0
+1
+5,0
+4,1
+3,0
+4,1
+2,0
+1
+32,0
+3,1
+5,0
+4,1
+3,0
+4,1
+c,0
+6,1
+a,0
+3,1
+35,0
+6,1
+a,0
+1
+a,0
+3,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+36,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+f,0
+4,1
+a,0
+3,1
+37,0
+4,1
+a,0
+1
+a,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+32,0
+4,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+1
+a,0
+6,1
+b,0
+3,1
+32,0
+8,1
+b,0
+1
+14,0
+a,1
+3e,0
+8,1
+a,0
+10,1
+36,0
+12,1
+c,0
+4,1
+6,0
+4,1
+2,0
+4,1
+32,0
+6,1
+6,0
+4,1
+2,0
+2,1
+e,0
+9,1
+0
+6,1
+38,0
+9,1
+0
+4,1
+a,0
+6,1
+4,0
+9,1
+33,0
+8,1
+4,0
+8,1
+a,0
+1
+5,0
+4,1
+3,0
+4,1
+2,0
+1
+32,0
+3,1
+5,0
+4,1
+3,0
+4,1
+c,0
+6,1
+a,0
+3,1
+35,0
+6,1
+a,0
+1
+a,0
+3,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+36,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+f,0
+4,1
+a,0
+3,1
+37,0
+4,1
+a,0
+1
+a,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+32,0
+4,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+1
+a,0
+6,1
+b,0
+3,1
+32,0
+8,1
+b,0
+1
+14,0
+a,1
+3e,0
+8,1
+7da,0
+100 90 32
+cc,0
+5,1
+3,0
+6,1
+54,0
+1
+6,0
+5,1
+4,0
+3,1
+53,0
+4,1
+6,0
+4,1
+54,0
+1
+0
+9,1
+5,0
+3,1
+53,0
+d,1
+55,0
+7,1
+c,0
+1
+50,0
+1
+6,0
+d,1
+51,0
+c,1
+6,0
+1
+50,0
+7,1
+6,0
+7,1
+50,0
+4,1
+3,0
+8,1
+4,0
+1
+756,0
+3,1
+6,0
+b,1
+d,0
+2,1
+41,0
+1
+2,0
+c,1
+f,0
+5,1
+42,0
+8,1
+6,0
+5,1
+a,0
+3,1
+43,0
+6,1
+3,0
+8,1
+10,0
+2,1
+41,0
+4,1
+2,0
+6,1
+5,0
+3,1
+a,0
+5,1
+45,0
+5,1
+3,0
+6,1
+52,0
+1
+0
+1
+6,0
+5,1
+4,0
+2,1
+54,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+2,1
+54,0
+d,1
+53,0
+9,1
+5b,0
+3,1
+6,0
+b,1
+50,0
+1
+2,0
+c,1
+56,0
+8,1
+6,0
+5,1
+50,0
+6,1
+3,0
+8,1
+53,0
+4,1
+2,0
+6,1
+5,0
+3,1
+54,0
+5,1
+3,0
+6,1
+52,0
+1
+0
+1
+6,0
+5,1
+4,0
+2,1
+54,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+2,1
+54,0
+d,1
+3b,0
+d,1
+b,0
+9,1
+3d,0
+b,1
+13,0
+3,1
+6,0
+b,1
+32,0
+5,1
+6,0
+9,1
+a,0
+1
+2,0
+c,1
+37,0
+3,1
+2,0
+c,1
+e,0
+8,1
+6,0
+5,1
+32,0
+2,1
+0
+8,1
+6,0
+3,1
+a,0
+6,1
+3,0
+8,1
+35,0
+8,1
+3,0
+8,1
+b,0
+4,1
+2,0
+6,1
+5,0
+3,1
+34,0
+4,1
+2,0
+6,1
+5,0
+1
+e,0
+5,1
+3,0
+6,1
+3a,0
+5,1
+3,0
+6,1
+a,0
+1
+0
+1
+6,0
+5,1
+4,0
+2,1
+32,0
+1
+0
+1
+0
+1
+6,0
+5,1
+12,0
+4,1
+6,0
+4,1
+3a,0
+4,1
+6,0
+4,1
+a,0
+1
+0
+1
+0
+9,1
+5,0
+2,1
+32,0
+1
+0
+1
+0
+1
+0
+9,1
+13,0
+d,1
+3b,0
+d,1
+b,0
+9,1
+3d,0
+b,1
+13,0
+3,1
+6,0
+b,1
+32,0
+5,1
+6,0
+9,1
+a,0
+1
+2,0
+c,1
+37,0
+3,1
+2,0
+c,1
+e,0
+8,1
+6,0
+5,1
+32,0
+2,1
+0
+8,1
+6,0
+3,1
+a,0
+6,1
+3,0
+8,1
+35,0
+8,1
+3,0
+8,1
+b,0
+4,1
+2,0
+6,1
+5,0
+3,1
+34,0
+4,1
+2,0
+6,1
+5,0
+1
+e,0
+5,1
+3,0
+6,1
+3a,0
+5,1
+3,0
+6,1
+a,0
+1
+0
+1
+6,0
+5,1
+4,0
+2,1
+32,0
+1
+0
+1
+0
+1
+6,0
+5,1
+7de,0
+100 90 32
+ca,0
+2,1
+0
+1
+6,0
+1
+0
+8,1
+52,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+51,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+51,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+53,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+52,0
+1
+0
+8,1
+0
+1
+0
+5,1
+52,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+52,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+52,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+52,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+757,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+4,1
+a,0
+1
+0
+1
+43,0
+4,1
+0
+1
+6,0
+1
+0
+6,1
+b,0
+1
+0
+2,1
+41,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+4,1
+b,0
+2,1
+45,0
+2,1
+3,0
+4,1
+3,0
+2,1
+11,0
+2,1
+41,0
+2,1
+e,0
+4,1
+51,0
+10,1
+53,0
+14,1
+50,0
+2,1
+e,0
+4,1
+52,0
+2,1
+2,0
+6,1
+2,0
+2,1
+54,0
+2,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+4,1
+50,0
+4,1
+0
+1
+6,0
+1
+0
+6,1
+50,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+4,1
+52,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+54,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+50,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+4,1
+50,0
+2,1
+0
+1
+0
+8,1
+0
+1
+0
+4,1
+50,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+4,1
+50,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+52,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+54,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+4,1
+50,0
+4,1
+0
+1
+6,0
+1
+0
+6,1
+33,0
+9,1
+0
+1
+6,0
+1
+b,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+4,1
+32,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+c,0
+2,1
+3,0
+4,1
+3,0
+2,1
+37,0
+2,1
+5,0
+2,1
+3,0
+4,1
+d,0
+2,1
+e,0
+4,1
+35,0
+5,1
+17,0
+10,1
+35,0
+4,1
+3,0
+d,1
+a,0
+14,1
+32,0
+14,1
+a,0
+2,1
+e,0
+4,1
+35,0
+5,1
+18,0
+2,1
+2,0
+6,1
+2,0
+2,1
+37,0
+2,1
+5,0
+2,1
+2,0
+6,1
+c,0
+2,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+4,1
+32,0
+1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+a,0
+4,1
+0
+1
+6,0
+1
+0
+6,1
+33,0
+9,1
+0
+1
+6,0
+1
+b,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+4,1
+32,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+c,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+36,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+a,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+33,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+b,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+4,1
+33,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+b,0
+2,1
+0
+1
+0
+8,1
+0
+1
+0
+4,1
+33,0
+1
+0
+5,1
+0
+1
+0
+8,1
+b,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+4,1
+33,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+b,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+33,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+d,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+36,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+a,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+4,1
+32,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+a,0
+4,1
+0
+1
+6,0
+1
+0
+6,1
+33,0
+9,1
+0
+1
+6,0
+1
+7db,0
+100 90 32
+ca,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+51,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+52,0
+8,1
+0
+1
+6,0
+1
+0
+2,1
+51,0
+5,1
+2,0
+2,1
+6,0
+2,1
+52,0
+1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+51,0
+5,1
+5e,0
+2,1
+3,0
+f,1
+50,0
+14,1
+51,0
+5,1
+5e,0
+1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+757,0
+2,1
+5,0
+2,1
+2,0
+6,1
+d,0
+4,1
+41,0
+1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+a,0
+1
+0
+3,1
+42,0
+9,1
+0
+1
+6,0
+1
+b,0
+1
+45,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+b,0
+1
+44,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+b,0
+1
+45,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+52,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+52,0
+1
+0
+5,1
+0
+1
+0
+8,1
+52,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+52,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+51,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+50,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+51,0
+9,1
+0
+1
+6,0
+1
+51,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+51,0
+2,1
+5,0
+2,1
+3,0
+4,1
+56,0
+5,1
+5c,0
+4,1
+3,0
+d,1
+50,0
+14,1
+53,0
+5,1
+5d,0
+2,1
+5,0
+2,1
+2,0
+6,1
+52,0
+1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+32,0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+1
+b,0
+9,1
+0
+1
+6,0
+1
+38,0
+1
+0
+9,1
+0
+1
+c,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+36,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+b,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+36,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+c,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+b,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+b,0
+1
+0
+5,1
+0
+1
+0
+8,1
+33,0
+6,1
+0
+1
+0
+5,1
+0
+1
+0
+3,1
+b,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+b,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+a,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+36,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+b,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+36,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+c,0
+9,1
+0
+1
+6,0
+1
+38,0
+1
+0
+9,1
+0
+1
+c,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+37,0
+2,1
+2,0
+5,1
+2,0
+2,1
+d,0
+2,1
+5,0
+2,1
+3,0
+4,1
+35,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+1
+d,0
+5,1
+47,0
+5,1
+10,0
+4,1
+3,0
+d,1
+32,0
+a,1
+3,0
+7,1
+a,0
+14,1
+32,0
+14,1
+d,0
+5,1
+47,0
+5,1
+11,0
+2,1
+5,0
+2,1
+2,0
+6,1
+34,0
+5,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+a,0
+1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+32,0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+1
+7da,0
+100 90 32
+ca,0
+9,1
+0
+1
+6,0
+1
+0
+1
+52,0
+5,1
+2,0
+2,1
+6,0
+2,1
+51,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+1
+52,0
+5,1
+5d,0
+3,1
+3,0
+e,1
+50,0
+14,1
+52,0
+5,1
+5d,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+1
+52,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+51,0
+9,1
+0
+1
+6,0
+1
+0
+1
+756,0
+1
+0
+9,1
+0
+1
+6,0
+1
+b,0
+1
+45,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+b,0
+1
+0
+1
+44,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+b,0
+1
+0
+1
+43,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+b,0
+1
+0
+1
+42,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+b,0
+1
+0
+1
+42,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+50,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+50,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+51,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+52,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+51,0
+1
+0
+9,1
+0
+1
+6,0
+1
+50,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+1
+52,0
+2,1
+5,0
+2,1
+3,0
+4,1
+56,0
+5,1
+5b,0
+5,1
+3,0
+c,1
+50,0
+14,1
+54,0
+5,1
+5d,0
+2,1
+5,0
+2,1
+2,0
+6,1
+51,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+1
+50,0
+1
+0
+9,1
+0
+1
+6,0
+1
+51,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+33,0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+b,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+33,0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+a,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+b,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+b,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+32,0
+7,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+a,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+b,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+c,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+33,0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+b,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+33,0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+a,0
+1
+0
+9,1
+0
+1
+6,0
+1
+38,0
+1
+0
+9,1
+0
+1
+b,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+1
+38,0
+2,1
+2,0
+5,1
+2,0
+2,1
+d,0
+2,1
+5,0
+2,1
+3,0
+4,1
+35,0
+4,1
+3,0
+2,1
+5,0
+2,1
+11,0
+5,1
+47,0
+5,1
+f,0
+5,1
+3,0
+c,1
+32,0
+b,1
+3,0
+6,1
+a,0
+14,1
+32,0
+14,1
+e,0
+5,1
+47,0
+5,1
+11,0
+2,1
+5,0
+2,1
+2,0
+6,1
+33,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+a,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+1
+33,0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+b,0
+1
+0
+9,1
+0
+1
+6,0
+1
+38,0
+1
+0
+9,1
+0
+1
+c,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+33,0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+7da,0
+100 90 32
+ca,0
+4,1
+b,0
+5,1
+58,0
+c,1
+50,0
+e,1
+56,0
+2,1
+6,0
+4,1
+2,0
+6,1
+52,0
+9,1
+0
+8,1
+50,0
+4,1
+4,0
+9,1
+57,0
+4,1
+3,0
+4,1
+2,0
+3,1
+50,0
+5,1
+a,0
+5,1
+50,0
+1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+57,0
+4,1
+a,0
+4,1
+757,0
+1
+5,0
+4,1
+3,0
+4,1
+2,0
+1
+a,0
+4,1
+43,0
+6,1
+a,0
+3,1
+a,0
+1
+45,0
+3,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+f,0
+3,1
+45,0
+4,1
+a,0
+3,1
+a,0
+1
+45,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+b,0
+3,1
+42,0
+6,1
+b,0
+3,1
+5a,0
+a,1
+50,0
+10,1
+54,0
+4,1
+6,0
+4,1
+2,0
+4,1
+54,0
+9,1
+0
+6,1
+50,0
+6,1
+4,0
+9,1
+51,0
+1
+5,0
+4,1
+3,0
+4,1
+2,0
+1
+51,0
+6,1
+a,0
+3,1
+50,0
+3,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+57,0
+4,1
+a,0
+3,1
+50,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+50,0
+6,1
+b,0
+3,1
+5a,0
+a,1
+50,0
+10,1
+54,0
+4,1
+6,0
+4,1
+2,0
+4,1
+54,0
+9,1
+0
+6,1
+38,0
+9,1
+0
+4,1
+a,0
+6,1
+4,0
+9,1
+33,0
+8,1
+4,0
+8,1
+a,0
+1
+5,0
+4,1
+3,0
+4,1
+2,0
+1
+32,0
+3,1
+5,0
+4,1
+3,0
+4,1
+c,0
+6,1
+a,0
+3,1
+35,0
+6,1
+a,0
+1
+a,0
+3,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+36,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+f,0
+4,1
+a,0
+3,1
+37,0
+4,1
+a,0
+1
+a,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+32,0
+4,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+1
+a,0
+6,1
+b,0
+3,1
+32,0
+8,1
+b,0
+1
+14,0
+a,1
+3e,0
+8,1
+a,0
+10,1
+36,0
+12,1
+c,0
+4,1
+6,0
+4,1
+2,0
+4,1
+32,0
+6,1
+6,0
+4,1
+2,0
+2,1
+e,0
+9,1
+0
+6,1
+38,0
+9,1
+0
+4,1
+a,0
+6,1
+4,0
+9,1
+33,0
+8,1
+4,0
+8,1
+a,0
+1
+5,0
+4,1
+3,0
+4,1
+2,0
+1
+32,0
+3,1
+5,0
+4,1
+3,0
+4,1
+c,0
+6,1
+a,0
+3,1
+35,0
+6,1
+a,0
+1
+a,0
+3,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+36,0
+5,1
+4,0
+3,1
+0
+1
+0
+1
+0
+1
+f,0
+4,1
+a,0
+3,1
+37,0
+4,1
+a,0
+1
+a,0
+2,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+3,1
+32,0
+4,1
+5,0
+3,1
+0
+1
+0
+1
+0
+1
+0
+1
+a,0
+6,1
+b,0
+3,1
+32,0
+8,1
+b,0
+1
+14,0
+a,1
+3e,0
+8,1
+7da,0
+100 90 32
+cc,0
+5,1
+3,0
+6,1
+54,0
+1
+6,0
+5,1
+4,0
+3,1
+53,0
+4,1
+6,0
+4,1
+54,0
+1
+0
+9,1
+5,0
+3,1
+53,0
+d,1
+55,0
+7,1
+c,0
+1
+50,0
+1
+6,0
+d,1
+51,0
+c,1
+6,0
+1
+50,0
+7,1
+6,0
+7,1
+50,0
+4,1
+3,0
+8,1
+4,0
+1
+756,0
+3,1
+6,0
+b,1
+d,0
+2,1
+41,0
+1
+2,0
+c,1
+f,0
+5,1
+42,0
+8,1
+6,0
+5,1
+a,0
+3,1
+43,0
+6,1
+3,0
+8,1
+10,0
+2,1
+41,0
+4,1
+2,0
+6,1
+5,0
+3,1
+a,0
+5,1
+45,0
+5,1
+3,0
+6,1
+52,0
+1
+0
+1
+6,0
+5,1
+4,0
+2,1
+54,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+2,1
+54,0
+d,1
+53,0
+9,1
+5b,0
+3,1
+6,0
+b,1
+50,0
+1
+2,0
+c,1
+56,0
+8,1
+6,0
+5,1
+50,0
+6,1
+3,0
+8,1
+53,0
+4,1
+2,0
+6,1
+5,0
+3,1
+54,0
+5,1
+3,0
+6,1
+52,0
+1
+0
+1
+6,0
+5,1
+4,0
+2,1
+54,0
+4,1
+6,0
+4,1
+52,0
+1
+0
+1
+0
+9,1
+5,0
+2,1
+54,0
+d,1
+3b,0
+d,1
+b,0
+9,1
+3d,0
+b,1
+13,0
+3,1
+6,0
+b,1
+32,0
+5,1
+6,0
+9,1
+a,0
+1
+2,0
+c,1
+37,0
+3,1
+2,0
+c,1
+e,0
+8,1
+6,0
+5,1
+32,0
+2,1
+0
+8,1
+6,0
+3,1
+a,0
+6,1
+3,0
+8,1
+35,0
+8,1
+3,0
+8,1
+b,0
+4,1
+2,0
+6,1
+5,0
+3,1
+34,0
+4,1
+2,0
+6,1
+5,0
+1
+e,0
+5,1
+3,0
+6,1
+3a,0
+5,1
+3,0
+6,1
+a,0
+1
+0
+1
+6,0
+5,1
+4,0
+2,1
+32,0
+1
+0
+1
+0
+1
+6,0
+5,1
+12,0
+4,1
+6,0
+4,1
+3a,0
+4,1
+6,0
+4,1
+a,0
+1
+0
+1
+0
+9,1
+5,0
+2,1
+32,0
+1
+0
+1
+0
+1
+0
+9,1
+13,0
+d,1
+3b,0
+d,1
+b,0
+9,1
+3d,0
+b,1
+13,0
+3,1
+6,0
+b,1
+32,0
+5,1
+6,0
+9,1
+a,0
+1
+2,0
+c,1
+37,0
+3,1
+2,0
+c,1
+e,0
+8,1
+6,0
+5,1
+32,0
+2,1
+0
+8,1
+6,0
+3,1
+a,0
+6,1
+3,0
+8,1
+35,0
+8,1
+3,0
+8,1
+b,0
+4,1
+2,0
+6,1
+5,0
+3,1
+34,0
+4,1
+2,0
+6,1
+5,0
+1
+e,0
+5,1
+3,0
+6,1
+3a,0
+5,1
+3,0
+6,1
+a,0
+1
+0
+1
+6,0
+5,1
+4,0
+2,1
+32,0
+1
+0
+1
+0
+1
+6,0
+5,1
+7de,0
+100 90 32
+ca,0
+2,1
+0
+1
+6,0
+1
+0
+8,1
+52,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+51,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+51,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+53,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+52,0
+1
+0
+8,1
+0
+1
+0
+5,1
+52,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+52,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+52,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+52,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+757,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+4,1
+a,0
+1
+0
+1
+43,0
+4,1
+0
+1
+6,0
+1
+0
+6,1
+b,0
+1
+0
+2,1
+41,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+4,1
+b,0
+2,1
+45,0
+2,1
+3,0
+4,1
+3,0
+2,1
+11,0
+2,1
+41,0
+2,1
+e,0
+4,1
+51,0
+10,1
+53,0
+14,1
+50,0
+2,1
+e,0
+4,1
+52,0
+2,1
+2,0
+6,1
+2,0
+2,1
+54,0
+2,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+4,1
+50,0
+4,1
+0
+1
+6,0
+1
+0
+6,1
+50,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+4,1
+52,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+54,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+50,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+4,1
+50,0
+2,1
+0
+1
+0
+8,1
+0
+1
+0
+4,1
+50,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+4,1
+50,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+52,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+54,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+4,1
+50,0
+4,1
+0
+1
+6,0
+1
+0
+6,1
+33,0
+9,1
+0
+1
+6,0
+1
+b,0
+2,1
+2,0
+2,1
+6,0
+2,1
+2,0
+4,1
+32,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+c,0
+2,1
+3,0
+4,1
+3,0
+2,1
+37,0
+2,1
+5,0
+2,1
+3,0
+4,1
+d,0
+2,1
+e,0
+4,1
+35,0
+5,1
+17,0
+10,1
+35,0
+4,1
+3,0
+d,1
+a,0
+14,1
+32,0
+14,1
+a,0
+2,1
+e,0
+4,1
+35,0
+5,1
+18,0
+2,1
+2,0
+6,1
+2,0
+2,1
+37,0
+2,1
+5,0
+2,1
+2,0
+6,1
+c,0
+2,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+2,0
+4,1
+32,0
+1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+a,0
+4,1
+0
+1
+6,0
+1
+0
+6,1
+33,0
+9,1
+0
+1
+6,0
+1
+b,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+4,1
+32,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+c,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+36,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+a,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+33,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+b,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+4,1
+33,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+b,0
+2,1
+0
+1
+0
+8,1
+0
+1
+0
+4,1
+33,0
+1
+0
+5,1
+0
+1
+0
+8,1
+b,0
+2,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+0
+4,1
+33,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+b,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+33,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+d,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+36,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+a,0
+2,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+2,0
+4,1
+32,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+a,0
+4,1
+0
+1
+6,0
+1
+0
+6,1
+33,0
+9,1
+0
+1
+6,0
+1
+7db,0
+100 90 32
+ca,0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+0
+1
+51,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+52,0
+8,1
+0
+1
+6,0
+1
+0
+2,1
+51,0
+5,1
+2,0
+2,1
+6,0
+2,1
+52,0
+1
+5,0
+2,1
+3,0
+4,1
+3,0
+2,1
+51,0
+5,1
+5e,0
+2,1
+3,0
+f,1
+50,0
+14,1
+51,0
+5,1
+5e,0
+1
+5,0
+2,1
+2,0
+6,1
+2,0
+2,1
+757,0
+2,1
+5,0
+2,1
+2,0
+6,1
+d,0
+4,1
+41,0
+1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+a,0
+1
+0
+3,1
+42,0
+9,1
+0
+1
+6,0
+1
+b,0
+1
+45,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+b,0
+1
+44,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+b,0
+1
+45,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+52,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+52,0
+1
+0
+5,1
+0
+1
+0
+8,1
+52,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+52,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+51,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+50,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+51,0
+9,1
+0
+1
+6,0
+1
+51,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+51,0
+2,1
+5,0
+2,1
+3,0
+4,1
+56,0
+5,1
+5c,0
+4,1
+3,0
+d,1
+50,0
+14,1
+53,0
+5,1
+5d,0
+2,1
+5,0
+2,1
+2,0
+6,1
+52,0
+1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+32,0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+1
+b,0
+9,1
+0
+1
+6,0
+1
+38,0
+1
+0
+9,1
+0
+1
+c,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+36,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+b,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+36,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+c,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+b,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+b,0
+1
+0
+5,1
+0
+1
+0
+8,1
+33,0
+6,1
+0
+1
+0
+5,1
+0
+1
+0
+3,1
+b,0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+b,0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+a,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+0
+1
+36,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+b,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+0
+1
+36,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+c,0
+9,1
+0
+1
+6,0
+1
+38,0
+1
+0
+9,1
+0
+1
+c,0
+1
+2,0
+5,1
+2,0
+2,1
+6,0
+2,1
+37,0
+2,1
+2,0
+5,1
+2,0
+2,1
+d,0
+2,1
+5,0
+2,1
+3,0
+4,1
+35,0
+4,1
+3,0
+2,1
+5,0
+2,1
+3,0
+1
+d,0
+5,1
+47,0
+5,1
+10,0
+4,1
+3,0
+d,1
+32,0
+a,1
+3,0
+7,1
+a,0
+14,1
+32,0
+14,1
+d,0
+5,1
+47,0
+5,1
+11,0
+2,1
+5,0
+2,1
+2,0
+6,1
+34,0
+5,1
+2,0
+2,1
+5,0
+2,1
+2,0
+2,1
+a,0
+1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+32,0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+1
+7da,0
+100 90 32
+ca,0
+9,1
+0
+1
+6,0
+1
+0
+1
+52,0
+5,1
+2,0
+2,1
+6,0
+2,1
+51,0
+2,1
+5,0
+2,1
+3,0
+4,1
+3,0
+1
+52,0
+5,1
+5d,0
+3,1
+3,0
+e,1
+50,0
+14,1
+52,0
+5,1
+5d,0
+2,1
+5,0
+2,1
+2,0
+6,1
+2,0
+1
+52,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+2,1
+51,0
+9,1
+0
+1
+6,0
+1
+0
+1
+756,0
+1
+0
+9,1
+0
+1
+6,0
+1
+b,0
+1
+45,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+b,0
+1
+0
+1
+44,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+b,0
+1
+0
+1
+43,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+b,0
+1
+0
+1
+42,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+b,0
+1
+0
+1
+42,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+50,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+50,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+51,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+52,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+51,0
+1
+0
+9,1
+0
+1
+6,0
+1
+50,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+1
+52,0
+2,1
+5,0
+2,1
+3,0
+4,1
+56,0
+5,1
+5b,0
+5,1
+3,0
+c,1
+50,0
+14,1
+54,0
+5,1
+5d,0
+2,1
+5,0
+2,1
+2,0
+6,1
+51,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+1
+50,0
+1
+0
+9,1
+0
+1
+6,0
+1
+51,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+33,0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+b,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+33,0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+a,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+b,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+b,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+8,1
+32,0
+7,1
+0
+1
+0
+5,1
+0
+1
+0
+2,1
+a,0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+0
+5,1
+0
+1
+0
+1
+b,0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+0
+1
+2,0
+1
+0
+1
+33,0
+1
+2,0
+1
+0
+1
+0
+1
+2,0
+3,1
+2,0
+1
+0
+1
+c,0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+4,0
+1
+33,0
+1
+4,0
+1
+0
+1
+0
+1
+5,0
+1
+0
+1
+0
+1
+b,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+33,0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+a,0
+1
+0
+9,1
+0
+1
+6,0
+1
+38,0
+1
+0
+9,1
+0
+1
+b,0
+2,1
+2,0
+5,1
+2,0
+2,1
+6,0
+1
+38,0
+2,1
+2,0
+5,1
+2,0
+2,1
+d,0
+2,1
+5,0
+2,1
+3,0
+4,1
+35,0
+4,1
+3,0
+2,1
+5,0
+2,1
+11,0
+5,1
+47,0
+5,1
+f,0
+5,1
+3,0
+c,1
+32,0
+b,1
+3,0
+6,1
+a,0
+14,1
+32,0
+14,1
+e,0
+5,1
+47,0
+5,1
+11,0
+2,1
+5,0
+2,1
+2,0
+6,1
+33,0
+6,1
+2,0
+2,1
+5,0
+2,1
+2,0
+1
+a,0
+2,1
+2,0
+5,1
+2,0
+2,1
+0
+4,1
+0
+1
+33,0
+4,1
+0
+2,1
+2,0
+5,1
+2,0
+2,1
+b,0
+1
+0
+9,1
+0
+1
+6,0
+1
+38,0
+1
+0
+9,1
+0
+1
+c,0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+4,0
+1
+33,0
+1
+4,0
+1
+0
+1
+2,0
+5,1
+2,0
+1
+0
+1
+7da,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/fllrctngls/fllrctngls.m b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/fllrctngls.m
new file mode 100644
index 000000000..f6537ad90
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/fllrctngls/fllrctngls.m
@@ -0,0 +1,159 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFillRectangles CH06
+void
+
+Display *display = Dsp;
+Drawable d;
+GC gc;
+XRectangle *rectangles = defrects;
+int nrectangles = sizeof(defrects)/sizeof(XRectangle);
+>>EXTERN
+
+static XRectangle defrects[] = {
+ {2, 2, 20, 10},
+ {30, 30, 5, 5},
+ {0, 30, 20, 40},
+ {70, 50, 20, 20},
+};
+>>ASSERTION Good A
+A call to xname fills
+.A nrectangles
+rectangles
+specified by
+.A rectangles
+in the drawable
+.A d .
+>>STRATEGY
+Draw rectangles
+Pixmap verify.
+>>CODE
+XVisualInfo *vp;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+
+ XCALL;
+
+ PIXCHECK(display, d);
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION def
+A call to xname fills each rectangle as if a four-point
+.S FillPolygon
+protocol request were specified for each rectangle in the order
+[x, y], [x+width, y], [x+width, y+height], [x, y+height].
+>>ASSERTION Good A
+A call to xname does not draw a pixel more than once in any given rectangle.
+>>STRATEGY
+Set GC function to xor.
+Draw rectangles
+Check that rectangles have no holes.
+>>CODE
+XVisualInfo *vp;
+XRectangle *rp;
+struct area area;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+
+ XCALL;
+
+ for (rp = rectangles; rp < &rectangles[nrectangles]; rp++) {
+ setarea(&area, rp->x, rp->y, rp->width, rp->height);
+ if (checkarea(display, d, &area, W_FG, 0, CHECK_IN))
+ CHECK;
+ else {
+ report("Pixels drawn twice in rectangle at (%d, %d)", rp->x, rp->y);
+ FAIL;
+ }
+ }
+ }
+ CHECKPASS(nrectangles*nvinf());
+
+>>ASSERTION Good A
+When rectangles intersect, then the intersecting pixels are
+drawn multiple times.
+>>STRATEGY
+Set GC function to GXxor.
+Draw intersecting rectangles.
+Check that the overlapping region is all unset.
+>>CODE
+XVisualInfo *vp;
+static XRectangle recs[] = {
+ {0, 0, 60, 40},
+ {10, 10, 60, 40},
+};
+struct area area;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFunction(display, gc, GXxor);
+ rectangles = recs;
+ nrectangles = 2;
+
+ XCALL;
+
+ setarea(&area, 10, 10, 50, 30);
+ if (checkarea(display, d, &area, W_BG, 0, CHECK_IN))
+ CHECK;
+ else {
+ report("Intersecting area was not all drawn twice");
+ FAIL;
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M fill-style ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin ,
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground ,
+.M background ,
+.M tile ,
+.M stipple ,
+.M tile-stipple-x-origin
+and
+.M tile-stipple-y-origin
+are used.
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>># HISTORY steve Completed Written in new format and style
+>># HISTORY kieron Completed Global and pixel checking to do - 19/11/90
+>># HISTORY dave Completed Final checking to do - 21/11/90
diff --git a/xc/test/xsuite/xtest/tset/CH06/frcrsr/frcrsr.m b/xc/test/xsuite/xtest/tset/CH06/frcrsr/frcrsr.m
new file mode 100644
index 000000000..7695d8f34
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/frcrsr/frcrsr.m
@@ -0,0 +1,129 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFreeCursor CH06
+void
+XFreeCursor(display, cursor)
+Display *display = Dsp;
+Cursor cursor;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>ASSERTION Good B 1
+When another resource ID references the
+.A cursor ,
+then a call to xname
+deletes the association between the
+.A cursor
+resource ID
+and the specified cursor.
+>>STRATEGY
+Create cursor and cursor2 as same cursors.
+Create window.
+Define cursor for window.
+Call XFreeCursor with cursor.
+Call XFreeCursor with cursor2.
+>>CODE
+Cursor cursor2;
+Window w;
+XVisualInfo *vp;
+unsigned int shape;
+
+
+ /* UNSUPPORTED is not allowed */
+ shape = config.fontcursor_good;
+ if (shape == -1) {
+ delete("A value of UNSUPPORTED is not allowed for XT_FONTCURSOR_GOOD");
+ return;
+ }
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+/* Create cursor and cursor2 as same cursors. */
+ cursor = XCreateFontCursor(display, shape);
+ cursor2 = XCreateFontCursor(display, shape);
+
+/* Create window. */
+ w = makewin(display, vp);
+
+/* Define cursor for window. */
+ XDefineCursor(display, w, cursor);
+
+/* Call XFreeCursor with cursor. */
+ XCALL;
+ if (geterr() == Success)
+ CHECK;
+ else
+ FAIL;
+
+/* Call XFreeCursor with cursor2. */
+ cursor = cursor2;
+ XCALL;
+
+ if (geterr() == Success)
+ CHECK;
+ else
+ FAIL;
+ }
+
+ CHECKUNTESTED(2*nvinf());
+>>ASSERTION Good B 1
+When no other resource ID references the
+.A cursor ,
+then a call to xname
+deletes the association between the
+.A cursor
+resource ID
+and the specified cursor,
+and the cursor storage is freed.
+>>STRATEGY
+Create cursor and cursor2 as same cursors.
+Call XFreeCursor with cursor.
+Call XFreeCursor with cursor2.
+>>CODE
+Cursor cursor2;
+unsigned int shape;
+
+ /* UNSUPPORTED is not allowed */
+ shape = config.fontcursor_good;
+ if (shape == -1) {
+ delete("A value of UNSUPPORTED is not allowed for XT_FONTCURSOR_GOOD");
+ return;
+ }
+
+/* Create cursor and cursor2 as same cursors. */
+ cursor = XCreateFontCursor(display, shape);
+ cursor2 = XCreateFontCursor(display, shape);
+
+/* Call XFreeCursor with cursor. */
+ XCALL;
+ if (geterr() == Success)
+ CHECK;
+ else
+ FAIL;
+
+/* Call XFreeCursor with cursor2. */
+ cursor = cursor2;
+ XCALL;
+
+ if (geterr() == Success)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKUNTESTED(2);
+>>ASSERTION Bad A
+.ER BadCursor
+>># HISTORY kieron Completed Check format and pass ac
+>>#HISTORY peterc Completed Wrote STRATEGY and CODE
diff --git a/xc/test/xsuite/xtest/tset/CH06/frfnt/frfnt.m b/xc/test/xsuite/xtest/tset/CH06/frfnt/frfnt.m
new file mode 100644
index 000000000..fc6dc2c54
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/frfnt/frfnt.m
@@ -0,0 +1,118 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFreeFont CH06
+void
+
+Display *display = Dsp;
+XFontStruct *font_struct;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>EXTERN
+#define FNAME "xtfont1"
+#define TEXTSTRING "AbyZ?@"
+>>ASSERTION Good A
+When another resource references the font with ID
+.M fid
+in the
+.A font_struct
+argument,
+then a call to xname frees all storage associated with the
+.A font_struct
+structure and destroys the association between the Font ID and the font.
+>>STRATEGY
+Only the part about destroying the association between Font ID and font
+is testable.
+Create font_struct.
+Save font ID from font_struct.
+Call XFreeFont.
+Create scratch drawable and gc.
+Set font into gc.
+Attempt to draw some text.
+Verify that a BadFont error occurred.
+>>CODE
+Font font;
+Drawable d;
+GC gc;
+
+ font_struct = XLoadQueryFont(display, FNAME);
+ if (isdeleted() || font_struct == NULL) {
+ delete("Failed to load %s, check that xtest fonts are installed",FNAME);
+ return;
+ }
+ font = font_struct->fid;
+
+ XCALL;
+
+ /* Now try to use the font, should get BadFont */
+ d = defdraw(display, VI_WIN_PIX);
+ gc = makegc(display, d);
+
+ if (isdeleted())
+ return;
+
+ /*
+ * Since gc's can be cached then error can occur anytime between the
+ * XSetFont and the XSync
+ */
+ reseterr();
+ XSetErrorHandler(error_status);
+ XSetFont(display, gc, font);
+ XDrawString(display, d, gc, 30, 30, TEXTSTRING, strlen(TEXTSTRING));
+ XSync(display, False);
+ XSetErrorHandler(unexp_err);
+
+ if (geterr() == BadFont) {
+ PASS;
+ } else {
+ report("Association between Font ID and font was not destroyed");
+ FAIL;
+ }
+
+>>ASSERTION Good B 3
+When no other resource ID references the font with ID
+.M fid
+in the
+.A font_struct
+argument,
+then a call to xname frees all storage associated with the
+.A font_struct
+structure, destroys the association between the Font ID and the font
+and that font is unloaded.
+>>ASSERTION Bad A
+.ER BadFont bad-font
+>>STRATEGY
+Call XLoadQueryFont to get font_struct.
+Unload the font using the font ID.
+Call XFreeFont.
+Verify that a BadFont error is generated.
+>>CODE BadFont
+
+ font_struct = XLoadQueryFont(display, FNAME);
+ if (isdeleted() || font_struct == NULL) {
+ delete("Failed to load %s, check that xtest fonts are installed",FNAME);
+ return;
+ }
+ XUnloadFont(display, font_struct->fid);
+
+ XCALL;
+
+ if (geterr() == BadFont)
+ PASS;
+ else
+ FAIL;
+
+>>#HISTORY Kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/frfntinf/frfntinf.m b/xc/test/xsuite/xtest/tset/CH06/frfntinf/frfntinf.m
new file mode 100644
index 000000000..9a05b2a46
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/frfntinf/frfntinf.m
@@ -0,0 +1,86 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFreeFontInfo CH06
+void
+
+char **names;
+XFontStruct *free_info;
+int actual_count;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>ASSERTION Good B 3
+>># NOTE kieron Untestable, really. No font IDs or other server
+>># resident stuff is affected.
+>># NOTE kieron The names and info *must* have been allocated
+>># in the same way as by XListFontsWithInfo. More
+>># accurately the names *cannot* have been returned by
+>># XListFontNames or the XFree's won't match the Xalloc's
+>># and subsequent, untestable and unpredictable, nastiness
+>># will occur.
+When
+.A names
+is a list of font names and
+.A free_info
+is a pointer to the font information
+both returned by a call to
+.S XListFontsWithInfo ,
+then a call to xname frees
+.A names ,
+the font names specified by
+.A names
+and
+.A free_info .
+>>STRATEGY
+Get names and free_info with XListFontsWithInfo.
+Call XFreeFontInfo.
+Result is UNTESTED, unless an error should occur.
+>>CODE
+
+ names = XListFontsWithInfo(Dsp, "xtfont?", 4, &actual_count, &free_info);
+ if (names == NULL) {
+ delete("No xtest fonts found, check that they have been installed");
+ return;
+ } else
+ CHECK;
+
+ XCALL;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 3
+When names is NULL and free_info is a pointer to the font information
+structure returned by an Xlib routine, then a call to xname frees
+the storage associated with free_info.
+>>STRATEGY
+Get font information with XLoadQueryFont.
+Call XFreeFontInfo.
+Result is UNTESTED, unless some error should occur.
+>>CODE
+XFontStruct *fsp;
+
+ fsp = XLoadQueryFont(Dsp, "xtfont0");
+ if (fsp == NULL) {
+ delete("Could not open xtfont0, check that xtest fonts are installed");
+ return;
+ }
+
+ names = NULL;
+ free_info = fsp;
+ actual_count = 1;
+ XCALL;
+
+ tet_result(TET_UNTESTED);
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/frfntnms/frfntnms.m b/xc/test/xsuite/xtest/tset/CH06/frfntnms/frfntnms.m
new file mode 100644
index 000000000..6eba7faef
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/frfntnms/frfntnms.m
@@ -0,0 +1,85 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFreeFontNames CH06
+void
+
+char **list;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>ASSERTION Good B 3
+>># As resolved by MIT, this test is now done using
+>># the return value from XListFonts and XListFontsWithInfo.
+>>#
+>># Some X11R4 implementations may give memory faults when the return
+>># value of XListFontsWithInfo is passed to XFreeFontNames, but this
+>># is an implementation fault which should be fixed in X11R5.
+>>#
+>># DPJ Cater 5/4/91
+When
+.A list
+is a list of font names
+returned by a call to XListFonts,
+then a call to xname
+frees
+.A list
+and the font names specified by
+.A list .
+>>STRATEGY
+Get list of names with XListFonts.
+Call XFreeFontNames to free list of names.
+Verify that no error occurred.
+Get list of names with XListFontsWithInfo.
+Call XFreeFontNames to free list of names.
+Verify that no error occurred.
+Result is UNTESTED, unless an error should occur.
+>>CODE
+int count;
+XFontStruct *info;
+
+ list = XListFonts(Dsp, "xtfont?", 4, &count);
+ if (list == NULL) {
+ delete("XListFonts failed");
+ return;
+ }
+
+ XCALL;
+
+ if (geterr() == Success)
+ CHECK;
+ else {
+ report("Got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ }
+
+ list = XListFontsWithInfo(Dsp, "xtfont?", 4, &count, &info);
+ if (list == NULL) {
+ delete("XListFontsWithInfo failed");
+ return;
+ }
+
+ XCALL;
+
+ if (geterr() == Success)
+ CHECK;
+ else {
+ report("Got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ }
+
+ CHECKUNTESTED(2);
+
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/frfntpth/frfntpth.m b/xc/test/xsuite/xtest/tset/CH06/frfntpth/frfntpth.m
new file mode 100644
index 000000000..608c2b060
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/frfntpth/frfntpth.m
@@ -0,0 +1,48 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFreeFontPath CH06
+void
+
+char **list;
+>>ASSERTION Good B 3
+>># NOTE kieron Untestable.
+When
+.A list
+is an array of strings allocated by a call to
+.S XGetFontPath ,
+then a call to xname frees
+.A list
+and the strings specified by
+.A list .
+>>STRATEGY
+Touch test.
+Get a font path with XGetFontPath.
+Call XFreeFontPath.
+Result is UNTESTED.
+>>CODE
+int n;
+
+ list = XGetFontPath(Dsp, &n);
+ if (list == NULL || isdeleted()) {
+ delete("Could not get font path to free");
+ return;
+ }
+
+ XCALL;
+
+ tet_result(TET_UNTESTED);
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/gtfntprprt/gtfntprprt.m b/xc/test/xsuite/xtest/tset/CH06/gtfntprprt/gtfntprprt.m
new file mode 100644
index 000000000..ed563c200
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/gtfntprprt/gtfntprprt.m
@@ -0,0 +1,151 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetFontProperty CH06
+Bool
+
+XFontStruct *font_struct;
+Atom atom;
+unsigned long *value_return;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>EXTERN
+#include "Xatom.h"
+>>ASSERTION Good A
+When the property specified by the
+.A atom
+argument
+is defined,
+then a call to xname returns
+the value of the property
+.A atom
+in the
+.S XFontStruct
+named by the argument
+.A font_struct
+and returns
+.S True .
+>>STRATEGY
+Retrieve properties that are known to be defined for the test fonts.
+Verify that True is returned.
+Verify that the value of the properties are correct.
+>>CODE
+unsigned long val;
+Bool ret;
+int i;
+XFontProp *fprop;
+extern XFontStruct xtfont0; /* Known good version */
+extern char *xtfont0cpright; /* Known good version */
+
+ font_struct = XLoadQueryFont(Dsp, "xtfont0");
+ if (font_struct == NULL || isdeleted()) {
+ delete("Could not load font, check that xtest fonts are installed");
+ return;
+ }
+
+ value_return = &val;
+
+ for (i = 0; i < xtfont0.n_properties; i++) {
+ fprop = &xtfont0.properties[i];
+ atom = fprop->name;
+
+ ret = XCALL;
+ if (ret != True) {
+ report("call did not return True for atom %s", atomname(atom));
+ FAIL;
+ continue;
+ } else
+ CHECK;
+
+ if (atom == XA_COPYRIGHT) {
+ char *crstr;
+
+ XSetErrorHandler(error_status);
+ reseterr();
+ crstr = XGetAtomName(Dsp, val);
+ XSetErrorHandler(unexp_err);
+ switch (geterr()) {
+ case Success:
+ break;
+ case BadAtom:
+ report("copyright string atom did not exist");
+ FAIL;
+ break;
+ default:
+ delete("Call to XGetAtomName failed");
+ return;
+ }
+
+ if (strcmp(crstr, xtfont0cpright) == 0)
+ CHECK;
+ else {
+ report("XA_COPYRIGHT was '%s',", crstr);
+ report(" expecting '%s'", xtfont0cpright);
+ FAIL;
+ }
+
+ } else {
+ /* Compare value */
+ if (fprop->card32 == val)
+ CHECK;
+ else {
+ report("value of %s was %d, expecting %d",
+ atomname(atom), val, fprop->card32);
+ FAIL;
+ }
+ }
+ }
+ CHECKPASS(2*xtfont0.n_properties);
+
+>>ASSERTION Good A
+>># NOTE kieron Have to have defined fonts (bdf format)
+>># loaded as the pre-defined properties (in X11/Xatom.h)
+>># are likely, but not guaranteed, to be present on any
+>># server.
+When the property specified by the
+.A atom
+argument
+is not defined,
+then a call to xname returns
+.S False .
+>>STRATEGY
+Use the XA_RGB_DEFAULT_MAP atom which is not defined in the xtest fonts,
+(and is unlikely to be defined in a font..)
+Verify that False is returned.
+>>CODE
+unsigned long val;
+Bool ret;
+int i;
+extern XFontStruct xtfont0; /* Known good version */
+
+ font_struct = XLoadQueryFont(Dsp, "xtfont0");
+ if (font_struct == NULL || isdeleted()) {
+ delete("Could not load font, check that xtest fonts are installed");
+ return;
+ }
+
+ value_return = &val;
+
+ atom = XA_RGB_DEFAULT_MAP;
+
+ ret = XCALL;
+
+ if (ret != False)
+ FAIL;
+ else
+ PASS;
+
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/gtfntpth/gtfntpth.m b/xc/test/xsuite/xtest/tset/CH06/gtfntpth/gtfntpth.m
new file mode 100644
index 000000000..0f1c73d60
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/gtfntpth/gtfntpth.m
@@ -0,0 +1,66 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetFontPath CH06
+char **
+
+Display *display = Dsp;
+int *npaths_return = &npaths;
+>>EXTERN
+int npaths;
+>>ASSERTION Good A
+>># NOTE kieron names are impl. dependent but should match those set
+>># by XSetFontPath....
+A call to xname
+allocates and returns an array of strings containing the search path
+for font lookup and returns the number of strings in the
+.A npaths_return
+argument.
+>>STRATEGY
+Touch test - the ability to read back the path that was set is checked
+ in XSetFont.
+Call XGetFontPath.
+Verify that return is non-NULL.
+Verify that npaths_return is non-zero.
+Verify that there are at least that many strings.
+>>CODE
+char **paths;
+int i;
+
+ /*
+ * Assuming that the path is set to something here.
+ */
+ paths = XCALL;
+ if (paths == NULL) {
+ report("return value was NULL");
+ FAIL;
+ } else
+ CHECK;
+
+ if (npaths == 0) {
+ report("npaths_return was 0");
+ FAIL;
+ } else
+ CHECK;
+
+ for (i = 0; i < npaths; i++) {
+ trace("got path component '%s'", paths[i]);
+ }
+
+ CHECKPASS(2);
+
+
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/gtimg/gtimg.m b/xc/test/xsuite/xtest/tset/CH06/gtimg/gtimg.m
new file mode 100644
index 000000000..6af51ba20
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/gtimg/gtimg.m
@@ -0,0 +1,1014 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetImage CH06
+XImage *
+XGetImage(display, d, x, y, width, height, plane_mask, format)
+Display *display = Dsp;
+Drawable d;
+int x = 0;
+int y = 0;
+unsigned int width = 1;
+unsigned int height = 1;
+long plane_mask = AllPlanes;
+int format = ZPixmap;
+>>EXTERN
+/*
+ * pre_xcall() - set globals
+ */
+static void
+pre_xcall(win, ap, p, f)
+Drawable win;
+struct area *ap;
+long p;
+int f;
+{
+ d = win;
+ x = ap->x;
+ y = ap->y;
+ width = ap->width;
+ height = ap->height;
+ plane_mask = p;
+ format = f;
+}
+
+/*
+ * plane masks for plane mask-related tests.
+ * exercises each plane individually and various combinations of
+ * planes.
+ */
+static long planelist[] = {
+ 0,
+ 1<<0,
+ 1<<1,
+ 1<<2,
+ 1<<3,
+ 1<<4,
+ 1<<5,
+ 1<<6,
+ 1<<7,
+ 1<<8,
+ 1<<9,
+ 1<<10,
+ 1<<11,
+ 1<<12,
+ 1<<13,
+ 1<<14,
+ 1<<15,
+ 1<<16,
+ 1<<17,
+ 1<<18,
+ 1<<19,
+ 1<<20,
+ 1<<21,
+ 1<<22,
+ 1<<23,
+ 1<<24,
+ 1<<25,
+ 1<<26,
+ 1<<27,
+ 1<<28,
+ 1<<29,
+ 1<<30,
+ 1<<31,
+ 0x23, 0xf8, 0x765, 0x3987, 0x129078, 0x23567193
+};
+
+/*
+ * This list contains a number of areas suitable for getting
+ * from the drawable.
+ * This list need not contain as many members as the planelist.
+ * The list is treated as if it were circular.
+ */
+static struct area arealist[] = {
+ {0, 0, W_STDWIDTH, W_STDHEIGHT},
+ {W_STDWIDTH/2, W_STDHEIGHT/2, W_STDWIDTH/4, W_STDHEIGHT/4},
+ {W_STDWIDTH/2, W_STDHEIGHT/2, W_STDWIDTH/2, W_STDHEIGHT/2},
+ {0, 0, 1, 1},
+ {1, 1, 1, 1},
+ {1, 1, 2, 2},
+ {W_STDWIDTH/2, W_STDHEIGHT/2, 3, 3},
+ {W_STDWIDTH-1, W_STDHEIGHT-1, 1, 1},
+ {W_STDWIDTH-5, W_STDHEIGHT-5, 4, 4}
+};
+>># MODIFIED peterc As per external review comments.
+>>ASSERTION Good A
+A call to xname returns a pointer to an
+.S XImage
+structure containing
+the contents of the specified rectangle
+with upper left corner at
+[
+.A x ,
+.A y
+]
+relative to the origin of the drawable
+.A d
+and with width
+.A width
+and height
+.A height
+in the format specified by the
+.A format
+argument.
+>>STRATEGY
+Create drawable.
+Write known pattern to drawable.
+Call XGetImage with XYPixmap format.
+Verify XGetImage return value is not null.
+Verify depth, width, height, and format values in gotten image structure.
+Verify gotten image for known pattern.
+Repeat for ZPixmap format.
+Destroy images using XDestroyImage.
+Repeat for each visual.
+>>CODE
+XVisualInfo *vp;
+Window w;
+XImage *im1, *im2;
+static struct area area1 =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+static struct area area2 =
+ { W_STDWIDTH/2, W_STDHEIGHT/2, W_STDWIDTH/4, W_STDHEIGHT/4 };
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ im1 = im2 = (XImage *) 0;
+
+/* Create drawable. */
+ /* do XYPixmap testing */
+ trace("XYPixmap");
+ w = makewin(display, vp);
+
+/* Write known pattern to drawable. */
+ dset(display, w, W_FG);
+
+/* Call XGetImage with XYPixmap format. */
+ pre_xcall(w, &area1, AllPlanes, XYPixmap);
+ im1 = XCALL;
+
+/* Verify XGetImage return value is not null. */
+ if (im1 == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+/* Verify depth, width, height, and format values in gotten image structure. */
+ if (checkimgstruct(im1, vp->depth, area1.width, area1.height, XYPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+/* Verify gotten image for known pattern. */
+ if (checkimg(im1, (struct area *) 0, W_FG, W_FG, 0) == False) {
+ report("Image was not properly gotten.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat for ZPixmap format. */
+ /* do ZPixmap testing */
+ trace("ZPixmap");
+ w = makewin(display, vp);
+ dset(display, w, W_BG);
+
+ pre_xcall(w, &area2, AllPlanes, ZPixmap);
+ im2 = XCALL;
+ if (im2 == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ if (checkimgstruct(im2, vp->depth, area2.width, area2.height, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+ if (checkimg(im2, (struct area *) 0, W_BG, W_BG, 0) == False) {
+ report("Image was not properly gotten.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Destroy images using XDestroyImage. */
+ if (im1 != (XImage *) 0)
+ (void) XDestroyImage(im1);
+ if (im2 != (XImage *) 0)
+ (void) XDestroyImage(im2);
+
+/* Repeat for each visual. */
+ }
+
+ CHECKPASS(3*2*nvinf());
+>>ASSERTION Good A
+When the
+.A format
+is
+.S XYPixmap ,
+then
+the image contains only the bit planes specified in
+.A plane_mask .
+>>STRATEGY
+Create drawable.
+Set only bits in drawable corresponding to planes specified by planemask.
+Call XGetImage with XYPixmap format.
+Verify XGetImage return value is not null.
+Verify depth, width, height, and format values in gotten image structure.
+Verify gotten image for known pattern.
+Repeat with only bits set not in planes specified by planemask.
+Destroy images using XDestroyImage.
+Repeat for each planemask.
+Repeat for each visual.
+>>CODE
+XVisualInfo *vp;
+Window w;
+XImage *im1;
+XImage *im2;
+long mask;
+long *pp;
+struct area *ap;
+unsigned int numbits;
+unsigned long pix;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+/* Create drawable. */
+ w = makewin(display, vp);
+ trace("depth of drawable: %d", vp->depth);
+ for (ap = arealist, pp = planelist; pp < &planelist[NELEM(planelist)]; pp++) {
+ im1 = im2 = (XImage *) 0;
+ if (++ap >= (&arealist[NELEM(arealist)]))
+ ap = arealist;
+ mask = *pp & DEPTHMASK(vp->depth);
+ numbits = bitcount(mask);
+ trace("plane-mask 0x%x, numbits: %d, depth: %d",
+ *pp, numbits, vp->depth);
+ pre_xcall(w, ap, *pp, XYPixmap);
+
+/* Set only bits in drawable corresponding to planes specified by planemask. */
+ dset(display, w, mask);
+
+/* Call XGetImage with XYPixmap format. */
+ im1 = XCALL;
+
+/* Verify XGetImage return value is not null. */
+ if (im1 == (XImage *) 0 && numbits) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+/* Verify depth, width, height, and format values in gotten image structure. */
+ if (im1 && checkimgstruct(im1, numbits, ap->width, ap->height, XYPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+/* Verify gotten image for known pattern. */
+ pix = DEPTHMASK(numbits);
+ if (im1 && checkimg(im1, (struct area *) 0, pix, pix, 0) == False) {
+ report("Image was not properly gotten.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat with only bits set not in planes specified by planemask. */
+ trace("Repeat with complement.");
+ dset(display, w, ~mask);
+
+ im2 = XCALL;
+
+ if (im2 == (XImage *) 0 && numbits) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ if (im2 && checkimgstruct(im2, numbits, ap->width, ap->height, XYPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+ if (im2 && checkimg(im2, (struct area *) 0, 0, 0, 0) == False) {
+ report("Image was not properly gotten.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Destroy images using XDestroyImage. */
+ if (im1 != (XImage *) 0)
+ (void) XDestroyImage(im1);
+ if (im2 != (XImage *) 0)
+ (void) XDestroyImage(im2);
+
+/* Repeat for each planemask. */
+ }
+
+
+/* Repeat for each visual. */
+ }
+
+ CHECKPASS(nvinf() * 3 * 2 * NELEM(planelist));
+>># NOTE peterc This condition is already checked for in tests which request
+>># NOTE peterc a subset of planes of the display.
+>># NOTE peterc Therefore, this test is classified as "def".
+>>ASSERTION def
+When the
+.A format
+is
+.S XYPixmap
+and the
+.A plane_mask
+only requests a subset of the planes of the
+display, then the
+.M depth
+of the returned image will be the number of planes
+requested.
+>>ASSERTION Good A
+When the
+.A format
+is
+.S ZPixmap ,
+then a call to xname
+returns as zero the bits in all planes not
+specified in
+.A plane_mask .
+>>STRATEGY
+Create drawable.
+Set only bits in drawable corresponding to planes specified by planemask.
+Call XGetImage with ZPixmap format.
+Verify XGetImage return value is not null.
+Verify depth, width, height, and format values in gotten image structure.
+Verify gotten image for zero-bits in
+all planes not specified in plane_mask.
+Repeat with only bits set not in planes specified by planemask.
+Destroy images using XDestroyImage.
+Repeat for each planemask.
+Repeat for each visual.
+>>CODE
+XVisualInfo *vp;
+Window w;
+XImage *im1;
+XImage *im2;
+long mask;
+long *pp;
+struct area *ap;
+unsigned long pix;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ im1 = im2 = (XImage *) 0;
+
+/* Create drawable. */
+ w = makewin(display, vp);
+ trace("depth of drawable: %d", vp->depth);
+ for (ap = arealist, pp = planelist; pp < &planelist[NELEM(planelist)]; pp++) {
+ /* wrap area pointer at end of list */
+ if (++ap >= (&arealist[NELEM(arealist)]))
+ ap = arealist;
+ mask = *pp;
+ mask &= DEPTHMASK(vp->depth);
+ trace("plane-mask 0x%x", *pp);
+ pre_xcall(w, ap, *pp, ZPixmap);
+
+/* Set only bits in drawable corresponding to planes specified by planemask. */
+ dset(display, w, mask);
+
+/* Call XGetImage with ZPixmap format. */
+ im1 = XCALL;
+
+/* Verify XGetImage return value is not null. */
+ if (im1 == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+/* Verify depth, width, height, and format values in gotten image structure. */
+ if (checkimgstruct(im1, vp->depth, ap->width, ap->height, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+/* Verify gotten image for zero-bits in */
+/* all planes not specified in plane_mask. */
+ pix = mask;
+ if (checkimg(im1, (struct area *) 0, pix, pix, 0) == False) {
+ report("Image was not properly gotten.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat with only bits set not in planes specified by planemask. */
+ trace("Repeat with complement.");
+ dset(display, w, ~mask);
+
+ im2 = XCALL;
+
+ if (im2 == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ if (checkimgstruct(im2, vp->depth, ap->width, ap->height, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+ if (checkimg(im2, (struct area *) 0, 0, 0, 0) == False) {
+ report("Image was not properly gotten.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Destroy images using XDestroyImage. */
+ if (im1 != (XImage *) 0)
+ (void) XDestroyImage(im1);
+ if (im2 != (XImage *) 0)
+ (void) XDestroyImage(im2);
+
+/* Repeat for each planemask. */
+ }
+
+
+/* Repeat for each visual. */
+ }
+
+ CHECKPASS(nvinf() * 3 * 2 * NELEM(planelist));
+>># NOTE peterc The returned depth is verified during all calls
+>># NOTE peterc to checkimgstruct(). checkimgstruct() is called
+>># NOTE peterc each time XGetIMage() is called to verify such
+>># NOTE peterc things as the image depth.
+>># Therefore, next test is classified as "def".
+>>ASSERTION def
+When the
+.A format
+is
+.S ZPixmap ,
+then the
+.M depth
+of the returned image
+is as specified on
+.A drawable
+creation.
+>># NOTE peterc Truncation occurs in all tests using planelist.
+>># NOTE peterc No need to run them again here.
+>># NOTE peterc Therefore, next test is classified as "def".
+>>ASSERTION def
+The value for
+.M plane_mask
+is truncated to the
+.M depth
+of the drawable.
+>># ADDED peterc As per external review comments.
+>>ASSERTION Good A
+When the specified rectangle includes the window border,
+then the contents of the window border are obtained in the
+.S XImage
+structure returned by a call to xname.
+>>STRATEGY
+Create drawable.
+Set window border to W_FG.
+Call XGetImage with ZPixmap format to get image of border pixel.
+Verify XGetImage return value is not null.
+Verify depth, width, height, and format values in gotten image structure.
+Verify gotten image for known pattern.
+Repeat with window border set to W_BG.
+Destroy images using XDestroyImage.
+Repeat for each type-window visual.
+>>CODE
+XVisualInfo *vp;
+Window w;
+XImage *im1, *im2;
+static struct area area1 =
+ { -1, -1, 1, 1 };
+static struct area area2 =
+ { W_STDWIDTH, W_STDHEIGHT, 1, 1 };
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ im1 = im2 = (XImage *) 0;
+
+/* Create drawable. */
+ /* do ZPixmap testing */
+ trace("ZPixmap");
+ w = makewin(display, vp);
+
+/* Set window border to W_FG. */
+ XSetWindowBorder(display, w, W_FG);
+
+/* Call XGetImage with ZPixmap format to get image of border pixel. */
+ pre_xcall(w, &area1, AllPlanes, ZPixmap);
+ im1 = XCALL;
+
+/* Verify XGetImage return value is not null. */
+ if (im1 == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+/* Verify depth, width, height, and format values in gotten image structure. */
+ if (checkimgstruct(im1, vp->depth, area1.width, area1.height, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+/* Verify gotten image for known pattern. */
+ if (checkimg(im1, (struct area *) 0, W_FG, W_FG, 0) == False) {
+ report("Image was not properly gotten.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat with window border set to W_BG. */
+ trace("Repeat with window border to W_BG.");
+ XSetWindowBorder(display, w, W_BG);
+
+ pre_xcall(w, &area1, AllPlanes, ZPixmap);
+ im2 = XCALL;
+
+ if (im2 == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ if (checkimgstruct(im2, vp->depth, area1.width, area1.height, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+ if (checkimg(im2, (struct area *) 0, W_BG, W_BG, 0) == False) {
+ report("Image was not properly gotten.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Destroy images using XDestroyImage. */
+ if (im1 != (XImage *) 0)
+ (void) XDestroyImage(im1);
+ if (im2 != (XImage *) 0)
+ (void) XDestroyImage(im2);
+
+/* Repeat for each type-window visual. */
+ }
+
+ CHECKPASS(6*nvinf());
+>># ADDED peterc Added as per external review comments.
+>>ASSERTION Good D 1
+When the drawable is a window and the window has backing-store and
+has regions obscured by noninferior windows,
+then backing store contents are returned for those regions in the
+.S XImage
+structure returned by a call to xname.
+>>ASSERTION Good D 1
+When the
+.A drawable
+is a window and
+the window does not have backing-store
+and regions of the window are obscured by noninferior windows,
+then undefined values are returned for those regions.
+>>ASSERTION Good B 1
+When the
+.A drawable
+is a window and
+visible regions of the window are obscured by inferior windows
+of different depth to the specified window,
+then undefined values are returned for those regions.
+>>ASSERTION Good A
+The pointer cursor image is not included in the returned contents.
+>>STRATEGY
+Create drawable.
+Grab server.
+Enable synchronization.
+Save initial pointer location.
+Warp pointer to drawable.
+Get new pointer location.
+Call XGetImage with pointer inside drawable.
+Verify XGetImage returned success.
+Verify depth, width, height, and format values in gotten image structure.
+Get current pointer location.
+Check to see if pointer moved.
+Warp pointer outside of drawable.
+Get new pointer location.
+Call XGetImage with pointer outside drawable.
+Verify XGetImage returned success.
+Verify depth, width, height, and format values in gotten image structure.
+Get current pointer location.
+Check to see if pointer moved.
+Warp pointer back to where it started.
+Disable synchronization.
+Ungrab server.
+Verify that two images are identical.
+Destroy gotten images.
+>>CODE
+XVisualInfo *vp;
+Window w;
+XImage *im1, *im2; /* two images */
+int root_x, root_y; /* pointer location after XGetImage */
+int oroot_x, oroot_y; /* pointer location before XGetImage */
+int sroot_x, sroot_y; /* initial pointer location */
+Window oldroot; /* initial root window */
+int itmp; /* useless XQueryPointer return values */
+unsigned int uitmp; /* useless XQueryPointer return values */
+Window wtmp; /* useless XQueryPointer return values */
+static struct area area =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+
+ im1 = im2 = (XImage *) 0;
+ resetvinf(VI_WIN);
+ nextvinf(&vp); /* use first one we come to */
+
+/* Create drawable. */
+ w = makewin(display, vp);
+
+/* Grab server. */
+ XGrabServer(display);
+
+/* Enable synchronization. */
+ (void) XSynchronize(display, True);
+
+/* Save initial pointer location. */
+ (void) XQueryPointer(display, w, &oldroot, &wtmp, &sroot_x, &sroot_y, &itmp, &itmp, &uitmp);
+
+/* Warp pointer to drawable. */
+ XWarpPointer(display, None, w, 0, 0, 0, 0, 0, 0);
+
+/* Get new pointer location. */
+ if (XQueryPointer(display, w, &wtmp, &wtmp, &oroot_x, &oroot_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer on wrong root.");
+ return;
+ } else
+ CHECK;
+
+/* Call XGetImage with pointer inside drawable. */
+ pre_xcall(w, &area, AllPlanes, ZPixmap);
+ im1 = XCALL;
+
+/* Verify XGetImage returned success. */
+ if (geterr() != Success)
+ FAIL;
+ else
+ CHECK;
+
+/* Verify depth, width, height, and format values in gotten image structure. */
+ if (checkimgstruct(im1, vp->depth, area.width, area.height, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+/* Get current pointer location. */
+ if (XQueryPointer(display, w, &wtmp, &wtmp, &root_x, &root_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer moved.");
+ return;
+ }
+ else
+ CHECK;
+
+/* Check to see if pointer moved. */
+ if (oroot_x != root_x || oroot_y != root_y) {
+ delete("Pointer moved.");
+ return;
+ }
+ else
+ CHECK;
+
+/* Warp pointer outside of drawable. */
+ XWarpPointer(display, None, w, W_STDWIDTH*2, W_STDHEIGHT*2, 0, 0, 0, 0);
+
+/* Get new pointer location. */
+ (void) XQueryPointer(display, w, &wtmp, &wtmp, &oroot_x, &oroot_y, &itmp, &itmp, &uitmp);
+
+/* Call XGetImage with pointer outside drawable. */
+ pre_xcall(w, &area, AllPlanes, ZPixmap);
+ im2 = XCALL;
+
+/* Verify XGetImage returned success. */
+ if (geterr() != Success)
+ FAIL;
+ else
+ CHECK;
+
+/* Verify depth, width, height, and format values in gotten image structure. */
+ if (checkimgstruct(im2, vp->depth, area.width, area.height, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+/* Get current pointer location. */
+ if (XQueryPointer(display, w, &wtmp, &wtmp, &root_x, &root_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer moved.");
+ return;
+ }
+ else
+ CHECK;
+
+/* Check to see if pointer moved. */
+ if (oroot_x != root_x || oroot_y != root_y) {
+ delete("Pointer moved.");
+ return;
+ }
+ else
+ CHECK;
+
+/* Warp pointer back to where it started. */
+ XWarpPointer(display, None, oldroot, 0, 0, 0, 0, sroot_x, sroot_y);
+
+/* Disable synchronization. */
+ (void) XSynchronize(display, False);
+
+/* Ungrab server. */
+ XUngrabServer(display);
+
+/* Verify that two images are identical. */
+ if (im1 == (XImage *) 0 || im2 == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ }
+ else {
+ int stop = 0;
+
+ CHECK;
+ for (root_x = 0; !stop && root_x < im1->width; root_x++)
+ for (root_y = 0; !stop && root_y < im1->height; root_y++)
+ if (XGetPixel(im1, root_x, root_y) !=
+ XGetPixel(im2, root_x, root_y))
+ stop = 1;
+ if (stop) {
+ report("Images differ at (%d,%d)", root_x, root_y);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+
+/* Destroy gotten images. */
+ if (im1 != (XImage *) 0)
+ XDestroyImage(im1);
+ if (im2 != (XImage *) 0)
+ XDestroyImage(im2);
+ CHECKPASS(11);
+>>ASSERTION Bad A
+When xname fails, then it returns
+.S NULL .
+>>STRATEGY
+Create bad drawable.
+Call XGetImage with bad drawable.
+Verify XGetImage return value is null.
+>>CODE BadDrawable
+Window w;
+XImage *image;
+static struct area area =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+
+/* Create bad drawable. */
+ w = badwin(display);
+
+/* Call XGetImage with bad drawable. */
+ pre_xcall(w, &area, AllPlanes, ZPixmap);
+ image = XCALL;
+
+/* Verify XGetImage return value is null. */
+ if (image == (XImage *) 0) {
+ CHECK;
+ if (geterr() != BadDrawable)
+ trace("Returned null, but returned incorrect error");
+ }
+ else {
+ FAIL;
+ /* Destroy gotten images. */
+ XDestroyImage(image);
+ }
+ CHECKPASS(1);
+>>ASSERTION Bad A
+When the
+.A drawable
+is a pixmap and
+the given rectangle is not wholly contained within the pixmap,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create pixmap.
+Call XGetImage with rectangle not wholly contained within the pixmap.
+Verify XGetImage return value is null.
+Verify that BadMatch error occurred.
+>>CODE BadMatch
+XVisualInfo *vp;
+Pixmap p;
+XImage *image;
+static struct area area1 =
+ { -W_STDWIDTH, -W_STDHEIGHT, W_STDWIDTH*2, W_STDHEIGHT*2 };
+
+ resetvinf(VI_PIX);
+ nextvinf(&vp); /* use first one we come to */
+
+/* Create pixmap. */
+ p = makepixm(display, vp);
+
+/* Call XGetImage with rectangle not wholly contained within the pixmap. */
+ pre_xcall(p, &area1, AllPlanes, ZPixmap);
+ image = XCALL;
+
+/* Verify XGetImage return value is null. */
+ if (image != (XImage *) 0) {
+ report("Null image not returned.");
+ FAIL;
+ /* Destroy gotten images. */
+ XDestroyImage(image);
+ }
+ else
+ CHECK;
+/* Verify that BadMatch error occurred. */
+ if (geterr() != BadMatch)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+When the
+.A drawable
+is a window and
+the window is not viewable,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create window.
+Call XUnmapWindow to make the window non-viewable.
+Call XGetImage on window which is not viewable.
+Verify XGetImage return value is null.
+Verify that BadMatch error occurred.
+>>CODE BadMatch
+XVisualInfo *vp;
+Window w;
+XImage *image;
+static struct area area1 =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp); /* use first one we come to */
+
+/* Create window. */
+ w = makewin(display, vp);
+
+/* Call XUnmapWindow to make the window non-viewable. */
+ XUnmapWindow(display, w);
+
+/* Call XGetImage on window which is not viewable. */
+ pre_xcall(w, &area1, AllPlanes, ZPixmap);
+ image = XCALL;
+
+/* Verify XGetImage return value is null. */
+ if (image != (XImage *) 0) {
+ report("Null image not returned.");
+ FAIL;
+ /* Destroy gotten images. */
+ XDestroyImage(image);
+ }
+ else
+ CHECK;
+
+/* Verify that BadMatch error occurred. */
+ if (geterr() != BadMatch)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+When the
+.A drawable
+is a window and
+the window is viewable
+and it is not the case that given there were no inferiors or overlapping windows
+the specified rectangle of the window would be fully visible on the screen
+and wholly contained within the outside edges of the window,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create window which is not fully visible on the screen.
+Call XMapWindow to make sure the window is viewable.
+Call XGetImage with rectangle extending beyond edge of screen.
+Verify XGetImage return value is null.
+Verify that BadMatch error occurred.
+Create window which is fully visible on the screen.
+Call XMapWindow to make sure the window is viewable.
+Call XGetImage with rectangle extending beyond edge of window.
+Verify XGetImage return value is null.
+Verify that BadMatch error occurred.
+>>CODE BadMatch
+XVisualInfo *vp;
+Window w;
+Window w2;
+int wx, wy; /* coordinates of window */
+static struct area area1 =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+static struct area area2 =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+XImage *image;
+unsigned int tmpui; /* uninteresting XGetGeometry return values */
+Window tmpw; /* uninteresting XGetGeometry return values */
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp); /* use first one we come to */
+
+/* Create window which is not fully visible on the screen. */
+ w = makewinpos(display, vp, -W_STDWIDTH/2, -W_STDHEIGHT/2);
+
+/* Call XMapWindow to make sure the window is viewable. */
+ XMapWindow(display, w);
+
+/* Call XGetImage with rectangle extending beyond edge of screen. */
+ pre_xcall(w, &area1, AllPlanes, ZPixmap);
+ image = XCALL;
+
+/* Verify XGetImage return value is null. */
+ if (image != (XImage *) 0) {
+ report("Null image not returned.");
+ FAIL;
+ /* Destroy gotten images. */
+ XDestroyImage(image);
+ }
+ else
+ CHECK;
+
+/* Verify that BadMatch error occurred. */
+ if (geterr() != BadMatch)
+ FAIL;
+ else
+ CHECK;
+
+/* Create window which is fully visible on the screen. */
+ w = makewinpos(display, vp, 0, 0);
+
+/* Call XMapWindow to make sure the window is viewable. */
+ XMapWindow(display, w);
+
+/* Call XGetImage with rectangle extending beyond edge of window. */
+ area2.width *= 2;
+ area2.height *= 2;
+ pre_xcall(w, &area2, AllPlanes, ZPixmap);
+ image = XCALL;
+
+/* Verify XGetImage return value is null. */
+ if (image != (XImage *) 0) {
+ report("Null image not returned.");
+ FAIL;
+ /* Destroy gotten images. */
+ XDestroyImage(image);
+ }
+ else
+ CHECK;
+
+/* Verify that BadMatch error occurred. */
+ if (geterr() != BadMatch)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(4);
+>>ASSERTION Bad A
+.ER BadDrawable
+>># MODIFIED peterc As per external review comments.
+>>ASSERTION Bad A
+.ER BadValue format XYPixmap ZPixmap
+>>#.ER BadValue format XYBitmap XYPixmap ZPixmap
+>># HISTORY kieron Completed Check format and pass ac
+>># HISTORY peterc Completed Incorporated RTCB3.
+>># HISTORY peterc Completed Engineering.
diff --git a/xc/test/xsuite/xtest/tset/CH06/gtsbimg/gtsbimg.m b/xc/test/xsuite/xtest/tset/CH06/gtsbimg/gtsbimg.m
new file mode 100644
index 000000000..a3ca05d30
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/gtsbimg/gtsbimg.m
@@ -0,0 +1,1205 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetSubImage CH06
+XImage *
+XGetSubImage(display, d, x, y, width, height, plane_mask, format, dest_image, dest_x, dest_y)
+Display *display = Dsp;
+Drawable d;
+int x = 0;
+int y = 0;
+unsigned int width = 1;
+unsigned int height = 1;
+long plane_mask = AllPlanes;
+int format = ZPixmap;
+>># The following was being initialised incorrectly. Removed for present ..sr
+XImage *dest_image;
+int dest_x = 0;
+int dest_y = 0;
+>>EXTERN
+
+#ifndef A_IMAGE /* Idealy would be automatic */
+#define A_IMAGE dest_image
+#endif
+
+static struct area darea; /* the area written to in dest_image */
+
+static XVisualInfo *mivp;
+
+/*
+ * pre_xcall() - set globals
+ */
+static void
+pre_xcall(win, ap, p, f, dp)
+Drawable win;
+struct area *ap;
+long p;
+int f;
+struct area *dp;
+{
+ /* set function call arguments */
+ d = win;
+ x = ap->x;
+ y = ap->y;
+ width = ap->width;
+ height = ap->height;
+ plane_mask = p;
+ format = f;
+ dest_x = dp->x;
+ dest_y = dp->y;
+ /* remember area written to */
+ darea.x = dest_x;
+ darea.y = dest_y;
+ darea.width = width;
+ darea.height = height;
+}
+
+/*
+ * plane masks for plane mask-related tests. Exercises various
+ * combinations of planes.
+ */
+static long planelist[] = {
+ 0,
+ 0x23,
+ 0x129078,
+ 0x23567193
+};
+
+/*
+ * This list contains a number of areas suitable for getting
+ * from the drawable.
+ * This list need not contain as many members as the planelist.
+ * The list is treated as if it were circular.
+ */
+static struct area arealist[] = {
+ {0, 0, W_STDWIDTH, W_STDHEIGHT},
+ {W_STDWIDTH/2, W_STDHEIGHT/2, W_STDWIDTH/4, W_STDHEIGHT/4},
+ {W_STDWIDTH/2, W_STDHEIGHT/2, W_STDWIDTH/2, W_STDHEIGHT/2},
+ {0, 0, 1, 1},
+ {1, 1, 1, 1},
+ {1, 1, 2, 2},
+ {W_STDWIDTH/2, W_STDHEIGHT/2, 3, 3},
+ {W_STDWIDTH-1, W_STDHEIGHT-1, 1, 1},
+ {W_STDWIDTH-5, W_STDHEIGHT-5, 4, 4}
+};
+static struct area destlist[] = {
+ {0, 0, 0, 0},
+ {W_STDWIDTH/2, W_STDHEIGHT/2, 0, 0},
+ {W_STDWIDTH/2, W_STDHEIGHT/2, 0, 0},
+ {0, 0, 0, 0},
+ {1, 1, 0, 0},
+ {1, 1, 0, 0},
+ {W_STDWIDTH/2, W_STDHEIGHT/2, 0, 0},
+ {W_STDWIDTH-1, W_STDHEIGHT-1, 0, 0},
+ {W_STDWIDTH-5, W_STDHEIGHT-5, 0, 0}
+};
+>>#MODIFIED peterc As per external review comments.
+>>ASSERTION Good A
+A call to xname returns a pointer to an
+.S XImage
+structure containing
+the contents of the rectangle
+with upper left corner at
+[
+.A x ,
+.A y
+]
+relative to the origin of the drawable
+.A d
+and with width
+.A width
+and height
+.A height
+and in the format specified by the
+.A format
+argument.
+>>STRATEGY
+Create image in XYPixmap format with all pixels set to W_BG.
+Create drawable with all pixels set to W_FG.
+Call XGetSubImage with XYPixmap format and
+width and height equal to size of image.
+Verify XGetSubImage return value is not null.
+Verify depth, width, height, and format
+values in gotten image structure.
+Verify gotten image for known pattern.
+Repeat call to XGetSubImage getting a subset of the entire drawable.
+Repeat for ZPixmap format.
+Repeat for each visual.
+>>CODE
+XImage *image;
+XVisualInfo *vp;
+Window w;
+static struct area area1 =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+static struct area area2 =
+ { W_STDWIDTH/2, W_STDHEIGHT/2, W_STDWIDTH/4, W_STDHEIGHT/4 };
+static struct area area3 =
+ { 0, 0, W_STDWIDTH/4, W_STDHEIGHT/4 };
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+/* Create image in XYPixmap format with all pixels set to W_BG. */
+ trace("XYPixmap");
+ dest_image = makeimg(display, vp, XYPixmap);
+
+/* Create drawable with all pixels set to W_FG. */
+ w = makewin(display, vp);
+ dset(display, w, W_FG);
+
+/* Call XGetSubImage with XYPixmap format and */
+/* width and height equal to size of image. */
+ pre_xcall(w, &area1, AllPlanes, XYPixmap, &area3);
+ image = XCALL;
+
+/* Verify XGetSubImage return value is not null. */
+ if (image == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+/* Verify depth, width, height, and format */
+/* values in gotten image structure. */
+ if (checkimgstruct(image, vp->depth, W_STDWIDTH, W_STDHEIGHT, XYPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+/* Verify gotten image for known pattern. */
+ if (checkimg(image, &darea, W_FG, W_BG, 0) == False) {
+ report("Returned image did not match expected image pattern");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat call to XGetSubImage getting a subset of the entire drawable. */
+ dest_image = makeimg(display, vp, XYPixmap);
+
+ /* be paranoid and set drawable again */
+ dset(display, w, W_FG);
+
+ /* Call XGetSubImage with XYPixmap format. */
+ pre_xcall(w, &area2, AllPlanes, XYPixmap, &area3);
+ image = XCALL;
+
+ /* Verify XGetSubImage return value is not null. */
+ if (image == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ /* Verify depth, width, height, and format */
+ /* values in gotten image structure. */
+ if (checkimgstruct(image, vp->depth, W_STDWIDTH, W_STDHEIGHT, XYPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+ /* Verify gotten image for known pattern. */
+ if (checkimg(image, &darea, W_FG, W_BG, 0) == False) {
+ report("Returned image did not match expected image pattern");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat for ZPixmap format. */
+ trace("ZPixmap");
+ dest_image = makeimg(display, vp, ZPixmap);
+
+ w = makewin(display, vp);
+ dset(display, w, W_FG);
+
+ pre_xcall(w, &area1, AllPlanes, ZPixmap, &area3);
+ image = XCALL;
+
+ if (image == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ if (checkimgstruct(image, vp->depth, W_STDWIDTH, W_STDHEIGHT, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+ if (checkimg(image, &darea, W_FG, W_BG, 0) == False) {
+ report("Returned image did not match expected image pattern");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ dest_image = makeimg(display, vp, ZPixmap);
+ dset(display, w, W_FG);
+
+ pre_xcall(w, &area2, AllPlanes, ZPixmap, &area3);
+ image = XCALL;
+
+ if (image == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ if (checkimgstruct(image, vp->depth, W_STDWIDTH, W_STDHEIGHT, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+ if (checkimg(image, &darea, W_FG, W_BG, 0) == False) {
+ report("Returned image did not match expected image pattern");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat for each visual. */
+ }
+
+ CHECKPASS(3*2*2*nvinf());
+>>ASSERTION Good A
+A call to xname returns a pointer to the same
+.S XImage
+structure specified by
+.A dest_image .
+>>STRATEGY
+Create image.
+Create drawable.
+Call XGetSubImage to get subimage from drawable.
+Verify XGetSubImage returned pointer to same XImage structure.
+>>CODE
+XImage *image;
+Window w;
+XVisualInfo *vp;
+static struct area area =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+
+ resetvinf(VI_WIN);
+ if (nvinf() == 0) {
+ unsupported("At least one window required, is XT_DEBUG_PIXMAP_ONLY == Yes?");
+ return;
+ }
+ nextvinf(&vp); /* use first visual */
+ /* this assumes that there is at least one visual supported...*/
+/* Create image. */
+ trace("ZPixmap");
+ dest_image = makeimg(display, vp, ZPixmap);
+
+/* Create drawable. */
+ w = makewin(display, vp);
+ dset(display, w, W_FG);
+
+/* Call XGetSubImage to get subimage from drawable. */
+ pre_xcall(w, &area, AllPlanes, ZPixmap, &area);
+ image = XCALL;
+
+/* Verify XGetSubImage returned pointer to same XImage structure. */
+ if (image != dest_image) {
+ report("Returned pointer not the same.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When the
+.A format
+is
+.S XYPixmap ,
+then
+the image contains only the bit planes specified in
+.A plane_mask .
+>>STRATEGY
+Create image in XYPixmap format.
+Create drawable.
+Clear all pixels in image.
+Set only bits in drawable corresponding to planes specified by planemask.
+Call XGetSubImage with XYPixmap format.
+Verify XGetSubImage return value is not null.
+Verify depth, width, height, and format
+values in gotten image structure.
+Verify gotten image for known pattern.
+Repeat with only bits set not in planes specified by planemask.
+Repeat for each planemask.
+Repeat for each visual.
+>>CODE
+XVisualInfo *vp;
+Window w;
+XImage *image;
+long mask;
+long *pp;
+struct area *ap;
+struct area *dp;
+unsigned int numbits;
+unsigned long pix;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+/* Create image in XYPixmap format. */
+ trace("XYPixmap");
+ dest_image = makeimg(display, vp, XYPixmap);
+
+/* Create drawable. */
+ w = makewin(display, vp);
+ trace("depth of drawable: %d", vp->depth);
+ ap = arealist;
+ dp = destlist;
+ pp = planelist;
+ for (; pp < &planelist[NELEM(planelist)]; pp++) {
+ /* wrap area pointer at end of list */
+ if (++ap >= (&arealist[NELEM(arealist)]))
+ ap = arealist;
+ if (++dp >= (&destlist[NELEM(destlist)]))
+ dp = destlist;
+ mask = *pp & DEPTHMASK(vp->depth);
+ numbits = bitcount(mask);
+ trace("plane-mask 0x%x, depth: %d", *pp, vp->depth);
+ pre_xcall(w, ap, *pp, XYPixmap, dp);
+
+/* Clear all pixels in image. */
+ dsetimg(dest_image, 0);
+
+/* Set only bits in drawable corresponding to planes specified by planemask. */
+ dset(display, w, mask);
+
+/* Call XGetSubImage with XYPixmap format. */
+ trace("numbits: %d, depth: %d",
+ numbits, vp->depth);
+ if (numbits != vp->depth)
+ trace("Some Xlib implementations are known to exit during the next call to XGetSubImage.");
+ image = XCALL;
+
+/* Verify XGetSubImage return value is not null. */
+ if (image == (XImage *) 0 && numbits) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+/* Verify depth, width, height, and format */
+/* values in gotten image structure. */
+ if (image && checkimgstruct(image, vp->depth, W_STDWIDTH, W_STDHEIGHT, XYPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+/* Verify gotten image for known pattern. */
+ pix = getpix(mask, plane_mask);
+ if (image && checkimg(image, &darea, pix, 0, 0) == False) {
+ report("Returned image did not match expected image pattern");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat with only bits set not in planes specified by planemask. */
+ trace("Repeat with complement.");
+ dsetimg(dest_image, ~mask);
+ dset(display, w, ~mask);
+
+ image = XCALL;
+
+ if (image == (XImage *) 0 && numbits) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ if (image && checkimgstruct(image, vp->depth, W_STDWIDTH, W_STDHEIGHT, XYPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+ if (image && checkimg(image, &darea, 0, ~mask & DEPTHMASK(vp->depth), 0) == False) {
+ report("Returned image did not match expected image pattern");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat for each planemask. */
+ }
+
+
+/* Repeat for each visual. */
+ }
+
+ CHECKPASS(nvinf() * 6 * NELEM(planelist));
+
+>>ASSERTION Good A
+When the
+.A format
+is
+.S ZPixmap ,
+then a call to xname
+returns as zero the bits in all planes not
+specified in
+.A plane_mask .
+>>STRATEGY
+Create image in ZPixmap format.
+Create drawable.
+Clear all pixels in image.
+Set only bits in drawable corresponding to planes specified by planemask.
+Call XGetSubImage with ZPixmap format.
+Verify XGetSubImage return value is not null.
+Verify depth, width, height, and format
+values in gotten image structure.
+Verify gotten image for zero-bits in
+all planes not specified in plane_mask.
+Repeat with only bits set not in planes specified by planemask.
+Repeat for each planemask.
+Repeat for each visual.
+>>CODE
+XVisualInfo *vp;
+Window w;
+XImage *image;
+long mask;
+long *pp;
+struct area *ap;
+struct area *dp;
+unsigned long pix;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+/* Create image in ZPixmap format. */
+ trace("ZPixmap");
+ dest_image = makeimg(display, vp, ZPixmap);
+
+/* Create drawable. */
+ w = makewin(display, vp);
+ trace("depth of drawable: %d", vp->depth);
+ ap = arealist;
+ dp = destlist;
+ pp = planelist;
+ for (; pp < &planelist[NELEM(planelist)]; pp++) {
+ /* wrap area pointer at end of list */
+ if (++ap >= (&arealist[NELEM(arealist)]))
+ ap = arealist;
+ if (++dp >= (&destlist[NELEM(destlist)]))
+ dp = destlist;
+ mask = *pp & DEPTHMASK(vp->depth);
+ trace("plane-mask 0x%x", *pp);
+ pre_xcall(w, ap, *pp, ZPixmap, dp);
+
+/* Clear all pixels in image. */
+ dsetimg(dest_image, 0);
+
+/* Set only bits in drawable corresponding to planes specified by planemask. */
+ dset(display, w, mask);
+
+/* Call XGetSubImage with ZPixmap format. */
+ image = XCALL;
+
+/* Verify XGetSubImage return value is not null. */
+ if (image == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+/* Verify depth, width, height, and format */
+/* values in gotten image structure. */
+ if (checkimgstruct(image, vp->depth, W_STDWIDTH, W_STDHEIGHT, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+/* Verify gotten image for zero-bits in */
+/* all planes not specified in plane_mask. */
+ pix = mask;
+ if (checkimg(image, &darea, pix, 0, 0) == False) {
+ report("Returned image did not match expected image pattern");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat with only bits set not in planes specified by planemask. */
+ trace("Repeat with complement.");
+ dsetimg(dest_image, ~mask);
+ dset(display, w, ~mask);
+
+ image = XCALL;
+
+ if (image == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ if (checkimgstruct(image, vp->depth, W_STDWIDTH, W_STDHEIGHT, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+ if (checkimg(image, &darea, 0, ~mask & DEPTHMASK(vp->depth), 0) == False) {
+ report("Returned image did not match expected image pattern");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat for each planemask. */
+ }
+
+/* Repeat for each visual. */
+ }
+
+ CHECKPASS(nvinf() * 6 * NELEM(planelist));
+
+>># NOTE peterc I believe this assertion to be a mistake.
+>># This applies only to XGetImage().
+>># RESOLVED dave 11/4/91 - Bob Scheifler has confirmed this.
+>>#
+>>#>>ASSERTION Good B 1
+>>#When the
+>>#.A format
+>>#is
+>>#.S ZPixmap ,
+>>#then the
+>>#.M depth
+>>#of the returned image
+>>#is as specified on
+>>#.A drawable
+>>#creation.
+
+>># NOTE peterc Truncation occurs in all tests using planelist.
+>># NOTE peterc No need to run them again here.
+>># NOTE peterc Therefore, next test is classified as "def".
+>>ASSERTION def
+The value for
+.M plane_mask
+is truncated to the
+.M depth
+of the drawable.
+>>ASSERTION Good A
+When the specified subimage does not fit at the specified location
+(
+.A dest_x ,
+.A dest_y
+)
+on the destination image, then the right and bottom edges are clipped.
+>>STRATEGY
+Create image.
+Create drawable.
+Call XGetSubImage to get subimage from drawable.
+Verify XGetSubImage returned non-null.
+Verify depth, width, height, and format
+values in gotten image structure.
+>>CODE
+XImage *image;
+Window w;
+XVisualInfo *vp;
+static struct area area1 =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+static struct area dest =
+ { W_STDWIDTH/2, W_STDHEIGHT/2, W_STDWIDTH/2, W_STDHEIGHT/2 };
+
+ resetvinf(VI_WIN_PIX);
+ if (nvinf() == 0) {
+ unsupported("At least one drawable required, is XT_DEBUG_PIXMAP_ONLY == Yes && XT_DEBUG_WINDOW_ONLY == Yes?");
+ return;
+ }
+ nextvinf(&vp); /* use first visual */
+ /* this assumes that there is at least one visual supported...*/
+/* Create image. */
+ dest_image = makeimg(display, vp, ZPixmap);
+
+/* Create drawable. */
+ w = makewin(display, vp);
+ dset(display, w, W_FG);
+
+/* Call XGetSubImage to get subimage from drawable. */
+ pre_xcall(w, &area1, AllPlanes, ZPixmap, &dest);
+ image = XCALL;
+
+/* Verify XGetSubImage returned non-null. */
+ if (image == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+/* Verify depth, width, height, and format */
+/* values in gotten image structure. */
+ if (checkimgstruct(image, vp->depth, W_STDWIDTH, W_STDHEIGHT, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+ if (checkimg(image, &dest, W_FG, W_BG, 0) == False) {
+ report("Returned image did not match expected image pattern");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(3);
+>>#ADDED peterc As per external review comments.
+>>ASSERTION Good A
+When the specified rectangle includes the window border,
+then the contents of the window border are obtained in the
+.S XImage
+structure.
+>>STRATEGY
+Create image in ZPixmap format.
+Create drawable.
+Set window border to W_FG.
+Call XGetSubImage with ZPixmap format to get image of border pixel.
+Verify XGetSubImage return value is not null.
+Verify depth, width, height, and format
+values in gotten image structure.
+Verify gotten image for known pattern.
+Repeat with window border set to W_BG.
+Repeat for each type-window visual.
+>>CODE
+XVisualInfo *vp;
+Window w;
+XImage *image;
+XImage *zimage;
+static struct area area1 =
+ { -1, -1, 1, 1 };
+static struct area area2 =
+ { W_STDWIDTH, W_STDHEIGHT, 1, 1 };
+static struct area aread =
+ { 1, 1, 0, 0 };
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+
+/* Create image in ZPixmap format. */
+ zimage = makeimg(display, vp, ZPixmap);
+
+/* Create drawable. */
+ /* do ZPixmap testing */
+ trace("ZPixmap");
+ dest_image = zimage;
+ w = makewin(display, vp);
+
+/* Set window border to W_FG. */
+ XSetWindowBorder(display, w, W_FG);
+
+/* Call XGetSubImage with ZPixmap format to get image of border pixel. */
+ pre_xcall(w, &area1, AllPlanes, ZPixmap, &aread);
+ image = XCALL;
+
+/* Verify XGetSubImage return value is not null. */
+ if (image == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+/* Verify depth, width, height, and format */
+/* values in gotten image structure. */
+ if (checkimgstruct(image, vp->depth, W_STDWIDTH, W_STDHEIGHT, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+/* Verify gotten image for known pattern. */
+ if (checkimg(image, &darea, W_FG, W_BG, 0) == False) {
+ report("Returned image did not match expected image pattern");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat with window border set to W_BG. */
+ trace("Repeat with window border set to W_BG.");
+ XSetWindowBorder(display, w, W_BG);
+ dsetimg(dest_image, W_FG);
+
+ pre_xcall(w, &area1, AllPlanes, ZPixmap, &aread);
+ image = XCALL;
+
+ if (image == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ if (checkimgstruct(image, vp->depth, W_STDWIDTH, W_STDHEIGHT, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+ if (checkimg(image, &darea, W_BG, W_FG, 0) == False) {
+ report("Returned image did not match expected image pattern");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+
+ CHECKPASS(6*nvinf());
+>>#ADDED peterc As per external review comments.
+>>ASSERTION Good D 1
+When the drawable is a window and the window has backing-store
+and has regions obscured by noninferior windows,
+then backing-store contents are returned for those regions in the
+.S XImage
+structure returned by a call to xname.
+>>ASSERTION Good D 1
+When the
+.A drawable
+is a window and
+the window does not have backing-store
+and regions of the window are obscured by noninferior windows,
+then undefined values are returned for those regions.
+>>ASSERTION Good D 1
+When the
+.A drawable
+is a window and
+visible regions of the window are obscured by inferior windows
+of different depth to the specified window,
+then undefined values are returned for those regions.
+>>ASSERTION Good A
+The pointer cursor image is not included in the returned contents.
+>>STRATEGY
+Create 2 images.
+Create drawable.
+Grab server.
+Enable synchronization.
+Save initial pointer location.
+Warp pointer to drawable.
+Get new pointer location.
+Call XGetSubImage with pointer inside drawable.
+Verify depth, width, height, and format
+values in gotten image structure.
+Get current pointer location.
+Check to see if pointer moved.
+Warp pointer outside of drawable.
+Get new pointer location.
+Call XGetSubImage with pointer outside drawable.
+Verify depth, width, height, and format
+values in gotten image structure.
+Get current pointer location.
+Check to see if pointer moved.
+Warp pointer back to where it started.
+Disable synchronization.
+Ungrab server.
+Verify that two images are identical.
+>>CODE
+XVisualInfo *vp;
+Window w;
+XImage *im1, *im2; /* two images */
+int root_x, root_y; /* pointer location after XGetSubImage */
+int oroot_x, oroot_y; /* pointer location before XGetSubImage */
+int sroot_x, sroot_y; /* initial pointer location */
+Window oldroot; /* initial root window */
+int itmp; /* useless XQueryPointer return values */
+unsigned int uitmp; /* useless XQueryPointer return values */
+Window wtmp; /* useless XQueryPointer return values */
+static struct area area =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+
+ im1 = im2 = (XImage *) 0;
+ resetvinf(VI_WIN);
+ nextvinf(&vp); /* use first visual */
+
+/* Create 2 images. */
+ im1 = makeimg(display, vp, ZPixmap);
+ if (isdeleted())
+ return;
+ else
+ CHECK;
+ im2 = makeimg(display, vp, ZPixmap);
+ if (isdeleted())
+ return;
+ else
+ CHECK;
+/* Create drawable. */
+ w = makewin(display, vp);
+
+/* Grab server. */
+ XGrabServer(display);
+
+/* Enable synchronization. */
+ (void) XSynchronize(display, True);
+
+/* Save initial pointer location. */
+ (void) XQueryPointer(display, w, &oldroot, &wtmp, &sroot_x, &sroot_y, &itmp, &itmp, &uitmp);
+
+/* Warp pointer to drawable. */
+ XWarpPointer(display, None, w, 0, 0, 0, 0, 0, 0);
+
+/* Get new pointer location. */
+ if (XQueryPointer(display, w, &wtmp, &wtmp, &oroot_x, &oroot_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer on wrong root.");
+ return;
+ } else
+ CHECK;
+
+/* Call XGetSubImage with pointer inside drawable. */
+ pre_xcall(w, &area, AllPlanes, ZPixmap, &area);
+ dest_image = im1;
+ im1 = XCALL;
+
+/* Verify depth, width, height, and format */
+/* values in gotten image structure. */
+ if (checkimgstruct(im1, vp->depth, area.width, area.height, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+/* Get current pointer location. */
+ if (XQueryPointer(display, w, &wtmp, &wtmp, &root_x, &root_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer on wrong root.");
+ return;
+ }
+ else
+ CHECK;
+
+/* Check to see if pointer moved. */
+ if (oroot_x != root_x || oroot_y != root_y) {
+ delete("Pointer moved.");
+ return;
+ }
+ else
+ CHECK;
+
+/* Warp pointer outside of drawable. */
+ XWarpPointer(display, None, w, W_STDWIDTH*2, W_STDHEIGHT*2, 0, 0, 0, 0);
+
+/* Get new pointer location. */
+ (void) XQueryPointer(display, w, &wtmp, &wtmp, &oroot_x, &oroot_y, &itmp, &itmp, &uitmp);
+
+/* Call XGetSubImage with pointer outside drawable. */
+ pre_xcall(w, &area, AllPlanes, ZPixmap, &area);
+ dest_image = im2;
+ im2 = XCALL;
+
+/* Verify depth, width, height, and format */
+/* values in gotten image structure. */
+ if (checkimgstruct(im2, vp->depth, area.width, area.height, ZPixmap) == False)
+ FAIL;
+ else
+ CHECK;
+
+/* Get current pointer location. */
+ if (XQueryPointer(display, w, &wtmp, &wtmp, &root_x, &root_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer moved.");
+ return;
+ }
+ else
+ CHECK;
+
+/* Check to see if pointer moved. */
+ if (oroot_x != root_x || oroot_y != root_y) {
+ delete("Pointer moved.");
+ return;
+ }
+ else
+ CHECK;
+
+/* Warp pointer back to where it started. */
+ XWarpPointer(display, None, oldroot, 0, 0, 0, 0, sroot_x, sroot_y);
+
+/* Disable synchronization. */
+ (void) XSynchronize(display, False);
+
+/* Ungrab server. */
+ XUngrabServer(display);
+
+/* Verify that two images are identical. */
+ if (im1 == (XImage *) 0 || im2 == (XImage *) 0) {
+ report("Null image returned.");
+ FAIL;
+ }
+ else {
+ int stop = 0;
+
+ CHECK;
+ for (root_x = 0; !stop && root_x < im1->width; root_x++)
+ for (root_y = 0; !stop && root_y < im1->height; root_y++)
+ if (XGetPixel(im1, root_x, root_y) !=
+ XGetPixel(im2, root_x, root_y))
+ stop = 1;
+ if (stop) {
+ report("Images differ at (%d,%d)", root_x, root_y);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+
+ CHECKPASS(11);
+>>ASSERTION Bad A
+When xname fails, then it returns
+.S NULL .
+>>STRATEGY
+Create image.
+Create bad drawable.
+Call XGetSubImage with bad drawable.
+Verify XGetSubImage return value is null.
+>>CODE BadDrawable
+Window w;
+XVisualInfo *vp;
+XImage *im;
+static struct area area =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+
+ resetvinf(VI_WIN_PIX);
+ if (nvinf() == 0) {
+ unsupported("At least one drawable required, is XT_DEBUG_PIXMAP_ONLY == Yes? && XT_DEBUG_WINDOW_ONLY == Yes");
+ return;
+ }
+ nextvinf(&vp); /* use first visual */
+ /* this assumes that there is at least one visual supported...*/
+/* Create image. */
+ dest_image = makeimg(display, vp, ZPixmap);
+
+/* Create bad drawable. */
+ w = badwin(display);
+
+/* Call XGetSubImage with bad drawable. */
+ pre_xcall(w, &area, AllPlanes, ZPixmap, &area);
+ im = XCALL;
+
+/* Verify XGetSubImage return value is null. */
+ if (im == (XImage *) 0)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+When the
+.A drawable
+is a pixmap and
+the given rectangle is not wholly contained within the pixmap,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create image.
+Create pixmap.
+Call XGetSubImage.
+Verify XGetSubImage return value is null.
+Verify that BadMatch error occurred.
+>>CODE BadMatch
+Pixmap p;
+XVisualInfo *vp;
+XImage *im;
+static struct area area =
+ { W_STDWIDTH/2, W_STDHEIGHT/2, W_STDWIDTH, W_STDHEIGHT };
+
+ resetvinf(VI_PIX);
+ if (nvinf() == 0) {
+ unsupported("At least one pixmap required, is XT_DEBUG_WINDOW_ONLY == Yes?");
+ return;
+ }
+ nextvinf(&vp); /* use first visual */
+ /* this assumes that there is at least one visual supported...*/
+/* Create image. */
+ dest_image = makeimg(display, vp, ZPixmap);
+
+/* Create pixmap. */
+ p = makepixm(display, vp);
+
+/* Call XGetSubImage. */
+ pre_xcall(p, &area, AllPlanes, ZPixmap, &area);
+ im = XCALL;
+
+/* Verify XGetSubImage return value is null. */
+ if (im == (XImage *) 0)
+ CHECK;
+ else
+ FAIL;
+
+/* Verify that BadMatch error occurred. */
+ if (geterr() != BadMatch)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+When the
+.A drawable
+is a window and
+the window is not viewable,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create window.
+Create image.
+Call XUnmapWindow to make the window non-viewable.
+Call XSubGetImage on window which is not viewable.
+Verify XSubGetImage return value is null.
+Verify that BadMatch error occurred.
+>>CODE BadMatch
+XVisualInfo *vp;
+Window w;
+XImage *image;
+static struct area area =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp); /* use first visual */
+
+/* Create window. */
+ w = makewin(display, vp);
+
+/* Create image. */
+ dest_image = makeimg(display, vp, ZPixmap);
+
+/* Call XUnmapWindow to make the window non-viewable. */
+ XUnmapWindow(display, w);
+
+/* Call XSubGetImage on window which is not viewable. */
+ pre_xcall(w, &area, AllPlanes, ZPixmap, &area);
+ image = XCALL;
+
+/* Verify XSubGetImage return value is null. */
+ if (image != (XImage *) 0) {
+ report("Null image not returned.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Verify that BadMatch error occurred. */
+ if (geterr() != BadMatch)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+When the
+.A drawable
+is a window and
+the window is viewable
+and it is not the case that given there were no inferiors or overlapping windows
+the specified rectangle of the window would be fully visible on the screen
+and wholly contained within the outside edges of the window,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create image.
+Create window which is not fully visible on the screen.
+Call XMapWindow to make sure the window is viewable.
+Call XGetSubImage with rectangle extending beyond edge of screen.
+Verify XGetSubImage return value is null.
+Verify that BadMatch error occurred.
+Create window which is fully visible on the screen.
+Call XMapWindow to make sure the window is viewable.
+Call XGetSubImage with rectangle extending beyond edge of window.
+Verify XGetSubImage return value is null.
+Verify that BadMatch error occurred.
+>>CODE BadMatch
+XVisualInfo *vp;
+Window w;
+Window w2;
+int wx, wy; /* coordinates of window */
+static struct area area1 =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+static struct area area2 =
+ { 0, 0, W_STDWIDTH, W_STDHEIGHT };
+XImage *image;
+unsigned int tmpui; /* uninteresting XGetGeometry return values */
+Window tmpw;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp); /* use first visual */
+
+/* Create image. */
+ dest_image = makeimg(display, vp, ZPixmap);
+
+/* Create window which is not fully visible on the screen. */
+ w = makewinpos(display, vp, -W_STDWIDTH/2, -W_STDHEIGHT/2);
+
+/* Call XMapWindow to make sure the window is viewable. */
+ XMapWindow(display, w);
+
+/* Call XGetSubImage with rectangle extending beyond edge of screen. */
+ pre_xcall(w, &area1, AllPlanes, ZPixmap, &area1);
+ image = XCALL;
+
+/* Verify XGetSubImage return value is null. */
+ if (image != (XImage *) 0) {
+ report("Null image not returned.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Verify that BadMatch error occurred. */
+ if (geterr() != BadMatch)
+ FAIL;
+ else
+ CHECK;
+
+/* Create window which is fully visible on the screen. */
+ w = makewinpos(display, vp, 0, 0);
+
+/* Call XMapWindow to make sure the window is viewable. */
+ XMapWindow(display, w);
+
+/* Call XGetSubImage with rectangle extending beyond edge of window. */
+ area2.width *= 2;
+ area2.height *= 2;
+ pre_xcall(w, &area2, AllPlanes, ZPixmap, &area2);
+ image = XCALL;
+
+/* Verify XGetSubImage return value is null. */
+ if (image != (XImage *) 0) {
+ report("Null image not returned.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Verify that BadMatch error occurred. */
+ if (geterr() != BadMatch)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(4);
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadValue format XYPixmap ZPixmap
+>># HISTORY kieron Completed Check format and pass ac
+>># HISTORY peterc Completed Incorporated RTCB3.
+>># HISTORY peterc Completed Engineering.
diff --git a/xc/test/xsuite/xtest/tset/CH06/ldfnt/a2.dat b/xc/test/xsuite/xtest/tset/CH06/ldfnt/a2.dat
new file mode 100644
index 000000000..57acc0f12
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/ldfnt/a2.dat
@@ -0,0 +1,15 @@
+! $XConsortium$
+100 90 32
+5f0,0
+6,1
+62,0
+2,1
+61,0
+2,1
+60,0
+2,1
+61,0
+2,1
+62,0
+6,1
+1b3e,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/ldfnt/ldfnt.m b/xc/test/xsuite/xtest/tset/CH06/ldfnt/ldfnt.m
new file mode 100644
index 000000000..c3a074223
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/ldfnt/ldfnt.m
@@ -0,0 +1,171 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XLoadFont CH06
+Font
+
+Display *display = Dsp;
+char *name = "xtfont1";
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>ASSERTION Good A
+When
+.A name
+is a NULL terminated string in ISO Latin-1 encoding,
+then
+a call to xname
+loads the specified font and returns its font ID.
+>>STRATEGY
+For each xtest font:
+ Load font.
+ Make some simple checks to see if a font ID is returned.
+>>CODE
+Font font;
+int i;
+char fname[64];
+
+ for (i = 0; i < XT_NFONTS; i++) {
+ sprintf(fname, "xtfont%d", i);
+ trace("Loading font %s", fname);
+ name = fname;
+
+ font = XCALL;
+
+ if (geterr() != Success) {
+ report("font %s could not be loaded", fname);
+ report("Check that xtest fonts have been installed");
+ FAIL;
+ } else if (font == 0 || (font & 0xc0000000)) {
+ report("An invalid font ID was returned");
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(XT_NFONTS);
+
+>>ASSERTION Good A
+The font ID returned by a call to xname is usable
+on any GC created for any screen of the display.
+>>STRATEGY
+For each visual supported for the default screen:
+ Load font "xtfont1".
+ Create window.
+ Create GC for window.
+ Set font component in GC to loaded font.
+ Draw string with single character.
+ Pixmap verify.
+Note: this tests the GC's for the default screen.
+To test for other screens, re-run the test suite with XT_DISPLAY set
+to number of required screen.
+>>CODE
+XVisualInfo *vp;
+Font font;
+char *fname = "xtfont1";
+Drawable d;
+GC gc;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ name = fname;
+
+ font = XCALL;
+
+ if (geterr() != Success) {
+ /* Already done after calling XLoadFont */
+ report("font %s could not be loaded", fname);
+ report("Check that xtest fonts have been installed");
+ FAIL;
+ } else {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFont(display, gc, font);
+ XDrawString(display, d, gc, 20, 20, "z", 1);
+ PIXCHECK(display, d);
+ dclear(display, d);
+ XUnloadFont(display, font);
+ }
+ }
+ CHECKPASS(nvinf());
+
+>>ASSERTION Good A
+Upper and lower case characters in the
+.A name
+argument refer to the same font.
+>># The name arg is case insensitive.
+>>STRATEGY
+Try series of name differing only in case.
+Font ID is different each time so have to..
+Draw string and save result in original font.
+Verify that font returned using each name draws same string.
+>>EXTERN
+#define TEXTSTRING "AbyZ%~"
+>>CODE
+Font font;
+static char *names[] = {
+ "xtfont1",
+ "Xtfont1",
+ "XTFONT1",
+ "xTfOnT1",
+ "XtFoNt1",
+};
+int i;
+Drawable draw;
+XImage *sav;
+GC gc;
+
+ name = "xtfont1";
+ font = XCALL;
+ if (geterr() != Success) {
+ /* Test has already failed */
+ delete("Font could not be loaded");
+ return;
+ }
+
+ draw = defdraw(display, VI_WIN_PIX);
+ gc = makegc(display, draw);
+ XSetFont(display, gc, font);
+
+ XDrawString(display, draw, gc, 30, 30, TEXTSTRING, strlen(TEXTSTRING));
+ sav = savimage(display, draw);
+
+ if (isdeleted())
+ return;
+
+ for (i = 0; i < NELEM(names); i++) {
+
+ dclear(display, draw);
+ name = names[i];
+ font = XCALL;
+
+ if (geterr() == Success) {
+ XSetFont(display, gc, font);
+ XDrawString(display, draw, gc, 30, 30, TEXTSTRING, strlen(TEXTSTRING));
+ if (compsavimage(display, draw, sav))
+ CHECK;
+ else {
+ report("Font %s was different to xtfont1", name);
+ FAIL;
+ }
+ } else {
+ report("Font load failed with name %s", name);
+ FAIL; /* Has been done already */
+ }
+ }
+ CHECKPASS(NELEM(names));
+>>ASSERTION Bad A
+.ER BadName font
+>>ASSERTION Bad B 3
+.ER BadAlloc
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/ldqryfnt/a2.dat b/xc/test/xsuite/xtest/tset/CH06/ldqryfnt/a2.dat
new file mode 100644
index 000000000..57acc0f12
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/ldqryfnt/a2.dat
@@ -0,0 +1,15 @@
+! $XConsortium$
+100 90 32
+5f0,0
+6,1
+62,0
+2,1
+61,0
+2,1
+60,0
+2,1
+61,0
+2,1
+62,0
+6,1
+1b3e,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/ldqryfnt/ldqryfnt.m b/xc/test/xsuite/xtest/tset/CH06/ldqryfnt/ldqryfnt.m
new file mode 100644
index 000000000..3a9cdeb92
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/ldqryfnt/ldqryfnt.m
@@ -0,0 +1,163 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XLoadQueryFont CH06
+XFontStruct *
+
+Display *display = Dsp;
+char *name = "xtfont0";
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>ASSERTION Good A
+When the
+.A name
+argument names an existing font,
+then a call to xname loads the font named
+.A name ,
+and returns a pointer to an
+.S XFontStruct
+structure which contains information on the font.
+>>STRATEGY
+For each xtest font:
+ Load and query font.
+ Compare returned XFontStruct with known good structures.
+>>EXTERN
+extern int checkfsp();
+extern struct fontinfo fontinfo[];
+extern int nfontinfo;
+>>CODE
+XFontStruct *fsp;
+int i;
+
+
+ for (i = 0; i < nfontinfo; i++) {
+ name = fontinfo[i].name;
+ trace("Loading %s", name);
+ fsp = XCALL;
+ if (checkfsp(fsp, fontinfo[i].fontstruct, *fontinfo[i].string))
+ CHECK;
+ else
+ FAIL;
+ }
+
+ CHECKPASS(nfontinfo);
+
+>>ASSERTION Good A
+The font ID returned by a call to xname is usable
+on any GC created for any screen of the display.
+>>STRATEGY
+For each visual supported for the default screen:
+ Load and query font "xtfont1".
+ Create window.
+ Create GC for window.
+ Set font component in GC to loaded font.
+ Draw string with single character.
+ Pixmap verify.
+Note: this tests the GC's for the default screen.
+To test for other screens, re-run the test suite with XT_DISPLAY set
+to number of required screen.
+>>CODE
+XVisualInfo *vp;
+Font font;
+XFontStruct *fsp;
+Drawable d;
+GC gc;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ name = fontinfo[1].name;
+
+ fsp = XCALL;
+ font = fsp->fid;
+
+ if (geterr() != Success) {
+ /* Already done after calling XLoadFont */
+ report("font %s could not be loaded", name);
+ report("Check that xtest fonts have been installed");
+ FAIL;
+ } else {
+ d = makewin(display, vp);
+ gc = makegc(display, d);
+ XSetFont(display, gc, font);
+ XDrawString(display, d, gc, 20, 20, "z", 1);
+ PIXCHECK(display, d);
+ dclear(display, d);
+ XFreeFont(display, fsp);
+ }
+ }
+ CHECKPASS(nvinf());
+
+
+>>ASSERTION Good A
+When the
+.A name
+argument does not name an existing font,
+then xname returns NULL.
+>>STRATEGY
+Set name to a non-existant name.
+Verify that NULL is returned.
+>>CODE
+XFontStruct *fsp;
+
+ name = config.bad_font_name;
+ fsp = XCALL;
+
+ if (fsp == NULL)
+ PASS;
+ else {
+ report("NULL was not returned when the name was '%s'", name);
+ FAIL;
+ }
+>>ASSERTION Good A
+Upper and lower case characters in the
+.A name
+argument refer to the same font.
+>>STRATEGY
+Load font by name xtfont0.
+Load font by name XtFoNt0.
+Verify that this name also succeeds and that
+the returned XFontStruct's are the same.
+>>CODE
+XFontStruct *fsp1;
+XFontStruct *fsp2;
+
+ name = "xtfont0";
+ fsp1 = XCALL;
+ if (fsp1 == NULL) {
+ delete("Could not load font %s", name);
+ return;
+ }
+
+ name = "XtFoNt0";
+ fsp2 = XCALL;
+ if (fsp2 == NULL) {
+ report("Font could not be loaded with name %s", name);
+ FAIL;
+ return;
+ }
+
+ /*
+ * The checking of the copyright property is inhibited, so that
+ * this test can pass even if the first one doesn't.
+ */
+ if (checkfsp(fsp2, fsp1, (char*)0))
+ PASS;
+ else {
+ report("Different XFontStruct descriptions were returned");
+ FAIL;
+ }
+>>ASSERTION Bad A
+.ER BadAlloc
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/linktbl.c b/xc/test/xsuite/xtest/tset/CH06/linktbl.c
new file mode 100644
index 000000000..d1b86d08a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/linktbl.c
@@ -0,0 +1,131 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+
+extern struct linkinfo EXClrAr;
+extern struct linkinfo EXClrWdw;
+extern struct linkinfo EXCpyAr;
+extern struct linkinfo EXCpyPln;
+extern struct linkinfo EXCrtFntCrsr;
+extern struct linkinfo EXCrtGlyphCrs;
+extern struct linkinfo EXCrtPxmpCrsr;
+extern struct linkinfo EXDfnCrsr;
+extern struct linkinfo EXDrwArc;
+extern struct linkinfo EXDrwArcs;
+extern struct linkinfo EXDrwImgStr;
+extern struct linkinfo EXDrwImgStr16;
+extern struct linkinfo EXDrwLn;
+extern struct linkinfo EXDrwLns;
+extern struct linkinfo EXDrwPnt;
+extern struct linkinfo EXDrwPnts;
+extern struct linkinfo EXDrwRctngl;
+extern struct linkinfo EXDrwRctngls;
+extern struct linkinfo EXDrwSgmnts;
+extern struct linkinfo EXDrwStr;
+extern struct linkinfo EXDrwStr16;
+extern struct linkinfo EXDrwTxt;
+extern struct linkinfo EXDrwTxt16;
+extern struct linkinfo EXFllArc;
+extern struct linkinfo EXFllArcs;
+extern struct linkinfo EXFllPlygn;
+extern struct linkinfo EXFllRctngl;
+extern struct linkinfo EXFllRctngls;
+extern struct linkinfo EXFrCrsr;
+extern struct linkinfo EXFrFnt;
+extern struct linkinfo EXFrFntInf;
+extern struct linkinfo EXFrFntNms;
+extern struct linkinfo EXFrFntPth;
+extern struct linkinfo EXGtFntPth;
+extern struct linkinfo EXGtFntPrprty;
+extern struct linkinfo EXGtImg;
+extern struct linkinfo EXGtSbImg;
+extern struct linkinfo EXLstFnts;
+extern struct linkinfo EXLstFntsWthI;
+extern struct linkinfo EXLdFnt;
+extern struct linkinfo EXLdQryFnt;
+extern struct linkinfo EXPtImg;
+extern struct linkinfo EXQryBstCrsr;
+extern struct linkinfo EXQryFnt;
+extern struct linkinfo EXQryTxtExtnt;
+extern struct linkinfo EXQryTxtExt16;
+extern struct linkinfo EXRclrCrsr;
+extern struct linkinfo EXStFntPth;
+extern struct linkinfo EXTxtExtnts;
+extern struct linkinfo EXTxtExtnts16;
+extern struct linkinfo EXTxtWdth;
+extern struct linkinfo EXTxtWdth16;
+extern struct linkinfo EXUndfnCrsr;
+extern struct linkinfo EXUnldFnt;
+
+struct linkinfo *linktbl[] = {
+ &EXClrAr,
+ &EXClrWdw,
+ &EXCpyAr,
+ &EXCpyPln,
+ &EXCrtFntCrsr,
+ &EXCrtGlyphCrs,
+ &EXCrtPxmpCrsr,
+ &EXDfnCrsr,
+ &EXDrwArc,
+ &EXDrwArcs,
+ &EXDrwImgStr,
+ &EXDrwImgStr16,
+ &EXDrwLn,
+ &EXDrwLns,
+ &EXDrwPnt,
+ &EXDrwPnts,
+ &EXDrwRctngl,
+ &EXDrwRctngls,
+ &EXDrwSgmnts,
+ &EXDrwStr,
+ &EXDrwStr16,
+ &EXDrwTxt,
+ &EXDrwTxt16,
+ &EXFllArc,
+ &EXFllArcs,
+ &EXFllPlygn,
+ &EXFllRctngl,
+ &EXFllRctngls,
+ &EXFrCrsr,
+ &EXFrFnt,
+ &EXFrFntInf,
+ &EXFrFntNms,
+ &EXFrFntPth,
+ &EXGtFntPth,
+ &EXGtFntPrprty,
+ &EXGtImg,
+ &EXGtSbImg,
+ &EXLstFnts,
+ &EXLstFntsWthI,
+ &EXLdFnt,
+ &EXLdQryFnt,
+ &EXPtImg,
+ &EXQryBstCrsr,
+ &EXQryFnt,
+ &EXQryTxtExtnt,
+ &EXQryTxtExt16,
+ &EXRclrCrsr,
+ &EXStFntPth,
+ &EXTxtExtnts,
+ &EXTxtExtnts16,
+ &EXTxtWdth,
+ &EXTxtWdth16,
+ &EXUndfnCrsr,
+ &EXUnldFnt,
+ 0,
+};
diff --git a/xc/test/xsuite/xtest/tset/CH06/lstfnts/lstfnts.m b/xc/test/xsuite/xtest/tset/CH06/lstfnts/lstfnts.m
new file mode 100644
index 000000000..f28e687cb
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/lstfnts/lstfnts.m
@@ -0,0 +1,331 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XListFonts CH06
+char **
+
+Display *display = Dsp;
+char *patternarg;
+int maxnames = 1000;
+int *actual_count_return = &Count;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>EXTERN
+#include <ctype.h>
+#include <string.h>
+
+static int Count;
+
+extern struct fontinfo fontinfo[];
+extern int nfontinfo;
+
+static lowerstring(str)
+char *str;
+{
+ for (; *str; str++) {
+ if (isupper(*str))
+ tolower(*str);
+ }
+}
+>>ASSERTION Good A
+When the
+.A patternarg
+argument
+is a string in ISO Latin-1 encoding terminated with ASCII nul,
+then a call to xname returns an array of
+strings terminated with ASCII nul which are available font names
+that match the
+.A patternarg
+argument
+and returns the number of fonts in the
+.A actual_count_return
+argument.
+>>STRATEGY
+Set patternarg to "xtfont0"
+Call XListFonts.
+Verify that returned count was 1.
+Verify that the returned names pointer was non-NULL.
+Lower-case the returned string.
+Verify that xtfont0 was returned.
+>>CODE
+char **names;
+
+ patternarg = "xtfont0";
+ names = XCALL;
+
+ if (Count != 1) {
+ report("actual_count_return was %d, expecting 1", Count);
+ FAIL;
+ } else
+ CHECK;
+
+ if (names == NULL) {
+ report("NULL was returned");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ lowerstring(*names);
+ if (strcmp(*names, patternarg) != 0) {
+ report("returned name was '%s', expecting '%s'", *names, patternarg);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+Upper and lower case characters in the
+.A patternarg
+argument refer to the same font.
+>>STRATEGY
+Try matching with XtFoNt0
+Call XListFonts.
+Verify that returned count was 1.
+Verify that the returned names pointer was non-NULL.
+Lower-case the returned string.
+Verify that xtfont0 was returned.
+>>CODE
+char **names;
+
+ patternarg = "XtFoNt0";
+ names = XCALL;
+
+ if (Count != 1) {
+ report("actual_count_return was %d, expecting 1", Count);
+ FAIL;
+ } else
+ CHECK;
+
+ if (names == NULL) {
+ report("NULL was returned");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ lowerstring(*names);
+ patternarg = "xtfont0";
+ if (strcmp(*names, patternarg) != 0) {
+ report("returned name was '%s', expecting '%s'", *names, patternarg);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+Each asterisk (*) in the string is a wildcard for any number of characters.
+>>STRATEGY
+Set patternarg to "x*t*t*"
+Call XListFonts.
+Verify that at least all the xtest fonts are returned, and
+that any other returned string matches the patternarg.
+>>CODE
+char **names;
+char *curname;
+int i;
+int j;
+
+ patternarg = "x*t*t*";
+ names = XCALL;
+
+ if (Count < XT_NFONTS) {
+ report("returned count was %d, expecting at least %d", Count,XT_NFONTS);
+ FAIL;
+ } else
+ CHECK;
+
+ if (names == NULL) {
+ report("returned name pointer was NULL");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ for (i = 0; i < Count; i++) {
+ curname = names[i];
+ lowerstring(curname);
+ for (j = 0; j < nfontinfo; j++) {
+ if (strcmp(curname, fontinfo[j].name) == 0) {
+ /* Check if we have already seen this one */
+ if (fontinfo[j].flag) {
+ report("name %s repeated in list", curname);
+ FAIL;
+ } else {
+ fontinfo[j].flag++;
+ CHECK;
+ }
+ break;
+ }
+ }
+ if (j == nfontinfo) {
+ char *cp;
+
+ /* It wasn't one of ours... */
+ trace("extra font name %s found", curname);
+ cp = strchr(curname, 'x');
+ if (cp == NULL) {
+ report("Found name %s that did not match patternarg");
+ FAIL;
+ } else if ((cp = strchr(cp, 't')) == NULL) {
+ report("Found name %s that did not match patternarg");
+ FAIL;
+ } else if ((cp = strchr(cp, 't')) == NULL) {
+ report("Found name %s that did not match patternarg");
+ FAIL;
+ } else {
+ CHECK;
+ }
+ }
+ }
+ for (i = 0; i < nfontinfo; i++) {
+ if (fontinfo[i].flag == 0) {
+ report("xtest font '%s' was not found", fontinfo[i].name);
+ FAIL;
+ } else {
+ /* reset to zero for next test */
+ fontinfo[i].flag = 0;
+ CHECK;
+ }
+ }
+ CHECKPASS(2+Count+nfontinfo);
+>>ASSERTION Good A
+Each question mark (?) in the string is a wildcard for a single character.
+>>STRATEGY
+Set patternarg to "x?f?nt?"
+Call XListFonts.
+Verify that returned count is at least XT_NFONTS
+Verify that the xtest font names are returned.
+Verify that any other name returned matches the patternarg.
+>>CODE
+char **names;
+char *curname;
+int i;
+int j;
+
+ patternarg = "x?f?nt?";
+ names = XCALL;
+
+ if (Count < XT_NFONTS) {
+ report("returned count was %d, expecting at least %d", Count,XT_NFONTS);
+ FAIL;
+ } else
+ CHECK;
+
+ if (names == NULL) {
+ report("returned name pointer was NULL");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ for (i = 0; i < Count; i++) {
+ curname = names[i];
+ lowerstring(curname);
+ for (j = 0; j < nfontinfo; j++) {
+ if (strcmp(curname, fontinfo[j].name) == 0) {
+ /* Check if we have already seen this one */
+ /* XXX I am assuming that duplicates are not allowed ??? */
+ if (fontinfo[j].flag) {
+ report("name %s repeated in list", curname);
+ FAIL;
+ } else {
+ fontinfo[j].flag++;
+ CHECK;
+ }
+ break;
+ }
+ }
+ if (j == nfontinfo) {
+ int len;
+
+ /* It wasn't one of ours... */
+ trace("extra font name %s found", curname);
+ len = strlen(patternarg);
+ if (strlen(curname) != len) {
+ report("name '%s' did not match patternarg");
+ FAIL;
+ } else {
+ for (j = 0; j < len; j++) {
+ if (patternarg[j] == '?')
+ continue;
+ if (curname[j] != patternarg[j]) {
+ report("name '%s' did not match patternarg");
+ FAIL;
+ break;
+ }
+ }
+ if (j == len)
+ CHECK;
+ }
+ }
+ }
+ for (i = 0; i < nfontinfo; i++) {
+ if (fontinfo[i].flag == 0) {
+ report("xtest font '%s' was not found", fontinfo[i].name);
+ FAIL;
+ } else {
+ /* reset to zero for next test */
+ fontinfo[i].flag = 0;
+ CHECK;
+ }
+ }
+ CHECKPASS(2+Count+nfontinfo);
+
+>>ASSERTION Good A
+The number of fonts returned in the actual_count_return argument will not
+exceed maxnames.
+>>STRATEGY
+Set maxnames to 1
+Set patternarg to "*"
+Verify that only one name was returned.
+>>CODE
+char **names;
+
+ maxnames = 1;
+ patternarg = "*";
+
+ names = XCALL;
+
+ if (Count > maxnames) {
+ report("returned count was %d, not expecting it to exceed %d", Count, maxnames);
+ FAIL;
+ } else {
+ PASS;
+ }
+>>ASSERTION Bad A
+When there are no available font names that match the patternarg argument,
+then a call to xname returns NULL.
+>>STRATEGY
+Set patternarg to a bad name.
+Call XListFonts.
+Verify that NULL is returned.
+>>CODE
+char **names;
+
+ /* Of course if someone deliberately adds such a name.. */
+ patternarg = "xtfont non existant name";
+
+ names = XCALL;
+
+ if (names != NULL) {
+ report("returned pointer was not NULL");
+ FAIL;
+ } else
+ PASS;
+
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/lstfntswth/lstfntswth.m b/xc/test/xsuite/xtest/tset/CH06/lstfntswth/lstfntswth.m
new file mode 100644
index 000000000..69c1cf678
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/lstfntswth/lstfntswth.m
@@ -0,0 +1,383 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XListFontsWithInfo CH06
+char **
+
+Display *display = Dsp;
+char *patternarg;
+int maxnames = 9999;
+int *count_return = &count;
+XFontStruct **info_return = &finfo;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>EXTERN
+#include <ctype.h>
+#include <string.h>
+
+static int count;
+static XFontStruct *finfo;
+
+extern XFontStruct xtfont0;
+extern char *xtfont0cpright;
+extern struct fontinfo fontinfo[];
+extern int nfontinfo;
+
+static lowerstring(str)
+char *str;
+{
+ for (; *str; str++) {
+ if (isupper(*str))
+ tolower(*str);
+ }
+}
+
+>>ASSERTION Good A
+When the
+.A pattern
+argument
+is a string in ISO Latin-1 encoding terminated with ASCII nul,
+then a call to xname returns an array of
+strings terminated with ASCII nul which are available font names
+that match the
+.A pattern
+argument
+and returns the number of fonts in the
+.A count_return
+argument
+and their associated font information
+excluding the per-character metrics
+in the
+.A info_return
+argument.
+>>STRATEGY
+Set patternarg to "xtfont0"
+Call XListFontsWithInfo.
+Verify that returned count was 1.
+Verify that the returned names pointer was non-NULL.
+Lower-case the returned string.
+Verify that xtfont0 was returned.
+Verify that font information is correct.
+>>CODE
+char **names;
+
+ patternarg = "xtfont0";
+ names = XCALL;
+
+ if (count != 1) {
+ report("count_return was %d, expecting 1", count);
+ FAIL;
+ } else
+ CHECK;
+
+ if (names == NULL) {
+ report("NULL was returned");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ lowerstring(*names);
+ if (strcmp(*names, patternarg) != 0) {
+ report("returned name was '%s', expecting '%s'", *names, patternarg);
+ FAIL;
+ } else
+ CHECK;
+
+ xtfont0.per_char = NULL;
+ if (checkfsp(finfo, &xtfont0, xtfont0cpright))
+ CHECK;
+ else {
+ report("font information was incorrect");
+ FAIL;
+ }
+
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+Upper and lower case character in the
+.A pattern
+argument refer to the same font.
+>>STRATEGY
+Try matching with XtFoNt0
+Call XListFontsWithInfo.
+Verify that returned count was 1.
+Verify that the returned names pointer was non-NULL.
+Lower-case the returned string.
+Verify that xtfont0 was returned.
+Verify that the font information was correct.
+>>CODE
+char **names;
+
+ patternarg = "XtFoNt0";
+ names = XCALL;
+
+ if (count != 1) {
+ report("count_return was %d, expecting 1", count);
+ FAIL;
+ } else
+ CHECK;
+
+ if (names == NULL) {
+ report("NULL was returned");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ lowerstring(*names);
+ patternarg = "xtfont0";
+ if (strcmp(*names, patternarg) != 0) {
+ report("returned name was '%s', expecting '%s'", *names, patternarg);
+ FAIL;
+ } else
+ CHECK;
+
+ xtfont0.per_char = NULL;
+ if (checkfsp(finfo, &xtfont0, xtfont0cpright))
+ CHECK;
+ else {
+ report("font infomation was incorrect");
+ FAIL;
+ }
+
+ CHECKPASS(4);
+>>ASSERTION Good A
+Each asterisk (*) in the string is a wildcard for any number of characters.
+>>STRATEGY
+Set patternarg to "x*t*t*"
+Call XListFontsWithInfo.
+Verify that at least all the xtest fonts are returned, and
+that any other returned string matches the patternarg.
+>>CODE
+char **names;
+char *curname;
+int i;
+int j;
+
+ patternarg = "x*t*t*";
+ names = XCALL;
+
+ if (count < XT_NFONTS) {
+ report("returned count was %d, expecting at least %d", count,XT_NFONTS);
+ FAIL;
+ } else
+ CHECK;
+
+ if (names == NULL) {
+ report("returned name pointer was NULL");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ for (i = 0; i < count; i++) {
+ curname = names[i];
+ lowerstring(curname);
+ for (j = 0; j < nfontinfo; j++) {
+ if (strcmp(curname, fontinfo[j].name) == 0) {
+ /* Check if we have already seen this one */
+ if (fontinfo[j].flag) {
+ report("name %s repeated in list", curname);
+ FAIL;
+ } else {
+ fontinfo[j].flag = 1;
+
+ /* Check font infomation */
+ trace("checking font %s", curname);
+ fontinfo[j].fontstruct->per_char = NULL;
+ if (checkfsp(&finfo[i], fontinfo[j].fontstruct,
+ *fontinfo[j].string)) {
+ CHECK;
+ } else {
+ report("font information was incorrect");
+ FAIL;
+ }
+ }
+ break;
+ }
+ }
+ if (j == nfontinfo) {
+ char *cp;
+
+ /* It wasn't one of ours... */
+ trace("extra font name %s found", curname);
+ cp = strchr(curname, 'x');
+ if (cp == NULL) {
+ report("Found name %s that did not match patternarg");
+ FAIL;
+ } else if ((cp = strchr(cp, 't')) == NULL) {
+ report("Found name %s that did not match patternarg");
+ FAIL;
+ } else if ((cp = strchr(cp, 't')) == NULL) {
+ report("Found name %s that did not match patternarg");
+ FAIL;
+ } else {
+ CHECK;
+ }
+ }
+ }
+ for (i = 0; i < nfontinfo; i++) {
+ if (fontinfo[i].flag == 0) {
+ report("xtest font '%s' was not found", fontinfo[i].name);
+ FAIL;
+ } else {
+ /* reset to zero for next test */
+ fontinfo[i].flag = 0;
+ CHECK;
+ }
+ }
+
+ CHECKPASS(2+count+nfontinfo);
+>>ASSERTION Good A
+Each question mark (?) in the string is a wildcard for a single character.
+>>STRATEGY
+Set patternarg to "x?f?nt?"
+Call XListFontsWithInfo.
+Verify that returned count is at least XT_NFONTS
+Verify that the xtest font names are returned.
+Verify that any other name returned matches the patternarg.
+Verify that font information is correct for the xtest fonts.
+>>CODE
+char **names;
+char *curname;
+int i;
+int j;
+
+ patternarg = "x?f?nt?";
+ names = XCALL;
+
+ if (count < XT_NFONTS) {
+ report("returned count was %d, expecting at least %d", count,XT_NFONTS);
+ FAIL;
+ } else
+ CHECK;
+
+ if (names == NULL) {
+ report("returned name pointer was NULL");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ for (i = 0; i < count; i++) {
+ curname = names[i];
+ lowerstring(curname);
+ for (j = 0; j < nfontinfo; j++) {
+ if (strcmp(curname, fontinfo[j].name) == 0) {
+ /* Check if we have already seen this one */
+ if (fontinfo[j].flag) {
+ report("name %s repeated in list", curname);
+ FAIL;
+ } else {
+ fontinfo[j].flag++;
+
+ trace("checking font %s", curname);
+ fontinfo[j].fontstruct->per_char = NULL;
+ if (checkfsp(&finfo[i], fontinfo[j].fontstruct,
+ *fontinfo[j].string)) {
+ CHECK;
+ } else {
+ report("font information was incorrect");
+ FAIL;
+ }
+ }
+ break;
+ }
+ }
+ if (j == nfontinfo) {
+ int len;
+
+ /* It wasn't one of ours... */
+ trace("extra font name %s found", curname);
+ len = strlen(patternarg);
+ if (strlen(curname) != len) {
+ report("name '%s' did not match patternarg");
+ FAIL;
+ } else {
+ for (j = 0; j < len; j++) {
+ if (patternarg[j] == '?')
+ continue;
+ if (curname[j] != patternarg[j]) {
+ report("name '%s' did not match patternarg");
+ FAIL;
+ break;
+ }
+ }
+ if (j == len)
+ CHECK;
+ }
+ }
+ }
+ for (i = 0; i < nfontinfo; i++) {
+ if (fontinfo[i].flag == 0) {
+ report("xtest font '%s' was not found", fontinfo[i].name);
+ FAIL;
+ } else {
+ /* reset to zero for next test */
+ fontinfo[i].flag = 0;
+ CHECK;
+ }
+ }
+ CHECKPASS(2+count+nfontinfo);
+
+>>ASSERTION Good A
+The number of fonts returned in the count_return argument will not
+exceed maxnames.
+>>STRATEGY
+Set maxnames to 1
+Set patternarg to "*"
+Verify that only one name was returned.
+>>CODE
+char **names;
+
+ maxnames = 1;
+ patternarg = "*";
+
+ names = XCALL;
+
+ if (count > maxnames) {
+ report("returned count was %d, not expecting it to exceed %d", count, maxnames);
+ FAIL;
+ } else {
+ PASS;
+ }
+
+>>ASSERTION Bad A
+When there are no available font names that
+match the pattern
+argument,
+then a call to xname
+returns NULL.
+>>STRATEGY
+Set patternarg to a bad name.
+Call XListFontsWithInfo.
+Verify tht NULL is returned.
+>>CODE
+char **names;
+
+ patternarg = "xtfont non existant name";
+
+ names = XCALL;
+
+ if (names != NULL) {
+ report("returned pointer was not NULL");
+ FAIL;
+ } else
+ PASS;
+>>ASSERTION Bad A
+.ER BadAlloc
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/ptimg/a24.dat b/xc/test/xsuite/xtest/tset/CH06/ptimg/a24.dat
new file mode 100644
index 000000000..f8f8f2594
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/ptimg/a24.dat
@@ -0,0 +1,36 @@
+! $XConsortium$
+100 90 32
+1
+2327,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
+100 90 32
+2328,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/ptimg/a27.dat b/xc/test/xsuite/xtest/tset/CH06/ptimg/a27.dat
new file mode 100644
index 000000000..3a051736d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/ptimg/a27.dat
@@ -0,0 +1,4 @@
+! $XConsortium$
+100 90 32
+1
+2327,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/ptimg/a29.dat b/xc/test/xsuite/xtest/tset/CH06/ptimg/a29.dat
new file mode 100644
index 000000000..7b70b7e04
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/ptimg/a29.dat
@@ -0,0 +1,105 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+1
+2327,0
+100 90 32
+2
+2327,0
+100 90 32
+3
+2327,0
+100 90 32
+4
+2327,0
+100 90 32
+6
+2327,0
+100 90 32
+7
+2327,0
+100 90 32
+10
+2327,0
+100 90 32
+33
+2327,0
+100 90 32
+81
+2327,0
+100 90 32
+a3
+2327,0
+100 90 32
+ff
+2327,0
+100 90 32
+100
+2327,0
+100 90 32
+12c
+2327,0
+100 90 32
+3e8
+2327,0
+100 90 32
+111111
+2327,0
+100 90 32
+400200
+2327,0
+100 90 32
+777777
+2327,0
+100 90 32
+1
+2327,0
+100 90 32
+2
+2327,0
+100 90 32
+3
+2327,0
+100 90 32
+4
+2327,0
+100 90 32
+6
+2327,0
+100 90 32
+7
+2327,0
+100 90 32
+10
+2327,0
+100 90 32
+33
+2327,0
+100 90 32
+81
+2327,0
+100 90 32
+a3
+2327,0
+100 90 32
+ff
+2327,0
+100 90 32
+100
+2327,0
+100 90 32
+12c
+2327,0
+100 90 32
+3e8
+2327,0
+100 90 32
+111111
+2327,0
+100 90 32
+400200
+2327,0
+100 90 32
+777777
+2327,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/ptimg/a31.dat b/xc/test/xsuite/xtest/tset/CH06/ptimg/a31.dat
new file mode 100644
index 000000000..7b70b7e04
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/ptimg/a31.dat
@@ -0,0 +1,105 @@
+! $XConsortium$
+100 90 32
+2328,0
+100 90 32
+1
+2327,0
+100 90 32
+2
+2327,0
+100 90 32
+3
+2327,0
+100 90 32
+4
+2327,0
+100 90 32
+6
+2327,0
+100 90 32
+7
+2327,0
+100 90 32
+10
+2327,0
+100 90 32
+33
+2327,0
+100 90 32
+81
+2327,0
+100 90 32
+a3
+2327,0
+100 90 32
+ff
+2327,0
+100 90 32
+100
+2327,0
+100 90 32
+12c
+2327,0
+100 90 32
+3e8
+2327,0
+100 90 32
+111111
+2327,0
+100 90 32
+400200
+2327,0
+100 90 32
+777777
+2327,0
+100 90 32
+1
+2327,0
+100 90 32
+2
+2327,0
+100 90 32
+3
+2327,0
+100 90 32
+4
+2327,0
+100 90 32
+6
+2327,0
+100 90 32
+7
+2327,0
+100 90 32
+10
+2327,0
+100 90 32
+33
+2327,0
+100 90 32
+81
+2327,0
+100 90 32
+a3
+2327,0
+100 90 32
+ff
+2327,0
+100 90 32
+100
+2327,0
+100 90 32
+12c
+2327,0
+100 90 32
+3e8
+2327,0
+100 90 32
+111111
+2327,0
+100 90 32
+400200
+2327,0
+100 90 32
+777777
+2327,0
diff --git a/xc/test/xsuite/xtest/tset/CH06/ptimg/ptimg.m b/xc/test/xsuite/xtest/tset/CH06/ptimg/ptimg.m
new file mode 100644
index 000000000..caafd16e2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/ptimg/ptimg.m
@@ -0,0 +1,852 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XPutImage CH06
+void
+XPutImage(display, d, gc, image, src_x, src_y, dest_x, dest_y, width, height)
+Display *display = Dsp;
+Drawable d;
+GC gc;
+>># Following was initialised incorrectly. Have removed it ..sr
+XImage *image;
+int src_x = 0;
+int src_y = 0;
+int dest_x = 0;
+int dest_y = 0;
+unsigned int width = 1;
+unsigned int height = 1;
+>>EXTERN
+static struct area area;
+
+/*
+ * doxcall() - set globals, remember dest and size, call xname
+ */
+static void
+doxcall(win, sx, sy, dx, dy, w, h)
+Window win;
+int sx, sy, dx, dy;
+unsigned int w, h;
+{
+ d = win;
+ src_x = sx;
+ src_y = sy;
+ dest_x = dx;
+ dest_y = dy;
+ width = w;
+ height = h;
+ /* remember area */
+ area.x = dest_x;
+ area.y = dest_y;
+ area.width = width;
+ area.height = height;
+}
+
+#define A_IMAGE image
+>>ASSERTION Good A
+On a call to xname the section of
+.A image
+defined by the
+.A src_x ,
+.A src_y ,
+.A width
+and
+.A height
+is drawn on the specified part of the
+.A drawable .
+>>STRATEGY
+Create image in XYPixmap format.
+Create drawable.
+Call XPutImage.
+Verify results.
+Repeat for XYBitmap and ZPixmap.
+Repeat for each visual.
+>>CODE
+XVisualInfo *vp;
+Window w;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+/* Create image in XYPixmap format. */
+ /* do XYPixmap testing */
+ trace("XYPixmap");
+ image = makeimg(display, vp, XYPixmap);
+ dsetimg(image, W_BG);
+/* Create drawable. */
+ w = makewin(display, vp);
+ gc = makegc(display, w);
+ dset(display, w, W_FG);
+
+/* Call XPutImage. */
+ doxcall(w, 0, 0, 0, 0, image->width, image->height);
+ XCALL;
+
+/* Verify results. */
+ if (checkarea(display, w, &area, W_BG, W_FG, CHECK_ALL) == False) {
+ report("Area was not properly put.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat for XYBitmap and ZPixmap. */
+ /* do ZPixmap testing */
+ trace("ZPixmap");
+ image = makeimg(display, vp, ZPixmap);
+ dsetimg(image, W_BG);
+ w = makewin(display, vp);
+ gc = makegc(display, w);
+ dset(display, w, W_FG);
+
+ doxcall(w, image->width/2, image->height/2, 0, 0, image->width/4, image->height/4);
+ XCALL;
+
+ if (checkarea(display, w, &area, W_BG, W_FG, CHECK_ALL) == False) {
+ report("Area was not properly put.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ /* do XYBitmap testing */
+ trace("XYBitmap");
+ image = makeimg(display, vp, XYBitmap);
+ dsetimg(image, 0L); /* so we'll fill with bg */
+ w = makewin(display, vp);
+ gc = makegc(display, w);
+ dset(display, w, W_FG); /* so we can tell the difference */
+
+ doxcall(w, 0, 0, 1, 1, image->width/2, image->height);
+ XCALL;
+
+ if (checkarea(display, w, &area, W_BG, W_FG, CHECK_ALL) == False) {
+ report("Area was not properly put.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Repeat for each visual. */
+ }
+
+ CHECKPASS(3*nvinf());
+>>ASSERTION Good C
+When the
+.A image
+.M format
+is
+.S XYBitmap ,
+then the
+.M foreground
+pixel in
+.A gc
+defines the source for the one bits in the image, and the
+.M background
+pixel defines the source for the zero bits.
+>>STRATEGY
+Create depth 1 image in XYBitmap format.
+Create drawable.
+Set all bits in image to zero.
+Set every pixel in drawable to W_FG.
+Call XPutImage.
+Verify results.
+Set every pixel in drawable to W_BG.
+Call XPutImage.
+Verify results.
+Set all bits in image to one.
+Set every pixel in drawable to W_FG.
+Call XPutImage.
+Verify results.
+Set every pixel in drawable to W_BG.
+Call XPutImage.
+Verify results.
+Repeat for each visual.
+>>CODE
+XVisualInfo *vp;
+Window w;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+/* Create image in XYBitmap format. */
+ image = makeimg(display, vp, XYBitmap);
+
+/* Create drawable. */
+ w = makewin(display, vp);
+ gc = makegc(display, w);
+
+/* Set all bits in image to zero. */
+ trace("Bits 0, drawable W_FG");
+ dsetimg(image, 0L);
+
+/* Set every pixel in drawable to W_FG. */
+ dset(display, w, W_FG);
+
+/* Call XPutImage. */
+ doxcall(w, 0, 0, 0, 0, image->width, image->height);
+ XCALL;
+
+/* Verify results. */
+ if (checkarea(display, w, &area, W_BG, W_BG, CHECK_ALL) == False) {
+ report("Area was not properly put.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Set every pixel in drawable to W_BG. */
+ trace("Bits 0, drawable W_BG");
+ dset(display, w, W_BG);
+
+/* Call XPutImage. */
+ doxcall(w, 0, 0, 0, 0, image->width, image->height);
+ XCALL;
+
+/* Verify results. */
+ if (checkarea(display, w, &area, W_BG, W_BG, CHECK_ALL) == False) {
+ report("Area was not properly put.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Set all bits in image to one. */
+ trace("Bits 1, drawable W_FG");
+ dsetimg(image, 1);
+
+/* Set every pixel in drawable to W_FG. */
+ dset(display, w, W_FG);
+
+/* Call XPutImage. */
+ doxcall(w, 0, 0, 0, 0, image->width, image->height);
+ XCALL;
+
+/* Verify results. */
+ if (checkarea(display, w, &area, W_FG, W_FG, CHECK_ALL) == False) {
+ report("Area was not properly put.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Set every pixel in drawable to W_BG. */
+ trace("Bits 1, drawable W_BG");
+ dset(display, w, W_BG);
+
+/* Call XPutImage. */
+ doxcall(w, 0, 0, 0, 0, image->width, image->height);
+ XCALL;
+
+/* Verify results. */
+ if (checkarea(display, w, &area, W_FG, W_FG, CHECK_ALL) == False) {
+ report("Area was not properly put.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Repeat for each visual. */
+ }
+
+ CHECKPASS(4*nvinf());
+>>ASSERTION gc
+On a call to xname the GC components
+.M function ,
+.M plane-mask ,
+.M subwindow-mode ,
+.M clip-x-origin ,
+.M clip-y-origin
+and
+.M clip-mask
+are used.
+>>ASSERTION gc
+On a call to xname the GC mode-dependent components
+.M foreground
+and
+.M background
+are used.
+>>#ADDED peterc As per external review comments.
+>>#NOTE peterc I don't think the spec is clear enough for testing this...
+>>#NOTE kieron Clarified with rws, but status of b.p.p. uncertain.
+>># Protocol has 1,4,8,16,24,32 as allowable values, but Xlib
+>># seems to allow 4,8,12,16,20,24,28,32.... Is 1 treated just
+>># like XYPixmap with depth 1??? What about the other values?
+>># Protocol allows it to be > depth with extra bits ignored!
+>>ASSERTION Good A
+If drawables with depth < 32 are supported:
+When the image differs from the X server's format in bits-per-pixel,
+then the image will be converted to that format before drawing on
+the specified drawable.
+>>STRATEGY
+Call makeimg to create image in ZPixmap format using
+server's format in bits-per-pixel, scanline-pad, byte-order,
+and bit-order.
+Call makeimg to create another image in ZPixmap format.
+Set bits-per-pixel to be different from the server's format, but <= depth.
+Allocate memory for image data, discarding old data and clearing new.
+Write known pattern to both images, using min(normal b.p.p, abnormal b.p.p) bits.
+Create drawable.
+Call XPutImage with server-normal image.
+Compare server-normal image with drawable.
+Clear drawable to W_FG.
+Call XPutImage with non-server-normal image.
+Compare same image with drawable.
+Compare other image with drawable.
+Repeat for each visual.
+>>CODE
+XImage *im1, *im2;
+XVisualInfo *vp;
+Window w;
+char *data;
+int supported = 0;
+int nbits;
+int i;
+static int legal_bpps[] = {1, 4, 8, 16, 24, 32, 0};
+#define ROUNDUP(nbytes, pad) ((((nbytes) + ((pad)-1)) / (pad)) * ((pad)>>3))
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+ if (vp->depth == 32)
+ continue;
+
+ supported++;
+
+/* Call makeimg to create image in ZPixmap format using */
+/* server's format in bits-per-pixel, scanline-pad, byte-order, */
+/* and bit-order. */
+ trace("ZPixmap, standard");
+ im1 = makeimg(display, vp, ZPixmap);
+
+ for (i = 0; legal_bpps[i]; i++) {
+ if (legal_bpps[i] >= im1->depth &&
+ legal_bpps[i] != im1->bits_per_pixel)
+ break;
+ }
+ if (!legal_bpps[i]) {
+ report("Could not find differing bits_per_pixel");
+ FAIL;
+ continue;
+ }
+
+/* Call makeimg to create another image in ZPixmap format. */
+ im2 = makeimg(display, vp, ZPixmap);
+
+/* Set bits-per-pixel to be different from the server's format, but >= depth. */
+ im2->bits_per_pixel = legal_bpps[i];
+ trace("ZPixmap. Non-server normal: depth=%d, bits_per_pixel=%d",im2->depth, im2->bits_per_pixel);
+
+/* Allocate memory for image data, discarding old data and clearing new. */
+ /* discard old data as provided by makeimg() */
+ if (im2->data != (char *) 0)
+ XFree(im2->data);
+ /* allocate a little extra just to be safe */
+ im2->bytes_per_line = ROUNDUP((im2->bits_per_pixel * im2->width), im2->bitmap_pad);
+ data = (char *) malloc(im2->bytes_per_line * im2->height);
+ if (data == (char *) 0) {
+ delete("malloc() error");
+ return;
+ } else
+ CHECK;
+ im2->data = data;
+ /* clear new data to 0L */
+ dsetimg(im2, 0L);
+/* Write known pattern to both images, using min(normal b.p.p, abnormal b.p.p) bits. */
+ nbits = (im1->bits_per_pixel < im2->bits_per_pixel) ?
+ im1->bits_per_pixel : im2->bits_per_pixel;
+ trace("patterning im1 with %x", DEPTHMASK(nbits));
+ patternimg(im1, DEPTHMASK(nbits));
+ trace("patterning im2 with %x", DEPTHMASK(nbits));
+ patternimg(im2, DEPTHMASK(nbits));
+/* Create drawable. */
+ w = makewin(display, vp);
+ gc = makegc(display, w);
+ dset(display, w, W_FG);
+/* Call XPutImage with server-normal image. */
+ image = im1;
+ doxcall(w, 0, 0, 0, 0, image->width, image->height);
+ XCALL;
+/* Compare server-normal image with drawable. */
+ if (compsavimage(display, w, image) == False) {
+ report("Area (server-normal bits-per-pixel=%d) was not properly put.", image->bits_per_pixel);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Clear drawable to W_FG. */
+ dset(display, w, W_FG);
+/* Call XPutImage with non-server-normal image. */
+ image = im2;
+ doxcall(w, 0, 0, 0, 0, image->width, image->height);
+ XCALL;
+/* Compare same image with drawable. */
+ if (compsavimage(display, w, image) == False) {
+ report("Area (non-server-normal bits-per-pixel=%d) was not properly put.", image->bits_per_pixel);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Compare other image with drawable. */
+ if (compsavimage(display, w, im1) == False) {
+ report("Server-normal image differs from drawable.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Repeat for each visual. */
+ }
+
+ if (supported == 0) {
+ report("Drawables with changeable bits_per_pixel not supported");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ } else
+ CHECK;
+
+ CHECKPASS(1+4*supported);
+>>#ADDED peterc As per external review comments.
+>>#NOTE peterc I don't think the spec is clear enough for testing this...
+>>ASSERTION Good A
+When the image differs from the X server's format in
+scanline-pad,
+byte-order,
+or
+bit-order,
+then the image will be converted to that format before drawing on
+the specified drawable.
+>>STRATEGY
+Call makeimg to create image in ZPixmap format using
+server's format in bits-per-pixel, scanline-pad, byte-order,
+and bit-order.
+Call makeimg to create another image in ZPixmap format.
+Set scanline-pad to 8 if it is 32, else set it to 32.
+Toggle byte-order between LSBFirst and MSBFirst.
+Toggle bit-order between LSBFirst and MSBFirst.
+Allocate memory for image data, discarding old data and clearing new.
+Write known pattern to both images, using as many bits as we can.
+Create drawable.
+Call XPutImage with server-normal image.
+Compare same image with drawable.
+Clear drawable to W_FG.
+Call XPutImage with non-server-normal image.
+Compare same image with drawable.
+Compare other image with drawable.
+Repeat for each visual.
+>>CODE
+XImage *im1, *im2;
+XVisualInfo *vp;
+Window w;
+char *data;
+int nbits;
+
+ for (resetvinf(VI_WIN_PIX); nextvinf(&vp); ) {
+
+/* Call makeimg to create image in ZPixmap format using */
+/* server's format in bits-per-pixel, scanline-pad, byte-order, */
+/* and bit-order. */
+ trace("ZPixmap, standard");
+ im1 = makeimg(display, vp, ZPixmap);
+
+/* Call makeimg to create another image in ZPixmap format. */
+ im2 = makeimg(display, vp, ZPixmap);
+
+/* Set scanline-pad to 8 if it is 32, else set it to 32. */
+ if (im2->bitmap_unit == 32)
+ im2->bitmap_unit = 8;
+ else if (im2->bitmap_pad == 32)
+ im2->bitmap_unit = 32;
+/* Toggle byte-order between LSBFirst and MSBFirst. */
+ if (im2->byte_order == LSBFirst)
+ im2->byte_order = MSBFirst;
+ else
+ im2->byte_order = LSBFirst;
+/* Toggle bit-order between LSBFirst and MSBFirst. */
+ if (im2->bitmap_bit_order == LSBFirst)
+ im2->bitmap_bit_order = MSBFirst;
+ else
+ im2->bitmap_bit_order = LSBFirst;
+
+/* Allocate memory for image data, discarding old data and clearing new. */
+ /* discard old data as provided by makeimg() */
+ if (im2->data != (char *) 0)
+ XFree(im2->data);
+ /* allocate a little extra just to be safe */
+ data = (char *) malloc(2 * im2->bytes_per_line * im2->height);
+ if (data == (char *) 0) {
+ delete("malloc() error");
+ return;
+ }
+ else
+ CHECK;
+ im2->data = data;
+ /* clear new data to 0L */
+ dsetimg(im2, 0L);
+/* Write known pattern to both images, using as many bits as we can. */
+ nbits = (im2->bitmap_unit < im1->bitmap_unit) ?
+ im2->bitmap_unit : im1->bitmap_unit;
+ trace("patterning im1 with %x", DEPTHMASK(nbits));
+ patternimg(im1, DEPTHMASK(nbits));
+ trace("patterning im2 with %x", DEPTHMASK(nbits));
+ patternimg(im2, DEPTHMASK(nbits));
+/* Create drawable. */
+ w = makewin(display, vp);
+ gc = makegc(display, w);
+ dset(display, w, W_FG);
+/* Call XPutImage with server-normal image. */
+ image = im1;
+ doxcall(w, 0, 0, 0, 0, image->width, image->height);
+ XCALL;
+/* Compare same image with drawable. */
+ if (compsavimage(display, w, image) == False) {
+ report("Area (server-normal bits-per-pixel=%d) was not properly put.", image->bits_per_pixel);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Clear drawable to W_FG. */
+ dset(display, w, W_FG);
+/* Call XPutImage with non-server-normal image. */
+ image = im2;
+ doxcall(w, 0, 0, 0, 0, image->width, image->height);
+ XCALL;
+/* Compare same image with drawable. */
+ if (compsavimage(display, w, image) == False) {
+ report("Area (non-server-normal bits-per-pixel=%d) was not properly put.", image->bits_per_pixel);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Compare other image with drawable. */
+ if (compsavimage(display, w, im1) == False) {
+ report("Server-normal image differs from drawable.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat for each visual. */
+ }
+
+ CHECKPASS(4*nvinf());
+>>ASSERTION Bad A
+When the
+.A image
+.M format
+is
+.S XYPixmap
+or
+.S ZPixmap
+and the
+.A image
+.M depth
+does not match the
+.A drawable
+.M depth ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create drawable.
+Create image in XYPixmap format with depth different from drawable using XCreateImage.
+Allocate memory for image data.
+Call XPutImage to write image to drawable.
+Verify XPutImage generated BadMatch error.
+Destroy image with XDestroyImage.
+Create image in ZPixmap format with depth different from drawable using XCreateImage.
+Allocate memory for image data.
+Call XPutImage to write image to drawable.
+Verify XPutImage generated BadMatch error.
+Destroy image with XDestroyImage.
+>>CODE BadMatch
+XVisualInfo *vp;
+Window w;
+int image_depth;
+char *data;
+
+ /* choose first visual: any will do */
+ resetvinf(VI_WIN_PIX); nextvinf(&vp);
+
+ if (nvinf() == 0) {
+ unsupported("No usable visuals, check XT_DEBUG_WINDOWS_ONLY and XT_DEBUG_PIXMAPS_ONLY");
+ return;
+ } else
+ CHECK;
+ /* ensured that there is at least one drawable */
+
+/* Create drawable. */
+ w = makewin(display, vp);
+ gc = makegc(display, w);
+
+/* Create image in XYPixmap format with depth different from drawable. */
+ if (vp->depth == 1)
+ image_depth = 8;
+ else
+ image_depth = 1;
+ image = XCreateImage(display, vp->visual, image_depth, XYPixmap, 0, NULL, I_STDWIDTH, I_STDHEIGHT, BitmapPad(display), 0);
+ if (image == (XImage *) 0) {
+ delete("XCreateImage failed");
+ return;
+ }
+ else
+ CHECK;
+
+/* Allocate memory for image data. */
+ data = (char *) malloc(image->height * image->bytes_per_line * image->depth);
+ if (data == (char *) 0) {
+ delete("malloc() error");
+ return;
+ }
+ else
+ CHECK;
+ image->data = data;
+
+/* Call XPutImage to write image to drawable. */
+ doxcall(w, 0, 0, 0, 0, image->width, image->height);
+ XCALL;
+
+/* Verify XPutImage generated BadMatch error. */
+ if (geterr() != BadMatch)
+ FAIL;
+ else
+ CHECK;
+
+/* Destroy image with XDestroyImage. */
+ XDestroyImage(image);
+
+/* Create image in ZPixmap format with depth different from drawable. */
+ image = XCreateImage(display, vp->visual, image_depth, ZPixmap, 0, NULL, I_STDWIDTH, I_STDHEIGHT, BitmapPad(display), 0);
+ trace("Repeat for ZPixmap format image.");
+ if (image == (XImage *) 0) {
+ delete("XCreateImage failed");
+ return;
+ }
+ else
+ CHECK;
+
+/* Allocate memory for image data. */
+ data = (char *) malloc(image->bytes_per_line * image->height);
+ if (data == (char *) 0) {
+ delete("malloc() error");
+ return;
+ }
+ else
+ CHECK;
+ image->data = data;
+
+/* Call XPutImage to write image to drawable. */
+ doxcall(w, 0, 0, 0, 0, image->width, image->height);
+ XCALL;
+
+/* Verify XPutImage generated BadMatch error. */
+ if (geterr() != BadMatch)
+ FAIL;
+ else
+ CHECK;
+
+/* Destroy image with XDestroyImage. */
+ XDestroyImage(image);
+
+ CHECKPASS(7);
+>>#
+>># The following assertion and the corresponding test were commented out
+>># during the alpha test period in response to bug report 0180.
+>># The rationale for this is that (despite the statements in the X11R4 Xlib
+>># specification) the Xlib XImage functions should not have to cope
+>># with garbage combinations.
+>>#
+>># >>ASSERTION Bad A
+>># When the
+>># .A image
+>># .M format
+>># is
+>># .S XYBitmap
+>># and the
+>># .A image
+>># .M depth
+>># is not one,
+>># then a
+>># .S BadMatch
+>># error occurs.
+>># >>STRATEGY
+>># Create drawable.
+>># Create image in XYBitmap with depth 8 using XCreateImage.
+>># Allocate memory for image data.
+>># Call XPutImage to write image to drawable.
+>># Verify XPutImage generated BadMatch error.
+>># Destroy image with XDestroyImage.
+>># >>CODE BadMatch
+>># XVisualInfo *vp;
+>># Window w;
+>># int depth;
+>># char *data;
+>>#
+>># /* choose first visual: any will do */
+>># resetvinf(VI_WIN_PIX); nextvinf(&vp);
+>>#
+>># if (nvinf() == 0) {
+>># unsupported("No usable visuals, check XT_DEBUG_WINDOWS_ONLY and XT_DEBUG_PIXMAPS_ONLY");
+>># return;
+>># } else
+>># CHECK;
+>># /* ensured that there is at least one drawable */
+>>#
+>># /* Create drawable. */
+>># w = makewin(display, vp);
+>># gc = makegc(display, w);
+>>#
+>># /* Create image in XYBitmap with depth 8. */
+>># trace("XYBitmap image");
+>># depth = 8;
+>># image = XCreateImage(display, vp->visual, depth, XYBitmap, 0, NULL, I_STDWIDTH, I_STDHEIGHT, BitmapPad(display), 0);
+>># if (image == (XImage *) 0) {
+>># delete("XCreateImage failed");
+>># return;
+>># }
+>># else
+>># CHECK;
+>>#
+>># /* Allocate memory for image data. */
+>># data = (char *) malloc(image->height * image->bytes_per_line * depth);
+>># if (data == (char *) 0) {
+>># delete("malloc() error");
+>># return;
+>># }
+>># else
+>># CHECK;
+>># image->data = data;
+>>#
+>># /* Call XPutImage to write image to drawable. */
+>># doxcall(w, 0, 0, 0, 0, image->width, image->height);
+>># XCALL;
+>>#
+>># /* Verify XPutImage generated BadMatch error. */
+>># if (geterr() != BadMatch)
+>># FAIL;
+>># else
+>># CHECK;
+>>#
+>># /* Destroy image with XDestroyImage. */
+>># XDestroyImage(image);
+>>#
+>># CHECKPASS(4);
+>>#
+>>ASSERTION Bad A
+.ER BadDrawable
+>>ASSERTION Bad A
+.ER BadGC
+>>ASSERTION Bad A
+.ER BadMatch inputonly
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-depth
+>>ASSERTION Bad A
+.ER BadMatch gc-drawable-screen
+>>#
+>># The following assertion and the corresponding test were commented out
+>># during the alpha test period in response to bug report 0180.
+>># The rationale for this is that (despite the statements in the X11R4 Xlib
+>># specification) the Xlib XImage functions should not have to cope
+>># with garbage combinations.
+>>#
+>># >>ASSERTION Bad A
+>># When the image
+>># .M format
+>># is other than
+>># .S XYBitmap ,
+>># .S XYPixmap
+>># or
+>># .S ZPixmap ,
+>># then a
+>># .S BadValue
+>># error occurs.
+>># >>STRATEGY
+>># Create drawable.
+>># Create image in formats other than XYBitmap, XYPixmap, and ZPixmap with XCreateImage.
+>># Allocate memory for image data.
+>># Call XPutImage to write image to drawable.
+>># Verify XPutImage generated BadValue error.
+>># Destroy image with XDestroyImage.
+>># >>EXTERN
+>># static int allowed[] = {XYBitmap, XYPixmap, ZPixmap};
+>># >>CODE BadValue
+>># XVisualInfo *vp;
+>># Window w;
+>># char *data;
+>># long format[NM_LEN];
+>># int i, n;
+>>#
+>># /* choose first visual: any will do */
+>># resetvinf(VI_WIN_PIX); nextvinf(&vp);
+>>#
+>># if (nvinf() == 0) {
+>># unsupported("No usable visuals, check XT_DEBUG_WINDOWS_ONLY and XT_DEBUG_PIXMAPS_ONLY");
+>># return;
+>># } else
+>># CHECK;
+>># /* ensured that there is at least one drawable */
+>>#
+>># /* Create drawable. */
+>># w = makewin(display, vp);
+>># gc = makegc(display, w);
+>>#
+>># /* Create image in formats other than XYBitmap, XYPixmap, and ZPixmap. */
+>># if ((n=notmember(allowed, NELEM(allowed), format)) <= 0) {
+>># delete("No bad formats found");
+>># return;
+>># } else if (n > NM_LEN) {
+>># delete("notmember unexpectedly gave %d results (> %d)", n, NM_LEN);
+>># return;
+>># } else
+>># CHECK;
+>>#
+>># for(i=0; i<n; i++) {
+>># trace("Bad format number %d of %d", i+1, n);
+>># /* can't use makeimg as it checks for bad formats */
+>># image = XCreateImage(display, vp->visual, vp->depth, (int)format[i],
+>># 0, NULL, I_STDWIDTH, I_STDHEIGHT, BitmapPad(display), 0);
+>>#
+>># if (image == (XImage *) 0) {
+>># delete("XCreateImage failed.");
+>># return;
+>># } else
+>># CHECK;
+>>#
+>># /* Allocate memory for image data. */
+>># /* this hopefully allocates too much memory... */
+>># /* better too much than too little */
+>># data = (char *) malloc(2 * image->height * image->bytes_per_line * image->depth);
+>># if (data == (char *) 0) {
+>># delete("malloc() error");
+>># return;
+>># }
+>># else
+>># CHECK;
+>># image->data = data;
+>>#
+>># /* Call XPutImage to write image to drawable. */
+>># doxcall(w, 0, 0, 0, 0, image->width, image->height);
+>># XCALL;
+>>#
+>># /* Verify XPutImage generated BadValue error. */
+>># if (geterr() != BadValue) {
+>># report("%s gave %s instead of BadValue with format %d",
+>># TestName, errorname(geterr()), (int)format[i]);
+>># FAIL;
+>># } else
+>># CHECK;
+>>#
+>># /* Destroy image with XDestroyImage. */
+>># XDestroyImage(image);
+>># }
+>>#
+>># CHECKPASS(2+3*n);
+>>#
+>># HISTORY peterc Completed Incorporated RTCB3.
+>># HISTORY peterc Completed Engineering.
+>># HISTORY kieron Completed Re-Engineering and bug fixing after first snapshot.
+>># HISTORY kieron Completed Use ZPixmap where format doesn't matter or we're>># not checking all of them for speed-up.
diff --git a/xc/test/xsuite/xtest/tset/CH06/qrybstcrsr/qrybstcrsr.m b/xc/test/xsuite/xtest/tset/CH06/qrybstcrsr/qrybstcrsr.m
new file mode 100644
index 000000000..6e64301f8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/qrybstcrsr/qrybstcrsr.m
@@ -0,0 +1,188 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XQueryBestCursor CH06
+Status
+XQueryBestCursor(display, d, width, height, rwidth, rheight)
+Display *display = Dsp;
+Drawable d;
+unsigned int width;
+unsigned int height;
+unsigned int *rwidth = &cwidth;
+unsigned int *rheight = &cheight;
+>>EXTERN
+static unsigned int cheight, cwidth;
+>>ASSERTION Good B 1
+A call to xname returns in the
+.A width_return
+and
+.A height_return
+arguments the largest cursor height and width to those specified in
+.A height
+and
+.A width
+that can be fully displayed on the specified screen.
+>>STRATEGY
+Call XQueryBestCursor with width twice that of DisplayWidth and
+height twice that of DisplayHeight.
+Verify that XQueryBestCursor returns non-zero.
+Call XQueryBestCursor with returned values of width and height.
+Verify that XQueryBestCursor returns non-zero.
+Verify that XQueryBestCursor returns the previously returned
+values for width and height.
+Verify that returned values for width and height are small enough
+to be fully displayed on the specified screen.
+Repeat with initial width and height both set to zero.
+>>CODE
+unsigned int swidth;
+unsigned int sheight;
+Status qstat;
+
+ d = DRW(display);
+
+/* Dynamically determine width and height values */
+ swidth = DisplayWidth(display, DefaultScreen(display));
+ sheight = DisplayHeight(display, DefaultScreen(display));
+ width = 2 * swidth;
+ height = 2 * sheight;
+
+/* Call XQueryBestCursor with width twice that of DisplayWidth and */
+/* twice that of DisplayHeight. */
+ qstat = XCALL;
+
+/* Verify that XQueryBestCursor returns non-zero. */
+ if (qstat == 0) {
+ report("%s returned wrong value %ld", TestName, (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ width = cwidth;
+ height = cheight;
+
+ cwidth = cheight = 0;
+
+/* Call XQueryBestCursor with returned values of width and height. */
+ qstat = XCALL;
+
+/* Verify that XQueryBestCursor returns non-zero. */
+ if(qstat == 0) {
+ report("%s returned wrong value %ld", TestName, (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+/* Verify that XQueryBestCursor returns the previously returned */
+ if(width != cwidth) {
+ report("%s returned best width %d", TestName, cwidth);
+ report("after previously returning best width %d", width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(height != cheight) {
+ report("%s returned best height %d", TestName, cheight);
+ report("after previously returning best height %d", height);
+ FAIL;
+ } else
+ CHECK;
+/* Verify that returned values for width and height are small enough */
+/* to be fully displayed on the specified screen. */
+ if (cwidth > swidth) {
+ report("%s returned non-fully displayable width %d",
+ TestName, cwidth);
+ FAIL;
+ } else
+ CHECK;
+ if (cheight > sheight) {
+ report("%s returned non-fully displayable height %d",
+ TestName, cheight);
+ FAIL;
+ } else
+ CHECK;
+
+/* Repeat with initial width and height both set to zero. */
+ width = 0;
+ height = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("%s returned wrong value %ld", TestName, (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ width = cwidth;
+ height = cheight;
+
+ cwidth = cheight = 0;
+
+ qstat = XCALL;
+
+ if(qstat == 0) {
+ report("%s returned wrong value %ld", TestName, (long) qstat);
+ FAIL;
+ } else
+ CHECK;
+
+ trace("Status returned was %d", qstat);
+ trace("Best height (for %d ) = %d", height, cheight);
+ trace("Best width (for %d) = %d", width, cwidth);
+
+ if(width != cwidth) {
+ report("%s returned best width %d", TestName, cwidth);
+ report("after previously returning best width %d", width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(height != cheight) {
+ report("%s returned best height %d", TestName, cheight);
+ report("after previously returning best height %d", height);
+ FAIL;
+ } else
+ CHECK;
+ if (cwidth > swidth) {
+ report("%s returned non-fully displayable width %d",
+ TestName, cwidth);
+ FAIL;
+ } else
+ CHECK;
+ if (cheight > sheight) {
+ report("%s returned non-fully displayable height %d",
+ TestName, cheight);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(12);
+>>ASSERTION Bad A
+.ER BadDrawable
+>>#HISTORY peterc Completed Updated as per RTCB#3
+>>#HISTORY peterc Completed engineering
diff --git a/xc/test/xsuite/xtest/tset/CH06/qryfnt/qryfnt.m b/xc/test/xsuite/xtest/tset/CH06/qryfnt/qryfnt.m
new file mode 100644
index 000000000..db1d291a6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/qryfnt/qryfnt.m
@@ -0,0 +1,140 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XQueryFont CH06
+XFontStruct *
+
+Display *display = Dsp;
+XID font_ID;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>EXTERN
+extern int checkfsp();
+extern struct fontinfo fontinfo[];
+extern int nfontinfo;
+>>ASSERTION Good A
+>># Improved the wording a bit from that approved ....
+>># When the font with font_ID
+>># .A font_ID
+When the
+.A font_ID
+argument
+is a valid Font resource,
+then a call to xname returns a pointer to an
+.S XFontStruct
+structure which contains information on
+the font
+with font ID
+.A font_ID .
+>>STRATEGY
+For each xtest font
+ Load font with XLoadFont.
+ Set font_ID to font
+ Call XQueryFont.
+ Verify returned XFontStruct with known good one.
+>>CODE
+XFontStruct *fsp;
+Font font;
+int i;
+
+ for (i = 0; i < nfontinfo; i++) {
+ trace("Loading font %s", fontinfo[i].name);
+ font = XLoadFont(Dsp, fontinfo[i].name);
+ if (isdeleted())
+ return;
+
+ font_ID = font;
+ fsp = XCALL;
+ if (checkfsp(fsp, fontinfo[i].fontstruct, *fontinfo[i].string))
+ CHECK;
+ else {
+ report("Returned XFontStruct was incorrect");
+ FAIL;
+ }
+ }
+ CHECKPASS(nfontinfo);
+>>ASSERTION Good A
+When the
+.A font_ID
+argument
+specifies a
+.S GContext ,
+then a call to xname returns a pointer to an
+.S XFontStruct
+structure which contains information on
+the font in the corresponding GC's
+.M font
+field.
+>>STRATEGY
+Load font with
+>>CODE
+XFontStruct *fsp;
+Font font;
+GC gc;
+Drawable d;
+int i;
+
+ d = defdraw(Dsp, VI_WIN_PIX);
+ gc = makegc(Dsp, d);
+ if (isdeleted())
+ return;
+
+ for (i = 0; i < nfontinfo; i++) {
+ trace("Loading font %s", fontinfo[i].name);
+ font = XLoadFont(Dsp, fontinfo[i].name);
+ if (isdeleted())
+ return;
+
+ XSetFont(Dsp, gc, font);
+
+ font_ID = XGContextFromGC(gc);
+ fsp = XCALL;
+ if (checkfsp(fsp, fontinfo[i].fontstruct, *fontinfo[i].string))
+ CHECK;
+ else {
+ report("Returned XFontStruct was incorrect");
+ FAIL;
+ }
+ }
+ CHECKPASS(nfontinfo);
+>>ASSERTION Good A
+When the
+.A font_ID
+argument
+does not name a valid GContext or Font resource,
+then a call to xname returns
+.S NULL .
+>>STRATEGY
+Obtain a bad font ID.
+Call XQueryFont.
+Verify that null is returned.
+>>CODE
+Font font;
+XFontStruct *fsp;
+
+ font_ID = badfont(Dsp);
+ fsp = XCALL;
+
+ if (fsp != NULL) {
+ report("A non-NULL pointer was returned");
+ FAIL;
+ } else
+ PASS;
+
+>># The following has been removed, because it is not true. ..sr
+>># >>ASSERTION Bad A
+>># .ER BadFont bad-fontable
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/qrytxtex16/qrytxtex16.m b/xc/test/xsuite/xtest/tset/CH06/qrytxtex16/qrytxtex16.m
new file mode 100644
index 000000000..32b19962a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/qrytxtex16/qrytxtex16.m
@@ -0,0 +1,341 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XQueryTextExtents16 CH06
+>># Xlib.h says return is an int, spec does not mention return.
+Status
+xname
+Display *display = Dsp;
+XID font_ID;
+XChar2b *string = ch1;
+int nchars = NELEM(ch1);
+int *direction_return = &direction;
+int *font_ascent_return = &font_ascent;
+int *font_descent_return = &font_descent;
+XCharStruct *overall_return = &overall;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>EXTERN
+
+static XChar2b ch1[] = {
+ {0, 34}, {0, 54}, {0, 89}, {0, 100}, {0, 130}, {0, 201}, {0, 234}, {0, 255},
+ {1, 34}, {1, 54}, {1, 89}, {1, 100}, {1, 130}, {1, 201}, {1, 234}, {1, 255},
+ {2, 34}, {2, 54}, {2, 89}, {2, 100}, {2, 130}, {2, 201}, {2, 234}, {2, 255},
+ {33, 34}, {33, 54}, {33, 89}, {33, 100}, {33, 130}, {33, 201}, {33, 234}, {33, 255},
+ {36, 34}, {36, 54}, {36, 89}, {36, 100}, {36, 130}, {36, 201}, {36, 234}, {36, 255},
+ {38, 34}, {38, 54}, {38, 89}, {38, 100}, {38, 130}, {38, 201}, {38, 234}, {38, 255},
+ {48, 34}, {48, 54}, {48, 89}, {48, 100}, {48, 130}, {48, 201}, {48, 234}, {48, 255},
+ {120, 34}, {120, 54}, {120, 89}, {120, 100}, {120, 130}, {120, 201}, {120, 234}, {120, 255},
+};
+
+static int direction;
+static int font_ascent;
+static int font_descent;
+static XCharStruct overall;
+>>ASSERTION Good A
+>># Improved the wording a bit from that approved ....
+>># When the font with font_ID
+>># .A font_ID
+When the
+.A font_ID
+argument
+is a valid GContext resource,
+then a call to xname returns the bounding box of the specified 16-bit or 2-byte
+character string,
+.A string ,
+as rendered in
+the font in the corresponding GC's
+.M font
+field.
+>>STRATEGY
+Create drawable
+Create gc usable with the drawable.
+For each xtest font
+ Load font
+ Set font into gc.
+ Set font_ID to be the GContext from the gc
+ XQueryTextExtents16.
+ Verify by direct calculation from the metrics.
+>>CODE
+extern struct fontinfo fontinfo[];
+extern int nfontinfo;
+int i;
+char buf[256];
+int good_direction;
+int good_font_ascent;
+int good_font_descent;
+XCharStruct good_overall;
+Drawable d;
+GC gc;
+Font font;
+
+ d = defdraw(display, VI_WIN_PIX);
+ gc = makegc(display, d);
+ if (isdeleted())
+ return;
+
+ for (i = 0; i < nfontinfo; i++) {
+ font = XLoadFont(display, fontinfo[i].name);
+ XSetFont(display, gc, font);
+
+ font_ID = XGContextFromGC(gc);
+ XCALL;
+
+ txtextents16(fontinfo[i].fontstruct, string, nchars, &good_direction,
+ &good_font_ascent, &good_font_descent, &good_overall);
+
+ /*
+ * Don't check this because not well enough defined.
+ * Just check that it is one of the allowed values.
+ */
+ if (direction != FontLeftToRight && direction != FontRightToLeft) {
+ report("Font %s - Direction was %d", fontinfo[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ if (good_font_ascent != font_ascent) {
+ report("Font %s: font ascent was %d, expecting %d",
+ fontinfo[i].name, font_ascent, good_font_ascent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_font_descent != font_descent) {
+ report("Font %s: font descent was %d, expecting %d",
+ fontinfo[i].name, font_descent, good_font_descent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.lbearing != overall.lbearing) {
+ report("Font %s: lbearing was %d, expecting %d",
+ fontinfo[i].name, overall.lbearing, good_overall.lbearing);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.rbearing != overall.rbearing) {
+ report("Font %s: rbearing was %d, expecting %d",
+ fontinfo[i].name, overall.rbearing, good_overall.rbearing);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.ascent != overall.ascent) {
+ report("Font %s: ascent was %d, expecting %d",
+ fontinfo[i].name, overall.ascent, good_overall.ascent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.descent != overall.descent) {
+ report("Font %s: descent was %d, expecting %d",
+ fontinfo[i].name, overall.descent, good_overall.descent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.width != overall.width) {
+ report("Font %s: width was %d, expecting %d",
+ fontinfo[i].name, overall.width, good_overall.width);
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(8*nfontinfo);
+>>ASSERTION Good A
+>># Improved the wording a bit from that approved ....
+>># When the font with font_ID
+>># .A font_ID
+When the
+.A font_ID
+argument
+is a valid Font resource,
+then a call to xname returns the bounding box of the specified 16-bit or 2-byte
+character string,
+.A string ,
+as rendered in
+the font
+with font ID
+.A font_ID .
+>>STRATEGY
+For each xtest font
+ Load font
+ XQueryTextExtents16.
+ Verify by direct calculation from the metrics.
+>>CODE
+extern struct fontinfo fontinfo[];
+extern int nfontinfo;
+int i;
+char buf[256];
+int good_direction;
+int good_font_ascent;
+int good_font_descent;
+XCharStruct good_overall;
+Font font;
+
+ for (i = 0; i < nfontinfo; i++) {
+ font = XLoadFont(display, fontinfo[i].name);
+ if (isdeleted()) {
+ delete("Could not load font '%s'", fontinfo[i].name);
+ return;
+ }
+
+ font_ID = font;
+ XCALL;
+
+ txtextents16(fontinfo[i].fontstruct, string, nchars, &good_direction,
+ &good_font_ascent, &good_font_descent, &good_overall);
+
+ /*
+ * Don't check this because not well enough defined.
+ * Just check that it is one of the allowed values.
+ */
+ if (direction != FontLeftToRight && direction != FontRightToLeft) {
+ report("Font %s - Direction was %d", fontinfo[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ if (good_font_ascent != font_ascent) {
+ report("Font %s: font ascent was %d, expecting %d",
+ fontinfo[i].name, font_ascent, good_font_ascent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_font_descent != font_descent) {
+ report("Font %s: font descent was %d, expecting %d",
+ fontinfo[i].name, font_descent, good_font_descent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.lbearing != overall.lbearing) {
+ report("Font %s: lbearing was %d, expecting %d",
+ fontinfo[i].name, overall.lbearing, good_overall.lbearing);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.rbearing != overall.rbearing) {
+ report("Font %s: rbearing was %d, expecting %d",
+ fontinfo[i].name, overall.rbearing, good_overall.rbearing);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.ascent != overall.ascent) {
+ report("Font %s: ascent was %d, expecting %d",
+ fontinfo[i].name, overall.ascent, good_overall.ascent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.descent != overall.descent) {
+ report("Font %s: descent was %d, expecting %d",
+ fontinfo[i].name, overall.descent, good_overall.descent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.width != overall.width) {
+ report("Font %s: width was %d, expecting %d",
+ fontinfo[i].name, overall.width, good_overall.width);
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(8*nfontinfo);
+>>ASSERTION def
+When the
+font is defined with linear indexing rather than 2-byte matrix indexing,
+then each
+.S XChar2b
+structure is interpreted as a 16-bit number with byte1 as the
+most-significant byte.
+>>ASSERTION def
+The
+.M ascent
+field of
+.A overall
+is set to the maximum of the ascent metrics
+of all characters in the string.
+>>ASSERTION def
+The
+.M descent
+field of
+.A overall
+is set to the maximum of the descent metrics
+of all characters in the string.
+>>ASSERTION def
+The
+.M width
+field of
+.A overall
+is set to the sum of the character-width metrics
+of all characters in the string.
+>>ASSERTION def
+The
+.M lbearing
+field of
+.A overall
+is set to the minimum L of all characters in the string, where for each
+character L is the left-side-metric plus the sum of the character
+widths of all preceding characters in the string.
+>>ASSERTION def
+The
+.M rbearing
+field of
+.A overall
+is set to the maximum R of all characters in the string, where for each
+character R is the right-side-bearing metric plus the sum of the
+character widths of all preceding characters in the string.
+>>ASSERTION def
+The font_ascent_return argument is set to the logical ascent of the font,
+the font_descent_return argument is set to the logical descent of the font and
+the direction_return argument is set to either FontLeftToRight
+or FontRightToLeft.
+>>ASSERTION def
+When the font has no defined default character, then
+undefined characters in the string are taken to have all zero metrics.
+>>ASSERTION def
+Characters with all zero metrics are ignored.
+>>ASSERTION def
+When the font has no defined default_char, then
+the undefined characters in the string are also ignored.
+>>ASSERTION Bad A
+.ER BadFont bad-fontable
+>>STRATEGY
+Pass a bad font
+Verify BadFont error occurs
+Pass a bad gc
+Verify BadFont error occurs
+>>CODE BadFont
+
+ font_ID = badfont(display);
+
+ XCALL;
+ if (geterr() == BadFont)
+ CHECK;
+ else {
+ report("No BadFont occurred with a bad font");
+ FAIL;
+ }
+
+ font_ID = XGContextFromGC(badgc(display)); /* XXX */
+ XCALL;
+ if (geterr() == BadFont)
+ CHECK;
+ else {
+ report("No BadFont occurred with a bad gc");
+ FAIL;
+ }
+ CHECKPASS(2);
+
+>># This is wrong ..sr
+>>#>>ASSERTION Bad A
+>>#.ER BadGC
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/qrytxtextn/qrytxtextn.m b/xc/test/xsuite/xtest/tset/CH06/qrytxtextn/qrytxtextn.m
new file mode 100644
index 000000000..cb1ece9a5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/qrytxtextn/qrytxtextn.m
@@ -0,0 +1,339 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XQueryTextExtents CH06
+>># NB. This is int in Xlib.h, and return value is not mentioned in spec.
+Status
+
+Display *display = Dsp;
+XID font_ID;
+char *string;
+int nchars;
+int *direction_return = &direction;
+int *font_ascent_return = &font_ascent;
+int *font_descent_return = &font_descent;
+XCharStruct *overall_return = &overall;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>EXTERN
+static int direction;
+static int font_ascent;
+static int font_descent;
+static XCharStruct overall;
+>>ASSERTION Good A
+>># Improved the wording a bit from that approved ....
+>># When the font with font_ID
+>># .A font_ID
+When the
+.A font_ID
+argument
+is a valid GContext resource,
+then a call to xname returns the bounding box of the specified 8-bit
+character string,
+.A string ,
+as rendered in
+the font in the corresponding GC's
+.M font
+field.
+>>STRATEGY
+Make a string consisting of all characters from 0 to 255
+Create drawable
+Create gc usable with the drawable.
+For each xtest font
+ Load font
+ Set font into gc.
+ Call XQueryTextExtents.
+ Verify by direct calculation from the metrics.
+>>CODE
+extern struct fontinfo fontinfo[];
+extern int nfontinfo;
+int i;
+char buf[256];
+int good_direction;
+int good_font_ascent;
+int good_font_descent;
+XCharStruct good_overall;
+Drawable d;
+GC gc;
+Font font;
+
+ for (i = 0; i < 256; i++)
+ buf[i] = i;
+ string = buf;
+ nchars = 256;
+
+ d = defdraw(display, VI_WIN_PIX);
+ gc = makegc(display, d);
+ if (isdeleted())
+ return;
+
+ for (i = 0; i < nfontinfo; i++) {
+ font = XLoadFont(display, fontinfo[i].name);
+ XSetFont(display, gc, font);
+
+ font_ID = XGContextFromGC(gc);
+ XCALL;
+
+ txtextents(fontinfo[i].fontstruct, (unsigned char *)string,
+ nchars, &good_direction, &good_font_ascent, &good_font_descent,
+ &good_overall);
+
+ /*
+ * Don't check this because not well enough defined.
+ * Just check that it is one of the allowed values.
+ */
+ if (direction != FontLeftToRight && direction != FontRightToLeft) {
+ report("Font %s - Direction was %d", fontinfo[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ if (good_font_ascent != font_ascent) {
+ report("Font %s: font ascent was %d, expecting %d",
+ fontinfo[i].name, font_ascent, good_font_ascent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_font_descent != font_descent) {
+ report("Font %s: font descent was %d, expecting %d",
+ fontinfo[i].name, font_descent, good_font_descent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.lbearing != overall.lbearing) {
+ report("Font %s: lbearing was %d, expecting %d",
+ fontinfo[i].name, overall.lbearing, good_overall.lbearing);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.rbearing != overall.rbearing) {
+ report("Font %s: rbearing was %d, expecting %d",
+ fontinfo[i].name, overall.rbearing, good_overall.rbearing);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.ascent != overall.ascent) {
+ report("Font %s: ascent was %d, expecting %d",
+ fontinfo[i].name, overall.ascent, good_overall.ascent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.descent != overall.descent) {
+ report("Font %s: descent was %d, expecting %d",
+ fontinfo[i].name, overall.descent, good_overall.descent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.width != overall.width) {
+ report("Font %s: width was %d, expecting %d",
+ fontinfo[i].name, overall.width, good_overall.width);
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(8*nfontinfo);
+>>ASSERTION Good A
+>># Improved the wording a bit from that approved ....
+>># When the font with font_ID
+>># .A font_ID
+When the
+.A font_ID
+argument
+is a valid Font resource,
+then a call to xname returns the bounding box of the specified 8-bit
+character string,
+.A string ,
+as rendered in
+the font
+with font ID
+.A font_ID
+and returns non-zero.
+>>STRATEGY
+Make a string consisting of all characters from 0 to 255
+For each xtest font
+ Load font.
+ Call XQueryTextExtents.
+ Verify by direct calculation from the metrics.
+>>CODE
+extern struct fontinfo fontinfo[];
+extern int nfontinfo;
+int i;
+char buf[256];
+int good_direction;
+int good_font_ascent;
+int good_font_descent;
+XCharStruct good_overall;
+Font font;
+
+ for (i = 0; i < 256; i++)
+ buf[i] = i;
+ string = buf;
+ nchars = 256;
+
+ for (i = 0; i < nfontinfo; i++) {
+ font = XLoadFont(display, fontinfo[i].name);
+ if (isdeleted()) {
+ delete("Could not load font '%s'", fontinfo[i].name);
+ return;
+ }
+
+ font_ID = font;
+ XCALL;
+
+ txtextents(fontinfo[i].fontstruct, (unsigned char *)string,
+ nchars, &good_direction, &good_font_ascent, &good_font_descent,
+ &good_overall);
+
+ /*
+ * Don't check this because not well enough defined.
+ * Just check that it is one of the allowed values.
+ */
+ if (direction != FontLeftToRight && direction != FontRightToLeft) {
+ report("Font %s - Direction was %d", fontinfo[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ if (good_font_ascent != font_ascent) {
+ report("Font %s: font ascent was %d, expecting %d",
+ fontinfo[i].name, font_ascent, good_font_ascent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_font_descent != font_descent) {
+ report("Font %s: font descent was %d, expecting %d",
+ fontinfo[i].name, font_descent, good_font_descent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.lbearing != overall.lbearing) {
+ report("Font %s: lbearing was %d, expecting %d",
+ fontinfo[i].name, overall.lbearing, good_overall.lbearing);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.rbearing != overall.rbearing) {
+ report("Font %s: rbearing was %d, expecting %d",
+ fontinfo[i].name, overall.rbearing, good_overall.rbearing);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.ascent != overall.ascent) {
+ report("Font %s: ascent was %d, expecting %d",
+ fontinfo[i].name, overall.ascent, good_overall.ascent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.descent != overall.descent) {
+ report("Font %s: descent was %d, expecting %d",
+ fontinfo[i].name, overall.descent, good_overall.descent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.width != overall.width) {
+ report("Font %s: width was %d, expecting %d",
+ fontinfo[i].name, overall.width, good_overall.width);
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(8*nfontinfo);
+
+>>ASSERTION def
+The
+.M ascent
+field of
+.A overall
+is set to the maximum of the ascent metrics
+of all characters in the string.
+>>ASSERTION def
+The
+.M descent
+field of
+.A overall
+is set to the maximum of the descent metrics
+of all characters in the string.
+>>ASSERTION def
+The
+.M width
+field of
+.A overall
+is set to the sum of the character-width metrics
+of all characters in the string.
+>>ASSERTION def
+The
+.M lbearing
+field of
+.A overall
+is set to the minimum L of all characters in the string, where for each
+character L is the left-side-metric plus the sum of the character
+widths of all preceding characters in the string.
+>>ASSERTION def
+The
+.M rbearing
+field of
+.A overall
+is set to the maximum R of all characters in the string, where for each
+character R is the right-side-bearing metric plus the sum of the
+character widths of all preceding characters in the string.
+>>ASSERTION def
+The font_ascent_return argument is set to the logical ascent of the font,
+the font_descent_return argument is set to the logical descent of the font and
+the direction_return argument is set to either FontLeftToRight
+or FontRightToLeft.
+>>ASSERTION def
+When the font has no defined default character, then
+undefined characters in the string are taken to have all zero metrics.
+>>ASSERTION def
+Characters with all zero metrics are ignored.
+>>ASSERTION def
+When the font has no defined default_char, then
+the undefined characters in the string are also ignored.
+>>ASSERTION Bad A
+.ER BadFont bad-fontable
+>>STRATEGY
+Pass a bad font
+Verify BadFont error occurs
+Pass a bad gc
+Verify BadFont error occurs
+>>CODE BadFont
+
+ string = "jfdkjfk";
+ nchars = strlen(string);
+ font_ID = badfont(display);
+
+ XCALL;
+ if (geterr() == BadFont)
+ CHECK;
+ else {
+ report("No BadFont occurred with a bad font");
+ FAIL;
+ }
+
+ font_ID = XGContextFromGC(badgc(display)); /* XXX */
+ XCALL;
+ if (geterr() == BadFont)
+ CHECK;
+ else {
+ report("No BadFont occurred with a bad gc");
+ FAIL;
+ }
+ CHECKPASS(2);
+
+>>## This is not possible.
+>>#>>ASSERTION Bad A
+>>#.ER BadGC
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/rclrcrsr/rclrcrsr.m b/xc/test/xsuite/xtest/tset/CH06/rclrcrsr/rclrcrsr.m
new file mode 100644
index 000000000..63fedb13d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/rclrcrsr/rclrcrsr.m
@@ -0,0 +1,83 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XRecolorCursor CH06
+void
+XRecolorCursor(display, cursor, foreground_color, background_color)
+Display *display = Dsp;
+Cursor cursor;
+XColor *foreground_color = mkcolor(1);
+XColor *background_color = mkcolor(0);
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>EXTERN
+
+/*
+ * mkcolor() - return a pointer to a color structure.
+ * flag indicates whether or not color is foreground
+ */
+static XColor *
+mkcolor(flag)
+{
+ static XColor fore;
+ static XColor back;
+ static int first = 1;
+
+ if (first)
+ {
+ first = 0;
+
+ fore.pixel = BlackPixel(display, DefaultScreen(display));
+ XQueryColor(display, DefaultColormap(display, DefaultScreen(display)), &fore);
+ back.pixel = WhitePixel(display, DefaultScreen(display));
+ XQueryColor(display, DefaultColormap(display, DefaultScreen(display)), &back);
+ }
+ return(flag ? &fore : &back);
+}
+>>ASSERTION Good B 1
+A call to xname changes the color of the specified cursor,
+.A cursor ,
+to the specified
+.A foreground_color
+and
+.A background_color .
+>>STRATEGY
+Create cursor.
+Call XRecolorCursor to change foreground to W_BG and
+background to W_FG.
+>>CODE
+
+/* Create cursor. */
+ cursor = makecur(display);
+
+/* Call XRecolorCursor to change foreground to W_BG and */
+/* background to W_FG. */
+
+ XCALL;
+
+ if (geterr() != Success)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKUNTESTED(1);
+>>ASSERTION Good B 1
+When the cursor is being displayed on a screen, then
+the change is visible immediately.
+>>ASSERTION Bad A
+.ER BadCursor
+>># HISTORY kieron Completed Reformat and tidy to ca pass
+>># HISTORY peterc Completed Wrote STRATEGY and CODE
diff --git a/xc/test/xsuite/xtest/tset/CH06/stfntpth/stfntpth.m b/xc/test/xsuite/xtest/tset/CH06/stfntpth/stfntpth.m
new file mode 100644
index 000000000..453b0ed2d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/stfntpth/stfntpth.m
@@ -0,0 +1,251 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetFontPath CH06
+void
+
+Display *display = Dsp;
+char **directories;
+int ndirs;
+>>EXTERN
+
+/*
+ * Startup and cleanup code attempt to save and restore the Font path
+ * over the tests.
+ * This should not be needed now because saving and restoring the Font path
+ * is done in startup/cleanup - but it is still done here in case that
+ * scheme is ever changed.
+ */
+static char **savepath;
+static int savenum;
+>>SET startup localstartup
+static void
+localstartup()
+{
+ startup();
+ if(Dsp) {
+ XSetErrorHandler(error_status);
+ savepath = XGetFontPath(Dsp, &savenum);
+ XSetErrorHandler(unexp_err);
+ }
+}
+>>SET cleanup localcleanup
+static void
+localcleanup()
+{
+ if(Dsp) {
+ if (savepath && savenum)
+ XSetFontPath(Dsp, savepath, savenum);
+ XSync(Dsp, 0);
+ }
+ cleanup();
+}
+>>ASSERTION Good A
+When xname is called with the
+.A directories
+argument specifying a list of directories in an operating system dependent
+format,
+then the directory search path for font lookup is set to
+the list of directories
+in the order specified.
+>>STRATEGY
+Get TET variable XT_FONTPATH_GOOD
+Set font path to this value.
+Do simple check with XGetFontPath.
+>>CODE
+char *fpathlist;
+char *fpathtmp;
+char *dirlist[MAX_DIRS];
+char *strtok();
+char **checkpath;
+int nret;
+int i;
+
+ fpathlist = tet_getvar("XT_FONTPATH_GOOD");
+ if (fpathlist == NULL || *fpathlist == '\0') {
+ delete("XT_FONTPATH_GOOD not set in config file");
+ return;
+ }
+ fpathtmp = (char *)calloc(strlen(fpathlist)+1, sizeof(char));
+ strcpy(fpathtmp, fpathlist);
+
+ for (i = 0; i < MAX_DIRS; i++) {
+ dirlist[i] = strtok((i==0)? fpathtmp: (char*)0, SEP);
+ if (dirlist[i] == NULL)
+ break;
+ debug(1, "dirlist entry %d - '%s'", i, dirlist[i]);
+ }
+ directories = dirlist;
+ ndirs = i;
+
+ if (ndirs <= 0) {
+ delete("No components in supplied XT_FONTPATH_GOOD");
+ return;
+ }
+
+ XCALL;
+
+ checkpath = XGetFontPath(display, &nret);
+ if (nret == ndirs)
+ CHECK;
+ else {
+ report("Different number of directories returned");
+ report(" was %d, expecting %d", nret, ndirs);
+ FAIL;
+ }
+
+ if (ndirs < nret)
+ nret = ndirs;
+ for (i = 0; i < nret; i++) {
+ debug(1, "got back list item '%s'", checkpath[i]);
+ if (strcmp(dirlist[i], checkpath[i]) == 0)
+ CHECK;
+ else {
+ report("Font path component did not match what was set");
+ report(" was '%s', expecting '%s'", checkpath[i], dirlist[i]);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(1+ndirs);
+>>ASSERTION Good A
+On a call to xname, the directory search
+path for font lookup is set for all clients.
+>>STRATEGY
+Open a second client.
+Set font path in first client.
+Get font path in the second client.
+Verify that the font is the same in each client.
+>>CODE
+Display *client2;
+char *fpathlist;
+char *fpathtmp;
+char *dirlist[MAX_DIRS];
+char *strtok();
+char **checkpath;
+int nret;
+int i;
+
+ client2 = XOpenDisplay(DisplayString(display));
+ if (client2 == NULL || isdeleted()) {
+ delete("Could not open second client");
+ return;
+ }
+
+ fpathlist = tet_getvar("XT_FONTPATH_GOOD");
+ if (fpathlist == NULL || *fpathlist == '\0') {
+ delete("XT_FONTPATH_GOOD not set in config file");
+ return;
+ }
+ fpathtmp = (char *)calloc(strlen(fpathlist)+1, sizeof(char));
+ strcpy(fpathtmp, fpathlist);
+
+ for (i = 0; i < MAX_DIRS; i++) {
+ dirlist[i] = strtok((i==0)? fpathtmp: (char*)0, SEP);
+ if (dirlist[i] == NULL)
+ break;
+ debug(1, "dirlist entry %d - '%s'", i, dirlist[i]);
+ }
+ directories = dirlist;
+ ndirs = i;
+
+ if (ndirs <= 0) {
+ delete("No components in supplied XT_FONTPATH_GOOD");
+ return;
+ }
+
+ XCALL;
+
+ checkpath = XGetFontPath(client2, &nret);
+ if (nret == ndirs)
+ CHECK;
+ else {
+ report("Different number of directories returned");
+ report(" was %d, expecting %d", nret, ndirs);
+ FAIL;
+ }
+
+ if (ndirs < nret)
+ nret = ndirs;
+ for (i = 0; i < nret; i++) {
+ debug(1, "got back list item '%s'", checkpath[i]);
+ if (strcmp(dirlist[i], checkpath[i]) == 0)
+ CHECK;
+ else {
+ report("Font path component did not match what was set");
+ report(" was '%s', expecting '%s'", checkpath[i], dirlist[i]);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(1+ndirs);
+>>ASSERTION Good B 1
+On a call to XSetFontPath, the X server flushes all cached information
+about fonts for which there are currently no explicit resource ID's
+allocated.
+>>ASSERTION Bad C
+When the
+.A directories
+argument is invalid for the operating system,
+then a
+.S BadValue
+error occurs.
+>># This says nothing
+>>#and the value returned is operating system dependent.
+>>STRATEGY
+Get TET variable XT_FONTPATH_BAD
+If this is set to UNSUPPORTED, then no bad paths are possible
+ result is UNSUPPORTED
+Set font path to this value.
+Verify that BadValue error is generated.
+>>CODE BadValue
+char *fpathlist;
+char *dirlist[MAX_DIRS];
+char *strtok();
+int i;
+
+ fpathlist = tet_getvar("XT_FONTPATH_BAD");
+ if (fpathlist == NULL || *fpathlist == '\0') {
+ delete("XT_FONTPATH_BAD not set in config file");
+ return;
+ }
+ if (strcmp(fpathlist, "UNSUPPORTED") == 0) {
+ report("No bad paths are possible");
+ tet_result(TET_UNSUPPORTED);
+ return;
+ }
+
+ for (i = 0; i < MAX_DIRS; i++) {
+ dirlist[i] = strtok((i==0)? fpathlist: (char*)0, SEP);
+ if (dirlist[i] == NULL)
+ break;
+ }
+ directories = dirlist;
+ ndirs = i;
+
+ if (ndirs <= 0) {
+ delete("No components in supplied XT_FONTPATH_BAD");
+ return;
+ }
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ PASS;
+ else
+ FAIL;
+
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/txtextnt16/txtextnt16.m b/xc/test/xsuite/xtest/tset/CH06/txtextnt16/txtextnt16.m
new file mode 100644
index 000000000..502219995
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/txtextnt16/txtextnt16.m
@@ -0,0 +1,199 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XTextExtents16 CH06
+void
+
+XFontStruct *font_struct;
+XChar2b *string;
+int nchars;
+int *direction_return;
+int *font_ascent_return;
+int *font_descent_return;
+XCharStruct *overall_return;
+>>EXTERN
+
+static XChar2b ch1[] = {
+ {0, 34}, {0, 54}, {0, 89}, {0, 100}, {0, 130}, {0, 201}, {0, 234}, {0, 255},
+ {1, 34}, {1, 54}, {1, 89}, {1, 100}, {1, 130}, {1, 201}, {1, 234}, {1, 255},
+ {2, 34}, {2, 54}, {2, 89}, {2, 100}, {2, 130}, {2, 201}, {2, 234}, {2, 255},
+ {33, 34}, {33, 54}, {33, 89}, {33, 100}, {33, 130}, {33, 201}, {33, 234}, {33, 255},
+ {36, 34}, {36, 54}, {36, 89}, {36, 100}, {36, 130}, {36, 201}, {36, 234}, {36, 255},
+ {38, 34}, {38, 54}, {38, 89}, {38, 100}, {38, 130}, {38, 201}, {38, 234}, {38, 255},
+ {48, 34}, {48, 54}, {48, 89}, {48, 100}, {48, 130}, {48, 201}, {48, 234}, {48, 255},
+ {120, 34}, {120, 54}, {120, 89}, {120, 100}, {120, 130}, {120, 201}, {120, 234}, {120, 255},
+};
+
+>>ASSERTION Good A
+A call to xname returns the bounding box of the specified 16-bit or 2-byte
+character string,
+.A string ,
+as rendered in the font referenced by
+.A font_struct .
+>>STRATEGY
+The known good font information structures are used so that these tests
+are isolated from XLoadQueryFont.
+For each 16 bit xtest font
+ Call XTextExtents16.
+ Verify by direct calculation from the metrics.
+>>CODE
+extern struct fontinfo fontinfo[];
+extern int nfontinfo;
+int i;
+char buf[256];
+int direction;
+int font_ascent;
+int font_descent;
+XCharStruct overall;
+int good_direction;
+int good_font_ascent;
+int good_font_descent;
+XCharStruct good_overall;
+int n16;
+
+ string = ch1;;
+ nchars = NELEM(ch1);
+ direction_return = &direction;
+ font_ascent_return = &font_ascent;
+ font_descent_return = &font_descent;
+ overall_return = &overall;
+
+ n16 = 0;
+ for (i = 0; i < nfontinfo; i++) {
+ font_struct = fontinfo[i].fontstruct;
+ if (font_struct->max_byte1 == 0)
+ continue;
+
+ n16++;
+
+ XCALL;
+
+ txtextents16(font_struct, string, nchars, &good_direction,
+ &good_font_ascent, &good_font_descent, &good_overall);
+
+ /*
+ * Don't check this because not well enough defined.
+ * Just check it is a good value.
+ */
+ if (direction != FontLeftToRight && direction != FontRightToLeft) {
+ report("Font %s - Direction was %d", fontinfo[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ if (good_font_ascent != font_ascent) {
+ report("Font %s: font ascent was %d, expecting %d",
+ fontinfo[i].name, font_ascent, good_font_ascent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_font_descent != font_descent) {
+ report("Font %s: font descent was %d, expecting %d",
+ fontinfo[i].name, font_descent, good_font_descent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.lbearing != overall.lbearing) {
+ report("Font %s: lbearing was %d, expecting %d",
+ fontinfo[i].name, overall.lbearing, good_overall.lbearing);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.rbearing != overall.rbearing) {
+ report("Font %s: rbearing was %d, expecting %d",
+ fontinfo[i].name, overall.rbearing, good_overall.rbearing);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.ascent != overall.ascent) {
+ report("Font %s: ascent was %d, expecting %d",
+ fontinfo[i].name, overall.ascent, good_overall.ascent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.descent != overall.descent) {
+ report("Font %s: descent was %d, expecting %d",
+ fontinfo[i].name, overall.descent, good_overall.descent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.width != overall.width) {
+ report("Font %s: width was %d, expecting %d",
+ fontinfo[i].name, overall.width, good_overall.width);
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(8*n16);
+>>ASSERTION def
+When the
+font is defined with linear indexing rather than 2-byte matrix indexing,
+then each
+.S XChar2b
+structure is interpreted as a 16-bit number with byte1 as the
+most-significant byte.
+>>ASSERTION def
+The
+.M ascent
+field of
+.A overall
+is set to the maximum of the ascent metrics
+of all characters in the string.
+>>ASSERTION def
+The
+.M descent
+field of
+.A overall
+is set to the maximum of the descent metrics
+of all characters in the string.
+>>ASSERTION def
+The
+.M width
+field of
+.A overall
+is set to the sum of the character-width metrics
+of all characters in the string.
+>>ASSERTION def
+The
+.M lbearing
+field of
+.A overall
+is set to the minimum L of all characters in the string, where for each
+character L is the left-side-metric plus the sum of the character
+widths of all preceding characters in the string.
+>>ASSERTION def
+The
+.M rbearing
+field of
+.A overall
+is set to the maximum R of all characters in the string, where for each
+character R is the right-side-bearing metric plus the sum of the
+character widths of all preceding characters in the string.
+>>ASSERTION def
+The font_ascent_return argument is set to the logical ascent of the font,
+the font_descent_return argument is set to the logical descent of the font and
+the direction_return argument is set to either FontLeftToRight
+or FontRightToLeft.
+>>ASSERTION def
+When the font has no defined default character, then
+undefined characters in the string are taken to have all zero metrics.
+>>ASSERTION def
+Characters with all zero metrics are ignored.
+>>ASSERTION def
+When the font has no defined
+.M default_char ,
+then the undefined characters in the string are also ignored.
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/txtextnts/txtextnts.m b/xc/test/xsuite/xtest/tset/CH06/txtextnts/txtextnts.m
new file mode 100644
index 000000000..d2c225aec
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/txtextnts/txtextnts.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XTextExtents CH06
+void
+
+XFontStruct *font_struct;
+char *string;
+int nchars;
+int *direction_return = &direction;
+int *font_ascent_return = &font_ascent;
+int *font_descent_return = &font_descent;
+XCharStruct *overall_return = &overall;
+>>EXTERN
+static int direction;
+static int font_ascent;
+static int font_descent;
+static XCharStruct overall;
+>>ASSERTION Good A
+A call to xname returns the bounding box of the specified 8-bit
+character string,
+.A string ,
+as rendered in the font referenced by
+.A font_struct .
+>>STRATEGY
+The known good font information structures are used so that these tests
+are isolated from XLoadQueryFont.
+Make a string consisting of all characters from 0 to 255
+Call XTextExtents.
+Verify by direct calculation from the metrics.
+>>CODE
+extern struct fontinfo fontinfo[];
+extern int nfontinfo;
+int i;
+char buf[256];
+int good_direction;
+int good_font_ascent;
+int good_font_descent;
+XCharStruct good_overall;
+
+ for (i = 0; i < 256; i++)
+ buf[i] = i;
+ string = buf;
+ nchars = 256;
+
+ for (i = 0; i < nfontinfo; i++) {
+ font_struct = fontinfo[i].fontstruct;
+
+ XCALL;
+
+ txtextents(font_struct, (unsigned char *)string, nchars,
+ &good_direction, &good_font_ascent, &good_font_descent,
+ &good_overall);
+
+ /*
+ * Don't check this because not well enough defined.
+ * Just check that it is one of the allowed values.
+ */
+ if (direction != FontLeftToRight && direction != FontRightToLeft) {
+ report("Font %s - Direction was %d", fontinfo[i].name);
+ FAIL;
+ } else
+ CHECK;
+
+ if (good_font_ascent != font_ascent) {
+ report("Font %s: font ascent was %d, expecting %d",
+ fontinfo[i].name, font_ascent, good_font_ascent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_font_descent != font_descent) {
+ report("Font %s: font descent was %d, expecting %d",
+ fontinfo[i].name, font_descent, good_font_descent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.lbearing != overall.lbearing) {
+ report("Font %s: lbearing was %d, expecting %d",
+ fontinfo[i].name, overall.lbearing, good_overall.lbearing);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.rbearing != overall.rbearing) {
+ report("Font %s: rbearing was %d, expecting %d",
+ fontinfo[i].name, overall.rbearing, good_overall.rbearing);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.ascent != overall.ascent) {
+ report("Font %s: ascent was %d, expecting %d",
+ fontinfo[i].name, overall.ascent, good_overall.ascent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.descent != overall.descent) {
+ report("Font %s: descent was %d, expecting %d",
+ fontinfo[i].name, overall.descent, good_overall.descent);
+ FAIL;
+ } else
+ CHECK;
+ if (good_overall.width != overall.width) {
+ report("Font %s: width was %d, expecting %d",
+ fontinfo[i].name, overall.width, good_overall.width);
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(8*nfontinfo);
+>>ASSERTION def
+The
+.M ascent
+field of
+.A overall
+is set to the maximum of the ascent metrics
+of all characters in the string.
+>>ASSERTION def
+The
+.M descent
+field of
+.A overall
+is set to the maximum of the descent metrics
+of all characters in the string.
+>>ASSERTION def
+The
+.M width
+field of
+.A overall
+is set to the sum of the character-width metrics
+of all characters in the string.
+>>ASSERTION def
+The
+.M lbearing
+field of
+.A overall
+is set to the minimum L of all characters in the string, where for each
+character L is the left-side-metric plus the sum of the character
+widths of all preceding characters in the string.
+>>ASSERTION def
+The
+.M rbearing
+field of
+.A overall
+is set to the maximum R of all characters in the string, where for each
+character R is the right-side-bearing metric plus the sum of the
+character widths of all preceding characters in the string.
+>>ASSERTION def
+The font_ascent_return argument is set to the logical ascent of the font,
+the font_descent_return argument is set to the logical descent of the font and
+the direction_return argument is set to either FontLeftToRight
+or FontRightToLeft.
+>>ASSERTION def
+When the font has no defined default character, then
+undefined characters in the string are taken to have all zero metrics.
+>>ASSERTION def
+Characters with all zero metrics are ignored.
+>>ASSERTION def
+When the font has no defined
+.M default_char ,
+then the undefined characters in the string are also ignored.
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/txtwdth/txtwdth.m b/xc/test/xsuite/xtest/tset/CH06/txtwdth/txtwdth.m
new file mode 100644
index 000000000..d9c5839c9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/txtwdth/txtwdth.m
@@ -0,0 +1,63 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XTextWidth CH06
+int
+
+XFontStruct *font_struct;
+char *string;
+int count;
+>>ASSERTION Good A
+A call to xname returns the sum of the character-width metrics of all
+characters in the 8-bit character string,
+.A string ,
+as rendered in the font referenced by
+.A font_struct .
+>>STRATEGY
+The known good font information structures are used so that these tests
+ are isolated from XLoadQueryFont.
+Make a string consisting of all characters from 0 to 255.
+Call XTextWidth.
+Verify by direct calculation from the metrics.
+>>CODE
+extern struct fontinfo fontinfo[];
+extern int nfontinfo;
+int i;
+int width;
+int calcwidth;
+char buf[256];
+
+ for (i = 0; i < 256; i++)
+ buf[i] = i;
+ string = buf;
+ count = 256;
+
+ for (i = 0; i < nfontinfo; i++) {
+ font_struct = fontinfo[i].fontstruct;
+
+ width = XCALL;
+
+ calcwidth = txtwidth(font_struct, (unsigned char *)string, count);
+
+ if (width != calcwidth) {
+ report("Font %s - width was %d, expecting %d", fontinfo[i].name,
+ width, calcwidth);
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(nfontinfo);
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/txtwdth16/txtwdth16.m b/xc/test/xsuite/xtest/tset/CH06/txtwdth16/txtwdth16.m
new file mode 100644
index 000000000..4b9612841
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/txtwdth16/txtwdth16.m
@@ -0,0 +1,83 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XTextWidth16 CH06
+int
+
+XFontStruct *font_struct;
+XChar2b *string = ch1;
+int count = NELEM(ch1);
+>>EXTERN
+
+static XChar2b ch1[] = {
+ {0, 34}, {0, 54}, {0, 89}, {0, 100}, {0, 130}, {0, 201}, {0, 234}, {0, 255},
+ {1, 34}, {1, 54}, {1, 89}, {1, 100}, {1, 130}, {1, 201}, {1, 234}, {1, 255},
+ {2, 34}, {2, 54}, {2, 89}, {2, 100}, {2, 130}, {2, 201}, {2, 234}, {2, 255},
+ {33, 34}, {33, 54}, {33, 89}, {33, 100}, {33, 130}, {33, 201}, {33, 234}, {33, 255},
+ {36, 34}, {36, 54}, {36, 89}, {36, 100}, {36, 130}, {36, 201}, {36, 234}, {36, 255},
+ {38, 34}, {38, 54}, {38, 89}, {38, 100}, {38, 130}, {38, 201}, {38, 234}, {38, 255},
+ {48, 34}, {48, 54}, {48, 89}, {48, 100}, {48, 130}, {48, 201}, {48, 234}, {48, 255},
+ {120, 34}, {120, 54}, {120, 89}, {120, 100}, {120, 130}, {120, 201}, {120, 234}, {120, 255},
+};
+
+extern struct fontinfo fontinfo[];
+extern int nfontinfo;
+>>ASSERTION Good A
+A call to xname returns the sum of the character-width
+metrics of all characters in the 16-bit or 2-byte character string,
+.A string ,
+as rendered in the font referenced by
+.A font_struct .
+>>STRATEGY
+For each 16-bit font
+ Call XTextWidth16 with string.
+ Verify returned value by direct calculation from metric info.
+>>CODE
+int i;
+int width;
+int calcwidth;
+int n16;
+
+ n16 = 0;
+
+ for (i = 0; i < nfontinfo; i++) {
+ font_struct = fontinfo[i].fontstruct;
+ if (font_struct->max_byte1 == 0)
+ continue;
+
+ n16++;
+
+ width = XCALL;
+
+ calcwidth = txtwidth16(font_struct, ch1, count);
+
+ if (calcwidth != width) {
+ report("Font %s - width was %d, expecting %d", fontinfo[i].name,
+ width, calcwidth);
+ FAIL;
+ } else
+ CHECK;
+ }
+ CHECKPASS(n16);
+>>ASSERTION Good B 2
+>># How can we know if the font is defined with linear indexing?
+When the
+font is defined with linear indexing rather than 2-byte matrix indexing,
+then each
+.S XChar2b
+structure is interpreted as a 16-bit number with byte1 as the
+most-significant byte.
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH06/undfncrsr/undfncrsr.m b/xc/test/xsuite/xtest/tset/CH06/undfncrsr/undfncrsr.m
new file mode 100644
index 000000000..bdea22f0e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/undfncrsr/undfncrsr.m
@@ -0,0 +1,313 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUndefineCursor CH06
+void
+XUndefineCursor(display, w)
+Display *display = Dsp;
+Window w;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>ASSERTION Good B 1
+When the pointer is in the
+.A window ,
+and the
+.A window
+is not the root window,
+then the parent's cursor will be used.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Set the cursor of that window to a non-default cursor.
+ Verify that the parent window's cursor is correctly set.
+ Warp the pointer into the parent.
+ Verify that the current cursor is that of the parent.
+ Create a child of the window.
+ Set the cursor of the child to a different cursor.
+ Verify that the child window's cursor is correctly set.
+ Warp the pointer into the child.
+ Verify that the current cursor is not that of the parent.
+ Verify that the current cursor is that of the child.
+ Undefine the child's cursor using xname.
+ Verify that the current cursor is that of the parent window.
+Otherwise:
+ Create cursor.
+ Create windows.
+ Define cursor for non-root window.
+ Call XUndefineCursor on non-root window.
+>>CODE
+Cursor cursor;
+Cursor cursor2;
+XVisualInfo *vp;
+Window parent;
+struct area ar;
+
+ /* If extended testing is required: */
+ if(noext(0) == False) {
+
+ /* Create a window. */
+ parent = defwin(display);
+
+ cursor2 = makecur2(display);
+ /* Set the cursor of that window to a non-default cursor. */
+ XDefineCursor(display, parent, cursor2);
+
+ /* Verify that the parent window's cursor is correctly set. */
+ if(curofwin(display, cursor2, parent) == False) {
+ delete("XDefineCursor() did not set the parent's cursor correctly.");
+ return;
+ } else
+ CHECK;
+
+ /* Warp the pointer into the parent. */
+ (void) warppointer(display, parent, 0,0);
+
+ /* Verify that the current cursor is that of the parent. */
+ if(spriteiswin(display, parent) == False) {
+ delete("Current cursor is not that of the parent.");
+ return;
+ } else
+ CHECK;
+
+ cursor = makecur(display);
+ /* Create a child of the window. */
+ ar.x = 10;
+ ar.y = 10;
+ ar.width = 20;
+ ar.height = 20;
+ w = crechild(display, parent, &ar);
+
+ /* Set the cursor of the child to a different cursor. */
+ XDefineCursor(display, w, cursor);
+
+ /* Verify that the child window's cursor is correctly set. */
+ if(curofwin(display, cursor, w) == False) {
+ delete("XDefineCursor() did not set the child's cursor correctly.");
+ return;
+ } else
+ CHECK;
+
+ /* Warp the pointer into the child. */
+ (void) warppointer(display, w , 0,0);
+
+ /* Verify that the current cursor is not that of the parent. */
+ if(spriteiswin(display, parent) != False) {
+ delete("Parent and child have the same cursor.");
+ return;
+ } else
+ CHECK;
+
+ /* Verify that the current cursor is that of the child. */
+ if(spriteiswin(display, w) == False) {
+ delete("Current cursor is not that of the child.");
+ return;
+ } else
+ CHECK;
+
+ /* Undefine the child's cursor using xname. */
+ XCALL;
+
+ /* Verify that the current cursor is that of the parent window. */
+ if(spriteiswin(display, parent) == False) {
+ report("Cursor did not change to that of the window.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(6);
+
+ } else {
+
+ /* Otherwise: */
+
+ /* Create cursor. */
+ cursor = makecur(display);
+
+ /* Create windows. */
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ w = makewin(display, vp);
+
+ /* Define cursor for non-root window. */
+ XDefineCursor(display, w, cursor);
+
+ /* Call XUndefineCursor on non-root window. */
+ XCALL;
+ if (geterr() != Success)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKUNTESTED(nvinf());
+ }
+
+>>ASSERTION Good B 1
+When the pointer is in the
+.A window ,
+and the
+.A window
+is the root window,
+then
+the default cursor will be used.
+>>STRATEGY
+If extended testing is required:
+ If the server supports two screens with the same default cursor:
+ Set the root window cursor to a non-default cursor.
+ Verify that the cursor was set correctly.
+ Warp the pointer into the root window.
+ Verify that the current cursor is that of the root window.
+ Warp the pointer to the alternate root window.
+ Verify that the current cursor is not the same as that of the default root window.
+ Reset the cursor of the root window to the default cursor using xname.
+ Verify that the current cursor is the same as that of the default root window.
+ Otherwise :
+ Set the root window cursor to a non-default cursor.
+ Verify that the cursor was set correctly.
+ Warp the pointer to the root window.
+ Verify that the current cursor is that of the root window.
+ Reset the cursor of the root window to the default cursor using xname.
+ Verify that the root window cursor is no longer the non-default cursor.
+Otherwise:
+ Create cursor.
+ Set window to root window.
+ Define cursor for root window.
+ Call XUndefineCursor on root window.
+>>CODE
+Window altroot;
+Cursor cursor;
+XVisualInfo *vp;
+Bool samedefcursor;
+
+ /* If extended testing is required: */
+ if(noext(0) == False) {
+
+ if(config.alt_screen != -1) {
+ (void) warppointer(display, DRW(display), 0,0);
+ altroot = RootWindow(display, config.alt_screen);
+ samedefcursor = spriteiswin(display, altroot);
+ }
+
+ /* If the server supports two screens with the same default cursor: */
+ if(config.alt_screen != -1 && samedefcursor) {
+
+ /* Set the root window cursor to a non-default cursor. */
+ cursor = makecur(display);
+ w = DRW(display);
+ XDefineCursor(display, w, cursor);
+
+ /* Verify that the cursor was set correctly. */
+ if(curofwin(display, cursor, w) == False) {
+ delete("XDefineCursor() did not set the root window's cursor correctly.");
+ return;
+ } else
+ CHECK;
+
+ /* Warp the pointer into the root window. */
+ (void) warppointer(display, w, 0,0);
+
+ /* Verify that the current cursor is that of the root window. */
+ if(spriteiswin(display, w) == False) {
+ delete("Current cursor is not that of the root window.");
+ return;
+ } else
+ CHECK;
+
+ /* Warp the pointer to the alternate root window. */
+ (void) warppointer(display, altroot, 0,0);
+
+ /* Verify that the current cursor is not the same as that of the default root window. */
+ if(spriteiswin(display, DRW(display)) != False) {
+ delete("The alternate root window's cursor was not set to the default cursor.");
+ return;
+ } else
+ CHECK;
+
+ /* Reset the cursor of the root window to the default cursor using xname. */
+ XCALL;
+
+ /* Verify that the current cursor is the same as that of the default root window. */
+ if(spriteiswin(display, DRW(display)) == False) {
+ report("Root window's cursor was not set to the default cursor.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+ } else {
+
+ /* Otherwise : */
+
+ /* Set the root window cursor to a non-default cursor. */
+ cursor = makecur2(display);
+ w = DRW(display);
+ XDefineCursor(display, w, cursor);
+
+ /* Verify that the cursor was set correctly. */
+ if(curofwin(display, cursor, w) == False) {
+ delete("XDefineCursor() did not set the root window's cursor correctly.");
+ return;
+ } else
+ CHECK;
+
+ /* Warp the pointer to the root window. */
+ (void) warppointer(display, w, 0,0);
+
+ /* Verify that the current cursor is that of the root window. */
+ if(spriteiswin(display, w) == False) {
+ delete("Current cursor is not that of the root window.");
+ return;
+ } else
+ CHECK;
+
+ /* Reset the cursor of the root window to the default cursor using xname. */
+ XCALL;
+
+ /* Verify that the root window cursor is no longer the non-default cursor. */
+ if(curofwin(display, cursor, w) != False) {
+ report("%s() did not set the root window's cursor to the default cursor.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(3);
+ }
+
+
+ } else {
+
+ /* Otherwise: */
+
+ /* Create cursor. */
+ cursor = makecur(display);
+
+ /* Set window to root window. */
+ w = DRW(display);
+
+ /* Define cursor for root window. */
+ XDefineCursor(display, w, cursor);
+
+ /* Call XUndefineCursor on root window. */
+ XCALL;
+ if (geterr() != Success)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKUNTESTED(1);
+ }
+>>ASSERTION Bad A
+.ER BadWindow
+>>#HISTORY peterc Completed Wrote STRATEGY and CODE
diff --git a/xc/test/xsuite/xtest/tset/CH06/unldfnt/unldfnt.m b/xc/test/xsuite/xtest/tset/CH06/unldfnt/unldfnt.m
new file mode 100644
index 000000000..29bb50fd5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH06/unldfnt/unldfnt.m
@@ -0,0 +1,77 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUnloadFont CH06
+void
+
+Display *display = Dsp;
+Font font;
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>ASSERTION Good A
+When another resource or resource ID references the
+.A font ,
+then a call to xname
+deletes the association between the
+.A font
+resource ID
+and the specified font.
+>>STRATEGY
+Load a font.
+Call XUnloadFont.
+Verify that the font ID is no longer usable.
+>>CODE
+GC gc;
+
+ gc = makegc(display, DRW(display));
+ if (isdeleted())
+ return;
+ font = XLoadFont(display, "xtfont0");
+
+ XCALL;
+
+ /* Try to use the font */
+ XSetErrorHandler(error_status);
+ reseterr();
+ XSetFont(display, gc, font);
+ XDrawString(display, DRW(display), gc, 30, 30, "abc", 3);
+ XSync(display, 0);
+ switch (geterr()) {
+ case Success:
+ report("font ID was still usable");
+ FAIL;
+ break;
+ case BadFont:
+ PASS;
+ break;
+ default:
+ delete("Unexpected error in draw string");
+ break;
+ }
+ XSetErrorHandler(unexp_err);
+
+>>ASSERTION Good B 3
+When no other resource or resource ID references the
+.A font ,
+then a call to xname
+deletes the association between the
+.A font
+resource ID
+and the specified font
+and the font itself will be freed.
+>>ASSERTION Bad A
+.ER BadFont bad-font
+>># HISTORY kieron Completed Reformat and tidy to ca pass
diff --git a/xc/test/xsuite/xtest/tset/CH07/Makefile b/xc/test/xsuite/xtest/tset/CH07/Makefile
new file mode 100644
index 000000000..be03037d3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/Makefile
@@ -0,0 +1,196 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+#
+# This Makefile can be used to compile all the tests in this
+# section of the X test suite in such a way that they are all links to
+# a single executable file. This normally allows a considerable
+# reduction in the disc space requirements for the X test suite
+# when fully built.
+#
+# There are two ways this can be done:
+# 1) Using the TET. Execute the command:
+# tcc -b -s link_exec xtest linkbuild
+# in the directory $TET_ROOT/xtest.
+# This will execute the TET build tool (which is normally pmake)
+# in the top level directory of each section of the test suite
+# (including this directory).
+#
+# 2) Directly without using the TET. Execute the command:
+# pmake
+# in this directory.
+#
+# For more details, refer to the User Guide
+#
+
+CAT=cat
+
+ALLTESTS=Tests
+
+TESTOFILES=\
+actvtscrns.o \
+addhst.o \
+addhsts.o \
+addtsvst.o \
+allwevnts.o \
+atrptoff.o \
+atrpton.o \
+bll.o \
+chngactvpn.o \
+chngkybrdc.o \
+chngkybrdm.o \
+chngpntrcn.o \
+chngsvst.o \
+dltmdfrmpe.o \
+dsblaccssc.o \
+dsplykycds.o \
+enblaccssc.o \
+frcscrnsvr.o \
+frmdfrmp.o \
+grbbttn.o \
+grbky.o \
+grbkybrd.o \
+grbpntr.o \
+grbsrvr.o \
+gtinptfcs.o \
+gtkybrdcnt.o \
+gtkybrdmpp.o \
+gtmdfrmppn.o \
+gtpntrcntr.o \
+gtpntrmppn.o \
+gtscrnsvr.o \
+insrtmdfrm.o \
+instllclrm.o \
+kllclnt.o \
+lsthsts.o \
+lstinstlld.o \
+nwmdfrmp.o \
+qrykymp.o \
+rmvfrmsvst.o \
+rmvhst.o \
+rmvhsts.o \
+rprntwdw.o \
+rstscrnsvr.o \
+staccsscnt.o \
+stclsdwnmd.o \
+stinptfcs.o \
+stmdfrmppn.o \
+stpntrmppn.o \
+stscrnsvr.o \
+ungrbbttn.o \
+ungrbky.o \
+ungrbkybrd.o \
+ungrbpntr.o \
+ungrbsrvr.o \
+unnstllclr.o \
+wrppntr.o
+
+LINKOFILE=linktbl.o
+OFILES = $(TESTOFILES) $(LINKOFILE)
+
+DIRLIST=\
+actvtscrns \
+addhst \
+addhsts \
+addtsvst \
+allwevnts \
+atrptoff \
+atrpton \
+bll \
+chngactvpn \
+chngkybrdc \
+chngkybrdm \
+chngpntrcn \
+chngsvst \
+dltmdfrmpe \
+dsblaccssc \
+dsplykycds \
+enblaccssc \
+frcscrnsvr \
+frmdfrmp \
+grbbttn \
+grbky \
+grbkybrd \
+grbpntr \
+grbsrvr \
+gtinptfcs \
+gtkybrdcnt \
+gtkybrdmpp \
+gtmdfrmppn \
+gtpntrcntr \
+gtpntrmppn \
+gtscrnsvr \
+insrtmdfrm \
+instllclrm \
+kllclnt \
+lsthsts \
+lstinstlld \
+nwmdfrmp \
+qrykymp \
+rmvfrmsvst \
+rmvhst \
+rmvhsts \
+rprntwdw \
+rstscrnsvr \
+staccsscnt \
+stclsdwnmd \
+stinptfcs \
+stmdfrmppn \
+stpntrmppn \
+stscrnsvr \
+ungrbbttn \
+ungrbky \
+ungrbkybrd \
+ungrbpntr \
+ungrbsrvr \
+unnstllclr \
+wrppntr
+
+all: subdirs test
+
+test:$P $(OFILES) $(LIBS) $(TCM)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(TCM) $(LIBS) $(SYSLIBS)
+ $(CAT) test > $(ALLTESTS)
+ $(RM) test
+
+subdirs:
+ if [ ! -f $(ALLTESTS) ]; then $(CAT) /dev/null > $(ALLTESTS); \
+ chmod a+x $(ALLTESTS); else : ; fi
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then \
+ (cd $$i; echo Compiling in $$i; $(TET_BUILD_TOOL) linkexec); \
+ fi; \
+ done
+
+# The xtestlib is made if it doesn't exist
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
+clean: cletests clesubdirs
+
+cletests:
+ $(RM) test $(OFILES) $(ALLTESTS) core
+
+clesubdirs:
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then (cd $$i; $(TET_CLEAN_TOOL) ); fi; done
+
+clobber: clean
diff --git a/xc/test/xsuite/xtest/tset/CH07/actvtscrns/actvtscrns.m b/xc/test/xsuite/xtest/tset/CH07/actvtscrns/actvtscrns.m
new file mode 100644
index 000000000..158b27cad
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/actvtscrns/actvtscrns.m
@@ -0,0 +1,35 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XActivateScreenSaver CH07
+void
+
+Display *display = Dsp;
+>>ASSERTION Good B 3
+When the screen saver is currently deactivated, then a call to xname
+activates the screen saver.
+>>STRATEGY
+Touch test only.
+>>CODE
+
+ XCALL;
+
+ untested("There is no reliable test method, but a touch test was performed");
+>>ASSERTION Good B 3
+When the screen saver is currently deactivated
+and the screen saver has been disabled with a timeout
+of zero, then a call to xname
+activates the screen saver.
diff --git a/xc/test/xsuite/xtest/tset/CH07/addhst/addhst.m b/xc/test/xsuite/xtest/tset/CH07/addhst/addhst.m
new file mode 100644
index 000000000..d0fb325bc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/addhst/addhst.m
@@ -0,0 +1,163 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAddHost CH07
+void
+
+Display *display = Dsp;
+XHostAddress *host = xthosts;
+>>EXTERN
+
+#include "xthost.h"
+
+>>ASSERTION Good B 1
+A call to xname
+adds the specified host to the access control list for the display.
+>>STRATEGY
+Get current acl.
+If current list includes the host to be added:
+ Remove host with XRemoveHost
+ Get current acl.
+ Check that host to be added is not in the list.
+Call xname to add host.
+If call fails with a BadAccess:
+ Report that assertion can not be tested from this host.
+Get new acl.
+Verify that host is in new acl.
+>>CODE
+XHostAddress *oldhosts;
+XHostAddress *newhosts;
+int nhosts;
+Bool state;
+
+ oldhosts = XListHosts(display, &nhosts, &state);
+
+ /*
+ * Try to set up the current list so as to exclude the host to
+ * be added.
+ */
+ if (ishostinacl(host, oldhosts, nhosts)) {
+ /* Have to remove it first, may get BadAccess */
+ debug(1, "Removing host");
+ CATCH_ERROR(display);
+ XRemoveHost(display, host);
+ RESTORE_ERROR(display);
+ oldhosts = XListHosts(display, &nhosts, &state);
+ if (ishostinacl(host, oldhosts, nhosts)) {
+ delete("Could not set up host list to exclude host to be added");
+ return;
+ }
+ }
+ if (isdeleted())
+ return;
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() == BadAccess) {
+ untested("This host does not have permission to change the list");
+ report(" so this assertion cannot be tested");
+ return;
+ } else
+ CHECK;
+
+ newhosts = XListHosts(display, &nhosts, &state);
+ if (ishostinacl(host, newhosts, nhosts))
+ CHECK;
+ else {
+ report("Host was not added to access control list");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+
+ XRemoveHost(display, host);
+>>EXTERN
+
+static int
+ishostinacl(host, acl, nhosts)
+XHostAddress *host;
+XHostAddress *acl;
+int nhosts;
+{
+int i;
+
+ for (i = 0; i < nhosts; i++) {
+ if (samehost(host, &acl[i]))
+ return True;
+ }
+ return False;
+}
+
+>>ASSERTION Good B 1
+.ER Access acl
+>>STRATEGY
+Attempt to change access control list.
+If an error occurs
+ If error is BadAccess
+ Report Pass.
+ else
+ Report Fail.
+else
+ Report that assertion is untestable for this host.
+>>CODE
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() != Success) {
+ if (geterr() == BadAccess)
+ PASS;
+ else {
+ report("Received %s error, expecting BadAccess", errorname(geterr()));
+ FAIL;
+ }
+ } else {
+ untested("This host has permission to change the list");
+ report(" so this assertion cannot be tested");
+ }
+>>ASSERTION Good B 1
+When the host family, address length and address data do not form a valid
+address, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Call xname with known bad address data.
+If BadAccess error:
+ Report that assertion cannot be tested.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ host = xtbadhosts;
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() == BadAccess) {
+ untested("This host does not have permission to change the list");
+ report(" so this assertion cannot be tested");
+ return;
+ } else
+ CHECK;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else {
+ report("Got %s, expecting BadValue", errorname(geterr()));
+ FAIL;
+ }
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH07/addhsts/addhsts.m b/xc/test/xsuite/xtest/tset/CH07/addhsts/addhsts.m
new file mode 100644
index 000000000..2b139d877
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/addhsts/addhsts.m
@@ -0,0 +1,175 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAddHosts CH07
+void
+
+Display *display = Dsp;
+XHostAddress *hosts = xthosts;
+int num_hosts = nxthosts;
+>>EXTERN
+
+#include "xthost.h"
+
+>>ASSERTION Good B 1
+A call to xname adds each specified host to the access control list
+for the display.
+>>STRATEGY
+Get current acl.
+If current list includes the hosts to be added:
+ Remove hosts with XRemoveHosts
+ Get current acl.
+ Check that hosts to be added are not in the list.
+Call xname to add hosts.
+If call fails with a BadAccess:
+ Report that assertion can not be tested from this host.
+Get new acl.
+Verify that hosts are in new acl.
+>>CODE
+XHostAddress *oldhosts;
+XHostAddress *newhosts;
+int nhosts;
+Bool state;
+
+ oldhosts = XListHosts(display, &nhosts, &state);
+
+ /*
+ * Try to set up the current list so as to exclude hosts to
+ * be added.
+ */
+ if (hostsinacl(hosts, nxthosts, oldhosts, nhosts) != 0) {
+ /* Have to remove them first, may get BadAccess */
+ debug(1, "Removing hosts");
+ CATCH_ERROR(display);
+ XRemoveHosts(display, hosts, nxthosts);
+ RESTORE_ERROR(display);
+ oldhosts = XListHosts(display, &nhosts, &state);
+ if (hostsinacl(hosts, nxthosts, oldhosts, nhosts) != 0) {
+ delete("Could not set up host list to exclude hosts to be added");
+ return;
+ }
+ }
+ if (isdeleted())
+ return;
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() == BadAccess) {
+ untested("This host does not have permission to change the list");
+ report(" so this assertion cannot be tested");
+ return;
+ } else
+ CHECK;
+
+ newhosts = XListHosts(display, &nhosts, &state);
+ if (hostsinacl(hosts, nxthosts, newhosts, nhosts) == nxthosts)
+ CHECK;
+ else {
+ report("All hosts were not added to the access control list");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+
+ XRemoveHosts(display, hosts, nxthosts);
+>>EXTERN
+
+/*
+ * Returns the number of hosts in hosts[] that are in the acl.
+ */
+static int
+hostsinacl(hosts, nxthosts, acl, nhosts)
+XHostAddress *hosts;
+int nxthosts;
+XHostAddress *acl;
+int nhosts;
+{
+int i, j;
+int n;
+
+ n = 0;
+ for (i = 0; i < nxthosts; i++) {
+ for (j = 0; j < nhosts; j++) {
+ if (samehost(&hosts[i], &acl[j])) {
+ n++;
+ break;
+ }
+ }
+ }
+ return(n);
+}
+
+>>ASSERTION Good B 1
+.ER Access acl
+>>STRATEGY
+Attempt to change access control list.
+If an error occurs
+ If error is BadAccess
+ Report Pass.
+ else
+ Report Fail.
+else
+ Report that assertion is untestable for this host.
+>>CODE
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() != Success) {
+ if (geterr() == BadAccess)
+ PASS;
+ else {
+ report("Received %s error, expecting BadAccess", errorname(geterr()));
+ FAIL;
+ }
+ } else {
+ untested("This host has permission to change the list");
+ report(" so this assertion cannot be tested");
+ }
+>>ASSERTION Good B 1
+When the host family, address length and address data do not form a valid
+address, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Call xname with known bad address data.
+If BadAccess error:
+ Report that assertion cannot be tested.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ hosts = xtbadhosts;
+ num_hosts = nxtbadhosts;
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() == BadAccess) {
+ untested("This host does not have permission to change the list");
+ report(" so this assertion cannot be tested");
+ return;
+ } else
+ CHECK;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else {
+ report("Got %s, expecting BadValue", errorname(geterr()));
+ FAIL;
+ }
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH07/addtsvst/addtsvst.m b/xc/test/xsuite/xtest/tset/CH07/addtsvst/addtsvst.m
new file mode 100644
index 000000000..14fae304c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/addtsvst/addtsvst.m
@@ -0,0 +1,744 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAddToSaveSet CH07
+void
+xname
+Display *display = Dsp;
+Window w;
+>>EXTERN
+
+/*
+ * These windows are created by client1.
+ */
+char *T1[] = {
+ "base borders",
+ "client1-A base (10,40) 9x4",
+ "client1-C base (50,60) 60x60",
+ "client1-D base (5,50) 35x70",
+ "client1-B base (30,6) 60x30",
+};
+
+/*
+ * These windows are created by client2 using client1's windows as parent.
+ * This will lead to some windows being clipped by their (client1) parent,
+ * when the client2 windows are reparented then these should reappear.
+ */
+char *T2[] = {
+ ". borders",
+ "client2-a-noadd-nomap . (15, 5) 12x4 unmap",
+ "client2-b-noadd . (10, 10) 12x6",
+#define NOADD 2 /* Number not added */
+ "client2-c-unmap . (30, 28) 14x7 unmap",
+ "client2-d . (45, 15) 9x7",
+ "client2-e . (15, 23) 9x7",
+};
+
+/*
+ * The number of windows that should be reparented. NOADD of the client2
+ * windows is not added to the save set.
+ */
+#define NUM_REPARENT ((NELEM(T1)-1)*(NELEM(T2)-NOADD-1))
+
+/* Flags used in uflags */
+#define IN_SAVE_SET 0x01
+#define CLIENT1_INFERIOR 0x02
+#define ON_PARENT 0x04
+#define ON_WINDOW 0x10
+
+/*
+ * Create a bunch of windows. Some are created by client1. Others are
+ * created by client2. Of the latter some are inferiors of client1 and
+ * are marked CLIENT1_INFERIOR. Some of client2's windows are added to
+ * client1's save-set - these are marked IN_SAVE_SET.
+ * Client2 windows that are originally unmapped will be marked BT_UNMAP.
+ * Structure events are selected for on display Dsp for all appropriate
+ * windows.
+ * Before returning, client1 is destroyed.
+ */
+void
+setupsaveset(btret)
+struct buildtree *btret[NELEM(T1)];
+{
+Display *client1;
+Display *client2;
+Window base;
+struct buildtree *bt1;
+struct buildtree *btp;
+XWindowAttributes batts;
+int i, j;
+int pass = 0, fail = 0;
+
+ client1 = XOpenDisplay(config.display);
+ client2 = opendisplay();
+ if (client1 == NULL || client2 == NULL) {
+ delete("Could not open display");
+ return;
+ }
+
+ base = defwin(Dsp);
+ XSync(Dsp, False);
+
+ /*
+ * Build a tree for client1, build a tree for client2 on each of
+ * the client1 windows + the base window.
+ */
+ bt1 = buildtree(client1, base, T1, NELEM(T1));
+ for (i = 0; i < NELEM(T1); i++) {
+ btret[i] = buildtree(client2, bt1[i].wid, T2, NELEM(T2));
+ /*
+ * Transfer some of the information down from the client1 windows
+ * into the returned array. This means that all the positions
+ * in the returned array will be relative to base.
+ */
+ btret[i][0].x = bt1[i].x;
+ btret[i][0].y = bt1[i].y;
+ btret[i][0].borderwidth = bt1[i].borderwidth;
+ }
+
+ XSync(client2, False);
+
+ for (i = 0; i < NELEM(T1); i++) {
+ for (j = 0; j < NELEM(T2); j++) {
+
+ btp = &btret[i][j];
+ display = client1;
+ w = btp->wid;
+
+ /*
+ * j==0 is the client1 window.
+ * j==1 and j==2 are not added to
+ * the save-set; the rest are.
+ */
+ if (j > NOADD) {
+ btp->uflags |= IN_SAVE_SET;
+ XCALL;
+ } /* else not added to save set */
+
+ /*
+ * The windows with i=0 are inferiors of the base window
+ * and not one of client1's window.
+ */
+ if (i != 0)
+ btp->uflags |= CLIENT1_INFERIOR;
+
+ XSelectInput(Dsp, w, StructureNotifyMask);
+ }
+ }
+ XSelectInput(Dsp, base, SubstructureNotifyMask);
+
+/* Store base window coordinates to allow for absolute coordinate checking */
+ XGetWindowAttributes(Dsp, base, &batts);
+ btret[0][0].x = batts.x;
+ btret[0][0].y = batts.y;
+ btret[0][0].borderwidth = batts.border_width;
+
+ XSync(Dsp, False);
+
+ XCloseDisplay(client1);
+
+ XSync(Dsp, False);
+ XSync(client2, False);
+
+}
+
+>>ASSERTION Good A
+A call to xname adds the specified window to the client's save-set.
+>># We could test the following in XCloseDisplay etc.
+>>STRATEGY
+Create client1.
+Create windows for client1.
+Create client2.
+Create windows for client2 that are inferiors of the windows created by
+client1.
+Add some of client2's windows to client1's save-set with xname.
+Close client1.
+Verify that the inferiors that were added to the save-set still exist
+and that the ones that were not have been destroyed.
+>>CODE
+struct buildtree *bt[NELEM(T1)];
+struct buildtree *btp;
+XWindowAttributes atts;
+int i, j;
+
+ setupsaveset(bt);
+
+ CATCH_ERROR(Dsp);
+ for (i = 0; i < NELEM(T1); i++) {
+ for (j = 1; j < NELEM(T2); j++) {
+ btp = bt[i] + j;
+ debug(1, "window %s", btp->name);
+
+ if ((btp->uflags & CLIENT1_INFERIOR) == 0) {
+ if (XGetWindowAttributes(Dsp, btp->wid, &atts) == True)
+ CHECK;
+ else {
+ report("Window that was not inferior was destroyed");
+ FAIL;
+ }
+ } else if (btp->uflags & IN_SAVE_SET) {
+ if (XGetWindowAttributes(Dsp, btp->wid, &atts) == True)
+ CHECK;
+ else {
+ report("Window in save-set destroyed");
+ FAIL;
+ }
+ } else {
+ if (XGetWindowAttributes(Dsp, btp->wid, &atts) == False)
+ CHECK;
+ else {
+ report("Window not in save-set was not destroyed");
+ FAIL;
+ }
+ }
+ }
+ }
+ RESTORE_ERROR(Dsp);
+
+ CHECKPASS(NELEM(T1)*(NELEM(T2)-1));
+>>ASSERTION Good A
+When the client's resources are destroyed,
+>># Close or KILL CLIENT.
+and the window specified in the call to xname is an inferior of
+one of the windows created by the client,
+then the specified window is reparented to the closest ancestor window
+such that the save-set window is not an inferior of a window
+created by the client.
+>>STRATEGY
+Setup windows so that they have been reparented, using setupsaveset.
+Verify that each window that should have been reparented has the correct parent.
+>>CODE
+struct buildtree *bt[NELEM(T1)];
+struct buildtree *btp;
+Window parent;
+Window dummy;
+Window *children;
+Window base;
+unsigned int nchild;
+int i, j;
+
+ setupsaveset(bt);
+
+ /*
+ * Base will be stored in bt[0][0] all the windows should be reparented
+ * to there.
+ */
+ base = bt[0][0].wid;
+
+ for (i = 0; i < NELEM(T1); i++) {
+ for (j = 1; j < NELEM(T2); j++) {
+
+ btp = bt[i] + j;
+
+ /*
+ * Skip if it shouldn't have been reparented.
+ */
+ btp->uflags &= (IN_SAVE_SET|CLIENT1_INFERIOR);
+ if (btp->uflags != (IN_SAVE_SET|CLIENT1_INFERIOR))
+ continue;
+
+ /* Get new parent */
+ XQueryTree(Dsp, btp->wid, &dummy, &parent, &children, &nchild);
+ if (children && nchild > 0)
+ XFree((char*)children);
+
+ if (parent != base) {
+ report("Window not reparented to correct parent");
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+ CHECKPASS(NUM_REPARENT);
+>>ASSERTION Good A
+When a save-set window is reparented as a result of save-set
+processing, then the absolute coordinates
+of the upper-left outer corner of the save-set window are unchanged.
+>>STRATEGY
+Setup reparented windows with setupsaveset().
+Obtain base window coordinates.
+Verify the base window has not moved.
+For each reparented window:
+ Calculate original position relative to base window.
+ Obtain new position of window.
+ Verify that window has not moved relative to root window.
+>>CODE
+XWindowAttributes batts, atts;
+struct buildtree *bt[NELEM(T1)];
+struct buildtree *btp;
+struct buildtree *cli1btp;
+int oldx, oldy;
+int newx, newy;
+int i, j;
+
+ setupsaveset(bt);
+
+ XGetWindowAttributes(Dsp, bt[0][0].wid, &batts);
+ if (batts.x != bt[0][0].x || batts.y != bt[0][0].y) {
+ report("Window reparenting caused the base window to move");
+ report("Pre-reparenting (%d,%d)" , bt[0][0].x, bt[0][0].y);
+ report("Post-reparenting (%d,%d)" , batts.x, batts.y);
+ FAIL;
+ } else
+ CHECK;
+
+ for (i = 0; i < NELEM(T1); i++) {
+
+ /*
+ * Get the information relating to the original client1 window
+ * (that no longer exists).
+ */
+ cli1btp = bt[i];
+
+ for (j = 1; j < NELEM(T2); j++) {
+ btp = bt[i] + j;
+
+ /*
+ * Skip if it shouldn't have been reparented.
+ */
+ btp->uflags &= (IN_SAVE_SET|CLIENT1_INFERIOR);
+ if (btp->uflags != (IN_SAVE_SET|CLIENT1_INFERIOR))
+ continue;
+
+ debug(1, "window %s", btp->name);
+
+ oldx = bt[0][0].x + bt[0][0].borderwidth +
+ cli1btp->x + cli1btp->borderwidth + btp->x;
+ oldy = bt[0][0].y + bt[0][0].borderwidth +
+ cli1btp->y + cli1btp->borderwidth + btp->y;
+
+ (void) XGetWindowAttributes(Dsp, btp->wid, &atts);
+
+ newx = batts.x + batts.border_width + atts.x;
+ newy = batts.y + batts.border_width + atts.y;
+
+ /*
+ * Most R4 servers seem to have a bug here. When the window
+ * to which the windows are being reparented is not at the
+ * origin, then the windows get displaced by an amount equal
+ * to the position of the window.
+ */
+ if (oldx != newx || oldy != newy) {
+ report("Coords relative to root changed after reparenting");
+ report(" (%d, %d), expecting (%d, %d)"
+ , newx, newy, oldx, oldy);
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+ CHECKPASS(1 + NUM_REPARENT);
+>>ASSERTION Good A
+When a save-set window is reparented as a result of save-set
+processing and it was originally mapped, then
+the window is unmapped before being reparented and
+.S UnmapNotify
+events are generated.
+>>STRATEGY
+Create save set with setupsaveset.
+Get all unmap events.
+Compare event against expected values.
+Verify that unmap events were received for all save-set windows that
+were inferiors of client1.
+>>CODE
+XEvent ev;
+XUnmapEvent good;
+XUnmapEvent *ump;
+Window base;
+struct buildtree *bt[NELEM(T1)];
+struct buildtree *btp;
+int loop;
+int i, j;
+
+ setupsaveset(bt);
+
+ base = bt[0][0].wid;
+
+ defsetevent(good, Dsp, UnmapNotify);
+ good.from_configure = False;
+
+ loop = 0;
+ while (getevent(Dsp, &ev)) {
+ if (ev.type != UnmapNotify)
+ continue;
+ ump = (XUnmapEvent*)&ev;
+
+ /*
+ * Find the window that this event refers to.
+ */
+ for (btp = NULL, i = 0; btp == NULL && i < NELEM(T1); i++)
+ btp = btwtobtp(bt[i], ump->window);
+
+ if (btp == NULL) {
+ report("Unmap event received for unrecognised window");
+ FAIL;
+ return;
+ }
+
+ if (ump->event == ump->window) {
+ /* On window itself */
+ if (btp->uflags & ON_WINDOW) {
+ report("Repeated unmap event on window");
+ FAIL;
+ } else if (loop == 0)
+ CHECK;
+ btp->uflags |= ON_WINDOW;
+ good.event = btp->wid;
+ } else {
+ /* Shouldn't happen at all */
+ if (btp->uflags & ON_PARENT) {
+ report("Repeated unmap event on parent of window");
+ FAIL;
+ } else if (loop == 0)
+ CHECK;
+ btp->uflags |= ON_PARENT;
+ good.event = base;
+ }
+ good.window = btp->wid;
+
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else if (loop == 0)
+ CHECK;
+
+ loop++;
+ }
+
+ loop = 0;
+ for (i = 0; i < NELEM(T1); i++) {
+ for (j = 1; j < NELEM(T2); j++) {
+ btp = bt[i] + j;
+
+ debug(1, "window %s", btp->name);
+
+ /*
+ * An unmap should be received when:
+ * Was mapped && In save set && Was client1 inferior
+ */
+ if ( (btp->uflags & IN_SAVE_SET)
+ && (btp->uflags & CLIENT1_INFERIOR)
+ && (btp->opts & BT_UNMAP) == 0
+ ) {
+
+ if (btp->uflags & ON_WINDOW) {
+ if (loop == 0)
+ CHECK;
+ } else {
+ report("Unmap event was not received");
+ FAIL;
+ }
+ } else if (btp->uflags & ON_WINDOW) {
+
+ if ((btp->uflags & CLIENT1_INFERIOR) == 0) {
+ report("Unmap event was received for window that was not");
+ report(" an inferior of the destroyed client");
+ FAIL;
+ }
+ if ((btp->uflags & IN_SAVE_SET) == 0) {
+ report("Unmap event was received for window that was not in save-set");
+ FAIL;
+ }
+ if (btp->opts & BT_UNMAP) {
+ report("Unmap event was received for window that was already not mapped");
+ FAIL;
+ }
+ } else {
+ if (loop == 0)
+ CHECK;
+ }
+
+ loop++;
+ }
+ }
+
+ CHECKPASS(2 + 1);
+>>ASSERTION Good A
+When a save-set window is reparented as a result of save-set processing, then a
+.S ReparentNotify
+event is generated on the window and the new parent window.
+>>STRATEGY
+Create save set with setupsaveset.
+Get all reparent events.
+Compare event against expected values.
+Verify that reparent events were received for all save-set windows that
+were inferiors of client1.
+Verify that reparent events were received for the parents of all save-set
+windows that were inferiors of client1.
+>>CODE
+XEvent ev;
+XReparentEvent good;
+XReparentEvent *rpp;
+Window base;
+struct buildtree *bt[NELEM(T1)];
+struct buildtree *btp;
+int loop;
+int i, j;
+
+ setupsaveset(bt);
+
+ base = bt[0][0].wid;
+
+ defsetevent(good, Dsp, ReparentNotify);
+ good.parent = base;
+ good.override_redirect = False;
+
+ loop = 0;
+ while (getevent(Dsp, &ev)) {
+ if (ev.type != ReparentNotify)
+ continue;
+ rpp = (XReparentEvent*)&ev;
+
+ /*
+ * Find the window that this event refers to.
+ */
+ for (i = 0, btp = NULL; btp == NULL && i < NELEM(T1); i++)
+ btp = btwtobtp(bt[i], rpp->window);
+
+ if (btp == NULL) {
+ report("Reparent event received for unrecognised window");
+ FAIL;
+ return;
+ }
+
+ if (rpp->event == rpp->window) {
+ /* On window itself */
+ if (btp->uflags & ON_WINDOW) {
+ report("Repeated reparent event on window");
+ FAIL;
+ } else if (loop == 0)
+ CHECK;
+ btp->uflags |= ON_WINDOW;
+ good.event = btp->wid;
+ } else {
+ if (btp->uflags & ON_PARENT) {
+ report("Repeated reparent event on parent of window");
+ FAIL;
+ } else if (loop == 0)
+ CHECK;
+ btp->uflags |= ON_PARENT;
+ good.event = base;
+ }
+
+ good.window = btp->wid;
+ good.x = btp->x + btp->parent->borderwidth + btp->parent->x;
+ good.y = btp->y + btp->parent->borderwidth + btp->parent->y;
+
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else if (loop == 0)
+ CHECK;
+
+ loop++;
+ }
+
+ loop = 0;
+ for (i = 0; i < NELEM(T1); i++) {
+ for (j = 1; j < NELEM(T2); j++) {
+ btp = bt[i] + j;
+
+ debug(1, "window %s", btp->name);
+
+ /*
+ * A reparent should be received when:
+ * In save set && Was client1 inferior
+ */
+ if ( (btp->uflags & IN_SAVE_SET)
+ && (btp->uflags & CLIENT1_INFERIOR)
+ ) {
+
+ if (btp->uflags & ON_WINDOW) {
+ if (loop == 0)
+ CHECK;
+ } else {
+ report("Reparent event was not received on window");
+ FAIL;
+ }
+ if (btp->uflags & ON_PARENT) {
+ if (loop == 0)
+ CHECK;
+ } else {
+ report("Reparent event was not received on parent of window");
+ FAIL;
+ }
+ } else if (btp->uflags & (ON_WINDOW|ON_PARENT)) {
+
+ if ((btp->uflags & CLIENT1_INFERIOR) == 0) {
+ report("Reparent event was received for window that was");
+ report(" not an inferior of the destroyed client");
+ FAIL;
+ }
+ if ((btp->uflags & IN_SAVE_SET) == 0) {
+ report("Reparent event was received for window that was not in save-set");
+ FAIL;
+ }
+ } else {
+ if (loop == 0)
+ CHECK;
+ }
+
+ loop++;
+ }
+ }
+
+ CHECKPASS(2 + 1);
+>>ASSERTION Good A
+When a client is destroyed,
+then all its save-set windows that are not mapped or that are reparented as
+a result of save-set processing are mapped and
+.S MapNotify
+or
+.S MapRequest
+events are generated.
+>>STRATEGY
+Create save set with setupsaveset.
+Get all map events.
+Compare each event against expected values.
+Verify that map events were received for all save-set windows that
+were inferiors of client1 or were not originally mapped.
+Verify that map events were received for the parents of all save-set
+windows that were inferiors of client1 or were not originally mapped.
+>>CODE
+XEvent ev;
+XMapEvent good;
+XMapEvent *mp;
+Window base;
+struct buildtree *bt[NELEM(T1)];
+struct buildtree *btp;
+int loop;
+int i, j;
+
+ setupsaveset(bt);
+
+ base = bt[0][0].wid;
+
+ defsetevent(good, Dsp, MapNotify);
+ good.override_redirect = False;
+
+ loop = 0;
+ while (getevent(Dsp, &ev)) {
+ if (ev.type != MapNotify)
+ continue;
+ mp = (XMapEvent*)&ev;
+
+ /*
+ * Find the window that this event refers to.
+ */
+ for (i = 0, btp = NULL; btp == NULL && i < NELEM(T1); i++)
+ btp = btwtobtp(bt[i], mp->window);
+
+ if (btp == NULL) {
+ report("Map event received for unrecognised window");
+ FAIL;
+ return;
+ }
+
+ if (mp->event == mp->window) {
+ /* On window itself */
+ if (btp->uflags & ON_WINDOW) {
+ report("Repeated map event on window");
+ FAIL;
+ } else if (loop == 0)
+ CHECK;
+ btp->uflags |= ON_WINDOW;
+ good.event = btp->wid;
+ } else {
+ if (btp->uflags & ON_PARENT) {
+ report("Repeated map event on parent of window");
+ FAIL;
+ } else if (loop == 0)
+ CHECK;
+ btp->uflags |= ON_PARENT;
+ good.event = base;
+ }
+
+ good.window = btp->wid;
+
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else if (loop == 0)
+ CHECK;
+
+ loop++;
+ }
+
+ for (i = 0; i < NELEM(T1); i++) {
+ for (j = 1; j < NELEM(T2); j++) {
+ btp = bt[i] + j;
+
+ debug(1, "window %s", btp->name);
+
+ /*
+ * A map should be received when:
+ * IN_SAVE_SET && CLIENT1_INFERIOR
+ * || IN_SAVE_SET && BT_UNMAP
+ */
+ if (( (btp->uflags & IN_SAVE_SET) &&
+ (btp->uflags & CLIENT1_INFERIOR) )
+ || ( (btp->uflags & IN_SAVE_SET) &&
+ (btp->opts & BT_UNMAP) ))
+ {
+
+ if (btp->uflags & ON_WINDOW) {
+ CHECK;
+ } else {
+ report("Map event was not received on window");
+ FAIL;
+ }
+ if (btp->uflags & ON_PARENT) {
+ CHECK;
+ } else {
+ report("Map event was not received on parent of window");
+ FAIL;
+ }
+ } else if (btp->uflags & (ON_WINDOW|ON_PARENT)) {
+
+ if ((btp->uflags & IN_SAVE_SET) == 0) {
+ report("Map event was received for window that was not in save-set");
+ FAIL;
+ }
+ if ((btp->opts & BT_UNMAP) == 0) {
+ report("Map event was received for window that was already mapped");
+ FAIL;
+ }
+ } else {
+ CHECK;
+ CHECK; /* For balance with above */
+ }
+
+ }
+ }
+
+ CHECKPASS(2 + (2*NELEM(T1)*(NELEM(T2)-1)));
+>>ASSERTION Bad A
+When the specified window was created by the same client, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create a window using default client.
+Call xname with this client and window.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+
+ w = defwin(display);
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH07/allwevnts/allwevnts.m b/xc/test/xsuite/xtest/tset/CH07/allwevnts/allwevnts.m
new file mode 100644
index 000000000..d33ba00da
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/allwevnts/allwevnts.m
@@ -0,0 +1,1510 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAllowEvents CH07
+void
+xname(display, event_mode, time)
+Display *display = Dsp;
+int event_mode = AsyncPointer;
+Time time = CurrentTime;
+>>EXTERN
+
+/*
+ * The focus startup routines set the focus to the root window.
+ */
+>>SET startup focusstartup
+>>SET cleanup focuscleanup
+
+/*
+ * A window for use as a grab window in the freeze and freezecheck
+ * routines.
+ */
+static Window grabwin;
+
+/*
+ * Grab and freeze the pointer.
+ */
+static void
+grabfreezepointer(disp, time)
+Display *disp;
+Time time;
+{
+
+ grabwin = defwin(disp);
+
+ XGrabPointer(disp, grabwin, False, PointerMotionMask,
+ GrabModeSync, GrabModeAsync, None, None, time);
+}
+
+/*
+ * Return True if the pointer is frozen. We move the pointer and check
+ * the reported new position as returned by warppointer. If this is the
+ * same as the old position then the pointer is frozen.
+ */
+static Bool
+ispfrozen(disp)
+Display *disp;
+{
+PointerPlace *pp;
+
+ (void) warppointer(disp, grabwin, 0, 0);
+ pp = warppointer(disp, grabwin, 1, 1);
+ if (pp->ox == pp->nx)
+ return True;
+ else
+ return False;
+}
+
+>>ASSERTION Good A
+When the specified time is earlier than the last-grab
+time of the most recent active grab for the client or
+later than the current X server time, then a call to xname has no effect.
+>>STRATEGY
+Grab and freeze pointer with a given time.
+Call xname with earlier time and AsyncPointer.
+Verify that the pointer is still frozen.
+Get current server time.
+Call xname with a later time.
+Verify that the pointer is still frozen.
+>>CODE
+
+ /* get time from the server */
+ time = gettime(display);
+ grabfreezepointer(display, time);
+
+ time -= 100;
+ XCALL;
+
+ if (ispfrozen(display))
+ CHECK;
+ else {
+ report("Events allowed when time was earlier than last-grab time");
+ FAIL;
+ }
+
+ /*
+ * Get current time again and add several minutes to get a time in the
+ * future.
+ */
+ time = gettime(display);
+ time += ((config.speedfactor+1) * 1000000);
+ XCALL;
+
+ if (ispfrozen(display))
+ CHECK;
+ else {
+ report("Events allowed when time was later than current server time");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When the
+.A event_mode
+argument is
+.S AsyncPointer
+and the pointer is frozen by the client,
+then pointer event processing is resumed.
+>>STRATEGY
+Freeze pointer.
+Call xname with event_mode AsyncPointer.
+Verify that pointer is not frozen.
+>>CODE
+
+ grabfreezepointer(display, time);
+
+ event_mode = AsyncPointer;
+ XCALL;
+
+ if (ispfrozen(display)) {
+ report("Pointer was not released after AsyncPointer");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When the
+.A event_mode
+argument is
+.S AsyncPointer
+and the pointer is frozen twice by the client on behalf of two separate grabs,
+then a call to xname thaws for both grabs.
+>>STRATEGY
+Freeze pointer with XGrabPointer.
+Freeze pointer with XGrabKeyboard.
+Call xname with event_mode AsyncPointer.
+Verify that pointer is not frozen.
+>>CODE
+
+ grabfreezepointer(display, time);
+ XGrabKeyboard(display, grabwin, False, GrabModeSync, GrabModeAsync,
+ CurrentTime);
+
+ if (isdeleted())
+ return;
+
+ event_mode = AsyncPointer;
+ XCALL;
+
+ if (ispfrozen(display)) {
+ report("Pointer was not released from double grab after AsyncPointer");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When the
+.A event_mode
+argument is
+.S AsyncPointer
+and the pointer is not frozen by the client,
+then a call to xname has no effect.
+>>STRATEGY
+Call xname with event_mode AsyncPointer.
+Verify pointer is not frozen.
+>>CODE
+
+ event_mode = AsyncPointer;
+ grabwin = defwin(display);
+
+ XCALL;
+ if (!ispfrozen(display))
+ PASS;
+ else {
+ report("Pointer was frozen after AsyncPointer");
+ FAIL;
+ }
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S SyncPointer
+and the pointer is frozen and actively grabbed by the client, then
+pointer event processing is resumed normally until the next
+.S ButtonPress
+or
+.S ButtonRelease
+event is reported to the client, at which time
+the pointer again appears to freeze, unless the reported event causes
+the pointer grab to be released.
+>>STRATEGY
+Grab and freeze the pointer.
+Call xname with event_mode SyncPointer.
+Verify that pointer is not frozen.
+If test extension available:
+ Press a button.
+ Verify that the pointer is frozen.
+>>CODE
+>>SET end-function restoredevstate
+
+ grabfreezepointer(display, time);
+ XChangeActivePointerGrab(display, ButtonPressMask | PointerMotionMask,
+ None, CurrentTime);
+ if (ispfrozen(display))
+ CHECK;
+ else {
+ delete("Could not freeze pointer");
+ return;
+ }
+
+ event_mode = SyncPointer;
+ XCALL;
+
+ if (ispfrozen(display)) {
+ report("Pointer was not released after SyncPointer");
+ FAIL;
+ } else
+ CHECK;
+
+ if (noext(1) || nbuttons() <= 1) {
+ CHECKUNTESTED(2);
+ return;
+ }
+
+ /* If extension we can go on */
+ (void)warppointer(display, grabwin, 1, 2);
+ buttonpress(display, Button1);
+
+ if (ispfrozen(display))
+ CHECK;
+ else {
+ report("Pointer was not re-frozen by a button press");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the
+.A event_mode
+argument is
+.S SyncPointer
+and the pointer is not frozen by the client or the pointer is not grabbed by
+the client,
+then a call to xname has no effect.
+>>STRATEGY
+Call xname with event_mode SyncPointer.
+Verify pointer is not frozen.
+>>CODE
+
+ event_mode = SyncPointer;
+ grabwin = defwin(display);
+
+ XCALL;
+ if (!ispfrozen(display))
+ PASS;
+ else {
+ report("Pointer was frozen after SyncPointer with no initial freeze");
+ FAIL;
+ }
+>>ASSERTION Good A
+When the
+.A event_mode
+argument is
+.S SyncPointer
+and the pointer is frozen twice by the client on behalf of two separate
+grabs, then a call to xname thaws for both grabs.
+>>STRATEGY
+Freeze pointer with XGrabPointer.
+Freeze pointer with XGrabKeyboard.
+Call xname with event_mode SyncPointer.
+Verify that pointer is not frozen.
+>>CODE
+
+ grabfreezepointer(display, time);
+ XGrabKeyboard(display, grabwin, False, GrabModeSync, GrabModeAsync,
+ CurrentTime);
+
+ if (isdeleted())
+ return;
+
+ event_mode = SyncPointer;
+ XCALL;
+
+ if (ispfrozen(display)) {
+ report("Pointer was not released after SyncPointer");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>#NUM 008
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S ReplayPointer
+and the pointer is actively grabbed by the client and is frozen as
+the result of an event having been sent to the client, then
+the pointer grab is released and the event is completely reprocessed
+as though
+any passive grabs at or above the grab window of the grab just released
+were not present.
+>>STRATEGY
+Touch test for replay pointer.
+If extensions are available:
+ Create window.
+ Create child of this window.
+ Set passive grabs on both these windows.
+ Warp pointer into child window.
+ Press button to activate the grab.
+ Check that parent window has the grab.
+ Set event_mode to ReplayPointer.
+ Call xname.
+ Verify that the child window now has the grab.
+>>CODE
+XEvent ev;
+XButtonPressedEvent *bpp;
+Window chwin;
+struct area area;
+
+ event_mode = ReplayPointer;
+ if (noext(1)) {
+ XCALL;
+
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ /*
+ * Set up a pointer freeze as a result of a button press.
+ */
+ grabwin = defwin(display);
+ setarea(&area, 50, 50, 5, 5);
+ chwin = crechild(display, grabwin, &area);
+
+ /* XSelectInput(display, grabwin, ButtonPress); */
+ XGrabButton(display, Button1, 0, grabwin,
+ False, PointerMotionMask, GrabModeSync, GrabModeAsync,
+ None, None);
+ XGrabButton(display, Button1, 0, chwin,
+ False, PointerMotionMask, GrabModeSync, GrabModeAsync,
+ None, None);
+
+ /*
+ * Activate the grab.
+ */
+ XSync(display, True); /* Discard any events */
+ (void) warppointer(display, chwin, 1, 1);
+ buttonpress(display, Button1);
+
+ /*
+ * Check that the grab was activated and that it occurs on the parent
+ * window.
+ */
+ if (XCheckMaskEvent(display, ButtonPressMask, &ev)) {
+ bpp = (XButtonPressedEvent*)&ev;
+ if (bpp->window == grabwin)
+ CHECK;
+ else if (bpp->window == chwin) {
+ delete("Child window had the grab");
+ return;
+ } else {
+ delete("Could not get grab on parent window");
+ return;
+ }
+ } else {
+ delete("Did not get a button event when trying to activate grab");
+ return;
+ }
+
+ /* Do the ReplayPointer */
+ XCALL;
+
+ /*
+ * The effect should be as if the button were pressed again
+ * but without the passive grab on the parent window. So this
+ * time the child should pick up the grab.
+ */
+ if (XCheckMaskEvent(display, ButtonPressMask, &ev)) {
+ bpp = (XButtonPressedEvent*)&ev;
+ if (bpp->window == chwin)
+ CHECK;
+ else if (bpp->window == grabwin) {
+ report("Parent window had the grab after a ReplayPointer");
+ FAIL;
+ } else {
+ report("After ReplayPointer the grab on the child did not activate");
+ FAIL;
+ }
+ } else {
+ report("Did not get a button event when trying to activate grab");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+When the
+.A event_mode
+argument is
+.S ReplayPointer
+and the pointer is not frozen as a result of an event
+or the pointer is not grabbed by the client,
+then a call to xname has no effect.
+>>STRATEGY
+Call xname with event_mode ReplayPointer.
+Verify pointer is not frozen.
+>>CODE
+
+ event_mode = ReplayPointer;
+ grabwin = defwin(display);
+
+ XCALL;
+ if (!ispfrozen(display))
+ PASS;
+ else {
+ report("Pointer was frozen after ReplayPointer");
+ FAIL;
+ }
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S ReplayPointer
+and the pointer is frozen twice by the client on behalf of two separate
+grabs, then a call to xname thaws for both grabs.
+>>STRATEGY
+If extensions are available:
+ Freeze pointer with XGrabKeyboard.
+ Set up passive grab.
+ Freeze pointer by activating grab with a button press.
+ Call xname with event_mode of ReplayPointer.
+ Verify that pointer was released.
+>>CODE
+int key;
+
+ if (noext(1))
+ return;
+
+ grabwin = defwin(display);
+ (void) warppointer(display, grabwin, 1, 1);
+
+ key = getkeycode(display);
+ XGrabKey(display, key, 0, grabwin, False, GrabModeSync, GrabModeAsync);
+ XGrabButton(display, Button1, 0, grabwin,
+ False, PointerMotionMask, GrabModeSync, GrabModeAsync,
+ None, None);
+ buttonpress(display, Button1);
+ keypress(display, key);
+
+ event_mode = ReplayPointer;
+ XCALL;
+
+ if (ispfrozen(display)) {
+ report("Pointer was not released after ReplayPointer");
+ report(" and the pointer was frozen by two grabs.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S AsyncKeyboard
+and the keyboard is frozen by the client,
+then keyboard event processing is resumed.
+>>STRATEGY
+If no extensions:
+ Touch test for AsyncKeyboard.
+else
+ Grab and freeze Keyboard.
+ Call xname with event_mode AsyncKeyboard.
+ Verify that the keyboard is released.
+>>EXTERN
+
+/*
+ * Returns True if the keyboard is frozen.
+ */
+static
+iskfrozen(display)
+Display *display;
+{
+XEvent ev;
+Window win;
+int res;
+int key;
+
+ XSync(display, True); /* Flush previous events */
+ key = getkeycode(display);
+
+ /*
+ * Try to provoke a keypress on win.
+ */
+ win = defwin(display);
+ XSelectInput(display, win, KeyPressMask);
+ (void) warppointer(display, win, 1, 1);
+ keypress(display, key);
+ if (XCheckMaskEvent(display, (long)KeyPressMask, &ev))
+ res = False;
+ else
+ res = True;
+
+ return(res);
+}
+>>CODE
+
+ if (noext(0)) {
+ event_mode = AsyncKeyboard;
+ XCALL;
+
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ grabwin = defwin(display);
+ XGrabKeyboard(display, grabwin, False, GrabModeAsync, GrabModeSync,
+ CurrentTime);
+ if (iskfrozen(display))
+ CHECK;
+ else {
+ delete("Could not freeze keyboard");
+ return;
+ }
+
+ event_mode = AsyncKeyboard;
+ XCALL;
+ if (iskfrozen(display)) {
+ report("Keyboard was not released by AsyncKeyboard");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S AsyncKeyboard
+and the keyboard is frozen twice by the client on behalf of two separate grabs,
+then a call to xname thaws for both.
+>>STRATEGY
+If extensions available:
+ Freeze keyboard with XGrabPointer.
+ Freeze keyboard with XGrabKeyboard.
+ Call xname with AsyncKeyboard.
+ Verify that keyboard is released.
+>>CODE
+
+ if (noext(0))
+ return;
+
+ grabwin = defwin(display);
+ XGrabPointer(display, grabwin, False, PointerMotionMask,
+ GrabModeAsync, GrabModeSync, None, None, time);
+ XGrabKeyboard(display, grabwin, False, GrabModeAsync, GrabModeSync,
+ CurrentTime);
+
+ if (iskfrozen(display))
+ CHECK;
+ else {
+ delete("Could not not set up keyboard grab");
+ return;
+ }
+
+ event_mode = AsyncKeyboard;
+ XCALL;
+
+ if (iskfrozen(display)) {
+ report("Keyboard was not released by AsyncKeyboard");
+ report(" when it was frozen on behalf of two separate grabs.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S AsyncKeyboard
+and the keyboard is not frozen by the client,
+then a call to xname has no effect.
+>>STRATEGY
+If extensions available:
+ Call xname with AsyncKeyboard.
+ Verify that keyboard is not frozen.
+>>CODE
+
+ if (noext(0))
+ return;
+
+ event_mode = AsyncKeyboard;
+ XCALL;
+ if (iskfrozen(display)) {
+ report("Keyboard was frozen by AsyncKeyboard");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S SyncKeyboard
+and the keyboard is frozen and actively grabbed by the client,
+then keyboard event processing is resumed normally until the next
+.S KeyPress
+or
+.S KeyRelease
+event is reported to the client, at which time
+the keyboard again appears to freeze unless the reported event
+causes the keyboard grab to be released.
+>>STRATEGY
+If no extensions:
+ Touch test for SyncKeyboard.
+else
+ Freeze keyboard.
+ Call xname with event_mode of SyncKeyboard.
+ Verify that keyboard is not frozen.
+ Press key.
+ Verify that keyboard is frozen.
+>>CODE
+int key;
+
+ event_mode = SyncKeyboard;
+ if (noext(0)) {
+ XCALL;
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ grabwin = defwin(display);
+ XSelectInput(display, grabwin, KeyPressMask);
+ XGrabKeyboard(display, grabwin, False, GrabModeAsync, GrabModeSync,
+ CurrentTime);
+
+ XCALL;
+ if (iskfrozen(display)) {
+ report("Keyboard remained frozen after a SyncKeyboard");
+ FAIL;
+ } else
+ CHECK;
+
+ key = getkeycode(display);
+ keypress(display, key);
+
+ if (iskfrozen(display))
+ CHECK;
+ else {
+ report("Keyboard was not frozen by a keypress after a SyncKeyboard");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S SyncKeyboard
+and the keyboard is not frozen by the client or the keyboard is not
+grabbed by the client,
+then a call to xname has no effect.
+>>STRATEGY
+If extensions available:
+ Call xname with event_mode of SyncKeyboard.
+ Verify that keyboard is not frozen.
+ Press key.
+ Verify that keyboard is not frozen.
+>>CODE
+
+ if (noext(0))
+ return;
+
+ event_mode = SyncKeyboard;
+ XCALL;
+
+ if (iskfrozen(display)) {
+ report("Keyboard was frozen by SyncKeyboard though there was no freeze in effect");
+ FAIL;
+ } else
+ CHECK;
+
+ keypress(display, getkeycode(display));
+ if (iskfrozen(display)) {
+ report("Keyboard was frozen by SyncKeyboard and a key press");
+ report(" though there was no freeze in effect");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S SyncKeyboard
+and the keyboard is frozen twice by the client on behalf of two separate grabs,
+then a call to xname thaws for both grabs.
+>>STRATEGY
+If extensions available:
+ Freeze keyboard with XGrabPointer.
+ Freeze keyboard with XGrabKeyboard.
+ Call xname with event_mode of SyncKeyboard.
+ Verify that keyboard is not frozen.
+>>CODE
+
+ if (noext(0))
+ return;
+
+ grabwin = defwin(display);
+ XGrabPointer(display, grabwin, False, PointerMotionMask,
+ GrabModeAsync, GrabModeSync, None, None, time);
+ XGrabKeyboard(display, grabwin, False, GrabModeAsync, GrabModeSync,
+ CurrentTime);
+
+ event_mode = SyncKeyboard;
+ XCALL;
+
+ if (iskfrozen(display)) {
+ report("Keyboard remained frozen after a SyncKeyboard with");
+ report(" the keyboard frozen on behalf of two separate grabs");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S ReplayKeyboard
+and the keyboard is actively grabbed by the client and is frozen
+as the result of an event having been sent to the client, then
+the keyboard grab is released and the event is completely reprocessed
+as though any passive grabs at or above
+the grab window of the grab just released were not present.
+>>STRATEGY
+If no extensions:
+ Touch test for ReplayKeyboard.
+else
+ Create window.
+ Create child of that window.
+ Enable key events on windows.
+ Place passive grab with GrabModeSync on each window.
+ Warp pointer to child window.
+ Press key.
+ Check that the parent window has the grab.
+
+ Call xname with ReplayKeyboard.
+ Verify that child window has grab.
+>>CODE
+XEvent ev;
+XKeyPressedEvent *kpp;
+Window win;
+Window chwin;
+struct area area;
+int key;
+
+ event_mode = ReplayKeyboard;
+
+ if (noext(0)) {
+ XCALL;
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ win = defwin(display);
+ setarea(&area, 50, 50, 5, 5);
+ chwin = crechild(display, win, &area);
+ XSelectInput(display, win, KeyPressMask);
+ XSelectInput(display, chwin, KeyPressMask);
+
+ key = getkeycode(display);
+ XGrabKey(display, key, 0, win, False, GrabModeAsync, GrabModeSync);
+ XGrabKey(display, key, 0, chwin, False, GrabModeAsync, GrabModeSync);
+
+ (void) warppointer(display, chwin, 1, 1);
+
+ XSync(display, True);
+ /* This should activate the grab */
+ keypress(display, key);
+
+ if (XCheckMaskEvent(display, KeyPressMask, &ev)) {
+ kpp = (XKeyPressedEvent*)&ev;
+ if (kpp->window == win)
+ CHECK;
+ else if (kpp->window == chwin) {
+ /*
+ * This could also be because owner_events=False is being
+ * ignored.
+ */
+ delete("Child window had the grab, rather than parent");
+ return;
+ } else {
+ delete("Parent did not get the grab");
+ return;
+ }
+ } else {
+ delete("Did not get KeyPress event");
+ return;
+ }
+ XSync(display, True); /* Discard any other events */
+
+ XCALL;
+
+ /*
+ * When the event is replayed then we should now get the event on
+ * the child window.
+ */
+ if (XCheckMaskEvent(display, KeyPressMask, &ev)) {
+ kpp = (XKeyPressedEvent*)&ev;
+ if (kpp->window == chwin)
+ CHECK;
+ else if (kpp->window == win) {
+ report("Parent window had the grab after ReplayPointer");
+ report(" expecting that child window would get grab");
+ FAIL;
+ } else {
+ report("Child did not get the grab after ReplayPointer");
+ FAIL;
+ }
+ } else {
+ report("Did not get KeyPress event after ReplayPointer");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S ReplayKeyboard
+and the keyboard is not frozen as a result of an event or the keyboard
+is not grabbed by the client,
+then a call to xname has no effect.
+>>STRATEGY
+If extensions available:
+ Create window.
+ Create child of that window.
+ Place passive grab with GrabModeAsync on each window.
+ Warp pointer to child window.
+ Press key.
+ Check that the parent window has the grab.
+
+ Call xname with ReplayKeyboard.
+ Verify that no key event was received on the child.
+>>CODE
+XEvent ev;
+XKeyPressedEvent *kpp;
+Window win;
+Window chwin;
+struct area area;
+int key;
+
+ event_mode = ReplayKeyboard;
+
+ if (noext(0)) {
+ XCALL;
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ win = defwin(display);
+ setarea(&area, 50, 50, 5, 5);
+ chwin = crechild(display, win, &area);
+
+ key = getkeycode(display);
+ XGrabKey(display, key, 0, win, False, GrabModeAsync, GrabModeAsync);
+ XGrabKey(display, key, 0, chwin, False, GrabModeAsync, GrabModeAsync);
+
+ (void) warppointer(display, chwin, 1, 1);
+
+ XSync(display, True);
+ /* This should activate the grab */
+ keypress(display, key);
+
+ if (XCheckMaskEvent(display, KeyPressMask, &ev)) {
+ kpp = (XKeyPressedEvent*)&ev;
+ if (kpp->window == win)
+ CHECK;
+ else if (kpp->window == chwin) {
+ delete("Child window had the grab");
+ return;
+ } else {
+ delete("Parent did not get the grab");
+ return;
+ }
+ } else {
+ delete("Did not get KeyPress event");
+ return;
+ }
+ XSync(display, True); /* Discard any other events */
+
+ XCALL;
+
+ /*
+ * Should be no event after the ReplayKeyboard.
+ */
+ if (XCheckMaskEvent(display, KeyPressMask, &ev)) {
+ report("ReplayKeyboard had an effect when the keyboard was not frozen.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S ReplayKeyboard
+and the keyboard is frozen twice by the client on behalf of two separate grabs,
+then a call to xname thaws for both grabs.
+>>STRATEGY
+If extensions available:
+ Freeze keyboard with XGrabButton.
+ Freeze keyboard with XGrabKey.
+ Call xname with event_mode of ReplayKeyboard.
+ Verify that keyboard is not frozen.
+>>CODE
+int key;
+
+ if (noext(1))
+ return;
+
+ grabwin = defwin(display);
+ (void) warppointer(display, grabwin, 1, 1);
+
+ XGrabButton(display, Button1, 0, grabwin,
+ False, PointerMotionMask, GrabModeSync, GrabModeAsync,
+ None, None);
+
+ key = getkeycode(display);
+ XGrabKey(display, key, 0, grabwin, False, GrabModeSync, GrabModeAsync);
+
+ keypress(display, key);
+ buttonpress(display, Button1);
+
+ event_mode = ReplayKeyboard;
+ XCALL;
+
+ if (iskfrozen(display)) {
+ report("Keyboard was not unfrozen by ReplayKeyboard when frozen");
+ report(" on behalf of two separate grabs.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+ restoredevstate();
+
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S SyncBoth
+and both pointer and keyboard are frozen by the client,
+then event processing for both devices continues normally until the next
+.S ButtonPress ,
+.S ButtonRelease ,
+.S KeyPress ,
+or
+.S KeyRelease
+event is reported to the client for a grabbed device
+at which time both devices again appear to freeze,
+unless the reported event causes the grab to be released.
+>>STRATEGY
+If no extensions:
+ Touch test for SyncBoth.
+else
+ Create grabwindow.
+ Select events on grab window.
+ Freeze and grab pointer by calling XGrabPointer.
+ Freeze and grab keyboard by calling XGrabKeyboard.
+ Check that pointer is frozen.
+
+ Call xname with event_mode of SyncBoth.
+ Verify that pointer has been released.
+
+ Press button.
+ Verify that pointer is frozen.
+ Verify that keyboard is frozen.
+
+ Call xname with event_mode of SyncBoth.
+ Check pointer released.
+ Release button.
+ Verify that pointer is frozen.
+ Verify that keyboard is frozen.
+
+ Call xname with event_mode of SyncBoth.
+ Check pointer released.
+ Press key.
+ Verify that pointer is frozen.
+ Verify that keyboard is frozen.
+
+ Call xname with event_mode of SyncBoth.
+ Check pointer released.
+ Release key.
+ Verify that pointer is frozen.
+ Verify that keyboard is frozen.
+>>EXTERN
+
+/*
+ * Set up for SyncBoth tests grab and freeze both pointer and keyboard.
+ */
+bothset()
+{
+ XUngrabPointer(display, CurrentTime);
+ XUngrabKeyboard(display, CurrentTime);
+
+ grabwin = defwin(display);
+ XSelectInput(display, grabwin, ButtonPressMask|ButtonReleaseMask|KeyPressMask|KeyReleaseMask);
+ (void) warppointer(display, grabwin, 5, 5);
+
+ XGrabPointer(display, grabwin, False,
+ ButtonPressMask|ButtonReleaseMask|PointerMotionMask,
+ GrabModeSync, GrabModeAsync, None, None, CurrentTime);
+ XGrabKeyboard(display, grabwin, False, GrabModeAsync, GrabModeSync,
+ CurrentTime);
+
+
+ if (!ispfrozen(display)) {
+ delete("Could not freeze pointer");
+ return;
+ }
+ /*
+ * Can't check for the keyboard being frozen here since that requires
+ * pressing a key - and that would release the grab.
+ */
+}
+
+>>CODE
+int key;
+
+ event_mode = SyncBoth;
+
+ if (noext(1)) {
+ XCALL;
+
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+
+ bothset();
+ XCALL;
+
+ if (ispfrozen(display)) {
+ report("SyncBoth did not release pointer and keyboard");
+ FAIL;
+ } else
+ CHECK;
+
+ /* 1. Button press */
+ buttonpress(display, Button1);
+ if (ispfrozen(display))
+ CHECK;
+ else {
+ report("Pointer was not re-frozen by a button press after SyncBoth");
+ FAIL;
+ }
+ if (iskfrozen(display))
+ CHECK;
+ else {
+ report("Keyboard was not re-frozen by a button press after SyncBoth");
+ FAIL;
+ }
+
+ /* Allow events again for next part */
+ bothset();
+ XCALL;
+ if (ispfrozen(display)) {
+ report("SyncBoth did not release pointer and keyboard");
+ FAIL;
+ } else
+ CHECK;
+
+ /* 2. Button release */
+ buttonrel(display, Button1);
+ if (ispfrozen(display))
+ CHECK;
+ else {
+ report("Pointer was not re-frozen by a button release after SyncBoth");
+ FAIL;
+ }
+ if (iskfrozen(display))
+ CHECK;
+ else {
+ report("Keyboard was not re-frozen by a button release after SyncBoth");
+ FAIL;
+ }
+
+ /* Allow events again for next part */
+ bothset();
+ XCALL;
+ if (ispfrozen(display)) {
+ report("SyncBoth did not release pointer and keyboard");
+ FAIL;
+ } else
+ CHECK;
+
+ /* 3. Press key. */
+ key = getkeycode(display);
+ keypress(display, key);
+ if (ispfrozen(display))
+ CHECK;
+ else {
+ report("Pointer was not re-frozen by a key press after SyncBoth");
+ FAIL;
+ }
+ if (iskfrozen(display))
+ CHECK;
+ else {
+ report("Keyboard was not re-frozen by a key press after SyncBoth");
+ FAIL;
+ }
+
+ /* Allow events again for next part */
+ bothset();
+ XCALL;
+ if (ispfrozen(display)) {
+ report("SyncBoth did not release pointer and keyboard");
+ FAIL;
+ } else
+ CHECK;
+
+ /* 4. Key release. */
+ keyrel(display, key);
+ if (ispfrozen(display))
+ CHECK;
+ else {
+ report("Pointer was not re-frozen by a key release after SyncBoth");
+ FAIL;
+ }
+ if (iskfrozen(display))
+ CHECK;
+ else {
+ report("Keyboard was not re-frozen by a key release after SyncBoth");
+ FAIL;
+ }
+
+ CHECKPASS(13);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S SyncBoth
+and an event has caused the grab on one device to be released
+and a subsequent event is reported for the other device that does
+not cause the grab to be released,
+then both devices are again frozen.
+>>STRATEGY
+If extension available:
+ Grab and freeze Keyboard with XGrabKeyboard.
+ Set passive grab on button with pointer_mode GrabModeSync.
+ Activate pointer grab.
+
+ Call xname with event_mode SyncBoth.
+ Release button to release pointer grab.
+ Check pointer not frozen.
+
+ Press key.
+ Verify that pointer and keyboard are frozen.
+>>CODE
+
+ if (noext(1))
+ return;
+
+ grabwin = defwin(display);
+ XGrabKeyboard(display, grabwin, False, GrabModeAsync, GrabModeSync,
+ CurrentTime);
+ XGrabButton(display, Button1, 0, grabwin,
+ False, PointerMotionMask, GrabModeSync, GrabModeAsync,
+ None, None);
+
+ (void) warppointer(display, grabwin, 1, 1);
+ buttonpress(display, Button1);
+
+ if (ispfrozen(display))
+ CHECK;
+ else {
+ delete("Could not freeze pointer and keyboard");
+ return;
+ }
+
+ event_mode = SyncBoth;
+ XCALL;
+
+ /*
+ * Release pointer grab.
+ */
+ buttonrel(display, Button1);
+ if (ispfrozen(display)) {
+ report("Pointer remained frozen after releasing button");
+ FAIL;
+ } else
+ CHECK;
+
+ keypress(display, getkeycode(display));
+ if (ispfrozen(display))
+ CHECK;
+ else {
+ report("Pointer was not re-frozen by an event from the keyboard after the pointer grab was released.");
+ FAIL;
+ }
+ if (iskfrozen(display))
+ CHECK;
+ else {
+ report("Keyboard was not re-frozen by an event from the keyboard after the pointer grab was released");
+ FAIL;
+ }
+
+ CHECKPASS(4);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S SyncBoth
+and the pointer or keyboard is frozen twice
+by the client on behalf of two separate grabs,
+then a call to xname thaws for both grabs.
+>>STRATEGY
+If extensions are available:
+ Grab and freeze pointer.
+ Grab keyboard and freeze pointer.
+
+ Call xname with event_mode of SyncBoth.
+ Verify that pointer and keyboard are thawed.
+>>CODE
+
+ if (noext(0))
+ return;
+
+ grabwin = defwin(display);
+ XGrabPointer(display, grabwin, False, PointerMotionMask,
+ GrabModeSync, GrabModeSync, None, None, time);
+ XGrabKeyboard(display, grabwin, False, GrabModeSync, GrabModeSync,
+ CurrentTime);
+
+ event_mode = SyncBoth;
+ XCALL;
+
+ if (ispfrozen(display)) {
+ report("Pointer was not thawed by SyncBoth when pointer was frozen");
+ report(" on behalf of two grabs");
+ FAIL;
+ } else
+ CHECK;
+ if (iskfrozen(display)) {
+ report("Keyboard was not thawed by SyncBoth when pointer was frozen");
+ report(" on behalf of two grabs");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S SyncBoth
+and either the keyboard or pointer is not frozen by the client
+or neither are grabbed by the client,
+then a call to xname has no effect.
+>>STRATEGY
+If extensions available:
+ Call xname with SyncBoth.
+ Press button.
+ Verify that pointer and keyboard are not frozen.
+>>CODE
+
+ if (noext(0))
+ return;
+
+ grabwin = defwin(display);
+
+ event_mode = SyncBoth;
+ XCALL;
+
+ buttonpress(display, Button1);
+ if (ispfrozen(display)) {
+ report("Pointer was frozen by button press after SyncBoth");
+ report(" even though there were no grabs active");
+ FAIL;
+ } else
+ CHECK;
+ if (iskfrozen(display)) {
+ report("Keyboard was frozen by button press after SyncBoth");
+ report(" even though there were no grabs active");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S AsyncBoth
+and the pointer and the keyboard are frozen by the
+client, then event processing for both devices is resumed normally.
+>>STRATEGY
+If no extensions:
+ Touch test for AsyncBoth.
+else
+ Grab and freeze keyboard and pointer.
+ Call xname with AsyncBoth.
+ Verify that pointer is released.
+ Verify that keyboard is released.
+>>CODE
+
+ event_mode = AsyncBoth;
+
+ if (noext(0)) {
+ XCALL;
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ bothset();
+ XCALL;
+
+ if (ispfrozen(display)) {
+ report("Pointer remained frozen after AsyncBoth");
+ FAIL;
+ } else
+ CHECK;
+ if (iskfrozen(display)) {
+ report("Keyboard remained frozen after AsyncBoth");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S AsyncBoth
+and either the keyboard or the pointer is not frozen by the client,
+then a call to xname has no effect.
+>>STRATEGY
+If extensions available:
+ Grab and freeze pointer.
+ Call xname with AsyncBoth.
+ Verify that pointer is not released.
+>>CODE
+
+ if (noext(0))
+ return;
+
+ grabfreezepointer(display, CurrentTime);
+
+ event_mode = AsyncBoth;
+ XCALL;
+
+ if (ispfrozen(display))
+ CHECK;
+ else {
+ report("Pointer was released by AsyncBoth, although keyboard was not frozen");
+ FAIL;
+ }
+ CHECKPASS(1);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S AsyncBoth
+and the pointer or keyboard
+is frozen twice by the client on behalf of two separate grabs,
+then a call to xname thaws for both grabs.
+>>STRATEGY
+If extensions available:
+ Freeze pointer and keyboard by calling XGrabPointer.
+ Freeze pointer and keyboard again by calling XGrabKeyboard.
+
+ Call xname with AsyncBoth.
+ Verify that pointer and keyboard are not frozen.
+>>CODE
+
+ if (noext(0))
+ return;
+
+ grabwin = defwin(display);
+ XGrabPointer(display, grabwin, False, PointerMotionMask,
+ GrabModeSync, GrabModeSync, None, None, time);
+ XGrabKeyboard(display, grabwin, False, GrabModeSync, GrabModeSync,
+ CurrentTime);
+
+ event_mode = AsyncBoth;
+ XCALL;
+
+ if (ispfrozen(display)) {
+ report("Pointer remained frozen after AsyncBoth");
+ report(" when it was frozen twice");
+ FAIL;
+ } else
+ CHECK;
+ if (iskfrozen(display)) {
+ report("Keyboard remained frozen after AsyncBoth");
+ report(" when it was frozen twice");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When the
+.A event_mode
+argument is
+.S AsyncPointer ,
+.S SyncPointer ,
+or
+.S ReplayPointer ,
+then a call to xname has no effect on the
+processing of keyboard events.
+>>STRATEGY
+If extensions are available:
+ Grab and freeze the keyboard.
+ For each event_mode AsyncPointer SyncPointer ReplayPointer
+ Call xname.
+ Verify that keyboard is still frozen.
+>>CODE
+static int modes[] = {
+ AsyncPointer, SyncPointer, ReplayPointer};
+int i;
+
+ if (noext(0))
+ return;
+
+ grabwin = defwin(display);
+ XGrabKeyboard(display, grabwin, False, GrabModeAsync, GrabModeSync,
+ CurrentTime);
+
+ for (i = 0; i < NELEM(modes); i++) {
+ event_mode = modes[i];
+ XCALL;
+ if (iskfrozen(display))
+ CHECK;
+ else {
+ report("Keyboard was released when event_mode was %s",
+ alloweventmodename(modes[i]));
+ FAIL;
+ }
+ }
+
+ CHECKPASS(NELEM(modes));
+>>ASSERTION Good A
+When the
+.A event_mode
+argument is
+.S AsyncKeyboard ,
+.S SyncKeyboard ,
+or
+.S ReplayKeyboard ,
+then a call to xname has no effect on the
+processing of pointer events.
+>>STRATEGY
+Grab and freeze pointer.
+For each event_mode AsyncKeyboard SyncKeyboard ReplayKeyboard
+ Call xname.
+ Verify that pointer is still frozen.
+>>CODE
+static int modes[] = {
+ AsyncKeyboard, SyncKeyboard, ReplayKeyboard};
+int i;
+
+ grabfreezepointer(display, time);
+
+ for (i = 0; i < NELEM(modes); i++) {
+ event_mode = modes[i];
+ XCALL;
+ if (ispfrozen(display))
+ CHECK;
+ else {
+ report("Pointer was released when event_mode was %s",
+ alloweventmodename(modes[i]));
+ FAIL;
+ }
+ }
+
+ CHECKPASS(NELEM(modes));
+>>ASSERTION Bad A
+.ER BadValue event_mode AsyncPointer SyncPointer AsyncKeyboard SyncKeyboard ReplayPointer ReplayKeyboard AsyncBoth SyncBoth
diff --git a/xc/test/xsuite/xtest/tset/CH07/atrptoff/atrptoff.m b/xc/test/xsuite/xtest/tset/CH07/atrptoff/atrptoff.m
new file mode 100644
index 000000000..5ddaa0046
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/atrptoff/atrptoff.m
@@ -0,0 +1,52 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAutoRepeatOff CH07
+void
+
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname turns off auto-repeat for the keyboard on the specified display.
+>>STRATEGY
+Get old auto repeat value.
+Call xname.
+Get new auto repeat value.
+Verify that auto repeat is off.
+Restore old value.
+>>CODE
+XKeyboardState old, new;
+XKeyboardControl ctr;
+
+ /*
+ * This is just a touch test really.
+ */
+ XGetKeyboardControl(display, &old);
+
+ XCALL;
+
+ XGetKeyboardControl(display, &new);
+ if (new.global_auto_repeat == AutoRepeatModeOff)
+ CHECK;
+ else {
+ report("Auto-repeat was not turned off");
+ FAIL;
+ }
+
+ ctr.auto_repeat_mode = old.global_auto_repeat;
+
+ XChangeKeyboardControl(display, KBAutoRepeatMode, &ctr);
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH07/atrpton/atrpton.m b/xc/test/xsuite/xtest/tset/CH07/atrpton/atrpton.m
new file mode 100644
index 000000000..3b7faacad
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/atrpton/atrpton.m
@@ -0,0 +1,53 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAutoRepeatOn CH07
+void
+
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname turns on auto-repeat for the keyboard
+on the specified display.
+>>STRATEGY
+Get old auto repeat value.
+Call xname.
+Get new auto repeat value.
+Verify that auto repeat is on.
+Restore old value.
+>>CODE
+XKeyboardState old, new;
+XKeyboardControl ctr;
+
+ /*
+ * This is just a touch test really.
+ */
+ XGetKeyboardControl(display, &old);
+
+ XCALL;
+
+ XGetKeyboardControl(display, &new);
+ if (new.global_auto_repeat == AutoRepeatModeOn)
+ CHECK;
+ else {
+ report("Auto-repeat was not turned on");
+ FAIL;
+ }
+
+ ctr.auto_repeat_mode = old.global_auto_repeat;
+
+ XChangeKeyboardControl(display, KBAutoRepeatMode, &ctr);
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH07/bll/bll.m b/xc/test/xsuite/xtest/tset/CH07/bll/bll.m
new file mode 100644
index 000000000..a77a23799
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/bll/bll.m
@@ -0,0 +1,84 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XBell CH07
+void
+
+Display *display = Dsp;
+int percent = 50;
+>>ASSERTION Good D 3
+If it is possible to ring a bell on the display:
+When the percent argument is nonnegative, then
+the volume at which the bell rings, where base is the base volume
+of the bell, is
+base \- [(base*percent)/100] + percent.
+>>STRATEGY
+Try out some nonnegative values.
+>>CODE
+int i;
+static int vals[] = {
+ 0, 2, 12, 30, 45, 60, 100};
+
+ for (i = 0; i < NELEM(vals); i++) {
+ percent = vals[i];
+ XCALL;
+ }
+
+ untested("Test for bell functionality present only");
+
+>>ASSERTION Good D 3
+If it is possible to ring a bell on the display:
+When the percent argument is negative, then
+the volume at which the bell rings, where base is the base volume
+of the bell, is
+base + [(base*percent)/100].
+>>STRATEGY
+Try out some negative values.
+>>CODE
+int i;
+static int vals[] = {
+ -2, -17, -30, -60, -100};
+
+ for (i = 0; i < NELEM(vals); i++) {
+ percent = vals[i];
+ XCALL;
+ }
+
+ untested("Test for bell functionality present only");
+
+>>ASSERTION Bad A
+When the value for the percent argument is not in the range \-100 to 100
+inclusive, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Call xname with invalid percent argument.
+Verify that BadValue error occurs.
+>>CODE BadValue
+
+ percent = -101;
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+
+ percent = 141;
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH07/chngactvpn/chngactvpn.m b/xc/test/xsuite/xtest/tset/CH07/chngactvpn/chngactvpn.m
new file mode 100644
index 000000000..4711413e7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/chngactvpn/chngactvpn.m
@@ -0,0 +1,321 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XChangeActivePointerGrab CH07
+void
+xname
+Display *display = Dsp;
+unsigned int event_mask = PointerMotionMask;
+Cursor cursor = None;
+Time time = CurrentTime;
+>>ASSERTION Good A
+When the pointer is actively grabbed by the client and the specified time is
+not earlier than the last-pointer-grab time nor later than
+the current X server time, then a call to xname
+changes the specified dynamic parameters.
+>>STRATEGY
+Create grab_window.
+Grab pointer with XGrabPointer using an event_mask of EnterWindowMask.
+Check that just enter events are reported.
+Call xname to change event_mask to PointerMotionMask.
+Verify that now only motion events are reported.
+>>CODE
+XEvent ev;
+Window win;
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ win = defwin(display);
+
+ XGrabPointer(display, win, False, EnterWindowMask, GrabModeAsync,
+ GrabModeAsync, None, None, CurrentTime);
+
+ (void) warppointer(display, win, 0, 0);
+ (void) warppointer(display, win, 2, 2);
+
+ /*
+ * This is just a check to see that the grab is behaving as expected.
+ * delete and return if these fail. We do the same checks
+ * after the parameters are changed.
+ */
+ if (XCheckMaskEvent(display, EnterWindowMask, &ev))
+ CHECK;
+ else {
+ delete("No enter event received when checking set up");
+ return;
+ }
+ if (!XCheckMaskEvent(display, PointerMotionMask, &ev))
+ CHECK;
+ else {
+ delete("A pointer motion event was received when checking set up");
+ return;
+ }
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ XCALL;
+
+ XSync(display, True); /* Flush any remaining event */
+ (void) warppointer(display, win, 0, 0);
+ (void) warppointer(display, win, 2, 2);
+ if (isdeleted())
+ return;
+
+ if (!XCheckMaskEvent(display, EnterWindowMask, &ev))
+ CHECK;
+ else {
+ report("Event mask was not changed to disallow enter events");
+ FAIL;
+ }
+ if (XCheckMaskEvent(display, PointerMotionMask, &ev))
+ CHECK;
+ else {
+ report("Event mask was not changed - no pointer motion event received");
+ FAIL;
+ }
+
+ CHECKPASS(4);
+>>ASSERTION Good A
+When the specified time is earlier than the last-pointer-grab time
+or later than the current X server time, then a call to xname
+does not change the parameters.
+>>STRATEGY
+Create grab_window.
+Grab pointer with XGrabPointer using an event_mask of EnterWindowMask.
+Use event_mask of PointerMotionMask.
+Call xname with time earlier that last pointer grab time.
+Verify that enter events are still being reported.
+
+Call xname with time later than current X server time.
+Verify that enter events are still being reported.
+>>CODE
+XEvent ev;
+Window win;
+Time t;
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ win = defwin(display);
+ t = gettime(Dsp);
+
+ XGrabPointer(display, win, False, EnterWindowMask, GrabModeAsync,
+ GrabModeAsync, None, None, t);
+
+ /* Earlier than last-pointer-grab time */
+ time = t - 12;
+ XCALL;
+
+ XSync(display, True); /* Flush any event */
+ (void) warppointer(display, win, 0, 0);
+ (void) warppointer(display, win, 2, 2);
+ if (isdeleted())
+ return;
+
+ if (XCheckMaskEvent(display, EnterWindowMask, &ev))
+ CHECK;
+ else {
+ report("Event mask was changed for time earlier than last-pointer-grab time");
+ FAIL;
+ }
+ if (!XCheckMaskEvent(display, PointerMotionMask, &ev))
+ CHECK;
+ else {
+ report("Event mask was changed for time earlier than last-pointer-grab time");
+ FAIL;
+ }
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ /* Later than X server time */
+ t = gettime(Dsp);
+ time = t + (config.speedfactor+1)*1000000;
+ XCALL;
+
+ XSync(display, True); /* Flush any event */
+ (void) warppointer(display, win, 0, 0);
+ (void) warppointer(display, win, 2, 2);
+ if (isdeleted())
+ return;
+
+ if (XCheckMaskEvent(display, EnterWindowMask, &ev))
+ CHECK;
+ else {
+ report("Event mask was changed for time later than X server time");
+ FAIL;
+ }
+ if (!XCheckMaskEvent(display, PointerMotionMask, &ev))
+ CHECK;
+ else {
+ report("Event mask was changed for time later than X server time");
+ FAIL;
+ }
+
+ CHECKPASS(4);
+>>ASSERTION Good B 3
+A call to xname has no effect on the passive parameters of the function
+.F XGrabButton .
+>>STRATEGY
+Create and map a window.
+Create and map another window (curwin) and attach a non-default
+ cursor (cur) to it.
+Select for no events on the window.
+Set a passive grab with XGrabButton on that window with owner_events = False,
+ cursor = None and event_mask = 0.
+Clear event queue.
+Warp the pointer into the window and around inside it.
+Check no events received.
+Call xname with event_mask = PointerMotionMask and cursor = cur.
+Clear event queue.
+Warp the pointer into the window and around inside it.
+Check no events received.
+If extension available:
+ Activate grab with simulated button press in window.
+ Check grab activated.
+ Warp pointer around in window.
+ Check no events received.
+ Check cursor is not equal to that of curwin.
+ Call xname with event_mask = PointerMotionMask and cursor = cur.
+ Warp pointer around in window.
+ Check MotionNotify events received.
+ Check cursor is now equal to that of curwin.
+ Release all buttons, hence grab.
+else
+ Issue message and report untested.
+>>EXTERN
+/* check to see if pointer is grabbed. Use existing win and another client */
+/* Depending on owner_events in xname or when setting grab may cause
+ * events to appear on grabbing clients event queue. Before checking for
+ * events in the queue the grabbing client should have flushed any junk
+ * left by this function.
+ */
+static int pgrabbed(win)
+Window win;
+{
+ PointerPlace *p;
+ XEvent ev;
+ Display *client2 = opendisplay();
+
+ XSelectInput(client2, win, PointerMotionMask);
+ XSync(client2, True);
+ p = warppointer(client2, win, 1,1);
+ (void) warppointer(client2, win, 10,10);
+ (void) warppointer(client2, win, 1,1);
+ (void) warppointer(client2, p->oroot, p->ox, p->oy);
+ return (!getevent(client2, &ev));
+}
+>>CODE
+Window win;
+Window curwin;
+XEvent ev;
+int n;
+Cursor cur;
+
+ win = defwin(display);
+ curwin = defwin(display);
+ cur = makecur2(display);
+ XDefineCursor(display, curwin, cur);
+ XSelectInput(display, win, 0L);
+ XGrabButton(display, AnyButton, 0, win, False, 0, GrabModeAsync,
+ GrabModeAsync, None, None);
+ if (isdeleted()) {
+ delete("Failed to set passive button grab.");
+ return;
+ } else
+ CHECK;
+ XSync(display, True);
+ (void) warppointer(display, win, 1,1);
+ (void) warppointer(display, win, 10,10);
+ (void) warppointer(display, win, 1,1);
+ if (n=getevent(display, &ev)) {
+ delete("Unexpectedly received %d events, first was type %s.",
+ n, eventname(ev.type));
+ return;
+ } else
+ CHECK;
+ event_mask = PointerMotionMask;
+ cursor = cur;
+ XCALL;
+ XSync(display, True);
+ (void) warppointer(display, win, 1,1);
+ (void) warppointer(display, win, 10,10);
+ (void) warppointer(display, win, 1,1);
+ if (n=getevent(display, &ev)) {
+ report("event_mask changed passive grab, received %d events, first was type %s.",
+ n, eventname(ev.type));
+ FAIL;
+ } else
+ CHECK;
+ if (noext(1)) {
+ report("Tested as far as possible without activating grab.");
+ CHECKUNTESTED(3);
+ } else {
+ Window oldf;
+ int oldr;
+
+ XGetInputFocus(display, &oldf, &oldr);
+ XSetInputFocus(display, win, RevertToPointerRoot, CurrentTime);
+ buttonpress(display, Button1);
+ if (!pgrabbed(win)) {
+ report("Failed to activate grab.");
+ relalldev();
+ XSetInputFocus(display, oldf, oldr, CurrentTime);
+ return;
+ }
+ XSync(display, True);
+ (void) warppointer(display, win, 1,1);
+ (void) warppointer(display, win, 10,10);
+ (void) warppointer(display, win, 1,1);
+ if (n=getevent(display, &ev)) {
+ report("event_mask changed on grab activation, received %d events, first was type %s.",
+ n, eventname(ev.type));
+ FAIL;
+ } else
+ CHECK;
+ if (spriteiswin(display, curwin)) {
+ report("Cursor changed before grab activated.");
+ FAIL;
+ } else
+ CHECK;
+ event_mask = PointerMotionMask;
+ cursor = cur;
+ XCALL;
+ XSync(display, True);
+ (void) warppointer(display, win, 1,1);
+ (void) warppointer(display, win, 10,10);
+ (void) warppointer(display, win, 1,1);
+ if (!(n=getevent(display, &ev)) || ev.type != MotionNotify) {
+ report("event_mask not changed properly for active grab.");
+ if (n)
+ report("First event of %d was %s instead of MotionNotify.",
+ n, eventname(ev.type));
+ FAIL;
+ } else
+ CHECK;
+ if (!spriteiswin(display, curwin)) {
+ report("Cursor not changed although grab was active.");
+ FAIL;
+ } else
+ CHECK;
+
+ relalldev();
+ XSetInputFocus(display, oldf, oldr, CurrentTime);
+ CHECKPASS(7);
+ }
+
+>>ASSERTION Bad A
+.ER BadCursor
+>>ASSERTION Bad A
+.ER BadValue event_mask mask ButtonPressMask ButtonReleaseMask EnterWindowMask LeaveWindowMask PointerMotionMask PointerMotionHintMask Button1MotionMask Button2MotionMask Button3MotionMask Button4MotionMask Button5MotionMask ButtonMotionMask KeymapStateMask
diff --git a/xc/test/xsuite/xtest/tset/CH07/chngkybrdc/chngkybrdc.m b/xc/test/xsuite/xtest/tset/CH07/chngkybrdc/chngkybrdc.m
new file mode 100644
index 000000000..9e3a412b9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/chngkybrdc/chngkybrdc.m
@@ -0,0 +1,804 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XChangeKeyboardControl CH07
+void
+
+Display *display = Dsp;
+unsigned long value_mask = KBBellPercent;
+XKeyboardControl *values = &Kcval;
+>>EXTERN
+
+/* For the argument */
+static XKeyboardControl Kcval;
+
+>>EXTERN
+
+/*
+ * Functions to save and restore the old keyboard control values across TP's
+ * This also makes the current values available for use in tests.
+ */
+static XKeyboardState oldstate;
+
+static void
+savekey()
+{
+ startup();
+ if(Dsp)
+ XGetKeyboardControl(Dsp, &oldstate);
+}
+>>SET startup savekey
+
+static void
+restorekey()
+{
+XKeyboardControl ctr;
+int led;
+int key;
+int minkc, maxkc;
+
+ if(!Dsp) {
+ cleanup();
+ return;
+ }
+
+ /*
+ * It is not easy to restore a previously saved keyboard state.
+ */
+ ctr.key_click_percent = oldstate.key_click_percent;
+ ctr.bell_percent = oldstate.bell_percent;
+ ctr.bell_pitch = oldstate.bell_pitch;
+ ctr.bell_duration = oldstate.bell_duration;
+ XChangeKeyboardControl(Dsp, KBKeyClickPercent|KBBellPercent|KBBellPitch|KBBellDuration, &ctr);
+
+ ctr.auto_repeat_mode = oldstate.global_auto_repeat;
+ XChangeKeyboardControl(Dsp, KBAutoRepeatMode, &ctr);
+ XFlush(Dsp);
+
+ for (led = 1; led <= 32; led++) {
+ ctr.led = led;
+ ctr.led_mode = (oldstate.led_mask & (1<<(led-1)))? LedModeOn:LedModeOff;
+ XChangeKeyboardControl(Dsp, KBLed|KBLedMode, &ctr);
+ }
+ XFlush(Dsp);
+
+ XDisplayKeycodes(Dsp, &minkc, &maxkc);
+ for (key = minkc; key < maxkc; key++) {
+ ctr.key = key;
+ ctr.auto_repeat_mode = (oldstate.auto_repeats[key/8] & (1<<(key%8)))?
+ AutoRepeatModeOn: AutoRepeatModeOff;
+ XChangeKeyboardControl(Dsp, KBAutoRepeatMode|KBKey, &ctr);
+ XFlush(Dsp);
+ }
+ cleanup();
+}
+>>SET cleanup restorekey
+
+>>ASSERTION Good A
+If the key click loudness can be set:
+When the
+.S KBKeyClickPercent
+bit is set in
+.A value_mask ,
+then the volume of the key click is set
+to the value specified in
+.M key_click_percent ,
+which is between 0, signifying off,
+and 100, signifying loud.
+>>STRATEGY
+Set value_mask to KBKeyClickPercent.
+Set key_click_percent value.
+Call xname.
+Get new keyboard state.
+Verify that change occurred.
+>>CODE
+int i;
+XKeyboardState newks;
+static int vals[] = {
+ 0, 100, 50};
+
+ value_mask = KBKeyClickPercent;
+ for (i = 0; i < NELEM(vals); i++) {
+
+ values->key_click_percent = vals[i];
+ XCALL;
+
+ XGetKeyboardControl(display, &newks);
+
+ if (newks.key_click_percent == vals[i])
+ CHECK;
+ else {
+ report("Key click percent was %d, expecting %d",
+ newks.key_click_percent, vals[i]);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(NELEM(vals));
+>>ASSERTION Good B 2
+When the
+.S KBKeyClickPercent
+bit is set in
+.A value_mask
+and
+.M key_click_percent
+is \-1, then the default key click volume is restored.
+>>STRATEGY
+Set value_mask to KBKeyClickPercent.
+Set key_click_percent to -1.
+Call xname.
+UNTESTED.
+>>CODE
+
+ /*
+ * Since the default isn't specified there is no useful test that
+ * can be done. However touch test with -1 to make sure that it
+ * doesn't blow up.
+ */
+ value_mask = KBKeyClickPercent;
+ values->key_click_percent = -1;
+
+ XCALL;
+
+ report("There is no complete test method, but a touch test was performed");
+
+ UNTESTED;
+>>ASSERTION Good A
+If the bell loudness can be set:
+When the
+.S KBBellPercent
+bit is set in
+.A value_mask ,
+then the base volume of the bell is set to the value specified in
+.M bell_percent ,
+which is between 0, signifying off, to 100, signifying loud.
+>>STRATEGY
+Set value_mask to KBBellPercent.
+Set bell_percent value.
+Call xname.
+Get new keyboard state.
+Verify that change occurred.
+>>CODE
+int i;
+XKeyboardState newks;
+static int vals[] = {
+ 0, 12, 20, 32, 47, 61, 100};
+
+ value_mask = KBBellPercent;
+ for (i = 0; i < NELEM(vals); i++) {
+
+ values->bell_percent = vals[i];
+ XCALL;
+
+ /* Do the bell so that you can check audibly if you wish */
+ XBell(display, 0);
+
+ XGetKeyboardControl(display, &newks);
+
+ if (newks.bell_percent == vals[i])
+ CHECK;
+ else {
+ report("Key bell percent was %d, expecting %d",
+ newks.key_click_percent, vals[i]);
+ FAIL;
+ }
+ }
+
+ /*
+ * Allow time for bells to happen before going on to next test.
+ */
+ sleep(2);
+
+ CHECKPASS(NELEM(vals));
+>>ASSERTION Good B 2
+When the
+.S KBBellPercent
+bit is set in
+.A value_mask
+and
+.M bell_percent
+is \-1, then the base volume of the bell is set to the default.
+>>STRATEGY
+Set value_mask to KBBellPercent.
+Set bell_percent value to -1.
+Call xname.
+UNTESTED.
+>>CODE
+
+ value_mask = KBBellPercent;
+ values->bell_percent = -1;
+
+ XCALL;
+
+ report("There is no complete test method, but a touch test was performed");
+
+ UNTESTED;
+>>ASSERTION Good A
+If the bell pitch can be set:
+When the
+.S KBBellPitch
+bit is set in
+.A value_mask ,
+then the bell pitch in Hz is set to the value specified in
+.M bell_pitch .
+>>STRATEGY
+Set value_mask to KBBellPitch.
+Set bell_pitch value.
+Call xname.
+Get new keyboard state.
+Verify that change occurred.
+>>CODE
+int i;
+XKeyboardState newks;
+static int vals[] = {
+ 440, 528, 400, 294, 300, 800, 640};
+
+ value_mask = KBBellPitch;
+ for (i = 0; i < NELEM(vals); i++) {
+
+ values->bell_pitch = vals[i];
+ XCALL;
+
+ XBell(Dsp, 0);
+
+ XGetKeyboardControl(display, &newks);
+
+ if (newks.bell_pitch == vals[i])
+ CHECK;
+ else {
+ report("Bell pitch was %d, expecting %d",
+ newks.bell_pitch, vals[i]);
+ FAIL;
+ }
+ }
+
+ /*
+ * Allow time for bells to happen before going on to next test.
+ */
+ sleep(2);
+
+ CHECKPASS(NELEM(vals));
+>>ASSERTION Good B 2
+When the
+.S KBBellPitch
+bit is set in
+.A value_mask
+and
+.M bell_pitch
+is \-1, then the bell pitch is set to the default.
+>>STRATEGY
+Set value_mask to KBBellPitch.
+Set bell_pitch value to -1.
+Call xname.
+UNTESTED.
+>>CODE
+
+ value_mask = KBBellPitch;
+ values->bell_pitch = -1;
+
+ XCALL;
+
+ report("There is no complete test method, but a touch test was performed");
+
+ UNTESTED;
+>>ASSERTION Good A
+If the bell duration can be set:
+When the
+.S KBBellDuration
+bit is set in
+.A value_mask ,
+then the bell duration in milliseconds is set to the value specified in
+.M bell_duration .
+>>STRATEGY
+Set value_mask to KBBellDuration.
+Set bell_duration value to -1.
+Call xname.
+Get new keyboard state.
+Verify that change occurred.
+>>CODE
+int i;
+XKeyboardState newks;
+static int vals[] = {
+ 10, 200, 600, 1000, 50};
+
+ value_mask = KBBellDuration;
+ for (i = 0; i < NELEM(vals); i++) {
+
+ values->bell_duration = vals[i];
+ XCALL;
+
+ XBell(display, 0);
+ XGetKeyboardControl(display, &newks);
+
+ if (newks.bell_duration == vals[i])
+ CHECK;
+ else {
+ report("Bell duration was %d, expecting %d",
+ newks.bell_duration, vals[i]);
+ FAIL;
+ }
+ }
+
+ /*
+ * Allow time for bells to happen before going on to next test.
+ */
+ sleep(5);
+
+ CHECKPASS(NELEM(vals));
+>>ASSERTION Good B 2
+When the
+.S KBBellDuration
+bit is set in
+.A value_mask
+and
+.M bell_duration
+is \-1, then the bell duration is set to the default.
+>>STRATEGY
+Set value_mask to KBBellDuration.
+Set bell_duration value to -1.
+Call xname.
+UNTESTED.
+>>CODE
+
+ value_mask = KBBellDuration;
+ values->bell_duration = -1;
+
+ XCALL;
+
+ report("There is no complete test method, but a touch test was performed");
+
+ UNTESTED;
+>>ASSERTION Good A
+If
+.SM LED s
+are supported:
+When both
+.S KBLed
+and
+.S KBLedMode
+are specified, then the state of the
+.SM LED
+specified by
+.M led
+is changed to the state specified by
+.M led_mode .
+>>STRATEGY
+Set value_mask to KBLed | KBLedMode.
+Set led value.
+Set led_mode value.
+Call xname.
+Get new keyboard state.
+Verify that change occurred.
+>>EXTERN
+#define NLEDS 32 /* Number of leds that the protocol allows */
+#define NLEDMASK 0xffffffff /* Mask of all leds */
+>>CODE
+int i, j;
+unsigned long onmask;
+XKeyboardState newks;
+static int vals[] = {
+ 1, 3, 2, 4, 20, NLEDS};
+
+ value_mask = KBLed|KBLedMode;
+ onmask = 0;
+ for (i = 1; i <= NLEDS; i++) {
+
+ values->led_mode = LedModeOff;
+ for (j = 0; j < NELEM(vals); j++) {
+ if (vals[j] == i) {
+ onmask |= (1<<(i-1));
+ values->led_mode = LedModeOn;
+ break;
+ }
+ }
+ values->led = i;
+
+ XCALL;
+ }
+
+ XGetKeyboardControl(display, &newks);
+
+ if (newks.led_mask == onmask)
+ CHECK;
+ else {
+ report("Led mask was %d, expecting %d",
+ newks.led_mask, onmask);
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+If
+.SM LED s
+are supported:
+When
+.S KBLedMode
+is specified and
+.S KBLed
+is not specified, then the state of all
+.SM LED s
+is changed to the mode specified by
+.M led_mode .
+>>STRATEGY
+Set value_mask to KBLed.
+Set led_mode value.
+Call xname.
+Get new keyboard state.
+Verify that change occurred.
+>>CODE
+XKeyboardState newks;
+
+ value_mask = KBLedMode;
+ values->led_mode = LedModeOn;
+
+ XCALL;
+
+ XGetKeyboardControl(display, &newks);
+
+ if (newks.led_mask == (unsigned)NLEDMASK)
+ CHECK;
+ else {
+ report("All leds were not set to correct value");
+ report(" led_mask was 0x%x, expecting 0x%x", newks.led_mask, NLEDMASK);
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When
+.S KBKey
+and
+.S KBAutoRepeatMode
+are specified, then the auto repeat mode of
+.M key
+is changed to the mode specified by
+.M auto_repeat_mode .
+>>STRATEGY
+Set value_mask to KBKey | KBAutoRepeatMode.
+Get current value for key.
+Set auto_repeat_mode to opposite of current value.
+Call xname.
+Verify that auto_repeat_mode for the key has changed.
+>>CODE
+int i;
+int minkc, maxkc;
+int onoff;
+XKeyboardState newks;
+
+#define NKEYSTOTRY 12
+
+ value_mask = KBKey | KBAutoRepeatMode;
+ XDisplayKeycodes(display, &minkc, &maxkc);
+ /*
+ * Try out the first few keycodes.
+ */
+ for (i = minkc; i < minkc+NKEYSTOTRY; i++) {
+
+ values->key = i;
+ onoff = (oldstate.auto_repeats[i/8] & (1<<(i%8)))?
+ AutoRepeatModeOff: AutoRepeatModeOn;
+ values->auto_repeat_mode = onoff;
+ XCALL;
+
+ XGetKeyboardControl(display, &newks);
+
+ if (((newks.auto_repeats[i/8] & (1<<(i%8))) != 0) == ((onoff==AutoRepeatModeOn)? 1: 0))
+ CHECK;
+ else {
+ report("Key auto repeat was not set to %d", onoff);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(NKEYSTOTRY);
+>>ASSERTION Good A
+When
+.S KBAutoRepeatMode
+is specified and
+.S KBKey
+is not specified,
+then the per-key settings are unchanged and the auto repeat mode for
+the whole keyboard is changed to that specified by
+.M auto_repeat_mode .
+>>STRATEGY
+Set value_mask to KBAutoRepeatMode.
+Get current global auto repeat mode.
+Set auto_repeat_mode to different value.
+Call xname.
+Verify that global auto repeat mode changed.
+>>CODE
+XKeyboardState newks;
+int mode;
+
+ value_mask = KBAutoRepeatMode;
+ mode = (oldstate.global_auto_repeat==AutoRepeatModeOn)?
+ AutoRepeatModeOff: AutoRepeatModeOn;
+ values->auto_repeat_mode = mode;
+
+ XCALL;
+
+ XGetKeyboardControl(display, &newks);
+
+ if (newks.global_auto_repeat == mode)
+ CHECK;
+ else {
+ report("global auto repeat mode was not set");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+When the
+.S KBKeyClickPercent
+bit is set in
+.A value_mask
+and
+.M key_click_percent
+is not between 0 and 100 inclusive
+or \-1, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set value_mask to KBKeyClickPercent.
+Set out of range key_click_percent.
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+int i;
+static int badvals[] = {
+ -100, -2, 101, 203};
+
+ value_mask = KBKeyClickPercent;
+ for (i = 0; i < NELEM(badvals); i++) {
+ values->key_click_percent = badvals[i];
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else {
+ report("No BadValue for key_click_percent of %d", badvals[i]);
+ FAIL;
+ }
+ }
+ CHECKPASS(NELEM(badvals));
+>>ASSERTION Bad A
+When the
+.S KBBellPercent
+bit is set in
+.A value_mask
+and
+.M bell_percent
+is not between 0 and 100 inclusive
+or \-1, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set value_mask to KBBellPercent.
+Set out of range bell_percent.
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+int i;
+static int badvals[] = {
+ -100, -2, 101, 203};
+
+ value_mask = KBBellPercent;
+ for (i = 0; i < NELEM(badvals); i++) {
+ values->bell_percent = badvals[i];
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else {
+ report("No BadValue for bell_percent of %d", badvals[i]);
+ FAIL;
+ }
+ }
+ CHECKPASS(NELEM(badvals));
+>>ASSERTION Bad A
+When the
+.S KBBellPitch
+bit is set in
+.A value_mask
+and
+.M bell_pitch
+is a negative number other than \-1, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set value_mask to KBBellPitch.
+Set out of range bell_pitch.
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+int i;
+static int badvals[] = {
+ -9012, -100, -2};
+
+ value_mask = KBBellPitch;
+ for (i = 0; i < NELEM(badvals); i++) {
+ values->bell_pitch = badvals[i];
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else {
+ report("No BadValue for bell_pitch of %d", badvals[i]);
+ FAIL;
+ }
+ }
+ CHECKPASS(NELEM(badvals));
+>>ASSERTION Bad A
+When the
+.S KBBellDuration
+bit is set in
+.A value_mask
+and
+.M bell_duration
+is a negative number other than \-1, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set value_mask to KBBellDuration.
+Set out of range bell_duration.
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+int i;
+static int badvals[] = {
+ -3456, -100, -2};
+
+ value_mask = KBBellDuration;
+ for (i = 0; i < NELEM(badvals); i++) {
+ values->bell_duration = badvals[i];
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else {
+ report("No BadValue for bell_duration of %d", badvals[i]);
+ FAIL;
+ }
+ }
+ CHECKPASS(NELEM(badvals));
+>>ASSERTION Bad A
+When
+.S KBLed
+is specified
+and
+.S KBLedMode
+is not specified, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Set value_mask to KBLed.
+Call xname.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+
+ value_mask = KBLed;
+ values->led = 1;
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL; /* safe */
+>>ASSERTION Bad A
+When
+.S KBKey
+is specified and
+.S KBAutoRepeatMode
+is not specified,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Set value_mask to KBKey.
+Call xname.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+
+ value_mask = KBKey;
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+
+>>ASSERTION Bad A
+When the value of
+.M led_mode
+is other than
+.S LedModeOn
+or
+.S LedModeOff ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set value_mask to KBLedMode.
+Set led_mode to other than LedModeOn or LedModeOff.
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+static int lmodes[] = {
+ LedModeOn, LedModeOff};
+long badvals[NM_LEN];
+int i, n;
+
+ n = notmember(lmodes, NELEM(lmodes), badvals);
+
+ value_mask = KBLedMode;
+
+ for (i = 0; i < n; i++) {
+ values->led_mode = badvals[i];
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else {
+ report("A led_mode of %d did not give BadValue", badvals[i]);
+ }
+ }
+ CHECKPASS(n);
+>>ASSERTION Bad A
+When
+the value of
+.M auto_repeat_mode
+is other than
+.S AutoRepeatModeOff ,
+.S AutoRepeatModeOn
+or
+.S AutoRepeatModeDefault ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set value_mask to KBAutoRepeatMode.
+Set auto_repeat_mode to invalid value.
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+static int armodes[] = {
+ AutoRepeatModeOff, AutoRepeatModeOn, AutoRepeatModeDefault};
+long badvals[NM_LEN];
+int i, n;
+
+ n = notmember(armodes, NELEM(armodes), badvals);
+
+ value_mask = KBAutoRepeatMode;
+
+ for (i = 0; i < n; i++) {
+ values->auto_repeat_mode = badvals[i];
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else {
+ report("A auto_repeat_mode of %d did not give a BadValue", badvals[i]);
+ }
+ }
+ CHECKPASS(n);
+>># Removed because there is no guarantee that Xlib will pass the bad bits
+>># through.
+>>#ASSERTION Bad A
+>>#.ER Value value_mask mask KBKeyClickPercent KBBellPercent KBBellPitch KBBellDuration KBLed KBLedMode KBKey KBAutoRepeatMode
diff --git a/xc/test/xsuite/xtest/tset/CH07/chngkybrdm/chngkybrdm.m b/xc/test/xsuite/xtest/tset/CH07/chngkybrdm/chngkybrdm.m
new file mode 100644
index 000000000..bdecfc0ca
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/chngkybrdm/chngkybrdm.m
@@ -0,0 +1,265 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XChangeKeyboardMapping CH07
+void
+
+Display *display = Dsp;
+int first_keycode = First;
+int keysyms_per_keycode = 1;
+KeySym *keysyms = Keys;
+int num_codes = 2;
+>>EXTERN
+
+#define MAXKPK 5 /* Maximum keysyms_per_keyocde we will use */
+#define MAXCODES 255 /* Max number of keycodes we will use */
+
+static int First;
+static int ncodes;
+static int kpk; /* Keysyms per keycode */
+static KeySym *oldkeym;
+
+/*
+ * Can't really assume that there are any particular keysym names defined so
+ * we use our own arbitrary values.
+ */
+#define XT_KSYM1 0x5678
+#define XT_KSYM2 0x9328
+
+static KeySym Keys[MAXKPK*MAXCODES] = {
+ XT_KSYM1, XT_KSYM2};
+
+/*
+ * Set startup and cleanup functions to save and restore
+ * the original keyboard map.
+ */
+>>SET startup savekeymap
+static void
+savekeymap()
+{
+int last;
+
+ startup();
+
+ if(Dsp) {
+ XDisplayKeycodes(Dsp, &First, &last);
+ ncodes = last-First;
+
+ oldkeym = XGetKeyboardMapping(Dsp, First, ncodes, &kpk);
+ }
+}
+
+>>SET cleanup cleankeymap
+static void
+cleankeymap()
+{
+ if(Dsp) {
+ XChangeKeyboardMapping(Dsp, First, kpk, oldkeym, ncodes);
+ XFree((char*) oldkeym);
+ }
+
+ cleanup();
+}
+
+
+>>ASSERTION Good A
+A call to xname associates
+.A keysyms_per_keycode
+KeySyms for each of the
+.A num_codes
+KeyCodes starting with
+.A first_keycode ,
+with the KeySyms being taken from the array
+.A keysyms .
+>>STRATEGY
+Set up keysym array.
+Call xname.
+Verify that keyboard mapping has been changed.
+>>CODE
+int i, j;
+int newkpk;
+KeySym *newmap;
+
+ first_keycode = First+3;
+ keysyms_per_keycode = MAXKPK;
+ num_codes = 6;
+
+ for (i = 0; i < keysyms_per_keycode*num_codes; i++)
+ keysyms[i] = XT_KSYM1;
+
+ XCALL;
+
+ newmap = XGetKeyboardMapping(display, first_keycode, num_codes, &newkpk);
+
+ for (i = 0; i < num_codes; i++) {
+ for (j = 0; j < keysyms_per_keycode; j++) {
+ if (keysyms[i*keysyms_per_keycode+j] == newmap[i*newkpk+j])
+ CHECK;
+ else {
+ report("Keysym for keycode %d was 0x%x, expecting 0x%x",
+ first_keycode+i,
+ newmap[i*newkpk+j], keysyms[i*keysyms_per_keycode+j]);
+ FAIL;
+ break; /* probably pointless to continue */
+ }
+ }
+ }
+
+ CHECKPASS(keysyms_per_keycode*num_codes);
+
+ XFree((char*)newmap);
+>>ASSERTION Good A
+The KeySyms for KeyCodes outside the specified range
+remain unchanged.
+>>STRATEGY
+Get current keymap.
+Call xname to change part of the map.
+Verify that there is no change outside the specified range.
+>>CODE
+KeySym *oldmap;
+int oldkpk;
+KeySym *newmap;
+int newkpk;
+int i, j;
+int oldind, newind;
+
+ oldmap = XGetKeyboardMapping(display, First, ncodes, &oldkpk);
+
+ first_keycode = First+2;
+ XCALL;
+
+ newmap = XGetKeyboardMapping(display, First, ncodes, &newkpk);
+
+ for (i = 0; i < ncodes; i++) {
+
+ /* Skip the ones that were changed. */
+ if (i + First >= first_keycode && i + First < first_keycode+num_codes)
+ continue;
+
+ /*
+ * The call may have altered the number of keysyms per keycode,
+ * so must only check that the previously set position have
+ * not changed. Expansion should have been filled with NoSymbol.
+ */
+ for (j = 0; j < oldkpk; j++) {
+ oldind = i*oldkpk + j;
+ newind = i*newkpk + j;
+ if (oldmap[oldind] == newmap[newind])
+ CHECK;
+ else {
+ report("Keysym outside of range altered");
+ report(" keycode %d was 0x%x, expecting 0x%x",
+ First+i, newmap[newind], oldmap[oldind]);
+ FAIL;
+ }
+ }
+ }
+
+ /* Number of codes that should not have been changed is ncodes-num_codes */
+ CHECKPASS((ncodes - num_codes)*oldkpk);
+>>ASSERTION Good A
+A call to xname generates a
+.S MappingNotify
+event.
+>>STRATEGY
+Call xname.
+Verify that a MappingNotify event is generated.
+>>CODE
+XEvent ev;
+XMappingEvent good;
+int n;
+
+ first_keycode = First + 2;
+ num_codes = 3;
+ XCALL;
+
+ defsetevent(good, display, MappingNotify);
+ good.window = None; /* unused */
+ good.request = MappingKeyboard;
+ good.first_keycode = first_keycode;
+ good.count = num_codes;
+
+ n = getevent(display, &ev);
+ if (n == 0) {
+ report("Expecting one MappingEvent");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+It is legal for the KeySym
+.S NoSymbol
+to appear anywhere in the KeySym list for a particular KeyCode.
+>>STRATEGY
+Call xname with the KeySym NoSymbol in the list.
+Verify that no error occurs.
+>>CODE
+
+ Keys[0] = NoSymbol;
+ XCALL;
+
+ if (geterr() == Success)
+ PASS;
+
+>>ASSERTION Bad A
+When
+.A first_keycode
+is less than the value of min_keycode returned by
+.F XDisplayKeycodes ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set first_keycode to a value less than min_keycode.
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ first_keycode = First-1;
+ XCALL;
+
+ if (geterr() == BadValue)
+ PASS;
+>>ASSERTION Bad A
+When
+.A first_keycode + num_codes \- 1
+is greater than the value of max_keycode returned by
+.F XDisplayKeycodes ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set end of range to beyond max_keycode.
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ num_codes = ncodes;
+ first_keycode = First+10;
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ PASS;
+>>ASSERTION Bad B 3
+.ER BadAlloc
diff --git a/xc/test/xsuite/xtest/tset/CH07/chngpntrcn/chngpntrcn.m b/xc/test/xsuite/xtest/tset/CH07/chngpntrcn/chngpntrcn.m
new file mode 100644
index 000000000..b1845ee24
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/chngpntrcn/chngpntrcn.m
@@ -0,0 +1,419 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XChangePointerControl CH07
+void
+
+Display *display = Dsp;
+Bool do_accel = False;
+Bool do_threshold = False;
+int accel_numerator;
+int accel_denominator;
+int threshold;
+>>EXTERN
+
+static int oan, oad;
+static int othresh;
+
+/*
+ * Save the original pointer values for restoring at the end of the test.
+ */
+>>SET startup saveold
+static void
+saveold()
+{
+ startup();
+ if(Dsp)
+ XGetPointerControl(Dsp, &oan, &oad, &othresh);
+}
+
+>>SET cleanup restorepoint
+static void
+restorepoint()
+{
+ if(Dsp)
+ XChangePointerControl(Dsp, True, True, oan, oad, othresh);
+ cleanup();
+}
+
+>>ASSERTION Good A
+When
+.A do_accel
+is
+.S True ,
+then the acceleration of the pointer is set to the fraction
+.A accel_numerator
+over
+.A accel_denominator .
+>>STRATEGY
+Set do_accel to True.
+Set numerator and denominator values.
+Call xname.
+Verify that acceleration values have been set.
+>>CODE
+int newnum, newden, newthresh;
+
+ do_accel = True;
+ accel_numerator = 12;
+ accel_denominator = 11;
+
+ XCALL;
+
+ XGetPointerControl(display, &newnum, &newden, &newthresh);
+
+ if (newnum == accel_numerator)
+ CHECK;
+ else {
+ report("accel_numerator was %d, expecting %d", newnum, accel_numerator);
+ FAIL;
+ }
+ if (newden == accel_denominator)
+ CHECK;
+ else {
+ report("accel_denominator was %d, expecting %d", newden, accel_denominator);
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When
+.A do_threshold
+is
+.S True ,
+then the threshold
+is set to the value in the
+.A threshold
+argument.
+>># the acceleration only takes effect for pointer motions of more than
+>># .A threshold
+>># pixels at once and only applies to the number of pixels moved over the
+>># threshold value.
+>>STRATEGY
+Set do_threshold to True.
+Set value for threshold.
+Call xname.
+Verify that threshold value is set correctly.
+>>CODE
+int newnum, newden, newthresh;
+
+ do_threshold = True;
+ threshold = 43;
+
+ XCALL;
+
+ XGetPointerControl(display, &newnum, &newden, &newthresh);
+
+ if (newthresh == threshold)
+ CHECK;
+ else {
+ report("threshold was %d, expecting %d", newthresh, threshold);
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When
+.A threshold
+is \-1, then the threshold is set to the default.
+>>STRATEGY
+Set do_threshold to True.
+Set threshold to -1.
+Call xname.
+Obtain default value for threshold.
+Set threshold to new value.
+Call xname.
+Verify that threshold value is set correctly.
+Set threshold to -1.
+Call xname.
+Verify that threshold value is set to default value.
+>>CODE
+int newnum, newden, newthresh;
+int defnum, defden, defthresh;
+
+ do_threshold = True;
+ threshold = -1;
+
+ XCALL;
+
+ XGetPointerControl(display, &defnum, &defden, &defthresh);
+
+ threshold = defthresh + 1;
+
+ XCALL;
+
+ XGetPointerControl(display, &newnum, &newden, &newthresh);
+
+ if (newthresh == threshold)
+ CHECK;
+ else {
+ report("When setting a non-default threshold value,");
+ delete("threshold was %d, expecting %d", newthresh, threshold);
+ return;
+ }
+
+ threshold = -1;
+
+ XCALL;
+
+ XGetPointerControl(display, &newnum, &newden, &newthresh);
+
+ if (newthresh == defthresh)
+ CHECK;
+ else {
+ report("When setting default threshold value,");
+ report("threshold was %d, expecting %d", newthresh, defthresh);
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When
+.A accel_numerator
+is \-1, then the numerator of the acceleration
+is set to the default.
+>>STRATEGY
+Set do_accel to True.
+Set numerator to -1.
+Call xname.
+Obtain default value for numerator.
+Set numerator to new value.
+Call xname.
+Verify that numerator value is set correctly.
+Set numerator to -1.
+Call xname.
+Verify that numerator value is set to default value.
+>>CODE
+int newnum, newden, newthresh;
+int defnum, defden, defthresh;
+
+ do_accel = True;
+ accel_numerator = -1;
+ accel_denominator = 11;
+
+ XCALL;
+
+ XGetPointerControl(display, &defnum, &defden, &defthresh);
+
+ accel_numerator = defnum + 1;
+
+ XCALL;
+
+ XGetPointerControl(display, &newnum, &newden, &newthresh);
+
+ if (newnum == accel_numerator)
+ CHECK;
+ else {
+ report("When setting a non-default numerator value,");
+ report("accel_numerator was %d, expecting %d", newnum, accel_numerator);
+ FAIL;
+ }
+
+ accel_numerator = -1;
+
+ XCALL;
+
+ XGetPointerControl(display, &newnum, &newden, &newthresh);
+
+ if (newnum == defnum)
+ CHECK;
+ else {
+ report("When setting default numerator value,");
+ report("accel_numerator was %d, expecting %d", newnum, defnum);
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When
+.A accel_denominator
+is \-1, then the denominator of the acceleration is set to the default.
+>>STRATEGY
+Set do_accel to True.
+Set denominator to -1.
+Call xname.
+Obtain default value for denominator.
+Set denominator to new value.
+Call xname.
+Verify that denominator value is set correctly.
+Set denominator to -1.
+Call xname.
+Verify that denominator value is set to default value.
+>>CODE
+int newnum, newden, newthresh;
+int defnum, defden, defthresh;
+
+ do_accel = True;
+ accel_numerator = 12;
+ accel_denominator = -1;
+
+ XCALL;
+
+ XGetPointerControl(display, &defnum, &defden, &defthresh);
+
+ accel_denominator = defden + 1;
+
+ XCALL;
+
+ XGetPointerControl(display, &newnum, &newden, &newthresh);
+
+ if (newden == accel_denominator)
+ CHECK;
+ else {
+ report("When setting a non-default denominator value,");
+ report("accel_denominator was %d, expecting %d", newden, accel_denominator);
+ FAIL;
+ }
+
+ accel_denominator = -1;
+
+ XCALL;
+
+ XGetPointerControl(display, &newnum, &newden, &newthresh);
+
+ if (newden == defden)
+ CHECK;
+ else {
+ report("When setting default denominator value,");
+ report("accel_denominator was %d, expecting %d", newden, defden);
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When the value of the
+.A do_accel
+or
+.A do_threshold
+arguments are
+.S False ,
+then the corresponding parameter is not changed.
+>>STRATEGY
+Get old values of parameters.
+Call xname with do_accel and do_threshold False.
+Verify no change to parameters.
+>>CODE
+int oldnum, oldden, oldthresh;
+int newnum, newden, newthresh;
+
+ XGetPointerControl(display, &oldnum, &oldden, &oldthresh);
+
+ accel_numerator = oldnum+4;
+ accel_denominator = oldden+5;
+ threshold = oldthresh+2;
+
+ do_accel = False;
+ do_threshold = False;
+
+ XCALL;
+
+ XGetPointerControl(display, &newnum, &newden, &newthresh);
+
+ if (newnum == oldnum)
+ CHECK;
+ else {
+ report("accel_numerator was changed when do_accel was False");
+ FAIL;
+ }
+ if (newden == oldden)
+ CHECK;
+ else {
+ report("accel_denominator was changed when do_accel was False");
+ FAIL;
+ }
+ if (newthresh == oldthresh)
+ CHECK;
+ else {
+ report("threshold was changed when do_threshold was False");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+When
+.A threshold
+is a negative number other than \-1, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set do_threshold to True.
+Set threshold to negative value other than -1.
+Verify BadValue error.
+>>CODE BadValue
+
+ do_threshold = True;
+ threshold = -3;
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ PASS;
+>>ASSERTION Good A
+When
+.A accel_numerator
+or
+.A accel_denominator
+are negative numbers other than \-1, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set do_accel to True.
+Set accel parameters to invalid values.
+Verify BadValue error.
+>>CODE BadValue
+
+ do_accel = True;
+
+ accel_denominator = 3;
+ accel_numerator = -3;
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+
+ accel_denominator = -3;
+ accel_numerator = 2;
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When the
+.A accel_denominator
+argument is zero, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set do_accel to True.
+Set accel_denominator to zero.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ do_accel = True;
+ accel_denominator = 0;
+ accel_numerator = 1;
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ PASS;
+>>ASSERTION Bad A
+.ER Value do_accel True False
+>>ASSERTION Bad A
+.ER Value do_threshold True False
diff --git a/xc/test/xsuite/xtest/tset/CH07/chngsvst/chngsvst.m b/xc/test/xsuite/xtest/tset/CH07/chngsvst/chngsvst.m
new file mode 100644
index 000000000..a5acbbf03
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/chngsvst/chngsvst.m
@@ -0,0 +1,155 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XChangeSaveSet CH07
+void
+xname()
+Display *display = Dsp;
+Window w;
+int change_mode = SetModeInsert;
+>># All things to do with what actually happens when the client
+>># dies are in addtsvst/addtsvst.m.
+>>ASSERTION Good A
+When a call to xname is made with a
+.A change_mode
+of
+.S SetModeInsert ,
+then the specified window is inserted into the client's save-set.
+>>STRATEGY
+Create client1.
+Client1 creates win window.
+Create test window as inferior of win window using different client.
+Call xname with change_mode SetModeInsert.
+Verify that window has been added by destroying client1.
+>>CODE
+Display *client1;
+XWindowAttributes atts;
+Window win;
+Window base;
+struct area area;
+
+ client1 = XOpenDisplay(config.display);
+
+ base = defwin(Dsp);
+ if (isdeleted())
+ return;
+
+ setarea(&area, 10, 10, 10, 10);
+ win = crechild(client1, base, &area);
+ XSync(client1, False);
+
+ w = crechild(Dsp, win, &area);
+ display = client1;
+ change_mode = SetModeInsert;
+
+ XCALL;
+
+ XCloseDisplay(client1);
+
+ CATCH_ERROR(Dsp);
+ if (XGetWindowAttributes(Dsp, w, &atts) == False) {
+ report("Save-set window was destroyed");
+ FAIL;
+ } else
+ CHECK;
+ RESTORE_ERROR(Dsp);
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When a call to xname is made with a
+.A change_mode
+of
+.S SetModeDelete ,
+then the specified window is deleted from the client's save-set.
+>>STRATEGY
+Create client1.
+Create win window with client1.
+Create two inferiors of win window using different client.
+Add both to save set.
+Remove one of them from save-set with xname.
+Destroy client1.
+Verify that window that was removed is destroyed.
+>>CODE
+Display *client1;
+Window win;
+Window base;
+Window w1, w2;
+XWindowAttributes atts;
+struct area area;
+
+ client1 = XOpenDisplay(config.display);
+
+ base = defwin(Dsp);
+ if (isdeleted())
+ return;
+
+ setarea(&area, 10, 10, 10, 10);
+ win = crechild(client1, base, &area);
+ XSync(client1, False);
+
+ w1 = crechild(Dsp, win, &area);
+ w2 = crechild(Dsp, win, &area);
+ if (isdeleted())
+ return;
+ XAddToSaveSet(client1, w1);
+ XAddToSaveSet(client1, w2);
+
+ w = w1;
+ display = client1;
+ change_mode = SetModeDelete;
+ XCALL;
+
+ XCloseDisplay(client1);
+
+ CATCH_ERROR(Dsp);
+ if (XGetWindowAttributes(Dsp, w1, &atts) == True) {
+ report("Non save-set window was not destroyed");
+ FAIL;
+ } else
+ CHECK;
+ if (XGetWindowAttributes(Dsp, w2, &atts) == False) {
+ report("Save-set window was destroyed");
+ FAIL;
+ } else
+ CHECK;
+ RESTORE_ERROR(Dsp);
+
+ CHECKPASS(2);
+
+
+>>ASSERTION Bad A
+When the specified window was created by the same client, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create window.
+Call xname with window and same client.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+
+ w = defwin(display);
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+.ER BadValue change_mode SetModeInsert SetModeDelete
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH07/dltmdfrmpe/dltmdfrmpe.m b/xc/test/xsuite/xtest/tset/CH07/dltmdfrmpe/dltmdfrmpe.m
new file mode 100644
index 000000000..b70298840
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/dltmdfrmpe/dltmdfrmpe.m
@@ -0,0 +1,97 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDeleteModifiermapEntry CH07
+XModifierKeymap *
+xname
+XModifierKeymap *modmap;
+KeyCode keycode_entry;
+int modifier;
+>>ASSERTION Good A
+A call to xname
+deletes the specified KeyCode,
+.A keycode_entry ,
+from the set that controls the specified
+.A modifier
+and returns a pointer to the modified
+.S XModifierKeymap
+structure.
+>>STRATEGY
+Create modifiermap.
+Insert some entries into it.
+Call xname to delete entries.
+Verify by direct inspection that the entries are gone.
+>>CODE
+int minkc, maxkc;
+int kc;
+int rm1, rm2;
+int set;
+int mod;
+KeyCode *kcp;
+static int mods[] = {
+ ShiftMapIndex,
+ LockMapIndex,
+ ControlMapIndex,
+ Mod1MapIndex,
+ Mod2MapIndex,
+ Mod3MapIndex,
+ Mod4MapIndex,
+ Mod5MapIndex,
+};
+
+ XDisplayKeycodes(Dsp, &minkc, &maxkc);
+ kc = minkc;
+
+ modmap = XNewModifiermap(0);
+
+ modmap = XInsertModifiermapEntry(modmap, ++kc, ControlMapIndex);
+ rm1 = kc;
+ modmap = XInsertModifiermapEntry(modmap, ++kc, ControlMapIndex);
+ modmap = XInsertModifiermapEntry(modmap, ++kc, ControlMapIndex);
+ modmap = XInsertModifiermapEntry(modmap, ++kc, Mod2MapIndex);
+ modmap = XInsertModifiermapEntry(modmap, ++kc, Mod2MapIndex);
+ rm2 = kc;
+ modmap = XInsertModifiermapEntry(modmap, ++kc, Mod2MapIndex);
+ modmap = XInsertModifiermapEntry(modmap, ++kc, Mod2MapIndex);
+
+ /* Remove two entries */
+ keycode_entry = rm1;
+ modifier = ControlMapIndex;
+ modmap = XCALL;
+
+ keycode_entry = rm2;
+ modifier = Mod2MapIndex;
+ modmap = XCALL;
+
+ kcp = modmap->modifiermap;
+ for (mod = 0; mod < NELEM(mods); mod++) {
+ for (set = 0; set < modmap->max_keypermod; set++) {
+ if (kcp[0] == rm1) {
+ report("KeyCode %d still in map", rm1);
+ FAIL;
+ } else
+ CHECK;
+ if (kcp[0] == rm2) {
+ report("KeyCode %d still in map", rm2);
+ FAIL;
+ } else
+ CHECK;
+
+ kcp++;
+ }
+ }
+
+ CHECKPASS(2 * modmap->max_keypermod * NELEM(mods));
diff --git a/xc/test/xsuite/xtest/tset/CH07/dsblaccssc/dsblaccssc.m b/xc/test/xsuite/xtest/tset/CH07/dsblaccssc/dsblaccssc.m
new file mode 100644
index 000000000..e882401a7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/dsblaccssc/dsblaccssc.m
@@ -0,0 +1,114 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDisableAccessControl CH07
+void
+
+Display *display = Dsp;
+>>ASSERTION Good B 1
+A call to xname
+disables the use of the access control list at each connection setup.
+>>STRATEGY
+Get current host list.
+Attempt to remove all hosts from list.
+If this fails with BadAccess:
+ Report that this host does not have permission to do this.
+ (Will not have permission for the next part either).
+ Result is untested.
+Disable access control with xname.
+Verify that state returned by XListHosts is DisableAccess.
+Verify that a new connection can be made.
+>>CODE
+XHostAddress *oldhosts;
+XHostAddress *list;
+Display *newclient;
+int nhosts;
+int njunk;
+Bool state;
+
+ oldhosts = XListHosts(display, &nhosts, &state);
+
+ CATCH_ERROR(display);
+ XRemoveHosts(display, oldhosts, nhosts);
+ RESTORE_ERROR(display);
+
+ if (GET_ERROR(display) == BadAccess) {
+ report("The client does not have permission to disable the acl");
+ untested(" so this assertion cannot be tested.");
+ return;
+ }
+
+ XCALL;
+
+ list = XListHosts(display, &njunk, &state);
+ if (state == DisableAccess)
+ CHECK;
+ else {
+ report("Access control state was not DisableAccess (was %d)", state);
+ FAIL;
+ }
+
+ newclient = XOpenDisplay(config.display);
+ if (newclient != (Display*)0)
+ CHECK;
+ else {
+ report("Connections could not be made to host");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+
+ CATCH_ERROR(display);
+ XAddHosts(display, oldhosts, nhosts);
+ XSetAccessControl(display, state);
+ RESTORE_ERROR(display);
+ XFree((char*)oldhosts);
+ XFree((char*)list);
+
+>>ASSERTION Good B 1
+When an attempt is made to disable the use of the access control list
+from a client that is not authorised in a server-dependent way
+to do so, then a
+.S BadAccess
+error occurs.
+>>STRATEGY
+Call xname.
+If error occurs.
+ If error is BadAccess
+ Report Pass.
+ else
+ Report Fail.
+else
+ Report client is authorised.
+ Result is untested.
+>>CODE
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() != Success) {
+ if (geterr() == BadAccess)
+ PASS;
+ else {
+ report("Expecting BadAccess, was %s", errorname(geterr()));
+ FAIL;
+ }
+ } else {
+ untested("This client is authorised to disable the access list");
+ untested(" so the assertion cannot be tested");
+ }
+
+
diff --git a/xc/test/xsuite/xtest/tset/CH07/dsplykycds/dsplykycds.m b/xc/test/xsuite/xtest/tset/CH07/dsplykycds/dsplykycds.m
new file mode 100644
index 000000000..2f879b42f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/dsplykycds/dsplykycds.m
@@ -0,0 +1,144 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDisplayKeycodes CH07
+void
+
+Display *display = Dsp;
+int *min_keycodes_return = &Minkc;
+int *max_keycodes_return = &Maxkc;
+>>EXTERN
+
+static int Minkc;
+static int Maxkc;
+
+>>ASSERTION Good A
+A call to xname returns the minimum KeyCode value
+supported by the specified display to
+.A min_keycodes_return
+and the maximum KeyCode value supported by the
+specified display to
+.A max_keycodes_return .
+>>STRATEGY
+Call xname.
+Use min keycode with XGrabKey.
+Verify that it gives no error.
+Use min keycode minus one with XGrabKey.
+Verify that it gives an error.
+Use max keycode with XGrabKey.
+Verify that it gives no error.
+Use max keycode plus one with XGrabKey.
+Verify that it gives an error.
+>>CODE
+Window win;
+
+ win = defwin(display);
+
+ XCALL;
+ trace("Min keycode=%d, max keycode = %d", Minkc, Maxkc);
+
+ /*
+ * Grab key was chosen to test the validity of the keycodes
+ * on the basis that it does no damage to the current setup.
+ */
+ CATCH_ERROR(display);
+ XGrabKey(display, Minkc, 0, win, False, GrabModeAsync, GrabModeAsync);
+ RESTORE_ERROR(display);
+ if (GET_ERROR(display) == Success)
+ CHECK;
+ else {
+ report("Minimum keycode value did not appear to be valid");
+ report("A %s error occurred using the keycode with XGrabKey",
+ errorname(geterr()));
+ FAIL;
+ }
+
+ CATCH_ERROR(display);
+ XGrabKey(display, Minkc-1, 0, win, False, GrabModeAsync, GrabModeAsync);
+ RESTORE_ERROR(display);
+ if (GET_ERROR(display) != Success) {
+ CHECK;
+ debug(1, "A %s error occurred using the keycode with XGrabKey",
+ errorname(geterr()));
+ } else {
+ report("Minimum keycode value did not appear to be the lowest valid code");
+ report("No error occurred using the keycode with XGrabKey");
+ FAIL;
+ }
+
+ CATCH_ERROR(display);
+ XGrabKey(display, Maxkc, 0, win, False, GrabModeAsync, GrabModeAsync);
+ RESTORE_ERROR(display);
+ if (GET_ERROR(display) == Success)
+ CHECK;
+ else {
+ report("Maximum keycode value did not appear to be valid");
+ report("A %s error occurred using the keycode with XGrabKey",
+ errorname(geterr()));
+ FAIL;
+ }
+
+ if (Maxkc < 255) {
+ CATCH_ERROR(display);
+ XGrabKey(display, Maxkc+1, 0, win, False, GrabModeAsync, GrabModeAsync);
+ RESTORE_ERROR(display);
+ if (GET_ERROR(display) != Success) {
+ CHECK;
+ debug(1, "A %s error occurred using the keycode with XGrabKey",
+ errorname(geterr()));
+ } else {
+ report("Maximum keycode value did not appear to be the highest valid code");
+ report("No error occurred using the keycode with XGrabKey");
+ FAIL;
+ }
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+>>ASSERTION Good A
+A call to xname returns a
+minimum KeyCode value greater than or equal to 8.
+>>STRATEGY
+Call xname.
+Verify minimum KeyCode is greater than or equal to 8.
+>>CODE
+
+ XCALL;
+ if (*min_keycodes_return >= 8)
+ CHECK;
+ else {
+ report("Minimum keycode was not greater than or equal to 8, was %d",
+ *min_keycodes_return);
+ FAIL;
+ }
+ CHECKPASS(1);
+>>ASSERTION Good A
+A call to xname returns a
+maximum KeyCode value less than or equal to 255.
+>>STRATEGY
+Call xname.
+Verify maximum KeyCode is less than or equal to 255.
+>>CODE
+
+ XCALL;
+ if (*max_keycodes_return <= 255)
+ CHECK;
+ else {
+ report("Maximum keycode was not less than or equal to 255, was %d",
+ *max_keycodes_return);
+ FAIL;
+ }
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH07/enblaccssc/enblaccssc.m b/xc/test/xsuite/xtest/tset/CH07/enblaccssc/enblaccssc.m
new file mode 100644
index 000000000..f9e0d8f87
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/enblaccssc/enblaccssc.m
@@ -0,0 +1,134 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XEnableAccessControl CH07
+void
+
+Display *display = Dsp;
+>>ASSERTION Good B 1
+A call to xname
+enables the use of the access control list at each connection setup.
+>>STRATEGY
+Get current host list.
+Attempt to remove all hosts from list.
+If this fails with BadAccess:
+ Report that this host does not have permission to do this.
+ (Will not have permission for the next part either).
+ Result is untested.
+Enable access control with xname.
+Verify that state returned by XListHosts is EnableAccess.
+Verify that new connections can not be made.
+>>CODE
+#if 0
+XHostAddress *oldhosts;
+XHostAddress *list;
+Display *newclient;
+int nhosts;
+int njunk;
+Bool state;
+#endif
+
+ untested("There is no portable way to test this assertion");
+
+ /* -------- */
+
+#if 0
+ /*
+ * The following will work on some servers. However on other
+ * it can result in the client not being able to reset the state
+ * to disabled, and no more can be done without manual intervention
+ * to the server.
+ */
+ oldhosts = XListHosts(display, &nhosts, &state);
+
+ CATCH_ERROR(display);
+ XRemoveHosts(display, oldhosts, nhosts);
+ RESTORE_ERROR(display);
+
+ if (GET_ERROR(display) == BadAccess) {
+ report("The client does not have permission to disable the acl");
+ untested(" so this assertion cannot be tested.");
+ return;
+ }
+
+ XCALL;
+
+ list = XListHosts(display, &njunk, &state);
+ if (state == EnableAccess)
+ CHECK;
+ else {
+ report("Access control state was not EnableAccess (was %d)", state);
+ FAIL;
+ }
+
+ newclient = XOpenDisplay(config.display);
+ if (newclient == (Display*)0)
+ CHECK;
+ else {
+ report("Connections could be made to host");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+
+ /*
+ * It is quite possible that the following will fail.
+ */
+ CATCH_ERROR(display);
+ XAddHosts(display, oldhosts, nhosts);
+ XDisableAccessControl(display);
+ RESTORE_ERROR(display);
+
+ XFree((char*)oldhosts);
+ XFree((char*)list);
+#endif
+>>ASSERTION Good B 1
+When an attempt is made to enable the use of the access control list
+from a client that is not authorised in a server-dependent way
+to do so, then a
+.S BadAccess
+error occurs.
+>>STRATEGY
+Call xname.
+If error occurs.
+ If error is BadAccess
+ Report Pass.
+ else
+ Report Fail.
+else
+ Report client is authorised.
+ Result is untested.
+>>CODE
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() != Success) {
+ if (geterr() == BadAccess)
+ PASS;
+ else {
+ report("Expecting BadAccess, was %s", errorname(geterr()));
+ FAIL;
+ }
+ } else {
+ untested("This client is authorised to disable the access list");
+ untested(" so the assertion cannot be tested");
+
+ CATCH_ERROR(display);
+ XDisableAccessControl(display);
+ RESTORE_ERROR(display);
+ }
+
diff --git a/xc/test/xsuite/xtest/tset/CH07/frcscrnsvr/frcscrnsvr.m b/xc/test/xsuite/xtest/tset/CH07/frcscrnsvr/frcscrnsvr.m
new file mode 100644
index 000000000..b3e7eec6b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/frcscrnsvr/frcscrnsvr.m
@@ -0,0 +1,60 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XForceScreenSaver CH07
+void
+
+Display *display = Dsp;
+int mode = ScreenSaverReset;
+>>ASSERTION Good B 3
+When the specified
+.A mode
+is
+.S ScreenSaverActive
+and the screen saver is currently deactivated,
+then a call to xname
+activates the screen saver even after the screen saver has been disabled
+with a timeout of zero.
+>>STRATEGY
+Touch test only.
+>>CODE
+
+ mode = ScreenSaverActive;
+
+ XCALL;
+
+ untested("There is no reliable test method - touch test for ScreenSaverActive");
+>>ASSERTION Good B 3
+When the specified
+.A mode
+is
+.S ScreenSaverReset
+and the screen saver is currently enabled and activated,
+then a call to xname
+deactivates the screen saver
+and the activation timer is reset to its initial state
+as though device input had been received.
+>>STRATEGY
+Touch test for ScreenSaverReset only.
+>>CODE
+
+ mode = ScreenSaverReset;
+
+ XCALL;
+
+ untested("There is no reliable test method - touch test for ScreenSaverReset");
+>>ASSERTION Bad A
+.ER BadValue mode ScreenSaverActive ScreenSaverReset
diff --git a/xc/test/xsuite/xtest/tset/CH07/frmdfrmp/frmdfrmp.m b/xc/test/xsuite/xtest/tset/CH07/frmdfrmp/frmdfrmp.m
new file mode 100644
index 000000000..9bf327951
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/frmdfrmp/frmdfrmp.m
@@ -0,0 +1,35 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFreeModifiermap CH07
+void
+
+XModifierKeymap *modmap;
+>>ASSERTION Good B 3
+A call to xname frees the specified
+.S XModifierKeymap
+structure.
+>>STRATEGY
+Create modifier map.
+Call xname to free it.
+Touch test only.
+>>CODE
+
+ modmap = XNewModifiermap(0);
+
+ XCALL;
+
+ untested("There is no reliable test method, but a touch test was performed");
diff --git a/xc/test/xsuite/xtest/tset/CH07/grbbttn/grbbttn.m b/xc/test/xsuite/xtest/tset/CH07/grbbttn/grbbttn.m
new file mode 100644
index 000000000..6031eb7ef
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/grbbttn/grbbttn.m
@@ -0,0 +1,2266 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGrabButton CH07
+void
+xname
+Display *display = Dsp;
+unsigned int button = Button1;
+unsigned int modifiers = 0;
+Window grab_window = defwin(Dsp);
+Bool owner_events = False;
+unsigned int event_mask = PointerMotionMask;
+int pointer_mode = GrabModeAsync;
+int keyboard_mode = GrabModeAsync;
+Window confine_to = None;
+Cursor cursor = None;
+>>SET end-function restoredevstate
+>>EXTERN
+
+/*
+ * Returns True if the pointer is grabbed. This is not a general purpose
+ * routine since it knows about the Grab Button args.
+ * When the pointer is grabbed then pointer events are not reported to
+ * non grabbing clients.
+ */
+static
+pgrabbed()
+{
+Window win;
+Display *client2;
+XEvent ev;
+
+ if (confine_to != None)
+ win = confine_to;
+ else
+ win = grab_window;
+
+ client2 = opendisplay();
+
+ XSelectInput(client2, win, PointerMotionMask|EnterWindowMask);
+ /* Flush events for client2 */
+ XSync(client2, True);
+
+ /*
+ * Ensure that pointer either enters or moves within win.
+ */
+ (void) warppointer(display, win, 1, 1);
+ (void) warppointer(display, win, 1, 2);
+
+ XSync(client2, False);
+ if (getevent(client2, &ev)) {
+ /*
+ * An event was reported - pointer isn't grabbed, do a sanity
+ * check on the type of event.
+ */
+ if (ev.type != MotionNotify && ev.type != EnterNotify) {
+ delete("Unexpected event received in pgrabbed()");
+ delete(" event type %s", eventname(ev.type));
+ }
+ return(False);
+ } else {
+ return(True);
+ }
+}
+
+/*
+ * Get the window that the pointer is currently in, if the pointer
+ * is in a child of the given window. Otherwise it returns None.
+ */
+static Window
+getpointerwin(disp, win)
+Display *disp;
+Window win;
+{
+Window child;
+Window wtmp;
+int itmp;
+unsigned uitmp;
+Bool s;
+
+ s = XQueryPointer(disp, win, &wtmp, &child, &itmp, &itmp
+ , &itmp, &itmp , &uitmp);
+
+ if (!s)
+ delete("Could not get pointer window");
+
+ return(child);
+}
+
+#define ACTPOSX 3
+#define ACTPOSY 6
+/*
+ * Warp to the grab_window and press the keys in modifiers and then press
+ * the button in the 'button' arg.
+ * (This activates the previously set up grab if the arg variables
+ * have not been changed.)
+ */
+static
+activate()
+{
+ (void) warppointer(display, grab_window, ACTPOSX, ACTPOSY);
+ if (modifiers)
+ modpress(display, modifiers);
+ buttonpress(display, button);
+}
+
+/*
+ * Returns True if the pointer is frozen.
+ */
+static
+pfrozen()
+{
+XEvent ev;
+Window win;
+
+ if (confine_to != None) {
+ report("ERROR");
+ delete("pfrozen should not be used with a confine_to win");
+ return False;
+ }
+
+ XSync(display, True); /* Flush events */
+
+ win = defwin(display);
+ XSelectInput(display, win, PointerMotionMask);
+ (void) warppointer(display, win, 1, 1);
+ (void) warppointer(display, win, 2, 2);
+ if (XCheckMaskEvent(display, (long)PointerMotionMask, &ev))
+ return False;
+ else
+ return True;
+}
+
+/*
+ * Returns True if the keyboard is frozen.
+ */
+static
+kfrozen()
+{
+XEvent ev;
+Window win;
+int minkc, maxkc;
+int res;
+
+ XSync(display, True); /* Flush previous events */
+ XDisplayKeycodes(display, &minkc, &maxkc);
+ if (minkc < 8)
+ minkc = 8; /* For buggy servers */
+
+ /*
+ * Try to provoke a keypress on win.
+ */
+ win = defwin(display);
+ XSelectInput(display, win, KeyPressMask);
+ (void) warppointer(display, win, 1, 1);
+ keypress(display, minkc);
+ if (XCheckMaskEvent(display, (long)KeyPressMask, &ev))
+ res = False;
+ else
+ res = True;
+
+ keyrel(display, minkc);
+ return(res);
+}
+
+>>ASSERTION Good B 3
+A call to xname establishes a passive grab that is activated in the future
+by the specified
+.A button
+being logically pressed,
+the modifier keys given by
+.A modifiers
+being logically down,
+no other buttons or modifier keys being logically down and
+the pointer being contained in the
+.A grab_window .
+>>STRATEGY
+Call xname as touch test.
+If extensions available:
+ Warp pointer into grab window.
+ Simulate a button press of button.
+ Verify that pointer is now grabbed.
+ Release grab.
+
+ Set up a grab with xname for a button.
+ Warp pointer into grab window.
+ Simulate press of another button.
+ Simulate the button press.
+ Verify that the pointer is not grabbed.
+ Release grab.
+
+ Set up a grab with xname for a button and modifier keys.
+ Warp pointer to grab window.
+ Simulate modifier key presses.
+ Simulate the button press.
+ Verify that the pointer is grabbed.
+ Release grab.
+
+ Set up a grab with xname for a button and modifier keys.
+ Warp pointer to grab window.
+ Simulate modifier key presses.
+ Simulate extra modifier key presses.
+ Simulate the button press.
+ Verify that the pointer is not grabbed.
+ Release grab.
+>>CODE
+unsigned int mask;
+int onemod;
+
+ if (pgrabbed()) { /* Sanity check */
+ delete("Pointer seemed to be grabbed before doing test");
+ return;
+ }
+
+ XCALL;
+
+ if (noext(1)) {
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ }
+
+ /*
+ * --- Simple case no modifiers.
+ */
+ activate();
+
+ if (pgrabbed()) {
+ CHECK;
+ } else {
+ report("Pointer was not grabbed after button press");
+ FAIL;
+ }
+ relalldev();
+
+ /*
+ * --- Press another button first and then press the grabbed button.
+ * The pointer should not be grabbed.
+ */
+ if (nbuttons() > 1) {
+ button = Button1;
+ XCALL;
+
+ (void) warppointer(display, grab_window, 2, 2);
+ buttonpress(display, button+1);
+ buttonpress(display, button);
+ if (pgrabbed()) {
+ report("Pointer was grabbed although another button was pressed");
+ FAIL;
+ } else
+ CHECK;
+ relalldev();
+ } else {
+ trace("Only one button supported");
+ CHECK;
+ }
+
+ /*
+ * --- Set up a grab with modifiers.
+ */
+ modifiers = wantmods(display, 2);
+ grab_window = defwin(display);
+ trace("Grabbing %s with mods %s", buttonname((int)button),
+ keymaskname((unsigned long)modifiers));
+ XCALL;
+
+ activate();
+ if (pgrabbed()) {
+ CHECK;
+ } else {
+ report("Pointer was not grabbed for %s and %s", buttonname((int)button),
+ keymaskname((unsigned long)modifiers));
+ FAIL;
+ }
+ relalldev();
+
+ /*
+ * --- Set up a grab with modifiers, try to activate the grab with
+ * too many modifiers held down. Grab should not become active.
+ */
+ mask = wantmods(display, 2);
+ for (onemod = 1; onemod; onemod <<= 1) {
+ if (mask & onemod)
+ break;
+ }
+ /* Only assumes one modifier */
+ modifiers = mask & ~onemod;
+ grab_window = defwin(display);
+ XCALL;
+
+ (void) warppointer(display, grab_window, 2, 2);
+ /* Pressing an extra modifier */
+ modpress(display, mask);
+ buttonpress(display, button);
+
+ if (mask && pgrabbed()) {
+ report("Pointer was grabbed when there were extra modifier keys down");
+ FAIL;
+ } else {
+ /*
+ * If mask was zero this means that there are no modifiers KeyCodes
+ * available. This is unlikely and really means that we cannot test
+ * this part of the assertion. However in this case this part of
+ * the assertion has no meaning so say it passes.
+ */
+ CHECK;
+ }
+
+ CHECKPASS(4);
+>>ASSERTION Good B 3
+When the conditions for activating the grab are otherwise satisfied
+and the pointer is already grabbed, then no active grab is established.
+>>STRATEGY
+If extensions are available:
+ Create two windows that do not overlap.
+ Call xname with one of the windows as the confine_to.
+ Activate grab with a button press.
+ Check that pointer is within that window.
+ Call xname with confine_to as the other window.
+ Press button in grab_window.
+ Verify that pointer has not been warped to second confine_to window.
+else
+ Report untested.
+>>CODE
+Window win1, win2;
+Window win;
+
+ if (noext(1))
+ return;
+
+ win1 = defwin(display);
+ win2 = defwin(display);
+
+ confine_to = win1;
+ XCALL;
+
+ activate();
+
+ if (getpointerwin(display, DRW(display)) == confine_to)
+ CHECK;
+ else {
+ delete("Could not set up first grab");
+ return;
+ }
+
+ confine_to = win2;
+ if (nbuttons() > 1)
+ button = Button2;
+ grab_window = defwin(display);
+ XCALL;
+
+ activate();
+
+ win = getpointerwin(display, DRW(display));
+ if (win == win1)
+ CHECK;
+ else if (win == win2) {
+ report("A second grab became active while another was active");
+ FAIL;
+ } else {
+ /* Our test went unexpectedly wrong */
+ delete("Pointer in unexpected window");
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When the conditions for activating the grab are otherwise satisfied
+and the
+.A confine_to
+window is not viewable, then no active grab is established.
+>>STRATEGY
+If extensions are available:
+ Create a confine_to window.
+ Unmap the confine to window.
+ Set up a passive grab.
+ Move pointer to grab window.
+ Attempt to activate grab by simulating a button press.
+ Verify that grab is not activated.
+else
+ Report untested.
+>>CODE
+
+ if (noext(1))
+ return;
+
+ confine_to = defwin(display);
+ XUnmapWindow(display, confine_to);
+
+ XCALL;
+
+ activate();
+
+ /*
+ * Since confine_to is not viewable then the pointer should still
+ * be in grab_window.
+ */
+ if (getpointerwin(display, DRW(display)) != grab_window) {
+ report("Pointer was warped out of the grab_window");
+ FAIL;
+ }
+
+ confine_to = None; /* Unmapped so no use for pgrabbed() */
+ if (!pgrabbed())
+ CHECK;
+ else {
+ report("Pointer was grabbed when confine_to was not viewable");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good B 3
+When the conditions for activating the grab are otherwise satisfied
+and a passive grab on the same button/key combination exists for an
+ancestor of
+.A grab_window ,
+then no active grab is established.
+>>STRATEGY
+If extensions are available:
+ Call xname to place a passive grab.
+ Create a child of the grab_window.
+ Place a passive grab for the same key/button combination on the child.
+ Move pointer into the child.
+ Attempt to activate grab by simulating button press.
+ Verify that pointer is not grabbed by the child window.
+else
+ Report untested.
+>>CODE
+struct area area;
+Window parent;
+XEvent ev;
+
+ if (noext(1))
+ return;
+
+ modifiers = wantmods(display, 2);
+ event_mask = PointerMotionMask;
+ XCALL;
+
+ parent = grab_window;
+ setarea(&area, 10, 10, 20, 24);
+ grab_window = crechild(display, grab_window, &area);
+
+ XCALL;
+
+ activate();
+
+ /*
+ * Provoke an event by moving the pointer on the child window, since
+ * this child grab should not have become active then no events should
+ * be received on the child.
+ * However the assertion does not apply to the parent, so the grab will
+ * have become active on the parent -- therefore we expect the events
+ * to show up on the parent.
+ */
+ (void) warppointer(display, grab_window, 1, 1);
+ (void) warppointer(display, grab_window, 8, 8);
+
+ /*
+ * Since no events are selected on the windows, any event must
+ * be the result of a grab.
+ */
+ if (XCheckWindowEvent(display, grab_window, (long)event_mask, &ev)) {
+ report("Grab was activated on a window which had an ancestor with the same grab");
+ FAIL;
+ } else
+ CHECK;
+
+ if (XCheckWindowEvent(display, parent, (long)event_mask, &ev))
+ CHECK;
+ else {
+ report("Grab was not activated on the parent");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When the conditions for activating the grab are satisfied, then the
+last-pointer-grab time is set to the time at which the button was pressed
+and a
+.S ButtonPress
+event is generated.
+>>STRATEGY
+If extensions are available:
+ Call xname to place passive grab.
+ Enable events on grab window.
+ Move pointer into grab window.
+ Activate grab with simulated device events.
+ Verify that a ButtonPress event is generated.
+else
+ Report untested.
+>>CODE
+XEvent ev;
+XButtonPressedEvent good;
+XWindowAttributes atts;
+int n;
+
+ if (noext(1))
+ return;
+
+ XCALL;
+
+ XSelectInput(display, grab_window, ALLEVENTS);
+
+ (void) warppointer(display, grab_window, ACTPOSX, ACTPOSY);
+ XSync(display, True); /* Discard any events */
+ buttonpress(display, button);
+
+ XGetWindowAttributes(display, grab_window, &atts);
+ n = getevent(display, &ev);
+ if (n)
+ CHECK;
+ else {
+ report("No events received");
+ FAIL;
+ return;
+ }
+
+ defsetevent(good, display, ButtonPress);
+ good.window = grab_window;
+ good.root = DRW(display);
+ good.subwindow = None;
+ good.time = ((XButtonPressedEvent*)&ev)->time;
+ good.x = ACTPOSX;
+ good.y = ACTPOSY;
+ good.x_root = good.x + atts.x + atts.border_width;
+ good.y_root = good.y + atts.y + atts.border_width;
+ good.state = modifiers;
+ good.button = button;
+ good.same_screen = True;
+
+ if (checkevent((XEvent*)&good, &ev) == 0)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When the grab subsequently becomes active and later the logical state of the
+pointer has all buttons released, then the active grab
+is terminated automatically.
+>># independent of the state of the logical modifier keys.
+>>STRATEGY
+If extensions are available:
+ Place passive grab with xname.
+ Activate grab with simulated device events.
+ Simulate pressing some modifier keys.
+ Release the button.
+ Verify that the grab has been released.
+else
+ Report untested.
+>>CODE
+unsigned int mods;
+
+ if (noext(1))
+ return;
+
+ XCALL;
+
+ activate();
+
+ mods = wantmods(display, 3);
+ modpress(display, mods);
+
+ buttonrel(display, button);
+
+ if (pgrabbed()) {
+ report("Grab was not released, when button was released and modifier");
+ report(" keys were down");
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good B 3
+A call to xname overrides all previous passive grabs by the same
+client on the same button/key combinations on the same window.
+>>STRATEGY
+If extensions are available:
+ Place a passive grab with no confine_to window.
+ Place a passive grab as before but with a confine_to window.
+ Move pointer to grab_window and activate grab.
+ Verify that pointer is warped to the confine_to window and thus the second
+ grab overrode the first.
+else
+ Report untested.
+>>CODE
+
+ if (noext(1))
+ return;
+
+ XCALL;
+
+ /* Try to override first grab */
+ confine_to = defwin(display);
+ XCALL;
+
+ activate();
+
+ if (getpointerwin(display, DRW(display)) == confine_to)
+ PASS;
+ else {
+ report("A second passive grab did not override the first");
+ FAIL;
+ }
+
+>>ASSERTION Good B 3
+A
+.A modifiers
+argument of
+.S AnyModifier
+is equivalent to issuing the grab request for all
+possible modifier combinations including no modifiers.
+>>STRATEGY
+If extensions are available:
+ Place passive grab with a modifiers of AnyModifier.
+ Press a bunch of modifier keys.
+ Press button to activate grab.
+ Verify that grab is activated.
+ Release button and keys.
+
+ Press button (no modifiers).
+ Verify that grab is active.
+else
+ Perform touch test.
+ Report untested.
+>>CODE
+unsigned int mods;
+
+ modifiers = AnyModifier;
+ XCALL;
+
+ if (noext(1)) {
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ }
+
+ mods = wantmods(display, 4);
+ modpress(display, mods);
+
+ /*
+ * modifiers was AnyModifier, several modifier keys are held down.
+ */
+ activate();
+ if (pgrabbed())
+ CHECK;
+ else {
+ report("Grab not activated for AnyModifier");
+ report(" Modifiers used %s", keymaskname((unsigned long)mods));
+ FAIL;
+ }
+
+ /* Release all buttons and modifiers */
+ relalldev();
+
+ if (pgrabbed()) {
+ delete("Could not release grab for second part of test");
+ return;
+ } else
+ CHECK;
+
+ buttonpress(display, button);
+ if (pgrabbed())
+ CHECK;
+ else {
+ report("Grab with AnyModifier was not activated by a button press with");
+ report(" no modifiers");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+It is not required that all modifiers specified have currently assigned
+KeyCodes.
+>>STRATEGY
+If extensions are available:
+ Get a modifier mask.
+ Remove the keycode for the modifier from the map.
+ Call xname to set up a passive grab with that modifier.
+ Reset the keycode in the modifier map.
+ Verify that the grab can be activated with the newly set modifier.
+else
+ Report untested.
+>>CODE
+XModifierKeymap *mmap;
+XModifierKeymap *newmap;
+int i;
+
+ if (noext(1))
+ return;
+
+ modifiers = wantmods(display, 1);
+ if (modifiers == 0) {
+ untested("No available modifier keys");
+ return;
+ } else
+ CHECK;
+
+ mmap = XGetModifierMapping(display);
+ if (mmap == NULL) {
+ delete("Could not get modifier map");
+ return;
+ } else
+ CHECK;
+
+ /*
+ * Remove all the modifiers mappings.
+ */
+ newmap = XNewModifiermap(mmap->max_keypermod);
+ for (i = 0; i < newmap->max_keypermod*8; i++)
+ newmap->modifiermap[i] = NoSymbol;
+
+ if (XSetModifierMapping(display, newmap) == MappingSuccess)
+ CHECK;
+ else {
+ delete("Could not remove modifier mapping");
+ return;
+ }
+
+ /*
+ * Now we have a modifier that has no keycode - set up a passive grab.
+ */
+ XCALL;
+
+ /*
+ * Reset the modifier map, and try to activate the grab.
+ */
+ if (XSetModifierMapping(display, mmap) == MappingSuccess)
+ CHECK;
+ else {
+ delete("Could not reset modifier mapping");
+ return;
+ }
+
+ activate();
+
+ if (pgrabbed())
+ CHECK;
+ else {
+ report("Passive grab not set when the modifier did not have a current keycode");
+ FAIL;
+ }
+ CHECKPASS(5);
+>>ASSERTION Good B 3
+A
+.A button
+argument of
+.S AnyButton
+is equivalent to issuing the grab request for all possible buttons.
+>>STRATEGY
+If extensions are available:
+ Set up a passive grab using AnyButton.
+ Move pointer to grab window.
+ Simulate a button press.
+ Verify that pointer is grabbed.
+ Repeat for other buttons.
+else
+ Touch test using AnyButton.
+ Report untested.
+>>CODE
+extern struct valname S_button[];
+extern int NS_button;
+int i;
+
+ button = AnyButton;
+ XCALL;
+
+ if (noext(1)) {
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ (void) warppointer(display, grab_window, 10, 10);
+
+ for (i = 0; i < nbuttons(); i++) {
+ buttonpress(display, (unsigned int)S_button[i].val);
+ if (pgrabbed())
+ CHECK;
+ else {
+ report("Passive grab of AnyButton, not grabbed for %s",
+ S_button[i].name);
+ FAIL;
+ }
+
+ /*
+ * Release this grab and try next button.
+ */
+ relbuttons();
+ if (pgrabbed()) {
+ delete("Could not release grab for next part of test");
+ return;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(1+2*nbuttons());
+>>ASSERTION Good B 3
+It is not required that the specified button currently be assigned
+to a physical button.
+>>STRATEGY
+If extensions are available:
+ Remove a button from the button map.
+ Set a passive grab with that button.
+ Replace the button in the map.
+ Simulate pressing button in window.
+ Verify that grab is activated.
+else
+ Report untested.
+>>CODE
+unsigned char pmap[100];
+int savebutton;
+int n;
+
+ if (noext(1))
+ return;
+
+ n = XGetPointerMapping(display, pmap, (int)sizeof(pmap));
+ savebutton = pmap[0];
+ pmap[0] = 0; /* Disable button1 */
+ if (XSetPointerMapping(display, pmap, n) == MappingSuccess)
+ CHECK;
+ else {
+ delete("Could not change pointer mapping");
+ return;
+ }
+
+ button = Button1;
+ XCALL;
+
+ pmap[0] = savebutton;
+ if (XSetPointerMapping(display, pmap, n) == MappingSuccess)
+ CHECK;
+ else {
+ delete("Could not restore pointer mapping");
+ return;
+ }
+
+ activate();
+ if (pgrabbed())
+ CHECK;
+ else {
+ report("Could not set grab when button was not assigned a physical button");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+When
+.A owner_events
+is
+.S False
+and the grab is now active,
+then all generated pointer events that are selected by the
+.A event_mask
+are reported with respect to the
+.A grab_window .
+>>STRATEGY
+If extensions are available:
+ Set owner_events to False.
+ Set event_mask to select for PointerMotion.
+ Set passive grab.
+ Activate grab by simulated button press.
+ Create a window.
+ Select events on the window.
+ Warp pointer into window.
+ Verify MotionNotify reported to grab_window.
+else
+ Report untested.
+>>CODE
+Window win;
+XEvent ev;
+XMotionEvent *mp;
+
+ if (noext(1))
+ return;
+
+ owner_events = False;
+ event_mask = PointerMotionMask;
+
+ XCALL;
+
+ activate();
+
+ /* Flush any events so far */
+ XSync(display, True);
+
+ win = defwin(display);
+ XSelectInput(display, win, PointerMotionMask);
+ (void) warppointer(display, win, 1, 2);
+ (void) warppointer(display, win, 2, 3);
+
+ if (getevent(display, &ev) == 0) {
+ report("No events received");
+ FAIL;
+ } else
+ CHECK;
+
+ if (ev.type != MotionNotify) {
+ report("Got event %s, expecting MotionNotify", eventname(ev.type));
+ FAIL;
+ } else
+ CHECK;
+
+ mp = (XMotionEvent*)&ev;
+ if (mp->window == grab_window)
+ CHECK;
+ else if (mp->window == win) {
+ report("Event was reported on the window the pointer was in");
+ FAIL;
+ } else {
+ report("Event was not reported on the grab_window");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+When
+.A owner_events
+is
+.S True ,
+the grab is now active
+and a pointer event is generated that would normally be reported to the client,
+then it is reported on the window that it would normally be reported on.
+>>STRATEGY
+If extensions are available:
+ Set owner_events to True.
+ Set passive grab.
+ Activate grab by simulated button press.
+ Create a window.
+ Select events on the window.
+ Warp pointer into window.
+ Verify events are reported on window.
+else
+ Report untested.
+>>CODE
+Window win;
+XEvent ev;
+XMotionEvent *mp;
+
+ if (noext(1))
+ return;
+
+ owner_events = True;
+ event_mask = PointerMotionMask;
+
+ XCALL;
+
+ activate();
+
+ /* Flush any events so far */
+ XSync(display, True);
+
+ win = defwin(display);
+ XSelectInput(display, win, PointerMotionMask);
+ (void) warppointer(display, win, 1, 2);
+ (void) warppointer(display, win, 1, 6);
+
+ if (getevent(display, &ev) == 0) {
+ report("No events received");
+ FAIL;
+ } else
+ CHECK;
+
+ if (ev.type != MotionNotify) {
+ report("Got event %s, expecting MotionNotify", eventname(ev.type));
+ FAIL;
+ } else
+ CHECK;
+
+ mp = (XMotionEvent*)&ev;
+ if (mp->window == win)
+ CHECK;
+ else if (mp->window == grab_window) {
+ report("Event was reported on the grab_window");
+ FAIL;
+ } else {
+ report("Event was not reported on the normal window");
+ FAIL;
+ }
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+When
+.A owner_events
+is
+.S True ,
+the grab is now active,
+a pointer event is generated that would not normally be reported to the client
+and it is selected by
+.A event_mask ,
+then it is reported on the
+.A grab_window .
+>>STRATEGY
+If extensions are available:
+ Set owner_events to True.
+ Set passive grab.
+ Activate grab by simulated button press.
+ Create a window.
+ Warp pointer into window and simulate a button press/release.
+ Verify events are reported to grab_window.
+else
+ Report untested.
+>>CODE
+Window win;
+XEvent ev;
+XMotionEvent *mp;
+
+ if (noext(1))
+ return;
+
+ owner_events = True;
+ event_mask = PointerMotionMask;
+
+ XCALL;
+
+ activate();
+
+ /* Flush any events so far */
+ XSync(display, True);
+
+ win = defwin(display);
+ (void) warppointer(display, win, 1, 2);
+ (void) warppointer(display, win, 4, 12);
+
+ if (getevent(display, &ev) == 0) {
+ report("No events received");
+ FAIL;
+ } else
+ CHECK;
+
+ if (!fail && ev.type != MotionNotify) {
+ report("Got event %s, expecting MotionNotify", eventname(ev.type));
+ FAIL;
+ } else
+ CHECK;
+
+ mp = (XMotionEvent*)&ev;
+ if (!fail) {
+ if (mp->window == grab_window)
+ CHECK;
+ else if (mp->window == win) {
+ report("Event was reported on the window the pointer was in");
+ FAIL;
+ } else {
+ report("Event was not reported on the grab_window");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+When
+.A pointer_mode
+is
+.S GrabModeAsync
+and the grab is now active,
+then pointer event processing continues normally.
+>>STRATEGY
+If extensions are available:
+ Set pointer_mode to GrabModeAsync.
+ Set passive grab.
+ Press button in grab_window to activate grab.
+ Verify that pointer is not frozen.
+else
+ Report untested.
+>>CODE
+
+ if (noext(1))
+ return;
+
+ pointer_mode = GrabModeAsync;
+ XCALL;
+
+ activate();
+
+ if (!pfrozen())
+ CHECK;
+ else {
+ report("Pointer was frozen with GrabModeAsync");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>#REMOVED >>ASSERTION Good B 3
+>>#COMMENT:
+>># This assertion was removed April 1992 because MIT reviewed the assertion
+>># again, and decided it did not make sense (bug report 0236). We agree.
+>># Dave Cater, 27/4/92
+>>#REMOVED When
+>>#REMOVED .A pointer_mode
+>>#REMOVED is
+>>#REMOVED .S GrabModeAsync ,
+>>#REMOVED the grab is now active
+>>#REMOVED and the pointer is currently frozen by this client, then
+>>#REMOVED the processing of events for the pointer is resumed.
+>>#REMOVED >>STRATEGY
+>>#REMOVED If extensions are available:
+>>#REMOVED Freeze pointer by grabbing keyboard.
+>>#REMOVED Check pointer is frozen.
+>>#REMOVED Set pointer_mode to GrabModeAsync.
+>>#REMOVED Set and activate grab.
+>>#REMOVED Verify that pointer is not frozen.
+>>#REMOVED else
+>>#REMOVED Report untested.
+>>#REMOVED >>CODE
+>>#REMOVED
+>>#REMOVED if (noext(1))
+>>#REMOVED return;
+>>#REMOVED
+>>#REMOVED /* Freeze pointer by grabbing keyboard */
+>>#REMOVED XGrabKeyboard(display, grab_window, False, GrabModeSync, GrabModeAsync, CurrentTime);
+>>#REMOVED if (pfrozen())
+>>#REMOVED CHECK;
+>>#REMOVED else {
+>>#REMOVED delete("Could not freeze pointer prior to test");
+>>#REMOVED return;
+>>#REMOVED }
+>>#REMOVED
+>>#REMOVED pointer_mode = GrabModeAsync;
+>>#REMOVED XCALL;
+>>#REMOVED
+>>#REMOVED activate();
+>>#REMOVED
+>>#REMOVED if (pfrozen()) {
+>>#REMOVED report("Pointer remained frozen after a grab with GrabModeAsync");
+>>#REMOVED FAIL;
+>>#REMOVED } else
+>>#REMOVED CHECK;
+>>#REMOVED
+>>#REMOVED CHECKPASS(2);
+>>ASSERTION Good B 3
+When
+.A pointer_mode
+is
+.S GrabModeSync
+and the grab is now active,
+then the state of the pointer, as seen by client applications,
+appears to freeze, and no further pointer events are generated
+until the grabbing client calls
+.F XAllowEvents
+or until the grab is released.
+>>STRATEGY
+If extensions are available:
+ Set pointer_mode to GrabModeSync.
+ Set grab with xname and activate.
+ Verify that pointer is frozen.
+ Allow events with XAllowEvents().
+ Verify that pointer is not frozen.
+ Release the grab and restore the device state.
+ Set grab with xname and activate.
+ Verify that pointer is frozen.
+ Release grab.
+ Verify that pointer is not frozen.
+else
+ Report untested.
+>>CODE
+
+ if (noext(1))
+ return;
+
+ pointer_mode = GrabModeSync;
+ XCALL;
+
+ activate();
+
+ if (pfrozen())
+ CHECK;
+ else {
+ report("Pointer not frozen when pointer mode was GrabModeSync after first activate");
+ FAIL;
+ }
+
+ XAllowEvents(display, AsyncPointer, CurrentTime);
+ XSync(display,False);
+
+ if (pfrozen()) {
+ report("Pointer was still frozen after XAllowEvents()");
+ FAIL;
+ } else
+ CHECK;
+
+ relalldev();
+ XUngrabPointer(display, CurrentTime);
+ XUngrabButton(display, AnyButton, AnyModifier, grab_window);
+
+ pointer_mode = GrabModeSync;
+ XCALL;
+
+ activate();
+
+ if (pfrozen())
+ CHECK;
+ else {
+ report("Pointer not frozen when pointer mode was GrabModeSync after second activate");
+ FAIL;
+ }
+
+ XUngrabPointer(display, CurrentTime);
+ XSync(display,False);
+
+ if (pfrozen()) {
+ report("Pointer was still frozen after grab released");
+ FAIL;
+ } else
+ CHECK;
+
+ XUngrabButton(display, AnyButton, AnyModifier, grab_window);
+
+ CHECKPASS(4);
+>>ASSERTION Good B 3
+When the pointer is frozen, then the
+actual pointer changes are not lost and are processed after the grab
+is released or the client calls
+.F XAllowEvents .
+>>STRATEGY
+If extensions are available:
+ Set pointer_mode to GrabModeSync.
+ Set grab with xname and activate.
+ Check that no pointer events are generated.
+ Release grab.
+ Verify that events are now received.
+ Release the grab and restore the device state.
+ Set grab with xname and activate.
+ Check that no pointer events are generated.
+ Allow events with XAllowEvents().
+ Verify that events are now received.
+else
+ Report untested.
+>>CODE
+XEvent ev;
+
+ if (noext(1))
+ return;
+
+ XSelectInput(display, grab_window, event_mask);
+ pointer_mode = GrabModeSync;
+ XCALL;
+
+ activate();
+
+ XSync(display, True); /* Flush events */
+ (void) warppointer(display, grab_window, ACTPOSX+3, ACTPOSY+4);
+ if (XCheckMaskEvent(display, (long)event_mask, &ev)) {
+ delete("Pointer event was received while pointer was frozen");
+ trace("ev.type = %s", eventname(ev.type));
+ return;
+ } else
+ CHECK;
+
+ XUngrabPointer(display, CurrentTime);
+ XSync(display, False);
+
+ if (XCheckMaskEvent(display, (long)event_mask, &ev)) {
+ if( ev.type == MotionNotify) {
+ CHECK;
+ } else {
+ report("Unexpected event (%s)was received",
+ eventname(ev.type));
+ FAIL;
+ }
+ } else {
+ if(pgrabbed())
+ report("Grab was not released.");
+ else
+ report("Pointer event was not saved while pointer was frozen");
+ FAIL;
+ }
+
+ relalldev();
+ XUngrabButton(display, AnyButton, AnyModifier, grab_window);
+
+ pointer_mode = GrabModeSync;
+ XCALL;
+
+ activate();
+
+ XSync(display, True);
+ (void) warppointer(display, grab_window, ACTPOSX+3, ACTPOSY+4);
+ if (XCheckMaskEvent(display, (long)event_mask, &ev)) {
+ delete("Pointer event was received while pointer was frozen");
+ trace("ev.type = %s", eventname(ev.type));
+ return;
+ } else
+ CHECK;
+
+ XAllowEvents(display, AsyncPointer, CurrentTime);
+ XSync(display, False);
+
+ if (XCheckMaskEvent(display, (long)event_mask, &ev)) {
+ if( ev.type == MotionNotify) {
+ CHECK;
+ } else {
+ report("Unexpected event (%s) was received",
+ eventname(ev.type));
+ FAIL;
+ }
+ } else {
+ report("Pointer event was not saved while pointer was frozen");
+ report(" or grab was not released by a call to XAllowEvents()");
+ FAIL;
+ }
+
+ XUngrabButton(display, AnyButton, AnyModifier, grab_window);
+
+ CHECKPASS(4);
+>>ASSERTION Good B 3
+When
+.A keyboard_mode
+is
+.S GrabModeAsync ,
+then keyboard event processing is unaffected by activation of the grab.
+>>STRATEGY
+If extensions are available:
+ Set keyboard_mode to GrabModeAsync.
+ Set grab with xname and activate.
+ Verify that keyboard is not frozen.
+else
+ Report untested.
+>>CODE
+
+ if (noext(1))
+ return;
+
+ keyboard_mode = GrabModeAsync;
+ XCALL;
+ activate();
+
+ if (kfrozen()) {
+ report("Keyboard was frozen when keyboard_mode was GrabModeAsync");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good B 3
+When
+.A keyboard_mode
+is
+.S GrabModeSync
+and the grab is now active,
+then the state of the keyboard, as seen by
+client applications,
+appears to freeze, and no further keyboard events are generated
+until the grabbing client calls
+.S XAllowEvents
+or until the grab is released.
+>>STRATEGY
+If extensions are available:
+ Set keyboard_mode to GrabModeSync.
+ Set grab with xname and activate.
+ Verify that keyboard is frozen.
+ Allow events with XAllowEvents().
+ Verify that keyboard is not frozen.
+ Release the grab and restore the device state.
+ Set grab with xname and activate.
+ Verify that keyboard is frozen.
+ Release grab.
+ Verify that keyboard is not frozen.
+else
+ Report untested.
+>>CODE
+
+ if (noext(1))
+ return;
+
+ keyboard_mode = GrabModeSync;
+ XCALL;
+ activate();
+
+ if (kfrozen())
+ CHECK;
+ else {
+ report("Keyboard was not frozen when keyboard_mode was GrabModeSync");
+ FAIL;
+ }
+
+ XAllowEvents(display, AsyncKeyboard, CurrentTime);
+ XSync(display, False);
+
+ if(kfrozen()) {
+ report("Keyboard still frozen after XAllowEvents()");
+ FAIL;
+ } else
+ CHECK;
+
+ relbuttons();
+ XUngrabPointer(display, CurrentTime);
+ XUngrabButton(display, AnyButton, AnyModifier, grab_window);
+
+ keyboard_mode = GrabModeSync;
+ XCALL;
+ activate();
+
+ if (kfrozen())
+ CHECK;
+ else {
+ report("Keyboard was not frozen when keyboard_mode was GrabModeSync");
+ FAIL;
+ }
+
+ buttonrel(display, button);
+
+ if (kfrozen()) {
+ report("Keyboard not thawed after a button grab released");
+ FAIL;
+ } else
+ CHECK;
+
+ XUngrabButton(display, AnyButton, AnyModifier, grab_window);
+
+ CHECKPASS(4);
+>>ASSERTION Good B 3
+When the pointer is frozen, then the
+>># Shouldn't this be 'When the keyboard is frozen,...'
+actual keyboard changes are not lost and are processed after the grab
+is released or the client calls
+.F XAllowEvents .
+>>STRATEGY
+If extensions are available:
+ Enable key press events.
+ Set keyboard_mode to GrabModeSync.
+ Set grab with xname and activate.
+ Press key.
+ Check that no pointer events are generated.
+ Allow events with XAllowEvents().
+ Verify that events are now received.
+ Release the grab and restore the device state.
+ Set grab with xname and activate.
+ Press key.
+ Check that no pointer events are generated.
+ Release grab.
+ Verify that events are now received.
+else
+ Report untested.
+>>CODE
+int minkc, maxkc;
+XEvent ev;
+
+ if (noext(1))
+ return;
+
+ XSelectInput(display, grab_window, KeyPressMask);
+ keyboard_mode = GrabModeSync;
+ XCALL;
+
+ activate();
+ XSync(display, True); /* Flush events */
+
+ XDisplayKeycodes(display, &minkc, &maxkc);
+ keypress(display, minkc);
+ keyrel(display, minkc);
+
+ if (XCheckMaskEvent(display, (long)KeyPressMask, &ev)) {
+ delete("KeyPress event was received while pointer was frozen");
+ return;
+ } else
+ CHECK;
+
+ XUngrabPointer(display, CurrentTime);
+ XSync(display,False);
+
+ if (XCheckMaskEvent(display, (long)KeyPressMask, &ev))
+ CHECK;
+ else {
+ if(pgrabbed()) {
+ report("Grab was not released");
+ } else {
+ report("KeyPress event was not saved while keyboard was frozen");
+ }
+ FAIL;
+ }
+
+ relalldev();
+ XUngrabButton(display, AnyButton, AnyModifier, grab_window);
+
+ pointer_mode = GrabModeSync;
+ XCALL;
+
+ activate();
+
+ XSync(display, True);
+ keypress(display, minkc);
+ keyrel(display, minkc);
+
+ if (XCheckMaskEvent(display, (long)KeyPressMask, &ev)) {
+ delete("KeyPress event was received while pointer was frozen");
+ return;
+ } else
+ CHECK;
+
+ XAllowEvents(display, AsyncKeyboard, CurrentTime);
+ XSync(display, False);
+
+ if (XCheckMaskEvent(display, (long)KeyPressMask, &ev))
+ CHECK;
+ else {
+ if(pgrabbed()) {
+ report("Grab was not released");
+ } else {
+ report("KeyPress event was not saved while keyboard was frozen");
+ }
+ FAIL;
+ }
+
+ CHECKPASS(4);
+>>ASSERTION Good B 3
+When
+.A cursor
+is a valid cursor
+and the grab is now active,
+then it is displayed regardless of which window the pointer is in.
+>>STRATEGY
+If extensions available:
+ Make a tree of windows rooted at grab_window, all with default cursor.
+ Make a non-overlapping sibling of grab_window, the cursor window.
+ Set that window's cursor to be a good, non default, cursor.
+ Call xname with cursor = the good cursor.
+ Activate grab by simulating button press.
+ Warp pointer to all windows in the tree, root and cursor window, and
+ validate that current cursor is equal to that of cursor window
+ using extension.
+else:
+ Perform touch test.
+>>EXTERN
+static char *WindowTree[]= {
+ ".",
+ "child1 . (10,10) 30x30",
+ "child2 . (50,50) 30x30",
+ "grandchild child2 (2,2) 20x20",
+};
+
+static int NWindowTree = NELEM(WindowTree);
+
+>>CODE
+Cursor goodcur;
+Window parent,curwin;
+Window windows[7]; /* root + 5 above + None stopper */
+Window root;
+Window *wp;
+struct buildtree *tree;
+char *wname;
+
+ if (!noext(1)) {
+
+ goodcur = makecur(display);
+ wp = windows;
+ *wp++ = root = DRW(display);
+ *wp++ = parent = grab_window;
+ tree = buildtree(display, parent, WindowTree, NWindowTree);
+ *wp++ = btntow(tree, "child1");
+ *wp++ = btntow(tree, "child2");
+ *wp++ = btntow(tree, "grandchild");
+ *wp++ = curwin = defwin(display);
+ *wp = None;
+ XDefineCursor(display, curwin, goodcur);
+ (void)warppointer(display, curwin, 2, 2);
+ if (spriteiswin(display, parent)) {
+ delete("Require XT_FONTCURSOR_GOOD to be other than default.");
+ return;
+ } else
+ CHECK;
+
+ cursor = goodcur;
+ XCALL;
+ activate();
+
+ for(wp=windows; *wp != None; wp++) { /* around 6 times */
+ (void)warppointer(display, *wp, 0,0);
+ /* use 0,0 as window making stuff keeps away from there on
+ * root. All of our tree windows are not at 0,0 either
+ */
+ if (spriteiswin(display, curwin)) /* true at least once! */
+ CHECK;
+ else {
+ report("Window %s did not have specified cursor as displayed cursor.",
+ (wname=btwton(tree,*wp)) ? wname :
+ ( *wp == root ? "ROOT" : "<Unknown>" ));
+ FAIL;
+ }
+ }
+
+ CHECKPASS(1+6);
+
+ } else {
+
+ cursor = makecur(display);
+
+ XCALL;
+ CHECK;
+
+ CHECKUNTESTED(1);
+ }
+
+>>ASSERTION Good B 3
+When
+.A cursor
+is
+.S None
+and the grab is now active,
+then the normal cursor is displayed for the
+.A grab_window
+and its subwindows and the
+.A grab_window
+cursor is displayed for all other windows.
+>>STRATEGY
+If extensions available:
+ Make a tree of windows rooted at grab_window (parent), all with default cursor.
+ Set grab_window to be one of its own children (child2), which has its own
+ child (grandchild).
+ Set grab_window's cursor to be a good, non default, cursor.
+ Set grab_window's child's (grandchild) cursor to be yet another good,
+ non default, cursor.
+ Call xname with cursor = None.
+ Activate grab by simulating button press.
+ Warp pointer to all windows in the tree, plus root, and
+ validate that current cursor is equal to that of grab_window & grandchild,
+ respectively, when in the corresponding windows, but equal to that of
+ grab_window otherwise, using extension.
+else
+ Report untested.
+>>CODE
+Cursor goodcur1, goodcur2;
+Window parent,gchild;
+Window windows[6]; /* root + 4 above + None stopper */
+Window root;
+Window *wp;
+struct buildtree *tree;
+char *wname;
+
+ if (noext(0))
+ return;
+
+ goodcur1 = makecur(display);
+ goodcur2 = makecur2(display);
+ if (isdeleted()) {
+ report("Could not make cursors. Check that XT_FONTCURSOR_GOOD");
+ report("and XT_FONTCURSOR_GOOD+2 both are good glyphs in cursor font.");
+ return;
+ }
+ wp = windows;
+ *wp++ = root = DRW(display);
+ *wp++ = parent = grab_window;
+ tree = buildtree(display, parent, WindowTree, NWindowTree);
+ *wp++ = btntow(tree, "child1");
+ *wp++ = grab_window = btntow(tree, "child2");
+ *wp++ = gchild = btntow(tree, "grandchild");
+ *wp = None;
+ XDefineCursor(display, grab_window, goodcur1);
+ XDefineCursor(display, gchild, goodcur2);
+
+ (void)warppointer(display, gchild, 2, 2);
+ if (spriteiswin(display, grab_window)) {
+ delete("Require glyphs XT_FONTCURSOR_GOOD and XT_FONTCURSOR_GOOD+2 to differ in cursor font.");
+ return;
+ } else
+ CHECK;
+
+ cursor = None;
+ XCALL;
+ activate();
+
+ for(wp=windows; *wp != None; wp++) { /* around 5 times */
+ (void)warppointer(display, *wp, 0,0);
+ /* use 0,0 as window making stuff keeps away from there on
+ * root. All of our tree windows are not at 0,0 either
+ */
+ if (!(wname = btwton(tree,*wp)))
+ wname = (*wp == root) ? "ROOT" : "<Unknown>";
+ if (*wp == grab_window || *wp == gchild) {
+ if (spriteiswin(display, *wp))
+ CHECK;
+ else {
+ report("Window %s did not have cursor as its normal cursor", wname);
+ report("\twhen in grab_window or descendent.");
+ FAIL;
+ }
+ } else {
+ if (spriteiswin(display, grab_window))
+ CHECK;
+ else {
+ report("Window %s did not have cursor as grab_window's cursor", wname);
+ report("\twhen not in grab_window or descendent.");
+ FAIL;
+ }
+ }
+ }
+
+ CHECKPASS(1+5);
+
+>>ASSERTION Good B 3
+When
+.A confine_to
+is specified
+and the grab is now active, then the pointer is confined to that window.
+>>STRATEGY
+If extensions are available:
+ Create a confine_to window.
+ Set up grab with xname.
+ Active grab.
+ Verify that pointer is within confine_to window.
+else
+ Report untested.
+>>CODE
+
+ if (noext(1))
+ return;
+
+ confine_to = defwin(display);
+ XCALL;
+
+ activate();
+
+ if (getpointerwin(display, DRW(display)) == confine_to)
+ CHECK;
+ else {
+ report("Pointer was not within the confine_to window");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good B 3
+When the pointer is not initially contained in the
+.A confine_to
+window,
+then it is warped automatically to the closest edge
+just before the grab activates and enter and leave events
+are generated.
+>>STRATEGY
+If extensions are available:
+ Create confine_to window.
+ Enable events on the grab_window and the confine_to windows.
+ Set owner_events to True.
+ Set and activate button grab.
+ Verify that a leave event is generated on the window the pointer was in.
+ Verify that an enter event is generated on the confine_to window.
+else
+ Report untested.
+>>CODE
+XEvent ev;
+XCrossingEvent *cp;
+XEnterWindowEvent entergood;
+XLeaveWindowEvent leavegood;
+
+ if (noext(1))
+ return;
+
+ confine_to = defwin(display);
+
+ XSelectInput(display, confine_to, EnterWindowMask|LeaveWindowMask);
+ XSelectInput(display, grab_window, EnterWindowMask|LeaveWindowMask);
+ owner_events = True;
+ XCALL;
+
+ (void) warppointer(display, grab_window, ACTPOSX, ACTPOSY);
+ XSync(display, True); /* Discard events so far */
+ buttonpress(display, button);
+
+ defsetevent(entergood, display, EnterNotify);
+ entergood.window = confine_to;
+ entergood.root = DRW(display);
+ entergood.subwindow = None;
+ entergood.time = 0;
+ entergood.mode = NotifyNormal;
+ entergood.detail = NotifyNonlinear;
+ entergood.same_screen = True;
+ entergood.focus = False;
+ entergood.state = Button1Mask;
+
+ defsetevent(leavegood, display, LeaveNotify);
+ leavegood.window = grab_window;
+ leavegood.root = DRW(display);
+ leavegood.subwindow = None;
+ leavegood.time = 0;
+ leavegood.mode = NotifyNormal;
+ leavegood.detail = NotifyNonlinear;
+ leavegood.same_screen = True;
+ leavegood.focus = False;
+ leavegood.state = Button1Mask;
+
+ /* Event of the pointer leaving the grab_window */
+ if (getevent(display, &ev) == 0 || ev.type != LeaveNotify) {
+ report("No leave notify event for grab_window received");
+ FAIL;
+ } else
+ CHECK;
+
+ cp = (XCrossingEvent*)&ev;
+ /* Set the fields that we can't conveniently check */
+ leavegood.time = cp->time;
+ leavegood.x = cp->x;
+ leavegood.y = cp->y;
+ leavegood.x_root = cp->x_root;
+ leavegood.y_root = cp->y_root;
+ leavegood.focus = cp->focus;
+ if (checkevent((XEvent*)&leavegood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ /* Now the Enter into the confine_to window */
+ if (getevent(display, &ev) == 0 || ev.type != EnterNotify) {
+ report("No enter notify event for confine_to received");
+ FAIL;
+ } else
+ CHECK;
+
+ cp = (XCrossingEvent*)&ev;
+ /* Set the fields that we can't conveniently check */
+ entergood.time = cp->time;
+ entergood.x = cp->x;
+ entergood.y = cp->y;
+ entergood.x_root = cp->x_root;
+ entergood.y_root = cp->y_root;
+ entergood.focus = cp->focus;
+ if (checkevent((XEvent*)&entergood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(4);
+>>ASSERTION Good B 3
+When the
+.A confine_to
+window is subsequently reconfigured
+and the grab is now active,
+then the pointer is warped automatically to keep it within the window.
+>>STRATEGY
+If extensions are available:
+ Create confine_to window.
+ Set up and activate button grab,
+ Move confine_to so that it does not overlap with it's previous position.
+ Verify that the pointer has been warped to the new position.
+else
+ Report untested.
+>>CODE
+struct area area;
+
+ if (noext(1))
+ return;
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ /*
+ * This time make confine_to a child of grab_window, also make it small
+ * so that moving it will force the pointer to move.
+ */
+ setarea(&area, 1, 1, 2, 2);
+ confine_to = crechild(display, grab_window, &area);
+
+ XCALL;
+ activate();
+
+ XMoveWindow(display, confine_to, 20, 20);
+ if (isdeleted())
+ return;
+
+ if (getpointerwin(display, grab_window) == confine_to)
+ CHECK;
+ else {
+ report("Pointer was not kept within confine_to when confine_to was moved");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good D 3
+If multiple screens are supported:
+It is valid for the
+.A confine_to
+window to be on a different screen to the
+.A grab_window .
+>>STRATEGY
+If only one screen
+ UNSUPPORTED.
+If extensions are available:
+ Create grab_window on default screen.
+ Create confine_to window on alternate screen.
+ Set up and activate grab.
+ Verify that pointer is warped to other screen.
+else
+ Touch test with grab_window and confine_to on different screens.
+>>CODE
+Window root;
+Window wtmp;
+int itmp;
+unsigned uitmp;
+Bool s;
+
+ if (config.alt_screen < 0) {
+ unsupported("Only one screen supported");
+ return;
+ }
+
+ confine_to = defdraw(display, VI_ALT_WIN);
+
+ XCALL;
+
+ if (noext(1)) {
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ }
+
+ activate();
+
+ /*
+ * Query Pointer returns false if the pointer is not the same screen as
+ * the given window. Check with both windows, mainly as a sanity check
+ * against them being on the same screen.
+ */
+ s = XQueryPointer(display, confine_to, &root, &wtmp, &itmp, &itmp,
+ &itmp, &itmp , &uitmp);
+ if (s)
+ CHECK;
+ else {
+ report("Pointer was not warped to confine_to window on other screen");
+ FAIL;
+ }
+
+ s = XQueryPointer(display, grab_window, &root, &wtmp, &itmp, &itmp,
+ &itmp, &itmp , &uitmp);
+ if (s) {
+ report("Pointer was not warped to confine_to window on other screen");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good B 3
+When the button/key combination is pressed and the
+grab becomes active, then the last-pointer-grab
+time is set to the time the button was pressed.
+>>STRATEGY
+If extensions available:
+ Call xname to set up passive grab.
+ Press button.
+ Get the ButtonPress event.
+ Save the time field in the event.
+ Release grab by releasing button.
+ Attempt to grab pointer using the saved time - 1.
+ Verify that pointer is not grabbed.
+ Attempt to grab pointer using the saved time.
+ Verify that pointer is grabbed.
+>>CODE
+XEvent ev;
+Time savtime;
+
+ if (noext(1))
+ return;
+
+ XCALL;
+ activate();
+
+ if (getevent(display, &ev) == 0) {
+ delete("Could not get button event");
+ return;
+ } else
+ CHECK;
+
+ if (ev.type != ButtonPress) {
+ delete("Did not get ButtonPressEvent");
+ return;
+ } else
+ CHECK;
+
+ savtime = ((XButtonPressedEvent*)&ev)->time;
+
+ relbuttons();
+ if (pgrabbed()) {
+ delete("Could not release grab");
+ return;
+ } else
+ CHECK;
+
+ XGrabPointer(display, grab_window, False, 0, GrabModeAsync, GrabModeAsync,
+ None, None, savtime-1);
+
+ if (pgrabbed()) {
+ report("Pointer was grabbed when time was earlier than the");
+ report(" pointer-last-grab time");
+ FAIL;
+ } else
+ CHECK;
+
+ XGrabPointer(display, grab_window, False, 0, GrabModeAsync, GrabModeAsync,
+ None, None, savtime);
+ if (pgrabbed())
+ CHECK;
+ else {
+ report("Pointer was not grabbed when time was equal to the");
+ report(" pointer-last-grab time");
+ FAIL;
+ }
+
+ CHECKPASS(5);
+
+>>ASSERTION Good B 3
+A call to xname has no effect on an active grab.
+>>STRATEGY
+If extensions available:
+ Create window.
+ Grab pointer on this window.
+ Set up passive grab on another window.
+ Verify that pointer is still grabbed on first window.
+>>CODE
+Window win;
+XMotionEvent *mep;
+XEvent ev;
+
+ if (noext(1))
+ return;
+
+ win = defwin(display);
+ XGrabPointer(display, win, False, PointerMotionMask,
+ GrabModeAsync, GrabModeAsync, None, None, CurrentTime);
+
+ /* This sets the grab on grab_window */
+ XCALL;
+
+ (void) warppointer(display, grab_window, 1, 1);
+ (void) warppointer(display, grab_window, 3, 3);
+
+ if (getevent(display, &ev) < 1) {
+ delete("Could not get motion event");
+ return;
+ } else
+ CHECK;
+
+ mep = (XMotionEvent*)&ev;
+ if (mep->window == win)
+ CHECK;
+ else if (!fail) {
+ report("A call to %s had an effect on an active grab", TestName);
+ report(" A new grab window was set");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When the
+.A grab_window
+or
+.A confine_to
+window becomes not viewable during an active pointer grab,
+then the grab is released.
+>>STRATEGY
+If extensions are available:
+ Create grab and confine_to windows.
+ Set up passive grab with xname.
+
+ Activate grab with a button press.
+ Unmap grab_window.
+ Verify that pointer is not grabbed.
+
+ Re-map grab_window.
+ Activate grab with a button press.
+ Unmap confine_to window.
+ Verify that pointer is not grabbed.
+else
+ Report untested.
+>>CODE
+Display *client2;
+Window win;
+XEvent ev;
+
+ if (noext(1))
+ return;
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ client2 = opendisplay();
+ win = defwin(display);
+ XSelectInput(client2, win, PointerMotionMask|EnterWindowMask);
+ XSync(client2, True);
+
+ confine_to = defwin(display);
+ XCALL;
+
+ activate();
+
+ XUnmapWindow(display, grab_window);
+
+ /*
+ * Warp into win and force all events to be received.
+ * If the grab has been released then this will generate
+ * an event for client2.
+ */
+ (void) warppointer(display, win, 0, 0);
+ XSync(client2, False);
+
+ if (XCheckWindowEvent(client2, win, (long)PointerMotionMask|EnterWindowMask, &ev))
+ CHECK;
+ else {
+ report("Grab was not released when grab_window was unmapped");
+ FAIL;
+ }
+
+ /* Clear any extra events */
+ XSync(client2, True);
+
+ /* Now repeat for confine_to window. */
+ XMapWindow(display, grab_window);
+
+ activate();
+
+ XUnmapWindow(display, confine_to);
+
+ /* Warp to win and check for events on client2 */
+ (void) warppointer(display, win, 0, 0);
+ XSync(client2, False);
+
+ if (XCheckWindowEvent(client2, win, (long)PointerMotionMask|EnterWindowMask, &ev))
+ CHECK;
+ else {
+ report("Grab was not released when confine_to window was unmapped");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When window reconfiguration causes the
+.A confine_to
+window to lie completely
+outside the boundaries of the root window during an active pointer grab, then
+the grab is released.
+>>STRATEGY
+If extensions are available:
+ Create grab and confine_to windows.
+ Set up and activate grab.
+ Move confine_to window off the root window.
+ Verify that grab is released.
+else
+ Report untested.
+>>CODE
+Display *client2;
+Window win;
+XEvent ev;
+
+ if (noext(1))
+ return;
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ client2 = opendisplay();
+
+ confine_to = defwin(display);
+ win = defwin(display);
+
+ XSelectInput(client2, win, PointerMotionMask|EnterWindowMask);
+ XSync(client2, True);
+
+ XCALL;
+ activate();
+
+ XMoveWindow(display, confine_to, -9000, -9000);
+ (void) warppointer(display, win, 0, 0);
+ XSync(client2, False);
+
+ if (isdeleted())
+ return;
+
+ if (XCheckWindowEvent(client2, win, (long)PointerMotionMask|EnterWindowMask, &ev))
+ CHECK;
+ else {
+ report("Grab was not released when the confine_to window was placed beyond root window");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+.ER Access grab
+>>STRATEGY
+Grab a button.
+Create new client, client1.
+Attempt to grab same button with client1.
+Verify that a BadAccess error occurs.
+>>CODE BadAccess
+Display *client1;
+
+ XGrabButton(display, button, modifiers, grab_window, owner_events, event_mask, pointer_mode, keyboard_mode, confine_to, cursor);
+
+ if ((client1 = opendisplay()) == 0) {
+ delete("Could not open display");
+ return;
+ }
+
+ display = client1;
+ XCALL;
+
+ if (geterr() == BadAccess)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+.ER BadCursor
+>>ASSERTION Bad A
+.ER BadValue event_mask mask ButtonPressMask ButtonReleaseMask EnterWindowMask LeaveWindowMask PointerMotionMask PointerMotionHintMask Button1MotionMask Button2MotionMask Button3MotionMask Button4MotionMask Button5MotionMask ButtonMotionMask KeymapStateMask
+>>ASSERTION Bad A
+.ER BadValue modifiers mask ShiftMask LockMask ControlMask Mod1Mask Mod2Mask Mod3Mask Mod4Mask Mod5Mask AnyModifier
+>>ASSERTION Bad A
+.ER BadValue pointer_mode GrabModeSync GrabModeAsync
+>>ASSERTION Bad A
+.ER BadValue keyboard_mode GrabModeSync GrabModeAsync
+>>ASSERTION Bad A
+.ER BadValue owner_events True False
+>>ASSERTION Bad A
+>># It would be much preferable to use the automatic code.
+>># .ER BadWindow
+When the
+.A grab_window
+argument does not name a valid Window,
+then a
+.S BadWindow
+error occurs.
+>>STRATEGY
+Set grab_window to invalid window.
+Call xname.
+Verify that a BadWindow error occurs.
+>>CODE BadWindow
+
+ seterrdef();
+
+ grab_window = badwin(display);
+
+ XCALL;
+
+ if (geterr() == BadWindow)
+ PASS;
+ else
+ FAIL;
+
+>>ASSERTION Bad A
+When the
+.A confine_to
+argument does not name a valid Window or
+.S None ,
+then a
+.S BadWindow
+error occurs.
+>>STRATEGY
+Set confine_to to invalid window.
+Call xname.
+Verify that a BadWindow error occurs.
+>>CODE BadWindow
+
+ seterrdef();
+
+ confine_to = badwin(display);
+
+ XCALL;
+
+ if (geterr() == BadWindow)
+ PASS;
+ else
+ FAIL;
+
diff --git a/xc/test/xsuite/xtest/tset/CH07/grbky/grbky.m b/xc/test/xsuite/xtest/tset/CH07/grbky/grbky.m
new file mode 100644
index 000000000..2975bf6b3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/grbky/grbky.m
@@ -0,0 +1,1202 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGrabKey CH07
+void
+
+Display *display = Dsp;
+int keycode = grab_key_code(display); /* always min. k.c. */
+unsigned int modifiers = 0;
+Window grab_window = defwin(display);
+Bool owner_events = False;
+int pointer_mode = GrabModeAsync;
+int keyboard_mode = GrabModeAsync;
+>>SET startup focusstartup
+>>SET cleanup focuscleanup
+>>EXTERN
+
+/*
+ * as unwarppointer but don't free ptr as this done at tpcleanup time.
+ */
+static void
+my_unwarppointer(display, ptr)
+Display *display;
+PointerPlace *ptr;
+{
+ XWarpPointer(display, None, ptr->oroot, 0, 0, 0, 0, ptr->ox, ptr->oy);
+}
+
+
+static int minkc = -1,maxkc = -1;
+
+static void set_kcs(dpy)
+ Display *dpy;
+{
+ int kmin, kmax;
+
+ if (minkc >= 8)
+ return;
+ XDisplayKeycodes(dpy, &kmin, &kmax);
+ if (kmin < 8)
+ kmin = 8; /* For buggy servers */
+ if (kmin >= kmax) {
+ delete("Could not find two distinct key codes\n");
+ delete("\t(min=%d, max=%d)\n", kmin, kmax);
+ return;
+ }
+ minkc = kmin;
+ maxkc = kmax;
+}
+
+static int grab_key_code(dpy)
+ Display *dpy;
+{
+ set_kcs(dpy);
+ return minkc;
+}
+
+static int nongrab_key_code(dpy)
+ Display *dpy;
+{
+ set_kcs(dpy);
+ return (keycode == maxkc) ? minkc : maxkc;
+}
+
+#define ACTPOSX 3
+#define ACTPOSY 6
+/*
+ * Warp to the grab_window and press the keys in modifiers and then press
+ * the keycode in the 'keycode' arg.
+ * (This activates the previously set up grab if the arg variables
+ * have not been changed.)
+ */
+static void
+activate_press()
+{
+ XSetInputFocus(display, grab_window, RevertToPointerRoot, CurrentTime);
+ if (modifiers)
+ modpress(display, modifiers);
+ keypress(display, keycode);
+}
+
+/*
+ * As above, but release (all) keys.
+ */
+static void
+activate_release()
+{
+ XSetInputFocus(display, grab_window, RevertToPointerRoot, CurrentTime);
+ keyrel(display, keycode);
+ if (modifiers)
+ modrel(display, modifiers);
+}
+
+/*
+ * Returns True if the keyboard is grabbed. This is not a general purpose
+ * routine since it knows about the Grab Key args.
+ * When the keyboard is grabbed then keyboard events are not reported to
+ * non-grabbing clients. The grab client gets all keyboard events with
+ * event window depending on owner_events and clients event mask.
+ */
+static
+kgrabbed_check(client2)
+Display *client2;
+{
+XEvent ev;
+int saved_keyc = keycode;
+
+ XSelectInput(client2, grab_window, KeyPressMask|KeyReleaseMask);
+ /* Flush events for client2 */
+ XSync(client2, True);
+
+ /*
+ * Ensure another-key press release pair in grab_window.
+ */
+ keycode = nongrab_key_code(display);
+ activate_press();
+ activate_release();
+ keycode = saved_keyc;
+
+ XSync(client2, False);
+ if (getevent(client2, &ev)) {
+ /*
+ * An event was reported - keyboard isn't grabbed, do a sanity
+ * check on the type of event.
+ */
+ if (ev.type != KeyPress && ev.type != KeyRelease) {
+ delete("Unexpected event received in kgrabbed()");
+ delete(" event type %s", eventname(ev.type));
+ }
+ return(False);
+ } else {
+ return(True);
+ }
+}
+
+/*
+ * as for kgrabbed_check() but used where number of fd's consumed by
+ * multiple calls doesn't outweigh convenience of avoiding extra arg.
+ */
+static
+kgrabbed()
+{
+Display *client2;
+
+ client2 = opendisplay();
+ return kgrabbed_check(client2);
+}
+
+static char *WindowTree[]= {
+ ".",
+ "child1 . (10,10) 30x30",
+ "child2 . (50,50) 30x30",
+ "grandchild child2 (2,2) 20x20",
+};
+
+static int NWindowTree = NELEM(WindowTree);
+
+>>ASSERTION Good B 3
+A call to xname establishes a passive grab on the keyboard that is activated
+in the future by
+the specified key being logically pressed,
+the specified modifier keys being logically down,
+no other modifier keys being logically down,
+the
+.A grab_window
+being the focus window or an ancestor of the focus window
+or being a descendant of the focus window that contains the pointer
+and
+a passive grab on the same key combination not existing on any
+ancestor of
+.A grab_window .
+>>STRATEGY
+Call xname as touch test.
+If extensions available:
+ Set focus to grab window.
+ Simulate a key press of key.
+ Verify that keyboard is now grabbed.
+ Release grab & key.
+
+ Set up a grab with xname for a key.
+ Set focus to grab window.
+ Simulate press of another key.
+ Simulate the key press.
+ Verify that the keyboard is not grabbed.
+ Release grab & key.
+
+ Set up a grab with xname for a key and modifier keys.
+ Set focus to grab window.
+ Simulate modifier key presses.
+ Simulate the key press.
+ Verify that the keyboard is grabbed.
+ Release grab & key.
+
+ Set up a grab with xname for a key and modifier keys.
+ Set focus to grab window.
+ Simulate modifier key presses.
+ Simulate extra modifier key presses.
+ Simulate the key press.
+ Verify that the keyboard is not grabbed.
+ Release grab & key.
+
+ Make a child of current grab_window become focus window.
+ Call xname for a passive grab with no modifiers on parent.
+ Set focus window to child of grab window.
+ Activate the grab.
+ Check if grabbed.
+ Release key & grab.
+
+ Have grab_window a child of focus window and containing the pointer.
+ Call xname with no modifiers.
+ Activate the grab.
+ Check if grabbed.
+ Release key & grab.
+
+ Have grab_window a child of focus window and not containing the pointer.
+ Call xname with no modifiers.
+ Activate the grab.
+ Check not grabbed.
+ Release key & grab.
+
+ Set grab with no modifiers and grab_window a top-level window.
+ Set another grab on child of top-level window.
+ Discard event queue.
+ Attempt to activate second grab (in child).
+ Check event reported w.r.t. parent.
+ Check that no event reported for child.
+ Check no further events outstanding.
+ Check that a grab is active.
+ Release parent grab and check grab not active on child.
+ Activate child and check key grabbed.
+ Release any grabs and keys outstanding.
+
+>>CODE
+unsigned int mask;
+int onemod;
+int keysave,otherkc;
+Window parent,child1,child2,gchild;
+struct buildtree *tree;
+PointerPlace *p;
+XEvent ev;
+int cantdoit;
+
+ if (!(cantdoit=noext(0)) && kgrabbed()) { /* Sanity check */
+ delete("Keyboard seemed to be grabbed before doing test");
+ return;
+ }
+
+ XCALL;
+
+ if (cantdoit) {
+ untested("There is no reliable test method, but a touch test was performed");
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+ return;
+ }
+
+ /*
+ * --- Simple case no modifiers.
+ */
+ activate_press();
+
+ if (kgrabbed()) {
+ CHECK;
+ } else {
+ report("Keyboard was not grabbed after key press");
+ FAIL;
+ }
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+ /*
+ * --- Press another key instead of the grabbed key.
+ * The keyboard should not be grabbed.
+ */
+ if ((otherkc=nongrab_key_code(display)) != keycode) {
+ XCALL;
+
+ keysave = keycode;
+ keycode = otherkc;
+ activate_press();
+ keycode = keysave; /* restore to normality */
+ if (kgrabbed()) {
+ report("Keyboard was grabbed although another key was pressed");
+ FAIL;
+ } else
+ CHECK;
+ relalldev();
+ } else {
+ trace("Only one key supported");
+ CHECK;
+ }
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+ /*
+ * --- Set up a grab with modifiers.
+ */
+ modifiers = wantmods(display, 2);
+ grab_window = defwin(display);
+ trace("Grabbing keycode %d with mods %s", keycode,
+ keymaskname((unsigned long)modifiers));
+ XCALL;
+
+ activate_press();
+ if (kgrabbed()) {
+ CHECK;
+ } else {
+ report("Keyboard was not grabbed for keycode %d and %s", keycode,
+ keymaskname((unsigned long)modifiers));
+ FAIL;
+ }
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+ /*
+ * --- Set up a grab with modifiers, try to activate the grab with
+ * too many modifiers held down. Grab should not become active.
+ */
+ mask = wantmods(display, 2);
+ for (onemod = 1; onemod; onemod <<= 1) {
+ if (mask & onemod)
+ break;
+ }
+ /* Only assumes one modifier */
+ modifiers = mask & ~onemod;
+ grab_window = defwin(display);
+ XCALL;
+
+ XSetInputFocus(display, grab_window, RevertToPointerRoot, CurrentTime);
+ /* Pressing an extra modifier */
+ modpress(display, mask);
+ keypress(display, keycode);
+
+ if (mask && kgrabbed()) {
+ report("Keyboard was grabbed when there were extra modifier keys down");
+ FAIL;
+ } else {
+ /*
+ * If mask was zero this means that there are no modifiers KeyCodes
+ * available. This is unlikely and realy means that we cannot test
+ * this part of the assertion. However in this case this part of
+ * the assertion has no meaning so say it passes.
+ */
+ CHECK;
+ }
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+/* Make a child of current grab_window become focus window. */
+ parent = grab_window;
+ tree = buildtree(display, parent, WindowTree, NWindowTree);
+ child1 = btntow(tree, "child1");
+/* Call xname for a passive grab with no modifiers on parent. */
+ modifiers = 0;
+ XCALL;
+/* Set focus window to child of grab window. */
+ XSetInputFocus(display, parent, RevertToPointerRoot, CurrentTime);
+/* Activate the grab. */
+ keypress(display, keycode);
+/* Check if grabbed. */
+ if (kgrabbed()) {
+ CHECK;
+ } else {
+ report("Key not grabbed when focus is child of grab_window.");
+ FAIL;
+ }
+/* Release key & grab. */
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+
+/* Have grab_window a child of focus window and containing the pointer. */
+ child2 = btntow(tree, "child2");
+ gchild = btntow(tree, "grandchild");
+ grab_window = gchild;
+ XSetInputFocus(display, child2, RevertToPointerRoot, CurrentTime);
+ p = warppointer(display, grab_window, 2, 2);
+/* Call xname with no modifiers. */
+ modifiers = 0;
+ XCALL;
+/* Activate the grab. */
+ keypress(display, keycode);
+/* Check if grabbed. */
+ if (kgrabbed()) {
+ CHECK;
+ } else {
+ report("Key not grabbed with grab_window a descendent of focus");
+ report(" and containing the pointer.");
+ FAIL;
+ }
+ my_unwarppointer(display, p);
+/* Release key & grab. */
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+/* Have grab_window a child of focus window and not containing the pointer. */
+ grab_window = gchild;
+ XSetInputFocus(display, child2, RevertToPointerRoot, CurrentTime);
+ p = warppointer(display, child1, 2, 2);
+/* Call xname with no modifiers. */
+ modifiers = 0;
+ XCALL;
+/* Activate the grab. */
+ keypress(display, keycode);
+/* Check not grabbed. */
+ if (!kgrabbed()) {
+ CHECK;
+ } else {
+ report("Key grabbed with grab_window a descendent of focus");
+ report(" and not containing the pointer.");
+ FAIL;
+ }
+ my_unwarppointer(display, p);
+/* Release key & grab. */
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+/* Set grab with no modifiers and grab_window a top-level window. */
+ modifiers = 0;
+ grab_window = parent;
+ XCALL;
+/* Set another grab on child of top-level window. */
+ grab_window = child1;
+ XCALL;
+/* Discard event queue. */
+ XSync(display, True);
+/* Attempt to activate second grab (in child). */
+ grab_window = child1;
+ activate_press();
+/* Check event reported w.r.t. parent. */
+ if (XCheckWindowEvent(display, parent, KeyPressMask, &ev))
+ CHECK;
+ else {
+ report("No KeyPress event for parent window.");
+ FAIL;
+ }
+/* Check that no event reported for child. */
+ if (!XCheckWindowEvent(display, child1, KeyPressMask, &ev))
+ CHECK;
+ else {
+ report("Unexpected KeyPress event for child window.");
+ FAIL;
+ }
+/* Check no further events outstanding. */
+ if (getevent(display, &ev) != 0) {
+ report("Unexpected %s event on %s window.",
+ eventname(ev.type),
+ ev.xany.window == parent ? "parent" : (
+ ev.xany.window == child1 ? "child" : "unexpected"
+ ));
+ FAIL;
+ } else
+ CHECK;
+/* Check that a grab is active. */
+ if (kgrabbed())
+ CHECK;
+ else {
+ report("Key not grabbed after set in parent and child and");
+ report(" activation attempt in child.");
+ FAIL;
+ }
+/* Release parent grab and check grab not active on child. */
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, parent);
+ /* grab_window is child1, still, so kgrabbed() checking OK. */
+ if (kgrabbed()) {
+ report("Child grab became active after interfering parent released.");
+ FAIL;
+ } else
+ CHECK;
+/* Activate child and check key grabbed. */
+ /* grab_window still child so activate_press etc. OK */
+ activate_press();
+ if (!kgrabbed()) {
+ report("Child grab not active after interfering parent released.");
+ FAIL;
+ } else
+ CHECK;
+/* Release any grabs and keys outstanding. */
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+ CHECKPASS(13);
+>>ASSERTION Good B 3
+When the conditions for activating the grab are otherwise satisfied
+and the keyboard is already grabbed,
+then no active grab is established.
+>>STRATEGY
+If extensions are available:
+ Create two windows that do not overlap.
+ Check that at least two keycodes are available.
+ Set and activate grab on first window.
+ Check grab activated.
+ Set grab on second window on another keycode.
+ Attempt to activate grab on second window, using other keycode.
+ Check that only one KeyPress event received.
+ Check it was reported from first grab window.
+ Check grab still outstanding.
+ Release keys & grabs.
+else
+ Report untested.
+>>CODE
+Window w1,w2;
+XEvent ev;
+int n;
+int grabbed;
+int keysave,otherkc;
+
+ if (noext(0))
+ return;
+ else
+ CHECK;
+ w1 = defwin(display);
+ w2 = defwin(display);
+ keysave = keycode;
+ otherkc = nongrab_key_code(display);
+
+ if (otherkc == keycode) {
+ delete("Need at least two distinct keycodes.");
+ return;
+ } else
+ CHECK;
+
+ grab_window = w1;
+ XCALL;
+ activate_press();
+ if (!kgrabbed()) {
+ delete("Could not activate first grab.");
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+ return;
+ } else
+ CHECK;
+
+ grab_window = w2;
+ keycode = otherkc;
+ XCALL;
+ XSync(display, True);
+ activate_press();
+ keycode = keysave;
+ if ((n=getevent(display, &ev)) != 1) {
+ report("Received %d events on key press when grab active, expected just %d.", n, 1);
+ FAIL;
+ } else
+ CHECK;
+ if (n > 0 && ev.type != KeyPress) {
+ report("First event was type %s instead of KeyPress.",eventname(ev.type));
+ FAIL;
+ } else
+ CHECK;
+ grabbed = kgrabbed();
+ if (n > 0 && ev.xany.window != w1) {
+ report("Event appeared on %s window instead of first grab window.",
+ ev.xany.window == w2 ? "second grab" : "unexpected");
+ if (grabbed)
+ report("Grab appears to have moved.");
+ else
+ report("Grab has been prematurely released.");
+ FAIL;
+ } else if (!grabbed) {
+ report("Key grab erroneously released on trying to activate second.");
+ FAIL;
+ } else
+ CHECK;
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, w1);
+ XUngrabKey(display, AnyKey, AnyModifier, w2);
+
+ CHECKPASS(6);
+>>ASSERTION Good B 3
+When the conditions for activating the grab are satisfied
+and the grab subsequently becomes active, then
+the last-keyboard-grab time is set to the time at which the key was pressed.
+>>STRATEGY
+If extensions are available:
+ Set and activate grab.
+ Check activated.
+ Check activating event received.
+ Check event type and event window are KeyPress and grab_window.
+ Attempt XUngrabKeyboard at time just before event time.
+ Check still grabbed.
+ Attempt XUngrabKeyboard at time equal to event time.
+ Check no longer grabbed.
+ Release grab & key.
+else
+ Report untested.
+>>CODE
+XEvent ev;
+
+ if (noext(0))
+ return;
+ else
+ CHECK;
+ XSync(display, True);
+ XCALL;
+ activate_press();
+ if (!kgrabbed()) {
+ delete("Failed to activate grab.");
+ return;
+ } else
+ CHECK;
+ if (!getevent(display, &ev)) {
+ delete("No event reported for activating grab.");
+ return;
+ } else
+ CHECK;
+ /* sanity check on the event. */
+ if (ev.type != KeyPress || ev.xany.window != grab_window) {
+ delete("Reported event has type %s and event window 0x%x", eventname(ev.type), ev.xany.window);
+ delete(" expected KeyPress and 0x%x.", grab_window);
+ return;
+ } else
+ CHECK;
+ /* now set up OK */
+ trace("Grabbed at time 0x%lx.",(unsigned long)ev.xkey.time);
+ XUngrabKeyboard(display, ev.xkey.time - 1);
+ if (!kgrabbed()) {
+ report("Last keyboard grab time set earlier than reported event time.");
+ FAIL;
+ } else
+ CHECK;
+ XUngrabKeyboard(display, ev.xkey.time);
+ if (kgrabbed()) {
+ report("Last keyboard grab time set later than reported event time.");
+ FAIL;
+ } else
+ CHECK;
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+ CHECKPASS(6);
+
+>>ASSERTION Good B 3
+When the grab subsequently becomes active and later
+the logical state of the
+keyboard has the specified key released,
+then the active grab is terminated automatically.
+>>#(independent of the logical state of the modifier keys).
+>>STRATEGY
+If extension available:
+ Set grab with modifiers.
+ Activate grab.
+ Check grabbed.
+ Simulate keycode only key release with testing extension.
+ Check for grab release.
+ Simulate modifiers only key release with testing extension.
+ Check for grab release.
+ Release grab & keys.
+ Repeat but in opposite order with grab release expected on keycode up only.
+ Do the same for keycode = AnyKey, no modifiers.
+ (releasing the grab with XUngrabKey before expected !kgrabbed() tests.)
+else
+ Report untested.
+>>CODE
+
+ if (noext(0))
+ return;
+ else
+ CHECK;
+ modifiers = wantmods(display, 2);
+ trace("Grabbing keycode %d with mods %s", keycode,
+ keymaskname((unsigned long)modifiers));
+ XCALL;
+
+ activate_press();
+ if (kgrabbed()) {
+ CHECK;
+ } else {
+ delete("Keyboard was not grabbed for keycode %d and %s", keycode,
+ keymaskname((unsigned long)modifiers));
+ return;
+ }
+ trace("releasing keycode %d only.", keycode);
+ keyrel(display, keycode); /* leaving modifiers down. */
+ if (!kgrabbed()) {
+ CHECK;
+ } else {
+ report("Keyboard still grabbed for keycode %d and %s after keycode release.", keycode,
+ keymaskname((unsigned long)modifiers));
+ FAIL;
+ }
+ modrel(display, modifiers); /* there go the modifiers. */
+ if (!kgrabbed()) {
+ CHECK;
+ } else {
+ report("Keyboard still grabbed for keycode %d and %s even after all keys released.", keycode,
+ keymaskname((unsigned long)modifiers));
+ FAIL;
+ }
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+ /* repeat but now release modifiers first and keycode last */
+ trace("Grabbing keycode %d with mods %s", keycode,
+ keymaskname((unsigned long)modifiers));
+ XCALL;
+
+ activate_press();
+ if (kgrabbed()) {
+ CHECK;
+ } else {
+ delete("Keyboard was not grabbed for keycode %d and %s", keycode,
+ keymaskname((unsigned long)modifiers));
+ return;
+ }
+ trace("releasing modifiers %s only.", keymaskname((unsigned long)modifiers));
+ modrel(display, modifiers); /* leaving keycode down. */
+ if (kgrabbed()) {
+ CHECK;
+ } else {
+ report("Keyboard no longer grabbed for keycode %d and %s after %s release.", keycode,
+ keymaskname((unsigned long)modifiers),
+ keymaskname((unsigned long)modifiers));
+ FAIL;
+ }
+ keyrel(display, keycode); /* there goes the keycode key. */
+ if (!kgrabbed()) {
+ CHECK;
+ } else {
+ report("Keyboard still grabbed for keycode %d and %s even after all keys released.", keycode,
+ keymaskname((unsigned long)modifiers));
+ FAIL;
+ }
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+ /*
+ * Finally test AnyKey grabs only release when activating key released.
+ */
+ modifiers = 0;
+ keycode = AnyKey;
+ trace("Grabbing keycode AnyKey with mods %s",
+ keymaskname((unsigned long)modifiers));
+ XCALL;
+
+ keycode = grab_key_code(display);
+ activate_press();
+ if (kgrabbed()) {
+ CHECK;
+ } else {
+ delete("Keyboard was not grabbed for keycode AnyKey when keycode %d only pressed.", keycode);
+ return;
+ }
+ trace("releasing non activating keycode only.");
+ /* already released by previous kgrabbed test but can't check
+ * if grabbed with kgrabbed as that would just make it active if
+ * (erroneously) passive. So, try and release grab with XUngrabKey
+ * which will do nothing if its active, as it should be, but will
+ * allow subsequent kgrabbed to return False if it wasn't active.
+ */
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+ if (kgrabbed()) {
+ CHECK;
+ } else {
+ delete("Keyboard was not grabbed for keycode AnyKey after press/release of non-activating key.");
+ return;
+ }
+ trace("releasing activating keycode %d only.", keycode);
+ keyrel(display, keycode);
+ /*
+ * now the XUngrabKey should find it non-active so kgrabbed => False
+ */
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+ if (!kgrabbed()) {
+ CHECK;
+ } else {
+ report("Keyboard still grabbed for keycode AnyKey after keycode %d release.", keycode);
+ FAIL;
+ }
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+ CHECKPASS(10);
+>>ASSERTION Good B 3
+A call to xname overrides all previous passive grabs by the same client on the
+same key combinations on the same window.
+>>STRATEGY
+If extensions available:
+ Create a window for event reporting and set event mask to KeyPressMask.
+ Set a grab with owner_events False on another window.
+ Set a grab with owner_events True on this other window.
+ Activate the grab.
+ Check it activated.
+ Simulate a KeyPress in the reporting window.
+ Check that the reported event has event window equal to reporting
+ window rather than grab_window showing that second overrode first.
+ Release grabs & keys.
+else
+ Report untested.
+>>CODE
+Window reportwin;
+XEvent ev;
+
+ if (noext(0))
+ return;
+ else
+ CHECK;
+ reportwin = defwin(display);
+ XCALL;
+ owner_events = True;
+ XCALL;
+ activate_press();
+ if (!kgrabbed()) {
+ delete("Failed to activate grab.");
+ return;
+ } else
+ CHECK;
+ XSync(display, True); /* empty event-Q */
+ XSelectInput(display, reportwin, KeyPressMask);
+ /* now cause key-press in reportwin */
+ XSetInputFocus(display, reportwin, RevertToPointerRoot, CurrentTime);
+ keypress(display, nongrab_key_code(display));
+ /* check it was reported w.r.t. reportwin, not grab_window */
+ if (!getevent(display, &ev)) {
+ delete("Event not reported to grabbing client.");
+ return;
+ } else
+ CHECK;
+ if (ev.type != KeyPress) {
+ delete("Reported event of type %s rather than KeyPress.", eventname(ev.type));
+ return;
+ } else
+ CHECK;
+ if (ev.xany.window != reportwin) {
+ if (ev.xany.window == grab_window) {
+ report("First grab not overridden by second.");
+ FAIL;
+ } else {
+ delete("Unexpected window 0x%lx in reported event (not grab_window or reportwin).",
+ (unsigned long)ev.xany.window);
+ return;
+ }
+ } else
+ CHECK;
+
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+ CHECKPASS(5);
+>>ASSERTION Good B 3
+When the
+.A modifiers
+argument is
+.S AnyModifier ,
+then this is equivalent to separate calls to xname for all
+possible modifier combinations including no modifiers.
+>>STRATEGY
+If extensions are available:
+ Place passive grab with a modifiers of AnyModifier.
+ Press a bunch of modifier keys.
+ Press keycode to activate grab.
+ Verify that grab is activated.
+ Release keys & grab.
+
+ Press keycode (no modifiers).
+ Verify that grab is active.
+else
+ Perform touch test.
+ Report untested.
+>>CODE
+unsigned int mods;
+
+ modifiers = AnyModifier;
+ XCALL;
+
+ if (noext(0)) {
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ modifiers = mods = wantmods(display, 4);
+
+ /*
+ * modifiers was AnyModifier, several modifier keys are held down.
+ */
+ activate_press();
+ if (kgrabbed())
+ CHECK;
+ else {
+ report("Grab not activated for AnyModifier on keycode %d", keycode);
+ report(" Modifiers used %s", keymaskname((unsigned long)mods));
+ FAIL;
+ }
+
+ /* Release all grabs, keys and modifiers */
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+ if (kgrabbed()) {
+ delete("Could not release grab for second part of test");
+ return;
+ } else
+ CHECK;
+
+ modifiers = AnyModifier;
+ XCALL;
+ modifiers = 0; /* cause keycode only to be pressed */
+ activate_press();
+ if (kgrabbed())
+ CHECK;
+ else {
+ report("Grab with AnyModifier was not activated by pressing keycode %d with", keycode);
+ report(" no modifiers");
+ FAIL;
+ }
+
+ /* Release all grabs, keys etc. */
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+ CHECKPASS(4);
+>>ASSERTION Good B 3
+It is not required that all modifiers specified have
+currently assigned KeyCodes.
+>>STRATEGY
+If extensions are available:
+ Get a modifier mask.
+ Remove the keycode for the modifier from the map.
+ Call xname to set up a passive grab with that modifier.
+ Reset the keycode in the modifier map.
+ Verify that the grab can be activated with the newly set modifier.
+else
+ Report untested.
+>>CODE
+XModifierKeymap *mmap;
+XModifierKeymap *newmap;
+int i;
+
+ if (noext(0))
+ return;
+ else
+ CHECK;
+
+ modifiers = wantmods(display, 1);
+ if (modifiers == 0) {
+ untested("No available modifier keys");
+ return;
+ } else
+ CHECK;
+
+ mmap = XGetModifierMapping(display);
+ if (mmap == NULL) {
+ delete("Could not get modifier map");
+ return;
+ } else
+ CHECK;
+
+ /*
+ * Remove all the modifiers mappings.
+ */
+ newmap = XNewModifiermap(mmap->max_keypermod);
+ for (i = 0; i < newmap->max_keypermod*8; i++)
+ newmap->modifiermap[i] = NoSymbol;
+
+ if (XSetModifierMapping(display, newmap) == MappingSuccess)
+ CHECK;
+ else {
+ delete("Could not remove modifier mapping");
+ return;
+ }
+
+ /*
+ * Now we have a modifier that has no keycode - set up a passive grab.
+ */
+ XCALL;
+
+ /*
+ * Reset the modifier map, and try to activate the grab.
+ */
+ if (XSetModifierMapping(display, mmap) == MappingSuccess)
+ CHECK;
+ else {
+ delete("Could not reset modifier mapping");
+ return;
+ }
+
+ activate_press();
+
+ if (kgrabbed())
+ CHECK;
+ else {
+ report("Passive grab not set when the modifier did not have a current keycode");
+ FAIL;
+ }
+ /* Release all grabs, keys etc. */
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+ CHECKPASS(6);
+>>ASSERTION Good B 3
+When the
+.A keycode
+argument is
+.S AnyKey ,
+then this is equivalent to separate calls to xname for
+all possible KeyCodes.
+>>STRATEGY
+If extensions are available:
+ Set up a passive grab using AnyKey.
+ Activate grab with simulated key press.
+ Verify that keyboard is grabbed.
+ Release key & grab.
+ Repeat for other keycodes in range min_keycode to max_keycode.
+ Release all grabs & keys.
+else
+ Touch test using AnyKey.
+ Report untested.
+>>CODE
+int i;
+int minkc, maxkc;
+Display *client2;
+
+ client2 = opendisplay();
+
+ XDisplayKeycodes(display, &minkc, &maxkc);
+
+ keycode = AnyKey;
+ XCALL;
+
+ if (noext(0)) {
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ XSetInputFocus(display, grab_window, RevertToPointerRoot, CurrentTime);
+
+ for (i = minkc; i <= maxkc; i++) {
+ keycode = i; /* let nongrab_key_code know */
+ keypress(display, i);
+ if (kgrabbed_check(client2))
+ CHECK;
+ else {
+ report("Passive grab of AnyKey, not grabbed for keycode %d", (int)i);
+ FAIL;
+ }
+
+ /*
+ * Release this grab and try next key.
+ */
+ relkeys();
+ /*
+ * This XUngrabKey must be in or else the key release is not
+ * enough because the press/release in kgrabbed will
+ * trigger/release the grab again. To test properly we
+ * must try and remove the grab, which only works if not
+ * active.
+ */
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+ XSync(display, True);
+ if (kgrabbed_check(client2)) {
+ delete("Could not release grab for next part of test");
+ return;
+ } else
+ CHECK;
+ /*
+ * The XUngrabKey requires us to have another passive
+ * grab installed for next iteration.
+ */
+ keycode = AnyKey;
+ XCALL;
+ }
+ /* Release all grabs, keys etc. */
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+ CHECKPASS(1+2*(1 + maxkc - minkc));
+>>ASSERTION Good B 3
+When the event window for an active grab becomes not viewable, then the
+grab is released automatically.
+>>STRATEGY
+If extension is available:
+ Set up grab on a child window (to avoid window manager interference).
+ Activate grab.
+ Check grabbed.
+ Unmap grab_window.
+ Map grab_window back again (to perform grab check).
+ Check no longer grabbed.
+ Release key & grab.
+else
+ Report untested.
+>>CODE
+Window win;
+struct area a;
+
+ if (noext(0))
+ return;
+ else
+ CHECK;
+ setarea(&a, 2, 2, 0, 0);
+ win = crechild(display, grab_window, &a);
+ grab_window = win;
+ XCALL;
+ activate_press();
+ if (!kgrabbed()) {
+ delete("Failed to activate grab.");
+ return;
+ } else
+ CHECK;
+ XUnmapWindow(display, grab_window);
+ XSync(display, True);
+ XMapWindow(display, grab_window);
+ XSync(display, True);
+ if (kgrabbed()) {
+ report("Unmapping grab_window did not inactivate grab.");
+ FAIL;
+ } else
+ CHECK;
+ /* Release all grabs, keys etc. */
+ relalldev();
+ XUngrabKey(display, AnyKey, AnyModifier, grab_window);
+
+ CHECKPASS(3);
+>>ASSERTION Bad A
+When the specified keycode is not in the range
+specified by min_keycode and max_keycode in the connection setup or
+.S AnyKey ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Call xname with keycode less than min_keycode.
+Verify that a BadValue error occurs.
+Call xname with keycode greater than max_keycode if it is less than 255.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+int minkc, maxkc;
+
+ XDisplayKeycodes(display, &minkc, &maxkc);
+
+ keycode = minkc - 2;
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+
+ /*
+ * Since the protocol only has one byte for the key then this
+ * assertion cannot be tested when max_keycode is 255.
+ */
+ if (maxkc < 255) {
+
+ keycode = maxkc+1;
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+.ER BadValue modifiers mask ShiftMask LockMask ControlMask Mod1Mask Mod2Mask Mod3Mask Mod4Mask Mod5Mask AnyModifier
+>>ASSERTION Bad A
+.ER BadValue owner_events True False
+>>ASSERTION Bad A
+.ER BadValue pointer_mode GrabModeSync GrabModeAsync
+>>ASSERTION Bad A
+.ER BadValue keyboard_mode GrabModeSync GrabModeAsync
+>>ASSERTION Bad A
+.ER Access grab
+>>STRATEGY
+Grab key/modifier.
+Create client2.
+Attempt to grab same key modifier for client2.
+Verify BadAccess error.
+>>CODE BadAccess
+Display *client2;
+
+ XGrabKey(Dsp, keycode, modifiers, grab_window, owner_events, pointer_mode,
+ keyboard_mode);
+ if (isdeleted()) {
+ delete("Could not set up initial grab");
+ return;
+ }
+
+ if ((client2 = opendisplay()) == NULL)
+ return;
+
+ display = client2;
+ XCALL;
+
+ if (geterr() == BadAccess)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH07/grbkybrd/grbkybrd.m b/xc/test/xsuite/xtest/tset/CH07/grbkybrd/grbkybrd.m
new file mode 100644
index 000000000..bc874e86d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/grbkybrd/grbkybrd.m
@@ -0,0 +1,896 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGrabKeyboard CH07
+int
+xname
+Display *display = Dsp;
+Window grab_window = defwin(display);
+Bool owner_events = False;
+int pointer_mode = GrabModeAsync;
+int keyboard_mode = GrabModeAsync;
+Time time = CurrentTime;
+>>#
+>># Expect that GrabSuccess is returned unless otherwise mentioned.
+>>SET return-value GrabSuccess
+>>#
+>># Set the startup and cleanup functions to set the focus to the root window
+>># for the tests and reset it afterwards.
+>>SET startup focusstartup
+>>SET cleanup focuscleanup
+>>#
+>>ASSERTION Good A
+A successful call to xname actively grabs control of the keyboard and
+returns
+.S GrabSuccess .
+>>STRATEGY
+Touch test for return value.
+>>CODE
+
+ XCALL;
+ if (ValueReturn == GrabSuccess)
+ PASS;
+>>ASSERTION Good A
+When the keyboard is grabbed, then
+.S FocusIn
+and
+.S FocusOut
+events are generated as though the focus had changed from the
+previous focus window to
+.A grab_window.
+>>STRATEGY
+Create window.
+Set Focus to that window.
+Enable events on grab and focus window.
+Grab keyboard.
+Verify grab-mode FocusOut from window.
+Verify grab-mode FocusIn to grab window.
+>>CODE
+Window win;
+Window ofocus;
+XEvent ev;
+XFocusInEvent figood;
+XFocusOutEvent fogood;
+int orevert;
+
+ /*
+ * Save current input focus to pose as little inconvenience as
+ * possible.
+ */
+ XGetInputFocus(display, &ofocus, &orevert);
+
+ win = defwin(display);
+ XSetInputFocus(display, win, RevertToNone, CurrentTime);
+ if (isdeleted()) {
+ report("Could not set up focus");
+ return;
+ }
+
+ XSelectInput(display, grab_window, FocusChangeMask);
+ XSelectInput(display, win, FocusChangeMask);
+
+ XCALL;
+
+ /*
+ * Set up the expected good events.
+ */
+ defsetevent(figood, display, FocusIn);
+ figood.window = grab_window;
+ figood.mode = NotifyGrab;
+ figood.detail = NotifyNonlinear;
+
+ defsetevent(fogood, display, FocusOut);
+ fogood.window = win;
+ fogood.mode = NotifyGrab;
+ fogood.detail = NotifyNonlinear;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusOut) {
+ report("Did not get expected FocusOut event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&fogood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusIn) {
+ report("Did not get expected FocusIn event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&figood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ /* Reset old focus */
+ XSetInputFocus(display, ofocus, orevert, CurrentTime);
+
+ CHECKPASS(4);
+>>ASSERTION Good B 3
+When a successful call to xname is made by a client, then
+subsequent keyboard events are reported only to that client.
+>>STRATEGY
+If extensions are available:
+ Create a second client.
+ Select key events for default client.
+ Select key events for second client.
+ Call xname with default client.
+
+ Press key in window.
+ Verify that key event is received only by default client.
+>>CODE
+>>SET end-function restoredevstate
+Display *client2;
+XEvent ev;
+
+ if (noext(0))
+ return;
+
+ if ((client2 = opendisplay()) == NULL) {
+ tccabort("Could not open display (%s)", config.display);
+ return;
+ } else
+ CHECK;
+
+ XSelectInput(display, grab_window, KeyPressMask|KeyReleaseMask);
+ XSelectInput(client2, grab_window, KeyPressMask|KeyReleaseMask);
+
+ XCALL;
+
+ (void) warppointer(client2, grab_window, 1, 1);
+ keypress(display, getkeycode(display));
+
+ if (XCheckMaskEvent(display, KeyPressMask, &ev))
+ CHECK;
+ else {
+ report("Keyboard event not received on the grabbing client");
+ FAIL;
+ }
+ if (XCheckMaskEvent(client2, KeyPressMask, &ev)) {
+ report("Keyboard event was received on a non-grabbing client");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+A call to xname overrides any active keyboard grab by this client.
+>>STRATEGY
+Call xname with pointer_mode GrabModeAsync.
+Check that pointer is not frozen.
+Call xname with pointer_mode GrabModeSync.
+Verify that pointer is frozen and so the last grab was overriden.
+>>CODE
+
+ pointer_mode = GrabModeAsync;
+ XCALL;
+
+ if (ispfrozen()) {
+ delete("Could not setup grab");
+ return;
+ }
+
+ pointer_mode = GrabModeSync;
+ XCALL;
+
+ if (ispfrozen())
+ CHECK;
+ else {
+ report("A second grab did not override the first");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good B 3
+When
+.A owner_events
+is
+.S False ,
+then all generated keyboard events are reported with
+respect to the
+.A grab_window .
+>>STRATEGY
+If extensions available:
+ Create grab_window.
+ Create window2.
+ Select key events on both windows.
+ Call xname with owner_events False.
+ Move pointer to window2 (focus is the root).
+ Press key.
+ Verify that event is reported on grab_window.
+>>CODE
+Window window2;
+XEvent ev;
+
+ if (noext(0))
+ return;
+
+ window2 = defwin(display);
+ XSelectInput(display, grab_window, KeyPressMask|KeyReleaseMask);
+ XSelectInput(display, window2, KeyPressMask|KeyReleaseMask);
+
+ owner_events = False;
+ XCALL;
+
+ (void) warppointer(display, window2, 1, 1);
+ keypress(display, getkeycode(display));
+
+ if (XCheckWindowEvent(display, grab_window, KeyPressMask, &ev))
+ CHECK;
+ else {
+ report("Event was not reported on grab_window");
+ FAIL;
+ }
+ if (XCheckWindowEvent(display, window2, KeyPressMask, &ev)) {
+ report("Event was reported on the owner window");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When
+.A owner_events
+is
+.S True
+and a keyboard event is generated that would normally be reported to the client,
+then it is reported on the window it would normally be reported on.
+>>STRATEGY
+If extensions available:
+ Create grab_window.
+ Create window2.
+ Select key events on both windows.
+ Call xname with owner_events True.
+ Move pointer to window2 (focus is the root).
+ Press key.
+ Verify that event is reported on window2.
+>>CODE
+Window window2;
+XEvent ev;
+
+ if (noext(0))
+ return;
+
+ window2 = defwin(display);
+ XSelectInput(display, grab_window, KeyPressMask|KeyReleaseMask);
+ XSelectInput(display, window2, KeyPressMask|KeyReleaseMask);
+
+ owner_events = True;
+ XCALL;
+
+ (void) warppointer(display, window2, 1, 1);
+ keypress(display, getkeycode(display));
+
+ if (XCheckWindowEvent(display, window2, KeyPressMask, &ev))
+ CHECK;
+ else {
+ report("Event was not reported on the owner window");
+ FAIL;
+ }
+ if (XCheckWindowEvent(display, grab_window, KeyPressMask, &ev)) {
+ report("Event was reported on the grab_window");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When
+.A owner_events
+is
+.S True ,
+and a keyboard event is generated that would not normally be reported
+to the client,
+then it is reported on the
+.A grab_window .
+>>STRATEGY
+If extensions available:
+ Create grab_window.
+ Create window2.
+ Call xname with owner_events True.
+ Move pointer to window2 (focus is the root).
+ Press key.
+ Verify that event is reported on grab_window.
+>>CODE
+Window window2;
+XEvent ev;
+
+ if (noext(0))
+ return;
+
+ window2 = defwin(display);
+
+ owner_events = True;
+ XCALL;
+
+ (void) warppointer(display, window2, 1, 1);
+ keypress(display, getkeycode(display));
+
+ if (XCheckWindowEvent(display, grab_window, KeyPressMask, &ev))
+ CHECK;
+ else {
+ report("Event was not reported on grab_window");
+ FAIL;
+ }
+ if (XCheckWindowEvent(display, window2, KeyPressMask, &ev)) {
+ report("Event was reported on the owner window");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When the keyboard is grabbed, then
+.S KeyPress
+and
+.S KeyRelease
+events are always reported,
+independent of any event selection made by the client.
+>>STRATEGY
+If extensions available:
+ Grab keyboard by calling xname.
+ Press key.
+ Verify that a KeyPress event is reported.
+ Release key.
+ Verify that a KeyRelease event is reported.
+>>CODE
+XEvent ev;
+int key;
+
+ if (noext(0))
+ return;
+
+ XCALL;
+
+ (void) warppointer(display, grab_window, 1, 1);
+ key = getkeycode(display);
+ keypress(display, key);
+
+ if (XCheckMaskEvent(display, KeyPressMask, &ev))
+ CHECK;
+ else {
+ report("KeyPress event was not reported during grab when not selected");
+ FAIL;
+ }
+ keyrel(display, key);
+
+ if (XCheckMaskEvent(display, KeyReleaseMask, &ev))
+ CHECK;
+ else {
+ report("KeyRelease event was not reported during grab when not selected");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When
+.A keyboard_mode
+is
+.S GrabModeAsync ,
+then keyboard event processing continues normally.
+>>STRATEGY
+If extensions available:
+ Call xname with keyboard_mode GrabModeAsync.
+ Verify that keyboard is not frozen.
+>>EXTERN
+
+/*
+ * Returns True if the keyboard is frozen.
+ */
+static int
+iskfrozen()
+{
+XEvent ev;
+int res;
+static int key;
+
+ XSync(display, True); /* Flush previous events */
+ key = getkeycode(display);
+
+ /*
+ * Try to provoke a keypress on grab_window.
+ */
+ (void) warppointer(display, grab_window, 1, 1);
+ keypress(display, key);
+ if (XCheckMaskEvent(display, (long)KeyPressMask, &ev))
+ res = False;
+ else
+ res = True;
+
+ return(res);
+}
+
+>>CODE
+
+ if (noext(0))
+ return;
+
+ keyboard_mode = GrabModeAsync;
+ XCALL;
+
+ if (iskfrozen()) {
+ report("Keyboard was frozen by GrabModeAsync");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good B 3
+When
+.A keyboard_mode
+is
+.S GrabModeAsync ,
+and the keyboard is currently frozen by this client,
+then processing of keyboard events is resumed.
+>>STRATEGY
+If extensions available:
+ Freeze keyboard using XGrabPointer.
+ Call xname with keyboard_mode GrabModeAsync.
+ Verify that keyboard is not frozen.
+>>CODE
+
+ if (noext(0))
+ return;
+
+ XGrabPointer(display, grab_window, False, 0, GrabModeAsync, GrabModeSync,
+ None, None, CurrentTime);
+
+ keyboard_mode = GrabModeAsync;
+ XCALL;
+
+ if (iskfrozen()) {
+ report("Keyboard was not released by GrabModeAsync");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good B 3
+When
+.A keyboard_mode
+is
+.S GrabModeSync ,
+then the state of the keyboard,
+as seen by client applications,
+appears to freeze
+and no further keyboard events are generated until the
+grabbing client issues a releasing
+.S XAllowEvents
+call or until the keyboard grab is released.
+>>STRATEGY
+If extensions available:
+ Call xname with keyboard_mode GrabModeSync.
+ Verify that keyboard is frozen.
+ Release grab.
+ Verify that keyboard is not frozen.
+>>CODE
+
+ if (noext(0))
+ return;
+
+ XSelectInput(display, grab_window, KeyPressMask);
+
+ keyboard_mode = GrabModeSync;
+ XCALL;
+
+ if (iskfrozen())
+ CHECK;
+ else {
+ report("Keyboard was not frozen with keyboard_mode GrabModeSync");
+ FAIL;
+ }
+
+ XUngrabKeyboard(display, CurrentTime);
+ XSync(display, False);
+ if (iskfrozen()) {
+ report("Keyboard was not thawed after the grab was released");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When the keyboard is frozen, then the
+actual keyboard changes are not lost while the keyboard is frozen
+and are processed after the grab is released or the client calls
+.F XAllowEvents .
+>>STRATEGY
+If extensions available:
+ Enable key events on grab_window.
+ Call xname with keyboard_mode GrabModeSync.
+ Press and release key.
+ Check no events arrived yet.
+ Release grab.
+ Verify that KeyPress and KeyRelease events are now received.
+>>CODE
+int key;
+int n;
+int first;
+XEvent ev;
+
+ if (noext(0))
+ return;
+
+ key = getkeycode(display);
+ XSelectInput(display, grab_window, KeyPressMask|KeyReleaseMask);
+
+ keyboard_mode = GrabModeSync;
+ XCALL;
+
+ (void) warppointer(display, grab_window, 10, 10);
+ keypress(display, key);
+ keyrel(display, key);
+
+ if (XCheckMaskEvent(display, KeyPressMask|KeyReleaseMask, &ev)) {
+ delete("Events received while keyboard supposed to be frozen");
+ return;
+ } else
+ CHECK;
+
+ XUngrabKeyboard(display, time);
+ if (isdeleted())
+ return;
+
+ n = getevent(display, &ev);
+ if (n != 2) {
+ report("Expecting two events to be released after grab");
+ report(" got %d", n);
+ FAIL;
+ } else {
+ first = ev.type;
+ (void) getevent(display, &ev);
+ /* (We have already checked that there is another event) */
+
+ if (ev.type != KeyPress && first != KeyPress) {
+ report("Did not get KeyPress event after releasing grab");
+ FAIL;
+ } else
+ CHECK;
+ if (ev.type != KeyRelease && first != KeyRelease) {
+ report("Did not get KeyRelease event after releasing grab");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+When
+.A pointer_mode
+is
+.S GrabModeAsync ,
+then pointer event processing is unaffected
+by activation of the grab.
+>>STRATEGY
+Grab keyboard with pointer_mode GrabModeAsync.
+Verify that pointer events are still received.
+>>EXTERN
+
+/*
+ * Returns True if the pointer is frozen.
+ */
+static Bool
+ispfrozen()
+{
+XEvent ev;
+Window win;
+
+ win = defwin(Dsp);
+ (void) warppointer(Dsp, win, 0, 0);
+ XSync(Dsp, True); /* discard events */
+
+ XSelectInput(Dsp, win, PointerMotionMask);
+
+ (void) warppointer(Dsp, win, 1, 4);
+ XSync(Dsp, False);
+
+ if (XCheckWindowEvent(Dsp, win, PointerMotionMask, &ev))
+ return(False);
+ else
+ return(True);
+}
+
+>>CODE
+
+ pointer_mode = GrabModeAsync;
+
+ XCALL;
+
+ if (ispfrozen() == False)
+ CHECK;
+ else {
+ report("Pointer events were affected by GrabModeAsync");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When
+.A pointer_mode
+is
+.S GrabModeSync ,
+then state of the pointer as seen by client applications appears to freeze
+and no further pointer events are generated
+until the grabbing client issues a releasing
+.S XAllowEvents
+call or until the keyboard grab is released.
+>>STRATEGY
+Call xname with pointer_mode GrabModeSync.
+Verify that pointer events are frozen.
+>>CODE
+
+ pointer_mode = GrabModeSync;
+
+ XCALL;
+
+ if (ispfrozen() == True)
+ CHECK;
+ else {
+ report("Pointer events were not frozen by GrabModeSync");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When the pointer is frozen, then the actual pointer changes are
+not lost and are processed after the grab is released or the client
+calls
+.F XAllowEvents .
+>>STRATEGY
+Call xname with pointer_mode GrabModeSync.
+Warp pointer to create some pointer events.
+Check that they are not received yet.
+Release grab.
+Verify that events are now received.
+>>CODE
+XEvent ev;
+
+ (void) warppointer(display, grab_window, 0, 0);
+ XSelectInput(display, grab_window, PointerMotionMask);
+
+ pointer_mode = GrabModeSync;
+ XCALL;
+
+ (void) warppointer(display, grab_window, 1, 1);
+ XSync(display, False); /* warppointer has effectivly done this */
+ if (!XCheckWindowEvent(display, grab_window, PointerMotionMask, &ev))
+ CHECK;
+ else {
+ report("Events were received while pointer was frozen");
+ FAIL;
+ }
+
+ XUngrabKeyboard(display, CurrentTime);
+ XSync(display, False);
+
+ if (XCheckWindowEvent(display, grab_window, PointerMotionMask, &ev))
+ CHECK;
+ else {
+ report("Events were not saved while pointer was frozen");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When the event window for an active grab becomes not viewable, then
+the grab is released automatically.
+>>STRATEGY
+Call xname with pointer_mode GrabModeSync to freeze pointer.
+Unmap the grab_window.
+Verify that pointer is unfrozen, and that therefore the grab has
+been released.
+>>CODE
+
+ pointer_mode = GrabModeSync;
+ XCALL;
+
+ XUnmapWindow(display, grab_window);
+ if (isdeleted())
+ return;
+
+ if (ispfrozen()) {
+ report("Grab was not released when grab_window was unmapped");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+A successful call to xname sets the last-keyboard-grab time
+to the specified time, with
+.S CurrentTime
+being replaced by the current X server time.
+>>STRATEGY
+Get a server time.
+Use this time in the xname call with a pointer_mode of GrabModeSync.
+Check that pointer is frozen.
+Call XUngrabKeyboard with time-1.
+Verify that pointer is still frozen.
+Call XUngrabKeyboard with time.
+Verify that pointer is released.
+>>CODE
+
+ time = gettime(display);
+ pointer_mode = GrabModeSync;
+ XCALL;
+
+ if (ispfrozen())
+ CHECK;
+ else {
+ delete("Could not freeze pointer");
+ return;
+ }
+
+ XUngrabKeyboard(display, time-1);
+ if (ispfrozen())
+ CHECK;
+ else {
+ report("Last-keyboard-grab time not set correctly");
+ FAIL;
+ }
+ XUngrabKeyboard(display, time);
+ if (ispfrozen()) {
+ report("Last-keyboard-grab time not set correctly");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Bad A
+When the keyboard is actively grabbed by some other client,
+then a call to xname fails and returns
+.S AlreadyGrabbed .
+>>STRATEGY
+Create client2.
+Call xname with default client.
+Attempt to call xname with client2.
+Verify that xname fails with AlreadyGrabbed.
+>>CODE
+int ret;
+Display *client2;
+
+ client2 = opendisplay();
+
+ XCALL;
+
+ display = client2;
+ ret = XCALL;
+
+ if (ret == AlreadyGrabbed)
+ CHECK;
+ else {
+ report("Return value was %s, expecting AlreadyGrabbed",
+ grabreplyname(ret));
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+When the
+.A grab_window
+is not viewable,
+then a call to xname fails and returns
+.S GrabNotViewable .
+>>STRATEGY
+Unmap grab_window.
+Call xname.
+Verify that xname fails with GrabNotViewable.
+>>CODE
+int ret;
+
+ XUnmapWindow(display, grab_window);
+
+ ret = XCALL;
+ if (ret == GrabNotViewable)
+ CHECK;
+ else {
+ report("Return value was %s, expecting GrabNotViewable",
+ grabreplyname(ret));
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+When the keyboard is frozen by an active grab of another client,
+then a call to xname fails and returns
+.S GrabFrozen .
+>>STRATEGY
+Grab and freeze keyboard with default client using XGrabPointer.
+Create client2.
+Call xname with client2.
+Verify that xname returns GrabFrozen.
+>>CODE
+int ret;
+Display *client2;
+
+ client2 = opendisplay();
+
+ display = Dsp;
+ XGrabPointer(Dsp, grab_window, False, 0, GrabModeAsync, GrabModeSync,
+ None, None, CurrentTime);
+ if (isdeleted())
+ return;
+
+ display = client2;
+ ret = XCALL;
+ if (ret == GrabFrozen)
+ CHECK;
+ else {
+ report("Return value was %s, expecting GrabFrozen",
+ grabreplyname(ret));
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+When the specified time is earlier than the last-keyboard-grab time
+or later than the current X server time,
+then a call to xname fails and returns
+.S GrabInvalidTime .
+>>STRATEGY
+Get current time.
+Grab keyboard using this time to set last-keyboard-grab time.
+Attempt to grab keyboard with an earlier time.
+Verify that xname returns GrabInvalidTime.
+
+Attempt to grab keyboard with a future time.
+Verify that xname returns GrabInvalidTime.
+>>CODE
+int ret;
+
+ time = gettime(display);
+
+ /* Set the last-keyboard-grab time */
+ XCALL;
+ XUngrabKeyboard(display, time);
+
+ time -= 43;
+ ret = XCALL;
+ if (ret == GrabInvalidTime)
+ CHECK;
+ else {
+ report("Trying time earlier than last-keyboard-grab time");
+ report("Return value was %s, expecting GrabInvalidTime",
+ grabreplyname(ret));
+ FAIL;
+ }
+ XUngrabKeyboard(display, time);
+
+ time = gettime(display);
+ time += ((config.speedfactor+1) * 1000000);
+ ret = XCALL;
+ if (ret == GrabInvalidTime)
+ CHECK;
+ else {
+ report("Trying time later than current X server time");
+ report("Return value was %s, expecting GrabInvalidTime",
+ grabreplyname(ret));
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+.ER BadValue owner_events True False
+>>ASSERTION Bad A
+.ER BadValue pointer_mode GrabModeSync GrabModeAsync
+>>ASSERTION Bad A
+.ER BadValue keyboard_mode GrabModeSync GrabModeAsync
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH07/grbpntr/grbpntr.m b/xc/test/xsuite/xtest/tset/CH07/grbpntr/grbpntr.m
new file mode 100644
index 000000000..76a4922b8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/grbpntr/grbpntr.m
@@ -0,0 +1,1584 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGrabPointer CH07
+int
+
+Display *display = Dsp;
+Window grab_window = defwin(display);
+Bool owner_events = True;
+unsigned int event_mask = 0;
+int pointer_mode = GrabModeAsync;
+int keyboard_mode = GrabModeAsync;
+Window confine_to = None;
+Cursor cursor = None;
+Time time = CurrentTime;
+>>EXTERN
+
+/*
+ * For all these tests note that the grab_window is automatically destroyed
+ * at the end of the test, and therefore the grab is released.
+ */
+
+/*
+ * Get the window that the pointer is currently in, if the pointer
+ * is in a child of the given window. Otherwise it returns None.
+ */
+static Window
+getpointerwin(disp, win)
+Display *disp;
+Window win;
+{
+Window child;
+Window wtmp;
+int itmp;
+unsigned uitmp;
+Bool s;
+
+ s = XQueryPointer(disp, win, &wtmp, &child, &itmp, &itmp, &itmp, &itmp
+ , &uitmp);
+
+ if (!s)
+ delete("Could not get pointer window");
+
+ return(child);
+}
+
+>>ASSERTION Good A
+A successful call to xname actively grabs control of the pointer and returns
+.S GrabSuccess .
+>>SET return-value GrabSuccess
+>>STRATEGY
+Call xname.
+Verify that it returns GrabSuccess.
+>>CODE
+int ret;
+
+ grab_window = defwin(display);
+ ret = XCALL;
+
+ if (ret != GrabSuccess) {
+ report("GrabSuccess was not returned");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+After a call to xname is made by a client,
+pointer events are reported only to that client.
+>>STRATEGY
+Create second client.
+Create grab window.
+Select pointer events for both clients.
+Grab the pointer.
+Warp pointer.
+Verify that the event is only reported to grabbing client.
+>>CODE
+Display *client2;
+XEvent ev;
+
+ client2 = opendisplay();
+
+ grab_window = defwin(display);
+ (void) warppointer(display, grab_window, 0, 0);
+
+ XSelectInput(display, grab_window, PointerMotionMask);
+ XSelectInput(client2, grab_window, PointerMotionMask);
+ XSync(client2, False);
+
+ XCALL;
+
+ (void) warppointer(display, grab_window, 1, 1);
+
+ if (getevent(display, &ev) == 0 || ev.type != MotionNotify) {
+ report("No pointer event occurred on the grabbing client");
+ FAIL;
+ } else
+ CHECK;
+ if (getevent(client2, &ev) != 0) {
+ report("Event was reported on the non-grabbing client");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+A call to xname
+overrides any active pointer grab by this client.
+>>STRATEGY
+Create two windows.
+Call xname with confine_to as one of the windows.
+Check that pointer is within that window.
+Call xname with confine_to as the other window.
+Verify that pointer is within the other window.
+>>CODE
+Window w1, w2;
+
+ /* Move pointer, mainly so that its position will be restored */
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ w1 = defwin(display);
+ w2 = defwin(display);
+
+ grab_window = w1;
+ confine_to = w1;
+
+ XCALL;
+
+ if (getpointerwin(display, DRW(display)) == confine_to)
+ CHECK;
+ else {
+ delete("Could not set up first grab properly");
+ return;
+ }
+
+ confine_to = w2;
+ XCALL;
+
+ if (getpointerwin(display, DRW(display)) == confine_to)
+ CHECK;
+ else {
+ report("A second grab did not override the first");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When
+.A owner_events
+is
+.S False ,
+then all generated pointer events that are selected by the
+.A event_mask
+are reported with respect to the
+.A grab_window .
+>>STRATEGY
+Set owner_events to False.
+Create grab window.
+Create other window.
+Set event-mask to select pointer events.
+Grab pointer.
+Warp pointer to other window.
+Verify that events are reported with respect to the grab window.
+>>CODE
+Window win;
+XEvent ev;
+XMotionEvent *mp;
+
+ owner_events = False;
+ grab_window = defwin(display);
+ event_mask = PointerMotionMask;
+
+ win = defwin(display);
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ XCALL;
+ (void) warppointer(display, win, 0, 0);
+ (void) warppointer(display, win, 1, 1);
+
+ if (!XCheckMaskEvent(display, (long)event_mask, &ev)) {
+ delete("No pointer event was received");
+ return;
+ } else
+ CHECK;
+
+ mp = (XMotionEvent*)&ev;
+ if (mp->window == grab_window)
+ CHECK;
+ else if (mp->window == win) {
+ report("Event was unexpectedly received on the pointer window");
+ FAIL;
+ } else {
+ report("Event was not received on the grab_window");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When
+.A owner_events
+is
+.S True ,
+and a pointer event is generated that would normally be reported to the client,
+then it is reported on the window that it would normally be reported on.
+>>STRATEGY
+Create window for grab window.
+Create window2.
+Set owner_events to True.
+Select pointer events on window2.
+Grab pointer.
+Warp pointer in window2.
+Verify that pointer events are generated on window2.
+>>CODE
+Window window2;
+XEvent ev;
+XMotionEvent *mp;
+
+ grab_window = defwin(display);
+ window2 = defwin(display);
+
+ owner_events = True;
+ XSelectInput(display, window2, PointerMotionMask);
+ (void) warppointer(display, window2, 0, 0);
+
+ XCALL;
+
+ (void) warppointer(display, window2, 1, 0);
+
+ if (!XCheckMaskEvent(display, PointerMotionMask, &ev)) {
+ delete("No pointer event was received");
+ return;
+ } else
+ CHECK;
+
+ mp = (XMotionEvent*)&ev;
+ if (mp->window == window2)
+ CHECK;
+ else if (mp->window == grab_window) {
+ report("Event was unexpectedly received on the grab window");
+ FAIL;
+ } else {
+ report("Event was not received on the normal window");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When
+.A owner_events
+is
+.S True ,
+and a pointer event is generated that would not normally be reported
+to the client,
+and it is selected by
+.A event_mask ,
+then it is reported on the
+.A grab_window .
+>>STRATEGY
+Create window for grab window.
+Create window2.
+Set owner_events to True.
+Select pointer events in event_mask.
+Do not select pointer events on window2.
+Grab pointer.
+Warp pointer in window2.
+Verify that pointer events are generated on the grab window.
+>>CODE
+Window window2;
+XEvent ev;
+XMotionEvent *mp;
+
+ grab_window = defwin(display);
+ window2 = defwin(display);
+
+ owner_events = True;
+ event_mask = PointerMotionMask;
+ (void) warppointer(display, window2, 0, 0);
+
+ XCALL;
+
+ (void) warppointer(display, window2, 1, 0);
+
+ if (!XCheckMaskEvent(display, (long)event_mask, &ev)) {
+ delete("No pointer event was received");
+ return;
+ } else
+ CHECK;
+
+ mp = (XMotionEvent*)&ev;
+ if (mp->window == grab_window)
+ CHECK;
+ else if (mp->window == window2) {
+ report("Event was unexpectedly received on the source window");
+ FAIL;
+ } else {
+ report("Event was not received on the grab window");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When
+.A pointer_mode
+is
+.S GrabModeAsync ,
+then pointer event processing continues normally.
+>>STRATEGY
+Grab pointer with pointer_mode GrabModeAsync.
+Warp pointer.
+Verify that pointer events are received.
+>>CODE
+XEvent ev;
+
+ owner_events = False;
+ grab_window = defwin(display);
+ event_mask = PointerMotionMask;
+ pointer_mode = GrabModeAsync;
+ (void) warppointer(display, grab_window, 0, 0);
+
+ XCALL;
+
+ (void) warppointer(display, grab_window, 1, 1);
+
+ if (!XCheckMaskEvent(display, (long)event_mask, &ev)) {
+ delete("No pointer event was received");
+ return;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When
+.A pointer_mode
+is
+.S GrabModeAsync
+and the pointer is currently frozen by this client, then
+the processing of events for the pointer is resumed.
+>>STRATEGY
+Freeze pointer by grabbing keyboard with pointer_mode GrabModeSync.
+Warp pointer.
+Verify that no pointer events received yet.
+Grab pointer with GrabModeAsync.
+Verify that the pointer event is now released.
+>>CODE
+XEvent ev;
+
+ owner_events = False;
+ grab_window = defwin(display);
+ event_mask = PointerMotionMask;
+ pointer_mode = GrabModeAsync;
+ (void) warppointer(display, grab_window, 0, 0);
+
+ /*
+ * Freeze the pointer by grabbing the keyboard.
+ */
+ XGrabKeyboard(display, grab_window, False, GrabModeSync, GrabModeAsync, time);
+ (void) warppointer(display, grab_window, 1, 1);
+ if (XCheckMaskEvent(display, (long)event_mask, &ev)) {
+ delete("Pointer event was received while frozen");
+ return;
+ } else
+ CHECK;
+
+ XCALL;
+
+ if (!XCheckMaskEvent(display, (long)event_mask, &ev)) {
+ report("Normal pointer processing was not restored");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When
+.A pointer_mode
+is
+.S GrabModeSync ,
+then the state of the pointer, as seen by client applications,
+appears to freeze, and no further pointer events are generated
+until the grabbing client calls
+.F XAllowEvents
+or until the pointer grab is released.
+>>STRATEGY
+Grab pointer with GrabModeSync.
+Warp pointer.
+Verify that no pointer events are received.
+>>CODE
+XEvent ev;
+
+ owner_events = False;
+ grab_window = defwin(display);
+ event_mask = PointerMotionMask;
+ pointer_mode = GrabModeSync;
+ (void) warppointer(display, grab_window, 0, 0);
+
+ XCALL;
+
+ (void) warppointer(display, grab_window, 1, 1);
+ if (XCheckMaskEvent(display, (long)event_mask, &ev)) {
+ delete("Pointer event was received while frozen");
+ return;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When the pointer is frozen, then the
+actual pointer changes are not lost and are processed after the grab
+is released or the client calls
+.F XAllowEvents .
+>>STRATEGY
+Grab pointer with GrabModeSync.
+Warp pointer.
+Verify that no pointer events are received.
+Release pointer.
+Verify that pointer events are now received.
+>>CODE
+XEvent ev;
+
+ owner_events = False;
+ grab_window = defwin(display);
+ event_mask = PointerMotionMask;
+ pointer_mode = GrabModeSync;
+ (void) warppointer(display, grab_window, 0, 0);
+ XSelectInput(display, grab_window, PointerMotionMask);
+
+ XCALL;
+
+ (void) warppointer(display, grab_window, 1, 1);
+ if (XCheckMaskEvent(display, (long)event_mask, &ev)) {
+ delete("Pointer event was received while frozen");
+ return;
+ } else
+ CHECK;
+
+ XUngrabPointer(display, CurrentTime);
+ XSync(display, False);
+
+ if (XCheckMaskEvent(display, (long)event_mask, &ev) && ev.type == MotionNotify)
+ CHECK;
+ else {
+ report("Pointer event was not saved while pointer was frozen");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good B 1
+When
+.A keyboard_mode
+is
+.S GrabModeAsync ,
+then keyboard event processing is unaffected by activation of the grab.
+>>STRATEGY
+If extension available:
+ Grab pointer with keyboard_mode = GrabModeAsync.
+ Check keyboard not frozen.
+else
+ Report untested.
+
+>>EXTERN
+
+/*
+ * Returns True if the keyboard is frozen.
+ */
+static int
+iskfrozen()
+{
+XEvent ev;
+int res;
+static int key;
+
+ XSelectInput(display, grab_window, KeyPressMask);
+ XSync(display, True); /* Flush previous events */
+ key = getkeycode(display);
+
+ /*
+ * Try to provoke a keypress on grab_window.
+ */
+ (void) warppointer(display, grab_window, 1, 1);
+ keypress(display, key);
+ if (XCheckMaskEvent(display, KeyPressMask, &ev))
+ res = False;
+ else
+ res = True;
+ keyrel(display, key);
+
+ return(res);
+}
+
+>>CODE
+
+ if (noext(0))
+ return;
+
+ keyboard_mode = GrabModeAsync;
+ XCALL;
+
+ if (iskfrozen()) {
+ report("Keyboard was frozen by GrabModeAsync");
+ FAIL;
+ } else
+ CHECK;
+
+ relalldev();
+ CHECKPASS(1);
+>>ASSERTION Good B 1
+When
+.A keyboard_mode
+is
+.S GrabModeSync ,
+then the state of the keyboard, as seen by
+client applications,
+appears to freeze, and no further keyboard events are generated
+until the grabbing client calls
+.S XAllowEvents
+or until the pointer grab is released.
+>>STRATEGY
+If extensions available:
+ Call xname with keyboard_mode GrabModeSync.
+ Verify that keyboard is frozen.
+ Release grab.
+ Verify that keyboard is not frozen.
+>>CODE
+
+ if (noext(0))
+ return;
+
+ keyboard_mode = GrabModeSync;
+ XCALL;
+
+ if (iskfrozen())
+ CHECK;
+ else {
+ report("Keyboard was not frozen with keyboard_mode GrabModeSync");
+ FAIL;
+ }
+
+ XUngrabKeyboard(display, time);
+ XAllowEvents(display, AsyncKeyboard, time);
+ if (!iskfrozen())
+ CHECK;
+ else {
+ report("Could not unfreeze keyboard from keyboard_mode GrabModeSync");
+ FAIL;
+ }
+
+ relalldev();
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+>># When the pointer is frozen, then the
+When the keyboard is frozen, then the
+actual keyboard changes are not lost and are processed after the grab
+is released or the client calls
+.F XAllowEvents .
+>>STRATEGY
+If extensions available:
+ Enable key events on grab_window.
+ Call xname with keyboard_mode GrabModeSync.
+ Press and release key.
+ Check no events arrived yet.
+ Release grab.
+ Verify that KeyPress and KeyRelease events are now received.
+else
+ Report untested.
+>>CODE
+int key;
+int n;
+int first;
+XEvent ev;
+
+ if (noext(0))
+ return;
+
+ key = getkeycode(display);
+ XSelectInput(display, grab_window, KeyPressMask|KeyReleaseMask);
+
+ keyboard_mode = GrabModeSync;
+ XCALL;
+
+ (void) warppointer(display, grab_window, 10, 10);
+ keypress(display, key);
+ keyrel(display, key);
+
+ if (XCheckMaskEvent(display, KeyPressMask|KeyReleaseMask, &ev)) {
+ delete("Events received while keyboard supposed to be frozen");
+ return;
+ } else
+ CHECK;
+
+ XUngrabKeyboard(display, time);
+ XAllowEvents(display, AsyncKeyboard, time);
+ if (isdeleted())
+ return;
+
+ n = getevent(display, &ev);
+ if (n != 2) {
+ report("Expecting two events to be released after grab");
+ report(" got %d", n);
+ FAIL;
+ } else {
+ first = ev.type;
+ (void) getevent(display, &ev);
+
+ if (ev.type != KeyPress && first != KeyPress) {
+ report("Did not get KeyPress event after releasing grab");
+ FAIL;
+ } else
+ CHECK;
+ if (ev.type != KeyRelease && first != KeyRelease) {
+ report("Did not get KeyRelease event after releasing grab");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+When
+.A cursor
+is a valid cursor,
+then it is displayed regardless of which window the pointer is in.
+>>STRATEGY
+If extensions available:
+ Make a tree of windows rooted at grab_window, all with default cursor.
+ Make a non-overlapping sibling of grab_window, the cursor window.
+ Set that window's cursor to be a good, non default, cursor.
+ Call xname with cursor = the good cursor.
+ Warp pointer to all windows in the tree, root and cursor window, and
+ validate that current cursor is equal to that of cursor window
+ using extension.
+else
+ Report untested.
+>>EXTERN
+
+static char *WindowTree[]= {
+ ".",
+ "child1 . (10,10) 30x30",
+ "child2 . (50,50) 30x30",
+ "grandchild child2 (2,2) 20x20",
+};
+
+static int NWindowTree = NELEM(WindowTree);
+
+>>CODE
+Cursor goodcur;
+Window parent,curwin;
+Window windows[7]; /* root + 5 above + None stopper */
+Window root;
+Window *wp;
+struct buildtree *tree;
+char *wname;
+
+ if (!noext(1)) {
+
+ goodcur = makecur(display);
+ wp = windows;
+ *wp++ = root = DRW(display);
+ *wp++ = parent = grab_window;
+ tree = buildtree(display, parent, WindowTree, NWindowTree);
+ *wp++ = btntow(tree, "child1");
+ *wp++ = btntow(tree, "child2");
+ *wp++ = btntow(tree, "grandchild");
+ *wp++ = curwin = defwin(display);
+ *wp = None;
+ XDefineCursor(display, curwin, goodcur);
+ (void)warppointer(display, curwin, 2, 2);
+ if (spriteiswin(display, parent)) {
+ delete("Require XT_FONTCURSOR_GOOD to be other than default.");
+ return;
+ } else
+ CHECK;
+
+ cursor = goodcur;
+ XCALL;
+
+ for(wp=windows; *wp != None; wp++) { /* around 6 times */
+ (void)warppointer(display, *wp, 0,0);
+ /* use 0,0 as window making stuff keeps away from there on
+ * root. All of our tree windows are not at 0,0 either
+ */
+ if (spriteiswin(display, curwin)) /* true at least once! */
+ CHECK;
+ else {
+ report("Window %s did not have specified cursor as displayed cursor.",
+ (wname=btwton(tree,*wp)) ? wname :
+ ( *wp == root ? "ROOT" : "<Unknown>" ));
+ FAIL;
+ }
+ }
+
+ CHECKPASS(1+6);
+
+ } else {
+
+ cursor = makecur(display);
+
+ XCALL;
+ CHECK;
+
+ CHECKUNTESTED(1);
+ }
+
+>>ASSERTION Good B 3
+>># This assertion uses 'when' inappropriately. Could be split into two to
+>># fix this.
+When
+.A cursor
+is
+.S None ,
+then the normal cursor is displayed when the pointer position is
+in the
+.A grab_window
+and its subwindows, and the
+.A grab_window
+cursor is displayed when the pointer is in any other window.
+>>STRATEGY
+If extensions available:
+ Make a tree of windows rooted at grab_window (parent), all with default cursor.
+ Set grab_window to be one of its own children (child2), which has its own
+ child (grandchild).
+ Set grab_window's cursor to be a good, non default, cursor.
+ Set grab_window's child's (grandchild) cursor to be yet another good,
+ non default, cursor.
+ Call xname with cursor = None.
+ Warp pointer to all windows in the tree, plus root, and
+ validate that current cursor is equal to that of grab_window & grandchild,
+ respectively, when in the corresponding windows, but equal to that of
+ grab_window otherwise, using extension.
+else
+ Report untested.
+>>CODE
+Cursor goodcur1, goodcur2;
+Window parent,gchild;
+Window windows[6]; /* root + 4 above + None stopper */
+Window root;
+Window *wp;
+struct buildtree *tree;
+char *wname;
+
+ if (noext(0))
+ return;
+ goodcur1 = makecur(display);
+ goodcur2 = makecur2(display);
+ if (isdeleted()) {
+ report("Could not make cursors. Check that XT_FONTCURSOR_GOOD");
+ report("and XT_FONTCURSOR_GOOD+2 both are good glyphs in cursor font.");
+ return;
+ }
+ wp = windows;
+ *wp++ = root = DRW(display);
+ *wp++ = parent = grab_window;
+ tree = buildtree(display, parent, WindowTree, NWindowTree);
+ *wp++ = btntow(tree, "child1");
+ *wp++ = grab_window = btntow(tree, "child2");
+ *wp++ = gchild = btntow(tree, "grandchild");
+ *wp = None;
+ XDefineCursor(display, grab_window, goodcur1);
+ XDefineCursor(display, gchild, goodcur2);
+
+ (void)warppointer(display, gchild, 2, 2);
+ if (spriteiswin(display, grab_window)) {
+ delete("Require glyphs XT_FONTCURSOR_GOOD and XT_FONTCURSOR_GOOD+2 to differ in cursor font.");
+ return;
+ } else
+ CHECK;
+
+ cursor = None;
+ XCALL;
+
+ for(wp=windows; *wp != None; wp++) { /* around 5 times */
+ (void)warppointer(display, *wp, 0,0);
+ /* use 0,0 as window making stuff keeps away from there on
+ * root. All of our tree windows are not at 0,0 either
+ */
+ if (!(wname = btwton(tree,*wp)))
+ wname = (*wp == root) ? "ROOT" : "<Unknown>";
+ if (*wp == grab_window || *wp == gchild) {
+ if (spriteiswin(display, *wp))
+ CHECK;
+ else {
+ report("Window %s did not have cursor as its normal cursor", wname);
+ report("\twhen in grab_window or descendent.");
+ FAIL;
+ }
+ } else {
+ if (spriteiswin(display, grab_window))
+ CHECK;
+ else {
+ report("Window %s did not have cursor as grab_window's cursor", wname);
+ report("\twhen not in grab_window or descendent.");
+ FAIL;
+ }
+ }
+ }
+
+ CHECKPASS(1+5);
+>>ASSERTION Good A
+When
+.A confine_to
+is not
+.S None ,
+then the pointer is confined to that window.
+>>STRATEGY
+Create grab_window.
+Create window as the confine_to window.
+Grab pointer.
+Verify that pointer is now in the confine_to window.
+Warp pointer outside confine_to window.
+Verify that pointer is still within the confine_to window.
+>>CODE
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ grab_window = defwin(display);
+ confine_to = defwin(display);
+
+ XCALL;
+
+ if (getpointerwin(display, DRW(display)) != confine_to) {
+ report("Pointer was not warped to confine_to window");
+ FAIL;
+ } else
+ CHECK;
+
+ /* It is known that no window gets created at (0,0) */
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ if (getpointerwin(display, DRW(display)) != confine_to) {
+ report("Pointer moved out of confine_to window after warp");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When the pointer is not initially in the
+.A confine_to
+window, then it is warped automatically to the closest edge
+just before the grab activates and enter and leave events
+are generated.
+>>STRATEGY
+Create confine_to window.
+Create grab_window.
+Create spare window 'win'.
+Warp pointer to win.
+Enable events on win and grab and confine_to windows.
+Grab pointer.
+Verify that a leave event is generated on win.
+Verify that an enter event is generated on the confine_to window.
+>>CODE
+Window win;
+XEvent ev;
+XCrossingEvent *cp;
+XEnterWindowEvent entergood;
+XLeaveWindowEvent leavegood;
+
+ (void) warppointer(Dsp, DRW(Dsp), 0, 0);
+
+ grab_window = defwin(display);
+ confine_to = defwin(display);
+ win = defwin(display);
+
+ (void) warppointer(display, win, 0, 0);
+
+ XSelectInput(display, win, EnterWindowMask|LeaveWindowMask);
+ XSelectInput(display, grab_window, EnterWindowMask|LeaveWindowMask);
+ XSelectInput(display, confine_to, EnterWindowMask|LeaveWindowMask);
+
+ XCALL;
+
+ defsetevent(entergood, display, EnterNotify);
+ entergood.window = confine_to;
+ entergood.root = DRW(display);
+ entergood.subwindow = None;
+ entergood.time = 0;
+ entergood.mode = NotifyNormal;
+ entergood.detail = NotifyNonlinear;
+ entergood.same_screen = True;
+ entergood.focus = False;
+ entergood.state = 0;
+
+ defsetevent(leavegood, display, LeaveNotify);
+ leavegood.window = win;
+ leavegood.root = DRW(display);
+ leavegood.subwindow = None;
+ leavegood.time = 0;
+ leavegood.mode = NotifyNormal;
+ leavegood.detail = NotifyNonlinear;
+ leavegood.same_screen = True;
+ leavegood.focus = False;
+ leavegood.state = 0;
+
+ /*
+ * The first two events are the pointer leaving win and warping to
+ * confine_to. These are normal mode events.
+ */
+ if (getevent(display, &ev) == 0 || ev.type != LeaveNotify) {
+ report("No leave notify event for win received");
+ FAIL;
+ } else
+ CHECK;
+
+ cp = (XCrossingEvent*)&ev;
+ /* Set the fields that we can't conveniently check */
+ leavegood.time = cp->time;
+ leavegood.x = cp->x;
+ leavegood.y = cp->y;
+ leavegood.x_root = cp->x_root;
+ leavegood.y_root = cp->y_root;
+ leavegood.focus = cp->focus;
+ if (checkevent((XEvent*)&leavegood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ if (getevent(display, &ev) == 0 || ev.type != EnterNotify) {
+ report("No enter notify event for confine_to received");
+ FAIL;
+ } else
+ CHECK;
+
+ cp = (XCrossingEvent*)&ev;
+ /* Set the fields that we can't conveniently check */
+ entergood.time = cp->time;
+ entergood.x = cp->x;
+ entergood.y = cp->y;
+ entergood.x_root = cp->x_root;
+ entergood.y_root = cp->y_root;
+ entergood.focus = cp->focus;
+ if (checkevent((XEvent*)&entergood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ /*
+ * There are then grab mode enter and leave events to the grab window.
+ */
+ leavegood.window = win;
+ leavegood.mode = NotifyGrab;
+ entergood.window = grab_window;
+ entergood.mode = NotifyGrab;
+
+ if (getevent(display, &ev) == 0 || ev.type != LeaveNotify) {
+ report("No grab-mode leave notify event for win received");
+ FAIL;
+ } else
+ CHECK;
+
+ cp = (XCrossingEvent*)&ev;
+ /* Set the fields that we can't conveniently check */
+ leavegood.time = cp->time;
+ leavegood.x = cp->x;
+ leavegood.y = cp->y;
+ leavegood.x_root = cp->x_root;
+ leavegood.y_root = cp->y_root;
+ leavegood.focus = cp->focus;
+ if (checkevent((XEvent*)&leavegood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ if (getevent(display, &ev) == 0 || ev.type != EnterNotify) {
+ report("No grab-mode enter notify event for grab_window received");
+ FAIL;
+ } else
+ CHECK;
+
+ cp = (XCrossingEvent*)&ev;
+ /* Set the fields that we can't conveniently check */
+ entergood.time = cp->time;
+ entergood.x = cp->x;
+ entergood.y = cp->y;
+ entergood.x_root = cp->x_root;
+ entergood.y_root = cp->y_root;
+ entergood.focus = cp->focus;
+ if (checkevent((XEvent*)&entergood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(8);
+>>ASSERTION Good A
+When the
+.A confine_to
+window is subsequently reconfigured,
+then the pointer is warped automatically to keep it within the window.
+>>STRATEGY
+Create grab_window and confine_to window.
+Grab pointer.
+Move window so that it does not overlap it's previous position.
+Verify that pointer has been warped to the new position.
+>>CODE
+struct area area;
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ grab_window = defwin(display);
+
+ /*
+ * This time make confine_to a child of grab_window, also make it small
+ * so that moving it will force the pointer to move.
+ */
+ setarea(&area, 1, 1, 2, 2);
+ confine_to = crechild(display, grab_window, &area);
+
+ XCALL;
+
+ XMoveWindow(display, confine_to, 20, 20);
+ if (isdeleted())
+ return;
+
+ if (getpointerwin(display, grab_window) == confine_to)
+ CHECK;
+ else {
+ report("Pointer was not kept within confine_to when confine_to was moved");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good C
+If multiple screens are supported:
+When the
+.A confine_to
+window and the
+.A grab_window
+are not on the same screen, then the pointer is warped to the screen
+containing the
+.A confine_to
+window.
+>>STRATEGY
+If only one screen
+ UNSUPPORTED.
+Create grab_window on default screen.
+Create confine_to window on alternate screen.
+Grab pointer.
+Verify that pointer is warped to other screen.
+>>CODE
+Window root;
+Window wtmp;
+int itmp;
+unsigned uitmp;
+Bool s;
+
+ if (config.alt_screen < 0) {
+ unsupported("Only one screen supported");
+ return;
+ }
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ grab_window = defwin(display);
+ confine_to = defdraw(display, VI_ALT_WIN);
+
+ XCALL;
+
+ /*
+ * Query Pointer returns false if the pointer is not the same screen as
+ * the given window. Check with both windows, mainly as a sanity check
+ * against them being on the same screen.
+ */
+ s = XQueryPointer(display, confine_to, &root, &wtmp, &itmp, &itmp,
+ &itmp, &itmp , &uitmp);
+ if (s)
+ CHECK;
+ else {
+ report("Pointer was not warped to confine_to window on other screen");
+ FAIL;
+ }
+
+ s = XQueryPointer(display, grab_window, &root, &wtmp, &itmp, &itmp,
+ &itmp, &itmp , &uitmp);
+ if (s) {
+ report("Pointer was not warped to confine_to window on other screen");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good B 3
+When a successful call to xname is made, then the last-pointer-grab
+time is set to the specified time with
+.S CurrentTime
+replaced by the current X server time.
+>>EXTERN
+
+/*
+ * Returns True if the pointer is grabbed. This is not a general purpose
+ * routine since it knows about the Grab Pointer args.
+ * When the pointer is grabbed then pointer events are not reported to
+ * non grabbing clients.
+ */
+static
+pgrabbed()
+{
+Window win;
+Display *client2;
+XEvent ev;
+
+ if (confine_to != None)
+ win = confine_to;
+ else
+ win = grab_window;
+
+ client2 = opendisplay();
+
+ XSelectInput(client2, win, PointerMotionMask|EnterWindowMask);
+ /* Flush events for client2 */
+ XSync(client2, True);
+
+ /*
+ * Ensure that pointer either enters or moves within win.
+ */
+ (void) warppointer(display, win, 1, 1);
+ (void) warppointer(display, win, 1, 2);
+
+ XSync(client2, False);
+ if (getevent(client2, &ev)) {
+ /*
+ * An event was reported - pointer isn't grabbed, do a sanity
+ * check on the type of event.
+ */
+ if (ev.type != MotionNotify && ev.type != EnterNotify) {
+ delete("Unexpected event received in pgrabbed()");
+ delete(" event type %s", eventname(ev.type));
+ }
+ return(False);
+ } else {
+ return(True);
+ }
+}
+
+>>STRATEGY
+If extensions are available:
+ Call xname with time = gettime(display).
+ Check result and that pointer is grabbed.
+ Attempt XUngrabPointer at time just before time.
+ Check still grabbed.
+ Attempt XUngrabPointer at time equal to time.
+ Check no longer grabbed.
+
+ Get time before with gettime(display).
+ Call xname with time = CurrentTime.
+ Check result and that pointer is grabbed.
+ Attempt XUngrabPointer at time before.
+ Check still grabbed.
+ Attempt XUngrabPointer at CurrentTime.
+ Check no longer grabbed.
+else
+ Report untested.
+>>CODE
+Time t1,t2;
+int rc;
+
+ if (noext(0))
+ return;
+ else
+ CHECK;
+ XSync(display, True);
+ t1 = gettime(display);
+ if (t1 == CurrentTime) {
+ delete("Could not get server time.");
+ return;
+ } else
+ CHECK;
+
+ time = t1;
+ rc = XCALL;
+
+ if (!pgrabbed()) {
+ delete("Failed to grab and result was %s.", grabreplyname(rc));
+ return;
+ } else if (rc != GrabSuccess) {
+ report("Grab succeeded but result was %s.", grabreplyname(rc));
+ FAIL;
+ } else
+ CHECK;
+ /* now set up OK */
+ trace("Grabbed at time 0x%lx.",(unsigned long)time);
+ XUngrabPointer(display, time - 1);
+ if (!pgrabbed()) {
+ report("Last pointer grab time set earlier than specified time.");
+ FAIL;
+ } else
+ CHECK;
+ XUngrabPointer(display, time);
+ if (pgrabbed()) {
+ report("Last pointer grab time set later than specified time.");
+ FAIL;
+ } else
+ CHECK;
+
+ XUngrabPointer(display, CurrentTime); /* last despairing attempt */
+ if (pgrabbed()) {
+ delete("Cannot release pointer grab to perform CurrentTime tests.");
+ return;
+ } else
+ CHECK;
+
+ XSync(display, True);
+ t1 = gettime(display);
+ if (t1 == CurrentTime) {
+ delete("Could not get earlier server time.");
+ return;
+ } else
+ CHECK;
+
+ time = CurrentTime;
+ rc = XCALL;
+
+ if (!pgrabbed()) {
+ delete("Failed to grab at CurrentTime and result was %s.", grabreplyname(rc));
+ return;
+ } else if (rc != GrabSuccess) {
+ report("Grab succeeded at CurrentTime but result was %s.", grabreplyname(rc));
+ FAIL;
+ } else
+ CHECK;
+ /* now set up OK */
+ t2 = gettime(display);
+ if (t2 == CurrentTime) {
+ delete("Could not get later server time.");
+ return;
+ } else
+ CHECK;
+
+ trace("Grabbed at time between 0x%lx and 0x%lx (diff = %d).",t1,t2,t2-t1);
+ XUngrabPointer(display, t1);
+ if (!pgrabbed()) {
+ report("Last pointer grab time set earlier than 0x%lx.",t1);
+ FAIL;
+ } else
+ CHECK;
+ XUngrabPointer(display, t2);
+ if (pgrabbed()) {
+ report("Last pointer grab time set later than 0x%lx.", t2);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(11);
+
+>>ASSERTION Good A
+When the
+.A grab_window
+or
+.A confine_to
+window becomes not viewable during an active pointer grab,
+then the grab is released.
+>>STRATEGY
+Create new client, client2.
+Create grab and confine_to windows.
+Create spare window 'win' that does not overlap with the other two.
+Enable events on win for client2.
+Grab pointer.
+Unmap grab_window.
+Verify that grab is released by provoking pointer events for client2.
+
+Re-map grab_window.
+Grab pointer.
+Unmap confine_to window.
+Verify that grab is released by provoking pointer events for client2.
+>>CODE
+Display *client2;
+Window win;
+XEvent ev;
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ client2 = opendisplay();
+
+ grab_window = defwin(display);
+ confine_to = defwin(display);
+ win = defwin(display);
+
+ XSelectInput(client2, win, PointerMotionMask|EnterWindowMask);
+ XSync(client2, True);
+
+ XCALL;
+
+ XUnmapWindow(display, grab_window);
+
+ /*
+ * Warp into win and force all events to be received.
+ * If the grab has been released then this will generate
+ * an event for client2.
+ */
+ (void) warppointer(display, win, 0, 0);
+ XSync(client2, False);
+
+ if (XCheckWindowEvent(client2, win, PointerMotionMask|EnterWindowMask, &ev))
+ CHECK;
+ else {
+ report("Grab was not released when grab_window was unmapped");
+ FAIL;
+ }
+
+ /* Clear any extra events */
+ XSync(client2, True);
+
+ /* Now repeat for confine_to window. */
+ XMapWindow(display, grab_window);
+
+ XCALL;
+
+ XUnmapWindow(display, confine_to);
+
+ /* Warp to win and check for events on client2 */
+ (void) warppointer(display, win, 0, 0);
+ XSync(client2, False);
+
+ if (XCheckWindowEvent(client2, win, PointerMotionMask|EnterWindowMask, &ev))
+ CHECK;
+ else {
+ report("Grab was not released when confine_to window was unmapped");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When window reconfiguration causes the
+.A confine_to
+window to lie completely
+outside the boundaries of the root window during an active pointer grab, then
+the grab is released.
+>>STRATEGY
+Create second client.
+Create grab and confine_to windows.
+Create window, win.
+Select events on win for second client.
+Grab pointer.
+Move confine_to window off the root window.
+Verify that grab is released by provoking an event for second client.
+>>CODE
+Display *client2;
+Window win;
+XEvent ev;
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ client2 = opendisplay();
+
+ grab_window = defwin(display);
+ confine_to = defwin(display);
+ win = defwin(display);
+
+ XSelectInput(client2, win, PointerMotionMask|EnterWindowMask);
+ XSync(client2, True);
+
+ XCALL;
+
+ XMoveWindow(display, confine_to, -9000, -9000);
+ (void) warppointer(display, win, 0, 0);
+ XSync(client2, False);
+
+ if (isdeleted())
+ return;
+
+ if (XCheckWindowEvent(client2, win, PointerMotionMask|EnterWindowMask, &ev))
+ CHECK;
+ else {
+ report("Grab was not released when the confine_to window was placed beyond root window");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+When the
+.A grab_window
+is not viewable, then a call to xname fails and returns
+.S GrabNotViewable .
+>>STRATEGY
+Create unmapped grab window.
+Attempt to grab pointer.
+Verify that xname fails and returns GrabNotViewable.
+>>CODE
+int ret;
+
+ grab_window = defwin(display);
+ XUnmapWindow(display, grab_window);
+
+ ret = XCALL;
+ if (ret == GrabNotViewable)
+ PASS;
+ else {
+ report("Return value was %s, expecting GrabNotViewable", grabreplyname(ret));
+ FAIL;
+ }
+>>ASSERTION Bad A
+When the
+.A confine_to
+window is not viewable, then a call to xname fails and returns
+.S GrabNotViewable .
+>>STRATEGY
+Create unmapped confine_to window.
+Attempt to grab pointer.
+Verify that xname fails and returns GrabNotViewable.
+>>CODE
+int ret;
+
+ (void) warppointer(Dsp, DRW(Dsp), 0, 0);
+
+ grab_window = defwin(display);
+ confine_to = defwin(display);
+ XUnmapWindow(display, confine_to);
+
+ ret = XCALL;
+ if (ret == GrabNotViewable)
+ PASS;
+ else {
+ report("Return value was %s, expecting GrabNotViewable", grabreplyname(ret));
+ FAIL;
+ }
+>>ASSERTION Bad A
+When the
+.A confine_to
+window lies completely outside the boundaries of the root
+window, then a call to xname fails and returns
+.S GrabNotViewable .
+>>STRATEGY
+Create confine_to window.
+Move outside root window.
+Attempt to grab pointer.
+Verify that xname fails and returns GrabNotViewable.
+>>CODE
+int ret;
+
+ (void) warppointer(Dsp, DRW(Dsp), 0, 0);
+
+ grab_window = defwin(display);
+ confine_to = defwin(display);
+ XMoveWindow(display, confine_to, -9000, -9000);
+
+ ret = XCALL;
+ if (ret == GrabNotViewable)
+ PASS;
+ else {
+ report("Return value was %s, expecting GrabNotViewable", grabreplyname(ret));
+ FAIL;
+ }
+>>ASSERTION Bad A
+When the pointer is actively grabbed by some other client, then a call to xname
+fails and returns
+.S AlreadyGrabbed .
+>>STRATEGY
+Create client2.
+Grab pointer with client2.
+Attempt to grab pointer with default client.
+Verify that xname fails and returns AlreadyGrabbed.
+>>CODE
+Display *client2;
+int ret;
+
+ if ((client2 = opendisplay()) == 0)
+ return;
+
+ grab_window = defwin(Dsp);
+ if (isdeleted())
+ return;
+
+ display = client2;
+ XCALL;
+
+ display = Dsp;
+ ret = XCALL;
+ if (ret == AlreadyGrabbed)
+ CHECK;
+ else {
+ report("Return value was %s, expecting AlreadyGrabbed", grabreplyname(ret));
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+When the pointer is frozen by an active grab of another client, then
+a call to xname fails and returns
+.S GrabFrozen .
+>>STRATEGY
+Create client2.
+Grab keyboard and freeze pointer with client2.
+Attempt to grab pointer with default client.
+Verify that xname fails and returns GrabFrozen.
+>>CODE
+Display *client2;
+int ret;
+
+ if ((client2 = opendisplay()) == 0)
+ return;
+
+ grab_window = defwin(display);
+
+ if (XGrabKeyboard(client2, grab_window, True, GrabModeSync, GrabModeAsync, CurrentTime) != GrabSuccess) {
+ delete("Could not freeze pointer by grabbing keyboard");
+ return;
+ }
+
+ ret = XCALL;
+ if (ret == GrabFrozen)
+ CHECK;
+ else {
+ report("Return value was %s, expecting GrabFrozen", grabreplyname(ret));
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+When the specified time is earlier than the last-pointer-grab time or later
+than the current X server time, then a call to xname fails and returns
+.S GrabInvalidTime .
+>>STRATEGY
+Grab pointer with a given time.
+Release grab.
+Grab pointer with earlier time.
+Verify that xname fails and returns GrabInvalidTime.
+Get current server time.
+Grab pointer with later time.
+Verify that xname fails and returns GrabInvalidTime.
+>>CODE
+int ret;
+
+ grab_window = defwin(display);
+
+ /* get time from the server */
+ time = gettime(display);
+
+ /* This sets the last-pointer-grab time */
+ XCALL;
+ XUngrabPointer(display, time);
+
+ time -= 100;
+ ret = XCALL;
+ if (ret == GrabInvalidTime)
+ CHECK;
+ else {
+ report("Return value was %s, expecting GrabInvalidTime",
+ grabreplyname(ret));
+ FAIL;
+ }
+ XUngrabPointer(display, time);
+
+ /*
+ * Get current time again and add several minutes to get a time in the
+ * future.
+ */
+ time = gettime(display);
+ time += ((config.speedfactor+1) * 1000000);
+
+ ret = XCALL;
+ if (ret == GrabInvalidTime)
+ CHECK;
+ else {
+ report("Returned valued was %s, expecting GrabInvalidTime", grabreplyname(ret));
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+.ER BadCursor
+>>ASSERTION Bad A
+.ER BadValue event_mask mask ButtonPressMask ButtonReleaseMask EnterWindowMask LeaveWindowMask PointerMotionMask PointerMotionHintMask Button1MotionMask Button2MotionMask Button3MotionMask Button4MotionMask Button5MotionMask ButtonMotionMask KeymapStateMask
+>>ASSERTION Bad A
+.ER BadValue pointer_mode GrabModeSync GrabModeAsync
+>>ASSERTION Bad A
+.ER BadValue keyboard_mode GrabModeSync GrabModeAsync
+>>ASSERTION Bad A
+.ER BadValue owner_events True False
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH07/grbsrvr/grbsrvr.m b/xc/test/xsuite/xtest/tset/CH07/grbsrvr/grbsrvr.m
new file mode 100644
index 000000000..51f655291
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/grbsrvr/grbsrvr.m
@@ -0,0 +1,127 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGrabServer CH07
+void
+
+Display *display = Dsp;
+>>EXTERN
+
+#include "Xatom.h"
+
+>>ASSERTION Good A
+A call to xname
+disables processing of requests on all
+connections apart from the one issuing this request.
+>>STRATEGY
+Create first connection client1.
+Create second connection client2.
+Call xname on client1.
+Verify that requests are still processed on grabbing connection.
+Create another process.
+ In created process:
+ Perform a XChangeProperty request for client2.
+Wait sufficient time to allow client2 request to be processed.
+Verify that no PropertyChange event has been produced.
+Ungrab server.
+Wait sufficient time to allow client2 request to be processed.
+Check that event has now been received.
+>>EXTERN
+
+static Display *client1;
+static Display *client2;
+
+static Window win;
+
+>>CODE
+
+ client1 = opendisplay();
+ client2 = opendisplay();
+
+ win = defwin(Dsp);
+ XSelectInput(client1, win, PropertyChangeMask);
+ XSelectInput(client2, win, PropertyChangeMask);
+
+ if (isdeleted())
+ return;
+
+ display = client1;
+ XCALL;
+
+ /*
+ * The return value only tells us that the test has been deleted
+ * and reported as such. There is nothing further that we can
+ * do with it.
+ */
+ (void) tet_fork(cproc, pproc, 1, ~0);
+ /* Test now continues in pproc */
+>>EXTERN
+static void
+pproc()
+{
+int waittime;
+XEvent ev;
+int pass = 0, fail = 0;
+
+ /* Allow time for change prop to occur */
+ waittime = 2*config.speedfactor + 5;
+ sleep(waittime);
+
+ if (XCheckWindowEvent(display, win, PropertyChangeMask, &ev)) {
+ report("A request was processed for other than the grabbing client");
+ FAIL;
+ } else
+ CHECK;
+
+ /*
+ * Release the grab and wait a bit to allow the requests on the other
+ * connection to go ahead.
+ * NOTE: If the ungrab does not work then the child will time out
+ * and the tet_fork function will delete the test. This isn't really
+ * what we want, but is not unreasonable in this case because we are
+ * testing Grab and not Ungrab.
+ */
+ XUngrabServer(display);
+ XSync(display, False);
+
+ /* Allow time for change prop to occur */
+ sleep(waittime);
+ if (XCheckWindowEvent(display, win, PropertyChangeMask, &ev))
+ CHECK;
+ else {
+ delete("Requests were not processed after server grab was released.");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+}
+>>EXTERN
+/*
+ * Perform operation on client2 while client1 has the server grabbed.
+ */
+static void
+cproc()
+{
+long val;
+Atom name;
+
+ val = 5;
+ name = XInternAtom(client2, "name", False);
+ XChangeProperty(client2, win, name, XA_INTEGER, 32, PropModeReplace,
+ (unsigned char *)&val, 1);
+ XFlush(client2);
+ exit(0);
+}
diff --git a/xc/test/xsuite/xtest/tset/CH07/gtinptfcs/gtinptfcs.m b/xc/test/xsuite/xtest/tset/CH07/gtinptfcs/gtinptfcs.m
new file mode 100644
index 000000000..ac659d087
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/gtinptfcs/gtinptfcs.m
@@ -0,0 +1,69 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetInputFocus CH07
+void
+
+Display *display = Dsp;
+Window *focus_return = &fretwin;
+int *revert_to_return = &rtret;
+>>EXTERN
+
+static Window fretwin;
+static int rtret;
+
+>>ASSERTION Good A
+A call to xname
+returns the focus window,
+.S PointerRoot ,
+or
+.S None
+to
+.A focus_return
+and the current focus revert state to
+.A revert_to_return .
+>>STRATEGY
+Set focus state.
+Call xname to get focus state.
+Verify that it was the state that was set.
+>>EXTERN
+#define REVERT_TO RevertToPointerRoot
+
+>>SET startup focusstartup
+>>SET cleanup focuscleanup
+>>CODE
+Window win;
+
+ win = defwin(display);
+
+ XSetInputFocus(display, win, REVERT_TO, CurrentTime);
+
+ XCALL;
+
+ if (*focus_return != win) {
+ report("Incorrect window was returned");
+ FAIL;
+ } else
+ CHECK;
+
+ if (*revert_to_return != REVERT_TO) {
+ report("The revert_to_return argument was incorrect");
+ report(" was %d, expecting %d", *revert_to_return, REVERT_TO);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH07/gtkybrdcnt/gtkybrdcnt.m b/xc/test/xsuite/xtest/tset/CH07/gtkybrdcnt/gtkybrdcnt.m
new file mode 100644
index 000000000..a99bd8c23
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/gtkybrdcnt/gtkybrdcnt.m
@@ -0,0 +1,97 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetKeyboardControl CH07
+void
+
+Display *display = Dsp;
+XKeyboardState *values_return = &Ksvals;
+>>EXTERN
+
+static XKeyboardState Ksvals;
+
+>>ASSERTION Good A
+A call to xname returns the current control values for the keyboard to
+.A values_return .
+>>STRATEGY
+Set some keyboard values with XChangeKeyboardControl.
+Call xname to get values.
+Verify values are as set.
+>>CODE
+XKeyboardControl kset;
+XKeyboardState oldkb;
+
+ /*
+ * Actually first we save the original values.
+ */
+ values_return = &oldkb;
+ XCALL;
+
+ kset.key_click_percent = 21;
+ kset.bell_percent = 12;
+ kset.bell_pitch = 402;
+ kset.bell_duration = 222;
+
+ XChangeKeyboardControl(display, KBKeyClickPercent|KBBellPercent|KBBellPitch|KBBellDuration, &kset);
+
+ if (isdeleted())
+ return;
+
+ values_return = &Ksvals;
+ XCALL;
+
+ if (values_return->key_click_percent == kset.key_click_percent)
+ CHECK;
+ else {
+ report("Value of key_click_percent was %d, expecting %d",
+ values_return->key_click_percent, kset.key_click_percent);
+ FAIL;
+ }
+ if (values_return->bell_percent == kset.bell_percent)
+ CHECK;
+ else {
+ report("Value of bell_percent was %d, expecting %d",
+ values_return->bell_percent, kset.bell_percent);
+ FAIL;
+ }
+ if (values_return->bell_pitch == kset.bell_pitch)
+ CHECK;
+ else {
+ report("Value of bell_pitch was %d, expecting %d",
+ values_return->bell_pitch, kset.bell_pitch);
+ FAIL;
+ }
+ if (values_return->bell_duration == kset.bell_duration)
+ CHECK;
+ else {
+ report("Value of bell_duration was %d, expecting %d",
+ values_return->bell_duration, kset.bell_duration);
+ FAIL;
+ }
+
+ CHECKPASS(4);
+
+ /*
+ * Attempt to restore the original values.
+ */
+ kset.key_click_percent = oldkb.key_click_percent;
+ kset.bell_percent = oldkb.bell_percent;
+ kset.bell_pitch = oldkb.bell_pitch;
+ kset.bell_duration = oldkb.bell_duration;
+
+ XChangeKeyboardControl(display, KBKeyClickPercent|KBBellPercent|KBBellPitch|KBBellDuration, &kset);
+
+ XSync(display, False);
diff --git a/xc/test/xsuite/xtest/tset/CH07/gtkybrdmpp/gtkybrdmpp.m b/xc/test/xsuite/xtest/tset/CH07/gtkybrdmpp/gtkybrdmpp.m
new file mode 100644
index 000000000..595308dfc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/gtkybrdmpp/gtkybrdmpp.m
@@ -0,0 +1,231 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetKeyboardMapping CH07
+KeySym *
+xname
+Display *display = Dsp;
+KeyCode first_keycode = First;
+int keycode_count = ncodes;
+int *keysyms_per_keycode_return = &kpk;
+>>EXTERN
+
+#define MAXKPK 5 /* Maximum keysyms_per_keyocde we will use */
+#define MAXCODES 255 /* Max number of keycodes we will use */
+
+static KeyCode First;
+static int ncodes;
+static int kpk; /* Keysyms per keycode */
+static int oldkpk; /* old Keysyms per keycode */
+static KeySym *oldkeym;
+
+/*
+ * Can't really assume that there are any particular keysym names defined so
+ * we use our own arbitrary values.
+ */
+#define XT_KSYM1 0x5678
+#define XT_KSYM2 0x9228
+#define XT_KSYM3 0x4425
+#define XT_KSYM4 0x5326
+
+static KeySym Keys[MAXKPK*MAXCODES];
+
+/*
+ * Set startup and cleanup functions to save and restore
+ * the original keyboard map.
+ */
+>>SET startup savekeymap
+static void
+savekeymap()
+{
+int tmp;
+int last;
+int i;
+
+ startup();
+
+ if (Dsp==(Display *)NULL)
+ return;
+
+ XDisplayKeycodes(Dsp, &tmp, &last);
+ ncodes = last-tmp;
+ First = (KeyCode)tmp;
+
+ debug(2, "First keycode :%d", First);
+ debug(2, "Last keycode :%d", last);
+ debug(2, "Number of codes:%d", ncodes);
+
+ oldkeym = XGetKeyboardMapping(Dsp, First, ncodes, &oldkpk);
+
+ /*
+ * Initialise the keysym table.
+ */
+ for (i = 0; i < MAXKPK*MAXCODES-4; i += 4) {
+ Keys[i] = XT_KSYM1;
+ Keys[i+1] = XT_KSYM2;
+ Keys[i+2] = XT_KSYM3;
+ Keys[i+3] = XT_KSYM4;
+ }
+}
+
+>>SET cleanup cleankeymap
+static void
+cleankeymap()
+{
+ if (Dsp) {
+ XChangeKeyboardMapping(Dsp, First, oldkpk, oldkeym, ncodes);
+ XFree((char*) oldkeym);
+ }
+
+ cleanup();
+}
+
+
+>>ASSERTION Good A
+A call to xname returns an array, that can be freed with
+.F XFree ,
+of KeySyms associated with
+the specified number,
+.A keycode_count ,
+of KeyCodes starting with
+.A first_keycode .
+>>STRATEGY
+Set some KeySyms with XChangeKeyboardMapping.
+Call xname to get KeySyms.
+Verify they are as set.
+Free returned array with XFree.
+>>CODE
+int i, j;
+int syms_per_code;
+KeySym *newmap;
+
+ first_keycode = First+3;
+ syms_per_code = 3;
+ keycode_count = 9;
+
+ XChangeKeyboardMapping(display, first_keycode, syms_per_code, Keys, keycode_count);
+ if (isdeleted())
+ return;
+
+ newmap = XCALL;
+
+ for (i = 0; i < keycode_count; i++) {
+ for (j = 0; j < syms_per_code; j++) {
+ if (Keys[i*syms_per_code+j] ==
+ newmap[i*keysyms_per_keycode_return[0]+j])
+ CHECK;
+ else {
+ report("Keysym for keycode %d was 0x%x, expecting 0x%x",
+ first_keycode+i,
+ newmap[i*keysyms_per_keycode_return[0]+j],
+ Keys[i*syms_per_code+j]
+ );
+ FAIL;
+ break; /* probably pointless to continue */
+ }
+ }
+ }
+
+ XFree((char*)newmap);
+
+ CHECKPASS(syms_per_code*keycode_count);
+>>ASSERTION def
+>># A silly assertion. It is tested as much as possible above.
+On a call to xname the returned KeySyms list contains
+.br
+.A keycode_count * keysyms_per_keycode_return
+.br
+elements.
+>>ASSERTION Good A
+On a call to xname
+.A keysyms_per_keycode_return
+is set to a value that is large enough to report all of the KeySyms
+for any of the requested KeyCodes.
+>>STRATEGY
+Set KeySyms with XChangeKeyboardMapping.
+Call xname to get new value of this parameter.
+Verify that it is at least as large as set.
+>>CODE
+int syms_per_code = 6;
+
+ /*
+ * I don't know a really good test for this.
+ */
+ XChangeKeyboardMapping(display, first_keycode, syms_per_code, Keys, keycode_count);
+ if (isdeleted())
+ return;
+
+ XCALL;
+
+ if (keysyms_per_keycode_return[0] >= syms_per_code)
+ CHECK;
+ else {
+ report("keysyms_per_keycode_return was unexpected");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION def
+>># I'm not sure what you could do here, its just saying that there is
+>># a reserved value that means 'not used'.
+When an element for a particular KeyCode is unused,
+then a KeySym value of
+.S NoSymbol
+is used in the returned array.
+>>ASSERTION Bad A
+When the value specified in
+.A first_keycode
+is less than the minimum keycode as returned by
+.F XDisplayKeycodes ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set first_keycode to less than the minimum keycode.
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ first_keycode = First-1;
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+When the expression
+.A first_keycode + keycode_count "\- 1"
+is greater than the maximum keycode as returned by
+.F XDisplayKeycodes ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set first keycode to greater than the maximum keycode.
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ first_keycode = First+ncodes;
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ PASS;
+ else
+ FAIL;
diff --git a/xc/test/xsuite/xtest/tset/CH07/gtmdfrmppn/gtmdfrmppn.m b/xc/test/xsuite/xtest/tset/CH07/gtmdfrmppn/gtmdfrmppn.m
new file mode 100644
index 000000000..643ba5b7f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/gtmdfrmppn/gtmdfrmppn.m
@@ -0,0 +1,165 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetModifierMapping CH07
+XModifierKeymap *
+xname
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname returns a pointer to a newly created
+.S XModifierKeymap
+structure that contains the KeyCodes being used as modifiers
+and the structure can be freed with
+.F XFreeModifiermap .
+>>STRATEGY
+Call xname to get the current map.
+Free map with XFreeModifiermap.
+>>CODE
+XModifierKeymap *mkmp;
+extern struct valname S_modifier[];
+extern int NS_modifier;
+int mod;
+int set;
+
+ mkmp = XCALL;
+
+ for (mod = 0; mod < NS_modifier; mod++) {
+ trace("modifier %s:", S_modifier[mod].name);
+ for (set = 0; set < mkmp->max_keypermod; set++) {
+ trace(" 0x%x", mkmp->modifiermap[set+mod*mkmp->max_keypermod]);
+ }
+ }
+
+ XFreeModifiermap(mkmp);
+
+ CHECK; /* Merely check and record that we reach this point. */
+ CHECKPASS(1);
+
+>>ASSERTION Good B 3
+When only zero values appear in the set for any modifier,
+then that modifier is disabled.
+>>STRATEGY
+If extension available and at least one button:
+ Create a window.
+ Get two copies of current modifier map using xname, save one.
+ Zero keycodes for Shift.
+ Call XSetModiferMapping to set map to that with zeroed Shift row.
+ Set passive pointer grab on AnyButton with Shift modifier for window.
+ Warp pointer into window.
+ For all keycodes
+ Simulate key press.
+ Simulate Button1 press.
+ Check that pointer grab not active (i.e. key has not acted as Shift modifier).
+ Release key and button.
+ Restore map to saved version.
+ Free maps.
+else
+ report untested.
+>>EXTERN
+static int pgrabbed(display, win)
+Display *display;
+Window win;
+{
+ PointerPlace *p;
+ XEvent ev;
+ int result;
+
+ XSync(display, True);
+ XSelectInput(display, win, PointerMotionMask);
+ p = warppointer(display, win, 0,0);
+ (void) warppointer(display, win, 10,10);
+ (void) warppointer(display, p->oroot, p->ox, p->oy);
+ result = (getevent(display, &ev) == 0);
+ XSync(display, True);
+ return result;
+}
+>>CODE
+Window win;
+Display *client2;
+int minkc, maxkc;
+XModifierKeymap *map;
+XModifierKeymap *savemap;
+int k;
+int i;
+int row;
+int non_zero = 0;
+
+ if (noext(1))
+ return;
+ else
+ CHECK;
+ win = defwin(display);
+ client2 = opendisplay();
+ XDisplayKeycodes(display, &minkc, &maxkc);
+ savemap = XCALL;
+ map = XCALL;
+ if (isdeleted() || geterr() != Success || !map || !savemap) {
+ delete("Could not get initial modifier key map.");
+ return;
+ } else
+ CHECK;
+ row = ShiftMapIndex * map->max_keypermod;
+ for (i=0; i<map->max_keypermod; i++) {
+ if (map->modifiermap[ row+i ]) {
+ trace("Shift had keycode %d.", map->modifiermap[ row+i ]);
+ non_zero++;
+ map->modifiermap[ row+i ] = 0;
+ }
+ }
+ trace("Shift had %d keycodes.", non_zero);
+ if (XSetModifierMapping(display, map) != MappingSuccess || isdeleted()) {
+ delete("Could not set new mapping with all zeroes for Shift.");
+ XSetModifierMapping(display, savemap);
+ XFreeModifiermap(map);
+ XFreeModifiermap(savemap);
+ return;
+ } else
+ CHECK;
+ XGrabButton(display, AnyButton, ShiftMask, win, False, 0, GrabModeAsync, GrabModeAsync, None, None);
+ if (isdeleted()) {
+ delete("Could not set passive button grab.");
+ XSetModifierMapping(display, savemap);
+ XFreeModifiermap(map);
+ XFreeModifiermap(savemap);
+ return;
+ } else
+ CHECK;
+ if (pgrabbed(client2, win)) {
+ delete("Passive button grab erroneously triggered.");
+ XSetModifierMapping(display, savemap);
+ XFreeModifiermap(map);
+ XFreeModifiermap(savemap);
+ return;
+ } else
+ CHECK;
+ (void) warppointer(display, win, 2,2); /* pgrabbed restores pointer */
+ for(k=minkc; k <= maxkc; k++) {
+ keypress(display, k);
+ buttonpress(display, Button1);
+ if (pgrabbed(client2, win)) {
+ report("Despite Shift being disabled keycode %d acted like Shift modifier.", k);
+ FAIL;
+ } else
+ CHECK;
+ relalldev();
+ }
+
+ XUngrabButton(display, AnyButton, AnyModifier, win);
+ XSetModifierMapping(display, savemap);
+ XFreeModifiermap(map);
+ XFreeModifiermap(savemap);
+
+ CHECKPASS(5 + (maxkc - minkc + 1));
diff --git a/xc/test/xsuite/xtest/tset/CH07/gtpntrcntr/gtpntrcntr.m b/xc/test/xsuite/xtest/tset/CH07/gtpntrcntr/gtpntrcntr.m
new file mode 100644
index 000000000..45534a887
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/gtpntrcntr/gtpntrcntr.m
@@ -0,0 +1,82 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetPointerControl CH07
+void
+
+Display *display = Dsp;
+int *accel_numerator_return = &num;
+int *accel_denominator_return = &denom;
+int *threshold_return = &thresh;
+>>EXTERN
+
+static int num;
+static int denom;
+static int thresh;
+
+>>ASSERTION Good A
+A call to xname returns the current acceleration multiplier
+and acceleration threshold to
+.A accel_numerator_return ,
+.A accel_denominator_return
+and
+.A threshold_return .
+>>STRATEGY
+Set some values.
+Call xname.
+Verify values are as set.
+>>CODE
+int onum, odenom, othresh;
+int val = 34;
+
+ /* First get original values */
+ accel_numerator_return = &onum;
+ accel_denominator_return = &odenom;
+ threshold_return = &othresh;
+ XCALL;
+
+ XChangePointerControl(display, True, True, val, val, val);
+ if (isdeleted())
+ return;
+
+ accel_numerator_return = &num;
+ accel_denominator_return = &denom;
+ threshold_return = &thresh;
+ XCALL;
+
+ if (num == val)
+ CHECK;
+ else {
+ report("accel_numerator_return was %d, expecting %d", num, val);
+ FAIL;
+ }
+ if (denom == val)
+ CHECK;
+ else {
+ report("accel_denominator_return was %d, expecting %d", denom, val);
+ FAIL;
+ }
+ if (thresh == val)
+ CHECK;
+ else {
+ report("threshold_return was %d, expecting %d", thresh, val);
+ FAIL;
+ }
+
+ CHECKPASS(3);
+
+ XChangePointerControl(display, True, True, onum, odenom, othresh);
+ XSync(display, False);
diff --git a/xc/test/xsuite/xtest/tset/CH07/gtpntrmppn/gtpntrmppn.m b/xc/test/xsuite/xtest/tset/CH07/gtpntrmppn/gtpntrmppn.m
new file mode 100644
index 000000000..1ec1bda83
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/gtpntrmppn/gtpntrmppn.m
@@ -0,0 +1,193 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetPointerMapping CH07
+int
+xname()
+Display *display = Dsp;
+unsigned char *map_return = Map;
+int nmap = MAPSIZE;
+>>EXTERN
+
+/*
+ * The number of buttons should be between 1 and 5 -- allow more space
+ * in the array than this.
+ */
+#define MAPSIZE 20
+static unsigned char Map[MAPSIZE];
+
+>>ASSERTION Good B 3
+>>#A call to xname
+>>#returns the logical button numbers corresponding to the
+>>#physical button i+1, where i is an index into the returned array
+>>#.A map_return .
+A call to xname
+returns in map_return[i] the logical button numbers of the
+physical buttons i+1.
+>>STRATEGY
+Call xname to get pointer mapping.
+If extension available:
+ Create window and map it.
+ Select for ButtonPress events.
+ Warp into window.
+ For i in 1..nphysbuttons
+ Simulate pressing button i.
+ Check for incoming ButtonPress event.
+ Check that event.xbutton.button is map_return[i-1].
+ Release all buttons.
+else
+ UNTESTED touch test only.
+>>CODE
+int nbuttons;
+int i;
+Window win;
+
+ nbuttons = XCALL;
+ trace("Number of buttons reported as %d", nbuttons);
+
+ if (noext(nbuttons)) {
+ report("There is no reliable test method, but a touch test was performed");
+ UNTESTED;
+ return;
+ } else
+ CHECK;
+ win = defwin(display);
+ if (isdeleted()) {
+ delete("Failed to create ButtonPress window.");
+ return;
+ } else
+ CHECK;
+ XSelectInput(display, win, ButtonPressMask);
+ XSync(display, True);
+ if (isdeleted()) {
+ delete("Failed to select for ButtonPress. May indicate competing clients (e.g. window managers).");
+ return;
+ } else
+ CHECK;
+ (void) warppointer(display, win, 2, 2);
+ for (i=0; i<nbuttons; i++) {
+ XEvent ev;
+
+ XSync(display, True); /* clear out event Q */
+ _startcall(display); /* install and reset error handlers */
+ buttonpress(display, (unsigned int)i+1);
+ if (!XCheckWindowEvent(display, win, ButtonPressMask, &ev)) {
+ delete("No event received for button %d.", i+1);
+ relalldev();
+ return;
+ } else
+ CHECK;
+ relalldev();
+ _endcall(display); /* back to catching unexpected ones */
+ if (ev.xbutton.button != map_return[i]) {
+ report("Mapping for button %d is %d not %d.",
+ i+1, (int)ev.xbutton.button, (int)map_return[i]);
+ FAIL;
+ } else
+ CHECK;
+ trace("Mapping for button %d is %d, expecting %d.",
+ i+1, (int)ev.xbutton.button, (int)map_return[i]);
+ }
+ CHECKPASS(3+2*nbuttons);
+
+>>ASSERTION Good B 3
+A call to xname
+returns the number of physical buttons actually on the pointer.
+>>STRATEGY
+Call xname to get number of buttons.
+Check this lies within the protocol limit of 1..5.
+If extension available:
+ Simulate the pressing of buttons 1..5 and check that
+ we got Success for buttons in the range returned by xname, and
+ we got BadValue for the rest.
+ Release all buttons.
+>>CODE
+int nbuttons;
+int i;
+
+ nbuttons = XCALL;
+ if (nbuttons < 1 || nbuttons > 5) {
+ report("Protocol limit of 1..5 buttons exceeded (%d).", nbuttons);
+ FAIL;
+ } else
+ CHECK;
+
+ if (noext(nbuttons)) {
+ report("There is no reliable test method, but a touch test was performed");
+ UNTESTED;
+ return;
+ } else
+ CHECK;
+
+ for(i=0; i<5; i++) {
+ _startcall(display); /* install and reset error handlers */
+ buttonpress(display, (unsigned int)i+1);
+ if (geterr() != ((i<nbuttons)?Success:BadValue)) {
+ report("Apparently button %d could%s be pressed.",
+ i+1, (i<nbuttons)?"n't":"");
+ FAIL;
+ } else
+ CHECK;
+ relalldev();
+ _endcall(display); /* back to catching unexpected ones */
+ }
+ CHECKPASS(2+5);
+
+>>ASSERTION Good A
+When the
+.A nmap
+argument is less than the number of elements in the pointer mapping,
+then only the first
+.A nmap
+elements are returned in
+.A map_return .
+>>STRATEGY
+Set all elements of map_return to 255.
+Set nmap to a value less than number of elements in the pointer mapping.
+Call xname.
+Verify that elements of map_return beyond nmap-1 are still 255.
+>>CODE
+int nbuttons;
+int i;
+#define TEST_VAL ((unsigned char)255)
+
+ nbuttons = XCALL;
+
+ for (i = 0; i < MAPSIZE; i++)
+ Map[i] = TEST_VAL;
+
+ /*
+ * Its not clear that asking for 0 elements is really sensible so we
+ * only do it when there is only one button.
+ */
+ if (nbuttons == 1)
+ nmap = 0;
+ else
+ nmap = 1;
+
+ XCALL;
+
+ for (i = nmap; i < MAPSIZE; i++) {
+ if (Map[i] != TEST_VAL) {
+ report("An element beyond the first nmap was returned");
+ report(" element %d was %u, expecting %u", i, (unsigned)Map[i],
+ (unsigned)TEST_VAL);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(MAPSIZE-nmap);
diff --git a/xc/test/xsuite/xtest/tset/CH07/gtscrnsvr/gtscrnsvr.m b/xc/test/xsuite/xtest/tset/CH07/gtscrnsvr/gtscrnsvr.m
new file mode 100644
index 000000000..373181eae
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/gtscrnsvr/gtscrnsvr.m
@@ -0,0 +1,100 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetScreenSaver CH07
+void
+
+Display *display = Dsp;
+int *timeout_return = &tr;
+int *interval_return = &ir;
+int *prefer_blanking_return = &pbr;
+int *allow_exposures_return = &aer;
+>>EXTERN
+
+static int tr;
+static int ir;
+static int pbr;
+static int aer;
+
+static int origt;
+static int origi;
+static int origpb;
+static int origae;
+
+>>SET startup savesaver
+static void
+savesaver()
+{
+ startup();
+ if(Dsp)
+ XGetScreenSaver(Dsp, &origt, &origi, &origpb, &origae);
+}
+
+>>SET cleanup resetsaver
+static void
+resetsaver()
+{
+ if(Dsp)
+ XSetScreenSaver(Dsp, origt, origi, origpb, origae);
+ cleanup();
+}
+
+>>ASSERTION Good A
+A call to xname returns the current screen saver values.
+>>STRATEGY
+Set screen saver values.
+Get screen saver values.
+Verify that returned values are as set.
+>>EXTERN
+#define TOUT 71
+#define INTERVAL 57
+#define BLANKING PreferBlanking
+#define EXPOSURES AllowExposures
+>>CODE
+
+ XSetScreenSaver(display, TOUT, INTERVAL, BLANKING, EXPOSURES);
+
+ XCALL;
+
+ if (*timeout_return == TOUT)
+ CHECK;
+ else {
+ report("timeout_return was %d, expecting %d", *timeout_return, TOUT);
+ FAIL;
+ }
+ if (*interval_return == INTERVAL)
+ CHECK;
+ else {
+ report("interval_return was %d, expecting %d",
+ *interval_return, INTERVAL);
+ FAIL;
+ }
+ if (*prefer_blanking_return == BLANKING)
+ CHECK;
+ else {
+ report("prefer_blanking_return was %d, expecting %d",
+ *prefer_blanking_return, BLANKING);
+ FAIL;
+ }
+ if (*allow_exposures_return == EXPOSURES)
+ CHECK;
+ else {
+ report("allow_exposures_return was %d, expecting %d",
+ *allow_exposures_return, EXPOSURES);
+ FAIL;
+ }
+
+ CHECKPASS(4);
diff --git a/xc/test/xsuite/xtest/tset/CH07/insrtmdfrm/insrtmdfrm.m b/xc/test/xsuite/xtest/tset/CH07/insrtmdfrm/insrtmdfrm.m
new file mode 100644
index 000000000..7fba02ff7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/insrtmdfrm/insrtmdfrm.m
@@ -0,0 +1,90 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XInsertModifiermapEntry CH07
+XModifierKeymap *
+xname
+XModifierKeymap *modmap = Modmap;
+KeyCode keycode_entry;
+int modifier;
+>>EXTERN
+
+static XModifierKeymap *Modmap;
+
+>>ASSERTION Good A
+A call to xname adds the specified KeyCode,
+.A keycode_entry ,
+to the set
+that controls the specified
+.A modifier
+and returns a pointer to the modified
+.S XModifierKeymap
+structure.
+>>STRATEGY
+Create new modifiermap.
+Insert several entries into the map with xname.
+Verify by direct inspection that entries have been added.
+>>CODE
+struct kcmod {
+ KeyCode kc;
+ int mod;
+ int found;
+};
+static struct kcmod kcmod[] = {
+ {0x34, ShiftMapIndex},
+ {0x56, Mod3MapIndex},
+ {0x76, ControlMapIndex},
+ {0x77, ControlMapIndex},
+ {0xF6, Mod3MapIndex},
+};
+int i;
+int set;
+extern int NS_modifier;
+
+ modmap = XNewModifiermap(0);
+ if (modmap == 0) {
+ delete("Could not create modifiermap");
+ return;
+ }
+
+ for (i = 0; i < NELEM(kcmod); i++) {
+ keycode_entry = kcmod[i].kc;
+ modifier = kcmod[i].mod;
+
+ modmap = XCALL;
+
+ kcmod[i].found = 0;
+ }
+
+ for (i = 0; i < NELEM(kcmod); i++) {
+ /* Look in the map */
+ for (set = 0; set < modmap->max_keypermod; set++) {
+ if (modmap->modifiermap[kcmod[i].mod*modmap->max_keypermod+set]==kcmod[i].kc)
+ kcmod[i].found++;
+ }
+ }
+
+ for (i = 0; i < NELEM(kcmod); i++) {
+ if (kcmod[i].found)
+ CHECK;
+ else {
+ report("Keycode 0x%x, modifier %s not added to map",
+ kcmod[i].kc, modifiername(kcmod[i].mod));
+ FAIL;
+ }
+ }
+
+ CHECKPASS(NELEM(kcmod));
diff --git a/xc/test/xsuite/xtest/tset/CH07/instllclrm/instllclrm.m b/xc/test/xsuite/xtest/tset/CH07/instllclrm/instllclrm.m
new file mode 100644
index 000000000..a1193ca4c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/instllclrm/instllclrm.m
@@ -0,0 +1,206 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XInstallColormap CH07
+void
+xname
+Display *display = Dsp;
+Colormap colormap;
+>>EXTERN
+
+static Colormap *savcm;
+static int nsavcm;
+
+/*
+ * savcm and restorecm attempt to restore the colormaps that were
+ * installed originally. However it is possible that different
+ * colour maps will end up on the required list than before.
+ */
+savecm()
+{
+ savcm = XListInstalledColormaps(display, DRW(display), &nsavcm);
+}
+
+restorecm()
+{
+int i;
+
+ for (i = 0; i < nsavcm; i++) {
+ debug(1, "Re-installing colour map 0x%x", savcm[i]);
+ XInstallColormap(display, savcm[i]);
+ }
+ if (nsavcm && savcm)
+ XFree((char*)savcm);
+}
+
+>>ASSERTION Good A
+A call to xname installs the specified colourmap for its associated screen.
+>>STRATEGY
+For each visual type.
+ Create colourmap.
+ Install colourmap.
+ Verify that new colourmap has been installed by listing the installed
+ colourmaps.
+>>CODE
+XVisualInfo *vp;
+Colormap *cmp;
+int mode;
+int n;
+int i;
+
+ savecm();
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ switch (vp->class) {
+ case StaticGray:
+ case StaticColor:
+ case TrueColor:
+ mode = AllocNone;
+ break;
+ default:
+ mode = AllocAll;
+ break;
+ }
+ colormap = makecolmap(display, vp->visual, mode);
+
+ XCALL;
+
+ cmp = XListInstalledColormaps(display, DRW(display), &n);
+ for (i = 0; i < n; i++) {
+ if (cmp[i] == colormap) {
+ CHECK;
+ break;
+ }
+ }
+ if (i == n) {
+ report("Colourmap was not installed");
+ FAIL;
+ }
+
+ XFree((char*)cmp);
+ }
+
+ CHECKPASS(nvinf());
+
+ restorecm();
+>>ASSERTION Good B 3
+All windows associated with the specified colourmap immediately display with
+true colours.
+>>ASSERTION Good B 1
+A call to xname adds the
+specified colourmap to the head of the required list of colourmaps for its
+associated screen, and the required list is truncated to the minimum
+number of installed colourmaps for the screen.
+>>ASSERTION Good A
+When the specified colourmap is not already an installed colourmap, then a
+.S ColormapNotify
+event is generated on each window that has that colourmap.
+>>STRATEGY
+For each visual.
+ Create windows.
+ Create colormap for those windows.
+ Set the window colour maps.
+ Create another window without using the new colour map.
+ Install the colour map.
+ Verify that a colour map notify event is received on the windows that have
+ that colour map.
+ Verify that the event is not received on the other window.
+>>CODE
+XVisualInfo *vp;
+Window base;
+Window w1, w2;
+Window w3nocm;
+XEvent ev;
+XColormapEvent good;
+XColormapEvent *cmp;
+int got;
+#define GOT1 1
+#define GOT2 2
+
+ defsetevent(good, display, ColormapNotify);
+ good.new = False;
+ good.state = ColormapInstalled;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+
+ base = makewin(display, vp);
+ w1 = crechild(display, base, (struct area *)0);
+ w2 = crechild(display, base, (struct area *)0);
+ w3nocm = crechild(display, base, (struct area *)0);
+
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ XSetWindowColormap(display, w1, colormap);
+ XSelectInput(display, w1, ColormapChangeMask);
+ XSetWindowColormap(display, w2, colormap);
+ XSelectInput(display, w2, ColormapChangeMask);
+ XSelectInput(display, w3nocm, ColormapChangeMask);
+
+ XCALL;
+
+ while (getevent(display, &ev)) {
+ cmp = (XColormapEvent*)&ev;
+ /*
+ * Server is allowed to install or uninstalled implementation
+ * defined colormaps implicitly, so we have to ignore
+ * all the ones that we don't know about.
+ */
+ if (cmp->colormap != colormap)
+ continue;
+ if (cmp->window == w3nocm) {
+ report("ColormapNotify event received for window that did not have that colourmap");
+ FAIL;
+ } else
+ CHECK;
+
+ if (cmp->window == w1)
+ got |= GOT1;
+ else if (cmp->window == w2)
+ got |= GOT2;
+ else {
+ report("ColormapNotify received on unexpected window");
+ FAIL;
+ }
+
+ good.window = cmp->window;
+ good.colormap = colormap;
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+ }
+ }
+ if (got & GOT1)
+ CHECK;
+ else {
+ report("Event not received on window 'w1'");
+ FAIL;
+ }
+ if (got & GOT2)
+ CHECK;
+ else {
+ report("Event not received on window 'w2'");
+ FAIL;
+ }
+
+ CHECKPASS(nvinf()*4+2);
+
+>>ASSERTION Good B 1
+When another colourmap is installed or uninstalled as
+a side effect of a call to xname, then a
+.S ColormapNotify
+event is generated on each window that has that colourmap.
+>>ASSERTION Bad A
+.ER BadColor
diff --git a/xc/test/xsuite/xtest/tset/CH07/kllclnt/kllclnt.m b/xc/test/xsuite/xtest/tset/CH07/kllclnt/kllclnt.m
new file mode 100644
index 000000000..068878e40
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/kllclnt/kllclnt.m
@@ -0,0 +1,235 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XKillClient CH07
+void
+
+Display *display = Dsp;
+XID resource;
+>>ASSERTION Good A
+A call to xname forces a close-down of the client
+that created the specified
+.A resource .
+>>STRATEGY
+Create a client client1.
+Create several resources using client1.
+Call xname with one of these resources.
+Verify that all client1's resources are destroyed and infer that client1 was
+destroyed.
+>>CODE
+Display *client1;
+Window win;
+Pixmap pix;
+Colormap cm;
+unsigned int width, height;
+
+/* We must disable resource registration here to prevent attempted
+ deallocation of closed connections and deleted resources. */
+ regdisable();
+ client1 = opendisplay();
+ if (client1 == 0) {
+ delete("Could not open display");
+ regenable();
+ return;
+ }
+
+ win = defwin(client1);
+ pix = XCreatePixmap(client1, DRW(display), 2, 3,
+ DefaultDepth(client1, DefaultScreen(client1)));
+ cm = makecolmap(client1, DefaultVisual(client1, DefaultScreen(client1)), AllocNone);
+
+ regenable();
+
+ XSync(client1, False);
+ if (isdeleted())
+ return;
+
+ resource = (XID) cm;
+ XCALL;
+
+ CATCH_ERROR(Dsp);
+ getsize(Dsp, win, &width, &height);
+ if (GET_ERROR(Dsp) == BadDrawable)
+ CHECK;
+ else {
+ report("Window was not destroyed");
+ FAIL;
+ }
+
+ reseterr();
+ getsize(Dsp, pix, &width, &height);
+ if (GET_ERROR(Dsp) == BadDrawable)
+ CHECK;
+ else {
+ report("Pixmap was not destroyed");
+ FAIL;
+ }
+ RESTORE_ERROR(Dsp);
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When the client that created the resource has already terminated in
+either
+.S RetainPermanent
+or
+.S RetainTemporary
+mode, then all the resources of that client
+are destroyed.
+>>STRATEGY
+Create a connection, client1.
+Create resources for client1.
+Set close-down mode to RetainPermanent.
+Close client1 connection with XCloseDisplay.
+Check client1 resources still exist.
+Call xname with one of the client1 resources.
+Verify that all client1 resources are destroyed.
+>>EXTERN
+
+#define N_RES 4
+
+>>CODE
+Display *client1;
+Window w[N_RES];
+XWindowAttributes atts;
+int i;
+
+/* We must disable resource registration here to prevent attempted
+ deallocation of closed connections and deleted resources. */
+ regdisable();
+
+ client1 = opendisplay();
+ if (client1 == 0) {
+ delete("Could not open display");
+ regenable();
+ return;
+ }
+
+ w[0] = defwin(client1);
+ w[1] = defwin(client1);
+ w[2] = defwin(client1);
+ w[3] = defwin(client1);
+ regenable();
+
+ XSetCloseDownMode(client1, RetainPermanent);
+ XCloseDisplay(client1);
+
+ CATCH_ERROR(Dsp);
+ for (i = 0; i < N_RES; i++) {
+ if (XGetWindowAttributes(Dsp, w[i], &atts) == False) {
+ delete("RetainPermanent windows were destroyed");
+ return;
+ }
+ }
+ RESTORE_ERROR(Dsp);
+
+ resource = w[2];
+ XCALL;
+
+ CATCH_ERROR(Dsp);
+ for (i = 0; i < N_RES; i++) {
+ if (XGetWindowAttributes(Dsp, w[i], &atts) == True) {
+ report("RetainPermanent window was not destroyed");
+ FAIL;
+ } else
+ CHECK;
+ }
+ RESTORE_ERROR(Dsp);
+
+ CHECKPASS(N_RES);
+
+>>ASSERTION Good A
+When a
+.A resource
+of
+.S AllTemporary
+is specified, then the resources of all clients that have terminated in
+.S RetainTemporary
+mode are destroyed.
+>>STRATEGY
+Open connection client1.
+Open connextion client2.
+Make resources for both clients.
+Set close-down mode of RetainTemporary for both.
+Close both clients with XCloseDisplay.
+Call xname with ID AllTemporary.
+Verify that all clients 1 and 2 resources are destroyed.
+>>CODE
+XWindowAttributes atts;
+Display *client1;
+Display *client2;
+Window w1;
+Window w2;
+
+/* We must disable resource registration here to prevent attempted
+ deallocation of closed connections and deleted resources. */
+ regdisable();
+
+ if ((client1 = opendisplay()) == NULL) {
+ delete("Could not open display");
+ regenable();
+ return;
+ }
+ if ((client2 = opendisplay()) == NULL) {
+ delete("Could not open display");
+ regenable();
+ return;
+ }
+
+ w1 = defwin(client1);
+ w2 = defwin(client2);
+
+ regenable();
+
+ XSetCloseDownMode(client1, RetainTemporary);
+ XSetCloseDownMode(client2, RetainTemporary);
+
+ XCloseDisplay(client1);
+ XCloseDisplay(client2);
+
+ resource = AllTemporary;
+ XCALL;
+
+ CATCH_ERROR(Dsp);
+ if (XGetWindowAttributes(Dsp, w1, &atts) == True) {
+ report("RetainTemporary window was not destroyed");
+ FAIL;
+ } else
+ CHECK;
+ if (XGetWindowAttributes(Dsp, w2, &atts) == True) {
+ report("RetainTemporary window was not destroyed");
+ FAIL;
+ } else
+ CHECK;
+ RESTORE_ERROR(Dsp);
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+When the specified
+.A resource
+is not valid, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Get bad id using badwin().
+Call xname with this value.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ resource = badwin(Dsp);
+ XCALL;
+
+ if (geterr() == BadValue)
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH07/linktbl.c b/xc/test/xsuite/xtest/tset/CH07/linktbl.c
new file mode 100644
index 000000000..8e1fd5e90
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/linktbl.c
@@ -0,0 +1,120 @@
+/* $XConsortium$ */
+
+#include "xtest.h"
+
+extern struct linkinfo EXActvtScrnSv;
+extern struct linkinfo EXAddHst;
+extern struct linkinfo EXAddHsts;
+extern struct linkinfo EXAddTSvSt;
+extern struct linkinfo EXAllwEvnts;
+extern struct linkinfo EXAtRptOff;
+extern struct linkinfo EXAtRptOn;
+extern struct linkinfo EXBll;
+extern struct linkinfo EXChngActvPnt;
+extern struct linkinfo EXChngKybrdCn;
+extern struct linkinfo EXChngKybrdMp;
+extern struct linkinfo EXChngPntrCnt;
+extern struct linkinfo EXChngSvSt;
+extern struct linkinfo EXDltMdfrmpEn;
+extern struct linkinfo EXDsblAccssCn;
+extern struct linkinfo EXDsplyKycds;
+extern struct linkinfo EXEnblAccssCn;
+extern struct linkinfo EXFrcScrnSvr;
+extern struct linkinfo EXFrMdfrmp;
+extern struct linkinfo EXGtInptFcs;
+extern struct linkinfo EXGtKybrdCntr;
+extern struct linkinfo EXGtKybrdMppn;
+extern struct linkinfo EXGtMdfrMppng;
+extern struct linkinfo EXGtPntrCntrl;
+extern struct linkinfo EXGtPntrMppng;
+extern struct linkinfo EXGtScrnSvr;
+extern struct linkinfo EXGrbBttn;
+extern struct linkinfo EXGrbKy;
+extern struct linkinfo EXGrbKybrd;
+extern struct linkinfo EXGrbPntr;
+extern struct linkinfo EXGrbSrvr;
+extern struct linkinfo EXInsrtMdfrmp;
+extern struct linkinfo EXInstllClrmp;
+extern struct linkinfo EXKllClnt;
+extern struct linkinfo EXLstHsts;
+extern struct linkinfo EXLstInstlldC;
+extern struct linkinfo EXNwMdfrmp;
+extern struct linkinfo EXQryKymp;
+extern struct linkinfo EXRmvFrmSvSt;
+extern struct linkinfo EXRmvHst;
+extern struct linkinfo EXRmvHsts;
+extern struct linkinfo EXRprntWdw;
+extern struct linkinfo EXRstScrnSvr;
+extern struct linkinfo EXStAccssCntr;
+extern struct linkinfo EXStClsDwnMd;
+extern struct linkinfo EXStInptFcs;
+extern struct linkinfo EXStMdfrMppng;
+extern struct linkinfo EXStPntrMppng;
+extern struct linkinfo EXStScrnSvr;
+extern struct linkinfo EXUngrbBttn;
+extern struct linkinfo EXUngrbKy;
+extern struct linkinfo EXUngrbKybrd;
+extern struct linkinfo EXUngrbPntr;
+extern struct linkinfo EXUngrbSrvr;
+extern struct linkinfo EXUnnstllClrm;
+extern struct linkinfo EXWrpPntr;
+
+struct linkinfo *linktbl[] = {
+ &EXActvtScrnSv,
+ &EXAddHst,
+ &EXAddHsts,
+ &EXAddTSvSt,
+ &EXAllwEvnts,
+ &EXAtRptOff,
+ &EXAtRptOn,
+ &EXBll,
+ &EXChngActvPnt,
+ &EXChngKybrdCn,
+ &EXChngKybrdMp,
+ &EXChngPntrCnt,
+ &EXChngSvSt,
+ &EXDltMdfrmpEn,
+ &EXDsblAccssCn,
+ &EXDsplyKycds,
+ &EXEnblAccssCn,
+ &EXFrcScrnSvr,
+ &EXFrMdfrmp,
+ &EXGtInptFcs,
+ &EXGtKybrdCntr,
+ &EXGtKybrdMppn,
+ &EXGtMdfrMppng,
+ &EXGtPntrCntrl,
+ &EXGtPntrMppng,
+ &EXGtScrnSvr,
+ &EXGrbBttn,
+ &EXGrbKy,
+ &EXGrbKybrd,
+ &EXGrbPntr,
+ &EXGrbSrvr,
+ &EXInsrtMdfrmp,
+ &EXInstllClrmp,
+ &EXKllClnt,
+ &EXLstHsts,
+ &EXLstInstlldC,
+ &EXNwMdfrmp,
+ &EXQryKymp,
+ &EXRmvFrmSvSt,
+ &EXRmvHst,
+ &EXRmvHsts,
+ &EXRprntWdw,
+ &EXRstScrnSvr,
+ &EXStAccssCntr,
+ &EXStClsDwnMd,
+ &EXStInptFcs,
+ &EXStMdfrMppng,
+ &EXStPntrMppng,
+ &EXStScrnSvr,
+ &EXUngrbBttn,
+ &EXUngrbKy,
+ &EXUngrbKybrd,
+ &EXUngrbPntr,
+ &EXUngrbSrvr,
+ &EXUnnstllClrm,
+ &EXWrpPntr,
+ 0,
+};
diff --git a/xc/test/xsuite/xtest/tset/CH07/lsthsts/lsthsts.m b/xc/test/xsuite/xtest/tset/CH07/lsthsts/lsthsts.m
new file mode 100644
index 000000000..19555b29e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/lsthsts/lsthsts.m
@@ -0,0 +1,126 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XListHosts CH07
+XHostAdress *
+
+Display *display = Dsp;
+int *nhosts_return = &Nhosts;
+Bool *state_return = &State;
+>>EXTERN
+
+#include "xthost.h"
+
+static int Nhosts;
+static Bool State;
+
+>>ASSERTION Good A
+A call to xname
+returns a pointer to a list of host structures,
+that can be freed with
+.F XFree ,
+for hosts that
+are in the current access control list and
+returns the size of the list in
+.A nhosts_return .
+>>STRATEGY
+Attempt to add some hosts to the access list.
+If BadAccess error:
+ Note that the known address will not necessarily be in list.
+Call xname.
+If hosts were added to the access list:
+ Verify that nhosts_return is greater than or equal to number of known names.
+ Verify that each known name is in the list.
+Verify that nhosts_return addresses can be accessed in the return value.
+Free returned value with XFree.
+>>CODE
+XHostAddress *list;
+int couldadd = 0;
+int i, j;
+
+ CATCH_ERROR(display);
+ XAddHosts(display, xthosts, nxthosts);
+ RESTORE_ERROR(display);
+
+ if (GET_ERROR(display) == BadAccess) {
+ couldadd = False;
+ debug(1, "Could not add hosts");
+ } else {
+ couldadd = True;
+ }
+
+ list = XCALL;
+
+ if (couldadd) {
+ if (*nhosts_return >= nxthosts)
+ CHECK;
+ else {
+ report("nhosts was %d, expecting at least %d",
+ *nhosts_return, nxthosts);
+ FAIL;
+ }
+
+ for (i = 0; i < nxthosts; i++) {
+ for (j = 0; j < *nhosts_return; j++) {
+ if (samehost(&xthosts[i], &list[j]))
+ break;
+ }
+ if (j == *nhosts_return) {
+ report("Host list did not include xthosts[%d]", i);
+ FAIL;
+ } else if (i == 0)
+ CHECK;
+ }
+ } else {
+ CHECK; CHECK; /* For balance */
+ }
+
+ for (j = 0; j < *nhosts_return; j++) {
+ /* Do something to access addresses */
+ trace("family=%d, length=%d", list[j].family, list[j].length);
+ }
+ XFree((char*)list);
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+A call to xname returns a boolean to
+.A state_return
+that is
+.S True
+to mean that the use of the list is enabled for restricting the hosts
+that are allowed to make connections
+and is
+.S False
+to mean that the use of the list is disabled and that any host
+can connect.
+>>STRATEGY
+Call xname.
+Verify that state_return is either True or False.
+>>CODE
+XHostAddress *list;
+
+ list = XCALL;
+
+ if (*state_return == True || *state_return == False)
+ CHECK;
+ else {
+ report("State return was neither True or False");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+
+ XFree((char*)list);
diff --git a/xc/test/xsuite/xtest/tset/CH07/lstinstlld/lstinstlld.m b/xc/test/xsuite/xtest/tset/CH07/lstinstlld/lstinstlld.m
new file mode 100644
index 000000000..923b7622e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/lstinstlld/lstinstlld.m
@@ -0,0 +1,67 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XListInstalledColormaps CH07
+Colormap *
+xname
+Display *display = Dsp;
+Window w;
+int *num_return = &Num;
+>>EXTERN
+
+/* Variable to hold the return value in */
+static int Num;
+
+>>ASSERTION Good A
+A call to xname returns a list, that can be
+freed with
+.F XFree ,
+of the currently installed colourmaps for the screen
+of the specified window and the number of such colourmaps
+in
+.A num_return .
+>>STRATEGY
+Call xname.
+Verify that the number of installed colour maps is between the min and
+max limits.
+Free return value with XFree.
+>>CODE
+Colormap *cmp;
+Screen *screen;
+
+ w = DRW(display);
+ cmp = XCALL;
+
+ if (cmp == NULL) {
+ report("NULL was returned");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ screen = ScreenOfDisplay(display, DefaultScreen(display));
+ if (*num_return < MinCmapsOfScreen(screen) ||
+ *num_return > MaxCmapsOfScreen(screen)) {
+ report("Number of installed colourmaps was outside range given by MinCmapsOfScreen and MaxCmapsOfScreen");
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)cmp);
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH07/nwmdfrmp/nwmdfrmp.m b/xc/test/xsuite/xtest/tset/CH07/nwmdfrmp/nwmdfrmp.m
new file mode 100644
index 000000000..8887b76e4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/nwmdfrmp/nwmdfrmp.m
@@ -0,0 +1,78 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XNewModifiermap CH07
+XModifierKeymap *
+
+int max_keys_per_mod;
+>>ASSERTION Good A
+A call to xname returns a pointer to a
+.S XModifierKeymap
+structure,
+that can be freed with
+.F XFreeModifiermap ,
+with
+.A max_keys_per_mod
+entries preallocated for each of the 8 modifiers.
+>>STRATEGY
+Create a XModifierKeymap structure with xname.
+Verify that the max_keypermod member is set correctly.
+Verify that the whole of the modifiermap array can be accessed.
+Free with XFreeModifiermap.
+
+Call xname with max_keys_per_mod of 0.
+Free with XFreeModifiermap.
+>>CODE
+XModifierKeymap *mkmp;
+int i;
+
+ max_keys_per_mod = 12;
+
+ mkmp = XCALL;
+
+ if (mkmp->max_keypermod == max_keys_per_mod)
+ CHECK;
+ else {
+ report("max_keypermod was %d, expecting %d", mkmp->max_keypermod,
+ max_keys_per_mod);
+ FAIL;
+ }
+
+ /*
+ * Access each member of the array. If this fails (with a signal)
+ * then the TET will delete the test. This is not exactly right
+ * because it should really fail. Anyway the problem still has to
+ * be fixed to get a PASS so there is no real problem.
+ */
+ for (i = 0; i < 8*mkmp->max_keypermod; i++) {
+ mkmp->modifiermap[i] = NoSymbol;
+ }
+
+ XFreeModifiermap(mkmp);
+
+ max_keys_per_mod = 0;
+
+ mkmp = XCALL;
+
+ if (mkmp->max_keypermod == 0)
+ CHECK;
+ else {
+ report("max_keypermod was %d, not zero", mkmp->max_keypermod);
+ FAIL;
+ }
+ XFreeModifiermap(mkmp);
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH07/qrykymp/qrykymp.m b/xc/test/xsuite/xtest/tset/CH07/qrykymp/qrykymp.m
new file mode 100644
index 000000000..cd0a4e824
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/qrykymp/qrykymp.m
@@ -0,0 +1,119 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XQueryKeymap CH07
+void
+
+Display *display = Dsp;
+char *keys_return = Keys;
+>>EXTERN
+
+static char Keys[32];
+
+>>ASSERTION Good B 3
+A call to xname returns a bit vector
+with bits set to 1 where the corresponding key is currently
+in the logical down state and all other bits set to 0.
+>>STRATEGY
+If extension available:
+ Check no keys pressed down at start.
+ Press some keys down.
+ Call xname and check they, and only they, are down.
+ Release them all.
+ Call xname to check all released.
+else
+ Call xname.
+ UNTESTED touch test only.
+>>CODE
+int i;
+char *p,*q;
+int fcount;
+char pressed[32];
+int minkc, maxkc;
+
+ if (noext(0)) {
+ XCALL;
+
+ report("There is no reliable test method, but a touch test was performed");
+
+ UNTESTED;
+ return;
+ } else
+ CHECK;
+
+ /* expect all zero map. If not can't start. Should we fail? */
+ XCALL;
+
+ for(fcount=i=0,p=keys_return; i<32; i++,p++)
+ if (*p)
+ fcount++;
+
+ if (fcount) {
+ delete("%d keys appear to be pressed down.", fcount);
+ return;
+ } else
+ CHECK;
+
+ XDisplayKeycodes(display, &minkc, &maxkc);
+
+ for(p=pressed,i=0; i<32; i++,p++)
+ *p = (char) 0;
+
+ for(i=minkc; i < minkc+5 && i <= maxkc; i++) {
+ keypress(display, i);
+ pressed[i/8] |= (char) (0x1 << (i % 8));
+ }
+
+ /* check map now has only those set */
+ XCALL;
+
+ for(p=pressed,q=keys_return,fcount=i=0; i<32; i++,p++,q++)
+ if (*p != *q) {
+ char diffs = (unsigned)*p ^ (unsigned)*q;
+ int di;
+
+ fcount++;
+ for(di=0; di<8; di++) {
+ char mask = (char) (0x1 << di);
+
+ if (diffs & mask)
+ report("Key %d%s pressed.", 8*i + di,
+ (*p & mask) ? "" : " not");
+ }
+ }
+
+ if (fcount)
+ FAIL;
+ else
+ CHECK;
+
+ relalldev(); /* now all released */
+
+ /* check map now all zero. */
+ XCALL;
+
+ for(fcount=i=0,p=keys_return; i<32; i++,p++)
+ if (*p)
+ fcount++;
+
+ if (fcount) {
+ report("%d keys appear to be pressed down.", fcount);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
diff --git a/xc/test/xsuite/xtest/tset/CH07/rmvfrmsvst/rmvfrmsvst.m b/xc/test/xsuite/xtest/tset/CH07/rmvfrmsvst/rmvfrmsvst.m
new file mode 100644
index 000000000..55882165d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/rmvfrmsvst/rmvfrmsvst.m
@@ -0,0 +1,94 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XRemoveFromSaveSet CH07
+void
+xname
+Display *display = Dsp;
+Window w;
+>>ASSERTION Good A
+A call to xname
+removes the specified window from the client's save-set.
+>>STRATEGY
+Create client1.
+Add two windows to client1 save-set.
+Remove one of the windows with xname.
+Verify that window was removed by destroying client1.
+>>CODE
+Display *client1;
+Window win;
+Window base;
+Window w1, w2;
+XWindowAttributes atts;
+struct area area;
+
+ client1 = XOpenDisplay(config.display);
+
+ base = defwin(Dsp);
+ if (isdeleted())
+ return;
+
+ setarea(&area, 10, 10, 10, 10);
+ win = crechild(client1, base, &area);
+ XSync(client1, False);
+
+ w1 = crechild(Dsp, win, &area);
+ w2 = crechild(Dsp, win, &area);
+ if (isdeleted())
+ return;
+ XAddToSaveSet(client1, w1);
+ XAddToSaveSet(client1, w2);
+
+ w = w1;
+ display = client1;
+ XCALL;
+
+ XCloseDisplay(client1);
+
+ CATCH_ERROR(Dsp);
+ if (XGetWindowAttributes(Dsp, w1, &atts) == True) {
+ report("Non save-set window was not destroyed");
+ FAIL;
+ } else
+ CHECK;
+ if (XGetWindowAttributes(Dsp, w2, &atts) == False) {
+ report("Save-set window was destroyed");
+ FAIL;
+ } else
+ CHECK;
+ RESTORE_ERROR(Dsp);
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+When the specified window was created by the client, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create window.
+Call xname with the window and the client used to create it.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+
+ w = defwin(display);
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH07/rmvhst/rmvhst.m b/xc/test/xsuite/xtest/tset/CH07/rmvhst/rmvhst.m
new file mode 100644
index 000000000..0e558a31f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/rmvhst/rmvhst.m
@@ -0,0 +1,165 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XRemoveHost CH07
+void
+
+Display *display = Dsp;
+XHostAddress *host = xthosts;
+>>EXTERN
+
+#include "xthost.h"
+
+>>ASSERTION Good B 1
+A call to xname
+removes the specified host from the access control list
+for the display.
+>>STRATEGY
+Get current acl.
+If current list is empty:
+ Add a host with XAddHost.
+ Get current acl.
+ Check that it is not empty.
+Call xname to remove host.
+If call fails with a BadAccess:
+ Report that assertion can not be tested from this host.
+Get new acl.
+Verify that host is not in new acl.
+>>CODE
+XHostAddress *oldhosts;
+XHostAddress *newhosts;
+int nhosts;
+Bool state;
+
+ oldhosts = XListHosts(display, &nhosts, &state);
+
+ if (nhosts == 0) {
+ debug(1, "adding host");
+ CATCH_ERROR(display);
+ XAddHost(display, &xthosts[0]);
+ RESTORE_ERROR(display);
+ if (GET_ERROR(display) == BadAccess) {
+ untested("This assertion cannot be tested from this host");
+ report(" the server did not permit the access control list to be changed");
+ return;
+ }
+ oldhosts = XListHosts(display, &nhosts, &state);
+ if (nhosts == 0) {
+ delete("Could not add any hosts to delete");
+ return;
+ }
+ }
+ if (isdeleted())
+ return;
+
+ /* Remove the first host */
+ host = &oldhosts[0];
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() == BadAccess) {
+ untested("This host does not have permission to change the list");
+ report(" so this assertion cannot be tested");
+ return;
+ } else
+ CHECK;
+
+ newhosts = XListHosts(display, &nhosts, &state);
+ if (!ishostinacl(host, newhosts, nhosts))
+ CHECK;
+ else {
+ report("Host was not removed from access control list");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+
+ XAddHost(display, host);
+>>EXTERN
+
+static int
+ishostinacl(host, acl, nhosts)
+XHostAddress *host;
+XHostAddress *acl;
+int nhosts;
+{
+int i;
+
+ for (i = 0; i < nhosts; i++) {
+ if (samehost(host, &acl[i]))
+ return True;
+ }
+ return False;
+}
+
+>>ASSERTION Good B 1
+.ER Access acl
+>>STRATEGY
+Attempt to change access control list.
+If an error occurs
+ If error is BadAccess
+ Report Pass.
+ else
+ Report Fail.
+else
+ Report that assertion is untestable for this host.
+>>CODE
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() != Success) {
+ if (geterr() == BadAccess)
+ PASS;
+ else {
+ report("Received %s error, expecting BadAccess", errorname(geterr()));
+ FAIL;
+ }
+ } else {
+ untested("This host has permission to change the list");
+ report(" so this assertion cannot be tested");
+ }
+>>ASSERTION Good B 1
+When the host address format is invalid, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Call xname with known bad address data.
+If BadAccess error:
+ Report that assertion cannot be tested.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ host = xtbadhosts;
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() == BadAccess) {
+ untested("This host does not have permission to change the list");
+ report(" so this assertion cannot be tested");
+ return;
+ } else
+ CHECK;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else {
+ report("Got %s, expecting BadValue", errorname(geterr()));
+ FAIL;
+ }
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH07/rmvhsts/rmvhsts.m b/xc/test/xsuite/xtest/tset/CH07/rmvhsts/rmvhsts.m
new file mode 100644
index 000000000..5b2d1448c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/rmvhsts/rmvhsts.m
@@ -0,0 +1,160 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XRemoveHosts CH07
+void
+
+Display *display = Dsp;
+XHostAddress *hosts = xthosts;
+int num_hosts = nxthosts;
+>>EXTERN
+
+#include "xthost.h"
+
+>>ASSERTION Good B 1
+A call to xname
+removes each specified host from the access control list for the
+display.
+>>STRATEGY
+Add some hosts with XAddHosts.
+Call xname to remove hosts.
+If call fails with a BadAccess:
+ Report that assertion can not be tested from this host.
+Get new acl.
+Verify that host is not in new acl.
+>>CODE
+XHostAddress *oldhosts;
+XHostAddress *newhosts;
+int nhosts;
+Bool state;
+
+ CATCH_ERROR(display);
+ XAddHosts(display, xthosts, nxthosts);
+ RESTORE_ERROR(display);
+ if (GET_ERROR(display) == BadAccess) {
+ untested("This assertion cannot be tested from this host");
+ report(" the server did not permit the access control list to be changed");
+ return;
+ }
+ if (isdeleted())
+ return;
+
+ hosts = xthosts;
+ num_hosts = nxthosts;
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() == BadAccess) {
+ untested("This host does not have permission to change the list");
+ report(" so this assertion cannot be tested");
+ return;
+ } else
+ CHECK;
+
+ newhosts = XListHosts(display, &nhosts, &state);
+ if (hostsinacl(hosts, num_hosts, newhosts, nhosts) == 0)
+ CHECK;
+ else {
+ report("Hosts were not removed from access control list");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>EXTERN
+
+/*
+ * Returns the number of hosts in hosts[] that are in the acl.
+ */
+static int
+hostsinacl(hosts, nxthosts, acl, nhosts)
+XHostAddress *hosts;
+int nxthosts;
+XHostAddress *acl;
+int nhosts;
+{
+int i, j;
+int n;
+
+ n = 0;
+ for (i = 0; i < nxthosts; i++) {
+ for (j = 0; j < nhosts; j++) {
+ if (samehost(&hosts[i], &acl[j])) {
+ n++;
+ break;
+ }
+ }
+ }
+ return(n);
+}
+
+>>ASSERTION Good B 1
+.ER Access acl
+>>STRATEGY
+Attempt to change access control list.
+If an error occurs
+ If error is BadAccess
+ Report Pass.
+ else
+ Report Fail.
+else
+ Report that assertion is untestable for this host.
+>>CODE
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() != Success) {
+ if (geterr() == BadAccess)
+ PASS;
+ else {
+ report("Received %s error, expecting BadAccess", errorname(geterr()));
+ FAIL;
+ }
+ } else {
+ untested("This host has permission to change the list");
+ report(" so this assertion cannot be tested");
+ }
+>>ASSERTION Good B 1
+When the host address format is invalid, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Call xname with known bad address data.
+If BadAccess error:
+ Report that assertion cannot be tested.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ hosts = xtbadhosts;
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() == BadAccess) {
+ untested("This host does not have permission to change the list");
+ report(" so this assertion cannot be tested");
+ return;
+ } else
+ CHECK;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else {
+ report("Got %s, expecting BadValue", errorname(geterr()));
+ FAIL;
+ }
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH07/rprntwdw/rprntwdw.m b/xc/test/xsuite/xtest/tset/CH07/rprntwdw/rprntwdw.m
new file mode 100644
index 000000000..3a83fda3e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/rprntwdw/rprntwdw.m
@@ -0,0 +1,650 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XReparentWindow CH07
+void
+xname
+Display *display = Dsp;
+Window w;
+Window parent;
+int x = RP_X;
+int y = RP_Y;
+>>EXTERN
+
+#define RP_X 12
+#define RP_Y 15
+
+char *Treedesc[] = {
+ "base borders",
+ "A base (1,3) 50x30",
+ "A1 A (10,1) 4x5",
+ "A2 A (20,6) 4x5",
+ "B base (4, 40) 20x20",
+ "B1 B (3,4) 10x10",
+
+};
+
+static struct buildtree *Tree;
+static Window WinA;
+static Window WinB;
+static Window WinBase;
+
+static void
+reparentinit()
+{
+Window win;
+
+ tpstartup();
+
+ win = defwin(Dsp);
+ Tree = buildtree(Dsp, win, Treedesc, NELEM(Treedesc));
+ WinA = btntow(Tree, "A");
+ WinB = btntow(Tree, "B");
+ WinBase = btntow(Tree, "base");
+}
+
+>># Set up the startup function.
+>>SET tpstartup reparentinit
+
+>>ASSERTION Good A
+A call to xname
+removes the specified window from its current position in the hierarchy,
+and inserts it as the child of the specified parent window at the
+position specified by
+.A x
+and
+.A y .
+>>STRATEGY
+Build a window tree.
+Call xname to reparent window.
+Verify that parent of window has changed.
+Verify that the old parent no longer has the specified window as a child.
+>>CODE
+Window dummy;
+Window par;
+Window *children;
+int nchild;
+
+ parent = WinA;
+ w = WinB;
+
+ XCALL;
+
+ /*
+ * Check new parent.
+ */
+ if (XQueryTree(display, WinB, &dummy, &par, &children, (unsigned*)&nchild) == False) {
+ delete("XQueryTree on window failed");
+ return;
+ }
+
+ if (par != parent) {
+ report("New parent was incorrect");
+ report(" Got 0x%x, expecting 0x%x", par, parent);
+ FAIL;
+ } else
+ CHECK;
+
+ if (nchild > 0 && children)
+ XFree((char*) children);
+
+ /*
+ * Check that window is not still a child of the old parent.
+ */
+ if (XQueryTree(display, WinBase, &dummy, &par, &children, (unsigned*)&nchild) == False) {
+ delete("XQueryTree on old parent failed");
+ return;
+ }
+ while (nchild-- > 0) {
+ if (children[nchild] == WinB)
+ break;
+ }
+
+ if (nchild == -1)
+ CHECK;
+ else {
+ report("window was still a child of the old parent after reparenting");
+ FAIL;
+ }
+
+ if (nchild > 0 && children)
+ XFree((char*) children);
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When the specified window is mapped,
+then a call to xname
+automatically performs an
+.F UnmapWindow
+first, and an
+.S UnmapNotify
+event is generated.
+>>STRATEGY
+Build a window tree.
+Enable StructureNotify events on window.
+Enable SubstructureNotify events on original parent.
+Reparent window.
+Verify that an UnmapNotify is generated on the old parent.
+Verify that an UnmapNotify is generated on the window.
+>>EXTERN
+
+#define ON_WINDOW 0x1 /* event received on window itself */
+#define ON_PARENT 0x2 /* event received on parent window */
+#define ON_NEWPARENT 0x4 /* event received on new parent window */
+
+>>CODE
+XUnmapEvent good;
+XUnmapEvent *ump;
+XEvent ev;
+int got = 0;
+
+ parent = WinA;
+ w = WinB;
+
+ XSelectInput(display, WinBase, SubstructureNotifyMask);
+ XSelectInput(display, w, StructureNotifyMask);
+
+ XCALL;
+
+ defsetevent(good, display, UnmapNotify);
+ good.window = w;
+ good.from_configure = False;
+
+ got = 0;
+ while (getevent(display, &ev)) {
+ if (ev.type != UnmapNotify)
+ continue;
+ ump = (XUnmapEvent*)&ev;
+ if (ump->event == ump->window) {
+ /* On the window itself */
+ if (got & ON_WINDOW) {
+ report("Repeated unmap event on window");
+ FAIL;
+ } else
+ CHECK;
+ got |= ON_WINDOW;
+ good.event = WinB;
+ } else {
+ if (got & ON_PARENT) {
+ report("Repeated unmap event on parent window");
+ FAIL;
+ } else
+ CHECK;
+ got |= ON_PARENT;
+ good.event = WinBase;
+ }
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+ }
+
+ if (!(got & ON_PARENT)) {
+ report("UnmapNotify event not received on parent window");
+ FAIL;
+ } else
+ CHECK;
+ if (!(got & ON_WINDOW)) {
+ report("UnmapNotify event not received on window");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(6);
+>>ASSERTION Good A
+The window is placed at the top of the stacking order with respect to
+sibling windows.
+>>STRATEGY
+Build a window tree.
+Reparent window.
+Verify that it has been placed at the top of the stacking order.
+>>CODE
+int n;
+int nsibs;
+struct buildtree *btp;
+
+ parent = WinA;
+ w = WinB;
+
+ XCALL;
+
+ /* Count the number of siblings that window should have */
+ nsibs = 0;
+ for (btp = Tree+1; btp < Tree+NELEM(Treedesc); btp++) {
+ if (btp->parent->wid == WinA)
+ nsibs++;
+ }
+
+ /*
+ *This is the stacking order number that the window should have after
+ * reparenting
+ */
+ n = stackorder(display, w);
+ if (n != nsibs) {
+ report("Reparented window had incorrect stacking order");
+ report(" Got %d, expecting %d", n, nsibs);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+A call to xname generates a
+.S ReparentNotify
+event on the window and on both the old and new parent windows.
+>>STRATEGY
+Build a window tree.
+Enable SubstructureNotify events on new parent.
+Enable SubstructureNotify events on old parent.
+Enable StructureNotify events on window.
+Reparent window.
+Verify ReparentNotify event generated on new parent.
+Verify ReparentNotify event generated on old parent.
+Verify ReparentNotify event generated on reparented window.
+>>CODE
+XReparentEvent good;
+XReparentEvent *rpp;
+XEvent ev;
+int got = 0;
+
+ parent = WinA;
+ w = WinB;
+
+ XSelectInput(display, WinA, SubstructureNotifyMask);
+ XSelectInput(display, WinBase, SubstructureNotifyMask);
+ XSelectInput(display, w, StructureNotifyMask);
+
+ XCALL;
+
+ defsetevent(good, display, ReparentNotify);
+ good.event = 0;
+ good.window = w;
+ good.parent = WinA;
+ good.x = x;
+ good.y = y;
+ good.override_redirect = False;
+
+ got = 0;
+ while (getevent(display, &ev)) {
+ if (ev.type != ReparentNotify)
+ continue;
+ rpp = (XReparentEvent*)&ev;
+ if (rpp->event == rpp->window) {
+ /* On the window itself */
+ if (got & ON_WINDOW) {
+ report("Repeated unmap event on window");
+ FAIL;
+ } else
+ CHECK;
+ got |= ON_WINDOW;
+ good.event = WinB;
+ } else if (rpp->event == WinA) {
+ if (got & ON_NEWPARENT) {
+ report("Repeated unmap event on new parent window");
+ FAIL;
+ } else
+ CHECK;
+ got |= ON_NEWPARENT;
+ good.event = WinA;
+ } else if (rpp->event == WinBase) {
+ if (got & ON_PARENT) {
+ report("Repeated unmap event on old parent window");
+ FAIL;
+ } else
+ CHECK;
+ got |= ON_PARENT;
+ good.event = WinBase;
+ } else {
+ report("Event received on window other than old or new parent");
+ FAIL;
+ }
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+ }
+
+ if (!(got & ON_NEWPARENT)) {
+ report("UnmapNotify event not received on new parent window");
+ FAIL;
+ } else
+ CHECK;
+ if (!(got & ON_PARENT)) {
+ report("UnmapNotify event not received on old parent window");
+ FAIL;
+ } else
+ CHECK;
+ if (!(got & ON_WINDOW)) {
+ report("UnmapNotify event not received on window");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(9);
+
+>>ASSERTION Good A
+When the specified window was originally mapped,
+then a call to xname automatically performs a
+.S MapWindow
+request on it after the window is reparented,
+and a
+>># does this really happen?
+>># Split into two assertions??
+.S MapRequest
+or
+.S MapNotify
+event is generated.
+>># If the new parent has SubstructureRedirect then we would expect
+>># a MapRequest, rather than a MapNotify.
+>>STRATEGY
+Build window tree.
+Enable StructureNotify on window.
+Enable SubstructureNotify on new parent.
+Reparent window with xname.
+Verify that MapNotify is received on window.
+Verify that MapNotify is received on parent.
+
+Build window tree.
+Create second client.
+Enable SubstructureRedirect for second client on new parent.
+Reparent window with xname.
+Verify that MapRequest is received for second client on parent.
+>>CODE
+XMapEvent good;
+XMapEvent *mp;
+XMapRequestEvent mreqgood;
+XEvent ev;
+Display *client2;
+int n;
+int got = 0;
+
+ parent = WinA;
+ w = WinB;
+
+ XSelectInput(display, parent, SubstructureNotifyMask);
+ XSelectInput(display, w, StructureNotifyMask);
+
+ XCALL;
+
+ defsetevent(good, display, MapNotify);
+ good.window = w;
+ good.override_redirect = False;
+
+ got = 0;
+ while (getevent(display, &ev)) {
+ if (ev.type != MapNotify)
+ continue;
+ mp = (XMapEvent*)&ev;
+ if (mp->event == mp->window) {
+ /* On the window itself */
+ if (got & ON_WINDOW) {
+ report("Repeated map event on window");
+ FAIL;
+ } else
+ CHECK;
+ got |= ON_WINDOW;
+ good.event = WinB;
+ } else {
+ if (got & ON_NEWPARENT) {
+ report("Repeated map event on parent window");
+ FAIL;
+ } else
+ CHECK;
+ got |= ON_NEWPARENT;
+ good.event = WinA;
+ }
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+ }
+
+ if (!(got & ON_NEWPARENT)) {
+ report("MapNotify event not received on parent window");
+ FAIL;
+ } else
+ CHECK;
+ if (!(got & ON_WINDOW)) {
+ report("MapNotify event not received on window");
+ FAIL;
+ } else
+ CHECK;
+
+ if (isdeleted())
+ return;
+
+ client2 = opendisplay();
+ XSelectInput(client2, parent, SubstructureRedirectMask);
+ XSync(client2, True);
+
+ XCALL;
+ XSync(client2, False);
+
+ defsetevent(mreqgood, client2, MapRequest);
+ mreqgood.parent = parent;
+ mreqgood.window = WinB;
+
+ n = getevent(client2, &ev);
+ if (n != 1) {
+ report("Expecting one MapRequest event, got %d events", n);
+ FAIL;
+ } else
+ CHECK;
+ if (ev.type != MapRequest) {
+ report("Expecting one MapRequest event, got event type %s", eventname(ev.type));
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&mreqgood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(9);
+
+>>ASSERTION Good A
+When a call to xname uncovers part of any window that was formerly
+obscured, then either
+.S Expose
+events are generated or the contents are restored from backing store.
+>>STRATEGY
+Build window tree.
+Use WinB as old parent and B1 and window.
+Enable expose events on old parent window.
+Set up old parent window with setforexpose.
+Call xname to reparent window.
+Verify correct expose processing with checkexpose().
+>>CODE
+
+ parent = WinA;
+ w = btntow(Tree, "B1");
+
+ XSelectInput(display, WinB, ExposureMask);
+ setforexpose(display, WinB);
+
+ XCALL;
+
+ if (exposecheck(display, WinB))
+ CHECK;
+ else {
+ report("Contents of window not restored correctly by Expose or backing store");
+ FAIL;
+ }
+
+ CHECKPASS(1);
+
+>># Go back to default tpstartup
+>>SET tpstartup tpstartup
+>>ASSERTION Good B 1
+A call to xname may generate
+.S Expose
+events for regions uncovered by the initial
+.S UnmapWindow
+request that are immediately obscured by the final
+.S MapWindow
+request.
+>>ASSERTION Bad C
+>># Added conditional clause to approved assertion - DPJ Cater 29/8/91
+If multiple screens are supported:
+When the new parent window is not on the same screen as
+the old parent window, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If multiple screens supported
+ Create window on default screen.
+ Create a new parent window on alternate screen.
+ Attempt to reparent to alternate screen.
+ Verify BadMatch error occurs.
+else
+ UNSUPPORTED
+>>CODE BadMatch
+Window w;
+
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported");
+ return;
+ }
+
+ w = defwin(display);
+ parent = defdraw(display, VI_ALT_WIN);
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+When the new parent window is the specified window, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create window.
+Call xname with both window parameters set to this window.
+Verify BadMatch error.
+>>CODE BadMatch
+
+ w = defwin(display);
+ parent = w;
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+When the new parent window is an inferior of the
+specified window, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+>>SET tpstartup reparentinit
+Build window tree.
+Set w.
+Set parent to an inferior of w.
+Call xname.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+
+ w = WinA;
+ parent = btntow(Tree, "A1");
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad C
+If multiple window depths are supported:
+When the specified window has a
+.S ParentRelative
+background, and the new parent window does not have the same depth as the
+specified window, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+If only one window depth is supported
+ UNSUPPORTED
+Create window.
+Set background to parent relative.
+Create new parent window with depth not equal to window.
+Call xname.
+Verify that BadMatch error occurs.
+>>CODE BadMatch
+XVisualInfo *vp;
+unsigned int depth = 0;
+int found;
+
+ found = 0;
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+ if (depth && depth != vp->depth) {
+ found = 1;
+ w = makewin(display, vp);
+ break;
+ } else {
+ depth = vp->depth;
+ parent = makewin(display, vp);
+ }
+ }
+
+ if (!found) {
+ unsupported("Only one depth window supported");
+ return;
+ }
+
+ /*
+ * At the time of writing we do not have a machine on which
+ * the following code can be tested.
+ */
+ XSetWindowBackgroundPixmap(display, w, ParentRelative);
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL;
+>>ASSERTION Bad A
+.ER BadWindow
+>>ASSERTION Bad A
+When the new parent is
+.S InputOnly
+and the window is
+.S InputOutput ,
+then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create an InputOnly window as the parent.
+Create window.
+Call xname.
+Verify that a BadMatch error occurs.
+>>SET tpstartup tpstartup
+>>CODE BadMatch
+
+ parent = iponlywin(display);
+ w = defwin(display);
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL; /* already done */
diff --git a/xc/test/xsuite/xtest/tset/CH07/rstscrnsvr/rstscrnsvr.m b/xc/test/xsuite/xtest/tset/CH07/rstscrnsvr/rstscrnsvr.m
new file mode 100644
index 000000000..24f794db6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/rstscrnsvr/rstscrnsvr.m
@@ -0,0 +1,34 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XResetScreenSaver CH07
+void
+
+Display *display = Dsp;
+>>ASSERTION Good B 3
+When the screen saver is enabled and activated, then a call to xname
+deactivates the screen saver.
+>>STRATEGY
+Touch test for xname only.
+>>CODE
+
+ XCALL;
+
+ untested("There is no reliable test method, but a touch test was performed");
+>>ASSERTION Good B 3
+When the screen saver is enabled,
+then a call to xname resets the activation timer to its
+initial state as though device input had been received.
diff --git a/xc/test/xsuite/xtest/tset/CH07/staccsscnt/staccsscnt.m b/xc/test/xsuite/xtest/tset/CH07/staccsscnt/staccsscnt.m
new file mode 100644
index 000000000..a2a94a812
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/staccsscnt/staccsscnt.m
@@ -0,0 +1,119 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetAccessControl CH07
+void
+
+Display *display = Dsp;
+int mode;
+>>ASSERTION Good B 1
+When
+.A mode
+is
+.S EnableAccess ,
+then the use of the access control list is enabled at each connection setup.
+>>ASSERTION Good B 1
+When
+.A mode
+is
+.S DisableAccess ,
+then the use of the access control list is disabled at each connection setup.
+>>STRATEGY
+Get current host list.
+Attempt to remove all hosts from list.
+If this fails with BadAccess:
+ Report that this host does not have permission to do this.
+ (Will not have permission for the next part either).
+ Result is untested.
+Disable access control with xname.
+Verify that state returned by XListHosts is DisableAccess.
+Verify that a new connection can be made.
+>>CODE
+XHostAddress *oldhosts;
+XHostAddress *list;
+Display *newclient;
+int nhosts;
+int njunk;
+Bool state;
+
+ oldhosts = XListHosts(display, &nhosts, &state);
+
+ CATCH_ERROR(display);
+ XRemoveHosts(display, oldhosts, nhosts);
+ RESTORE_ERROR(display);
+
+ if (GET_ERROR(display) == BadAccess) {
+ report("The client does not have permission to disable the acl");
+ untested(" so this assertion cannot be tested.");
+ return;
+ }
+
+ mode = DisableAccess;
+ XCALL;
+
+ list = XListHosts(display, &njunk, &state);
+ if (state == DisableAccess)
+ CHECK;
+ else {
+ report("Access control state was not DisableAccess (was %d)", state);
+ FAIL;
+ }
+
+ newclient = XOpenDisplay(config.display);
+ if (newclient != (Display*)0)
+ CHECK;
+ else {
+ report("Connections could not be made to host");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+
+ XAddHosts(display, oldhosts, nhosts);
+ XFree((char*)oldhosts);
+ XFree((char*)list);
+
+>>ASSERTION Bad A
+.ER BadAccess acl
+>>STRATEGY
+Call xname.
+If error occurs.
+ If error is BadAccess
+ Report Pass.
+ else
+ Report Fail.
+else
+ Report client is authorised.
+ Result is untested.
+>>CODE
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() != Success) {
+ if (geterr() == BadAccess)
+ PASS;
+ else {
+ report("Expecting BadAccess, was %s", errorname(geterr()));
+ FAIL;
+ }
+ } else {
+ untested("This client is authorised to disable the access list");
+ untested(" so the assertion cannot be tested");
+ }
+
+>>ASSERTION Bad A
+.ER BadValue mode EnableAccess DisableAccess
diff --git a/xc/test/xsuite/xtest/tset/CH07/stclsdwnmd/stclsdwnmd.m b/xc/test/xsuite/xtest/tset/CH07/stclsdwnmd/stclsdwnmd.m
new file mode 100644
index 000000000..a5fbdcdbb
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/stclsdwnmd/stclsdwnmd.m
@@ -0,0 +1,629 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetCloseDownMode CH07
+void
+
+Display *display = Dsp;
+int close_mode;
+>>#
+>># The way that closedown mode acts on the last connection close to
+>># a server is covered in XCloseDisplay rather than here.
+>># There is more overlap with XCloseDisplay.
+>>SET startup fontstartup
+>>SET cleanup fontcleanup
+>>ASSERTION Good A
+When
+.A close_mode
+is set to
+.S DestroyAll
+and the client is subsequently closed down,
+then all
+.S Window ,
+.S Font ,
+.S Pixmap ,
+>># .S Bitmap ,
+.S Colormap ,
+.S Cursor
+and
+.S GContext
+resources allocated by the client are destroyed.
+>>STRATEGY
+Create a new connection client1.
+Create resources for client1.
+Call xname on client1 with close_mode of DestroyAll.
+Close client1.
+Verify that the resources are destroyed.
+>>CODE
+Display *client1;
+Window win;
+Font font;
+Pixmap pix;
+Colormap colmap;
+Cursor cursor;
+GC gc;
+
+ regdisable();
+ if ((client1 = opendisplay()) == 0) {
+ delete("Could not open display");
+ return;
+ }
+
+ win = defwin(client1);
+ font = XLoadFont(client1, "xtfont0");
+ pix = maketile(client1, win);
+ colmap = makecolmap(client1, DefaultVisual(client1, DefaultScreen(client1)),
+ AllocNone);
+ cursor = makecur(client1);
+ gc = makegc(client1, win);
+ regenable();
+
+ XSync(client1, False);
+ if (isdeleted())
+ return;
+
+ display = client1;
+ close_mode = DestroyAll;
+#ifdef TESTBED
+ close_mode = RetainTemporary;
+#endif
+ XCALL;
+
+ XCloseDisplay(client1);
+
+ /*
+ * Attempt to destroy all the resources. Since they should have already
+ * been destroyed, then we expect the appropriate Bad<Resource> error
+ * for each one.
+ */
+ CATCH_ERROR(Dsp);
+ XDestroyWindow(Dsp, win);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == BadWindow)
+ CHECK;
+ else {
+ report("Window resource was not destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XUnloadFont(Dsp, font);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == BadFont)
+ CHECK;
+ else {
+ report("Font resource was not destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XFreePixmap(Dsp, pix);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == BadPixmap)
+ CHECK;
+ else {
+ report("Pixmap resource was not destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XFreeColormap(Dsp, colmap);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == BadColor)
+ CHECK;
+ else {
+ report("Colormap resource was not destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XFreeCursor(Dsp, cursor);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == BadCursor)
+ CHECK;
+ else {
+ report("Cursor resource was not destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XFreeGC(Dsp, gc);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == BadGC)
+ CHECK;
+ else {
+ report("GC resource was not destroyed");
+ FAIL;
+ }
+
+ CHECKPASS(6);
+>>ASSERTION Good A
+When
+.A close_mode
+is set to
+.S DestroyAll
+and the client is subsequently closed down,
+then all the windows in the client's save-set that are
+inferiors of a window created by the client are reparented,
+with no change in position relative to the root window,
+to the closest ancestor that is not an inferior of the client's window.
+>>STRATEGY
+Create new connection client1.
+Create window with client1.
+Create inferior of window with Dsp.
+Add this window to client1's save-set.
+Call xname on client1 with close_mode of DestroyAll.
+Close client1.
+Verify that save-set window is reparented with no change in position.
+>>CODE
+Display *client1;
+Window base;
+Window win;
+Window inf;
+struct area area;
+XWindowAttributes atts;
+
+ base = defwin(Dsp);
+
+ if ((client1 = XOpenDisplay(config.display)) == 0) {
+ report("Could not open display");
+ FAIL;
+ }
+
+ win = crechild(client1, base, (struct area *)0);
+ XSync(client1, False);
+
+ setarea(&area, 3, 4, 4, 4);
+ inf = crechild(Dsp, win, &area);
+ if (isdeleted())
+ return;
+
+ XAddToSaveSet(client1, inf);
+
+ display = client1;
+ close_mode = DestroyAll;
+ XCALL;
+
+ XCloseDisplay(client1);
+
+ CATCH_ERROR(Dsp);
+ if (XGetWindowAttributes(Dsp, inf, &atts) == False) {
+ report("save-set window was destroyed");
+ FAIL;
+ } else
+ CHECK;
+ RESTORE_ERROR(Dsp);
+
+ /*
+ * Compare coord relative to base window.
+ */
+ if (atts.x != area.x || atts.y != area.y) {
+ report("Absolute co-ordinates relative to root changed");
+ report(" (relative to base was (%d, %d) expecting (%d, %d))",
+ atts.x, atts.y,
+ area.x, area.y);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When
+.A close_mode
+is set to
+.S DestroyAll
+and the client is subsequently closed down,
+then
+all windows in the client's save set that were not mapped are mapped.
+>>STRATEGY
+Create new connection client1.
+Create window with client1.
+Create unmapped inferior of window with Dsp.
+Add this window to client1's save-set.
+Call xname on client1 with close_mode of DestroyAll.
+Verify that save-set window is mapped.
+>>CODE
+Display *client1;
+Window base;
+Window win;
+Window inf;
+struct area area;
+XWindowAttributes atts;
+
+ base = defwin(Dsp);
+
+ if ((client1 = XOpenDisplay(config.display)) == 0) {
+ report("Could not open display");
+ FAIL;
+ }
+
+ win = crechild(client1, base, (struct area *)0);
+ XSync(client1, False);
+
+ setarea(&area, 3, 4, 4, 4);
+ inf = creunmapchild(Dsp, win, &area);
+ if (isdeleted())
+ return;
+
+ XAddToSaveSet(client1, inf);
+
+ display = client1;
+ close_mode = DestroyAll;
+#ifdef TESTBED
+ close_mode = RetainPermanent;
+#endif
+ XCALL;
+
+ XCloseDisplay(client1);
+
+ CATCH_ERROR(Dsp);
+ if (XGetWindowAttributes(Dsp, inf, &atts) == False) {
+ report("save-set window was destroyed");
+ FAIL;
+ } else
+ CHECK;
+ RESTORE_ERROR(Dsp);
+
+ if (atts.map_state == IsUnmapped) {
+ report("save-set window was not mapped after save-set processing");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>#
+>># Retain
+>>#
+>>ASSERTION Good A
+When
+.A close_mode
+is
+.S RetainPermanent
+and the client is subsequently closed down,
+then the resources allocated by the client are not
+destroyed and are marked as permanent.
+>>STRATEGY
+Create client1.
+Create resource for client1.
+Call xname for client1 with close_mode of RetainPermanent.
+Close client1.
+Verify that client1 resource still exists.
+Call XKillClient with AllTemporary.
+Verify that client1 resource still exists.
+>>CODE
+Display *client1;
+Window win;
+Font font;
+Pixmap pix;
+Colormap colmap;
+Cursor cursor;
+GC gc;
+XWindowAttributes atts;
+
+ regdisable();
+ if ((client1 = opendisplay()) == 0) {
+ delete("Could not open display");
+ return;
+ }
+
+ win = defwin(client1);
+ font = XLoadFont(client1, "xtfont0");
+ pix = maketile(client1, win);
+ colmap = makecolmap(client1, DefaultVisual(client1, DefaultScreen(client1)),
+ AllocNone);
+ cursor = makecur(client1);
+ gc = makegc(client1, win);
+ regenable();
+
+ XSync(client1, False);
+ if (isdeleted())
+ return;
+
+ display = client1;
+ close_mode = RetainPermanent;
+#ifdef TESTBED
+ close_mode = RetainTemporary;
+#endif
+ XCALL;
+
+ XCloseDisplay(client1);
+
+ CATCH_ERROR(Dsp);
+ if (XGetWindowAttributes(Dsp, win, &atts) == False) {
+ report("Client1 resources destroyed with RetainPermanent");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ XKillClient(Dsp, AllTemporary);
+
+ /*
+ * Attempt to destroy all the resources. Each resource should
+ * still exist and so all the destroy operations should be
+ * Successful.
+ */
+ CATCH_ERROR(Dsp);
+ XDestroyWindow(Dsp, win);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == Success)
+ CHECK;
+ else {
+ report("Window resource was destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XUnloadFont(Dsp, font);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == Success)
+ CHECK;
+ else {
+ report("Font resource was destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XFreePixmap(Dsp, pix);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == Success)
+ CHECK;
+ else {
+ report("Pixmap resource was destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XFreeColormap(Dsp, colmap);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == Success)
+ CHECK;
+ else {
+ report("Colormap resource was destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XFreeCursor(Dsp, cursor);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == Success)
+ CHECK;
+ else {
+ report("Cursor resource was destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XFreeGC(Dsp, gc);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == Success)
+ CHECK;
+ else {
+ report("GC resource was destroyed");
+ FAIL;
+ }
+
+ CHECKPASS(7);
+>>ASSERTION Good A
+When
+.A close_mode
+is
+.S RetainTemporary
+and the client is subsequently closed down,
+then all resources allocated by the client are not destroyed and
+are marked as temporary.
+>>STRATEGY
+Create client1.
+Create resource for client1.
+Call xname for client1 with close_mode of RetainTemporary.
+Close client1.
+Verify that client1 resource still exists.
+Call XKillClient with AllTemporary.
+Verify that client1 resource no longer exists.
+>>CODE
+Display *client1;
+Window win;
+Font font;
+Pixmap pix;
+Colormap colmap;
+Cursor cursor;
+GC gc;
+XWindowAttributes atts;
+
+ regdisable();
+ if ((client1 = opendisplay()) == 0) {
+ delete("Could not open display");
+ return;
+ }
+
+ win = defwin(client1);
+ font = XLoadFont(client1, "xtfont0");
+ pix = maketile(client1, win);
+ colmap = makecolmap(client1, DefaultVisual(client1, DefaultScreen(client1)),
+ AllocNone);
+ cursor = makecur(client1);
+ gc = makegc(client1, win);
+ regenable();
+
+ XSync(client1, False);
+ if (isdeleted())
+ return;
+
+ display = client1;
+ close_mode = RetainTemporary;
+#ifdef TESTBED
+ close_mode = DestroyAll;
+#endif
+ XCALL;
+
+ XCloseDisplay(client1);
+
+ CATCH_ERROR(Dsp);
+ if (XGetWindowAttributes(Dsp, win, &atts) == False) {
+ report("Window was destroyed after close-down in RetainTemporary mode");
+ FAIL;
+ } else
+ CHECK;
+ RESTORE_ERROR(Dsp);
+
+ /* No point of continuing if failed so far */
+ if (fail)
+ return;
+
+ XKillClient(Dsp, AllTemporary);
+
+ /*
+ * Attempt to destroy all the resources. Since they should have already
+ * been destroyed, then we expect the appropriate Bad<Resource> error
+ * for each one.
+ */
+ CATCH_ERROR(Dsp);
+ XDestroyWindow(Dsp, win);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == BadWindow)
+ CHECK;
+ else {
+ report("Window resource was not destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XUnloadFont(Dsp, font);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == BadFont)
+ CHECK;
+ else {
+ report("Font resource was not destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XFreePixmap(Dsp, pix);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == BadPixmap)
+ CHECK;
+ else {
+ report("Pixmap resource was not destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XFreeColormap(Dsp, colmap);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == BadColor)
+ CHECK;
+ else {
+ report("Colormap resource was not destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XFreeCursor(Dsp, cursor);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == BadCursor)
+ CHECK;
+ else {
+ report("Cursor resource was not destroyed");
+ FAIL;
+ }
+
+ CATCH_ERROR(Dsp);
+ XFreeGC(Dsp, gc);
+ RESTORE_ERROR(Dsp);
+ if (GET_ERROR(Dsp) == BadGC)
+ CHECK;
+ else {
+ report("GC resource was not destroyed");
+ FAIL;
+ }
+
+ CHECKPASS(7);
+>>ASSERTION Good A
+When
+.A close_mode
+is
+.S RetainPermanent
+or
+.S RetainTemporary
+and the client is subsequently closed down,
+then all windows in the client's save-set are unaffected.
+>>STRATEGY
+Create new connection client1.
+Create window with client1.
+Create unmapped inferior of window with Dsp.
+Add this window to client1's save-set.
+Call xname on client1 with close_mode of RetainPermanent.
+Close client1 connection.
+Verify that save-set window is not mapped.
+>>CODE
+Display *client1;
+Window base;
+Window win;
+Window inf;
+struct area area;
+XWindowAttributes atts;
+int i;
+static int modes[] = {
+ RetainPermanent, RetainTemporary
+#ifdef TESTBED
+ ,DestroyAll
+#endif
+ };
+
+ base = defwin(Dsp);
+
+ for (i = 0; i < NELEM(modes); i++) {
+ if ((client1 = XOpenDisplay(config.display)) == 0) {
+ report("Could not open display");
+ FAIL;
+ }
+
+ win = crechild(client1, base, (struct area *)0);
+ XSync(client1, False);
+
+ setarea(&area, 3, 4, 4, 4);
+ inf = creunmapchild(Dsp, win, &area);
+ if (isdeleted())
+ return;
+
+ XAddToSaveSet(client1, inf);
+
+ display = client1;
+ close_mode = modes[i];
+ XCALL;
+
+ XCloseDisplay(client1);
+
+ CATCH_ERROR(Dsp);
+ if (XGetWindowAttributes(Dsp, inf, &atts) == False) {
+ report("save-set window was destroyed");
+ FAIL;
+ } else
+ CHECK;
+ RESTORE_ERROR(Dsp);
+
+ if (atts.map_state == IsUnmapped)
+ CHECK;
+ else {
+ report("For close-down mode %d", modes[i]);
+ report("save-set window was affected");
+ FAIL;
+ }
+ }
+
+ CHECKPASS(2*NELEM(modes));
+>>ASSERTION Bad A
+.ER BadValue close_mode DestroyAll RetainPermanent RetainTemporary
diff --git a/xc/test/xsuite/xtest/tset/CH07/stinptfcs/stinptfcs.m b/xc/test/xsuite/xtest/tset/CH07/stinptfcs/stinptfcs.m
new file mode 100644
index 000000000..22dffe3e2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/stinptfcs/stinptfcs.m
@@ -0,0 +1,972 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetInputFocus CH07
+void
+
+Display *display = Dsp;
+Window focus;
+int revert_to = RevertToNone;
+Time time = CurrentTime;
+>>EXTERN
+/*
+ * NOTE: This test should not be run with a window manager as some
+ * window managers interfere with the test.
+ */
+>>SET startup focusstartup
+>>SET cleanup focuscleanup
+>>ASSERTION Good A
+A call to xname changes the input focus window to that specified
+in the
+.A focus
+argument.
+>>STRATEGY
+Create window.
+Set input focus with that window.
+Verify that input focus has been set with XGetInputFocus.
+>>CODE
+Window newfocus;
+int newrevert;
+
+ focus = defwin(display);
+
+ XCALL;
+
+ XGetInputFocus(display, &newfocus, &newrevert);
+ if (newfocus != focus) {
+ report("Focus window was 0x%x, expecting 0x%x", newfocus, focus);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good B 3
+When the
+.A focus
+argument is
+.S None ,
+then all keyboard events are discarded until a new focus window is set.
+>>STRATEGY
+If extension available:
+ Create a window and select KeyPress and KeyRelease events.
+ Call xname with focus = None.
+ Warp pointer into window and simulate keypress using extension.
+ Ensure no event received.
+ Call xname with focus = window.
+ Simulate key release.
+ Ensure event now received.
+else
+ report untested.
+>>CODE
+Window win;
+XEvent ev;
+int n;
+long mask;
+
+ if (noext(0))
+ return;
+ else
+ CHECK;
+
+ win = defwin(display);
+ XSelectInput(display, win, mask = KeyPressMask|KeyReleaseMask);
+ focus = None;
+ XCALL;
+ (void) warppointer(display, win, 2, 2);
+ XSync(display, True); /* clear out event queue */
+ keypress(display, getkeycode(display));
+ if (n=getevent(display, &ev)) /* assignment intentional */ {
+ report("Got %d events instead of 0, first was type %s.",
+ n, eventname(ev.type));
+ FAIL;
+ } else
+ CHECK;
+ focus = win;
+ XCALL;
+ XSync(display, True); /* clear out event queue */
+ relalldev();
+ if (!XCheckWindowEvent(display, win, mask, &ev)) {
+ report("Normal event processing not restored.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good B 3
+When the
+.A focus
+argument is a window, then keyboard events that would normally be reported
+to the focus window or one of its inferiors are reported as usual and all other
+keyboard events are reported relative to the focus window.
+>>STRATEGY
+If extension available:
+ Create a window tree and select KeyPress and KeyRelease events on all.
+ Call xname with focus = window in tree with child (child2, with child
+ grandchild).
+ Warp pointer into all windows, and root, and simulate keypress/release using
+ extension in each.
+ Ensure event.xany.window is focus (child2) in all cases except grandchild,
+ when it should be grandchild.
+ Release any remaining keys.
+else
+ report untested.
+>>EXTERN
+
+static char *WindowTree[]= {
+ "toplevel",
+ "child1 toplevel (10,10) 30x30",
+ "child2 toplevel (50,50) 30x30",
+ "grandchild child2 (2,2) 20x20",
+};
+
+static int NWindowTree = NELEM(WindowTree);
+
+>>CODE
+int keycode;
+XEvent ev;
+int n;
+long mask;
+Window parent,child2,gchild;
+Window windows[6]; /* root + 4 + None stopper */
+Window root;
+Window *wp;
+struct buildtree *tree;
+char *wname;
+char *evwname;
+
+ if (noext(0))
+ return;
+ else
+ CHECK;
+ wp = windows;
+ *wp++ = root = DRW(display);
+ *wp++ = parent = defwin(display);
+ tree = buildtree(display, parent, WindowTree, NWindowTree);
+ *wp++ = btntow(tree, "child1");
+ *wp++ = child2 = btntow(tree, "child2");
+ *wp++ = gchild = btntow(tree, "grandchild");
+ *wp = None;
+
+ keycode=getkeycode(display);
+ mask = KeyPressMask|KeyReleaseMask;
+ for(wp=windows; *wp != None; wp++)
+ XSelectInput(display, *wp, mask);
+
+ focus = child2;
+ XCALL;
+
+ for(wp=windows; *wp != None; wp++) { /* around 5 times */
+ (void)warppointer(display, *wp, 0,0);
+ /* use 0,0 as window making stuff keeps away from there on
+ * root. All of our tree windows are not at 0,0 either
+ */
+ XSync(display, True); /* clear out event queue */
+ keypress(display, keycode);
+ relalldev();
+ if (!(wname = btwton(tree,*wp)))
+ wname = (*wp == root) ? "ROOT" : "<Unknown>";
+ if (!(n=XCheckMaskEvent(display, mask, &ev))) {
+ report("No event received after keypress/release in window %s.", (*wp==focus)?"focus":wname);
+ FAIL;
+ } else
+ CHECK;
+ if (n && !(evwname = btwton(tree,ev.xany.window)))
+ evwname = (ev.xany.window == root) ? "ROOT" :
+ ((ev.xany.window == None) ? "None" : "<Unknown>");
+ if (*wp == focus || *wp == gchild) {
+ if (n && ev.xany.window != *wp) {
+ report("Event window was %s instead of %s for focus window or child.", evwname, wname);
+ FAIL;
+ } else
+ CHECK;
+ } else {
+ if (n && ev.xany.window != focus) {
+ report("Event window was %s instead of focus window.", evwname);
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(1+2*5);
+
+>>ASSERTION Good B 3
+When the
+.A focus
+argument is
+.S PointerRoot ,
+then the focus window is taken to be the root window of the screen the pointer
+is on at each keyboard event.
+>>STRATEGY
+If extension available:
+ Create a toplevel window and select KeyPress and KeyRelease events.
+ Select KeyPress and KeyRelease events in root window.
+ Call xname with focus = PointerRoot.
+ Warp pointer into window and simulate keypress using extension.
+ Ensure event received and that event.xany.window = window.
+ Warp pointer into root window.
+ Simulate key release.
+ Ensure event received and that event.xany.window = root (focus).
+ If more than one screen:
+ Select KeyPress and KeyRelease events in root window of alternate screen.
+ Warp pointer into root window of alternate screen.
+ Simulate KeyPress/KeyRelease.
+ Ensure event received and that event.xany.window = altroot (focus) and
+ event.xkey.same_screen is True and event.xkey.root is altroot.
+ else
+ Issue incomplete testing message and report untested.
+else
+ report untested.
+>>CODE
+Window win, root, altroot;
+int keycode;
+XEvent ev;
+long mask;
+
+ if (noext(0))
+ return;
+ else
+ CHECK;
+
+ win = defwin(display);
+ XSelectInput(display, win, mask = KeyPressMask|KeyReleaseMask);
+ XSelectInput(display, root = DRW(display), mask);
+ trace("Test with toplevel window and PointerRoot.");
+ focus = PointerRoot;
+ XCALL;
+ (void) warppointer(display, win, 2, 2);
+ XSync(display, True); /* clear out event queue */
+ keypress(display, keycode=getkeycode(display));
+ if (!getevent(display, &ev)) {
+ report("No event received.");
+ FAIL;
+ } else if (ev.type != KeyPress && ev.type != KeyRelease) {
+ report("First event was of unexpected type: %s.", eventname(ev.type));
+ FAIL;
+ } else if (ev.xkey.window != win) {
+ report("First event had unexpected window: 0x%x instead of 0x%x.",
+ (unsigned)ev.xkey.window, (unsigned)win);
+ FAIL;
+ } else
+ CHECK;
+ trace("Test with root and PointerRoot.");
+ (void) warppointer(display, root, 0,0);
+ XSync(display, True); /* clear out event queue */
+ relalldev();
+ if (!getevent(display, &ev)) {
+ report("No event received.");
+ FAIL;
+ } else if (ev.type != KeyPress && ev.type != KeyRelease) {
+ report("First event was of unexpected type: %s.", eventname(ev.type));
+ FAIL;
+ } else if (ev.xkey.window != root) {
+ report("First event had unexpected window: 0x%x instead of 0x%x.",
+ (unsigned)ev.xkey.window, (unsigned)root);
+ FAIL;
+ } else
+ CHECK;
+
+ if (config.alt_screen != -1) {
+ altroot = RootWindow(display, config.alt_screen);
+ trace("Testing with root of alternate screen as source (0x%x) and PointerRoot.",
+ (unsigned)altroot);
+ XSelectInput(display, altroot, mask);
+ (void) warppointer(display, altroot, 0,0);
+ XSync(display, True); /* clear out event queue */
+ keypress(display, keycode);
+ relalldev();
+
+ if (!getevent(display, &ev)) {
+ report("No event received.");
+ FAIL;
+ } else if (ev.type != KeyPress && ev.type != KeyRelease) {
+ report("First event was of unexpected type: %s.", eventname(ev.type));
+ FAIL;
+ } else if (ev.xkey.window != altroot) {
+ report("First event had unexpected window: 0x%x instead of focus (altroot) 0x%x.",
+ (unsigned)ev.xkey.window, (unsigned)altroot);
+ FAIL;
+ } else if (!ev.xkey.same_screen) {
+ report("same_screen unexpectedly False.");
+ FAIL;
+ } else if (ev.xkey.root != altroot) {
+ report("First event had unexpected root window: 0x%x instead of 0x%x.",
+ (unsigned)ev.xkey.root, (unsigned)altroot);
+ FAIL;
+ } else
+ CHECK;
+ CHECKPASS(4);
+ } else {
+ report("Tested as far as possible with just one screen.");
+ CHECKUNTESTED(3);
+ }
+
+>>ASSERTION Good A
+When the focus window later becomes not viewable and
+.A revert_to
+is
+.S RevertToParent ,
+then the focus reverts to the closest viewable ancestor of the focus
+window, the
+.A revert_to
+value is changed to
+.S RevertToNone
+and
+.S FocusIn
+and
+.S FocusOut
+events are generated.
+>>STRATEGY
+Create base window
+Create child of this window and set focus argument to it.
+Set revert_to argument to RevertToParent.
+Call xname.
+Enable events on windows.
+Unmap focus window.
+Verify that focus is the base window.
+Verify that revert_to is RevertToNone.
+Verify that Focus events are generated.
+>>CODE
+Window base;
+XFocusInEvent figood;
+XFocusOutEvent fogood;
+XEvent ev;
+Window newfocus;
+int newrevert;
+
+ base = defwin(display);
+ focus = crechild(display, base, (struct area *)0);
+ revert_to = RevertToParent;
+
+ if (isdeleted())
+ return;
+
+ XCALL;
+
+ XSelectInput(display, base, FocusChangeMask);
+ XSelectInput(display, focus, FocusChangeMask);
+
+ XUnmapWindow(display, focus);
+ XGetInputFocus(display, &newfocus, &newrevert);
+ if (isdeleted())
+ return;
+
+ if (newfocus != base) {
+ report("Focus window was 0x%x, expecting 0x%x", newfocus, base);
+ FAIL;
+ } else
+ CHECK;
+
+ if (newrevert != RevertToNone) {
+ report("New revert_to value was %s, expecting RevertToNone",
+ reverttoname(newrevert));
+ FAIL;
+ } else
+ CHECK;
+
+ /*
+ * Event testing. In this case there should be a FocusOut on the
+ * focus window, followed by a FocusIn on the base window.
+ */
+ defsetevent(fogood, display, FocusOut);
+ fogood.window = focus;
+ fogood.mode = NotifyNormal;
+ fogood.detail = NotifyAncestor;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusOut) {
+ report("Was expecting a FocusOut event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&fogood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ defsetevent(figood, display, FocusIn);
+ figood.window = base;
+ figood.mode = NotifyNormal;
+ figood.detail = NotifyInferior;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusIn) {
+ report("Was expecting a FocusIn event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&figood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(6);
+>>ASSERTION Good A
+When the focus window later becomes not viewable and
+.A revert_to
+is
+.S RevertToPointerRoot ,
+then the focus window reverts to
+.S PointerRoot
+and
+.S FocusIn
+and
+.S FocusOut
+events are generated.
+>>STRATEGY
+Create base window
+Create child of this window and set focus argument to it.
+Set revert_to argument to RevertToPointerRoot.
+Warp pointer to 0,0 (guaranteed none of our windows are here)
+Call xname.
+Unmap focus window.
+Verify that focus is PointerRoot.
+Verify that revert_to is RevertToPointerRoot.
+Verify that Focus events are generated.
+>>CODE
+Window base;
+XFocusInEvent figood;
+XFocusOutEvent fogood;
+XEvent ev;
+Window newfocus;
+int newrevert;
+
+ /*
+ * Use a non-default display, because we are setting the event mask
+ * on the root window, which would mess up things for the next tests.
+ */
+ display = opendisplay();
+
+ base = defwin(display);
+ focus = crechild(display, base, (struct area *)0);
+ revert_to = RevertToPointerRoot;
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ if (isdeleted())
+ return;
+
+ XCALL;
+
+ XSelectInput(display, base, FocusChangeMask);
+ XSelectInput(display, focus, FocusChangeMask);
+ XSelectInput(display, DRW(display), FocusChangeMask);
+
+ XUnmapWindow(display, focus);
+ XGetInputFocus(display, &newfocus, &newrevert);
+ if (isdeleted())
+ return;
+
+ if (newfocus != PointerRoot) {
+ report("Focus window was 0x%x, expecting 0x%x", newfocus, PointerRoot);
+ FAIL;
+ } else
+ CHECK;
+
+ if (newrevert != RevertToPointerRoot) {
+ report("New revert_to value was %s, expecting RevertToPointerRoot",
+ reverttoname(newrevert));
+ FAIL;
+ } else
+ CHECK;
+
+ /* FocusOut from focus window */
+ defsetevent(fogood, display, FocusOut);
+ fogood.window = focus;
+ fogood.mode = NotifyNormal;
+ fogood.detail = NotifyNonlinear;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusOut) {
+ report("Was expecting a FocusOut event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&fogood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ /* FocusOut on the base window */
+ fogood.window = base;
+ fogood.detail = NotifyNonlinearVirtual;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusOut) {
+ report("Was expecting a FocusOut event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&fogood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ /* FocusOut on the root window */
+ fogood.window = DRW(display);
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusOut) {
+ report("Was expecting a FocusOut event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&fogood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ /* FocusIn on the root window */
+ defsetevent(figood, display, FocusIn);
+ figood.window = DRW(display);
+ figood.mode = NotifyNormal;
+ figood.detail = NotifyPointerRoot;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusIn) {
+ report("Was expecting a FocusIn event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&figood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ figood.window = DRW(display);
+ figood.detail = NotifyPointer;
+
+ /* FocusIn for the pointer */
+ if (getevent(display, &ev) == 0 || ev.type != FocusIn) {
+ report("Was expecting a FocusIn event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&figood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(12);
+
+>>ASSERTION Good A
+When the focus window later becomes not viewable and
+.A revert_to
+is
+.S RevertToNone ,
+then the focus window reverts to
+.S None
+and
+.S FocusIn
+and
+.S FocusOut
+events are generated.
+>>STRATEGY
+Create base window
+Create child of this window and set focus argument to it.
+Set revert_to argument to RevertToNone.
+Call xname.
+Unmap focus window.
+Verify that focus is None
+Verify that revert_to is RevertToNone.
+Verify that Focus events are generated.
+>>CODE
+Window base;
+XFocusInEvent figood;
+XFocusOutEvent fogood;
+XEvent ev;
+Window newfocus;
+int newrevert;
+
+ /*
+ * Use a non-default display, because we are setting the event mask
+ * on the root window, which would mess up things for the next tests.
+ */
+ display = opendisplay();
+
+ base = defwin(display);
+ focus = crechild(display, base, (struct area *)0);
+ revert_to = RevertToNone;
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ if (isdeleted())
+ return;
+
+ XCALL;
+
+ XSelectInput(display, base, FocusChangeMask);
+ XSelectInput(display, focus, FocusChangeMask);
+ XSelectInput(display, DRW(display), FocusChangeMask);
+
+ XUnmapWindow(display, focus);
+ XGetInputFocus(display, &newfocus, &newrevert);
+ if (isdeleted())
+ return;
+
+ if (newfocus != None) {
+ report("Focus window was 0x%x, expecting None", newfocus);
+ FAIL;
+ } else
+ CHECK;
+
+ if (newrevert != RevertToNone) {
+ report("New revert_to value was %s, expecting RevertToNone",
+ reverttoname(newrevert));
+ FAIL;
+ } else
+ CHECK;
+
+ /* FocusOut from focus window */
+ defsetevent(fogood, display, FocusOut);
+ fogood.window = focus;
+ fogood.mode = NotifyNormal;
+ fogood.detail = NotifyNonlinear;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusOut) {
+ report("Was expecting a FocusOut event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&fogood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ /* FocusOut on the base window */
+ fogood.window = base;
+ fogood.detail = NotifyNonlinearVirtual;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusOut) {
+ report("Was expecting a FocusOut event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&fogood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ /* FocusOut on the root window */
+ fogood.window = DRW(display);
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusOut) {
+ report("Was expecting a FocusOut event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&fogood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ /* FocusIn on the root window */
+ defsetevent(figood, display, FocusIn);
+ figood.window = DRW(display);
+ figood.mode = NotifyNormal;
+ figood.detail = NotifyDetailNone;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusIn) {
+ report("Was expecting a FocusIn event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&figood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(10);
+
+>>ASSERTION Good A
+When the specified time is earlier than the current
+last-focus-change time or is later than the current X server time,
+then a call to xname has no effect.
+>>STRATEGY
+Create window.
+Get current X server time with gettime().
+Set focus to None using this time.
+
+Attempt to set the focus window with a time less than the previous time.
+Verify that focus is still None.
+
+Get current time again.
+Add amount to get time in the future.
+Attempt to set the focus window with this time.
+Verify that focus is still None.
+>>CODE
+Window win;
+Window newfocus;
+int newrevert;
+
+ win = defwin(display);
+
+ time = gettime(display);
+ focus = None;
+
+ XCALL;
+
+ time -= 12;
+ focus = win;
+ XCALL;
+
+ XGetInputFocus(display, &newfocus, &newrevert);
+ if (newfocus == None)
+ CHECK;
+ else {
+ report("Focus was changed when time was earlier than last-focus-change time");
+ FAIL;
+ }
+
+ time = gettime(display);
+ time += ((config.speedfactor+1) * 1000000);
+
+ XCALL;
+
+ XGetInputFocus(display, &newfocus, &newrevert);
+ if (newfocus == None)
+ CHECK;
+ else {
+ report("Focus was changed when time was later than current X server time");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+A successful call to xname sets the last-focus-change time to
+the specified time with CurrentTime being
+replaced by the current X server time.
+>>STRATEGY
+Create toplevel window.
+Call xname with time = gettime(display) and focus = window.
+Call XGetInputFocus and verify that focus_return is window.
+Attempt xname at time just before time with focus = root.
+Check focus is still window.
+Attempt xname at time equal to time and focus = root.
+Check focus is now root.
+
+Get time before with gettime(display).
+Call xname with time = CurrentTime and focus = window.
+Call XGetInputFocus and verify that focus_return is window.
+Attempt xname at time before with focus = root.
+Check focus is still window.
+Attempt xname at CurrentTime and focus = root.
+Check focus is now root.
+>>CODE
+Time t1,t2;
+Window win;
+Window focus_return;
+int junk;
+
+ win = defwin(display);
+ XSync(display, True);
+ t1 = gettime(display);
+ if (t1 == CurrentTime) {
+ delete("Could not get server time.");
+ return;
+ } else
+ CHECK;
+
+ time = t1;
+ focus = win;
+ XCALL;
+
+ XGetInputFocus(display, &focus_return, &junk);
+ if (focus_return != win) {
+ report("Failed to change focus with time = 0x%lx.", (unsigned long)time);
+ FAIL;
+ } else
+ CHECK;
+ trace("Focus set at time 0x%lx.",(unsigned long)time);
+ time--;
+ focus = DRW(display);
+ XCALL;
+ XGetInputFocus(display, &focus_return, &junk);
+ if (focus_return != win) {
+ report("Last focus change time set earlier than specified time.");
+ FAIL;
+ } else
+ CHECK;
+ time = t1;
+ XCALL;
+ XGetInputFocus(display, &focus_return, &junk);
+ if (focus_return != focus) {
+ report("Last focus change time set later than specified time.");
+ FAIL;
+ } else
+ CHECK;
+
+ /* last despairing attempt */
+ time = CurrentTime;
+ XCALL;
+ XGetInputFocus(display, &focus_return, &junk);
+ if (focus_return != focus) {
+ delete("Cannot restore focus to perform CurrentTime tests.");
+ return;
+ } else
+ CHECK;
+
+ XSync(display, True);
+ t1 = gettime(display);
+ if (t1 == CurrentTime) {
+ delete("Could not get earlier server time.");
+ return;
+ } else
+ CHECK;
+
+ time = CurrentTime;
+ focus = win;
+ XCALL;
+
+ XGetInputFocus(display, &focus_return, &junk);
+ if (focus_return != focus) {
+ delete("Failed to change focus at CurrentTime.");
+ return;
+ } else
+ CHECK;
+ /* now set up OK */
+ t2 = gettime(display);
+ if (t2 == CurrentTime) {
+ delete("Could not get later server time.");
+ return;
+ } else
+ CHECK;
+
+ trace("Focus changed at time between 0x%lx and 0x%lx (diff = %d).",t1,t2,t2-t1);
+ time = t1;
+ focus = DRW(display);
+ XCALL;
+ XGetInputFocus(display, &focus_return, &junk);
+ if (focus_return != win) {
+ report("Last focus change time set earlier than 0x%lx.",t1);
+ FAIL;
+ } else
+ CHECK;
+ time = t2;
+ XCALL;
+ XGetInputFocus(display, &focus_return, &junk);
+ if (focus_return != focus) {
+ report("Last focus change time set later than 0x%lx.", t2);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(10);
+
+>>ASSERTION Good A
+When the focus changes, then
+.S FocusIn
+and
+.S FocusOut
+events are generated.
+>>STRATEGY
+Create base window.
+Create two subwindows on base.
+Set focus to first subwindow.
+Enable events on all three windows.
+Call xname to change focus to second subwindow.
+Verify that focus events are generated.
+>>CODE
+Window base;
+Window ch1;
+Window ch2;
+struct area area;
+XFocusInEvent figood;
+XFocusOutEvent fogood;
+XEvent ev;
+
+ base = defwin(display);
+ setarea(&area, 0, 0, 2, 2);
+ ch1 = crechild(display, base, &area);
+ setarea(&area, 20, 20, 2, 2);
+ ch2 = crechild(display, base, &area);
+
+ focus = ch1;
+ XCALL;
+
+ XSelectInput(display, ch1, FocusChangeMask);
+ XSelectInput(display, ch2, FocusChangeMask);
+ XSelectInput(display, base, FocusChangeMask);
+
+ focus = ch2;
+ XCALL;
+
+ /* FocusOut from old focus window, ch1 */
+ defsetevent(fogood, display, FocusOut);
+ fogood.window = ch1;
+ fogood.mode = NotifyNormal;
+ fogood.detail = NotifyNonlinear;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusOut) {
+ report("Was expecting a FocusOut event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&fogood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ /* FocusIn on the new focus window, ch2 */
+ defsetevent(figood, display, FocusIn);
+ figood.window = ch2;
+ figood.mode = NotifyNormal;
+ figood.detail = NotifyNonlinear;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusIn) {
+ report("Was expecting a FocusIn event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&figood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When the specified focus window is not viewable, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create unmapped window.
+Attempt to set focus to it.
+Verify that a BadMatch error occurs.
+>>CODE BadMatch
+Window base;
+
+ base = defwin(display);
+ focus = creunmapchild(display, base, (struct area *)0);
+
+ XCALL;
+
+ if (geterr() == BadMatch)
+ PASS;
+ else
+ FAIL; /* Already done */
+>>ASSERTION Good A
+.ER BadValue revert_to RevertToParent RevertToPointerRoot RevertToNone
+>>ASSERTION Good A
+.ER BadWindow PointerRoot None
diff --git a/xc/test/xsuite/xtest/tset/CH07/stmdfrmppn/stmdfrmppn.m b/xc/test/xsuite/xtest/tset/CH07/stmdfrmppn/stmdfrmppn.m
new file mode 100644
index 000000000..d5fc31575
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/stmdfrmppn/stmdfrmppn.m
@@ -0,0 +1,442 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetModifierMapping CH07
+int
+xname
+Display *display = Dsp;
+XModifierKeymap *modmap;
+>>SET return-value MappingSuccess
+>>EXTERN
+
+static XModifierKeymap *origmap;
+
+static int Minkc, Maxkc;
+
+>>SET startup savemap
+static void
+savemap()
+{
+ startup();
+ if(Dsp) {
+ origmap = XGetModifierMapping(Dsp);
+ XDisplayKeycodes(Dsp, &Minkc, &Maxkc);
+ }
+}
+
+>>SET cleanup cleanmap
+static void
+cleanmap()
+{
+ if(Dsp)
+ XSetModifierMapping(Dsp, origmap);
+ cleanup();
+}
+
+>>ASSERTION Good A
+A succesful call to xname
+specifies the KeyCodes of the keys that are to be used
+as modifiers and returns
+.S MappingSuccess .
+>>STRATEGY
+Set up a modifier map.
+Call xname to set servers map.
+Verify that MappingSuccess is returned.
+Get current map with XGetModifierMapping.
+Verify that the mapping has been set correctly.
+>>CODE
+int i;
+int kpm;
+XModifierKeymap *newmap;
+
+ /*
+ * Because some keycodes may not be usable as modifiers in a server
+ * dependent fashion, then we must take steps to avoid this.
+ * Therefore: get current modifiers and rearrange them.
+ */
+ kpm = origmap->max_keypermod;
+ modmap = XNewModifiermap(kpm);
+ if (modmap == 0) {
+ delete("Could not create new map");
+ return;
+ }
+
+ for (i = 0; i < kpm*8; i++)
+ modmap->modifiermap[i] = origmap->modifiermap[kpm*8-1 - i];
+
+ XCALL;
+
+ newmap = XGetModifierMapping(display);
+
+ if (newmap->max_keypermod == modmap->max_keypermod)
+ CHECK;
+ else {
+ report("max_keypermod was %d, expecting %d", newmap->max_keypermod,
+ modmap->max_keypermod);
+ FAIL;
+ }
+ for (i = 0; i < kpm*8; i++) {
+ if (modmap->modifiermap[i] == newmap->modifiermap[i])
+ CHECK;
+ else {
+ report("Modifier map was not set correctly");
+ FAIL;
+ break;
+ }
+ }
+ CHECKPASS(1+kpm*8);
+
+ XFreeModifiermap(newmap);
+>>ASSERTION Good A
+When a call to xname succeeds, then a
+.S MappingNotify
+event is generated.
+>>STRATEGY
+Call xname to set mapping.
+Verify that a MappingNotify event is generated.
+>>CODE
+int n;
+XEvent ev;
+XMappingEvent good;
+
+ modmap = origmap;
+
+ XCALL;
+
+ defsetevent(good, display, MappingNotify);
+ good.window = None; /* unused */
+ good.request = MappingModifier;
+ /* rest not used */
+
+ n = getevent(display, &ev);
+ if (n == 0 || ev.type != MappingNotify) {
+ report("Expecting a MappingNotify event");
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION def
+The
+.M modifiermap
+member of the
+.S XModifierKeymap
+structure contains eight sets of
+.M max_keypermod
+KeyCodes, one for each modifier in the order
+.S Shift ,
+.S Lock ,
+.S Control ,
+.S Mod1 ,
+.S Mod2 ,
+.S Mod3 ,
+.S Mod4 ,
+and
+.S Mod5 .
+>>ASSERTION Good A
+When a zero KeyCode occurs in a set, then it is ignored.
+>>STRATEGY
+>># This is not really true in any sense that we can test.
+>># Check that 0 does not generate BadValue when used multiple times.
+Set up a mapping with all keycodes zero.
+Set mapping with xname.
+Verify no BadValue error.
+>># Verify that mapping did not change.
+>>CODE
+XModifierKeymap *oldmap;
+int i;
+
+ oldmap = XGetModifierMapping(display);
+ if (oldmap == 0) {
+ delete("Could not get the old map");
+ return;
+ }
+
+ modmap = XNewModifiermap(1);
+ for (i = 0; i < 8; i++)
+ modmap->modifiermap[i] = 0;
+
+ XCALL;
+
+ if (geterr() == Success)
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad C
+When an implementation restriction on which keys can be used
+as modifiers is violated,
+then a call to xname returns
+.S MappingFailed
+and none of the modifiers are changed.
+>>STRATEGY
+Try in turn all possible keycodes.
+If all return MappingSuccess:
+ Report unsupported.
+else
+ Verify that MappingFailed is returned.
+ Verify that modifier has not been set to this keycode.
+>>CODE
+int i;
+int ret;
+int found;
+XModifierKeymap *newmap;
+unsigned int kc;
+
+ if ((modmap = XNewModifiermap(1)) == 0) {
+ delete("Failed to create new modifier map");
+ return;
+ }
+
+ for (i = 0; i < 8; i++)
+ modmap->modifiermap[i] = 0;
+
+ found = 0;
+ for (kc = Minkc; kc <= Maxkc; kc++) {
+ modmap->modifiermap[0] = (KeyCode)kc;
+
+ ret = XCALL;
+
+ if (ret != MappingSuccess) {
+
+ found = True;
+
+ if (ret != MappingFailed) {
+ report("Return value was %d, expecting MappingFailure", ret);
+ FAIL;
+ break;
+ }
+ newmap = XGetModifierMapping(display);
+
+ if (newmap->modifiermap[0] == (KeyCode)kc) {
+ report("An invalid keycode (%u) was set into the map", kc);
+ FAIL;
+ break;
+ } else
+ CHECK;
+ } else
+ CHECK;
+ }
+
+ if (!found)
+ unsupported("All keycodes are acceptable as modifiers for this server");
+ else
+ CHECKPASS(Maxkc-Minkc+1);
+
+>>ASSERTION Bad B 3
+When the new KeyCodes specified for a modifier differ from those
+currently defined and any of the
+current or new keys for that modifier are
+in the logically down state, then a call to xname returns
+.S MappingBusy
+and none of the modifiers are changed.
+>>STRATEGY
+If extension available:
+ Get current modifier mapping (other tests may have changed it from origmap).
+ Make a new modifier map by permuting the old.
+ Check there is at least one non-zero keycode in it.
+ Simulate pressing this key using extension.
+ Call xname to set the new mod. map.
+ Expect MappingBusy
+ Release all keys.
+ Get current mapping with XGetModifierMapping.
+ Compare with that got at first.
+ Remove key from map.
+ Simulate pressing key not in the map.
+ Call xname.
+ Expect MappingBusy as one of current (at time of xname call) mod keys pressed.
+ Release all keys.
+ Call xname to set up map to not include this key.
+ Expect MappingSuccess.
+ Simulate pressing key not in the map.
+ Call xname.
+ Expect !MappingBusy as key not in current or new maps (at time of xname call).
+ Release all keys.
+else
+ Report untested.
+>>CODE
+int i;
+int kpm;
+int modkc;
+XModifierKeymap *newmap;
+XModifierKeymap *oldmap;
+int ret;
+KeyCode *kcp;
+
+ if (noext(0))
+ return;
+ else
+ CHECK;
+
+ oldmap = XGetModifierMapping(display);
+
+ /*
+ * Because some keycodes may not be usable as modifiers in a server
+ * dependent fashion, then we must take steps to avoid this.
+ * Therefore: get current modifiers and rearrange them.
+ */
+ kpm = oldmap->max_keypermod;
+ modmap = XNewModifiermap(kpm);
+ if (modmap == 0) {
+ delete("Could not create new map");
+ XFreeModifiermap(oldmap);
+ return;
+ }
+
+ modkc = 0;
+ for (i = 0; i < kpm*8; i++) {
+ KeyCode kc = modmap->modifiermap[i] = oldmap->modifiermap[kpm*8-1 - i];
+
+ if (!modkc && kc) {
+ modkc = kc;
+ kcp = &(modmap->modifiermap[i]);
+ }
+ }
+
+ if (!modkc) {
+ delete("Can't find a usable modifier key code.");
+ XFreeModifiermap(oldmap);
+ XFreeModifiermap(modmap);
+ return;
+ } else
+ CHECK;
+
+ keypress(display, modkc);
+
+ ret = XCALL;
+
+ relalldev();
+
+ if (ret == MappingBusy)
+ CHECK;
+ else {
+ report("Key %d did not cause MappingBusy when pressed.", modkc);
+ FAIL;
+ }
+ /* now check no change occurred */
+ newmap = XGetModifierMapping(display);
+
+ if (newmap->max_keypermod == oldmap->max_keypermod)
+ CHECK;
+ else {
+ report("max_keypermod was %d, expecting %d", newmap->max_keypermod,
+ oldmap->max_keypermod);
+ FAIL;
+ }
+ for (i = 0; i < kpm*8; i++) {
+ if (oldmap->modifiermap[i] == newmap->modifiermap[i])
+ CHECK;
+ else {
+ report("Modifier map was not set correctly");
+ FAIL;
+ break;
+ }
+ }
+
+ /* use a key not in new map, but in current, and expect MappingBusy */
+ *kcp = 0; /* remove modkc from map */
+ keypress(display, modkc);
+ ret = XCALL;
+ relalldev();
+
+ if (ret == MappingBusy)
+ CHECK;
+ else {
+ report("Pressing key %d caused %s, not MappingBusy, though in old map.",
+ modkc, (ret==MappingSuccess)?"MappingSuccess":"MappingFailed");
+ FAIL;
+ }
+ /* make sure that key is not in map, now */
+ ret = XCALL;
+ if (ret != MappingSuccess) {
+ delete("Can't install new mod. map not including key %d.", modkc);
+ XFreeModifiermap(modmap);
+ XFreeModifiermap(oldmap);
+ XFreeModifiermap(newmap);
+ return;
+ } else
+ CHECK;
+ /* use a key not in the new or current map and expect other than MappingBusy */
+ keypress(display, modkc);
+ ret = XCALL;
+ relalldev();
+
+ if (ret != MappingBusy)
+ CHECK;
+ else {
+ report("Pressing key %d caused MappingBusy though not in new or old map.", modkc);
+ FAIL;
+ }
+
+ XFreeModifiermap(modmap);
+ XFreeModifiermap(oldmap);
+ XFreeModifiermap(newmap);
+
+ CHECKPASS(7 + kpm*8);
+>>SET return-value MappingSuccess
+>>ASSERTION Bad B 3
+.ER BadAlloc
+>>ASSERTION Bad A
+When a KeyCode is not in the range returned by
+>># This was an error not spotted in the assertion reviews.
+>># .F XDisplayCodes ,
+.F XDisplayKeycodes ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Call XDisplayKeycodes to get range of valid keycodes.
+Set up map with keycode less than the minimum value.
+Call xname.
+Verify that a BadValue error occurs.
+
+Set up map with keycode greater than the maximum value (if possible).
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+>>SET return-value MappingFailed
+int i;
+
+ modmap = XNewModifiermap(1);
+ for (i = 0; i < 8*modmap->max_keypermod; i++)
+ modmap->modifiermap[i] = 0;
+
+ modmap->modifiermap[0] = Minkc-1;
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+
+ if (Maxkc+1 < 0xff) {
+ modmap->modifiermap[0] = Maxkc+1;
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ else
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH07/stpntrmppn/stpntrmppn.m b/xc/test/xsuite/xtest/tset/CH07/stpntrmppn/stpntrmppn.m
new file mode 100644
index 000000000..bb65a559d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/stpntrmppn/stpntrmppn.m
@@ -0,0 +1,397 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetPointerMapping CH07
+>>SET return-value MappingSuccess
+int
+
+Display *display = Dsp;
+unsigned char *map = Map;
+int nmap;
+>>EXTERN
+
+/* Maximum button number allowed. */
+#define MAXBUTTON 5
+
+/*
+ * MAPSIZE must be at least one greater than the maximum number of buttons
+ * allowed. We use a much larger value.
+ */
+#define MAPSIZE 32
+static unsigned char Map[MAPSIZE];
+
+static int numbuttons;
+
+/*
+ * Set up the number of buttons. Also set the nmap value to numbuttons (
+ * the test may later override this).
+ */
+>>SET begin-function getnbutton
+static void
+getnbutton()
+{
+ numbuttons = XGetPointerMapping(Dsp, Map, MAPSIZE);
+ nmap = numbuttons;
+ if (isdeleted())
+ delete("XGetPointerMapping failed");
+}
+
+/*
+ * Save and restore the old map.
+ */
+static unsigned char oldmap[MAPSIZE];
+>>SET startup savemap
+static void
+savemap()
+{
+ startup();
+ if(Dsp)
+ numbuttons = XGetPointerMapping(Dsp, oldmap, MAPSIZE);
+}
+
+>>SET cleanup restoremap
+static void
+restoremap()
+{
+ if(Dsp)
+ (void) XSetPointerMapping(Dsp, oldmap, numbuttons);
+ cleanup();
+}
+
+>>ASSERTION Good A
+A successful call to xname sets the pointer mapping for the physical buttons
+to the
+.A nmap
+logical button numbers specified in the array
+.A map
+and returns
+.S MappingSuccess .
+>>STRATEGY
+Get number of buttons.
+Set up a pointer mapping.
+Set pointer mapping with xname.
+Verify return value.
+Get pointer mapping with XGetPointerMapping.
+Verify that pointer mapping is as set.
+>>CODE
+unsigned char newmap[MAPSIZE];
+int i;
+
+ /*
+ * Cycle the current mapping around.
+ */
+ for (i = 0; i < numbuttons; i++) {
+ map[i] = map[i] + 1;
+ if (map[i] > MAXBUTTON)
+ map[i] = 1;
+ }
+
+ XCALL;
+
+ (void) XGetPointerMapping(display, newmap, MAPSIZE);
+ if (isdeleted()) {
+ delete("Could not get pointer mapping");
+ return;
+ }
+
+ for (i = 0; i < numbuttons; i++) {
+ if (map[i] == newmap[i])
+ CHECK;
+ else {
+ report("Mapping not set correctly in position %d", i);
+ report(" was %u, expecting %u", (unsigned)newmap[i], (unsigned)map[i]);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(numbuttons);
+>>ASSERTION Good A
+When a call to xname is successful, then a
+.S MappingNotify
+event is generated.
+>>STRATEGY
+Call xname.
+Verify that a MappingNotify event is generated.
+>>CODE
+XEvent ev;
+XMappingEvent good;
+int n;
+
+ XCALL;
+
+ n = getevent(display, &ev);
+ if (n == 0 || ev.type != MappingNotify) {
+ report("Expecting a MappingNotify event, received %s", n? eventname(ev.type): "no event");
+ FAIL;
+ } else
+ CHECK;
+
+ defsetevent(good, display, MappingNotify);
+ good.window = None; /* Not used */
+ good.request = MappingPointer;
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good B 3
+When an element of
+.A map
+is zero, then the corresponding physical button is
+disabled.
+>>STRATEGY
+If extension available:
+ Create and map a window.
+ Select ButtonPress on it.
+ For i in 1..numbuttons
+ Set map[i-1] to 0.
+ Call xname.
+ Discard event queue.
+ Simulate button i press with extension.
+ Release all buttons etc.
+ Check no button press event received.
+ Restore map[i-1].
+else
+ Report untested.
+>>CODE
+int i;
+unsigned char zmap[5];
+Window win;
+
+ if (noext(numbuttons))
+ return;
+ else
+ CHECK;
+
+ if (numbuttons<1 || numbuttons>5) {
+ report("Protocol limit of 1..5 buttons exceeded (%d).", numbuttons);
+ return;
+ } else
+ CHECK;
+
+ for(i=0; i<numbuttons; i++)
+ zmap[i] = map[i];
+ win = defwin(display);
+ (void) warppointer(display, win, 2,2);
+ XSelectInput(display, win, ButtonPressMask);
+
+ for(i=0; i<numbuttons; i++) {
+ unsigned char mapsave = zmap[i];
+ int ret;
+ XEvent ev;
+
+ zmap[i] = 0; /* disable button i+1 */
+ map = zmap;
+ ret = XCALL;
+
+ if (ret != MappingSuccess) {
+ delete("Couldn't set zero entry for button %d.", i+1);
+ return;
+ } else
+ CHECK;
+
+ XSync(display, True); /* discard event queue */
+ _startcall(display); /* set error handler etc. */
+ buttonpress(display, (unsigned int)i+1);
+ relalldev();
+ _endcall(display);
+ if (geterr() != Success) {
+ delete("Couldn't simulate pressing button %d.", i+1);
+ return;
+ } else
+ CHECK;
+ if (XCheckWindowEvent(display, win, ButtonPressMask, &ev)) {
+ report("Got event after pressing disabled button %d.", i+1);
+ FAIL;
+ } else
+ CHECK;
+ zmap[i] = mapsave; /* restore button i+1 */
+ }
+ CHECKPASS(2+numbuttons*3);
+>>ASSERTION Good A
+Elements of the
+.A map
+array are not restricted in
+value by the number of physical buttons.
+>>STRATEGY
+Set up map array with button number higher than number of physical buttons.
+Call xname.
+Verify no error.
+>>CODE
+int i;
+
+ for (i = 0; i < numbuttons; i++)
+ map[i] = i;
+
+ map[0] = numbuttons+1;
+
+ XCALL;
+
+ if (geterr() == Success)
+ PASS;
+
+>>ASSERTION Good B 3
+When any of the buttons to be altered are logically in the down state,
+then a call to xname returns
+.S MappingBusy ,
+and the mapping is not changed.
+>>STRATEGY
+If extension available:
+ Set mapping to be each button to itself and save this map.
+ For i in 1..numbuttons
+ Cycle map so that button i is not itself.
+ Simulate button i press
+ Call xname with cycled map so that button i is being altered.
+ Release buttons etc.
+ Check for MappingBusy.
+ Call XGetPointerMapping to get current mapping and current numbuttons.
+ Check same as original, saved, values.
+else
+ Report untested.
+>>CODE
+int i;
+int nb;
+unsigned char firstmap[MAPSIZE];
+unsigned char newmap[MAPSIZE];
+int ret;
+
+ if (noext(numbuttons))
+ return;
+ else
+ CHECK;
+
+ if (numbuttons<1 || numbuttons>5) {
+ delete("Protocol limit of 1..5 buttons exceeded (%d).", numbuttons);
+ return;
+ } else
+ CHECK;
+ for(i=0; i<numbuttons; i++)
+ firstmap[i] = map[i] = (unsigned char)i+1;
+ ret = XCALL;
+ if (isdeleted() || ret != MappingSuccess) {
+ delete("Couldn't set up monotonic map to start with.");
+ return;
+ } else
+ CHECK;
+ for(i=0; i<numbuttons; i++) {
+ int j;
+ unsigned char tmp;
+
+ /* cycle map by one, until map[i] is not i=1 */
+ do {
+ for(tmp=map[0], j=0; j<(numbuttons-1); j++)
+ map[j] = map[j+1];
+ map[numbuttons - 1] = tmp;
+ } while (map[i] == (unsigned char)i+1);
+
+ _startcall(display); /* set error handler etc. */
+ buttonpress(display, (unsigned int)i+1);
+ if (geterr() != Success) {
+ delete("Couldn't simulate pressing button %d.", i+1);
+ relalldev();
+ _endcall(display);
+ return;
+ } else
+ CHECK;
+ _endcall(display);
+ ret = XCALL;
+ _startcall(display); /* set error handler etc. */
+ relalldev();
+ _endcall(display);
+ if (ret != MappingBusy) {
+ report("Expecting MappingBusy with button %d, got %s (%d).",
+ i+1, (ret==MappingSuccess)?"MappingSuccess":"<unknown>", ret);
+ FAIL;
+ } else
+ CHECK;
+ nb = XGetPointerMapping(display, newmap, numbuttons);
+ if (isdeleted()) {
+ delete("Couldn't get current pointer map for comparison.");
+ return;
+ } else
+ CHECK;
+ if (nb != numbuttons) {
+ report("Button numbers changed from %d to %d.", numbuttons, nb);
+ FAIL;
+ } else {
+ for(j=0; j<numbuttons; j++)
+ if (firstmap[j] != newmap[j]) {
+ report("Maps differ for button %d, was %d now %d.", j+1, firstmap[j], newmap[j]);
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+ CHECKPASS(3+numbuttons*(3+numbuttons*1));
+>>ASSERTION Bad A
+When
+.A nmap
+is not the same as the length that
+.F XGetPointerMapping
+would return,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Set nmap to incorrect value.
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+int i;
+
+ nmap = numbuttons + 2;
+ for (i = 0; i < nmap; i++)
+ map[i] = i; /* MAPSIZE is large enough to allow this */
+ XCALL;
+
+ if (geterr() == BadValue)
+ PASS;
+ else
+ FAIL; /* done already */
+>>ASSERTION Bad C
+If there is more than one button:
+When two elements of
+.A map
+have the same non-zero value,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+If less than two buttons
+ Report unsupported.
+Set up a map with two elements the same.
+Call xname.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+int i;
+
+ if (numbuttons < 2) {
+ unsupported("There are less than two buttons");
+ return;
+ }
+
+ for (i = 0; i < nmap; i++)
+ map[i] = i;
+
+ map[0] = map[1];
+ XCALL;
+
+ if (geterr() == BadValue)
+ PASS;
+ else
+ FAIL;
+
diff --git a/xc/test/xsuite/xtest/tset/CH07/stscrnsvr/stscrnsvr.m b/xc/test/xsuite/xtest/tset/CH07/stscrnsvr/stscrnsvr.m
new file mode 100644
index 000000000..c082db90e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/stscrnsvr/stscrnsvr.m
@@ -0,0 +1,255 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetScreenSaver CH07
+void
+
+Display *display = Dsp;
+int timeout = 34;
+int interval = 12;
+int prefer_blanking = PreferBlanking;
+int allow_exposures = AllowExposures;
+>>EXTERN
+
+static int origt;
+static int origi;
+static int origpb;
+static int origae;
+
+>>SET startup savesaver
+static void
+savesaver()
+{
+ startup();
+ if(Dsp)
+ XGetScreenSaver(Dsp, &origt, &origi, &origpb, &origae);
+}
+
+>>SET cleanup resetsaver
+static void
+resetsaver()
+{
+ if(Dsp)
+ XSetScreenSaver(Dsp, origt, origi, origpb, origae);
+ cleanup();
+}
+
+>>ASSERTION Good B 3
+When the
+.A timeout
+argument is greater than zero, then the screen saver is enabled
+and the value of
+.A timeout
+specifies the time in seconds, until the screen saver is activated.
+>>STRATEGY
+Touch test with timeout greater than zero.
+>>CODE
+
+ timeout = 10;
+
+ XCALL;
+
+ untested("Touch test with timeout greater than zero");
+>>ASSERTION Good B 3
+When
+.A timeout
+is 0, then the screen saver is disabled.
+>>STRATEGY
+Touch test for timeout zero.
+>>CODE
+
+ timeout = 0;
+ XCALL;
+
+ untested("Touch test for timeout zero");
+>>ASSERTION Good B 3
+When
+.A timeout
+is 0 and the screen saver is activated, then a call to xname
+does not deactivate the screen saver.
+>>ASSERTION Good B 3
+When
+.A timeout
+is \-1, then the default timeout is restored.
+>>STRATEGY
+Touch test for timeout of -1.
+>>CODE
+
+ timeout = -1;
+ XCALL;
+
+ untested("Touch test for timeout of -1");
+>>ASSERTION Good B 3
+If the server-dependent screen saver method uses periodic change:
+The interval argument serves as a hint about how long the change period
+should be, and zero hints that no periodic change should be made.
+>>STRATEGY
+Touch test for interval, including zero.
+>>CODE
+
+ interval = 3;
+ XCALL;
+
+ interval = 0;
+ XCALL;
+
+ untested("Touch test for interval, including zero");
+>>ASSERTION Good B 3
+When
+.A interval
+is \-1, then the default interval is restored.
+>>STRATEGY
+Touch test for default interval.
+>>CODE
+
+ interval = -1;
+ XCALL;
+
+ untested("Touch test for default interval");
+>>ASSERTION Good B 3
+When no input from devices is generated
+for the specified number of
+.A timeout
+seconds once the screen saver is enabled,
+then the screen saver is activated.
+>>ASSERTION Good D 3
+If the hardware supports video blanking:
+When
+.A prefer_blanking
+is
+.S PreferBlanking
+and the screen saver is subsequently activated,
+then the screen goes blank.
+>>STRATEGY
+Touch test for PreferBlanking.
+>>CODE
+
+ prefer_blanking = PreferBlanking;
+ XCALL;
+
+ untested("Touch test for PreferBlanking");
+>>ASSERTION Good B 3
+When
+.A prefer_blanking
+is
+.S DontPreferBlanking
+and
+.A allow_exposures
+is
+.S AllowExposures
+or the screen can be regenerated without sending
+.S Expose
+events and the screen saver is subsequently activated,
+then the screen is altered in an implementation defined way that avoids
+phosphor burn.
+>>STRATEGY
+Touch test for DontPreferBlanking.
+>>CODE
+
+ prefer_blanking = DontPreferBlanking;
+ allow_exposures = AllowExposures;
+ XCALL;
+
+ untested("Touch test for DontPreferBlanking");
+>>ASSERTION Good B 3
+When
+.A prefer_blanking
+is
+.S DefaultBlanking ,
+then the default value for the server is restored.
+>>STRATEGY
+Touch test for DefaultBlanking.
+>>CODE
+
+ prefer_blanking = DefaultBlanking;
+ XCALL;
+
+ untested("Touch test for DefaultBlanking");
+>>ASSERTION Good B 3
+When
+.A allow_exposures
+is
+.S DontAllowExposures ,
+and the screen can not be blanked or regenerated without sending
+.S Expose
+events and the screen saver would subsequently be activated,
+then the screen's state does not change
+and the screen saver is not activated.
+>>STRATEGY
+Touch test for DontAllowExposures.
+>>CODE
+
+ allow_exposures = DontAllowExposures;
+ XCALL;
+
+ untested("Touch test for DontAllowExposures");
+>>ASSERTION Good B 3
+When
+.A allow_exposures
+is
+.S DefaultExposures ,
+then the servers default value is restored.
+>>STRATEGY
+Touch test for DefaultExposures.
+>>CODE
+
+ allow_exposures = DefaultExposures;
+ XCALL;
+
+ untested("Touch test for DefaultExposures");
+>>ASSERTION Good B 3
+The screen saver is deactivated,
+and all screen states are restored at the next
+keyboard or pointer input or at the next call to
+.S XForceScreenSaver
+with mode
+.S ScreenSaverReset .
+>>ASSERTION Bad A
+When
+.A timeout
+is a negative number other than \-1, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Call xname with timeout of -2.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ timeout = -2;
+ XCALL;
+
+ if (geterr() == BadValue)
+ PASS;
+>>ASSERTION Bad A
+When
+.A interval
+is a negative number other than \-1, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Call xname with interval of -2.
+Verify that a BadValue error occurs.
+>>CODE BadValue
+
+ interval = -2;
+ XCALL;
+
+ if (geterr() == BadValue)
+ PASS;
+>>ASSERTION Bad A
+.ER BadValue prefer_blanking DontPreferBlanking PreferBlanking DefaultBlanking
+>>ASSERTION Bad A
+.ER BadValue allow_exposures DontAllowExposures AllowExposures DefaultExposures
diff --git a/xc/test/xsuite/xtest/tset/CH07/ungrbbttn/ungrbbttn.m b/xc/test/xsuite/xtest/tset/CH07/ungrbbttn/ungrbbttn.m
new file mode 100644
index 000000000..a778a3bbe
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/ungrbbttn/ungrbbttn.m
@@ -0,0 +1,292 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUngrabButton CH07
+void
+xname()
+Display *display = Dsp;
+unsigned int button = Button1;
+unsigned int modifiers = 0;
+Window grab_window = defwin(display);
+>>EXTERN
+>>SET end-function restoredevstate
+
+/*
+ * Returns True if the pointer is grabbed. This is not a general purpose
+ * routine since it knows about the Grab Button args.
+ * When the pointer is grabbed then pointer events are not reported to
+ * none grabbing clients.
+ */
+static
+pgrabbed()
+{
+Display *client2;
+XEvent ev;
+
+ client2 = opendisplay();
+
+ XSelectInput(client2, grab_window, PointerMotionMask|EnterWindowMask);
+ /* Flush events for client2 */
+ XSync(client2, True);
+
+ /*
+ * Ensure that pointer either enters or moves within grab_window.
+ */
+ (void) warppointer(display, grab_window, 1, 1);
+ (void) warppointer(display, grab_window, 1, 2);
+
+ XSync(client2, False);
+ if (getevent(client2, &ev)) {
+ /*
+ * An event was reported - pointer isn't grabbed, do a sanity
+ * check on the type of event.
+ */
+ if (ev.type != MotionNotify && ev.type != EnterNotify) {
+ delete("Unexpected event received in pgrabbed()");
+ delete(" event type %s", eventname(ev.type));
+ }
+ return(False);
+ } else {
+ return(True);
+ }
+}
+
+#define ACTPOSX 3
+#define ACTPOSY 6
+/*
+ * Warp to the grab_window and press the keys in modifiers and then press
+ * the button in the 'button' arg.
+ * (This activates the previously set up grab if the arg variables
+ * have not been changed.)
+ */
+static
+activate()
+{
+ (void) warppointer(display, grab_window, ACTPOSX, ACTPOSY);
+ if (modifiers)
+ modpress(display, modifiers);
+ buttonpress(display, button);
+}
+
+>>ASSERTION Good B 3
+When a passive grab for the specified button/key
+combination on the specified window
+exists and it was grabbed by this client, then
+a call to xname releases the grab.
+>>STRATEGY
+If no test extension:
+ Grab button.
+ Call xname to release grab.
+ UNTESTED touch test only.
+Place a passive grab on a button.
+Activate grab.
+Check that grab is active.
+Release grab.
+Call xname to remove grab.
+Attempt to activate grab.
+Verify that pointer is not grabbed.
+>>CODE
+
+ XGrabButton(display, button, modifiers, grab_window,
+ False, PointerMotionMask, GrabModeAsync, GrabModeAsync,
+ None, None);
+
+ if (isdeleted())
+ return;
+
+
+ if (noext(1)) {
+ XCALL;
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ activate();
+ if (pgrabbed())
+ CHECK;
+ else {
+ delete("Could not set up grab");
+ return;
+ }
+
+ relbuttons();
+
+ XCALL;
+
+ activate();
+ if (pgrabbed()) {
+ report("Grab was not removed");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+A
+.A modifiers
+argument of
+.S AnyModifier
+is equivalent to issuing
+the ungrab request for all possible modifier combinations, including
+no modifiers.
+>>STRATEGY
+If no test extension:
+ Touch test using AnyModifier.
+Set passive grabs for different modifier combination on grab_window.
+Set modifier to AnyModifier.
+Call xname.
+Verify that all grabs have been released.
+>>CODE
+unsigned int mods;
+
+ if (noext(1)) {
+ modifiers = AnyModifier;
+ XCALL;
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ mods = wantmods(display, 3);
+
+ /* Try a few modifiers */
+ modifiers = mods;
+ XGrabButton(display, button, modifiers, grab_window,
+ False, PointerMotionMask, GrabModeAsync, GrabModeAsync,
+ None, None);
+
+ /* Try no modifiers */
+ modifiers = 0;
+ XGrabButton(display, button, modifiers, grab_window,
+ False, PointerMotionMask, GrabModeAsync, GrabModeAsync,
+ None, None);
+
+ modifiers = AnyModifier;
+ XCALL;
+
+ /* Try to activate with modifier combination */
+ modifiers = mods;
+ activate();
+ if (pgrabbed()) {
+ report("Grab with modifiers %s was not released", keymaskname(mods));
+ FAIL;
+ } else
+ CHECK;
+
+ /* Try to activate with no modifiers */
+ modifiers = 0;
+ activate();
+ if (pgrabbed()) {
+ report("Grab with no modifiers was not released");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+A
+.A button
+argument of
+.S AnyButton
+is equivalent to issuing the
+request for all possible buttons.
+>>STRATEGY
+If no test extension:
+ Touch test using AnyButton.
+Set passive grabs for different buttons.
+Set button to AnyButton.
+Call xname.
+Verify that all grabs have been released.
+>>CODE
+
+ if (noext(1)) {
+ button = AnyButton;
+ XCALL;
+ report("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ button = Button1;
+ XGrabButton(display, button, modifiers, grab_window,
+ False, PointerMotionMask, GrabModeAsync, GrabModeAsync,
+ None, None);
+
+ if (nbuttons() > 1)
+ button = Button2;
+ XGrabButton(display, button, modifiers, grab_window,
+ False, PointerMotionMask, GrabModeAsync, GrabModeAsync,
+ None, None);
+
+ button = AnyButton;
+ XCALL;
+
+ /* Check the first grab */
+ button = Button1;
+ activate();
+
+ if (pgrabbed()) {
+ report("Grab on button1 was not released with AnyButton");
+ FAIL;
+ } else
+ CHECK;
+
+ if (nbuttons() > 1) {
+ button = Button2;
+ activate();
+ if (pgrabbed()) {
+ report("Grab on button2 was not released with AnyButton");
+ FAIL;
+ } else
+ CHECK;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good B 3
+A call to xname has no effect on an active grab.
+>>STRATEGY
+If test extension available:
+ Set up passive grab.
+ Activate grab.
+ Call xname.
+ Verify that pointer is still grabbed.
+>>CODE
+
+ if (noext(1))
+ return;
+
+ XGrabButton(display, button, modifiers, grab_window,
+ False, PointerMotionMask, GrabModeAsync, GrabModeAsync,
+ None, None);
+
+ activate();
+
+ XCALL;
+
+ if (pgrabbed())
+ CHECK;
+ else {
+ report("A call to %s released already active grab", TestName);
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Bad A
+.ER BadValue modifiers mask ShiftMask LockMask ControlMask Mod1Mask Mod2Mask Mod3Mask Mod4Mask Mod5Mask AnyModifier
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH07/ungrbky/ungrbky.m b/xc/test/xsuite/xtest/tset/CH07/ungrbky/ungrbky.m
new file mode 100644
index 000000000..75862f394
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/ungrbky/ungrbky.m
@@ -0,0 +1,517 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUngrabKey CH07
+void
+
+Display *display = Dsp;
+int keycode = grab_key_code(display);
+unsigned int modifiers = 0;
+Window grab_window = defwin(display);
+>>SET startup focusstartup
+>>SET cleanup focuscleanup
+>>EXTERN
+
+static int minkc = -1,maxkc = -1;
+
+static void set_kcs(dpy)
+ Display *dpy;
+{
+ int kmin, kmax;
+
+ if (minkc >= 8)
+ return;
+ XDisplayKeycodes(dpy, &kmin, &kmax);
+ if (kmin < 8)
+ kmin = 8; /* For buggy servers */
+ if (kmin >= kmax) {
+ delete("Could not find two distinct key codes\n");
+ delete("\t(min=%d, max=%d)\n", kmin, kmax);
+ return;
+ }
+ minkc = kmin;
+ maxkc = kmax;
+}
+
+static int grab_key_code(dpy)
+ Display *dpy;
+{
+ set_kcs(dpy);
+ return minkc;
+}
+
+static int nongrab_key_code(dpy)
+ Display *dpy;
+{
+ set_kcs(dpy);
+ return (keycode == maxkc) ? minkc : maxkc;
+}
+
+#define ACTPOSX 3
+#define ACTPOSY 6
+/*
+ * Warp to the grab_window and press the keys in modifiers and then press
+ * the keycode in the 'keycode' arg.
+ * (This activates the previously set up grab if the arg variables
+ * have not been changed.)
+ */
+static void
+activate_press()
+{
+ XSetInputFocus(display, grab_window, RevertToPointerRoot, CurrentTime);
+ if (modifiers)
+ modpress(display, modifiers);
+ keypress(display, keycode);
+}
+
+/*
+ * As above, but release (all) keys.
+ */
+static void
+activate_release()
+{
+ XSetInputFocus(display, grab_window, RevertToPointerRoot, CurrentTime);
+ keyrel(display, keycode);
+ if (modifiers)
+ modrel(display, modifiers);
+}
+
+/*
+ * Returns True if the keyboard is grabbed. This is not a general purpose
+ * routine since it knows about the Grab Key args.
+ * When the keyboard is grabbed then keyboard events are not reported to
+ * non-grabbing clients. The grab client gets all keyboard events with
+ * event window depending on owner_events and clients event mask.
+ */
+static
+kgrabbed_check(client2)
+Display *client2;
+{
+XEvent ev;
+int saved_keyc = keycode;
+
+ XSelectInput(client2, grab_window, KeyPressMask|KeyReleaseMask);
+ /* Flush events for client2 */
+ XSync(client2, True);
+
+ /*
+ * Ensure another-key press release pair in grab_window.
+ */
+ keycode = nongrab_key_code(display);
+ activate_press();
+ activate_release();
+ keycode = saved_keyc;
+
+ XSync(client2, False);
+ if (getevent(client2, &ev)) {
+ /*
+ * An event was reported - keyboard isn't grabbed, do a sanity
+ * check on the type of event.
+ */
+ if (ev.type != KeyPress && ev.type != KeyRelease) {
+ delete("Unexpected event received in kgrabbed()");
+ delete(" event type %s", eventname(ev.type));
+ }
+ return(False);
+ } else {
+ return(True);
+ }
+}
+
+/*
+ * as for kgrabbed_check() but used where number of fd's consumed by
+ * multiple calls doesn't outweigh convenience of avoiding extra arg.
+ */
+static
+kgrabbed()
+{
+Display *client2;
+
+ client2 = opendisplay();
+ return kgrabbed_check(client2);
+}
+
+>>ASSERTION Good B 3
+When the specified key/modifier combination has been grabbed by this
+client, then a call to xname releases the grab.
+>>STRATEGY
+If extension available:
+ Setup up grab on specified key/modifier combination using XGrabKey.
+ Activate grab.
+ Check keyboard grabbed.
+ Deactivate grab.
+ Check keyboard not grabbed.
+ Call xname to release grab.
+ Attempt to reactivate Grab.
+ Check keyboard still not grabbed.
+ Release keys.
+else
+ Grab key.
+ Touch test.
+ Report untested.
+>>CODE
+
+ XGrabKey(display, keycode, modifiers, grab_window, False,
+ GrabModeAsync, GrabModeAsync);
+
+ if (noext(0)) {
+ XCALL;
+ report("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ activate_press();
+ if (!kgrabbed()) {
+ delete("Failed to activate grab on keycode %d.", keycode);
+ relalldev();
+ return;
+ } else
+ CHECK;
+
+ activate_release();
+ if (kgrabbed()) {
+ delete("Failed to deactivate grab on keycode %d.", keycode);
+ relalldev();
+ return;
+ } else
+ CHECK;
+
+ XCALL;
+
+ activate_press();
+ if (kgrabbed()) {
+ report("Failed to release initial grab on keycode %d.", keycode);
+ FAIL;
+ } else
+ CHECK;
+ relalldev();
+
+ CHECKPASS(4);
+
+>>ASSERTION Good B 3
+A
+.A modifiers
+argument of
+.S AnyModifier
+releases all grabs by this client for the specified key and all possible
+modifier combinations.
+>>STRATEGY
+If extensions are available:
+ Place passive grab with a bunch of modifier keys.
+ Activate grab.
+ Check keyboard grabbed.
+ Deactivate grab.
+ Check keyboard not grabbed.
+ Call xname with a modifiers of AnyModifier.
+ Attempt to reactivate Grab.
+ Check keyboard still not grabbed.
+ Release keys.
+
+ Place passive grab with just keycode (no modifiers).
+ Activate grab.
+ Check keyboard grabbed.
+ Deactivate grab.
+ Check keyboard not grabbed.
+ Call xname with a modifiers of AnyModifier.
+ Attempt to reactivate Grab.
+ Check keyboard still not grabbed.
+ Release keys.
+else
+ Report untested.
+>>CODE
+unsigned int mods;
+
+ if (noext(0)) {
+ return;
+ } else
+ CHECK;
+
+ modifiers = mods = wantmods(display, 4);
+
+ XGrabKey(display, keycode, mods, grab_window, False,
+ GrabModeAsync, GrabModeAsync);
+
+ activate_press();
+ if (!kgrabbed()) {
+ delete("Failed to activate grab on keycode %d.", keycode);
+ delete(" Modifiers used %s", keymaskname((unsigned long)mods));
+ relalldev();
+ return;
+ } else
+ CHECK;
+
+ activate_release();
+ if (kgrabbed()) {
+ delete("Failed to deactivate grab on keycode %d.", keycode);
+ delete(" Modifiers used %s", keymaskname((unsigned long)mods));
+ relalldev();
+ return;
+ } else
+ CHECK;
+
+ modifiers = AnyModifier;
+ XCALL;
+
+ modifiers = mods;
+ activate_press();
+ if (!kgrabbed())
+ CHECK;
+ else {
+ report("Grab not released for AnyModifier on keycode %d", keycode);
+ report(" Modifier keys used %s", keymaskname((unsigned long)mods));
+ FAIL;
+ }
+ relalldev();
+
+ if (kgrabbed()) { /* releasing keys may have done the job. */
+ delete("Could not release grab for second part of test");
+ return;
+ } else
+ CHECK;
+
+ XGrabKey(display, keycode, 0, grab_window, False,
+ GrabModeAsync, GrabModeAsync);
+
+ modifiers = 0;
+ activate_press();
+ if (!kgrabbed()) {
+ delete("Failed to activate grab on keycode %d.", keycode);
+ relalldev();
+ return;
+ } else
+ CHECK;
+
+ activate_release();
+ if (kgrabbed()) {
+ delete("Failed to deactivate grab on keycode %d.", keycode);
+ relalldev();
+ return;
+ } else
+ CHECK;
+
+ modifiers = AnyModifier;
+ XCALL;
+
+ modifiers = 0;
+ activate_press();
+ if (!kgrabbed())
+ CHECK;
+ else {
+ report("Grab with no modifier and keycode %d was not released.", keycode);
+ FAIL;
+ }
+
+ relalldev();
+
+ CHECKPASS(8);
+>>ASSERTION Good B 3
+A
+.A keycode
+argument of
+.S AnyKey
+releases all grabs by this client for the specified modifiers and all keys.
+>>STRATEGY
+If extensions are available:
+ Place passive grab with a bunch of modifier keys and given keycode.
+ Activate grab.
+ Check keyboard grabbed.
+ Deactivate grab.
+ Check keyboard not grabbed.
+ Call xname with a keycode of AnyKey.
+ Attempt to reactivate Grab.
+ Check keyboard still not grabbed.
+ Release keys.
+ Repeat for all keycodes in the range min_keycode to max_keycode
+ except for those in the modifier bunch.
+
+else
+ Report untested.
+>>CODE
+unsigned int mods;
+int i;
+int minkc, maxkc;
+Display *client2;
+int keycount = 0;
+
+ client2 = opendisplay();
+
+ XDisplayKeycodes(display, &minkc, &maxkc);
+
+ if (noext(0)) {
+ return;
+ } else
+ CHECK;
+
+ modifiers = mods = wantmods(display, 4);
+
+ for(keycount=0, i = minkc; i <= maxkc; i++) {
+ if (ismodkey(mods, i))
+ continue;
+ keycount++;
+ XGrabKey(display, i, mods, grab_window, False,
+ GrabModeAsync, GrabModeAsync);
+
+ keycode = i;
+ activate_press();
+ if (!kgrabbed_check(client2)) {
+ delete("Failed to activate grab on keycode %d.", keycode);
+ delete(" Modifiers used %s", keymaskname((unsigned long)mods));
+ relalldev();
+ return;
+ } else
+ CHECK;
+
+ activate_release();
+ if (kgrabbed_check(client2)) {
+ delete("Failed to deactivate grab on keycode %d.", keycode);
+ delete(" Modifiers used %s", keymaskname((unsigned long)mods));
+ relalldev();
+ return;
+ } else
+ CHECK;
+
+ keycode = AnyKey;
+ XCALL;
+
+ keycode = i;
+ activate_press();
+ if (!kgrabbed_check(client2))
+ CHECK;
+ else {
+ report("Grab not released for AnyKey on keycode %d", i);
+ report(" Modifier keys used %s", keymaskname((unsigned long)mods));
+ FAIL;
+ }
+ relalldev();
+
+ if (kgrabbed_check(client2)) { /* releasing keys may have done the job. */
+ delete("Could not release grab for second part of test");
+ return;
+ } else
+ CHECK;
+
+ relalldev();
+ }
+ trace("Tested on %d non-modifier keys, with %d modifiers - all from %d keys (%d to %d).",
+ keycount, bitcount((unsigned long)mods),
+ 1+maxkc-minkc, minkc, maxkc);
+
+ relalldev();
+
+ CHECKPASS(1+4*keycount);
+>>ASSERTION Good B 3
+A call to xname has no effect on an active grab.
+>>STRATEGY
+If extension available:
+ Set passive grab.
+ Activate it.
+ Check keyboard is grabbed.
+ Call xname to attempt to release grab.
+ Check keyboard still grabbed.
+ Release keys to release grab.
+ If still grabbed:
+ Delete with message.
+ else
+ Call xname to attempt to release grab.
+ Attempt to activate grab.
+ Check keyboard still not grabbed.
+ Release keys.
+else
+ Report untested.
+>>CODE
+
+ if (noext(0)) {
+ return;
+ } else
+ CHECK;
+ XGrabKey(display, keycode, modifiers, grab_window, False, GrabModeAsync, GrabModeAsync);
+
+ activate_press();
+
+ if (!kgrabbed()) {
+ delete("Failed to set initial grab.");
+ return;
+ } else
+ CHECK;
+
+ XCALL;
+
+ if (!kgrabbed()) {
+ report("Released active grab.");
+ FAIL;
+ } else
+ CHECK;
+
+ relalldev(); /* should release grab, allowing a final test */
+
+ if (kgrabbed()) {
+ delete("grab still active after key release.");
+ return;
+ } else
+ CHECK;
+
+ XCALL;
+
+ activate_press();
+ if (kgrabbed()) {
+ report("Couldn't release grab when inactive.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>>ASSERTION Bad A
+When the specified keycode is not in the range
+specified by min_keycode and max_keycode in the connection setup or
+.S AnyKey ,
+then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Get min and max keycodes.
+Attempt to grab key less than the minimum.
+Verify that a BadValue error occurs.
+If the maximum is less than 255
+ Attempt to grab key greater than the maximum
+ Verify a BadValue error occurs.
+>>CODE BadValue
+int minkc, maxkc;
+
+ XDisplayKeycodes(display, &minkc, &maxkc);
+
+ keycode = minkc - 1;
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+
+ if (maxkc < 255) {
+ keycode = maxkc + 1;
+
+ XCALL;
+
+ if (geterr() == BadValue)
+ CHECK;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+.ER BadValue modifiers mask ShiftMask LockMask ControlMask Mod1Mask Mod2Mask Mod3Mask Mod4Mask Mod5Mask AnyModifier
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH07/ungrbkybrd/ungrbkybrd.m b/xc/test/xsuite/xtest/tset/CH07/ungrbkybrd/ungrbkybrd.m
new file mode 100644
index 000000000..bcd624eaf
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/ungrbkybrd/ungrbkybrd.m
@@ -0,0 +1,250 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUngrabKeyboard CH07
+void
+
+Display *display = Dsp;
+Time time = CurrentTime;
+>>ASSERTION Good B 3
+When the client has actively grabbed the keyboard, then a call to xname
+releases the keyboard and any queued events.
+>>STRATEGY
+Create grab window.
+Grab and freeze keyboard.
+If no extensions:
+ Touch test xname.
+else
+ Press and release key.
+ Call xname.
+ Verify that events are released.
+ Create new window.
+ Verify that keyboard events can be received on it.
+>>CODE
+Window win;
+int key;
+int n;
+int first;
+XEvent ev;
+
+ win = defwin(display);
+ XSelectInput(display, win, KeyPressMask|KeyReleaseMask);
+
+ XGrabKeyboard(display, win, False, GrabModeAsync, GrabModeSync, time);
+
+ if (noext(0)) {
+ XCALL;
+ untested("There is no reliable test method, but a touch test was performed");
+ return;
+ } else
+ CHECK;
+
+ key = getkeycode(display);
+ (void) warppointer(display, win, 10, 10);
+ keypress(display, key);
+ keyrel(display, key);
+
+ if (XCheckMaskEvent(display, KeyPressMask|KeyReleaseMask, &ev)) {
+ report("Got events while keyboard was meant to be frozen");
+ FAIL;
+ } else
+ CHECK;
+
+ XCALL;
+
+ n = getevent(display, &ev);
+ if (n != 2) {
+ report("Expecting two events to be released after grab");
+ report(" got %d", n);
+ FAIL;
+ } else {
+ first = ev.type;
+ (void) getevent(display, &ev);
+
+ if (ev.type != KeyPress && first != KeyPress) {
+ report("Did not get KeyPress event after releasing grab");
+ FAIL;
+ } else
+ CHECK;
+ if (ev.type != KeyRelease && first != KeyRelease) {
+ report("Did not get KeyRelease event after releasing grab");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ win = defwin(display);
+ XSelectInput(display, win, KeyPressMask);
+ (void) warppointer(display, win, 5, 5);
+ keypress(display, key);
+ if (XCheckWindowEvent(display, win, KeyPressMask, &ev))
+ CHECK;
+ else {
+ report("Keyboard grab was not released");
+ FAIL;
+ }
+
+ CHECKPASS(5);
+
+ restoredevstate();
+
+>>ASSERTION Good A
+When the specified time is earlier than
+the last-keyboard-grab time or is later than the current X server time,
+then a call to xname does not release the keyboard and any queued events.
+>>STRATEGY
+Get current time.
+Grab keyboard and freeze pointer with this time.
+Call xname with earlier time.
+Verify that pointer is still frozen and therefore keyboard grab is not released.
+
+Get current time and add several seconds to get future time.
+Call xname with this time.
+Verify that pointer is still frozen and therefore keyboard grab is not released.
+>>EXTERN
+
+static Status
+ispfrozen()
+{
+Window win;
+XEvent ev;
+
+ win = defwin(display);
+ XSelectInput(display, win, PointerMotionMask);
+
+ (void) warppointer(display, win, 0, 0);
+ (void) warppointer(display, win, 1, 1);
+
+ if (XCheckWindowEvent(display, win, PointerMotionMask, &ev))
+ return(False);
+ else
+ return(True);
+}
+
+>>CODE
+Window win;
+
+ win = defwin(display);
+ time = gettime(display);
+
+ XGrabKeyboard(display, win, False, GrabModeSync, GrabModeSync, time);
+
+ time -= 1;
+ XCALL;
+
+ if (ispfrozen())
+ CHECK;
+ else {
+ report("Grab released for time earlier than last-keyboard-grab time");
+ FAIL;
+ }
+
+ time = gettime(display);
+ time += (config.speedfactor+1) * 1000000;
+
+ XCALL;
+
+ if (ispfrozen())
+ CHECK;
+ else {
+ report("Grab release for time later than current X server time");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+A call to xname generates
+.S FocusIn
+and
+.S FocusOut
+events as though the focus were to change from the grab window to the
+current focus window.
+>>STRATEGY
+Create grab window.
+Create a focus window and set focus to that window.
+Grab keyboard.
+Enable events on windows.
+Call xname to release keyboard.
+Verify that FocusIn and FocusOut events are received.
+>>CODE
+Window grabwin;
+Window win;
+Window ofocus;
+XEvent ev;
+XFocusInEvent figood;
+XFocusOutEvent fogood;
+int orevert;
+
+ /*
+ * Save current input focus to pose as little inconvenience as
+ * possible.
+ */
+ XGetInputFocus(display, &ofocus, &orevert);
+
+ grabwin = defwin(display);
+ win = defwin(display);
+ XSetInputFocus(display, win, RevertToNone, CurrentTime);
+ if (isdeleted()) {
+ report("Could not set up focus");
+ return;
+ }
+ XGrabKeyboard(display, grabwin, False, GrabModeSync, GrabModeSync, time);
+
+ XSelectInput(display, grabwin, FocusChangeMask);
+ XSelectInput(display, win, FocusChangeMask);
+
+ XCALL;
+
+ /*
+ * Set up the expected good events.
+ */
+ defsetevent(figood, display, FocusIn);
+ figood.window = win;
+ figood.mode = NotifyUngrab;
+ figood.detail = NotifyNonlinear;
+
+ defsetevent(fogood, display, FocusOut);
+ fogood.window = grabwin;
+ fogood.mode = NotifyUngrab;
+ fogood.detail = NotifyNonlinear;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusOut) {
+ report("Did not get expected FocusOut event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&fogood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ if (getevent(display, &ev) == 0 || ev.type != FocusIn) {
+ report("Did not get expected FocusIn event");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&figood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ /* Reset old focus */
+ XSetInputFocus(display, ofocus, orevert, CurrentTime);
+
+ CHECKPASS(4);
+
diff --git a/xc/test/xsuite/xtest/tset/CH07/ungrbpntr/ungrbpntr.m b/xc/test/xsuite/xtest/tset/CH07/ungrbpntr/ungrbpntr.m
new file mode 100644
index 000000000..b10001cb3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/ungrbpntr/ungrbpntr.m
@@ -0,0 +1,245 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUngrabPointer CH07
+void
+
+Display *display = Dsp;
+Time time = CurrentTime;
+>>ASSERTION Good A
+When
+the client has actively grabbed the pointer with
+a call to
+.F XGrabPointer ,
+.F XGrabButton
+or from a normal button press, then a call to xname
+releases the pointer and any queued events.
+>>STRATEGY
+Create a grab window.
+Grab pointer with pointer_mode GrabModeSync.
+Warp pointer within the grab window.
+Verify that no pointer events are received.
+Call xname to release pointer.
+Verify that pointer events are now received.
+>>CODE
+XEvent ev;
+Window win;
+unsigned int mask = PointerMotionMask;
+
+ win = defwin(display);
+ XSelectInput(display, win, PointerMotionMask);
+ (void) warppointer(display, win, 0, 0);
+
+ XGrabPointer(display, win, False, mask, GrabModeSync, GrabModeAsync,
+ None, None, CurrentTime);
+
+ (void) warppointer(display, win, 1, 1);
+ if (XCheckMaskEvent(display, (unsigned long)mask, &ev)) {
+ delete("Pointer event was received while frozen");
+ return;
+ } else
+ CHECK;
+
+ XCALL;
+
+ if (XCheckMaskEvent(display, (unsigned long)mask, &ev) && ev.type == MotionNotify)
+ CHECK;
+ else {
+ report("Pointer event was not saved while pointer was frozen");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When the specified
+time is earlier than the last-pointer-grab time or is later than the
+current X server time, then a call to xname
+does not release the pointer grab.
+>>STRATEGY
+Create client2.
+Create window 'win'.
+Enable events for client2 on win.
+Create window for use as the grab window.
+Grab pointer with a given time.
+Call xname with earlier time.
+Warp pointer within win.
+Verify that no event is received for client2.
+
+Get current server time.
+Call xname with a later time than the current server time.
+Warp pointer within win.
+Verify that no event is received for client2.
+>>CODE
+Window win;
+Window grabwin;
+Display *client2;
+XEvent ev;
+unsigned int mask;
+
+ mask = PointerMotionMask;
+
+ client2 = opendisplay();
+
+ win = defwin(display);
+ (void) warppointer(display, win, 0, 0);
+ XSelectInput(client2, win, (unsigned long)mask);
+
+ grabwin = defwin(display);
+
+ time = gettime(display);
+ XGrabPointer(display, grabwin, False, mask, GrabModeSync, GrabModeAsync,
+ None, None, time);
+
+ XSync(client2, True);
+ if (isdeleted())
+ return;
+
+ time -= 100;
+ XCALL;
+
+ (void) warppointer(display, win, 8, 8);
+ if (XCheckMaskEvent(client2, (unsigned long)mask, &ev)) {
+ report("Grab was released when time was earlier than last-pointer-grab time");
+ FAIL;
+ } else
+ CHECK;
+
+ XSync(client2, True); /* Flush any remaining events */
+
+ /*
+ * Get current time again and add several minutes to get a time in the
+ * future.
+ */
+ time = gettime(display);
+ time += ((config.speedfactor+1) * 1000000);
+
+ XCALL;
+
+ (void) warppointer(display, win, 12, 1);
+ if (XCheckMaskEvent(client2, (unsigned long)mask, &ev)) {
+ report("Grab was released when time was earlier than last-pointer-grab time");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+A call to xname generates
+.S EnterNotify
+and
+.S LeaveNotify
+events.
+>>STRATEGY
+Create the grab window.
+Create spare window 'win'.
+Warp pointer to win.
+Grab pointer with XGrabPointer.
+Enable events on win and grab windows.
+Call xname to release grab.
+Verify that a leave event is generated on the grab window.
+Verify that an enter event is generated on win.
+>>CODE
+Window grabwin;
+Window win;
+XEvent ev;
+XCrossingEvent *cp;
+XEnterWindowEvent entergood;
+XLeaveWindowEvent leavegood;
+
+ grabwin = defwin(display);
+ win = defwin(display);
+
+ (void) warppointer(display, win, 0, 0);
+
+ XGrabPointer(display, grabwin, False, (unsigned int)PointerMotionMask,
+ GrabModeSync, GrabModeAsync, None, None, CurrentTime);
+
+ XSelectInput(display, win, EnterWindowMask|LeaveWindowMask);
+ XSelectInput(display, grabwin, EnterWindowMask|LeaveWindowMask);
+
+ XCALL;
+
+ defsetevent(entergood, display, EnterNotify);
+ entergood.root = DRW(display);
+ entergood.subwindow = None;
+ entergood.time = 0;
+ entergood.mode = NotifyNormal;
+ entergood.detail = NotifyNonlinear;
+ entergood.same_screen = True;
+ entergood.focus = False;
+ entergood.state = 0;
+
+ defsetevent(leavegood, display, LeaveNotify);
+ leavegood.root = DRW(display);
+ leavegood.subwindow = None;
+ leavegood.time = 0;
+ leavegood.mode = NotifyNormal;
+ leavegood.detail = NotifyNonlinear;
+ leavegood.same_screen = True;
+ leavegood.focus = False;
+ leavegood.state = 0;
+
+ /*
+ * There is an Ungrab mode leave from the grab window followed by
+ * an enter to the original window.
+ */
+ leavegood.window = grabwin;
+ leavegood.mode = NotifyUngrab;
+ entergood.window = win;
+ entergood.mode = NotifyUngrab;
+
+ if (getevent(display, &ev) == 0 || ev.type != LeaveNotify) {
+ report("No ungrab-mode leave event from the grab window");
+ FAIL;
+ } else
+ CHECK;
+
+ cp = (XCrossingEvent*)&ev;
+ /* Set the fields that we can't conveniently check */
+ leavegood.time = cp->time;
+ leavegood.x = cp->x;
+ leavegood.y = cp->y;
+ leavegood.x_root = cp->x_root;
+ leavegood.y_root = cp->y_root;
+ leavegood.focus = cp->focus;
+ if (checkevent((XEvent*)&leavegood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ if (getevent(display, &ev) == 0 || ev.type != EnterNotify) {
+ report("No ungrab-mode enter notify event to window pointer is in");
+ FAIL;
+ } else
+ CHECK;
+
+ /* The cursor was at 0,0 */
+ entergood.x = 0;
+ entergood.y = 0;
+
+ cp = (XCrossingEvent*)&ev;
+ /* Set the fields that we can't conveniently check */
+ entergood.time = cp->time;
+ entergood.x_root = cp->x_root;
+ entergood.y_root = cp->y_root;
+ entergood.focus = cp->focus;
+ if (checkevent((XEvent*)&entergood, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(4);
+>># Things about the grab being released --> grab{button,pointer}
diff --git a/xc/test/xsuite/xtest/tset/CH07/ungrbsrvr/ungrbsrvr.m b/xc/test/xsuite/xtest/tset/CH07/ungrbsrvr/ungrbsrvr.m
new file mode 100644
index 000000000..0d2ea589a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/ungrbsrvr/ungrbsrvr.m
@@ -0,0 +1,125 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUngrabServer CH07
+void
+
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname
+resumes processing of requests and close downs on other connections.
+>>EXTERN
+
+#include "Xatom.h"
+
+>>STRATEGY
+Create second connection client2.
+Call XGrabServer on default display.
+Create another process.
+ In created process:
+ Perform a XChangeProperty request for client2.
+Wait sufficient time to allow client2 request to be processed.
+Check that no PropertyChange event has been produced.
+Call xname to Ungrab server.
+Wait sufficient time to allow client2 request to be processed.
+Verify that event has now been received.
+>>EXTERN
+
+static Display *client2;
+
+static Window win;
+
+static int waittime;
+
+>>CODE
+int ret;
+
+ client2 = opendisplay();
+
+ win = defwin(Dsp);
+ XSelectInput(display, win, PropertyChangeMask);
+ XSelectInput(client2, win, PropertyChangeMask);
+
+ waittime = 2*config.speedfactor + 5;
+
+ if (isdeleted())
+ return;
+
+ XGrabServer(display);
+ XSync(display, False);
+
+ ret = tet_fork(cproc, pproc, waittime, 1);
+ /* Test now continues in pproc */
+
+ if (ret == TIMEOUT_EXIT) {
+ delete("Child process timed out");
+ }
+>>EXTERN
+static void
+pproc()
+{
+XEvent ev;
+int pass = 0, fail = 0;
+
+ /* Allow time for change prop to occur */
+ sleep(waittime);
+
+ if (XCheckWindowEvent(display, win, PropertyChangeMask, &ev)) {
+ delete("A request was processed for other than the grabbing client");
+ FAIL;
+ } else
+ CHECK;
+
+ /*
+ * Release the grab and wait a bit to allow the requests on the other
+ * connection to go ahead.
+ */
+ XCALL;
+
+ /* Allow time for change prop to occur */
+ sleep(waittime);
+ if (XCheckWindowEvent(display, win, PropertyChangeMask, &ev))
+ CHECK;
+ else {
+ report("Requests were not processed after server grab was released.");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+}
+>>EXTERN
+/*
+ * Perform operation on client2 while display has the server grabbed.
+ */
+static void
+cproc()
+{
+long val;
+Atom name;
+
+ val = 5;
+
+ settimeout(waittime*3);
+
+ name = XInternAtom(client2, "name", False);
+ XChangeProperty(client2, win, name, XA_INTEGER, 32, PropModeReplace,
+ (unsigned char *)&val, 1);
+ XFlush(client2);
+
+ cleartimeout();
+
+ exit(0);
+}
diff --git a/xc/test/xsuite/xtest/tset/CH07/unnstllclr/unnstllclr.m b/xc/test/xsuite/xtest/tset/CH07/unnstllclr/unnstllclr.m
new file mode 100644
index 000000000..1c85be5b8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/unnstllclr/unnstllclr.m
@@ -0,0 +1,89 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUninstallColormap CH07
+void
+
+Display *display = Dsp;
+Colormap colormap;
+>>ASSERTION Good B 3
+A call to xname removes the specified colourmap from the required
+list for its associated screen.
+>>ASSERTION Good B 1
+When the specified colourmap is uninstalled by a call to xname, then a
+.S ColormapNotify
+event is generated on each window that has that colourmap.
+>>STRATEGY
+Create colour map.
+Install colour map.
+Create window with the colour map.
+Call xname to uninstall the colourmap.
+If there is a ColormapNotify event
+ Verify that the fields are correct.
+else
+ UNTESTED.
+>>CODE
+XVisualInfo *vp;
+Window win;
+XEvent ev;
+XColormapEvent good;
+XColormapEvent *cmp;
+
+ defsetevent(good, display, ColormapNotify);
+ good.new = False;
+ good.state = ColormapUninstalled;
+
+ for (resetvinf(VI_WIN); nextvinf(&vp); ) {
+
+ win = makewin(display, vp);
+ colormap = makecolmap(display, vp->visual, AllocNone);
+ XSetWindowColormap(display, win, colormap);
+ XSelectInput(display, win, ColormapChangeMask);
+ XInstallColormap(display, colormap);
+
+ XCALL;
+
+ while (XCheckWindowEvent(display, win, ColormapChangeMask, &ev)) {
+ cmp = (XColormapEvent*)&ev;
+ if (cmp->colormap != colormap)
+ continue;
+
+ good.window = win;
+ good.colormap = colormap;
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ }
+ }
+
+ if (fail == 0 && pass == nvinf())
+ PASS;
+ else if (fail == 0 && pass == 0)
+ untested("The assertion could not be tested since no event was sent");
+ else if (fail == 0)
+ untested("The assertion could only be tested for some visual types");
+
+>>ASSERTION Good B 1
+When another colourmap is installed or uninstalled as a
+side effect of a call to xname, then a
+.S ColormapNotify
+event is generated on each window that has that colourmap.
+>>ASSERTION Good B 3
+No other colourmaps are removed from the required list by a call to xname.
+>>ASSERTION Bad A
+.ER BadColor
diff --git a/xc/test/xsuite/xtest/tset/CH07/wrppntr/wrppntr.m b/xc/test/xsuite/xtest/tset/CH07/wrppntr/wrppntr.m
new file mode 100644
index 000000000..8ec35d67e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH07/wrppntr/wrppntr.m
@@ -0,0 +1,434 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XWarpPointer CH07
+void
+
+Display *display = Dsp;
+Window src_w;
+Window dest_w;
+int src_x = SRC_X;
+int src_y = SRC_Y;
+unsigned int src_width = SRC_WIDTH;
+unsigned int src_height = SRC_HEIGHT;
+int dest_x = DEST_X;
+int dest_y = DEST_Y;
+>>EXTERN
+
+#define SRC_X 7
+#define SRC_Y 10
+#define SRC_WIDTH 20
+#define SRC_HEIGHT 31
+#define DEST_X 11
+#define DEST_Y 13
+
+#define POS_ABS 1
+#define POS_REL 2
+
+struct coord {
+ int x;
+ int y;
+};
+
+/*
+ * Get the current position of the pointer. If type is POS_REL this
+ * is relative to the given window. For a type POS_ABS the coordinates
+ * are absolute.
+ */
+static void
+getpos(w, co, type)
+Window w;
+struct coord *co;
+int type;
+{
+Window root, child;
+unsigned int mask;
+int xroot, yroot;
+int status;
+
+ if (w == None)
+ w = DRW(Dsp);
+
+ status = XQueryPointer(Dsp, w, &root, &child, &xroot, &yroot, &co->x, &co->y, &mask);
+ if (status == False) {
+ delete("Could not get pointer position");
+ return;
+ }
+
+ if (type == POS_ABS) {
+ co->x = xroot;
+ co->y = yroot;
+ }
+}
+
+>>ASSERTION Good A
+When
+.A dest_w
+is
+.S None ,
+then a call to xname
+moves the pointer by the offsets
+.A dest_x ,
+.A dest_y
+relative to the current position of the pointer.
+>>STRATEGY
+Get current position of pointer.
+Set dest_w to None.
+Call xname.
+Verify that new position is offset from old by dest_x, dest_y.
+>>CODE
+struct coord old;
+struct coord new;
+
+ (void) warppointer(display, DRW(display), 100, 100);
+
+ dest_w = None;
+ src_w = None;
+
+ getpos(None, &old, POS_ABS);
+
+ XCALL;
+
+ getpos(None, &new, POS_ABS);
+
+ if (dest_x == 0 || dest_y == 0)
+ delete("Setup error of destination coordinates");
+
+ if (new.x == old.x + dest_x)
+ CHECK;
+ else {
+ report("X position of pointer incorrect - was %d, expecting %d",
+ new.x, old.x + dest_x);
+ FAIL;
+ }
+
+ if (new.y == old.y + dest_y)
+ CHECK;
+ else {
+ report("Y position of pointer incorrect - was %d, expecting %d",
+ new.y, old.y + dest_y);
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When
+.A dest_w
+is a window
+and
+.A src_w
+is
+.S None ,
+then a call to xname
+moves the pointer to the offsets
+.A dest_x ,
+.A dest_y
+relative to the origin of
+.A dest_w .
+>>STRATEGY
+Create window for dest_w.
+Set src_w to None.
+Call xname.
+Verify that pointer is at (dest_x,dest_y) from origin of dest_w.
+>>CODE
+struct coord pos;
+
+ (void) warppointer(display, DRW(display), 0, 0);
+
+ dest_w = defwin(display);
+ src_w = None;
+
+ XCALL;
+
+ getpos(dest_w, &pos, POS_REL);
+
+ if (dest_x == pos.x && dest_y == pos.y)
+ CHECK;
+ else {
+ report("Position relative to destination window was incorrect");
+ report(" position was (%d, %d), expecting (%d, %d)",
+ pos.x, pos.y, dest_x, dest_y);
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When
+.A dest_w
+and
+.A src_w
+are windows
+and the pointer is within the specified rectangle of
+.A src_w ,
+then a call to xname
+moves the pointer to the offsets
+.A dest_x ,
+.A dest_y
+relative to the origin of
+.A dest_w .
+>>STRATEGY
+Create window dest_w.
+Create window src_w.
+Move pointer to within the specified rectange of src_w.
+Call xname.
+Verify that pointer moves to offset (dest_x, dest_y) from origin of dest_w.
+>>CODE
+struct coord pos;
+
+ dest_w = defwin(display);
+ src_w = defwin(display);
+
+ (void) warppointer(display, src_w, src_x, src_y);
+
+ XCALL;
+
+ getpos(dest_w, &pos, POS_REL);
+
+ if (pos.x == dest_x && pos.y == dest_y)
+ CHECK;
+ else {
+ report("Pointer not positioned correctly when pointer in source rectangle");
+ report(" position was (%d, %d), expecting (%d, %d)",
+ pos.x, pos.y, dest_x, dest_y);
+ FAIL;
+ }
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When
+.A dest_w
+and
+.A src_w
+are windows
+and the pointer is not within the specified rectangle of
+.A src_w ,
+then a call to xname does not move the pointer.
+>>STRATEGY
+Create window dest_w.
+Create window src_w.
+Move pointer outside the specified rectange of src_w.
+Call xname.
+Verify that the pointer is not moved.
+>>CODE
+PointerPlace *pplace;
+
+ dest_w = defwin(display);
+ src_w = defwin(display);
+
+ pplace = warppointer(display, src_w, (int)(src_x+src_width+2), src_y);
+
+ XCALL;
+
+ if (pointermoved(display, pplace)) {
+ report("Pointer was moved when outside the source rectangle");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When
+.A src_height
+is zero,
+then it is replaced with the current height of
+.A src_w
+minus
+.A src_y .
+>>STRATEGY
+Create window src_w.
+Create window dest_w.
+Set src_height to 0.
+Position pointer in src_w such that it is inside source rectangle.
+Call xname.
+Verify that pointer is moved.
+>>CODE
+unsigned int width, height;
+struct coord pos;
+
+ src_w = defwin(display);
+ dest_w = defwin(display);
+ src_height = 0;
+
+ getsize(display, src_w, &width, &height);
+
+ (void) warppointer(display, src_w, src_x+3, (int)height-3);
+
+ XCALL;
+
+ getpos(dest_w, &pos, POS_REL);
+ if (pos.x == dest_x && pos.y == dest_y)
+ CHECK;
+ else {
+ report("Pointer not moved correctly when pointer in source rectangle");
+ report(" and src_height 0 - position was (%d, %d), expecting (%d, %d)",
+ pos.x, pos.y, dest_x, dest_y);
+ FAIL;
+ }
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When
+.A src_width
+is zero,
+then it is replaced with the current width of
+.A src_w
+minus
+.A src_x .
+>>STRATEGY
+Create window src_w.
+Create window dest_w.
+Set src_width to 0.
+Position pointer in src_w such that it is inside source rectangle.
+Call xname.
+Verify that pointer is moved.
+>>CODE
+unsigned int width, height;
+struct coord pos;
+
+ src_w = defwin(display);
+ dest_w = defwin(display);
+ src_width = 0;
+
+ getsize(display, src_w, &width, &height);
+
+ (void) warppointer(display, src_w, (int)width-3, src_y+3);
+
+ XCALL;
+
+ getpos(dest_w, &pos, POS_REL);
+ if (pos.x == dest_x && pos.y == dest_y)
+ CHECK;
+ else {
+ report("Pointer not moved correctly when pointer in source rectangle");
+ report(" and src_width 0 - position was (%d, %d), expecting (%d, %d)",
+ pos.x, pos.y, dest_x, dest_y);
+ FAIL;
+ }
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+A call to xname generates events as though
+the pointer position had been instantaneously moved by the user.
+>>STRATEGY
+Create dest_w.
+Position pointer at 0,0 in dest_w.
+Enable events.
+Call xname to move pointer within window.
+Verify that only one motion event is generated.
+>>CODE
+XEvent ev;
+XMotionEvent good;
+struct coord pos;
+int n;
+
+ dest_w = defwin(display);
+ src_w = None;
+
+ (void) warppointer(display, dest_w, 0, 0);
+
+ XSelectInput(display, dest_w, PointerMotionMask);
+
+ XCALL;
+
+ defsetevent(good, display, MotionNotify);
+ good.window = dest_w;
+ good.root = DRW(display);
+ good.subwindow = None;
+ good.time = 0;
+ good.x = dest_x;
+ good.y = dest_y;
+ good.state = 0;
+ good.is_hint = False;
+ good.same_screen = True;
+
+ getpos(None, &pos, POS_ABS);
+ good.x_root = pos.x;
+ good.y_root = pos.y;
+
+ n = getevent(display, &ev);
+ if (n > 1) {
+ report("More than one event generated");
+ FAIL;
+ } else
+ CHECK;
+
+ if (checkevent((XEvent*)&good, &ev))
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When an active pointer grab is in progress and the pointer is within
+the confine_to window, then a call to xname will only move the pointer
+as far as the closest edge of the confine_to window.
+>>STRATEGY
+Create confine_to window.
+Create dest_w window.
+Call XGrabPointer to actively grab the pointer with confine_to set.
+Attempt to move pointer into dest_w window with xname.
+Verify that pointer is still within the confine_to window.
+>>CODE
+Window confine;
+Window grabwin;
+struct coord pos;
+unsigned int width, height;
+
+ confine = defwin(display);
+ dest_w = defwin(display);
+ grabwin = defwin(display);
+ src_w = None;
+
+ /* Set border to zero so that containment size is just width and height */
+ XSetWindowBorderWidth(display, confine, 0);
+ getsize(display, confine, &width, &height);
+
+ /* May as well put the pointer there to begin with */
+ (void) warppointer(display, confine, 1, 1);
+
+ XGrabPointer(display, grabwin, False, 0, GrabModeAsync, GrabModeAsync,
+ confine, None, CurrentTime);
+
+ if (isdeleted())
+ return;
+
+ XCALL;
+
+ XUngrabPointer(display, CurrentTime);
+ getpos(confine, &pos, POS_REL);
+ if (pos.x > 0 && pos.x < width && pos.y > 0 && pos.y < height)
+ CHECK;
+ else {
+ report("Pointer did not remain within the confine_to window");
+ FAIL;
+ }
+
+ /*
+ * We can also check that the pointer is on a edge. (The windows
+ * do not overlap).
+ */
+ if (pos.x == 0 || pos.y == 0 || pos.x == width-1 || pos.y == height-1)
+ CHECK;
+ else {
+ report("Pointer was not on edge of confine_to window");
+ FAIL;
+ }
+
+ CHECKPASS(2);
+>>ASSERTION Bad A
+.ER BadWindow None
diff --git a/xc/test/xsuite/xtest/tset/CH08/Makefile b/xc/test/xsuite/xtest/tset/CH08/Makefile
new file mode 100644
index 000000000..b904700ee
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/Makefile
@@ -0,0 +1,204 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+#
+# This Makefile can be used to compile all the tests in this
+# section of the X test suite in such a way that they are all links to
+# a single executable file. This normally allows a considerable
+# reduction in the disc space requirements for the X test suite
+# when fully built.
+#
+# There are two ways this can be done:
+# 1) Using the TET. Execute the command:
+# tcc -b -s link_exec xtest linkbuild
+# in the directory $TET_ROOT/xtest.
+# This will execute the TET build tool (which is normally pmake)
+# in the top level directory of each section of the test suite
+# (including this directory).
+#
+# 2) Directly without using the TET. Execute the command:
+# pmake
+# in this directory.
+#
+# For more details, refer to the User Guide
+#
+
+CAT=cat
+
+ALLTESTS=Tests
+
+TESTOFILES=\
+bttnprss.o \
+bttnrls.o \
+chckifevnt.o \
+chckmskevn.o \
+chcktypdev.o \
+chcktypdwd.o \
+chckwdwevn.o \
+clntmssg.o \
+clrmpntfy.o \
+cnfgrntfy.o \
+cnfgrrqst.o \
+crcltntfy.o \
+crcltrqst.o \
+crtntfy.o \
+dsplymtnbf.o \
+dsplynm.o \
+dstryntfy.o \
+entrntfy.o \
+evntsqd.o \
+exps.o \
+fcsin.o \
+fcsot.o \
+flsh.o \
+grphcsexps.o \
+grvtyntfy.o \
+gterrrdtbs.o \
+gterrrtxt.o \
+gtmtnevnts.o \
+ifevnt.o \
+kympntfy.o \
+kyprss.o \
+kyrls.o \
+lvntfy.o \
+mpntfy.o \
+mppngntfy.o \
+mprqst.o \
+mskevnt.o \
+mtnntfy.o \
+nexps.o \
+nxtevnt.o \
+pkevnt.o \
+pkifevnt.o \
+pndng.o \
+prprtyntfy.o \
+ptbckevnt.o \
+rprntntfy.o \
+rszrqst.o \
+slctinpt.o \
+slctnclr.o \
+slctnntfy.o \
+slctnrqst.o \
+sndevnt.o \
+staftrfnct.o \
+sterrrhndl.o \
+stioerrrhn.o \
+sync.o \
+synchrnz.o \
+unmpntfy.o \
+vsbltyntfy.o \
+wdwevnt.o
+
+LINKOFILE=linktbl.o
+OFILES = $(TESTOFILES) $(LINKOFILE)
+
+DIRLIST=\
+bttnprss \
+bttnrls \
+chckifevnt \
+chckmskevn \
+chcktypdev \
+chcktypdwd \
+chckwdwevn \
+clntmssg \
+clrmpntfy \
+cnfgrntfy \
+cnfgrrqst \
+crcltntfy \
+crcltrqst \
+crtntfy \
+dsplymtnbf \
+dsplynm \
+dstryntfy \
+entrntfy \
+evntsqd \
+exps \
+fcsin \
+fcsot \
+flsh \
+grphcsexps \
+grvtyntfy \
+gterrrdtbs \
+gterrrtxt \
+gtmtnevnts \
+ifevnt \
+kympntfy \
+kyprss \
+kyrls \
+lvntfy \
+mpntfy \
+mppngntfy \
+mprqst \
+mskevnt \
+mtnntfy \
+nexps \
+nxtevnt \
+pkevnt \
+pkifevnt \
+pndng \
+prprtyntfy \
+ptbckevnt \
+rprntntfy \
+rszrqst \
+slctinpt \
+slctnclr \
+slctnntfy \
+slctnrqst \
+sndevnt \
+staftrfnct \
+sterrrhndl \
+stioerrrhn \
+sync \
+synchrnz \
+unmpntfy \
+vsbltyntfy \
+wdwevnt
+
+all: subdirs test
+
+test:$P $(OFILES) $(LIBS) $(TCM)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(TCM) $(LIBS) $(SYSLIBS)
+ $(CAT) test > $(ALLTESTS)
+ $(RM) test
+
+subdirs:
+ if [ ! -f $(ALLTESTS) ]; then $(CAT) /dev/null > $(ALLTESTS); \
+ chmod a+x $(ALLTESTS); else : ; fi
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then \
+ (cd $$i; echo Compiling in $$i; $(TET_BUILD_TOOL) linkexec); \
+ fi; \
+ done
+
+# The xtestlib is made if it doesn't exist
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
+clean: cletests clesubdirs
+
+cletests:
+ $(RM) test $(OFILES) $(ALLTESTS) core
+
+clesubdirs:
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then (cd $$i; $(TET_CLEAN_TOOL) ); fi; done
+
+clobber: clean
diff --git a/xc/test/xsuite/xtest/tset/CH08/bttnprss/bttnprss.m b/xc/test/xsuite/xtest/tset/CH08/bttnprss/bttnprss.m
new file mode 100644
index 000000000..22dfb2b87
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/bttnprss/bttnprss.m
@@ -0,0 +1,921 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ButtonPress CH08
+>>EXTERN
+#define EVENT ButtonPress
+#define EVENTMASK ButtonPressMask
+#define PTRX 4
+#define PTRY 3
+>>SET end-function restoredevstate
+>>ASSERTION Good B 1
+When any pointer button is pressed,
+then a xname event is generated.
+>>STRATEGY
+If extended testing is enabled:
+ Create window.
+ Select for xname events.
+ Generate xname event.
+ Verify that a xname event was delivered.
+ Verify that event member fields are correctly set.
+>>CODE
+Display *display = Dsp;
+Window w;
+XEvent event_return;
+XButtonPressedEvent good;
+PointerPlace *ptr;
+
+ if(noext(1))
+ return;
+
+/* Create window. */
+ w = defwin(display);
+
+/* Select for events. */
+ XSelectInput(display, w, EVENTMASK);
+ XSync(display, True);
+
+/* Generate xname event. */
+ XSync(display, True);
+ ptr = warppointer(display, w, PTRX, PTRY);
+ buttonpress(display, Button1);
+
+/* Verify that event was delivered. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+
+ good = event_return.xbutton;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.root = DRW(display);
+ good.subwindow = None;
+ good.x = PTRX;
+ good.y = PTRY;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = 0L;
+ good.button = Button1;
+ good.same_screen = True;
+
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+
+
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+When a xname event is generated
+and no active pointer grab is in progress
+and at least one ancestor of the source window has a matching passive grab
+on the pressed pointer button,
+then the X server activates a passive grab for
+the first ancestor of the source window,
+searching from the root window down.
+>>STRATEGY
+If extended testing is enabled :
+ Create a window.
+ Create a child window.
+ Create a child of the child.
+ Select input on EnterNotify events for all of the windows.
+ Select passive grabs for all the windows on Button1.
+ Simulate a ButtonPress event.
+ Verify that the child windows did not receive EnterNotify events.
+ Verify that the oldest ancestor window received an EnterNotify with mode NotifyGrab.
+ Simulate a ButtonRelease event.
+ Release the passive grabs.
+>>CODE
+Window w;
+Window w1;
+Window w2;
+XEvent ev;
+struct area area;
+char *unexpstr = "Unexpected event on a child window.";
+
+ if (noext(1))
+ return;
+
+ w = defwin(Dsp);
+ setarea(&area, 10, 10, 30, 30);
+ w1 = crechild(Dsp, w, &area);
+ w2 = crechild(Dsp, w1, &area);
+ (void) warppointer(Dsp, w2, 1,1);
+
+ XSelectInput(Dsp, w, EnterWindowMask);
+ XSelectInput(Dsp, w1, EnterWindowMask);
+ XSelectInput(Dsp, w2, EnterWindowMask);
+
+ XGrabButton(Dsp, Button1, AnyModifier, w, False, 0L, GrabModeAsync, GrabModeAsync, None, None);
+ XGrabButton(Dsp, Button1, AnyModifier, w1, False, 0L, GrabModeAsync, GrabModeAsync, None, None);
+ XGrabButton(Dsp, Button1, AnyModifier, w2, False, 0L, GrabModeAsync, GrabModeAsync, None, None);
+
+ XSync(Dsp, True);
+ buttonpress(Dsp, Button1);
+
+ if(XCheckWindowEvent(Dsp, w1, EnterWindowMask, &ev) != False) {
+ report(unexpstr);
+ FAIL;
+ } else
+ CHECK;
+
+ if(XCheckWindowEvent(Dsp, w2, EnterWindowMask, &ev) != False) {
+ report(unexpstr);
+ FAIL;
+ } else
+ CHECK;
+
+ if(XCheckWindowEvent(Dsp, w, EnterWindowMask, &ev) == False) {
+ report("No event was activated on the oldest ancestor window.");
+ FAIL;
+ } else {
+
+ CHECK;
+ if(ev.xcrossing.mode != NotifyGrab) {
+ report("Passive grab was not activated on oldest ancestor window.");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ buttonrel(Dsp, Button1);
+ XUngrabButton(Dsp, Button1, AnyModifier, w);
+ XUngrabButton(Dsp, Button1, AnyModifier, w1);
+ XUngrabButton(Dsp, Button1, AnyModifier, w2);
+
+ CHECKPASS(4);
+
+>>ASSERTION Good B 1
+When a xname event is generated
+and no active pointer grab is in progress
+and no ancestor of the source window has a matching passive grab
+on the pressed pointer button,
+then the X server automatically starts an active grab
+for the client receiving the event and
+sets the last-pointer-grab time to the current server time.
+>>ASSERTION Good B 1
+When a xname event is generated
+and no active pointer grab is in progress
+and no ancestor of the source window has a matching passive grab
+on the pressed pointer button and
+no client has selected for button presses on the event window,
+then the event is discarded.
+>>STRATEGY
+If extended testing is enabled:
+ Create window.
+ Select for all events except ButtonPress.
+ Generate xname event.
+ Verify that no event was delivered.
+>>CODE
+Display *display = Dsp;
+Window w;
+int count;
+
+ if(noext(1))
+ return;
+
+/* Create window. */
+ w = defwin(display);
+
+ (void) warppointer(display, w, PTRX, PTRY);
+ XSelectInput(display, w, ALLEVENTS & ~ButtonPressMask);
+ XSync(display, True);
+/* Generate xname event. */
+ XSync(display, True);
+ buttonpress(display, Button1);
+
+/* Verify no events were delivered. */
+
+ count = XPending(display);
+ if (count != 0) {
+ report("Got %d unexpected events.", count);
+ FAIL;
+ }
+ else
+ PASS;
+
+>>ASSERTION Good B 1
+When a xname event is generated,
+then
+all clients having set
+.S ButtonPressMask
+event mask bits on the event window are delivered
+a xname event.
+>>#COMMENT
+>># This assertion is misleading, there can only ever be one client
+>># selecting ButtonPress events on any particular window.
+>># For the time-being this test is a copy of the single client test.
+>># Cal 12/2/92.
+>>#
+>>STRATEGY
+If extended testing is enabled:
+ Create window.
+ Select for xname events.
+ Generate xname event.
+ Verify that a xname event was delivered.
+ Verify that event member fields are correctly set.
+Otherwise:
+ Create window.
+ Set ButtonPressMask event mask bits on window.
+ Verify that no error occurred.
+>>CODE
+Display *display = Dsp;
+Window w;
+XEvent event_return;
+XButtonPressedEvent good;
+PointerPlace *ptr;
+
+
+ if(config.extensions) {
+
+ if(noext(1))
+ return;
+ /* Create window. */
+ w = defwin(display);
+
+ /* Select for events. */
+ XSelectInput(display, w, EVENTMASK);
+ XSync(display, True);
+
+ /* Generate xname event. */
+ XSync(display, True);
+ ptr = warppointer(display, w, PTRX, PTRY);
+ buttonpress(display, Button1);
+
+ /* Verify that event was delivered. */
+ /* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ good = event_return.xbutton;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.root = DRW(display);
+ good.subwindow = None;
+ good.x = PTRX;
+ good.y = PTRY;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = 0L;
+ good.button = Button1;
+ good.same_screen = True;
+
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(2);
+
+ } else {
+
+ /* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ /* Set ButtonPressMask event mask bits on window. */
+ XSelectInput(display, w, ButtonPressMask);
+ XSync(display, True);
+ /* Verify that no error occurred. */
+ if (geterr() != Success) {
+ delete("Error setting up for test.");
+ return;
+ }
+ else
+ CHECK;
+ CHECKUNTESTED(1);
+ }
+
+>>ASSERTION Good B 1
+>>#NOTE True for most events (except MappingNotify and selection stuff).
+When a xname event is generated,
+then
+clients not having set
+.S ButtonPressMask
+event mask bits on the event window are not delivered
+a xname event.
+>>STRATEGY
+If extended testing is enabled:
+ Create window.
+ Select for all events except ButtonPress.
+ Create a second client.
+ Select for ButtonPress events on the window
+ Generate xname event.
+ Verify that a xname event was delivered.
+ Verify that no event was delivered to the other client.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+XEvent ev;
+Window w;
+int count;
+
+ if(noext(1))
+ return;
+
+ client2 = opendisplay();
+
+/* Create window. */
+ w = defwin(display);
+
+ (void) warppointer(display, w, PTRX, PTRY);
+ XSelectInput(display, w, ALLEVENTS & ~ButtonPressMask);
+ XSelectInput(client2, w, ButtonPressMask);
+ XSync(display, True);
+ XSync(client2, True);
+/* Generate xname event. */
+ buttonpress(display, Button1);
+
+ XSync(client2, False);
+
+
+/* Verify a ButtonPress was generated. */
+ if(XCheckWindowEvent(client2, w, ButtonPressMask, &ev) == False) {
+ report("No ButtonPress event was generated.");
+ FAIL;
+ } else
+ CHECK;
+
+/* Verify no events were delivered. */
+ count = XPending(display);
+ if (count != 0) {
+ report("Got %d unexpected events.", count);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+When a xname event is generated
+and no client has selected
+.S ButtonPressMask
+on the source window,
+then the event propagates,
+with propagation stopping at the root window of the screen or
+at the first window with
+.S ButtonPressMask
+in its do-not-propagate mask,
+from the source window to
+the first ancestor window for which
+some client has selected
+for xname events.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Create a child of that window.
+ Create a child of the child.
+ Select xname events on the root window.
+ Simulate a xname event on the youngest child.
+ Verify that a xname event was generated on the root.
+ Select xname events on the oldest window.
+ Set the do_not_propagate mask of its child to xname events.
+ Simulate a xname event on the youngest child.
+ Verify that no created window received a xname event.
+ Clear the do_not_propagate mask on the oldest child.
+ Set the do_not_propagate mask on the oldest window.
+ Select for xname events on the oldest child.
+ Simulate a xname on the youngest child.
+ Verify that no xname event was sent to the oldest window.
+ Verify that no xname event was sent to the youngest window.
+ Verify that a xname event was sent to the oldest child.
+
+>>CODE
+XEvent ev;
+Window w;
+Window w1;
+Window w2;
+XSetWindowAttributes atts;
+
+ if(noext(1))
+ return;
+
+ w = defwin(Dsp);
+ w1 = crechild(Dsp, w, (struct area *) NULL);
+ w2 = crechild(Dsp, w1, (struct area *) NULL);
+ XSelectInput(Dsp, DRW(Dsp), ButtonPressMask);
+ (void) warppointer(Dsp, w2, 1,1);
+
+ XSync(Dsp, True);
+ buttonpress(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, DRW(Dsp), ButtonPressMask, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+
+ XSelectInput(Dsp, DRW(Dsp), NoEventMask);
+ XSelectInput(Dsp, w, ButtonPressMask);
+
+ atts.do_not_propagate_mask = ButtonPressMask;
+ XChangeWindowAttributes(Dsp, w1, CWDontPropagate, &atts);
+
+ buttonrel(Dsp, Button1);
+ buttonpress(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, w2, ButtonPressMask, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+
+ if (XCheckWindowEvent(Dsp, w1, ButtonPressMask, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+
+ if (XCheckWindowEvent(Dsp, w, ButtonPressMask, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+
+ XSelectInput(Dsp, w1, ButtonPressMask);
+ XChangeWindowAttributes(Dsp, w, CWDontPropagate, &atts);
+
+ atts.do_not_propagate_mask = NoEventMask;
+ XChangeWindowAttributes(Dsp, w1, CWDontPropagate, &atts);
+
+ buttonrel(Dsp, Button1);
+ buttonpress(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, w2, ButtonPressMask, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+
+ if (XCheckWindowEvent(Dsp, w, ButtonPressMask, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+
+ if (XCheckWindowEvent(Dsp, w1, ButtonPressMask, &ev) == False) {
+ report("ButtonPress event was not delivered to selecting child window.");
+ FAIL;
+ } else
+ CHECK;
+
+CHECKPASS(7);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M root
+>>#NOTEs is set to the source window's root window.
+>>ASSERTION Good B 1
+>>#
+>>#COMMENT
+>># This assertion contains a tautology; a child is an inferior.
+>># Cal 12/2/92.
+>>#
+When a xname event is delivered
+and the source window is an inferior of the event window
+and the source window is a child of the event window,
+then
+.M subwindow
+is set to
+the source window.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Select xname events on that window.
+ Create a child of that window.
+ Simulate a xname event on the child.
+ Verify that a xname event was delivered to the parent.
+ Verify that the subwindow component was the child of the event window.
+>>CODE
+XEvent ev;
+Window w;
+Window w1;
+
+ if(noext(1))
+ return;
+
+ w = defwin(Dsp);
+ w1 = crechild(Dsp, w, (struct area *) NULL);
+ XSelectInput(Dsp, w, ButtonPressMask);
+ (void) warppointer(Dsp, w1, 1,1);
+
+ XSync(Dsp, True);
+ buttonpress(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, w, ButtonPressMask, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(ButtonPress));
+ FAIL;
+ } else {
+ CHECK;
+ if(ev.xbutton.subwindow != w1) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+When a xname event is delivered
+and the source window is an inferior of the event window
+and the source window is not a child of the event window,
+then
+.M subwindow
+is set to
+the child of the event window that is
+an ancestor of the source window.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Select xname events on that window.
+ Create a child of that window.
+ Create a child of the child.
+ Simulate a xname event on the youngest child.
+ Verify that a xname event was generated on the oldest parent.
+ Verify that the subwindow component was the child of the event window.
+>>CODE
+Window w;
+Window w1;
+Window w2;
+XEvent ev;
+struct area area;
+
+ if (noext(1))
+ return;
+
+ w = defwin(Dsp);
+ setarea(&area, 10, 10, 30, 30);
+ w1 = crechild(Dsp, w, &area);
+ w2 = crechild(Dsp, w1, &area);
+ (void) warppointer(Dsp, w2, 1,1);
+ XSelectInput(Dsp, w, ButtonPressMask);
+
+ XSync(Dsp, True);
+ buttonpress(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, w, ButtonPressMask, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(ButtonPress));
+ FAIL;
+ } else {
+ CHECK;
+ if(ev.xbutton.subwindow != w1) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+When a xname event is delivered
+and the source window is not an inferior of the event window,
+then
+.M subwindow
+is set to
+.S None .
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Select xname events on that window.
+ Simulate a xname event on the window.
+ Verify that a xname event was generated.
+ Verify that the subwindow component was None.
+ Create a window.
+ Grab the pointer with owner_events set to False.
+ Simulate a xname event on the window.
+ Verify that a xname event was generated on the grabbing window.
+ Verify that the subwindow component was None.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+
+ if (noext(1))
+ return;
+
+ w = defwin(Dsp);
+
+ (void) warppointer(Dsp, w, 1,1);
+ XSelectInput(Dsp, w, ButtonPressMask);
+
+ XSync(Dsp, True);
+ buttonpress(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, w, ButtonPressMask, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(ButtonPress));
+ FAIL;
+ } else {
+ CHECK;
+ if(ev.xbutton.subwindow != None) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ w2 = defwin(Dsp);
+
+ if( XGrabPointer(Dsp, w, False, ButtonPressMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime) != GrabSuccess) {
+ delete("XGrabPointer() did not return GrabSuccess.");
+ return;
+ } else
+ CHECK;
+
+ (void) warppointer(Dsp, w2, 1,1);
+ XSync(Dsp, True);
+ buttonpress(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, w, ButtonPressMask, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(ButtonPress));
+ FAIL;
+ } else {
+ CHECK;
+ if(ev.xbutton.subwindow != None) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabPointer(Dsp, CurrentTime);
+
+ CHECKPASS(5);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M time
+>>#NOTEs is set to
+>>#NOTEs the time in milliseconds at which the event was generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event window is on the same screen as the root window,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates of
+>>#NOTEs the final pointer position relative to the event window's origin.
+>>ASSERTION Good D 1
+If multiple screens are supported:
+When a xname event is delivered
+and the event and root windows are not on the same screen,
+then
+.M x
+and
+.M y
+are set to
+zero.
+>>STRATEGY
+If multiple screens are supported:
+ If extended testing is required:
+ Create a window.
+ Select xname events on that window.
+ Create a window on the alternate screen.
+ Grab the pointer with owner_events set to False.
+ Simulate a xname event on the window.
+ Verify that a xname event was generated on the grabbing window.
+ Verify that the x and y components are set to zero.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+
+/* Report unsupported if multiple screens are not supported. */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ } else
+ CHECK;
+
+ if(noext(1))
+ return;
+
+ w = defwin(Dsp);
+
+ (void) warppointer(Dsp, w, 1,1);
+ XSelectInput(Dsp, w, ButtonPressMask);
+
+ w2 = defdraw(Dsp, VI_ALT_WIN);
+
+ if( XGrabPointer(Dsp, w, False, ButtonPressMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime) != GrabSuccess) {
+ delete("XGrabPointer() did not return GrabSuccess.");
+ return;
+ } else
+ CHECK;
+
+ (void) warppointer(Dsp, w2, 1,1);
+ XSync(Dsp, True);
+ buttonpress(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, w, ButtonPressMask, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(ButtonPress));
+ FAIL;
+ } else {
+ CHECK;
+ if(ev.xbutton.x != 0 || ev.xbutton.y != 0) {
+ report("The x and y components of the %s event were not set correctly.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabPointer(Dsp, CurrentTime);
+
+ CHECKPASS(4);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x_root
+>>#NOTEs and
+>>#NOTEs .M y_root
+>>#NOTEs are set to coordinates of the pointer
+>>#NOTEs when the event was generated
+>>#NOTEs relative to the root window's origin.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M state
+>>#NOTEs is set to
+>>#NOTEs indicate the logical state
+>>#NOTEs of the pointer buttons,
+>>#NOTEs which is the bitwise OR of one or more of
+>>#NOTEs the button or modifier key masks
+>>#NOTEs .S Button1Mask ,
+>>#NOTEs .S Button2Mask ,
+>>#NOTEs .S Button3Mask ,
+>>#NOTEs .S Button4Mask ,
+>>#NOTEs .S Button5Mask ,
+>>#NOTEs .S ShiftMask ,
+>>#NOTEs .S LockMask ,
+>>#NOTEs .S ControlMask ,
+>>#NOTEs .S Mod1Mask ,
+>>#NOTEs .S Mod2Mask ,
+>>#NOTEs .S Mod3Mask ,
+>>#NOTEs .S Mod4Mask ,
+>>#NOTEs and
+>>#NOTEs .S Mod5Mask .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M button
+>>#NOTEs represents the pointer button which changed state
+>>#NOTEs and is set to either
+>>#NOTEs .S Button1 ,
+>>#NOTEs .S Button2 ,
+>>#NOTEs .S Button3 ,
+>>#NOTEs .S Button4 ,
+>>#NOTEs or
+>>#NOTEs .S Button5 .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event and root windows are on the same screen,
+>>#NOTEs then
+>>#NOTEs .M same_screen
+>>#NOTEs is set to
+>>#NOTEs .S True .
+>>ASSERTION Good D 1
+If multiple screens are supported:
+When a xname event is delivered
+and the event and root windows are not on the same screen,
+then
+.M same_screen
+is set to
+.S False .
+>>STRATEGY
+If multiple screens are supported:
+ If extended testing is required:
+ Create a window.
+ Select xname events on that window.
+ Create a window on the alternate screen.
+ Grab the pointer with owner_events set to False.
+ Simulate a xname event on the window.
+ Verify that a xname event was generated on the grabbing window.
+ Verify that the same_screen component is set to zero.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ } else
+ CHECK;
+
+ if(noext(1))
+ return;
+
+ w = defwin(Dsp);
+
+ (void) warppointer(Dsp, w, 1,1);
+ XSelectInput(Dsp, w, ButtonPressMask);
+
+ w2 = defdraw(Dsp, VI_ALT_WIN);
+
+ if( XGrabPointer(Dsp, w, False, ButtonPressMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime) != GrabSuccess) {
+ delete("XGrabPointer() did not return GrabSuccess.");
+ return;
+ } else
+ CHECK;
+
+ (void) warppointer(Dsp, w2, 1,1);
+ XSync(Dsp, True);
+ buttonpress(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, w, ButtonPressMask, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(ButtonPress));
+ FAIL;
+ } else {
+ CHECK;
+ if(ev.xbutton.same_screen != False ) {
+ report("The same_screen component of the %s event was not set correctly.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabPointer(Dsp, CurrentTime);
+
+ CHECKPASS(4);
diff --git a/xc/test/xsuite/xtest/tset/CH08/bttnrls/bttnrls.m b/xc/test/xsuite/xtest/tset/CH08/bttnrls/bttnrls.m
new file mode 100644
index 000000000..5f4975321
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/bttnrls/bttnrls.m
@@ -0,0 +1,894 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ButtonRelease CH08
+>>EXTERN
+#include <stdio.h>
+#define EVENT ButtonRelease
+#define EVENTMASK ButtonReleaseMask
+#define PTRX 4
+#define PTRY 3
+>>SET end-function restoredevstate
+>>ASSERTION Good B 1
+When any pointer button is released,
+then a xname event is generated.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Select for xname events.
+ Simulate a xname event.
+ Verify that event was delivered.
+ Verify that event member fields are correctly set.
+>>CODE
+Display *display = Dsp;
+Window w;
+XEvent event_return;
+XButtonReleasedEvent good;
+PointerPlace *ptr;
+
+ /* If extended testing is required: */
+ if(noext(1))
+ return;
+
+ /* Create a window. */
+ w = defwin(display);
+
+ /* Select for xname events. */
+ XSelectInput(display, w, EVENTMASK);
+
+ /* Simulate a xname event. */
+ ptr = warppointer(display, w, PTRX, PTRY);
+ buttonpress(display, Button1);
+ XSync(display, True);
+ buttonrel(display, Button1);
+
+ /* Verify that event was delivered. */
+ /* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+
+ good = event_return.xbutton;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.root = DRW(display);
+ good.subwindow = None;
+ good.x = PTRX;
+ good.y = PTRY;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = Button1Mask;
+ good.button = Button1;
+ good.same_screen = True;
+
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+
+
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+>>#
+>>#COMMENT
+>># Note that clients can have selected ButtonRelease events
+>># and not get them since a buttonpress starts an implicit
+>># pointer grab. We can avoid this by either:
+>># (i) Not selecting on ButtonPressMask events on any client.
+>># (ii) Not simulating a ButtonPress event.
+>># (iii) Selecting after the button press has been simulated.
+>># (iv) Explicitly performing an XUngrabPointer after the button press.
+>># I choose (i).
+>>#
+>># Cal 18/02/92.
+>>#
+When a xname event is generated,
+then
+all clients having set
+.S ButtonReleaseMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+If extended testing is required:
+ Create a second client.
+ Create a third client.
+ Create a window.
+ Select for xname events on all the clients.
+ Simulate a xname event on the window.
+ Verify that a xname event was delivered to all clients.
+ Verify that the event member fields are correctly set.
+Otherwise:
+ Create window.
+ Set ButtonReleaseMask event mask bits on window.
+ Verify that no error occurred.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window w;
+XEvent event_return;
+XButtonReleasedEvent good;
+PointerPlace *ptr;
+
+
+ /* If extended testing is required: */
+ if(config.extensions) {
+
+ if(noext(1))
+ return;
+
+ /* Create a second client. */
+ client2 = opendisplay();
+ /* Create a third client. */
+ client3 = opendisplay();
+
+ /* Create a window. */
+ w = defwin(display);
+
+ /* Select for xname events on all the clients. */
+ XSelectInput(client2, w, EVENTMASK);
+ XSelectInput(client3, w, EVENTMASK);
+ XSelectInput(display, w, EVENTMASK);
+
+ /* Simulate a xname event on the window. */
+ ptr = warppointer(display, w, PTRX, PTRY);
+ buttonpress(display, Button1);
+
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+
+ buttonrel(display, Button1);
+
+ XSync(client2, False);
+ XSync(client3, False);
+
+ good = event_return.xbutton;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.root = DRW(display);
+ good.subwindow = None;
+ good.x = PTRX;
+ good.y = PTRY;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = Button1Mask;
+ good.button = Button1;
+ good.same_screen = True;
+
+ /* Verify that a xname event was delivered to all clients. */
+ /* Verify that the event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ if (!XCheckTypedWindowEvent(client2, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ good.display = client2;
+
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+
+ if (!XCheckTypedWindowEvent(client3, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ good.display = client3;
+
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(6);
+
+
+ } else {
+
+ /* Otherwise: */
+ /* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ /* Set ButtonReleaseMask event mask bits on window. */
+ XSelectInput(display, w, ButtonReleaseMask);
+ XSync(display, True);
+ /* Verify that no error occurred. */
+ if (geterr() != Success) {
+ delete("Error setting up for test.");
+ return;
+ }
+ else
+ CHECK;
+ CHECKUNTESTED(1);
+ }
+
+>>ASSERTION Good B 1
+>>#NOTE True for most events (except MappingNotify and selection stuff).
+When a xname event is generated,
+then
+clients not having set
+.S ButtonReleaseMask
+event mask bits on the event window are not delivered
+a xname event.
+>>STRATEGY
+If extended testing is enabled:
+ Create window.
+ Select for ButtonReleaseEvents.
+ Create a second client.
+ Generate xname event.
+ Verify that a xname event was delivered to the selecting client.
+ Verify that no events were delivered to the other client.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+XEvent ev;
+Window w;
+int count;
+
+ if(noext(1))
+ return;
+
+ client2 = opendisplay();
+
+/* Create window. */
+ w = defwin(display);
+
+ (void) warppointer(display, w, PTRX, PTRY);
+
+ buttonpress(display, Button1);
+
+ XSelectInput(display, w, ALLEVENTS & ~ButtonReleaseMask);
+ XSelectInput(client2, w, EVENTMASK);
+
+/* Generate xname event. */
+
+ XSync(display, True);
+ XSync(client2, True);
+
+ buttonrel(display, Button1);
+
+ XSync(client2, False);
+
+/* Verify a ButtonRelease was generated. */
+ if(XCheckWindowEvent(client2, w, EVENTMASK, &ev) == False) {
+ report("No ButtonRelease event was generated.");
+ FAIL;
+ } else
+ CHECK;
+
+/* Verify no events were delivered. */
+ count = XPending(display);
+ if (count != 0) {
+ report("Got %d unexpected events.", count);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+
+>>ASSERTION Good B 1
+When a xname event is generated
+and no client has selected
+.S ButtonReleaseMask
+on the source window,
+then the event propagates,
+with propagation stopping at the root window of the screen or
+at the first window with
+.S ButtonReleaseMask
+in its do-not-propagate mask,
+from the source window to
+the first ancestor window for which
+some client has selected
+for xname events.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Create a child of that window.
+ Create a child of the child.
+ Select xname events on the root window.
+ Simulate a xname event on the youngest child.
+ Verify that a xname event was generated on the root.
+ Select xname events on the oldest window.
+ Set the do_not_propagate mask of its child to xname events.
+ Simulate a xname event on the youngest child.
+ Verify that no created window received a xname event.
+ Clear the do_not_propagate mask on the oldest child.
+ Set the do_not_propagate mask on the oldest window.
+ Select for xname events on the oldest child.
+ Simulate a xname on the youngest child.
+ Verify that no xname event was sent to the oldest window.
+ Verify that no xname event was sent to the youngest window.
+ Verify that a xname event was sent to the oldest child.
+>>CODE
+XEvent ev;
+Window w;
+Window w1;
+Window w2;
+XSetWindowAttributes atts;
+
+ if(noext(1))
+ return;
+
+ w = defwin(Dsp);
+ w1 = crechild(Dsp, w, (struct area *) NULL);
+ w2 = crechild(Dsp, w1, (struct area *) NULL);
+ XSelectInput(Dsp, DRW(Dsp), EVENTMASK);
+ (void) warppointer(Dsp, w2, 1,1);
+
+ buttonpress(Dsp, Button1);
+ XSync(Dsp, True);
+ buttonrel(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, DRW(Dsp), EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ XSelectInput(Dsp, DRW(Dsp), NoEventMask);
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ atts.do_not_propagate_mask = EVENTMASK;
+ XChangeWindowAttributes(Dsp, w1, CWDontPropagate, &atts);
+
+ buttonpress(Dsp, Button1);
+ XSync(Dsp, True);
+ buttonrel(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, w2, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ if (XCheckWindowEvent(Dsp, w1, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ XSelectInput(Dsp, w1, EVENTMASK);
+ XChangeWindowAttributes(Dsp, w, CWDontPropagate, &atts);
+
+ atts.do_not_propagate_mask = NoEventMask;
+ XChangeWindowAttributes(Dsp, w1, CWDontPropagate, &atts);
+
+ buttonpress(Dsp, Button1);
+ XSync(Dsp, True);
+ buttonrel(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, w2, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ if (XCheckWindowEvent(Dsp, w1, EVENTMASK, &ev) == False) {
+ report("ButtonRelease event was not delivered to selecting child window.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(7);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M root
+>>#NOTEs is set to the source window's root window.
+>>ASSERTION Good B 1
+>>#
+>>#COMMENT
+>># This assertion contains a tautology; a child is an inferior.
+>># - Cal 12/2/92.
+>>#
+When a xname event is delivered
+and the source window is an inferior of the event window
+and the source window is a child of the event window,
+then
+.M subwindow
+is set to
+the source window.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Select xname events on that window.
+ Create a child of that window.
+ Simulate a xname event on the child.
+ Verify that a xname event was delivered to the parent.
+ Verify that the subwindow component was the child of the event window.
+>>CODE
+XEvent ev;
+Window w;
+Window w1;
+
+ /* If extended testing is required: */
+ if(noext(1))
+ return;
+
+ /* Create a window. */
+ w = defwin(Dsp);
+ /* Create a child of the window. */
+ w1 = crechild(Dsp, w, (struct area *) NULL);
+ /* Select xname events on the child. */
+ XSelectInput(Dsp, w, EVENTMASK);
+ (void) warppointer(Dsp, w1, 1,1);
+
+ /* Simulate a xname event on the child. */
+ buttonpress(Dsp, Button1);
+ XSync(Dsp, True);
+ buttonrel(Dsp, Button1);
+
+ /* Verify that a xname event was generated on the parent. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that the subwindow component was set to the child. */
+ if(ev.xbutton.subwindow != w1) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+
+>>ASSERTION Good B 1
+When a xname event is delivered
+and the source window is an inferior of the event window
+and the source window is not a child of the event window,
+then
+.M subwindow
+is set to
+the child of the event window that is
+an ancestor of the source window.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Select xname events on that window.
+ Create a child of that window.
+ Create a child of the child.
+ Simulate a xname event on the youngest child.
+ Verify that a xname event was generated on the oldest parent.
+ Verify that the subwindow component was the child of the event window.
+>>CODE
+Window w;
+Window w1;
+Window w2;
+XEvent ev;
+struct area area;
+
+ if (noext(1))
+ return;
+
+ w = defwin(Dsp);
+ setarea(&area, 10, 10, 30, 30);
+ w1 = crechild(Dsp, w, &area);
+ w2 = crechild(Dsp, w1, &area);
+ (void) warppointer(Dsp, w2, 1,1);
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ buttonpress(Dsp, Button1);
+ XSync(Dsp, True);
+ buttonrel(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ if(ev.xbutton.subwindow != w1) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+
+
+>>ASSERTION Good B 1
+When a xname event is delivered
+and the source window is not an inferior of the event window,
+then
+.M subwindow
+is set to
+.S None .
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Select xname events on that window.
+ Simulate a xname event on the window.
+ Verify that a xname event was generated.
+ Verify that the subwindow component was None.
+ Create a window.
+ Grab the pointer with owner_events set to False.
+ Simulate a xname event on the window.
+ Verify that a xname event was generated on the grabbing window.
+ Verify that the subwindow component was None.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+
+ if (noext(1))
+ return;
+
+ w = defwin(Dsp);
+
+ (void) warppointer(Dsp, w, 1,1);
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ buttonpress(Dsp, Button1);
+ XSync(Dsp, True);
+ buttonrel(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ if(ev.xbutton.subwindow != None) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ w2 = defwin(Dsp);
+
+ if( XGrabPointer(Dsp, w, False, EVENTMASK, GrabModeAsync, GrabModeAsync, None, None, CurrentTime) != GrabSuccess) {
+ delete("XGrabPointer() did not return GrabSuccess.");
+ return;
+ } else
+ CHECK;
+
+ (void) warppointer(Dsp, w2, 1,1);
+ buttonpress(Dsp, Button1);
+ XSync(Dsp, True);
+ buttonrel(Dsp, Button1);
+
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ if(ev.xbutton.subwindow != None) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabPointer(Dsp, CurrentTime);
+
+ CHECKPASS(5);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M time
+>>#NOTEs is set to
+>>#NOTEs the time in milliseconds at which the event was generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event window is on the same screen as the root window,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates of
+>>#NOTEs the final pointer position relative to the event window's origin.
+>>ASSERTION Good D 1
+If multiple screens are supported:
+When a xname event is delivered
+and the event and root windows are not on the same screen,
+then
+.M x
+and
+.M y
+are set to
+zero.
+>>STRATEGY
+If multiple screens are supported:
+ If extended testing is required:
+ Create a window.
+ Select for xname events.
+ Create a window on the alternate screen.
+ Grab the pointer for the first window with owner_events set to False.
+ Simulate a xname event on the alternate window.
+ Verify that a xname event was generated with respect to the grabbing window.
+ Verify that the x and y components were set to zero.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+
+ /* If multiple screens are supported: */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ } else
+ CHECK;
+
+ /* If extended testing is required: */
+ if(noext(1))
+ return;
+
+ /* Create a window. */
+ w = defwin(Dsp);
+
+ (void) warppointer(Dsp, w, 1,1);
+ /* Select for xname events. */
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ /* Create a window on the alternate screen. */
+ w2 = defdraw(Dsp, VI_ALT_WIN);
+
+ /* Grab the pointer for the first window with owner_events set to False. */
+ if( XGrabPointer(Dsp, w, False, EVENTMASK, GrabModeAsync, GrabModeAsync, None, None, CurrentTime) != GrabSuccess) {
+ delete("XGrabPointer() did not return GrabSuccess.");
+ return;
+ } else
+ CHECK;
+
+ /* Simulate a xname event on the alternate window. */
+ (void) warppointer(Dsp, w2, 1,1);
+ buttonpress(Dsp, Button1);
+ XSync(Dsp, True);
+ buttonrel(Dsp, Button1);
+
+ /* Verify that a xname event was generated with respect to the grabbing window. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that the x and y components were set to zero. */
+ if(ev.xbutton.x != 0 || ev.xbutton.y != 0) {
+ report("The x and y components of the %s event were not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabPointer(Dsp, CurrentTime);
+
+ CHECKPASS(4);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x_root
+>>#NOTEs and
+>>#NOTEs .M y_root
+>>#NOTEs are set to coordinates of the pointer
+>>#NOTEs when the event was generated
+>>#NOTEs relative to the root window's origin.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M state
+>>#NOTEs is set to
+>>#NOTEs indicate the logical state
+>>#NOTEs of the pointer buttons,
+>>#NOTEs which is the bitwise OR of one or more of
+>>#NOTEs the button or modifier key masks
+>>#NOTEs .S Button1Mask ,
+>>#NOTEs .S Button2Mask ,
+>>#NOTEs .S Button3Mask ,
+>>#NOTEs .S Button4Mask ,
+>>#NOTEs .S Button5Mask ,
+>>#NOTEs .S ShiftMask ,
+>>#NOTEs .S LockMask ,
+>>#NOTEs .S ControlMask ,
+>>#NOTEs .S Mod1Mask ,
+>>#NOTEs .S Mod2Mask ,
+>>#NOTEs .S Mod3Mask ,
+>>#NOTEs .S Mod4Mask ,
+>>#NOTEs and
+>>#NOTEs .S Mod5Mask .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M button
+>>#NOTEs represents the pointer button which changed state
+>>#NOTEs and is set to either
+>>#NOTEs .S Button1 ,
+>>#NOTEs .S Button2 ,
+>>#NOTEs .S Button3 ,
+>>#NOTEs .S Button4 ,
+>>#NOTEs or
+>>#NOTEs .S Button5 .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event and root windows are on the same screen,
+>>#NOTEs then
+>>#NOTEs .M same_screen
+>>#NOTEs is set to
+>>#NOTEs .S True .
+>>ASSERTION Good D 1
+If multiple screens are supported:
+When a xname event is delivered
+and the event and root windows are not on the same screen,
+then
+.M same_screen
+is set to
+.S False .
+>>STRATEGY
+If multiple screens are supported:
+ If extended testing is required:
+ Create a window on the default screen.
+ Select xname events on the window.
+ Create a window on the alternative screen.
+ Grab the keyboard for the first window.
+ Simulate a xname event on the alternate window.
+ Verify that a xname event was generated on the grabbing window.
+ Verify that the same_screen component was False.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+
+
+ /* If multiple screens are supported: */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ } else
+ CHECK;
+
+ /* If extended testing is required: */
+ if(noext(1))
+ return;
+
+ /* Create a window on the default screen. */
+ w = defwin(Dsp);
+
+ (void) warppointer(Dsp, w, 1,1);
+ /* Select xname events on the window. */
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ /* Create a window on the alternative screen. */
+ w2 = defdraw(Dsp, VI_ALT_WIN);
+
+ /* Grab the keyboard for the first window. */
+ if( XGrabPointer(Dsp, w, False, EVENTMASK, GrabModeAsync, GrabModeAsync, None, None, CurrentTime) != GrabSuccess) {
+ delete("XGrabPointer() did not return GrabSuccess.");
+ return;
+ } else
+ CHECK;
+
+ /* Simulate a xname event on the alternate window. */
+ (void) warppointer(Dsp, w2, 1,1);
+ buttonpress(Dsp, Button1);
+ XSync(Dsp, True);
+ buttonrel(Dsp, Button1);
+
+ /* Verify that a xname event was generated on the grabbing window. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that the same_screen component was False. */
+ if(ev.xbutton.same_screen != False ) {
+ report("The same_screen component of the %s event was not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabPointer(Dsp, CurrentTime);
+
+ CHECKPASS(4);
diff --git a/xc/test/xsuite/xtest/tset/CH08/chckifevnt/chckifevnt.m b/xc/test/xsuite/xtest/tset/CH08/chckifevnt/chckifevnt.m
new file mode 100644
index 000000000..225a30dce
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/chckifevnt/chckifevnt.m
@@ -0,0 +1,482 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCheckIfEvent CH08
+Bool
+XCheckIfEvent(display, event_return, predicate, arg)
+Display *display = Dsp;
+XEvent *event_return = &_event;
+Predicate predicate = _predicate;
+char *arg = (char *) 0;
+>>EXTERN
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_(rvalue) \
+ _startcall(display);\
+ rvalue = XCheckIfEvent(display, event_return, predicate, arg);\
+ _endcall(display)
+static XEvent _event;
+
+/*
+ * _predicate - a predicate procedure
+ *
+ * _predicate returns True only after it has been invoked the specified
+ * number of times (_pred_max). _pred_cnt is used to keep track of the
+ * number of invocations. _pred_retval always contains the previous
+ * _predicate return value. _pred_true is set to True if _predicate is
+ * ever invoked while _pred_retval is set to True. _pred_event contains
+ * a copy of the event most recently passed to _predicate.
+ *
+ * These variables should be initialized by a call to PRED_SETUP() prior
+ * to (indirectly!) invoking the predicate procedure. PRED_SETUP takes
+ * an argument which specifies at which invocation _predicate should
+ * start returning True.
+ */
+static int _pred_max;
+static int _pred_cnt; /* _predicate invocation counter */
+static XEvent _pred_event; /* last event passed to _predicate */
+static int _pred_retval; /* last returnvalue from _predicate */
+static int _pred_true; /* True when True previously returned */
+
+static int
+_predicate (display, event, arg)
+Display *display;
+XEvent *event;
+char *arg;
+{
+#ifdef lint
+ XCloseDisplay(display);
+ *arg = '\0';
+#endif
+ _pred_event = *event;
+ if (_pred_retval == True)
+ _pred_true = True;
+ _pred_retval = ((++_pred_cnt >= _pred_max) ? True : False);
+ return(_pred_retval);
+}
+
+#define PRED_SETUP(max) \
+ _pred_max = (max);\
+ _pred_cnt = 0;\
+ _pred_retval = False;\
+ _pred_true = False
+
+>>ASSERTION Good A
+A call to xname
+calls
+.A predicate
+once for each event in the event queue until
+.A predicate
+returns
+.S True .
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Set up predicate procedure.
+Call XCheckIfEvent.
+Verify that predicate was called the correct number of times.
+Verify that predicate returned True at most recent invocation.
+Verify that XCheckIfEvent did not continue to call predicate
+after predicate returned True.
+>>CODE
+XEvent event;
+int callcnt;
+int returnvalue;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 2);
+/* Call XCheckIfEvent. */
+ _xcall_(returnvalue);
+/* Verify that predicate was called the correct number of times. */
+ if (_pred_cnt != callcnt) {
+ report("predicate called %d times, expected %d", _pred_cnt, callcnt);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that predicate returned True at most recent invocation. */
+ if (_pred_retval != True) {
+ report("predicate returned %d, expecting %d", _pred_retval, True);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XCheckIfEvent did not continue to call predicate */
+/* after predicate returned True. */
+ if (_pred_true == True) {
+ report("Did not return when predicate returned True.");
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+When a call to xname finds a matching event,
+then
+xname
+.S True .
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Set up predicate procedure.
+Call XCheckIfEvent.
+Verify that predicate found a matching event.
+Verify that XCheckIfEvent returned True.
+>>CODE
+XEvent event;
+int callcnt;
+int returnvalue;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 2);
+/* Call XCheckIfEvent. */
+ _xcall_(returnvalue);
+/* Verify that predicate found a matching event. */
+ if (_pred_cnt != callcnt) {
+ report("predicate called %d times, expected %d", _pred_cnt, callcnt);
+ FAIL;
+ }
+ else
+ CHECK;
+ if (_pred_retval != True) {
+ report("predicate returned %d, expecting %d", _pred_retval, True);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XCheckIfEvent returned True. */
+ if (returnvalue != True) {
+ report("Returned %d, expecting %d", returnvalue, True);
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+A call to xname removes the returned event from the event queue.
+>>STRATEGY
+>>CODE
+XEvent event;
+XEvent nextevent;
+int returnvalue;
+int callcnt;
+int oldqsize;
+int newqsize;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Call XPending to get the current event queue size. */
+ oldqsize = XPending(display);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 1);
+/* Call XCheckIfEvent. */
+ _xcall_(returnvalue);
+/* Verify that XCheckIfEvent returned True. */
+ if (returnvalue != True) {
+ report("Returned %d, expecting %d", _pred_retval, True);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XPending to get the current event queue size. */
+ newqsize = XPending(display);
+/* Verify that size of the event queue has decreased by one. */
+ if (newqsize != (oldqsize-1)) {
+ report("Event queue size %d, expected %d", newqsize, oldqsize-1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that the returned event was removed from the event queue. */
+ XNextEvent(display, &nextevent);
+ if (event_return->type == nextevent.type) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(ButtonPress));
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+When on a call to xname
+.A predicate
+returns
+.S True ,
+then xname returns the
+.A event
+passed to
+.A predicate
+in
+.A event_return .
+>>STRATEGY
+>>CODE
+XEvent event;
+int callcnt;
+int returnvalue;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 2);
+/* Call XCheckIfEvent. */
+ _xcall_(returnvalue);
+/* Verify that predicate returned True at most recent invocation. */
+ if (_pred_retval != True) {
+ report("predicate returned %d, expecting %d", _pred_retval, True);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XCheckIfEvent returned True. */
+ if (returnvalue != True) {
+ report("Returned %d, expecting %d", _pred_retval, True);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event_return is the same as the event passed to predicate. */
+ if (event_return->type != _pred_event.type) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(_pred_event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event_return is the expected event. */
+ if (event_return->type != KeyRelease) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(KeyRelease));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XIfEvent did not continue to call predicate */
+/* after predicate returned True. */
+ if (_pred_true == True) {
+ report("Did not return when predicate returned True.");
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(5);
+>>ASSERTION Good A
+When on a call to xname
+.A predicate
+has not returned
+.S True
+after having been called once for each event in the event queue,
+then xname returns
+.S False.
+>>STRATEGY
+>>CODE
+XEvent event;
+int callcnt;
+int returnvalue;
+int qsize;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Call XPending to get the current event queue size. */
+ qsize = XPending(display);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 100);
+/* Call XCheckIfEvent. */
+ _xcall_(returnvalue);
+/* Verify that predicate never returned True. */
+ if (_pred_retval == True) {
+ report("Predicate erroneously returned True.");
+ FAIL;
+ }
+ else
+ CHECK;
+ if (_pred_true == True) {
+ report("Predicate erroneously returned True.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XCheckIfEvent returned False. */
+ if (returnvalue != False) {
+ report("returned %d, expecting %d", returnvalue, False);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XCheckIfEvent called predicate once for */
+/* each event in the event queue. */
+ if (_pred_cnt != qsize) {
+ report("predicate called %d times, expected %d", _pred_cnt, qsize);
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(4);
+>>ASSERTION Good A
+When on a call to xname
+.A predicate
+has not returned
+.S True
+after having been called once for each event in the event queue,
+then
+xname
+flushes the output buffer.
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Call XPutBackEvent to put events on the event queue.
+Call XPending to get the current event queue size.
+Set up predicate procedure.
+Call XCheckIfEvent.
+Empty the buffer.
+Ensure the server has dealt with anything flushed to it: do XSync()
+Verify that the output buffer was flushed by effect on server.
+Verify that predicate never returned True.
+Verify that XCheckIfEvent returned False.
+Verify that XCheckIfEvent called predicate once for
+each event in the event queue.
+>>CODE
+XEvent event;
+int callcnt;
+int returnvalue;
+int qsize;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Call XPending to get the current event queue size. */
+ qsize = XPending(display);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 100);
+/* Call XCheckIfEvent. */
+ _xcall_(returnvalue);
+/* Empty the buffer. */
+ (void)XTestDiscard(display);
+/* Ensure the server has dealt with anything flushed to it: do XSync() */
+ XSync(display, False);
+/* Verify that the output buffer was flushed by effect on server. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() != Success) {
+ report("The output buffer was not flushed.");
+ XFreePixmap(display, pm);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that predicate never returned True. */
+ if (_pred_retval == True) {
+ report("Predicate erroneously returned True.");
+ FAIL;
+ }
+ else
+ CHECK;
+ if (_pred_true == True) {
+ report("Predicate erroneously returned True.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XCheckIfEvent returned False. */
+ if (returnvalue != False) {
+ report("returned %d, expecting %d", returnvalue, False);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XCheckIfEvent called predicate once for */
+/* each event in the event queue. */
+ if (_pred_cnt != qsize) {
+ report("predicate called %d times, expected %d", _pred_cnt, qsize);
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(6);
diff --git a/xc/test/xsuite/xtest/tset/CH08/chckmskevn/chckmskevn.m b/xc/test/xsuite/xtest/tset/CH08/chckmskevn/chckmskevn.m
new file mode 100644
index 000000000..26d66de01
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/chckmskevn/chckmskevn.m
@@ -0,0 +1,223 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCheckMaskEvent CH08
+Bool
+XCheckMaskEvent(display, event_mask, event_return)
+Display *display = Dsp;
+long event_mask;
+XEvent *event_return = &_event;
+>>EXTERN
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_(rvalue) \
+ _startcall(display);\
+ rvalue = XCheckMaskEvent(display, event_mask, event_return);\
+ _endcall(display)
+static XEvent _event;
+>>ASSERTION Good A
+A call to xname
+returns in
+.A event_return
+the first event in the event queue matching
+.A event_mask .
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XCheckMaskEvent.
+Verify that XCheckMaskEvent returned True.
+Verify the correct event-type was returned.
+Verify the first matching event in event queue was returned.
+>>CODE
+XEvent event;
+XAnyEvent *ep;
+Bool return_value;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ ep = (XAnyEvent *) &event;
+ ep->type = KeyPress;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+ ep->type = ButtonPress;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+ ep->type = ButtonPress;
+ ep->send_event = True; /* first occurrence has send_event True */
+ XPutBackEvent(display, &event);
+ ep->type = KeyPress;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+/* Call XCheckMaskEvent. */
+ event_mask = ButtonPressMask;
+ _xcall_(return_value);
+/* Verify that XCheckMaskEvent returned True. */
+ if (return_value != True) {
+ report("Did not return True: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the correct event-type was returned. */
+ ep = (XAnyEvent *) event_return;
+ if (ep->type != ButtonPress) {
+ report("Got %s, expected %s", eventname(ep->type), eventname(ButtonPress));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the first matching event in event queue was returned. */
+ if (ep->send_event != True) {
+ report("First event in event queue was not returned.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
+>>ASSERTION def
+When a call to xname finds a matching event,
+then
+xname
+returns
+.S True .
+>>ASSERTION Good A
+A call to xname removes the returned event from the event queue.
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XPending to get the current event queue size.
+Call XCheckMaskEvent.
+Call XPending to get the current event queue size.
+Verify that size of event queue has decreased by one.
+>>CODE
+XEvent event;
+int oldqsize;
+int newqsize;
+Bool return_value;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Call XPending to get the current event queue size. */
+ oldqsize = XPending(display);
+/* Call XCheckMaskEvent. */
+ event_mask = ButtonPressMask;
+ _xcall_(return_value);
+/* Call XPending to get the current event queue size. */
+ newqsize = XPending(display);
+/* Verify that size of event queue has decreased by one. */
+ if (newqsize != (oldqsize-1)) {
+ report("Event queue size %d, expected %d", newqsize, oldqsize-1);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION def
+When a matching event is not in the event queue,
+then a call to xname
+returns in
+.A event_return
+the first matching event available on the X server connection.
+>>ASSERTION Good A
+When a matching event is not in the event queue and
+is not available on the X server connection,
+then a call to xname
+returns
+.S False .
+>>STRATEGY
+Discard all events on the event queue.
+Call XCheckMaskEvent.
+Verify that XCheckMaskEvent returned False.
+>>CODE
+Bool return_value;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XCheckMaskEvent. */
+ event_mask = ButtonPressMask;
+ _xcall_(return_value);
+/* Verify that XCheckMaskEvent returned False. */
+ if (return_value != False) {
+ report("Did not return False: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION Good A
+When a matching event is not in the event queue and
+is not available on the X server connection,
+then a call to xname
+flushes the output buffer.
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Call XCheckMaskEvent.
+Verify that XCheckMaskEvent returned False.
+Empty the buffer.
+Ensure the server has dealt with anything flushed to it: do XSync()
+Verify that the output buffer was flushed by effect on server.
+>>CODE
+Bool return_value;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Call XCheckMaskEvent. */
+ event_mask = ButtonPressMask;
+ _xcall_(return_value);
+/* Verify that XCheckMaskEvent returned False. */
+ if (return_value != False) {
+ report("Did not return False: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Empty the buffer. */
+ (void)XTestDiscard(display);
+/* Ensure the server has dealt with anything flushed to it: do XSync() */
+ XSync(display, False);
+/* Verify that the output buffer was flushed by effect on server. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() != Success) {
+ report("The output buffer was not flushed.");
+ XFreePixmap(display, pm);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
diff --git a/xc/test/xsuite/xtest/tset/CH08/chcktypdev/chcktypdev.m b/xc/test/xsuite/xtest/tset/CH08/chcktypdev/chcktypdev.m
new file mode 100644
index 000000000..611c3ad06
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/chcktypdev/chcktypdev.m
@@ -0,0 +1,224 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCheckTypedEvent CH08
+Bool
+XCheckTypedEvent(display, event_type, event_return)
+Display *display = Dsp;
+int event_type;
+XEvent *event_return = &_event;
+>>EXTERN
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_(rvalue) \
+ _startcall(display);\
+ rvalue = XCheckTypedEvent(display, event_type, event_return);\
+ _endcall(display)
+static XEvent _event;
+>>ASSERTION Good A
+>>#NOTE Similar assertions to chckmskevn.
+A call to xname
+returns in
+.A event_return
+the first event in the event queue that matches
+.A event_type .
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XCheckTypedEvent.
+Verify that XCheckTypedEvent returned True.
+Verify the correct event-type was returned.
+Verify the first matching event in event queue was returned.
+>>CODE
+XEvent event;
+XAnyEvent *ep;
+Bool return_value;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ ep = (XAnyEvent *) &event;
+ ep->type = KeyPress;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+ ep->type = ButtonPress;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+ ep->type = ButtonPress;
+ ep->send_event = True; /* first occurrence has send_event True */
+ XPutBackEvent(display, &event);
+ ep->type = KeyPress;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+/* Call XCheckTypedEvent. */
+ event_type = ButtonPress;
+ _xcall_(return_value);
+/* Verify that XCheckTypedEvent returned True. */
+ if (return_value != True) {
+ report("Did not return True: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the correct event-type was returned. */
+ ep = (XAnyEvent *) event_return;
+ if (ep->type != ButtonPress) {
+ report("Got %s, expected %s", eventname(ep->type), eventname(ButtonPress));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the first matching event in event queue was returned. */
+ if (ep->send_event != True) {
+ report("First event in event queue was not returned.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
+>>ASSERTION def
+When a call to xname finds a matching event,
+then
+xname
+returns
+.S True .
+>>ASSERTION Good A
+A call to xname removes the returned event from the event queue.
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XPending to get the current event queue size.
+Call XCheckTypedEvent.
+Call XPending to get the current event queue size.
+Verify that size of event queue has decreased by one.
+>>CODE
+XEvent event;
+int oldqsize;
+int newqsize;
+Bool return_value;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Call XPending to get the current event queue size. */
+ oldqsize = XPending(display);
+/* Call XCheckTypedEvent. */
+ event_type = ButtonPress;
+ _xcall_(return_value);
+/* Call XPending to get the current event queue size. */
+ newqsize = XPending(display);
+/* Verify that size of event queue has decreased by one. */
+ if (newqsize != (oldqsize-1)) {
+ report("Event queue size %d, expected %d", newqsize, oldqsize-1);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION def
+When the event queue does not contain a matching event,
+then a call to xname
+returns in
+.A event_return
+the first matching event available on the X server connection.
+>>ASSERTION Good A
+When a matching event is not in the event queue and
+is not available on the X server connection,
+then a call to xname
+returns
+.S False .
+>>STRATEGY
+Discard all events on the event queue.
+Call XCheckTypedEvent.
+Verify that XCheckTypedEvent returned False.
+>>CODE
+Bool return_value;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XCheckTypedEvent. */
+ event_type = ButtonPress;
+ _xcall_(return_value);
+/* Verify that XCheckTypedEvent returned False. */
+ if (return_value != False) {
+ report("Did not return False: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION Good A
+When a matching event is not in the event queue and
+is not available on the X server connection,
+then a call to xname
+flushes the output buffer.
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Call XCheckTypedEvent.
+Verify that XCheckTypedEvent returned False.
+Empty the buffer.
+Ensure the server has dealt with anything flushed to it: do XSync()
+Verify that the output buffer was flushed by effect on server.
+>>CODE
+Bool return_value;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Call XCheckTypedEvent. */
+ event_type = ButtonPress;
+ _xcall_(return_value);
+/* Verify that XCheckTypedEvent returned False. */
+ if (return_value != False) {
+ report("Did not return False: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Empty the buffer. */
+ (void)XTestDiscard(display);
+/* Ensure the server has dealt with anything flushed to it: do XSync() */
+ XSync(display, False);
+/* Verify that the output buffer was flushed by effect on server. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() != Success) {
+ report("The output buffer was not flushed.");
+ XFreePixmap(display, pm);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
diff --git a/xc/test/xsuite/xtest/tset/CH08/chcktypdwd/chcktypdwd.m b/xc/test/xsuite/xtest/tset/CH08/chcktypdwd/chcktypdwd.m
new file mode 100644
index 000000000..4d2b28df2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/chcktypdwd/chcktypdwd.m
@@ -0,0 +1,265 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCheckTypedWindowEvent CH08
+Bool
+XCheckTypedWindowEvent(display, w, event_type, event_return)
+Display *display = Dsp;
+Window w;
+int event_type;
+XEvent *event_return = &_event;
+>>EXTERN
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_(rvalue) \
+ _startcall(display);\
+ rvalue = XCheckTypedWindowEvent(display, w, event_type, event_return);\
+ _endcall(display)
+static XEvent _event;
+>>ASSERTION Good A
+A call to xname
+returns in
+.A event_return
+the first event in the event queue that matches
+.A event_type
+and window
+.A w .
+>>STRATEGY
+Create a window.
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XCheckTypedWindowEvent.
+Verify that XCheckTypedWindowEvent returned True.
+Verify the correct event-type was returned.
+Verify the event contained correct window.
+Verify the first matching event in event queue was returned.
+>>CODE
+Window w1;
+Window w2;
+XEvent event;
+XAnyEvent *ep;
+Bool return_value;
+
+/* Create a window. */
+ w1 = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ w2 = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ ep = (XAnyEvent *) &event;
+ ep->type = KeyPress;
+ ep->window = w1;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+ ep->type = ButtonPress;
+ ep->window = w2;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+ ep->type = ButtonPress;
+ ep->window = w2;
+ ep->send_event = True; /* first occurrence has send_event True */
+ XPutBackEvent(display, &event);
+ ep->type = KeyPress;
+ ep->window = w1;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+/* Call XCheckTypedWindowEvent. */
+ w = w2;
+ event_type = ButtonPress;
+ _xcall_(return_value);
+/* Verify that XCheckTypedWindowEvent returned True. */
+ if (return_value != True) {
+ report("Did not return True: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the correct event-type was returned. */
+ ep = (XAnyEvent *) event_return;
+ if (ep->type != event_type) {
+ report("Got %s, expected %s", eventname(ep->type), eventname(ButtonPress));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the event contained correct window. */
+ if (ep->window != w2) {
+ report("Got %d, expected %d", ep->window, w2);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the first matching event in event queue was returned. */
+ if (ep->send_event != True) {
+ report("First event in event queue was not returned.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(4);
+>>ASSERTION def
+When a call to xname finds a matching event,
+then
+xname
+returns
+.S True .
+>>ASSERTION Good A
+A call to xname removes the returned event from the event queue.
+>>STRATEGY
+Create a window.
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XPending to get the current event queue size.
+Call XCheckTypedWindowEvent.
+Verify that XCheckTypedWindowEvent returned True.
+Call XPending to get the current event queue size.
+Verify that size of event queue has decreased by one.
+>>CODE
+XEvent event;
+XAnyEvent *ep;
+int oldqsize;
+int newqsize;
+Bool return_value;
+
+/* Create a window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ ep = (XAnyEvent *) &event;
+ ep->type = ButtonPressMask;
+ ep->window = w;
+ XPutBackEvent(display, &event);
+/* Call XPending to get the current event queue size. */
+ oldqsize = XPending(display);
+/* Call XCheckTypedWindowEvent. */
+ event_type = ButtonPress;
+ _xcall_(return_value);
+/* Verify that XCheckTypedWindowEvent returned True. */
+ if (return_value != True) {
+ report("Did not return True: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XPending to get the current event queue size. */
+ newqsize = XPending(display);
+/* Verify that size of event queue has decreased by one. */
+ if (newqsize != (oldqsize-1)) {
+ report("Event queue size %d, expected %d", newqsize, oldqsize-1);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
+>>ASSERTION def
+When the event queue does not contain a matching event,
+then a call to xname
+returns in
+.A event_return
+the first matching event available on the X server connection.
+>>ASSERTION Good A
+When a matching event is not in the event queue and
+is not available on the X server connection,
+then a call to xname
+returns
+.S False .
+>>STRATEGY
+Create a window.
+Discard all events on the event queue.
+Call XCheckTypedWindowEvent.
+Verify that XCheckTypedWindowEvent returned False.
+>>CODE
+Bool return_value;
+
+/* Create a window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XCheckTypedWindowEvent. */
+ event_type = ButtonPress;
+ _xcall_(return_value);
+/* Verify that XCheckTypedWindowEvent returned False. */
+ if (return_value != False) {
+ report("Did not return False: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION Good A
+When a matching event is not in the event queue and
+is not available on the X server connection,
+then a call to xname
+flushes the output buffer.
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Create a window.
+Call XCheckTypedWindowEvent.
+Verify that XCheckTypedWindowEvent returned False.
+Empty the buffer.
+Ensure the server has dealt with anything flushed to it: do XSync()
+Verify that the output buffer was flushed by effect on server.
+>>CODE
+Bool return_value;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Create a window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Call XCheckTypedWindowEvent. */
+ event_type = ButtonPress;
+ _xcall_(return_value);
+/* Verify that XCheckTypedWindowEvent returned False. */
+ if (return_value != False) {
+ report("Did not return False: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Empty the buffer. */
+ (void)XTestDiscard(display);
+/* Ensure the server has dealt with anything flushed to it: do XSync() */
+ XSync(display, False);
+/* Verify that the output buffer was flushed by effect on server. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() != Success) {
+ report("The output buffer was not flushed.");
+ XFreePixmap(display, pm);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
diff --git a/xc/test/xsuite/xtest/tset/CH08/chckwdwevn/chckwdwevn.m b/xc/test/xsuite/xtest/tset/CH08/chckwdwevn/chckwdwevn.m
new file mode 100644
index 000000000..335d5cab4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/chckwdwevn/chckwdwevn.m
@@ -0,0 +1,266 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCheckWindowEvent CH08
+Bool
+XCheckWindowEvent(display, w, event_mask, event_return)
+Display *display = Dsp;
+Window w;
+long event_mask;
+XEvent *event_return = &_event;
+>>EXTERN
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_(rvalue) \
+ _startcall(display);\
+ rvalue = XCheckWindowEvent(display, w, event_mask, event_return);\
+ _endcall(display)
+static XEvent _event;
+>>ASSERTION Good A
+A call to xname
+returns in
+.A event_return
+the first event in the event queue that matches
+window
+.A w
+and
+.A event_mask .
+>>STRATEGY
+Create a window.
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XCheckWindowEvent.
+Verify that XCheckWindowEvent returned True.
+Verify the correct event-type was returned.
+Verify the event contained correct window.
+Verify the first matching event in event queue was returned.
+>>CODE
+Window w1;
+Window w2;
+XEvent event;
+XAnyEvent *ep;
+Bool return_value;
+
+/* Create a window. */
+ w1 = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ w2 = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ ep = (XAnyEvent *) &event;
+ ep->type = KeyPress;
+ ep->window = w1;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+ ep->type = ButtonPress;
+ ep->window = w2;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+ ep->type = ButtonPress;
+ ep->window = w2;
+ ep->send_event = True; /* first occurrence has send_event True */
+ XPutBackEvent(display, &event);
+ ep->type = KeyPress;
+ ep->window = w1;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+/* Call XCheckWindowEvent. */
+ w = w2;
+ event_mask = ButtonPressMask;
+ _xcall_(return_value);
+/* Verify that XCheckWindowEvent returned True. */
+ if (return_value != True) {
+ report("Did not return True: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the correct event-type was returned. */
+ ep = (XAnyEvent *) event_return;
+ if (ep->type != ButtonPress) {
+ report("Got %s, expected %s", eventname(ep->type), eventname(ButtonPress));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the event contained correct window. */
+ if (ep->window != w2) {
+ report("Got %d, expected %d", ep->window, w2);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the first matching event in event queue was returned. */
+ if (ep->send_event != True) {
+ report("First event in event queue was not returned.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(4);
+>>ASSERTION def
+When a call to xname finds a matching event,
+then
+xname
+returns
+.S True .
+>>ASSERTION Good A
+A call to xname removes the returned event from the event queue.
+>>STRATEGY
+Create a window.
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XPending to get the current event queue size.
+Call XCheckWindowEvent.
+Verify that XCheckWindowEvent returned True.
+Call XPending to get the current event queue size.
+Verify that size of event queue has decreased by one.
+>>CODE
+XEvent event;
+XAnyEvent *ep;
+int oldqsize;
+int newqsize;
+Bool return_value;
+
+/* Create a window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ ep = (XAnyEvent *) &event;
+ ep->type = ButtonPressMask;
+ ep->window = w;
+ XPutBackEvent(display, &event);
+/* Call XPending to get the current event queue size. */
+ oldqsize = XPending(display);
+/* Call XCheckWindowEvent. */
+ event_mask = ButtonPressMask;
+ _xcall_(return_value);
+/* Verify that XCheckWindowEvent returned True. */
+ if (return_value != True) {
+ report("Did not return True: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XPending to get the current event queue size. */
+ newqsize = XPending(display);
+/* Verify that size of event queue has decreased by one. */
+ if (newqsize != (oldqsize-1)) {
+ report("Event queue size %d, expected %d", newqsize, oldqsize-1);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
+>>ASSERTION def
+When a matching event is not in the event queue,
+then a call to xname
+returns in
+.A event_return
+the first matching event available on the X server connection.
+>>ASSERTION Good A
+When a matching event is not in the event queue and
+is not available on the X server connection,
+then a call to xname
+returns
+.S False .
+>>STRATEGY
+Create a window.
+Discard all events on the event queue.
+Call XCheckWindowEvent.
+Verify that XCheckWindowEvent returned False.
+>>CODE
+Bool return_value;
+
+/* Create a window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XCheckWindowEvent. */
+ event_mask = ButtonPressMask;
+ _xcall_(return_value);
+/* Verify that XCheckWindowEvent returned False. */
+ if (return_value != False) {
+ report("Did not return False: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION Good A
+When a matching event is not in the event queue and
+is not available on the X server connection,
+then a call to xname
+flushes the output buffer.
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Create a window.
+Call XCheckWindowEvent.
+Verify that XCheckWindowEvent returned False.
+Empty the buffer.
+Ensure the server has dealt with anything flushed to it: do XSync()
+Verify that the output buffer was flushed by effect on server.
+>>CODE
+Bool return_value;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Create a window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Call XCheckWindowEvent. */
+ event_mask = ButtonPressMask;
+ _xcall_(return_value);
+/* Verify that XCheckWindowEvent returned False. */
+ if (return_value != False) {
+ report("Did not return False: returned %d", return_value);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Empty the buffer. */
+ (void)XTestDiscard(display);
+/* Ensure the server has dealt with anything flushed to it: do XSync() */
+ XSync(display, False);
+/* Verify that the output buffer was flushed by effect on server. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() != Success) {
+ report("The output buffer was not flushed.");
+ XFreePixmap(display, pm);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
diff --git a/xc/test/xsuite/xtest/tset/CH08/clntmssg/clntmssg.m b/xc/test/xsuite/xtest/tset/CH08/clntmssg/clntmssg.m
new file mode 100644
index 000000000..b06266a65
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/clntmssg/clntmssg.m
@@ -0,0 +1,104 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ClientMessage CH08
+>>ASSERTION Good A
+There are no assertions in sections 8.1-8.4 for xname events.
+Delivery of xname events is covered by the first test for
+.F XSendEvent .
+>>STRATEGY
+Put out a message explaining that there are no specific assertions for
+xname events in sections 8.1-8.4, and that delivery of xname events is
+covered by the first test for XSendEvent.
+>>CODE
+
+ report("There are no specific assertions for %s events in sections 8.1-8.4.", TestName);
+ report("Delivery of %s events is covered by the first test for XSendEvent.", TestName);
+ tet_result(TET_NOTINUSE);
+
+>>#NOTEm >>ASSERTION
+>>#NOTEm When the
+>>#NOTEm .M format
+>>#NOTEm field of ARTICLE xname event is not one of 8, 16, or 32,
+>>#NOTEm then a
+>>#NOTEm .S BadValue
+>>#NOTEm error occurs.
+>>#NOTEd >>ASSERTION
+>>#NOTEd >>#NOTE
+>>#NOTEd >>#NOTE Untestable?
+>>#NOTEd >>#NOTE
+>>#NOTEd The server generates xname events only when a client calls
+>>#NOTEd .F XSendEvent .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEm >>ASSERTION
+>>#NOTEm >>#NOTE
+>>#NOTEm >>#NOTE Looks like a pretty easy test (sizeof(...)).
+>>#NOTEm >>#NOTE
+>>#NOTEm The size of the
+>>#NOTEm .M b
+>>#NOTEm member of the
+>>#NOTEm .M data
+>>#NOTEm union is 20 bytes.
+>>#NOTEm >>ASSERTION
+>>#NOTEm >>#NOTE
+>>#NOTEm >>#NOTE Looks like a pretty easy test (sizeof(...)).
+>>#NOTEm >>#NOTE
+>>#NOTEm The size of the
+>>#NOTEm .M s
+>>#NOTEm member of the
+>>#NOTEm .M data
+>>#NOTEm union is 20 bytes.
+>>#NOTEm >>ASSERTION
+>>#NOTEm >>#NOTE
+>>#NOTEm >>#NOTE Looks like a pretty easy test (sizeof(...)).
+>>#NOTEm >>#NOTE
+>>#NOTEm The size of the
+>>#NOTEm .M l
+>>#NOTEm member of the
+>>#NOTEm .M data
+>>#NOTEm union is 20 bytes.
diff --git a/xc/test/xsuite/xtest/tset/CH08/clrmpntfy/clrmpntfy.m b/xc/test/xsuite/xtest/tset/CH08/clrmpntfy/clrmpntfy.m
new file mode 100644
index 000000000..1c7f675df
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/clrmpntfy/clrmpntfy.m
@@ -0,0 +1,263 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ColormapNotify CH08
+>>EXTERN
+#define EVENT ColormapNotify
+#define MASK ColormapChangeMask
+>>ASSERTION Good A
+When a xname event is generated,
+then
+all clients having set
+.S ColormapChangeMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Create window.
+Select for ColormapNotify events using ColormapChangeMask.
+Select for ColormapNotify events using ColormapChangeMask with client2.
+Select for no events with client3.
+Get visual of window.
+Create colormap.
+Generate ColormapNotify event.
+Verify that a ColormapNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that a ColormapNotify event was delivered to client2.
+Verify that event member fields are correctly set.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window w;
+int count;
+XEvent event_return;
+XColormapEvent good;
+Colormap colormap;
+XWindowAttributes attrs;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select for ColormapNotify events using ColormapChangeMask. */
+ XSelectInput(display, w, MASK);
+/* Select for ColormapNotify events using ColormapChangeMask with client2. */
+ XSelectInput(client2, w, MASK);
+/* Select for no events with client3. */
+ XSelectInput(client3, w, NoEventMask);
+/* Get visual of window. */
+ XSync(display, True);
+ if (!XGetWindowAttributes(display, w, &attrs)) {
+ report("Can't get window attributes for window 0x%x", w);
+ report("XGetWindowAttributes failed");
+ return;
+ }
+ else
+ CHECK;
+/* Create colormap. */
+ colormap = makecolmap(display, attrs.visual, AllocNone);
+/* Generate ColormapNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XSetWindowColormap(display, w, colormap);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a ColormapNotify event was delivered. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xcolormap;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.colormap = colormap;
+ good.new = True;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a ColormapNotify event was delivered to client2. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(client2, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xcolormap;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = client2;
+ good.window = w;
+ good.colormap = colormap;
+ good.new = True;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event for client2");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(8);
+>>ASSERTION def
+>>#NOTE Tested for in previous assertion.
+When a xname event is generated,
+then
+clients not having set
+.S ColormapChangeMask
+event mask bits on the event window are not delivered
+a xname event.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a client changes the colormap of a window by calling
+>>#NOTEm .F XChangeWindowAttributes ,
+>>#NOTEm .F XFreeColormap ,
+>>#NOTEm or
+>>#NOTEm .F XSetWindowColormap ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a client installs or uninstalls the colormap of a window by calling
+>>#NOTEm .F XInstallColormap
+>>#NOTEm or
+>>#NOTEm .F XUninstallColormap ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the window whose associated colormap was
+>>#NOTEs changed, installed, or uninstalled.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the colormap associated with
+>>#NOTEs .M window
+>>#NOTEs was changed by a call to
+>>#NOTEs .F XFreeColormap ,
+>>#NOTEs then
+>>#NOTEs .M colormap
+>>#NOTEs is set to
+>>#NOTEs .S None .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the colormap associated with
+>>#NOTEs .M window
+>>#NOTEs was not changed by a call to
+>>#NOTEs .F XFreeColormap ,
+>>#NOTEs then
+>>#NOTEs .M colormap
+>>#NOTEs is set to
+>>#NOTEs the changed,
+>>#NOTEs installed,
+>>#NOTEs or
+>>#NOTEs uninstalled colormap.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the colormap was changed,
+>>#NOTEs then
+>>#NOTEs .M new
+>>#NOTEs is set to
+>>#NOTEs .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the colormap was installed or uninstalled,
+>>#NOTEs then
+>>#NOTEs .M new
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the colormap was installed,
+>>#NOTEs then
+>>#NOTEs .M state
+>>#NOTEs is set to
+>>#NOTEs .S ColormapInstalled .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the colormap was uninstalled,
+>>#NOTEs then
+>>#NOTEs .M state
+>>#NOTEs is set to
+>>#NOTEs .S ColormapUninstalled .
diff --git a/xc/test/xsuite/xtest/tset/CH08/cnfgrntfy/cnfgrntfy.m b/xc/test/xsuite/xtest/tset/CH08/cnfgrntfy/cnfgrntfy.m
new file mode 100644
index 000000000..e479f21f6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/cnfgrntfy/cnfgrntfy.m
@@ -0,0 +1,510 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ConfigureNotify CH08
+>>EXTERN
+#define EVENT ConfigureNotify
+#define MASK StructureNotifyMask
+#define MASKP SubstructureNotifyMask
+>>ASSERTION Good A
+When a xname event is generated,
+then all clients having set
+.S StructureNotifyMask
+event mask bits on the reconfigured window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Build and create window hierarchy.
+Select for ConfigureNotify events using StructureNotifyMask.
+Select for ConfigureNotify events using StructureNotifyMask with client2.
+Select for no events with client3.
+Raise lowest window to top.
+Verify that a ConfigureNotify event is delivered.
+Verify that a ConfigureNotify event is delivered to client2.
+Verify that no events are delivered to client3.
+Verify that event member fields are correctly set.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Winh *parent, *eventw, *lastw;
+Winhg winhg;
+int i;
+int status;
+int numchildren = 4;
+XEvent event;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ /* can't use winh() because the windows need to overlap */
+ winhg.border_width = 1;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 100;
+ winhg.area.height = 100;
+ parent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ report("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 30;
+ winhg.area.height = 30;
+ for (i=0; i<numchildren; i++) {
+ if (!i)
+ CHECK;
+ lastw = winh_adopt(display, parent, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (lastw == (Winh *) NULL) {
+ report("Could not create child %d", i);
+ return;
+ }
+ winhg.area.x += 10;
+ winhg.area.y += 10;
+ }
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Select for ConfigureNotify events using StructureNotifyMask. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Selection with first client failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for ConfigureNotify events using StructureNotifyMask with client2. */
+ if (winh_selectinput(client2, (Winh *) NULL, MASK)) {
+ report("Selection with client2 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for no events with client3. */
+ if (winh_selectinput(client3, (Winh *) NULL, NoEventMask)) {
+ report("Selection with client3 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Raise lowest window to top. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ eventw = parent->firstchild;
+ XRaiseWindow(display, eventw->window);
+ event.xany.type = EVENT;
+ event.xany.window = eventw->window;
+ if (winh_plant(eventw, &event, MASK, WINH_NOMASK)) {
+ report("Could not plant events for eventw");
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a ConfigureNotify event is delivered. */
+/* Verify that a ConfigureNotify event is delivered to client2. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events for display");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client2, (Winh *) NULL)) {
+ report("Could not harvest events for client2");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XConfigureEvent good;
+
+/* Verify that event member fields are correctly set. */
+ good = winh_qdel->event->xconfigure;
+ good.window = good.event;
+ good.x = 1;
+ good.y = 1;
+ good.width = 30;
+ good.height = 30;
+ good.border_width = 1;
+ good.above = lastw->window;
+ if (checkevent((XEvent *) &good, winh_qdel->event)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+
+ CHECKPASS(13);
+>>ASSERTION Good A
+When a xname event is generated,
+then all clients having set
+.S SubstructureNotifyMask
+event mask bits on the parent of the reconfigured window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Build and create window hierarchy.
+Select for ConfigureNotify events using SubstructureNotifyMask.
+Select for ConfigureNotify events using SubstructureNotifyMask with client2.
+Select for no events with client3.
+Raise lowest window to top.
+Verify that a ConfigureNotify event is delivered.
+Verify that a ConfigureNotify event is delivered to client2.
+Verify that no events are delivered to client3.
+Verify that event member fields are correctly set.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Winh *parent, *eventw, *lastw;
+Winhg winhg;
+int i;
+int status;
+int numchildren = 4;
+XEvent event;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ /* can't use winh() because the windows need to overlap */
+ winhg.border_width = 1;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 100;
+ winhg.area.height = 100;
+ parent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ report("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 30;
+ winhg.area.height = 30;
+ for (i=0; i<numchildren; i++) {
+ if (!i)
+ CHECK;
+ lastw = winh_adopt(display, parent, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (lastw == (Winh *) NULL) {
+ report("Could not create child %d", i);
+ return;
+ }
+ winhg.area.x += 10;
+ winhg.area.y += 10;
+ }
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Select for ConfigureNotify events using SubstructureNotifyMask. */
+ if (winh_selectinput(display, (Winh *) NULL, MASKP)) {
+ report("Selection with first client failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for ConfigureNotify events using SubstructureNotifyMask with client2. */
+ if (winh_selectinput(client2, (Winh *) NULL, MASKP)) {
+ report("Selection with client2 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for no events with client3. */
+ if (winh_selectinput(client3, (Winh *) NULL, NoEventMask)) {
+ report("Selection with client3 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Raise lowest window to top. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ eventw = parent->firstchild;
+ XRaiseWindow(display, eventw->window);
+ event.xany.type = EVENT;
+ event.xany.window = parent->window;
+ if (winh_plant(parent, &event, MASKP, WINH_NOMASK)) {
+ report("Could not plant events for eventw");
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a ConfigureNotify event is delivered. */
+/* Verify that a ConfigureNotify event is delivered to client2. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events for display");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client2, (Winh *) NULL)) {
+ report("Could not harvest events for client2");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XConfigureEvent good;
+
+/* Verify that event member fields are correctly set. */
+ good = winh_qdel->event->xconfigure;
+ good.window = eventw->window;
+ good.x = 1;
+ good.y = 1;
+ good.width = 30;
+ good.height = 30;
+ good.border_width = 1;
+ good.above = lastw->window;
+ }
+
+ CHECKPASS(12);
+>>ASSERTION def
+>>#NOTE Tested for in previous two assertions.
+When a xname event is generated,
+then
+clients not having set
+.S StructureNotifyMask
+event mask bits on the
+reconfigured window
+and also not having set
+.S SubstructureNotifyMask
+event mask bits on the
+parent of the reconfigured window
+are not delivered
+a xname event.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window's size is changed
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XConfigureWindow ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window's position is changed
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XConfigureWindow ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window's border is changed
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XConfigureWindow ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window's stacking order is changed
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XConfigureWindow ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window's position in the stacking order is changed
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XLowerWindow ,
+>>#NOTEm .F XRaiseWindow ,
+>>#NOTEm or
+>>#NOTEm .F XRestackWindows,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window is moved
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XMoveWindow ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window's size is changed
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XResizeWindow ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window's size and location is changed
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XMoveResizeWindow ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window is mapped
+>>#NOTEm and its position in the stacking order is changed
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XMapRaised ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window's border width is changed
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XSetWindowBorderWidth ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates of
+>>#NOTEs .M window
+>>#NOTEs relative to parent window's origin
+>>#NOTEs and indicate the position of the upper-left outside corner of
+>>#NOTEs .M window .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M width
+>>#NOTEs and
+>>#NOTEs .M height
+>>#NOTEs are set to
+>>#NOTEs the
+>>#NOTEs ifdef(`REQUESTED', REQUESTED,)
+>>#NOTEs inside size of
+>>#NOTEs .M window ,
+>>#NOTEs not including the border.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M border_width
+>>#NOTEs is set to
+>>#NOTEs the width in pixels of
+>>#NOTEs .M window 's
+>>#NOTEs border.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .M window
+>>#NOTEs is on the bottom of the stack with respect to sibilings,
+>>#NOTEs then
+>>#NOTEs .M above
+>>#NOTEs is set to
+>>#NOTEs .S None .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .M window
+>>#NOTEs is not on the bottom of the stack with respect to sibilings,
+>>#NOTEs then
+>>#NOTEs .M above
+>>#NOTEs is set to
+>>#NOTEs the sibling immediately below
+>>#NOTEs .M window .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M override_redirect
+>>#NOTEs is set to the override-redirect attribute of
+>>#NOTEs .M window .
diff --git a/xc/test/xsuite/xtest/tset/CH08/cnfgrrqst/cnfgrrqst.m b/xc/test/xsuite/xtest/tset/CH08/cnfgrrqst/cnfgrrqst.m
new file mode 100644
index 000000000..44d28c061
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/cnfgrrqst/cnfgrrqst.m
@@ -0,0 +1,746 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ConfigureRequest CH08
+>>EXTERN
+#define EVENT ConfigureRequest
+#define MASK SubstructureRedirectMask
+>>ASSERTION Good A
+When a xname event is generated,
+then
+all clients having set
+.S SubstructureRedirectMask
+event mask bits on the parent of the window
+for which the configure request was issued are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Build and create window hierarchy.
+Create inferiors with override-redirect set to True.
+Select for ConfigureRequest events using SubstructureRedirectMask.
+Select for no events with client3.
+Raise lowest window to top.
+Verify that no events were delivered.
+Verify that no events were delivered to client3.
+Lower window back to original placement.
+Set the override-redirect flag on inferiors to False.
+Attempt to raise lowest window to top.
+Initialize for expected events.
+Verify that a ConfigureRequest event is delivered.
+Verify that no events are delivered to client3.
+Verify members of event structure.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2, *client3;
+Winh *parent, *child, *lastw, *winh;
+Winhg winhg;
+XEvent event;
+int i;
+int status;
+int numchildren = 4;
+int count;
+XSetWindowAttributes attrs;
+unsigned long valuemask;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ /* can't use winh() because the windows need to overlap */
+ winhg.border_width = 1;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 100;
+ winhg.area.height = 100;
+ parent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ report("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 30;
+ winhg.area.height = 30;
+/* Create inferiors with override-redirect set to True. */
+ attrs.override_redirect = True;
+ attrs.border_pixel = W_FG;
+ attrs.background_pixel = W_BG;
+ valuemask = CWOverrideRedirect | CWBorderPixel | CWBackPixel;
+ for (i=0; i<numchildren; i++) {
+ if (!i)
+ CHECK;
+ lastw = winh_adopt(display, parent, valuemask, &attrs, &winhg, WINH_NOMASK);
+ if (lastw == (Winh *) NULL) {
+ report("Could not create child %d", i);
+ return;
+ }
+ winhg.area.x += 10;
+ winhg.area.y += 10;
+ }
+ child = parent->firstchild;
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Select for ConfigureRequest events using SubstructureRedirectMask. */
+ /*
+ * Selection with a single client because only one can select
+ * for this event at a time.
+ */
+ if (winh_selectinput(display, parent, MASK)) {
+ report("Selection failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for no events with client3. */
+ if (winh_selectinput(client3, (Winh *) NULL, NoEventMask)) {
+ report("Selection with client3 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Raise lowest window to top. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XRaiseWindow(client2, child->window);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that no events were delivered. */
+ count = XPending(display);
+ if (count != 0) {
+ report("Got %d events, expected %d (with override-redirect set)", count, 0);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3 (with override-redirect set)", count, 0);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Lower window back to original placement. */
+ /*
+ * this assumes that it was raised in the first place
+ * which is not the case where the override-redirect flag is ignored
+ */
+ XLowerWindow(client2, child->window);
+ XSync(client2, True);
+/* Set the override-redirect flag on inferiors to False. */
+ attrs.override_redirect = False;
+ valuemask = CWOverrideRedirect;
+ for (winh = parent->firstchild, i=0; i<numchildren; winh = winh->nextsibling, i++) {
+ if (!i)
+ CHECK;
+ if (winh_changewindowattributes(display, winh, valuemask, &attrs)) {
+ report("Failed to change attributes for subwindow %d", i);
+ return;
+ }
+ }
+/* Attempt to raise lowest window to top. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XRaiseWindow(client2, child->window);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Initialize for expected events. */
+ event.xany.type = EVENT;
+ event.xany.window = parent->window;
+ if (winh_plant(parent, &event, MASK, WINH_NOMASK)) {
+ report("Could not plant events for parent");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that a ConfigureRequest event is delivered. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XEvent *event_return;
+ XConfigureRequestEvent good;
+
+/* Verify members of event structure. */
+ event_return = winh_qdel->event;
+ good = event_return->xconfigurerequest;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.parent = parent->window;
+ good.window = child->window;
+ good.x = child->winhg.area.x;
+ good.y = child->winhg.area.y;
+ good.width = child->winhg.area.width;
+ good.height = child->winhg.area.height;
+ good.border_width = child->winhg.border_width;
+ good.above = Above;
+ good.detail = Above;
+ good.value_mask = CWStackMode;
+ if (checkevent((XEvent *) &good, event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(15);
+>>ASSERTION def
+>>#NOTE Tested for in previous assertion.
+When a xname event is generated,
+then
+clients not having set
+.S SubstructureRedirectMask
+event mask bits on the
+parent of the window for which the configure request was issued
+are not delivered
+a xname event.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a
+>>#NOTEm .S ConfigureWindow
+>>#NOTEm protocol request is issued on a child window by another client,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is generated
+>>#NOTEm and a client has selected xname events on the child's parent
+>>#NOTEm and the override-redirect attribute of the child window is set to
+>>#NOTEm .S False ,
+>>#NOTEm then
+>>#NOTEm .M window
+>>#NOTEm is not WINDOWTYPE.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M parent
+>>#NOTEs is set to
+>>#NOTEs the parent window of
+>>#NOTEs .M window .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the child window to be WINDOWTYPE.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates of
+>>#NOTEs .M window
+>>#NOTEs relative to parent window's origin
+>>#NOTEs and indicate the position of the upper-left outside corner of
+>>#NOTEs .M window .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M width
+>>#NOTEs and
+>>#NOTEs .M height
+>>#NOTEs are set to
+>>#NOTEs the
+>>#NOTEs ifdef(`REQUESTED', REQUESTED,)
+>>#NOTEs inside size of
+>>#NOTEs .M window ,
+>>#NOTEs not including the border.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M border_width
+>>#NOTEs is set to
+>>#NOTEs the width in pixels of
+>>#NOTEs .M window 's
+>>#NOTEs border.
+>>ASSERTION Good A
+When a xname event is delivered
+and a sibling attribute was specified in the protocol request
+issued on the child window,
+then
+.M above
+is set to
+the value of the sibling attribute specified in the protocol request.
+>>STRATEGY
+Create clients client2 and client3.
+Build and create window hierarchy.
+Select for ConfigureRequest events using SubstructureRedirectMask.
+Select for no events with client3.
+Raise lowest window to just below the top window.
+Initialize for expected events.
+Verify that a ConfigureRequest event is delivered.
+Verify that no events are delivered to client3.
+Verify members of event structure.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2, *client3;
+Winh *parent, *child, *sibling;
+Winhg winhg;
+XEvent event;
+int i;
+int status;
+int numchildren = 4;
+int count;
+XWindowChanges values;
+XSetWindowAttributes attrs;
+unsigned long valuemask;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ /* can't use winh() because the windows need to overlap */
+ winhg.border_width = 1;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 100;
+ winhg.area.height = 100;
+ parent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ report("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 30;
+ winhg.area.height = 30;
+ attrs.override_redirect = False;
+ attrs.border_pixel = W_FG;
+ attrs.background_pixel = W_BG;
+ valuemask = CWOverrideRedirect | CWBorderPixel | CWBackPixel;
+ for (i=0; i<numchildren; i++) {
+ if (!i)
+ CHECK;
+ sibling = winh_adopt(display, parent, valuemask, &attrs, &winhg, WINH_NOMASK);
+ if (sibling == (Winh *) NULL) {
+ report("Could not create child %d", i);
+ return;
+ }
+ winhg.area.x += 10;
+ winhg.area.y += 10;
+ }
+ child = parent->firstchild;
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Select for ConfigureRequest events using SubstructureRedirectMask. */
+ /*
+ * Selection with a single client because only one can select
+ * for this event at a time.
+ */
+ if (winh_selectinput(display, parent, MASK)) {
+ report("Selection failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for no events with client3. */
+ if (winh_selectinput(client3, (Winh *) NULL, NoEventMask)) {
+ report("Selection with client3 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Raise lowest window to just below the top window. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ values.sibling = sibling->window;
+ values.stack_mode = Below;
+ XConfigureWindow(client2, child->window, CWSibling|CWStackMode, &values);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Initialize for expected events. */
+ event.xany.type = EVENT;
+ event.xany.window = parent->window;
+ if (winh_plant(parent, &event, MASK, WINH_NOMASK)) {
+ report("Could not plant events for parent");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that a ConfigureRequest event is delivered. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XEvent *event_return;
+ XConfigureRequestEvent good;
+
+/* Verify members of event structure. */
+ event_return = winh_qdel->event;
+ good = event_return->xconfigurerequest;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.parent = parent->window;
+ good.window = child->window;
+ good.x = child->winhg.area.x;
+ good.y = child->winhg.area.y;
+ good.width = child->winhg.area.width;
+ good.height = child->winhg.area.height;
+ good.border_width = child->winhg.border_width;
+ good.above = sibling->window;
+ good.detail = Below;
+ good.value_mask = CWSibling|CWStackMode;
+ if (checkevent((XEvent *) &good, event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(12);
+>>ASSERTION def
+>>#NOTE Tested for in first assertion.
+When a xname event is delivered
+and a sibling attribute was not specified in the protocol request
+issued on the child window,
+then
+.M above
+is set to
+.S None .
+>>ASSERTION def
+>>#NOTE Tested for in first assertion.
+When a xname event is delivered
+and a stack-mode attribute was specified in the protocol request
+issued on the child window,
+then
+.M detail
+is set to
+the value of the stack-mode attribute specified in the protocol request.
+>>ASSERTION Good A
+>>#NOTE Reviewed assertion specified "Above" instead of "None":
+>>#
+>># When a xname event is delivered
+>># and a stack-mode attribute was not specified in the protocol request
+>># issued on the child window,
+>># then
+>># .M detail
+>># is set to
+>># .S Above .
+When a xname event is delivered
+and a stack-mode attribute was not specified in the protocol request
+issued on the child window,
+then
+.M detail
+is set to
+.S None .
+>>STRATEGY
+Create clients client2 and client3.
+Build and create window hierarchy.
+Select for ConfigureRequest events using SubstructureRedirectMask.
+Select for no events with client3.
+Attempt to change window's border width.
+Initialize for expected events.
+Verify that a ConfigureRequest event is delivered.
+Verify that no events are delivered to client3.
+Verify members of event structure.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2, *client3;
+Winh *parent, *child, *sibling;
+Winhg winhg;
+XEvent event;
+int i;
+int status;
+int numchildren = 4;
+int count;
+XWindowChanges values;
+XSetWindowAttributes attrs;
+unsigned long valuemask;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ /* can't use winh() because the windows need to overlap */
+ winhg.border_width = 1;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 100;
+ winhg.area.height = 100;
+ parent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ report("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 30;
+ winhg.area.height = 30;
+ attrs.override_redirect = False;
+ attrs.border_pixel = W_FG;
+ attrs.background_pixel = W_BG;
+ valuemask = CWOverrideRedirect | CWBorderPixel | CWBackPixel;
+ for (i=0; i<numchildren; i++) {
+ if (!i)
+ CHECK;
+ sibling = winh_adopt(display, parent, valuemask, &attrs, &winhg, WINH_NOMASK);
+ if (sibling == (Winh *) NULL) {
+ report("Could not create child %d", i);
+ return;
+ }
+ winhg.area.x += 10;
+ winhg.area.y += 10;
+ }
+ child = parent->firstchild;
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Select for ConfigureRequest events using SubstructureRedirectMask. */
+ /*
+ * Selection with a single client because only one can select
+ * for this event at a time.
+ */
+ if (winh_selectinput(display, parent, MASK)) {
+ report("Selection failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for no events with client3. */
+ if (winh_selectinput(client3, (Winh *) NULL, NoEventMask)) {
+ report("Selection with client3 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Attempt to change window's border width. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ child->winhg.border_width += 5;
+ XSetWindowBorderWidth(client2, child->window, child->winhg.border_width);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Initialize for expected events. */
+ event.xany.type = EVENT;
+ event.xany.window = parent->window;
+ if (winh_plant(parent, &event, MASK, WINH_NOMASK)) {
+ report("Could not plant events for parent");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that a ConfigureRequest event is delivered. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XEvent *event_return;
+ XConfigureRequestEvent good;
+
+/* Verify members of event structure. */
+ event_return = winh_qdel->event;
+ good = event_return->xconfigurerequest;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.parent = parent->window;
+ good.window = child->window;
+ good.x = child->winhg.area.x;
+ good.y = child->winhg.area.y;
+ good.width = child->winhg.area.width;
+ good.height = child->winhg.area.height;
+ good.border_width = child->winhg.border_width;
+ good.above = Above;
+ good.detail = None;
+ good.value_mask = CWBorderWidth;
+ if (checkevent((XEvent *) &good, event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(12);
+>>ASSERTION def
+>>#NOTE Tested for in first assertion.
+When a xname event is delivered,
+then
+.M value_mask
+is set to
+the components specified in the protocol request.
diff --git a/xc/test/xsuite/xtest/tset/CH08/crcltntfy/crcltntfy.m b/xc/test/xsuite/xtest/tset/CH08/crcltntfy/crcltntfy.m
new file mode 100644
index 000000000..843b6ed69
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/crcltntfy/crcltntfy.m
@@ -0,0 +1,507 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CirculateNotify CH08
+>>EXTERN
+#define EVENT CirculateNotify
+#define MASK StructureNotifyMask
+#define MASKP SubstructureNotifyMask
+>>ASSERTION Good A
+When a xname event is generated,
+then all clients having set
+.S StructureNotifyMask
+event mask bits on the restacked window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Build and create window hierarchy.
+Select for CirculateNotify events using StructureNotifyMask.
+Select for CirculateNotify events using StructureNotifyMask with client2.
+Select for no events with client3.
+Circulate lowest window to top.
+Verify that a CirculateNotify event is delivered.
+Verify that a CirculateNotify event is delivered to client2.
+Verify that no events are delivered to client3.
+Verify that, in the delivered event corresponding to the restacked
+window which is now on top of all siblings, place is set to PlaceOnTop.
+Circulate top window to bottom.
+Verify that CirculateNotify events are delivered.
+Verify that CirculateNotify events are delivered to client2.
+Verify that no events are delivered to client3.
+Verify that, in the delivered event corresponding to the restacked
+window which is now on below all siblings, place is set to PlaceOnBottom.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Winh *parent, *eventw, *winh;
+Winhg winhg;
+int i;
+int status;
+int numchildren = 4;
+XEvent event;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ /* can't use winh() because the windows need to overlap */
+ winhg.border_width = 1;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 100;
+ winhg.area.height = 100;
+ parent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ report("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 30;
+ winhg.area.height = 30;
+ for (i=0; i<numchildren; i++) {
+ if (!i)
+ CHECK;
+ winh = winh_adopt(display, parent, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (winh == (Winh *) NULL) {
+ report("Could not create child %d", i);
+ return;
+ }
+ winhg.area.x += 10;
+ winhg.area.y += 10;
+ }
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Select for CirculateNotify events using StructureNotifyMask. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Selection with first client failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for CirculateNotify events using StructureNotifyMask with client2. */
+ if (winh_selectinput(client2, (Winh *) NULL, MASK)) {
+ report("Selection with client2 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for no events with client3. */
+ if (winh_selectinput(client3, (Winh *) NULL, NoEventMask)) {
+ report("Selection with client3 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Circulate lowest window to top. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XCirculateSubwindows(display, parent->window, RaiseLowest);
+ eventw = parent->firstchild;
+ event.xany.type = EVENT;
+ event.xany.window = eventw->window;
+ if (winh_plant(eventw, &event, MASK, WINH_NOMASK)) {
+ report("Could not plant events for eventw");
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a CirculateNotify event is delivered. */
+/* Verify that a CirculateNotify event is delivered to client2. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events for display");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client2, (Winh *) NULL)) {
+ report("Could not harvest events for client2");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XCirculateEvent *e;
+
+/* Verify that, in the delivered event corresponding to the restacked */
+/* window which is now on top of all siblings, place is set to PlaceOnTop. */
+ e = &(winh_qdel->event->xcirculate);
+ if (e->place != PlaceOnTop) {
+ report("Got %d value for place, expected PlaceOnTop (%d)",
+ e->place, PlaceOnTop);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+/* Circulate top window to bottom. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XCirculateSubwindows(display, parent->window, LowerHighest);
+ if (winh_plant(eventw, &event, MASK, WINH_NOMASK)) {
+ report("Could not plant events for eventw");
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that CirculateNotify events are delivered. */
+/* Verify that CirculateNotify events are delivered to client2. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events for display");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client2, (Winh *) NULL)) {
+ report("Could not harvest events for client2");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XCirculateEvent *e;
+
+/* Verify that, in the delivered event corresponding to the restacked */
+/* window which is now on below all siblings, place is set to PlaceOnBottom. */
+ e = &(winh_qdel->event->xcirculate);
+ if (e->place != PlaceOnBottom) {
+ report("Got %d value for place, expected PlaceOnBottom (%d)",
+ e->place, PlaceOnBottom);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+
+ CHECKPASS(18);
+>>ASSERTION Good A
+When a xname event is generated,
+then all clients having set
+.S SubstructureNotifyMask
+event mask bits on the parent of the restacked window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Build and create window hierarchy.
+Select for CirculateNotify events using SubstructureNotifyMask.
+Select for CirculateNotify events using SubstructureNotifyMask with client2.
+Select for no events with client3.
+Circulate lowest window to top.
+Verify that a CirculateNotify event is delivered.
+Verify that a CirculateNotify event is delivered to client2.
+Verify that no events are delivered to client3.
+Verify that, in the delivered event corresponding to the restacked
+window which is now on top of all siblings, place is set to PlaceOnTop.
+Verify that window member is set to restacked window.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Winh *parent, *eventw, *winh;
+Winhg winhg;
+int i;
+int status;
+int numchildren = 4;
+XEvent event;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ /* can't use winh() because the windows need to overlap */
+ winhg.border_width = 1;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 100;
+ winhg.area.height = 100;
+ parent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ report("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 30;
+ winhg.area.height = 30;
+ for (i=0; i<numchildren; i++) {
+ if (!i)
+ CHECK;
+ winh = winh_adopt(display, parent, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (winh == (Winh *) NULL) {
+ report("Could not create child %d", i);
+ return;
+ }
+ winhg.area.x += 10;
+ winhg.area.y += 10;
+ }
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Select for CirculateNotify events using SubstructureNotifyMask. */
+ if (winh_selectinput(display, (Winh *) NULL, MASKP)) {
+ report("Selection with first client failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for CirculateNotify events using SubstructureNotifyMask with client2. */
+ if (winh_selectinput(client2, (Winh *) NULL, MASKP)) {
+ report("Selection with client2 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for no events with client3. */
+ if (winh_selectinput(client3, (Winh *) NULL, NoEventMask)) {
+ report("Selection with client3 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Circulate lowest window to top. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XCirculateSubwindows(display, parent->window, RaiseLowest);
+ eventw = parent->firstchild;
+ event.xany.type = EVENT;
+ event.xany.window = parent->window;
+ if (winh_plant(parent, &event, MASKP, WINH_NOMASK)) {
+ report("Could not plant events for eventw");
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a CirculateNotify event is delivered. */
+/* Verify that a CirculateNotify event is delivered to client2. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events for display");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client2, (Winh *) NULL)) {
+ report("Could not harvest events for client2");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XCirculateEvent *e;
+
+/* Verify that, in the delivered event corresponding to the restacked */
+/* window which is now on top of all siblings, place is set to PlaceOnTop. */
+ e = &(winh_qdel->event->xcirculate);
+ if (e->place != PlaceOnTop) {
+ report("Got %d value for place, expected PlaceOnTop (%d)",
+ e->place, PlaceOnTop);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that window member is set to restacked window. */
+ if (e->window != eventw->window) {
+ report("Got 0x%x value for window, expected 0x%x",
+ e->window, eventw->window);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+
+ CHECKPASS(14);
+>>ASSERTION def
+>>#NOTE Tested for in two previous assertions.
+When a xname event is generated,
+then
+clients not having set
+.S StructureNotifyMask
+event mask bits on the
+restacked window
+and also not having set
+.S SubstructureNotifyMask
+event mask bits on the
+parent of the restacked window
+are not delivered
+a xname event.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window is restacked as a result of a call to
+>>#NOTEm .F XCirculateSubwindows ,
+>>#NOTEm .F XCirculateSubwindowsUp ,
+>>#NOTEm or
+>>#NOTEm .F XCirculateSubwindowsDown ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .S StructureNotify
+>>#NOTEs was selected,
+>>#NOTEs then
+>>#NOTEs .M event
+>>#NOTEs is set to
+>>#NOTEs the WINDOWTYPE window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .S SubstructureNotify
+>>#NOTEs was selected,
+>>#NOTEs then
+>>#NOTEs .M event
+>>#NOTEs is set to
+>>#NOTEs the WINDOWTYPE window's parent.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the restacked window is now on top of all siblings,
+>>#NOTEs then
+>>#NOTEs .M place
+>>#NOTEs is set to
+>>#NOTEs .S PlaceOnTop .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the restacked window is now below all siblings,
+>>#NOTEs then
+>>#NOTEs .M place
+>>#NOTEs is set to
+>>#NOTEs .S PlaceOnBottom .
diff --git a/xc/test/xsuite/xtest/tset/CH08/crcltrqst/crcltrqst.m b/xc/test/xsuite/xtest/tset/CH08/crcltrqst/crcltrqst.m
new file mode 100644
index 000000000..2e29060d3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/crcltrqst/crcltrqst.m
@@ -0,0 +1,365 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CirculateRequest CH08
+>>EXTERN
+#define EVENT CirculateRequest
+#define MASK SubstructureRedirectMask
+>>ASSERTION Good A
+When a xname event is generated,
+then
+all clients having set
+.S SubstructureRedirectMask
+event mask bits on the parent of the window
+for which the circulate request was issued are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Build and create window hierarchy.
+Create inferiors with override-redirect set to True.
+Change one inferior's override-redirect attribute to False.
+Select for CirculateRequest events using SubstructureRedirectMask.
+Select for no events with client3.
+Circulate lowest window to top.
+Initialize for expected events.
+Verify that a CirculateRequest event is delivered.
+Verify that no events are delivered to client3.
+Verify members of event structure.
+Verify that no events were delivered to client3.
+Circulate highest window (override-redirect set to False) to bottom.
+Initialize for expected events.
+Verify that a CirculateRequest event is delivered.
+Verify that no events are delivered to client3.
+Verify members of event structure.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2, *client3;
+Winh *parent, *lastw, *winh;
+Winhg winhg;
+XEvent event;
+int i;
+int status;
+int numchildren = 4;
+int count;
+XSetWindowAttributes attrs;
+unsigned long valuemask;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ /* can't use winh() because the windows need to overlap */
+ winhg.border_width = 1;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 100;
+ winhg.area.height = 100;
+ parent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ report("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 30;
+ winhg.area.height = 30;
+/* Create inferiors with override-redirect set to True. */
+ attrs.override_redirect = True;
+ attrs.border_pixel = W_FG;
+ attrs.background_pixel = W_BG;
+ valuemask = CWOverrideRedirect | CWBorderPixel | CWBackPixel;
+ for (i=0; i<numchildren; i++) {
+ if (!i)
+ CHECK;
+ lastw = winh_adopt(display, parent, valuemask, &attrs, &winhg, WINH_NOMASK);
+ if (lastw == (Winh *) NULL) {
+ report("Could not create child %d", i);
+ return;
+ }
+ winhg.area.x += 10;
+ winhg.area.y += 10;
+ }
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Change one inferior's override-redirect attribute to False. */
+ attrs.override_redirect = False;
+ valuemask = CWOverrideRedirect;
+ if (winh_changewindowattributes(display, lastw, valuemask, &attrs)) {
+ report("Failed to change attribute for subwindow");
+ return;
+ }
+/* Select for CirculateRequest events using SubstructureRedirectMask. */
+ /*
+ * Selection with a single client because only one can select
+ * for this event at a time.
+ */
+ if (winh_selectinput(display, parent, MASK)) {
+ report("Selection failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for no events with client3. */
+ if (winh_selectinput(client3, (Winh *) NULL, NoEventMask)) {
+ report("Selection with client3 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Circulate lowest window to top. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XCirculateSubwindows(client2, parent->window, RaiseLowest);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Initialize for expected events. */
+ event.xany.type = EVENT;
+ event.xany.window = parent->window;
+ if (winh_plant(parent, &event, MASK, WINH_NOMASK)) {
+ report("Could not plant events for parent");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that a CirculateRequest event is delivered. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XEvent *event_return;
+ XCirculateRequestEvent good;
+
+/* Verify members of event structure. */
+ event_return = winh_qdel->event;
+ good = event_return->xcirculaterequest;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.parent = parent->window;
+ good.window = parent->firstchild->window;
+ good.place = PlaceOnTop;
+ if (checkevent((XEvent *) &good, event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Circulate highest window (override-redirect set to False) to bottom. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XCirculateSubwindows(client2, parent->window, LowerHighest);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Initialize for expected events. */
+ event.xany.type = EVENT;
+ event.xany.window = parent->window;
+ if (winh_plant(parent, &event, MASK, WINH_NOMASK)) {
+ report("Could not plant events for parent");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that a CirculateRequest event is delivered. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XEvent *event_return;
+ XCirculateRequestEvent good;
+
+/* Verify members of event structure. */
+ event_return = winh_qdel->event;
+ good = event_return->xcirculaterequest;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.parent = parent->window;
+ good.window = lastw->window;
+ good.place = PlaceOnBottom;
+ if (checkevent((XEvent *) &good, event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(17);
+>>ASSERTION def
+>>#NOTE Tested for in previous test.
+When a xname event is generated,
+then
+clients not having set
+.S SubstructureRedirectMask
+event mask bits on the event window are not delivered
+a xname event.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a client calls
+>>#NOTEm .F XCirculateSubwindows ,
+>>#NOTEm .F XCirculateSubwindowsUp ,
+>>#NOTEm or
+>>#NOTEm .F XCirculateSubwindowsDown
+>>#NOTEm and a subwindow actually needs to be restacked,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is generated
+>>#NOTEm and a client has selected xname events on the child's parent
+>>#NOTEm and the override-redirect attribute of the child window is set to
+>>#NOTEm .S False ,
+>>#NOTEm then
+>>#NOTEm .M window
+>>#NOTEm is not WINDOWTYPE.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M parent
+>>#NOTEs is set to
+>>#NOTEs the parent window of
+>>#NOTEs .M window .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the child window to be WINDOWTYPE.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the new position of
+>>#NOTEs .M window
+>>#NOTEs should be on top of all siblings,
+>>#NOTEs then
+>>#NOTEs .M place
+>>#NOTEs is set to
+>>#NOTEs .S PlaceOnTop .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the new position of
+>>#NOTEs .M window
+>>#NOTEs should be below all siblings,
+>>#NOTEs then
+>>#NOTEs .M place
+>>#NOTEs is set to
+>>#NOTEs .S PlaceOnBottom .
diff --git a/xc/test/xsuite/xtest/tset/CH08/crtntfy/crtntfy.m b/xc/test/xsuite/xtest/tset/CH08/crtntfy/crtntfy.m
new file mode 100644
index 000000000..bdcc28c0c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/crtntfy/crtntfy.m
@@ -0,0 +1,243 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CreateNotify CH08
+>>EXTERN
+#define EVENT CreateNotify
+#define MASK SubstructureNotifyMask
+>>ASSERTION Good A
+When a xname event is generated,
+then all clients having set
+.S SubstructureNotifyMask
+event mask bits on the parent of the created window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Create parent window.
+Select for CreateNotify events using StructureNotifyMask.
+Select for CreateNotify events using StructureNotifyMask with client2.
+Select for no events with client3.
+Generate CreateNotify event.
+Verify that a CreateNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that a CreateNotify event was delivered to client2.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window parent, child;
+int count;
+XEvent event_return;
+XCreateWindowEvent good;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Create parent window. */
+ parent = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select for CreateNotify events using StructureNotifyMask. */
+ XSelectInput(display, parent, MASK);
+/* Select for CreateNotify events using StructureNotifyMask with client2. */
+ XSelectInput(client2, parent, MASK);
+/* Select for no events with client3. */
+ XSelectInput(client3, parent, NoEventMask);
+/* Generate CreateNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ child = mkwinchild(display, (XVisualInfo *) NULL, (struct area *) NULL, False, parent, 1);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a CreateNotify event was delivered. */
+/* Verify that event member fields are correctly set. */
+ count = XPending(display);
+ if (count != 1) {
+ report("Got %d events, expected %d", count, 1);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(display, &event_return);
+ good = event_return.xcreatewindow;
+ good.type = EVENT;
+ good.parent = parent;
+ good.window = child;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a CreateNotify event was delivered to client2. */
+ count = XPending(client2);
+ if (count != 1) {
+ report("Got %d events, expected %d for client2", count, 1);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(client2, &event_return);
+ good = event_return.xcreatewindow;
+ good.type = EVENT;
+ good.parent = parent;
+ good.window = child;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event to client2");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(7);
+>>ASSERTION def
+>>#NOTE Tested for in previous assertion.
+When a xname event is generated,
+then
+clients not having set
+.S SubstructureNotifyMask
+event mask bits on the event window are not delivered
+a xname event.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window is created
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XCreateWindow
+>>#NOTEm or
+>>#NOTEm .F XCreateSimpleWindow ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M parent
+>>#NOTEs is set to
+>>#NOTEs the parent window of
+>>#NOTEs .M window .
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates of
+>>#NOTEs .M window
+>>#NOTEs relative to parent window's origin
+>>#NOTEs and indicate the position of the upper-left outside corner of
+>>#NOTEs .M window .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M width
+>>#NOTEs and
+>>#NOTEs .M height
+>>#NOTEs are set to
+>>#NOTEs the
+>>#NOTEs ifdef(`REQUESTED', REQUESTED,)
+>>#NOTEs inside size of
+>>#NOTEs .M window ,
+>>#NOTEs not including the border.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs then
+>>#NOTEs .M width
+>>#NOTEs and
+>>#NOTEs .M height
+>>#NOTEs are always non-zero.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M border_width
+>>#NOTEs is set to
+>>#NOTEs the width in pixels of
+>>#NOTEs .M window 's
+>>#NOTEs border.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M override_redirect
+>>#NOTEs is set to the override-redirect attribute of
+>>#NOTEs .M window .
diff --git a/xc/test/xsuite/xtest/tset/CH08/dsplymtnbf/dsplymtnbf.m b/xc/test/xsuite/xtest/tset/CH08/dsplymtnbf/dsplymtnbf.m
new file mode 100644
index 000000000..a3b30148e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/dsplymtnbf/dsplymtnbf.m
@@ -0,0 +1,84 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDisplayMotionBufferSize CH08
+unsigned long
+XDisplayMotionBufferSize(display)
+Display *display = Dsp;
+>>EXTERN
+#include <stdio.h>
+>>ASSERTION Good C
+If
+the implementation supports a more complete
+history of pointer motion than is reported by event notification:
+a call to xname
+returns the approximate maximum number of elements in the motion buffer.
+>>STRATEGY
+If motion buffer not supported, call UNSUPPORTED.
+Call XDisplayMotionBufferSize.
+Verify value returned by XDisplayMotionBufferSize.
+>>CODE
+unsigned long bufsize;
+
+/* If motion buffer not supported, call UNSUPPORTED. */
+ if (config.displaymotionbuffersize == 0) {
+ report("Motion buffer not supported.");
+ UNSUPPORTED;
+ return;
+ }
+ else
+ CHECK;
+/* Call XDisplayMotionBufferSize. */
+ bufsize = XCALL;
+/* Verify value returned by XDisplayMotionBufferSize. */
+ if (bufsize != config.displaymotionbuffersize) {
+ report("Returned %d, expected %d", bufsize, config.displaymotionbuffersize);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
+>>ASSERTION Good C
+If
+the implementation does not support a more complete
+history of pointer motion than is reported by event notification:
+a call to xname
+returns zero.
+>>STRATEGY
+If motion buffer supported, call UNSUPPORTED.
+Call XDisplayMotionBufferSize.
+Verify value returned by XDisplayMotionBufferSize.
+>>CODE
+unsigned long bufsize;
+
+/* If motion buffer supported, call UNSUPPORTED. */
+ if (config.displaymotionbuffersize != 0) {
+ report("Motion buffer supported.");
+ UNSUPPORTED;
+ return;
+ }
+ else
+ CHECK;
+/* Call XDisplayMotionBufferSize. */
+ bufsize = XCALL;
+/* Verify value returned by XDisplayMotionBufferSize. */
+ if (bufsize != 0) {
+ report("Returned %d, expected %d", bufsize, 0);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH08/dsplynm/Test1.c b/xc/test/xsuite/xtest/tset/CH08/dsplynm/Test1.c
new file mode 100644
index 000000000..91d8f8c33
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/dsplynm/Test1.c
@@ -0,0 +1,88 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include <stdlib.h>
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+
+extern Display *Dsp;
+
+/*
+ * Dummy declarations which are normally inserted by mc.
+ * Needed to prevent linkstart.c being included.
+ */
+char *TestName = "XDisplayName";
+char *string = "TestString:0.0";
+int tet_thistest;
+struct tet_testlist tet_testlist[] = {
+ NULL, 0
+};
+int ntests = sizeof(tet_testlist)/sizeof(struct tet_testlist)-1;
+
+tet_main(argc, argv, envp)
+int argc;
+char *argv[];
+char *envp[];
+{
+int pass = 0, fail = 0;
+char *res_name;
+char *dispstr;
+char *rdispstr;
+Display *display;
+char *str;
+
+ exec_startup();
+ tpstartup();
+ trace("Exec'd file ./Test1.");
+
+ str = XDisplayName(string);
+
+ if(strcmp(string, str) != 0) {
+ report("%s() returned \"%s\" instead of \"%s\".", TestName, str, string);
+ FAIL;
+ } else
+ CHECK;
+
+ if((dispstr = getenv("DISPLAY")) == (char *) NULL) {
+ delete("Environment variable DISPLAY is not set.");
+ return;
+ } else
+ CHECK;
+
+ rdispstr = XDisplayName((char *) NULL);
+
+ if(rdispstr == (char *) NULL) {
+ report("%s() returned NULL.", TestName);
+ FAIL;
+ } else {
+ CHECK;
+ if(strcmp(rdispstr, dispstr) != 0) {
+ report("%s() returned \"%s\" instead of \"%s\".", TestName, rdispstr, dispstr);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(4);
+ tpcleanup();
+ exec_cleanup();
+}
diff --git a/xc/test/xsuite/xtest/tset/CH08/dsplynm/dsplynm.m b/xc/test/xsuite/xtest/tset/CH08/dsplynm/dsplynm.m
new file mode 100644
index 000000000..dab04d3ab
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/dsplynm/dsplynm.m
@@ -0,0 +1,107 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDisplayName CH08
+char *
+XDisplayName(string)
+char *string;
+>>MAKE
+>>#
+>>#
+>># Plant some rules in the Makefile to construct
+>># stand-alone executable Test1 to allow the setting
+>># of environment variables.
+>>#
+>># Cal 22/6/91
+>>#
+#
+# The following lines are copied from the .m file by mc
+# under control of the >>MAKE directive
+# to create rules for the executable file Test1.
+#
+AUXFILES=Test1
+AUXCLEAN=Test1.o Test1
+
+all: Test
+
+Test1 : Test1.o $(LIBS) $(TCMCHILD)
+ $(CC) $(LDFLAGS) -o $@ Test1.o $(TCMCHILD) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+#
+# End of section copied from the .m file.
+#
+>>ASSERTION Good B 1
+A call to xname returns a pointer to the display name that
+.F XOpenDisplay
+would attempt to use when passed
+.A string
+as an argument.
+>>STRATEGY
+Fork a child process using tet_fork.
+In child :
+ Exec the file "./Test1" with the environment variable DISPLAY set to
+ the value of XT_DISPLAY config variable.
+ In Test1:
+ Call xname with string set to TestString:0.0
+ Verify that the call returned a pointer to TestString:0.0
+ Obtain the value of the DISPLAY environment variable.
+ Call xname with string set to NULL.
+ Verify that the DISPLAY variable value is identical to the string
+ returned by xname.
+>>CODE
+
+ if(config.posix_system == 0) {
+ untested("This assertion can only be tested on a POSIX system.");
+ } else
+ tet_fork(t001exec, TET_NULLFP, 0, 0xFF);
+
+>>EXTERN
+extern char **environ;
+
+static void
+t001exec()
+{
+char *argv[2];
+char *str;
+char *dstr;
+char *mstr = "DISPLAY=%s";
+int pass = 0, fail = 0;
+
+ if((dstr = tet_getvar("XT_DISPLAY")) == (char *) NULL) {
+ delete("XT_DISPLAY configuration variable is not defined.");
+ return;
+ }
+
+ if((str = (char *) malloc( strlen(dstr) + strlen(mstr) + 1)) == (char *) NULL) {
+ delete("malloc() failed.");
+ return;
+ }
+
+ sprintf(str, mstr, dstr);
+
+ argv[0] = "./Test1";
+ argv[1] = (char *) NULL;
+
+ if (xtest_putenv( str ) ) {
+ delete("xtest_putenv failed");
+ return;
+ }
+
+ (void) tet_exec("./Test1", argv, environ);
+
+ delete("Exec of file ./Test1 failed");
+ free( (char *) str);
+}
diff --git a/xc/test/xsuite/xtest/tset/CH08/dstryntfy/dstryntfy.m b/xc/test/xsuite/xtest/tset/CH08/dstryntfy/dstryntfy.m
new file mode 100644
index 000000000..8431c4202
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/dstryntfy/dstryntfy.m
@@ -0,0 +1,329 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE DestroyNotify CH08
+>>EXTERN
+#define EVENT DestroyNotify
+#define MASK StructureNotifyMask
+#define MASKP SubstructureNotifyMask
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is generated for a particular window,
+>>#NOTEm then ARTICLE xname event will not be generated for
+>>#NOTEm any inferiors of this window.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window is destroyed
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XDestroyWindow
+>>#NOTEm or
+>>#NOTEm .F XDestroySubwindows ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>ASSERTION Good A
+When a xname event is generated,
+then all clients having set
+.S StructureNotifyMask
+event mask bits on the destroyed window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Create window.
+Select for DestroyNotify events using StructureNotifyMask.
+Select for DestroyNotify events using StructureNotifyMask with client2.
+Select for no events with client3.
+Generate DestroyNotify event.
+Verify that a DestroyNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that a DestroyNotify event was delivered to client2.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window w;
+int count;
+XEvent event_return;
+XDestroyWindowEvent good;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window. */
+ w = XCreateSimpleWindow(display, DRW(display), 1, 1, W_STDWIDTH, W_STDHEIGHT, 1, 0L, 0L);
+/* Select for DestroyNotify events using StructureNotifyMask. */
+ XSelectInput(display, w, MASK);
+/* Select for DestroyNotify events using StructureNotifyMask with client2. */
+ XSelectInput(client2, w, MASK);
+/* Select for no events with client3. */
+ XSelectInput(client3, w, NoEventMask);
+/* Generate DestroyNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XDestroyWindow(display, w);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a DestroyNotify event was delivered. */
+/* Verify that event member fields are correctly set. */
+ count = XPending(display);
+ if (count != 1) {
+ report("Got %d events, expected %d", count, 1);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(display, &event_return);
+ good = event_return.xdestroywindow;
+ good.type = EVENT;
+ good.event = w;
+ good.window = w;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a DestroyNotify event was delivered to client2. */
+ count = XPending(client2);
+ if (count != 1) {
+ report("Got %d events, expected %d for client2", count, 1);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(client2, &event_return);
+ good = event_return.xdestroywindow;
+ good.type = EVENT;
+ good.event = w;
+ good.window = w;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event to client2");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(7);
+>>ASSERTION Good A
+When a xname event is generated,
+then all clients having set
+.S SubstructureNotifyMask
+event mask bits on the parent of the destroyed window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Create parent window.
+Create window.
+Select for DestroyNotify events using SubstructureNotifyMask.
+Select for DestroyNotify events using SubstructureNotifyMask with client2.
+Select for no events with client3.
+Generate DestroyNotify event.
+Verify that a DestroyNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that a DestroyNotify event was delivered to client2.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window parent, w;
+int count;
+XEvent event_return;
+XDestroyWindowEvent good;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Create parent window. */
+ parent = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Create window. */
+ w = XCreateSimpleWindow(display, parent, 1, 1, W_STDWIDTH, W_STDHEIGHT, 1, 0L, 0L);
+/* Select for DestroyNotify events using SubstructureNotifyMask. */
+ XSelectInput(display, parent, MASKP);
+/* Select for DestroyNotify events using SubstructureNotifyMask with client2. */
+ XSelectInput(client2, parent, MASKP);
+/* Select for no events with client3. */
+ XSelectInput(client3, parent, NoEventMask);
+/* Generate DestroyNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XDestroyWindow(display, w);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a DestroyNotify event was delivered. */
+/* Verify that event member fields are correctly set. */
+ count = XPending(display);
+ if (count != 1) {
+ report("Got %d events, expected %d", count, 1);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(display, &event_return);
+ good = event_return.xdestroywindow;
+ good.type = EVENT;
+ good.event = parent;
+ good.window = w;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a DestroyNotify event was delivered to client2. */
+ count = XPending(client2);
+ if (count != 1) {
+ report("Got %d events, expected %d for client2", count, 1);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(client2, &event_return);
+ good = event_return.xdestroywindow;
+ good.type = EVENT;
+ good.event = parent;
+ good.window = w;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event to client2");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(7);
+>>ASSERTION def
+>>#NOTE Tested for in previous two assertions.
+When a xname event is generated,
+then
+clients not having set
+.S StructureNotifyMask
+event mask bits on the
+destroyed window
+and also not having set
+.S SubstructureNotifyMask
+event mask bits on the
+parent of the destroyed window
+are not delivered
+a xname event.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .S StructureNotify
+>>#NOTEs was selected,
+>>#NOTEs then
+>>#NOTEs .M event
+>>#NOTEs is set to
+>>#NOTEs the WINDOWTYPE window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .S SubstructureNotify
+>>#NOTEs was selected,
+>>#NOTEs then
+>>#NOTEs .M event
+>>#NOTEs is set to
+>>#NOTEs the WINDOWTYPE window's parent.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
diff --git a/xc/test/xsuite/xtest/tset/CH08/entrntfy/entrntfy.m b/xc/test/xsuite/xtest/tset/CH08/entrntfy/entrntfy.m
new file mode 100644
index 000000000..9cb099013
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/entrntfy/entrntfy.m
@@ -0,0 +1,1493 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE EnterNotify CH08
+>>EXTERN
+#define EVENT EnterNotify
+#define OTHEREVENT LeaveNotify
+#define MASK EnterWindowMask
+#define OTHERMASK LeaveWindowMask
+#define BOTHMASKS (MASK|OTHERMASK)
+#define EVENTMASK MASK
+#define OTHEREVENTMASK LeaveWindowMask
+
+static int _detail_;
+static XEvent good;
+
+static int
+plant(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+ winh_free(previous);
+#endif
+ good.xany.window = current->window;
+ return(winh_plant(current, &good, NoEventMask, WINH_NOMASK));
+}
+
+static Bool increasing; /* event sequence increases as we climb */
+
+static int
+checksequence(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+ Winhe *d;
+ int current_sequence;
+ int status;
+ static int last_sequence;
+
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+#endif
+ /* look for desired event type */
+ for (d = current->delivered; d != (Winhe *) NULL; d = d->next) {
+ if (d->event->type == good.type) {
+ current_sequence = d->sequence;
+ break;
+ }
+ }
+ if (d == (Winhe *) NULL) {
+ report("%s event not delivered", eventname(good.type));
+ delete("Missing event");
+ return(-1);
+ }
+ if (previous == (Winh *) NULL)
+ status = 0; /* first call, no previous sequence value */
+ else {
+ /* assume sequence numbers are not the same */
+ status = (current_sequence < last_sequence);
+ if (increasing)
+ status = (status ? 0 : 1);
+ if (status)
+ report("Ordering problem between 0x%x (%d) and 0x%x (%d)",
+ current->window, current_sequence,
+ previous->window, last_sequence);
+ }
+ last_sequence = current_sequence;
+ return(status);
+}
+
+static int
+checkdetail(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+ Winhe *d;
+
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+ winh_free(previous);
+#endif
+ /* look for desired event type */
+ for (d = current->delivered; d != (Winhe *) NULL; d = d->next)
+ if (d->event->type == good.type)
+ break;
+ if (d == (Winhe *) NULL) {
+ report("%s event not delivered to window 0x%x",
+ eventname(good.type), current->window);
+ delete("Missing event");
+ return(-1);
+ }
+ /* check detail */
+ if (_detail_ != d->event->xcrossing.detail) {
+ report("Expected detail of %d, got %d on window 0x%x",
+ _detail_, d->event->xcrossing.detail, current->window);
+ return(1);
+ }
+ return(0);
+}
+>>ASSERTION Good A
+>>#NOTE
+>>#NOTE Hierarchy events are:
+>>#NOTE UnmapNotify,
+>>#NOTE MapNotify,
+>>#NOTE ConfigureNotify,
+>>#NOTE GravityNotify, and
+>>#NOTE CirculateNotify.
+>>#NOTE
+When an xname event is generated by a hierarchy change,
+then the xname event is delivered after any hierarchy event.
+>>STRATEGY
+Create client2.
+Create window1.
+Create window2 on top of window1.
+Select for xname events on window1.
+Select for xname events on window1 with client2.
+Select for UnmapNotify events on window2.
+Move pointer to window2.
+Call XUnmapWindow on window2.
+Verify that UnmapNotify event was received on window2.
+Verify that xname event was received on window1.
+Verify that xname event was received on window1 by client2.
+Verify that pointer has remained where it was moved.
+>>CODE
+int i;
+Display *display = Dsp;
+Display *client2;
+Window w1, w2;
+XEvent event;
+struct area area;
+PointerPlace *warp;
+
+/* Create client2. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window1. */
+ area.x = 0;
+ area.y = 0;
+ area.width = W_STDWIDTH;
+ area.height = W_STDHEIGHT;
+ w1 = mkwin(display, (XVisualInfo *) NULL, &area, True);
+/* Create window2 on top of window1. */
+ w2 = mkwin(display, (XVisualInfo *) NULL, &area, True);
+/* Select for xname events on window1. */
+ XSelectInput(display, w1, MASK);
+/* Select for xname events on window1 with client2. */
+ XSelectInput(client2, w1, MASK);
+/* Select for UnmapNotify events on window2. */
+ XSelectInput(display, w2, StructureNotifyMask);
+/* Move pointer to window2. */
+ warp = warppointer(display, w2, 0, 0);
+ if (warp == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+ XSync(display, True);
+ XSync(client2, True);
+/* Call XUnmapWindow on window2. */
+ XUnmapWindow(display, w2);
+ XSync(display, False);
+ XSync(client2, False);
+/* Verify that UnmapNotify event was received on window2. */
+ if (XPending(display) < 1) {
+ report("Expected UnmapNotify event not delivered.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(display, &event);
+ if (event.type != UnmapNotify) {
+ report("Expected %s, got %s", eventname(UnmapNotify), eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that xname event was received on window1. */
+ if (XPending(display) < 1) {
+ report("Expected %s event not delivered.", TestName);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(display, &event);
+ if (event.type != EVENT) {
+ report("Expected %s, got %s", eventname(EVENT), eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+ if ((i = XPending(display)) > 0) {
+ report("Expected 2 events, got %d", i+2);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that xname event was received on window1 by client2. */
+ if (XPending(client2) < 1) {
+ report("Expected %s event not delivered to client2.", TestName);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(client2, &event);
+ if (event.type != EVENT) {
+ report("Expected %s, got %s with client2", eventname(EVENT), eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+ if ((i = XPending(client2)) > 0) {
+ report("For client2: Expected 1 event, got %d", i+1);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ /* Additional possible testing: */
+ /* Select for no events on window1. */
+ /* Select for MapNotify events on window2. */
+ /* Select for xname events on window2. */
+ /* Select for xname events on window2 with client2. */
+ /* Call XMapWindow on window2. */
+ /* Verify that MapNotify event was received on window2. */
+ /* Verify that xname event was received on window2. */
+ /* Verify that xname event was received on window2 by client2. */
+ /* Verify that pointer has remained where it was moved. */
+ /* Select for xname events on window1. */
+ /* Select for xname events on window1 with client2. */
+ /* Select for ConfigureNotify events on window2. */
+ /* Call XLowerWindow on window2. */
+ /* Verify that ConfigureNotify event was received on window2. */
+ /* Verify that xname event was received on window1. */
+ /* Verify that xname event was received on window1 by client2. */
+ /* Verify that pointer has remained where it was moved. */
+
+ /* Others: GravityNotify, CirculateNotify. */
+
+/* Verify that pointer has remained where it was moved. */
+ if (pointermoved(display, warp)) {
+ delete("Pointer moved unexpectedly");
+ return;
+ }
+ else
+ CHECK;
+ CHECKPASS(11);
+>>#NOTEd >>ASSERTION
+>>#NOTEd When the window which contains the pointer changes,
+>>#NOTEd then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a client calls
+>>#NOTEm .F XGrabPointer
+>>#NOTEm or
+>>#NOTEm .F XUngrabPointer ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>ASSERTION def
+>>#NOTE Checked in previous test.
+When an xname event is generated,
+then
+all clients having set
+.S EnterWindowMask
+event mask bits on the event window are delivered
+an xname event.
+>>ASSERTION Good A
+>>#NOTE True for most events (except MappingNotify and selection stuff).
+When an xname event is generated,
+then
+clients not having set
+.S EnterWindowMask
+event mask bits on the event window are not delivered
+an xname event.
+>>STRATEGY
+Create client2.
+Create window.
+Move pointer outside of window.
+Select for xname events on window.
+Select for no events on window with client2.
+Warp pointer to window.
+Verify that a single xname event was received.
+Verify that no events were received by client2.
+>>CODE
+int i;
+Display *display = Dsp;
+Display *client2;
+Window w;
+XEvent event;
+XEvent good;
+struct area area;
+PointerPlace *warp1, *warp2;
+
+/* Create client2. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window. */
+ area.x = 10;
+ area.y = 10;
+ area.width = W_STDWIDTH;
+ area.height = W_STDHEIGHT;
+ w = mkwin(display, (XVisualInfo *) NULL, &area, True);
+/* Move pointer outside of window. */
+ warp1 = warppointer(display, DRW(display), 0, 0);
+ if (warp1 == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Select for xname events on window. */
+ XSelectInput(display, w, MASK);
+/* Select for no events on window with client2. */
+ XSelectInput(client2, w, NoEventMask);
+/* Warp pointer to window. */
+ XSync(display, True);
+ XSync(client2, True);
+ warp2 = warppointer(display, w, 2, 3);
+ if (warp2 == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+ XSync(display, False);
+ XSync(client2, False);
+/* Verify that a single xname event was received. */
+ if (XPending(display) < 1) {
+ report("Expected %s event not delivered.", TestName);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(display, &event);
+ good.xcrossing.type = EVENT;
+ good.xcrossing.serial = event.xcrossing.serial;
+ good.xcrossing.send_event = False;
+ good.xcrossing.display = display;
+ good.xcrossing.window = w;
+ good.xcrossing.root = DRW(display);
+ good.xcrossing.subwindow = None;
+ good.xcrossing.time = event.xcrossing.time;
+ good.xcrossing.x = 2;
+ good.xcrossing.y = 3;
+ ROOTCOORDSET(display, &(good.xcrossing)); /* x_root and y_root */
+ good.xcrossing.mode = NotifyNormal;
+ /* under virtual root windows detail gets set to NotifyNonlinear */
+ good.xcrossing.detail = NotifyAncestor;
+ good.xcrossing.same_screen = True;
+ good.xcrossing.focus = True; /* assumes focus follows pointer */
+ good.xcrossing.state = 0;
+ if (checkevent(&good, &event)) {
+ FAIL;
+ }
+ else
+ CHECK;
+ if ((i = XPending(display)) > 0) {
+ report("Expected 1 event, got %d", i+1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were received by client2. */
+ if ((i = XPending(client2)) > 0) {
+ report("For client2: Expected 0 events, got %d", i);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(7);
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M root
+>>#NOTEs is set to the source window's root window.
+>>ASSERTION Good A
+When an xname event is delivered
+and the child of the event window contains the final pointer position,
+then
+.M subwindow
+is set to
+that child.
+>>STRATEGY
+Build window hierarchy.
+Create the hierarchy.
+Move pointer to outside of window.
+Select no events on the sourcew.
+Set EnterWindowMask event mask bits on the eventw.
+Move pointer to child of event window.
+Verify that a xname event was received.
+Verify that subwindow is set to the source window.
+>>CODE
+int status;
+Display *display = Dsp;
+Winh *eventw;
+Winh *sourcew;
+XEvent good;
+Winhg winhg;
+PointerPlace *warp1, *warp2;
+
+/* Build window hierarchy. */
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = W_STDWIDTH;
+ winhg.area.height = W_STDHEIGHT;
+ winhg.border_width = 1;
+ eventw = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (eventw == (Winh *) NULL) {
+ report("Could not create eventw");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.width /= 2;
+ winhg.area.height /= 2;
+ sourcew = winh_adopt(display, eventw, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (sourcew == (Winh *) NULL) {
+ report("Could not create sourcew");
+ return;
+ }
+ else
+ CHECK;
+/* Create the hierarchy. */
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Move pointer to outside of window. */
+ warp1 = warppointer(display, DRW(display), 0, 0);
+ if (warp1 == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Select no events on the sourcew. */
+ if (winh_selectinput(display, sourcew, NoEventMask))
+ return;
+ else
+ CHECK;
+/* Set EnterWindowMask event mask bits on the eventw. */
+ if (winh_selectinput(display, eventw, MASK))
+ return;
+ else
+ CHECK;
+ XSync(display, True);
+ good.type = EVENT;
+ good.xcrossing.display = display;
+ good.xcrossing.window = eventw->window;
+ good.xcrossing.subwindow = sourcew->window;
+/* Move pointer to child of event window. */
+ warp2 = warppointer(display, sourcew->window, 2, 2);
+ if (warp2 == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Verify that a xname event was received. */
+ XSync(display, False);
+ if (winh_plant(eventw, &good, NoEventMask, WINH_NOMASK))
+ return;
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL))
+ return;
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that subwindow is set to the source window. */
+ /* since only one event was expected, it must be first in list */
+ if (eventw->delivered->event->xcrossing.subwindow != sourcew->window) {
+ report("Subwindow set to 0x%x, expected 0x%x",
+ eventw->delivered->event->xcrossing.subwindow, sourcew->window);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+
+ CHECKPASS(10);
+
+>>ASSERTION def
+>>#NOTE Already tested for in a test with only a single window involved.
+When an xname event is delivered
+and the child of the event window does not contain the final pointer position,
+then
+.M subwindow
+is set to
+.S None .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M time
+>>#NOTEs is set to
+>>#NOTEs the time in milliseconds at which the event was generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event window is on the same screen as the root window,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates of
+>>#NOTEs the final pointer position relative to the event window's origin.
+>>#REMOVED >>ASSERTION Good C
+>>#COMMENT:
+>># This assertion was removed April 1992 because
+>># an enter notify event is not generated when the root
+>># is on the alternate screen (bug report 0234).
+>># -stuart.
+>>#REMOVED >>#COMMENT:
+>>#REMOVED >># Assertion category changed March 1992 since it was found not to require
+>>#REMOVED >># device events.
+>>#REMOVED >># - Cal.
+>>#REMOVED If multiple screens are supported:
+>>#REMOVED When an xname event is delivered
+>>#REMOVED and the event and root windows are not on the same screen,
+>>#REMOVED then
+>>#REMOVED .M x
+>>#REMOVED and
+>>#REMOVED .M y
+>>#REMOVED are set to
+>>#REMOVED zero.
+>>#REMOVED >>STRATEGY
+>>#REMOVED If multiple screens are supported:
+>>#REMOVED Create a window on the default screen.
+>>#REMOVED Create a window on the alternate screen.
+>>#REMOVED Warp the pointer into the first window.
+>>#REMOVED Grab the pointer for the first window.
+>>#REMOVED Warp the pointer into the alternate screen window.
+>>#REMOVED Verify that an xname event was generated relative to the grab window.
+>>#REMOVED Verify that the x and y components were set to zero.
+>>#REMOVED >>CODE
+>>#REMOVED Window wg;
+>>#REMOVED Window w2;
+>>#REMOVED XEvent ev;
+>>#REMOVED int gr;
+>>#REMOVED
+>>#REMOVED /* If multiple screens are supported: */
+>>#REMOVED if (config.alt_screen == -1) {
+>>#REMOVED unsupported("Multiple screens not supported.");
+>>#REMOVED return;
+>>#REMOVED } else
+>>#REMOVED CHECK;
+>>#REMOVED
+>>#REMOVED /* Create a window on the default screen. */
+>>#REMOVED wg = defwin(Dsp);
+>>#REMOVED /* Create a window on the alternate screen. */
+>>#REMOVED w2 = defdraw(Dsp, VI_ALT_WIN);
+>>#REMOVED
+>>#REMOVED /* Warp the pointer into the first window. */
+>>#REMOVED (void) warppointer(Dsp, wg, 13, 17);
+>>#REMOVED XSync(Dsp, True);
+>>#REMOVED
+>>#REMOVED /* Grab the pointer for the first window. */
+>>#REMOVED if((gr = XGrabPointer(Dsp, wg, False, EVENTMASK|PointerMotionMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime)) != GrabSuccess) {
+>>#REMOVED delete("XGrabPointer() returned %s instead of GrabSuccess.", grabreplyname(gr));
+>>#REMOVED return;
+>>#REMOVED } else
+>>#REMOVED CHECK;
+>>#REMOVED
+>>#REMOVED /* Warp the pointer into the alternate screen window. */
+>>#REMOVED XSync(Dsp, True);
+>>#REMOVED (void) warppointer(Dsp, w2, 7,11);
+>>#REMOVED XSync(Dsp, False);
+>>#REMOVED
+>>#REMOVED /* Verify that an xname event was generated relative to the grab window. */
+>>#REMOVED if (XCheckWindowEvent(Dsp, wg, EVENTMASK, &ev) == False) {
+>>#REMOVED report("Expected %s event was not received.", eventname(EVENT));
+>>#REMOVED FAIL;
+>>#REMOVED } else {
+>>#REMOVED CHECK;
+>>#REMOVED
+>>#REMOVED /* Verify that the x and y components were set to zero. */
+>>#REMOVED if(ev.xcrossing.x != 0 || ev.xcrossing.y != 0) {
+>>#REMOVED report("The x (value %d) and y (value %d) components of the %s event were not set to zero.",
+>>#REMOVED ev.xcrossing.x, ev.xcrossing.y, eventname(EVENT));
+>>#REMOVED FAIL;
+>>#REMOVED } else
+>>#REMOVED CHECK;
+>>#REMOVED }
+>>#REMOVED
+>>#REMOVED XUngrabPointer(Dsp, CurrentTime);
+>>#REMOVED CHECKPASS(4);
+>>#REMOVED
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x_root
+>>#NOTEs and
+>>#NOTEs .M y_root
+>>#NOTEs are set to coordinates of the pointer
+>>#NOTEs when the event was generated
+>>#NOTEs relative to the root window's origin.
+>>#NOTEm >>ASSERTION
+>>#NOTEm >>#NOTE
+>>#NOTEm >>#NOTE The spec does not actually state this. What the spec states is that
+>>#NOTEm >>#NOTE things behave as if the pointer moved from the confine-to window to
+>>#NOTEm >>#NOTE the grab window, the opposite of what one might expect.
+>>#NOTEm >>#NOTE
+>>#NOTEm When ARTICLE xname event is generated as the result of a grab activation,
+>>#NOTEm then xname event generation occurs as if the pointer moved from
+>>#NOTEm the grab window to the confine-to window with
+>>#NOTEm .M mode
+>>#NOTEm set to
+>>#NOTEm .S NotifyGrab .
+>>#NOTEm >>ASSERTION
+>>#NOTEm >>#NOTE
+>>#NOTEm >>#NOTE The spec does not actually state this. What the spec states is that
+>>#NOTEm >>#NOTE things behave as if the pointer moved from the grab window to
+>>#NOTEm >>#NOTE the confine-to window, the opposite of what one might expect.
+>>#NOTEm >>#NOTE
+>>#NOTEm When ARTICLE xname event is generated as the result of a grab deactivation,
+>>#NOTEm then xname event generation occurs as if the pointer moved from
+>>#NOTEm the confine-to window to the grab window with
+>>#NOTEm .M mode
+>>#NOTEm set to
+>>#NOTEm .S NotifyUngrab .
+>>ASSERTION def
+All xname events are delivered after
+any related
+.S LeaveNotify
+are delivered.
+>>#NOTE
+>>#NOTE It would not surprise me in the least if these assertions could
+>>#NOTE be simplified and/or reduced in number.
+>>#NOTE
+>>ASSERTION Good A
+When the pointer moves from window A to window B
+and A is an inferior of B,
+then an xname event is generated on window B with
+.M detail
+set to
+.S NotifyInferior .
+>>STRATEGY
+Build window hierarchy.
+Move pointer to known location.
+Set window B.
+Set window A to child of window B.
+Select for xname and LeaveNotify events on windows A and B.
+Move pointer from window A to window B.
+Verify xname event received on window B.
+Verify that detail is set to NotifyInferior.
+Verify that all xname events are delivered after all
+LeaveNotify events.
+>>CODE
+Display *display = Dsp;
+int depth = 3;
+Winh *A, *B;
+int status;
+XEvent *event;
+
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window B. */
+ B = guardian->firstchild;
+/* Set window A to child of window B. */
+ A = B->firstchild;
+/* Select for xname and LeaveNotify events on windows A and B. */
+ if (winh_selectinput(display, A, BOTHMASKS)) {
+ report("Error selecting for events.");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_selectinput(display, B, BOTHMASKS)) {
+ report("Error selecting for events.");
+ return;
+ }
+ else
+ CHECK;
+
+/* Move pointer from window A to window B. */
+ XWarpPointer(display, None, A->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, True);
+ XWarpPointer(display, None, B->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify xname event received on window B. */
+ if (B->delivered == (Winhe *) NULL || (event = B->delivered->event)->type != EVENT) {
+ report("Expected event not generated");
+ FAIL;
+ }
+ else
+ {
+/* Verify that detail is set to NotifyInferior. */
+ if (event->xcrossing.detail != NotifyInferior) {
+ report("Got detail %d, expected %d", event->xcrossing.detail, NotifyInferior);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* LeaveNotify events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(7);
+>>ASSERTION Good A
+When the pointer moves from window A to window B
+and B is an inferior of A,
+then an xname event is generated once on each window
+between window A and window B, exclusive,
+in window hierarchy order,
+with
+.M detail
+set to
+.S NotifyVirtual
+and then on window B with
+.M detail
+set to
+.S NotifyAncestor .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Move pointer to known location.
+Set window A.
+Set window B to inferior of window A.
+Select for xname and LeaveNotify events on all windows.
+Move pointer from window A to window B.
+Verify events delivered, between window A and window B, exclusive,
+in proper order.
+Verify that detail is set to NotifyVirtual.
+Verify that event delivered to window B with detail set to NotifyAncestor.
+Verify that all xname events are delivered after all
+LeaveNotify events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *B;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window A. */
+ A = guardian->firstchild;
+/* Set window B to inferior of window A. */
+ B = A->firstchild->firstchild->firstchild;
+/* Select for xname and LeaveNotify events on all windows. */
+ if (winh_selectinput(display, (Winh *) NULL, BOTHMASKS)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(B, A->firstchild, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer from window A to window B. */
+ XWarpPointer(display, None, A->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, True);
+ XWarpPointer(display, None, B->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK))
+ return;
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify events delivered, between window A and window B, exclusive, */
+/* in proper order. */
+ increasing = True;
+ if (winh_climb(B, A->firstchild, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that detail is set to NotifyVirtual. */
+ _detail_ = NotifyVirtual;
+ if (winh_climb(B->parent, A->firstchild, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered to window B with detail set to NotifyAncestor. */
+ _detail_ = NotifyAncestor;
+ if (winh_climb(B, B, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* LeaveNotify events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(11);
+>>ASSERTION Good A
+When the pointer moves from window A to window B
+and there exists a window C that is their least common ancestor,
+then an xname event is generated once on each window
+between window C and window B, exclusive, with
+.M detail
+set to
+.S NotifyNonlinearVirtual
+and then on window B with
+.M detail
+set to
+.S NotifyNonlinear .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Move pointer to known location.
+Set windows A, B, and C.
+Select for xname and LeaveNotify events on all windows.
+Move pointer from window A to window B.
+Verify events delivered, between window C and window B, exclusive,
+in proper order.
+Verify that detail is set to NotifyNonlinearVirtual.
+Verify that event delivered to window B with detail set to NotifyNonlinear.
+Verify that all xname events are delivered after all
+LeaveNotify events.
+>>CODE
+Display *display;
+int depth = 5;
+Winh *A, *B, *C;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set windows A, B, and C. */
+ C = guardian->firstchild;
+ A = C->firstchild->nextsibling->firstchild->firstchild;
+ B = C->firstchild-> firstchild->firstchild;
+/* Select for xname and LeaveNotify events on all windows. */
+ if (winh_selectinput(display, (Winh *) NULL, BOTHMASKS)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(B, C->firstchild, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer from window A to window B. */
+ XWarpPointer(display, None, A->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, True);
+ XWarpPointer(display, None, B->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK))
+ return;
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify events delivered, between window C and window B, exclusive, */
+/* in proper order. */
+ increasing = True;
+ if (winh_climb(B, C->firstchild, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that detail is set to NotifyNonlinearVirtual. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(B->parent, C->firstchild, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered to window B with detail set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(B, B, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* LeaveNotify events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Incorrect event ordering.");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ CHECKPASS(11);
+>>ASSERTION Good A
+If the implementation supports multiple screens:
+When the pointer moves from window A to window B
+and window A and window B are on different screens
+and window B is not a root window,
+then an xname event is generated on
+each window from window B's root down to but not including window B with
+.M detail
+set to
+.S NotifyNonlinearVirtual
+and then on window B with
+.M detail
+set to
+.S NotifyNonlinear .
+>>STRATEGY
+Check to see if multiple screens are supported.
+Build window hierarchy.
+Move pointer to known location.
+Select for xname and LeaveNotify events between windows B and
+B's root window.
+Move pointer from window A to window B.
+Verify events delivered on each window from window B's root
+down to but not including window B in proper order.
+Verify that detail is set to NotifyNonlinearVirtual.
+Verify that event delivered to window B with detail set to NotifyNonlinear.
+Verify that all xname events are delivered after all
+LeaveNotify events.
+>>CODE
+Display *display;
+int depth = 5;
+Winh *A, *B, *Broot;
+int status;
+
+/* Check to see if multiple screens are supported. */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ }
+ else
+ CHECK;
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set windows A and B. */
+ A = guardian->firstchild;
+ Broot = guardian->nextsibling;
+ B = Broot->firstchild->firstchild->firstchild;
+/* Select for xname and LeaveNotify events on all windows. */
+ if (winh_selectinput(display, (Winh *) NULL, BOTHMASKS)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(B, Broot, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer from window A to window B. */
+ XWarpPointer(display, None, A->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, True);
+ XWarpPointer(display, None, B->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK))
+ return;
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify events delivered on each window from window B's root */
+/* down to but not including window B in proper order. */
+ increasing = True;
+ if (winh_climb(B, Broot, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that detail is set to NotifyNonlinearVirtual. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(B->parent, Broot, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered to window B with detail set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(B, B, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* LeaveNotify events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Incorrect event ordering.");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ CHECKPASS(12);
+>>ASSERTION def
+>>#NOTE Tested above.
+If the implementation supports multiple screens:
+When the pointer moves from window A to window B
+and window A and window B are on different screens,
+then an xname event is generated on window B with
+.M detail
+set to
+.S NotifyNonlinear .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event and root windows are on the same screen,
+>>#NOTEs then
+>>#NOTEs .M same_screen
+>>#NOTEs is set to
+>>#NOTEs .S True .
+>>#REMOVED >>ASSERTION Good C
+>>#COMMENT:
+>># This assertion was removed April 1992 because
+>># an enter notify event is not generated when the root
+>># is on the alternate screen (bug report 0234).
+>># -stuart.
+>>#REMOVED >>#COMMENT:
+>>#REMOVED >># Assertion category changed March 1992 since it was found not to require
+>>#REMOVED >># device events.
+>>#REMOVED >># - Cal.
+>>#REMOVED If multiple screens are supported:
+>>#REMOVED When an xname event is delivered
+>>#REMOVED and the event and root windows are not on the same screen,
+>>#REMOVED then
+>>#REMOVED .M same_screen
+>>#REMOVED is set to
+>>#REMOVED .S False .
+>>#REMOVED >>STRATEGY
+>>#REMOVED If multiple screens are supported:
+>>#REMOVED Create a window on the default screen.
+>>#REMOVED Create a window on the alternate screen.
+>>#REMOVED Warp the pointer into the first window.
+>>#REMOVED Grab the pointer for the first window.
+>>#REMOVED Warp the pointer into the alternate screen window.
+>>#REMOVED Verify that an xname event was generated relative to the grab window.
+>>#REMOVED Verify that the same_screen component was False.
+>>#REMOVED >>CODE
+>>#REMOVED Window wg;
+>>#REMOVED Window w2;
+>>#REMOVED XEvent ev;
+>>#REMOVED int gr;
+>>#REMOVED
+>>#REMOVED
+>>#REMOVED /* If multiple screens are supported: */
+>>#REMOVED if (config.alt_screen == -1) {
+>>#REMOVED unsupported("Multiple screens not supported.");
+>>#REMOVED return;
+>>#REMOVED } else
+>>#REMOVED CHECK;
+>>#REMOVED
+>>#REMOVED /* Create a window on the default screen. */
+>>#REMOVED wg = defwin(Dsp);
+>>#REMOVED /* Create a window on the alternate screen. */
+>>#REMOVED w2 = defdraw(Dsp, VI_ALT_WIN);
+>>#REMOVED
+>>#REMOVED /* Warp the pointer into the first window. */
+>>#REMOVED (void) warppointer(Dsp, wg, 13, 17);
+>>#REMOVED XSync(Dsp, True);
+>>#REMOVED
+>>#REMOVED /* Grab the pointer for the first window. */
+>>#REMOVED if((gr = XGrabPointer(Dsp, wg, False, EVENTMASK|PointerMotionMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime)) != GrabSuccess) {
+>>#REMOVED delete("XGrabPointer() returned %s instead of GrabSuccess.", grabreplyname(gr));
+>>#REMOVED return;
+>>#REMOVED } else
+>>#REMOVED CHECK;
+>>#REMOVED
+>>#REMOVED /* Warp the pointer into the alternate screen window. */
+>>#REMOVED XSync(Dsp, True);
+>>#REMOVED (void) warppointer(Dsp, w2, 7,11);
+>>#REMOVED XSync(Dsp, False);
+>>#REMOVED
+>>#REMOVED /* Verify that an xname event was generated relative to the grab window. */
+>>#REMOVED if (XCheckWindowEvent(Dsp, wg, EVENTMASK, &ev) == False) {
+>>#REMOVED report("Expected %s event was not received.", eventname(EVENT));
+>>#REMOVED FAIL;
+>>#REMOVED } else {
+>>#REMOVED
+>>#REMOVED CHECK;
+>>#REMOVED /* Verify that the same_screen component was False. */
+>>#REMOVED if(ev.xcrossing.same_screen != False) {
+>>#REMOVED report("The same_screen component of the %s event was not set to False.", eventname(EVENT));
+>>#REMOVED FAIL;
+>>#REMOVED } else
+>>#REMOVED CHECK;
+>>#REMOVED }
+>>#REMOVED
+>>#REMOVED XUngrabPointer(Dsp, CurrentTime);
+>>#REMOVED CHECKPASS(4);
+>>#REMOVED
+>>ASSERTION Good A
+When an xname event is delivered
+and the event window is the focus window,
+then
+.M focus
+is set to
+.S True .
+>>STRATEGY
+Build window hierarchy.
+Set input focus to eventw.
+Move pointer to known location.
+Select xname events on the eventw.
+Call XWarpPointer to move the pointer to eventw.
+Verify event was delivered with focus set to True.
+Move pointer back to known location.
+Clear event expectations.
+Set input focus to known window.
+Call XWarpPointer to move the pointer to eventw.
+Verify event was delivered with focus set to False.
+>>CODE
+Display *display = Dsp;
+Winh *eventw;
+int status;
+
+/* Build window hierarchy. */
+ if (winh(display, 1, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+ eventw = guardian->firstchild;
+/* Set input focus to eventw. */
+ XSetInputFocus(display, eventw->window, RevertToPointerRoot, CurrentTime);
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Select xname events on the eventw. */
+ if (winh_selectinput(display, eventw, MASK))
+ return;
+ else
+ CHECK;
+/* Call XWarpPointer to move the pointer to eventw. */
+ XSync(display, True);
+ XWarpPointer(display, None, eventw->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+/* Verify event was delivered with focus set to True. */
+ good.type = EVENT;
+ good.xany.display = display;
+ good.xany.window = eventw->window;
+ if (winh_plant(eventw, &good, NoEventMask, WINH_NOMASK)) {
+ report("Could not initialize for event delivery");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+ if (eventw->delivered->event->xcrossing.focus != True) {
+ report("Focus set to %d, expected %d",
+ eventw->delivered->event->xcrossing.focus,True);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+/* Move pointer back to known location. */
+ XWarpPointer(display, None, DRW(display), 0, 0, 0, 0, 0, 0);
+/* Set input focus to known window. */
+ XSetInputFocus(display, eventw->nextsibling->window, RevertToPointerRoot, CurrentTime);
+/* Call XWarpPointer to move the pointer to eventw. */
+ XSync(display, True);
+ XWarpPointer(display, None, eventw->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+/* Verify event was delivered with focus set to False. */
+ if (winh_plant(eventw, &good, NoEventMask, WINH_NOMASK)) {
+ report("Could not initialize for event delivery");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+ if (eventw->delivered->event->xcrossing.focus != False) {
+ report("Focus set to %d, expected %d",
+ eventw->delivered->event->xcrossing.focus, False);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ CHECKPASS(9);
+>>ASSERTION Good A
+When an xname event is delivered
+and the event window is an inferior of the focus window,
+then
+.M focus
+is set to
+.S True .
+>>STRATEGY
+Build window hierarchy.
+Set input focus to ancestor of window eventw.
+Move pointer to known location.
+Select xname events on the eventw.
+Call XWarpPointer to move the pointer to eventw.
+Verify event was delivered with focus set to True.
+>>CODE
+Display *display = Dsp;
+Winh *eventw, *focusw;
+int status;
+
+/* Build window hierarchy. */
+ if (winh(display, 2, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+ focusw = guardian->firstchild;
+ eventw = guardian->firstchild->firstchild;
+/* Set input focus to ancestor of window eventw. */
+ XSetInputFocus(display, focusw->window, RevertToPointerRoot, CurrentTime);
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Select xname events on the eventw. */
+ if (winh_selectinput(display, eventw, MASK))
+ return;
+ else
+ CHECK;
+/* Call XWarpPointer to move the pointer to eventw. */
+ XSync(display, True);
+ XWarpPointer(display, None, eventw->window, 0, 0, 0, 0, 2, 2);
+ XSync(display, False);
+/* Verify event was delivered with focus set to True. */
+ good.type = EVENT;
+ good.xany.display = display;
+ good.xany.window = eventw->window;
+ if (winh_plant(eventw, &good, NoEventMask, WINH_NOMASK)) {
+ report("Could not initialize for event delivery");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+ if (eventw->delivered->event->xcrossing.focus != True) {
+ report("Focus set to %d, expected %d",
+ eventw->delivered->event->xcrossing.focus, True);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ CHECKPASS(6);
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event window is not the focus window or
+>>#NOTEs an inferior of the focus window,
+>>#NOTEs then
+>>#NOTEs .M focus
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M state
+>>#NOTEs is set to
+>>#NOTEs indicate the logical state
+>>#NOTEs of the pointer buttons,
+>>#NOTEs which is the bitwise OR of one or more of
+>>#NOTEs the button or modifier key masks
+>>#NOTEs .S Button1Mask ,
+>>#NOTEs .S Button2Mask ,
+>>#NOTEs .S Button3Mask ,
+>>#NOTEs .S Button4Mask ,
+>>#NOTEs .S Button5Mask ,
+>>#NOTEs .S ShiftMask ,
+>>#NOTEs .S LockMask ,
+>>#NOTEs .S ControlMask ,
+>>#NOTEs .S Mod1Mask ,
+>>#NOTEs .S Mod2Mask ,
+>>#NOTEs .S Mod3Mask ,
+>>#NOTEs .S Mod4Mask ,
+>>#NOTEs and
+>>#NOTEs .S Mod5Mask .
diff --git a/xc/test/xsuite/xtest/tset/CH08/evntsqd/evntsqd.m b/xc/test/xsuite/xtest/tset/CH08/evntsqd/evntsqd.m
new file mode 100644
index 000000000..6c2415bd9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/evntsqd/evntsqd.m
@@ -0,0 +1,524 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XEventsQueued CH08
+int
+XEventsQueued(display, mode)
+Display *display = Dsp;
+int mode;
+>>EXTERN
+
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_(return_value) \
+ _startcall(display);\
+ return_value = XEventsQueued(display, mode);\
+ _endcall(display)
+>>ASSERTION Good A
+When the number of events already in the event queue is non-zero,
+then a call to xname
+returns the number of events
+in the event queue.
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XEventsQueued with mode QueuedAlready.
+Verify that XEventsQueued returned the correct number of events.
+Call XEventsQueued with mode QueuedAfterFlush.
+Verify that XEventsQueued returned the correct number of events.
+Call XEventsQueued with mode QueuedAfterReading.
+Verify that XEventsQueued returned the correct number of events.
+>>CODE
+int eventsput;
+int event_count;
+XEvent event;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = MapNotify;
+ eventsput = 0;
+ XPutBackEvent(display, &event), eventsput++;
+ XPutBackEvent(display, &event), eventsput++;
+ XPutBackEvent(display, &event), eventsput++;
+/* Call XEventsQueued with mode QueuedAlready. */
+ mode = QueuedAlready;
+ _xcall_(event_count);
+/* Verify that XEventsQueued returned the correct number of events. */
+ if (event_count != eventsput) {
+ report("Returned %d, expected %d", event_count, eventsput);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XEventsQueued with mode QueuedAfterFlush. */
+ mode = QueuedAfterFlush;
+ _xcall_(event_count);
+/* Verify that XEventsQueued returned the correct number of events. */
+ if (event_count != eventsput) {
+ report("Returned %d, expected %d", event_count, eventsput);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XEventsQueued with mode QueuedAfterReading. */
+ mode = QueuedAfterReading;
+ _xcall_(event_count);
+/* Verify that XEventsQueued returned the correct number of events. */
+ if (event_count != eventsput) {
+ report("Returned %d, expected %d", event_count, eventsput);
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+When the number of events already in the event queue is non-zero,
+then a call to xname
+does not block.
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XEventsQueued with mode QueuedAlready
+and verify that blocking did not occur.
+Verify that XEventsQueued returned the expected number of events.
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XEventsQueued with mode QueuedAfterFlush
+and verify that blocking did not occur.
+Verify that XEventsQueued returned the expected number of events.
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XEventsQueued with mode QueuedAfterReading
+and verify that blocking did not occur.
+Verify that XEventsQueued returned the expected number of events.
+>>CODE
+int eventsput;
+XEvent event;
+Block_Info info;
+int block_status;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = MapNotify;
+ eventsput = 0;
+ XPutBackEvent(display, &event), eventsput++;
+ XPutBackEvent(display, &event), eventsput++;
+ XPutBackEvent(display, &event), eventsput++;
+/* Call XEventsQueued with mode QueuedAlready */
+/* and verify that blocking did not occur. */
+ XEventsQueued_Type(info, QueuedAlready);
+ block_status = block(display, (XEvent *) NULL, &info);
+ if (block_status == -1)
+ return;
+ else
+ CHECK;
+ if (block_status == 1) {
+ report("Blocking occurred when it should not have.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XEventsQueued returned the expected number of events. */
+ if (info.int_return != eventsput) {
+ delete("Unexpected number of events in event queue: %d", info.int_return);
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = MapNotify;
+ eventsput = 0;
+ XPutBackEvent(display, &event), eventsput++;
+ XPutBackEvent(display, &event), eventsput++;
+ XPutBackEvent(display, &event), eventsput++;
+/* Call XEventsQueued with mode QueuedAfterFlush */
+/* and verify that blocking did not occur. */
+ XEventsQueued_Type(info, QueuedAfterFlush);
+ block_status = block(display, (XEvent *) NULL, &info);
+ if (block_status == -1)
+ return;
+ else
+ CHECK;
+ if (block_status == 1) {
+ report("Blocking occurred when it should not have.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XEventsQueued returned the expected number of events. */
+ if (info.int_return != eventsput) {
+ delete("Unexpected number of events in event queue: %d", info.int_return);
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = MapNotify;
+ eventsput = 0;
+ XPutBackEvent(display, &event), eventsput++;
+ XPutBackEvent(display, &event), eventsput++;
+ XPutBackEvent(display, &event), eventsput++;
+/* Call XEventsQueued with mode QueuedAfterReading */
+/* and verify that blocking did not occur. */
+ XEventsQueued_Type(info, QueuedAfterReading);
+ block_status = block(display, (XEvent *) NULL, &info);
+ if (block_status == -1)
+ return;
+ else
+ CHECK;
+ if (block_status == 1) {
+ report("Blocking occurred when it should not have.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XEventsQueued returned the expected number of events. */
+ if (info.int_return != eventsput) {
+ delete("Unexpected number of events in event queue: %d", info.int_return);
+ return;
+ }
+ else
+ CHECK;
+ CHECKPASS(9);
+>>ASSERTION Good A
+When the number of events already in the event queue is non-zero,
+then a call to xname
+does not flush the output buffer.
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Call XPutBackEvent to put events on the event queue.
+Call XEventsQueued with mode QueuedAlready.
+Empty the buffer.
+Ensure the server has dealt with anything flushed to it: do XSync()
+Verify that the output buffer was not flushed by effect on server.
+Discard all events on the event queue.
+Create pixmap.
+Call XPutBackEvent to put events on the event queue.
+Call XEventsQueued with mode QueuedAfterFlush.
+Empty the buffer.
+Ensure the server has dealt with anything flushed to it: do XSync()
+Verify that the output buffer was not flushed by effect on server.
+Discard all events on the event queue.
+Create pixmap.
+Call XPutBackEvent to put events on the event queue.
+Call XEventsQueued with mode QueuedAfterReading.
+Empty the buffer.
+Ensure the server has dealt with anything flushed to it: do XSync()
+Verify that the output buffer was not flushed by effect on server.
+Discard all left-over events in the event queue.
+>>CODE
+XEvent event;
+int eventsput;
+int event_count;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = MapNotify;
+ eventsput = 0;
+ XPutBackEvent(display, &event), eventsput++;
+/* Call XEventsQueued with mode QueuedAlready. */
+ mode = QueuedAlready;
+ _xcall_(event_count);
+/* Empty the buffer. */
+ (void)XTestDiscard(display);
+/* Ensure the server has dealt with anything flushed to it: do XSync() */
+ XSync(display, False);
+/* Verify that the output buffer was not flushed by effect on server. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() == Success) {
+ /* pixmap was free'd */
+ report("The output buffer was flushed.");
+ FAIL;
+ }
+ else /* no need to free as not created */
+ CHECK;
+
+ if (event_count != eventsput) {
+ report("Incorrect number of events returned.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = MapNotify;
+ eventsput = 0;
+ XPutBackEvent(display, &event), eventsput++;
+/* Call XEventsQueued with mode QueuedAfterFlush. */
+ mode = QueuedAfterFlush;
+ _xcall_(event_count);
+/* Empty the buffer. */
+ (void)XTestDiscard(display);
+/* Ensure the server has dealt with anything flushed to it: do XSync() */
+ XSync(display, False);
+/* Verify that the output buffer was not flushed by effect on server. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() == Success) {
+ /* pixmap was free'd */
+ report("The output buffer was flushed.");
+ FAIL;
+ }
+ else /* no need to free as not created */
+ CHECK;
+
+ if (event_count != eventsput) {
+ report("Incorrect number of events returned.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = MapNotify;
+ eventsput = 0;
+ XPutBackEvent(display, &event), eventsput++;
+/* Call XEventsQueued with mode QueuedAfterReading. */
+ mode = QueuedAfterReading;
+ _xcall_(event_count);
+/* Empty the buffer. */
+ (void)XTestDiscard(display);
+/* Ensure the server has dealt with anything flushed to it: do XSync() */
+ XSync(display, False);
+/* Verify that the output buffer was not flushed by effect on server. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() == Success) {
+ /* pixmap was free'd */
+ report("The output buffer was flushed.");
+ FAIL;
+ }
+ else /* no need to free as not created. */
+ CHECK;
+
+ if (event_count != eventsput) {
+ report("Incorrect number of events returned.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Discard all left-over events in the event queue. */
+ _startcall(display);
+ XSync(display, True);
+ _endcall(display);
+
+ CHECKPASS(7);
+>>ASSERTION Good A
+When there are no events in the event queue,
+then a call to xname with
+.A mode
+set to
+.S QueuedAlready
+returns zero.
+>>STRATEGY
+Discard all events on the event queue.
+Call XEventsQueued with mode QueuedAlready.
+Verify that XEventsQueued returned the correct number of events.
+>>CODE
+int event_count;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XEventsQueued with mode QueuedAlready. */
+ mode = QueuedAlready;
+ _xcall_(event_count);
+/* Verify that XEventsQueued returned the correct number of events. */
+ if (event_count != 0) {
+ report("Returned %d, expected none", event_count);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When there are no events in the event queue,
+then a call to xname with
+.A mode
+set to
+.S QueuedAfterFlush
+flushes the output buffer.
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Call XEventsQueued with mode QueuedAfterFlush.
+Empty the buffer.
+Ensure the server has dealt with anything flushed to it: do XSync()
+Verify that the output buffer was flushed by effect on server.
+Verify that XEventsQueued returned the correct number of events.
+Verify that errors did not occur after call to XEventsQueued.
+>>CODE
+int event_count;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Call XEventsQueued with mode QueuedAfterFlush. */
+ mode = QueuedAfterFlush;
+ _xcall_(event_count);
+/* Empty the buffer. */
+ (void)XTestDiscard(display);
+/* Ensure the server has dealt with anything flushed to it: do XSync() */
+ XSync(display, False);
+/* Verify that the output buffer was flushed by effect on server. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() != Success) {
+ report("The output buffer was not flushed.");
+ XFreePixmap(display, pm);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XEventsQueued returned the correct number of events. */
+ if (event_count != 0) {
+ report("Returned %d, expected none", event_count);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that errors did not occur after call to XEventsQueued. */
+ if (geterr() != Success) {
+ report("The output buffer was flushed.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(4);
+>>ASSERTION Good A
+When there are no events in the event queue,
+then a call to xname with
+.A mode
+set to
+.S QueuedAfterFlush
+or
+.S QueuedAfterReading
+attempts to read more events out of the client's connection
+without blocking
+and returns the number read.
+>>STRATEGY
+Discard all events on the event queue.
+Call XEventsQueued with mode QueuedAfterFlush
+and verify that blocking did not occur.
+Discard all events on the event queue.
+Call XEventsQueued with mode QueuedAfterReading
+and verify that blocking did not occur.
+>>CODE
+Block_Info info;
+int block_status;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XEventsQueued with mode QueuedAfterFlush */
+/* and verify that blocking did not occur. */
+ XEventsQueued_Type(info, QueuedAfterFlush);
+ block_status = block(display, (XEvent *) NULL, &info);
+ if (block_status == -1)
+ return;
+ else
+ CHECK;
+ if (block_status == 1) {
+ report("Blocking occurred with QueuedAfterFlush when it should not have.");
+ FAIL;
+ }
+ else
+ CHECK;
+ if (info.int_return != 0) {
+ delete("Unexpected number of events in event queue: %d", info.int_return);
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XEventsQueued with mode QueuedAfterReading */
+/* and verify that blocking did not occur. */
+ XEventsQueued_Type(info, QueuedAfterReading);
+ block_status = block(display, (XEvent *) NULL, &info);
+ if (block_status == -1)
+ return;
+ else
+ CHECK;
+ if (block_status == 1) {
+ report("Blocking occurred with QueuedAfterReading when it should not have.");
+ FAIL;
+ }
+ else
+ CHECK;
+ if (info.int_return != 0) {
+ delete("Unexpected number of events in event queue: %d", info.int_return);
+ return;
+ }
+ else
+ CHECK;
+ CHECKPASS(6);
diff --git a/xc/test/xsuite/xtest/tset/CH08/exps/exps.m b/xc/test/xsuite/xtest/tset/CH08/exps/exps.m
new file mode 100644
index 000000000..2790514b8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/exps/exps.m
@@ -0,0 +1,356 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE Expose CH08
+>>EXTERN
+#define EVENT Expose
+#define MASK ExposureMask
+>>ASSERTION Good A
+The server does not generate xname events
+on windows whose class is specified as
+.S InputOnly .
+>>STRATEGY
+Create InputOnly window.
+Select for Expose and MapNotify events on window.
+Map window.
+Verify that a MapNotify event was received.
+Verify that no Expose events were received.
+>>CODE
+Display *display = Dsp;
+Window w;
+XEvent event_return;
+int events;
+
+#ifdef OTHERMASK
+#undef OTHERMASK
+#endif
+#define OTHERMASK StructureNotifyMask
+#ifdef OTHEREVENT
+#undef OTHEREVENT
+#endif
+#define OTHEREVENT MapNotify
+
+/* Create InputOnly window. */
+ w = iponlywin(display);
+/* Select for Expose and MapNotify events on window. */
+ XSelectInput(display, w, MASK|OTHERMASK);
+/* Map window. */
+ XSync(display, True);
+ XMapWindow(display, w);
+ XSync(display, False);
+/* Verify that a MapNotify event was received. */
+ if (!XCheckTypedWindowEvent(display, w, OTHEREVENT, &event_return)) {
+ delete("Expected %s event, got none", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+/* Verify that no Expose events were received. */
+ if (XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ delete("Got %s event, expected none", eventname(EVENT));
+ return;
+ }
+ else
+ CHECK;
+ events = XPending(display);
+ if (events > 0) {
+ delete("Received %d more events than expected", events);
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION def
+>>#NOTE Tested below in the "...all clients having set..." assertion.
+When no valid contents are available for regions of a window
+and the regions are visible,
+then an xname event is generated.
+>>ASSERTION Good B 1
+>>#NOTE Can't predict when/how the server will perform backing-store.
+When no valid contents are available for regions of a window
+and the regions are viewable but not visible
+and the server is maintaining backing store on the window,
+then an xname event is generated.
+>>ASSERTION Good B 1
+>>#NOTE Can't predict when/how the server will perform backing-store.
+When no valid contents are available for regions of a window
+and the window is not viewable but the server is honoring
+the window's backing-store attribute of
+.S Always
+or
+.S WhenMapped ,
+then an xname event is generated.
+>>ASSERTION Good A
+When an xname events are generated,
+then they are contiguously delivered by the server.
+>>STRATEGY
+Build and create window hierarchy.
+Choose event window.
+Select for Expose events on event window.
+Generate Expose events on event window.
+Verify that events are contiguously delivered.
+>>CODE
+Display *display = Dsp;
+Winh *eventw;
+Winh *child;
+Winhe *winhe;
+int expected;
+int lastcount;
+
+/* Build and create window hierarchy. */
+ if (winh(display, 2, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Choose event window. */
+ eventw = guardian->firstchild;
+/* Select for Expose events on event window. */
+ if (winh_selectinput(display, eventw, MASK))
+ return;
+ else
+ CHECK;
+/* Generate Expose events on event window. */
+ XSync(display, True);
+ for (child = eventw->firstchild; child != (Winh *) NULL; child = child->nextsibling) {
+ static int first = 1;
+
+ if (first) {
+ first = 0;
+ CHECK;
+ }
+ XUnmapWindow(display, child->window);
+ }
+ XSync(display, False);
+/* Verify that events are contiguously delivered. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_qdel == (Winhe *) NULL) {
+ delete("No events delivered.");
+ return;
+ }
+ else
+ CHECK;
+ expected = -1;
+ for (winhe = winh_qdel; winhe != (Winhe *) NULL; winhe = winhe->next) {
+ if (expected == -1)
+ CHECK;
+ if (winhe->event->type != EVENT) {
+ report("Received %s event while only expecting %s types",
+ eventname(winhe->event->type), eventname(EVENT));
+ delete("Unexpected event received.");
+ return;
+ }
+ lastcount = winhe->event->xexpose.count;
+ if (expected == -1) {
+ expected = lastcount;
+ }
+ else {
+ if (lastcount > expected) {
+ report("Count (%d) greater than expected (%d)",
+ lastcount, expected);
+ FAIL;
+ break;
+ }
+ else if (lastcount < expected)
+ expected--;
+ }
+ }
+ if (lastcount != 0) {
+ report("Last %s had count set to %d, not zero",
+ eventname(EVENT), lastcount);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(7);
+>>ASSERTION Good A
+When an xname event is generated,
+then
+all clients having set
+.S ExposureMask
+event mask bits on the event window are delivered
+an xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Build and create window hierarchy.
+Choose event window.
+Select for Expose events on event window.
+Select for Expose events on event window with client2.
+Select for no events on event window with client3.
+Generate Expose events on event window.
+Verify that events are delivered to selecting clients.
+Verify that no Expose events are received for client3.
+>>CODE
+Display *display = Dsp;
+Display *client2, *client3;
+Winh *eventw;
+int events;
+Window w;
+XEvent event_return;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ if (winh(display, 2, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Choose event window. */
+ eventw = guardian->firstchild;
+ w = eventw->window;
+/* Select for Expose events on event window. */
+ XSelectInput(display, w, MASK);
+/* Select for Expose events on event window with client2. */
+ XSelectInput(client2, w, MASK);
+/* Select for no events on event window with client3. */
+ XSelectInput(client3, w, NoEventMask);
+/* Generate Expose events on event window. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XUnmapWindow(display, eventw->firstchild->window);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that events are delivered to selecting clients. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ delete("Expected %s event, got none", eventname(EVENT));
+ return;
+ }
+ else
+ CHECK;
+ if (!XCheckTypedWindowEvent(client2, w, EVENT, &event_return)) {
+ delete("Expected %s event, got none with client2", eventname(EVENT));
+ return;
+ }
+ else
+ CHECK;
+/* Verify that no Expose events are received for client3. */
+ if (XCheckTypedWindowEvent(client3, w, EVENT, &event_return)) {
+ delete("Got %s event, expected none", eventname(EVENT));
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(6);
+>>ASSERTION def
+>>#NOTE True for most events (except MappingNotify and selection stuff).
+When an xname event is generated,
+then
+clients not having set
+.S ExposureMask
+event mask bits on the event window are not delivered
+an xname event.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates relative to the window's origin
+>>#NOTEs and indicate the upper-left corner of the rectangle defining the exposed region.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M width
+>>#NOTEs and
+>>#NOTEs .M height
+>>#NOTEs are set to
+>>#NOTEs the size (extent) of the rectangle.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When
+>>#NOTEs .M count
+>>#NOTEs is set to zero,
+>>#NOTEs then no further xname events are to follow for the exposed DRAWABLE.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When
+>>#NOTEs .M count
+>>#NOTEs is greater than zero,
+>>#NOTEs then at least
+>>#NOTEs .M count
+>>#NOTEs xname events
+>>#NOTEs are to follow for the exposed DRAWABLE.
diff --git a/xc/test/xsuite/xtest/tset/CH08/fcsin/fcsin.m b/xc/test/xsuite/xtest/tset/CH08/fcsin/fcsin.m
new file mode 100644
index 000000000..f3e309f93
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/fcsin/fcsin.m
@@ -0,0 +1,3019 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE FocusIn CH08
+>>SET startup focusstartup
+>>SET cleanup focuscleanup
+>>EXTERN
+#define EVENT FocusIn
+#define OTHEREVENT FocusOut
+#define MASK FocusChangeMask
+
+static Display *_display_;
+static int _detail_;
+static long _event_mask_;
+static XEvent good;
+
+static int
+selectinput(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+ winh_free(previous);
+#endif
+ return(winh_selectinput(_display_, current, _event_mask_));
+}
+
+static int
+plant(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+ winh_free(previous);
+#endif
+ good.xany.window = current->window;
+ return(winh_plant(current, &good, NoEventMask, WINH_NOMASK));
+}
+
+static Bool increasing; /* event sequence increases as we climb */
+
+static int
+checksequence(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+ Winhe *d;
+ int current_sequence;
+ int status;
+ static int last_sequence;
+
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+#endif
+ /* look for desired event type */
+ for (d = current->delivered; d != (Winhe *) NULL; d = d->next) {
+ if (d->event->type == good.type) {
+ current_sequence = d->sequence;
+ break;
+ }
+ }
+ if (d == (Winhe *) NULL) {
+ report("%s event not delivered", eventname(good.type));
+ delete("Missing event");
+ return(-1);
+ }
+ if (previous == (Winh *) NULL)
+ status = 0; /* first call, no previous sequence value */
+ else {
+ /* assume sequence numbers are not the same */
+ status = (current_sequence < last_sequence);
+ if (increasing)
+ status = (status ? 0 : 1);
+ if (status)
+ report("Ordering problem between 0x%x (%d) and 0x%x (%d)",
+ current->window, current_sequence,
+ previous->window, last_sequence);
+ }
+ last_sequence = current_sequence;
+ return(status);
+}
+
+static int
+checkdetail(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+ Winhe *d;
+
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+ winh_free(previous);
+#endif
+ /* look for desired event type */
+ for (d = current->delivered; d != (Winhe *) NULL; d = d->next)
+ if (d->event->type == good.type)
+ break;
+ if (d == (Winhe *) NULL) {
+ report("%s event not delivered to window 0x%x",
+ eventname(good.type), current->window);
+ delete("Missing event");
+ return(-1);
+ }
+ /* check detail */
+ if (_detail_ != d->event->xfocus.detail) {
+ report("Expected detail of %d, got %d on window 0x%x",
+ _detail_, d->event->xfocus.detail, current->window);
+ return(1);
+ }
+ return(0);
+}
+>>ASSERTION Good A
+When a xname event is generated,
+then
+all clients having set
+.S FocusChangeMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+Create client.
+Create clients client2 and client3.
+Create window.
+Move pointer to known location.
+Select for xname events on window.
+Select for xname events on window with client2.
+Select for no events on window with client3.
+Generate xname event by changing focus to window.
+Verify that xname event was delivered.
+Verify members in delivered xname event structure.
+Verify that xname event was delivered to client2.
+Verify members in delivered xname event structure.
+Verify that no events were delivered to client3.
+>>CODE
+int i;
+Display *display;
+Display *client2, *client3;
+Window w;
+XEvent event;
+XFocusChangeEvent good;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, True);
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL) {
+ report("Couldn't move pointer");
+ return;
+ }
+ else
+ CHECK;
+/* Select for xname events on window. */
+ XSelectInput(display, w, MASK);
+/* Select for xname events on window with client2. */
+ XSelectInput(client2, w, MASK);
+/* Select for no events on window with client3. */
+ XSelectInput(client3, w, NoEventMask);
+/* Generate xname event by changing focus to window. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XSetInputFocus(display, w, RevertToNone, CurrentTime);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that xname event was delivered. */
+ if (XPending(display) < 1) {
+ report("Expected %s event not delivered.", eventname(EVENT));
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+/* Verify members in delivered xname event structure. */
+ XNextEvent(display, &event);
+ good = event.xfocus;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.mode = NotifyNormal;
+ good.detail = NotifyAncestor;
+ if (checkevent((XEvent*)&good, &event)) {
+ report("Unexpected event structure member value(s)");
+ FAIL;
+ }
+ else
+ CHECK;
+ if ((i = XPending(display)) > 0) {
+ report("Expected 1 event, got %d", i+1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that xname event was delivered to client2. */
+ if (XPending(client2) < 1) {
+ report("Expected %s event not delivered to client2.", eventname(EVENT));
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+/* Verify members in delivered xname event structure. */
+ XNextEvent(client2, &event);
+ good = event.xfocus;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = client2;
+ good.window = w;
+ good.mode = NotifyNormal;
+ good.detail = NotifyAncestor;
+ if (checkevent((XEvent*)&good, &event)) {
+ report("Unexpected event structure member value(s) for client2");
+ FAIL;
+ }
+ else
+ CHECK;
+ if ((i = XPending(client2)) > 0) {
+ report("Expected 1 event, got %d for client2", i+1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ if ((i = XPending(client3)) > 0) {
+ report("Expected 0 events, got %d for client3", i);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(11);
+>>ASSERTION def
+>>#NOTE Tested for in pervious assertion.
+When a xname event is generated,
+then
+clients not having set
+.S FocusChangeMask
+event mask bits on the event window are not delivered
+a xname event.
+>>#NOTEd >>ASSERTION
+>>#NOTEd When the input focus changes,
+>>#NOTEd then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is generated while the pointer is not grabbed,
+>>#NOTEs then
+>>#NOTEs .A mode
+>>#NOTEs is set to
+>>#NOTEs .S NotifyNormal .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is generated while the pointer is grabbed,
+>>#NOTEs then
+>>#NOTEs .A mode
+>>#NOTEs is set to
+>>#NOTEs .S NotifyWhileGrabbed .
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is generated
+>>#NOTEm and a keyboard grab activates,
+>>#NOTEm then xname events are generated as if the focus were to change from
+>>#NOTEm the old focus to the grab window with
+>>#NOTEm .A mode
+>>#NOTEm is set to
+>>#NOTEm .S NotifyGrab .
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is generated
+>>#NOTEm and a keyboard grab deactivates,
+>>#NOTEm then xname events are generated as if the focus were to change from
+>>#NOTEm the grab window to the new focus with
+>>#NOTEm .A mode
+>>#NOTEm is set to
+>>#NOTEm .S NotifyUngrab .
+>>ASSERTION def
+>>#NOTE Tested for in most assertions.
+All xname events are delivered after
+any related
+.S FocusOut
+are delivered.
+>>ASSERTION Good A
+>>#NOTE Am getting a detail of NotifyAncestor instead of NotifyInferior
+>>#NOTE (i.e. the test fails).
+When the input focus moves from window A to window B
+and window A is an inferior of window B
+and the pointer is in window P,
+then a xname event is generated on window B,
+with
+.M detail
+set to
+.S NotifyInferior .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Move pointer to known location.
+Set window B.
+Set window A to inferior of window B.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to window B with detail set to NotifyInferior.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 3;
+Winh *A, *B;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window B. */
+ B = guardian->firstchild;
+/* Set window A to inferior of window B. */
+ A = B->firstchild;
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(A, B, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(B, B, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event(A, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to window B with detail set to NotifyInferior. */
+ _detail_ = NotifyInferior;
+ if (winh_climb(B, B, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(9);
+>>ASSERTION Good A
+When the input focus moves from window A to window B
+and window A is an inferior of window B
+and the pointer is in window P
+and window P is an inferior of window B
+and window P is not the same window as window A
+and window P is not an inferior of window A
+and window P is not an ancestor of window A,
+then, after a xname event is generated on window B
+with
+.M detail
+set to
+.S NotifyInferior ,
+a xname event is generated on each window
+below window B,
+down to and including window P,
+with
+.M detail
+set to
+.S NotifyPointer .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Move pointer to known location.
+Set window B.
+Set window A to inferior of window B.
+Set window P to inferior of sibling of window A.
+Move pointer to window P.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to window B with detail set to NotifyInferior.
+Verify that event delivered below window B, down to and including
+window P, with detail set to NotifyPointer.
+Verify order of xname event delivery.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *B, *P, *Pancestor;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window B. */
+ B = guardian->firstchild;
+/* Set window A to inferior of window B. */
+ A = B->firstchild;
+/* Set window P to inferior of sibling of window A. */
+ Pancestor = B->firstchild->nextsibling;
+ P = Pancestor->firstchild->firstchild;
+/* Move pointer to window P. */
+ XWarpPointer(display, None, P->window, 0, 0, 0, 0, 0, 0);
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(P, Pancestor, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(A, B, selectinput)) {
+ report("Could not select for events between A and B");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(P, B, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to window B with detail set to NotifyInferior. */
+ _detail_ = NotifyInferior;
+ if (winh_climb(B, B, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered below window B, down to and including */
+/* window P, with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, Pancestor, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = True;
+ if (winh_climb(P, B, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(12);
+>>ASSERTION Good A
+When the input focus moves from window A to window B
+and window B is an inferior of window A
+and the pointer is in window P,
+then a xname event is generated on each window
+between window A and window B,
+exclusive,
+with
+.M detail
+set to
+.S NotifyVirtual
+and then on window B
+with
+.M detail
+set to
+.S NotifyAncestor .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Move pointer to known location.
+Set window A.
+Set window B to inferior of window A.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to windows between window A and window B, exclusive,
+with detail set to NotifyVirtual.
+Verify that event delivered to window B with detail set to NotifyAncestor.
+Verify order of xname event delivery.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *B;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window A. */
+ A = guardian->firstchild;
+/* Set window B to inferior of window A. */
+ B = A->firstchild->firstchild->firstchild;
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _display_ = display;
+#if 0
+ _event_mask_ = MASK;
+ if (winh_climb(B, A->firstchild, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+#endif
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(B, A->firstchild, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to windows between window A and window B, exclusive, */
+/* with detail set to NotifyVirtual. */
+ _detail_ = NotifyVirtual;
+ if (winh_climb(B->parent, A->firstchild, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered to window B with detail set to NotifyAncestor. */
+ _detail_ = NotifyAncestor;
+ if (winh_climb(B, B, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = True;
+ if (winh_climb(B, A->firstchild, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(11);
+>>ASSERTION Good A
+When the input focus moves from window A to window B
+and window C is their least common ancestor
+and the pointer is in window P,
+then a xname event is generated on
+each window between C and B, exclusive,
+with
+.M detail
+set to
+.S NotifyNonlinearVirtual
+and then on window B
+with
+.M detail
+set to
+.S NotifyNonlinear .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Move pointer to known location.
+Set window C.
+Set window B to inferior of window C.
+Set window A to inferior of window C.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to windows between window C and window B, exclusive,
+with detail set to NotifyNonlinearVirtual.
+Verify that event delivered to window B with detail set to NotifyNonlinear.
+Verify order of xname event delivery.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *B, *C;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window C. */
+ C = guardian->firstchild;
+/* Set window B to inferior of window C. */
+ B = C->firstchild->firstchild->firstchild;
+/* Set window A to inferior of window C. */
+ A = C->firstchild->nextsibling->firstchild;
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(B, C->firstchild, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(A, C, selectinput)) {
+ report("Could not select for events between A and C");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(B, C->firstchild, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to windows between window C and window B, exclusive, */
+/* with detail set to NotifyNonlinearVirtual. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(B->parent, C->firstchild, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered to window B with detail set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(B, B, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = True;
+ if (winh_climb(B, C->firstchild, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(12);
+>>ASSERTION Good A
+When the input focus moves from window A to window B
+and window C is their least common ancestor
+and the pointer is in window P
+and window P is an inferior of window B,
+then, after the related xname events are generated
+with
+.M detail
+set to
+.S NotifyNonlinearVirtual
+and
+.S NotifyNonlinear ,
+a xname event is generated on
+each window below window B down to and including window P,
+with
+.M detail
+set to
+.S NotifyPointer .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Move pointer to known location.
+Set window C.
+Set window B to inferior of window C.
+Set window P to inferior of window B.
+Set window A to inferior of window C.
+Move pointer to window P.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to windows between window C and window B, exclusive,
+with detail set to NotifyNonlinearVirtual.
+Verify that event delivered to window B with detail set to NotifyNonlinear.
+Verify that events were delivered to windows below window B down to and
+including window P, exclusive,
+with detail set to NotifyPointer.
+Verify order of xname event delivery.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 5;
+Winh *A, *B, *C, *P;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window C. */
+ C = guardian->firstchild;
+/* Set window B to inferior of window C. */
+ B = C->firstchild->firstchild;
+/* Set window P to inferior of window B. */
+ P = B->firstchild->firstchild;
+/* Set window A to inferior of window C. */
+ A = C->firstchild->nextsibling->firstchild;
+/* Move pointer to window P. */
+ XWarpPointer(display, None, P->window, 0, 0, 0, 0, 0, 0);
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(B, C->firstchild, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(A, C, selectinput)) {
+ report("Could not select for events between A and C");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(P, B, selectinput)) {
+ report("Could not select for events between P and B");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(B, C->firstchild, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(P, B->firstchild, plant)) {
+ report("Could not plant events below B");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to windows between window C and window B, exclusive, */
+/* with detail set to NotifyNonlinearVirtual. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(B->parent, C->firstchild, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered to window B with detail set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(B, B, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that events were delivered to windows below window B down to and */
+/* including window P, exclusive, */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, B->firstchild, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = True;
+ if (winh_climb(B, C->firstchild, checksequence))
+ FAIL;
+ else
+ CHECK;
+ increasing = True;
+ if (winh_climb(P, B->firstchild, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(16);
+>>ASSERTION Good C
+If the implementation supports multiple screens:
+When the input focus moves from window A to window B
+and window A and window B are not on the same screens
+and the pointer is in window P
+and window B is not a root window,
+then a xname event is generated on
+each window from window B's root down to but not including window B,
+with
+.M detail
+set to
+.S NotifyNonlinearVirtual .
+>>STRATEGY
+Check to see if multiple screens are supported.
+Create client.
+Build window hierarchy on all supported screens.
+Move pointer to known location.
+Set window A.
+Set window B to an inferior of the root window on a different screen than A.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to each window from window B's root down
+to but not including window B
+with detail set to NotifyNonlinearVirtual.
+Verify order of xname event delivery.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *B, *Broot;
+int status;
+
+/* Check to see if multiple screens are supported. */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ }
+ else
+ CHECK;
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window A. */
+ A = guardian->firstchild;
+/* Set window B to an inferior of the root window on a different screen than A. */
+ Broot = guardian->nextsibling;
+ B = Broot->firstchild->firstchild->firstchild;
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(B->parent, Broot, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(A, A, selectinput)) {
+ report("Could not select for events on window A");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(B->parent, Broot, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to each window from window B's root down */
+/* to but not including window B */
+/* with detail set to NotifyNonlinearVirtual. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(B->parent, Broot, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = True;
+ if (winh_climb(B->parent, Broot, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(12);
+>>ASSERTION Good C
+If the implementation supports multiple screens:
+When the input focus moves from window A to window B
+and window A and window B are not on the same screens
+and the pointer is in window P,
+then,
+after any related xname events are generated with
+.M detail
+set to
+.S NotifyNonlinearVirtual ,
+a xname event is generated on window B
+with
+.M detail
+set to
+.S NotifyNonlinear .
+>>STRATEGY
+Check to see if multiple screens are supported.
+Create client.
+Build window hierarchy on all supported screens.
+Move pointer to known location.
+Set window A.
+Set window B to an inferior of the root window on a different screen than A.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to each window from window B's root down
+to but not including window B
+with detail set to NotifyNonlinearVirtual.
+Verify that event delivered on window B with detail
+set to NotifyNonlinear.
+Verify order of xname event delivery.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *B, *Broot;
+int status;
+
+/* Check to see if multiple screens are supported. */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ }
+ else
+ CHECK;
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window A. */
+ A = guardian->firstchild;
+/* Set window B to an inferior of the root window on a different screen than A. */
+ Broot = guardian->nextsibling;
+ B = Broot->firstchild->firstchild->firstchild;
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(B, Broot, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(A, A, selectinput)) {
+ report("Could not select for events on window A");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(B, Broot, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to each window from window B's root down */
+/* to but not including window B */
+/* with detail set to NotifyNonlinearVirtual. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(B->parent, Broot, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered on window B with detail */
+/* set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(B, B, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = True;
+ if (winh_climb(B, Broot, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(13);
+>>ASSERTION Good C
+If the implementation supports multiple screens:
+When the input focus moves from window A to window B
+and window A and window B are not on the same screens
+and the pointer is in window P
+and window P is an inferior of window B,
+then a xname event is generated on window B
+with
+.M detail
+set to
+.S NotifyNonlinear .
+>>STRATEGY
+Check to see if multiple screens are supported.
+Create client.
+Build window hierarchy on all supported screens.
+Move pointer to known location.
+Set window A.
+Set window B.
+Set P to inferior of window B.
+Set input focus to window A.
+Move pointer to window P.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered on window B with detail
+set to NotifyNonlinear.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 2;
+Winh *A, *B, *P;
+int status;
+
+/* Check to see if multiple screens are supported. */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ }
+ else
+ CHECK;
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window A. */
+ A = guardian->firstchild;
+/* Set window B. */
+ B = guardian->nextsibling->firstchild;
+/* Set P to inferior of window B. */
+ P = guardian->nextsibling->firstchild;
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Move pointer to window P. */
+ XWarpPointer(display, None, P->window, 0, 0, 0, 0, 0, 0);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(B, B, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(A, A, selectinput)) {
+ report("Could not select for events on window A");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(B, B, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered on window B with detail */
+/* set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(B, B, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(11);
+>>ASSERTION Good C
+If the implementation supports multiple screens:
+When the input focus moves from window A to window B
+and window A and window B are not on the same screens
+and the pointer is in window P
+and window P is an inferior of window B,
+then, after the related xname events are generated
+with
+.M detail
+set to
+.S NotifyNonlinearVirtual
+and
+.S NotifyNonlinear ,
+a xname event is generated on
+each window below window B down to and including window P
+with
+.M detail
+set to
+.S NotifyPointer .
+>>STRATEGY
+Check to see if multiple screens are supported.
+Create client.
+Build window hierarchy on all supported screens.
+Move pointer to known location.
+Set window A.
+Set window B to an inferior of the root window on a different screen than A.
+Set window P to an inferior of B.
+Set input focus to window A.
+Move pointer to window P.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to each window from window B's root down
+to but not including window B
+with detail set to NotifyNonlinearVirtual.
+Verify that event delivered on window B with detail
+set to NotifyNonlinear.
+Verify that event delivered to each window from window B down
+to and including window P
+with detail set to NotifyPointer.
+Verify order of xname event delivery.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 5;
+Winh *A, *B, *Broot, *P;
+int status;
+
+/* Check to see if multiple screens are supported. */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ }
+ else
+ CHECK;
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window A. */
+ A = guardian->firstchild;
+/* Set window B to an inferior of the root window on a different screen than A. */
+ Broot = guardian->nextsibling;
+ B = Broot->firstchild->firstchild;
+/* Set window P to an inferior of B. */
+ P = B->firstchild->firstchild;
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Move pointer to window P. */
+ XWarpPointer(display, None, P->window, 0, 0, 0, 0, 0, 0);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(P, Broot, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(A, A, selectinput)) {
+ report("Could not select for events on window A");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(P, Broot, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to each window from window B's root down */
+/* to but not including window B */
+/* with detail set to NotifyNonlinearVirtual. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(B->parent, Broot, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered on window B with detail */
+/* set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(B, B, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered to each window from window B down */
+/* to and including window P */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, B->firstchild, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = True;
+ if (winh_climb(P, Broot, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(14);
+>>ASSERTION def
+>>#NOTE Tested for in next test.
+When the focus moves from window A to
+.S PointerRoot
+(events sent to the window under the pointer)
+and the pointer is in window P,
+then a xname event is generated on
+the root window of all screens,
+with
+.M detail
+set to
+.S NotifyPointerRoot .
+>>ASSERTION Good A
+When the focus moves from window A to
+.S PointerRoot
+(events sent to the window under the pointer)
+and the pointer is in window P,
+then, after the related xname events are generated
+with
+.M detail
+set to
+.S NotifyPointerRoot ,
+a xname event is generated on
+each window from window P's root down to and including window P,
+with
+.M detail
+set to
+.S NotifyPointer .
+>>STRATEGY
+Create client.
+Build window hierarchy on all supported screens.
+Set window A.
+Set window P.
+Move pointer to window P.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to PointerRoot.
+Verify that the expected events were delivered.
+Verify that event delivered to the root window of all screens
+with detail set to NotifyPointerRoot.
+Verify that event generated on each window from window P's root down
+to and including window P with detail set to NotifyPointer.
+Verify that these events occurred in the correct order.
+Verify that the NotifyPointerRoot events were delivered before
+NotifyPointer events.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *P, *Proot, *ptr;
+Winhe *winhe;
+int status;
+int high;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set window A. */
+ A = guardian->firstchild;
+/* Set window P. */
+ Proot = guardian;
+ P = Proot->firstchild->firstchild;
+/* Move pointer to window P. */
+ if (warppointer(display, P->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ /* root window of all screens */
+ for (ptr = guardian; ptr != (Winh *) NULL; ptr = ptr->nextsibling) {
+ if (ptr == guardian)
+ CHECK;
+ good.xany.window = ptr->window;
+ if (winh_plant(ptr, &good, MASK, WINH_NOMASK)) {
+ report("Could not plant events");
+ return;
+ }
+ }
+ /* from P's root to P */
+ if (winh_climb(P, Proot, plant)) {
+ report("Could not plant events between P's root and P");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to PointerRoot. */
+ XSync(display, True);
+ XSetInputFocus(display, PointerRoot, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to the root window of all screens */
+/* with detail set to NotifyPointerRoot. */
+ _detail_ = NotifyPointerRoot;
+ /* used to keep track of last NotifyPointerRoot event */
+ high = 0;
+ for (ptr = guardian; ptr != (Winh *) NULL; ptr = ptr->nextsibling) {
+ if (ptr == guardian)
+ CHECK;
+ /*
+ * skip to first FocusIn-type event
+ */
+ for (winhe = ptr->delivered; winhe != (Winhe *) NULL; winhe = winhe->next) {
+ if (winhe->event->type == EVENT)
+ break;
+ }
+ if (winhe == (Winhe *) NULL) {
+ delete("Lost %s event in delivered list",
+ eventname(EVENT));
+ return;
+ }
+ if (winhe->sequence > high)
+ high = winhe->sequence;
+ if (winhe->event->xfocus.detail != _detail_) {
+ report("Got detail %d, expected %d on window 0x%x",
+ winhe->event->xfocus.detail,
+ _detail_, ptr->window);
+ FAIL;
+ }
+ else {
+ /*
+ * cause this event to be ignored during
+ * later checks for FocusIn events
+ */
+ winhe->event->type = 0;
+ }
+ }
+/* Verify that event generated on each window from window P's root down */
+/* to and including window P with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, Proot, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that these events occurred in the correct order. */
+ increasing = True;
+ if (winh_climb(P, Proot, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that the NotifyPointerRoot events were delivered before */
+/* NotifyPointer events. */
+ for (winhe = Proot->delivered; winhe != (Winhe *) NULL; winhe = winhe->next) {
+ if (winhe == Proot->delivered)
+ CHECK;
+ if (winhe->event->type == EVENT)
+ break;
+ }
+ if (winhe == (Winhe *) NULL) {
+ delete("Lost %s event in delivered list of Proot",
+ eventname(EVENT));
+ return;
+ }
+ else
+ CHECK;
+ if (high > winhe->sequence) {
+ report("NotifyPointerRoot events not delivered before all NotifyPointer events");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status) {
+ int in, out;
+
+ in = winh_eventindex(EVENT);
+ out = winh_eventindex(OTHEREVENT);
+ report("%s: %d, %s: %d",
+ eventname(EVENT), winh_event_stats[in].low,
+ eventname(OTHEREVENT), winh_event_stats[out].high
+ );
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ CHECKPASS(15);
+>>ASSERTION Good A
+When the focus moves from window A to
+.S None
+(discard)
+and the pointer is in window P,
+then a xname event is generated on
+the root window of all screens,
+with
+.M detail
+set to
+.S NotifyDetailNone .
+>>STRATEGY
+Create client.
+Build window hierarchy on all supported screens.
+Set window A.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to None.
+Verify that the expected events were delivered.
+Verify that event delivered to the root window of all screens
+with detail set to NotifyDetailNone.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 1;
+Winh *A, *ptr;
+Winhe *winhe;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set window A. */
+ A = guardian->firstchild;
+ /* Don't bother moving the pointer to known location. */
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ /* root window of all screens */
+ for (ptr = guardian; ptr != (Winh *) NULL; ptr = ptr->nextsibling) {
+ if (ptr == guardian)
+ CHECK;
+ good.xany.window = ptr->window;
+ if (winh_plant(ptr, &good, MASK, WINH_NOMASK)) {
+ report("Could not plant events");
+ return;
+ }
+ }
+/* Generate xname event by changing focus from A to None. */
+ XSync(display, True);
+ XSetInputFocus(display, None, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to the root window of all screens */
+/* with detail set to NotifyDetailNone. */
+ _detail_ = NotifyDetailNone;
+ for (ptr = guardian; ptr != (Winh *) NULL; ptr = ptr->nextsibling) {
+ if (ptr == guardian)
+ CHECK;
+ /*
+ * skip to first FocusIn-type event
+ */
+ for (winhe = ptr->delivered; winhe != (Winhe *) NULL; winhe = winhe->next) {
+ if (winhe->event->type == EVENT)
+ break;
+ }
+ if (winhe == (Winhe *) NULL) {
+ delete("Lost %s event in delivered list",
+ eventname(EVENT));
+ return;
+ }
+ if (winhe->event->xfocus.detail != _detail_) {
+ report("Got detail %d, expected %d on window 0x%x",
+ winhe->event->xfocus.detail,
+ _detail_, ptr->window);
+ FAIL;
+ }
+ }
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(8);
+>>ASSERTION Good A
+>>#NOTE One could argue that this is tested sufficiently in the next assertion.
+When the focus moves from
+.S PointerRoot
+(events sent to the window under the pointer)
+or
+.S None
+(discard)
+to window A
+and the pointer is in window P
+and window A is not a root window,
+then a xname event is generated on
+each window from window A's root down to but not including window A,
+with
+.M detail
+set to
+.S NotifyNonlinearVirtual .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Set window A.
+Move pointer to known location.
+Set input focus to PointerRoot.
+Select for Focus events on windows.
+Generate xname event by changing focus from PointerRoot to A.
+Verify that the expected events were delivered.
+Verify that event delivered on each window from window A's root down to
+but not including window A
+with detail set to NotifyNonlinearVirtual.
+Verify that these events occurred in the correct order.
+Verify that all xname events are delivered after all
+FocusOut events.
+Repeat with focus initially set to None.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *Aroot;
+int status;
+int i;
+static Window focuses[] = {
+ (Window) PointerRoot,
+ (Window) None
+};
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set window A. */
+ Aroot = guardian;
+ A = Aroot->firstchild->firstchild->firstchild;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+ for (i = 0; i < NELEM(focuses); i++) {
+/* Set input focus to PointerRoot. */
+ XSetInputFocus(display, focuses[i], RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ /*
+ * Plant at A instead of A->parent because we will also be getting
+ * an xname event on A with detail set to NotifyNonlinear.
+ */
+ if (winh_climb(A, Aroot, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from PointerRoot to A. */
+ XSync(display, True);
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered on each window from window A's root down to */
+/* but not including window A */
+/* with detail set to NotifyNonlinearVirtual. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(A->parent, Aroot, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that these events occurred in the correct order. */
+ increasing = True;
+ if (winh_climb(A->parent, Aroot, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+/* Repeat with focus initially set to None. */
+ }
+ CHECKPASS(3 + (7*NELEM(focuses)));
+>>ASSERTION Good A
+>>#NOTE One could argue that this is tested sufficiently in the next assertion.
+>>#NOTE
+>>#NOTE The approved (and incorrect) form of this assertion used to
+>>#NOTE contain the following phrase:
+>>#NOTE
+>>#NOTE then a xname event is generated on
+>>#NOTE
+>>#NOTE Additional text was inserted after the "then" to reflect
+>>#NOTE ordering with respect to NotifyNonlinearVirtual FocusIn events.
+When the focus moves from
+.S PointerRoot
+(events sent to the window under the pointer)
+or
+.S None
+(discard)
+to window A
+and the pointer is in window P,
+then, after any related xname events are generated
+with
+.M detail
+set to
+.S NotifyNonlinearVirtual ,
+a xname event is generated
+on window A
+with
+.M detail
+set to
+.S NotifyNonlinear .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Set window A.
+Move pointer to known location.
+Set input focus to PointerRoot.
+Select for Focus events on windows.
+Generate xname event by changing focus from PointerRoot to A.
+Verify that the expected events were delivered.
+Verify that event delivered on each window from window A's root down to
+but not including window A
+with detail set to NotifyNonlinearVirtual.
+Verify that event delivered on to window A
+with detail set to NotifyNonlinear.
+Verify that these events occurred in the correct order.
+Verify that all xname events are delivered after all
+FocusOut events.
+Repeat with focus initially set to None.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *Aroot;
+int status;
+int i;
+static Window focuses[] = {
+ (Window) PointerRoot,
+ (Window) None
+};
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set window A. */
+ Aroot = guardian;
+ A = Aroot->firstchild->firstchild->firstchild;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+ for (i = 0; i < NELEM(focuses); i++) {
+/* Set input focus to PointerRoot. */
+ XSetInputFocus(display, focuses[i], RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(A, Aroot, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from PointerRoot to A. */
+ XSync(display, True);
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered on each window from window A's root down to */
+/* but not including window A */
+/* with detail set to NotifyNonlinearVirtual. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(A->parent, Aroot, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered on to window A */
+/* with detail set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(A, A, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that these events occurred in the correct order. */
+ increasing = True;
+ if (winh_climb(A, Aroot, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+/* Repeat with focus initially set to None. */
+ }
+ CHECKPASS(3 + (8*NELEM(focuses)));
+>>ASSERTION Good A
+When the focus moves from
+.S PointerRoot
+(events sent to the window under the pointer)
+or
+.S None
+(discard)
+to window A
+and the pointer is in window P
+and window P is an inferior of window A,
+then, after the related xname events are generated
+with
+.M detail
+set to
+.S NotifyNonlinearVirtual
+and
+.S NotifyNonlinear ,
+a xname event is generated on
+each window below window A down to and including window P,
+with
+.M detail
+set to
+.S NotifyPointer .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Set window A.
+Set window P.
+Move pointer to window P.
+Set input focus to PointerRoot.
+Select for Focus events on windows.
+Generate xname event by changing focus from PointerRoot to A.
+Verify that the expected events were delivered.
+Verify that event delivered on each window from window A's root down to
+but not including window A
+with detail set to NotifyNonlinearVirtual.
+Verify that event delivered on to window A
+with detail set to NotifyNonlinear.
+Verify that event delivered on each window below window A down to
+and including window P
+with detail set to NotifyPointer.
+Verify that these events occurred in the correct order.
+Verify that all xname events are delivered after all
+FocusOut events.
+Repeat with focus initially set to None.
+>>CODE
+Display *display;
+int depth = 5;
+Winh *A, *Aroot, *P;
+int status;
+int i;
+static Window focuses[] = {
+ (Window) PointerRoot,
+ (Window) None
+};
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set window A. */
+ Aroot = guardian;
+ A = Aroot->firstchild->firstchild;
+/* Set window P. */
+ P = A->firstchild->firstchild;
+/* Move pointer to window P. */
+ if (warppointer(display, P->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+ for (i = 0; i < NELEM(focuses); i++) {
+/* Set input focus to PointerRoot. */
+ XSetInputFocus(display, focuses[i], RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(P, Aroot, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from PointerRoot to A. */
+ XSync(display, True);
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered on each window from window A's root down to */
+/* but not including window A */
+/* with detail set to NotifyNonlinearVirtual. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(A->parent, Aroot, checkdetail)) {
+ report("Bad detail on some window above A's parent");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event delivered on to window A */
+/* with detail set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(A, A, checkdetail)) {
+ report("Bad detail on window A");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event delivered on each window below window A down to */
+/* and including window P */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, A->firstchild, checkdetail)) {
+ report("Bad detail on some window below window A down to window P");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that these events occurred in the correct order. */
+ increasing = True;
+ if (winh_climb(P, Aroot, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+/* Repeat with focus initially set to None. */
+ }
+ CHECKPASS(3 + (9*NELEM(focuses)));
+>>ASSERTION Good A
+>>#NOTE
+>>#NOTE The approved wording for this assertion specified that detail
+>>#NOTE should be set to NotifyPointerRoot. This was incorrect and the
+>>#NOTE wording has been changed to specify that detail should be set to
+>>#NOTE NotifyDetailNone.
+>>#NOTE
+When the focus moves from
+.S PointerRoot
+(events sent to the window under the pointer)
+to
+.S None
+(discard)
+and the pointer is in window P,
+then a xname event is generated on
+the root window of all screens,
+with
+.M detail
+set to
+.S NotifyDetailNone .
+>>STRATEGY
+Create client.
+Build window hierarchy on all supported screens.
+Move pointer to known location.
+Set input focus to PointerRoot.
+Select for Focus events on windows.
+Generate xname event by changing focus from PointerRoot to None.
+Verify that the expected events were delivered.
+Verify that event delivered to the root window of all screens
+with detail set to NotifyDetailNone.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 2;
+Winh *ptr;
+Winhe *winhe;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set input focus to PointerRoot. */
+ XSetInputFocus(display, PointerRoot, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ /* root window of all screens */
+ for (ptr = guardian; ptr != (Winh *) NULL; ptr = ptr->nextsibling) {
+ if (ptr == guardian)
+ CHECK;
+ good.xany.window = ptr->window;
+ if (winh_plant(ptr, &good, MASK, WINH_NOMASK)) {
+ report("Could not plant events");
+ return;
+ }
+ }
+/* Generate xname event by changing focus from PointerRoot to None. */
+ XSync(display, True);
+ XSetInputFocus(display, None, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to the root window of all screens */
+/* with detail set to NotifyDetailNone. */
+ _detail_ = NotifyDetailNone;
+ for (ptr = guardian; ptr != (Winh *) NULL; ptr = ptr->nextsibling) {
+ if (ptr == guardian)
+ CHECK;
+ /*
+ * skip to first FocusIn-type event
+ */
+ for (winhe = ptr->delivered; winhe != (Winhe *) NULL; winhe = winhe->next) {
+ if (winhe->event->type == EVENT)
+ break;
+ }
+ if (winhe == (Winhe *) NULL) {
+ delete("Lost %s event in delivered list",
+ eventname(EVENT));
+ return;
+ }
+ if (winhe->event->xfocus.detail != _detail_) {
+ report("Got detail %d, expected %d on window 0x%x",
+ winhe->event->xfocus.detail,
+ _detail_, ptr->window);
+ FAIL;
+ }
+ else {
+ /*
+ * cause this event to be ignored during
+ * later checks for FocusIn events
+ */
+ winhe->event->type = 0;
+ }
+ }
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(9);
+>>ASSERTION Good A
+>>#NOTE
+>>#NOTE The approved wording for this assertion specified that detail
+>>#NOTE should be set to NotifyDetailNone. This was incorrect and the
+>>#NOTE wording has been changed to specify that detail should be set to
+>>#NOTE NotifyPointerRoot.
+>>#NOTE
+When the focus moves from
+None to PointerRoot
+and the pointer is in window P,
+then a xname event is generated on
+the root window of all screens,
+with
+.M detail
+set to
+.S NotifyPointerRoot .
+>>STRATEGY
+Create client.
+Build window hierarchy on all supported screens.
+Set window P.
+Move pointer to known location.
+Set input focus to None.
+Select for Focus events on windows.
+Generate xname event by changing focus from None to PointerRoot.
+Verify that the expected events were delivered.
+Verify that event delivered to the root window of all screens
+with detail set to NotifyPointerRoot.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 2;
+Winh *P, *ptr;
+Winhe *winhe;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set window P. */
+ P = guardian;
+/* Move pointer to known location. */
+ if (warppointer(display, P->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set input focus to None. */
+ XSetInputFocus(display, None, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ /* root window of all screens */
+ for (ptr = guardian; ptr != (Winh *) NULL; ptr = ptr->nextsibling) {
+ if (ptr == guardian)
+ CHECK;
+ good.xany.window = ptr->window;
+ if (winh_plant(ptr, &good, MASK, WINH_NOMASK)) {
+ report("Could not plant events");
+ return;
+ }
+ }
+ /* also expect a subsequent event on P */
+ good.xany.window = P->window;
+ if (winh_plant(P, &good, MASK, WINH_NOMASK)) {
+ report("Could not plant events on P");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from None to PointerRoot. */
+ XSync(display, True);
+ XSetInputFocus(display, PointerRoot, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to the root window of all screens */
+/* with detail set to NotifyPointerRoot. */
+ _detail_ = NotifyPointerRoot;
+ for (ptr = guardian; ptr != (Winh *) NULL; ptr = ptr->nextsibling) {
+ if (ptr == guardian)
+ CHECK;
+ /*
+ * skip to first FocusIn-type event
+ */
+ for (winhe = ptr->delivered; winhe != (Winhe *) NULL; winhe = winhe->next) {
+ if (winhe->event->type == EVENT)
+ break;
+ }
+ if (winhe == (Winhe *) NULL) {
+ delete("Lost %s event in delivered list",
+ eventname(EVENT));
+ return;
+ }
+ if (winhe->event->xfocus.detail != _detail_) {
+ report("Got detail %d, expected %d on window 0x%x",
+ winhe->event->xfocus.detail,
+ _detail_, ptr->window);
+ FAIL;
+ }
+ else {
+ /*
+ * cause this event to be ignored during
+ * later checks for FocusIn events
+ */
+ winhe->event->type = 0;
+ }
+ }
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(10);
+>>ASSERTION Good A
+>>#NOTE
+>>#NOTE The wording of this assertion was changed from that which was
+>>#NOTE approved to eliminate extraneous wording:
+>>#NOTE
+>>#NOTE .S PointerRoot
+>>#NOTE (events sent to the window under the pointer)
+>>#NOTE to
+>>#NOTE .S None
+>>#NOTE (discard)
+>>#NOTE
+>>#NOTE .S NotifyDetailNone
+>>#NOTE and
+>>#NOTE
+When the focus moves from
+None to PointerRoot
+and the pointer is in window P,
+then, after the related xname events are generated
+with
+.M detail
+set to
+.S NotifyPointerRoot ,
+a xname event is generated on
+each window from window P's root down to and including window P,
+with
+.M detail
+set to
+.S NotifyPointer .
+>>STRATEGY
+Create client.
+Build window hierarchy on all supported screens.
+Set window P.
+Move pointer to known location.
+Set input focus to None.
+Select for Focus events on windows.
+Generate xname event by changing focus from None to PointerRoot.
+Verify that the expected events were delivered.
+Verify that event delivered to the root window of all screens
+with detail set to NotifyPointerRoot.
+Verify that event delivered on each window from window P's root down to
+and including window P
+with detail set to NotifyPointer.
+Verify that the NotifyPointerRoot events were delivered before
+NotifyPointer events.
+Verify that all xname events are delivered after all
+FocusOut events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *P, *Proot, *ptr;
+Winhe *winhe;
+int status;
+int high;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set window P. */
+ Proot = guardian;
+ P = Proot->firstchild->firstchild->firstchild;
+/* Move pointer to known location. */
+ if (warppointer(display, P->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set input focus to None. */
+ XSetInputFocus(display, None, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ /* root window of all screens */
+ for (ptr = guardian; ptr != (Winh *) NULL; ptr = ptr->nextsibling) {
+ if (ptr == guardian)
+ CHECK;
+ good.xany.window = ptr->window;
+ if (winh_plant(ptr, &good, MASK, WINH_NOMASK)) {
+ report("Could not plant events");
+ return;
+ }
+ }
+ if (winh_climb(P, Proot, plant)) {
+ report("Could not plant events from P's root to P");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from None to PointerRoot. */
+ XSync(display, True);
+ XSetInputFocus(display, PointerRoot, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to the root window of all screens */
+/* with detail set to NotifyPointerRoot. */
+ _detail_ = NotifyPointerRoot;
+ high = 0;
+ for (ptr = guardian; ptr != (Winh *) NULL; ptr = ptr->nextsibling) {
+ if (ptr == guardian)
+ CHECK;
+ /*
+ * skip to first FocusIn-type event
+ */
+ for (winhe = ptr->delivered; winhe != (Winhe *) NULL; winhe = winhe->next) {
+ if (winhe->event->type == EVENT)
+ break;
+ }
+ if (winhe == (Winhe *) NULL) {
+ delete("Lost %s event in delivered list",
+ eventname(EVENT));
+ return;
+ }
+ if (winhe->sequence > high)
+ high = winhe->sequence;
+ if (winhe->event->xfocus.detail != _detail_) {
+ report("Got detail %d, expected %d on window 0x%x",
+ winhe->event->xfocus.detail,
+ _detail_, ptr->window);
+ FAIL;
+ }
+ else {
+ /*
+ * cause this event to be ignored during
+ * later checks for FocusIn events
+ */
+ winhe->event->type = 0;
+ }
+ }
+/* Verify that event delivered on each window from window P's root down to */
+/* and including window P */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, Proot, checkdetail)) {
+ report("Bad detail on some window between windows P's root and P");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that the NotifyPointerRoot events were delivered before */
+/* NotifyPointer events. */
+ for (winhe = Proot->delivered; winhe != (Winhe *) NULL; winhe = winhe->next) {
+ if (winhe == Proot->delivered)
+ CHECK;
+ if (winhe->event->type == EVENT)
+ break;
+ }
+ if (winhe == (Winhe *) NULL) {
+ delete("Lost %s event in delivered list of Proot",
+ eventname(EVENT));
+ return;
+ }
+ else
+ CHECK;
+ if (high > winhe->sequence) {
+ report("NotifyPointerRoot events not delivered before all NotifyPointer events");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that all xname events are delivered after all */
+/* FocusOut events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(14);
diff --git a/xc/test/xsuite/xtest/tset/CH08/fcsot/fcsot.m b/xc/test/xsuite/xtest/tset/CH08/fcsot/fcsot.m
new file mode 100644
index 000000000..4cdfcbff7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/fcsot/fcsot.m
@@ -0,0 +1,2723 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE FocusOut CH08
+>>SET startup focusstartup
+>>SET cleanup focuscleanup
+>>EXTERN
+#define EVENT FocusOut
+#define OTHEREVENT FocusIn
+#define MASK FocusChangeMask
+
+static Display *_display_;
+static int _detail_;
+static long _event_mask_;
+static XEvent good;
+
+static int
+selectinput(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+ winh_free(previous);
+#endif
+ return(winh_selectinput(_display_, current, _event_mask_));
+}
+
+static int
+plant(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+ winh_free(previous);
+#endif
+ good.xany.window = current->window;
+ return(winh_plant(current, &good, NoEventMask, WINH_NOMASK));
+}
+
+static Bool increasing; /* event sequence increases as we climb */
+
+static int
+checksequence(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+ Winhe *d;
+ int current_sequence;
+ int status;
+ static int last_sequence;
+
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+#endif
+ /* look for desired event type */
+ for (d = current->delivered; d != (Winhe *) NULL; d = d->next) {
+ if (d->event->type == good.type) {
+ current_sequence = d->sequence;
+ break;
+ }
+ }
+ if (d == (Winhe *) NULL) {
+ report("%s event not delivered", eventname(good.type));
+ delete("Missing event");
+ return(-1);
+ }
+ if (previous == (Winh *) NULL)
+ status = 0; /* first call, no previous sequence value */
+ else {
+ /* assume sequence numbers are not the same */
+ status = (current_sequence < last_sequence);
+ if (increasing)
+ status = (status ? 0 : 1);
+ if (status)
+ report("Ordering problem between 0x%x (%d) and 0x%x (%d)",
+ current->window, current_sequence,
+ previous->window, last_sequence);
+ }
+ last_sequence = current_sequence;
+ return(status);
+}
+
+static int
+checkdetail(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+ Winhe *d;
+
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+ winh_free(previous);
+#endif
+ /* look for desired event type */
+ for (d = current->delivered; d != (Winhe *) NULL; d = d->next)
+ if (d->event->type == good.type)
+ break;
+ if (d == (Winhe *) NULL) {
+ report("%s event not delivered to window 0x%x",
+ eventname(good.type), current->window);
+ delete("Missing event");
+ return(-1);
+ }
+ /* check detail */
+ if (_detail_ != d->event->xfocus.detail) {
+ report("Expected detail of %d, got %d on window 0x%x",
+ _detail_, d->event->xfocus.detail, current->window);
+ return(1);
+ }
+ return(0);
+}
+>>ASSERTION Good A
+When a xname event is generated by a window unmap,
+then the xname event is generated after the corresponding
+.S UnmapNotify
+event.
+>>STRATEGY
+Create client.
+Create window hierarchy.
+Select for xname and UnmapNotify events on window.
+Set focus to window.
+Generate events by unmapping window.
+Verify that a UnmapNotify event was delivered.
+Verify that a xname event was delivered.
+Verify that the xname event was delivered after the UnmapNotify event.
+>>CODE
+Display *display;
+Winh *winh;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window hierarchy. */
+ winh = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, (Winhg *) NULL, WINH_NOMASK);
+ if (winh == (Winh *) NULL)
+ return;
+ else
+ CHECK;
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Select for xname and UnmapNotify events on window. */
+ if (winh_selectinput(display, winh, MASK|StructureNotifyMask))
+ return;
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ good.xany.window = winh->window;
+ if (winh_plant(winh, &good, MASK, WINH_NOMASK)) {
+ report("Could not plant %s events", eventname(good.type));
+ return;
+ }
+ else
+ CHECK;
+ good.type = UnmapNotify;
+ if (winh_plant(winh, &good, StructureNotifyMask, WINH_NOMASK)) {
+ report("Could not plant %s events", eventname(good.type));
+ return;
+ }
+ else
+ CHECK;
+/* Set focus to window. */
+ XSetInputFocus(display, winh->window, RevertToNone, CurrentTime);
+/* Generate events by unmapping window. */
+ XSync(display, True);
+ XUnmapWindow(display, winh->window);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that a UnmapNotify event was delivered. */
+/* Verify that a xname event was delivered. */
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that the xname event was delivered after the UnmapNotify event. */
+ status = winh_ordercheck(UnmapNotify, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(8);
+>>#NOTEd >>ASSERTION
+>>#NOTEd When the input focus changes,
+>>#NOTEd then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When the focus window is unmapped,
+>>#NOTEm then ARTICLE xname event is generated.
+>>ASSERTION Good A
+When a xname event is generated,
+then
+all clients having set
+.S FocusChangeMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+Create client.
+Create clients client2 and client3.
+Create window.
+Select for xname events on window.
+Select for xname events on window with client2.
+Select for no events on window with client3.
+Set focus to window.
+Generate xname event by changing focus from w to None.
+Verify that xname event was delivered.
+Verify members in delivered xname event structure.
+Verify that xname event was delivered to client2.
+Verify members in delivered xname event structure.
+Verify that no events were delivered to client3.
+>>CODE
+int i;
+Display *display;
+Display *client2, *client3;
+Window w;
+XEvent event;
+XFocusChangeEvent good;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, True);
+/* Select for xname events on window. */
+ XSelectInput(display, w, MASK);
+/* Select for xname events on window with client2. */
+ XSelectInput(client2, w, MASK);
+/* Select for no events on window with client3. */
+ XSelectInput(client3, w, NoEventMask);
+/* Set focus to window. */
+ XSetInputFocus(display, w, RevertToNone, CurrentTime);
+/* Generate xname event by changing focus from w to None. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XSetInputFocus(display, None, RevertToNone, CurrentTime);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that xname event was delivered. */
+ if (XPending(display) < 1) {
+ report("Expected %s event not delivered.", eventname(EVENT));
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+/* Verify members in delivered xname event structure. */
+ XNextEvent(display, &event);
+ good = event.xfocus;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.mode = NotifyNormal;
+ good.detail = NotifyNonlinear;
+ if (checkevent((XEvent*)&good, &event)) {
+ report("Unexpected event structure member value(s)");
+ FAIL;
+ }
+ else
+ CHECK;
+ if ((i = XPending(display)) > 0) {
+ report("Expected 1 event, got %d", i+1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that xname event was delivered to client2. */
+ if (XPending(client2) < 1) {
+ report("Expected %s event not delivered to client2.", eventname(EVENT));
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+/* Verify members in delivered xname event structure. */
+ XNextEvent(client2, &event);
+ good = event.xfocus;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = client2;
+ good.window = w;
+ good.mode = NotifyNormal;
+ good.detail = NotifyNonlinear;
+ if (checkevent((XEvent*)&good, &event)) {
+ report("Unexpected event structure member value(s) for client2");
+ FAIL;
+ }
+ else
+ CHECK;
+ if ((i = XPending(client2)) > 0) {
+ report("Expected 1 event, got %d for client2", i+1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ if ((i = XPending(client3)) > 0) {
+ report("Expected 0 events, got %d for client3", i);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(10);
+>>ASSERTION def
+>>#NOTE Tested for in previous assertion.
+When a xname event is generated,
+then
+clients not having set
+.S FocusChangeMask
+event mask bits on the event window are not delivered
+a xname event.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is generated while the pointer is not grabbed,
+>>#NOTEs then
+>>#NOTEs .A mode
+>>#NOTEs is set to
+>>#NOTEs .S NotifyNormal .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is generated while the pointer is grabbed,
+>>#NOTEs then
+>>#NOTEs .A mode
+>>#NOTEs is set to
+>>#NOTEs .S NotifyWhileGrabbed .
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is generated
+>>#NOTEm and a keyboard grab activates,
+>>#NOTEm then xname events are generated as if the focus were to change from
+>>#NOTEm the old focus to the grab window with
+>>#NOTEm .A mode
+>>#NOTEm is set to
+>>#NOTEm .S NotifyGrab .
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is generated
+>>#NOTEm and a keyboard grab deactivates,
+>>#NOTEm then xname events are generated as if the focus were to change from
+>>#NOTEm the grab window to the new focus with
+>>#NOTEm .A mode
+>>#NOTEm is set to
+>>#NOTEm .S NotifyUngrab .
+>>ASSERTION def
+All xname events are delivered before
+any related
+.S FocusIn
+are delivered.
+>>ASSERTION Good A
+>>#NOTE
+>>#NOTE Some of these assertions have wording which is not relevant.
+>>#NOTE For example, many state ``the pointer is in window P'' but
+>>#NOTE make no other reference to window P.
+>>#NOTE
+When the input focus moves from window A to window B
+and window A is an inferior of window B
+and the pointer is in window P,
+then a xname event is generated on window A,
+with
+.M detail
+set to
+.S NotifyAncestor
+and then on each window
+between window A and window B,
+exclusive,
+with
+.M detail
+set to
+.S NotifyVirtual .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Move pointer to known location.
+Set window B.
+Set window A to inferior of window B.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to window A with detail set to NotifyAncestor.
+Verify that event delivered on each window
+between window A and window B, exclusive,
+with detail set to NotifyVirtual.
+Verify that all xname events are delivered before all
+FocusIn events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *B;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window B. */
+ B = guardian->firstchild;
+/* Set window A to inferior of window B. */
+ A = B->firstchild->firstchild->firstchild;
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(A, B, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(A, B->firstchild, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event(B, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to window A with detail set to NotifyAncestor. */
+ _detail_ = NotifyAncestor;
+ if (winh_climb(A, A, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered on each window */
+/* between window A and window B, exclusive, */
+/* with detail set to NotifyVirtual. */
+ _detail_ = NotifyVirtual;
+ if (winh_climb(A->parent, B->firstchild, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(10);
+>>ASSERTION Good A
+When the input focus moves from window A to window B
+and window B is an inferior of window A
+and the pointer is in window P
+and window P is an inferior of window A
+and window P is not an inferior of window B
+and window P is not an ancestor of window B,
+then a xname event is generated on each window
+from window P up to but not including window A,
+with
+.M detail
+set to
+.S NotifyPointer .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Move pointer to known location.
+Set window A.
+Set window B to inferior of window A.
+Set window P to inferior of sibling of window B.
+Move pointer to window P.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to each window from window P
+up to but not including window A,
+with detail set to NotifyPointer.
+Verify order of xname event delivery.
+Verify that all xname events are delivered before all
+FocusIn events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *B, *P, *Pancestor;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window A. */
+ A = guardian->firstchild;
+/* Set window B to inferior of window A. */
+ B = A->firstchild;
+/* Set window P to inferior of sibling of window B. */
+ Pancestor = A->firstchild->nextsibling;
+ P = Pancestor->firstchild->firstchild;
+/* Move pointer to window P. */
+ XWarpPointer(display, None, P->window, 0, 0, 0, 0, 0, 0);
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(P, Pancestor, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(B, A->firstchild, selectinput)) {
+ report("Could not select for events between B and A");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(P, Pancestor, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to each window from window P */
+/* up to but not including window A, */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, Pancestor, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = False;
+ if (winh_climb(P, Pancestor, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(11);
+>>ASSERTION Good A
+When the input focus moves from window A to window B
+and window B is an inferior of window A
+and the pointer is in window P,
+then, after any related xname events are generated
+with
+.M detail
+set to
+.S NotifyPointer ,
+a xname event is generated on window A,
+with
+.M detail
+set to
+.S NotifyInferior .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Move pointer to known location.
+Set window A.
+Set window B to inferior of window A.
+Set window P to inferior of sibling of window B.
+Move pointer to window P.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to each window from window P
+up to but not including window A,
+with detail set to NotifyPointer.
+Verify that event delivered on window A
+with detail set to NotifyInferior.
+Verify order of xname event delivery.
+Verify that all xname events are delivered before all
+FocusIn events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *B, *P, *Pancestor;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window A. */
+ A = guardian->firstchild;
+/* Set window B to inferior of window A. */
+ B = A->firstchild;
+/* Set window P to inferior of sibling of window B. */
+ Pancestor = A->firstchild->nextsibling;
+ P = Pancestor->firstchild->firstchild;
+/* Move pointer to window P. */
+ XWarpPointer(display, None, P->window, 0, 0, 0, 0, 0, 0);
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(P, A, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(B, A->firstchild, selectinput)) {
+ report("Could not select for events between B and A");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(P, A, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to each window from window P */
+/* up to but not including window A, */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, Pancestor, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered on window A */
+/* with detail set to NotifyInferior. */
+ _detail_ = NotifyInferior;
+ if (winh_climb(A, A, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = False;
+ if (winh_climb(P, A, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(12);
+>>ASSERTION Good A
+When the input focus moves from window A to window B
+and window C is their least common ancestor
+and the pointer is in window P
+and window P is an inferior of window A,
+then a xname event is generated on each window
+from window P up to but not including window A,
+with
+.M detail
+set to
+.S NotifyPointer .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Move pointer to known location.
+Set window C.
+Set window A to inferior of window C.
+Set window P to inferior of window A.
+Set window B to inferior of window C.
+Move pointer to window P.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to windows from window P
+up to but not including window A,
+with detail set to NotifyPointer.
+Verify order of xname event delivery.
+Verify that all xname events are delivered before all
+FocusIn events.
+>>CODE
+Display *display;
+int depth = 5;
+Winh *A, *B, *C, *P;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window C. */
+ C = guardian->firstchild;
+/* Set window A to inferior of window C. */
+ A = C->firstchild;
+/* Set window P to inferior of window A. */
+ P = A->firstchild->firstchild->firstchild;
+/* Set window B to inferior of window C. */
+ B = C->firstchild->nextsibling->firstchild;
+/* Move pointer to window P. */
+ XWarpPointer(display, None, P->window, 0, 0, 0, 0, 0, 0);
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(P, A->firstchild, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ /* This gets us a FocusIn event. */
+ if (winh_climb(B, B, selectinput)) {
+ report("Could not select for events on B");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(P, A->firstchild, selectinput)) {
+ report("Could not select for events below A to P");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(P, A->firstchild, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to windows from window P */
+/* up to but not including window A, */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, A->firstchild, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = False;
+ if (winh_climb(P, A->firstchild, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(12);
+>>ASSERTION Good A
+When the input focus moves from window A to window B
+and window C is their least common ancestor
+and the pointer is in window P,
+then, after any related xname events are generated
+with
+.M detail
+set to
+.S NotifyPointer ,
+a xname event is generated on window A,
+with
+.M detail
+set to
+.S NotifyNonlinear
+and then on
+each window between window A and window C, exclusive,
+with
+.M detail
+set to
+.S NotifyNonlinearVirtual .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Move pointer to known location.
+Set window C.
+Set window A to inferior of window C.
+Set window P to inferior of window A.
+Set window B to inferior of window C.
+Move pointer to window P.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to windows from window P
+up to but not including window A,
+with detail set to NotifyPointer.
+Verify that event delivered to window A
+with detail set to NotifyNonlinear.
+Verify that event delivered between window A and window C, exclusive,
+with detail set to NotifyNonlinearVirtual.
+Verify order of xname event delivery.
+Verify that all xname events are delivered before all
+FocusIn events.
+>>CODE
+Display *display;
+int depth = 5;
+Winh *A, *B, *C, *P;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window C. */
+ C = guardian->firstchild;
+/* Set window A to inferior of window C. */
+ A = C->firstchild->firstchild->firstchild;
+/* Set window P to inferior of window A. */
+ P = A->firstchild;
+/* Set window B to inferior of window C. */
+ B = C->firstchild->nextsibling->firstchild;
+/* Move pointer to window P. */
+ XWarpPointer(display, None, P->window, 0, 0, 0, 0, 0, 0);
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(P, A, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(A->parent, C->firstchild, selectinput)) {
+ report("Could not select for events between A to C");
+ return;
+ }
+ else
+ CHECK;
+ /* This gets us a FocusIn event. */
+ if (winh_climb(B, B, selectinput)) {
+ report("Could not select for events on B");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(P, A, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(A->parent, C->firstchild, plant)) {
+ report("Could not plant events between A and C");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to windows from window P */
+/* up to but not including window A, */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, A->firstchild, checkdetail)) {
+ report("Incorrect detail from P up to A");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event delivered to window A */
+/* with detail set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(A, A, checkdetail)) {
+ report("Incorrect detail for A");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event delivered between window A and window C, exclusive, */
+/* with detail set to NotifyNonlinearVirtual. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(A->parent, C->firstchild, checkdetail)) {
+ report("Incorrect detail between A and C");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = False;
+ if (winh_climb(P, A, checksequence))
+ FAIL;
+ else
+ CHECK;
+ increasing = False;
+ if (winh_climb(A, C->firstchild, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(16);
+>>ASSERTION Good C
+>>#NOTE This is also tested for in the following assertion.
+If the implementation supports multiple screens:
+When the input focus moves from window A to window B
+and window A and window B are not on the same screens
+and the pointer is in window P
+and window P is an inferior of window A,
+then a xname event is generated on
+each window from window P up to but not including window A,
+with
+.M detail
+set to
+.S NotifyPointer .
+>>STRATEGY
+Check to see if multiple screens are supported.
+Create client.
+Build window hierarchy on all supported screens.
+Move pointer to known location.
+Set window A.
+Set window B to an inferior of the root window on a different screen than A.
+Set window P.
+Move pointer to window P.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to each window from window P
+up to but not including window A,
+with detail set to NotifyPointer.
+Verify order of xname event delivery.
+Verify that all xname events are delivered before all
+FocusIn events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *B, *Broot, *P, *Pancestor;
+int status;
+
+/* Check to see if multiple screens are supported. */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ }
+ else
+ CHECK;
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window A. */
+ A = guardian->firstchild;
+/* Set window B to an inferior of the root window on a different screen than A. */
+ Broot = guardian->nextsibling;
+ B = Broot->firstchild->firstchild;
+/* Set window P. */
+ Pancestor = A->firstchild;
+ P = Pancestor->firstchild->firstchild;
+/* Move pointer to window P. */
+ XWarpPointer(display, None, P->window, 0, 0, 0, 0, 0, 0);
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(P, Pancestor, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(B, Broot, selectinput)) {
+ report("Could not select for events on windows B and above");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(P, Pancestor, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to each window from window P */
+/* up to but not including window A, */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, Pancestor, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = False;
+ if (winh_climb(P, Pancestor, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(12);
+>>ASSERTION Good C
+If the implementation supports multiple screens:
+When the input focus moves from window A to window B
+and window A and window B are not on the same screens
+and the pointer is in window P,
+then, after any related xname events are generated
+with
+.M detail
+set to
+.S NotifyPointer ,
+a xname event is generated on
+window A,
+with
+.M detail
+set to
+.S NotifyNonlinear .
+>>STRATEGY
+Check to see if multiple screens are supported.
+Create client.
+Build window hierarchy on all supported screens.
+Move pointer to known location.
+Set window A to a root window.
+Set window B to an inferior of the root window on a different screen than A.
+Set window P.
+Move pointer to window P.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to each window from window P
+up to but not including window A,
+with detail set to NotifyPointer.
+Verify that event delivered to window A
+with detail set to NotifyNonlinear.
+Verify order of xname event delivery.
+Verify that all xname events are delivered before all
+FocusIn events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *B, *Broot, *P, *Pancestor;
+int status;
+
+/* Check to see if multiple screens are supported. */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ }
+ else
+ CHECK;
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window A to a root window. */
+ A = guardian;
+/* Set window B to an inferior of the root window on a different screen than A. */
+ Broot = guardian->nextsibling;
+ B = Broot->firstchild->firstchild;
+/* Set window P. */
+ Pancestor = A->firstchild;
+ P = Pancestor->firstchild->firstchild;
+/* Move pointer to window P. */
+ XWarpPointer(display, None, P->window, 0, 0, 0, 0, 0, 0);
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(P, A, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(B, Broot, selectinput)) {
+ report("Could not select for events on windows B and above");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(P, A, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to each window from window P */
+/* up to but not including window A, */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, Pancestor, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered to window A */
+/* with detail set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(A, A, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = False;
+ if (winh_climb(P, A, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(13);
+>>ASSERTION Good C
+If the implementation supports multiple screens:
+When the input focus moves from window A to window B
+and window A and window B are not on the same screens
+and the pointer is in window P
+and window A is not a root window,
+then, after the related xname event is generated
+with
+.M detail
+set to
+.S NotifyNonlinear ,
+a xname event is generated on
+each window above window A up to and including its root,
+with
+.M detail
+set to
+.S NotifyNonlinearVirtual .
+>>STRATEGY
+Check to see if multiple screens are supported.
+Create client.
+Build window hierarchy on all supported screens.
+Move pointer to known location.
+Set window A to a non-root window.
+Set window B to an inferior of the root window on a different screen than A.
+Move pointer to window B.
+Set input focus to window A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to B.
+Verify that the expected events were delivered.
+Verify that event delivered to window A
+with detail set to NotifyNonlinear.
+Verify that event delivered on each window above window A
+up to and including its root,
+with detail set to NotifyNonlinearVirtual.
+Verify order of xname event delivery.
+Verify that all xname events are delivered before all
+FocusIn events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *Aroot, *B, *Broot;
+int status;
+
+/* Check to see if multiple screens are supported. */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ }
+ else
+ CHECK;
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window A to a non-root window. */
+ Aroot = guardian;
+ A = Aroot->firstchild->firstchild->firstchild;
+/* Set window B to an inferior of the root window on a different screen than A. */
+ Broot = guardian->nextsibling;
+ B = Broot->firstchild->firstchild;
+/* Move pointer to window B. */
+ XWarpPointer(display, None, B->window, 0, 0, 0, 0, 0, 0);
+/* Set input focus to window A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_climb(A, Aroot, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_climb(B, Broot, selectinput)) {
+ report("Could not select for events on windows B and above");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(A, Aroot, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to B. */
+ XSync(display, True);
+ XSetInputFocus(display, B->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to window A */
+/* with detail set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(A, A, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered on each window above window A */
+/* up to and including its root, */
+/* with detail set to NotifyNonlinearVirtual. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(A->parent, Aroot, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify order of xname event delivery. */
+ increasing = False;
+ if (winh_climb(A, Aroot, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(13);
+>>ASSERTION Good A
+When the focus moves from window A to
+.S PointerRoot
+(events sent to the window under the pointer)
+or when the focus moves from window A to
+.S None
+(discard)
+and the pointer is in window P
+and window P is an inferior of window A,
+then a xname event is generated on
+each window from window P up to but not including window A,
+with
+.M detail
+set to
+.S NotifyPointer .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Set window A to a root window.
+Set P to inferior of A.
+Move pointer to P.
+Set input focus to A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to PointerRoot.
+Verify that the expected events were delivered.
+Verify that event delivered on each window from window P up to
+but not including window A
+with detail set to NotifyPointer.
+Verify that these events occurred in the correct order.
+Verify that all xname events are delivered before all
+FocusIn events.
+Repeat with final focus set to None.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *P, *Pancestor;
+int status;
+int i;
+static Window focuses[] = {
+ (Window) PointerRoot,
+ (Window) None
+};
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set window A to a root window. */
+ A = guardian;
+/* Set P to inferior of A. */
+ Pancestor = A->firstchild;
+ P = Pancestor->firstchild->firstchild;
+/* Move pointer to P. */
+ if (warppointer(display, P->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+ for (i = 0; i < NELEM(focuses); i++) {
+/* Set input focus to A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ /*
+ * Select on A as well because we are selecting for events
+ * on all windows.
+ */
+ if (winh_climb(P, A, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to PointerRoot. */
+ XSync(display, True);
+ XSetInputFocus(display, focuses[i], RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered on each window from window P up to */
+/* but not including window A */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, Pancestor, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that these events occurred in the correct order. */
+ increasing = False;
+ if (winh_climb(P, Pancestor, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+/* Repeat with final focus set to None. */
+ }
+ CHECKPASS(3 + (7*NELEM(focuses)));
+>>ASSERTION Good A
+When the focus moves from window A to
+.S PointerRoot
+(events sent to the window under the pointer)
+or when the focus moves from window A to
+.S None
+(discard)
+and the pointer is in window P,
+then, after any related xname events are generated
+with
+.M detail
+set to
+.S NotifyPointer ,
+a xname event is generated on
+window A,
+with
+.M detail
+set to
+.S NotifyNonlinear .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Set window A to a root window.
+Set P to inferior of A.
+Move pointer to P.
+Set input focus to A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to PointerRoot.
+Verify that the expected events were delivered.
+Verify that event delivered on each window from window P up to
+but not including window A
+with detail set to NotifyPointer.
+Verify that event delivered on window A
+with detail set to NotifyNonlinear.
+Verify that these events occurred in the correct order.
+Verify that all xname events are delivered before all
+FocusIn events.
+Repeat with final focus set to None.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *P, *Pancestor;
+int status;
+int i;
+static Window focuses[] = {
+ (Window) PointerRoot,
+ (Window) None
+};
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set window A to a root window. */
+ A = guardian;
+/* Set P to inferior of A. */
+ Pancestor = A->firstchild;
+ P = Pancestor->firstchild->firstchild;
+/* Move pointer to P. */
+ if (warppointer(display, P->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+ for (i = 0; i < NELEM(focuses); i++) {
+/* Set input focus to A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ /*
+ * Select on A as well because we are selecting for events
+ * on all windows.
+ */
+ if (winh_climb(P, A, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to PointerRoot. */
+ XSync(display, True);
+ XSetInputFocus(display, focuses[i], RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered on each window from window P up to */
+/* but not including window A */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, Pancestor, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered on window A */
+/* with detail set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(A, A, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that these events occurred in the correct order. */
+ increasing = False;
+ if (winh_climb(P, A, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+/* Repeat with final focus set to None. */
+ }
+ CHECKPASS(3 + (8*NELEM(focuses)));
+>>ASSERTION Good A
+When the focus moves from window A to
+.S PointerRoot
+(events sent to the window under the pointer)
+or when the focus moves from window A to
+.S None
+(discard)
+and the pointer is in window P
+and window A is not a root window,
+then, after the related xname event is generated
+with
+.M detail
+set to
+.S NotifyNonlinear ,
+a xname event is generated on
+each window above window A up to and including its root,
+with
+.M detail
+set to
+.S NotifyNonlinearVirtual .
+>>STRATEGY
+Create client.
+Build window hierarchy.
+Set window A to a non-root window.
+Set P to root window.
+Move pointer to P.
+Set input focus to A.
+Select for Focus events on windows.
+Generate xname event by changing focus from A to PointerRoot.
+Verify that the expected events were delivered.
+Verify that event delivered on window A
+with detail set to NotifyNonlinear.
+Verify that event delivered on each window above window A up to
+and including its root,
+with detail set to NotifyNonlinearVirtual.
+Verify that these events occurred in the correct order.
+Verify that all xname events are delivered before all
+FocusIn events.
+Repeat with final focus set to None.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *Aroot, *P;
+int status;
+int i;
+static Window focuses[] = {
+ (Window) PointerRoot,
+ (Window) None
+};
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set window A to a non-root window. */
+ Aroot = guardian;
+ A = Aroot->firstchild->firstchild->firstchild;
+/* Set P to root window. */
+ P = guardian;
+/* Move pointer to P. */
+ if (warppointer(display, P->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+ for (i = 0; i < NELEM(focuses); i++) {
+/* Set input focus to A. */
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(A, Aroot, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Generate xname event by changing focus from A to PointerRoot. */
+ XSync(display, True);
+ XSetInputFocus(display, focuses[i], RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered on window A */
+/* with detail set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(A, A, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that event delivered on each window above window A up to */
+/* and including its root, */
+/* with detail set to NotifyNonlinearVirtual. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(A->parent, Aroot, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that these events occurred in the correct order. */
+ increasing = False;
+ if (winh_climb(A, Aroot, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+/* Repeat with final focus set to None. */
+ }
+ CHECKPASS(3 + (8*NELEM(focuses)));
+>>ASSERTION def
+>>#NOTE The approved wording was as follows:
+>>#NOTE
+>>#NOTE When the focus moves from
+>>#NOTE .S PointerRoot
+>>#NOTE (events sent to the window under the pointer)
+>>#NOTE or
+>>#NOTE .S None
+>>#NOTE (discard)
+>>#NOTE to window A
+>>#NOTE and the pointer is in window P
+>>#NOTE and the old focus was
+>>#NOTE .S PointerRoot ,
+>>#NOTE then a xname event is generated on
+>>#NOTE each window from window P up to and including window P's root,
+>>#NOTE with
+>>#NOTE .M detail
+>>#NOTE set to
+>>#NOTE .S NotifyPointer .
+>>#NOTE Tested for in next assertion.
+When the focus moves from
+.S PointerRoot
+(events sent to the window under the pointer)
+to window A
+and the pointer is in window P,
+then a xname event is generated on
+each window from window P up to and including window P's root,
+with
+.M detail
+set to
+.S NotifyPointer .
+>>ASSERTION Good A
+When the focus moves from
+.S PointerRoot
+(events sent to the window under the pointer)
+to window A
+and the pointer is in window P,
+then, after any related xname events are generated
+with
+.M detail
+set to
+.S NotifyPointer ,
+a xname event is generated on
+the root window of all screens,
+with
+.M detail
+set to
+.S NotifyPointerRoot .
+>>STRATEGY
+Create client.
+Build window hierarchy on all supported screens.
+Set window A.
+Set window P.
+Move pointer to window P.
+Set input focus to PointerRoot.
+Select for Focus events on windows.
+Generate xname event by changing focus from PointerRoot to A.
+Verify that the expected events were delivered.
+Verify that event delivered to windows above window P
+up to and including window P's root,
+with detail set to NotifyPointer.
+Verify that event delivered to the root window of all screens
+with detail set to NotifyPointerRoot.
+Verify that these events are delivered after the NotifyPointer events.
+Verify order of xname event delivery from P to Proot.
+Verify that all xname events are delivered before all
+FocusIn events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *P, *Proot, *root;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set window A. */
+ A = guardian->firstchild->firstchild->firstchild;
+/* Set window P. */
+ Proot = guardian;
+ P = Proot->firstchild->nextsibling->firstchild->firstchild;
+/* Move pointer to window P. */
+ if (warppointer(display, P->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set input focus to PointerRoot. */
+ XSetInputFocus(display, PointerRoot, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(P, Proot, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+ /* root window of all screens */
+ for (root = guardian; root != (Winh *) NULL; root = root->nextsibling) {
+ if (root == guardian)
+ CHECK;
+ good.xany.window = root->window;
+ if (winh_plant(root, &good, MASK, WINH_NOMASK)) {
+ report("Could not plant events");
+ return;
+ }
+ }
+/* Generate xname event by changing focus from PointerRoot to A. */
+ XSync(display, True);
+ XSetInputFocus(display, A->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+ Winhe *winhe;
+
+/* Verify that event delivered to windows above window P */
+/* up to and including window P's root, */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, Proot, checkdetail)) {
+ report("Incorrect detail from P up to P's root");
+ FAIL;
+ }
+ else
+ CHECK;
+ /*
+ * Determine sequence number of first FocusOut event
+ * delivered to Proot.
+ */
+ for (winhe = Proot->delivered; winhe != (Winhe *) NULL; winhe = winhe->next) {
+
+ if (winhe == Proot->delivered)
+ CHECK;
+ if (winhe->event->type == EVENT)
+ break;
+ }
+/* Verify that event delivered to the root window of all screens */
+/* with detail set to NotifyPointerRoot. */
+/* Verify that these events are delivered after the NotifyPointer events. */
+ _detail_ = NotifyPointerRoot;
+ for (root = guardian; root != (Winh *) NULL; root = root->nextsibling) {
+ Winhe *ptr;
+
+ if (root == guardian)
+ CHECK;
+ /*
+ * skip to first FocusOut-type event
+ */
+ for (ptr = root->delivered; ptr != (Winhe *) NULL; ptr = ptr->next) {
+ if (ptr->event->type == EVENT) {
+ static int first = 1;
+
+ /*
+ * The first FocusOut event on Proot is
+ * already claimed.
+ */
+ if (root == Proot && first) {
+ first = 0;
+ continue;
+ }
+ else
+ break;
+ }
+ }
+ if (ptr == (Winhe *) NULL) {
+ delete("Lost %s event in delivered list",
+ eventname(EVENT));
+ return;
+ }
+ if (ptr->event->xfocus.detail != _detail_) {
+ report("Got detail %d, expected %d on window 0x%x",
+ ptr->event->xfocus.detail,
+ _detail_, root->window);
+ FAIL;
+ continue;
+ }
+ if (ptr->sequence < winhe->sequence) {
+ report("Got NotifyPointerRoot-type event on 0x%x prior to all NotifyPointer events", root->window);
+ FAIL;
+ }
+ }
+/* Verify order of xname event delivery from P to Proot. */
+ increasing = False;
+ if (winh_climb(P, Proot, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(13);
+>>ASSERTION Good A
+>>#NOTE
+>>#NOTE The approved form of this assertion is listed below:
+>>#NOTE
+>>#NOTE When the focus moves from
+>>#NOTE .S None
+>>#NOTE (discard)
+>>#NOTE to window A
+>>#NOTE and the pointer is in window P,
+>>#NOTE then, after any related xname events are generated
+>>#NOTE with
+>>#NOTE .M detail
+>>#NOTE set to
+>>#NOTE .S NotifyPointer ,
+>>#NOTE a xname event is generated on
+>>#NOTE the root windows of all screens,
+>>#NOTE with
+>>#NOTE .M detail
+>>#NOTE set to
+>>#NOTE .S NotifyDetailNone .
+When the focus moves from
+.S None
+(discard)
+to window A
+and the pointer is in window P,
+then a xname event is generated on
+the root window of all screens,
+with
+.M detail
+set to
+.S NotifyDetailNone .
+>>STRATEGY
+Create client.
+Build window hierarchy on all supported screens.
+Set window P.
+Move pointer to window P.
+Set input focus to PointerRoot.
+Select for Focus events on windows.
+Generate xname event by changing focus from PointerRoot to None.
+Verify that the expected events were delivered.
+Verify that event delivered to windows above window P
+up to and including window P's root,
+with detail set to NotifyPointer.
+Verify that event delivered to the root window of all screens
+with detail set to NotifyPointerRoot.
+Verify that these events are delivered after the NotifyPointer events.
+Verify order of xname event delivery from P to Proot.
+Verify that all xname events are delivered before all
+FocusIn events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *P, *Proot, *root;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set window P. */
+ Proot = guardian;
+ P = Proot->firstchild->nextsibling->firstchild->firstchild;
+/* Move pointer to window P. */
+ if (warppointer(display, P->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set input focus to PointerRoot. */
+ XSetInputFocus(display, PointerRoot, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(P, Proot, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+ /* root window of all screens */
+ for (root = guardian; root != (Winh *) NULL; root = root->nextsibling) {
+ if (root == guardian)
+ CHECK;
+ good.xany.window = root->window;
+ if (winh_plant(root, &good, MASK, WINH_NOMASK)) {
+ report("Could not plant events");
+ return;
+ }
+ }
+/* Generate xname event by changing focus from PointerRoot to None. */
+ XSync(display, True);
+ XSetInputFocus(display, None, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+ Winhe *winhe;
+
+/* Verify that event delivered to windows above window P */
+/* up to and including window P's root, */
+/* with detail set to NotifyPointer. */
+ _detail_ = NotifyPointer;
+ if (winh_climb(P, Proot, checkdetail)) {
+ report("Incorrect detail from P up to P's root");
+ FAIL;
+ }
+ else
+ CHECK;
+ /*
+ * Determine sequence number of first FocusOut event
+ * delivered to Proot.
+ */
+ for (winhe = Proot->delivered; winhe != (Winhe *) NULL; winhe = winhe->next) {
+
+ if (winhe == Proot->delivered)
+ CHECK;
+ if (winhe->event->type == EVENT)
+ break;
+ }
+/* Verify that event delivered to the root window of all screens */
+/* with detail set to NotifyPointerRoot. */
+/* Verify that these events are delivered after the NotifyPointer events. */
+ _detail_ = NotifyPointerRoot;
+ for (root = guardian; root != (Winh *) NULL; root = root->nextsibling) {
+ Winhe *ptr;
+
+ if (root == guardian)
+ CHECK;
+ /*
+ * skip to first FocusOut-type event
+ */
+ for (ptr = root->delivered; ptr != (Winhe *) NULL; ptr = ptr->next) {
+ if (ptr->event->type == EVENT) {
+ static int first = 1;
+
+ /*
+ * The first FocusOut event on Proot is
+ * already claimed.
+ */
+ if (root == Proot && first) {
+ first = 0;
+ continue;
+ }
+ else
+ break;
+ }
+ }
+ if (ptr == (Winhe *) NULL) {
+ delete("Lost %s event in delivered list",
+ eventname(EVENT));
+ return;
+ }
+ if (ptr->event->xfocus.detail != _detail_) {
+ report("Got detail %d, expected %d on window 0x%x",
+ ptr->event->xfocus.detail,
+ _detail_, root->window);
+ FAIL;
+ continue;
+ }
+ if (ptr->sequence < winhe->sequence) {
+ report("Got NotifyPointerRoot-type event on 0x%x prior to all NotifyPointer events", root->window);
+ FAIL;
+ }
+ }
+/* Verify order of xname event delivery from P to Proot. */
+ increasing = False;
+ if (winh_climb(P, Proot, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(13);
+>>ASSERTION Good A
+>>#NOTE The approved wording for this assertion is listed below:
+>>#NOTE
+>>#NOTE When the focus moves from
+>>#NOTE None to PointerRoot
+>>#NOTE and the pointer is in window P,
+>>#NOTE then, after any related xname events are generated
+>>#NOTE with
+>>#NOTE .M detail
+>>#NOTE set to
+>>#NOTE .S NotifyPointer ,
+>>#NOTE a xname event is generated on
+>>#NOTE the root windows of all screens,
+>>#NOTE with
+>>#NOTE .M detail
+>>#NOTE set to
+>>#NOTE .S NotifyDetailNone .
+When the focus moves from
+None to PointerRoot
+and the pointer is in window P,
+then a xname event is generated on
+the root window of all screens,
+with
+.M detail
+set to
+.S NotifyDetailNone .
+>>STRATEGY
+Create client.
+Build window hierarchy on all supported screens.
+Move pointer to known location.
+Set input focus to None.
+Select for Focus events on windows.
+Generate xname event by changing focus from None to PointerRoot.
+Verify that the expected events were delivered.
+Verify that event delivered to the root window of all screens
+with detail set to NotifyDetailNone.
+Verify that all xname events are delivered before all
+FocusIn events.
+>>CODE
+Display *display;
+int depth = 1;
+Winh *root;
+int status;
+
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy on all supported screens. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set input focus to None. */
+ XSetInputFocus(display, None, RevertToNone, CurrentTime);
+/* Select for Focus events on windows. */
+ _event_mask_ = MASK;
+ _display_ = display;
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ /* root window of all screens */
+ for (root = guardian; root != (Winh *) NULL; root = root->nextsibling) {
+ if (root == guardian)
+ CHECK;
+ good.xany.window = root->window;
+ if (winh_plant(root, &good, MASK, WINH_NOMASK)) {
+ report("Could not plant events");
+ return;
+ }
+ }
+/* Generate xname event by changing focus from None to PointerRoot. */
+ XSync(display, True);
+ XSetInputFocus(display, PointerRoot, RevertToNone, CurrentTime);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to the root window of all screens */
+/* with detail set to NotifyDetailNone. */
+ _detail_ = NotifyDetailNone;
+ for (root = guardian; root != (Winh *) NULL; root = root->nextsibling) {
+ Winhe *ptr;
+
+ if (root == guardian)
+ CHECK;
+ /*
+ * skip to first FocusOut-type event
+ */
+ for (ptr = root->delivered; ptr != (Winhe *) NULL; ptr = ptr->next) {
+ if (ptr->event->type == EVENT)
+ break;
+ }
+ if (ptr == (Winhe *) NULL) {
+ delete("Lost %s event in delivered list",
+ eventname(EVENT));
+ return;
+ }
+ if (ptr->event->xfocus.detail != _detail_) {
+ report("Got detail %d, expected %d on window 0x%x",
+ ptr->event->xfocus.detail,
+ _detail_, root->window);
+ FAIL;
+ continue;
+ }
+ }
+/* Verify that all xname events are delivered before all */
+/* FocusIn events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(9);
diff --git a/xc/test/xsuite/xtest/tset/CH08/flsh/flsh.m b/xc/test/xsuite/xtest/tset/CH08/flsh/flsh.m
new file mode 100644
index 000000000..7bce772b8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/flsh/flsh.m
@@ -0,0 +1,113 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFlush CH08
+void
+XFlush(display)
+Display *display = Dsp;
+>>ASSERTION Good A
+A call to xname flushes the output buffer.
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Empty the buffer.
+Ensure the server has dealt with anything flushed to it: do XSync()
+Call XFreePixmap from client2.
+Call XSync from client2 to insure all potential errors arrive.
+Verify that an error did occur.
+Discard all events on the event queue.
+Create pixmap.
+Call XFlush with display.
+Empty the buffer.
+Ensure the server has dealt with anything flushed to it: do XSync()
+Check for unexpected errors after flushing.
+Call XFreePixmap from client2.
+Call XSync from client2 to insure all potential errors arrive.
+Verify that an error did not occur.
+>>CODE
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+
+/* Empty the buffer. */
+ (void)XTestDiscard(display);
+/* Ensure the server has dealt with anything flushed to it: do XSync() */
+ XSync(display, False);
+/* Call XFreePixmap from client2. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+/* Call XSync from client2 to insure all potential errors arrive. */
+ XSync(client2, False);
+ _endcall(client2);
+/* Verify that an error did occur. */
+ if (geterr() == Success) {
+ report("Flushing appears to happen automatically");
+ UNTESTED;
+ /* Without this CHECK we get path count errors. */
+ CHECK;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Call XFlush with display. */
+ _startcall(display);
+ XFlush(display);
+/* Empty the buffer. */
+ (void)XTestDiscard(display);
+/* Ensure the server has dealt with anything flushed to it: do XSync() */
+ XSync(display, False);
+ _endcall(display);
+/* Check for unexpected errors after flushing. */
+ if (geterr() != Success) {
+ delete("Unexpected error '%s' after XFlush.", errorname(geterr()));
+ XFreePixmap(display, pm);
+ return;
+ }
+ else
+ CHECK;
+/* Call XFreePixmap from client2. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+/* Call XSync from client2 to insure all potential errors arrive. */
+ XSync(client2, False);
+ _endcall(client2);
+/* Verify that an error did not occur. */
+ if (geterr() != Success) {
+ report("Flushing did not occur - error '%s'.", errorname(geterr()));
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(4);
diff --git a/xc/test/xsuite/xtest/tset/CH08/grphcsexps/grphcsexps.m b/xc/test/xsuite/xtest/tset/CH08/grphcsexps/grphcsexps.m
new file mode 100644
index 000000000..1ef992879
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/grphcsexps/grphcsexps.m
@@ -0,0 +1,210 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GraphicsExpose CH08
+>>EXTERN
+#define EVENT GraphicsExpose
+>>ASSERTION Good A
+When xname events are generated,
+then they are contiguously delivered by the server.
+>>STRATEGY
+Create a pair of windows.
+Create a gc with graphics-exposures flag set to True.
+Generate GraphicsExpose events.
+Verify that events were generated.
+Verify that events were delivered contiguously.
+>>CODE
+Display *display = Dsp;
+int i;
+int expected;
+int lastcount;
+Window w1, w2;
+XVisualInfo *vp;
+GC gc;
+int numevents;
+unsigned int width;
+
+/* Create a pair of windows. */
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ winpair(display, vp, &w1, &w2);
+ getsize(display, w1, &width, (unsigned int *) NULL);
+/* Create a gc with graphics-exposures flag set to True. */
+ gc = makegc(display, w2);
+ XSetGraphicsExposures(display, gc, True);
+ XSelectInput(display, w1, NoEventMask); /* is this necessary?...pc */
+ XSelectInput(display, w2, NoEventMask);
+/* Generate GraphicsExpose events. */
+ XSync(display, True);
+ XCopyPlane(display, w1, w2, gc, 50, 0, width, 40, 0, 5, 1);
+ XSync(display, False);
+
+/* Verify that events were generated. */
+ numevents = XPending(display);
+ if (numevents == 0) {
+ delete("No events delivered");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that events were delivered contiguously. */
+ expected = -1;
+ for (i=0; i<numevents; i++) {
+ XEvent event_return;
+
+ if (i == 0)
+ CHECK;
+ XNextEvent(display, &event_return);
+ if (event_return.type != EVENT) {
+ report("Received %s event while only expecting %s types",
+ eventname(event_return.type), eventname(EVENT));
+ delete("Unexpected event received.");
+ return;
+ }
+ lastcount = event_return.xexpose.count;
+ if (expected == -1) {
+ expected = lastcount;
+ }
+ else {
+ if (lastcount > expected) {
+ report("Count (%d) greater than expected (%d)",
+ lastcount, expected);
+ FAIL;
+ break;
+ }
+ else if (lastcount < expected)
+ expected--;
+ }
+ }
+ if (lastcount != 0) {
+ report("Last %s had count set to %d, not zero",
+ eventname(EVENT), lastcount);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(3);
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a call to
+>>#NOTEm .F XCopyArea
+>>#NOTEm or
+>>#NOTEm .F XCopyPlane
+>>#NOTEm is made
+>>#NOTEm and the source region is obscured
+>>#NOTEm and the graphics-expose attribute
+>>#NOTEm of the graphics context is set to
+>>#NOTEm .S True ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a call to
+>>#NOTEm .F XCopyArea
+>>#NOTEm or
+>>#NOTEm .F XCopyPlane
+>>#NOTEm is made
+>>#NOTEm and the source region is out-of-bounds
+>>#NOTEm and the graphics-expose attribute
+>>#NOTEm of the graphics context is set to
+>>#NOTEm .S True ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M drawable
+>>#NOTEs is set to
+>>#NOTEs the drawable of the destination region on
+>>#NOTEs which the graphics request was to be performed.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates relative to the window's origin
+>>#NOTEs and indicate the upper-left corner of the rectangle defining the exposed region.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M width
+>>#NOTEs and
+>>#NOTEs .M height
+>>#NOTEs are set to
+>>#NOTEs the size (extent) of the rectangle.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When
+>>#NOTEs .M count
+>>#NOTEs is set to zero,
+>>#NOTEs then no further xname events are to follow for the exposed DRAWABLE.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When
+>>#NOTEs .M count
+>>#NOTEs is greater than zero,
+>>#NOTEs then at least
+>>#NOTEs .M count
+>>#NOTEs xname events
+>>#NOTEs are to follow for the exposed DRAWABLE.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M major_code
+>>#NOTEs is set to either
+>>#NOTEs .S X_CopyArea
+>>#NOTEs or
+>>#NOTEs .S X_CopyPlane
+>>#NOTEs and
+>>#NOTEs .M minor_code
+>>#NOTEs is set to zero.
diff --git a/xc/test/xsuite/xtest/tset/CH08/grvtyntfy/grvtyntfy.m b/xc/test/xsuite/xtest/tset/CH08/grvtyntfy/grvtyntfy.m
new file mode 100644
index 000000000..e67a3cd73
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/grvtyntfy/grvtyntfy.m
@@ -0,0 +1,473 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GravityNotify CH08
+>>EXTERN
+#define EVENT GravityNotify
+#define MASK StructureNotifyMask
+#define MASKP SubstructureNotifyMask
+>>ASSERTION Good A
+When a xname event is generated,
+then all clients having set
+.S StructureNotifyMask
+event mask bits on the moved window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Build and create window hierarchy with child having
+win-gravity SouthEastGravity.
+Select for GravityNotify events using StructureNotifyMask.
+Select for GravityNotify events using StructureNotifyMask with client2.
+Select for no events with client3.
+Generate GravityNotify event.
+Verify that a GravityNotify event is delivered.
+Verify that a GravityNotify event is delivered to client2.
+Verify that no events are delivered to client3.
+Verify delivered event structure members.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Winh *parent, *eventw;
+XSetWindowAttributes attrs;
+Winhg winhg;
+int status;
+XEvent event;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy with child having */
+/* win-gravity SouthEastGravity. */
+ /* can't use winh() because the windows need to overlap */
+ winhg.border_width = 1;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 100;
+ winhg.area.height = 100;
+ parent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ report("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width /= 2;
+ winhg.area.height /= 2;
+ attrs.win_gravity = SouthEastGravity;
+ eventw = winh_adopt(display, parent, CWWinGravity, &attrs, &winhg, WINH_NOMASK);
+ if (eventw == (Winh *) NULL) {
+ report("Could not create child");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Select for GravityNotify events using StructureNotifyMask. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK)) {
+ report("Selection with first client failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for GravityNotify events using StructureNotifyMask with client2. */
+ if (winh_selectinput(client2, (Winh *) NULL, MASK)) {
+ report("Selection with client2 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for no events with client3. */
+ if (winh_selectinput(client3, (Winh *) NULL, NoEventMask)) {
+ report("Selection with client3 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Generate GravityNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XResizeWindow(display, parent->window, ++(parent->winhg.area.width), ++(parent->winhg.area.height));
+ event.xany.type = EVENT;
+ event.xany.window = eventw->window;
+ if (winh_plant(eventw, &event, MASK, WINH_NOMASK)) {
+ report("Could not plant events.");
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a GravityNotify event is delivered. */
+/* Verify that a GravityNotify event is delivered to client2. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events for display");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client2, (Winh *) NULL)) {
+ report("Could not harvest events for client2");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ /* not interested in resulting ConfigureNotify events */
+ if (winh_ignore_event((Winh *) NULL, ConfigureNotify, WINH_NOMASK))
+ return;
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XGravityEvent good;
+ Winhe *winhe;
+
+/* Verify delivered event structure members. */
+ /* ignore non-GravityNotify events */
+ for (winhe=winh_qdel; winhe!=(Winhe *) NULL; winhe=winhe->next){
+ if (winhe->event->type == EVENT) {
+ CHECK;
+ break;
+ }
+ }
+ if (winhe == (Winhe *) NULL) {
+ delete("Inconsistencies in delivered event queue");
+ FAIL;
+ }
+ else
+ {
+ good = winhe->event->xgravity;
+ good.type = EVENT;
+ good.event = eventw->window;
+ good.window = eventw->window;
+ good.x = eventw->winhg.area.x + 1;
+ good.y = eventw->winhg.area.y + 1;
+ if (checkevent((XEvent *) &good, winhe->event)) {
+ report("Unexpected event member values");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(15);
+>>ASSERTION Good A
+When a xname event is generated,
+then all clients having set
+.S SubstructureNotifyMask
+event mask bits on the parent of the moved window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Build and create window hierarchy with child having
+win-gravity SouthEastGravity.
+Select for GravityNotify events using SubstructureNotifyMask.
+Select for GravityNotify events using SubstructureNotifyMask with client2.
+Select for no events with client3.
+Generate GravityNotify event.
+Verify that a GravityNotify event is delivered.
+Verify that a GravityNotify event is delivered to client2.
+Verify that no events are delivered to client3.
+Verify delivered event structure members.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Winh *parent, *eventw;
+XSetWindowAttributes attrs;
+Winhg winhg;
+int status;
+XEvent event;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy with child having */
+/* win-gravity SouthEastGravity. */
+ /* can't use winh() because the windows need to overlap */
+ winhg.border_width = 1;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 100;
+ winhg.area.height = 100;
+ parent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ report("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width /= 2;
+ winhg.area.height /= 2;
+ attrs.win_gravity = SouthEastGravity;
+ eventw = winh_adopt(display, parent, CWWinGravity, &attrs, &winhg, WINH_NOMASK);
+ if (eventw == (Winh *) NULL) {
+ report("Could not create child");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Select for GravityNotify events using SubstructureNotifyMask. */
+ if (winh_selectinput(display, (Winh *) NULL, MASKP)) {
+ report("Selection with first client failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for GravityNotify events using SubstructureNotifyMask with client2. */
+ if (winh_selectinput(client2, (Winh *) NULL, MASKP)) {
+ report("Selection with client2 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for no events with client3. */
+ if (winh_selectinput(client3, (Winh *) NULL, NoEventMask)) {
+ report("Selection with client3 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Generate GravityNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XResizeWindow(display, parent->window, ++(parent->winhg.area.width), ++(parent->winhg.area.height));
+ event.xany.type = EVENT;
+ event.xany.window = parent->window;
+ if (winh_plant(parent, &event, MASKP, WINH_NOMASK)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a GravityNotify event is delivered. */
+/* Verify that a GravityNotify event is delivered to client2. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events for display");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client2, (Winh *) NULL)) {
+ report("Could not harvest events for client2");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ /* not interested in resulting ConfigureNotify events */
+ if (winh_ignore_event((Winh *) NULL, ConfigureNotify, WINH_NOMASK))
+ return;
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XGravityEvent good;
+ Winhe *winhe;
+
+/* Verify delivered event structure members. */
+ /* ignore non-GravityNotify events */
+ for (winhe=winh_qdel; winhe!=(Winhe *) NULL; winhe=winhe->next){
+ if (winhe->event->type == EVENT) {
+ CHECK;
+ break;
+ }
+ }
+ if (winhe == (Winhe *) NULL) {
+ delete("Inconsistencies in delivered event queue");
+ FAIL;
+ }
+ else
+ {
+ good = winhe->event->xgravity;
+ good.type = EVENT;
+ good.event = parent->window;
+ good.window = eventw->window;
+ good.x = eventw->winhg.area.x + 1;
+ good.y = eventw->winhg.area.y + 1;
+ if (checkevent((XEvent *) &good, winhe->event)) {
+ report("Unexpected event member values");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(15);
+>>ASSERTION def
+>>#NOTE Tested for in previous two assertions.
+When a xname event is generated,
+then
+clients not having set
+.S StructureNotifyMask
+event mask bits on the
+moved window
+and also not having set
+.S SubstructureNotifyMask
+event mask bits on the
+parent of the moved window
+are not delivered
+a xname event.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window is moved as a result of resizing its parent
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XConfigureWindow ,
+>>#NOTEm .F XMoveResizeWindow ,
+>>#NOTEm or
+>>#NOTEm .F XResizeWindow ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .S StructureNotify
+>>#NOTEs was selected,
+>>#NOTEs then
+>>#NOTEs .M event
+>>#NOTEs is set to
+>>#NOTEs the WINDOWTYPE window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .S SubstructureNotify
+>>#NOTEs was selected,
+>>#NOTEs then
+>>#NOTEs .M event
+>>#NOTEs is set to
+>>#NOTEs the WINDOWTYPE window's parent.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates of
+>>#NOTEs .M window
+>>#NOTEs relative to parent window's origin
+>>#NOTEs and indicate the position of the upper-left outside corner of
+>>#NOTEs .M window .
diff --git a/xc/test/xsuite/xtest/tset/CH08/gterrrdtbs/gterrrdtbs.m b/xc/test/xsuite/xtest/tset/CH08/gterrrdtbs/gterrrdtbs.m
new file mode 100644
index 000000000..5ba24ebcb
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/gterrrdtbs/gterrrdtbs.m
@@ -0,0 +1,187 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetErrorDatabaseText CH08
+void
+XGetErrorDatabaseText()
+Display *display = Dsp;
+char *name;
+char *message;
+char *default_string = "default_string";
+char *buffer_return = buffer;
+int length = sizeof(buffer);
+>>EXTERN
+#include "Xproto.h"
+
+static char buffer[512];
+>>ASSERTION Good A
+>>#NOTE As the precise format of a message is not defined,
+>>#NOTE there is not too much which can be tested.
+>>#NOTE Therefore, this assertion is deliberately vague.
+A call to xname
+returns a string in
+.A buffer_return .
+>>STRATEGY
+Set each character in buffer_return to non-ASCII NUL.
+Set name to "foo".
+Set message to "bar".
+Call XGetErrorText.
+Verify that there exists at least one ASCII NUL
+character in buffer_return.
+>>CODE
+int i;
+
+/* Set each character in buffer_return to non-ASCII NUL. */
+ for (i=0; i < sizeof(buffer); i++) {
+ if (!i)
+ CHECK;
+ buffer[i] = 'A';
+ }
+ buffer_return = buffer;
+/* Set name to "foo". */
+ name = "foo";
+/* Set message to "bar". */
+ message = "bar";
+/* Call XGetErrorText. */
+ XCALL;
+/* Verify that there exists at least one ASCII NUL */
+/* character in buffer_return. */
+ for (i=0; i < sizeof(buffer); i++) {
+ if (buffer[i] == '\0') {
+ CHECK;
+ break;
+ }
+ }
+ if (i == sizeof(buffer)) {
+ report("String not returned.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
+>>ASSERTION Good A
+A call to xname
+with
+.A name
+set to the string
+.S XProtoError
+and
+.A message
+set to the string representation of a protocol error number
+returns a string terminated with ASCII NUL in
+.A buffer_return .
+>>STRATEGY
+Set each character in buffer_return to non-ASCII NUL.
+Set name to "XProtoError".
+Set message to the string representation of BadWindow.
+Call XGetErrorText.
+Verify that there exists at least one ASCII NUL
+character in buffer_return.
+>>CODE
+int i;
+char msgbuf[512];
+
+/* Set each character in buffer_return to non-ASCII NUL. */
+ for (i=0; i < sizeof(buffer); i++) {
+ if (!i)
+ CHECK;
+ buffer[i] = 'A';
+ }
+ buffer_return = buffer;
+/* Set name to "XProtoError". */
+ name = "XProtoError";
+/* Set message to the string representation of BadWindow. */
+ (void) sprintf(msgbuf, "%d", BadWindow);
+ message = msgbuf;
+/* Call XGetErrorText. */
+ XCALL;
+/* Verify that there exists at least one ASCII NUL */
+/* character in buffer_return. */
+ for (i=0; i < sizeof(buffer); i++) {
+ if (buffer[i] == '\0') {
+ CHECK;
+ break;
+ }
+ }
+ if (i == sizeof(buffer)) {
+ report("Returned string not terminated with ASCII NUL.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
+>>ASSERTION Good A
+A call to xname
+with
+.A name
+set to the string
+.S XRequest
+and
+.A message
+set to the string representation of a major protocol number
+returns a string terminated with ASCII NUL in
+.A buffer_return .
+>>STRATEGY
+Set each character in buffer_return to non-ASCII NUL.
+Set name to "XRequest".
+Set message to the string representation of X_DestroyWindow.
+Call XGetErrorText.
+Verify that there exists at least one ASCII NUL
+character in buffer_return.
+>>CODE
+int i;
+char msgbuf[512];
+
+/* Set each character in buffer_return to non-ASCII NUL. */
+ for (i=0; i < sizeof(buffer); i++) {
+ if (!i)
+ CHECK;
+ buffer[i] = 'A';
+ }
+ buffer_return = buffer;
+/* Set name to "XRequest". */
+ name = "XRequest";
+/* Set message to the string representation of X_DestroyWindow. */
+ (void) sprintf(msgbuf, "%d", X_DestroyWindow);
+ message = msgbuf;
+/* Call XGetErrorText. */
+ XCALL;
+/* Verify that there exists at least one ASCII NUL */
+/* character in buffer_return. */
+ for (i=0; i < sizeof(buffer); i++) {
+ if (buffer[i] == '\0') {
+ CHECK;
+ break;
+ }
+ }
+ if (i == sizeof(buffer)) {
+ report("Returned string not terminated with ASCII NUL.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
+>>ASSERTION Good D 1
+If the implementation supports an error database:
+The error message database used is
+.S /usr/lib/X11/XErrorDB .
+>>ASSERTION Good B 1
+When a call to xname is made and
+no string is found in the error database,
+then
+.A default_string
+is returned in
+.A buffer_return .
diff --git a/xc/test/xsuite/xtest/tset/CH08/gterrrtxt/gterrrtxt.m b/xc/test/xsuite/xtest/tset/CH08/gterrrtxt/gterrrtxt.m
new file mode 100644
index 000000000..10c28554d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/gterrrtxt/gterrrtxt.m
@@ -0,0 +1,68 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetErrorText CH08
+void
+XGetErrorText(display, code, buffer_return, length)
+Display *display = Dsp;
+int code = 1;
+char *buffer_return = buffer;
+int length = sizeof(buffer);
+>>EXTERN
+static char buffer[512];
+>>ASSERTION Good A
+A call to xname
+returns in
+.A buffer_return
+a string terminated with ASCII NUL.
+>>STRATEGY
+Set each character in buffer_return to non-ASCII NUL.
+Call XGetErrorText.
+Verify that there exists at least one ASCII NUL
+character in buffer_return.
+>>CODE
+int i;
+
+/* Set each character in buffer_return to non-ASCII NUL. */
+ for (i=0; i < sizeof(buffer); i++) {
+ if (!i)
+ CHECK;
+ buffer[i] = 'A';
+ }
+ buffer_return = buffer;
+/* Call XGetErrorText. */
+ XCALL;
+/* Verify that there exists at least one ASCII NUL */
+/* character in buffer_return. */
+ for (i=0; i < sizeof(buffer); i++) {
+ if (buffer[i] == '\0') {
+ CHECK;
+ break;
+ }
+ }
+ if (i == sizeof(buffer)) {
+ report("Returned string not terminated with ASCII NUL.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
+>>ASSERTION Good B 1
+>>#NOTE How to prove this??? Answer: tet result code FIP
+After a call to xname
+.A buffer_return
+contains a textual description of
+.A code .
diff --git a/xc/test/xsuite/xtest/tset/CH08/gtmtnevnts/gtmtnevnts.m b/xc/test/xsuite/xtest/tset/CH08/gtmtnevnts/gtmtnevnts.m
new file mode 100644
index 000000000..93fa27501
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/gtmtnevnts/gtmtnevnts.m
@@ -0,0 +1,182 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetMotionEvents CH08
+XTimeCoord *
+XGetMotionEvents(display, w, start, stop, nevents_return)
+Display *display = Dsp;
+Window w = DRW(display);
+Time start = CurrentTime;
+Time stop = CurrentTime;
+int *nevents_return = &_nevents_return;
+>>EXTERN
+static int _nevents_return;
+>>ASSERTION Good D 1
+If
+the implementation supports a more complete
+history of the pointer motion than is reported by event notification:
+a call to xname
+returns all events in the motion history buffer
+that fall between the
+.A start
+and
+.A stop
+times, inclusive,
+which have coordinates that lie within the specified window
+(including its borders)
+at its present placement
+and sets
+.A nevents_return
+to the number of events returned.
+>>STRATEGY
+If a pointer motion buffer is not supported, return.
+>>CODE
+/* If a pointer motion buffer is not supported, return. */
+ if (!config.displaymotionbuffersize)
+ unsupported("Pointer motion buffer is not supported.");
+ else
+ untested("There is no known portable test method for this assertion");
+>>ASSERTION Good C
+If
+the implementation does not support a more complete
+history of pointer motion than is reported by event notification:
+a call to xname returns no events.
+>>STRATEGY
+If a pointer motion buffer is supported, return.
+Call XGetMotionEvents.
+Verify that no events were returned.
+>>CODE
+XTimeCoord *tc;
+
+/* If a pointer motion buffer is supported, return. */
+ if (config.displaymotionbuffersize != 0) {
+ report("Pointer motion buffer is supported.");
+ UNSUPPORTED;
+ return;
+ }
+ else
+ CHECK;
+ start = 0;
+ stop = CurrentTime;
+ *nevents_return = 1;
+/* Call XGetMotionEvents. */
+ tc = XCALL;
+/* Verify that no events were returned. */
+ if (tc != (XTimeCoord *) NULL) {
+ report("Returned 0x%x, expected NULL", tc);
+ FAIL;
+ XFree((char*)tc);
+ }
+ else
+ CHECK;
+ if (*nevents_return != 0) {
+ report("Returned %d, expected 0", *nevents_return);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
+>>ASSERTION Good A
+When
+.A start
+is later than
+.A stop ,
+then a call to xname returns no events.
+>>STRATEGY
+Set stop to current time.
+Call XGetMotionEvents with start greater than stop.
+Verify that no events were returned.
+>>CODE
+XTimeCoord *tc;
+
+/* Set stop to current time. */
+ stop = gettime(display);
+/* Call XGetMotionEvents with start greater than stop. */
+ start = stop + 1;
+ tc = XCALL;
+/* Verify that no events were returned. */
+ if (tc != (XTimeCoord *) NULL) {
+ report("Returned 0x%x, expected NULL", tc);
+ FAIL;
+ XFree((char*)tc);
+ }
+ else
+ CHECK;
+ if (*nevents_return != 0) {
+ report("Returned %d, expected 0", *nevents_return);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
+>>ASSERTION Good A
+When
+.A start
+is in the future,
+then a call to xname returns no events.
+>>STRATEGY
+Set stop to current time.
+Set start to a future time.
+Call XGetMotionEvents.
+Verify that no events were returned.
+>>CODE
+XTimeCoord *tc;
+
+/* Set stop to current time. */
+ stop = CurrentTime;
+/* Set start to a future time. */
+ start = gettime(display) + 10000;
+/* Call XGetMotionEvents. */
+ tc = XCALL;
+/* Verify that no events were returned. */
+ if (tc != (XTimeCoord *) NULL) {
+ report("Returned 0x%x, expected NULL", tc);
+ FAIL;
+ XFree((char*)tc);
+ }
+ else
+ CHECK;
+ if (*nevents_return != 0) {
+ report("Returned %d, expected 0", *nevents_return);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
+>>ASSERTION Good B 1
+>>#NOTE I do not believe that this is testable (we can not generate events).
+A call to xname with
+.A stop
+in the future,
+is equivalent to specifying
+a value of
+.S CurrentTime
+for
+.A stop .
+>>ASSERTION Good D 1
+On a call to xname
+the
+.M x
+and
+.M y
+members of the events returned
+are set to the coordinates of the pointer
+relative to the origin
+of the specified window and the
+.M time
+member is set to the time the pointer reached this coordinate.
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH08/ifevnt/ifevnt.m b/xc/test/xsuite/xtest/tset/CH08/ifevnt/ifevnt.m
new file mode 100644
index 000000000..f68c9e76f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/ifevnt/ifevnt.m
@@ -0,0 +1,347 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XIfEvent CH08
+void
+XIfEvent(display, event_return, predicate, arg)
+Display *display = Dsp;
+XEvent *event_return = &_event;
+Predicate predicate = _predicate;
+char *arg = (char *) NULL;
+>>EXTERN
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_() \
+ _startcall(display);\
+ XIfEvent(display, event_return, predicate, arg);\
+ _endcall(display)
+static XEvent _event;
+
+/*
+ * _predicate - a predicate procedure
+ *
+ * _predicate returns True only after it has been invoked the specified
+ * number of times (_pred_max). _pred_cnt is used to keep track of the
+ * number of invocations. _pred_retval always contains the previous
+ * _predicate return value. _pred_true is set to True if _predicate is
+ * ever invoked while _pred_retval is set to True. _pred_event contains
+ * a copy of the event most recently passed to _predicate.
+ *
+ * These variables should be initialized by a call to PRED_SETUP() prior
+ * to (indirectly!) invoking the predicate procedure. PRED_SETUP takes
+ * an argument which specifies at which invocation _predicate should
+ * start returning True.
+ */
+static int _pred_max;
+static int _pred_cnt; /* _predicate invocation counter */
+static XEvent _pred_event; /* last event passed to _predicate */
+static int _pred_retval; /* last returnvalue from _predicate */
+static int _pred_true; /* True when True previously returned */
+
+static int
+_predicate (display, event, arg)
+Display *display;
+XEvent *event;
+char *arg;
+{
+#ifdef lint
+ XCloseDisplay(display);
+ *arg = '\0';
+#endif
+ _pred_event = *event;
+ if (_pred_retval == True)
+ _pred_true = True;
+ _pred_retval = ((++_pred_cnt >= _pred_max) ? True : False);
+ return(_pred_retval);
+}
+
+#define PRED_SETUP(max) \
+ _pred_max = (max);\
+ _pred_cnt = 0;\
+ _pred_retval = False;\
+ _pred_true = False
+
+>>ASSERTION Good A
+A call to xname
+calls
+.A predicate
+once for each event in the event queue until
+.A predicate
+returns
+.S True .
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Set up predicate procedure.
+Call XIfEvent.
+Verify that predicate was called the correct number of times.
+Verify that predicate returned True at most recent invocation.
+Verify that XIfEvent did not continue to call predicate
+after predicate returned True.
+>>CODE
+XEvent event;
+int callcnt;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 2);
+/* Call XIfEvent. */
+ _xcall_();
+/* Verify that predicate was called the correct number of times. */
+ if (_pred_cnt != callcnt) {
+ report("predicate called %d times, expected %d", _pred_cnt, callcnt);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that predicate returned True at most recent invocation. */
+ if (_pred_retval != True) {
+ report("predicate returned %d, expecting %d", _pred_retval, True);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XIfEvent did not continue to call predicate */
+/* after predicate returned True. */
+ if (_pred_true == True) {
+ report("Did not return when predicate returned True.");
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+When
+.A predicate
+returns
+.S True ,
+then xname returns the
+.A event
+passed to
+.A predicate
+in
+.A event_return .
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Set up predicate procedure.
+Call XIfEvent.
+Verify that predicate returned True at most recent invocation.
+Verify that event_return is the same as the event passed to predicate.
+Verify that event_return is the expected event.
+Verify that XIfEvent did not continue to call predicate
+after predicate returned True.
+>>CODE
+XEvent event;
+int callcnt;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 2);
+/* Call XIfEvent. */
+ _xcall_();
+/* Verify that predicate returned True at most recent invocation. */
+ if (_pred_retval != True) {
+ report("predicate returned %d, expecting %d", _pred_retval, True);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event_return is the same as the event passed to predicate. */
+ if (event_return->type != _pred_event.type) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(_pred_event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event_return is the expected event. */
+ if (event_return->type != KeyRelease) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(KeyRelease));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XIfEvent did not continue to call predicate */
+/* after predicate returned True. */
+ if (_pred_true == True) {
+ report("Did not return when predicate returned True.");
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(4);
+>>ASSERTION Good A
+A call to xname removes the returned event from the event queue.
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XPending to get the current event queue size.
+Set up predicate procedure.
+Call XIfEvent.
+Call XPending to get the current event queue size.
+Verify that size of the event queue has decreased by one.
+Verify that the returned event was removed from the event queue.
+>>CODE
+XEvent event;
+XEvent nextevent;
+int callcnt;
+int oldqsize;
+int newqsize;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Call XPending to get the current event queue size. */
+ oldqsize = XPending(display);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 1);
+/* Call XIfEvent. */
+ _xcall_();
+/* Call XPending to get the current event queue size. */
+ newqsize = XPending(display);
+/* Verify that size of the event queue has decreased by one. */
+ if (newqsize != (oldqsize-1)) {
+ report("Event queue size %d, expected %d", newqsize, oldqsize-1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that the returned event was removed from the event queue. */
+ XNextEvent(display, &nextevent);
+ if (event_return->type == nextevent.type) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(ButtonPress));
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When on a call to xname
+.A predicate
+has not returned
+.S True
+after having been called once for each event in the event queue,
+then xname flushes the output buffer and
+blocks until a matching event is received.
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Call XPutBackEvent to put an event on the event queue.
+Set up predicate procedure.
+Call XIfEvent and verify that blocking did occur.
+Verify that the output buffer was flushed.
+Verify that predicate was called the correct number of times.
+Verify that predicate returned True at most recent invocation.
+>>CODE
+XEvent event;
+int callcnt;
+Block_Info info;
+int block_status;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Call XPutBackEvent to put an event on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 2);
+/* Call XIfEvent and verify that blocking did occur. */
+ XIfEvent_Type(info, predicate, arg);
+ block_status = block(display, (XEvent *) NULL, &info);
+ if (block_status == -1)
+ return;
+ else
+ CHECK;
+ if (block_status == 0) {
+ report("Blocking did not occur.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that the output buffer was flushed. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() != Success) {
+ report("The output buffer was not flushed.");
+ XFreePixmap(display, pm);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that predicate was called the correct number of times. */
+ if (_pred_cnt != callcnt) {
+ report("predicate called %d times, expected %d", _pred_cnt, callcnt);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that predicate returned True at most recent invocation. */
+ if (_pred_retval != True) {
+ report("predicate returned %d, expecting %d", _pred_retval, True);
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(6);
diff --git a/xc/test/xsuite/xtest/tset/CH08/kympntfy/kympntfy.m b/xc/test/xsuite/xtest/tset/CH08/kympntfy/kympntfy.m
new file mode 100644
index 000000000..3d16a413b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/kympntfy/kympntfy.m
@@ -0,0 +1,472 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE KeymapNotify CH08
+>>EXTERN
+#define EVENT KeymapNotify
+#define MASK KeymapStateMask
+>>ASSERTION Good A
+When a
+.S EnterNotify
+event is generated,
+then a xname event is generated immediately afterwards.
+>>STRATEGY
+Move pointer to known location.
+Build and create window hierarchy.
+Select for EnterNotify and KeymapNotify events on window hierarchy.
+Move cursor into hierarchy window.
+Get events from event queue.
+Verify that EnterNotify events are delivered.
+Verify that a KeymapNotify event follows each of these EnterNotify events.
+Repeat.
+>>CODE
+int i;
+Display *display = Dsp;
+Winh *winhs[5];
+
+#ifdef OTHERMASK
+#undef OTHERMASK
+#endif
+#define OTHERMASK EnterWindowMask
+#ifdef OTHEREVENT
+#undef OTHEREVENT
+#endif
+#define OTHEREVENT EnterNotify
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ if (winh(display, 3, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+ /*
+ * Initialize all members to null. Then check for null members
+ * in main for-loop as a sign of inconsistency between array
+ * size and the initialization of array members below.
+ */
+ for (i=0; i<NELEM(winhs); i++)
+ winhs[i] = (Winh *) NULL;
+ winhs[0] = guardian->firstchild;
+ winhs[1] = winhs[0]->nextsibling;
+ winhs[2] = winhs[1]->nextsibling;
+ winhs[3] = winhs[0]->firstchild->firstchild;
+ winhs[4] = winhs[1]->firstchild->firstchild;
+/* Select for EnterNotify and KeymapNotify events on window hierarchy. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK|OTHERMASK))
+ return;
+ else
+ CHECK;
+ for (i=0; i<NELEM(winhs); i++) {
+ int once;
+ Winhe *ptr;
+
+ if (winhs[i] == (Winh *) NULL) {
+ delete("Unexpected NULL window hierarchy member");
+ return;
+ }
+ else
+ CHECK;
+/* Move cursor into hierarchy window. */
+ XSync(display, True);
+ XWarpPointer(display, None, winhs[i]->window, 0, 0, 0, 0, 2, 2);
+ XSync(display, False);
+/* Get events from event queue. */
+ if (winh_plant((Winh *) NULL, (XEvent *) NULL, NoEventMask, WINH_NOMASK)) {
+ /* already deleted */
+ report("Could not initialize event data structures");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ ptr = winh_qdel;
+ if (ptr == (Winhe *) NULL) {
+ report("No events received.");
+ FAIL;
+ continue;
+ }
+ else
+ CHECK;
+/* Verify that EnterNotify events are delivered. */
+/* Verify that a KeymapNotify event follows each of these EnterNotify events. */
+ for (once=1; ptr != (Winhe *) NULL; ptr = ptr->next) {
+ if (once) {
+ CHECK;
+ once = 0;
+ }
+ if (ptr->event->type != OTHEREVENT) {
+ report("Got %s, expected %s",
+ eventname(ptr->event->type),
+ eventname(OTHEREVENT));
+ FAIL;
+ break;
+ }
+ ptr = ptr->next;
+ if (ptr == (Winhe *) NULL) {
+ report("Missing %s event", EVENT);
+ FAIL;
+ break;
+ }
+ if (ptr->event->type != EVENT) {
+ report("Got %s, expected %s",
+ eventname(ptr->event->type),
+ eventname(EVENT));
+ FAIL;
+ break;
+ }
+ }
+/* Repeat. */
+ }
+ CHECKPASS(3 + (NELEM(winhs)*5));
+>>ASSERTION Good A
+When a
+.S FocusIn
+event is generated,
+then a xname event is generated immediately afterwards.
+>>STRATEGY
+Move pointer to known location.
+Build and create window hierarchy.
+Select for FocusIn and KeymapNotify events on window hierarchy.
+Generate FocusIn event.
+Get events from event queue.
+Verify that FocusIn events are delivered.
+Verify that a KeymapNotify event follows each of these FocusIn events.
+Repeat.
+>>CODE
+int i;
+Display *display = Dsp;
+Winh *winhs[5];
+
+#ifdef OTHERMASK
+#undef OTHERMASK
+#endif
+#define OTHERMASK FocusChangeMask
+#ifdef OTHEREVENT
+#undef OTHEREVENT
+#endif
+#define OTHEREVENT FocusIn
+#ifdef IGNOREEVENT
+#undef IGNOREEVENT
+#endif
+#define IGNOREEVENT FocusOut
+
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ if (winh(display, 3, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+ /*
+ * Initialize all members to null. Then check for null members
+ * in main for-loop as a sign of inconsistency between array
+ * size and the initialization of array members below.
+ */
+ for (i=0; i<NELEM(winhs); i++)
+ winhs[i] = (Winh *) NULL;
+ winhs[0] = guardian->firstchild;
+ winhs[1] = winhs[0]->nextsibling;
+ winhs[2] = winhs[1]->nextsibling;
+ winhs[3] = winhs[0]->firstchild->firstchild;
+ winhs[4] = winhs[1]->firstchild->firstchild;
+/* Select for FocusIn and KeymapNotify events on window hierarchy. */
+ if (winh_selectinput(display, (Winh *) NULL, MASK|OTHERMASK))
+ return;
+ else
+ CHECK;
+ for (i=0; i<NELEM(winhs); i++) {
+ int once;
+ Winhe *ptr;
+
+ if (winhs[i] == (Winh *) NULL) {
+ delete("Unexpected NULL window hierarchy member");
+ return;
+ }
+ else
+ CHECK;
+/* Generate FocusIn event. */
+ XSync(display, True);
+ XSetInputFocus(display, winhs[i]->window, RevertToNone, CurrentTime);
+ XSync(display, False);
+/* Get events from event queue. */
+ if (winh_plant((Winh *) NULL, (XEvent *) NULL, NoEventMask, WINH_NOMASK)) {
+ /* already deleted */
+ report("Could not initialize event data structures");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ ptr = winh_qdel;
+ if (ptr == (Winhe *) NULL) {
+ report("No events received.");
+ FAIL;
+ continue;
+ }
+ else
+ CHECK;
+/* Verify that FocusIn events are delivered. */
+/* Verify that a KeymapNotify event follows each of these FocusIn events. */
+ for (once=1; ptr != (Winhe *) NULL; ptr = ptr->next) {
+ if (once) {
+ CHECK;
+ once = 0;
+ }
+ if (ptr->event->type == IGNOREEVENT)
+ continue;
+ if (ptr->event->type != OTHEREVENT) {
+ report("Got %s, expected %s",
+ eventname(ptr->event->type),
+ eventname(OTHEREVENT));
+ FAIL;
+ break;
+ }
+ ptr = ptr->next;
+ if (ptr == (Winhe *) NULL) {
+ report("Missing %s event", EVENT);
+ FAIL;
+ break;
+ }
+ if (ptr->event->type != EVENT) {
+ report("Got %s, expected %s",
+ eventname(ptr->event->type),
+ eventname(EVENT));
+ FAIL;
+ break;
+ }
+ }
+/* Repeat. */
+ }
+ CHECKPASS(3 + (NELEM(winhs)*5));
+>>ASSERTION Good A
+When a xname event is generated,
+then
+all clients having set
+.S KeymapStateMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+Move pointer to known location.
+Create clients client2 and client3.
+Build and create window hierarchy.
+Select for KeymapNotify and EnterNotify events on eventw.
+Select for KeymapNotify and EnterNotify events on eventw with client2.
+Select for no events on eventw with client3.
+Generate KeymapNotify event.
+Initialize for expected events.
+Harvest events from each clients event queue.
+Verify that KeymapNotify event was received.
+Verify that KeymapNotify event was received by client2.
+Verify that no event was received by client3.
+>>CODE
+Display *display = Dsp;
+Display *client2, *client3;
+Winh *eventw;
+int status;
+XEvent good;
+
+#ifdef OTHERMASK
+#undef OTHERMASK
+#endif
+#define OTHERMASK EnterWindowMask
+#ifdef OTHEREVENT
+#undef OTHEREVENT
+#endif
+#define OTHEREVENT EnterNotify
+
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ if (winh(display, 1, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+ eventw = guardian->firstchild;
+/* Select for KeymapNotify and EnterNotify events on eventw. */
+ /*
+ * necessary so that winh routines know which window
+ * to associate the event with
+ */
+ if (winh_selectinput(display, eventw, MASK|OTHERMASK))
+ return;
+ else
+ CHECK;
+/* Select for KeymapNotify and EnterNotify events on eventw with client2. */
+ /*
+ * necessary so that winh routines know which window
+ * to associate the event with
+ */
+ if (winh_selectinput(client2, eventw, MASK|OTHERMASK))
+ return;
+ else
+ CHECK;
+/* Select for no events on eventw with client3. */
+ if (winh_selectinput(client3, eventw, NoEventMask))
+ return;
+ else
+ CHECK;
+/* Generate KeymapNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XWarpPointer(display, None, eventw->window, 0, 0, 0, 0, 2, 2);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Initialize for expected events. */
+ good.xany.type = EVENT;
+ good.xany.window = eventw->window;
+ good.xany.display = display;
+ if (winh_plant(eventw, &good, NoEventMask, WINH_NOMASK)) {
+ /* already deleted */
+ report("Could not initialize event data structures (1)");
+ return;
+ }
+ else
+ CHECK;
+/* Harvest events from each clients event queue. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client2, (Winh *) NULL)) {
+ report("Could not harvest events for client2");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ report("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+/* Verify that KeymapNotify event was received. */
+/* Verify that KeymapNotify event was received by client2. */
+/* Verify that no event was received by client3. */
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ report("display: 0x%x, client2: 0x%x, client2: 0x%x",
+ display, client2, client3);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(13);
+>>ASSERTION def
+>>#NOTE True for most events (except MappingNotify and selection stuff).
+>>#NOTE Tested for in previous assertion (i.e. client3).
+When a xname event is generated,
+then
+clients not having set
+.S KeymapStateMask
+event mask bits on the event window are not delivered
+a xname event.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEd >>ASSERTION
+>>#NOTEd When ARTICLE xname is delivered,
+>>#NOTEd then
+>>#NOTEd .M key_vector
+>>#NOTEd is set such that each bit set to one indicates that
+>>#NOTEd the corresponding key is currently pressed.
diff --git a/xc/test/xsuite/xtest/tset/CH08/kyprss/kyprss.m b/xc/test/xsuite/xtest/tset/CH08/kyprss/kyprss.m
new file mode 100644
index 000000000..31c5dc0a0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/kyprss/kyprss.m
@@ -0,0 +1,954 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE KeyPress CH08
+>>EXTERN
+#define EVENT KeyPress
+#define EVENTMASK KeyPressMask
+
+static void
+presskey(Dpy, w, kc)
+Display *Dpy;
+Window w;
+int kc;
+{
+ /*
+ * Note that we do not call XSetInputFocus() since 2 tests require
+ * the event window to be an ancestor of the source window.
+ */
+ keypress(Dpy, kc);
+}
+
+static int keyc = 0;
+
+static int
+keycode()
+{
+int tmp;
+
+ if(keyc == 0) {
+ XDisplayKeycodes(Dsp, &keyc, &tmp);
+ if (keyc < 8)
+ keyc = 8;
+ }
+ return(keyc);
+}
+>>SET startup focusstartup
+>>SET cleanup focuscleanup
+>>ASSERTION Good B 1
+>>#NOTE The documentation does not explicitly state the following anywhere,
+>>#NOTE it merely states something relative to logical changes in
+>>#NOTE key state. In addition, I don't expect very many of these
+>>#NOTE assertions to be testable.
+When any key is pressed,
+then a xname event is generated.
+>>STRATEGY
+If extended testing is required:
+ Create window.
+ Select for xname events.
+ Simulate a xname event on the window.
+ Verify that a xname event was delivered.
+ Verify that the event member fields are correctly set.
+>>CODE
+Window w;
+XEvent event_return;
+XKeyEvent good;
+PointerPlace *ptr;
+int kc;
+
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+
+ /* Create window. */
+ w = defwin(Dsp);
+
+ /* Select for xname events. */
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ /* Simulate a xname event on the window. */
+ ptr = warppointer(Dsp, w, 0,0);
+ kc = keycode();
+ presskey(Dsp, w, kc);
+
+ /* Verify that a xname event was delivered. */
+ if (!XCheckTypedWindowEvent(Dsp, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ } else {
+
+ CHECK;
+
+ good = event_return.xkey;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = Dsp;
+ good.window = w;
+ good.root = DRW(Dsp);
+ good.subwindow = None;
+ good.x = 0;
+ good.y = 0;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = 0;
+ good.keycode = kc;
+ good.same_screen = True;
+
+ /* Verify that the event member fields are correctly set. */
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ keyrel(Dsp, kc);
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+When a xname event is generated,
+then
+all clients having set
+.S KeyPressMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+If extended testing is required:
+ Create a second client.
+ Create a third client.
+ Create a window.
+ Select for xname events on all clients.
+ Simulate a xname event on the window.
+ Verify that the event was delivered to all clients.
+ Verify that event member fields are correctly set.
+Otherwise :
+ Create a window.
+ Select for xname events.
+ Verify no error was generated.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window w;
+XEvent event_return;
+XKeyPressedEvent good;
+PointerPlace *ptr;
+int kc;
+
+ if(config.extensions) {
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+
+ client2 = opendisplay();
+ client3 = opendisplay();
+
+ /* Create window. */
+ w = defwin(display);
+
+ /* Select for xname events on all the clients. */
+ XSelectInput(display, w, EVENTMASK);
+ XSelectInput(client2, w, EVENTMASK);
+ XSelectInput(client3, w, EVENTMASK);
+
+ /* Simulate a xname event on the window. */
+ ptr = warppointer(display, w, 0,0);
+ kc = keycode();
+
+ XSync(client2, True);
+ XSync(client3, True);
+
+ presskey(display, w, kc);
+
+ XSync(client2, False);
+ XSync(client3, False);
+
+ good = event_return.xkey;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.root = DRW(display);
+ good.subwindow = None;
+ good.x = 0;
+ good.y = 0;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = 0;
+ good.keycode = kc;
+ good.same_screen = True;
+
+ /* Verify that the xname events were delivered. */
+ /* Verify that xname event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+/* client 2 */
+ if (!XCheckTypedWindowEvent(client2, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ good.display = client2;
+
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+/* client 3 */
+
+ if (!XCheckTypedWindowEvent(client3, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ good.display = client3;
+
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ keyrel(display, kc);
+ CHECKPASS(6);
+
+ } else {
+
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ XSelectInput(display, w, KeyPressMask);
+ XSync(display, True);
+ if (geterr() != Success) {
+ delete("Error setting up for test.");
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKUNTESTED(1);
+ }
+
+>>ASSERTION Good B 1
+>>#NOTE True for most events (except MappingNotify and selection stuff).
+When a xname event is generated,
+then
+clients not having set
+.S KeyPressMask
+event mask bits on the event window are not delivered
+a xname event.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Create a second client.
+ Select for various events other than xname for the first client on the window.
+ Select for xname events for the second client on the window.
+ Simulate a xname event on the window.
+ Verify that a xname event was generated for the second client.
+ Verify that no events were generated for the first client.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+XEvent ev;
+Window w;
+int count;
+int kc;
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+
+ /* Create a window. */
+ w = defwin(display);
+
+ /* Create a second client. */
+ client2 = opendisplay();
+
+ /* Select for various events other than xname for the first client on the window. */
+ kc = keycode();
+ XSelectInput(display, w, KeyReleaseMask|ButtonPressMask|ButtonReleaseMask);
+ /* Select for xname events for the second client on the window. */
+ XSelectInput(client2, w, EVENTMASK);
+
+ /* Simulate a xname event on the window. */
+ (void) warppointer(display, w, 0, 0);
+ XSync(display, True);
+ XSync(client2, True);
+ presskey(display, w, kc);
+
+ XSync(client2, False);
+
+ /* Verify that a xname event was generated for the second client. */
+ if(XCheckWindowEvent(client2, w, EVENTMASK, &ev) == False) {
+ report("No %s event was generated.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ /* Verify that no events were generated for the first client. */
+ count = XPending(display);
+ if (count != 0) {
+ report("Got %d unexpected events.", count);
+ FAIL;
+ } else
+ CHECK;
+
+ keyrel(display, kc);
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+When a xname event is generated
+and no client has selected
+.S KeyPressMask
+on the source window,
+then the event propagates,
+with propagation stopping at the root window of the screen or
+at the first window with
+.S KeyPressMask
+in its do-not-propagate mask,
+from the source window to
+the first ancestor window for which
+some client has selected
+for xname events.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Create a child of that window.
+ Create a grandchild of the window.
+ Select xname events on the root window of the screen.
+ Simulate a xname event on the grandchild.
+ Verify that a xname event was generated on the root.
+ Select xname events on the grandparent window.
+ Set the do_not_propagate mask on the child to xname events.
+ Simulate a xname event on the grandchild.
+ Verify no xname event was generated on the grandchild.
+ Verify no xname event was generated on the child.
+ Verify no xname event was generated on the parent.
+ Select xname events on the child window.
+ Set the do_not_propagate mask of the grandparent to xname events.
+ Set the do_not_propagate mask of the child to NoEventMask.
+ Simulate a xname event on the grandchild.
+ Verify that no xname event was generated on the grandchild.
+ Verify that no xname event was generated on the parent.
+ Verify that a xname event was generated on the child.
+>>CODE
+XEvent ev;
+Window w;
+Window w1;
+Window w2;
+XSetWindowAttributes atts;
+int kc;
+
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+
+ /* Create a window. */
+ w = defwin(Dsp);
+ /* Create a child of that window. */
+ w1 = crechild(Dsp, w, (struct area *) NULL);
+ /* Create a grandchild of the window. */
+ w2 = crechild(Dsp, w1, (struct area *) NULL);
+
+ /* Select xname events on the root window of the screen. */
+ XSelectInput(Dsp, DRW(Dsp), EVENTMASK);
+ /* Simulate a xname event on the grandchild. */
+
+ (void) warppointer(Dsp, w2, 1,1);
+ kc = keycode();
+ presskey(Dsp, w2, kc);
+
+ /* Verify that a xname event was generated on the root. */
+ if (XCheckWindowEvent(Dsp, DRW(Dsp), EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(KeyPress));
+ FAIL;
+ } else
+ CHECK;
+
+ keyrel(Dsp, kc);
+ XSelectInput(Dsp, DRW(Dsp), NoEventMask);
+ /* Select xname events on the grandparent window. */
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ /* Set the do_not_propagate mask on the child to xname events. */
+ atts.do_not_propagate_mask = EVENTMASK;
+ XChangeWindowAttributes(Dsp, w1, CWDontPropagate, &atts);
+
+ /* Simulate a xname event on the grandchild. */
+ presskey(Dsp, w2, kc);
+
+ /* Verify no xname event was generated on the grandchild. */
+ if (XCheckWindowEvent(Dsp, w2, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(KeyPress));
+ FAIL;
+ } else
+ CHECK;
+
+ /* Verify no xname event was generated on the child. */
+ if (XCheckWindowEvent(Dsp, w1, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(KeyPress));
+ FAIL;
+ } else
+ CHECK;
+
+ /* Verify no xname event was generated on the parent. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(KeyPress));
+ FAIL;
+ } else
+ CHECK;
+
+ keyrel(Dsp, kc);
+
+ /* Select xname events on the child window. */
+ XSelectInput(Dsp, w1, EVENTMASK);
+ /* Set the do_not_propagate mask of the grandparent to xname events. */
+ XChangeWindowAttributes(Dsp, w, CWDontPropagate, &atts);
+
+ /* Set the do_not_propagate mask of the child to NoEventMask. */
+ atts.do_not_propagate_mask = NoEventMask;
+ XChangeWindowAttributes(Dsp, w1, CWDontPropagate, &atts);
+
+ /* Simulate a xname event on the grandchild. */
+ presskey(Dsp, w2, kc);
+
+ /* Verify that no xname event was generated on the grandchild. */
+ if (XCheckWindowEvent(Dsp, w2, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(KeyPress));
+ FAIL;
+ } else
+ CHECK;
+
+ /* Verify that no xname event was generated on the parent. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(KeyPress));
+ FAIL;
+ } else
+ CHECK;
+
+ /* Verify that a xname event was generated on the child. */
+ if (XCheckWindowEvent(Dsp, w1, EVENTMASK, &ev) == False) {
+ report("KeyPress event was not delivered to selecting child window.");
+ FAIL;
+ } else
+ CHECK;
+
+ keyrel(Dsp, kc);
+ CHECKPASS(7);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M root
+>>#NOTEs is set to the source window's root window.
+>>ASSERTION Good B 1
+>>#
+>>#COMMENT
+>># This assertion contains a tautology; a child is an inferior.
+>># - Cal 12/2/92.
+>>#
+When a xname event is delivered
+and the source window is an inferior of the event window
+and the source window is a child of the event window,
+then
+.M subwindow
+is set to
+the source window.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Create a child of the window
+ Select xname events on the parent.
+ Simulate a xname event on the child.
+ Verify that a xname event was generated on the parent.
+ Verify that the subwindow component was set to the child.
+>>CODE
+XEvent ev;
+Window w;
+Window w1;
+int kc;
+
+ if(noext(0))
+ return;
+
+ /* If extended testing is required: */
+
+ /* Create a window. */
+ w = defwin(Dsp);
+ /* Create a child of the window */
+ w1 = crechild(Dsp, w, (struct area *) NULL);
+ /* Select xname events on the parent. */
+ XSelectInput(Dsp, w, EVENTMASK);
+ (void) warppointer(Dsp, w1, 1,1);
+
+ /* Simulate a xname event on the child. */
+ kc=keycode();
+ presskey(Dsp, w1, kc);
+
+ /* Verify that a xname event was generated on the parent. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that the subwindow component was set to the child. */
+ if(ev.xkey.subwindow != w1) {
+ report("The subwindow component of the %s name was not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ keyrel(Dsp, kc);
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+When a xname event is delivered
+and the source window is an inferior of the event window
+and the source window is not a child of the event window,
+then
+.M subwindow
+is set to
+the child of the event window that is
+an ancestor of the source window.
+>>STRATEGY
+If extended testing is required :
+ Create a window.
+ Create a child.
+ Create a grandchild.
+ Create a great-grandchild.
+ Select xname events on the great-grandparent.
+ Simulate a xname event on the great-grandchild.
+ Verify that a xname event was generated on the great-grandparent.
+ Verify that subwindow component of the event was the child.
+>>CODE
+Window w;
+Window w1;
+Window w2;
+Window w3;
+XEvent ev;
+struct area area;
+int kc;
+
+ /* If extended testing is required : */
+ if (noext(0))
+ return;
+
+ /* Create a window. */
+ w = defwin(Dsp);
+ setarea(&area, 10, 10, 30, 30);
+ /* Create a child. */
+ w1 = crechild(Dsp, w, &area);
+ /* Create a grandchild. */
+ w2 = crechild(Dsp, w1, &area);
+ /* Create a great-grandchild. */
+ w3 = crechild(Dsp, w2, &area);
+ (void) warppointer(Dsp, w3, 1,1);
+
+ /* Select xname events on the great-grandparent. */
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ /* Simulate a xname event on the great-grandchild. */
+ kc = keycode();
+ presskey(Dsp, w3, kc);
+
+ /* Verify that a xname event was generated on the great-grandparent. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that subwindow component of the event was the child. */
+ if(ev.xkey.subwindow != w1) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ keyrel(Dsp, kc);
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+When a xname event is delivered
+and the source window is not an inferior of the event window,
+then
+.M subwindow
+is set to
+.S None .
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Select xname events on the window.
+ Simulate a xname event on the window.
+ Verify that a xname event was generated on the window.
+ Verify that the subwindow component was set to None.
+ Create a second window.
+ Grab the keyboard for the first window with owner_events set to False.
+ Simulate a xname event on the second window.
+ Verify that a xname event was generated on the grabbing window.
+ Verify that the subwindow component was set to None.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+int gr;
+int kc;
+
+ /* If extended testing is required: */
+ if (noext(0))
+ return;
+
+ /* Create a window. */
+ w = defwin(Dsp);
+ (void) warppointer(Dsp, w, 1,1);
+
+ /* Select xname events on the window. */
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ /* Simulate a xname event on the window. */
+ kc=keycode();
+ presskey(Dsp, w, kc);
+
+ /* Verify that a xname event was generated on the window. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that the subwindow component was set to None. */
+ if(ev.xkey.subwindow != None) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ keyrel(Dsp, kc);
+
+ /* Create a second window. */
+ w2 = defwin(Dsp);
+
+ /* Grab the keyboard for the first window with owner_events set to False. */
+ if( (gr=XGrabKeyboard(Dsp, w, False, GrabModeAsync, GrabModeAsync, CurrentTime)) != GrabSuccess) {
+ delete("XGrabKeyboard() returned %s instead of GrabSuccess.", grabreplyname(gr));
+ return;
+ } else
+ CHECK;
+
+ /* Simulate a xname event on the second window. */
+ (void) warppointer(Dsp, w2, 1,1);
+ presskey(Dsp, w2, kc);
+
+ /* Verify that a xname event was generated on the grabbing window. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that the subwindow component was set to None. */
+ if(ev.xkey.subwindow != None) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabKeyboard(Dsp, CurrentTime);
+ keyrel(Dsp, kc);
+
+ CHECKPASS(5);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M time
+>>#NOTEs is set to
+>>#NOTEs the time in milliseconds at which the event was generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event window is on the same screen as the root window,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates of
+>>#NOTEs the final pointer position relative to the event window's origin.
+>>ASSERTION Good D 1
+If multiple screens are supported:
+When a xname event is delivered
+and the event and root windows are not on the same screen,
+then
+.M x
+and
+.M y
+are set to
+zero.
+>>STRATEGY
+If multiple screens are supported:
+ If extended testing is required:
+ Create a window on the default screen.
+ Select xname events on the window.
+ Create a window on the alternative screen.
+ Grab the keyboard for the first window.
+ Simulate a xname event on the alternate window.
+ Verify that a xname event was generated on the grabbing window.
+ Verify that the x and y components were set to zero.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+int gr;
+int kc;
+
+ /* If multiple screens are supported: */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ } else
+ CHECK;
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+ /* Create a window on the default screen. */
+ w = defwin(Dsp);
+
+ /* Select xname events on the window. */
+ (void) warppointer(Dsp, w, 1,1);
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ /* Create a window on the alternative screen. */
+ w2 = defdraw(Dsp, VI_ALT_WIN);
+
+ /* Grab the keyboard for the first window. */
+ if( (gr=XGrabKeyboard(Dsp, w, False, GrabModeAsync, GrabModeAsync, CurrentTime)) != GrabSuccess) {
+ delete("XGrabKeyboard() returned %s instead of GrabSuccess.", grabreplyname(gr));
+ return;
+ } else
+ CHECK;
+
+ kc=keycode();
+ /* Simulate a xname event on the alternate window. */
+ (void) warppointer(Dsp, w2, 1,1);
+ presskey(Dsp, w2, kc);
+
+ /* Verify that a xname event was generated on the grabbing window. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that the x and y components were set to zero. */
+ if(ev.xkey.x != 0 || ev.xkey.y != 0) {
+ report("The x (value %d) and y (value %d) components of the %s event were not set to zero.", ev.xkey.x, ev.xkey.y, eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ keyrel(Dsp, kc);
+ XUngrabKeyboard(Dsp, CurrentTime);
+
+ CHECKPASS(4);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x_root
+>>#NOTEs and
+>>#NOTEs .M y_root
+>>#NOTEs are set to coordinates of the pointer
+>>#NOTEs when the event was generated
+>>#NOTEs relative to the root window's origin.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M state
+>>#NOTEs is set to
+>>#NOTEs indicate the logical state
+>>#NOTEs of the pointer buttons,
+>>#NOTEs which is the bitwise OR of one or more of
+>>#NOTEs the button or modifier key masks
+>>#NOTEs .S Button1Mask ,
+>>#NOTEs .S Button2Mask ,
+>>#NOTEs .S Button3Mask ,
+>>#NOTEs .S Button4Mask ,
+>>#NOTEs .S Button5Mask ,
+>>#NOTEs .S ShiftMask ,
+>>#NOTEs .S LockMask ,
+>>#NOTEs .S ControlMask ,
+>>#NOTEs .S Mod1Mask ,
+>>#NOTEs .S Mod2Mask ,
+>>#NOTEs .S Mod3Mask ,
+>>#NOTEs .S Mod4Mask ,
+>>#NOTEs and
+>>#NOTEs .S Mod5Mask .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M keycode
+>>#NOTEs is set to
+>>#NOTEs a number that represents the physical key on the keyboard.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event and root windows are on the same screen,
+>>#NOTEs then
+>>#NOTEs .M same_screen
+>>#NOTEs is set to
+>>#NOTEs .S True .
+>>ASSERTION Good D 1
+If multiple screens are supported:
+When a xname event is delivered
+and the event and root windows are not on the same screen,
+then
+.M same_screen
+is set to
+.S False .
+>>STRATEGY
+If multiple screens are supported:
+ If extended testing is required:
+ Create a window on the default screen.
+ Select xname events on the window.
+ Create a window on the alternative screen.
+ Grab the keyboard for the first window.
+ Simulate a xname event on the alternate window.
+ Verify that a xname event was generated on the grabbing window.
+ Verify that the same_screen component was False.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+int gr;
+int kc;
+
+
+ /* If multiple screens are supported: */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ } else
+ CHECK;
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+
+ /* Create a window on the default screen. */
+ w = defwin(Dsp);
+
+ /* Select xname events on the window. */
+ (void) warppointer(Dsp, w, 1,1);
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ /* Create a window on the alternative screen. */
+ w2 = defdraw(Dsp, VI_ALT_WIN);
+
+ /* Grab the keyboard for the first window. */
+ if( (gr=XGrabKeyboard(Dsp, w, False, GrabModeAsync, GrabModeAsync, CurrentTime)) != GrabSuccess) {
+ delete("XGrabKeyboard() returned %s instead of GrabSuccess.", grabreplyname(gr));
+ return;
+ } else
+ CHECK;
+
+ kc=keycode();
+ /* Simulate a xname event on the alternate window. */
+ (void) warppointer(Dsp, w2, 1,1);
+ presskey(Dsp, w2, kc);
+
+ /* Verify that a xname event was generated on the grabbing window. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that the same_screen component was False. */
+ if(ev.xkey.same_screen != False) {
+ report("The same_screen component of the %s event was not set to False.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ keyrel(Dsp, kc);
+ XUngrabKeyboard(Dsp, CurrentTime);
+
+ CHECKPASS(4);
+
diff --git a/xc/test/xsuite/xtest/tset/CH08/kyrls/kyrls.m b/xc/test/xsuite/xtest/tset/CH08/kyrls/kyrls.m
new file mode 100644
index 000000000..106857b1e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/kyrls/kyrls.m
@@ -0,0 +1,952 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE KeyRelease CH08
+>>EXTERN
+#define EVENT KeyRelease
+#define EVENTMASK KeyReleaseMask
+
+static void
+presskey(Dpy, w, kc)
+Display *Dpy;
+Window w;
+int kc;
+{
+ /*
+ * Note that we do not call XSetInputFocus() since 2 tests require
+ * the event window to be an ancestor of the source window.
+ */
+ keypress(Dpy, kc);
+ XSync(Dsp, True);
+ keyrel(Dsp, kc);
+}
+
+static int keyc = 0;
+
+static unsigned int
+keycode()
+{
+int tmp;
+
+ if(keyc == 0) {
+ XDisplayKeycodes(Dsp, &keyc, &tmp);
+ if (keyc < 8)
+ keyc = 8;
+ }
+ return(keyc);
+}
+>>SET startup focusstartup
+>>SET cleanup focuscleanup
+>>ASSERTION Good B 1
+>>#NOTE The documentation not explicitly state the following anywhere,
+>>#NOTE it merely states something relative to logical changes in
+>>#NOTE key state. In addition, I don't expect for very many of these
+>>#NOTE assertions to be testable.
+When any key is released,
+then a xname event is generated.
+>>STRATEGY
+If extended testing is enabled:
+ Create a window.
+ Select for xname events.
+ Simulate a xname event on the window.
+ Verify that a xname event was delivered.
+ Verify that event member fields are correctly set.
+>>CODE
+Display *display = Dsp;
+Window w;
+XEvent event_return;
+XKeyEvent good;
+PointerPlace *ptr;
+int kc;
+
+
+
+ /* If extended testing is enabled: */
+ if(noext(0))
+ return;
+
+ /* Create a window. */
+ w = defwin(display);
+
+ /* Select for xname events. */
+ XSelectInput(display, w, EVENTMASK);
+
+ /* Simulate a xname event on the window. */
+ ptr = warppointer(display, w, 0,0);
+ kc = keycode();
+ presskey(display, w, kc);
+
+ /* Verify that a xname event was delivered. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ } else {
+
+ CHECK;
+
+ good = event_return.xkey;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.root = DRW(display);
+ good.subwindow = None;
+ good.x = 0;
+ good.y = 0;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = 0;
+ good.keycode = kc;
+ good.same_screen = True;
+
+ /* Verify that event member fields are correctly set. */
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+When a xname event is generated,
+then
+all clients having set
+.S KeyReleaseMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+If extended testing is required:
+ Create a second client.
+ Create a third client.
+ Create a window.
+ Select for xname events on all clients.
+ Simulate a xname event on the window.
+ Verify that the event was delivered to all clients.
+ Verify that event member fields are correctly set.
+Otherwise :
+ Create a window.
+ Select for xname events.
+ Verify no error was generated.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window w;
+XEvent event_return;
+XKeyReleasedEvent good;
+PointerPlace *ptr;
+int kc;
+
+ /* If extended testing is required: */
+ if(config.extensions) {
+
+ if(noext(0))
+ return;
+
+ /* Create a second client. */
+ client2 = opendisplay();
+ /* Create a third client. */
+ client3 = opendisplay();
+
+ /* Create a window. */
+ w = defwin(display);
+
+ /* Select for xname events on all clients. */
+ XSelectInput(display, w, EVENTMASK);
+ XSelectInput(client2, w, EVENTMASK);
+ XSelectInput(client3, w, EVENTMASK);
+
+ /* Simulate a xname event on the window. */
+ ptr = warppointer(display, w, 0,0);
+ kc = keycode();
+
+ XSync(client2, True);
+ XSync(client3, True);
+
+ presskey(display, w, kc);
+
+ XSync(client2, False);
+ XSync(client3, False);
+
+ good = event_return.xkey;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.root = DRW(display);
+ good.subwindow = None;
+ good.x = 0;
+ good.y = 0;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = 0;
+ good.keycode = kc;
+ good.same_screen = True;
+
+ /* Verify that the event was delivered to all clients. */
+ /* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+/* client 2 */
+ if (!XCheckTypedWindowEvent(client2, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ good.display = client2;
+
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+/* client 3 */
+
+ if (!XCheckTypedWindowEvent(client3, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ good.display = client3;
+
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(6);
+
+ } else {
+
+ /* Otherwise : */
+ /* Create a window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ /* Select for xname events. */
+ XSelectInput(display, w, EVENTMASK);
+ XSync(display, True);
+ /* Verify no error was generated. */
+ if (geterr() != Success) {
+ delete("Error setting up for test.");
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKUNTESTED(1);
+ }
+
+>>ASSERTION Good B 1
+>>#NOTE True for most events (except MappingNotify and selection stuff).
+When a xname event is generated,
+then
+clients not having set
+.S KeyReleaseMask
+event mask bits on the event window are not delivered
+a xname event.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Create a second client.
+ Select for various events other that xname for the first client on the window.
+ Select for xname events for the second client on the window.
+ Simulate a xname event on the window.
+ Verify that a xname event was generated for the second client.
+ Verify no events were generated for the first client.
+>>CODE
+Display *client2;
+XEvent ev;
+Window w;
+int count;
+int kc;
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+
+ /* Create a window. */
+ w = defwin(Dsp);
+
+ /* Create a second client. */
+ client2 = opendisplay();
+
+ /* Select for various events other that xname for the first client on the window. */
+ kc = keycode();
+ XSelectInput(Dsp, w, KeyPressMask|ButtonPressMask|ButtonReleaseMask);
+
+ /* Select for xname events for the second client on the window. */
+ XSelectInput(client2, w, EVENTMASK);
+
+ /* Simulate a xname event on the window. */
+ (void) warppointer(Dsp, w, 0, 0);
+ XSync(Dsp, True);
+ XSync(client2, True);
+
+ presskey(Dsp, w, kc);
+
+ XSync(client2, False);
+
+ /* Verify that a xname event was generated for the second client. */
+ if(XCheckWindowEvent(client2, w, EVENTMASK, &ev) == False) {
+ report("No %s event was generated.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ /* Verify no events were generated for the first client. */
+ count = XPending(Dsp);
+ if (count != 0) {
+ report("Got %d unexpected events.", count);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+When a xname event is generated
+and no client has selected
+.S KeyReleaseMask
+on the source window,
+then the event propagates,
+with propagation stopping at the root window of the screen or
+at the first window with
+.S KeyReleaseMask
+in its do-not-propagate mask,
+from the source window to
+the first ancestor window for which
+some client has selected
+for xname events.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Create a child of that window.
+ Create a grandchild of the window.
+ Select xname events on the root window of the screen.
+ Simulate a xname event on the grandchild.
+ Verify that a xname event was generated on the root.
+ Select xname events on the grandparent window.
+ Set the do_not_propagate mask on the child to xname events.
+ Simulate a xname event on the grandchild.
+ Verify no xname event was generated on the grandchild.
+ Verify no xname event was generated on the child.
+ Verify no xname event was generated on the parent.
+ Select xname events on the child window.
+ Set the do_not_propagate mask of the grandparent to xname events.
+ Set the do_not_propagate mask of the child to NoEventMask.
+ Simulate a xname event on the grandchild.
+ Verify that no xname event was generated on the grandchild.
+ Verify that no xname event was generated on the parent.
+ Verify that a xname event was generated on the child.
+>>CODE
+XEvent ev;
+Window w;
+Window w1;
+Window w2;
+XSetWindowAttributes atts;
+int kc;
+
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+
+ /* Create a window. */
+ w = defwin(Dsp);
+ /* Create a child of that window. */
+ w1 = crechild(Dsp, w, (struct area *) NULL);
+ /* Create a grandchild of the window. */
+ w2 = crechild(Dsp, w1, (struct area *) NULL);
+
+ /* Select xname events on the root window of the screen. */
+ XSelectInput(Dsp, DRW(Dsp), EVENTMASK);
+
+ /* Simulate a xname event on the grandchild. */
+ (void) warppointer(Dsp, w2, 1,1);
+ kc = keycode();
+ presskey(Dsp, w2, kc);
+
+ /* Verify that a xname event was generated on the root. */
+ if (XCheckWindowEvent(Dsp, DRW(Dsp), EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ XSelectInput(Dsp, DRW(Dsp), NoEventMask);
+ /* Select xname events on the grandparent window. */
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ /* Set the do_not_propagate mask on the child to xname events. */
+ atts.do_not_propagate_mask = EVENTMASK;
+ XChangeWindowAttributes(Dsp, w1, CWDontPropagate, &atts);
+
+ /* Simulate a xname event on the grandchild. */
+ presskey(Dsp, w2, kc);
+
+ /* Verify no xname event was generated on the grandchild. */
+ if (XCheckWindowEvent(Dsp, w2, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ /* Verify no xname event was generated on the child. */
+ if (XCheckWindowEvent(Dsp, w1, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ /* Verify no xname event was generated on the parent. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+
+ /* Select xname events on the child window. */
+ XSelectInput(Dsp, w1, EVENTMASK);
+ /* Set the do_not_propagate mask of the grandparent to xname events. */
+ XChangeWindowAttributes(Dsp, w, CWDontPropagate, &atts);
+
+ /* Set the do_not_propagate mask of the child to NoEventMask. */
+ atts.do_not_propagate_mask = NoEventMask;
+ XChangeWindowAttributes(Dsp, w1, CWDontPropagate, &atts);
+
+ /* Simulate a xname event on the grandchild. */
+ presskey(Dsp, w2, kc);
+
+ /* Verify that no xname event was generated on the grandchild. */
+ if (XCheckWindowEvent(Dsp, w2, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ /* Verify that no xname event was generated on the parent. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) != False) {
+ report("Unexpected event (%s) received.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+
+ /* Verify that a xname event was generated on the child. */
+ if (XCheckWindowEvent(Dsp, w1, EVENTMASK, &ev) == False) {
+ report("KeyRelease event was not delivered to selecting child window.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(7);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M root
+>>#NOTEs is set to the source window's root window.
+>>ASSERTION Good B 1
+>>#
+>>#COMMENT
+>># This assertion contains a tautology; a child is an inferior.
+>># Cal 12/2/92.
+>>#
+When a xname event is delivered
+and the source window is an inferior of the event window
+and the source window is a child of the event window,
+then
+.M subwindow
+is set to
+the source window.
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Create a child of the window
+ Select xname events on the parent.
+ Simulate an xname event on the child.
+ Verify that a xname event was generated on the parent.
+ Verify that the subwindow component was set to the child.
+>>CODE
+XEvent ev;
+Window w;
+Window w1;
+int kc;
+
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+
+ /* Create a window. */
+ w = defwin(Dsp);
+ /* Create a child of the window */
+ w1 = crechild(Dsp, w, (struct area *) NULL);
+ /* Select xname events on the parent. */
+ XSelectInput(Dsp, w, EVENTMASK);
+ (void) warppointer(Dsp, w1, 1,1);
+
+ /* Simulate a xname event on the child. */
+ kc=keycode();
+ presskey(Dsp, w1, kc);
+
+ /* Verify that a xname event was generated on the parent. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that the subwindow component was set to the child. */
+ if(ev.xkey.subwindow != w1) {
+ report("The subwindow component of the %s name was not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+When a xname event is delivered
+and the source window is an inferior of the event window
+and the source window is not a child of the event window,
+then
+.M subwindow
+is set to
+the child of the event window that is
+an ancestor of the source window.
+>>STRATEGY
+If extended testing is required :
+ Create a window.
+ Create a child.
+ Create a grandchild.
+ Create a great-grandchild.
+ Select xname events on the great-grandparent.
+ Simulate a xname event on the great-grandchild.
+ Verify that a xname event was generated on the great-grandparent.
+ Verify that subwindow component of the event was the child.
+>>CODE
+Window w;
+Window w1;
+Window w2;
+Window w3;
+XEvent ev;
+struct area area;
+int kc;
+
+ /* If extended testing is required : */
+ if (noext(0))
+ return;
+
+ /* Create a window. */
+ w = defwin(Dsp);
+ setarea(&area, 10, 10, 30, 30);
+ /* Create a child. */
+ w1 = crechild(Dsp, w, &area);
+ /* Create a grandchild. */
+ w2 = crechild(Dsp, w1, &area);
+ /* Create a great-grandchild. */
+ w3 = crechild(Dsp, w2, &area);
+ (void) warppointer(Dsp, w3, 1,1);
+
+ /* Select xname events on the great-grandparent. */
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ /* Simulate a xname event on the great-grandchild. */
+ kc = keycode();
+ presskey(Dsp, w3, kc);
+
+ /* Verify that a xname event was generated on the great-grandparent. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that subwindow component of the event was the child. */
+ if(ev.xkey.subwindow != w1) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good B 1
+When a xname event is delivered
+and the source window is not an inferior of the event window,
+then
+.M subwindow
+is set to
+.S None .
+>>STRATEGY
+If extended testing is required:
+ Create a window.
+ Select xname events on the window.
+ Simulate a xname event on the window.
+ Verify that a xname event was generated on the window.
+ Verify that the subwindow component was set to None.
+ Create a second window.
+ Grab the keyboard for the first window with owner_events set to False.
+ Simulate a xname event on the second window.
+ Verify that a xname event was generated on the grabbing window.
+ Verify that the subwindow component was set to None.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+int gr;
+int kc;
+
+ /* If extended testing is required: */
+ if (noext(0))
+ return;
+
+ /* Create a window. */
+ w = defwin(Dsp);
+ (void) warppointer(Dsp, w, 1,1);
+
+ /* Select xname events on the window. */
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ /* Simulate a xname event on the window. */
+ kc=keycode();
+ presskey(Dsp, w, kc);
+
+ /* Verify that a xname event was generated on the window. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that the subwindow component was set to None. */
+ if(ev.xkey.subwindow != None) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /* Create a second window. */
+ w2 = defwin(Dsp);
+
+ /* Grab the keyboard for the first window with owner_events set to False. */
+ if( (gr=XGrabKeyboard(Dsp, w, False, GrabModeAsync, GrabModeAsync, CurrentTime)) != GrabSuccess) {
+ delete("XGrabKeyboard() returned %s instead of GrabSuccess.", grabreplyname(gr));
+ return;
+ } else
+ CHECK;
+
+ /* Simulate a xname event on the second window. */
+ (void) warppointer(Dsp, w2, 1,1);
+ presskey(Dsp, w2, kc);
+
+ /* Verify that a xname event was generated on the grabbing window. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that the subwindow component was set to None. */
+ if(ev.xkey.subwindow != None) {
+ report("The subwindow component of the %s event was not set correctly.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabKeyboard(Dsp, CurrentTime);
+
+ CHECKPASS(5);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M time
+>>#NOTEs is set to
+>>#NOTEs the time in milliseconds at which the event was generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event window is on the same screen as the root window,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates of
+>>#NOTEs the final pointer position relative to the event window's origin.
+>>ASSERTION Good D 1
+If multiple screens are supported:
+When a xname event is delivered
+and the event and root windows are not on the same screen,
+then
+.M x
+and
+.M y
+are set to
+zero.
+>>STRATEGY
+If multiple screens are supported:
+ If extended testing is required:
+ Create a window on the default screen.
+ Select xname events on the window.
+ Create a window on the alternative screen.
+ Grab the keyboard for the first window.
+ Simulate a xname event on the alternate window.
+ Verify that a xname event was generated on the grabbing window.
+ Verify that the x and y components were set to zero.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+int gr;
+int kc;
+
+
+ /* If multiple screens are supported: */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ } else
+ CHECK;
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+
+ /* Create a window on the default screen. */
+ w = defwin(Dsp);
+
+ /* Select xname events on the window. */
+ (void) warppointer(Dsp, w, 1,1);
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ /* Create a window on the alternative screen. */
+ w2 = defdraw(Dsp, VI_ALT_WIN);
+
+ /* Grab the keyboard for the first window. */
+ if( (gr=XGrabKeyboard(Dsp, w, False, GrabModeAsync, GrabModeAsync, CurrentTime)) != GrabSuccess) {
+ delete("XGrabKeyboard() returned %s instead of GrabSuccess.", grabreplyname(gr));
+ return;
+ } else
+ CHECK;
+
+ kc=keycode();
+ /* Simulate a xname event on the alternate window. */
+ (void) warppointer(Dsp, w2, 1,1);
+ presskey(Dsp, w2, kc);
+
+ /* Verify that a xname event was generated on the grabbing window. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that the x and y components were set to zero. */
+ if(ev.xkey.x != 0 || ev.xkey.y != 0) {
+ report("The x (value %d) and y (value %d) components of the %s event were not set to zero.", ev.xkey.x, ev.xkey.y, eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabKeyboard(Dsp, CurrentTime);
+
+ CHECKPASS(4);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x_root
+>>#NOTEs and
+>>#NOTEs .M y_root
+>>#NOTEs are set to coordinates of the pointer
+>>#NOTEs when the event was generated
+>>#NOTEs relative to the root window's origin.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M state
+>>#NOTEs is set to
+>>#NOTEs indicate the logical state
+>>#NOTEs of the pointer buttons,
+>>#NOTEs which is the bitwise OR of one or more of
+>>#NOTEs the button or modifier key masks
+>>#NOTEs .S Button1Mask ,
+>>#NOTEs .S Button2Mask ,
+>>#NOTEs .S Button3Mask ,
+>>#NOTEs .S Button4Mask ,
+>>#NOTEs .S Button5Mask ,
+>>#NOTEs .S ShiftMask ,
+>>#NOTEs .S LockMask ,
+>>#NOTEs .S ControlMask ,
+>>#NOTEs .S Mod1Mask ,
+>>#NOTEs .S Mod2Mask ,
+>>#NOTEs .S Mod3Mask ,
+>>#NOTEs .S Mod4Mask ,
+>>#NOTEs and
+>>#NOTEs .S Mod5Mask .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M keycode
+>>#NOTEs is set to
+>>#NOTEs a number that represents the physical key on the keyboard.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event and root windows are on the same screen,
+>>#NOTEs then
+>>#NOTEs .M same_screen
+>>#NOTEs is set to
+>>#NOTEs .S True .
+>>ASSERTION Good D 1
+If multiple screens are supported:
+When a xname event is delivered
+and the event and root windows are not on the same screen,
+then
+.M same_screen
+is set to
+.S False .
+>>STRATEGY
+If multiple screens are supported:
+ If extended testing is required:
+ Create a window on the default screen.
+ Select xname events on the window.
+ Create a window on the alternative screen.
+ Grab the keyboard for the first window.
+ Simulate a xname event on the alternate window.
+ Verify that a xname event was generated on the grabbing window.
+ Verify that the same_screen component was False.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+int gr;
+int kc;
+
+ /* If multiple screens are supported: */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ } else
+ CHECK;
+
+ /* If extended testing is required: */
+ if(noext(0))
+ return;
+
+ /* Create a window on the default screen. */
+ w = defwin(Dsp);
+
+ (void) warppointer(Dsp, w, 1,1);
+ /* Select xname events on the window. */
+ XSelectInput(Dsp, w, EVENTMASK);
+
+ /* Create a window on the alternative screen. */
+ w2 = defdraw(Dsp, VI_ALT_WIN);
+
+ /* Grab the keyboard for the first window. */
+ if( (gr=XGrabKeyboard(Dsp, w, False, GrabModeAsync, GrabModeAsync, CurrentTime)) != GrabSuccess) {
+ delete("XGrabKeyboard() returned %s instead of GrabSuccess.", grabreplyname(gr));
+ return;
+ } else
+ CHECK;
+
+ kc=keycode();
+ /* Simulate a xname event on the alternate window. */
+ (void) warppointer(Dsp, w2, 1,1);
+ presskey(Dsp, w2, kc);
+
+ /* Verify that a xname event was generated on the grabbing window. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+ /* Verify that the same_screen component was False. */
+ if(ev.xkey.same_screen != False) {
+ report("The same_screen component of the %s event was not set to False.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabKeyboard(Dsp, CurrentTime);
+
+ CHECKPASS(4);
diff --git a/xc/test/xsuite/xtest/tset/CH08/linktbl.c b/xc/test/xsuite/xtest/tset/CH08/linktbl.c
new file mode 100644
index 000000000..66f340ecb
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/linktbl.c
@@ -0,0 +1,143 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+
+extern struct linkinfo EXChckIfEvnt;
+extern struct linkinfo EXChckMskEvnt;
+extern struct linkinfo EXChckTypdEvn;
+extern struct linkinfo EXChckTypdWdw;
+extern struct linkinfo EXChckWdwEvnt;
+extern struct linkinfo EXDsplyMtnBff;
+extern struct linkinfo EXDsplyNm;
+extern struct linkinfo EXEvntsQd;
+extern struct linkinfo EXFlsh;
+extern struct linkinfo EXGtErrrDtbsT;
+extern struct linkinfo EXGtErrrTxt;
+extern struct linkinfo EXGtMtnEvnts;
+extern struct linkinfo EXIfEvnt;
+extern struct linkinfo EXMskEvnt;
+extern struct linkinfo EXNxtEvnt;
+extern struct linkinfo EXPkEvnt;
+extern struct linkinfo EXPkIfEvnt;
+extern struct linkinfo EXPndng;
+extern struct linkinfo EXPtBckEvnt;
+extern struct linkinfo EXSlctInpt;
+extern struct linkinfo EXSndEvnt;
+extern struct linkinfo EXStAftrFnctn;
+extern struct linkinfo EXStErrrHndlr;
+extern struct linkinfo EXStIOErrrHnd;
+extern struct linkinfo EXSync;
+extern struct linkinfo EXSynchrnz;
+extern struct linkinfo EXWdwEvnt;
+extern struct linkinfo EBttnPrss;
+extern struct linkinfo EBttnRls;
+extern struct linkinfo ECrcltNtfy;
+extern struct linkinfo ECrcltRqst;
+extern struct linkinfo EClntMssg;
+extern struct linkinfo EClrmpNtfy;
+extern struct linkinfo ECnfgrNtfy;
+extern struct linkinfo ECnfgrRqst;
+extern struct linkinfo ECrtNtfy;
+extern struct linkinfo EDstryNtfy;
+extern struct linkinfo EEntrNtfy;
+extern struct linkinfo EExps;
+extern struct linkinfo EFcsIn;
+extern struct linkinfo EFcsOt;
+extern struct linkinfo EGrphcsExps;
+extern struct linkinfo EGrvtyNtfy;
+extern struct linkinfo EKyPrss;
+extern struct linkinfo EKyRls;
+extern struct linkinfo EKympNtfy;
+extern struct linkinfo ELvNtfy;
+extern struct linkinfo EMpNtfy;
+extern struct linkinfo EMpRqst;
+extern struct linkinfo EMppngNtfy;
+extern struct linkinfo EMtnNtfy;
+extern struct linkinfo ENExps;
+extern struct linkinfo EPrprtyNtfy;
+extern struct linkinfo ERprntNtfy;
+extern struct linkinfo ERszRqst;
+extern struct linkinfo ESlctnClr;
+extern struct linkinfo ESlctnNtfy;
+extern struct linkinfo ESlctnRqst;
+extern struct linkinfo EUnmpNtfy;
+extern struct linkinfo EVsbltyNtfy;
+
+struct linkinfo *linktbl[] = {
+ &EXChckIfEvnt,
+ &EXChckMskEvnt,
+ &EXChckTypdEvn,
+ &EXChckTypdWdw,
+ &EXChckWdwEvnt,
+ &EXDsplyMtnBff,
+ &EXDsplyNm,
+ &EXEvntsQd,
+ &EXFlsh,
+ &EXGtErrrDtbsT,
+ &EXGtErrrTxt,
+ &EXGtMtnEvnts,
+ &EXIfEvnt,
+ &EXMskEvnt,
+ &EXNxtEvnt,
+ &EXPkEvnt,
+ &EXPkIfEvnt,
+ &EXPndng,
+ &EXPtBckEvnt,
+ &EXSlctInpt,
+ &EXSndEvnt,
+ &EXStAftrFnctn,
+ &EXStErrrHndlr,
+ &EXStIOErrrHnd,
+ &EXSync,
+ &EXSynchrnz,
+ &EXWdwEvnt,
+ &EBttnPrss,
+ &EBttnRls,
+ &ECrcltNtfy,
+ &ECrcltRqst,
+ &EClntMssg,
+ &EClrmpNtfy,
+ &ECnfgrNtfy,
+ &ECnfgrRqst,
+ &ECrtNtfy,
+ &EDstryNtfy,
+ &EEntrNtfy,
+ &EExps,
+ &EFcsIn,
+ &EFcsOt,
+ &EGrphcsExps,
+ &EGrvtyNtfy,
+ &EKyPrss,
+ &EKyRls,
+ &EKympNtfy,
+ &ELvNtfy,
+ &EMpNtfy,
+ &EMpRqst,
+ &EMppngNtfy,
+ &EMtnNtfy,
+ &ENExps,
+ &EPrprtyNtfy,
+ &ERprntNtfy,
+ &ERszRqst,
+ &ESlctnClr,
+ &ESlctnNtfy,
+ &ESlctnRqst,
+ &EUnmpNtfy,
+ &EVsbltyNtfy,
+ 0,
+};
diff --git a/xc/test/xsuite/xtest/tset/CH08/lvntfy/lvntfy.m b/xc/test/xsuite/xtest/tset/CH08/lvntfy/lvntfy.m
new file mode 100644
index 000000000..86474fa4b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/lvntfy/lvntfy.m
@@ -0,0 +1,1694 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE LeaveNotify CH08
+>>EXTERN
+#define EVENT LeaveNotify
+#define OTHEREVENT EnterNotify
+#define MASK LeaveWindowMask
+#define OTHERMASK EnterWindowMask
+#define BOTHMASKS (MASK|OTHERMASK)
+#define EVENTMASK MASK
+
+static Display *_display_;
+static int _detail_;
+static long _event_mask_;
+static XEvent good;
+
+static int
+selectinput(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+ winh_free(previous);
+#endif
+ return(winh_selectinput(_display_, current, _event_mask_));
+}
+
+static int
+plant(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+ winh_free(previous);
+#endif
+ good.xany.window = current->window;
+ return(winh_plant(current, &good, NoEventMask, WINH_NOMASK));
+}
+
+static Bool increasing; /* event sequence increases as we climb */
+
+static int
+checksequence(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+ Winhe *d;
+ int current_sequence;
+ int status;
+ static int last_sequence;
+
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+#endif
+ /* look for desired event type */
+ for (d = current->delivered; d != (Winhe *) NULL; d = d->next) {
+ if (d->event->type == good.type) {
+ current_sequence = d->sequence;
+ break;
+ }
+ }
+ if (d == (Winhe *) NULL) {
+ report("%s event not delivered", eventname(good.type));
+ delete("Missing event");
+ return(-1);
+ }
+ if (previous == (Winh *) NULL)
+ status = 0; /* first call, no previous sequence value */
+ else {
+ /* assume sequence numbers are not the same */
+ status = (current_sequence < last_sequence);
+ if (increasing)
+ status = (status ? 0 : 1);
+ if (status)
+ report("Ordering problem between 0x%x (%d) and 0x%x (%d)",
+ current->window, current_sequence,
+ previous->window, last_sequence);
+ }
+ last_sequence = current_sequence;
+ return(status);
+}
+
+static int
+checkdetail(start, stop, current, previous)
+Winh *start, *stop, *current, *previous;
+{
+ Winhe *d;
+
+#ifdef lint
+ winh_free(start);
+ winh_free(stop);
+ winh_free(previous);
+#endif
+ /* look for desired event type */
+ for (d = current->delivered; d != (Winhe *) NULL; d = d->next)
+ if (d->event->type == good.type)
+ break;
+ if (d == (Winhe *) NULL) {
+ report("%s event not delivered to window 0x%x",
+ eventname(good.type), current->window);
+ delete("Missing event");
+ return(-1);
+ }
+ /* check detail */
+ if (_detail_ != d->event->xcrossing.detail) {
+ report("Expected detail of %d, got %d on window 0x%x",
+ _detail_, d->event->xcrossing.detail, current->window);
+ return(1);
+ }
+ return(0);
+}
+>>ASSERTION Good A
+>>#NOTE
+>>#NOTE Hierarchy events are:
+>>#NOTE UnmapNotify,
+>>#NOTE MapNotify,
+>>#NOTE ConfigureNotify,
+>>#NOTE GravityNotify, and
+>>#NOTE CirculateNotify.
+>>#NOTE
+When a xname event is generated by a hierarchy change,
+then the xname event is delivered after any hierarchy event.
+>>STRATEGY
+Create window1.
+Create window2 on top of window1.
+Select for xname and UnmapNotify events on window2.
+Move pointer to window2.
+Call XUnmapWindow on window2.
+Verify that UnmapNotify event was received on window2.
+Verify that xname event was received on window1.
+Verify that pointer has remained where it was moved.
+>>CODE
+int i;
+Display *display = Dsp;
+Window w2;
+XEvent event;
+struct area area;
+PointerPlace *warp;
+
+/* Create window1. */
+ area.x = 0;
+ area.y = 0;
+ area.width = W_STDWIDTH;
+ area.height = W_STDHEIGHT;
+ (void) mkwin(display, (XVisualInfo *) NULL, &area, True);
+/* Create window2 on top of window1. */
+ w2 = mkwin(display, (XVisualInfo *) NULL, &area, True);
+/* Select for xname and UnmapNotify events on window2. */
+ XSelectInput(display, w2, MASK|StructureNotifyMask);
+/* Move pointer to window2. */
+ warp = warppointer(display, w2, 0, 0);
+ if (warp == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+ XSync(display, True);
+/* Call XUnmapWindow on window2. */
+ XUnmapWindow(display, w2);
+ XSync(display, False);
+/* Verify that UnmapNotify event was received on window2. */
+ if (XPending(display) < 1) {
+ report("Expected UnmapNotify event not delivered.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(display, &event);
+ if (event.type != UnmapNotify) {
+ report("Expected %s, got %s", eventname(UnmapNotify), eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that xname event was received on window1. */
+ if (XPending(display) < 1) {
+ report("Expected %s event not delivered.", TestName);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(display, &event);
+ if (event.type != EVENT) {
+ report("Expected %s, got %s", eventname(EVENT), eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+ if ((i = XPending(display)) > 0) {
+ report("Expected 2 events, got %d", i+2);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ /* Additional possible testing: */
+ /* Select for no events on window1. */
+ /* Select for MapNotify events on window2. */
+ /* Select for xname events on window2. */
+ /* Select for xname events on window2 with client2. */
+ /* Call XMapWindow on window2. */
+ /* Verify that MapNotify event was received on window2. */
+ /* Verify that xname event was received on window2. */
+ /* Verify that xname event was received on window2 by client2. */
+ /* Verify that pointer has remained where it was moved. */
+ /* Select for xname events on window1. */
+ /* Select for xname events on window1 with client2. */
+ /* Select for ConfigureNotify events on window2. */
+ /* Call XLowerWindow on window2. */
+ /* Verify that ConfigureNotify event was received on window2. */
+ /* Verify that xname event was received on window1. */
+ /* Verify that xname event was received on window1 by client2. */
+ /* Verify that pointer has remained where it was moved. */
+
+ /* Others: GravityNotify, CirculateNotify. */
+
+/* Verify that pointer has remained where it was moved. */
+ if (pointermoved(display, warp)) {
+ delete("Pointer moved unexpectedly");
+ return;
+ }
+ else
+ CHECK;
+ CHECKPASS(7);
+>>ASSERTION Good A
+When a xname event is generated,
+then
+all clients having set
+.S LeaveWindowMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Create window.
+Move pointer inside of window.
+Select for xname events on window.
+Select for xname events on window with client2.
+Select for no events on window with client3.
+Warp pointer outside window.
+Verify that a single xname event was received.
+Verify that a single xname event was received by client2.
+Verify that no events were received by client2.
+>>CODE
+int i;
+Display *display = Dsp;
+Display *client2, *client3;
+Window w;
+XEvent event;
+XLeaveWindowEvent good;
+struct area area;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window. */
+ area.x = 10;
+ area.y = 10;
+ area.width = W_STDWIDTH;
+ area.height = W_STDHEIGHT;
+ w = mkwin(display, (XVisualInfo *) NULL, &area, True);
+/* Move pointer inside of window. */
+ if (warppointer(display, w, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Select for xname events on window. */
+ XSelectInput(display, w, MASK);
+/* Select for xname events on window with client2. */
+ XSelectInput(client2, w, MASK);
+/* Select for no events on window with client3. */
+ XSelectInput(client3, w, NoEventMask);
+/* Warp pointer outside window. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XWarpPointer(display, None, DRW(display), 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a single xname event was received. */
+ if (XPending(display) < 1) {
+ report("Expected %s event not delivered.", TestName);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(display, &event);
+ good = event.xcrossing;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.root = DRW(display);
+ good.subwindow = None;
+ rootcoordset(display, DRW(display), w, 0, 0, &(good.x), &(good.y));
+ good.x_root = 0;
+ good.y_root = 0;
+ good.mode = NotifyNormal;
+ /* under virtual root windows detail gets set to NotifyNonlinear */
+ good.detail = NotifyAncestor;
+ good.same_screen = True;
+ good.focus = True; /* assumes focus follows pointer */
+ good.state = 0;
+ if (checkevent((XEvent*)&good, &event)) {
+ FAIL;
+ }
+ else
+ CHECK;
+ if ((i = XPending(display)) > 0) {
+ report("Expected 1 event, got %d", i+1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a single xname event was received by client2. */
+ if (XPending(client2) < 1) {
+ report("Expected %s event not delivered to client2.", TestName);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ XNextEvent(client2, &event);
+ good = event.xcrossing;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = client2;
+ good.window = w;
+ good.root = DRW(client2);
+ good.subwindow = None;
+ rootcoordset(client2, DRW(client2), w, 0, 0, &(good.x), &(good.y));
+ good.x_root = 0;
+ good.y_root = 0;
+ good.mode = NotifyNormal;
+ /* under virtual root windows detail gets set to NotifyNonlinear */
+ good.detail = NotifyAncestor;
+ good.same_screen = True;
+ good.focus = True; /* assumes focus follows pointer */
+ good.state = 0;
+ if (checkevent((XEvent*)&good, &event)) {
+ report("Unexpected structure member values for client2");
+ FAIL;
+ }
+ else
+ CHECK;
+ if ((i = XPending(client2)) > 0) {
+ report("Expected 1 event, got %d for client2", i+1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were received by client2. */
+ if ((i = XPending(client2)) > 0) {
+ report("For client2: Expected 0 events, got %d", i);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(10);
+>>ASSERTION def
+>>#NOTE Tested for in previous assertion.
+When a xname event is generated,
+then
+clients not having set
+.S LeaveWindowMask
+event mask bits on the event window are not delivered
+a xname event.
+>>#NOTEd >>ASSERTION
+>>#NOTEd When the window which contains the pointer changes,
+>>#NOTEd then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a client calls
+>>#NOTEm .F XGrabPointer
+>>#NOTEm or
+>>#NOTEm .F XUngrabPointer ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M root
+>>#NOTEs is set to the source window's root window.
+>>ASSERTION Good A
+When a xname event is delivered
+and the child of the event window contains the initial pointer position,
+then
+.M subwindow
+is set to
+that child.
+>>STRATEGY
+Build window hierarchy.
+Create the hierarchy.
+Move pointer to inside of child window.
+Set LeaveWindowMask event mask bits on the eventw.
+Move pointer to outside of windows.
+Verify that a xname event was received.
+Verify that subwindow is set to the source window.
+>>CODE
+int status;
+Display *display = Dsp;
+Winh *eventw;
+Winh *child;
+XEvent good;
+Winhg winhg;
+
+/* Build window hierarchy. */
+ winhg.area.x = 10;
+ winhg.area.y = 10;
+ winhg.area.width = W_STDWIDTH;
+ winhg.area.height = W_STDHEIGHT;
+ winhg.border_width = 1;
+ eventw = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (eventw == (Winh *) NULL) {
+ report("Could not create eventw");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.width /= 2;
+ winhg.area.height /= 2;
+ child = winh_adopt(display, eventw, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (child == (Winh *) NULL) {
+ report("Could not create child");
+ return;
+ }
+ else
+ CHECK;
+/* Create the hierarchy. */
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Move pointer to inside of child window. */
+ if (warppointer(display, child->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set LeaveWindowMask event mask bits on the eventw. */
+ if (winh_selectinput(display, eventw, MASK))
+ return;
+ else
+ CHECK;
+/* Move pointer to outside of windows. */
+ XSync(display, True);
+ XWarpPointer(display, None, DRW(display), 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+/* Verify that a xname event was received. */
+ good.type = EVENT;
+ good.xany.display = display;
+ good.xany.window = eventw->window;
+ if (winh_plant(eventw, &good, NoEventMask, WINH_NOMASK))
+ return;
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL))
+ return;
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that subwindow is set to the source window. */
+ /* since only one event was expected, it must be first in list */
+ if (eventw->delivered->event->xcrossing.subwindow != child->window) {
+ report("Subwindow set to 0x%x, expected 0x%x",
+ eventw->delivered->event->xcrossing.subwindow, child->window);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+
+ CHECKPASS(8);
+>>ASSERTION Good A
+When a xname event is delivered
+and the child of the event window does not contain the initial pointer position,
+then
+.M subwindow
+is set to
+.S None .
+>>STRATEGY
+Build window hierarchy.
+Create the hierarchy.
+Move pointer to inside of window.
+Set LeaveWindowMask event mask bits on the eventw.
+Move pointer to outside of windows.
+Verify that a xname event was received.
+Verify that subwindow is set to None.
+ since only one event was expected, it must be first in list
+>>CODE
+int status;
+Display *display = Dsp;
+Winh *eventw;
+XEvent good;
+Winhg winhg;
+
+/* Build window hierarchy. */
+ winhg.area.x = 10;
+ winhg.area.y = 10;
+ winhg.area.width = W_STDWIDTH;
+ winhg.area.height = W_STDHEIGHT;
+ winhg.border_width = 1;
+ eventw = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (eventw == (Winh *) NULL) {
+ report("Could not create eventw");
+ return;
+ }
+ else
+ CHECK;
+/* Create the hierarchy. */
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Move pointer to inside of window. */
+ if (warppointer(display, eventw->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set LeaveWindowMask event mask bits on the eventw. */
+ if (winh_selectinput(display, eventw, MASK))
+ return;
+ else
+ CHECK;
+/* Move pointer to outside of windows. */
+ XSync(display, True);
+ XWarpPointer(display, None, DRW(display), 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+/* Verify that a xname event was received. */
+ good.type = EVENT;
+ good.xany.display = display;
+ good.xany.window = eventw->window;
+ if (winh_plant(eventw, &good, NoEventMask, WINH_NOMASK))
+ return;
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL))
+ return;
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that subwindow is set to None. */
+ /* since only one event was expected, it must be first in list */
+ if (eventw->delivered->event->xcrossing.subwindow != None) {
+ report("Subwindow set to 0x%x, expected 0x%x",
+ eventw->delivered->event->xcrossing.subwindow, None);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+
+ CHECKPASS(7);
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M time
+>>#NOTEs is set to
+>>#NOTEs the time in milliseconds at which the event was generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event window is on the same screen as the root window,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates of
+>>#NOTEs the final pointer position relative to the event window's origin.
+>>ASSERTION Good C
+>>#COMMENT:
+>># Assertion category changed March 1992 since it was found not to require
+>># device events.
+>># - Cal.
+If multiple screens are supported:
+When a xname event is delivered
+and the event and root windows are not on the same screen,
+then
+.M x
+and
+.M y
+are set to
+zero.
+>>STRATEGY
+If multiple screens are supported:
+ Create a window on the default screen.
+ Create a window on the alternate screen.
+ Warp the pointer into the first window.
+ Grab the pointer for the first window.
+ Warp the pointer to the alternate window.
+ Verify that an xname event was generated relative to the grab window.
+ Verify that the x and y components of the event were set to zero.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+int gr;
+
+
+ /* If multiple screens are supported: */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ } else
+ CHECK;
+
+ /* Create a window on the default screen. */
+ w = defwin(Dsp);
+
+ /* Create a window on the alternate screen. */
+ w2 = defdraw(Dsp, VI_ALT_WIN);
+
+ /* Warp the pointer into the first window. */
+ (void) warppointer(Dsp, w, 2,3);
+
+ /* Grab the pointer for the first window. */
+ if((gr=XGrabPointer(Dsp, w, False, EVENTMASK, GrabModeAsync, GrabModeAsync, None, None, CurrentTime)) != GrabSuccess) {
+ delete("XGrabPointer() returned %s instead of GrabSuccess.", grabreplyname(gr));
+ return;
+ } else
+ CHECK;
+
+ /* Warp the pointer to the alternate window. */
+ XSync(Dsp, True);
+ (void) warppointer(Dsp, w2, 1,1);
+ XSync(Dsp, False);
+
+ /* Verify that an xname event was generated relative to the grab window. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that the x and y components of the event were set to zero. */
+ if(ev.xcrossing.x != 0 || ev.xcrossing.y != 0) {
+ report("The x (value %d) and y (value %d) components of the %s event were not set to zero.",
+ ev.xcrossing.x, ev.xcrossing.y, eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabPointer(Dsp, CurrentTime);
+ CHECKPASS(4);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x_root
+>>#NOTEs and
+>>#NOTEs .M y_root
+>>#NOTEs are set to coordinates of the pointer
+>>#NOTEs when the event was generated
+>>#NOTEs relative to the root window's origin.
+>>#NOTEm >>ASSERTION
+>>#NOTEm >>#NOTE
+>>#NOTEm >>#NOTE The spec does not actually state this. What the spec states is that
+>>#NOTEm >>#NOTE things behave as if the pointer moved from the confine-to window to
+>>#NOTEm >>#NOTE the grab window, the opposite of what one might expect.
+>>#NOTEm >>#NOTE
+>>#NOTEm When ARTICLE xname event is generated as the result of a grab activation,
+>>#NOTEm then xname event generation occurs as if the pointer moved from
+>>#NOTEm the grab window to the confine-to window with
+>>#NOTEm .M mode
+>>#NOTEm set to
+>>#NOTEm .S NotifyGrab .
+>>#NOTEm >>ASSERTION
+>>#NOTEm >>#NOTE
+>>#NOTEm >>#NOTE The spec does not actually state this. What the spec states is that
+>>#NOTEm >>#NOTE things behave as if the pointer moved from the grab window to
+>>#NOTEm >>#NOTE the confine-to window, the opposite of what one might expect.
+>>#NOTEm >>#NOTE
+>>#NOTEm When ARTICLE xname event is generated as the result of a grab deactivation,
+>>#NOTEm then xname event generation occurs as if the pointer moved from
+>>#NOTEm the confine-to window to the grab window with
+>>#NOTEm .M mode
+>>#NOTEm set to
+>>#NOTEm .S NotifyUngrab .
+>>ASSERTION def
+All xname events are delivered before
+any related
+.S EnterNotify
+events are delivered.
+>>#NOTE
+>>#NOTE It would not surprise me in the least if these assertions could
+>>#NOTE be simplified and/or reduced in number.
+>>#NOTE
+>>ASSERTION Good A
+When the pointer moves from window A to window B
+and A is an inferior of B,
+then a xname event is generated on window A with
+.M detail
+set to
+.S NotifyAncestor
+and then on each window
+between window A and window B, exclusive, with
+.M detail
+set to
+.S NotifyVirtual .
+>>STRATEGY
+Build window hierarchy.
+Move pointer to known location.
+Set window B.
+Set window A to child of window B.
+Select for EnterNotify and xname events on windows A and B.
+Move pointer from window A to window B.
+Verify that the expected events were delivered.
+Verify that event delivered to window A with detail set to NotifyAncestor.
+Verify events delivered, between window A and window B, exclusive,
+in proper order.
+Verify that detail is set to NotifyVirtual.
+Verify that all xname events are delivered before all
+EnterNotify events.
+>>CODE
+Display *display = Dsp;
+int depth = 4;
+Winh *A, *B;
+int status;
+
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window B. */
+ B = guardian->firstchild;
+/* Set window A to child of window B. */
+ A = B->firstchild->firstchild->firstchild;
+/* Select for EnterNotify and xname events on windows A and B. */
+ _event_mask_ = BOTHMASKS;
+ _display_ = display;
+ if (winh_climb(A, B, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(A, B->firstchild, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer from window A to window B. */
+ XWarpPointer(display, None, A->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, True);
+ XWarpPointer(display, None, B->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the expected events were delivered. */
+ if (winh_ignore_event(B, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to window A with detail set to NotifyAncestor. */
+ _detail_ = NotifyAncestor;
+ if (winh_climb(A, A, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify events delivered, between window A and window B, exclusive, */
+/* in proper order. */
+ increasing = False;
+ if (winh_climb(A, B->firstchild, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that detail is set to NotifyVirtual. */
+ _detail_ = NotifyVirtual;
+ if (winh_climb(A->parent, B->firstchild, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* EnterNotify events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(10);
+>>ASSERTION Good A
+When the pointer moves from window A to window B
+and B is an inferior of A,
+then a xname event is generated on window A with
+.M detail
+set to
+.S NotifyInferior .
+>>STRATEGY
+Build window hierarchy.
+Move pointer to known location.
+Set window A.
+Set window B to child of window A.
+Select for xname and EnterNotify events on windows A and B.
+Move pointer from window A to window B.
+Verify xname event received on window A.
+Verify that detail is set to NotifyInferior.
+Verify that all xname events are delivered before all
+EnterNotify events.
+>>CODE
+Display *display = Dsp;
+int depth = 3;
+Winh *A, *B;
+int status;
+XEvent *event;
+
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set window A. */
+ A = guardian->firstchild;
+/* Set window B to child of window A. */
+ B = A->firstchild;
+/* Select for xname and EnterNotify events on windows A and B. */
+ if (winh_selectinput(display, A, BOTHMASKS)) {
+ report("Error selecting for events.");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_selectinput(display, B, BOTHMASKS)) {
+ report("Error selecting for events.");
+ return;
+ }
+ else
+ CHECK;
+
+/* Move pointer from window A to window B. */
+ XWarpPointer(display, None, A->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, True);
+ XWarpPointer(display, None, B->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify xname event received on window A. */
+ if (A->delivered == (Winhe *) NULL || (event = A->delivered->event)->type != EVENT) {
+ report("Expected event not generated");
+ FAIL;
+ }
+ else
+ {
+/* Verify that detail is set to NotifyInferior. */
+ if (event->xcrossing.detail != NotifyInferior) {
+ report("Got detail %d, expected %d", event->xcrossing.detail, NotifyInferior);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* EnterNotify events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+ }
+ CHECKPASS(7);
+>>ASSERTION Good A
+>>#NOTE
+>>#NOTE The approved form of this assertion was in error.
+>>#NOTE The offending line is listed below:
+>>#NOTE
+>>#NOTE between window B and window C, exclusive, with
+>>#NOTE
+When the pointer moves from window A to window B
+and there exists a window C that is their least common ancestor,
+then a xname event is generated on window A with
+.M detail
+set to
+.S NotifyNonlinear
+and then on each window
+between window A and window C, exclusive, with
+.M detail
+set to
+.S NotifyNonlinearVirtual .
+>>STRATEGY
+Build window hierarchy.
+Move pointer to known location.
+Set windows A, B, and C.
+Select for xname and EnterNotify events on window A and
+between windows A and C, exclusive.
+Select for xname and EnterNotify events between windows B and C.
+Move pointer from window A to window B.
+Verify that event delivered to window A with detail set to NotifyNonlinear.
+Verify events delivered in proper order.
+Verify that detail is set to NotifyNonlinearVirtual on events delivered on
+each window between window A and window C, exclusive.
+Verify that all xname events are delivered before all
+EnterNotify events.
+>>CODE
+Display *display = Dsp;
+int depth = 5;
+Winh *A, *B, *C;
+int status;
+
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer to known location. */
+ if (warppointer(display, DRW(display), 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set windows A, B, and C. */
+ C = guardian->firstchild;
+ A = C->firstchild->nextsibling->firstchild->firstchild;
+ B = C->firstchild-> firstchild->firstchild;
+/* Select for xname and EnterNotify events on window A and */
+/* between windows A and C, exclusive. */
+ _event_mask_ = BOTHMASKS;
+ _display_ = display;
+ if (winh_climb(A, C->firstchild->nextsibling, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+/* Select for xname and EnterNotify events between windows B and C. */
+ _display_ = display;
+ if (winh_climb(B, C, selectinput)) {
+ report("Could not select for events between C and B");
+ return;
+ }
+ else
+ CHECK;
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(A, C->firstchild->nextsibling, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer from window A to window B. */
+ XWarpPointer(display, None, A->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, True);
+ XWarpPointer(display, None, B->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ delete("Could not ignore %s events", eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that event delivered to window A with detail set to NotifyNonlinear. */
+ _detail_ = NotifyNonlinear;
+ if (winh_climb(A, A, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify events delivered in proper order. */
+ increasing = False;
+ if (winh_climb(A, C->firstchild->nextsibling, checksequence))
+ FAIL;
+ else
+ CHECK;
+/* Verify that detail is set to NotifyNonlinearVirtual on events delivered on */
+/* each window between window A and window C, exclusive. */
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(A->parent, C->firstchild->nextsibling, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* EnterNotify events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Incorrect event ordering.");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ CHECKPASS(11);
+>>ASSERTION Good C
+If the implementation supports multiple screens:
+When the pointer moves from window A to window B
+and window A and window B are on different screens,
+then a xname event is generated on window A with
+.M detail
+set to
+.S NotifyNonlinear .
+>>STRATEGY
+Check to see if multiple screens are supported.
+Build window hierarchy.
+Move pointer to window A.
+Select for xname and EnterNotify events on windows A and B.
+Move pointer from window A to window B.
+Verify that the expected events were received.
+Verify that detail is set to NotifyNonlinear.
+Verify that all xname events are delivered before all
+EnterNotify events.
+>>CODE
+Display *display = Dsp;
+int depth = 1;
+Winh *A, *B, *Broot;
+int status;
+
+/* Check to see if multiple screens are supported. */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set windows A and B. */
+ A = guardian->firstchild;
+ Broot = guardian->nextsibling;
+ B = Broot->firstchild;
+/* Move pointer to window A. */
+ if (warppointer(display, A->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Select for xname and EnterNotify events on windows A and B. */
+ if (winh_selectinput(display, A, BOTHMASKS)) {
+ report("Could not select for events on A");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_selectinput(display, B, BOTHMASKS)) {
+ report("Could not select for events on B");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer from window A to window B. */
+ XSync(display, True);
+ XWarpPointer(display, None, B->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+/* Verify that the expected events were received. */
+ good.type = EVENT;
+ good.xany.display = display;
+ good.xany.window = A->window;
+ if (winh_plant(A, &good, NoEventMask, WINH_NOMASK)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_ignore_event(B, OTHEREVENT, WINH_NOMASK)) {
+ report("Could not ignore %s events on B",
+ eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that detail is set to NotifyNonlinear. */
+ if (A->delivered->event->xcrossing.detail != NotifyNonlinear) {
+ report("Got detail %d, expected %d",
+ A->delivered->event->xcrossing.detail,
+ NotifyNonlinear);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* EnterNotify events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Incorrect event ordering.");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ CHECKPASS(10);
+>>ASSERTION Good C
+If the implementation supports multiple screens:
+When the pointer moves from window A to window B
+and window A and window B are on different screens
+and window A is not a root window,
+then, after the related xname event is generated
+with
+.M detail
+set to
+.S NotifyNonlinear ,
+a xname event is generated on
+each window above A up to and including its root, with
+.M detail
+set to
+.S NotifyNonlinearVirtual .
+>>STRATEGY
+Check to see if multiple screens are supported.
+Create client.
+Build window hierarchy.
+Move pointer to window A.
+Select for xname and EnterNotify events on windows A and B.
+Move pointer from window A to window B.
+Verify that the expected events were received.
+Verify that detail is set to NotifyNonlinear for event delivered to A.
+Verify events delivered on each window above A up to and
+including its root, with detail set to NotifyNonlinearVirtual.
+Verify that all xname events are delivered before all
+EnterNotify events.
+>>CODE
+Display *display;
+int depth = 4;
+Winh *A, *B, *Aroot;
+int status;
+
+/* Check to see if multiple screens are supported. */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ }
+ else
+ CHECK;
+/* Create client. */
+ if ((display = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client.");
+ return;
+ }
+ else
+ CHECK;
+/* Build window hierarchy. */
+ if (winh(display, depth, WINH_MAP|WINH_BOTH_SCREENS)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Set windows A and B. */
+ Aroot = guardian;
+ A = guardian->firstchild->firstchild->firstchild;
+ B = guardian->nextsibling->firstchild;
+/* Move pointer to window A. */
+ if (warppointer(display, A->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Select for xname and EnterNotify events on windows A and B. */
+ _event_mask_ = BOTHMASKS;
+ _display_ = display;
+ if (winh_climb(A, Aroot, selectinput)) {
+ report("Could not select for events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_selectinput(display, B, BOTHMASKS)) {
+ report("Could not select for events on B");
+ return;
+ }
+ else
+ CHECK;
+/* Move pointer from window A to window B. */
+ XSync(display, True);
+ XWarpPointer(display, None, B->window, 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+/* Verify that the expected events were received. */
+ good.type = EVENT;
+ good.xany.display = display;
+ if (winh_climb(A, Aroot, plant)) {
+ report("Could not plant events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_ignore_event(B, OTHEREVENT, WINH_NOMASK)) {
+ report("Could not ignore %s events on B",
+ eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that detail is set to NotifyNonlinear for event delivered to A. */
+ if (A->delivered->event->xcrossing.detail != NotifyNonlinear) {
+ report("Got detail %d, expected %d on A",
+ A->delivered->event->xcrossing.detail,
+ NotifyNonlinear);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify events delivered on each window above A up to and */
+/* including its root, with detail set to NotifyNonlinearVirtual. */
+ increasing = False;
+ if (winh_climb(A, Aroot, checksequence))
+ FAIL;
+ else
+ CHECK;
+ _detail_ = NotifyNonlinearVirtual;
+ if (winh_climb(A->parent, Aroot, checkdetail))
+ FAIL;
+ else
+ CHECK;
+/* Verify that all xname events are delivered before all */
+/* EnterNotify events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Incorrect event ordering.");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ CHECKPASS(13);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event and root windows are on the same screen,
+>>#NOTEs then
+>>#NOTEs .M same_screen
+>>#NOTEs is set to
+>>#NOTEs .S True .
+>>ASSERTION Good C
+>>#COMMENT:
+>># Assertion category changed March 1992 since it was found not to require
+>># device events.
+>># - Cal.
+If multiple screens are supported:
+When a xname event is delivered
+and the event and root windows are not on the same screen,
+then
+.M same_screen
+is set to
+.S False .
+>>STRATEGY
+If multiple screens are supported:
+ Create a window on the default screen.
+ Create a window on the alternate screen.
+ Warp the pointer into the first window.
+ Grab the pointer for the first window.
+ Warp the pointer to the alternate window.
+ Verify that an xname event was generated relative to the grab window.
+ Verify that the same_screen component of the event was False.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+int gr;
+
+ /* If multiple screens are supported: */
+ if(config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ } else
+ CHECK;
+
+ /* Create a window on the default screen. */
+ w = defwin(Dsp);
+
+ /* Create a window on the alternate screen. */
+ w2 = defdraw(Dsp, VI_ALT_WIN);
+
+ /* Warp the pointer into the first window. */
+ (void) warppointer(Dsp, w, 2,3);
+
+ /* Grab the pointer for the first window. */
+ if((gr=XGrabPointer(Dsp, w, False, EVENTMASK, GrabModeAsync, GrabModeAsync, None, None, CurrentTime)) != GrabSuccess) {
+ delete("XGrabPointer() returned %s instead of GrabSuccess.", grabreplyname(gr));
+ return;
+ } else
+ CHECK;
+
+ /* Warp the pointer to the alternate window. */
+ XSync(Dsp, True);
+ (void) warppointer(Dsp, w2, 1,1);
+ XSync(Dsp, False);
+
+ /* Verify that an xname event was generated relative to the grab window. */
+ if (XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not received.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that the same_screen component of the event was False. */
+ if(ev.xcrossing.same_screen != False) {
+ report("The same_screen component of the %s event was not set to False.", eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabPointer(Dsp, CurrentTime);
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When a xname event is delivered
+and the event window is the focus window,
+then
+.M focus
+is set to
+.S True .
+>>STRATEGY
+Build window hierarchy.
+Set input focus to eventw.
+Move pointer to window.
+Select xname events on the eventw.
+Call XWarpPointer to move the pointer to outside of window.
+Verify event was delivered with focus set to True.
+Move pointer back to window.
+Set input focus to known window.
+Call XWarpPointer to move the pointer to eventw.
+Verify event was delivered with focus set to False.
+>>CODE
+Display *display = Dsp;
+Winh *eventw;
+int status;
+
+/* Build window hierarchy. */
+ if (winh(display, 1, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+ eventw = guardian->firstchild;
+/* Set input focus to eventw. */
+ XSetInputFocus(display, eventw->window, RevertToPointerRoot, CurrentTime);
+/* Move pointer to window. */
+ if (warppointer(display, eventw->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Select xname events on the eventw. */
+ if (winh_selectinput(display, eventw, MASK))
+ return;
+ else
+ CHECK;
+/* Call XWarpPointer to move the pointer to outside of window. */
+ XSync(display, True);
+ XWarpPointer(display, None, DRW(display), 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+/* Verify event was delivered with focus set to True. */
+ good.type = EVENT;
+ good.xany.display = display;
+ good.xany.window = eventw->window;
+ if (winh_plant(eventw, &good, NoEventMask, WINH_NOMASK)) {
+ report("Could not initialize for event delivery");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+ if (eventw->delivered->event->xcrossing.focus != True) {
+ report("Focus set to %d, expected %d",
+ eventw->delivered->event->xcrossing.focus,True);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+/* Move pointer back to window. */
+ XWarpPointer(display, None, eventw->window, 0, 0, 0, 0, 0, 0);
+/* Set input focus to known window. */
+ XSetInputFocus(display, eventw->nextsibling->window, RevertToPointerRoot, CurrentTime);
+/* Call XWarpPointer to move the pointer to eventw. */
+ XSync(display, True);
+ XWarpPointer(display, None, DRW(display), 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+/* Verify event was delivered with focus set to False. */
+ if (winh_plant(eventw, &good, NoEventMask, WINH_NOMASK)) {
+ report("Could not initialize for event delivery");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+ if (eventw->delivered->event->xcrossing.focus != False) {
+ report("Focus set to %d, expected %d",
+ eventw->delivered->event->xcrossing.focus, False);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ CHECKPASS(9);
+>>ASSERTION Good A
+When a xname event is delivered
+and the event window is an inferior of the focus window,
+then
+.M focus
+is set to
+.S True .
+>>STRATEGY
+Build window hierarchy.
+Set input focus to ancestor of window eventw.
+Move pointer to event window.
+Select xname events on the eventw.
+Call XWarpPointer to move the pointer outside event window.
+Verify event was delivered with focus set to True.
+>>CODE
+Display *display = Dsp;
+Winh *eventw, *focusw;
+int status;
+
+/* Build window hierarchy. */
+ if (winh(display, 2, WINH_MAP)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+ focusw = guardian->firstchild;
+ eventw = guardian->firstchild->firstchild;
+/* Set input focus to ancestor of window eventw. */
+ XSetInputFocus(display, focusw->window, RevertToPointerRoot, CurrentTime);
+/* Move pointer to event window. */
+ if (warppointer(display, eventw->window, 0, 0) == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Select xname events on the eventw. */
+ if (winh_selectinput(display, eventw, MASK))
+ return;
+ else
+ CHECK;
+/* Call XWarpPointer to move the pointer outside event window. */
+ XSync(display, True);
+ XWarpPointer(display, None, DRW(display), 0, 0, 0, 0, 0, 0);
+ XSync(display, False);
+/* Verify event was delivered with focus set to True. */
+ good.type = EVENT;
+ good.xany.display = display;
+ good.xany.window = eventw->window;
+ if (winh_plant(eventw, &good, NoEventMask, WINH_NOMASK)) {
+ report("Could not initialize for event delivery");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+ if (eventw->delivered->event->xcrossing.focus != True) {
+ report("Focus set to %d, expected %d",
+ eventw->delivered->event->xcrossing.focus, True);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ CHECKPASS(6);
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event window is not the focus window or
+>>#NOTEs an inferior of the focus window,
+>>#NOTEs then
+>>#NOTEs .M focus
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M state
+>>#NOTEs is set to
+>>#NOTEs indicate the logical state
+>>#NOTEs of the pointer buttons,
+>>#NOTEs which is the bitwise OR of one or more of
+>>#NOTEs the button or modifier key masks
+>>#NOTEs .S Button1Mask ,
+>>#NOTEs .S Button2Mask ,
+>>#NOTEs .S Button3Mask ,
+>>#NOTEs .S Button4Mask ,
+>>#NOTEs .S Button5Mask ,
+>>#NOTEs .S ShiftMask ,
+>>#NOTEs .S LockMask ,
+>>#NOTEs .S ControlMask ,
+>>#NOTEs .S Mod1Mask ,
+>>#NOTEs .S Mod2Mask ,
+>>#NOTEs .S Mod3Mask ,
+>>#NOTEs .S Mod4Mask ,
+>>#NOTEs and
+>>#NOTEs .S Mod5Mask .
diff --git a/xc/test/xsuite/xtest/tset/CH08/mpntfy/mpntfy.m b/xc/test/xsuite/xtest/tset/CH08/mpntfy/mpntfy.m
new file mode 100644
index 000000000..444cefe92
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/mpntfy/mpntfy.m
@@ -0,0 +1,405 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE MapNotify CH08
+>>EXTERN
+#define EVENT MapNotify
+#define MASK StructureNotifyMask
+#define MASKP SubstructureNotifyMask
+>>ASSERTION Good A
+When a window's state changes from unmapped to mapped
+as a result of save-set processing,
+then a xname event is generated.
+>>STRATEGY
+Create client2.
+Create parent window with client2.
+Create child window as inferior to parent.
+Add child window to client2's save-set.
+Set client2's shut down mode to DestroyAll.
+Select for MapNotify events on child.
+Call XCloseDisplay with client2.
+Verify that a MapNotify event was delivered.
+Verify that event member fields are correctly set.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Window child;
+Window parent;
+XEvent event_return;
+XMapEvent good;
+struct area area;
+
+/* Create client2. */
+ if (config.display == (char *) NULL) {
+ delete("config.display not set");
+ return;
+ }
+ else
+ CHECK;
+ client2 = XOpenDisplay(config.display);
+ if (client2 == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+/* Create parent window with client2. */
+ /* must avoid resource registration! */
+ parent = XCreateSimpleWindow(display, DRW(display), 1, 1, W_STDWIDTH, W_STDHEIGHT, 1, 0L, 0L);
+ XSync(client2, True);
+/* Create child window as inferior to parent. */
+ area.x = 1;
+ area.y = 1;
+ area.width = W_STDWIDTH/2;
+ area.height = W_STDHEIGHT/2;
+ child = mkwinchild(display, (XVisualInfo *) NULL, &area, False, parent, 1);
+ XSync(display, True);
+/* Add child window to client2's save-set. */
+ XAddToSaveSet(client2, child);
+/* Set client2's shut down mode to DestroyAll. */
+ XSetCloseDownMode(client2, DestroyAll);
+/* Select for MapNotify events on child. */
+ XSelectInput(display, child, MASK);
+/* Call XCloseDisplay with client2. */
+ XSync(display, True);
+ XSync(client2, True);
+ XCloseDisplay(client2);
+ XSync(display, False);
+/* Verify that a MapNotify event was delivered. */
+ if (!XCheckTypedWindowEvent(display, child, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event member fields are correctly set. */
+ good = event_return.xmap;
+ good.type = EVENT;
+ good.event = child;
+ good.window = child;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(4);
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window's state changes from unmapped to mapped
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XMapWindow ,
+>>#NOTEm .F XMapRaised ,
+>>#NOTEm .F XMapSubwindows ,
+>>#NOTEm or
+>>#NOTEm .F XReparentWindow ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>ASSERTION Good A
+When a xname event is generated,
+then all clients having set
+.S StructureNotifyMask
+event mask bits on the mapped window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Create window.
+Select for MapNotify events using StructureNotifyMask.
+Select for MapNotify events using StructureNotifyMask with client2.
+Select for no events with client3.
+Generate MapNotify event.
+Verify that a MapNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that a MapNotify event was delivered to client2.
+Verify that event member fields are correctly set.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window w;
+int count;
+XEvent event_return;
+XMapEvent good;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select for MapNotify events using StructureNotifyMask. */
+ XSelectInput(display, w, MASK);
+/* Select for MapNotify events using StructureNotifyMask with client2. */
+ XSelectInput(client2, w, MASK);
+/* Select for no events with client3. */
+ XSelectInput(client3, w, NoEventMask);
+/* Generate MapNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XMapWindow(display, w);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a MapNotify event was delivered. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xmap;
+ good.type = EVENT;
+ good.event = w;
+ good.window = w;
+ good.override_redirect = config.debug_override_redirect;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a MapNotify event was delivered to client2. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(client2, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xmap;
+ good.type = EVENT;
+ good.event = w;
+ good.window = w;
+ good.override_redirect = config.debug_override_redirect;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event for client2");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(7);
+>>ASSERTION Good A
+When a xname event is generated,
+then all clients having set
+.S SubstructureNotifyMask
+event mask bits on the parent of the mapped window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Create window.
+Select for MapNotify events using SubstructureNotifyMask.
+Select for MapNotify events using SubstructureNotifyMask with client2.
+Select for no events with client3.
+Generate MapNotify event.
+Verify that a MapNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that a MapNotify event was delivered to client2.
+Verify that event member fields are correctly set.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window w;
+int count;
+XEvent event_return;
+XMapEvent good;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select for MapNotify events using SubstructureNotifyMask. */
+ XSelectInput(display, DRW(display), MASKP);
+/* Select for MapNotify events using SubstructureNotifyMask with client2. */
+ XSelectInput(client2, DRW(display), MASKP);
+/* Select for no events with client3. */
+ XSelectInput(client3, DRW(display), NoEventMask);
+/* Generate MapNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XMapWindow(display, w);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a MapNotify event was delivered. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, DRW(display), EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xmap;
+ good.type = EVENT;
+ good.event = DRW(display);
+ good.window = w;
+ good.override_redirect = config.debug_override_redirect;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a MapNotify event was delivered to client2. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(client2, DRW(display), EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xmap;
+ good.type = EVENT;
+ good.event = DRW(display);
+ good.window = w;
+ good.override_redirect = config.debug_override_redirect;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event for client2");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(7);
+>>ASSERTION def
+>>#NOTE Tested for in previous two assertions.
+When a xname event is generated,
+then
+clients not having set
+.S StructureNotifyMask
+event mask bits on the
+mapped window
+and also not having set
+.S SubstructureNotifyMask
+event mask bits on the
+parent of the mapped window
+are not delivered
+a xname event.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .S StructureNotify
+>>#NOTEs was selected,
+>>#NOTEs then
+>>#NOTEs .M event
+>>#NOTEs is set to
+>>#NOTEs the WINDOWTYPE window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .S SubstructureNotify
+>>#NOTEs was selected,
+>>#NOTEs then
+>>#NOTEs .M event
+>>#NOTEs is set to
+>>#NOTEs the WINDOWTYPE window's parent.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M override_redirect
+>>#NOTEs is set to the override-redirect attribute of
+>>#NOTEs .M window .
diff --git a/xc/test/xsuite/xtest/tset/CH08/mppngntfy/mppngntfy.m b/xc/test/xsuite/xtest/tset/CH08/mppngntfy/mppngntfy.m
new file mode 100644
index 000000000..96b84c139
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/mppngntfy/mppngntfy.m
@@ -0,0 +1,200 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE MappingNotify CH08
+>>EXTERN
+#define EVENT MappingNotify
+>>ASSERTION Good A
+When a xname event is generated,
+a xname event is delivered to all clients.
+>>STRATEGY
+Create client2.
+Generate MappingNotify event.
+Verify that MappingNotify event was delivered.
+Verify members in delivered event structure.
+Verify that MappingNotify event was delivered to client2.
+Verify members in delivered event structure.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+XEvent event_return;
+int nmap;
+int count;
+unsigned char *map;
+unsigned char buf[2];
+
+/* Create client2. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+/* Generate MappingNotify event. */
+ nmap = XGetPointerMapping(display, buf, sizeof(buf));
+ if (nmap < 1) {
+ report("XGetPointerMapping returned %d, expected greater than 0", nmap);
+ delete("Can't determine size of pointer mapping buffer");
+ return;
+ }
+ else
+ CHECK;
+ map = (unsigned char *) malloc((unsigned int) (nmap * sizeof(*map)));
+ if (map == (unsigned char *) NULL) {
+ report("Couldn't allocate %d bytes", nmap * sizeof(*map));
+ delete("Memory allocation error");
+ return;
+ }
+ else
+ CHECK;
+ count = XGetPointerMapping(display, map, nmap);
+ if (count < nmap) {
+ report("XGetPointerMapping returned %d, expected %d",
+ count, nmap);
+ delete("XGetPointerMapping inconsistencies");
+ free(map);
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, True);
+ XSync(client2, True);
+ count = XSetPointerMapping(display, map, nmap);
+ if (count != Success) {
+ report("XSetPointerMapping returned %d, expected %d",
+ count, Success);
+ delete("XSetPointerMapping failed");
+ free(map);
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, False);
+ XSync(client2, False);
+/* Verify that MappingNotify event was delivered. */
+ if (!XCheckTypedEvent(display, EVENT, &event_return)) {
+ report("No events generated, expected %s event",
+ eventname(EVENT));
+ FAIL;
+ }
+ else {
+ XMappingEvent good;
+
+/* Verify members in delivered event structure. */
+ good = event_return.xmapping;
+ good.type = EVENT;
+ good.request = MappingPointer;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+/* Verify that MappingNotify event was delivered to client2. */
+ if (!XCheckTypedEvent(client2, EVENT, &event_return)) {
+ report("No events generated, expected %s event with client2",
+ eventname(EVENT));
+ FAIL;
+ }
+ else {
+ XMappingEvent good;
+
+/* Verify members in delivered event structure. */
+ good = event_return.xmapping;
+ good.type = EVENT;
+ good.request = MappingPointer;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event with client2");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+ free(map);
+
+ CHECKPASS(7);
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a call is made to
+>>#NOTEm .F XSetModifierMapping ,
+>>#NOTEm then ARTICLE xname event is generated with
+>>#NOTEm .M request
+>>#NOTEm set to
+>>#NOTEm .S MappingModifier .
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a call is made to
+>>#NOTEm .F XChangeKeyboardMapping ,
+>>#NOTEm then ARTICLE xname event is generated with
+>>#NOTEm .M request
+>>#NOTEm set to
+>>#NOTEm .S MappingKeyboard .
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a call is made to
+>>#NOTEm .F XSetPointerMapping ,
+>>#NOTEm then ARTICLE xname event is generated with
+>>#NOTEm .M request
+>>#NOTEm set to
+>>#NOTEm .S MappingPointer .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When
+>>#NOTEs .M request
+>>#NOTEs is set to
+>>#NOTEs .S MappingKeyboard ,
+>>#NOTEs then
+>>#NOTEs .M first_keycode
+>>#NOTEs is set to the first number in the range of the altered mapping
+>>#NOTEs and
+>>#NOTEs .M count
+>>#NOTEs is set to the number of keycodes altered.
diff --git a/xc/test/xsuite/xtest/tset/CH08/mprqst/mprqst.m b/xc/test/xsuite/xtest/tset/CH08/mprqst/mprqst.m
new file mode 100644
index 000000000..178775e69
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/mprqst/mprqst.m
@@ -0,0 +1,317 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE MapRequest CH08
+>>EXTERN
+#define EVENT MapRequest
+#define MASK SubstructureRedirectMask
+>>ASSERTION Good A
+When a xname event is generated,
+then
+all clients having set
+.S SubstructureRedirectMask
+event mask bits on the parent of the window
+for which the map request was issued are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Build and create window hierarchy.
+Create inferiors with override-redirect set to True.
+Select for ConfigureRequest events using SubstructureRedirectMask.
+Select for no events with client3.
+Map window.
+Verify that no events were delivered.
+Verify that no events were delivered to client3.
+Unmap window.
+Set the override-redirect flag on inferiors to False.
+Attempt to map window.
+Initialize for expected events.
+Verify that a ConfigureRequest event is delivered.
+Verify that no events are delivered to client3.
+Verify members of event structure.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2, *client3;
+Winh *parent, *child, *lastw, *winh;
+Winhg winhg;
+XEvent event;
+int i;
+int status;
+int numchildren = 2;
+int count;
+XSetWindowAttributes attrs;
+unsigned long valuemask;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ /* can't use winh() because the windows need to overlap */
+ winhg.border_width = 1;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 100;
+ winhg.area.height = 100;
+ parent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ report("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 30;
+ winhg.area.height = 30;
+/* Create inferiors with override-redirect set to True. */
+ attrs.override_redirect = True;
+ attrs.border_pixel = W_FG;
+ attrs.background_pixel = W_BG;
+ valuemask = CWOverrideRedirect | CWBorderPixel | CWBackPixel;
+ for (i=0; i<numchildren; i++) {
+ if (!i)
+ CHECK;
+ lastw = winh_adopt(display, parent, valuemask, &attrs, &winhg, WINH_NOMASK);
+ if (lastw == (Winh *) NULL) {
+ report("Could not create child %d", i);
+ return;
+ }
+ winhg.area.x += 10;
+ winhg.area.y += 10;
+ }
+ child = parent->firstchild;
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Select for ConfigureRequest events using SubstructureRedirectMask. */
+ /*
+ * Selection with a single client because only one can select
+ * for this event at a time.
+ */
+ if (winh_selectinput(display, parent, MASK)) {
+ report("Selection failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for no events with client3. */
+ if (winh_selectinput(client3, (Winh *) NULL, NoEventMask)) {
+ report("Selection with client3 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Map window. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XMapWindow(client2, child->window);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that no events were delivered. */
+ count = XPending(display);
+ if (count != 0) {
+ report("Got %d events, expected %d (with override-redirect set)", count, 0);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3 (with override-redirect set)", count, 0);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Unmap window. */
+ /*
+ * this assumes that it was mapped in the first place
+ * which is not the case where the override-redirect flag is ignored
+ */
+ XUnmapWindow(client2, child->window);
+ XSync(client2, True);
+/* Set the override-redirect flag on inferiors to False. */
+ attrs.override_redirect = False;
+ valuemask = CWOverrideRedirect;
+ for (winh = parent->firstchild, i=0; i<numchildren; winh = winh->nextsibling, i++) {
+ if (!i)
+ CHECK;
+ if (winh_changewindowattributes(display, winh, valuemask, &attrs)) {
+ report("Failed to change attributes for subwindow %d", i);
+ return;
+ }
+ }
+/* Attempt to map window. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XMapWindow(client2, child->window);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Initialize for expected events. */
+ event.xany.type = EVENT;
+ event.xany.window = parent->window;
+ if (winh_plant(parent, &event, MASK, WINH_NOMASK)) {
+ report("Could not plant events for parent");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that a ConfigureRequest event is delivered. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XEvent *event_return;
+ XMapRequestEvent good;
+
+/* Verify members of event structure. */
+ event_return = winh_qdel->event;
+ good = event_return->xmaprequest;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.parent = parent->window;
+ good.window = child->window;
+ if (checkevent((XEvent *) &good, event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(15);
+>>ASSERTION def
+>>#NOTE Tested for in previous assertion.
+When a xname event is generated,
+then
+clients not having set
+.S SubstructureRedirectMask
+event mask bits on the
+parent of the window for which the map request was issued
+are not delivered
+a xname event.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is generated
+>>#NOTEm and a client has selected xname events on the child's parent
+>>#NOTEm and the override-redirect attribute of the child window is set to
+>>#NOTEm .S False ,
+>>#NOTEm then
+>>#NOTEm .M window
+>>#NOTEm is not WINDOWTYPE.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a
+>>#NOTEm .S MapWindow
+>>#NOTEm protocol request is issued on an unmapped child window by another client
+>>#NOTEm and the unmapped child window's
+>>#NOTEm .M override_redirect
+>>#NOTEm member is set to
+>>#NOTEm .S False ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M parent
+>>#NOTEs is set to
+>>#NOTEs the parent window of
+>>#NOTEs .M window .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the child window to be WINDOWTYPE.
diff --git a/xc/test/xsuite/xtest/tset/CH08/mskevnt/mskevnt.m b/xc/test/xsuite/xtest/tset/CH08/mskevnt/mskevnt.m
new file mode 100644
index 000000000..b7610d90d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/mskevnt/mskevnt.m
@@ -0,0 +1,191 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XMaskEvent CH08
+Bool
+XMaskEvent(display, event_mask, event_return)
+Display *display = Dsp;
+long event_mask;
+XEvent *event_return = &_event;
+>>EXTERN
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_() \
+ _startcall(display);\
+ XMaskEvent(display, event_mask, event_return);\
+ _endcall(display)
+static XEvent _event;
+>>ASSERTION Good A
+A call to xname
+returns in
+.A event_return
+the first event in the event queue matching
+.A event_mask .
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XMaskEvent.
+Verify the correct event-type was returned.
+Verify the first matching event in event queue was returned.
+>>CODE
+XEvent event;
+XAnyEvent *ep;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ ep = (XAnyEvent *) &event;
+ ep->type = KeyPress;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+ ep->type = ButtonPress;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+ ep->type = ButtonPress;
+ ep->send_event = True; /* first occurrence has send_event True */
+ XPutBackEvent(display, &event);
+ ep->type = KeyPress;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+/* Call XMaskEvent. */
+ event_mask = ButtonPressMask;
+ _xcall_();
+/* Verify the correct event-type was returned. */
+ ep = (XAnyEvent *) event_return;
+ if (ep->type != ButtonPress) {
+ report("Got %s, expected %s", eventname(ep->type), eventname(ButtonPress));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the first matching event in event queue was returned. */
+ if (ep->send_event != True) {
+ report("First event in event queue was not returned.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
+>>ASSERTION Good A
+A call to xname removes the returned event from the event queue.
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XPending to get the current event queue size.
+Call XMaskEvent.
+Call XPending to get the current event queue size.
+Verify that size of event queue has decreased by one.
+>>CODE
+XEvent event;
+int oldqsize;
+int newqsize;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Call XPending to get the current event queue size. */
+ oldqsize = XPending(display);
+/* Call XMaskEvent. */
+ event_mask = ButtonPressMask;
+ _xcall_();
+/* Call XPending to get the current event queue size. */
+ newqsize = XPending(display);
+/* Verify that size of event queue has decreased by one. */
+ if (newqsize != (oldqsize-1)) {
+ report("Event queue size %d, expected %d", newqsize, oldqsize-1);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION Good A
+When a matching event is not in the event queue,
+then a call to xname
+flushes the output buffer and blocks until one is received.
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Create a window.
+Call XMaskEvent and verify that blocking did occur.
+Verify that the output buffer was flushed.
+Verify the correct event-type was returned.
+>>CODE
+XEvent event;
+XAnyEvent *ep;
+Window w;
+Block_Info info;
+int block_status;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Create a window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ ep = (XAnyEvent *) &event;
+ ep->type = ButtonPressMask;
+ ep->window = w;
+/* Call XMaskEvent and verify that blocking did occur. */
+ XMaskEvent_Type(info, ButtonPressMask);
+ block_status = block(display, &event, &info);
+ if (block_status == -1)
+ return;
+ else
+ CHECK;
+ if (block_status == 0) {
+ report("Blocking did not occur.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that the output buffer was flushed. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() != Success) {
+ report("The output buffer was not flushed.");
+ XFreePixmap(display, pm);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the correct event-type was returned. */
+ if (info.event_return.type != ButtonPress) {
+ report("Got %s, expected %s", eventname(info.event_return.type), eventname(ButtonPress));
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(5);
diff --git a/xc/test/xsuite/xtest/tset/CH08/mtnntfy/mtnntfy.m b/xc/test/xsuite/xtest/tset/CH08/mtnntfy/mtnntfy.m
new file mode 100644
index 000000000..9a0cb7305
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/mtnntfy/mtnntfy.m
@@ -0,0 +1,2173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE MotionNotify CH08
+>>EXTERN
+#define MASK PointerMotionMask
+#define HINTMASK PointerMotionHintMask
+#define EVENT MotionNotify
+#define EVENTMASK MASK
+>>ASSERTION Good A
+When the pointer is moved
+and the pointer motion begins and ends in the same window,
+then a xname event is generated.
+>>STRATEGY
+Create client2.
+Create window.
+Move pointer to inside of window.
+Set PointerMotionMask event mask bits on window.
+Set PointerMotionMask event mask bits on window with client2.
+Synthesize expected event.
+Call XWarpPointer to move the pointer with motion beginning and
+ending in window.
+Verify that a MotionNotify event was received.
+Verify event members.
+Verify that only one MotionNotify event was received.
+Verify that no other events were received.
+Verify that a MotionNotify event was received by client2.
+Verify event members for client2.
+Verify that only one MotionNotify event was received.
+Verify that no other events were received.
+Call XWarpPointer to move the pointer multiple times with
+motion beginning and ending in window.
+Verify that multiple MotionNotify events were received.
+Verify that no other events were received.
+>>CODE
+int i;
+int nummoves;
+Display *display = Dsp;
+Display *client2;
+Window w;
+int x, y;
+XEvent event_return;
+XMotionEvent good;
+PointerPlace *warp;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can't open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, True);
+/* Move pointer to inside of window. */
+ warp = warppointer(display, w, 0, 0);
+ if (warp == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set PointerMotionMask event mask bits on window. */
+ XSelectInput(display, w, MASK);
+ XSync(display, True);
+/* Set PointerMotionMask event mask bits on window with client2. */
+ XSelectInput(client2, w, MASK);
+ XSync(client2, True);
+/* Synthesize expected event. */
+ x = 2;
+ y = 2;
+ good.type = MotionNotify;
+ /* ignore serial */
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.root = DRW(display);
+ good.subwindow = None;
+ /* ignore time */
+ good.x = x;
+ good.y = y;
+ ROOTCOORDSET(display, &good); /* x_root and y_root */
+ good.state = 0;
+ good.is_hint = NotifyNormal;
+ good.same_screen = True;
+/* Call XWarpPointer to move the pointer with motion beginning and */
+/* ending in window. */
+ XWarpPointer(display, None, w, 0, 0, 0, 0, x, y);
+/* Verify that a MotionNotify event was received. */
+ XSync(display, False);
+ if (!XCheckTypedWindowEvent(display, w, MotionNotify, &event_return)) {
+ report("No events delivered.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify event members. */
+ /* ignore serial */
+ good.serial = ((XMotionEvent *) &event_return)->serial = 0;
+ /* ignore time */
+ good.time = ((XMotionEvent *) &event_return)->time = 0;
+ CHECKEVENT((XEvent *) &good, &event_return);
+/* Verify that only one MotionNotify event was received. */
+ if (XCheckTypedWindowEvent(display, w, MotionNotify, &event_return)) {
+ report("Excess events generated.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no other events were received. */
+ if (XPending(display) > 0) {
+ delete("Unexpected events generated.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that a MotionNotify event was received by client2. */
+ XSync(client2, False);
+ if (!XCheckTypedWindowEvent(client2, w, MotionNotify, &event_return)) {
+ report("No events delivered to client2.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify event members for client2. */
+ good.display = client2;
+ /* ignore serial */
+ good.serial = ((XMotionEvent *) &event_return)->serial = 0;
+ /* ignore time */
+ good.time = ((XMotionEvent *) &event_return)->time = 0;
+ CHECKEVENT((XEvent *) &good, &event_return);
+/* Verify that only one MotionNotify event was received. */
+ if (XCheckTypedWindowEvent(client2, w, MotionNotify, &event_return)) {
+ report("Excess events generated for client2.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no other events were received. */
+ if (XPending(client2) > 0) {
+ delete("Unexpected events generated for client2.");
+ return;
+ }
+ else
+ CHECK;
+/* Call XWarpPointer to move the pointer multiple times with */
+/* motion beginning and ending in window. */
+ XSync(display, True);
+ nummoves = 5;
+ for (i=0; i<nummoves; i++) {
+ if (!i)
+ CHECK;
+ XWarpPointer(display, None, w, 0, 0, 0, 0, ++x, ++y);
+ /*
+ * Some servers may only generate the expected multiple
+ * MotionNotify events when this call to XWarpPointer is
+ * followed by an XSync (or probably any other protocol
+ * request).
+ */
+ }
+/* Verify that multiple MotionNotify events were received. */
+ XSync(display, False);
+ for (i=0; i<nummoves; i++) {
+ if (!XCheckTypedWindowEvent(display, w, MotionNotify, &event_return)) {
+ report("Missing %d events.", nummoves - i);
+ FAIL;
+ break;
+ }
+ else
+ CHECK;
+ }
+/* Verify that no other events were received. */
+ if (XPending(display) > 0) {
+ delete("Unexpected events generated.");
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(12 + nummoves);
+>>ASSERTION def
+When a xname event is generated,
+then all clients having set
+.S PointerMotionMask
+event mask bits on the event window are delivered
+a xname event.
+>>ASSERTION Good B 1
+When a xname event is generated while pointer button 1 was pressed,
+then all clients having set
+.S Button1MotionMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+If extended testing is required:
+ Verify that at least one button is supported.
+ Create a second client.
+ Create a third client.
+ Create a window.
+ Select Button1MotionMask as the event mask for all clients.
+ Simulate a Motion event with Button1 depressed on the window.
+ Verify a xname event was generated for the first client.
+ Verify that event member fields were correctly set.
+ Verify a xname event was generated for the second client.
+ Verify that event member fields were correctly set.
+ Verify a xname event was generated for the third client.
+ Verify that event member fields were correctly set.
+>>CODE
+Display *client2;
+Display *client3;
+Window w;
+XEvent ev;
+XPointerMovedEvent good;
+PointerPlace *ptr;
+
+ if(noext(1))
+ return;
+
+ /* If extended testing is required: */
+
+ /* Verify that at least one button is supported. */
+ if(nbuttons() < 1) {
+ delete("No buttons are supported.");
+ return;
+ } else
+ CHECK;
+
+ /* Create a second client. */
+ client2 = opendisplay();
+ /* Create a third client. */
+ client3 = opendisplay();
+
+ /* Create a window. */
+ w = defwin(Dsp);
+
+ /* Select Button1MotionMask as the event mask for all clients. */
+ XSelectInput(Dsp, w, Button1MotionMask);
+ XSelectInput(client2, w, Button1MotionMask);
+ XSelectInput(client3, w, Button1MotionMask);
+
+ (void) warppointer(Dsp, w, 0,0);
+ XSync(Dsp, True);
+ XSync(client2, True);
+ XSync(client3, True);
+
+ /* Simulate a Motion event with Button1 depressed on the window. */
+ buttonpress(Dsp, Button1);
+ ptr = warppointer(Dsp, w, 10,10);
+ XSync(Dsp, False);
+ XSync(client2, False);
+ XSync(client3, False);
+ buttonrel(Dsp, Button1);
+
+ good = ev.xmotion;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = Dsp;
+ good.window = w;
+ good.root = DRW(Dsp);
+ good.subwindow = None;
+
+ good.x = 10;
+ good.y = 10;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = Button1Mask;
+ good.is_hint = NotifyNormal;
+ good.same_screen = True;
+
+ /* Verify a xname event was generated for the first client. */
+ if(XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /* Verify a xname event was generated for the second client. */
+ if(XCheckWindowEvent(client2, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ good.display = client2;
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /* Verify a xname event was generated for the third client. */
+ if(XCheckWindowEvent(client3, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ good.display = client3;
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(7);
+
+>>ASSERTION Good D 1
+When a xname event is generated while pointer button 2 was pressed,
+then all clients having set
+.S Button2MotionMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+If extended testing is required:
+ Verify that the server supports at least 2 buttons.
+ Create a second client.
+ Create a third client.
+ Create a window.
+ Select Button2MotionMask as the event mask for all clients.
+ Simulate a Motion event with Button2 depressed on the window.
+ Verify a xname event was generated for the first client.
+ Verify that event member fields were correctly set.
+ Verify a xname event was generated for the second client.
+ Verify that event member fields were correctly set.
+ Verify a xname event was generated for the third client.
+ Verify that event member fields were correctly set.
+>>CODE
+Display *client2;
+Display *client3;
+Window w;
+int b;
+XEvent ev;
+XPointerMovedEvent good;
+PointerPlace *ptr;
+
+ /* If extended testing is required: */
+ if(noext(1))
+ return;
+
+ /* Verify that the server supports at least 2 buttons. */
+ if((b = nbuttons()) < 2) {
+ unsupported("Server supports only %d buttons.", b);
+ return;
+ } else
+ CHECK;
+
+ /* Create a second client. */
+ client2 = opendisplay();
+ /* Create a third client. */
+ client3 = opendisplay();
+
+ /* Create a window. */
+ w = defwin(Dsp);
+
+ /* Select Button2MotionMask as the event mask for all clients. */
+ XSelectInput(Dsp, w, Button2MotionMask);
+ XSelectInput(client2, w, Button2MotionMask);
+ XSelectInput(client3, w, Button2MotionMask);
+
+ (void) warppointer(Dsp, w, 0,0);
+ XSync(Dsp, True);
+ XSync(client2, True);
+ XSync(client3, True);
+
+ /* Simulate a Motion event with Button2 depressed on the window. */
+ buttonpress(Dsp, Button2);
+ ptr = warppointer(Dsp, w, 10,10);
+ XSync(Dsp, False);
+ XSync(client2, False);
+ XSync(client3, False);
+ buttonrel(Dsp, Button2);
+
+ good = ev.xmotion;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = Dsp;
+ good.window = w;
+ good.root = DRW(Dsp);
+ good.subwindow = None;
+
+ good.x = 10;
+ good.y = 10;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = Button2Mask;
+ good.is_hint = NotifyNormal;
+ good.same_screen = True;
+
+ /* Verify a xname event was generated for the first client. */
+ if(XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /* Verify a xname event was generated for the second client. */
+ if(XCheckWindowEvent(client2, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ good.display = client2;
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /* Verify a xname event was generated for the third client. */
+ if(XCheckWindowEvent(client3, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ good.display = client3;
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(7);
+
+>>ASSERTION Good D 1
+When a xname event is generated while pointer button 3 was pressed,
+then all clients having set
+.S Button3MotionMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+If extended testing is required:
+ Verify that the server supports at least 3 buttons.
+ Create a second client.
+ Create a third client.
+ Create a window.
+ Select Button3MotionMask as the event mask for all clients.
+ Simulate a Motion event with Button3 depressed on the window.
+ Verify a xname event was generated for the first client.
+ Verify that event member fields were correctly set.
+ Verify a xname event was generated for the second client.
+ Verify that event member fields were correctly set.
+ Verify a xname event was generated for the third client.
+ Verify that event member fields were correctly set.
+>>CODE
+Display *client2;
+Display *client3;
+Window w;
+int b;
+XEvent ev;
+XPointerMovedEvent good;
+PointerPlace *ptr;
+
+ /* If extended testing is required: */
+ if(noext(1))
+ return;
+
+ /* Verify that the server supports at least 3 buttons. */
+ if((b = nbuttons()) < 3) {
+ unsupported("Server supports only %d buttons.", b);
+ return;
+ } else
+ CHECK;
+
+ /* Create a second client. */
+ client2 = opendisplay();
+ /* Create a third client. */
+ client3 = opendisplay();
+
+ /* Create a window. */
+ w = defwin(Dsp);
+
+ /* Select Button3MotionMask as the event mask for all clients. */
+ XSelectInput(Dsp, w, Button3MotionMask);
+ XSelectInput(client2, w, Button3MotionMask);
+ XSelectInput(client3, w, Button3MotionMask);
+
+ (void) warppointer(Dsp, w, 0,0);
+ XSync(Dsp, True);
+ XSync(client2, True);
+ XSync(client3, True);
+
+ /* Simulate a Motion event with Button3 depressed on the window. */
+ buttonpress(Dsp, Button3);
+ ptr = warppointer(Dsp, w, 10,10);
+ XSync(Dsp, False);
+ XSync(client2, False);
+ XSync(client3, False);
+ buttonrel(Dsp, Button3);
+
+ good = ev.xmotion;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = Dsp;
+ good.window = w;
+ good.root = DRW(Dsp);
+ good.subwindow = None;
+
+ good.x = 10;
+ good.y = 10;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = Button3Mask;
+ good.is_hint = NotifyNormal;
+ good.same_screen = True;
+
+ /* Verify a xname event was generated for the first client. */
+ if(XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /* Verify a xname event was generated for the second client. */
+ if(XCheckWindowEvent(client2, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ good.display = client2;
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /* Verify a xname event was generated for the third client. */
+ if(XCheckWindowEvent(client3, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ good.display = client3;
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(7);
+
+>>ASSERTION Good D 1
+When a xname event is generated while pointer button 4 was pressed,
+then all clients having set
+.S Button4MotionMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+If extended testing is required:
+ Verify that the server supports at least 4 buttons.
+ Create a second client.
+ Create a third client.
+ Create a window.
+ Select Button4MotionMask as the event mask for all clients.
+ Simulate a Motion event with Button4 depressed on the window.
+ Verify a xname event was generated for the first client.
+ Verify that event member fields were correctly set.
+ Verify a xname event was generated for the second client.
+ Verify that event member fields were correctly set.
+ Verify a xname event was generated for the third client.
+ Verify that event member fields were correctly set.
+>>CODE
+Display *client2;
+Display *client3;
+Window w;
+int b;
+XEvent ev;
+XPointerMovedEvent good;
+PointerPlace *ptr;
+
+ /* If extended testing is required: */
+ if(noext(1))
+ return;
+
+ /* Verify that the server supports at least 4 buttons. */
+ if((b = nbuttons()) < 4) {
+ unsupported("Server supports only %d buttons.", b);
+ return;
+ } else
+ CHECK;
+
+ /* Create a second client. */
+ client2 = opendisplay();
+ /* Create a third client. */
+ client3 = opendisplay();
+
+ /* Create a window. */
+ w = defwin(Dsp);
+
+ /* Select Button4MotionMask as the event mask for all clients. */
+ XSelectInput(Dsp, w, Button4MotionMask);
+ XSelectInput(client2, w, Button4MotionMask);
+ XSelectInput(client3, w, Button4MotionMask);
+
+ (void) warppointer(Dsp, w, 0,0);
+ XSync(Dsp, True);
+ XSync(client2, True);
+ XSync(client3, True);
+
+ /* Simulate a Motion event with Button4 depressed on the window. */
+ buttonpress(Dsp, Button4);
+ ptr = warppointer(Dsp, w, 10,10);
+ XSync(Dsp, False);
+ XSync(client2, False);
+ XSync(client3, False);
+ buttonrel(Dsp, Button4);
+
+ good = ev.xmotion;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = Dsp;
+ good.window = w;
+ good.root = DRW(Dsp);
+ good.subwindow = None;
+
+ good.x = 10;
+ good.y = 10;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = Button4Mask;
+ good.is_hint = NotifyNormal;
+ good.same_screen = True;
+
+ /* Verify a xname event was generated for the first client. */
+ if(XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /* Verify a xname event was generated for the second client. */
+ if(XCheckWindowEvent(client2, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ good.display = client2;
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /* Verify a xname event was generated for the third client. */
+ if(XCheckWindowEvent(client3, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ good.display = client3;
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(7);
+
+>>ASSERTION Good D 1
+When a xname event is generated while pointer button 5 was pressed,
+then all clients having set
+.S Button5MotionMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+If extended testing is required:
+ Verify that the server supports 5 buttons.
+ Create a second client.
+ Create a third client.
+ Create a window.
+ Select Button5MotionMask as the event mask for all clients.
+ Simulate a Motion event with Button5 depressed on the window.
+ Verify a xname event was generated for the first client.
+ Verify that event member fields were correctly set.
+ Verify a xname event was generated for the second client.
+ Verify that event member fields were correctly set.
+ Verify a xname event was generated for the third client.
+ Verify that event member fields were correctly set.
+>>CODE
+Display *client2;
+Display *client3;
+Window w;
+int b;
+XEvent ev;
+XPointerMovedEvent good;
+PointerPlace *ptr;
+
+ /* If extended testing is required: */
+ if(noext(1))
+ return;
+
+ /* Verify that the server supports 5 buttons. */
+ if((b = nbuttons()) < 5) {
+ unsupported("Server supports only %d buttons.", b);
+ return;
+ } else
+ CHECK;
+
+ /* Create a second client. */
+ client2 = opendisplay();
+ /* Create a third client. */
+ client3 = opendisplay();
+
+ /* Create a window. */
+ w = defwin(Dsp);
+
+ /* Select Button5MotionMask as the event mask for all clients. */
+ XSelectInput(Dsp, w, Button5MotionMask);
+ XSelectInput(client2, w, Button5MotionMask);
+ XSelectInput(client3, w, Button5MotionMask);
+
+ (void) warppointer(Dsp, w, 0,0);
+ XSync(Dsp, True);
+ XSync(client2, True);
+ XSync(client3, True);
+
+ /* Simulate a Motion event with Button5 depressed on the window. */
+ buttonpress(Dsp, Button5);
+ ptr = warppointer(Dsp, w, 10,10);
+ XSync(Dsp, False);
+ XSync(client2, False);
+ XSync(client3, False);
+ buttonrel(Dsp, Button5);
+
+ good = ev.xmotion;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = Dsp;
+ good.window = w;
+ good.root = DRW(Dsp);
+ good.subwindow = None;
+
+ good.x = 10;
+ good.y = 10;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = Button5Mask;
+ good.is_hint = NotifyNormal;
+ good.same_screen = True;
+
+ /* Verify a xname event was generated for the first client. */
+ if(XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /* Verify a xname event was generated for the second client. */
+ if(XCheckWindowEvent(client2, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ good.display = client2;
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /* Verify a xname event was generated for the third client. */
+ if(XCheckWindowEvent(client3, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ good.display = client3;
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(7);
+
+>>ASSERTION Good B 1
+When a xname event is generated while at least one
+pointer button was pressed,
+then all clients having set
+.S ButtonMotionMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+If extended testing is required:
+ Verify that at least one button is supported.
+ Create a second client.
+ Create a third client.
+ Create a window.
+ Select ButtonMotionMask as the event mask for all clients.
+ Simulate a Motion event with Button1 depressed on the window.
+ Verify a xname event was generated for the first client.
+ Verify that event member fields were correctly set.
+ Verify a xname event was generated for the second client.
+ Verify that event member fields were correctly set.
+ Verify a xname event was generated for the third client.
+ Verify that event member fields were correctly set.
+>>CODE
+Display *client2;
+Display *client3;
+Window w;
+XEvent ev;
+XPointerMovedEvent good;
+PointerPlace *ptr;
+
+ /* If extended testing is required: */
+ if(noext(1))
+ return;
+
+ /* Verify that at least one button is supported. */
+ if(nbuttons() < 1) {
+ delete("No buttons are supported.");
+ return;
+ } else
+ CHECK;
+
+ /* Create a second client. */
+ client2 = opendisplay();
+ /* Create a third client. */
+ client3 = opendisplay();
+
+ /* Create a window. */
+ w = defwin(Dsp);
+
+ /* Select ButtonMotionMask as the event mask for all clients. */
+ XSelectInput(Dsp, w, ButtonMotionMask);
+ XSelectInput(client2, w, ButtonMotionMask);
+ XSelectInput(client3, w, ButtonMotionMask);
+
+ (void) warppointer(Dsp, w, 0,0);
+ XSync(Dsp, True);
+ XSync(client2, True);
+ XSync(client3, True);
+
+ /* Simulate a Motion event with Button1 depressed on the window. */
+ buttonpress(Dsp, Button1);
+ ptr = warppointer(Dsp, w, 10,10);
+ XSync(Dsp, False);
+ XSync(client2, False);
+ XSync(client3, False);
+ buttonrel(Dsp, Button1);
+
+ good = ev.xmotion;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = Dsp;
+ good.window = w;
+ good.root = DRW(Dsp);
+ good.subwindow = None;
+
+ good.x = 10;
+ good.y = 10;
+ good.x_root = ptr->nx;
+ good.y_root = ptr->ny;
+ good.state = Button1Mask;
+ good.is_hint = NotifyNormal;
+ good.same_screen = True;
+
+ /* Verify a xname event was generated for the first client. */
+ if(XCheckWindowEvent(Dsp, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /* Verify a xname event was generated for the second client. */
+ if(XCheckWindowEvent(client2, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ good.display = client2;
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ /* Verify a xname event was generated for the third client. */
+ if(XCheckWindowEvent(client3, w, EVENTMASK, &ev) == False) {
+ report("Expected %s event was not generated.", eventname(EVENT));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that event member fields were correctly set. */
+ good.display = client3;
+ if (checkevent((XEvent *) &good, &ev)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(7);
+
+>>ASSERTION Good B 1
+When a xname event is generated
+and a client has selected one or more of
+.S Button1MotionMask ,
+.S Button2MotionMask ,
+.S Button3MotionMask ,
+.S Button4MotionMask ,
+.S Button5MotionMask ,
+.S ButtonMotionMask ,
+or
+.S PointerMotionMask
+event mask bits on the event window,
+then only one xname event is delivered to that client.
+>>EXTERN
+unsigned long motionmasks[7] = { Button1MotionMask, Button2MotionMask,
+ Button3MotionMask, Button4MotionMask, Button5MotionMask,
+ ButtonMotionMask, PointerMotionMask };
+
+#define MOTIONMASK Button1MotionMask | Button2MotionMask | \
+ Button3MotionMask | Button4MotionMask | Button5MotionMask | \
+ ButtonMotionMask | PointerMotionMask
+>>STRATEGY
+If extended testing is required:
+ Verify that at least one button is supported.
+ Create a window.
+ Select all the motion masks on the window.
+ Simulate a Motion event with Button1 depressed on the window.
+ Check that only one of the possible events was generated.
+ Simulate a Motion event with all buttons pressed.
+ Check that only one of the possible events was generated.
+>>CODE
+int i;
+int b;
+int nevents = 0;
+Window w;
+XEvent ev;
+
+ /* If extended testing is required: */
+ if(noext(1))
+ return;
+
+ /* Verify that at least one button is supported. */
+ if((b = nbuttons()) < 1) {
+ delete("No buttons are supported.");
+ return;
+ } else
+ CHECK;
+
+ /* Create a window. */
+ w = defwin(Dsp);
+
+ /* Select all the motion masks on the window. */
+ XSelectInput(Dsp, w, MOTIONMASK);
+
+ /* Simulate a Motion event with Button1 depressed on the window. */
+ (void) warppointer(Dsp, w, 0,0);
+ XSync(Dsp, True);
+ buttonpress(Dsp, Button1);
+ (void) warppointer(Dsp, w, 10, 10);
+ XSync(Dsp, False);
+ buttonrel(Dsp, Button1);
+
+ for(i=0; i < NELEM(motionmasks); i++) {
+
+ if(XCheckWindowEvent(Dsp, w, motionmasks[i], &ev) == False) {
+ trace("%s event was not generated.", eventmaskname(motionmasks[i]));
+ } else {
+ nevents++;
+ trace("%s event was generated.", eventmaskname(motionmasks[i]));
+ }
+
+ }
+
+ /* Check that only one of the possible events was generated. */
+ if(nevents != 1) {
+ report("More than one of the selected motion events was generated.");
+ FAIL;
+ } else
+ CHECK;
+
+ nevents = 0;
+ /* Simulate a Motion event with all buttons pressed. */
+ buttonpress(Dsp, Button1);
+ if(b>=2)
+ buttonpress(Dsp, Button2);
+
+ if(b>=3)
+ buttonpress(Dsp, Button3);
+
+ if(b>=4)
+ buttonpress(Dsp, Button4);
+
+ if(b>=5)
+ buttonpress(Dsp, Button5);
+
+
+ (void) warppointer(Dsp, w, 0,0);
+ XSync(Dsp, True);
+ (void) warppointer(Dsp, w, 10, 10);
+ XSync(Dsp, False);
+
+ for(i=0; i < NELEM(motionmasks); i++) {
+
+ if(XCheckWindowEvent(Dsp, w, motionmasks[i], &ev) == False) {
+ trace("Event selected by %s was not generated.", eventmaskname(motionmasks[i]));
+ } else {
+ nevents++;
+ trace("Event selected by %s event was generated.", eventmaskname(motionmasks[i]));
+ }
+
+ }
+
+ if(b>=2)
+ buttonrel(Dsp, Button2);
+
+ if(b>=3)
+ buttonrel(Dsp, Button3);
+
+ if(b>=4)
+ buttonrel(Dsp, Button4);
+
+ if(b>=5)
+ buttonrel(Dsp, Button5);
+
+
+ /* Check that only one of the possible events was generated. */
+ if(nevents != 1) {
+ report("More than one of the selected motion events was generated.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>EXTERN
+unsigned long buttonmask[7] = { Button5MotionMask,Button4MotionMask,Button3MotionMask,
+ Button2MotionMask,Button1MotionMask,ButtonMotionMask,PointerMotionMask};
+
+unsigned int buttons[7] = { Button5, Button4, Button3, Button2, Button1, Button1, Button1 };
+
+>>ASSERTION Good B 1
+When a xname event is generated,
+then
+clients not having set
+.S Button1MotionMask ,
+.S Button2MotionMask ,
+.S Button3MotionMask ,
+.S Button4MotionMask ,
+.S Button5MotionMask ,
+.S ButtonMotionMask ,
+or
+.S PointerMotionMask
+event mask bits on the event window,
+are not delivered
+a xname event.
+>>STRATEGY
+If extended testing is required:
+ Verify that at least one button is supported.
+ Create a second client.
+ Create a window.
+ Select for something on the second client.
+ For each supported type of motion event :
+ Select the mask as the event mask for the first client.
+ Simulate the motion event.
+ Verify that the first client received the appropriate event.
+ Verify that the second client did not receive that event.
+>>CODE
+Display *client2;
+Window w;
+XEvent ev;
+int i;
+
+
+ /* If extended testing is required: */
+ if(noext(1))
+ return;
+
+ /* Verify that at least one button is supported. */
+ if(nbuttons() < 1) {
+ delete("No buttons are supported.");
+ return;
+ } else
+ CHECK;
+
+ /* Create a second client. */
+ client2 = opendisplay();
+
+ /* Create a window. */
+ w = defwin(Dsp);
+
+ /* Select for something on the second client. */
+ XSelectInput(client2, w, EnterWindowMask);
+
+ /* For each supported type of motion event : */
+ for(i = 5-nbuttons(); i<NELEM(buttonmask); i++) {
+
+ trace("Iteration : %d Event mask : %s Button : %s", i, eventmaskname(buttonmask[i]), buttonname((int)buttons[i]));
+
+ /* Select the mask as the event mask for the first client. */
+ XSelectInput(Dsp, w, buttonmask[i]);
+
+ /* Simulate the motion event. */
+ (void) warppointer(Dsp, w, 0,0);
+ XSync(Dsp, False);
+ XSync(client2, False);
+ if(buttonmask[i] != PointerMotionMask)
+ buttonpress(Dsp, buttons[i]);
+ (void) warppointer(Dsp, w, 10,10);
+ XSync(Dsp, False);
+ XSync(client2, False);
+
+ /* Verify that the first client received the appropriate event. */
+ if(XCheckWindowEvent(Dsp, w, buttonmask[i], &ev) == False) {
+ report("Expected %s event was not generated.", eventmaskname(buttonmask[i]));
+ FAIL;
+ } else {
+ CHECK;
+
+ /* Verify that the second client did not receive that event. */
+ if(XCheckWindowEvent(client2, w, buttonmask[i], &ev) != False) {
+ report("Unexpected %s event was generated.", eventmaskname(buttonmask[i]));
+ FAIL;
+ } else
+ CHECK;
+ }
+ if(buttonmask[i] != PointerMotionMask)
+ buttonrel(Dsp, buttons[i]);
+
+ }
+
+ CHECKPASS(1 + 2 * (nbuttons()+2));
+
+>>ASSERTION Good B 1
+When a xname event is delivered with
+.M is_hint
+set to
+.S NotifyHint ,
+then clients which have set
+.S PointerMotionHintMask
+and one or more of
+.S Button1MotionMask ,
+.S Button2MotionMask ,
+.S Button3MotionMask ,
+.S Button4MotionMask ,
+.S Button5MotionMask ,
+.S ButtonMotionMask ,
+or
+.S PointerMotionMask
+event mask bits on the event window may not be
+delivered another xname event until either the key or button
+state changes, the pointer leaves the event window or the client
+calls
+.S XQueryPointer
+or
+.S XGetMotionEvents .
+
+>>ASSERTION def
+When a xname event is generated, then all clients which have not set
+.S PointerMotionHintMask
+and have set one or more of
+.S Button1MotionMask ,
+.S Button2MotionMask ,
+.S Button3MotionMask ,
+.S Button4MotionMask ,
+.S Button5MotionMask ,
+.S ButtonMotionMask ,
+or
+.S PointerMotionMask
+event mask bits on the event window are delivered a
+xname event with
+.M is_hint
+set to
+.S NotifyNormal .
+
+>>ASSERTION Good A
+When a xname event is generated, then all clients which
+have set
+.S PointerMotionHintMask
+and one or more of
+.S Button1MotionMask ,
+.S Button2MotionMask ,
+.S Button3MotionMask ,
+.S Button4MotionMask ,
+.S Button5MotionMask ,
+.S ButtonMotionMask ,
+or
+.S PointerMotionMask event mask bits on the event window are
+delivered a xname event with
+.M is_hint
+set to
+.S NotifyHint
+or
+.S NotifyNormal .
+>>STRATEGY
+Create client2.
+Create window.
+Move pointer to inside of window.
+Set PointerMotionMask and PointerMotionHintMask event mask bits on window.
+Set PointerMotionMask and PointerMotionHintMask event mask bits on window
+with client2.
+Synthesize expected event.
+Call XWarpPointer to move the pointer with motion beginning and
+ending in window.
+Verify that a MotionNotify event was received.
+Verify event members.
+Verify that only one MotionNotify event was received.
+Verify that no other events were received.
+Verify that a MotionNotify event was received by client2.
+Verify event members for client2.
+Verify that only one MotionNotify event was received.
+Verify that no other events were received.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Window w;
+int x, y;
+XEvent event_return;
+XMotionEvent good;
+PointerPlace *warp;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can't open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, True);
+/* Move pointer to inside of window. */
+ warp = warppointer(display, w, 0, 0);
+ if (warp == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Set PointerMotionMask and PointerMotionHintMask event mask bits on window. */
+ XSelectInput(display, w, HINTMASK|MASK);
+ XSync(display, True);
+/* Set PointerMotionMask and PointerMotionHintMask event mask bits on window */
+/* with client2. */
+ XSelectInput(client2, w, HINTMASK|MASK);
+ XSync(client2, True);
+/* Synthesize expected event. */
+ x = 2;
+ y = 2;
+ good.type = MotionNotify;
+ /* ignore serial */
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.root = DRW(display);
+ good.subwindow = None;
+ /* ignore time */
+ good.x = x;
+ good.y = y;
+ ROOTCOORDSET(display, &good); /* x_root and y_root */
+ good.state = 0;
+ good.is_hint = NotifyNormal;
+ good.same_screen = True;
+/* Call XWarpPointer to move the pointer with motion beginning and */
+/* ending in window. */
+ XWarpPointer(display, None, w, 0, 0, 0, 0, x, y);
+/* Verify that a MotionNotify event was received. */
+ XSync(display, False);
+ if (!XCheckTypedWindowEvent(display, w, MotionNotify, &event_return)) {
+ report("No events delivered.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify is_hint is set to NotifyNormal or Notify Hint */
+ if(((XMotionEvent *) &event_return)->is_hint != NotifyNormal &&
+ ((XMotionEvent *) &event_return)->is_hint != NotifyHint) {
+ report("is_hint was set to 0x%x, expected 0x%x or 0x%x",
+ ((XMotionEvent *) &event_return)->is_hint,
+ NotifyNormal, NotifyHint);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ /* is_hint has been checked so don't bother reporting again */
+ good.is_hint = event_return.xmotion.is_hint;
+
+/* Verify event members. */
+ /* ignore serial */
+ good.serial = ((XMotionEvent *) &event_return)->serial = 0;
+ /* ignore time */
+ good.time = ((XMotionEvent *) &event_return)->time = 0;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Delivered event did not match expected event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that only one MotionNotify event was received. */
+ if (XCheckTypedWindowEvent(display, w, MotionNotify, &event_return)) {
+ report("Excess events generated.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no other events were received. */
+ if (XPending(display) > 0) {
+ delete("Unexpected events generated.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that a MotionNotify event was received by client2. */
+ XSync(client2, False);
+ if (!XCheckTypedWindowEvent(client2, w, MotionNotify, &event_return)) {
+ report("No events delivered to client2.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify is_hint is set to NotifyNormal or Notify Hint */
+ if(((XMotionEvent *) &event_return)->is_hint != NotifyNormal &&
+ ((XMotionEvent *) &event_return)->is_hint != NotifyHint) {
+ report("is_hint was set to 0x%x, expected 0x%x or 0x%x",
+ ((XMotionEvent *) &event_return)->is_hint,
+ NotifyNormal, NotifyHint);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ /* is_hint has been checked so don't bother reporting again */
+ good.is_hint = event_return.xmotion.is_hint;
+
+/* Verify event members for client2. */
+ good.display = client2;
+ /* ignore serial */
+ good.serial = ((XMotionEvent *) &event_return)->serial = 0;
+ /* ignore time */
+ good.time = ((XMotionEvent *) &event_return)->time = 0;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Delivered event did not match expected event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that only one MotionNotify event was received. */
+ if (XCheckTypedWindowEvent(client2, w, MotionNotify, &event_return)) {
+ report("Excess events generated for client2.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no other events were received. */
+ if (XPending(client2) > 0) {
+ delete("Unexpected events generated for client2.");
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(12);
+
+>>ASSERTION Good B 1
+When a xname event is generated
+and no client has selected
+.S Button1MotionMask ,
+.S Button2MotionMask ,
+.S Button3MotionMask ,
+.S Button4MotionMask ,
+.S Button5MotionMask ,
+.S ButtonMotionMask ,
+or
+.S PointerMotionMask
+event mask bits
+on the source window,
+then the event propagates,
+with propagation stopping at the root window of the screen or
+at the first window with
+.S Button1MotionMask ,
+.S Button2MotionMask ,
+.S Button3MotionMask ,
+.S Button4MotionMask ,
+.S Button5MotionMask ,
+.S ButtonMotionMask ,
+or
+.S PointerMotionMask
+event mask bits
+in its do-not-propagate mask,
+from the source window to
+the first ancestor window for which
+some client has selected for xname events.
+>>STRATEGY
+If extended is required:
+ Verify that at least one button is supported.
+ For each supported type of motion event :
+ Create a window.
+ Create a child of that window.
+ Create a grandchild of the window.
+ Select xname events on the root window of the screen.
+ Simulate a xname event on the grandchild.
+ Verify that a xname event was generated on the root.
+ Select xname events on the grandparent window.
+ Set the do_not_propagate mask on the child to xname events.
+ Simulate a xname event on the grandchild.
+ Verify no xname event was generated on the grandchild.
+ Verify no xname event was generated on the child.
+ Verify no xname event was generated on the parent.
+ Select xname events on the child window.
+ Set the do_not_propagate mask of the child to NoEventMask.
+ Simulate a xname event on the grandchild.
+ Verify that no xname event was generated on the grandchild.
+ Verify that no xname event was generated on the parent.
+ Verify that a xname event was generated on the child.
+>>CODE
+XEvent ev;
+Window w;
+Window w1;
+Window w2;
+XSetWindowAttributes atts;
+int i;
+
+/* If extended is required: */
+ if(noext(0))
+ return;
+
+/* Verify that at least one button is supported. */
+ if(nbuttons() < 1) {
+ delete("No buttons are supported.");
+ return;
+ } else
+ CHECK;
+
+/* For each supported type of motion event : */
+ for(i = 5-nbuttons(); i<NELEM(buttonmask); i++) {
+ trace("Iteration : %d Event mask : %s Button : %s", i, eventmaskname(buttonmask[i]), buttonname((int)buttons[i]));
+
+/* Create a window. */
+ w = defwin(Dsp);
+/* Create a child of that window. */
+ w1 = crechild(Dsp, w, (struct area *) NULL);
+/* Create a grandchild of the window. */
+ w2 = crechild(Dsp, w1, (struct area *) NULL);
+
+/* Select xname events on the root window of the screen. */
+ XSelectInput(Dsp, DRW(Dsp), buttonmask[i]);
+
+/* Simulate a xname event on the grandchild. */
+ (void) warppointer(Dsp, w2, 0,0);
+ XSync(Dsp, False);
+ if(buttonmask[i] != PointerMotionMask)
+ buttonpress(Dsp, buttons[i]);
+ (void) warppointer(Dsp, w2, 1,1);
+ if(buttonmask[i] != PointerMotionMask)
+ buttonrel(Dsp, buttons[i]);
+ XSync(Dsp, False);
+
+/* Verify that a xname event was generated on the root. */
+ if (XCheckWindowEvent(Dsp, DRW(Dsp), buttonmask[i], &ev) == False) {
+ report("Expected event (%s) not received.", eventmaskname(buttonmask[i]));
+ FAIL;
+ } else
+ CHECK;
+
+ XSelectInput(Dsp, DRW(Dsp), NoEventMask);
+
+/* Select xname events on the grandparent window. */
+ XSelectInput(Dsp, w, buttonmask[i]);
+
+/* Set the do_not_propagate mask on the child to xname events. */
+ atts.do_not_propagate_mask = buttonmask[i];
+ XChangeWindowAttributes(Dsp, w1, CWDontPropagate, &atts);
+
+/* Simulate a xname event on the grandchild. */
+ (void) warppointer(Dsp, w2, 0,0);
+ XSync(Dsp, False);
+ if(buttonmask[i] != PointerMotionMask)
+ buttonpress(Dsp, buttons[i]);
+ (void) warppointer(Dsp, w2, 1,1);
+ if(buttonmask[i] != PointerMotionMask)
+ buttonrel(Dsp, buttons[i]);
+ XSync(Dsp, False);
+
+/* Verify no xname event was generated on the grandchild. */
+ if (XCheckWindowEvent(Dsp, w2, buttonmask[i], &ev) != False) {
+ report("Unexpected event (%s) received.", eventmaskname(buttonmask[i]));
+ FAIL;
+ } else
+ CHECK;
+
+/* Verify no xname event was generated on the child. */
+ if (XCheckWindowEvent(Dsp, w1, buttonmask[i], &ev) != False) {
+ report("Unexpected event (%s) received.", eventmaskname(buttonmask[i]));
+ FAIL;
+ } else
+ CHECK;
+
+/* Verify no xname event was generated on the parent. */
+ if (XCheckWindowEvent(Dsp, w, buttonmask[i], &ev) != False) {
+ report("Unexpected event (%s) received.", eventmaskname(buttonmask[i]));
+ FAIL;
+ } else
+ CHECK;
+
+/* Select xname events on the child window. */
+ XSelectInput(Dsp, w1, buttonmask[i]);
+
+/* Set the do_not_propagate mask of the child to NoEventMask. */
+ atts.do_not_propagate_mask = NoEventMask;
+ XChangeWindowAttributes(Dsp, w1, CWDontPropagate, &atts);
+
+/* Simulate a xname event on the grandchild. */
+ (void) warppointer(Dsp, w2, 0,0);
+ XSync(Dsp, False);
+ if(buttonmask[i] != PointerMotionMask)
+ buttonpress(Dsp, buttons[i]);
+ (void) warppointer(Dsp, w2, 1,1);
+ if(buttonmask[i] != PointerMotionMask)
+ buttonrel(Dsp, buttons[i]);
+ XSync(Dsp, False);
+
+/* Verify that no xname event was generated on the grandchild. */
+ if (XCheckWindowEvent(Dsp, w2, buttonmask[i], &ev) != False) {
+ report("Unexpected event (%s) received.", eventmaskname(buttonmask[i]));
+ FAIL;
+ } else
+ CHECK;
+
+/* Verify that no xname event was generated on the parent. */
+ if (XCheckWindowEvent(Dsp, w, buttonmask[i], &ev) != False) {
+ report("Unexpected event (%s) received.", eventmaskname(buttonmask[i]));
+ FAIL;
+ } else
+ CHECK;
+
+/* Verify that a xname event was generated on the child. */
+ if (XCheckWindowEvent(Dsp, w1, buttonmask[i], &ev) == False) {
+ report("%s event was not delivered to selecting child window.", eventmaskname(buttonmask[i]));
+ FAIL;
+ } else
+ CHECK;
+
+ } /* for */
+
+
+ CHECKPASS(1 + (nbuttons()+2)*7);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M root
+>>#NOTEs is set to the source window's root window.
+>>ASSERTION Good A
+When a xname event is delivered
+and the source window is an inferior of the event window
+and the source window is a child of the event window,
+then
+.M subwindow
+is set to
+the source window.
+>>STRATEGY
+Create window hierarchy.
+Create the hierarchy.
+Move pointer to inside of window.
+Select no events on the sourcew.
+Set PointerMotionMask event mask bits on the eventw.
+Call XWarpPointer to move the pointer with motion beginning and
+ending in window.
+Verify that a MotionNotify event was received.
+Verify that subwindow is set to the source window.
+>>CODE
+int status;
+Display *display = Dsp;
+Winh *eventw;
+Winh *sourcew;
+XEvent good;
+Winhg winhg;
+PointerPlace *warp;
+
+/* Create window hierarchy. */
+ winhg.area.x = 0;
+ winhg.area.y = 0;
+ winhg.area.width = W_STDWIDTH;
+ winhg.area.height = W_STDHEIGHT;
+ winhg.border_width = 1;
+ eventw = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (eventw == (Winh *) NULL) {
+ delete("Could not create eventw");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.width /= 2;
+ winhg.area.height /= 2;
+ sourcew = winh_adopt(display, eventw, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (sourcew == (Winh *) NULL) {
+ delete("Could not create sourcew");
+ return;
+ }
+ else
+ CHECK;
+/* Create the hierarchy. */
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Move pointer to inside of window. */
+ warp = warppointer(display, sourcew->window, 0, 0);
+ if (warp == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Select no events on the sourcew. */
+ if (winh_selectinput(display, sourcew, NoEventMask))
+ return;
+ else
+ CHECK;
+/* Set PointerMotionMask event mask bits on the eventw. */
+ if (winh_selectinput(display, eventw, MASK))
+ return;
+ else
+ CHECK;
+ XSync(display, True);
+ good.type = MotionNotify;
+ good.xmotion.display = display;
+ good.xmotion.window = eventw->window;
+ good.xmotion.subwindow = sourcew->window;
+/* Call XWarpPointer to move the pointer with motion beginning and */
+/* ending in window. */
+ XWarpPointer(display, None, sourcew->window, 0, 0, 0, 0, 2, 2);
+/* Verify that a MotionNotify event was received. */
+ XSync(display, False);
+ if (winh_plant(sourcew, &good, NoEventMask, WINH_NOMASK))
+ return;
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL))
+ return;
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else
+ CHECK;
+ if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that subwindow is set to the source window. */
+ /* since only one event was expected, it must be first in list */
+ if (eventw->delivered->event->xmotion.subwindow != sourcew->window) {
+ report("Subwindow set to 0x%x, expected 0x%x",
+ eventw->delivered->event->xmotion.subwindow, sourcew->window);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+
+ CHECKPASS(10);
+>>ASSERTION Good A
+When a xname event is delivered
+and the source window is an inferior of the event window
+and the source window is not a child of the event window,
+then
+.M subwindow
+is set to
+the child of the event window that is
+an ancestor of the source window.
+>>STRATEGY
+Create window hierarchy.
+Create the hierarchy.
+Move pointer to inside of window.
+Select no events on the sourcew.
+Set PointerMotionMask event mask bits on the eventw.
+Call XWarpPointer to move the pointer with motion beginning and
+ending in window.
+Verify that a MotionNotify event was received.
+Verify that subwindow is set to the source window.
+>>CODE
+int status;
+Display *display = Dsp;
+Winh *eventw;
+Winh *ancestorw;
+Winh *sourcew;
+XEvent good;
+Winhg winhg;
+PointerPlace *warp;
+
+/* Create window hierarchy. */
+ winhg.area.x = 0;
+ winhg.area.y = 0;
+ winhg.area.width = W_STDWIDTH;
+ winhg.area.height = W_STDHEIGHT;
+ winhg.border_width = 1;
+ eventw = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (eventw == (Winh *) NULL) {
+ delete("Could not create eventw");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.width /= 2;
+ winhg.area.height /= 2;
+ ancestorw = winh_adopt(display, eventw, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (ancestorw == (Winh *) NULL) {
+ delete("Could not create ancestorw");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.width /= 2;
+ winhg.area.height /= 2;
+ sourcew = winh_adopt(display, ancestorw, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (sourcew == (Winh *) NULL) {
+ delete("Could not create sourcew");
+ return;
+ }
+ else
+ CHECK;
+/* Create the hierarchy. */
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Move pointer to inside of window. */
+ warp = warppointer(display, sourcew->window, 0, 0);
+ if (warp == (PointerPlace *) NULL)
+ return;
+ else
+ CHECK;
+/* Select no events on the sourcew. */
+ if (winh_selectinput(display, sourcew, NoEventMask))
+ return;
+ else
+ CHECK;
+/* Set PointerMotionMask event mask bits on the eventw. */
+ if (winh_selectinput(display, eventw, MASK))
+ return;
+ else
+ CHECK;
+ XSync(display, True);
+ good.type = MotionNotify;
+ good.xmotion.display = display;
+ good.xmotion.window = eventw->window;
+ good.xmotion.subwindow = ancestorw->window;
+/* Call XWarpPointer to move the pointer with motion beginning and */
+/* ending in window. */
+ XWarpPointer(display, None, sourcew->window, 0, 0, 0, 0, 2, 2);
+/* Verify that a MotionNotify event was received. */
+ XSync(display, False);
+ if (winh_plant(sourcew, &good, NoEventMask, WINH_NOMASK))
+ return;
+ else
+ CHECK;
+ if (winh_harvest(display, (Winh *) NULL))
+ return;
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else
+ CHECK;
+ if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else {
+/* Verify that subwindow is set to the source window. */
+ /* since only one event was expected, it must be first in list */
+ if (eventw->delivered->event->xmotion.subwindow != ancestorw->window) {
+ report("Subwindow set to 0x%x, expected 0x%x",
+ eventw->delivered->event->xmotion.subwindow, ancestorw->window);
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+
+ CHECKPASS(11);
+
+>>ASSERTION def
+When a xname event is delivered
+and the source window is not an inferior of the event window,
+then
+.M subwindow
+is set to
+.S None .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M time
+>>#NOTEs is set to
+>>#NOTEs the time in milliseconds at which the event was generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event window is on the same screen as the root window,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates of
+>>#NOTEs the final pointer position relative to the event window's origin.
+>>ASSERTION Good D 1
+If multiple screens are supported:
+When a xname event is delivered
+and the event and root windows are not on the same screen,
+then
+.M x
+and
+.M y
+are set to
+zero.
+>>STRATEGY
+If multiple screens are supported:
+ If extended testing is required:
+ Create a window on the default screen.
+ Create a window on the alternate screen.
+ Grab the pointer asynchronously for the first window selecting PointerMotion and ButtonMotion events.
+ Generate a PointerMotion event on the alternate window.
+ Verify that a PointerMotion event was generated with respect to the grabbing window.
+ Verify that the x and y event components were zero.
+ Generate a ButtonMotion mask on the alternate window.
+ Verify that a ButtonMotion event was generated with respect to the grabbing window.
+ Verify that the x and y event components were zero.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+
+/* If multiple screens are supported: */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ } else
+ CHECK;
+
+/* If extended testing is required: */
+ if(noext(1))
+ return;
+
+/* Create a window on the default screen. */
+ w = defwin(Dsp);
+/* Create a window on the alternate screen. */
+ w2 = defdraw(Dsp, VI_ALT_WIN);
+
+/* Grab the pointer asynchronously for the first window selecting PointerMotion and ButtonMotion events. */
+ if( XGrabPointer(Dsp, w, False, PointerMotionMask | ButtonMotionMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime) != GrabSuccess) {
+ delete("XGrabPointer() did not return GrabSuccess.");
+ return;
+ } else
+ CHECK;
+
+/* Generate a PointerMotion event on the alternate window. */
+ (void) warppointer(Dsp, w2, 0,0);
+ XSync(Dsp, True);
+ (void) warppointer(Dsp, w2, 10, 10);
+ XSync(Dsp, False);
+
+/* Verify that a PointerMotion event was generated with respect to the grabbing window. */
+ if (XCheckWindowEvent(Dsp, w, PointerMotionMask, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(MotionNotify));
+ FAIL;
+ } else {
+ CHECK;
+/* Verify that the x and y event components were zero. */
+ if(ev.xmotion.x != 0 || ev.xmotion.y != 0) {
+ report("The x (value %d) and y (value %d) components of the %s event were not set to zero.",
+ ev.xmotion.x, ev.xmotion.y, eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+/* Generate a ButtonMotion mask on the alternate window. */
+ (void) warppointer(Dsp, w2, 0,0);
+ XSync(Dsp, True);
+ buttonpress(Dsp, Button1);
+ (void) warppointer(Dsp, w2, 10, 10);
+ XSync(Dsp, False);
+ buttonrel(Dsp, Button1);
+
+/* Verify that a ButtonMotion event was generated with respect to the grabbing window. */
+ if (XCheckWindowEvent(Dsp, w, ButtonMotionMask, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(MotionNotify));
+ FAIL;
+ } else {
+ CHECK;
+/* Verify that the x and y event components were zero. */
+ if(ev.xmotion.x != 0 || ev.xmotion.y != 0) {
+ report("The x (value %d) and y (value %d) components of the %s event were not set to zero.",
+ ev.xmotion.x, ev.xmotion.y, eventname(EVENT));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabPointer(Dsp, CurrentTime);
+
+ CHECKPASS(6);
+
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x_root
+>>#NOTEs and
+>>#NOTEs .M y_root
+>>#NOTEs are set to coordinates of the pointer
+>>#NOTEs when the event was generated
+>>#NOTEs relative to the root window's origin.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M state
+>>#NOTEs is set to
+>>#NOTEs indicate the logical state
+>>#NOTEs of the pointer buttons,
+>>#NOTEs which is the bitwise OR of one or more of
+>>#NOTEs the button or modifier key masks
+>>#NOTEs .S Button1Mask ,
+>>#NOTEs .S Button2Mask ,
+>>#NOTEs .S Button3Mask ,
+>>#NOTEs .S Button4Mask ,
+>>#NOTEs .S Button5Mask ,
+>>#NOTEs .S ShiftMask ,
+>>#NOTEs .S LockMask ,
+>>#NOTEs .S ControlMask ,
+>>#NOTEs .S Mod1Mask ,
+>>#NOTEs .S Mod2Mask ,
+>>#NOTEs .S Mod3Mask ,
+>>#NOTEs .S Mod4Mask ,
+>>#NOTEs and
+>>#NOTEs .S Mod5Mask .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M keycode
+>>#NOTEs is set to
+>>#NOTEs a number that represents the physical key on the keyboard.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event and root windows are on the same screen,
+>>#NOTEs then
+>>#NOTEs .M same_screen
+>>#NOTEs is set to
+>>#NOTEs .S True .
+>>ASSERTION Good D 1
+If multiple screens are supported:
+When a xname event is delivered
+and the event and root windows are not on the same screen,
+then
+.M same_screen
+is set to
+.S False .
+>>STRATEGY
+If multiple screens are supported:
+ If extended testing is required:
+ Create a window on the default screen.
+ Create a window on the alternate screen.
+ Grab the pointer asynchronously for the first window selecting PointerMotion and ButtonMotion events.
+ Generate a PointerMotion event on the alternate window.
+ Verify that a PointerMotion event was generated with respect to the grabbing window.
+ Verify that same_screen event component was False.
+ Generate a ButtonMotion event on the alternate window.
+ Verify that a ButtonMotion event was generated with respect to the grabbing window.
+ Verify that same_screen event component was False.
+>>CODE
+Window w;
+Window w2;
+XEvent ev;
+
+/* If multiple screens are supported: */
+ if (config.alt_screen == -1) {
+ unsupported("Multiple screens not supported.");
+ return;
+ } else
+ CHECK;
+
+/* If extended testing is required: */
+ if(noext(1))
+ return;
+
+/* Create a window on the default screen. */
+ w = defwin(Dsp);
+/* Create a window on the alternate screen. */
+ w2 = defdraw(Dsp, VI_ALT_WIN);
+
+/* Grab the pointer asynchronously for the first window selecting PointerMotion and ButtonMotion events. */
+ if( XGrabPointer(Dsp, w, False, PointerMotionMask | ButtonMotionMask, GrabModeAsync, GrabModeAsync, None, None, CurrentTime) != GrabSuccess) {
+ delete("XGrabPointer() did not return GrabSuccess.");
+ return;
+ } else
+ CHECK;
+
+/* Generate a PointerMotion event on the alternate window. */
+ (void) warppointer(Dsp, w2, 0,0);
+ XSync(Dsp, True);
+ (void) warppointer(Dsp, w2, 10, 10);
+ XSync(Dsp, False);
+
+/* Verify that a PointerMotion event was generated with respect to the grabbing window. */
+ if (XCheckWindowEvent(Dsp, w, PointerMotionMask, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(MotionNotify));
+ FAIL;
+ } else {
+ CHECK;
+/* Verify that same_screen event component was False. */
+ if(ev.xmotion.same_screen != False ) {
+ report("The same_screen component of the %s event was not set correctly.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+/* Generate a ButtonMotion event on the alternate window. */
+ (void) warppointer(Dsp, w2, 0,0);
+ XSync(Dsp, True);
+ buttonpress(Dsp, Button1);
+ (void) warppointer(Dsp, w2, 10, 10);
+ XSync(Dsp, False);
+ buttonrel(Dsp, Button1);
+
+/* Verify that a ButtonMotion event was generated with respect to the grabbing window. */
+ if (XCheckWindowEvent(Dsp, w, ButtonMotionMask, &ev) == False) {
+ report("Expected event (%s) not received.", eventname(MotionNotify));
+ FAIL;
+ } else {
+ CHECK;
+/* Verify that same_screen event component was False. */
+ if(ev.xmotion.same_screen != False ) {
+ report("The same_screen component of the %s event was not set correctly.", eventname(ButtonPress));
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XUngrabPointer(Dsp, CurrentTime);
+
+ CHECKPASS(6);
diff --git a/xc/test/xsuite/xtest/tset/CH08/nexps/nexps.m b/xc/test/xsuite/xtest/tset/CH08/nexps/nexps.m
new file mode 100644
index 000000000..a2e81f39b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/nexps/nexps.m
@@ -0,0 +1,104 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE NoExpose CH08
+>>ASSERTION Good A
+There are no assertions in sections 8.1-8.4 for xname events.
+There are already assertions for
+.F XCopyArea
+and
+.F XCopyPlane
+covering xname events.
+>>STRATEGY
+Put out a message explaining that there are no specific assertions for
+xname events in sections 8.1-8.4, and that delivery of xname events is
+covered in XCopyPlane and XCopyArea.
+>>CODE
+
+ report("There are no specific assertions for %s events in sections 8.1-8.4.", TestName);
+ report("Delivery of %s events is covered in XCopyPlane and XCopyArea.", TestName);
+ tet_result(TET_NOTINUSE);
+
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a call to
+>>#NOTEm .F XCopyArea
+>>#NOTEm or
+>>#NOTEm .F XCopyPlane
+>>#NOTEm is made
+>>#NOTEm and a
+>>#NOTEm .S GraphicsExpose
+>>#NOTEm event is not generated
+>>#NOTEm and the graphics-expose attribute
+>>#NOTEm of the graphics context is set to
+>>#NOTEm .S True ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M drawable
+>>#NOTEs is set to
+>>#NOTEs the drawable of the destination region on
+>>#NOTEs which the graphics request was performed.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M major_code
+>>#NOTEs is set to either
+>>#NOTEs .S X_CopyArea
+>>#NOTEs or
+>>#NOTEs .S X_CopyPlane
+>>#NOTEs and
+>>#NOTEs .M minor_code
+>>#NOTEs is set to zero.
diff --git a/xc/test/xsuite/xtest/tset/CH08/nxtevnt/nxtevnt.m b/xc/test/xsuite/xtest/tset/CH08/nxtevnt/nxtevnt.m
new file mode 100644
index 000000000..97c8a9d63
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/nxtevnt/nxtevnt.m
@@ -0,0 +1,184 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XNextEvent CH08
+void
+XNextEvent(display, event_return)
+Display *display = Dsp;
+XEvent *event_return = &_event;
+>>EXTERN
+static XEvent _event;
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_() \
+ _startcall(display);\
+ XNextEvent(display, event_return);\
+ _endcall(display)
+>>ASSERTION Good A
+When the event queue is not empty,
+the a call to xname
+returns the first event from the event queue in
+.A event_return .
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XNextEvent.
+Verify that XNextEvent returned the correct event.
+>>CODE
+XEvent event;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Call XNextEvent. */
+ _xcall_();
+/* Verify that XNextEvent returned the correct event. */
+ if (event_return->type != event.type) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+A call to xname removes the returned event from the event queue.
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put a three events on the event queue.
+Call XNextEvent.
+Verify that XNextEvent returned the correct event.
+Call XNextEvent.
+Verify that XNextEvent returned the correct event.
+Call XNextEvent.
+Verify that XNextEvent returned the correct event.
+Verify that the event queue is now empty.
+>>CODE
+XEvent event;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put a three events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ XPutBackEvent(display, &event);
+ XPutBackEvent(display, &event);
+/* Call XNextEvent. */
+ _xcall_();
+/* Verify that XNextEvent returned the correct event. */
+ if (event_return->type != event.type) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XNextEvent. */
+ _xcall_();
+/* Verify that XNextEvent returned the correct event. */
+ if (event_return->type != event.type) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XNextEvent. */
+ _xcall_();
+/* Verify that XNextEvent returned the correct event. */
+ if (event_return->type != event.type) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that the event queue is now empty. */
+ if (XPending(display) != 0) {
+ report("Events not removed from the event queue.");
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(4);
+>>ASSERTION Good A
+When the event queue is empty,
+then a call to xname
+flushes the output buffer and
+blocks until an event is received and
+returns the event in
+.A event_return .
+>>STRATEGY
+Create bad pixmap.
+Discard all events on the event queue.
+Call XFreePixmap with bad pixmap.
+Call XNextEvent and verify that blocking did occur.
+Verify that output buffer was flushed.
+>>CODE
+Block_Info info;
+int block_status;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Call XNextEvent and verify that blocking did occur. */
+ XNextEvent_Type(info);
+ block_status = block(display, (XEvent *) NULL, &info);
+ if (block_status == -1)
+ return;
+ else
+ CHECK;
+ if (block_status == 0) {
+ report("Blocking did not occur.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that the output buffer was flushed. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() != Success) {
+ report("The output buffer was not flushed.");
+ XFreePixmap(display, pm);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(4);
diff --git a/xc/test/xsuite/xtest/tset/CH08/pkevnt/pkevnt.m b/xc/test/xsuite/xtest/tset/CH08/pkevnt/pkevnt.m
new file mode 100644
index 000000000..5738f1e6c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/pkevnt/pkevnt.m
@@ -0,0 +1,197 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XPeekEvent CH08
+void
+XPeekEvent(display, event_return)
+Display *display = Dsp;
+XEvent *event_return = &_event;
+>>EXTERN
+static XEvent _event;
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_() \
+ _startcall(display);\
+ XPeekEvent(display, event_return);\
+ _endcall(display)
+>>ASSERTION Good A
+A call to xname
+returns the first event from the event queue in
+.A event_return .
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XPeekEvent.
+Verify that XPeekEvent returned the correct event.
+>>CODE
+XEvent event;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Call XPeekEvent. */
+ _xcall_();
+/* Verify that XPeekEvent returned the correct event. */
+ if (event_return->type != event.type) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+A call to xname does not remove
+.A event_return
+from the event queue.
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XPending to get the current event queue size.
+Call XPeekEvent.
+Verify that XPeekEvent returned the correct event.
+Call XPending to get the current event queue size.
+Verify that size of the event queue has not changed.
+Call XPeekEvent.
+Verify that XPeekEvent returned the same event as last time.
+Call XPending to get the current event queue size.
+Verify that size of the event queue has not changed.
+>>CODE
+int oldqsize;
+int newqsize;
+XEvent event;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Call XPending to get the current event queue size. */
+ oldqsize = XPending(display);
+/* Call XPeekEvent. */
+ _xcall_();
+/* Verify that XPeekEvent returned the correct event. */
+ if (event_return->type != event.type) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XPending to get the current event queue size. */
+ newqsize = XPending(display);
+/* Verify that size of the event queue has not changed. */
+ if (oldqsize != newqsize) {
+ report("Event queue size %d, expected %d", newqsize, oldqsize);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XPeekEvent. */
+ _xcall_();
+/* Verify that XPeekEvent returned the same event as last time. */
+ if (event_return->type != event.type) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XPending to get the current event queue size. */
+ newqsize = XPending(display);
+/* Verify that size of the event queue has not changed. */
+ if (oldqsize != newqsize) {
+ report("Event queue size %d, expected %d", newqsize, oldqsize);
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(4);
+>>ASSERTION Good A
+When the event queue is empty,
+then a call to xname
+flushes the output buffer and
+blocks until an event is received and
+returns the event in
+.A event_return .
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Call XPeekEvent and verify that blocking did occur.
+Verify that the output buffer was flushed.
+>>CODE
+Block_Info info;
+int block_status;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Call XPeekEvent and verify that blocking did occur. */
+ XPeekEvent_Type(info);
+ block_status = block(display, (XEvent *) NULL, &info);
+ if (block_status == -1)
+ return;
+ else
+ CHECK;
+ if (block_status == 0) {
+ report("Blocking did not occur.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that the output buffer was flushed. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() != Success) {
+ report("The output buffer was not flushed.");
+ XFreePixmap(display, pm);
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(4);
diff --git a/xc/test/xsuite/xtest/tset/CH08/pkifevnt/pkifevnt.m b/xc/test/xsuite/xtest/tset/CH08/pkifevnt/pkifevnt.m
new file mode 100644
index 000000000..6d5557b44
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/pkifevnt/pkifevnt.m
@@ -0,0 +1,350 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XPeekIfEvent CH08
+void
+XPeekIfEvent(display, event_return, predicate, arg)
+Display *display = Dsp;
+XEvent *event_return = &_event;
+Predicate predicate = _predicate;
+char *arg = (char *) 0;
+>>EXTERN
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_() \
+ _startcall(display);\
+ XPeekIfEvent(display, event_return, predicate, arg);\
+ _endcall(display)
+static XEvent _event;
+
+/*
+ * _predicate - a predicate procedure
+ *
+ * _predicate returns True only after it has been invoked the specified
+ * number of times (_pred_max). _pred_cnt is used to keep track of the
+ * number of invocations. _pred_retval always contains the previous
+ * _predicate return value. _pred_true is set to True if _predicate is
+ * ever invoked while _pred_retval is set to True. _pred_event contains
+ * a copy of the event most recently passed to _predicate.
+ *
+ * These variables should be initialized by a call to PRED_SETUP() prior
+ * to (indirectly!) invoking the predicate procedure. PRED_SETUP takes
+ * an argument which specifies at which invocation _predicate should
+ * start returning True.
+ */
+static int _pred_max;
+static int _pred_cnt; /* _predicate invocation counter */
+static XEvent _pred_event; /* last event passed to _predicate */
+static int _pred_retval; /* last returnvalue from _predicate */
+static int _pred_true; /* True when True previously returned */
+
+static int
+_predicate (display, event, arg)
+Display *display;
+XEvent *event;
+char *arg;
+{
+#ifdef lint
+ XCloseDisplay(display);
+ *arg = '\0';
+#endif
+ _pred_event = *event;
+ if (_pred_retval == True)
+ _pred_true = True;
+ _pred_retval = ((++_pred_cnt >= _pred_max) ? True : False);
+ return(_pred_retval);
+}
+
+#define PRED_SETUP(max) \
+ _pred_max = (max);\
+ _pred_cnt = 0;\
+ _pred_retval = False;\
+ _pred_true = False
+
+>>ASSERTION Good A
+A call to xname
+calls
+.A predicate
+once for each event in the event queue until
+.A predicate
+returns
+.S True .
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Set up predicate procedure.
+Call XPeekIfEvent.
+Verify that predicate was called the correct number of times.
+Verify that predicate returned True at most recent invocation.
+Verify that XIfEvent did not continue to call predicate
+after predicate returned True.
+>>CODE
+XEvent event;
+int callcnt;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 2);
+/* Call XPeekIfEvent. */
+ _xcall_();
+/* Verify that predicate was called the correct number of times. */
+ if (_pred_cnt != callcnt) {
+ report("predicate called %d times, expected %d", _pred_cnt, callcnt);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that predicate returned True at most recent invocation. */
+ if (_pred_retval != True) {
+ report("predicate returned %d, expecting %d", _pred_retval, True);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XIfEvent did not continue to call predicate */
+/* after predicate returned True. */
+ if (_pred_true == True) {
+ report("Did not return when predicate returned True.");
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+When
+.A predicate
+returns
+.S True ,
+then xname returns the
+.A event
+passed to
+.A predicate
+in
+.A event_return .
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Set up predicate procedure.
+Call XPeekIfEvent.
+Verify that predicate returned True at most recent invocation.
+Verify that event_return is the same as the event passed to predicate.
+Verify that event_return is the expected event.
+Verify that XIfEvent did not continue to call predicate
+after predicate returned True.
+>>CODE
+XEvent event;
+int callcnt;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 2);
+/* Call XPeekIfEvent. */
+ _xcall_();
+/* Verify that predicate returned True at most recent invocation. */
+ if (_pred_retval != True) {
+ report("predicate returned %d, expecting %d", _pred_retval, True);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event_return is the same as the event passed to predicate. */
+ if (event_return->type != _pred_event.type) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(_pred_event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event_return is the expected event. */
+ if (event_return->type != KeyRelease) {
+ report("Returned %s, expected %s", eventname(event_return->type), eventname(KeyRelease));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XIfEvent did not continue to call predicate */
+/* after predicate returned True. */
+ if (_pred_true == True) {
+ report("Did not return when predicate returned True.");
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(4);
+>>ASSERTION Good A
+A call to xname
+does not remove
+.A event_return
+from the event queue.
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XPending to get the current event queue size.
+Set up predicate procedure.
+Call XPeekIfEvent.
+Call XPending to get the current event queue size.
+Verify that size of the event queue has not changed.
+Verify that the returned event was not removed from the event queue.
+>>CODE
+XEvent event;
+XEvent nextevent;
+int callcnt;
+int oldqsize;
+int newqsize;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+ event.type = KeyRelease;
+ XPutBackEvent(display, &event);
+ event.type = ButtonPress;
+ XPutBackEvent(display, &event);
+/* Call XPending to get the current event queue size. */
+ oldqsize = XPending(display);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 1);
+/* Call XPeekIfEvent. */
+ _xcall_();
+/* Call XPending to get the current event queue size. */
+ newqsize = XPending(display);
+/* Verify that size of the event queue has not changed. */
+ if (newqsize != oldqsize) {
+ report("Event queue size %d, expected %d", newqsize, oldqsize);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that the returned event was not removed from the event queue. */
+ XNextEvent(display, &nextevent);
+ if (event_return->type != nextevent.type) {
+ report("Event removed from queue, returned %s, expected %s", eventname(event_return->type), eventname(ButtonPress));
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(2);
+>>ASSERTION Good A
+When on a call to xname
+.A predicate
+has not returned
+.S True
+after having been called once for each event in the event queue,
+then xname flushes the output buffer and blocks until a matching
+event is received.
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Call XPutBackEvent to put an event on the event queue.
+Set up predicate procedure.
+Call XPeekIfEvent and verify that blocking did occur.
+Verify that the output buffer was flushed.
+Verify that predicate was called the correct number of times.
+Verify that predicate returned True at most recent invocation.
+>>CODE
+XEvent event;
+int callcnt;
+Block_Info info;
+int block_status;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Call XPutBackEvent to put an event on the event queue. */
+ event.type = KeyPress;
+ XPutBackEvent(display, &event);
+/* Set up predicate procedure. */
+ PRED_SETUP(callcnt = 2);
+/* Call XPeekIfEvent and verify that blocking did occur. */
+ XPeekIfEvent_Type(info, predicate, arg);
+ block_status = block(display, (XEvent *) NULL, &info);
+ if (block_status == -1)
+ return;
+ else
+ CHECK;
+ if (block_status == 0) {
+ report("Blocking did not occur.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that the output buffer was flushed. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() != Success) {
+ report("The output buffer was not flushed.");
+ XFreePixmap(display, pm);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that predicate was called the correct number of times. */
+ if (_pred_cnt != callcnt) {
+ report("predicate called %d times, expected %d", _pred_cnt, callcnt);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that predicate returned True at most recent invocation. */
+ if (_pred_retval != True) {
+ report("predicate returned %d, expecting %d", _pred_retval, True);
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(6);
diff --git a/xc/test/xsuite/xtest/tset/CH08/pndng/pndng.m b/xc/test/xsuite/xtest/tset/CH08/pndng/pndng.m
new file mode 100644
index 000000000..8482abe51
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/pndng/pndng.m
@@ -0,0 +1,162 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XPending CH08
+int
+XPending(display)
+Display *display = Dsp;
+>>EXTERN
+
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_(return_value) \
+ _startcall(display);\
+ return_value = XPending(display);\
+ _endcall(display)
+>>ASSERTION Good A
+>>#NOTE These assertions are similar to those in
+>>#NOTE XEventsQueued for the QueuedAfterFlush tests.
+When the number of events already in the event queue is non-zero,
+then a call to xname
+returns the number of events in the event queue.
+>>STRATEGY
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XPending.
+Verify that XPending returned the correct number of events.
+>>CODE
+int eventsput;
+int event_count;
+XEvent event;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ event.type = MapNotify;
+ eventsput = 0;
+ XPutBackEvent(display, &event), eventsput++;
+ XPutBackEvent(display, &event), eventsput++;
+ XPutBackEvent(display, &event), eventsput++;
+/* Call XPending. */
+ _xcall_(event_count);
+/* Verify that XPending returned the correct number of events. */
+ if (event_count != eventsput) {
+ report("Returned %d, expected %d", event_count, eventsput);
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(1);
+>>ASSERTION Good A
+When there are no events in the event queue,
+then a call to xname
+flushes the output buffer.
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Call XPending.
+Empty the buffer.
+Ensure the server has dealt with anything flushed to it: do XSync()
+Verify that the output buffer was flushed by effect on server.
+Verify that XPending returned the correct number of events.
+>>CODE
+int event_count;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Call XPending. */
+ _xcall_(event_count);
+/* Empty the buffer. */
+ (void)XTestDiscard(display);
+/* Ensure the server has dealt with anything flushed to it: do XSync() */
+ XSync(display, False);
+/* Verify that the output buffer was flushed by effect on server. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() != Success) {
+ report("The output buffer was not flushed.");
+ XFreePixmap(display, pm);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that XPending returned the correct number of events. */
+ if (event_count != 0) {
+ report("Returned %d, expected none", event_count);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+When there are no events in the event queue,
+then a call to xname
+attempts to read more events out of the client's connection
+without blocking
+and returns the number read.
+>>STRATEGY
+Discard all events on the event queue.
+Call XPending and verify that blocking did not occur.
+Discard all events on the event queue.
+>>CODE
+Block_Info info;
+int block_status;
+
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPending and verify that blocking did not occur. */
+ XPending_Type(info);
+ block_status = block(display, (XEvent *) NULL, &info);
+ if (block_status == -1)
+ return;
+ else
+ CHECK;
+ if (block_status == 1) {
+ report("Blocking occurred with QueuedAfterFlush when it should not have.");
+ FAIL;
+ }
+ else
+ CHECK;
+ if (info.int_return != 0) {
+ delete("Unexpected number of events in event queue: %d", info.int_return);
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+ CHECKPASS(3);
diff --git a/xc/test/xsuite/xtest/tset/CH08/prprtyntfy/prprtyntfy.m b/xc/test/xsuite/xtest/tset/CH08/prprtyntfy/prprtyntfy.m
new file mode 100644
index 000000000..74771d615
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/prprtyntfy/prprtyntfy.m
@@ -0,0 +1,243 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE PropertyNotify CH08
+>>EXTERN
+#include "Xatom.h"
+#define EVENT PropertyNotify
+#define MASK PropertyChangeMask
+>>ASSERTION Good A
+When a xname event is generated,
+then
+all clients having set
+.S PropertyChangeMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Create window.
+Select for PropertyNotify events using PropertyChangeMask.
+Select for PropertyNotify events using PropertyChangeMask with client2.
+Select for no events with client3.
+Create atom for property.
+Generate PropertyNotify event.
+Verify that a PropertyNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that a PropertyNotify event was delivered to client2.
+Verify that event member fields are correctly set.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window w;
+int count;
+XEvent event_return;
+XPropertyEvent good;
+Atom atom;
+int data = 42;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select for PropertyNotify events using PropertyChangeMask. */
+ XSelectInput(display, w, MASK);
+/* Select for PropertyNotify events using PropertyChangeMask with client2. */
+ XSelectInput(client2, w, MASK);
+/* Select for no events with client3. */
+ XSelectInput(client3, w, NoEventMask);
+/* Create atom for property. */
+ atom = XInternAtom(display, XT_TIMESTAMP, False);
+ if (atom == None) {
+ delete("XInternAtom of '%s' failed.", XT_TIMESTAMP);
+ return;
+ }
+ else
+ CHECK;
+/* Generate PropertyNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XChangeProperty(display, w, atom, XA_INTEGER, 32, PropModeReplace, (unsigned char *)&data, 1);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a PropertyNotify event was delivered. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xproperty;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.atom = atom;
+ good.state = PropertyNewValue;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a PropertyNotify event was delivered to client2. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(client2, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xproperty;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = client2;
+ good.window = w;
+ good.atom = atom;
+ good.state = PropertyNewValue;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event for client2");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(8);
+>>ASSERTION def
+>>#NOTE Tested for in previous assertion.
+When a xname event is generated,
+then
+clients not having set
+.S PropertyChangeMask
+event mask bits on the event window are not delivered
+a xname event.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window's property changes,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M atom
+>>#NOTEs is set to the property's atom.
+>>#NOTEm >>ASSERTION
+>>#NOTEm >>#NOTE
+>>#NOTEm >>#NOTE ``Changed'' includes adding zero-length data or replacing all or part of
+>>#NOTEm >>#NOTE a property with identical data.
+>>#NOTEm >>#NOTE
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the property was changed by a call to
+>>#NOTEm .F XChangeProperty ,
+>>#NOTEm .F XRotateWindowProperties ,
+>>#NOTEm .F XChangeProperty ,
+>>#NOTEm or
+>>#NOTEm .F XRotateWindowProperties ,
+>>#NOTEm then
+>>#NOTEm .M state
+>>#NOTEm is set to
+>>#NOTEm .S PropertyNewValue .
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the property was deleted by a call to
+>>#NOTEm .F XDeleteProperty
+>>#NOTEm or by a call to
+>>#NOTEm .F XGetWindowProperty
+>>#NOTEm with a delete argument of
+>>#NOTEm .S True ,
+>>#NOTEm then
+>>#NOTEm .M state
+>>#NOTEm is set to
+>>#NOTEm .S PropertyDelete .
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE
+>>#NOTEs >>#NOTE Untestable?
+>>#NOTEs >>#NOTE
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M time
+>>#NOTEs is set to
+>>#NOTEs the server time when the property was changed.
diff --git a/xc/test/xsuite/xtest/tset/CH08/ptbckevnt/ptbckevnt.m b/xc/test/xsuite/xtest/tset/CH08/ptbckevnt/ptbckevnt.m
new file mode 100644
index 000000000..64339bed4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/ptbckevnt/ptbckevnt.m
@@ -0,0 +1,84 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XPutBackEvent CH08
+void
+XPutBackEvent(display, event)
+Display *display = Dsp;
+XEvent *event = &_event;
+>>EXTERN
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_() \
+ _startcall(display);\
+ XPutBackEvent(display, event);\
+ _endcall(display)
+static XEvent _event;
+>>ASSERTION Good A
+A call to xname pushes a copy of
+.A event
+onto the head of the display's event queue.
+>>STRATEGY
+Call XSync to empty event queue.
+Call XPutBackEvent to push event onto the head of the event queue.
+Call XPeekEvent to verify that first event is the event that was pushed.
+Call XPutBackEvent to push another event onto the head of the event queue.
+Call XPeekEvent to verify that first event is the event that was pushed.
+>>CODE
+XEvent event_return;
+
+/* Call XSync to empty event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to push event onto the head of the event queue. */
+ event->type = ButtonPress;
+ _xcall_();
+/* Call XPeekEvent to verify that first event is the event that was pushed. */
+ XPeekEvent(display, &event_return);
+ if (event_return.type != event->type) {
+ report("Returned %s, expected %s", eventname(event_return.type), eventname(event->type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XPutBackEvent to push another event onto the head of the event queue. */
+ event->type = KeyPress;
+ _xcall_();
+/* Call XPeekEvent to verify that first event is the event that was pushed. */
+ XPeekEvent(display, &event_return);
+ if (event_return.type != event->type) {
+ report("Returned %s, expected %s", eventname(event_return.type), eventname(event->type));
+ FAIL;
+ }
+ else
+ CHECK;
+ XSync(display, True);
+
+ CHECKPASS(2);
+>>ASSERTION Good B 5
+A call to xname
+can be made an unlimited number of times in succession.
+>>STRATEGY
+Call XPutBackEvent 1000 times.
+>>CODE
+int i;
+
+/* Call XPutBackEvent 1000 times. */
+ event->type = ButtonPress;
+ for (i=0; i<1000; i++) {
+ _xcall_();
+ }
+ UNTESTED;
diff --git a/xc/test/xsuite/xtest/tset/CH08/rprntntfy/rprntntfy.m b/xc/test/xsuite/xtest/tset/CH08/rprntntfy/rprntntfy.m
new file mode 100644
index 000000000..d3877fc24
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/rprntntfy/rprntntfy.m
@@ -0,0 +1,435 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ReparentNotify CH08
+>>EXTERN
+#define EVENT ReparentNotify
+#define MASK StructureNotifyMask
+#define MASKP SubstructureNotifyMask
+>>ASSERTION Good A
+When a xname event is generated,
+then all clients having set
+.S StructureNotifyMask
+event mask bits on the reparented window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Create parent window.
+Create window.
+Select for ReparentNotify events using StructureNotifyMask.
+Select for ReparentNotify events using StructureNotifyMask with client2.
+Select for no events with client3.
+Generate ReparentNotify event.
+Verify that a ReparentNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that a ReparentNotify event was delivered to client2.
+Verify that event member fields are correctly set.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window parent, w;
+int count;
+XEvent event_return;
+XReparentEvent good;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+ /*
+ * The order in which these windows are created is critical.
+ * If the order were reversed, a BadWindow error would result
+ * when the resource registration routines destroyed these windows.
+ */
+/* Create parent window. */
+ parent = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select for ReparentNotify events using StructureNotifyMask. */
+ XSelectInput(display, w, MASK);
+/* Select for ReparentNotify events using StructureNotifyMask with client2. */
+ XSelectInput(client2, w, MASK);
+/* Select for no events with client3. */
+ XSelectInput(client3, w, NoEventMask);
+/* Generate ReparentNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XReparentWindow(display, w, parent, 1, 1);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a ReparentNotify event was delivered. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xreparent;
+ good.type = EVENT;
+ good.event = w;
+ good.window = w;
+ good.parent = parent;
+ good.x = 1;
+ good.y = 1;
+ good.override_redirect = config.debug_override_redirect;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a ReparentNotify event was delivered to client2. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(client2, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xreparent;
+ good.type = EVENT;
+ good.event = w;
+ good.window = w;
+ good.parent = parent;
+ good.x = 1;
+ good.y = 1;
+ good.override_redirect = config.debug_override_redirect;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event for client2");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(7);
+>>ASSERTION Good A
+When a xname event is generated,
+then all clients having set
+.S SubstructureNotifyMask
+event mask bits on the parent of the reparented window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Create parent window.
+Create window.
+Select for ReparentNotify events on new parent using SubstructureNotifyMask.
+Select for ReparentNotify events on old parent using SubstructureNotifyMask.
+Select for ReparentNotify events on new parent using SubstructureNotifyMask with client2.
+Select for ReparentNotify events on old parent using SubstructureNotifyMask with client2.
+Select for no events on new parent with client3.
+Select for no events on old parent with client3.
+Generate ReparentNotify event.
+Verify that a ReparentNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that a ReparentNotify event was delivered for oldparent.
+Verify that event member fields are correctly set.
+Verify that a ReparentNotify event was delivered to client2.
+Verify that event member fields are correctly set.
+Verify that a ReparentNotify event was delivered to client2 for old parent.
+Verify that event member fields are correctly set.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window oldparent, parent, w;
+int count;
+XEvent event_return;
+XReparentEvent good;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+ oldparent = DRW(display);
+ /*
+ * The order in which these windows are created is critical.
+ * If the order were reversed, a BadWindow error would result
+ * when the resource registration routines destroyed these windows.
+ */
+/* Create parent window. */
+ parent = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select for ReparentNotify events on new parent using SubstructureNotifyMask. */
+ XSelectInput(display, parent, MASKP);
+/* Select for ReparentNotify events on old parent using SubstructureNotifyMask. */
+ XSelectInput(display, oldparent, MASKP);
+/* Select for ReparentNotify events on new parent using SubstructureNotifyMask with client2. */
+ XSelectInput(client2, parent, MASKP);
+/* Select for ReparentNotify events on old parent using SubstructureNotifyMask with client2. */
+ XSelectInput(client2, oldparent, MASKP);
+/* Select for no events on new parent with client3. */
+ XSelectInput(client3, parent, NoEventMask);
+/* Select for no events on old parent with client3. */
+ XSelectInput(client3, oldparent, NoEventMask);
+/* Generate ReparentNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XReparentWindow(display, w, parent, 1, 1);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a ReparentNotify event was delivered. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, parent, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xreparent;
+ good.type = EVENT;
+ good.event = parent;
+ good.window = w;
+ good.parent = parent;
+ good.x = 1;
+ good.y = 1;
+ good.override_redirect = config.debug_override_redirect;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a ReparentNotify event was delivered for oldparent. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, oldparent, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xreparent;
+ good.type = EVENT;
+ good.event = oldparent;
+ good.window = w;
+ good.parent = parent;
+ good.x = 1;
+ good.y = 1;
+ good.override_redirect = config.debug_override_redirect;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a ReparentNotify event was delivered to client2. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(client2, parent, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xreparent;
+ good.type = EVENT;
+ good.event = parent;
+ good.window = w;
+ good.parent = parent;
+ good.x = 1;
+ good.y = 1;
+ good.override_redirect = config.debug_override_redirect;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event for client2");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a ReparentNotify event was delivered to client2 for old parent. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(client2, oldparent, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xreparent;
+ good.type = EVENT;
+ good.event = oldparent;
+ good.window = w;
+ good.parent = parent;
+ good.x = 1;
+ good.y = 1;
+ good.override_redirect = config.debug_override_redirect;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event for client2");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(11);
+>>ASSERTION def
+>>#NOTE Tested for in previous assertion.
+When a xname event is generated,
+then all clients having set
+.S SubstructureNotifyMask
+event mask bits on either the old or new parent of
+the reparented window are delivered
+a xname event.
+>>ASSERTION def
+>>#NOTE Tested for in preceeding assertions.
+When a xname event is generated,
+then
+clients not having set
+.S StructureNotifyMask
+event mask bits on the
+reparented window
+and also not having set
+.S SubstructureNotifyMask
+event mask bits on either the
+old or new parent of the reparented window
+are not delivered
+a xname event.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window's parent changes
+>>#NOTEm as a result of a call to
+>>#NOTEm .F XReparentWindow ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .S StructureNotify
+>>#NOTEs was selected,
+>>#NOTEs then
+>>#NOTEs .M event
+>>#NOTEs is set to
+>>#NOTEs the WINDOWTYPE window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .S SubstructureNotify
+>>#NOTEs was selected,
+>>#NOTEs then
+>>#NOTEs .M event
+>>#NOTEs is set to
+>>#NOTEs the WINDOWTYPE window's parent.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M parent
+>>#NOTEs is set to
+>>#NOTEs the parent window of
+>>#NOTEs .M window .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M x
+>>#NOTEs and
+>>#NOTEs .M y
+>>#NOTEs are set to
+>>#NOTEs the coordinates of
+>>#NOTEs .M window
+>>#NOTEs relative to parent window's origin
+>>#NOTEs and indicate the position of the upper-left outside corner of
+>>#NOTEs .M window .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M override_redirect
+>>#NOTEs is set to the override-redirect attribute of
+>>#NOTEs .M window .
diff --git a/xc/test/xsuite/xtest/tset/CH08/rszrqst/rszrqst.m b/xc/test/xsuite/xtest/tset/CH08/rszrqst/rszrqst.m
new file mode 100644
index 000000000..365a6cff1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/rszrqst/rszrqst.m
@@ -0,0 +1,366 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ResizeRequest CH08
+>>EXTERN
+#define EVENT ResizeRequest
+#define MASK ResizeRedirectMask
+>>ASSERTION Good A
+When a xname event is generated,
+then
+all clients having set
+.S ResizeRedirectMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Build and create window hierarchy.
+Create inferiors with override-redirect set to True.
+Change one inferior's override-redirect attribute to False.
+Select for CirculateRequest events using SubstructureRedirectMask.
+Select for no events with client3.
+Attempt to resize a window.
+Initialize for expected events.
+Verify that a CirculateRequest event is delivered.
+Verify that no events are delivered to client3.
+Verify members of event structure.
+Verify that no events were delivered to client3.
+Attempt to resize another window.
+Initialize for expected events.
+Verify that a CirculateRequest event is delivered.
+Verify that no events are delivered to client3.
+Verify members of event structure.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2, *client3;
+Winh *parent, *lastw, *child;
+Winhg winhg;
+XEvent event;
+int i;
+int status;
+int numchildren = 4;
+int count;
+XSetWindowAttributes attrs;
+unsigned long valuemask;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ /* can't use winh() because the windows need to overlap */
+ winhg.border_width = 1;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 100;
+ winhg.area.height = 100;
+ parent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ report("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = 30;
+ winhg.area.height = 30;
+/* Create inferiors with override-redirect set to True. */
+ attrs.override_redirect = True;
+ attrs.border_pixel = W_FG;
+ attrs.background_pixel = W_BG;
+ valuemask = CWOverrideRedirect | CWBorderPixel | CWBackPixel;
+ for (i=0; i<numchildren; i++) {
+ if (!i)
+ CHECK;
+ lastw = winh_adopt(display, parent, valuemask, &attrs, &winhg, WINH_NOMASK);
+ if (lastw == (Winh *) NULL) {
+ report("Could not create child %d", i);
+ return;
+ }
+ winhg.area.x += 10;
+ winhg.area.y += 10;
+ }
+ child = parent->firstchild;
+ if (winh_create(display, (Winh *) NULL, WINH_MAP))
+ return;
+ else
+ CHECK;
+/* Change one inferior's override-redirect attribute to False. */
+ attrs.override_redirect = False;
+ valuemask = CWOverrideRedirect;
+ if (winh_changewindowattributes(display, lastw, valuemask, &attrs)) {
+ report("Failed to change attribute for subwindow");
+ return;
+ }
+/* Select for CirculateRequest events using SubstructureRedirectMask. */
+ /*
+ * Selection with a single client because only one can select
+ * for this event at a time.
+ */
+ if (winh_selectinput(display, child, MASK)) {
+ report("Selection failed on child.");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_selectinput(display, lastw, MASK)) {
+ report("Selection failed on lastw.");
+ return;
+ }
+ else
+ CHECK;
+/* Select for no events with client3. */
+ if (winh_selectinput(client3, (Winh *) NULL, NoEventMask)) {
+ report("Selection with client3 failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Attempt to resize a window. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ child->winhg.area.width += 2;
+ child->winhg.area.height += 2;
+ XResizeWindow(client2, child->window, child->winhg.area.width, child->winhg.area.height);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Initialize for expected events. */
+ event.xany.type = EVENT;
+ event.xany.window = child->window;
+ if (winh_plant(child, &event, MASK, WINH_NOMASK)) {
+ report("Could not plant events for child");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that a CirculateRequest event is delivered. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XEvent *event_return;
+ XResizeRequestEvent good;
+
+/* Verify members of event structure. */
+ event_return = winh_qdel->event;
+ good = event_return->xresizerequest;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = child->window;
+ good.width = child->winhg.area.width;
+ good.height = child->winhg.area.height;
+ if (checkevent((XEvent *) &good, event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Attempt to resize another window. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ lastw->winhg.area.width += 2;
+ lastw->winhg.area.height += 2;
+ XResizeWindow(client2, lastw->window, lastw->winhg.area.width, lastw->winhg.area.height);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Initialize for expected events. */
+ event.xany.type = EVENT;
+ event.xany.window = lastw->window;
+ if (winh_plant(lastw, &event, MASK, WINH_NOMASK)) {
+ report("Could not plant events for lastw");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that a CirculateRequest event is delivered. */
+/* Verify that no events are delivered to client3. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_harvest(client3, (Winh *) NULL)) {
+ report("Could not harvest events for client3");
+ return;
+ }
+ else
+ CHECK;
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status == -1)
+ return;
+ else if (status) {
+ report("Event delivery not as expected");
+ FAIL;
+ }
+ else {
+ XEvent *event_return;
+ XResizeRequestEvent good;
+
+/* Verify members of event structure. */
+ event_return = winh_qdel->event;
+ good = event_return->xresizerequest;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = lastw->window;
+ good.width = child->winhg.area.width;
+ good.height = child->winhg.area.height;
+ if (checkevent((XEvent *) &good, event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+ }
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(18);
+>>ASSERTION def
+>>#NOTE Tested for in previous assertion.
+When a xname event is generated,
+then
+clients not having set
+.S ResizeRedirectMask
+event mask bits on the event window are not delivered
+a xname event.
+>>#NOTEm >>ASSERTION
+>>#NOTEm >>#NOTE
+>>#NOTEm >>#NOTE Only one client at a time can select this event.
+>>#NOTEm >>#NOTE
+>>#NOTEm When a client attempts to change the size of a window by calling
+>>#NOTEm .F XConfigureWindow ,
+>>#NOTEm .F XResizeWindow ,
+>>#NOTEm or
+>>#NOTEm .F XMoveResizeWindow ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEm >>ASSERTION
+>>#NOTEm >>#NOTE
+>>#NOTEm >>#NOTE This is somewhat unusual in that the override-redirect attribute's
+>>#NOTEm >>#NOTE value is not relevant. See notsomething.m4.
+>>#NOTEm >>#NOTE
+>>#NOTEm When ARTICLE xname event is generated
+>>#NOTEm and a client has selected xname events on the child's parent,
+>>#NOTEm then
+>>#NOTEm .M window
+>>#NOTEm is not WINDOWTYPE.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the child window to be WINDOWTYPE.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M width
+>>#NOTEs and
+>>#NOTEs .M height
+>>#NOTEs are set to
+>>#NOTEs the
+>>#NOTEs ifdef(`REQUESTED', REQUESTED,)
+>>#NOTEs inside size of
+>>#NOTEs .M window ,
+>>#NOTEs not including the border.
diff --git a/xc/test/xsuite/xtest/tset/CH08/slctinpt/slctinpt.m b/xc/test/xsuite/xtest/tset/CH08/slctinpt/slctinpt.m
new file mode 100644
index 000000000..f9d53dade
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/slctinpt/slctinpt.m
@@ -0,0 +1,612 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSelectInput CH08
+void
+XSelectInput(display, w, event_mask)
+Display *display = Dsp;
+Window w;
+long event_mask;
+>>ASSERTION Good A
+A call to xname
+requests that the X server report the events for window
+.A w
+matching
+.A event_mask .
+>>STRATEGY
+Create client1.
+Create window with client1.
+Select no events with client1 on this window.
+Create client2.
+Select MapNotify events with client2 on this window.
+Map window.
+XSync(.., False) on both clients to ensure generated events have come in.
+Verify that client1 received no events.
+Verify that client2 received a single MapNotify event for this window.
+Verify that client2 received no other events.
+>>CODE
+Display *client1;
+Display *client2;
+XEvent event;
+int n;
+
+/* Create client1. */
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create window with client1. */
+ w = mkwin(client1, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select no events with client1 on this window. */
+ BASIC_STARTCALL(client1);
+ XSelectInput(client1, w, NoEventMask);
+ BASIC_ENDCALL(client1, Success);
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Select MapNotify events with client2 on this window. */
+ BASIC_STARTCALL(client2);
+ XSelectInput(client2, w, StructureNotifyMask);
+ BASIC_ENDCALL(client2, Success);
+/* Map window. */
+ XSync(client1, True);
+ XSync(client2, True);
+ XMapWindow(client1, w);
+/* XSync(.., False) on both clients to ensure generated events have come in. */
+ XSync(client1, False);
+ XSync(client2, False);
+ trace("Mapping window with StructureNotifyMask selected, expecting MapNotify.");
+/* Verify that client1 received no events. */
+ if ((n=XPending(client1)) > 0) {
+ XNextEvent(client1, &event);
+ report("%d unexpected event%s (first %s) %s delivered to client1.",
+ n, (n==1)?"":"s", eventname(event.type), (n==1)?"was":"were");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that client2 received a single MapNotify event for this window. */
+ if (!XCheckTypedWindowEvent(client2, w, MapNotify, &event)) {
+ report("Selected event (MapNotify) was not delivered.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that client2 received no other events. */
+ if ((n=XPending(client2)) > 0) {
+ XNextEvent(client2, &event);
+ report("%d unexpected event%s (first %s) %s delivered to client2.",
+ n, (n==1)?"":"s", eventname(event.type), (n==1)?"was":"were");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(5);
+>>ASSERTION Good A
+A call to xname
+overrides the event mask attribute set during any previous call to
+xname ,
+.F XChangeWindowAttributes ,
+or
+.F XCreateWindow .
+>>STRATEGY
+Create window with no events selected.
+Call XGetWindowAttributes to get event mask for this window.
+Verify event mask is as expected.
+Call XSelectInput to change event mask to StructureNotifyMask.
+Call XGetWindowAttributes to get new event mask for this window.
+Verify event mask changed as expected.
+Call XChangeWindowAttributes to change event mask to NoEventMask.
+Call XGetWindowAttributes to get event mask for this window.
+Verify event mask is as expected.
+Call XSelectInput to change event mask to ALLEVENTS.
+Call XGetWindowAttributes to get new event mask for this window.
+Verify event mask changed as expected.
+Call XSelectInput to change event mask to StructureNotifyMask.
+Call XGetWindowAttributes to get new event mask for this window.
+Verify event mask changed as expected.
+>>CODE
+XSetWindowAttributes setattrs;
+XWindowAttributes attrs;
+
+/* Create window with no events selected. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Call XGetWindowAttributes to get event mask for this window. */
+ if (!XGetWindowAttributes(display, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask is as expected. */
+ if (attrs.your_event_mask != NoEventMask) {
+ delete("Unexpected event mask value.");
+ return;
+ }
+ else
+ CHECK;
+/* Call XSelectInput to change event mask to StructureNotifyMask. */
+ event_mask = StructureNotifyMask;
+ XCALL;
+/* Call XGetWindowAttributes to get new event mask for this window. */
+ if (!XGetWindowAttributes(display, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask changed as expected. */
+ if (attrs.your_event_mask != StructureNotifyMask) {
+ report("Event mask incorrect first call.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XChangeWindowAttributes to change event mask to NoEventMask. */
+ setattrs.event_mask = NoEventMask;
+ XChangeWindowAttributes(display, w, CWEventMask, &setattrs);
+/* Call XGetWindowAttributes to get event mask for this window. */
+ if (!XGetWindowAttributes(display, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask is as expected. */
+ if (attrs.your_event_mask != NoEventMask) {
+ delete("Unexpected (non-empty) event mask value after XChangeWindowAttributes.");
+ return;
+ }
+ else
+ CHECK;
+/* Call XSelectInput to change event mask to ALLEVENTS. */
+ event_mask = ALLEVENTS;
+ XCALL;
+/* Call XGetWindowAttributes to get new event mask for this window. */
+ if (!XGetWindowAttributes(display, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask changed as expected. */
+ if (attrs.your_event_mask != ALLEVENTS) {
+ report("Event mask incorrect after second call.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XSelectInput to change event mask to StructureNotifyMask. */
+ event_mask = StructureNotifyMask;
+ XCALL;
+/* Call XGetWindowAttributes to get new event mask for this window. */
+ if (!XGetWindowAttributes(display, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask changed as expected. */
+ if (attrs.your_event_mask != StructureNotifyMask) {
+ report("Event mask incorrect after third call.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(10);
+>>ASSERTION Good A
+A call to xname
+does not change the event mask attribute
+for other clients.
+>>STRATEGY
+Create client1.
+Create window with client1.
+Select NoEventMask events with client1 on this window.
+Call XGetWindowAttributes to get event mask for client1 for window.
+Verify event mask is as expected.
+Create client2.
+Select ALLEVENTS events with client2 on this window.
+Call XGetWindowAttributes to get event mask for client2 for window.
+Verify event mask is as expected.
+Call XGetWindowAttributes to get event mask for client1 for window.
+Verify event mask has not changed.
+Select KeyPressMask events with client1 on this window.
+Call XGetWindowAttributes to get event mask for client1 for window.
+Verify event mask is as expected.
+Call XGetWindowAttributes to get event mask for client2 for window.
+Verify event mask has not changed.
+>>CODE
+Display *client1;
+Display *client2;
+XWindowAttributes attrs;
+
+/* Create client1. */
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create window with client1. */
+ w = mkwin(client1, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select NoEventMask events with client1 on this window. */
+ BASIC_STARTCALL(client1);
+ XSelectInput(client1, w, NoEventMask);
+ BASIC_ENDCALL(client1, Success);
+/* Call XGetWindowAttributes to get event mask for client1 for window. */
+ if (!XGetWindowAttributes(client1, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask is as expected. */
+ if (attrs.your_event_mask != NoEventMask) {
+ delete("Unexpected event mask value.");
+ return;
+ }
+ else
+ CHECK;
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Select ALLEVENTS events with client2 on this window. */
+ BASIC_STARTCALL(client2);
+ XSelectInput(client2, w, ALLEVENTS);
+ BASIC_ENDCALL(client2, Success);
+/* Call XGetWindowAttributes to get event mask for client2 for window. */
+ if (!XGetWindowAttributes(client2, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask is as expected. */
+ if (attrs.your_event_mask != ALLEVENTS) {
+ delete("Unexpected event mask value.");
+ return;
+ }
+ else
+ CHECK;
+/* Call XGetWindowAttributes to get event mask for client1 for window. */
+ if (!XGetWindowAttributes(client1, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask has not changed. */
+ if (attrs.your_event_mask != NoEventMask) {
+ report("Event mask incorrect.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Select KeyPressMask events with client1 on this window. */
+ BASIC_STARTCALL(client1);
+ XSelectInput(client1, w, KeyPressMask);
+ BASIC_ENDCALL(client1, Success);
+/* Call XGetWindowAttributes to get event mask for client1 for window. */
+ if (!XGetWindowAttributes(client1, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask is as expected. */
+ if (attrs.your_event_mask != KeyPressMask) {
+ delete("Unexpected event mask value.");
+ return;
+ }
+ else
+ CHECK;
+/* Call XGetWindowAttributes to get event mask for client2 for window. */
+ if (!XGetWindowAttributes(client2, w, &attrs)) {
+ delete("A call to XGetWindowAttributes failed.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify event mask has not changed. */
+ if (attrs.your_event_mask != ALLEVENTS) {
+ report("Event mask incorrect.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(12);
+>>ASSERTION Good A
+When multiple clients make a call to xname
+requesting the same event on the same window
+and
+that window is the event window for the requested event,
+then the event is reported to each client.
+>>STRATEGY
+Create client1.
+Create window with client1.
+Select MapNotify events with client1 on this window.
+Create client2.
+Select MapNotify events with client2 on this window.
+Map window.
+XSync(.., False) on both clients to ensure generated events have come in.
+Verify that client1 received a single MapNotify event for this window.
+Verify that client1 received no other events.
+Verify that client2 received a single MapNotify event for this window.
+Verify that client2 received no other events.
+>>CODE
+Display *client1;
+Display *client2;
+XEvent event;
+int n;
+
+/* Create client1. */
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create window with client1. */
+ w = mkwin(client1, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select MapNotify events with client1 on this window. */
+ BASIC_STARTCALL(client1);
+ XSelectInput(client1, w, StructureNotifyMask);
+ BASIC_ENDCALL(client1, Success);
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Select MapNotify events with client2 on this window. */
+ BASIC_STARTCALL(client2);
+ XSelectInput(client2, w, StructureNotifyMask);
+ BASIC_ENDCALL(client2, Success);
+/* Map window. */
+ XSync(client1, True);
+ XSync(client2, True);
+ XMapWindow(client1, w);
+/* XSync(.., False) on both clients to ensure generated events have come in. */
+ XSync(client1, False);
+ XSync(client2, False);
+ trace("Mapping window with StructureNotifyMask selected, expecting MapNotify.");
+/* Verify that client1 received a single MapNotify event for this window. */
+ if (!XCheckTypedWindowEvent(client1, w, MapNotify, &event)) {
+ report("Selected event was not delivered to client1.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that client1 received no other events. */
+ if ((n=XPending(client1)) > 0) {
+ XNextEvent(client1, &event);
+ report("%d unexpected event%s (first %s) %s delivered to client1.",
+ n, (n==1)?"":"s", eventname(event.type), (n==1)?"was":"were");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that client2 received a single MapNotify event for this window. */
+ if (!XCheckTypedWindowEvent(client2, w, MapNotify, &event)) {
+ report("Selected event was not delivered to client2.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that client2 received no other events. */
+ if ((n=XPending(client2)) > 0) {
+ XNextEvent(client2, &event);
+ report("%d unexpected event%s (first %s) %s delivered to client2.",
+ n, (n==1)?"":"s", eventname(event.type), (n==1)?"was":"were");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(6);
+>>ASSERTION Bad A
+When another client has selected with an event mask
+.S SubstructureRedirectMask ,
+then on a call to xname
+with
+.S SubstructureRedirectMask
+bits set in
+.A event_mask
+a
+.S BadAccess
+error occurs.
+>>STRATEGY
+Create client1.
+Create window with client1.
+Select SubstructureRedirectMask event mask with client1 on this window.
+Create client2.
+Select SubstructureRedirectMask event mask with client2 on this window.
+Verify that a BadAccess error was generated.
+>>CODE BadAccess
+Display *client1;
+Display *client2;
+
+/* Create client1. */
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create window with client1. */
+ w = mkwin(client1, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select SubstructureRedirectMask event mask with client1 on this window. */
+ BASIC_STARTCALL(client1);
+ XSelectInput(client1, w, SubstructureRedirectMask);
+ BASIC_ENDCALL(client1, Success);
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Select SubstructureRedirectMask event mask with client2 on this window. */
+ BASIC_STARTCALL(client2);
+ XSelectInput(client2, w, SubstructureRedirectMask);
+ BASIC_ENDCALL(client2, BadAccess);
+/* Verify that a BadAccess error was generated. */
+ if (geterr() != BadAccess) {
+ report("A call to XSelectInput did not generate BadAccess error");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Bad A
+When another client has selected with an event mask
+.S ResizeRedirectMask ,
+then on a call to xname
+with
+.S ResizeRedirectMask
+bits set in
+.A event_mask
+a
+.S BadAccess
+error occurs.
+>>STRATEGY
+Create client1.
+Create window with client1.
+Select ResizeRedirectMask event mask with client1 on this window.
+Create client2.
+Select ResizeRedirectMask event mask with client2 on this window.
+Verify that a BadAccess error was generated.
+>>CODE
+Display *client1;
+Display *client2;
+
+/* Create client1. */
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create window with client1. */
+ w = mkwin(client1, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select ResizeRedirectMask event mask with client1 on this window. */
+ BASIC_STARTCALL(client1);
+ XSelectInput(client1, w, ResizeRedirectMask);
+ BASIC_ENDCALL(client1, Success);
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Select ResizeRedirectMask event mask with client2 on this window. */
+ BASIC_STARTCALL(client2);
+ XSelectInput(client2, w, ResizeRedirectMask);
+ BASIC_ENDCALL(client2, BadAccess);
+/* Verify that a BadAccess error was generated. */
+ if (geterr() != BadAccess) {
+ report("A call to XSelectInput did not generate BadAccess error");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Bad A
+When another client has selected with an event mask
+.S ButtonPressMask ,
+then on a call to xname
+with
+.S ButtonPressMask
+bits set in
+.A event_mask
+a
+.S BadAccess
+error occurs.
+>>STRATEGY
+Create client1.
+Create window with client1.
+Select ButtonPressMask event mask with client1 on this window.
+Create client2.
+Select ButtonPressMask event mask with client2 on this window.
+Verify that a BadAccess error was generated.
+>>CODE
+Display *client1;
+Display *client2;
+
+/* Create client1. */
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create window with client1. */
+ w = mkwin(client1, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select ButtonPressMask event mask with client1 on this window. */
+ BASIC_STARTCALL(client1);
+ XSelectInput(client1, w, ButtonPressMask);
+ BASIC_ENDCALL(client1, Success);
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Select ButtonPressMask event mask with client2 on this window. */
+ BASIC_STARTCALL(client2);
+ XSelectInput(client2, w, ButtonPressMask);
+ BASIC_ENDCALL(client2, BadAccess);
+/* Verify that a BadAccess error was generated. */
+ if (geterr() != BadAccess) {
+ report("A call to XSelectInput did not generate BadAccess error");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH08/slctnclr/slctnclr.m b/xc/test/xsuite/xtest/tset/CH08/slctnclr/slctnclr.m
new file mode 100644
index 000000000..dd30d62ab
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/slctnclr/slctnclr.m
@@ -0,0 +1,95 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SelectionClear CH08
+>>ASSERTION Good A
+There are no assertions in sections 8.1-8.4 for xname events.
+Assertions will be submitted from section 4 which will cover
+xname event assertions.
+>>STRATEGY
+Put out a message explaining that there are no specific assertions for
+xname events in sections 8.1-8.4, and that delivery of xname events will
+be covered in section 4.
+>>CODE
+
+ report("There are no specific assertions for %s events in sections 8.1-8.4.", TestName);
+ report("Delivery of %s events will be covered in section 4.", TestName);
+ tet_result(TET_NOTINUSE);
+
+>>#NOTEm >>ASSERTION
+>>#NOTEm When the ownership of a selection changes
+>>#NOTEm and the previous owner was not
+>>#NOTEm .S None ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the window that was specified by the current owner in its
+>>#NOTEs .F XSetSelectionOwner
+>>#NOTEs call.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M selection
+>>#NOTEs is set to
+>>#NOTEs the selection atom.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M time
+>>#NOTEs is set to
+>>#NOTEs the last change time recorded for the selection.
diff --git a/xc/test/xsuite/xtest/tset/CH08/slctnntfy/slctnntfy.m b/xc/test/xsuite/xtest/tset/CH08/slctnntfy/slctnntfy.m
new file mode 100644
index 000000000..d481d8952
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/slctnntfy/slctnntfy.m
@@ -0,0 +1,126 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SelectionNotify CH08
+>>ASSERTION Good A
+There are no assertions in sections 8.1-8.4 for xname events.
+Assertions will be submitted from section 4 which will cover
+xname event assertions.
+>>STRATEGY
+Put out a message explaining that there are no specific assertions for
+xname events in sections 8.1-8.4, and that delivery of xname events will
+be covered in section 4.
+>>CODE
+
+ report("There are no specific assertions for %s events in sections 8.1-8.4.", TestName);
+ report("Delivery of %s events will be covered in section 4.", TestName);
+ tet_result(TET_NOTINUSE);
+
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a
+>>#NOTEm .S ConvertSelection
+>>#NOTEm protocol request is generated
+>>#NOTEm and there is no owner for the selection,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE
+>>#NOTEs >>#NOTE These members should correspond the values specified
+>>#NOTEs >>#NOTE in the call to XConvertSelection.
+>>#NOTEs >>#NOTE
+>>#NOTEs When a
+>>#NOTEs .S ConvertSelection
+>>#NOTEs protocol request is generated
+>>#NOTEs and there is no owner for the selection,
+>>#NOTEs then
+>>#NOTEs .M requestor
+>>#NOTEs is set to
+>>#NOTEs the window associated with the requestor of the selection.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When a
+>>#NOTEs .S ConvertSelection
+>>#NOTEs protocol request is generated
+>>#NOTEs and there is no owner for the selection,
+>>#NOTEs then
+>>#NOTEs .M selection
+>>#NOTEs is set to
+>>#NOTEs the atom that indicates the selection.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When a
+>>#NOTEs .S ConvertSelection
+>>#NOTEs protocol request is generated
+>>#NOTEs and there is no owner for the selection,
+>>#NOTEs then
+>>#NOTEs .M target
+>>#NOTEs is set to
+>>#NOTEs the atom that indicates the converted type.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When a
+>>#NOTEs .S ConvertSelection
+>>#NOTEs protocol request is generated
+>>#NOTEs and there is no owner for the selection,
+>>#NOTEs then
+>>#NOTEs .M property
+>>#NOTEs is set to
+>>#NOTEs .S None .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When a
+>>#NOTEs .S ConvertSelection
+>>#NOTEs protocol request is generated
+>>#NOTEs and there is no owner for the selection,
+>>#NOTEs then
+>>#NOTEs .M time
+>>#NOTEs is set to
+>>#NOTEs the time the conversion took place and can be a timestamp or
+>>#NOTEs .S CurrentTime .
diff --git a/xc/test/xsuite/xtest/tset/CH08/slctnrqst/slctnrqst.m b/xc/test/xsuite/xtest/tset/CH08/slctnrqst/slctnrqst.m
new file mode 100644
index 000000000..54a26f5e1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/slctnrqst/slctnrqst.m
@@ -0,0 +1,126 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SelectionRequest CH08
+>>ASSERTION Good A
+There are no assertions in sections 8.1-8.4 for xname events.
+Assertions will be submitted from section 4 which will cover
+xname event assertions.
+>>STRATEGY
+Put out a message explaining that there are no specific assertions for
+xname events in sections 8.1-8.4, and that delivery of xname events will
+be covered in section 4.
+>>CODE
+
+ report("There are no specific assertions for %s events in sections 8.1-8.4.", TestName);
+ report("Delivery of %s events will be covered in section 4.", TestName);
+ tet_result(TET_NOTINUSE);
+
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a client requests a selection conversion by calling
+>>#NOTEm .F XConvertSelection
+>>#NOTEm and the specified selection owner is not
+>>#NOTEm .S None ,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M owner
+>>#NOTEs is set to
+>>#NOTEs the window owning the selection.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M requestor
+>>#NOTEs is set to
+>>#NOTEs the window requesting the selection.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M selection
+>>#NOTEs is set to
+>>#NOTEs the atom that names the selection.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE
+>>#NOTEs >>#NOTE What is meant by ``the type the selection is desired in''?
+>>#NOTEs >>#NOTE
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M target
+>>#NOTEs is set to
+>>#NOTEs the atom that indicates the type
+>>#NOTEs the selection is desired in.
+>>#NOTEs >>#NOTE
+>>#NOTEs >>#NOTE Testing strategy?
+>>#NOTEs >>#NOTE
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M property
+>>#NOTEs is set to
+>>#NOTEs the atom that names a property name or
+>>#NOTEs .S None .
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE
+>>#NOTEs >>#NOTE This assertion might be incorrect. It mimics the spec,
+>>#NOTEs >>#NOTE but the result is rather ambiguous.
+>>#NOTEs >>#NOTE Testing strategy?
+>>#NOTEs >>#NOTE
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M time
+>>#NOTEs is set to
+>>#NOTEs the time or
+>>#NOTEs .S CurrentTime .
diff --git a/xc/test/xsuite/xtest/tset/CH08/sndevnt/sndevnt.m b/xc/test/xsuite/xtest/tset/CH08/sndevnt/sndevnt.m
new file mode 100644
index 000000000..4b44d05d8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/sndevnt/sndevnt.m
@@ -0,0 +1,2206 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSendEvent CH08
+Status
+XSendEvent(display, w, propagate, event_mask, event_send)
+Display *display = Dsp;
+Window w = (Window) -1;
+Bool propagate = False;
+long event_mask = NoEventMask;
+XEvent *event_send = &_event;
+>>SET startup focusstartup
+>>SET cleanup focuscleanup
+>>EXTERN
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_(rvalue) \
+ _startcall(display);\
+ ((XAnyEvent *) event_send)->send_event = False;\
+ rvalue = XSendEvent(display, w, propagate, event_mask, event_send);\
+ _endcall(display)
+static XEvent _event;
+
+static int event_types[] = {
+ KeyPress,
+ KeyRelease,
+ ButtonPress,
+ ButtonRelease,
+ MotionNotify,
+ EnterNotify,
+ LeaveNotify,
+ FocusIn,
+ FocusOut,
+ KeymapNotify,
+ Expose,
+ GraphicsExpose,
+ NoExpose,
+ VisibilityNotify,
+ CreateNotify,
+ DestroyNotify,
+ UnmapNotify,
+ MapNotify,
+ MapRequest,
+ ReparentNotify,
+ ConfigureNotify,
+ ConfigureRequest,
+ GravityNotify,
+ ResizeRequest,
+ CirculateNotify,
+ CirculateRequest,
+ PropertyNotify,
+ SelectionClear,
+ SelectionRequest,
+ SelectionNotify,
+ ColormapNotify,
+ ClientMessage,
+ MappingNotify
+};
+>>ASSERTION Good A
+A call to xname
+sends
+.A event_send
+to window
+.A w .
+>>STRATEGY
+Create window.
+Discard all events in the event queue.
+Call XSendEvent to send a KeyPress event to creator of window.
+Verify that XSendEvent returned non-zero.
+Verify that event was received.
+Verify that send_event was not set to False.
+Repeat for each event-type.
+>>CODE
+int i;
+Window w;
+XAnyEvent *event;
+XEvent event_return;
+int return_value;
+
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ propagate = False;
+ event_mask = NoEventMask;
+ event = (XAnyEvent *) &event_return;
+ for (i = 0; i < NELEM(event_types); i++) {
+
+/* Discard all events in the event queue. */
+ XSync(display, True);
+
+/* Call XSendEvent to send a KeyPress event to creator of window. */
+ event_send->type = event_types[i];
+ if (event_send->type == ClientMessage)
+ ((XClientMessageEvent *) event_send)->format = 32;
+ _xcall_(return_value);
+
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Verify that event was received. */
+ XSync(display, False);
+ if (XCheckTypedEvent(display, event_send->type, &event_return) == False) {
+ report("Expected event (%s) not received.", eventname(event_send->type));
+ FAIL;
+ continue;
+ }
+ else
+ CHECK;
+
+/* Verify that send_event was not set to False. */
+ if (event->send_event == False) {
+ report("send_event not set to True");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat for each event-type. */
+ }
+ CHECKPASS(3*NELEM(event_types));
+>>ASSERTION Good A
+When
+.A w
+is
+.S PointerWindow ,
+then the destination window is the window that contains the pointer.
+>>STRATEGY
+Create window.
+Select KeyPress-type events on window.
+Grab server.
+Enable synchronization.
+Save initial pointer location.
+Warp pointer to window.
+Get new pointer location.
+Discard all events in the event queue.
+Call XSendEvent to send a KeyPress event to window containing pointer.
+Get current pointer location.
+Check to see if pointer moved.
+Warp pointer back to where it started.
+Disable synchronization.
+Ungrab server.
+Verify that XSendEvent returned non-zero.
+Verify that event was received.
+Verify that send_event was not set to False.
+>>CODE
+XVisualInfo *vp;
+Window ptrwin;
+XAnyEvent *event;
+XEvent event_return;
+int return_value;
+int root_x, root_y; /* pointer location after XSendEvent */
+int oroot_x, oroot_y; /* pointer location before XSendEvent */
+int sroot_x, sroot_y; /* initial pointer location */
+Window oldroot; /* initial root window */
+int itmp; /* useless XQueryPointer return values */
+unsigned int uitmp; /* useless XQueryPointer return values */
+Window wtmp; /* useless XQueryPointer return values */
+
+/* Create window. */
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ ptrwin = makewin(display, vp);
+/* Select KeyPress-type events on window. */
+ XSelectInput(display, ptrwin, KeyPressMask);
+/* Grab server. */
+ XGrabServer(display);
+/* Enable synchronization. */
+ (void) XSynchronize(display, True);
+/* Save initial pointer location. */
+ (void) XQueryPointer(display, ptrwin, &oldroot, &wtmp, &sroot_x, &sroot_y, &itmp, &itmp, &uitmp);
+/* Warp pointer to window. */
+ XWarpPointer(display, None, ptrwin, 0, 0, 0, 0, 0, 0);
+/* Get new pointer location. */
+ if (XQueryPointer(display, ptrwin, &wtmp, &wtmp, &oroot_x, &oroot_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer on wrong root.");
+ (void) XSynchronize(display, False);
+ XUngrabServer(display);
+ return;
+ } else
+ CHECK;
+/* Discard all events in the event queue. */
+ XSync(display, True);
+/* Call XSendEvent to send a KeyPress event to window containing pointer. */
+ w = (Window) PointerWindow;
+ propagate = False;
+ event_mask = KeyPressMask;
+ event_send->type = KeyPress;
+ _xcall_(return_value);
+/* Get current pointer location. */
+ if (XQueryPointer(display, ptrwin, &wtmp, &wtmp, &root_x, &root_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer moved.");
+ (void) XSynchronize(display, False);
+ XUngrabServer(display);
+ return;
+ }
+ else
+ CHECK;
+/* Check to see if pointer moved. */
+ if (oroot_x != root_x || oroot_y != root_y) {
+ delete("Pointer moved.");
+ /*
+ * if this is ever changed to be a return, take care to
+ * also turn off synchronization and ungrab the server...
+ */
+ }
+ else
+ CHECK;
+/* Warp pointer back to where it started. */
+ XWarpPointer(display, None, oldroot, 0, 0, 0, 0, sroot_x, sroot_y);
+/* Disable synchronization. */
+ (void) XSynchronize(display, False);
+/* Ungrab server. */
+ XUngrabServer(display);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event was received. */
+ XSync(display, False);
+ if (XCheckTypedEvent(display, event_send->type, &event_return) == False) {
+ report("Expected event (%s) not received.", eventname(event_send->type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that send_event was not set to False. */
+ event = (XAnyEvent *) &event_return;
+ if (event->send_event == False) {
+ report("send_event not set to True");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(6);
+>>ASSERTION Good A
+When
+.A w
+is
+.S InputFocus
+and an inferior of the focus window contains the pointer,
+then
+the destination window is that inferior.
+>>STRATEGY
+Create client2.
+Create parent window.
+Create inferior window.
+Select KeyPress-type events on parent window with client2.
+Flush client2 requests.
+Select KeyPress-type events on child window.
+Grab server.
+Enable synchronization.
+Set input focus to parent window.
+Save initial pointer location.
+Warp pointer to inferior of focus window.
+Get new pointer location.
+Discard all events in the event queue.
+Call XSendEvent to send a KeyPress event to inferior of the focus window.
+Get current pointer location.
+Check to see if pointer moved.
+Warp pointer back to where it started.
+Disable synchronization.
+Ungrab server.
+Verify that XSendEvent returned non-zero.
+Verify that event was received for inferior of focus window.
+Verify that send_event was not set to False.
+Verify that event was not received for focus window.
+>>CODE
+Display *client2;
+XVisualInfo *vp;
+Window parent;
+Window child;
+XAnyEvent *event;
+XEvent event_return;
+int return_value;
+int root_x, root_y; /* pointer location after XSendEvent */
+int oroot_x, oroot_y; /* pointer location before XSendEvent */
+int sroot_x, sroot_y; /* initial pointer location */
+Window oldroot; /* initial root window */
+int itmp; /* useless XQueryPointer return values */
+unsigned int uitmp; /* useless XQueryPointer return values */
+Window wtmp; /* useless XQueryPointer return values */
+unsigned int width;
+unsigned int height;
+struct area a;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can't create new client.");
+ return;
+ }
+ else
+ CHECK;
+/* Create parent window. */
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ parent = makewin(display, vp);
+/* Create inferior window. */
+ getsize(display, (Drawable) parent, &width, &height);
+ a.x = 0;
+ a.y = 0;
+ a.width = width/2;
+ a.height = height/2;
+ child = crechild(display, parent, &a);
+/* Select KeyPress-type events on parent window with client2. */
+ XSelectInput(client2, parent, KeyPressMask);
+/* Flush client2 requests. */
+ XFlush(client2);
+/* Select KeyPress-type events on child window. */
+ XSelectInput(display, child, KeyPressMask);
+/* Grab server. */
+ XGrabServer(display);
+/* Enable synchronization. */
+ (void) XSynchronize(display, True);
+/* Set input focus to parent window. */
+ XSetInputFocus(display, parent, RevertToPointerRoot, CurrentTime);
+/* Save initial pointer location. */
+ (void) XQueryPointer(display, child, &oldroot, &wtmp, &sroot_x, &sroot_y, &itmp, &itmp, &uitmp);
+/* Warp pointer to inferior of focus window. */
+ XWarpPointer(display, None, child, 0, 0, 0, 0, 0, 0);
+
+/* Get new pointer location. */
+ if (XQueryPointer(display, child, &wtmp, &wtmp, &oroot_x, &oroot_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer on wrong root.");
+ (void) XSynchronize(display, False);
+ XUngrabServer(display);
+ return;
+ } else
+ CHECK;
+/* Discard all events in the event queue. */
+ XSync(display, True);
+/* Call XSendEvent to send a KeyPress event to inferior of the focus window. */
+ w = (Window) InputFocus;
+ propagate = False;
+ event_mask = KeyPressMask;
+ event_send->type = KeyPress;
+ ((XAnyEvent *) event_send)->window = child;
+ _xcall_(return_value);
+/* Get current pointer location. */
+ if (XQueryPointer(display, child, &wtmp, &wtmp, &root_x, &root_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer moved.");
+ (void) XSynchronize(display, False);
+ XUngrabServer(display);
+ return;
+ }
+ else
+ CHECK;
+/* Check to see if pointer moved. */
+ if (oroot_x != root_x || oroot_y != root_y) {
+ delete("Pointer moved.");
+ /*
+ * if this is ever changed to be a return, take care to
+ * also turn off synchronization and ungrab the server...
+ */
+ }
+ else
+ CHECK;
+/* Warp pointer back to where it started. */
+ XWarpPointer(display, None, oldroot, 0, 0, 0, 0, sroot_x, sroot_y);
+/* Disable synchronization. */
+ (void) XSynchronize(display, False);
+/* Ungrab server. */
+ XUngrabServer(display);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event was received for inferior of focus window. */
+ XSync(display, False);
+ if (XCheckTypedWindowEvent(display, child, event_send->type, &event_return) == False) {
+ report("Expected event (%s) on inferior not received.", eventname(event_send->type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that send_event was not set to False. */
+ event = (XAnyEvent *) &event_return;
+ if (event->send_event == False) {
+ report("send_event not set to True");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event was not received for focus window. */
+ XSync(client2, False);
+ if (XCheckTypedWindowEvent(client2, child, event_send->type, &event_return) != False) {
+ report("Focus window received event.", eventname(event_send->type));
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(8);
+>>ASSERTION Good A
+When
+.A w
+is
+.S InputFocus
+and an inferior of the focus window does not contain the pointer,
+then
+the destination window is the focus window.
+>>STRATEGY
+Create window.
+Select KeyPress-type events on new focus window.
+Set input focus to new focus window.
+Discard all events in the event queue.
+Call XSendEvent to send a KeyPress event to inferior of the focus window.
+Verify that XSendEvent returned non-zero.
+Verify that event was received for inferior of focus window.
+Verify that send_event was not set to False.
+>>CODE
+XVisualInfo *vp;
+Window nfocus;
+XAnyEvent *event;
+XEvent event_return;
+int return_value;
+
+/* Create window. */
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ nfocus = makewin(display, vp);
+/* Select KeyPress-type events on new focus window. */
+ XSelectInput(display, nfocus, KeyPressMask);
+/* Set input focus to new focus window. */
+ XSetInputFocus(display, nfocus, RevertToPointerRoot, CurrentTime);
+/* Discard all events in the event queue. */
+ XSync(display, True);
+/* Call XSendEvent to send a KeyPress event to inferior of the focus window. */
+ w = (Window) InputFocus;
+ propagate = False;
+ event_mask = KeyPressMask;
+ event_send->type = KeyPress;
+ ((XAnyEvent *) event_send)->window = nfocus;
+ _xcall_(return_value);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event was received for inferior of focus window. */
+ XSync(display, False);
+ if (XCheckTypedWindowEvent(display, nfocus, event_send->type, &event_return) == False) {
+ report("Expected event (%s) not received.", eventname(event_send->type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that send_event was not set to False. */
+ event = (XAnyEvent *) &event_return;
+ if (event->send_event == False) {
+ report("send_event not set to True");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
+>>ASSERTION def
+When
+.A event_mask
+is set to
+.S NoEventMask ,
+then a call to xname results in
+.A event_send
+being sent to the client that created the destination window.
+>>ASSERTION Good A
+When
+.A event_mask
+is set to
+.S NoEventMask
+and the client that created the destination window
+.A w
+no longer exists,
+then no event is sent.
+>>STRATEGY
+Create client2.
+Call XSetCloseDownMode with RetainPermanent for client2.
+Create window for client2.
+Call XCloseDisplay for client2.
+Select ALLEVENTS on window.
+Call XSendEvent to send event to window.
+Verify that XSendEvent returned non-zero.
+Verify that no events were received.
+>>CODE
+Display *client2;
+int return_value;
+
+/* Create client2. */
+
+ /* We must disable resource registration here to prevent attempted
+ deallocation of closed connections and deleted resources. */
+ regdisable();
+
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ regenable();
+ return;
+ }
+ else
+ CHECK;
+/* Call XSetCloseDownMode with RetainPermanent for client2. */
+ XSetCloseDownMode(client2, RetainPermanent);
+
+/* Create window for client2. */
+ w = mkwin(client2, (XVisualInfo *) NULL, (struct area *) NULL, False);
+
+/* Call XCloseDisplay for client2. */
+ XCloseDisplay(client2);
+
+ /* re-enable resource registration */
+ regenable();
+
+/* Select ALLEVENTS on window. */
+ XSelectInput(display, w, ALLEVENTS);
+
+/* Call XSendEvent to send event to window. */
+ propagate = False;
+ event_mask = NoEventMask;
+ event_send->type = KeyRelease;
+ _xcall_(return_value);
+
+/* Verify that XSendEvent returned non-zero. */
+ XSync(display, False);
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Verify that no events were received. */
+ if (XPending(display) > 0) {
+ XEvent event;
+
+ XNextEvent(display, &event);
+ report("Event(s) delivered unexpectedly (%s)", eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+When
+.A event_mask
+is not set to
+.S NoEventMask
+and no clients have selected on the destination window
+and
+.A propagate
+is
+.S False ,
+then
+a call to xname
+results in no event being sent.
+>>STRATEGY
+Create window.
+Select no events on window.
+Set propagate to False.
+Set event_mask to something other than NoEventMask.
+Discard all events in the event queue.
+Call XSendEvent.
+Verify that XSendEvent returned non-zero.
+Verify that no events were received.
+>>CODE
+XVisualInfo *vp;
+XEvent event_return;
+int return_value;
+
+/* Create window. */
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select no events on window. */
+ XSelectInput(display, w, NoEventMask);
+/* Set propagate to False. */
+ propagate = False;
+/* Set event_mask to something other than NoEventMask. */
+ event_mask = KeyPressMask;
+/* Discard all events in the event queue. */
+ XSync(display, True);
+/* Call XSendEvent. */
+ event_send->type = KeyPress;
+ ((XAnyEvent *) event_send)->window = w;
+ _xcall_(return_value);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were received. */
+ XSync(display, False);
+ if (XCheckTypedWindowEvent(display, w, event_send->type, &event_return) != False) {
+ report("Unexpected event (%s) received.", eventname(event_send->type));
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
+>>ASSERTION Good A
+When
+.A event_mask
+is not set to
+.S NoEventMask
+and no clients have selected on the destination
+.A w
+and
+.A propagate
+is
+.S True
+and there is no matching ancestor of the destination
+.A w
+for which no intervening window has that type in its
+do-not-propagate-mask,
+then
+a call to xname
+results in no event being sent.
+>>STRATEGY
+Create a window hierarchy.
+Create a hierarchy member with KeyPressMask set in do_not_propagate_mask.
+Create a child of this member without setting do_not_propagate_mask.
+Create the hierarchy.
+Select no events on the destination w.
+Select for KeyPress on the grandparent window of this member.
+Set w to the window corresponding to child node.
+Set propagate to True.
+Set event_mask to KeyPressMask.
+Set event type to KeyPress.
+Call XSendEvent.
+Verify that XSendEvent returned non-zero.
+Verify that no events were received.
+Select for no events on the grandparent window of this member.
+Call XSendEvent.
+Verify that XSendEvent returned non-zero.
+Verify that no events were received.
+Change the do_not_propagate_mask from KeyPressMask to NoEventMask.
+Call XSendEvent.
+Verify that XSendEvent returned non-zero.
+Verify that no events were received.
+>>CODE
+Winh *grandparent;
+Winh *parent;
+Winh *child;
+XSetWindowAttributes attrs;
+int return_value;
+
+/* Create a window hierarchy. */
+ grandparent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, (Winhg *) NULL, WINH_NOMASK);
+ if (grandparent == (Winh *) NULL) {
+ delete("Could not create grandparent");
+ return;
+ }
+ else
+ CHECK;
+/* Create a hierarchy member with KeyPressMask set in do_not_propagate_mask. */
+ attrs.do_not_propagate_mask = KeyPressMask;
+ parent = winh_adopt(display, grandparent, CWDontPropagate, &attrs, (Winhg *) NULL, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ delete("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+/* Create a child of this member without setting do_not_propagate_mask. */
+ child = winh_adopt(display, parent, 0L, (XSetWindowAttributes *) NULL, (Winhg *) NULL, WINH_NOMASK);
+ if (child == (Winh *) NULL) {
+ delete("Could not create child");
+ return;
+ }
+ else
+ CHECK;
+/* Create the hierarchy. */
+ if (winh_create(display, (Winh *) NULL, WINH_NOMASK)) {
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, True);
+/* Select no events on the destination w. */
+ if (winh_selectinput(display, child, NoEventMask)) {
+ return;
+ }
+ else
+ CHECK;
+/* Select no events on the parent of w. */
+ if (winh_selectinput(display, parent, NoEventMask)) {
+ return;
+ }
+ else
+ CHECK;
+/* Select for KeyPress on the grandparent window of this member. */
+ if (winh_selectinput(display, grandparent, KeyPressMask)) {
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, True);
+/* Set w to the window corresponding to child node. */
+ w = child->window;
+/* Set propagate to True. */
+ propagate = True;
+/* Set event_mask to KeyPressMask. */
+ event_mask = KeyPressMask;
+/* Set event type to KeyPress. */
+ event_send->type = KeyPress;
+/* Call XSendEvent. */
+ _xcall_(return_value);
+ XSync(display, False);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were received. */
+ if (XPending(display) > 0) {
+ XEvent event;
+
+ XNextEvent(display, &event);
+ report("Event(s) delivered unexpectedly (%s) through do_not_propagate_mask", eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Select for no events on the grandparent window of this member. */
+ if (winh_selectinput(display, grandparent, NoEventMask)) {
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, True);
+/* Call XSendEvent. */
+ _xcall_(return_value);
+ XSync(display, False);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were received. */
+ if (XPending(display) > 0) {
+ XEvent event;
+
+ XNextEvent(display, &event);
+ report("Event(s) delivered unexpectedly (%s) while none selected and do_not_propagate_mask on", eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Change the do_not_propagate_mask from KeyPressMask to NoEventMask. */
+ attrs.do_not_propagate_mask = NoEventMask;
+ if (winh_changewindowattributes(display, parent, CWDontPropagate, &attrs)) {
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, True);
+/* Call XSendEvent. */
+ _xcall_(return_value);
+ XSync(display, False);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were received. */
+ if (XPending(display) > 0) {
+ XEvent event;
+
+ XNextEvent(display, &event);
+ report("Event(s) delivered unexpectedly (%s) with none selected", eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(15);
+>>ASSERTION Good A
+When
+.A event_mask
+is not set to
+.S NoEventMask
+and
+.A w
+is set to
+.S InputFocus
+and an inferior of the focus window contains the pointer
+and no clients have selected on that inferior,
+then
+a call to xname
+results in no event being sent.
+>>STRATEGY
+Create client2.
+Create parent window.
+Create inferior window.
+Select KeyPress-type events on parent window with client2.
+Flush client2 requests.
+Select no events on child window.
+Grab server.
+Enable synchronization.
+Set input focus to parent window.
+Save initial pointer location.
+Warp pointer to inferior of focus window.
+Get new pointer location.
+Discard all events in the event queue.
+Call XSendEvent to send a KeyPress event to inferior of the focus window.
+Get current pointer location.
+Check to see if pointer moved.
+Warp pointer back to where it started.
+Disable synchronization.
+Ungrab server.
+Verify that XSendEvent returned non-zero.
+Verify that no event was received for focus window.
+Verify that event was not received for client2.
+>>CODE
+Display *client2;
+XVisualInfo *vp;
+Window parent;
+Window child;
+int return_value;
+int root_x, root_y; /* pointer location after XSendEvent */
+int oroot_x, oroot_y; /* pointer location before XSendEvent */
+int sroot_x, sroot_y; /* initial pointer location */
+Window oldroot; /* initial root window */
+int itmp; /* useless XQueryPointer return values */
+unsigned int uitmp; /* useless XQueryPointer return values */
+Window wtmp; /* useless XQueryPointer return values */
+unsigned int width;
+unsigned int height;
+struct area a;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can't create new client.");
+ return;
+ }
+ else
+ CHECK;
+/* Create parent window. */
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ parent = makewin(display, vp);
+/* Create inferior window. */
+ getsize(display, (Drawable) parent, &width, &height);
+ a.x = 0;
+ a.y = 0;
+ a.width = width/2;
+ a.height = height/2;
+ child = crechild(display, parent, &a);
+/* Select KeyPress-type events on parent window with client2. */
+ XSelectInput(client2, parent, NoEventMask);
+/* Flush client2 requests. */
+ XFlush(client2);
+/* Select no events on child window. */
+ XSelectInput(display, child, NoEventMask);
+/* Grab server. */
+ XGrabServer(display);
+/* Enable synchronization. */
+ (void) XSynchronize(display, True);
+/* Set input focus to parent window. */
+ XSetInputFocus(display, parent, RevertToPointerRoot, CurrentTime);
+/* Save initial pointer location. */
+ (void) XQueryPointer(display, child, &oldroot, &wtmp, &sroot_x, &sroot_y, &itmp, &itmp, &uitmp);
+/* Warp pointer to inferior of focus window. */
+ XWarpPointer(display, None, child, 0, 0, 0, 0, 0, 0);
+
+/* Get new pointer location. */
+ if (XQueryPointer(display, child, &wtmp, &wtmp, &oroot_x, &oroot_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer on wrong root.");
+ (void) XSynchronize(display, False);
+ XUngrabServer(display);
+ return;
+ } else
+ CHECK;
+/* Discard all events in the event queue. */
+ XSync(display, True);
+/* Call XSendEvent to send a KeyPress event to inferior of the focus window. */
+ w = (Window) InputFocus;
+ propagate = False;
+ event_mask = KeyPressMask;
+ event_send->type = KeyPress;
+ ((XAnyEvent *) event_send)->window = child;
+ _xcall_(return_value);
+/* Get current pointer location. */
+ if (XQueryPointer(display, child, &wtmp, &wtmp, &root_x, &root_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer moved.");
+ (void) XSynchronize(display, False);
+ XUngrabServer(display);
+ return;
+ }
+ else
+ CHECK;
+/* Check to see if pointer moved. */
+ if (oroot_x != root_x || oroot_y != root_y) {
+ delete("Pointer moved.");
+ /*
+ * if this is ever changed to be a return, take care to
+ * also turn off synchronization and ungrab the server...
+ */
+ }
+ else
+ CHECK;
+/* Warp pointer back to where it started. */
+ XWarpPointer(display, None, oldroot, 0, 0, 0, 0, sroot_x, sroot_y);
+/* Disable synchronization. */
+ (void) XSynchronize(display, False);
+/* Ungrab server. */
+ XUngrabServer(display);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+ XSync(display, False);
+ XSync(client2, False);
+/* Verify that no event was received for focus window. */
+ if (XPending(display) > 0) {
+ XEvent event;
+
+ XNextEvent(display, &event);
+ report("Event(s) delivered unexpectedly (%s) to focus window", eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event was not received for client2. */
+ if (XPending(client2) > 0) {
+ XEvent event;
+
+ XNextEvent(client2, &event);
+ report("Event(s) delivered unexpectedly (%s)", eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(7);
+>>ASSERTION Good A
+When
+.A event_mask
+is not set to
+.S NoEventMask
+and
+.A w
+is set to
+.S InputFocus
+and an inferior of the focus window does not contain the pointer
+and no clients have selected on the focus window,
+then
+a call to xname
+results in no event being sent.
+>>STRATEGY
+Create window.
+Grab server.
+Enable synchronization.
+Set input focus to new focus window.
+Save initial pointer location.
+Warp pointer away from inferior of focus window; to root.
+Get new pointer location.
+Select no events on new focus window.
+Discard all events in the event queue.
+Call xname with propagate == False, w == InputFocus & event_mask == KeyPressMask.
+Get current pointer location.
+Check to see if pointer moved.
+Warp pointer back to where it started.
+Disable synchronization.
+Ungrab server.
+Verify that XSendEvent returned non-zero.
+Verify that no event was received.
+Grab server.
+Enable synchronization.
+Set input focus to new focus window.
+Save initial pointer location.
+Warp pointer away from inferior of focus window; to root.
+Get new pointer location.
+Call XSendEvent again with propagate set to True.
+Get current pointer location.
+Check to see if pointer moved.
+Warp pointer back to where it started.
+Disable synchronization.
+Ungrab server.
+Verify that XSendEvent returned non-zero.
+Verify that no event was received.
+>>CODE
+XVisualInfo *vp;
+Window nfocus;
+XEvent event_return;
+int return_value;
+int root_x, root_y; /* pointer location after XSendEvent */
+int oroot_x, oroot_y; /* pointer location before XSendEvent */
+int sroot_x, sroot_y; /* initial pointer location */
+Window oldroot; /* initial root window */
+int itmp; /* useless XQueryPointer return values */
+unsigned int uitmp; /* useless XQueryPointer return values */
+Window wtmp; /* useless XQueryPointer return values */
+
+/* Create window. */
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ nfocus = makewin(display, vp);
+/* Grab server. */
+ XGrabServer(display);
+/* Enable synchronization. */
+ (void) XSynchronize(display, True);
+/* Set input focus to new focus window. */
+ XSetInputFocus(display, nfocus, RevertToPointerRoot, CurrentTime);
+/* Save initial pointer location. */
+ (void) XQueryPointer(display, nfocus, &oldroot, &wtmp, &sroot_x, &sroot_y, &itmp, &itmp, &uitmp);
+/* Warp pointer away from inferior of focus window; to root. */
+ XWarpPointer(display, None, DRW(display), 0, 0, 0, 0, 0, 0);
+
+/* Get new pointer location. */
+ if (XQueryPointer(display, nfocus, &wtmp, &wtmp, &oroot_x, &oroot_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer on wrong root.");
+ (void) XSynchronize(display, False);
+ XUngrabServer(display);
+ return;
+ } else
+ CHECK;
+/* Select no events on new focus window. */
+ XSelectInput(display, nfocus, NoEventMask);
+/* Discard all events in the event queue. */
+ XSync(display, True);
+ w = (Window) InputFocus;
+ event_mask = KeyPressMask;
+ event_send->type = KeyPress;
+ ((XAnyEvent *) event_send)->window = nfocus;
+ propagate = False;
+/* Call xname with propagate == False, w == InputFocus & event_mask == KeyPressMask. */
+ _xcall_(return_value);
+/* Get current pointer location. */
+ if (XQueryPointer(display, nfocus, &wtmp, &wtmp, &root_x, &root_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer moved.");
+ (void) XSynchronize(display, False);
+ XUngrabServer(display);
+ return;
+ }
+ else
+ CHECK;
+/* Check to see if pointer moved. */
+ if (oroot_x != root_x || oroot_y != root_y) {
+ delete("Pointer moved.");
+ /*
+ * if this is ever changed to be a return, take care to
+ * also turn off synchronization and ungrab the server...
+ */
+ }
+ else
+ CHECK;
+/* Warp pointer back to where it started. */
+ XWarpPointer(display, None, oldroot, 0, 0, 0, 0, sroot_x, sroot_y);
+/* Disable synchronization. */
+ (void) XSynchronize(display, False);
+/* Ungrab server. */
+ XUngrabServer(display);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+ XSync(display, False);
+/* Verify that no event was received. */
+ XSync(display, False);
+ if (XPending(display) > 0) {
+ XEvent event;
+
+ XNextEvent(display, &event);
+ report("Event(s) delivered unexpectedly (%s)", eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Grab server. */
+ XGrabServer(display);
+/* Enable synchronization. */
+ (void) XSynchronize(display, True);
+/* Set input focus to new focus window. */
+ XSetInputFocus(display, nfocus, RevertToPointerRoot, CurrentTime);
+/* Save initial pointer location. */
+ (void) XQueryPointer(display, nfocus, &oldroot, &wtmp, &sroot_x, &sroot_y, &itmp, &itmp, &uitmp);
+/* Warp pointer away from inferior of focus window; to root. */
+ XWarpPointer(display, None, DRW(display), 0, 0, 0, 0, 0, 0);
+
+/* Get new pointer location. */
+ if (XQueryPointer(display, nfocus, &wtmp, &wtmp, &oroot_x, &oroot_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer on wrong root.");
+ (void) XSynchronize(display, False);
+ XUngrabServer(display);
+ return;
+ } else
+ CHECK;
+/* Call XSendEvent again with propagate set to True. */
+ propagate = True;
+ _xcall_(return_value);
+/* Get current pointer location. */
+ if (XQueryPointer(display, nfocus, &wtmp, &wtmp, &root_x, &root_y, &itmp, &itmp, &uitmp) == False) {
+ delete("Pointer moved.");
+ (void) XSynchronize(display, False);
+ XUngrabServer(display);
+ return;
+ }
+ else
+ CHECK;
+/* Check to see if pointer moved. */
+ if (oroot_x != root_x || oroot_y != root_y) {
+ delete("Pointer moved.");
+ /*
+ * if this is ever changed to be a return, take care to
+ * also turn off synchronization and ungrab the server...
+ */
+ }
+ else
+ CHECK;
+/* Warp pointer back to where it started. */
+ XWarpPointer(display, None, oldroot, 0, 0, 0, 0, sroot_x, sroot_y);
+/* Disable synchronization. */
+ (void) XSynchronize(display, False);
+/* Ungrab server. */
+ XUngrabServer(display);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+ XSync(display, False);
+/* Verify that no event was received. */
+ XSync(display, False);
+ if (XPending(display) > 0) {
+ XEvent event;
+
+ XNextEvent(display, &event);
+ report("Event(s) delivered unexpectedly (%s)", eventname(event.type));
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(10);
+>>ASSERTION Good A
+When
+.A event_mask
+is not set to
+.S NoEventMask
+and no clients have selected on the destination
+.A w
+and
+.A propagate
+is
+.S True
+and there is a matching ancestor of the destination
+.A w
+for which no intervening window has that type in its
+do-not-propagate-mask
+and that ancestor is an ancestor of the focus window
+and
+.S InputFocus
+was not specified as the destination,
+then
+a call to xname
+results in the event being sent to all clients selecting
+a type in
+.A event_mask
+on the first matching ancestor.
+>>STRATEGY
+Set event_mask to KeyPressMask.
+Set propagate to True.
+Create window hierarchy with depth of three and with all windows
+have no bits set in their do-not-propagate-mask.
+Set focus window to window mid-level in window hierarchy.
+Set w to window at bottom of window hierarchy.
+Create client2.
+Select no events on w.
+Select no events on w with client2.
+Select KeyPress events on top-level window in window hierarchy.
+Select KeyPress events on top-level window in window hierarchy
+with client2.
+Call XSendEvent to send a KeyPress event to w.
+Verify that XSendEvent returned non-zero.
+Verify that event was received for top-level window in window hierarchy.
+Verify that send_event was not set to False.
+Verify that event was received for top-level window in window hierarchy
+for client2.
+Verify that send_event was not set to False for client2.
+>>CODE
+Display *client2;
+Winh *grandparent;
+Winh *parent;
+Winh *child;
+int return_value;
+XEvent event_return;
+XAnyEvent *event;
+
+/* Set event_mask to KeyPressMask. */
+ event_mask = KeyPressMask;
+/* Set propagate to True. */
+ propagate = True;
+/* Create window hierarchy with depth of three and with all windows */
+/* have no bits set in their do-not-propagate-mask. */
+ grandparent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, (Winhg *) NULL, WINH_NOMASK);
+ if (grandparent == (Winh *) NULL) {
+ delete("Could not create grandparent");
+ return;
+ }
+ else
+ CHECK;
+ parent = winh_adopt(display, grandparent, 0L, (XSetWindowAttributes *) NULL, (Winhg *) NULL, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ delete("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ child = winh_adopt(display, parent, 0L, (XSetWindowAttributes *) NULL, (Winhg *) NULL, WINH_NOMASK);
+ if (child == (Winh *) NULL) {
+ delete("Could not create child");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_create(display, (Winh *) NULL, WINH_MAP)) {
+ return;
+ }
+ else
+ CHECK;
+/* Set focus window to window mid-level in window hierarchy. */
+ XSetInputFocus(display, parent->window, RevertToPointerRoot, CurrentTime);
+/* Set w to window at bottom of window hierarchy. */
+ w = child->window;
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can't create new client.");
+ return;
+ }
+ else
+ CHECK;
+/* Select no events on w. */
+ if (winh_selectinput(display, child, NoEventMask)) {
+ return;
+ }
+ else
+ CHECK;
+/* Select no events on w with client2. */
+ if (winh_selectinput(client2, child, NoEventMask)) {
+ return;
+ }
+ else
+ CHECK;
+/* Select KeyPress events on top-level window in window hierarchy. */
+ if (winh_selectinput(display, grandparent, KeyPressMask)) {
+ return;
+ }
+ else
+ CHECK;
+/* Select KeyPress events on top-level window in window hierarchy */
+/* with client2. */
+ if (winh_selectinput(client2, grandparent, KeyPressMask)) {
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, True);
+ XSync(client2, True);
+/* Call XSendEvent to send a KeyPress event to w. */
+ event_mask = KeyPressMask;
+ event_send->type = KeyPress;
+ ((XAnyEvent *) event_send)->window = grandparent->window;
+ _xcall_(return_value);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event was received for top-level window in window hierarchy. */
+ XSync(display, False);
+ if (XCheckTypedWindowEvent(display, grandparent->window, event_send->type, &event_return) != True) {
+ report("Expected event (%s) not received.", eventname(event_send->type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that send_event was not set to False. */
+ event = (XAnyEvent *) &event_return;
+ if (event->send_event == False) {
+ report("send_event not set to True");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event was received for top-level window in window hierarchy */
+/* for client2. */
+ XSync(client2, False);
+ if (XCheckTypedWindowEvent(client2, grandparent->window, event_send->type, &event_return) != True) {
+ report("Expected event (%s) not received.", eventname(event_send->type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that send_event was not set to False for client2. */
+ event = (XAnyEvent *) &event_return;
+ if (event->send_event == False) {
+ report("send_event not set to True");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(14);
+>>ASSERTION Good A
+When
+.A event_mask
+is not set to
+.S NoEventMask
+and no clients have selected on the destination
+.A w
+and
+.A propagate
+is
+.S True
+and there is a matching ancestor of the destination
+.A w
+for which no intervening window has that type in its
+do-not-propagate-mask
+and this ancestor is not an ancestor of the focus window,
+then
+a call to xname
+results in the event being sent to all clients selecting
+a type in
+.A event_mask
+on the first matching ancestor.
+>>STRATEGY
+Set event_mask to KeyPressMask.
+Set propagate to True.
+Create window hierarchy with depth of three and with all windows
+have no bits set in their do-not-propagate-mask.
+Set focus window to top window in window hierarchy.
+Set w to window at bottom of window hierarchy.
+Create client2.
+Select no events on w.
+Select no events on w with client2.
+Select KeyPress events on mid-level window in window hierarchy.
+Select KeyPress events on mid-level window in window hierarchy
+with client2.
+Call XSendEvent to send a KeyPress event to w.
+Verify that XSendEvent returned non-zero.
+Verify that event was received for mid-level window in window hierarchy.
+Verify that send_event was not set to False.
+Verify that event was received for mid-level window in window hierarchy
+for client2.
+Verify that send_event was not set to False for client2.
+>>CODE
+Display *client2;
+Winh *grandparent;
+Winh *parent;
+Winh *child;
+int return_value;
+XEvent event_return;
+XAnyEvent *event;
+
+/* Set event_mask to KeyPressMask. */
+ event_mask = KeyPressMask;
+/* Set propagate to True. */
+ propagate = True;
+/* Create window hierarchy with depth of three and with all windows */
+/* have no bits set in their do-not-propagate-mask. */
+ grandparent = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, (Winhg *) NULL, WINH_NOMASK);
+ if (grandparent == (Winh *) NULL) {
+ delete("Could not create grandparent");
+ return;
+ }
+ else
+ CHECK;
+ parent = winh_adopt(display, grandparent, 0L, (XSetWindowAttributes *) NULL, (Winhg *) NULL, WINH_NOMASK);
+ if (parent == (Winh *) NULL) {
+ delete("Could not create parent");
+ return;
+ }
+ else
+ CHECK;
+ child = winh_adopt(display, parent, 0L, (XSetWindowAttributes *) NULL, (Winhg *) NULL, WINH_NOMASK);
+ if (child == (Winh *) NULL) {
+ delete("Could not create child");
+ return;
+ }
+ else
+ CHECK;
+ if (winh_create(display, (Winh *) NULL, WINH_MAP)) {
+ return;
+ }
+ else
+ CHECK;
+/* Set focus window to top window in window hierarchy. */
+ XSetInputFocus(display, grandparent->window, RevertToPointerRoot, CurrentTime);
+/* Set w to window at bottom of window hierarchy. */
+ w = child->window;
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can't create new client.");
+ return;
+ }
+ else
+ CHECK;
+/* Select no events on w. */
+ if (winh_selectinput(display, child, NoEventMask)) {
+ return;
+ }
+ else
+ CHECK;
+/* Select no events on w with client2. */
+ if (winh_selectinput(client2, child, NoEventMask)) {
+ return;
+ }
+ else
+ CHECK;
+/* Select KeyPress events on mid-level window in window hierarchy. */
+ if (winh_selectinput(display, parent, KeyPressMask)) {
+ return;
+ }
+ else
+ CHECK;
+/* Select KeyPress events on mid-level window in window hierarchy */
+/* with client2. */
+ if (winh_selectinput(client2, parent, KeyPressMask)) {
+ return;
+ }
+ else
+ CHECK;
+ XSync(display, True);
+ XSync(client2, True);
+/* Call XSendEvent to send a KeyPress event to w. */
+ event_mask = KeyPressMask;
+ event_send->type = KeyPress;
+ ((XAnyEvent *) event_send)->window = parent->window;
+ _xcall_(return_value);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event was received for mid-level window in window hierarchy. */
+ XSync(display, False);
+ if (XCheckTypedWindowEvent(display, parent->window, event_send->type, &event_return) != True) {
+ report("Expected event (%s) not received.", eventname(event_send->type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that send_event was not set to False. */
+ event = (XAnyEvent *) &event_return;
+ if (event->send_event == False) {
+ report("send_event not set to True");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event was received for mid-level window in window hierarchy */
+/* for client2. */
+ XSync(client2, False);
+ if (XCheckTypedWindowEvent(client2, parent->window, event_send->type, &event_return) != True) {
+ report("Expected event (%s) not received.", eventname(event_send->type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that send_event was not set to False for client2. */
+ event = (XAnyEvent *) &event_return;
+ if (event->send_event == False) {
+ report("send_event not set to True");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(14);
+>>ASSERTION Good A
+A call to xname
+ignores active grabs.
+>>STRATEGY
+Create window.
+Select ALLEVENTS on this window.
+Set propagate to False.
+Create client2.
+Create window with client2.
+Grab the pointer with client2 using client2's window as the grab window,
+owner_events set to False, event_mask set to PointerMotionMask,
+pointer_mode set to GrabModeSync, and keyboard_mode set to GrabModeSync.
+Verify that XGrabPointer returned GrabSuccess.
+Grab AnyButton with client2 using client2's window as the grab window,
+owner_events set to False, event_mask set to ButtonPressMask,
+pointer_mode set to GrabModeSync, and keyboard_mode set to GrabModeSync.
+Grab the keyboard with client2 using client2's window as the grab window,
+owner_events set to False, pointer_mode set to GrabModeSync,
+and keyboard_mode set to GrabModeSync.
+Verify that XGrabKeyboard returned GrabSuccess.
+Set event_mask to PointerMotionMask.
+Flush display, discarding events.
+Flush client2, discarding events.
+Call XSendEvent to send a MotionNotify event.
+Verify that XSendEvent returned non-zero.
+Flush display, not discarding events.
+Flush client2, not discarding events.
+Verify that event was received.
+Verify that send_event was not set to False.
+Verify that client2 received no events.
+Set event_mask to ButtonPressMask.
+Flush display, discarding events.
+Flush client2, discarding events.
+Call XSendEvent to send a ButtonPress event.
+Verify that XSendEvent returned non-zero.
+Flush display, not discarding events.
+Flush client2, not discarding events.
+Verify that event was received.
+Verify that send_event was not set to False.
+Verify that client2 received no events.
+Set event_mask to KeyPressMask.
+Flush display, discarding events.
+Flush client2, discarding events.
+Call XSendEvent to send a KeyPress event.
+Flush display, not discarding events.
+Flush client2, not discarding events.
+Verify that XSendEvent returned non-zero.
+Verify that event was received.
+Verify that send_event was not set to False.
+Verify that client2 received no events.
+Ungrab the keyboard with client2.
+Ungrab buttons with client2.
+Ungrab the pointer with client2.
+>>CODE
+Display *client2;
+Window w2;
+int status;
+XAnyEvent *event;
+XEvent event_return;
+int return_value;
+
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ ((XAnyEvent *) event_send)->window = w;
+/* Select ALLEVENTS on this window. */
+ XSelectInput(display, w, ALLEVENTS);
+/* Set propagate to False. */
+ propagate = False;
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can't create new client.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window with client2. */
+ w2 = mkwin(client2, (XVisualInfo *) NULL, (struct area *) NULL, True);
+/* Grab the pointer with client2 using */
+/* client2's window as the grab window, */
+/* owner_events set to False, */
+/* event_mask set to PointerMotionMask, */
+/* pointer_mode set to GrabModeSync, */
+/* and keyboard_mode set to GrabModeSync. */
+ status = XGrabPointer(client2, w2, False, PointerMotionMask, GrabModeSync, GrabModeSync, None, None, CurrentTime);
+/* Verify that XGrabPointer returned GrabSuccess. */
+ if (status != GrabSuccess) {
+ delete("Can't grab pointer (%d).", status);
+ return;
+ }
+ else
+ CHECK;
+/* Grab AnyButton with client2 using */
+/* client2's window as the grab window, */
+/* owner_events set to False, */
+/* event_mask set to ButtonPressMask, */
+/* pointer_mode set to GrabModeSync, */
+/* and keyboard_mode set to GrabModeSync. */
+ XGrabButton(client2, AnyButton, AnyModifier, w2, False, ButtonPressMask, GrabModeSync, GrabModeSync, None, None);
+/* Grab the keyboard with client2 using */
+/* client2's window as the grab window, */
+/* owner_events set to False, */
+/* pointer_mode set to GrabModeSync, */
+/* and keyboard_mode set to GrabModeSync. */
+ status = XGrabKeyboard(client2, w2, False, GrabModeSync, GrabModeSync, CurrentTime);
+/* Verify that XGrabKeyboard returned GrabSuccess. */
+ if (status != GrabSuccess) {
+ delete("Can't grab keyboard (%d).", status);
+ return;
+ }
+ else
+ CHECK;
+/* Set event_mask to PointerMotionMask. */
+ event_mask = PointerMotionMask;
+ event_send->type = MotionNotify;
+/* Flush display, discarding events. */
+ XSync(display, True);
+/* Flush client2, discarding events. */
+ XSync(client2, True);
+/* Call XSendEvent to send a MotionNotify event. */
+ _xcall_(return_value);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Flush display, not discarding events. */
+ XSync(display, False);
+/* Flush client2, not discarding events. */
+ XSync(client2, False);
+/* Verify that event was received. */
+ if (XCheckTypedWindowEvent(display, w, event_send->type, &event_return) == False) {
+ report("Expected event (%s) not received.", eventname(event_send->type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that send_event was not set to False. */
+ event = (XAnyEvent *) &event_return;
+ if (event->send_event == False) {
+ report("send_event not set to True");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that client2 received no events. */
+ status = XPending(client2);
+ if (status != 0) {
+ report("Client2 received %d events, expected %d", status, 0);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Set event_mask to ButtonPressMask. */
+ event_mask = ButtonPressMask;
+ event_send->type = ButtonPress;
+/* Flush display, discarding events. */
+ XSync(display, True);
+/* Flush client2, discarding events. */
+ XSync(client2, True);
+/* Call XSendEvent to send a ButtonPress event. */
+ _xcall_(return_value);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Flush display, not discarding events. */
+ XSync(display, False);
+/* Flush client2, not discarding events. */
+ XSync(client2, False);
+/* Verify that event was received. */
+ if (XCheckTypedWindowEvent(display, w, event_send->type, &event_return) == False) {
+ report("Expected event (%s) not received.", eventname(event_send->type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that send_event was not set to False. */
+ event = (XAnyEvent *) &event_return;
+ if (event->send_event == False) {
+ report("send_event not set to True");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that client2 received no events. */
+ status = XPending(client2);
+ if (status != 0) {
+ report("Client2 received %d events, expected %d", status, 0);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Set event_mask to KeyPressMask. */
+ event_mask = KeyPressMask;
+ event_send->type = KeyPress;
+/* Flush display, discarding events. */
+ XSync(display, True);
+/* Flush client2, discarding events. */
+ XSync(client2, True);
+/* Call XSendEvent to send a KeyPress event. */
+ _xcall_(return_value);
+/* Flush display, not discarding events. */
+ XSync(display, False);
+/* Flush client2, not discarding events. */
+ XSync(client2, False);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event was received. */
+ if (XCheckTypedWindowEvent(display, w, event_send->type, &event_return) == False) {
+ report("Expected event (%s) not received.", eventname(event_send->type));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that send_event was not set to False. */
+ event = (XAnyEvent *) &event_return;
+ if (event->send_event == False) {
+ report("send_event not set to True");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that client2 received no events. */
+ status = XPending(client2);
+ if (status != 0) {
+ report("Client2 received %d events, expected %d", status, 0);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Ungrab the keyboard with client2. */
+ XUngrabKeyboard(client2, CurrentTime);
+/* Ungrab buttons with client2. */
+ XUngrabButton(client2, AnyButton, AnyModifier, w2);
+/* Ungrab the pointer with client2. */
+ XUngrabPointer(client2, CurrentTime);
+ CHECKPASS(15);
+>>ASSERTION Good A
+On a call to xname
+the only fields in the forwarded event which are changed
+are the
+.M send_event
+and
+.M serial
+fields.
+>>STRATEGY
+Create window.
+Set type member of event to KeyPress.
+Set serial member of event to 0.
+Set send_event member of event to False.
+Ignore display member of event, as it's filled in by Xlib.
+Set window member of event to -1.
+Discard all events in the event queue.
+Call XSendEvent to send event to creator of window.
+Verify that XSendEvent returned non-zero.
+Verify that event was received.
+Verify that type was set to KeyPress.
+Verify that serial was not set to 0.
+Verify that send_event was not set to False.
+Check display member of event was filled in by Xlib properly.
+Verify that window was set to 0.
+Repeat for each event-type.
+>>CODE
+int i;
+XAnyEvent *event;
+XEvent event_return;
+int return_value;
+
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ propagate = False;
+ event_mask = NoEventMask;
+ event = (XAnyEvent *) &event_return;
+ for (i = 0; i < NELEM(event_types); i++) {
+ char *en = eventname(event_types[i]);
+
+/* Set type member of event to KeyPress. */
+ event_send->type = event_types[i];
+ if (event_send->type == ClientMessage)
+ ((XClientMessageEvent *) event_send)->format = 32;
+
+/* Set serial member of event to 0. */
+ event_send->xany.serial = 0;
+
+/* Set send_event member of event to False. */
+ event_send->xany.send_event = False;
+
+/* Ignore display member of event, as it's filled in by Xlib. */
+ event_send->xany.display = (Display *) NULL;
+
+/* Set window member of event to -1. */
+ event_send->xany.window = (Window) -1;
+
+/* Discard all events in the event queue. */
+ XSync(display, True);
+
+/* Call XSendEvent to send event to creator of window. */
+ _xcall_(return_value);
+
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("%s: Returned zero, expected non-zero.",en);
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Verify that event was received. */
+ XSync(display, False);
+ if (XPending(display) == 0) {
+ report("%s: No events received.",en);
+ FAIL;
+ continue;
+ }
+ else
+ CHECK;
+ if (XCheckTypedEvent(display, event_send->type, &event_return) == False) {
+ report("Expected event (%s) not received.", en);
+ FAIL;
+ continue;
+ }
+ else
+ CHECK;
+
+/* Verify that type was set to KeyPress. */
+ if (event->type != event_types[i]) {
+ report("type set to %s, expected %s", eventname(event->type), en);
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Verify that serial was not set to 0. */
+ if (event->serial == 0) {
+ report("%s: serial set to zero, expected non-zero",en);
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Verify that send_event was not set to False. */
+ if (event->send_event == False) {
+ report("%s: send_event not set to True", en);
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Check display member of event was filled in by Xlib properly. */
+ if (event->display != display) {
+ report("%s: display not set to my display", en);
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Verify that window was set to 0. */
+ if (event->window != (Window) -1 &&
+ event->type != MappingNotify &&
+ event->type != KeymapNotify) {
+ report("%s: window set to 0x%x, expected 0x%x", en, event->window, (Window) -1);
+ FAIL;
+ }
+ else
+ CHECK;
+
+/* Repeat for each event-type. */
+ }
+ CHECKPASS(8*NELEM(event_types));
+>>ASSERTION def
+On a call to xname
+the
+.M send_event
+field in the forwarded event is set to
+.S True .
+>>ASSERTION Good A
+>>#NOTE peterc This might be a little tricky...
+On a call to xname
+the
+.M serial
+field in the forwarded event is set correctly.
+>>STRATEGY
+Create window.
+Set serial to zero.
+Call NextRequest to get correct serial.
+Call XSendEvent.
+Verify that XSendEvent returned non-zero.
+Verify that event was received.
+Verify that serial in delivered event is set correctly.
+>>CODE
+int correctserial;
+XAnyEvent *event;
+XEvent event_return;
+int return_value;
+
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ propagate = False;
+ event_mask = NoEventMask;
+/* Set serial to zero. */
+ event = (XAnyEvent *) event_send;
+ event->serial = 0;
+ event_send->type = KeyPress;
+/* Call NextRequest to get correct serial. */
+ correctserial = NextRequest(display);
+/* Call XSendEvent. */
+ _xcall_(return_value);
+/* Verify that XSendEvent returned non-zero. */
+ if (return_value == 0) {
+ report("Returned zero, expected non-zero.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event was received. */
+ XFlush(display);
+ XSync(display, False);
+ if (XPending(display) == 0) {
+ report("No events received.");
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+ if (XCheckTypedEvent(display, event_send->type, &event_return) == False) {
+ report("Expected event (%s) not received.", eventname(event_send->type));
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+/* Verify that serial in delivered event is set correctly. */
+ event = (XAnyEvent *) &event_return;
+ if (event->serial != correctserial) {
+ report("Serial set to %d, expected %d", event->serial, correctserial);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(4);
+>>ASSERTION Good A
+The
+.M b
+member of the
+.M data
+union is
+an array of 20 chars.
+>>STRATEGY
+Set type to ClientMessage.
+Verify that the size of the b member of the data union is 20 bytes.
+>>CODE
+XClientMessageEvent *event;
+
+ event = (XClientMessageEvent *) event_send;
+/* Set type to ClientMessage. */
+ event->type = ClientMessage;
+/* Verify that the size of the b member of the data union is 20 bytes. */
+ if (sizeof(event->data.b) != 20) {
+ report("Size %d, expected %d", sizeof(event->data.b), 20);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION Good A
+The
+.M s
+member of the
+.M data
+union is
+an array of 10 shorts.
+>>STRATEGY
+Set type to ClientMessage.
+Verify that the size of the s member of the data union is 20 bytes.
+>>CODE
+XClientMessageEvent *event;
+
+ event = (XClientMessageEvent *) event_send;
+/* Set type to ClientMessage. */
+ event->type = ClientMessage;
+/* Verify that the size of the s member of the data union is 20 bytes. */
+ if (sizeof(event->data.s) != 20) {
+ report("Size %d, expected %d", sizeof(event->data.s), 20);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION Good A
+The
+.M l
+member of the
+.M data
+union is
+an array of 5 longs.
+>>STRATEGY
+Set type to ClientMessage.
+Verify that the size of the l member of the data union is 20 bytes.
+>>CODE
+XClientMessageEvent *event;
+
+ event = (XClientMessageEvent *) event_send;
+/* Set type to ClientMessage. */
+ event->type = ClientMessage;
+/* Verify that the size of the l member of the data union is 20 bytes. */
+ if (sizeof(event->data.l) != 20) {
+ report("Size %d, expected %d", sizeof(event->data.l), 20);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION Bad A
+When
+.A event_send
+is a
+.S ClientMessage -type
+event
+and the
+.M format
+field of
+.A event_send
+is not one of 8, 16, or 32,
+>># Next line altered at the request of MIT (bug report 65).
+>># then a
+then either xname returns zero or a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create window.
+Set format field of event_send to 0.
+Call XSendEvent to send ClientMessage-type event.
+Verify that XSendEvent either returned zero and no error occurs,
+ or returned non-zero and a BadValue error occurs.
+>>CODE
+int return_value;
+
+ propagate = False;
+ event_mask = NoEventMask;
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Set format field of event_send to 0. */
+ ((XClientMessageEvent *)event_send)->format = 0;
+/* Call XSendEvent to send ClientMessage-type event. */
+ event_send->type = ClientMessage;
+
+>>SET no-error-status-check
+ return_value = XCALL;
+
+/* Verify that XSendEvent either returned zero and no error occurs, */
+/* or returned non-zero and a BadValue error occurs. */
+ if (return_value == 0) {
+ if(geterr() != Success) {
+ FAIL;
+ report("%s returned zero, but got %s when expecting no error.",
+ TestName, errorname(geterr()));
+ } else {
+ trace("%s returned zero and no error", TestName);
+ CHECK;
+ }
+ } else {
+ if (geterr() != BadValue) {
+ FAIL;
+ report("%s returned non-zero, but got %s when expecting %s",
+ TestName, errorname(geterr()), errorname(BadValue));
+ } else {
+ trace("%s returned non-zero and BadValue", TestName);
+ CHECK;
+ }
+ }
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+>>#NOTE How does one determine events associated with an extension?
+>>#NOTE Responses to this question include:
+>>#NOTE Use XListExtensions?
+>>#NOTE Use testing extension?
+>>#NOTE Use values which don't correspond to known event types?
+>>#NOTE At present, the strategy chooses the last option.
+When the event in
+.A event_send
+is not one of the core events or one of the events defined by an extension,
+>># Next line altered at the request of MIT (bug report 60).
+>># then a
+then either xname returns zero or a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create window.
+Use notmember() to get some bad event types.
+Make sure this list also includes 0 and 1 which are specifically for errors and replies.
+Call XSendEvent to send bad event type.
+Verify that XSendEvent either returned zero and no error occurs,
+ or returned non-zero and a BadValue error occurs.
+>>CODE BadValue
+int i;
+int n;
+int return_value;
+long bad_event_types[NM_LEN+2];
+
+ propagate = False;
+ event_mask = NoEventMask;
+
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+
+/* Use notmember() to get some bad event types. */
+ n = notmember(event_types, NELEM(event_types), &bad_event_types[2]);
+
+/* Make sure this list also includes 0 and 1 which are specifically for errors and replies. */
+ n += 2;
+ bad_event_types[0] = 0;
+ bad_event_types[1] = 1;
+ for (i = 0; i < n; i++) {
+
+/* Call XSendEvent to send bad event type. */
+ event_send->type = bad_event_types[i];
+ trace("Using known bad event type %d.", event_send->type);
+>>SET no-error-status-check
+ return_value = XCALL;
+
+/* Verify that XSendEvent either returned zero and no error occurs, */
+/* or returned non-zero and a BadValue error occurs. */
+ if (return_value == 0) {
+ if(geterr() != Success) {
+ FAIL;
+ report("%s returned zero, but got %s when expecting no error.",
+ TestName, errorname(geterr()));
+ } else {
+ trace("%s returned zero and no error", TestName);
+ CHECK;
+ }
+ } else {
+ if (geterr() != BadValue) {
+ FAIL;
+ report("%s returned non-zero, but got %s when expecting %s",
+ TestName, errorname(geterr()), errorname(BadValue));
+ } else {
+ trace("%s returned non-zero and BadValue", TestName);
+ CHECK;
+ }
+ }
+ }
+
+ CHECKPASS(n);
+>>ASSERTION Bad A
+When a window argument does not name a valid window, then a
+.S BadWindow
+error occurs.
+>>STRATEGY
+Create a bad window by creating and destroying a window.
+Initialise the event structure for the call.
+Verify that a BadWindow error occurs.
+>>CODE BadWindow
+int return_value;
+
+ seterrdef();
+
+/* Create a bad window by creating and destroying a window. */
+ w = badwin(display);
+
+/* Initialise the event structure for the call. */
+ propagate = False;
+ event_send->type = KeyPress;
+
+/* Call xname using bad window as the window argument.*/
+ return_value = XCALL;
+ if (return_value == 0) {
+ FAIL;
+ report("%s returned zero, expecting a non-zero result.",
+ TestName);
+ } else
+ CHECK;
+
+/* Verify that a BadWindow error occurs. */
+ if (geterr() == BadWindow)
+ CHECK;
+ else
+ FAIL;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH08/staftrfnct/staftrfnct.m b/xc/test/xsuite/xtest/tset/CH08/staftrfnct/staftrfnct.m
new file mode 100644
index 000000000..a9930b4e7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/staftrfnct/staftrfnct.m
@@ -0,0 +1,115 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetAfterFunction CH08
+int ((*)())()
+XSetAfterFunction(display, procedure)
+Display *display = Dsp;
+int (*procedure)() = afterfunction;
+>>EXTERN
+static int counter = 0;
+
+static int
+afterfunction(display)
+Display *display;
+{
+ trace("In afterfunction(), screen number %d", XDefaultScreen(display));
+ return(counter++);
+}
+static int
+_afterfunction(display)
+Display *display;
+{
+ trace("In _afterfunction(), screen number %d", XDefaultScreen(display));
+ return(--counter);
+}
+>>ASSERTION Good A
+A call to xname
+sets the after function to
+.A procedure .
+>>STRATEGY
+Create window.
+Verify that afterfunction was not called.
+Call XSetAfterFunction to set the after function to afterfunction.
+Create window.
+Verify that the after function was called.
+>>CODE
+int oldcounter;
+
+ oldcounter = counter;
+/* Create window. */
+ (void) mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Verify that afterfunction was not called. */
+ if (counter != oldcounter) {
+ delete("After function already set to afterfunction.");
+ return;
+ }
+ else
+ CHECK;
+/* Call XSetAfterFunction to set the after function to afterfunction. */
+ (void) XCALL;
+/* Create window. */
+ (void) mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Verify that the after function was called. */
+ if (counter == oldcounter) {
+ report("After function not called.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
+>>ASSERTION Good A
+A call to xname
+returns the previous after function.
+>>STRATEGY
+Call XSetAfterFunction to set after function to afterfunction.
+Call XSetAfterFunction to set after function to _afterfunction.
+Verify that XSetAfterFunction returned afterfunction.
+Call XSetAfterFunction to set after function to afterfunction.
+Verify that XSetAfterFunction returned _afterfunction.
+>>CODE
+int (*proc)();
+
+/* Call XSetAfterFunction to set after function to afterfunction. */
+ procedure = afterfunction;
+ (void) XCALL;
+/* Call XSetAfterFunction to set after function to _afterfunction. */
+ procedure = _afterfunction;
+ proc = XCALL;
+/* Verify that XSetAfterFunction returned afterfunction. */
+ if (proc != afterfunction) {
+ report("Returned 0x%x, expected 0x%x", proc, afterfunction);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XSetAfterFunction to set after function to afterfunction. */
+ procedure = afterfunction;
+ proc = XCALL;
+/* Verify that XSetAfterFunction returned _afterfunction. */
+ if (proc != _afterfunction) {
+ report("Returned 0x%x, expected 0x%x", proc, _afterfunction);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
+>>ASSERTION Good B 6
+>>#NOTE Category B, reason 6 (unreasonable amount of test development time).
+After a call to xname,
+all Xlib functions that generate protocol requests call
+.A procedure
+before returning.
diff --git a/xc/test/xsuite/xtest/tset/CH08/sterrrhndl/sterrrhndl.m b/xc/test/xsuite/xtest/tset/CH08/sterrrhndl/sterrrhndl.m
new file mode 100644
index 000000000..dfb0f39ba
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/sterrrhndl/sterrrhndl.m
@@ -0,0 +1,498 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetErrorHandler CH08
+int ((*)())()
+XSetErrorHandler(handler)
+int (*handler)();
+>>EXTERN
+#include <signal.h>
+#include <sys/wait.h>
+#include "Xproto.h"
+
+#define _xcall_(rvalue) rvalue = XSetErrorHandler(handler)
+
+static int counter = 0;
+static int lastserial = 0;
+static int lastrequest_code = 0;
+
+static int
+errorhandler(display, errorevent)
+Display *display;
+XErrorEvent *errorevent;
+{
+ lastserial = errorevent->serial;
+ lastrequest_code = errorevent->request_code;
+ return(counter++);
+}
+
+static int
+_errorhandler(display, errorevent)
+Display *display;
+XErrorEvent *errorevent;
+{
+ return(counter--);
+}
+
+>>ASSERTION Good A
+A call to xname
+sets the error handler to
+.A handler .
+>>STRATEGY
+Call XSetErrorHandler to set error handler to errorhandler.
+Generate an error.
+Verify that errorhandler was called.
+>>CODE
+int oldcounter;
+Window w;
+int (*proc)();
+Display *display = Dsp;
+
+/* Call XSetErrorHandler to set error handler to errorhandler. */
+ handler = errorhandler;
+ _xcall_(proc);
+/* Generate an error. */
+ w = badwin(display);
+ oldcounter = counter;
+ XDestroyWindow(display, w);
+ XSync(display, True);
+/* Verify that errorhandler was called. */
+ /* assume that if it was not called it was not set... */
+ if (counter == oldcounter) {
+ report("Error handler not set.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION Good A
+A call to xname
+returns the previous error handler.
+>>STRATEGY
+Call XSetErrorHandler to set error handler to errorhandler.
+Call XSetErrorHandler to set error handler to _errorhandler.
+Verify that errorhandler was returned.
+Call XSetErrorHandler to set error handler to errorhandler.
+Verify that _errorhandler was returned.
+>>CODE
+int (*proc)();
+
+/* Call XSetErrorHandler to set error handler to errorhandler. */
+ handler = errorhandler;
+ _xcall_(proc);
+/* Call XSetErrorHandler to set error handler to _errorhandler. */
+ handler = _errorhandler;
+ _xcall_(proc);
+/* Verify that errorhandler was returned. */
+ if (proc != errorhandler) {
+ report("Returned 0x%x, expected 0x%x", proc, errorhandler);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XSetErrorHandler to set error handler to errorhandler. */
+ handler = errorhandler;
+ _xcall_(proc);
+/* Verify that _errorhandler was returned. */
+ if (proc != _errorhandler) {
+ report("Returned 0x%x, expected 0x%x", proc, _errorhandler);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
+>>ASSERTION Good B 1
+>>#NOTE Don't know the default error handler...
+A call to xname with
+.A handler
+set to
+.S NULL
+sets the error handler to the default error handler.
+>>ASSERTION Good A
+The default error handler prints a message and exits.
+>>STRATEGY
+Get default error handler.
+Create child process.
+Child calls default error handler and loops forever.
+Parent sleeps for 10 seconds.
+Parent verifies that child no longer exists.
+>>EXTERN
+
+#include <sys/types.h>
+#include <fcntl.h>
+#include <stdio.h>
+
+#define MESSBUF 55
+
+>>CODE
+int (*proc)();
+pid_t child;
+int stat_loc;
+int waitstatus;
+Display *display = Dsp;
+int p[2];
+int gotmessage = 0;
+char buf[MESSBUF];
+FILE *fp;
+
+/* Get default error handler. */
+ handler = (int (*)()) NULL;
+ _xcall_(proc);
+ /* requires two calls! */
+ _xcall_(proc);
+
+ if (pipe(p) == -1) {
+ delete("Could not create pipe");
+ return;
+ }
+
+/* Create child process. */
+ child = fork();
+ if (!child) {
+ XErrorEvent event;
+ event.error_code = BadWindow;
+
+ close(p[0]);
+ /*
+ * Capture both stdout and stderr into the pipe.
+ */
+ dup2(p[1], 1);
+ dup2(p[1], 2);
+
+/* Child calls default error handler and loops forever. */
+ (*proc)(display, &event);
+
+ /*
+ * Now close the pipe to make sure that the parent will not hang.
+ */
+ close(p[1]);
+ close(1);
+ close(2);
+
+ for (;;)
+ continue;
+ /*NOTREACHED*/
+ }
+ else
+ CHECK;
+
+ close(p[1]);
+
+/* Parent sleeps for 10 seconds. */
+ sleep(10);
+
+ /*
+ * Read message in reasonable size chunks.
+ */
+ fp = fdopen(p[0], "r");
+ if (fp == NULL) {
+ delete("Could not fdopen pipe");
+ return;
+ }
+ trace("The message produced by the default handler:");
+ gotmessage = 0;
+ while (fgets(buf, MESSBUF-1, fp)) {
+ gotmessage = 1;
+ buf[MESSBUF-1] = '\0';
+ trace("Message: %s", buf);
+ }
+
+ if (!gotmessage) {
+ report("No message was printed");
+ FAIL;
+ } else
+ CHECK;
+
+/* Parent verifies that child no longer exists. */
+ waitstatus = waitpid(child, &stat_loc, WNOHANG);
+ if (waitstatus != child) {
+ report("Child did not exit.");
+ FAIL;
+ (void) kill(child, SIGKILL);
+ (void) waitpid(child, &stat_loc, WNOHANG);
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
+>>ASSERTION Good B 5
+>>#NOTE Untestable, life is too short!
+There is no limit to the number of times xname may be called.
+>>STRATEGY
+Set handler to errorhandler.
+Call XSetErrorHandler 1000 times.
+Report untested.
+>>CODE
+int (*proc)();
+int i;
+
+/* Set handler to errorhandler. */
+ handler = errorhandler;
+/* Call XSetErrorHandler 1000 times. */
+ for (i=0; i<1000; i++) {
+ if (i == 0)
+ CHECK;
+ proc = XCALL;
+ }
+/* Report untested. */
+ CHECKUNTESTED(1);
+>>ASSERTION Good A
+When a
+.S BadName
+error occurs from a call to
+.S XLoadQueryFont ,
+.S XLookupColor ,
+or
+.S XAllocNamedColor ,
+then
+.A handler
+is not called.
+>>STRATEGY
+Set error handler to errorhandler.
+Generate a BadName error through a call to XLoadQueryFont.
+Verify that XLoadQueryFont returned NULL.
+Verify that errorhandler was not called.
+Generate a BadName error through a call to XLookupColor.
+Verify that XLookupColor returned 0.
+Verify that errorhandler was not called.
+Generate a BadName error through a call to XAllocNamedColor.
+Verify that XAllocNamedColor returned 0.
+Verify that errorhandler was not called.
+>>CODE
+int (*proc)();
+Display *display = Dsp;
+int oldcounter;
+int status;
+XFontStruct *font_struct;
+Colormap colormap;
+XColor exact_def, screen_def;
+
+/* Set error handler to errorhandler. */
+ handler = errorhandler;
+ _xcall_(proc);
+/* Generate a BadName error through a call to XLoadQueryFont. */
+ oldcounter = counter;
+ font_struct = XLoadQueryFont(display, config.bad_font_name);
+ XSync(display, True);
+/* Verify that XLoadQueryFont returned NULL. */
+ if (font_struct != (XFontStruct *) NULL) {
+ delete("XLoadQueryFont did not return NULL.");
+ XFreeFont(display, font_struct);
+ return;
+ }
+ else
+ CHECK;
+/* Verify that errorhandler was not called. */
+ if (counter != oldcounter) {
+ report("Error handler was called.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Generate a BadName error through a call to XLookupColor. */
+ oldcounter = counter;
+ colormap = makecolmap(display, DefaultVisual(display, DefaultScreen(display)), AllocNone);
+ status = XLookupColor(display, colormap, config.bad_colorname, &exact_def, &screen_def);
+ XSync(display, True);
+/* Verify that XLookupColor returned 0. */
+ if (status != 0) {
+ delete("XLookupColor returned %d, expected 0.", status);
+ return;
+ }
+ else
+ CHECK;
+/* Verify that errorhandler was not called. */
+ if (counter != oldcounter) {
+ report("Error handler was called.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Generate a BadName error through a call to XAllocNamedColor. */
+ oldcounter = counter;
+ /* re-use colormap from previous test. */
+ status = XAllocNamedColor(display, colormap, config.bad_colorname, &exact_def, &screen_def);
+ XSync(display, True);
+/* Verify that XAllocNamedColor returned 0. */
+ if (status != 0) {
+ delete("XAllocNamedColor returned %d, expected 0.", status);
+ return;
+ }
+ else
+ CHECK;
+/* Verify that errorhandler was not called. */
+ if (counter != oldcounter) {
+ report("Error handler was called.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(6);
+>>ASSERTION Good A
+When a
+.S BadFont
+error occurs from a
+.S QueryFont
+protocol request,
+then
+.A handler
+is not called.
+>>STRATEGY
+Set error handler to errorhandler.
+Create a bad font ID.
+Call XQueryFont to generate a BadFont error.
+Verify that XQueryFont returned NULL.
+Verify that errorhandler was not called.
+>>CODE
+int (*proc)();
+Display *display = Dsp;
+int oldcounter;
+Font font;
+XFontStruct *font_struct;
+
+/* Set error handler to errorhandler. */
+ handler = errorhandler;
+ _xcall_(proc);
+/* Create a bad font ID. */
+ font = badfont(display);
+/* Call XQueryFont to generate a BadFont error. */
+ oldcounter = counter;
+ font_struct = XQueryFont(display, font);
+ XSync(display, True);
+/* Verify that XQueryFont returned NULL. */
+ if (font_struct != (XFontStruct *) NULL) {
+ delete("XQueryFont did not return NULL.");
+ XFreeFont(display, font_struct);
+ return;
+ }
+ else
+ CHECK;
+/* Verify that errorhandler was not called. */
+ if (counter != oldcounter) {
+ report("Error handler was called.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
+>>ASSERTION Good A
+On a call to
+.A handler ,
+the
+.M serial
+member in the
+.M XErrorEvent
+structure is set to the number that was the value of
+.F NextRequest
+immediately before the protocol request was sent.
+>>STRATEGY
+Call XSetErrorHandler to set error handler to errorhandler.
+Create window.
+Destroy window.
+Call NextRequest to get the serial number to be used in the next request.
+Call XDestroyWindow to generate a BadWindow error.
+Verify that errorhandler was called.
+Verify that the serial member in the XErrorEvent structure
+was set correctly.
+>>CODE
+int (*proc)();
+Display *display = Dsp;
+int oldcounter;
+Window w;
+unsigned long nextrequest;
+
+/* Call XSetErrorHandler to set error handler to errorhandler. */
+ handler = errorhandler;
+ _xcall_(proc);
+/* Create window. */
+ w = XCreateSimpleWindow(display, DefaultRootWindow(display), 0, 0, 5, 5, 0, 0, 0);
+/* Destroy window. */
+ XDestroyWindow(display, w);
+ XSync(display, True);
+/* Call NextRequest to get the serial number to be used in the next request. */
+ nextrequest = NextRequest(display);
+/* Call XDestroyWindow to generate a BadWindow error. */
+ oldcounter = counter;
+ XDestroyWindow(display, w);
+ XSync(display, True);
+/* Verify that errorhandler was called. */
+ if (counter == oldcounter) {
+ delete("Error handler was not called.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the serial member in the XErrorEvent structure */
+/* was set correctly. */
+ if (nextrequest != lastserial) {
+ report("Returned %d, expected %d", lastserial, nextrequest);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
+>>ASSERTION Good A
+On a call to
+.A handler ,
+the
+.M request_code
+member in the
+.M XErrorEvent
+structure is set to the protocol request of the procedure that failed.
+>>STRATEGY
+Call XSetErrorHandler to set error handler to errorhandler.
+Create window.
+Destroy window.
+Call XDestroyWindow to generate a BadWindow error.
+Verify that errorhandler was called.
+Verify that the request_code member in the XErrorEvent structure
+was set correctly.
+>>CODE
+int (*proc)();
+Display *display = Dsp;
+int oldcounter;
+Window w;
+unsigned long nextrequest;
+
+/* Call XSetErrorHandler to set error handler to errorhandler. */
+ handler = errorhandler;
+ _xcall_(proc);
+/* Create window. */
+ w = XCreateSimpleWindow(display, DefaultRootWindow(display), 0, 0, 5, 5, 0, 0, 0);
+/* Destroy window. */
+ XDestroyWindow(display, w);
+ XSync(display, True);
+/* Call XDestroyWindow to generate a BadWindow error. */
+ oldcounter = counter;
+ /* make sure that it does not already equal X_DestroyWindow */
+ lastrequest_code = X_DestroyWindow + 1;
+ XDestroyWindow(display, w);
+ XSync(display, True);
+/* Verify that errorhandler was called. */
+ if (counter == oldcounter) {
+ delete("Error handler was not called.");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that the request_code member in the XErrorEvent structure */
+/* was set correctly. */
+ if (lastrequest_code != X_DestroyWindow) {
+ report("Returned %d, expected %d", lastrequest_code, X_DestroyWindow);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH08/stioerrrhn/stioerrrhn.m b/xc/test/xsuite/xtest/tset/CH08/stioerrrhn/stioerrrhn.m
new file mode 100644
index 000000000..0f5afc96b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/stioerrrhn/stioerrrhn.m
@@ -0,0 +1,367 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetIOErrorHandler CH08
+int ((*)())()
+XSetIOErrorHandler(handler)
+int (*handler)();
+>>EXTERN
+#include <signal.h>
+#include <sys/wait.h>
+
+#define _xcall_(rvalue) rvalue = XSetIOErrorHandler(handler)
+
+static Display *client;
+static int exit_status = -1;
+static int counter = 0;
+
+/*
+ * various exit values are used because we do not know the exit status
+ * used by the default handler
+ */
+static int exit_statuses[] = {
+ 2, 3, 4, 8, 16
+};
+
+static int
+errorhandler(display)
+Display *display;
+{
+ /* Handler exits with exit status of exit_status. */
+ exit(exit_status);
+}
+
+static int
+_errorhandler(display)
+Display *display;
+{
+ /* Handler returns first time called. */
+ /* Handler exits upon second and subsequent invocations */
+ /* with exit status of exit_status. */
+ if (counter++)
+ exit(exit_status);
+ return(0);
+}
+
+/*
+ * Child exits with exit_status on success.
+ * Child exits with exit_status+1 to indicate TET_DELETE.
+ * Child exits with exit_status-1 to indicate failure.
+ */
+static void
+child_proc1()
+{
+ Window w;
+ int fail = 0;
+
+ /* Child process closes connection number. */
+ if (close(ConnectionNumber(client))) {
+ report("Close failed on ConnectionNumber number.");
+ exit(exit_status + 1);
+ }
+ /* Child process attempts to communicate to server, */
+ /* causing handler to be invoked. */
+ w = XCreateSimpleWindow(client, DefaultRootWindow(client), 1, 1, 50, 50, 1, 0, 0);
+ XFlush(client);
+
+ report("Handler not invoked or did not exit");
+ FAIL;
+ exit(exit_status - 1);
+}
+
+>>#NOTE Because the handler does not return, most of these tests must
+>>#NOTE be done through a child process.
+>>ASSERTION Good A
+A call to xname sets the fatal I/O error handler to
+.A handler .
+>>STRATEGY
+Call XSetIOErrorHandler to set the handler to errorhandler.
+Open display.
+Set exit_status.
+Create child process.
+Child process closes connection number.
+Child process attempts to communicate to server,
+causing handler to be invoked.
+Handler exits with exit status of exit_status.
+Verify that child's exit status was exit_status.
+Repeat for various other exit_status values.
+>>CODE
+int (*proc)();
+int child_exit;
+int i;
+
+/* Call XSetIOErrorHandler to set the handler to errorhandler. */
+ handler = errorhandler;
+ _xcall_(proc);
+ for (i=0; i<NELEM(exit_statuses); i++) {
+/* Open display. */
+ client = opendisplay();
+ if (client == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Set exit_status. */
+ exit_status = exit_statuses[i];
+/* Create child process. */
+ child_exit = tet_fork(child_proc1, (void (*)()) NULL, 20, ~0);
+/* Child process closes connection number. */
+/* Child process attempts to communicate to server, */
+/* causing handler to be invoked. */
+/* Handler exits with exit status of exit_status. */
+/* Verify that child's exit status was exit_status. */
+ if (child_exit == (exit_statuses[i]+1)) {
+ delete("Child process experienced unexpected problem.");
+ return;
+ }
+ else
+ CHECK;
+ if (child_exit != exit_statuses[i]) {
+ report("Handler not invoked (got %d exit status, expected %d.", child_exit, exit_statuses[i]);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Repeat for various other exit_status values. */
+ }
+ CHECKPASS(3*NELEM(exit_statuses));
+>>ASSERTION Good A
+A call to xname returns the previous fatal I/O error handler.
+>>STRATEGY
+Call XSetIOErrorHandler to set error handler to errorhandler.
+Call XSetIOErrorHandler to set error handler to _errorhandler.
+Verify that errorhandler was returned.
+Call XSetIOErrorHandler to set error handler to errorhandler.
+Verify that _errorhandler was returned.
+>>CODE
+int (*proc)();
+
+/* Call XSetIOErrorHandler to set error handler to errorhandler. */
+ handler = errorhandler;
+ _xcall_(proc);
+/* Call XSetIOErrorHandler to set error handler to _errorhandler. */
+ handler = _errorhandler;
+ _xcall_(proc);
+/* Verify that errorhandler was returned. */
+ if (proc != errorhandler) {
+ report("Returned 0x%x, expected 0x%x", proc, errorhandler);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XSetIOErrorHandler to set error handler to errorhandler. */
+ handler = errorhandler;
+ _xcall_(proc);
+/* Verify that _errorhandler was returned. */
+ if (proc != _errorhandler) {
+ report("Returned 0x%x, expected 0x%x", proc, _errorhandler);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
+>>ASSERTION Good B 1
+On a call to xname with
+.A handler
+set to NULL
+the fatal I/O error handler is set to the default fatal I/O error handler.
+>>ASSERTION Good A
+>>#NOTE May want to fork() and have the child invoke the error handler.
+>>#NOTE Verify merely that XSetIOErrorHandler does not return and that
+>>#NOTE the child exited.
+The default fatal I/O error handler prints a message and exits.
+>>STRATEGY
+Get default error handler.
+Create child process.
+Child calls default error handler and loops forever.
+Parent sleeps for 10 seconds.
+Parent verifies that child no longer exists.
+>>EXTERN
+
+#include <stdio.h>
+#define MESSBUF 55
+
+>>CODE
+int (*proc)();
+pid_t child;
+int stat_loc;
+int waitstatus;
+int p[2];
+int gotmessage = 0;
+char buf[MESSBUF];
+FILE *fp;
+
+ client = Dsp;
+/* Get default error handler. */
+ handler = (int (*)()) NULL;
+ _xcall_(proc);
+ /* requires two calls! */
+ _xcall_(proc);
+
+ if (pipe(p) == -1) {
+ delete("Could not create pipe");
+ return;
+ }
+
+/* Create child process. */
+ child = fork();
+ if (!child) {
+
+ close(p[0]);
+ /*
+ * Capture both stdout and stderr into the pipe.
+ */
+ dup2(p[1], 1);
+ dup2(p[1], 2);
+
+/* Child calls default error handler and loops forever. */
+ (*proc)(client);
+ /*
+ * Now close the pipe to make sure that the parent will not hang.
+ */
+ close(p[1]);
+ close(1);
+ close(2);
+
+ for (;;)
+ continue;
+ }
+ else
+ CHECK;
+
+ close(p[1]);
+
+/* Parent sleeps for 10 seconds. */
+ sleep(10);
+ /*
+ * Read message in reasonable size chunks.
+ */
+ fp = fdopen(p[0], "r");
+ if (fp == NULL) {
+ delete("Could not fdopen pipe");
+ return;
+ }
+ trace("The message produced by the default handler:");
+ gotmessage = 0;
+ while (fgets(buf, MESSBUF-1, fp)) {
+ gotmessage = 1;
+ buf[MESSBUF-1] = '\0';
+ trace("Message: %s", buf);
+ }
+
+ if (!gotmessage) {
+ report("No message was printed");
+ FAIL;
+ } else
+ CHECK;
+
+/* Parent verifies that child no longer exists. */
+ waitstatus = waitpid(child, &stat_loc, WNOHANG);
+ if (waitstatus != child) {
+ report("Child did not exit.");
+ FAIL;
+ (void) kill(child, SIGKILL);
+ (void) waitpid(child, &stat_loc, WNOHANG);
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
+>>ASSERTION Good B 5
+There is no limit to the number of times xname may be called.
+>>STRATEGY
+Set handler to errorhandler.
+Call XSetIOErrorHandler 1000 times.
+Report untested.
+>>CODE
+int (*proc)();
+int i;
+
+/* Set handler to errorhandler. */
+ handler = errorhandler;
+/* Call XSetIOErrorHandler 1000 times. */
+ for (i=0; i<1000; i++) {
+ if (i == 0)
+ CHECK;
+ proc = XCALL;
+ }
+/* Report untested. */
+ CHECKUNTESTED(1);
+>>ASSERTION def
+>>#NOTE This is tested in the first assertion where we force
+>>#NOTE a system call error to cause the handler to be called.
+When a system call error occurs, then Xlib calls
+.A handler .
+>>ASSERTION Good A
+>>#NOTE It appears that when the handler returns Xlib prints
+>>#NOTE some diagnostics.
+When
+.A handler
+returns,
+then the client process exits.
+>>STRATEGY
+Call XSetIOErrorHandler to set the handler to _errorhandler.
+Open display.
+Set exit_status.
+Create child process.
+Child process closes connection number.
+Child process attempts to communicate to server,
+causing handler to be invoked.
+Handler returns first time called.
+Verify that handler exited in the child proc.
+>>CODE
+int (*proc)();
+int child_exit;
+char *server;
+
+ if ((server = config.display) == (char *) NULL) {
+ delete("XT_DISPLAY not set");
+ return;
+ }
+ else
+ CHECK;
+/* Call XSetIOErrorHandler to set the handler to _errorhandler. */
+ handler = _errorhandler;
+ _xcall_(proc);
+/* Open display. */
+
+ client = XOpenDisplay(server);
+ if (client == (Display *) NULL) {
+ delete("Can not open display: %s", server);
+ return;
+ }
+ else
+ CHECK;
+
+/* Set exit_status. */
+ exit_status = exit_statuses[0];
+
+ counter = 0;
+/* Create child process. */
+/* Child process closes connection number. */
+/* Child process attempts to communicate to server, */
+/* causing handler to be invoked. */
+/* Handler returns first time called. */
+ child_exit = tet_fork(child_proc1, (void (*)()) NULL, 10, ~0);
+
+ /*
+ * Since the exit status when the handler returns is not known, then
+ * no checks can be made on it.
+ * If the handler did not exit then this will have been reported in the
+ * child. In this case the pass here will be spurious, however the
+ * TET will give precedence to the fail, so a false pass will not result.
+ */
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH08/sync/sync.m b/xc/test/xsuite/xtest/tset/CH08/sync/sync.m
new file mode 100644
index 000000000..677574cfe
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/sync/sync.m
@@ -0,0 +1,258 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSync CH08
+void
+XSync(display, discard)
+Display *display = Dsp;
+Bool discard;
+>>ASSERTION Good B 3
+A call to xname flushes
+the output buffer and waits until all requests have been received
+and processed by the X server.
+>>ASSERTION Good A
+A call to xname
+calls the client's error handling routine
+for each error event received.
+>>STRATEGY
+Create client1.
+Create pixmap with client1.
+Create client2.
+Call XFreePixmap from client2.
+Call XSync from client2 to insure all potential errors arrive.
+Verify that an error was received.
+>>CODE
+Pixmap pm;
+Display *client1;
+Display *client2;
+XVisualInfo *vp;
+
+ resetvinf(VI_PIX);
+ nextvinf(&vp);
+/* Create client1. */
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create pixmap with client1. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(client1, DRW(client1), 10, 10, 1);
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Call XFreePixmap from client2. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+/* Call XSync from client2 to insure all potential errors arrive. */
+ XSync(client2, True);
+ _endcall(client2);
+/* Verify that an error was received. */
+ if (geterr() != BadPixmap || getbadvalue() != pm) {
+ report("Missing error event");
+ FAIL;
+ }
+ else
+ CHECK;
+ XFreePixmap(client1, pm);
+
+ CHECKPASS(3);
+>>ASSERTION Good A
+During a call to xname,
+any events generated by the X server are enqueued
+into the client's event queue.
+>>STRATEGY
+Create client1.
+Create window with client1.
+Select MapNotify events with client1 on this window.
+Create client2.
+Select MapNotify events with client2 on this window.
+Call XFlush with client1 to insure server has received create
+window request before client2 requests which reference the window.
+Call XFlush with client2 to insure server has received select
+request before the event is generated.
+Map window.
+Call XSync for client1.
+Verify that there are no errors.
+Verify that client1 was delivered expected event.
+Call XSync for client2.
+Verify that there are no errors.
+Verify that client2 was delivered expected event.
+>>CODE
+Display *client1;
+Display *client2;
+Window w;
+XEvent event;
+XWindowAttributes attrs;
+
+/* Create client1. */
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create window with client1. */
+ w = mkwin(client1, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select MapNotify events with client1 on this window. */
+ XSelectInput(client1, w, StructureNotifyMask);
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Call XGetWindowAttributes with client1 to insure server has received create */
+/* window request before client2 requests which reference the window. */
+ XFlush(client1);
+ XGetWindowAttributes(client1, w, &attrs);
+/* Select MapNotify events events with client2 on this window. */
+ XSelectInput(client2, w, StructureNotifyMask);
+/* Call XFlush & do req. with client2 to insure server has received select */
+/* request before the event is generated. */
+ XFlush(client2);
+ XGetWindowAttributes(client2, w, &attrs);
+/* Map window. */
+ XMapWindow(client1, w);
+/* Call XSync for client1. */
+ _startcall(client1);
+ XSync(client1, False);
+ _endcall(client1);
+/* Verify that there are no errors. */
+ if (geterr() != Success) {
+ delete("Got %s, Expecting Success", errorname(geterr()));
+ return;
+ }
+ else
+ CHECK;
+/* Verify that client1 was delivered expected event. */
+ if (!XCheckTypedWindowEvent(client1, w, MapNotify, &event)) {
+ report("Selected event was not delivered to client1.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XSync for client2. */
+ _startcall(client2);
+ XSync(client2, False);
+ _endcall(client2);
+/* Verify that there are no errors. */
+ if (geterr() != Success) {
+ delete("Got %s, Expecting Success", errorname(geterr()));
+ return;
+ }
+ else
+ CHECK;
+/* Verify that client2 was delivered expected event. */
+ if (!XCheckTypedWindowEvent(client2, w, MapNotify, &event)) {
+ report("Selected event was not delivered to client2.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(6);
+>>ASSERTION def
+>>#NOTE This test is included in in the previous test.
+A call to xname with
+.A discard
+set to
+.S False
+does not discard the events in the queue.
+>>ASSERTION Good A
+>>#NOTE Since one can depend upon an error handler being called on pending
+>>#NOTE error events, one can verify that the handler is called and that
+>>#NOTE the event is not in the queue after XSync returns.
+A call to xname with
+.A discard
+set to
+.S True
+discards all events in the queue.
+>>STRATEGY
+Create client1.
+Create window with client1.
+Select MapNotify events with client1 on this window.
+Create client2.
+Select MapNotify events with client2 on this window.
+Map window.
+Call XSync for client1.
+Verify that client1 was not delivered MapNotify event.
+Call XSync for client2.
+Verify that client2 was not delivered MapNotify event.
+>>CODE
+Display *client1;
+Display *client2;
+Window w;
+XEvent event;
+
+/* Create client1. */
+ client1 = opendisplay();
+ if (client1 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Create window with client1. */
+ w = mkwin(client1, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select MapNotify events with client1 on this window. */
+ XSelectInput(client1, w, StructureNotifyMask);
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Select MapNotify events with client2 on this window. */
+ XSelectInput(client2, w, StructureNotifyMask);
+/* Map window. */
+ XMapWindow(client1, w);
+/* Call XSync for client1. */
+ _startcall(client1);
+ XSync(client1, True);
+ _endcall(client1);
+/* Verify that client1 was not delivered MapNotify event. */
+ if (XCheckTypedWindowEvent(client1, w, MapNotify, &event)) {
+ report("Selected event was delivered.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XSync for client2. */
+ _startcall(client2);
+ XSync(client2, True);
+ _endcall(client2);
+/* Verify that client2 was not delivered MapNotify event. */
+ if (XCheckTypedWindowEvent(client2, w, MapNotify, &event)) {
+ report("Selected event was delivered.");
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(4);
diff --git a/xc/test/xsuite/xtest/tset/CH08/synchrnz/synchrnz.m b/xc/test/xsuite/xtest/tset/CH08/synchrnz/synchrnz.m
new file mode 100644
index 000000000..f3ebe2bfe
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/synchrnz/synchrnz.m
@@ -0,0 +1,136 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSynchronize CH08
+int ((*)())()
+XSynchronize(display, onoff)
+Display *display = Dsp;
+Bool onoff;
+>>EXTERN
+static int
+afterfunction(display)
+Display *display;
+{
+ return((int) display);
+}
+>>ASSERTION Good B 1
+>>#NOTE Untestable.
+A call to xname
+with
+.A onoff
+set to
+.S True
+turns on synchronous behavior.
+>>ASSERTION Good B 1
+>>#NOTE Untestable.
+A call to xname
+with
+.A onoff
+set to
+.S False
+turns off synchronous behavior.
+>>ASSERTION Good A
+A call to xname
+with
+.A onoff
+set to
+.S True
+sets the after function to a non-NULL value.
+>>STRATEGY
+Call XSynchronize with onoff set to True.
+Call XSetAfterFunction to get value of old after function.
+Verify that XSetAfterFunction returned non-NULL.
+>>CODE
+int (*proc)();
+
+/* Call XSynchronize with onoff set to True. */
+ onoff = True;
+ (void) XCALL;
+/* Call XSetAfterFunction to get value of old after function. */
+ proc = XSetAfterFunction(display, afterfunction);
+/* Verify that XSetAfterFunction returned non-NULL. */
+ if (proc == (int (*)()) NULL) {
+ report("Returned NULL, expected non-NULL.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION Good A
+A call to xname
+with
+.A onoff
+set to
+.S False
+sets the after function to NULL.
+>>STRATEGY
+Call XSynchronize with onoff set to False.
+Call XSetAfterFunction to get value of old after function.
+Verify that XSetAfterFunction returned NULL.
+>>CODE
+int (*proc)();
+
+/* Call XSynchronize with onoff set to False. */
+ onoff = False;
+ (void) XCALL;
+/* Call XSetAfterFunction to get value of old after function. */
+ proc = XSetAfterFunction(display, afterfunction);
+/* Verify that XSetAfterFunction returned NULL. */
+ if (proc != (int (*)()) NULL) {
+ report("Returned non-NULL, expected NULL.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION Good A
+A call to xname
+returns the previous after function.
+>>STRATEGY
+Call XSetAfterFunction to set after function to afterfunction.
+Call XSynchronize with onoff set to False.
+Verify that XSynchronize returned afterfunction.
+Call XSetAfterFunction to set after function to afterfunction.
+Call XSynchronize with onoff set to True.
+Verify that XSynchronize returned afterfunction.
+>>CODE
+int (*proc)();
+
+/* Call XSetAfterFunction to set after function to afterfunction. */
+ (void) XSetAfterFunction(display, afterfunction);
+/* Call XSynchronize with onoff set to False. */
+ onoff = False;
+ proc = XCALL;
+/* Verify that XSynchronize returned afterfunction. */
+ if (proc != afterfunction) {
+ report("Did not return previous after function.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Call XSetAfterFunction to set after function to afterfunction. */
+ (void) XSetAfterFunction(display, afterfunction);
+/* Call XSynchronize with onoff set to True. */
+ onoff = True;
+ proc = XCALL;
+/* Verify that XSynchronize returned afterfunction. */
+ if (proc != afterfunction) {
+ report("Did not return previous after function.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH08/unmpntfy/unmpntfy.m b/xc/test/xsuite/xtest/tset/CH08/unmpntfy/unmpntfy.m
new file mode 100644
index 000000000..eb46c9d06
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/unmpntfy/unmpntfy.m
@@ -0,0 +1,344 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE UnmapNotify CH08
+>>EXTERN
+#define EVENT UnmapNotify
+#define MASK StructureNotifyMask
+#define MASKP SubstructureNotifyMask
+>>ASSERTION Good A
+When an xname event is generated,
+then all clients having set
+.S StructureNotifyMask
+event mask bits on the unmapped window are delivered
+an xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Create window.
+Select for UnmapNotify events using StructureNotifyMask.
+Select for UnmapNotify events using StructureNotifyMask with client2.
+Select for no events with client3.
+Generate UnmapNotify event.
+Verify that a UnmapNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that a UnmapNotify event was delivered to client2.
+Verify that event member fields are correctly set.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window w;
+int count;
+XEvent event_return;
+XUnmapEvent good;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, True);
+/* Select for UnmapNotify events using StructureNotifyMask. */
+ XSelectInput(display, w, MASK);
+/* Select for UnmapNotify events using StructureNotifyMask with client2. */
+ XSelectInput(client2, w, MASK);
+/* Select for no events with client3. */
+ XSelectInput(client3, w, NoEventMask);
+/* Generate UnmapNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XUnmapWindow(display, w);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a UnmapNotify event was delivered. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xunmap;
+ good.type = EVENT;
+ good.event = w;
+ good.window = w;
+ good.from_configure = False;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a UnmapNotify event was delivered to client2. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(client2, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xunmap;
+ good.type = EVENT;
+ good.event = w;
+ good.window = w;
+ good.from_configure = False;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event for client2");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(7);
+>>ASSERTION Good A
+When an xname event is generated,
+then all clients having set
+.S SubstructureNotifyMask
+event mask bits on the parent of the unmapped window are delivered
+an xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Create window.
+Select for UnmapNotify events using SubstructureNotifyMask.
+Select for UnmapNotify events using SubstructureNotifyMask with client2.
+Select for no events with client3.
+Generate UnmapNotify event.
+Verify that a UnmapNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that a UnmapNotify event was delivered to client2.
+Verify that event member fields are correctly set.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window parent, w;
+int count;
+XEvent event_return;
+XUnmapEvent good;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+ parent = DRW(display);
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, True);
+/* Select for UnmapNotify events using SubstructureNotifyMask. */
+ XSelectInput(display, parent, MASKP);
+/* Select for UnmapNotify events using SubstructureNotifyMask with client2. */
+ XSelectInput(client2, parent, MASKP);
+/* Select for no events with client3. */
+ XSelectInput(client3, parent, NoEventMask);
+/* Generate UnmapNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XUnmapWindow(display, w);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a UnmapNotify event was delivered. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(display, parent, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xunmap;
+ good.type = EVENT;
+ good.event = parent;
+ good.window = w;
+ good.from_configure = False;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a UnmapNotify event was delivered to client2. */
+/* Verify that event member fields are correctly set. */
+ if (!XCheckTypedWindowEvent(client2, parent, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+ good = event_return.xunmap;
+ good.type = EVENT;
+ good.event = parent;
+ good.window = w;
+ good.from_configure = False;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event for client2");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(7);
+>>ASSERTION def
+>>#NOTE Tested for in previous two assertions.
+When an xname event is generated,
+then
+clients not having set
+.S StructureNotifyMask
+event mask bits on the
+unmapped window
+and also not having set
+.S SubstructureNotifyMask
+event mask bits on the
+parent of the unmapped window
+are not delivered
+an xname event.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When a window's state changes
+>>#NOTEm from mapped to unmapped,
+>>#NOTEm then ARTICLE xname event is generated.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .S StructureNotify
+>>#NOTEs was selected,
+>>#NOTEs then
+>>#NOTEs .M event
+>>#NOTEs is set to
+>>#NOTEs the WINDOWTYPE window.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and
+>>#NOTEs .S SubstructureNotify
+>>#NOTEs was selected,
+>>#NOTEs then
+>>#NOTEs .M event
+>>#NOTEs is set to
+>>#NOTEs the WINDOWTYPE window's parent.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE Global except for MappingNotify and KeymapNotify.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M window
+>>#NOTEs is set to
+>>#NOTEs the
+>>#NOTEs ifdef(`WINDOWTYPE', WINDOWTYPE, event)
+>>#NOTEs window.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname
+>>#NOTEm event is delivered
+>>#NOTEm and
+>>#NOTEm .M window
+>>#NOTEm was unmapped as a result of a resizing of the window's parent when
+>>#NOTEm the window's
+>>#NOTEm .M win_gravity
+>>#NOTEm attribute is set to
+>>#NOTEm .S UnmapGravity ,
+>>#NOTEm then
+>>#NOTEm .M from_configure
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname
+>>#NOTEm event is delivered
+>>#NOTEm and
+>>#NOTEm .M window
+>>#NOTEm was not unmapped as a result of a resizing of the window's parent when
+>>#NOTEm the window's
+>>#NOTEm .M win_gravity
+>>#NOTEm attribute is set to
+>>#NOTEm .S UnmapGravity ,
+>>#NOTEm then
+>>#NOTEm .M from_configure
+>>#NOTEm is set to
+>>#NOTEm .S False .
diff --git a/xc/test/xsuite/xtest/tset/CH08/vsbltyntfy/vsbltyntfy.m b/xc/test/xsuite/xtest/tset/CH08/vsbltyntfy/vsbltyntfy.m
new file mode 100644
index 000000000..e6f82f9c3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/vsbltyntfy/vsbltyntfy.m
@@ -0,0 +1,906 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE VisibilityNotify CH08
+>>EXTERN
+#define EVENT VisibilityNotify
+#define MASK VisibilityChangeMask
+>>ASSERTION Good A
+The server does not generate xname events on windows
+whose class is specified as
+.S InputOnly .
+>>STRATEGY
+Create class InputOnly window.
+Select for VisibilityNotify events.
+Attempt to generate VisibilityNotify event on this window.
+Verify that no events were delivered.
+>>CODE
+Display *display = Dsp;
+Window w;
+int count;
+
+/* Create class InputOnly window. */
+ w = iponlywin(display);
+/* Select for VisibilityNotify events. */
+ XSelectInput(display, w, MASK);
+/* Attempt to generate VisibilityNotify event on this window. */
+ XSync(display, True);
+ XMapWindow(display, w);
+ XSync(display, False);
+/* Verify that no events were delivered. */
+ count = XPending(display);
+ if (count > 0) {
+ report("Received %d events, expected %d", count, 0);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>#NOTEd >>ASSERTION
+>>#NOTEd When a window's visibility state changes,
+>>#NOTEd then ARTICLE xname event is generated.
+>>ASSERTION Good A
+>>#NOTE
+>>#NOTE Possible hierarchy event types: UnmapNotify, MapNotify, ConfigureNotify,
+>>#NOTE GravityNotify, and CirculateNotify.
+>>#NOTE
+When a xname event is generated by a hierarchy change,
+then the xname event is delivered after
+any hierarchy event.
+>>STRATEGY
+Create client.
+Create window large enough to be partially obscurred by each top-level
+window in a "standard" window hierarchy.
+Build and create window hierarchy.
+Select for VisibilityNotify events on eventw.
+Select for MapNotify events on root window.
+Generate VisibilityNotify and MapNotify events.
+Initialize for expected events.
+Harvest events from event queue.
+Verify that expected events were delivered.
+Verify that all VisibilityNotify events are delivered after all
+MapNotify events.
+>>CODE
+Display *display;
+Winh *eventw, *sibling, *rootw;
+XEvent event;
+Winhg winhg;
+int status;
+
+#ifdef OTHERMASK
+#undef OTHERMASK
+#endif
+#define OTHERMASK SubstructureNotifyMask
+#ifdef OTHEREVENT
+#undef OTHEREVENT
+#endif
+#define OTHEREVENT MapNotify
+
+/* Create client. */
+ /*
+ * Can not use Dsp because we are selecting on root window.
+ * We could instead de-select on root window prior to returning,
+ * but this is actually easier.
+ */
+ display = opendisplay();
+ if (display == (Display *) NULL) {
+ delete("Could not open display.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window large enough to be partially obscurred by each top-level */
+/* window in a "standard" window hierarchy. */
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = DisplayWidth(display, DefaultScreen(display));
+ winhg.area.height = DisplayHeight(display, DefaultScreen(display));
+ /*
+ * if too large then it will extend off edge of screen and
+ * be (permanently) partially obscurred
+ */
+ winhg.area.width -= 4;
+ winhg.area.height -= 4;
+ winhg.border_width = 1;
+ eventw = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_MAP);
+ if (eventw == (Winh *) NULL) {
+ report("Could not create first window");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ if (winh(display, 1, WINH_NOMASK)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Select for VisibilityNotify events on eventw. */
+ if (winh_selectinput(display, eventw, MASK))
+ return;
+ else
+ CHECK;
+/* Select for MapNotify events on root window. */
+ rootw = guardian;
+ if (winh_selectinput(display, rootw, OTHERMASK))
+ return;
+ else
+ CHECK;
+ sibling = eventw->nextsibling;
+/* Generate VisibilityNotify and MapNotify events. */
+ XSync(display, True);
+ XMapWindow(display, sibling->window);
+ XSync(display, False);
+/* Initialize for expected events. */
+ event.xany.type = OTHEREVENT;
+ event.xany.window = rootw->window;
+ if (winh_plant(rootw, &event, OTHERMASK, WINH_NOMASK))
+ return;
+ else
+ CHECK;
+ event.xany.type = EVENT;
+ event.xany.window = eventw->window;
+ if (winh_plant(eventw, &event, MASK, WINH_NOMASK))
+ return;
+ else
+ CHECK;
+/* Harvest events from event queue. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Verify that expected events were delivered. */
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that all VisibilityNotify events are delivered after all */
+/* MapNotify events. */
+ status = winh_ordercheck(OTHEREVENT, EVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(10);
+>>ASSERTION Good A
+When a xname event is generated,
+then the xname event is delivered before any
+.S Expose
+events on that window.
+>>STRATEGY
+Create window large enough to be partially obscurred by each top-level
+window in a "standard" window hierarchy.
+Build and create window hierarchy.
+Create and map a window.
+Select for VisibilityNotify and Expose events on eventw.
+Generate VisibilityNotify and MapNotify events.
+Initialize for expected events.
+Harvest events from event queue.
+Ignore Expose events.
+Verify that expected events were delivered.
+Verify that all VisibilityNotify events are delivered before all
+Expose events.
+>>CODE
+Display *display = Dsp;
+Winh *eventw;
+XEvent event;
+Winhg winhg;
+Window w;
+int status;
+
+#ifdef OTHERMASK
+#undef OTHERMASK
+#endif
+#define OTHERMASK ExposureMask
+#ifdef OTHEREVENT
+#undef OTHEREVENT
+#endif
+#define OTHEREVENT Expose
+
+/* Create window large enough to be partially obscurred by each top-level */
+/* window in a "standard" window hierarchy. */
+ winhg.area.x = 1;
+ winhg.area.y = 1;
+ winhg.area.width = DisplayWidth(display, DefaultScreen(display));
+ winhg.area.height = DisplayHeight(display, DefaultScreen(display));
+ /*
+ * if too large then it will extend off edge of screen and
+ * be (permanently) partially obscurred
+ */
+ winhg.area.width -= 4;
+ winhg.area.height -= 4;
+ winhg.border_width = 1;
+ eventw = winh_adopt(display, (Winh *) NULL, 0L, (XSetWindowAttributes *) NULL, &winhg, WINH_MAP);
+ if (eventw == (Winh *) NULL) {
+ report("Could not create first window");
+ return;
+ }
+ else
+ CHECK;
+/* Build and create window hierarchy. */
+ if (winh(display, 0, WINH_NOMASK)) {
+ report("Could not build window hierarchy");
+ return;
+ }
+ else
+ CHECK;
+/* Create and map a window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, True);
+/* Select for VisibilityNotify and Expose events on eventw. */
+ if (winh_selectinput(display, eventw, MASK|OTHERMASK))
+ return;
+ else
+ CHECK;
+/* Generate VisibilityNotify and MapNotify events. */
+ XSync(display, True);
+ XUnmapWindow(display, w);
+ XSync(display, False);
+/* Initialize for expected events. */
+ event.xany.type = EVENT;
+ event.xany.window = eventw->window;
+ if (winh_plant(eventw, &event, MASK, WINH_NOMASK))
+ return;
+ else
+ CHECK;
+/* Harvest events from event queue. */
+ if (winh_harvest(display, (Winh *) NULL)) {
+ report("Could not harvest events");
+ return;
+ }
+ else
+ CHECK;
+/* Ignore Expose events. */
+ if (winh_ignore_event((Winh *) NULL, OTHEREVENT, WINH_NOMASK)) {
+ report("Could not mark %s events to be ignored",
+ eventname(OTHEREVENT));
+ return;
+ }
+ else
+ CHECK;
+/* Verify that expected events were delivered. */
+ status = winh_weed((Winh *) NULL, -1, WINH_WEED_IDENTITY);
+ if (status < 0)
+ return;
+ else if (status > 0) {
+ report("Event delivery was not as expected");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that all VisibilityNotify events are delivered before all */
+/* Expose events. */
+ status = winh_ordercheck(EVENT, OTHEREVENT);
+ if (status == -1)
+ return;
+ else if (status)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(8);
+>>ASSERTION Good A
+When a xname event is generated,
+then
+all clients having set
+.S VisibilityChangeMask
+event mask bits on the event window are delivered
+a xname event.
+>>STRATEGY
+Create clients client2 and client3.
+Create window.
+Select for VisibilityNotify events using VisibilityChangeMask.
+Select for VisibilityNotify events using VisibilityChangeMask with client2.
+Select for no events with client3.
+Generate VisibilityNotify event.
+Verify that a VisibilityNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that a VisibilityNotify event was delivered to client2.
+Verify that event member fields are correctly set.
+Verify that no events were delivered to client3.
+>>CODE
+Display *display = Dsp;
+Display *client2;
+Display *client3;
+Window w;
+int count;
+XEvent event_return;
+XVisibilityEvent good;
+
+/* Create clients client2 and client3. */
+ if ((client2 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client2.");
+ return;
+ }
+ else
+ CHECK;
+ if ((client3 = opendisplay()) == (Display *) NULL) {
+ delete("Couldn't create client3.");
+ return;
+ }
+ else
+ CHECK;
+/* Create window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Select for VisibilityNotify events using VisibilityChangeMask. */
+ XSelectInput(display, w, MASK);
+/* Select for VisibilityNotify events using VisibilityChangeMask with client2. */
+ XSelectInput(client2, w, MASK);
+/* Select for no events with client3. */
+ XSelectInput(client3, w, NoEventMask);
+/* Generate VisibilityNotify event. */
+ XSync(display, True);
+ XSync(client2, True);
+ XSync(client3, True);
+ XMapWindow(display, w);
+ XSync(display, False);
+ XSync(client2, False);
+ XSync(client3, False);
+/* Verify that a VisibilityNotify event was delivered. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event member fields are correctly set. */
+ good = event_return.xvisibility;
+ good.type = EVENT;
+ good.window = w;
+ good.state = VisibilityUnobscured;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that a VisibilityNotify event was delivered to client2. */
+ if (!XCheckTypedWindowEvent(client2, w, EVENT, &event_return)) {
+ report("Expected %s event, got none", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event member fields are correctly set. */
+ good = event_return.xvisibility;
+ good.type = EVENT;
+ good.window = w;
+ good.state = VisibilityUnobscured;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event for client2");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no events were delivered to client3. */
+ count = XPending(client3);
+ if (count != 0) {
+ report("Got %d events, expected %d for client3", count, 0);
+ FAIL;
+ return;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(7);
+>>ASSERTION def
+>>#NOTE Tested for in previous assertion.
+When a xname event is generated,
+then
+clients not having set
+.S VisibilityChangeMask
+event mask bits on the event window are not delivered
+a xname event.
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M type
+>>#NOTEs is set to
+>>#NOTEs xname.
+>>#NOTEs >>ASSERTION
+>>#NOTEs >>#NOTE The method of expansion is not clear.
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M serial
+>>#NOTEs is set
+>>#NOTEs from the serial number reported in the protocol
+>>#NOTEs but expanded from the 16-bit least-significant bits
+>>#NOTEs to a full 32-bit value.
+>>#NOTEm >>ASSERTION
+>>#NOTEm When ARTICLE xname event is delivered
+>>#NOTEm and the event came from a
+>>#NOTEm .S SendEvent
+>>#NOTEm protocol request,
+>>#NOTEm then
+>>#NOTEm .M send_event
+>>#NOTEm is set to
+>>#NOTEm .S True .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered
+>>#NOTEs and the event was not generated by a
+>>#NOTEs .S SendEvent
+>>#NOTEs protocol request,
+>>#NOTEs then
+>>#NOTEs .M send_event
+>>#NOTEs is set to
+>>#NOTEs .S False .
+>>#NOTEs >>ASSERTION
+>>#NOTEs When ARTICLE xname event is delivered,
+>>#NOTEs then
+>>#NOTEs .M display
+>>#NOTEs is set to
+>>#NOTEs a pointer to the display on which the event was read.
+>>ASSERTION def
+>>#NOTE Tested for in previous assertions.
+When a xname event is delivered,
+then
+.M window
+is set to the window
+whose visibility state changes.
+>>ASSERTION Good A
+When a xname event is delivered
+and
+.M window
+changes state from
+partially obscured,
+fully obscured,
+or not viewable to viewable and completely unobscured,
+then
+.M state
+is set to
+.S VisibilityUnobscured .
+>>STRATEGY
+Create window.
+Select for VisibilityNotify events on window.
+Generate VisibilityNotify event.
+Verify that a VisibilityNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that no other events were delivered.
+Fully obscure window.
+Generate VisibilityNotify event.
+Verify that a VisibilityNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that no other events were delivered.
+Partially obscure window.
+Generate VisibilityNotify event.
+Verify that a VisibilityNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that no other events were delivered.
+>>CODE
+Display *display = Dsp;
+Window w, w2;
+struct area area;
+XEvent event_return;
+XVisibilityEvent good;
+int count;
+
+ /*
+ * test ordering:
+ *
+ * not viewable -> viewable and completely unobscured
+ * fully obscured -> viewable and completely unobscured
+ * partially obscured -> viewable and completely unobscured
+ */
+/* Create window. */
+ area.x = 1;
+ area.y = 1;
+ area.width = W_STDWIDTH;
+ area.height = W_STDHEIGHT;
+ w = mkwin(display, (XVisualInfo *) NULL, &area, False);
+/* Select for VisibilityNotify events on window. */
+ XSelectInput(display, w, MASK);
+/* Generate VisibilityNotify event. */
+ XSync(display, True);
+ XMapWindow(display, w);
+ XSync(display, False);
+/* Verify that a VisibilityNotify event was delivered. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none (not viewable test)", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event member fields are correctly set. */
+ good = event_return.xvisibility;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.state = VisibilityUnobscured;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event (not viewable test)");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no other events were delivered. */
+ count = XPending(display);
+ if (count > 0) {
+ report("Received %d events, expected %d (not viewable test)", count+1, 1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Fully obscure window. */
+ w2 = mkwin(display, (XVisualInfo *) NULL, &area, True);
+/* Generate VisibilityNotify event. */
+ XSync(display, True);
+ XUnmapWindow(display, w2);
+ XSync(display, False);
+/* Verify that a VisibilityNotify event was delivered. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none (fully obscured test)", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event member fields are correctly set. */
+ good = event_return.xvisibility;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.state = VisibilityUnobscured;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event (fully obscured test)");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no other events were delivered. */
+ count = XPending(display);
+ if (count > 0) {
+ report("Received %d events, expected %d (fully obscured test)", count+1, 1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Partially obscure window. */
+ area.x = 1;
+ area.y = 1;
+ area.width = W_STDWIDTH/2;
+ area.height = W_STDHEIGHT/2;
+ w2 = mkwin(display, (XVisualInfo *) NULL, &area, True);
+/* Generate VisibilityNotify event. */
+ XSync(display, True);
+ XUnmapWindow(display, w2);
+ XSync(display, False);
+/* Verify that a VisibilityNotify event was delivered. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none (partially obscured test)", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event member fields are correctly set. */
+ good = event_return.xvisibility;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.state = VisibilityUnobscured;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event (partially obscured test)");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no other events were delivered. */
+ count = XPending(display);
+ if (count > 0) {
+ report("Received %d events, expected %d (partially obscured test)", count+1, 1);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(9);
+>>ASSERTION Good A
+When a xname event is delivered
+and
+.M window
+changes state from
+viewable and completely unobscured or
+not viewable to viewable and partially obscured,
+then
+.M state
+is set to
+.S VisibilityPartiallyObscured .
+>>STRATEGY
+Create window.
+Create partially obscuring window.
+Select for VisibilityNotify events on window.
+Generate VisibilityNotify event.
+Verify that a VisibilityNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that no other events were delivered.
+Unobscure window.
+Generate VisibilityNotify event.
+Verify that a VisibilityNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that no other events were delivered.
+>>CODE
+Display *display = Dsp;
+Window w, wpo;
+struct area area;
+XEvent event_return;
+XVisibilityEvent good;
+int count;
+
+ /*
+ * test ordering:
+ *
+ * not viewable
+ * -> viewable and partially obscured
+ * viewable & completely unobscured
+ * -> viewable & partially unobscured
+ */
+/* Create window. */
+ area.x = 1;
+ area.y = 1;
+ area.width = W_STDWIDTH;
+ area.height = W_STDHEIGHT;
+ w = mkwin(display, (XVisualInfo *) NULL, &area, False);
+/* Create partially obscuring window. */
+ area.x += W_STDWIDTH/2;
+ area.y += W_STDHEIGHT/2;
+ wpo = mkwin(display, (XVisualInfo *) NULL, &area, True);
+/* Select for VisibilityNotify events on window. */
+ XSelectInput(display, w, MASK);
+/* Generate VisibilityNotify event. */
+ XSync(display, True);
+ XMapWindow(display, w);
+ XSync(display, False);
+/* Verify that a VisibilityNotify event was delivered. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none (not viewable test)", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event member fields are correctly set. */
+ good = event_return.xvisibility;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.state = VisibilityPartiallyObscured;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event (not viewable test)");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no other events were delivered. */
+ count = XPending(display);
+ if (count > 0) {
+ report("Received %d events, expected %d (not viewable test)", count+1, 1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Unobscure window. */
+ XUnmapWindow(display, wpo);
+/* Generate VisibilityNotify event. */
+ XSync(display, True);
+ XMapWindow(display, wpo);
+ XSync(display, False);
+/* Verify that a VisibilityNotify event was delivered. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none (viewable & completely unobscured test)", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event member fields are correctly set. */
+ good = event_return.xvisibility;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.state = VisibilityPartiallyObscured;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event (viewable & completely unobscured test)");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no other events were delivered. */
+ count = XPending(display);
+ if (count > 0) {
+ report("Received %d events, expected %d (viewable & completely unobscured test)", count+1, 1);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(6);
+>>ASSERTION Good A
+When a xname event is delivered
+and
+.M window
+changes state from
+viewable and completely unobscured,
+viewable and partially obscured,
+or not viewable to viewable and fully obscured,
+then
+.M state
+is set to
+.S VisibilityFullyObscured .
+>>STRATEGY
+Create window.
+Create completely obscuring window.
+Create partially obscuring window.
+Select for VisibilityNotify events on window.
+Generate VisibilityNotify event.
+Verify that a VisibilityNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that no other events were delivered.
+Unobscure window.
+Generate VisibilityNotify event.
+Verify that a VisibilityNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that no other events were delivered.
+Partially obscure window.
+Generate VisibilityNotify event.
+Verify that a VisibilityNotify event was delivered.
+Verify that event member fields are correctly set.
+Verify that no other events were delivered.
+>>CODE
+Display *display = Dsp;
+Window w, wfo, wpo;
+struct area area;
+XEvent event_return;
+XVisibilityEvent good;
+int count;
+
+ /*
+ * test ordering:
+ *
+ * not viewable ->
+ * -> viewable and fully obscured
+ * viewable and completely unobscured
+ * -> viewable and fully obscured
+ * viewable and partially obscured
+ * -> viewable and fully obscured
+ */
+/* Create window. */
+ area.x = 1;
+ area.y = 1;
+ area.width = W_STDWIDTH;
+ area.height = W_STDHEIGHT;
+ w = mkwin(display, (XVisualInfo *) NULL, &area, False);
+/* Create completely obscuring window. */
+ wfo = mkwin(display, (XVisualInfo *) NULL, &area, True);
+/* Create partially obscuring window. */
+ area.x += W_STDWIDTH/2;
+ area.y += W_STDHEIGHT/2;
+ wpo = mkwin(display, (XVisualInfo *) NULL, &area, False);
+/* Select for VisibilityNotify events on window. */
+ XSelectInput(display, w, MASK);
+/* Generate VisibilityNotify event. */
+ XSync(display, True);
+ XMapWindow(display, w);
+ XSync(display, False);
+/* Verify that a VisibilityNotify event was delivered. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none (not viewable test)", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event member fields are correctly set. */
+ good = event_return.xvisibility;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.state = VisibilityFullyObscured;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event (not viewable test)");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no other events were delivered. */
+ count = XPending(display);
+ if (count > 0) {
+ report("Received %d events, expected %d (not viewable test)", count+1, 1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Unobscure window. */
+ XUnmapWindow(display, wfo);
+/* Generate VisibilityNotify event. */
+ XSync(display, True);
+ XMapWindow(display, wfo);
+ XSync(display, False);
+/* Verify that a VisibilityNotify event was delivered. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none (viewable and completely unobscured test)", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event member fields are correctly set. */
+ good = event_return.xvisibility;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.state = VisibilityFullyObscured;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event (viewable and completely unobscured test)");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no other events were delivered. */
+ count = XPending(display);
+ if (count > 0) {
+ report("Received %d events, expected %d (viewable and completely unobscured test)", count+1, 1);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Partially obscure window. */
+ XUnmapWindow(display, wfo);
+ XMapWindow(display, wpo);
+/* Generate VisibilityNotify event. */
+ XSync(display, True);
+ XMapWindow(display, wfo);
+ XSync(display, False);
+/* Verify that a VisibilityNotify event was delivered. */
+ if (!XCheckTypedWindowEvent(display, w, EVENT, &event_return)) {
+ report("Expected %s event, got none (viewable and partially obscured test)", eventname(EVENT));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that event member fields are correctly set. */
+ good = event_return.xvisibility;
+ good.type = EVENT;
+ good.send_event = False;
+ good.display = display;
+ good.window = w;
+ good.state = VisibilityFullyObscured;
+ if (checkevent((XEvent *) &good, &event_return)) {
+ report("Unexpected values in delivered event (viewable and partially obscured test)");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that no other events were delivered. */
+ count = XPending(display);
+ if (count > 0) {
+ report("Received %d events, expected %d (viewable and partially obscured test)", count+1, 1);
+ FAIL;
+ }
+ else
+ CHECK;
+
+ CHECKPASS(9);
diff --git a/xc/test/xsuite/xtest/tset/CH08/wdwevnt/wdwevnt.m b/xc/test/xsuite/xtest/tset/CH08/wdwevnt/wdwevnt.m
new file mode 100644
index 000000000..b0fb02267
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH08/wdwevnt/wdwevnt.m
@@ -0,0 +1,229 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XWindowEvent CH08
+void
+XWindowEvent(display, w, event_mask, event_return)
+Display *display = Dsp;
+Window w;
+long event_mask;
+XEvent *event_return = &_event;
+>>EXTERN
+/*
+ * Can not use "xcall" because it empties the event queue.
+ */
+#define _xcall_() \
+ _startcall(display);\
+ XWindowEvent(display, w, event_mask, event_return);\
+ _endcall(display)
+static XEvent _event;
+>>ASSERTION Good A
+A call to xname
+returns in
+.A event_return
+the first event in the event queue that matches
+window
+.A w
+and
+.A event_mask .
+>>STRATEGY
+Create a window.
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XWindowEvent.
+Verify the correct event-type was returned.
+Verify the event contained correct window.
+Verify the first matching event in event queue was returned.
+>>CODE
+Window w1;
+Window w2;
+XEvent event;
+XAnyEvent *ep;
+
+/* Create a window. */
+ w1 = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ w2 = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ ep = (XAnyEvent *) &event;
+ ep->type = KeyPress;
+ ep->window = w1;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+ ep->type = ButtonPress;
+ ep->window = w2;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+ ep->type = ButtonPress;
+ ep->window = w2;
+ ep->send_event = True; /* first occurrence has send_event True */
+ XPutBackEvent(display, &event);
+ ep->type = KeyPress;
+ ep->window = w1;
+ ep->send_event = False;
+ XPutBackEvent(display, &event);
+/* Call XWindowEvent. */
+ w = w2;
+ event_mask = ButtonPressMask;
+ _xcall_();
+/* Verify the correct event-type was returned. */
+ ep = (XAnyEvent *) event_return;
+ if (ep->type != ButtonPress) {
+ report("Got %s, expected %s", eventname(ep->type), eventname(ButtonPress));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the event contained correct window. */
+ if (ep->window != w2) {
+ report("Got %d, expected %d", ep->window, w2);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the first matching event in event queue was returned. */
+ if (ep->send_event != True) {
+ report("First event in event queue was not returned.");
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(3);
+>>ASSERTION Good A
+A call to xname removes the returned event from the event queue.
+>>STRATEGY
+Create a window.
+Discard all events on the event queue.
+Call XPutBackEvent to put events on the event queue.
+Call XPending to get the current event queue size.
+Call XWindowEvent.
+Call XPending to get the current event queue size.
+Verify that size of event queue has decreased by one.
+>>CODE
+XEvent event;
+XAnyEvent *ep;
+int oldqsize;
+int newqsize;
+
+/* Create a window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Call XPutBackEvent to put events on the event queue. */
+ ep = (XAnyEvent *) &event;
+ ep->type = ButtonPressMask;
+ ep->window = w;
+ XPutBackEvent(display, &event);
+/* Call XPending to get the current event queue size. */
+ oldqsize = XPending(display);
+/* Call XWindowEvent. */
+ event_mask = ButtonPressMask;
+ _xcall_();
+/* Call XPending to get the current event queue size. */
+ newqsize = XPending(display);
+/* Verify that size of event queue has decreased by one. */
+ if (newqsize != (oldqsize-1)) {
+ report("Event queue size %d, expected %d", newqsize, oldqsize-1);
+ FAIL;
+ }
+ else
+ CHECK;
+ CHECKPASS(1);
+>>ASSERTION Good A
+When a matching event is not in the event queue,
+then a call to xname
+flushes the output buffer and blocks until a matching event is received.
+>>STRATEGY
+Create client2.
+Discard all events on the event queue.
+Create pixmap.
+Create a window.
+Call XWindowEvent and verify that blocking did occur.
+Verify that the output buffer was flushed.
+Verify the correct event-type was returned.
+Verify the event contained correct window.
+>>CODE
+XEvent event;
+XAnyEvent *ep;
+int callcnt;
+Block_Info info;
+int block_status;
+Pixmap pm;
+Display *client2;
+
+/* Create client2. */
+ client2 = opendisplay();
+ if (client2 == (Display *) NULL) {
+ delete("Can not open display");
+ return;
+ }
+ else
+ CHECK;
+/* Discard all events on the event queue. */
+ XSync(display, True);
+/* Create pixmap. */
+ /* avoid using makepixm() */
+ pm = XCreatePixmap(display, DRW(display), 10, 10, 1);
+/* Create a window. */
+ w = mkwin(display, (XVisualInfo *) NULL, (struct area *) NULL, False);
+ ep = (XAnyEvent *) &event;
+ ep->type = ButtonPressMask;
+ ep->window = w;
+/* Call XWindowEvent and verify that blocking did occur. */
+ XWindowEvent_Type(info, w, ButtonPressMask);
+ ep = (XAnyEvent *) &(info.event_return);
+ block_status = block(display, &event, &info);
+ if (block_status == -1)
+ return;
+ else
+ CHECK;
+ if (block_status == 0) {
+ report("Blocking did not occur.");
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify that the output buffer was flushed. */
+ _startcall(client2);
+ XFreePixmap(client2, pm);
+ XSync(client2, True);
+ _endcall(client2);
+ if (geterr() != Success) {
+ report("The output buffer was not flushed.");
+ XFreePixmap(display, pm);
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the correct event-type was returned. */
+ if (ep->type != ButtonPress) {
+ report("Got %s, expected %s", eventname(ep->type), eventname(ButtonPress));
+ FAIL;
+ }
+ else
+ CHECK;
+/* Verify the event contained correct window. */
+ if (ep->window != w) {
+ report("Got %d, expected %d", ep->window, w);
+ FAIL;
+ }
+ else
+ CHECK;
+ /* empty event queue */
+ XSync(display, True);
+
+ CHECKPASS(6);
diff --git a/xc/test/xsuite/xtest/tset/CH09/Makefile b/xc/test/xsuite/xtest/tset/CH09/Makefile
new file mode 100644
index 000000000..d3505fcc5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/Makefile
@@ -0,0 +1,174 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+#
+# This Makefile can be used to compile all the tests in this
+# section of the X test suite in such a way that they are all links to
+# a single executable file. This normally allows a considerable
+# reduction in the disc space requirements for the X test suite
+# when fully built.
+#
+# There are two ways this can be done:
+# 1) Using the TET. Execute the command:
+# tcc -b -s link_exec xtest linkbuild
+# in the directory $TET_ROOT/xtest.
+# This will execute the TET build tool (which is normally pmake)
+# in the top level directory of each section of the test suite
+# (including this directory).
+#
+# 2) Directly without using the TET. Execute the command:
+# pmake
+# in this directory.
+#
+# For more details, refer to the User Guide
+#
+
+CAT=cat
+
+ALLTESTS=Tests
+
+TESTOFILES=\
+allcclsshn.o \
+allcicnsz.o \
+allcstndrd.o \
+allcszhnts.o \
+allcwmhnts.o \
+frstrlst.o \
+ftchnm.o \
+gtclsshnt.o \
+gtcmmnd.o \
+gticnnm.o \
+gticnszs.o \
+gtrgbclrmp.o \
+gttrnsntfr.o \
+gttxtprprt.o \
+gtwmclntmc.o \
+gtwmclrmpw.o \
+gtwmhnts.o \
+gtwmicnnm.o \
+gtwmnm.o \
+gtwmnrmlhn.o \
+gtwmprtcls.o \
+gtwmszhnts.o \
+icnfywdw.o \
+rcnfgrwmwd.o \
+stclsshnt.o \
+stcmmnd.o \
+sticnnm.o \
+sticnszs.o \
+strgbclrmp.o \
+strlstttxt.o \
+strnm.o \
+sttrnsntfr.o \
+sttxtprprt.o \
+stwmclntmc.o \
+stwmclrmpw.o \
+stwmhnts.o \
+stwmicnnm.o \
+stwmnm.o \
+stwmnrmlhn.o \
+stwmprprts.o \
+stwmprtcls.o \
+stwmszhnts.o \
+txtprprtyt.o \
+wmgmtry.o \
+wthdrwwdw.o
+
+LINKOFILE=linktbl.o
+OFILES = $(TESTOFILES) $(LINKOFILE)
+
+DIRLIST=\
+allcclsshn \
+allcicnsz \
+allcstndrd \
+allcszhnts \
+allcwmhnts \
+frstrlst \
+ftchnm \
+gtclsshnt \
+gtcmmnd \
+gticnnm \
+gticnszs \
+gtrgbclrmp \
+gttrnsntfr \
+gttxtprprt \
+gtwmclntmc \
+gtwmclrmpw \
+gtwmhnts \
+gtwmicnnm \
+gtwmnm \
+gtwmnrmlhn \
+gtwmprtcls \
+gtwmszhnts \
+icnfywdw \
+rcnfgrwmwd \
+stclsshnt \
+stcmmnd \
+sticnnm \
+sticnszs \
+strgbclrmp \
+strlstttxt \
+strnm \
+sttrnsntfr \
+sttxtprprt \
+stwmclntmc \
+stwmclrmpw \
+stwmhnts \
+stwmicnnm \
+stwmnm \
+stwmnrmlhn \
+stwmprprts \
+stwmprtcls \
+stwmszhnts \
+txtprprtyt \
+wmgmtry \
+wthdrwwdw
+
+all: subdirs test
+
+test:$P $(OFILES) $(LIBS) $(TCM)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(TCM) $(LIBS) $(SYSLIBS)
+ $(CAT) test > $(ALLTESTS)
+ $(RM) test
+
+subdirs:
+ if [ ! -f $(ALLTESTS) ]; then $(CAT) /dev/null > $(ALLTESTS); \
+ chmod a+x $(ALLTESTS); else : ; fi
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then \
+ (cd $$i; echo Compiling in $$i; $(TET_BUILD_TOOL) linkexec); \
+ fi; \
+ done
+
+# The xtestlib is made if it doesn't exist
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
+clean: cletests clesubdirs
+
+cletests:
+ $(RM) test $(OFILES) $(ALLTESTS) core
+
+clesubdirs:
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then (cd $$i; $(TET_CLEAN_TOOL) ); fi; done
+
+clobber: clean
diff --git a/xc/test/xsuite/xtest/tset/CH09/allcclsshn/allcclsshn.m b/xc/test/xsuite/xtest/tset/CH09/allcclsshn/allcclsshn.m
new file mode 100644
index 000000000..cdf50411e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/allcclsshn/allcclsshn.m
@@ -0,0 +1,58 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAllocClassHint CH09
+XClassHint *
+XAllocClassHint()
+>>ASSERTION Good A
+A call to xname allocates and returns a pointer to a
+.S XClassHint
+structure in which each component is set to NULL.
+>>STRATEGY
+Allocate an XClassHint structure with XAllocClassHint.
+Verify that each component of the structure is set to NULL.
+>>CODE
+XClassHint *chint;
+
+ chint = XCALL;
+
+ if(chint == (XClassHint *) NULL) {
+ delete("XAllocClassHint() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ if(chint->res_name != NULL) {
+ report("The res_name component of the XClassHints structure was not NULL.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(chint->res_class != NULL) {
+ report("The res_class component of the XClassHints structure was not NULL.");
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)chint);
+
+ CHECKPASS(3);
+
+
+>>ASSERTION Good B 1
+When insufficient memory is available, then a call
+to xname returns NULL.
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/allcicnsz/allcicnsz.m b/xc/test/xsuite/xtest/tset/CH09/allcicnsz/allcicnsz.m
new file mode 100644
index 000000000..2eaa70961
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/allcicnsz/allcicnsz.m
@@ -0,0 +1,80 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAllocIconSize CH09
+XIconSize *XAllocIconSize()
+>>ASSERTION Good A
+A call to xname allocates and returns a pointer to a
+.S XIconSize
+structure in which each component is set to zero.
+>>STRATEGY
+Allocate a XIconSize structure using XAllocIconSize.
+Verify that the function did not return NULL.
+Verify that each component of the structure is 0.
+Release the allocated memory using XFree.
+>>CODE
+XIconSize *isize;
+
+ isize = XCALL;
+
+ if(isize == (XIconSize *) NULL) {
+ delete("%s() returned NULL.", TestName);
+ return;
+ } else
+ CHECK;
+
+ if(isize->min_width != 0) {
+ report("The min_width component of the XIconSize structure was %d instead of zero", isize->min_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(isize->min_height != 0) {
+ report("The min_height component of the XIconSize structure was %d instead of zero", isize->min_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(isize-> max_width != 0) {
+ report("The max_width component of the XIconSize structure was %d instead of zero", isize-> max_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(isize->max_height != 0) {
+ report("The max_height component of the XIconSize structure was %d instead of zero", isize->max_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(isize->width_inc != 0) {
+ report("The width_inc component of the XIconSize structure was %d instead of zero", isize->width_inc);
+ FAIL;
+ } else
+ CHECK;
+
+ if(isize-> height_inc != 0) {
+ report("The height_inc component of the XIconSize structure was %d instead of zero", isize->height_inc);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(7);
+
+>>ASSERTION Bad B 1
+When insufficient memory is available, then
+a call to xname returns NULL.
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/allcstndrd/allcstndrd.m b/xc/test/xsuite/xtest/tset/CH09/allcstndrd/allcstndrd.m
new file mode 100644
index 000000000..508bcaacf
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/allcstndrd/allcstndrd.m
@@ -0,0 +1,115 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAllocStandardColormap CH09
+XStandardColormap *
+XAllocStandardColormap()
+>>#
+>># Added note to mention that the allocated structure can
+>># be freed with XFree.
+>>#
+>># Cal 29/05/91
+>>ASSERTION Good A
+A call to xname allocates and returns a pointer to a
+.S XStandardColormap
+structure, which can be freed with
+.S XFree
+in which each component
+is set to zero.
+>>STRATEGY
+Allocate a XStandardColormap using XAllocStandardColormap.
+Verify that the function did not return NULL.
+Verify that each component of the XStandardColormap structure was 0.
+Release the allocated structure using XFree.
+>>CODE
+XStandardColormap *scmp = (XStandardColormap *) NULL;
+
+ scmp = XAllocStandardColormap();
+
+ if(scmp == (XStandardColormap *) NULL) {
+ delete("%s() returned NULL.", TestName);
+ return;
+ } else
+ CHECK;
+
+ if(scmp->colormap != (Colormap) 0) {
+ report("The colormap component of the XStandardColormap structure was non-zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(scmp->red_max != 0L) {
+ report("The red_max component of the XStandardColormap structure was non-zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(scmp->red_mult != 0L) {
+ report("The red_mult component of the XStandardColormap structure was non-zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(scmp->green_max != 0L) {
+ report("The green_max component of the XStandardColormap structure was non-zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(scmp->green_mult != 0L) {
+ report("The green_mult component of the XStandardColormap structure was non-zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(scmp->blue_max != 0L) {
+ report("The blue_max component of the XStandardColormap structure was non-zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(scmp->blue_mult != 0L) {
+ report("The blue_mult component of the XStandardColormap structure was non-zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(scmp->base_pixel != 0L) {
+ report("The base_pixel component of the XStandardColormap structure was non-zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(scmp->visualid != (VisualID) 0) {
+ report("The visualid component of the XStandardColormap structure was non-zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(scmp->killid != (XID) 0) {
+ report("The killid component of the XStandardColormap structure was non-zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)scmp);
+
+ CHECKPASS(11);
+
+>>ASSERTION Bad B 1
+When insufficient memory is available, then
+a call to xname returns NULL.
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/allcszhnts/allcszhnts.m b/xc/test/xsuite/xtest/tset/CH09/allcszhnts/allcszhnts.m
new file mode 100644
index 000000000..b0c8332d4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/allcszhnts/allcszhnts.m
@@ -0,0 +1,145 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAllocSizeHints CH09
+XSizeHints *
+XAllocSizeHints()
+>>ASSERTION Good A
+A call to xname allocates and returns a pointer to a
+.S XSizeHints
+structure, which can be freed with
+.S XFree ,
+in which each component is set to zero.
+>>STRATEGY
+Allocate an XSizeHints structure with XAllocSizeHints.
+Verify NULL is not returned.
+Verify that each component of the structure is set to zero.
+Release the allocated memory using XFree.
+>>CODE
+XSizeHints *shints;
+
+ shints = XAllocSizeHints();
+
+ if (shints == (XSizeHints *)NULL) {
+ delete("XAllocSizeHints returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ if(shints->flags != 0L) {
+ report("The flags component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(shints->x != 0) {
+ report("The x component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(shints->y != 0) {
+ report("The y component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(shints->width != 0) {
+ report("The width component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(shints->height != 0) {
+ report("The height component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(shints->min_width != 0) {
+ report("The min_width component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(shints->min_height != 0) {
+ report("The min_height component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(shints->max_width != 0) {
+ report("The max_width component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(shints->max_height != 0) {
+ report("The max_height component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(shints->width_inc != 0) {
+ report("The width_inc component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(shints->height_inc != 0) {
+ report("The height_inc component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if((shints->min_aspect.x != 0) || (shints->min_aspect.y != 0)){
+ report("The min_aspect components of the XSizeHints structure were not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if((shints->max_aspect.x != 0) || (shints->max_aspect.y != 0)){
+ report("The max_aspect components of the XSizeHints structure were not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(shints->base_width != 0) {
+ report("The base_width component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(shints->base_height != 0) {
+ report("The base_height component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(shints->win_gravity != 0) {
+ report("The win_gravity component of the XSizeHints structure was not zero.");
+ FAIL;
+ } else
+ CHECK;
+
+
+ XFree((char *) shints);
+ CHECKPASS(17);
+
+>>ASSERTION Good B 1
+When insufficient memory is available, then
+a call to xname returns NULL.
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/allcwmhnts/allcwmhnts.m b/xc/test/xsuite/xtest/tset/CH09/allcwmhnts/allcwmhnts.m
new file mode 100644
index 000000000..d72a1fb92
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/allcwmhnts/allcwmhnts.m
@@ -0,0 +1,102 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAllocWMHints CH09
+XWMHints *
+XAllocWMHints()
+>>ASSERTION Good A
+A call to xname allocates and returns a pointer to a
+.S XWMHints
+structure, which can be freed with XFree,
+in which each component is set to zero.
+>>STRATEGY
+Allocate a XWMHints structure with XAllocWMHints.
+Verify that the call did not return NULL.
+Verify that each component of the allocated structure was set to 0.
+Free the allocated structure using XFree.
+>>CODE
+XWMHints *hints;
+
+ hints = XCALL;
+
+ if(hints == (XWMHints *) NULL) {
+ delete("XAllocWMHints returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ if( hints->flags != 0L ) {
+ report("The flags component of the XWMHints structure was not 0.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( hints->input != (Bool) 0 ) {
+ report("The input component of the XWMHints structure was not 0.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( hints->initial_state != (int) 0 ) {
+ report("The initial_state component of the XWMHints structure was not 0.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( hints->icon_pixmap != (Pixmap) 0 ) {
+ report("The icon_pixmap component of the XWMHints structure was not 0.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( hints->icon_window != (Window) 0 ) {
+ report("The icon_window component of the XWMHints structure was not 0.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( hints->icon_x != (int) 0 ) {
+ report("The icon_x component of the XWMHints structure was not 0.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( hints->icon_y != (int) 0 ) {
+ report("The icon_y component of the XWMHints structure was not 0.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( hints->icon_mask != (Pixmap) 0 ) {
+ report("The icon_mask component of the XWMHints structure was not 0.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( hints->window_group != (XID) 0 ) {
+ report("The window_group component of the XWMHints structure was not 0.");
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)hints);
+
+ CHECKPASS(10);
+
+>>ASSERTION Bad B 1
+When insufficient memory is available, then
+a call to xname returns NULL.
+>># Completed Kieron Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/frstrlst/frstrlst.m b/xc/test/xsuite/xtest/tset/CH09/frstrlst/frstrlst.m
new file mode 100644
index 000000000..9dd7b52f5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/frstrlst/frstrlst.m
@@ -0,0 +1,81 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFreeStringList CH09
+void
+XFreeStringList(list)
+char **list = (char **) NULL;
+>>ASSERTION Good A
+A call to xname frees the memory allocated by a call to
+.S XTextPropertyToStringList
+or
+.S XGetCommand .
+>>STRATEGY
+Create a window using XCreateWindow.
+Allocate a text property structure using XStringListToTextProperty.
+Set the WM_COMMAND property using XSetCommand.
+Obtain the value of the WM_COMMAND property using XGetCommand.
+Obtain the strings from the XTextPropertyStructure using XTextPropertyToStringlist.
+Release the memory allocated in the call to XGetCommand.
+Release the memory allocated in the call to XTextPropertyToStringList.
+>>CODE
+char *str1 = "TestString1";
+char *str2 = "TestString2";
+char *str3 = "TestString3";
+int argc = 3;
+char *argv[3];
+int rargc;
+int rargc1;
+char **rargv = (char **) NULL;
+char **rargv1 = (char **) NULL;
+Window w;
+XVisualInfo *vp;
+XTextProperty tp;
+
+ argv[0] = str1;
+ argv[1] = str2;
+ argv[2] = str3;
+
+
+ if( XStringListToTextProperty(argv, 3, &tp) == 0) {
+ delete("XStringListToTextProperty() returned zero.");
+ return;
+ } else
+ CHECK;
+
+ if( XTextPropertyToStringList(&tp, &rargv, &rargc) == 0) {
+ delete("XTextPropertyToStringList() returned zero.");
+ return;
+ } else
+ CHECK;
+
+ XFree((char*)tp.value);
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(Dsp, vp);
+
+ XSetCommand(Dsp, w, argv, argc);
+
+ if(XGetCommand(Dsp, w, &rargv1, &rargc) == 0 ) {
+ delete("XGetCommand() returned zero.");
+ return;
+ } else
+ CHECK;
+
+ XFreeStringList(rargv1);
+ XFreeStringList(rargv);
+
+ CHECKPASS(3);
diff --git a/xc/test/xsuite/xtest/tset/CH09/ftchnm/ftchnm.m b/xc/test/xsuite/xtest/tset/CH09/ftchnm/ftchnm.m
new file mode 100644
index 000000000..167a9c0ef
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/ftchnm/ftchnm.m
@@ -0,0 +1,175 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFetchName CH09
+Status
+XFetchName(display, w, window_return_name)
+Display *display = Dsp;
+Window w = DRW(display);
+char **window_return_name = &winname;
+>>EXTERN
+#include "Xatom.h"
+char *winname = "XtestJunkName";
+>>ASSERTION Good A
+When the WM_NAME property has been set for the
+window specified by the
+.A w
+argument and has type
+.S STRING
+and format 8, then a call to xname returns in the
+.A window_name_return
+argument, which can be freed with XFree, the null-terminated
+name of the window, and returns non-zero.
+>>STRATEGY
+Create a window with XCreateWindow
+Set the name of the window to XtestWindowName with XStoreName
+Obtain the name of the window with XFetchName
+Verify that the returned name is the one that was set.
+Release the allocated name using XFree.
+>>CODE
+Status status;
+Window win;
+XVisualInfo *vp;
+char *wname = "XtestWindowName";
+char *wnameret;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ XStoreName(display, win, wname);
+
+ w = win;
+ window_return_name = &wnameret;
+ status = XCALL;
+
+ if(status == 0) {
+ report("XFetchName() returned 0");
+ FAIL;
+ } else
+ CHECK;
+
+ if(strcmp(wname, (wnameret != NULL) ? wnameret : "NULL") != 0) {
+ report("Window name was \"%s\" instead of \"%s\".", wnameret, wname);
+ FAIL;
+ } else
+ CHECK;
+
+ if (wnameret != NULL)
+ XFree(wnameret);
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the WM_NAME property has not been set for the window specified by the
+.A w
+argument, or has format other than 8 or has type other than
+.S STRING ,
+then a call to xname
+sets the
+.A window_name_return
+argument to NULL, and returns zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Obtain the value of the WM_NAME property with XFetchName.
+Verify that the call returned zero.
+Verify that the returned name was set to NULL.
+
+Create a window with XCreateWindow.
+Set the WM_NAME property with format 32 and type STRING using XChangeProperty.
+Obtain the value of the WM_NAME property with XFetchName.
+Verify that the call returned zero.
+Verify that the returned name was set to NULL.
+
+Create a window with XCreateWindow.
+Set the WM_NAME property with format 8 type ATOM using XChangeProperty.
+Obtain the value of the WM_NAME property with XFetchName.
+Verify that the call returned zero.
+Verify that the returned name was set to NULL.
+
+>>CODE
+Status status;
+Window win;
+XVisualInfo *vp;
+char *name = "XTWindowName";
+char *wnameret;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+/* property unset */
+ w = win;
+ window_return_name = &wnameret;
+ status = XCALL;
+
+
+ if(status != 0) {
+ report("XFetchName() did not return 0 when the WM_NAME property was not set.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(wnameret != NULL) {
+ report("Window name was \"%s\" instead of NULL when the WM_NAME property was not set.", wnameret);
+ FAIL;
+ } else
+ CHECK;
+
+ win = makewin(display, vp);
+/* format wrong */
+ XChangeProperty(display, win, XA_WM_NAME, XA_STRING, 32, PropModeReplace, (unsigned char *) name, strlen(name));
+ w = win;
+ window_return_name = &wnameret;
+ status = XCALL;
+
+ if(status != 0) {
+ report("XFetchName() did not return 0 when the WM_NAME property format was 32.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(wnameret != NULL) {
+ report("Window name was \"%s\" instead of NULL when the WM_NAME property format was 32.", wnameret);
+ FAIL;
+ } else
+ CHECK;
+
+
+ win = makewin(display, vp);
+/* type wrong */
+ XChangeProperty(display, win, XA_WM_NAME, XA_ATOM, 8, PropModeReplace, (unsigned char *) name, strlen(name));
+ w = win;
+ window_return_name = &wnameret;
+ status = XCALL;
+
+ if(status != 0) {
+ report("XFetchName() did not return 0 when the WM_NAME property type was ATOM.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(wnameret != NULL) {
+ report("Window name was \"%s\" instead of NULL when the WM_NAME property type was ATOM.", wnameret);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(6);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Completed Review.
diff --git a/xc/test/xsuite/xtest/tset/CH09/gtclsshnt/gtclsshnt.m b/xc/test/xsuite/xtest/tset/CH09/gtclsshnt/gtclsshnt.m
new file mode 100644
index 000000000..c6bdf0779
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gtclsshnt/gtclsshnt.m
@@ -0,0 +1,188 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetClassHint CH09
+Status
+XGetClassHint(display, w, class_hints_return)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XClassHint *class_hints_return = &chints;
+>>EXTERN
+#include "Xatom.h"
+XClassHint chints;
+XClassHint chints_ret = { "<Unset String>", "<UnsetString>" };
+>>ASSERTION Good A
+When the WM_CLASS property is set for the window
+.A w ,
+and has format 8 and type
+.S STRING ,
+then a call to xname returns the class hint, which can be freed
+with XFree, in the
+.S XClassHint
+structure named by the
+.A class_hints_return
+argument and returns non-zero.
+>>STRATEGY
+Create a window using XCreateWindow.
+Set the WM_CLASS property using XSetClassHint.
+Obtain the WM_CLASS property value with XGetWindowProperty.
+Verify that the returned values are correct.
+Release the allocated hints using XFree.
+>>CODE
+char *s;
+Window win;
+Status status;
+XVisualInfo *vp;
+XClassHint chints;
+
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ chints.res_name = "Xtest_res_name";
+ chints.res_class = "Xtest_res_class";
+
+ XSetClassHint(display, win, &chints);
+
+ w = win;
+ class_hints_return = &chints_ret;
+ status = XCALL;
+
+ if(status == False) {
+ report("XGetClassHint() returned False.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( strcmp((s=chints_ret.res_name), chints.res_name) != 0) {
+ report("The res_name component of the XClassHint structure was \"%s\" instead of %s.",
+ s == (char *)NULL ? "NULL" : s,
+ chints.res_name);
+ FAIL;
+ } else
+ CHECK;
+
+ if(strcmp((s=chints_ret.res_class), chints.res_class) != 0) {
+ report("The res_class component of the XClassHint structure was \"%s\" instead of %s.",
+ s == (char *)NULL ? "NULL" : s,
+ chints.res_class);
+ FAIL;
+ } else
+ CHECK;
+
+
+ XFree(chints_ret.res_name);
+ XFree(chints_ret.res_class);
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the WM_CLASS property is not set for the window
+.A w ,
+or has a format other than 8 or a type other than
+.S STRING ,
+then a call to xname returns zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Obtain the value of the WM_CLASS property with XGetClassHint.
+Verify that the call returned zero.
+
+Create a window with XCreateWindow.
+Set the WM_CLASS property with format 16 and type STRING using XChangeProperty.
+Obtain the value of the WM_CLASS property with XGetClassHint.
+Verify that the call returned zero.
+
+Create a window with XCreateWindow.
+Set the WM_CLASS property with format 8 type ATOM using XChangeProperty.
+Obtain the value of the WM_CLASS property with XGetClassHint.
+Verify that the call returned zero.
+
+>>CODE
+Status status;
+XVisualInfo *vp;
+char *s1 = "XTestResName";
+char *s2 = "XTestResClass";
+unsigned lenname, lenclass;
+char *hints, *hp;
+XClassHint chints_ret;
+
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+
+/* property not set */
+ if( (char *) (hints = malloc( (unsigned int) ((unsigned)2 + (lenname = strlen(s1)) + (lenclass = strlen(s2)))) ) == (char *) 0) {
+ delete("malloc() failed.");
+ return;
+ } else
+ CHECK;
+
+ hp = hints;
+ strcpy( hp, s1);
+ hp += lenname + 1;
+ strcpy( hp, s2);
+
+ class_hints_return = &chints_ret;
+ status = XCALL;
+
+ if(status != False) {
+ report("XGetClassHint() did not return False with the WM_CLASS property unset.");
+ FAIL;
+ } else
+ CHECK;
+
+/* format not 8 */
+
+ w = makewin(display, vp);
+
+ XChangeProperty(display, w, XA_WM_CLASS, XA_STRING, 16,
+ PropModeReplace, (unsigned char *) &hints, 2 + lenclass +lenname);
+
+ class_hints_return = &chints_ret;
+ status = XCALL;
+
+ if(status != False) {
+ report("XGetClassHint() did not return False with the WM_CLASS property format set to 16.");
+ FAIL;
+ } else
+ CHECK;
+
+
+/* type wrong */
+
+ w = makewin(display, vp);
+
+ XChangeProperty(display, w, XA_WM_CLASS, XA_ATOM, 8,
+ PropModeReplace, (unsigned char *) &hints, 2 + lenclass + lenname);
+
+ class_hints_return = &chints_ret;
+ status = XCALL;
+
+ if(status != False) {
+ report("XGetClassHint() did not return False with the WM_CLASS property type set to Atom.");
+ FAIL;
+ } else
+ CHECK;
+
+ free(hints);
+
+ CHECKPASS(4);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/gtcmmnd/gtcmmnd.m b/xc/test/xsuite/xtest/tset/CH09/gtcmmnd/gtcmmnd.m
new file mode 100644
index 000000000..fc2641bcc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gtcmmnd/gtcmmnd.m
@@ -0,0 +1,189 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetCommand CH09
+Status
+XGetCommand(display, w, argv_return, argc_return)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+char ***argv_return = &argvdef;
+int *argc_return = &argcdef;
+>>EXTERN
+#include "Xatom.h"
+char **argvdef;
+int argcdef;
+>>ASSERTION Good A
+When the WM_COMMAND property is set for the window
+.A w ,
+is of
+.M type
+STRING, and is of
+.M format
+8, then a call to xname returns the property string list,
+which can be freed with XFree,
+in the
+.A argv_return
+argument and the number of strings in the
+.A argc_return
+argument and returns non-zero.
+>>STRATEGY
+Set the WM_COMMAND property using XSetCommand.
+Obtain the value of the WM_COMMAND property using XGetCommand.
+Verify that the call did not return zero.
+Verify that the number and value of the returned strings is correct.
+>>CODE
+XVisualInfo *vp;
+Status status;
+char *nullstr = "<NULL>";
+char **strpp, *strp;
+char *str1 = "XTest string 1____";
+char *str2 = "XTest string 2__";
+char *str3 = "XTest string 3___";
+int nstrs = 3;
+char *prop[3];
+char **rstrings = (char**) NULL;
+int rcount = 0;
+int i;
+
+ prop[0] = str1;
+ prop[1] = str2;
+ prop[2] = str3;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+
+ XSetCommand(display, w, prop, nstrs);
+
+ argv_return = &rstrings;
+ argc_return = &rcount;
+ status = XCALL;
+
+ if(status == False) {
+ delete("XGetCommand() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if(rstrings == (char **) NULL) {
+ report("Returned list of strings was NULL");
+ FAIL;
+ } else {
+ CHECK;
+
+ if(rcount != nstrs) {
+ report("%d strings were returned instead of %d", rcount, nstrs);
+ FAIL;
+ } else {
+ CHECK;
+
+ for(i=0, strpp = rstrings; i< nstrs; i++, strpp++) {
+ strp = (*strpp == NULL ? nullstr : *strpp);
+
+ if(strcmp(strp, prop[i]) != 0) {
+ report("String %d was \"%s\" instead of \"%s\"", i, strp, prop[i]);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ }
+ XFreeStringList(rstrings);
+ }
+
+ CHECKPASS(nstrs + 3);
+
+>>ASSERTION Good A
+When the WM_COMMAND property is not set for the window
+.A w ,
+or is not of
+.M type
+STRING, or is not of
+.M format
+8, then a call to xname returns zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Obtain the value of the unset WM_ICON_SIZES property using XGetCommand.
+Verify that the function returned zero.
+
+Create a window with XCreateWindow.
+Set the WM_COMMAND property to have format 16 type STRING using XChangeProperty.
+Obtain the value of the WM_COMMAND property using XGetCommand.
+Verify that the call returned zero
+
+Create a window with XCreateWindow.
+Set the WM_COMMAND property to have format 8 and type ATOM using XChangeProperty.
+Obtain the value of the WM_COMMAND property using XGetCommand.
+Verify that the call returned zero.
+>>CODE
+Status status;
+char *s = "XTestString1";
+XVisualInfo *vp;
+char **rstrings = (char **) NULL;
+int rcount = 0;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ argv_return = &rstrings;
+ argc_return = &rcount;
+
+ w = makewin(display, vp);
+
+/* unset property */
+
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the property was unset.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+
+ w = makewin(display, vp);
+
+/* format 16 */
+ XChangeProperty(display, w, XA_WM_COMMAND, XA_STRING, 16, PropModeReplace, (unsigned char *) s, strlen(s) );
+
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when property was of format 16.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+
+ w = makewin(display, vp);
+
+/* type ATOM */
+ XChangeProperty(display, w, XA_WM_COMMAND, XA_ATOM, 8, PropModeReplace, (unsigned char *) s, strlen(s) );
+
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when property was of type Atom.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+
+ CHECKPASS(3);
+
+>>ASSERTION Bad B 1
+When insufficient memory is available to contain the string list,
+then a call to xname returns a zero status.
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/gticnnm/gticnnm.m b/xc/test/xsuite/xtest/tset/CH09/gticnnm/gticnnm.m
new file mode 100644
index 000000000..95ff63986
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gticnnm/gticnnm.m
@@ -0,0 +1,179 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetIconName CH09
+Status
+XGetIconName(display, w, icon_name_return)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+char **icon_name_return = &iconname;
+>>EXTERN
+#include "Xatom.h"
+char *iconname = "XtestIC";
+>>ASSERTION Good A
+When the
+.S WM_ICON_NAME
+property for the window
+.A w
+has been set,
+and has format 8 and type
+.S STRING ,
+then a call to xname returns that name, which can
+be freed with XFree, in the
+.A icon_name_return
+argument and returns non-zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the icon name for the window with XSetIconName.
+Obtain the icon name with XGetIconName.
+Verify that the returned name is that which was set.
+Realease the allocated memory using XFree.
+>>CODE
+Window win;
+char *iconname = "Xtest Icon Name";
+char *iconnameret;
+Status status;
+char **list_return;
+int count_return;
+XTextProperty tp, rtp;
+XVisualInfo *vp;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ XSetIconName(display, win, iconname);
+
+ w = win;
+ icon_name_return = &iconnameret;
+ status = XCALL;
+
+ if(status == False) {
+ report("XGetIconName() returned False.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(strcmp(iconname, (iconnameret != NULL) ? iconnameret : "NULL") != 0) {
+ report("XGetIconName() returned \"%s\" instead of \"%s\"", iconnameret, iconname);
+ FAIL;
+ } else
+ CHECK;
+
+ if(iconnameret != NULL)
+ XFree(iconnameret);
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the
+.S WM_ICON_NAME
+property for the window
+.A w
+has not been set,
+or has format other than 8 or type other than
+.S STRING ,
+then a call to xname sets the string in the
+.A icon_name_return
+argument to NULL and returns zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Obtain the value of the WM_ICON_NAME property with XGetIconName.
+Verify that the call returned zero.
+Verify that the returned name was set to NULL.
+
+Create a window with XCreateWindow.
+Set the WM_ICON_NAME property with format 16 and type STRING using XChangeProperty.
+Obtain the value of the WM_ICON_NAME property with XGetIconName.
+Verify that the call returned zero.
+Verify that the returned name was set to NULL.
+
+Create a window with XCreateWindow.
+Set the WM_ICON_NAME property with format 8 type ATOM using XChangeProperty.
+Obtain the value of the WM_ICON_NAME property with XGetIconName.
+Verify that the call returned zero.
+Verify that the returned name was set to NULL.
+
+>>CODE
+char *iconnameret = "XTestUninit";
+char *name = "XTestIconName";
+Status status;
+char **list_return;
+int count_return;
+XVisualInfo *vp;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+
+/* Property unset */
+
+ icon_name_return = &iconnameret;
+ status = XCALL;
+
+ if(status != False) {
+ report("XGetIconName() did not return False when the WM_ICON_NAME property was unset.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( iconnameret != NULL) {
+ report("XGetIconName() returned \"%s\" instead of NULL when the WM_ICON_NAME was unset.", iconnameret);
+ FAIL;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+
+/* format 16 */
+ XChangeProperty(display, w, XA_WM_ICON_NAME, XA_STRING, 16, PropModeReplace, (unsigned char *) name, strlen(name));
+
+ status = XCALL;
+
+ if(status != False) {
+ report("XGetIconName() did not return False when the WM_ICON_NAME property format was 16.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( iconnameret != NULL) {
+ report("XGetIconName() returned \"%s\" instead of NULL when the WM_ICON_NAME property format was 16.", iconnameret);
+ FAIL;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+/* type XA_ATOM */
+ XChangeProperty(display, w, XA_WM_ICON_NAME, XA_ATOM, 8, PropModeReplace, (unsigned char *) name, strlen(name));
+ status = XCALL;
+
+ if(status != False) {
+ report("XGetIconName() did not return False when the WM_ICON_NAME property type was ATOM.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( iconnameret != NULL) {
+ report("XGetIconName() returned \"%s\" instead of NULL when the WM_ICON_NAME property type was ATOM", iconnameret);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(6);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>># Action Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/gticnszs/gticnszs.m b/xc/test/xsuite/xtest/tset/CH09/gticnszs/gticnszs.m
new file mode 100644
index 000000000..b916187b4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gticnszs/gticnszs.m
@@ -0,0 +1,231 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetIconSizes CH09
+Status
+XGetIconSizes(display, w, size_list_return, count_return)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XIconSize **size_list_return = &icnszp;
+int *count_return = &countret;
+>>EXTERN
+#include "Xatom.h"
+#define NumPropIconSizeElements 6
+XIconSize *icnszp;
+int countret;
+>>ASSERTION Good A
+When the WM_ICON_SIZES property has been set for the window
+.A w ,
+and has format 32, a value which is a multiple of 6 elements and type
+.S WM_ICON_SIZE ,
+then a call to xname returns a list of
+.S XIconSize
+structures, which can be freed with XFree, in the
+.A size_list_return
+argument and the number of structures in the
+.A count_return
+argument and returns non-zero.
+>>STRATEGY
+Create a window using XCreateWindow.
+Set the WM_ICON_SIZES property using XSetIconSizes.
+Obtain the WM_ICON_SIZES property using XGetIconSizes.
+Verify that the call did not return False.
+Verify that the property value is correct.
+Release the allocated memory using XFree.
+>>CODE
+Status status;
+XVisualInfo *vp;
+int i;
+int v;
+XIconSize sizelist[5];
+int count = 5;
+int rcount;
+XIconSize *sp = (XIconSize *) NULL, *sref;
+
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+
+ for(i=0, sp=sizelist, v=0; i<count; i++, sp++) {
+ sp->min_width = v++;
+ sp->min_height = v++;
+ sp->max_width = v++;
+ sp->max_height = v++;
+ sp->width_inc = v++;
+ sp->height_inc = v++;
+ }
+
+ XSetIconSizes(display, w, sizelist, count);
+
+ size_list_return = &sp;
+ count_return = &rcount;
+
+ status = XCALL;
+
+ if(status == False) {
+ report("%s() returned False.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if( sp == (XIconSize *) NULL) {
+ report("No value was set for the WM_ICON_SIZES property.");
+ FAIL;
+ } else {
+
+ CHECK;
+ if( rcount != count ) {
+ report("%s() returned %d elements instead of %d.", TestName, rcount, count);
+ FAIL;
+ } else {
+ for(i=0, sref=sp, v=0; i<count; i++, sref++) {
+
+ if( sref->min_width != v++ ) {
+ report("The min_width component of XIconSize structure %d was %d instead of %d.", i, sref->min_width, v-1);
+ FAIL;
+ } else
+ CHECK;
+
+ if( sref->min_height != v++ ) {
+ report("The min_height component of XIconSize structure %d was %d instead of %d.", i, sref->min_height, v-1);
+ FAIL;
+ } else
+ CHECK;
+
+ if( sref->max_width != v++ ) {
+ report("The max_width component of XIconSize structure %d was %d instead of %d.", i, sref->max_width, v-1);
+ FAIL;
+ } else
+ CHECK;
+
+ if( sref->max_height != v++ ) {
+ report("The max_height component of XIconSize structure %d was %d instead of %d.", i, sref->max_height, v-1);
+ FAIL;
+ } else
+ CHECK;
+
+ if( sref->width_inc != v++ ) {
+ report("The width_inc component of XIconSize structure %d was %d instead of %d.", i, sref->width_inc, v-1);
+ FAIL;
+ } else
+ CHECK;
+
+ if( sref->height_inc != v++ ) {
+ report("The height_inc component of XIconSize structure %d was %d instead of %d.", i, sref->height_inc, v-1);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+ }
+ XFree((char *)sp);
+ }
+
+ CHECKPASS(6*count+2);
+
+>>ASSERTION Good A
+When the WM_ICON_SIZE property is not set for the window
+.A w ,
+or has format other than 32, a value which is not a multiple of 6 elements
+or type other than WM_ICON_SIZE,
+then a call
+to xname returns zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Obtain the value of the unset WM_ICON_SIZES property using XGetIconSizes.
+Verify that the function returned zero.
+
+Create a window with XCreateWindow.
+Set the WM_ICON_SIZES property to have format 16 size 6 elements and type WM_ICON_SIZE using XChangeProperty.
+Obtain the value of the WM_ICON_SIZES property using XGetIconSizes.
+Verify that the call returned zero
+
+Create a window with XCreateWindow.
+Set the WM_ICON_SIZES property to have format 32 size 13 elements and type WM_ICON_SIZE using XChangeProperty.
+Obtain the value of the WM_ICON_SIZES property using XGetIconSizes.
+Verify that the call returned zero
+
+Create a window with XCreateWindow.
+Set the WM_ICON_SIZES property to have format 32 size 6 elements and type WM_SIZE_HINTS using XChangeProperty.
+Obtain the value of the WM_ICON_SIZES property using XGetIconSizes.
+Verify that the call returned zero
+
+>>CODE
+Status status;
+XVisualInfo *vp;
+XIconSize *slp = (XIconSize *) NULL;
+int cret;
+int count = 3;
+XIconSize sl[3];
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ size_list_return = &slp;
+ count_return = &cret;
+
+ w = makewin(display, vp);
+/* unset property */
+
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the property was unset.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+/* format 16 */
+ XChangeProperty(display, w, XA_WM_ICON_SIZE, XA_WM_ICON_SIZE, 16, PropModeReplace, (unsigned char *) sl, count*NumPropIconSizeElements);
+
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the property format was 16.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+/* size 13 */
+ XChangeProperty(display, w, XA_WM_ICON_SIZE, XA_WM_ICON_SIZE, 32, PropModeReplace, (unsigned char *) sl, NumPropIconSizeElements*2 + 1);
+
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the number of elements was 13.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+/* type WM_SIZE_HINTS */
+ XChangeProperty(display, w, XA_WM_ICON_SIZE, XA_WM_SIZE_HINTS, 32, PropModeReplace, (unsigned char *) sl, count*NumPropIconSizeElements);
+
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the property type was WM_SIZE_HINTS.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/gtrgbclrmp/gtrgbclrmp.m b/xc/test/xsuite/xtest/tset/CH09/gtrgbclrmp/gtrgbclrmp.m
new file mode 100644
index 000000000..9181805c9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gtrgbclrmp/gtrgbclrmp.m
@@ -0,0 +1,462 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetRGBColormaps CH09
+Status
+XGetWMColormaps(display, w, std_colormap_return, count_return, property)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XStandardColormap **std_colormap_return = &scolormap;
+int *count_return = &cntret;
+Atom property = XA_ATOM;
+>>EXTERN
+
+#include "Xatom.h"
+static XStandardColormap *scolormap;
+static int cntret;
+static XStandardColormap scmp1 = { (Colormap) 1, 2L, 3L, 4L, 5L, 6L, 7L, 8L, (VisualID) -1, (XID) -2 };
+static XStandardColormap scmp2 = { (Colormap) 11, 12L, 13L, 14L, 15L, 16L, 17L, 18L, (VisualID) 19, (XID) 20 };
+static XStandardColormap scmp3 = { (Colormap) 21, 22L, 23L, 24L, 25L, 26L, 27L, 28L, (VisualID) 21, (XID) 22 };
+
+>>#
+>># COMMENT:
+>># This assertion does not match the Xlib code.
+>># I think it maybe ought to read 8 * n or 9 * n or 10 * n elements
+>># for positive integer n.
+>># Until the review period has expired this test will avoid the
+>># problem.
+>>#
+>># Note also that a list of colormaps that are not all of 10
+>># elements in size will definitely fail with the current
+>># Xlib. Hence Only single non-ICCCCCCCCCM structures can be
+>># obtained from the server without failure.
+>>#
+>># Cal 29/05/91
+>>#
+>>ASSERTION Good A
+When the property named by the
+.A property
+argument is set on the window named by the
+.A w
+argument, is of
+.M type
+RGB_COLOR_MAP, is of
+.M format
+32, and is of length n1*8 + n2*9 + n3*10 elements (where n1,n2,n3 \(>= 0 and
+n1+n2+n3 \(>= 1), then
+a call to xname returns in the
+.A std_colormap_return
+argument the RBG colormap definitions, which can be freed with XFree,
+and in
+.A count_return
+the number of structures and returns non-zero.
+>>STRATEGY
+Create a window using XCreateWindow.
+Set the RGB_DEFAULT_MAP property using XSetRGBColormaps.
+Obtain the value of the RGB_DEFAULT_MAP property using XGetRGBColormaps.
+Verify that the call did not return False.
+Verify that the value was correct.
+Free the allocated memory using XFree.
+>>CODE
+Status status;
+int ncmp = 3;
+XStandardColormap scmp[3];
+XStandardColormap *rscmp = (XStandardColormap *) NULL;
+XStandardColormap *cmpp;
+int rncmp = 0;
+int i;
+XVisualInfo *vp;
+Atom prop = XA_RGB_DEFAULT_MAP;
+
+ scmp[0] = scmp1;
+ scmp[1] = scmp2;
+ scmp[2] = scmp3;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ w = makewin(display, vp);
+ XSetRGBColormaps(display, w, scmp, ncmp, prop);
+
+ std_colormap_return = &rscmp;
+ count_return = &rncmp;
+ property = prop;
+ status = XCALL;
+
+ if(status == False) {
+ delete("%s returned False.", TestName);
+ return;
+ } else
+ CHECK;
+
+ if(rscmp == (XStandardColormap *) NULL) {
+ report("The returned list of XStandardColormap structures was NULL.");
+ FAIL;
+ } else {
+
+ CHECK;
+ if( rncmp != ncmp) {
+ report("%d XStandardColormap structures were returned instead of %d.", rncmp, ncmp);
+ FAIL;
+ } else {
+
+ CHECK;
+
+ for(i = 0, cmpp = rscmp; i < ncmp; i++, cmpp++) {
+
+ if(cmpp->colormap != scmp[i].colormap) {
+ report("The colormap component of the XStandardColormap structure %d was incorrect.", i);
+ FAIL;
+ } else
+ CHECK;
+
+ if(cmpp->red_max != scmp[i].red_max) {
+ report("The red_max component of the XStandardColormap structure %d was incorrect.", i);
+ FAIL;
+ } else
+ CHECK;
+
+ if(cmpp->red_mult != scmp[i].red_mult) {
+ report("The red_mult component of the XStandardColormap structure %d was incorrect.", i);
+ FAIL;
+ } else
+ CHECK;
+
+ if(cmpp->green_max !=scmp[i].green_max) {
+ report("The green_max component of the XStandardColormap structure %d was incorrect.", i);
+ FAIL;
+ } else
+ CHECK;
+
+ if(cmpp->green_mult != scmp[i].green_mult) {
+ report("The green_mult component of the XStandardColormap structure %d was incorrect.", i);
+ FAIL;
+ } else
+ CHECK;
+
+ if(cmpp->blue_max != scmp[i].blue_max) {
+ report("The blue_max component of the XStandardColormap structure %d was incorrect.", i);
+ FAIL;
+ } else
+ CHECK;
+
+ if(cmpp->blue_mult != scmp[i].blue_mult) {
+ report("The blue_mult component of the XStandardColormap structure %d was incorrect.", i);
+ FAIL;
+ } else
+ CHECK;
+
+ if(cmpp->base_pixel != scmp[i].base_pixel) {
+ report("The base_pixel component of the XStandardColormap structure %d was incorrect.", i);
+ FAIL;
+ } else
+ CHECK;
+
+ if(cmpp->visualid != scmp[i].visualid) {
+ report("The visualid component of the XStandardColormap structure %d was incorrect.", i);
+ FAIL;
+ } else
+ CHECK;
+
+ if(cmpp->killid != scmp[i].killid ) {
+ report("The killid component of the XStandardColormap structure %d was incorrect.", i);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+ }
+ XFree((char*)rscmp);
+ }
+
+ CHECKPASS(ncmp * 10 + 3);
+
+>>#
+>># COMMENT:
+>># See above COMMENT
+>>#
+>>ASSERTION Good A
+When the property named by the
+.A property
+argument is not set on the window named by the
+.A w
+argument, or is not of
+.M type
+RGB_COLOR_MAP, or is not of
+.M format
+32, or is not
+of length n1*8 + n2*9 + n3*10 elements (where n1,n2,n3 \(>= 0 and
+n1+n2+n3 \(>= 1), then
+a call to xname does not set the
+.A std_colormap_return
+or
+.A count_return
+arguments and returns zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Obtain the value of the unset RGB_COLOR_MAP property using XGetRGBColormaps.
+Verify that the call returned False.
+Verify that the std_colormap_return argument was not changed.
+Verify that the count_return argument was not changed.
+
+Create a window with XCreateWindow.
+Set the RGB_COLOR_MAP property to have format 8.
+Obtain the value of the RGB_COLOR_MAP property using XGetRGBColormaps.
+Verify that the call returned False.
+Verify that the std_colormap_return argument was not changed.
+Verify that the count_return argument was not changed.
+
+Create a window with XCreateWindow.
+Set the RGB_COLOR_MAP property to have type ATOM.
+Obtain the value of the RGB_COLOR_MAP property using XGetRGBColormaps.
+Verify that the call returned False.
+Verify that the std_colormap_return argument was not changed.
+Verify that the count_return argument was not changed.
+
+Create a window with XCreateWindow.
+Set the RGB_COLOR_MAP property to have size 7 elements.
+Obtain the value of the RGB_COLOR_MAP property using XGetRGBColormaps.
+Verify that the call returned False.
+Verify that the std_colormap_return argument was not changed.
+Verify that the count_return argument was not changed.
+
+>>CODE
+Status status;
+char *when;
+XStandardColormap *rscmp = (XStandardColormap *) NULL;
+int rncmp = 0;
+XVisualInfo *vp;
+Atom prop = XA_RGB_BEST_MAP;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ std_colormap_return = &rscmp;
+ count_return = &rncmp;
+ property = prop;
+
+ w = makewin(display, vp);
+/* Property unset */
+
+ rscmp = (XStandardColormap *) -1;
+ rncmp = -1;
+ status = XCALL;
+
+ when = "when the RGB_BEST_MAP property was not set.";
+
+ if( status != False ) {
+ report("%s() did not return False %s", TestName, when);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rscmp != (XStandardColormap *) -1) {
+ report("The std_colormap_return argument was updated %s", when);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rncmp != -1) {
+ report("The count_return argument was updated %s", when);
+ FAIL;
+ } else
+ CHECK;
+
+ when = "when the RGB_BEST_MAP property format was 8.";
+
+ w = makewin(display, vp);
+/* format 8 */
+ XChangeProperty(display, w, prop, XA_RGB_COLOR_MAP, 8, PropModeReplace, (unsigned char *) &scmp1, 10);
+
+ rscmp = (XStandardColormap *) -1;
+ rncmp = -1;
+ status = XCALL;
+
+ if( status != False ) {
+ report("%s() did not return False %s", TestName, when);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rscmp != (XStandardColormap *) -1) {
+ report("The std_colormap_return argument was updated %s", when);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rncmp != -1) {
+ report("The count_return argument was updated %s", when);
+ FAIL;
+ } else
+ CHECK;
+
+ when = "when the RGB_BEST_MAP property type was ATOM.";
+
+ w = makewin(display, vp);
+/* type ATOM */
+ XChangeProperty(display, w, prop, XA_ATOM, 32, PropModeReplace, (unsigned char *) &scmp1, 10);
+
+ rscmp = (XStandardColormap *) -1;
+ rncmp = -1;
+ status = XCALL;
+
+ if( status != False ) {
+ report("%s() did not return False %s.", TestName, when);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rscmp != (XStandardColormap *) -1) {
+ report("The std_colormap_return argument was updated %s", when);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rncmp != -1) {
+ report("The count_return argument was updated %s", when);
+ FAIL;
+ } else
+ CHECK;
+
+ when = "when the RGB_BEST_MAP property number of elements was 7.";
+
+ w = makewin(display, vp);
+/* Bad number of elements */
+ XChangeProperty(display, w, prop, XA_RGB_COLOR_MAP, 32, PropModeReplace, (unsigned char *) &scmp1, 7);
+
+ rscmp = (XStandardColormap *) -1;
+ rncmp = -1;
+ status = XCALL;
+
+ if( status != False ) {
+ report("%s() did not return False %s.", TestName, when);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rscmp != (XStandardColormap *) -1) {
+ report("std_colormap_return argument was updated %s", when);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rncmp != -1) {
+ report("The count_return argument was updated %s", when);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(12);
+
+>>ASSERTION Good A
+When the visualid is not specified in the property colormaps, then the
+.M visualid
+of the returned structures is set to the default
+visual for the screen of the window
+.A w .
+>>STRATEGY
+Create a window using XCreateWindow.
+Set the RGB_GRAY_MAP property to have 8 elements using XChangeProperty.
+Obtain the default visual ID using DefaultVisual.
+Obtain the value of the RGB_GRAY_MAP property using XGetRGBColormaps.
+Verify that the value of the visual component of the returned XStandardColormap
+ structure was the same as the default visual.
+>>CODE
+Status status;
+XStandardColormap *rscmp = (XStandardColormap *) NULL;
+int rncmp = 0;
+XVisualInfo *vp;
+Visual *vi;
+VisualID vid;
+Atom prop = XA_RGB_GRAY_MAP;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ std_colormap_return = &rscmp;
+ count_return = &rncmp;
+ property = prop;
+
+ w = makewin(display, vp);
+ XChangeProperty(display, w, prop, XA_RGB_COLOR_MAP, 32, PropModeReplace, (unsigned char *) &scmp1, 8);
+
+ status = XCALL;
+ vi = XDefaultVisual(display, XDefaultScreen(display));
+ vid = XVisualIDFromVisual(vi);
+
+ if(status == False) {
+ delete("%s() returned False.", TestName);
+ return;
+ } else
+ CHECK;
+
+ if(vid != rscmp->visualid) {
+ report("%s() did not report the default visual in the returned visualid component.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)rscmp);
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the killid is not specified in the property colormaps, then the
+.M killid
+of the returned structures is set to None.
+>>STRATEGY
+Create a window using XCreateWindow.
+Set the RGB_GRAY_MAP property to have 9 elements using XChangeProperty.
+Obtain the value of the RGB_GRAY_MAP property using XGetRGBColormaps.
+Verify that the value of the killid component of the returned XStandardColormap
+ structure was set to None.
+>>CODE
+Status status;
+XStandardColormap *rscmp = (XStandardColormap *) NULL;
+int rncmp = 0;
+XVisualInfo *vp;
+Atom prop = XA_RGB_GRAY_MAP;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ std_colormap_return = &rscmp;
+ count_return = &rncmp;
+ property = prop;
+
+ w = makewin(display, vp);
+ XChangeProperty(display, w, prop, XA_RGB_COLOR_MAP, 32, PropModeReplace, (unsigned char *) &scmp1, 9);
+
+ status = XCALL;
+
+ if(status == False) {
+ delete("%s() returned False.", TestName);
+ return;
+ } else
+ CHECK;
+
+ if(rscmp->killid != None) {
+ report("%s() did not set the returned killid component to None.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)rscmp);
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER BadAtom
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/gttrnsntfr/gttrnsntfr.m b/xc/test/xsuite/xtest/tset/CH09/gttrnsntfr/gttrnsntfr.m
new file mode 100644
index 000000000..d6d794e80
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gttrnsntfr/gttrnsntfr.m
@@ -0,0 +1,162 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetTransientForHint CH09
+Status
+XGetTransientForHint(display, w, prop_window_return)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+Window *prop_window_return = &propwindow;
+>>EXTERN
+#include "Xatom.h"
+Window propwindow;
+>>ASSERTION Good A
+When the WM_TRANSIENT_FOR property is set for the window
+.A w ,
+and is format 32, length 1 element and of type
+.S WINDOW ,
+then a call to xname returns the property value in the
+.A prop_window_return
+argument and returns non-zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_TRANSIENT_FOR property using XSetTransientForHint.
+Obtain the value of the WM_TRANSIENT_FOR property using XGetTransientForHint.
+Verify that the call did not return False.
+Verify that the value was correct.
+>>CODE
+Status status;
+Window win, twin;
+Window rwin = (Window) -1;
+XVisualInfo *vp;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ twin = makewin(display, vp);
+
+ XSetTransientForHint(display, win, twin);
+
+ w = win;
+ prop_window_return = &rwin;
+ status = XCALL;
+
+ if(status == False) {
+ report("XGetTransientForHint() returned False.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rwin != twin) {
+ report("The value of the WM_TRANSIENT_FOR property was %lx instead of %lx.", (long) rwin, (long) twin);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the WM_TRANSIENT_FOR property is not set for the window
+.A w ,
+or is format other than 32, length < 1 element or of type other than
+.S WINDOW ,
+then a call to xname returns zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Obtain the value of the unset WM_TRANSIENT_FOR property with XGetWMHints.
+Verify that the call returned False.
+
+Create a window with XCreateWindow.
+Set the WM_TRANSIENT_FOR property with format 16 and type WINDOW and size 1 using XChangeProperty.
+Obtain the value of the WM_TRANSIENT_FOR property with XGetWMHints.
+Verify that the call returned False.
+
+Create a window with XCreateWindow.
+Set the WM_TRANSIENT_FOR property with format 32 type STRING and size 1 using XChangeProperty.
+Obtain the value of the WM_TRANSIENT_FOR property with XGetWMHints.
+Verify that the call returned False.
+
+Create a window with XCreateWindow.
+Set the WM_TRANSIENT_FOR property with format 32 type WINDOW and size 0 using XChangeProperty.
+Obtain the value of the WM_TRANSIENT_FOR property with XGetWMHints.
+Verify that the call returned False.
+>>CODE
+Status status;
+XVisualInfo *vp;
+Window pwin;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ prop_window_return = &pwin;
+ pwin = makewin(display, vp);
+ w = makewin(display, vp);
+
+/* Property unset */
+
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the WM_TRANSIENT_FOR property was not set.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+
+/* Format 16 */
+ XChangeProperty(display, w, XA_WM_TRANSIENT_FOR, XA_WINDOW, 16, PropModeReplace, (unsigned char *) &pwin, 1);
+
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the WM_TRANSIENT_FOR property format was 16.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+
+/* Type STRING */
+ XChangeProperty(display, w, XA_WM_TRANSIENT_FOR, XA_STRING, 32, PropModeReplace, (unsigned char *) &pwin, 1);
+
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the WM_TRANSIENT_FOR property type was STRING.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+
+/* No elements = 0 */
+ XChangeProperty(display, w, XA_WM_TRANSIENT_FOR, XA_WINDOW, 32, PropModeReplace, (unsigned char *) &pwin, 0);
+
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the WM_TRANSIENT_FOR property size was 0.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/gttxtprprt/gttxtprprt.m b/xc/test/xsuite/xtest/tset/CH09/gttxtprprt/gttxtprprt.m
new file mode 100644
index 000000000..e648ff700
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gttxtprprt/gttxtprprt.m
@@ -0,0 +1,221 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetTextProperty CH09
+Status
+XGetTextProperty(display, w, text_prop_return, property);
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XTextProperty *text_prop_return = &textprop;
+Atom property = XA_WM_NAME;
+>>EXTERN
+#include "Xatom.h"
+static XTextProperty textprop = { (unsigned char *) 0, XA_STRING, 8, (unsigned long) 0 };
+>>ASSERTION Good A
+When the property specified by the
+.A property
+argument exists on the window specified by the
+.A w
+argument, then a call to xname stores
+the data, which can be freed with XFree, in the
+.M value
+field, the type of the data in the
+.M encoding
+field, the format of the data in the
+.M format
+field, and the number of items of data in the
+.M nitems
+field of the
+.S XTextProperty
+structure named by the
+.A text_prop_return
+argument and returns non-zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the property WM_NAME for the window with XSetTextProperty.
+Obtain the value of the WM_NAME property with XGetTextProperty.
+Verify that the encoding, format, value and nitems fields of the returned structure are correct.
+Release the allocated memory using XFree.
+>>CODE
+Window win;
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+char *str[2];
+Status status;
+char **list_return;
+int count_return;
+XTextProperty tp, rtp;
+XVisualInfo *vp;
+
+ str[0] = str1;
+ str[1] = str2;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ XSetTextProperty(display, win, &tp, property);
+
+ text_prop_return = &rtp;
+ w = win;
+ status = XCALL;
+
+ if(status == False) {
+ report("XGetTextProperty() returned False.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rtp.encoding != XA_STRING) {
+ report("Property was not of type STRING");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rtp.format != 8) {
+ report("Format was %d instead of 8", rtp.format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rtp.nitems != strlen(str1) + strlen(str2) + 1) {
+ report("The nitems component was %lu instead of %d", rtp.nitems,1 + strlen(str1) + strlen(str2) );
+ FAIL;
+ } else
+ CHECK;
+
+ if(XTextPropertyToStringList( &rtp, &list_return, &count_return) == False) {
+ delete("XTextPropertyToStringList() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count_return != 2) {
+ delete("count_return was %d instead of 2.", count_return);
+ return;
+ } else
+ CHECK;
+
+ if( (strncmp(str1, list_return[0], strlen(str1)) != 0) ||
+ (strncmp(str2, list_return[1], strlen(str2)) != 0) ) {
+
+ report("Value strings were:");
+ report("\"%s\" and \"%s\"", list_return[0], list_return[1]);
+ report("Instead of:");
+ report("\"%s\" and \"%s\"", str1, str2);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)tp.value);
+ XFree((char*)rtp.value);
+ XFreeStringList(list_return);
+ CHECKPASS(8);
+
+>>ASSERTION Good A
+When the property specified by the
+.A property
+argument does not exist on the window
+specified by the
+.A w
+argument, then a call to xname sets the
+.M value
+field to NULL, the
+.M encoding
+field to None, the
+.M format
+field to 0 and the
+.M nitems
+field to 0 of the
+.S XTextProperty
+structure named by the
+.A text_prop_return
+argument and returns zero.
+>>STRATEGY
+Create a window with XCreateWindow
+Get the value of the unset property WM_NAME with XGetTextProperty
+Verify that the call returned False
+Verify that in the returned structure the encoding field was none,
+ the format component was 0, the nitems component was 0 and the
+ value component was NULL.
+>>CODE
+Window win;
+Status status;
+char **list_return;
+int count_return;
+XTextProperty tp;
+XVisualInfo *vp;
+
+ tp.value = (unsigned char *) "XTuninit";
+ tp.format = 1;
+ tp.encoding = (Atom) 1;
+ tp.nitems = (unsigned long) 1;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ text_prop_return = &tp;
+ w = win;
+ status = XCALL;
+
+ if(status != False) {
+ report("XGetTextProperty() did not return False.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.encoding != None) {
+ report("Property was not of type None");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.format != 0) {
+ report("The format component was %d instead of 0", tp.format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.nitems != 0) {
+ report("The nitems component was %lu instead of 0", tp.nitems);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.value != (unsigned char *) NULL) {
+ report("The value component was not NULL.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>>ASSERTION Bad A
+.ER BadAtom
+>>ASSERTION Bad A
+.ER BadWindow
+>># Does this contain the XStringListToTextProperty that crashes servers??
+>># kieron
+>># See comment in test 1 for the answer to that question.
+>># Cal
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/gtwmclntmc/gtwmclntmc.m b/xc/test/xsuite/xtest/tset/CH09/gtwmclntmc/gtwmclntmc.m
new file mode 100644
index 000000000..a0dfffafd
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gtwmclntmc/gtwmclntmc.m
@@ -0,0 +1,210 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetWMClientMachine CH09
+Status
+XGetWMClientMachine(display, w, text_prop_return)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XTextProperty *text_prop_return = &textprop;
+>>EXTERN
+#include "Xatom.h"
+static XTextProperty textprop = { (unsigned char *) 0, XA_STRING, 8, (unsigned long) 0 };
+>>ASSERTION Good A
+When the WM_CLIENT_MACHINE property
+is set on the window
+.A w ,
+then a call to xname stores
+the data, which can be freed with XFree, in the
+.M value
+field, the type of the data in the
+.M encoding
+field, the format of the data in the
+.M format
+field, and the number of items of data in the
+.M nitems
+field of the
+.S XTextProperty
+structure named by the
+.A text_prop_return
+argument and returns non-zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the property WM_CLIENT_MACHINE for the window with XSetWMClientMachine.
+Obtain the value of the WM_CLIENT_MACHINE property with XGetWMClientMachine.
+Verify that the function returned non-zero.
+Verify that the encoding, format, value and nitems fields of the returned structure are correct.
+Release the allocated memory using XFree.
+>>CODE
+Window win;
+char *str1 = "Xtest Client Machine String";
+char *str[1];
+Status status;
+char **list_return;
+int count_return;
+XTextProperty tp, rtp;
+XVisualInfo *vp;
+
+ str[0] = str1;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ if(XStringListToTextProperty(str, 1, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ XSetWMClientMachine(display, win, &tp);
+
+ text_prop_return = &rtp;
+ w = win;
+ status = XCALL;
+
+ if(status == False) {
+ report("%s() returned False.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.encoding != rtp.encoding) {
+ report("The encoding component of the XTextProperty was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.format != rtp.format) {
+ report("The format component of the XTextProperty was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.nitems != rtp.nitems) {
+ report("The nitems component of the XTextProperty was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(XTextPropertyToStringList( &rtp, &list_return, &count_return) == False) {
+ delete("XTextPropertyToStringList() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count_return != 1) {
+ delete("XTextPropertyToStringList() count_return was %d instead of 1.", count_return);
+ return;
+ } else
+ CHECK;
+
+ if( strcmp(str1, list_return[0] ) != 0 ) {
+ report("Value string was \"%s\" instead of \"%s\"", list_return[0], str1);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)tp.value);
+ XFreeStringList(list_return);
+
+ CHECKPASS(8);
+
+>>ASSERTION Good A
+When the WM_CLIENT_MACHINE property
+is not set on the window
+.A w ,
+then a call to xname sets the
+.M value
+field to NULL, the
+.M encoding
+field to None, the
+.M format
+field to 0 and the
+.M nitems
+field to 0 of the
+.S XTextProperty
+structure named by the
+.A text_prop_return
+argument and returns zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Get the value of the unset property WM_CLIENT_MACHINE with XGetWMClientMachine.
+Verify that the call returned False.
+Verify that in the returned XTextProperty structure the encoding field was none,
+ the format component was 0, the nitems component was 0 and the
+ value component was NULL.
+>>CODE
+Window win;
+Status status;
+XTextProperty tp;
+XVisualInfo *vp;
+
+ tp.value = (unsigned char *) "XTuninitialised\0";
+ tp.encoding = XA_STRING;
+ tp.format = 8;
+ tp.nitems = 1 + strlen(tp.value);
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ text_prop_return = &tp;
+ w = win;
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.encoding != None) {
+ report("The encoding component was not None.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.format != 0) {
+ report("The format component was %d instead of 0", tp.format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.nitems != 0) {
+ report("The nitems component was %lu instead of 0", tp.nitems);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.value != (unsigned char *) NULL) {
+ report("The value component was not NULL.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>>#
+>># I cannot see how a BadAtom Can be generated.
+>># Cal 28/05/91
+>>#>>ASSERTION
+>>#.ER BadAtom
+>>#
+>>#
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/gtwmclrmpw/gtwmclrmpw.m b/xc/test/xsuite/xtest/tset/CH09/gtwmclrmpw/gtwmclrmpw.m
new file mode 100644
index 000000000..133bf9590
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gtwmclrmpw/gtwmclrmpw.m
@@ -0,0 +1,259 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetWMColormapWindows CH09
+Status
+XGetWMColormapWindows(display, w, colormap_windows_return, count_return)
+Display *display = Dsp;
+Window w = DRW(display);
+Window **colormap_windows_return = &window;
+int *count_return = &count;
+>>EXTERN
+#include "Xatom.h"
+Window *window;
+int count;
+>>ASSERTION Good A
+When the WM_COLORMAP_WINDOWS property is set on the window
+.A w ,
+the property is of
+.M type
+WINDOW, and is of
+.M format
+32,
+then a call to xname returns the list of window identifiers stored
+in the property, which can be freed with XFree, in the
+.A colormap_windows_return
+argument and the number of windows in the
+.A count_return
+argument and returns non-zero.
+>>STRATEGY
+Create a window using XCreateWindow.
+Set the WM_COLORMAP_WINDOWS property using XSetWMColormapWindows.
+Obtain the WM_COLORMAP_WINDOWS property using XGetWMColormapWindows.
+Verify that the call did not return False.
+Verify that the value of the property is correct.
+Release the allocated memory using XFree.
+>>CODE
+Status status;
+Window rwin;
+XVisualInfo *vp;
+int nwins = 7;
+Window pwins[7];
+Window *rwins = (Window *) NULL;
+Window *wp;
+int rcnt = 0;
+int i;
+
+ for(i=0; i<nwins; i++)
+ pwins[i] = (Window) i;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+
+ XSetWMColormapWindows(display, w, pwins, nwins);
+
+ colormap_windows_return = &rwins;
+ count_return = &rcnt;
+ status = XCALL;
+
+ if(status == False) {
+ report("%s() returned False.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rcnt != nwins) {
+ report("The number of elements set for the WM_COLORMAP_WINDOWS property was %d instead of %d", rcnt, nwins);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rwins == (Window *) NULL) {
+ report("The WM_COLORMAP_WINDOWS property had no associated value.");
+ FAIL;
+ } else {
+
+ CHECK;
+ for(i = 0, wp = rwins; i < nwins; i++, wp++)
+ if( *wp != pwins[i]) {
+ report("Element %d of the WM_COLORMAP_WINDOWS value was %lu instead of %lu", i+1, (long) *wp, (long) pwins[i]);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)rwins);
+ }
+
+ CHECKPASS(nwins + 3);
+
+>>ASSERTION Bad B 1
+When the atom name \(lqWM_COLORMAP_WINDOWS\(rq cannot be interned,
+then a call to xname does not set the
+.A colormap_windows_return
+or
+.A count_return
+arguments and returns zero.
+>>ASSERTION Good A
+When the WM_COLORMAP_WINDOWS property is not set on the window
+.A w ,
+or is not of
+.M type
+WINDOW, or is not of
+.M format
+32,
+then a call to xname does not set the
+.A colormap_windows_return
+or
+.A count_return
+arguments and returns zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Insure that the name "WM_COLOMAP_WINDOWS" is interned using XSetWMColormapWindows.
+Obtain the WM_COLORMAP_WINDOWS atom using XInternAtom.
+
+Create a window with XCreateWindow.
+Initialise the colormap_windows_return and count_return arguments.
+Obtain the value of the WM_COLORMAP_WINDOWS property with XGetWMColormapWindows.
+Verify that the call returned False.
+Verify that colormap_windows_return and count_return arguments were unchanged.
+
+Create a window with XCreateWindow.
+Set the WM_COLORMAP_WINDOWS property with format 8 and type WINDOW using XChangeProperty.
+Initialise the colormap_windows_return and count_return arguments.
+Obtain the value of the WM_COLORMAP_WINDOWS property with XGetWMColormapWindows.
+Verify that the call returned False.
+Verify that colormap_windows_return and count_return arguments were unchanged.
+
+Create a window with XCreateWindow.
+Initialise the colormap_windows_return and count_return arguments.
+Set the WM_COLORMAP_WINDOWS property with format 32 type ATOM using XChangeProperty.
+Obtain the value of the WM_COLORMAP_WINDOWS property with XGetWMColormapWindows.
+Verify that the call returned False.
+Verify that colormap_windows_return and count_return arguments were unchanged.
+
+>>CODE
+Status status;
+Atom xa_wm_colormap_windows;
+Atom *rat;
+int rcnt;
+XVisualInfo *vp;
+Window wdw;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ colormap_windows_return = &rat;
+ count_return = &rcnt;
+ w = makewin(display, vp);
+
+ if(XSetWMColormapWindows(display, w, &wdw, 1) == False) {
+ delete("XSetWMColormapWindows() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if( (xa_wm_colormap_windows = XInternAtom(display, "WM_COLORMAP_WINDOWS", True)) == None) {
+ delete("The \"WM_COLORMAP_WINDOWS\" string was not interned.");
+ return;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+
+/* property unset */
+
+ rat = (Atom *) -1;
+ rcnt = -1;
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the WM_COLORMAP_WINDOWS property was not set.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if( rat != (Atom *) -1) {
+ report("Atom list pointer variable was updated when the WM_COLORMAP_WINDOWS property was not set.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( rcnt != -1) {
+ report("Atom count variable was updated when the WM_COLORMAP_WINDOWS property was not set.");
+ FAIL;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+
+/* format 8 */
+ XChangeProperty(display, w, xa_wm_colormap_windows, XA_WINDOW, 8, PropModeReplace, (unsigned char *) &wdw, 1);
+
+ rat = (Atom *) -1;
+ rcnt = -1;
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the WM_COLORMAP_WINDOWS property had format 8.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if( rat != (Atom *) -1) {
+ report("Atom list pointer variable was updated when the WM_COLORMAP_WINDOWS property had format 8.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( rcnt != -1) {
+ report("Atom count variable was updated when the WM_COLORMAP_WINDOWS property had format 8.");
+ FAIL;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+
+/* type ATOM */
+ XChangeProperty(display, w, xa_wm_colormap_windows, XA_ATOM, 32, PropModeReplace, (unsigned char *) &wdw, 1);
+
+ rat = (Atom *) -1;
+ rcnt = -1;
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the WM_COLORMAP_WINDOWS property had type ATOM.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if( rat != (Atom *) -1) {
+ report("Atom list pointer variable was updated when the WM_COLORMAP_WINDOWS property had type ATOM.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( rcnt != -1) {
+ report("Atom count variable was updated when the WM_COLORMAP_WINDOWS property had type ATOM.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(11);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/gtwmhnts/gtwmhnts.m b/xc/test/xsuite/xtest/tset/CH09/gtwmhnts/gtwmhnts.m
new file mode 100644
index 000000000..ea38b9295
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gtwmhnts/gtwmhnts.m
@@ -0,0 +1,217 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetWMHints CH09
+XWMHints *
+XGetWMHints(display, w)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+>>EXTERN
+#include "Xatom.h"
+>>ASSERTION Good A
+When the WM_HINTS property has been set for the window
+.A w ,
+and is format 32, length \(>= 9 elements, and of type
+.S WM_HINTS ,
+then a call to xname returns a pointer to a
+.S XWMHints
+structure which contains the window manager hints for the window
+and can be freed with XFree.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_HINTS property for the window with XSetWMHints.
+Obtain the WM_HINTS property values with XGetWMHints.
+Verify the result is non-NULL.
+Verify that the returned values are correct.
+Release the allocated memory using XFree.
+>>CODE
+Window win;
+XVisualInfo *vp;
+XWMHints hints;
+XWMHints *hints_ret;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ hints.flags = AllHints;
+ hints.input = True;
+ hints.initial_state = IconicState;
+ hints.icon_pixmap = 1L;
+ hints.icon_window = 1L;
+ hints.icon_x = 13;
+ hints.icon_y = 7;
+ hints.icon_mask = 1L;
+ hints.window_group = 1L;
+
+ XSetWMHints(display, win, &hints);
+
+ w = win;
+ hints_ret = XCALL;
+
+ if(hints_ret == (XWMHints *) 0) {
+ report("XGetWMHints() returned NULL.");
+ FAIL;
+ return; /* failure invalidates rest of test, and no freeing */
+ } else
+ CHECK;
+
+ if(hints_ret->flags != AllHints) {
+ report("The flags component was %lu instead of AllHints.", hints_ret->flags);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->input != True) {
+ report("The hints_ret component of the XWMHints structure was %d instead of True.", (Bool) hints_ret->input);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->initial_state != IconicState) {
+ report("The initial_state component of the XWMHints structure was %d instead of IconicState.",
+ hints_ret->initial_state);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_pixmap != 1L) {
+ report("The icon_pixmap component of the XWMHints structure was %lu instead of 1.", hints_ret->icon_pixmap);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_window != 1L) {
+ report("The icon_window component of the XWMHints structure was %lu instead of 1.", hints_ret->icon_window);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_x != 13) {
+ report("The icon_x component of the XWMHints structure was %d instead of 13.", hints_ret->icon_x);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_y != 7) {
+ report("The icon_y component of the XWMHints structure was %d instead of 7.", hints_ret->icon_y);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_mask != 1L) {
+ report("The icon_mask component of the XWMHints structure was %lu instead of 1.", hints_ret->icon_mask);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->window_group != 1L) {
+ report("The window_group component of the XWMHints structure was %lu instead of 1.", hints_ret->window_group);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)hints_ret);
+
+ CHECKPASS(10);
+
+>>ASSERTION Good A
+When the WM_HINTS property has not been set for the window
+.A w ,
+or is format other than 32, length < 9 elements, or of type other than
+.S WM_HINTS ,
+then a call to xname returns NULL.
+>>STRATEGY
+Create a window with XCreateWindow.
+Obtain the value of the unset WM_HINTS property with XGetWMHints.
+Verify that the call returned NULL.
+
+Create a window with XCreateWindow.
+Set the WM_HINTS property with format 16 and type WM_HINTS and size 9 using XChangeProperty.
+Obtain the value of the WM_HINTS property with XGetWMHints.
+Verify that the call returned NULL.
+
+Create a window with XCreateWindow.
+Set the WM_HINTS property with format 32 type WM_ATOM and size 9 using XChangeProperty.
+Obtain the value of the WM_HINTS property with XGetWMHints.
+Verify that the call returned NULL.
+
+Create a window with XCreateWindow.
+Set the WM_HINTS property with format 32 type WM_HINTS and size 1 using XChangeProperty.
+Obtain the value of the WM_HINTS property with XGetWMHints.
+Verify that the call returned NULL.
+
+>>CODE
+XVisualInfo *vp;
+XWMHints hints;
+XWMHints *hints_ret;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ w = makewin(display, vp);
+/* Property unset */
+
+ hints_ret = XCALL;
+
+ if(hints_ret != (XWMHints *) NULL){
+ report("XGetWMHints() did not return NULL with the WM_HINTS property unset.");
+ FAIL;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+/* format 16 */
+ XChangeProperty(display, w, XA_WM_HINTS, XA_WM_HINTS, 16, PropModeReplace, (unsigned char *) &hints, 9);
+
+ hints_ret = XCALL;
+
+ if(hints_ret != (XWMHints *) NULL){
+ report("XGetWMHints() did not return NULL with the WM_HINTS property format set to 16.");
+ FAIL;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+/* type ATOM */
+ XChangeProperty(display, w, XA_WM_HINTS, XA_ATOM, 32, PropModeReplace, (unsigned char *) &hints, 9);
+
+ hints_ret = XCALL;
+
+ if(hints_ret != (XWMHints *) NULL){
+ report("XGetWMHints() did not return NULL with the WM_HINTS type set to ATOM.");
+ FAIL;
+ } else
+ CHECK;
+
+
+ w = makewin(display, vp);
+/* size 1 */
+ XChangeProperty(display, w, XA_WM_HINTS, XA_WM_HINTS, 32, PropModeReplace, (unsigned char *) &hints, 1);
+
+ hints_ret = XCALL;
+
+ if(hints_ret != (XWMHints *) NULL){
+ report("XGetWMHints() did not return NULL with the WM_HINTS size set to 1.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/gtwmicnnm/gtwmicnnm.m b/xc/test/xsuite/xtest/tset/CH09/gtwmicnnm/gtwmicnnm.m
new file mode 100644
index 000000000..3e619bd2c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gtwmicnnm/gtwmicnnm.m
@@ -0,0 +1,212 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetWMIconName CH09
+Status
+XGetWMIconName(display, w, text_prop)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XTextProperty *text_prop_return = &textprop;
+>>EXTERN
+#include "Xatom.h"
+static XTextProperty textprop = { (unsigned char *) 0, XA_STRING, 8, (unsigned long) 0 };
+>>ASSERTION Good A
+When the WM_ICON_NAME property
+exists on the window specified by the
+.A w
+argument, then a call to xname stores
+the data, which can be freed with
+.S XFree ,
+in the
+.M value
+field, the type of the data in the
+.M encoding
+field, the format of the data in the
+.M format
+field, and the number of items of data in the
+.M nitems
+field of the
+.S XTextProperty
+structure named by the
+.A text_prop_return
+argument and returns non-zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the property WM_ICON_NAME for the window with XSetWMIconName.
+Obtain the value of the WM_ICON_NAME property with XGetWMIconName.
+Verify that the function returned non-zero.
+Verify that the encoding, format, value and nitems fields of the returned structure are correct.
+Release the allocated memory using XFree.
+>>CODE
+Window win;
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+char *str[2];
+Status status;
+char **list_return;
+int count_return;
+XTextProperty tp, rtp;
+XVisualInfo *vp;
+
+ str[0] = str1;
+ str[1] = str2;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ XSetWMIconName(display, win, &tp);
+
+ text_prop_return = &rtp;
+ w = win;
+ status = XCALL;
+
+ if(status == False) {
+ report("%s() returned False.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.encoding != rtp.encoding) {
+ report("The encoding component of the XTextProperty was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.format != rtp.format) {
+ report("The format component of the XTextProperty was %d instead of %d.", rtp.format, tp.format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.nitems != rtp.nitems) {
+ report("The nitems component of the XTextProperty was %lu instead of %lu.", rtp.nitems, tp.nitems);
+ FAIL;
+ } else
+ CHECK;
+
+ if(XTextPropertyToStringList( &rtp, &list_return, &count_return) == False) {
+ delete("XTextPropertyToStringList() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count_return != 2) {
+ delete("XTextPropertyToStringList() count_return was %d instead of 2.", count_return);
+ return;
+ } else
+ CHECK;
+
+ if( (strncmp(str1, list_return[0], strlen(str1)) != 0) || (strncmp(str2, list_return[1], strlen(str2)) != 0) ) {
+ report("Value strings were:");
+ report("\"%s\" and \"%s\"", list_return[0], list_return[1]);
+ report("Instead of:");
+ report("\"%s\" and \"%s\"", str1, str2);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)tp.value);
+ XFreeStringList(list_return);
+
+ CHECKPASS(8);
+
+>>ASSERTION Good A
+When the WM_ICON_NAME
+property does not exist on the window
+specified by the
+.A w
+argument, then a call to xname sets the
+.M value
+field to NULL, the
+.M encoding
+field to None, the
+.M format
+field to 0 and the
+.M nitems
+field to 0 of the
+.S XTextProperty
+structure named by the
+.A text_prop_return
+argument and returns zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Get the value of the unset property WM_ICON_NAME with XGetWMIconName.
+Verify that the call returned False.
+Verify that in the returned XTextProperty structure the encoding field was none,
+ the format component was 0, the nitems component was 0 and the
+ value component was NULL.
+>>CODE
+Window win;
+Status status;
+XTextProperty tp;
+XVisualInfo *vp;
+
+ tp.value = (unsigned char *) "XTuninitialised\0";
+ tp.encoding = XA_STRING;
+ tp.format = 8;
+ tp.nitems = 1 + strlen(tp.value);
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ text_prop_return = &tp;
+ w = win;
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.encoding != None) {
+ report("The encoding component was not None.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.format != 0) {
+ report("The format component was %d instead of 0", tp.format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.nitems != 0) {
+ report("The nitems component was %lu instead of 0", tp.nitems);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.value != (unsigned char *) NULL) {
+ report("The value component was not NULL.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/gtwmnm/gtwmnm.m b/xc/test/xsuite/xtest/tset/CH09/gtwmnm/gtwmnm.m
new file mode 100644
index 000000000..609879847
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gtwmnm/gtwmnm.m
@@ -0,0 +1,213 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetWMName CH09
+Status
+XGetWMName(display, w, text_prop_return)
+Display *display = Dsp;
+Window w = DRW(display);
+XTextProperty *text_prop_return = &textprop;
+>>EXTERN
+#include "Xatom.h"
+static XTextProperty textprop = { (unsigned char *) 0, XA_STRING, 8, (unsigned long) 0 };
+>>ASSERTION Good A
+When the WM_NAME property
+exists on the window specified by the
+.A w
+argument, then a call to xname stores
+the data, which can be freed with
+.S XFree ,
+in the
+.M value
+field, the type of the data in the
+.M encoding
+field, the format of the data in the
+.M format
+field, and the number of items of data in the
+.M nitems
+field of the
+.S XTextProperty
+structure named by the
+.A text_prop_return
+argument and returns non-zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the property WM_NAME for the window with XSetWMName.
+Obtain the value of the WM_NAME property with XGetWMName.
+Verify that the encoding, format, value and nitems fields of the returned structure are correct.
+Release the allocated memory using XFree.
+>>CODE
+Window win;
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+char *str[2];
+Status status;
+char **list_return;
+int count_return;
+XTextProperty tp, rtp;
+XVisualInfo *vp;
+
+ str[0] = str1;
+ str[1] = str2;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ XSetWMName(display, win, &tp);
+
+ text_prop_return = &rtp;
+ w = win;
+ status = XCALL;
+
+ if(status == False) {
+ report("XGetTextProperty() returned False.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.encoding != rtp.encoding) {
+ report("The encoding component of the XTextProperty was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.format != rtp.format) {
+ report("The format component of the XTextProperty was %d instead of %d.", rtp.format, tp.format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.nitems != rtp.nitems) {
+ report("The nitems component of the XTextProperty was %lu instead of %lu.", rtp.nitems, rtp.nitems);
+ FAIL;
+ } else
+ CHECK;
+
+ if(XTextPropertyToStringList( &rtp, &list_return, &count_return) == False) {
+ delete("XTextPropertyToStringList() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count_return != 2) {
+ delete("XTextPropertyToStringList() count_return was %d instead of 2.", count_return);
+ return;
+ } else
+ CHECK;
+
+ if( (strncmp(str1, list_return[0], strlen(str1)) != 0) || (strncmp(str2, list_return[1], strlen(str2)) != 0) ) {
+ report("Value strings were:");
+ report("\"%s\" and \"%s\"", list_return[0], list_return[1]);
+ report("Instead of:");
+ report("\"%s\" and \"%s\"", str1, str2);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)tp.value);
+ XFree((char*)rtp.value);
+ XFreeStringList(list_return);
+
+ CHECKPASS(8);
+
+>>ASSERTION Good A
+When the WM_NAME property
+does not exist on the window
+specified by the
+.A w
+argument, then a call to xname sets the
+.M value
+field to NULL, the
+.M encoding
+field to None, the
+.M format
+field to 0 and the
+.M nitems
+field to 0 of the
+.S XTextProperty
+structure named by the
+.A text_prop_return
+argument and returns zero.
+>>STRATEGY
+Create a window with XCreateWindow
+Get the value of the unset property WM_NAME with XGetWMName
+Verify that the call returned False
+Verify that in the returned XTextProperty structure the encoding field was none,
+ the format component was 0, the nitems component was 0 and the
+ value component was NULL.
+>>CODE
+Window win;
+Status status;
+char **list_return;
+int count_return;
+XTextProperty tp;
+XVisualInfo *vp;
+
+ tp.value = (unsigned char *) "XTuninitialised\0";
+ tp.encoding = XA_STRING;
+ tp.format = 13;
+ tp.nitems = 1 + strlen(tp.value);
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ text_prop_return = &tp;
+ w = win;
+ status = XCALL;
+
+ if(status != False) {
+ report("XGetTextProperty() did not return False.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.encoding != None) {
+ report("The Property was not of type None.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.format != 0) {
+ report("The format component was %d instead of 0.", tp.format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.nitems != 0) {
+ report("The nitems component was %lu instead of 0.", tp.nitems);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.value != (unsigned char *) NULL) {
+ report("The value component was not NULL.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/gtwmnrmlhn/gtwmnrmlhn.m b/xc/test/xsuite/xtest/tset/CH09/gtwmnrmlhn/gtwmnrmlhn.m
new file mode 100644
index 000000000..e8e1d31c0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gtwmnrmlhn/gtwmnrmlhn.m
@@ -0,0 +1,354 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetWMNormalHints CH09
+Status
+XGetWMNormalHints(display, w, hints_return, supplied_return)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XSizeHints *hints_return = &sizehints;
+long *supplied_return = &supret;
+>>EXTERN
+#include "Xatom.h"
+#define NumPropSizeElements 18
+#define OldNumPropSizeElements 15
+static XSizeHints sizehints = { 0 ,1,2,3,4,5,6,7,8,9,10, {11,12} , {13,14}, 15, 16, 17};
+static XSizeHints rhints = { 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ {111, 112}, {113, 114}, 115, 116, 117 };
+static long supret;
+>>ASSERTION Good A
+When the WM_NORMAL_HINTS property has been set on the window
+.A w
+with a
+.M type
+of WM_SIZE_HINTS, a
+.M format
+of 32 and is long enough to contain either a pre-ICCCM
+structure or a new size hints structure, then a call to
+xname sets the components of the
+.S XSizeHints
+structure named by the
+.A hints_return
+argument irrespective of whether the particular hint was
+previously set, and returns non-zero.
+>>STRATEGY
+>># We do not verify the type and format, since we rely on XSetWMHints
+>># which is tested elsewhere in CH09.
+Create a window with XCreate window.
+Set the WM_NORMAL_HINTS property with XSetWMNormalHints.
+Obtain the value of the WM_NORMAL_HINTS property using XGetWMNormalhints.
+Verify that the entire structure has been returned.
+>>CODE
+Status status;
+Window win;
+long rsupp;
+XVisualInfo *vp;
+
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ XSetWMNormalHints(display, win, &sizehints);
+
+ w = win;
+ hints_return = &rhints;
+ supplied_return = &rsupp;
+ status = XCALL;
+
+ if( status == False ) {
+ report("XGetWMNormalHints() returned False.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.flags != 0) {
+ report("The flags component of the XSizeHints structure was %lu instead of 0.", rhints.flags);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.x != 1) {
+ report("The x component of the XSizeHints structure was %d instead of 1.", rhints.x);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.y != 2) {
+ report("The y component of the XSizeHints structure was %d instead of 2.", rhints.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.width != 3) {
+ report("The width component of the XSizeHints structure was %d instead of 3.", rhints.width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.height != 4) {
+ report("The height component of the XSizeHints structure was %d instead of 4.", rhints.height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.min_width != 5) {
+ report("The min_width component of the XSizeHints structure was %d instead of 5.", rhints.min_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.min_height != 6) {
+ report("The min_height component of the XSizeHints structure was %d instead of 6.", rhints.min_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.max_width != 7) {
+ report("The max_width component of the XSizeHints structure was %d instead of 7.", rhints.max_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.max_height != 8) {
+ report("The max_height component of the XSizeHints structure was %d instead of 8.", rhints.max_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.width_inc != 9) {
+ report("The width_inc component of the XSizeHints structure was %d instead of 9.", rhints.width_inc);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.height_inc != 10) {
+ report("The height_inc component of the XSizeHints structure was %d instead of 10.", rhints.height_inc);
+ FAIL;
+ } else
+ CHECK;
+
+ if((rhints.min_aspect.x != 11) || (rhints.min_aspect.y != 12)){
+ report("The min_aspect components of the XSizeHints structure were %d, %d instead of 11, 12.",
+ rhints.min_aspect.x, rhints.min_aspect.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if((rhints.max_aspect.x != 13) || (rhints.max_aspect.y != 14)){
+ report("The max_aspect components of the XSizeHints structure were %d, %d instead of 13, 14.",
+ rhints.max_aspect.x, rhints.max_aspect.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.base_width != 15) {
+ report("The base_width component of the XSizeHints structure was %d instead of 15.", rhints.base_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.base_height != 16) {
+ report("The base_height component of the XSizeHints structure was %d instead of 16.", rhints.base_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.win_gravity != 17) {
+ report("The win_gravity component of the XSizeHints structure was %d instead of 17", rhints.win_gravity);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(17);
+
+>>ASSERTION Good A
+When the WM_NORMAL_HINTS property is not set on the window
+.A w ,
+or is not of
+.M type
+WM_SIZE_HINTS, or is not of
+.M format
+32, or the property is not long enough to contain either a pre-ICCCM
+structure or a new size hints structure, then a call to
+xname returns zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Obtain the unset WM_NORMAL_HINTS property with XGetWMNormalHints.
+Verify that the call returned zero.
+
+Create a window with XCreateWindow.
+Set the WM_NORMAL_HINTS property of format 32 type WM_SIZE_HINTS with OldNumPropSizeElements-1 elements XChangeProperty.
+Obtain the WM_NORMAL_HINTS property with XGetWMNormalHints.
+Verify that the call returned zero.
+
+Create a window with XCreateWindow.
+Set the WM_NORMAL_HINTS property of format 16 type WM_SIZE_HINTS with NumPropSizeElements elements with XChangeProperty.
+Obtain the WM_NORMAL_HINTS property with XGetWMNormalHints.
+Verify that the call returned zero.
+
+Create a window with XCreateWindow.
+Set the WM_NORMAL_HINTS property of format 32 type STRING with NumPropSizeElements elements with XChangeProperty.
+Obtain the WM_NORMAL_HINTS property with XGetWMNormalHints.
+Verify that the call returned zero.
+>>CODE
+Status status;
+Window win;
+XSizeHints rhints;
+long rsupp;
+XSizeHints dummy; /* Big enough (by definition). */
+XVisualInfo *vp;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ w = win;
+ status = XCALL;
+
+ if(status != False) {
+ report("XGetWMNormalHints() did not return False when the property was unset.");
+ FAIL;
+ } else
+ CHECK;
+
+ win = makewin(display, vp);
+ XChangeProperty(display, win, XA_WM_NORMAL_HINTS, XA_WM_SIZE_HINTS, 32, PropModeReplace, (unsigned char *)&dummy, OldNumPropSizeElements-1);
+ w = win;
+ hints_return = &rhints;
+ supplied_return = &rsupp;
+ status = XCALL;
+ if(status != False) {
+ report("XGetWMNormalHints() did not return False when size was %lu 32-bit elements.", (unsigned long) OldNumPropSizeElements-1);
+ FAIL;
+ } else
+ CHECK;
+
+ win = makewin(display, vp);
+ XChangeProperty(display, win, XA_WM_NORMAL_HINTS, XA_WM_SIZE_HINTS, 16, PropModeReplace, (unsigned char *)&dummy, NumPropSizeElements);
+ w = win;
+ status = XCALL;
+
+ if(status != False) {
+ report("XGetWMNormalHints() did not return False when format was 16.");
+ FAIL;
+ } else
+ CHECK;
+
+ win = makewin(display, vp);
+ XChangeProperty(display, win, XA_WM_NORMAL_HINTS, XA_STRING, 32, PropModeReplace, (unsigned char *)&dummy, NumPropSizeElements);
+ w = win;
+ status = XCALL;
+
+ if(status != False) {
+ report("XGetWMNormalHints() did not return False when type was STRING.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When a call to xname returns successfully and a pre-ICCCM size hints property is read,
+then the
+.A supplied_return
+argument contains the bits
+.S "(USPosition | USSize | PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect)."
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_NORMAL_HINTS property with size OldNumPropSizeElements using XChangeProperty.
+Obtain the value of the WM_NORMAL_HINTS property using XGetWMNormalHints.
+Verify that the value returned in supplied_return was (USPosition|USSize|PPosition|PSize|PMinSize|PMaxSize|PResizeInc|PAspect).
+>>CODE
+Status status;
+Window win;
+XSizeHints rhints;
+long rsupp;
+XSizeHints dummy; /* Big enough (by definition). */
+XVisualInfo *vp;
+unsigned long flagval = (USPosition | USSize | PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect);
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ XChangeProperty(display, win, XA_WM_NORMAL_HINTS, XA_WM_SIZE_HINTS, 32, PropModeReplace, (unsigned char *)&dummy, OldNumPropSizeElements);
+ w = win;
+ hints_return = &rhints;
+ supplied_return = &rsupp;
+ status = XCALL;
+ if(status == False) {
+ report("XGetWMNormalHints() returned False.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( rsupp != flagval) {
+ report("supplied_return was %lu instead of (USPosition | USSize | PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect) (%ul)", rsupp, flagval);
+ report("for a pre-ICCCM structure.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the WM_NORMAL_HINTS property is large enough to contain the base size
+and window gravity fields, then the
+.A supplied_return
+argument contains the bits
+.S "(PBaseSize | PWinGravity | USPosition | USSize | PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect)."
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_NORMAL_HINTS property with size OldNumPropSizeElements using XChangeProperty.
+Obtain the value of the WM_NORMAL_HINTS property using XGetWMNormalHints.
+Verify that the value returned in supplied_return was (PBaseSize|PWinGravity|USPosition|USSize|PPosition|PSize|PMinSize|PMaxSize|PResizeInc|PAspect).
+>>CODE
+Status status;
+Window win;
+XSizeHints rhints;
+long rsupp;
+XSizeHints dummy; /* Big enough (by definition). */
+XVisualInfo *vp;
+unsigned long flagval = (PBaseSize | PWinGravity | USPosition | USSize | PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect);
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ XChangeProperty(display, win, XA_WM_NORMAL_HINTS, XA_WM_SIZE_HINTS, 32, PropModeReplace, (unsigned char *)&dummy, NumPropSizeElements);
+ w = win;
+ hints_return = &rhints;
+ supplied_return = &rsupp;
+ status = XCALL;
+ if(status == False) {
+ report("XGetWMNormalHints() returned False.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( rsupp != flagval) {
+ report("supplied_return was %lu instead of (PBaseSize | PWinGravity | USPosition | USSize | PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect) (%ul)", rsupp, flagval);
+ report("for an ICCCMv1 structure.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Action Review.
diff --git a/xc/test/xsuite/xtest/tset/CH09/gtwmprtcls/gtwmprtcls.m b/xc/test/xsuite/xtest/tset/CH09/gtwmprtcls/gtwmprtcls.m
new file mode 100644
index 000000000..752590cfb
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gtwmprtcls/gtwmprtcls.m
@@ -0,0 +1,267 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetWMProtocols CH09
+Status
+XGetWMProtocols(display, w, protocols_return, count_return)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+Atom **protocols_return = &protret;
+int *count_return = &countret;
+>>EXTERN
+#include "Xatom.h"
+Atom *protret;
+int countret;
+>>ASSERTION Good A
+When the WM_PROTOCOLS property is set on the window
+.A w ,
+is of
+.M type
+ATOM, and is of
+.M format
+32, then a call to xname returns the list of atoms stored in the property,
+which can be freed with
+.S XFree ,
+in the
+.A protocols_return
+argument, the number of atoms in the
+.A count_return
+argument and returns non-zero.
+>>STRATEGY
+Create a window using XCreateWindow.
+Set the WM_PROTOCOLS property using XSetWMProtocols.
+Obtain the value of the WM_PROTOCOLS property using XGetWMProtocols.
+Verify that the call did not return False.
+Verify that the value was correct.
+Free the allocated memory using XFree.
+>>CODE
+Status status;
+XVisualInfo *vp;
+int nats = 5;
+Atom prots[5];
+Atom *retprots = (Atom *) NULL;
+Atom at, *atp;
+int i, cntret;
+
+
+ for(i=0, at = XA_LAST_PREDEFINED; i<nats; i++)
+ prots[i] = (int) --at;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+
+ XSetWMProtocols(display, w, prots, nats);
+
+ protocols_return = &retprots;
+ count_return = &cntret;
+ status = XCALL;
+
+ if(status == False) {
+ delete("%s() returned False.", TestName);
+ return;
+ } else
+ CHECK;
+
+ if(cntret != nats) {
+ report("The number of elements set for the WM_PROTOCOLS property was %d instead of %d", cntret, nats);
+ FAIL;
+ } else
+ CHECK;
+
+ if(retprots == (Atom *) NULL) {
+ report("The WM_PROTOCOLS property had no associated value.");
+ FAIL;
+ } else {
+
+ CHECK;
+ for(i = 0, atp = retprots; i<nats; i++, atp++)
+ if( *atp != prots[i]) {
+ report("Element %d of the WM_PROTOCOLS value was %lu instead of %lu", i+1, (long) *atp, (long) prots[i]);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)retprots);
+ }
+
+ CHECKPASS(nats + 3);
+
+
+>>ASSERTION Bad B 1
+When the atom name \(lqWM_PROTOCOLS\(rq cannot be interned,
+then a call to xname does not set the
+.A protocols_return
+or
+.A count_return
+arguments and returns zero.
+>>ASSERTION Good A
+When the WM_PROTOCOLS property is not set on the window
+.A w ,
+or is not of
+.M type
+ATOM, or is not of
+.M format
+32, then a call to xname does not set the
+.A protocols_return
+or
+.A count_return
+arguments and returns zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Insure that the name "WM_PROTOCOLS" is interned using XSetWMProtocols.
+Obtain the WM_PROTOCOLS atom using XInternAtom.
+
+Create a window with XCreateWindow.
+Initialise the protocols_return and count_return arguments.
+Obtain the value of the WM_PROTOCOLS property with XGetWMProtocols.
+Verify that the call returned False.
+Verify that protocols_return and count_return arguments were unchanged.
+
+Create a window with XCreateWindow.
+Set the WM_PROTOCOLS property with format 16 and type ATOM using XChangeProperty.
+Initialise the protocols_return and count_return arguments.
+Obtain the value of the WM_PROTOCOLS property with XGetWMProtocols.
+Verify that the call returned False.
+Verify that protocols_return and count_return arguments were unchanged.
+
+Create a window with XCreateWindow.
+Initialise the protocols_return and count_return arguments.
+Set the WM_PROTOCOLS property with format 32 type STRING using XChangeProperty.
+Obtain the value of the WM_PROTOCOLS property with XGetWMProtocols.
+Verify that the call returned False.
+Verify that protocols_return and count_return arguments were unchanged.
+
+>>CODE
+Status status;
+Atom at, xa_wm_protocols;
+Atom *rat;
+int rcnt;
+XVisualInfo *vp;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ protocols_return = &rat;
+ count_return = &rcnt;
+ w = makewin(display, vp);
+
+ if( (at = XInternAtom(display, XT_TIMESTAMP, False)) == None) {
+ delete("The \"%s\" string was not interned.", XT_TIMESTAMP);
+ return;
+ } else
+ CHECK;
+
+ if(XSetWMProtocols(display, w, &at, 1) == False) {
+ delete("XSetWMProtocols() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if( (xa_wm_protocols = XInternAtom(display, "WM_PROTOCOLS", True)) == None) {
+ delete("The \"WM_PROTOCOLS\" string was not interned.");
+ return;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+
+/* Property unset */
+
+ rat = (Atom *) -1;
+ rcnt = -1;
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the WM_PROTOCOLS property was not set.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if( rat != (Atom *) -1) {
+ report("Atom list pointer variable was updated when the WM_PROTOCOLS property was not set.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( rcnt != -1) {
+ report("Atom count variable was updated when the WM_PROTOCOLS property was not set.");
+ FAIL;
+ } else
+ CHECK;
+
+
+
+ w = makewin(display, vp);
+
+
+/* format 16 */
+ XChangeProperty(display, w, xa_wm_protocols, XA_ATOM, 16, PropModeReplace, (unsigned char *) &at, 1);
+
+ rat = (Atom *) -1;
+ rcnt = -1;
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the WM_PROTOCOLS property had format 16.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if( rat != (Atom *) -1) {
+ report("Atom list pointer variable was updated when the WM_PROTOCOLS property had format 16.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( rcnt != -1) {
+ report("Atom count variable was updated when the WM_PROTOCOLS property had format 16.");
+ FAIL;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+
+/* Type STRING */
+ XChangeProperty(display, w, xa_wm_protocols, XA_STRING, 32, PropModeReplace, (unsigned char *) &at, 1);
+
+ rat = (Atom *) -1;
+ rcnt = -1;
+ status = XCALL;
+
+ if(status != False) {
+ report("%s() did not return False when the WM_PROTOCOLS property had type STRING.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if( rat != (Atom *) -1) {
+ report("Atom list pointer variable was updated when the WM_PROTOCOLS property had type STRING.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( rcnt != -1) {
+ report("Atom count variable was updated when the WM_PROTOCOLS property had type STRING.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(12);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/gtwmszhnts/gtwmszhnts.m b/xc/test/xsuite/xtest/tset/CH09/gtwmszhnts/gtwmszhnts.m
new file mode 100644
index 000000000..84c699699
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/gtwmszhnts/gtwmszhnts.m
@@ -0,0 +1,362 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetWMSizeHints CH09
+Status
+XGetWMSizeHints(display, w, hints_return, supplied_return, property)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XSizeHints *hints_return = &sizehints;
+long *supplied_return = &supret;
+Atom property = XA_WM_NORMAL_HINTS;
+>>EXTERN
+#include "Xatom.h"
+#define NumPropSizeElements 18
+#define OldNumPropSizeElements 15
+static XSizeHints sizehints = {0,1,2,3,4,5,6,7,8,9,10, {11,12} , {13,14}, 15, 16, 17};
+static XSizeHints rhints = {100,101,102,103,104,105,106,107,108,109,110, {111,112} , {113,114}, 115, 116, 117};
+static long supret;
+>>ASSERTION Good A
+When the property specified by the
+.A property
+argument is set on the window
+.A w
+with a
+.M type
+of WM_SIZE_HINTS, a
+.M format
+of 32 and is long enough to contain either a pre-ICCCM
+structure or a new size hints structure, then a call to
+xname sets the components of the
+.S XSizeHints
+structure named by the
+.A hints_return
+clear
+argument and returns non-zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the property WM_NORMAL_HINTS with XSetWMSizeHints.
+Obtain the value of the WM_NORMAL_HINTS property using XGetWMSizeHints.
+Verify that the function did not return False.
+Verify that the entire structure has been returned.
+>>CODE
+Status status;
+Window win;
+long rsupp;
+XVisualInfo *vp;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ XSetWMSizeHints(display, win, &sizehints, property);
+
+ w = win;
+ hints_return = &rhints;
+ supplied_return = &rsupp;
+ status = XCALL;
+
+ if( status == False ) {
+ report("XGetWMSizeHints() returned False.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.flags != 0) {
+ report("The flags component of the XSizeHints structure was %lu instead of 0.", rhints.flags);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.x != 1) {
+ report("The x component of the XSizeHints structure was %d instead of 1.", rhints.x);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.y != 2) {
+ report("The y component of the XSizeHints structure was %d instead of 2.", rhints.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.width != 3) {
+ report("The width component of the XSizeHints structure was %d instead of 3.", rhints.width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.height != 4) {
+ report("The height component of the XSizeHints structure was %d instead of 4.", rhints.height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.min_width != 5) {
+ report("The min_width component of the XSizeHints structure was %d instead of 5.", rhints.min_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.min_height != 6) {
+ report("The min_height component of the XSizeHints structure was %d instead of 6.", rhints.min_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.max_width != 7) {
+ report("The max_width component of the XSizeHints structure was %d instead of 7.", rhints.max_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.max_height != 8) {
+ report("The max_height component of the XSizeHints structure was %d instead of 8.", rhints.max_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.width_inc != 9) {
+ report("The width_inc component of the XSizeHints structure was %d instead of 9.", rhints.width_inc);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.height_inc != 10) {
+ report("The height_inc component of the XSizeHints structure was %d instead of 10.", rhints.height_inc);
+ FAIL;
+ } else
+ CHECK;
+
+ if((rhints.min_aspect.x != 11) || (rhints.min_aspect.y != 12)){
+ report("The min_aspect components of the XSizeHints structure were %d, %d instead of 11, 12.",
+ rhints.min_aspect.x, rhints.min_aspect.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if((rhints.max_aspect.x != 13) || (rhints.max_aspect.y != 14)){
+ report("The max_aspect components of the XSizeHints structure were %d, %d instead of 13, 14.",
+ rhints.max_aspect.x, rhints.max_aspect.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.base_width != 15) {
+ report("The base_width component of the XSizeHints structure was %d instead of 15.", rhints.base_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.base_height != 16) {
+ report("The base_height component of the XSizeHints structure was %d instead of 16.", rhints.base_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rhints.win_gravity != 17) {
+ report("The win_gravity component of the XSizeHints structure was %d instead of 17", rhints.win_gravity);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(17);
+
+
+>>ASSERTION Good A
+When the property specified by the
+.A property
+argument is not set on the window
+.A w ,
+or is not of
+.M type
+WM_SIZE_HINTS, or is not of
+.M format
+32, or the property is not long enough to contain either a pre-ICCCM
+structure or a new size hints structure, then a call to
+xname returns zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Obtain the property WM_NORMAL_HINTS with XGetWMSizeHints.
+Verify that the call returned zero.
+
+Create a window with XCreateWindow.
+Set the WM_NORMAL_HINTS property of format 32 type WM_SIZE_HINTS with OldNumPropSizeElements-1 elements XChangeProperty.
+Obtain the property WM_NORMAL_HINTS with XGetWMSizeHints.
+Verify that the call returned zero.
+
+Create a window with XCreateWindow.
+Set the WM_NORMAL_HINTS property of format 16 type WM_SIZE_HINTS with NumPropSizeElements elements with XChangeProperty.
+Obtain the property WM_NORMAL_HINTS with XGetWMSizeHints.
+Verify that the call returned zero.
+
+Create a window with XCreateWindow.
+Set the WM_NORMAL_HINTS property of format 32 type STRING with NumPropSizeElements elements with XChangeProperty.
+Obtain the property WM_NORMAL_HINTS with XGetWMSizeHints.
+Verify that the call returned zero.
+>>CODE
+Status status;
+Window win;
+XSizeHints rhints;
+long rsupp;
+XSizeHints dummy; /* Big enough (by definition). */
+XVisualInfo *vp;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ win = makewin(display, vp);
+
+ w = win;
+ hints_return = &rhints;
+ supplied_return = &rsupp;
+ status = XCALL;
+ if(status != False) {
+ report("XGetWMSizeHints() did not return False when the WM_NORMAL_HINTS property was unset.");
+ FAIL;
+ } else
+ CHECK;
+
+ win = makewin(display, vp);
+ XChangeProperty(display, win, XA_WM_NORMAL_HINTS, XA_WM_SIZE_HINTS, 32, PropModeReplace, (unsigned char *)&dummy, OldNumPropSizeElements-1);
+ w = win;
+ hints_return = &rhints;
+ supplied_return = &rsupp;
+ status = XCALL;
+ if(status != False) {
+ report("XGetWMSizeHints() did not return False when size was %lu 32-bit elements.", OldNumPropSizeElements-1);
+ FAIL;
+ } else
+ CHECK;
+
+ win = makewin(display, vp);
+ XChangeProperty(display, win, XA_WM_NORMAL_HINTS, XA_WM_SIZE_HINTS, 16, PropModeReplace, (unsigned char *)&dummy, NumPropSizeElements);
+ w = win;
+ status = XCALL;
+
+ if(status != False) {
+ report("XGetWMSizeHints() did not return False when format was 16.");
+ FAIL;
+ } else
+ CHECK;
+
+ win = makewin(display, vp);
+ XChangeProperty(display, win, XA_WM_NORMAL_HINTS, XA_STRING, 32, PropModeReplace, (unsigned char *)&dummy, NumPropSizeElements);
+ w = win;
+ status = XCALL;
+
+ if(status != False) {
+ report("XGetWMSizeHints() did not return False when type was STRING.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When a call to xname returns successfully and a pre-ICCCM size hints property is read,
+then the
+.A supplied_return
+argument contains the bits
+.S "(USPosition | USSize | PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect)."
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the property WM_NORMAL_HINTS with size OldNumPropSizeElements using XChangeProperty.
+Obtain the value of the WM_NORMAL_HINTS property using XGetWMSizeHints.
+Verify that the value returned in supplied_return was (USPositionUSSize|PPosition|PSize|PMinSize|PMaxSize|PResizeInc|PAspect).
+>>CODE
+Status status;
+Window win;
+XSizeHints rhints;
+long rsupp;
+XSizeHints dummy; /* Big enough (by definition). */
+XVisualInfo *vp;
+unsigned long flagval = (USPosition | USSize | PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect) ;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ XChangeProperty(display, win, XA_WM_NORMAL_HINTS, XA_WM_SIZE_HINTS, 32, PropModeReplace, (unsigned char *)&dummy, OldNumPropSizeElements);
+ w = win;
+ hints_return = &rhints;
+ supplied_return = &rsupp;
+ status = XCALL;
+ if(status == False) {
+ report("XGetWMSizeHints() returned False.");
+ FAIL;
+ } else
+ CHECK;
+
+ if( rsupp != flagval ) {
+ report("supplied_return was %lu instead of (USPosition | USSize | PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect) (%lu)", rsupp, flagval);
+ report("for a pre-ICCCM structure.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the property specified by the
+.A property
+argument is large enough to contain the base size
+and window gravity fields, then the
+.A supplied_return
+argument contains the bits
+.S "(PBaseSize | PWinGravity | USPosition | USSize | PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect)."
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the property WM_NORMAL_HINTS with size OldNumPropSizeElements using XChangeProperty.
+Obtain the value of the WM_NORMAL_HINTS property using XGetWMSizeHints.
+Verify that the value returned in supplied_return was (PBaseSize|PWinGravity|USPosition|USSize|PPosition|PSize|PMinSize|PMaxSize|PResizeInc|PAspect).
+>>CODE
+Status status;
+Window win;
+XSizeHints rhints;
+long rsupp;
+XSizeHints dummy; /* Big enough (by definition). */
+XVisualInfo *vp;
+long flagval = (PBaseSize | PWinGravity | USPosition | USSize | PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect);
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ XChangeProperty(display, win, XA_WM_NORMAL_HINTS, XA_WM_SIZE_HINTS, 32, PropModeReplace, (unsigned char *)&dummy, NumPropSizeElements);
+ w = win;
+ hints_return = &rhints;
+ supplied_return = &rsupp;
+ status = XCALL;
+ if(status == False) {
+ report("%s() returned False.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if( rsupp != flagval) {
+ report("supplied_return was %lu instead of (PBaseSize | PWinGravity | USPosition | USSize | PPosition | PSize | PMinSize | PMaxSize | PResizeInc | PAspect) (%lu)", rsupp, flagval);
+ report("for an ICCCMv1 structure.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER BadAtom
+>>ASSERTION Bad A
+.ER BadWindow
diff --git a/xc/test/xsuite/xtest/tset/CH09/icnfywdw/icnfywdw.m b/xc/test/xsuite/xtest/tset/CH09/icnfywdw/icnfywdw.m
new file mode 100644
index 000000000..e3412bf17
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/icnfywdw/icnfywdw.m
@@ -0,0 +1,165 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XIconifyWindow CH09
+Status
+XIconifyWindow(display, w, screen_number)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good A
+A call to xname sends a WM_CHANGE_STATE
+.S ClientMessage
+event with a
+.M window
+of
+.A w ,
+a
+.M format
+of 32 and a first
+.M data
+element of
+.S IconicState
+to the root window of the screen specified by the
+.A screen_number
+argument using an event mask of
+.S SubstructureRedirectMask |
+.S SubstructureNotifyMask
+and returns non-zero.
+>>STRATEGY
+Create a window using XCreateWindow.
+Obtain the atom for the string "WM_CHANGE_STATE" using XInternAtom.
+Select SubstructureNotify events on the root window with XSelectInput.
+Generate an event on the root window using XIconifyWindow.
+Verify that the call returned non-zero.
+Verify that an event was generated with XNextEvent.
+Verify that the event type was ClientMessage.
+Verify that the event window was correct.
+Verify that the event message_type was WM_CHANGE_STATE.
+Verify that the event format was 32.
+Verify that the first data element of the event structure was IconicState.
+
+Select SubstructureRedirect events on the root window with XSelectInput.
+Generate an event on the root window using XIconifyWindow.
+Verify that the call returned non-zero.
+Verify that an event was generated with XNextEvent.
+Verify that the event type was ClientMessage.
+Verify that the event window was correct.
+Verify that the event message_type was WM_CHANGE_STATE.
+Verify that the event format was 32.
+Verify that the first data element of the event structure was IconicState.
+>>CODE
+Status status;
+Atom wm_change_state;
+XEvent ev, rev;
+int i;
+int nevents = 0;
+XVisualInfo *vp;
+XWindowAttributes watts;
+unsigned long event_mask[2];
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+ screen_number = DefaultScreen(display);
+
+ event_mask[0] = SubstructureNotifyMask;
+ event_mask[1] = SubstructureRedirectMask;
+
+ if( (wm_change_state = XInternAtom(display, "WM_CHANGE_STATE", False)) == None) {
+ delete("The string \"WM_CHANGE_STATE\" could not be interned.");
+ return;
+ } else
+ CHECK;
+
+ ev.type = ClientMessage;
+ ev.xany.display = display;
+
+
+ ev.xclient.window = w;
+ ev.xclient.message_type = wm_change_state;
+ ev.xclient.format = 32;
+ ev.xclient.data.l[0] = IconicState;
+ ev.xclient.data.l[1] = 0;
+ ev.xclient.data.l[2] = 0;
+ ev.xclient.data.l[3] = 0;
+ ev.xclient.data.l[4] = 0;
+
+ for(i=0; i < 2; i++) {
+
+ startcall(display);
+ XSelectInput(display, DRW(display), event_mask[i]);
+ endcall(display);
+
+ if(geterr() != Success) {
+ delete("XSelectInput() failed with an event mask of 0x%lx.", event_mask[i]);
+ return;
+ } else
+ CHECK;
+
+ status = XCALL;
+
+ if(status == 0) {
+ delete("%s() returned zero.", TestName);
+ return;
+ } else
+ CHECK;
+
+ rev.type = -1;
+ if( (nevents = getevent(display, &rev)) == 0 ) {
+ report("No event was generated.");
+ FAIL;
+ } else {
+ CHECK;
+ if(nevents != 1) {
+ delete("There were %d events generated instead of 1.", nevents);
+ return;
+ } else {
+ CHECK;
+
+ rev.xclient.data.l[1] = 0;
+ rev.xclient.data.l[2] = 0;
+ rev.xclient.data.l[3] = 0;
+ rev.xclient.data.l[4] = 0;
+
+ if( checkevent(&ev, &rev) != 0 ) {
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+ }
+
+ CHECKPASS(11);
+
+>>ASSERTION Bad B 1
+>># Untestable, and not worth the effort of adding XTest extension facilities
+>># to provoke the error.
+When the atom name \(lqWM_CHANGE_STATE\(rq cannot be interned, then
+a call to xname
+does not send a message and returns zero.
+>>ASSERTION Bad B 1
+>># Untestable, and not worth the effort of adding XTest extension facilities
+>># to provoke the error.
+When the
+.S ClientMessage
+event cannot be sent, then
+a call to xname
+returns zero.
+>># Assertion removed at request of MIT (Bug Report 67) because
+>># XIconifyWindow cannot generate this error (Spec bug)
+>># >>ASSERTION Bad A
+>># .ER Window
diff --git a/xc/test/xsuite/xtest/tset/CH09/linktbl.c b/xc/test/xsuite/xtest/tset/CH09/linktbl.c
new file mode 100644
index 000000000..1b59bbd07
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/linktbl.c
@@ -0,0 +1,113 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include "xtest.h"
+
+extern struct linkinfo EXAllcClssHnt;
+extern struct linkinfo EXAllcIcnSz;
+extern struct linkinfo EXAllcSzHnts;
+extern struct linkinfo EXAllcStndrdC;
+extern struct linkinfo EXAllcWMHnts;
+extern struct linkinfo EXFtchNm;
+extern struct linkinfo EXFrStrLst;
+extern struct linkinfo EXGtClssHnt;
+extern struct linkinfo EXGtCmmnd;
+extern struct linkinfo EXGtIcnNm;
+extern struct linkinfo EXGtIcnSzs;
+extern struct linkinfo EXGtRGBClrmps;
+extern struct linkinfo EXGtTxtPrprty;
+extern struct linkinfo EXGtTrnsntFrH;
+extern struct linkinfo EXGtWMClntMch;
+extern struct linkinfo EXGtWMClrmpWd;
+extern struct linkinfo EXGtWMHnts;
+extern struct linkinfo EXGtWMIcnNm;
+extern struct linkinfo EXGtWMNm;
+extern struct linkinfo EXGtWMNrmlHnt;
+extern struct linkinfo EXGtWMPrtcls;
+extern struct linkinfo EXGtWMSzHnts;
+extern struct linkinfo EXIcnfyWdw;
+extern struct linkinfo EXRcnfgrWMWdw;
+extern struct linkinfo EXStClssHnt;
+extern struct linkinfo EXStCmmnd;
+extern struct linkinfo EXStIcnNm;
+extern struct linkinfo EXStIcnSzs;
+extern struct linkinfo EXStRGBClrmps;
+extern struct linkinfo EXStTxtPrprty;
+extern struct linkinfo EXStTrnsntFrH;
+extern struct linkinfo EXStWMClntMch;
+extern struct linkinfo EXStWMClrmpWd;
+extern struct linkinfo EXStWMHnts;
+extern struct linkinfo EXStWMIcnNm;
+extern struct linkinfo EXStWMNm;
+extern struct linkinfo EXStWMNrmlHnt;
+extern struct linkinfo EXStWMPrprts;
+extern struct linkinfo EXStWMPrtcls;
+extern struct linkinfo EXStWMSzHnts;
+extern struct linkinfo EXStrNm;
+extern struct linkinfo EXStrLstTTxtP;
+extern struct linkinfo EXTxtPrprtyTS;
+extern struct linkinfo EXWMGmtry;
+extern struct linkinfo EXWthdrwWdw;
+
+struct linkinfo *linktbl[] = {
+ &EXAllcClssHnt,
+ &EXAllcIcnSz,
+ &EXAllcSzHnts,
+ &EXAllcStndrdC,
+ &EXAllcWMHnts,
+ &EXFtchNm,
+ &EXFrStrLst,
+ &EXGtClssHnt,
+ &EXGtCmmnd,
+ &EXGtIcnNm,
+ &EXGtIcnSzs,
+ &EXGtRGBClrmps,
+ &EXGtTxtPrprty,
+ &EXGtTrnsntFrH,
+ &EXGtWMClntMch,
+ &EXGtWMClrmpWd,
+ &EXGtWMHnts,
+ &EXGtWMIcnNm,
+ &EXGtWMNm,
+ &EXGtWMNrmlHnt,
+ &EXGtWMPrtcls,
+ &EXGtWMSzHnts,
+ &EXIcnfyWdw,
+ &EXRcnfgrWMWdw,
+ &EXStClssHnt,
+ &EXStCmmnd,
+ &EXStIcnNm,
+ &EXStIcnSzs,
+ &EXStRGBClrmps,
+ &EXStTxtPrprty,
+ &EXStTrnsntFrH,
+ &EXStWMClntMch,
+ &EXStWMClrmpWd,
+ &EXStWMHnts,
+ &EXStWMIcnNm,
+ &EXStWMNm,
+ &EXStWMNrmlHnt,
+ &EXStWMPrprts,
+ &EXStWMPrtcls,
+ &EXStWMSzHnts,
+ &EXStrNm,
+ &EXStrLstTTxtP,
+ &EXTxtPrprtyTS,
+ &EXWMGmtry,
+ &EXWthdrwWdw,
+ 0,
+};
diff --git a/xc/test/xsuite/xtest/tset/CH09/rcnfgrwmwd/rcnfgrwmwd.m b/xc/test/xsuite/xtest/tset/CH09/rcnfgrwmwd/rcnfgrwmwd.m
new file mode 100644
index 000000000..1905fecb0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/rcnfgrwmwd/rcnfgrwmwd.m
@@ -0,0 +1,294 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XReconfigureWMWindow CH09
+Status
+XReconfigureWMWIndow(display, w, screen_number, value_mask, values)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+int screen_number = DefaultScreen(Dsp);
+unsigned int value_mask = 0;
+XWindowChanges *values = &wchanges;
+>>EXTERN
+XWindowChanges wchanges;
+>>ASSERTION Good A
+A call to xname issues a
+.S ConfigureWindow
+request on the specified top-level window named by the
+.A w
+argument.
+>>STRATEGY
+Create a window using XCreateWindow.
+Select ConfigureNotify events on the window using XSelectInput with SubstructureNotifyMask.
+Generate a ConfigureWindow event on the window using XReconfigureWMWindow.
+Verify that the call returned non-zero.
+Verify that a single event was generated.
+Verify that the event type was ConfigureWindow.
+>>CODE
+Status status;
+XEvent ev;
+int nevents = 0;
+XVisualInfo *vp;
+XWindowChanges changes;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+ XSelectInput(display, w, StructureNotifyMask);
+
+ screen_number = DefaultScreen(display);
+ value_mask = CWBorderWidth;
+ changes.border_width = 5;
+ values = &changes;
+
+ status = XCALL;
+
+ if(status == 0) {
+ report("%s() returned zero.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if( (nevents = getevent(display, &ev)) == 0 ) {
+ report("No event was generated.");
+ FAIL;
+
+ } else {
+
+ CHECK;
+ if(nevents != 1) {
+ delete("There were %d events generated instead of 1.", nevents);
+ return;
+ } else
+ CHECK;
+
+ if(ev.type != ConfigureNotify) {
+ report("The type component of the generated event was %d instead of ConfigureWindow (%d)",
+ ev.xclient.type, ConfigureNotify);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When the ConfigureWindow request fails with a
+.S BadMatch
+error, then a call to xname sends a synthetic
+.S ConfigureRequestEvent
+to the root of the window specified by the
+.A w
+argument, with the event
+containing the same configuration parameters specified by the
+.A values
+and
+.A valuemask
+arguments
+and having a
+.M window
+element of
+.A w
+and a
+.M parent
+element equal to the receiving root window,
+using an event mask of
+.S SubstructureRedirectMask |
+.S SubstructureNotifyMask
+and returns non-zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Select ConfigureRequest events using XSelectInput with SubstructureNotifyMask.
+Call XReconfigureWMWindow using the root window as a sibling and no specified StackMode.
+Verify that the call did not return zero.
+Verify that one ConfigureRequest event is generated using XNextEvent.
+Verify that the event components are correct.
+
+Select ConfigureRequest events using XSelectInput with SubstructureRedirectMask.
+Call XReconfigureWMWindow using the root window as a sibling and no specified StackMode.
+Verify that the call did not return zero.
+Verify that one ConfigureRequest event is generated using XNextEvent.
+Verify that the event components are correct.
+>>CODE
+Status status;
+XEvent rev, expectev;
+int nevents = 0;
+int i;
+XVisualInfo *vp;
+XWindowChanges changes;
+unsigned long event_mask[2];
+unsigned long valuemask = CWSibling /**/| CWStackMode/**/ | CWX | CWY | CWWidth | CWHeight | CWBorderWidth;
+
+ event_mask[0] = SubstructureNotifyMask;
+ event_mask[1] = SubstructureRedirectMask;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+
+ expectev.type = ConfigureRequest;
+ expectev.xany.display = display;
+
+ expectev.xconfigurerequest.type = ConfigureRequest;
+ expectev.xconfigurerequest.send_event = True;
+ expectev.xconfigurerequest.display = display;
+ expectev.xconfigurerequest.window = w;
+ expectev.xconfigurerequest.parent = DRW(display);
+ expectev.xconfigurerequest.x = 1;
+ expectev.xconfigurerequest.y = 2;
+ expectev.xconfigurerequest.width = 3;
+ expectev.xconfigurerequest.height = 4;
+ expectev.xconfigurerequest.border_width = 5;
+ expectev.xconfigurerequest.above = DRW(display);
+ expectev.xconfigurerequest.detail = Above;
+ expectev.xconfigurerequest.value_mask = valuemask;
+
+ screen_number = DefaultScreen(display);
+ value_mask = valuemask;
+ changes.x = 1;
+ changes.y = 2;
+ changes.width = 3;
+ changes.height = 4;
+ changes.border_width = 5;
+ changes.sibling = DRW(display);
+ changes.stack_mode = Above;
+ values = &changes;
+
+
+ for(i=0; i<2; i++) {
+
+ startcall(display);
+ XSelectInput(display, DRW(display), event_mask[i]);
+ endcall(display);
+
+ if(geterr() != Success) {
+ delete("XSelectInput() failed with an event mask of 0x%lx.", event_mask[i]);
+ return;
+ } else
+ CHECK;
+
+ status = XCALL;
+
+ if(status == 0) {
+ report("%s() returned zero.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ rev.type = -1;
+ if( (nevents = getevent(display, &rev)) == 0 ) {
+ report("No event was generated.");
+ FAIL;
+
+ } else {
+
+ CHECK;
+ if(nevents != 1){
+ delete("There were %d events generated instead of 1.", nevents);
+ return;
+ } else
+ CHECK;
+
+ if( checkevent( &expectev, &rev) != 0)
+ FAIL;
+ else
+ CHECK;
+
+ }
+ }
+
+ CHECKPASS(10);
+
+>>ASSERTION Bad B 1
+>># Untestable, and not worth the effort of adding XTest extension facilities
+>># to provoke the error.
+When the
+.S ConfigureRequestEvent
+is not successfully sent, then a call to xname returns zero.
+>>ASSERTION Bad A
+When the
+.A value_mask
+argument contains the bits
+.S CWWidth
+or
+.S CWHeight
+and either of the
+.M width
+or
+.M height
+components of the
+.S XWindowChanges
+structure named by the
+.A values
+argument is zero, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a window using XCreateWindow.
+Configure the window to have a height of zero using XReconfigureWMWindow
+Verify that a BadValue error was generated.
+Configure the window to have a width of zero using XReconfigureWMWindow
+Verify that a BadValue error was generated.
+>>CODE BadValue
+Status status;
+XEvent ev;
+int nevents = 0;
+XVisualInfo *vp;
+XWindowChanges changes;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+
+ screen_number = DefaultScreen(display);
+ value_mask = CWHeight ;
+ changes.height = 0;
+ values = &changes;
+ status = XCALL;
+
+ if(geterr() == BadValue)
+ CHECK;
+
+ changes.width = 0;
+ value_mask = CWWidth;
+ status = XCALL;
+
+ if(geterr() == BadValue)
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+When the window argument does not name a valid window, then a
+.S BadWindow
+error occurs.
+>>STRATEGY
+Create a bad window by creating and destroying a window.
+Call test function using bad window as the window argument.
+Verify that a BadWindow error occurs.
+>>CODE BadWindow
+Status status;
+
+ A_WINDOW = badwin(A_DISPLAY);
+
+ status = XCALL;
+
+ if (geterr() == BadWindow)
+ PASS;
+ else
+ FAIL;
+
+>># Completed Kieron Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/stclsshnt/stclsshnt.m b/xc/test/xsuite/xtest/tset/CH09/stclsshnt/stclsshnt.m
new file mode 100644
index 000000000..3bae4eeae
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/stclsshnt/stclsshnt.m
@@ -0,0 +1,129 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetClassHint CH09
+
+XSetClassHint(display, w, class_hints)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XClassHint *class_hints = &chint;
+>>EXTERN
+#include "Xatom.h"
+XClassHint chint = { "DefName", "DefClass"};
+>>ASSERTION Good A
+A call to xname sets the WM_CLASS property for
+the window
+.A w
+to be of
+.M type
+.S STRING ,
+.M format
+8 and to have
+.M value
+set to the strings in the
+.M res_name
+and
+.M res_class
+members of the
+.S XClassHint
+structure named by the
+.A class_hints
+argument, in that order and null-separated.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_CLASS property for the window using XSetClassHint.
+Obtain the value type and format of the WM_CLASS property using XGetWindowProperty.
+Verify that the format is 8.
+Verify that the type is STRING.
+Verify that the value is correct.
+>>CODE
+Window win;
+XVisualInfo *vp;
+XClassHint classhint, retchint;
+int reslen;
+char *propp = NULL, *s;
+unsigned long leftover, nitems, len;
+int actual_format;
+Atom actual_type;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ classhint.res_name = "XTestResName";
+ classhint.res_class = "XTestClassName";
+
+ reslen = strlen(classhint.res_name);
+ len = reslen + 1 + strlen(classhint.res_class) + 1;
+
+ w = win;
+ class_hints = &classhint;
+ XCALL;
+
+ if (XGetWindowProperty(display, win, XA_WM_CLASS, 0L, len, False,
+ AnyPropertyType, &actual_type, &actual_format, &nitems, &leftover,
+ (unsigned char **)&propp) != Success) {
+ delete("XGetWindowProperty() did not return Success.");
+ return;
+ } else
+ CHECK;
+
+ if(leftover != 0) {
+ report("The leftover elements numbered %lu instead of 0", leftover);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_format != 8) {
+ report("The format of the WM_HINTS property was %lu instead of 8", actual_format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_type != XA_STRING) {
+ report("The type of the WM_CLASS property was %lu instead of STRING (%lu).", actual_type, (unsigned long) XA_STRING);
+ FAIL;
+ } else
+ CHECK;
+
+ if(propp == NULL) {
+
+ report("No value was set for the WM_CLASS property.");
+ FAIL;
+
+ } else {
+
+ if(strcmp(propp, classhint.res_name) != 0) {
+ report("The res_name component of the XClassHint structure was \"%s\" instead of \"%s\"", propp, classhint.res_name);
+ FAIL;
+ } else
+ CHECK;
+
+ if(strcmp(s = propp+1+reslen, classhint.res_class) != 0) {
+ report("The res_class component of the XClassHint structure was \"%s\" instead of \"%s\".", s, classhint.res_class);
+ FAIL;
+ } else
+ CHECK;
+ XFree((char*)propp);
+ }
+
+ CHECKPASS(6);
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/stcmmnd/stcmmnd.m b/xc/test/xsuite/xtest/tset/CH09/stcmmnd/stcmmnd.m
new file mode 100644
index 000000000..63aa82626
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/stcmmnd/stcmmnd.m
@@ -0,0 +1,152 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetCommand CH09
+
+XSetCommand(display, w, argv, argc)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+char **argv = & argp;
+int argc = 0;
+>>EXTERN
+#include "Xatom.h"
+char *argp;
+>>#
+>># COMMENT: We now assume that the WM_COMMAND property is
+>># of type STRING and of format 8.
+>>#
+>># Cal 7/6/91
+>>#
+>># >>ASSERTION Good A
+>># A call to xname sets the WM_COMMAND property for the window
+>># .A w
+>># to
+>># .A argc
+>># of the arguments specified by the
+>># .A argv
+>># argument.
+>>#
+>>ASSERTION Good A
+A call to xname sets the WM_COMMAND property
+for the window
+.A w
+to
+.A argc
+of the arguments specified by the
+.A argv
+argument and to have
+.M type
+STRING and
+.M format
+8.
+>>STRATEGY
+Create a window using XCreateWindow.
+Set the WM_COMMAND property using XSetCommand.
+Obtain the value of the WM_COMMAND property using XGetTextProperty.
+Verify that the number and value of the returned strings is correct.
+Release the allocated memory using XFreeStringList.
+>>CODE
+XVisualInfo *vp;
+char *nullstr = "<NULL>";
+char **strpp, *strp;
+char *str1 = "XTest string 1";
+char *str2 = "XTest string 2";
+char *prop[2];
+char **rstrings = (char**) NULL;
+int rcount = 0;
+int i;
+XTextProperty rtp;
+Status status;
+char **list_return;
+int count_return;
+int len;
+
+ prop[0] = str1;
+ prop[1] = str2;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+ argv = prop;
+ argc = 2;
+ XCALL;
+
+ if(XGetTextProperty(display, w, &rtp, XA_WM_COMMAND) == False) {
+ delete("XGetTextProperty() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if(rtp.encoding != XA_STRING ) {
+ report("The encoding component of the XTextProperty was %lu instead of STRING (%lu).",
+ (unsigned long)rtp.encoding, (unsigned long)XA_STRING);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rtp.format != 8) {
+ report("The format component of the XTextProperty was %d instead of %d.", rtp.format, 8 );
+ FAIL;
+ } else
+ CHECK;
+
+ len = strlen(str1) + 1 + strlen(str2) + 1;
+
+ if(rtp.nitems != len) {
+ report("The nitems component of the XTextProperty was %lu instead of %lu.", rtp.nitems, len);
+ FAIL;
+ } else
+ CHECK;
+
+ /*
+ * Ignore final <NUL> if present since UNIX WM_COMMAND is nul-terminated, unlike
+ * the nul-separated text properties.
+ * Cal - 7/6/91
+ */
+ if (rtp.value[rtp.nitems - 1] == '\0') rtp.nitems--;
+
+
+ if(XTextPropertyToStringList( &rtp, &list_return, &count_return) == False) {
+ delete("XTextPropertyToStringList() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count_return != argc) {
+ delete("XTextPropertyToStringList() count_return was %d instead of %d.", count_return, argc);
+ return;
+ } else
+ CHECK;
+
+ if( (strcmp(str1, list_return[0]) != 0) || (strcmp(str2, list_return[1]) != 0) ) {
+ report("Value strings were:");
+ report("\"%s\" and \"%s\"", list_return[0], list_return[1]);
+ report("Instead of:");
+ report("\"%s\" and \"%s\"", str1, str2);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)rtp.value);
+ XFreeStringList(list_return);
+
+ CHECKPASS(7);
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/sticnnm/sticnnm.m b/xc/test/xsuite/xtest/tset/CH09/sticnnm/sticnnm.m
new file mode 100644
index 000000000..ad8354151
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/sticnnm/sticnnm.m
@@ -0,0 +1,119 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetIconName CH09
+int
+XSetIconName(display, w, icon_name)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+char *icon_name = "XTestUninit";
+>>EXTERN
+#include "Xatom.h"
+>>ASSERTION Good A
+A call to xname sets the
+.S WM_ICON_NAME
+property for the window
+.A w
+to be of
+.M type
+.S STRING ,
+.M format
+8 and to have
+.M value
+set to the null terminated string specified by the
+.A icon_name
+argument.
+>>STRATEGY
+Create a window with XCreateWindow
+Set the icon name for the window with XSetIconName
+Get the WM_ICON_NAME property for the window with XGetTextProperty.
+Verify that type and format are STRING and 8 respectively.
+Verify that the value was set correctly.
+>>CODE
+Window win;
+int count;
+char *wname = "XTestICNName";
+XTextProperty tp;
+char **wnameret = NULL;
+XVisualInfo *vp;
+Status status;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ w = win;
+ icon_name = wname;
+ XCALL;
+
+ status = XGetTextProperty(display, win, &tp, XA_WM_ICON_NAME);
+
+ if (status == False || tp.value == NULL) {
+ status = False;
+ tp.value = NULL;
+ report("Failed to get WM_ICON_NAME.");
+ FAIL;
+ } else
+ CHECK;
+
+ if (status && tp.encoding != XA_STRING) {
+ status = False;
+ report("Encoding is \"%s\", not STRING.", XGetAtomName(display, tp.encoding) );
+ FAIL;
+ } else
+ CHECK;
+
+ if (status && tp.format != 8) {
+ status = False;
+ report("Format is %d instead of 8.", tp.format);
+ FAIL;
+ } else {
+ CHECK;
+
+ status = XTextPropertyToStringList(&tp, &wnameret, &count);
+
+ if (status == False) {
+ wnameret = NULL;
+ delete("XTextPropertyToStringList returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count != 1) {
+ status = False;
+ report("WM_ICON_NAME not single string.");
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ if(status && strcmp(wnameret[0], wname) != 0) {
+ report("Icon name was \"%s\" instead of \"%s\".", wnameret[0], wname);
+ FAIL;
+ } else
+ CHECK;
+
+ if (wnameret != NULL)
+ XFree((char*)wnameret);
+ if (tp.value != NULL)
+ XFree((char*)tp.value);
+ CHECKPASS(6);
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Good A
+.ER BadWindow
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/sticnszs/sticnszs.m b/xc/test/xsuite/xtest/tset/CH09/sticnszs/sticnszs.m
new file mode 100644
index 000000000..a2aa787c9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/sticnszs/sticnszs.m
@@ -0,0 +1,165 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetIconSizes CH09
+
+XSetIconSizes(display, w, size_list, count)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XIconSize *size_list = &sizelist;
+int count = 1;
+>>EXTERN
+#include "Xatom.h"
+XIconSize sizelist;
+>>ASSERTION Good A
+A call to xname sets the WM_ICON_SIZE property for the window
+.A w
+to be of
+type
+.S WM_ICON_SIZE ,
+format 32 and to have value set
+to the
+.A count
+.S XIconSize
+structures named by the
+.A size_list
+argument.
+>>STRATEGY
+Create a window using XCreateWindow.
+Set the WM_ICON_SIZE property using XSetIconSizes.
+Obtain the WM_ICON_SIZE property using XGetWindowProperty.
+Verify that the property type is WM_ICON_SIZE.
+Verify that the property format is 32.
+Verify that the returned number of elements is correct.
+Verify that the property value is correct.
+>>CODE
+#define NumPropIconSizeElements 6
+XVisualInfo *vp;
+unsigned long leftover, nitems, len;
+int actual_format;
+Atom actual_type;
+XIconSize *rsizelist = (XIconSize *) NULL, *sp;
+XIconSize sizelist[7];
+int cnt = 7;
+int i, v;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+
+ for(i=0, sp=sizelist, v=0; i<cnt; i++, sp++) {
+ sp->min_width = v++;
+ sp->min_height = v++;
+ sp->max_width = v++;
+ sp->max_height = v++;
+ sp->width_inc = v++;
+ sp->height_inc = v++;
+ }
+
+ count = cnt;
+ size_list = sizelist;
+ XCALL;
+
+ len = cnt * NumPropIconSizeElements;
+ if(XGetWindowProperty(display, w, XA_WM_ICON_SIZE,
+ 0L, len, False,
+ AnyPropertyType, &actual_type, &actual_format,
+ &nitems, &leftover, (unsigned char **) &rsizelist) != Success) {
+ delete("XGetWindowProperty() did not return Success.");
+ return;
+ } else
+ CHECK;
+
+ if(leftover != 0) {
+ report("The leftover elements numbered %lu instead of 0", leftover);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_format != 32) {
+ report("The format of the WM_ICON_SIZE property was %lu instead of 32", actual_format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_type != XA_WM_ICON_SIZE) {
+ report("The type of the WM_ICON_SIZE property was %lu instead of WM_ICON_SIZE (%lu)", actual_type, (long) XA_WM_ICON_SIZE);
+ FAIL;
+ } else
+ CHECK;
+
+ if( rsizelist == (XIconSize *) NULL) {
+ report("No value was obtained for the WM_ICON_SIZES property.");
+ FAIL;
+ } else {
+
+ CHECK;
+ if( nitems != len) {
+ report("The WM_ICON_SIZES property comprised %ul elements instead of %d", nitems, cnt);
+ FAIL;
+ } else
+ if(actual_format == 32) {
+
+ CHECK;
+ for(i=0, sp=rsizelist, v=0; i<cnt; i++, sp++) {
+
+ if(sp->min_width != v++) {
+ report("The min_width component of the XIconSize structure %d was %d instead of %d.", i, sp->min_width, v-1);
+ FAIL;
+ } else
+ CHECK;
+
+ if(sp->min_height != v++) {
+ report("The min_height component of the XIconSize structure %d was %d instead of %d.", i, sp->min_height, v-1);
+ FAIL;
+ } else
+ CHECK;
+
+ if(sp-> max_width != v++) {
+ report("The max_width component of the XIconSize structure %d was %d instead of %d.", i, sp-> max_width, v-1);
+ FAIL;
+ } else
+ CHECK;
+
+ if(sp->max_height != v++) {
+ report("The max_height component of the XIconSize structure %d was %d instead of %d.", i, sp->max_height, v-1);
+ FAIL;
+ } else
+ CHECK;
+
+ if(sp->width_inc != v++) {
+ report("The width_inc component of the XIconSize structure %d was %d instead of %d.", i, sp->width_inc, v-1);
+ FAIL;
+ } else
+ CHECK;
+
+ if(sp-> height_inc != v++) {
+ report("The height_inc component of the XIconSize structure %d was %d instead of %d.", i, sp->height_inc, v-1);
+ FAIL;
+ } else
+ CHECK;
+ }
+ XFree( (char*) rsizelist);
+ }
+ }
+
+ CHECKPASS(6*cnt+6);
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/strgbclrmp/strgbclrmp.m b/xc/test/xsuite/xtest/tset/CH09/strgbclrmp/strgbclrmp.m
new file mode 100644
index 000000000..48f6c6142
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/strgbclrmp/strgbclrmp.m
@@ -0,0 +1,176 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetRGBColormaps CH09
+void
+XSetRGBColormaps(display, w, std_colormap, count, property)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XStandardColormap *std_colormp = &sclrmp;
+int count = 1;
+Atom property = XA_RGB_DEFAULT_MAP;
+>>EXTERN
+#include "Xatom.h"
+static XStandardColormap sclrmp;
+static XStandardColormap scmp1 = { (Colormap) 1, 2L, 3L, 4L, 5L, 6L, 7L, 8L, (VisualID) 9L, (XID) 10L };
+>>ASSERTION Good A
+A call to xname sets the property, specified by
+the
+.A property
+argument, for the window
+.A w
+to be of type
+.S RGB_COLOR_MAP ,
+format 32, and to have value set to the
+.A count
+.S XStandardColormap
+structures specified by the
+.A std_colormap
+argument.
+>>STRATEGY
+Create a window using XCreateWindow.
+Set the RGB_DEFAULT_MAP property using XSetRGBColormaps.
+Obtain the RGB_DEFAULT_MAP property using XGetWindowProperty.
+Verify that the property type is RGB_COLOR_MAP.
+Verify that the property format is 32.
+Verify that property value is correct.
+>>CODE
+Atom actual_type;
+int actual_format;
+unsigned long leftover;
+unsigned long nitems;
+XVisualInfo *vp;
+XStandardColormap *rcmap = (XStandardColormap *) NULL;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+
+ std_colormp = &scmp1;
+ XCALL;
+
+ if( XGetWindowProperty(display, w, property, 0L, 40L, False, XA_RGB_COLOR_MAP, &actual_type,
+ &actual_format, &nitems, &leftover, (unsigned char **) &rcmap) != Success ) {
+ delete("XGetWindowProperty() did not return Success.");
+ return;
+ } else
+ CHECK;
+
+ if(leftover != 0) {
+ report("The leftover elements numbered %lu instead of 0", leftover);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_format != 32) {
+ report("The format of the RGB_DEFAULT_MAP property was %lu instead of 32", actual_format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_type != XA_RGB_COLOR_MAP) {
+ report("The type of the RGB_DEFAULT_MAP property was %lu instead of RGB_DEFAULT_MAP (%lu)", actual_type,
+ (long) XA_RGB_DEFAULT_MAP);
+ FAIL;
+ } else
+ CHECK;
+
+ if( rcmap == (XStandardColormap *) NULL) {
+ report("No value was obtained for the RGB_DEFAULT_MAP property.");
+ FAIL;
+ } else {
+
+ CHECK;
+
+ if(nitems != 10) {
+ report("The RGB_DEFAULT_MAP property comprised %d elements instead of %d", nitems, 10);
+ FAIL;
+ } else
+ if(actual_format == 32) {
+ CHECK;
+ if(rcmap->colormap != scmp1.colormap) {
+ report("The colormap component of the XStandardColormap structure %d was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rcmap->red_max != scmp1.red_max) {
+ report("The red_max component of the XStandardColormap structure %d was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rcmap->red_mult != scmp1.red_mult) {
+ report("The red_mult component of the XStandardColormap structure %d was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rcmap->green_max != scmp1.green_max) {
+ report("The green_max component of the XStandardColormap structure %d was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rcmap->green_mult != scmp1.green_mult) {
+ report("The green_mult component of the XStandardColormap structure %d was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rcmap->blue_max != scmp1.blue_max) {
+ report("The blue_max component of the XStandardColormap structure %d was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rcmap->blue_mult != scmp1.blue_mult) {
+ report("The blue_mult component of the XStandardColormap structure %d was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rcmap->base_pixel != scmp1.base_pixel) {
+ report("The base_pixel component of the XStandardColormap structure %d was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rcmap->visualid != scmp1.visualid) {
+ report("The visualid component of the XStandardColormap structure %d was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rcmap->killid != scmp1.killid ) {
+ report("The killid component of the XStandardColormap structure %d was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ }
+ XFree((char *) rcmap);
+ }
+
+ CHECKPASS(16);
+
+>>ASSERTION Bad A
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadAtom
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/strlstttxt/strlstttxt.m b/xc/test/xsuite/xtest/tset/CH09/strlstttxt/strlstttxt.m
new file mode 100644
index 000000000..81d0d743e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/strlstttxt/strlstttxt.m
@@ -0,0 +1,256 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+>>TITLE XStringListToTextProperty CH09
+Status
+XStringListToTextProperty(list, count, text_prop_return)
+char **list;
+int count;
+XTextProperty *text_prop_return;
+>>EXTERN
+#include "Xatom.h"
+>>#
+>># COMMENT: This assertion is wrong about the nitems component.
+>># Its value is the sum of the string lengths plus the
+>># null separators.
+>>#
+>># Cal 11/6/91
+>>#
+>># >>ASSERTION Good A
+>># A call to xname sets the
+>># .S XTextProperty
+>># structure named by the
+>># .A text_prop_return
+>># argument such that the
+>># .M format
+>># component is 8,
+>># the
+>># .M encoding
+>># component is STRING, the
+>># .M value
+>># component is the null-separated concatenation of
+>># .A count
+>># of the character strings specified by the
+>># .A list
+>># argument and terminated with an ASCII nul, the
+>># .M nitems
+>># component is the number of null-terminated character strings
+>># and returns non-zero.
+>>ASSERTION Good A
+A call to xname sets the
+.S XTextProperty
+structure named by the
+.A text_prop_return
+argument such that the
+.M format
+component is 8,
+the
+.M encoding
+component is STRING, the
+.M value
+component is the null-separated concatenation of
+.A count
+of the character strings specified by the
+.A list
+argument and terminated with an ASCII nul, the
+.M nitems
+component is the total number of characters and
+separating nulls
+and returns non-zero.
+>>STRATEGY
+Create a window using XCreateWindow.
+Create a XTextPropertyStructure using XStringListToTextProperty with three strings.
+Verify that the call did not return zero.
+Verify that the format component is 8.
+Verify that the encoding component is STRING.
+Verify that the value field is correctly set
+Verify that the nitems field is correctly set.
+Set the property WM_NAME to the returned XTextProperty using XSetTextProperty.
+Verify that no error occurred.
+Create a XTextPropertyStructure using XStringListToTextProperty no strings.
+Verify that the call did not return zero.
+Set the property WM_NAME to the returned XTextProperty using XSetTextProperty.
+Verify that no error occurred.
+>>CODE
+Status status;
+char *str1 = "XtestString1_._.";
+char *str2 = "XtextString2._";
+char *str3 = "XtestString3._..";
+char *argv[3];
+char *value, *vp;
+int argc = 3;
+int i;
+int len;
+XTextProperty tp;
+Window win;
+XVisualInfo *vi;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vi);
+ win = makewin(Dsp, vi);
+
+ argv[0] = str1;
+ argv[1] = str2;
+ argv[2] = str3;
+
+ len = 0;
+ for(i=0; i< argc; i++)
+ len += strlen(argv[i]) + 1;
+
+ if((value = (char *)malloc(len)) == NULL) {
+ delete("malloc() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ len--;
+ vp = value;
+ for(i=0; i< argc; i++) {
+ strcpy(vp, argv[i]);
+ vp += strlen(argv[i]) + 1;
+
+ }
+
+ list = argv;
+ count = argc;
+ text_prop_return = &tp;
+ status = XCALL;
+
+ if(status == 0) {
+ delete("%s() returned zero.", TestName);
+ return;
+ } else
+ CHECK;
+
+ if( tp.format != 8 ) {
+ report("The format component of the XTextProperty structure was %d instead of %d.", tp.format, 8);
+ FAIL;
+ } else
+ CHECK;
+
+ if( tp.encoding != XA_STRING) {
+ report("The encoding component of the XTextProperty structure was %ld instead of %ld.",
+ (long) tp.encoding, (long) XA_STRING);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.nitems != len) {
+ report("The nitems component of the XTextProperty structure was %ld instead of %ld.", tp.nitems, len);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.value == NULL) {
+ report("The value component of the XTextProperty structure was NULL.");
+ FAIL;
+ } else {
+ CHECK;
+
+ if(memcmp(tp.value, value, len+1) != 0) {
+ report("The value component of the XTextProperty was not correct.");
+ FAIL;
+ } else
+ CHECK;
+
+ startcall(Dsp);
+ XSetTextProperty(Dsp, win, &tp, XA_WM_NAME);
+ endcall(Dsp);
+
+ if(geterr() != Success) {
+ report("Could not set property WM_NAME with the returned XTextProperty.");
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)tp.value);
+ }
+
+
+ free(value);
+
+ list = (char **) NULL;
+ count = 0;
+ text_prop_return = &tp;
+ status = XCALL;
+
+ if(status == 0) {
+ delete("%s() returned zero.", TestName);
+ return;
+ } else
+ CHECK;
+
+ startcall(Dsp);
+ XSetTextProperty(Dsp, win, &tp, XA_WM_NAME);
+ endcall(Dsp);
+
+ if(geterr() != Success) {
+ report("Could not set property WM_NAME with the returned XTextProperty.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.value != (unsigned char *) NULL)
+ XFree((char*)tp.value);
+
+ CHECKPASS(10);
+
+>>ASSERTION Bad B 1
+When insufficient memory is available for the new value string, then
+a call to xname does not set any fields in the
+.S XTextProperty
+structure and returns zero.
+>>ASSERTION Good A
+The new value string returned by a call to xname can be freed with XFree.
+>>STRATEGY
+Create a XTextProperty structure using XStringListToTextProperty.
+Verify that the call did not return zero.
+Release the allocated memory using XFree.
+>>CODE
+Status status;
+char *str1 = "XtestString1_._.";
+char *str2 = "XtextString2._";
+char *str3 = "XtestString3._..";
+char *argv[3];
+int argc = 3;
+XTextProperty tp;
+
+ argv[0] = str1;
+ argv[1] = str2;
+ argv[2] = str3;
+
+ list = argv;
+ count = argc;
+ text_prop_return = &tp;
+ status = XCALL;
+
+ if(status == 0) {
+ delete("%s() returned zero.", TestName);
+ return;
+ } else
+ CHECK;
+
+ if(tp.value == NULL) {
+ report("The value component of the XTextProperty structure was NULL.");
+ FAIL;
+ } else {
+ CHECK;
+ XFree((char*)tp.value);
+ }
+
+ CHECKPASS(2);
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/strnm/strnm.m b/xc/test/xsuite/xtest/tset/CH09/strnm/strnm.m
new file mode 100644
index 000000000..71dff8cba
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/strnm/strnm.m
@@ -0,0 +1,119 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XStoreName CH09
+void
+XStoreName(display, w, window_name)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+char *window_name = "XTestDummyName";
+>>EXTERN
+#include "Xatom.h"
+>>ASSERTION Good A
+A call to xname sets the WM_NAME property for the window
+.A w
+to be of
+type
+.S STRING ,
+format
+8 and to have
+.M value
+set to the string specified by the
+.A window_name
+argument.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_NAME property for the window with XStoreName.
+Get the WM_NAME property for the window with XGetTextProperty.
+Verify that the type and format of the property are STRING and 8.
+Verify that the two names are identical.
+>>CODE
+Window win;
+int count;
+char *wname = "XTestWMName";
+XTextProperty tp;
+char **wnameret = NULL;
+XVisualInfo *vp;
+Status status;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ w = win;
+ window_name = wname;
+ XCALL;
+
+ status = XGetTextProperty(display, win, &tp, XA_WM_NAME);
+
+ if (status == False || tp.value == NULL) {
+ status = False;
+ tp.value = NULL;
+ report("Failed to get WM_NAME.");
+ FAIL;
+ } else
+ CHECK;
+
+ if (status && tp.encoding != XA_STRING) {
+ status = False;
+ report("Encoding is \"%s\", not STRING.", XGetAtomName(display, tp.encoding) );
+ FAIL;
+ } else
+ CHECK;
+
+ if (status && tp.format != 8) {
+ status = False;
+ report("Format is %d instead of 8.", tp.format);
+ FAIL;
+ } else {
+ CHECK;
+
+ status = XTextPropertyToStringList(&tp, &wnameret, &count);
+
+ if (status == False) {
+ wnameret = NULL;
+ delete("XTextPropertyToStringList returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count != 1) {
+ status = False;
+ report("WM_NAME comprises %d strings instead of 1.", count);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ if(status && strcmp(wnameret[0], wname) != 0) {
+ report("The WM_NAME property had value \"%s\" instead of \"%s\".", wnameret[0], wname);
+ FAIL;
+ } else
+ CHECK;
+
+ if (wnameret != NULL)
+ XFree((char*)wnameret);
+
+ if (tp.value != NULL)
+ XFree((char*)tp.value);
+
+ CHECKPASS(6);
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/sttrnsntfr/sttrnsntfr.m b/xc/test/xsuite/xtest/tset/CH09/sttrnsntfr/sttrnsntfr.m
new file mode 100644
index 000000000..5307e8656
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/sttrnsntfr/sttrnsntfr.m
@@ -0,0 +1,139 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetTransientForHint CH09
+
+XSetTransientForHint(display, w, prop_window)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+Window prop_window = DRW(Dsp);
+>>EXTERN
+#include "Xatom.h"
+>>ASSERTION Good A
+A call to xname sets the WM_TRANSIENT_FOR property for the window
+.A w
+to be of type
+.S WINDOW ,
+format 32 and to have value set
+to the window specified by the
+.A prop_window
+argument.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_TRANSIENT_FOR property using XSetTransientForHint.
+Obtain the WM_TRANSIENT_FOR property using XGetWindowProperty.
+Verify that the property type is WINDOW.
+Verify that the property format is 32.
+Verify that the property value was correct.
+>>CODE
+Window win, pwin;
+XVisualInfo *vp;
+Window *retwin = (Window *) NULL;
+unsigned long leftover, nitems, len;
+int actual_format;
+Atom actual_type;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+ pwin = makewin(display, vp);
+
+ w = win;
+ prop_window = pwin;
+ XCALL;
+
+ if (XGetWindowProperty(display, win, XA_WM_TRANSIENT_FOR, 0L, 1L, False,
+ AnyPropertyType, &actual_type, &actual_format, &nitems, &leftover, (unsigned char **) &retwin) != Success) {
+ delete("XGetWindowProperty() did not return Success.");
+ return;
+ } else
+ CHECK;
+
+ if(leftover != 0) {
+ report("The leftover elements numbered %lu instead of 0", leftover);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_format != 32) {
+ report("The format of the WM_TRANSIENT_FOR property was %lu instead of 32", actual_format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_type != XA_WINDOW) {
+ report("The type of the WM_TRANSIENT_FOR property was %lu instead of WINDOW (%lu)", actual_type, (long) XA_WINDOW);
+ FAIL;
+ } else
+ CHECK;
+
+ if(nitems != 1) {
+ report("The WM_TRANSIENT_FOR property comprised %ul elements instead of 1", nitems);
+ FAIL;
+ } else
+ CHECK;
+
+ if( retwin == (Window *) NULL) {
+ report("No value was set for the WM_TRANSIENT_FOR property.");
+ FAIL;
+
+ } else {
+
+ if(*retwin != pwin) {
+ report("The WM_TRANSIENT_FOR property had value %lx instead of %lx", (long) *retwin, (long) pwin);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)retwin);
+ }
+
+ CHECKPASS(6);
+
+
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Good A
+When the window specified by the
+.A w
+argument does not name a
+valid window, then a
+.S BadWindow
+error occurs.
+>>STRATEGY
+Obtain a bad window ID.
+Set the WM_TRANSIENT_FOR property for the bad window using XSetTransientForHint.
+Verify that a BadWindow error was generated.
+>>CODE BadWindow
+XVisualInfo *vp;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ prop_window = makewin(display, vp);
+
+ w = badwin(display);
+
+ XCALL;
+
+ if (geterr() == BadWindow)
+ PASS;
+ else
+ FAIL;
+>># Kieron Completed Review
+
+
+
diff --git a/xc/test/xsuite/xtest/tset/CH09/sttxtprprt/sttxtprprt.m b/xc/test/xsuite/xtest/tset/CH09/sttxtprprt/sttxtprprt.m
new file mode 100644
index 000000000..0d3b66032
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/sttxtprprt/sttxtprprt.m
@@ -0,0 +1,195 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetTextProperty CH09
+void
+XSetTextProperty(display, w, text_prop, property)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XTextProperty *text_prop = &textprop;
+Atom property = XA_WM_NAME;
+>>EXTERN
+#include "Xatom.h"
+static XTextProperty textprop = { (unsigned char *) 0, XA_STRING, 8, (unsigned long) 0 };
+>>ASSERTION Good A
+A call to xname sets the property, specified by
+the
+.A property
+argument, for the window
+.A w
+to be of data, type, format and number of items as specified by the
+.M value
+field, the
+.M encoding
+field, the
+.M format
+field, and the
+.M nitems
+field of the
+.S XTextProperty
+structure named by the
+.A text_prop
+argument.
+>>STRATEGY
+Create a window using XCreateWindow
+Set the property WM_NAME with XSetTextProperty
+Verify that the property values were all set correctly with XGetTextProperty
+>>CODE
+Window win;
+char *str[2];
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+int nitems;
+Status status;
+char **list_return;
+int count_return;
+XTextProperty rtp, tp;
+XVisualInfo *vp;
+
+ str[0] = str1;
+ str[1] = str2;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ w = win;
+ text_prop = &tp;
+ XCALL;
+
+ w = win;
+ status = XGetTextProperty(display, w, &rtp, property);
+
+ if (status == False) {
+ delete("Could not retrieve the WM_NAME property with XGetTextProperty.");
+ return;
+ } else
+ CHECK;
+
+ if(rtp.encoding != XA_STRING) {
+ report("The WM_NAME property was not of type STRING");
+ FAIL;
+ } else
+ CHECK;
+
+ if(rtp.format != 8) {
+ report("The WM_NAME property format was %d instead of 8", rtp.format);
+ FAIL;
+ } else
+ CHECK;
+
+ nitems = strlen(str1) + strlen(str2) + 2 - 1;
+ if(rtp.nitems != nitems) {
+ report("The nitems component was %lu instead of %d", rtp.nitems, nitems);
+ FAIL;
+ } else
+ CHECK;
+
+ if(XTextPropertyToStringList( &rtp, &list_return, &count_return) == False) {
+ delete("XTextPropertyToStringList() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count_return != 2) {
+ delete("XTextPropertyToStringList() count_return was %d instead of 2.", count_return);
+ return;
+ } else
+ CHECK;
+
+ if( (strcmp(str1, list_return[0]) != 0) || (strcmp(str2, list_return[1]) != 0) ) {
+ report("Value strings were:");
+ report("\"%s\" and \"%s\"", list_return[0], list_return[1]);
+ report("Instead of:");
+ report("\"%s\" and \"%s\"", str1, str2);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)rtp.value);
+ XFreeStringList(list_return);
+ CHECKPASS(8);
+
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadAtom
+>>ASSERTION Bad A
+.ER BadWindow
+>>ASSERTION Bad A
+When the
+.M format
+component of the
+.S XTextProperty
+structure named by the
+.A text_prop
+argument is other than 8, 16 or 32 then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a window with XCreateWindow.
+Create a TextPropertyStructure with format component set to {0,1,7,15,31}.
+Set the WM_NAME property with XSetTextProperty.
+Verify that a BadValue error occurs each time.
+>>EXTERN
+static int bad_ones[] = {0, 1, 7, 15, 31};
+>>CODE BadValue
+Window win;
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+char *str[2];
+XTextProperty tp;
+XVisualInfo *vp;
+int i;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ str[0] = str1;
+ str[1] = str2;
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ for(i=0; i < NELEM(bad_ones); i++) {
+ tp.format = bad_ones[i];
+ w = win;
+ text_prop = &tp;
+ XCALL;
+
+ if(geterr() != BadValue)
+ FAIL;
+ else
+ CHECK;
+ }
+
+ CHECKPASS(NELEM(bad_ones) + 1);
+
+
+>># What if the encoding or nitems fields are garbage? Servers crash?
+>># Yep, seem to. - kieron
+>># Completed Kieron Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/stwmclntmc/stwmclntmc.m b/xc/test/xsuite/xtest/tset/CH09/stwmclntmc/stwmclntmc.m
new file mode 100644
index 000000000..c5e299a63
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/stwmclntmc/stwmclntmc.m
@@ -0,0 +1,242 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWMClientMachine CH09
+void
+XSetWMClientMachine(display, w, text_prop)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XTextProperty *text_prop = &textprop;
+>>EXTERN
+#include "Xatom.h"
+static XTextProperty textprop = { (unsigned char *) 0, XA_STRING, 8, (unsigned long) 0 };
+>>ASSERTION Good A
+A call to xname sets
+the
+.S WM_CLIENT_MACHINE
+property for the window
+.A w
+to be of data, type, format and number of items as specified by the
+.M value
+field, the
+.M encoding
+field, the
+.M format
+field, and the
+.M nitems
+field of the
+.S XTextProperty
+structure named by the
+.A text_prop
+argument.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_CLIENT_MACHINE property with XSetWMClientMachine.
+Verify that the call did not return False.
+Obtain the WM_CLIENT_MACHINE text property using XGetTextProperty.
+Verify that the encoding component of the text property is correct.
+Verify that the format component of the text property is correct.
+Verify that the nitems component of the text property is correct.
+Verify that the value of the text property is correct using XTextPropertyToStringList.
+Release the allocated memory using XFree.
+>>CODE
+Window win;
+char *str1 = "Xtest Client Machine String";
+char *str[1];
+Status status;
+char **list_return;
+int count_return;
+XTextProperty tp, rtp;
+XVisualInfo *vp;
+
+ str[0] = str1;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ if(XStringListToTextProperty(str, 1, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+ w = win;
+ text_prop = &tp;
+ XCALL;
+
+ if(XGetWMClientMachine(display, win, &rtp) == False) {
+ delete("XGetWMClientMachine() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if(XGetTextProperty(display, win, &rtp, XA_WM_CLIENT_MACHINE) == False) {
+ delete("XGetTextProperty() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if(tp.encoding != rtp.encoding) {
+ report("The encoding component of the XTextProperty was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.format != rtp.format) {
+ report("The format component of the XTextProperty was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.nitems != rtp.nitems) {
+ report("The nitems component of the XTextProperty was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(XTextPropertyToStringList( &rtp, &list_return, &count_return) == False) {
+ delete("XTextPropertyToStringList() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count_return != 1) {
+ delete("XTextPropertyToStringList() count_return was %d instead of 1.", count_return);
+ return;
+ } else
+ CHECK;
+
+ if( strcmp(str1, list_return[0] ) != 0 ) {
+ report("Value string was \"%s\" instead of \"%s\"", list_return[0], str1);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)tp.value);
+ XFree((char*)rtp.value);
+ XFreeStringList(list_return);
+
+ CHECKPASS(9);
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Good A
+When the
+.M encoding
+component of the
+.S XTextProperty
+structure named by the
+.A text_prop
+argument does not name a valid atom, then a
+.S BadAtom
+error occurs.
+>>STRATEGY
+Create a window with XCreateWindow.
+Create an XTextProperty structure with XStringListToTextProperty.
+Set the encoding component of the structure to -1L.
+Set the WM_CLIENT_MACHINE property using XSetWMClientMachine.
+Verify that a BadAtom error occurred.
+>>CODE BadAtom
+Window win;
+char *str1 = "Xtest Client Machine string1";
+char *str2 = "Xtest Client Machine string_2";
+char *str[2];
+XTextProperty tp;
+XVisualInfo *vp;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ str[0] = str1;
+ str[1] = str2;
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ w = win;
+ tp.encoding = (Atom) -1L;
+ text_prop = &tp;
+
+ XCALL;
+
+ if(geterr() != BadAtom)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>>ASSERTION Bad A
+When the
+.M format
+component of the
+.S XTextProperty
+structure named by the
+.A text_prop
+argument is other than 8, 16 or 32, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a window with XCreateWindow
+Create a TextProperty structure with format {0, 1, 7, 15, 31}
+with XStringListToTextProperty.
+Set the WM_CLIENT_MACHINE property with XSetWMClientMachine.
+Verify that a BadValue error occurs.
+>>EXTERN
+static int bad_ones[] = {0, 1, 7, 15, 31};
+>>CODE BadValue
+Window win;
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+char *str[2];
+XTextProperty tp;
+XVisualInfo *vp;
+int i;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ str[0] = str1;
+ str[1] = str2;
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ for(i=0; i < NELEM(bad_ones); i++) {
+ tp.format = bad_ones[i];
+ w = win;
+ text_prop = &tp;
+ XCALL;
+
+ if(geterr() != BadValue)
+ FAIL;
+ else
+ CHECK;
+ }
+
+ CHECKPASS(NELEM(bad_ones) + 1);
+
+>># Wot no History ?
diff --git a/xc/test/xsuite/xtest/tset/CH09/stwmclrmpw/stwmclrmpw.m b/xc/test/xsuite/xtest/tset/CH09/stwmclrmpw/stwmclrmpw.m
new file mode 100644
index 000000000..7ad47d72b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/stwmclrmpw/stwmclrmpw.m
@@ -0,0 +1,151 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWMColormapWindows CH09
+Status
+XSetWMColormapWindows(display, w, colormap_windows, count)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+Window *colormap_windows = &window;
+int count = 1;
+>>EXTERN
+#include "Xatom.h"
+Window window;
+>>ASSERTION Good A
+A call to xname sets the
+.S WM_COLORMAP_WINDOWS
+property for the window
+.A w
+to be of type
+.S WINDOW ,
+format 32, and to have value set to the
+.A count
+windows specified by the
+.A colormap_windows
+argument
+and returns non-zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_COLORMAP_WINDOWS property using XSetWMColormapWindows.
+Verify that the call returned non-zero.
+Obtain the WM_COLORMAP_WINDOWS atom using XInternAtom.
+Obtain the WM_COLORMAP_WINDOWS property using XGetWindowProperty.
+Verify that the property type is WINDOW.
+Verify that the property format is 32.
+Verify that the returned number of elements was correct.
+Verify that the property value was correct.
+>>CODE
+Status status;
+Window rwin;
+XVisualInfo *vp;
+Atom xa_wm_colormap_windows;
+Atom actual_type;
+int actual_format;
+unsigned long nitems;
+unsigned long leftover;
+int nwins = 7;
+Window pwins[7];
+Window *rwins = (Window *) NULL;
+Window *wp;
+int rcnt = 0;
+int i;
+
+ for(i=0; i<nwins; i++)
+ pwins[i] = (Window) i;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+
+ colormap_windows = pwins;
+ count = nwins;
+ status = XCALL;
+
+ if(status == 0) {
+ report("%s() returned zero.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if((xa_wm_colormap_windows = XInternAtom(display, "WM_COLORMAP_WINDOWS", True)) == None) {
+ delete("The \"WM_COLORMAP_WINDOWS\" string was not interned.");
+ return;
+ } else
+ CHECK;
+
+ if(XGetWindowProperty(display, w, xa_wm_colormap_windows,
+ 0L, (long) nwins, False,
+ AnyPropertyType, &actual_type, &actual_format,
+ &nitems, &leftover, (unsigned char **) &rwins) != Success) {
+ delete("XGetWindowProperty() did not return Success.");
+ return;
+ } else
+ CHECK;
+
+ if(leftover != 0) {
+ report("The leftover elements numbered %lu instead of 0", leftover);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_format != 32) {
+ report("The format of the WM_COLORMAP_WINDOWS property was %lu instead of 32", actual_format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_type != XA_WINDOW) {
+ report("The type of the WM_COLORMAP_WINDOWS property was %lu instead of WINDOW (%lu)", actual_type, (long) XA_WINDOW);
+ FAIL;
+ } else
+ CHECK;
+
+
+ if( rwins == (Window *) NULL) {
+ report("No value was set for the WM_COLORMAP_WINDOWS property.");
+ FAIL;
+ } else {
+
+ CHECK;
+ if(nitems != nwins) {
+ report("The WM_COLORMAP_WINDOWS property comprised %ul elements instead of %d", nitems, nwins);
+ FAIL;
+ } else {
+
+ if(actual_format == 32) {
+ CHECK;
+ for(i = 0, wp = rwins; i<nwins; i++, wp++)
+ if( *wp != pwins[i]) {
+ report("Element %d of the WM_COLORMAP_WINDOWS value was %lu instead of %lu",
+ i+1, (long) *wp, (long) pwins[i]);
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+ XFree((char*)rwins);
+ }
+
+ CHECKPASS(8 + nwins);
+
+>>ASSERTION Bad B 1
+When the atom name \(lqWM_COLORMAP_WINDOWS\(rq cannot be interned, then
+a call to xname returns zero.
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Good A
+.ER BadWindow
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/stwmhnts/stwmhnts.m b/xc/test/xsuite/xtest/tset/CH09/stwmhnts/stwmhnts.m
new file mode 100644
index 000000000..3a609b719
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/stwmhnts/stwmhnts.m
@@ -0,0 +1,168 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWMHints CH09
+
+XSetWmHints(display, w, wmhints)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XWMHints *wmhints = &dummyhints;
+>>EXTERN
+#include "Xatom.h"
+#define NumPropWMHintsElements 9
+XWMHints dummyhints = { 0, 0, 0, 0, 0, 0, 0, 0, 0 };
+>>ASSERTION Good A
+A call to xname sets the WM_HINTS property
+for the window
+.A w
+to be of type
+.S WM_HINTS ,
+format 32 and to have value set
+to the hints specified in the
+.S XWMHints
+structure named by the
+.A wmhints
+argument.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_HINTS property for the window with XSetWMHints.
+Verify type and format are XA_WM_HINTS and 32, respectively.
+Verify that the property value was correctly set with XGetWindowProperty.
+>>CODE
+Window win;
+XVisualInfo *vp;
+XWMHints hints;
+XWMHints *hints_ret;
+unsigned long leftover, nitems;
+int actual_format;
+Atom actual_type;
+
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ hints.flags = AllHints;
+ hints.input = True;
+ hints.initial_state = IconicState;
+ hints.icon_pixmap = 1L;
+ hints.icon_window = 1L;
+ hints.icon_x = 13;
+ hints.icon_y = 7;
+ hints.icon_mask = 1L;
+ hints.window_group = 1L;
+
+ w = win;
+ wmhints = &hints;
+ XCALL;
+
+ if (XGetWindowProperty(display, win, XA_WM_HINTS, 0L, (long)NumPropWMHintsElements,
+ False, AnyPropertyType, &actual_type, &actual_format, &nitems, &leftover,
+ (unsigned char **)&hints_ret) != Success) {
+ delete("XGetWindowProperty() did not return Success.");
+ return;
+ } else
+ CHECK;
+
+ if(leftover != 0) {
+ report("The leftover elements numbered %lu instead of 0", leftover);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_format != 32) {
+ report("The format of the WM_HINTS property was %lu instead of 32", actual_format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_type != XA_WM_HINTS) {
+ report("The type of the WM_HINTS property was %lu instead of XA_WM_HINTS (%lu)", actual_type, XA_WM_HINTS);
+ FAIL;
+ } else
+ CHECK;
+
+ if(nitems != NumPropWMHintsElements) {
+ report("The number of elements comprising the WM_HINTS property was %lu instead of %lu.",
+ nitems, (unsigned long) NumPropWMHintsElements);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->flags != AllHints) {
+ report("The flags component was %lu instead of AllHints.", hints_ret->flags);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->input != True) {
+ report("The hints_ret component of the XWMHints structure was %d instead of True.", (Bool) hints_ret->input);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->initial_state != IconicState) {
+ report("The initial_state component of the XWMHints structure was %d instead of IconicState.",
+ hints_ret->initial_state);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_pixmap != 1L) {
+ report("The icon_pixmap component of the XWMHints structure was %lu instead of 1.", hints_ret->icon_pixmap);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_window != 1L) {
+ report("The icon_window component of the XWMHints structure was %lu instead of 1.", hints_ret->icon_window);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_x != 13) {
+ report("The icon_x component of the XWMHints structure was %d instead of 13.", hints_ret->icon_x);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_y != 7) {
+ report("The icon_y component of the XWMHints structure was %d instead of 7.", hints_ret->icon_y);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_mask != 1L) {
+ report("The icon_mask component of the XWMHints structure was %lu instead of 1.", hints_ret->icon_mask);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->window_group != 1L) {
+ report("The window_group component of the XWMHints structure was %lu instead of 1.", hints_ret->window_group);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)hints_ret);
+
+ CHECKPASS(14);
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadWindow
+>># Completed Kieron Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/stwmicnnm/stwmicnnm.m b/xc/test/xsuite/xtest/tset/CH09/stwmicnnm/stwmicnnm.m
new file mode 100644
index 000000000..70065a7c8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/stwmicnnm/stwmicnnm.m
@@ -0,0 +1,246 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWMIconName CH09
+void
+XSetWMName(display, w, text_prop)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XTextProperty *text_prop = &textprop;
+>>EXTERN
+#include "Xatom.h"
+static XTextProperty textprop = { (unsigned char *) 0, XA_STRING, 8, (unsigned long) 0 };
+>>ASSERTION Good A
+A call to xname sets the
+.S WM_ICON_NAME
+property for the window
+.A w
+to be of data, type, format and number of items as specified by the
+.M value
+field, the
+.M encoding
+field, the
+.M format
+field, and the
+.M nitems
+field of the
+.S XTextProperty
+structure named by the
+.A text_prop
+argument.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_ICON_NAME property with XSetWMIconName.
+Obtain the WM_ICON_NAME property using XGetTextProperty.
+Verify that the property format was correct.
+Verify that the property type was correct.
+Verify that the propery value was correct.
+Free allocated property with XFree.
+>>CODE
+Window win;
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+char *str[2];
+Status status;
+char **list_return;
+int count_return;
+XTextProperty tp, rtp;
+XVisualInfo *vp;
+
+ str[0] = str1;
+ str[1] = str2;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+ w = win;
+ text_prop = &tp;
+ XCALL;
+
+ if(XGetWMIconName(display, win, &rtp) == False) {
+ delete("XGetWMIconName() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if(XGetTextProperty(display, win, &rtp, XA_WM_ICON_NAME) == False) {
+ delete("XGetTextProperty() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if(tp.encoding != rtp.encoding) {
+ report("The encoding component of the XTextProperty was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.format != rtp.format) {
+ report("The format component of the XTextProperty was %d instead of %d.", rtp.format, tp.format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.nitems != rtp.nitems) {
+ report("The nitems component of the XTextProperty was %lu instead of %lu.", rtp.nitems, tp.nitems);
+ FAIL;
+ } else
+ CHECK;
+
+ if(XTextPropertyToStringList( &rtp, &list_return, &count_return) == False) {
+ delete("XTextPropertyToStringList() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count_return != 2) {
+ delete("XTextPropertyToStringList() count_return was %d instead of 2.", count_return);
+ return;
+ } else
+ CHECK;
+
+ if( (strncmp(str1, list_return[0], strlen(str1)) != 0) || (strncmp(str2, list_return[1], strlen(str2)) != 0) ) {
+ report("Value strings were:");
+ report("\"%s\" and \"%s\"", list_return[0], list_return[1]);
+ report("Instead of:");
+ report("\"%s\" and \"%s\"", str1, str2);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)tp.value);
+ XFree((char*)rtp.value);
+ XFreeStringList(list_return);
+
+ CHECKPASS(9);
+
+>>ASSERTION Bad A
+.ER BadAlloc
+>>ASSERTION Bad A
+>># Note that 0L is used as the invalid ID. This is not known to be an acceptable strategy.
+>># Cal 23/04/91. Use -1L instead, we know the top 3 bits of a valid XID
+>># are always 0. Kieron, 30/04/91
+When the
+.M encoding
+component of the
+.S XTextProperty
+named by the
+.A text_prop
+argument does not name a valid atom, then a
+.S BadAtom
+error occurs.
+>>STRATEGY
+Create a window with XCreateWindow.
+Create an XTextProperty structure with XStringListToTextProperty
+Set the encoding component of the structure to -1L.
+Set the WM_ICON_NAME property with XSetWMIconName
+Verify that a BadAtom error occurred.
+>>CODE BadAtom
+Window win;
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+char *str[2];
+XTextProperty tp;
+XVisualInfo *vp;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ str[0] = str1;
+ str[1] = str2;
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ w = win;
+ tp.encoding = (Atom) -1L;
+ text_prop = &tp;
+
+ XCALL;
+
+ if(geterr() != BadAtom)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>>ASSERTION Bad A
+When the
+.M format
+component of the
+.S XTextProperty
+structure named by the
+.A text_prop
+argument is other than 8, 16 or 32, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a window with XCreateWindow.
+Create a TextProperty structure with format {0, 1, 7, 15, 31}.
+with XStringListToTextProperty.
+Set the WM_ICON_NAME property with XSetWMIconName.
+Verify that a BadValue error occurs.
+>>EXTERN
+static int bad_ones[] = {0, 1, 7, 15, 31};
+>>CODE BadValue
+Window win;
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+char *str[2];
+XTextProperty tp;
+XVisualInfo *vp;
+int i;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ str[0] = str1;
+ str[1] = str2;
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ for(i=0; i < NELEM(bad_ones); i++) {
+ tp.format = bad_ones[i];
+ w = win;
+ text_prop = &tp;
+ XCALL;
+
+ if(geterr() != BadValue)
+ FAIL;
+ else
+ CHECK;
+ }
+
+ CHECKPASS(NELEM(bad_ones) + 1);
+
diff --git a/xc/test/xsuite/xtest/tset/CH09/stwmnm/stwmnm.m b/xc/test/xsuite/xtest/tset/CH09/stwmnm/stwmnm.m
new file mode 100644
index 000000000..c974f15af
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/stwmnm/stwmnm.m
@@ -0,0 +1,238 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWMName CH09
+void
+XSetWMName(display, w, text_prop)
+Display *display = Dsp;
+Window w = DRW(display);
+XTextProperty *text_prop = &textprop;
+>>EXTERN
+#include "Xatom.h"
+static XTextProperty textprop = { (unsigned char *) 0, XA_STRING, 8, (unsigned long) 0 };
+>>ASSERTION Good A
+A call to xname sets the
+.S WM_NAME
+property for the window
+.A w
+to be of data, type, format and number of items as specified by the
+.M value
+field, the
+.M encoding
+field, the
+.M format
+field, and the
+.M nitems
+field of the
+.S XTextProperty
+structure named by the
+.A text_prop
+argument.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_NAME property with XSetWMName.
+Obtain the WM_NAME property using XGetTextProperty.
+Verify that the format, encoding and value are correct.
+>>CODE
+Window win;
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+char *str[2];
+Status status;
+char **list_return;
+int count_return;
+XTextProperty tp, rtp;
+XVisualInfo *vp;
+
+ str[0] = str1;
+ str[1] = str2;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ w = win;
+ text_prop = &tp;
+ XCALL;
+
+ if(XGetTextProperty(display, win, &rtp, XA_WM_NAME) == False) {
+ delete("XGetTextProperty() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if(tp.encoding != rtp.encoding) {
+ report("The encoding component of the XTextProperty was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.format != rtp.format) {
+ report("The format component of the XTextProperty was %d instead of %d.", rtp.format, tp.format );
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.nitems != rtp.nitems) {
+ report("The nitems component of the XTextProperty was %lu instead of %lu.", rtp.nitems, tp.nitems);
+ FAIL;
+ } else
+ CHECK;
+
+ if(XTextPropertyToStringList( &rtp, &list_return, &count_return) == False) {
+ delete("XTextPropertyToStringList() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count_return != 2) {
+ delete("XTextPropertyToStringList() count_return was %d instead of 2.", count_return);
+ return;
+ } else
+ CHECK;
+
+ if( (strncmp(str1, list_return[0], strlen(str1)) != 0) || (strncmp(str2, list_return[1], strlen(str2)) != 0) ) {
+ report("Value strings were:");
+ report("\"%s\" and \"%s\"", list_return[0], list_return[1]);
+ report("Instead of:");
+ report("\"%s\" and \"%s\"", str1, str2);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)tp.value);
+ XFree((char*)rtp.value);
+ XFreeStringList(list_return);
+
+ CHECKPASS(8);
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Bad A
+>># Note that 0L is used as the invalid ID. This is not known to be an acceptable strategy.
+>># Cal 23/04/91. Use -1L instead, we know the top 3 bits of a valid XID
+>># are always 0. Kieron, 30/04/91
+When the
+.M encoding
+component of the
+.S XTextProperty
+named by the
+.A text_prop
+argument does not name a valid atom, then a
+.S BadAtom
+error occurs.
+>>STRATEGY
+Create a window with XCreateWindow.
+Create an XTextProperty structure with XStringListToTextProperty
+Set the encoding component of the structure to -1L.
+Set the WM_NAME property with XSetWMName
+Verify that a BadAtom error occurred.
+>>CODE BadAtom
+Window win;
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+char *str[2];
+XTextProperty tp;
+XVisualInfo *vp;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ str[0] = str1;
+ str[1] = str2;
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ w = win;
+ tp.encoding = (Atom) -1L;
+ text_prop = &tp;
+
+ XCALL;
+
+ if(geterr() != BadAtom)
+ FAIL;
+ else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER BadWindow
+>>ASSERTION Bad A
+When the
+.M format
+component of the
+.S XTextProperty
+structure named by the
+.A text_prop
+argument is other than 8, 16 or 32, then a
+.S BadValue
+error occurs.
+>>STRATEGY
+Create a window with XCreateWindow
+Create a XTextProperty structure with format {0, 1, 7, 15, 31}
+with XStringListToTextProperty.
+Set the WM_NAME property with XSetWMName.
+Verify that a BadValue error occurs.
+>>EXTERN
+static int bad_ones[] = {0, 1, 7, 15, 31};
+>>CODE BadValue
+Window win;
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+char *str[2];
+XTextProperty tp;
+XVisualInfo *vp;
+int i;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ str[0] = str1;
+ str[1] = str2;
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ for(i=0; i < NELEM(bad_ones); i++) {
+ tp.format = bad_ones[i];
+ w = win;
+ text_prop = &tp;
+ XCALL;
+
+ if(geterr() != BadValue)
+ FAIL;
+ else
+ CHECK;
+ }
+
+ CHECKPASS(NELEM(bad_ones) + 1);
+
diff --git a/xc/test/xsuite/xtest/tset/CH09/stwmnrmlhn/stwmnrmlhn.m b/xc/test/xsuite/xtest/tset/CH09/stwmnrmlhn/stwmnrmlhn.m
new file mode 100644
index 000000000..8e795c623
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/stwmnrmlhn/stwmnrmlhn.m
@@ -0,0 +1,211 @@
+/*
+ * Copyright 1990, 1991.y the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWMNormalHints CH09
+void
+XSetWMNormalHints(display, w, hints)
+Display *display = Dsp;
+Window w = DRW(display);
+XSizeHints *hints = &sizehints_0;
+>>EXTERN
+#include "Xatom.h"
+#define NewNumPropSizeElements 18 /* ICCCM v. 1 */
+static XSizeHints sizehints_0 = { PAllHints,0,0,0,0,0,0,0,0,0,0, {0,0}, {0,0}, 0,0,0};
+static XSizeHints sizehints_1 = { PAllHints,1,2,3,4,5,6,7,8,9,10, {11,12}, {13,14}, 15, 16, 17};
+>>ASSERTION Good A
+A call to xname sets the
+.S WM_NORMAL_HINTS
+property for the window
+.A w
+to be of type
+.S WM_SIZE_HINTS ,
+format of 32 and to have value set
+to the hints in the
+.S XSizeHints
+structure named by the
+.A hints
+argument.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_NORMAL_HINTS property with XSetWMNormalHints.
+Obtain the value, type and format of the WM_NORMAL_HINTS property using XGetWindowProperty.
+Verify that the type is WM_SIZE_HINTS.
+Verify that the format is 32.
+Verify that the value is identical to that value set by XSetWMNormalHints.
+>>CODE
+Window win;
+XVisualInfo *vp;
+Atom rtype;
+int rformat;
+unsigned long ritems, rbytes, *uls = NULL;
+XSizeHints pp;
+int i;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ w = win;
+ hints = &sizehints_1;
+ XCALL;
+
+ if( XGetWindowProperty(display, win, XA_WM_NORMAL_HINTS, 0L,
+ (long) NewNumPropSizeElements, False,
+ AnyPropertyType, &rtype, &rformat, &ritems, &rbytes,
+ (unsigned char **) &uls) != Success ) {
+ delete("XGetWindowProperty() did not return Success.");
+ return;
+ } else
+ CHECK;
+
+ if( rtype != XA_WM_SIZE_HINTS ) {
+ report("WM_NORMAL_HINTS property was type %lu instead of XA_WM_SIZE_HINTS (%lu)",
+ (unsigned long) rtype, (unsigned long) XA_WM_SIZE_HINTS);
+ FAIL;
+ } else
+ CHECK;
+
+ if( rformat != 32 ) {
+ report("WM_NORMAL_HINTS property was format %d instead of 32.", rformat);
+ FAIL;
+ } else
+ CHECK;
+
+ /* unpack from the array of unsigned longs into pp */
+ pp.flags = uls[i=0];
+
+ pp.x = (int)uls[++i]; /* obsolete for new window mgrs, but clients */
+ pp.y = (int)uls[++i];
+ pp.width = (int)uls[++i];
+ pp.height = (int)uls[++i]; /* should set so old wm's don't mess up */
+
+ pp.min_width = (int)uls[++i]; pp.min_height = (int)uls[++i];
+ pp.max_width = (int)uls[++i]; pp.max_height = (int)uls[++i];
+ pp.width_inc = (int)uls[++i]; pp.height_inc = (int)uls[++i];
+ pp.min_aspect.x = (int)uls[++i]; pp.min_aspect.y = (int)uls[++i];
+ pp.max_aspect.x = (int)uls[++i]; pp.max_aspect.y = (int)uls[++i];
+
+ pp.base_width = (int)uls[++i]; /* added by ICCCM version 1 */
+ pp.base_height = (int)uls[++i]; /* added by ICCCM version 1 */
+ pp.win_gravity = (int)uls[++i]; /* added by ICCCM version 1 */
+
+ if(pp.flags != PAllHints) {
+ report("The flags component of the XSizeHints structure was %lu instead of PAllHints (%ld).", pp.flags, PAllHints);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.x != 1) {
+ report("The x component of the XSizeHints structure was %d instead of 1.", pp.x);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.y != 2) {
+ report("The y component of the XSizeHints structure was %d instead of 2.", pp.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.width != 3) {
+ report("The width component of the XSizeHints structure was %d instead of 3.", pp.width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.height != 4) {
+ report("The height component of the XSizeHints structure was %d instead of 4.", pp.height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.min_width != 5) {
+ report("The min_width component of the XSizeHints structure was %d instead of 5.", pp.min_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.min_height != 6) {
+ report("The min_height component of the XSizeHints structure was %d instead of 6.", pp.min_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.max_width != 7) {
+ report("The max_width component of the XSizeHints structure was %d instead of 7.", pp.max_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.max_height != 8) {
+ report("The max_height component of the XSizeHints structure was %d instead of 8.", pp.max_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.width_inc != 9) {
+ report("The width_inc component of the XSizeHints structure was %d instead of 9.", pp.width_inc);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.height_inc != 10) {
+ report("The height_inc component of the XSizeHints structure was %d instead of 10.", pp.height_inc);
+ FAIL;
+ } else
+ CHECK;
+
+ if((pp.min_aspect.x != 11) || (pp.min_aspect.y != 12)){
+ report("The min_aspect components of the XSizeHints structure were %d, %d instead of 11, 12.",
+ pp.min_aspect.x, pp.min_aspect.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if((pp.max_aspect.x != 13) || (pp.max_aspect.y != 14)){
+ report("The max_aspect components of the XSizeHints structure were %d, %d instead of 13, 14.",
+ pp.max_aspect.x, pp.max_aspect.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.base_width != 15) {
+ report("The base_width component of the XSizeHints structure was %d instead of 15.", pp.base_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.base_height != 16) {
+ report("The base_height component of the XSizeHints structure was %d instead of 16.", pp.base_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.win_gravity != 17) {
+ report("The win_gravity component of the XSizeHints structure was %d instead of 17", pp.win_gravity);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)uls);
+ CHECKPASS(19);
+
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Completed Reviewed (& mucked up)
diff --git a/xc/test/xsuite/xtest/tset/CH09/stwmprprts/Test1.c b/xc/test/xsuite/xtest/tset/CH09/stwmprprts/Test1.c
new file mode 100644
index 000000000..9f7503687
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/stwmprprts/Test1.c
@@ -0,0 +1,100 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include <stdlib.h>
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+
+extern Display *Dsp;
+
+/*
+ * Dummy declarations which are normally inserted by mc.
+ * Needed to prevent linkstart.c being included.
+ */
+char *TestName = "XSetWMProperties";
+int tet_thistest;
+struct tet_testlist tet_testlist[] = {
+ NULL, 0
+};
+int ntests = sizeof(tet_testlist)/sizeof(struct tet_testlist)-1;
+
+tet_main(argc, argv, envp)
+int argc;
+char *argv[];
+char *envp[];
+{
+int pass = 0, fail = 0;
+char *res_name;
+Window win;
+XVisualInfo *vp;
+XClassHint class_hints;
+XClassHint rclass_hints;
+
+ exec_startup();
+ tpstartup();
+
+ trace("Exec'd file ./Test1.");
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(Dsp, vp);
+
+ class_hints.res_name = NULL;
+ class_hints.res_class = "XTest_Undefined.";
+
+ if( (res_name = (char *) getenv("RESOURCE_NAME")) == NULL) {
+ delete("RESOURCE_NAME environment variable is not set.");
+ return;
+ } else
+ CHECK;
+
+ startcall(Dsp);
+ XSetWMProperties( Dsp, win, (XTextProperty *) NULL, (XTextProperty *) NULL, (char **) NULL, 0, (XSizeHints *) NULL, (XWMHints *) NULL, &class_hints);
+ endcall(Dsp);
+
+ if (geterr() != Success) {
+ report("Got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ if( XGetClassHint(Dsp, win, &rclass_hints) == 0 ) {
+ delete("XGetClassHints returned zero.");
+ return;
+ } else
+ CHECK;
+
+ if(rclass_hints.res_name == NULL) {
+ report("The res_name component of the returned XClassHint structure was NULL.");
+ FAIL;
+ } else {
+ CHECK;
+ if( strcmp(rclass_hints.res_name, res_name) != 0 ) {
+ report("The res_name component of the returned XClassHint structure was \"%s\" instead of \"%s\".", rclass_hints.res_name, res_name);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(5);
+ tpcleanup();
+ exec_cleanup();
+}
diff --git a/xc/test/xsuite/xtest/tset/CH09/stwmprprts/Test2.c b/xc/test/xsuite/xtest/tset/CH09/stwmprprts/Test2.c
new file mode 100644
index 000000000..91c19a2c3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/stwmprprts/Test2.c
@@ -0,0 +1,102 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include <stdlib.h>
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+
+
+extern Display *Dsp;
+
+/*
+ * Dummy declarations which are normally inserted by mc.
+ * Needed to prevent linkstart.c being included.
+ */
+char *TestName = "XSetWMProperties";
+int tet_thistest;
+struct tet_testlist tet_testlist[] = {
+ NULL, 0
+};
+int ntests = sizeof(tet_testlist)/sizeof(struct tet_testlist)-1;
+
+tet_main(argc, argv, envp)
+int argc;
+char *argv[];
+char *envp[];
+{
+int pass = 0, fail = 0;
+char *res_name = "Test2";
+Window win;
+XVisualInfo *vp;
+XClassHint class_hints;
+XClassHint rclass_hints;
+
+ exec_startup();
+ tpstartup();
+
+ trace("Exec'd file ./Test2.");
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(Dsp, vp);
+
+ class_hints.res_name = NULL;
+ class_hints.res_class = "XTest_Undefined.";
+
+ if( getenv("RESOURCE_NAME") != (char *)NULL) {
+ delete("RESOURCE_NAME environment variable was set to \"%s\" instead of being undefined.");
+ return;
+ } else
+ CHECK;
+
+ startcall(Dsp);
+ XSetWMProperties( Dsp, win, (XTextProperty *) NULL, (XTextProperty *) NULL, argv, argc, (XSizeHints *) NULL, (XWMHints *) NULL, &class_hints);
+ endcall(Dsp);
+
+ if (geterr() != Success) {
+ report("Got %s, Expecting Success", errorname(geterr()));
+ FAIL;
+ } else
+ CHECK;
+
+ if( XGetClassHint(Dsp, win, &rclass_hints) == 0 ) {
+ delete("XGetClassHints returned zero.");
+ return;
+ } else
+ CHECK;
+
+ if(rclass_hints.res_name == NULL) {
+ report("The res_name component of the returned XClassHint structure was NULL.");
+ FAIL;
+ } else {
+ CHECK;
+ if( strcmp(rclass_hints.res_name, res_name) != 0 ) {
+ report("The res_name component of the returned XClassHint structure was \"%s\" instead of \"%s\".", rclass_hints.res_name, res_name);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(5);
+ tpcleanup();
+ exec_cleanup();
+
+
+}
diff --git a/xc/test/xsuite/xtest/tset/CH09/stwmprprts/stwmprprts.m b/xc/test/xsuite/xtest/tset/CH09/stwmprprts/stwmprprts.m
new file mode 100644
index 000000000..acd86abd1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/stwmprprts/stwmprprts.m
@@ -0,0 +1,904 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWMProperties CH09
+void
+XSetWMProperties(display, w, window_name, icon_name, argv, argc, normal_hints, wm_hints, class_hints)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XTextProperty *window_name = (XTextProperty *) NULL;
+XTextProperty *icon_name = (XTextProperty *) NULL;
+char **argv = (char **) NULL;
+int argc = 0;
+XSizeHints *normal_hints = (XSizeHints *) NULL;
+XWMHints *wm_hints = (XWMHints *) NULL;
+XClassHint *class_hints = (XClassHint *) NULL;
+>>MAKE
+>>#
+>>#
+>># Plant some rules in the Makefile to construct
+>># stand-alone executables Test1 and Test2 to allow the setting
+>># of environment variables.
+>>#
+>># Cal 14/6/91
+>>#
+#
+# The following lines are copied from the .m file by mc
+# under control of the >>MAKE directive
+# to create rules for the executable files Test1 and Test2.
+#
+AUXFILES=Test1 Test2
+AUXCLEAN=Test1.o Test1 Test2.o Test2
+
+all: Test
+
+Test1 : Test1.o $(LIBS) $(TCMCHILD)
+ $(CC) $(LDFLAGS) -o $@ Test1.o $(TCMCHILD) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+Test2 : Test2.o $(LIBS) $(TCMCHILD)
+ $(CC) $(LDFLAGS) -o $@ Test2.o $(TCMCHILD) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+#
+# End of section copied from the .m file.
+#
+>>#
+>>#
+>>#
+>>EXTERN
+#define NewNumPropSizeElements 18 /* ICCCM v. 1 */
+#define NumPropWMHintsElements 9
+#include "Xatom.h"
+static XSizeHints sizehints = { PAllHints,1,2,3,4,5,6,7,8,9,10, {11,12}, {13,14}, 15, 16, 17};
+static XSizeHints sizehints_1 = { PAllHints,1,2,3,4,5,6,7,8,9,10, {11,12}, {13,14}, 15, 16, 17};
+>>ASSERTION Good A
+When the
+.A window_name
+argument is non-NULL, then a call to xname
+sets the WM_NAME property for the window
+.A w
+to be of data, type, format and number of items as specified by the
+.M value
+field, the
+.M encoding
+field, the
+.M format
+field, and the
+.M nitems
+field of the
+.S XTextProperty
+structure named by the
+.A window_name
+argument.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_NAME property with XSetWMProperties.
+Obtain the WM_NAME property using XGetTextProperty.
+Verify that the format, encoding and value are correct.
+>>CODE
+Window win;
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+char *str[2];
+Status status;
+char **list_return;
+int count_return;
+XTextProperty tp, rtp;
+XVisualInfo *vp;
+
+ str[0] = str1;
+ str[1] = str2;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+
+ w = win;
+ window_name = &tp;
+ XCALL;
+
+ if(XGetTextProperty(display, win, &rtp, XA_WM_NAME) == False) {
+ delete("XGetTextProperty() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if(tp.encoding != rtp.encoding) {
+ report("The encoding component of the XTextProperty was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.format != rtp.format) {
+ report("The format component of the XTextProperty was %d instead of %d.", rtp.format, tp.format );
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.nitems != rtp.nitems) {
+ report("The nitems component of the XTextProperty was %lu instead of %lu.", rtp.nitems, tp.nitems);
+ FAIL;
+ } else
+ CHECK;
+
+ if(XTextPropertyToStringList( &rtp, &list_return, &count_return) == False) {
+ delete("XTextPropertyToStringList() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count_return != 2) {
+ delete("XTextPropertyToStringList() count_return was %d instead of 2.", count_return);
+ return;
+ } else
+ CHECK;
+
+ if( (strncmp(str1, list_return[0], strlen(str1)) != 0) || (strncmp(str2, list_return[1], strlen(str2)) != 0) ) {
+ report("Value strings were:");
+ report("\"%s\" and \"%s\"", list_return[0], list_return[1]);
+ report("Instead of:");
+ report("\"%s\" and \"%s\"", str1, str2);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)tp.value);
+ XFree((char*)rtp.value);
+ XFreeStringList(list_return);
+
+ CHECKPASS(8);
+
+>>ASSERTION Good A
+When the
+.A icon_name
+argument is non-NULL, then
+a call to xname sets the WM_ICON_NAME
+property for the window
+.A w
+to be of data, type, format and number of items as specified by the
+.M value
+field, the
+.M encoding
+field, the
+.M format
+field, and the
+.M nitems
+field of the
+.S XTextProperty
+structure named by the
+.A icon_name
+argument.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_ICON_NAME property with XSetWMProperties.
+Obtain the WM_ICON_NAME property using XGetTextProperty.
+Verify that the property format was correct.
+Verify that the property type was correct.
+Verify that the propery value was correct.
+Free allocated property with XFree.
+>>CODE
+Window win;
+char *str1 = "Xtest test string1";
+char *str2 = "Xtest test string2";
+char *str[2];
+Status status;
+char **list_return;
+int count_return;
+XTextProperty tp, rtp;
+XVisualInfo *vp;
+
+ str[0] = str1;
+ str[1] = str2;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ if(XStringListToTextProperty(str, 2, &tp) == False) {
+ delete("XStringListToTextProperty() Failed.");
+ return;
+ } else
+ CHECK;
+ w = win;
+ icon_name = &tp;
+ XCALL;
+
+ if(XGetWMIconName(display, win, &rtp) == False) {
+ delete("XGetWMIconName() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if(XGetTextProperty(display, win, &rtp, XA_WM_ICON_NAME) == False) {
+ delete("XGetTextProperty() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if(tp.encoding != rtp.encoding) {
+ report("The encoding component of the XTextProperty was incorrect.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.format != rtp.format) {
+ report("The format component of the XTextProperty was %d instead of %d.", rtp.format, tp.format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(tp.nitems != rtp.nitems) {
+ report("The nitems component of the XTextProperty was %lu instead of %lu.", rtp.nitems, tp.nitems);
+ FAIL;
+ } else
+ CHECK;
+
+ if(XTextPropertyToStringList( &rtp, &list_return, &count_return) == False) {
+ delete("XTextPropertyToStringList() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count_return != 2) {
+ delete("XTextPropertyToStringList() count_return was %d instead of 2.", count_return);
+ return;
+ } else
+ CHECK;
+
+ if( (strncmp(str1, list_return[0], strlen(str1)) != 0) || (strncmp(str2, list_return[1], strlen(str2)) != 0) ) {
+ report("Value strings were:");
+ report("\"%s\" and \"%s\"", list_return[0], list_return[1]);
+ report("Instead of:");
+ report("\"%s\" and \"%s\"", str1, str2);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)tp.value);
+ XFree((char*)rtp.value);
+ XFreeStringList(list_return);
+
+ CHECKPASS(9);
+
+>>ASSERTION Good A
+When the
+.A argv
+argument is non-NULL, then a call to xname
+sets the WM_COMMAND property for the window
+.A w
+to the
+.A argv
+argument.
+>>STRATEGY
+Create a window using XCreateWindow.
+Set the WM_COMMAND property using XSetWMProperties.
+Obtain the value of the WM_COMMAND property using XGetTextProperty.
+Verify that the number and value of the returned strings is correct.
+Release the allocated memory using XFreeStringList.
+>>CODE
+XVisualInfo *vp;
+char *nullstr = "<NULL>";
+char **strpp, *strp;
+char *str1 = "XTest string 1";
+char *str2 = "XTest string 2";
+char *prop[2];
+char **rstrings = (char**) NULL;
+int rcount = 0;
+int i;
+XTextProperty rtp;
+Status status;
+char **list_return;
+int count_return;
+int len;
+
+ prop[0] = str1;
+ prop[1] = str2;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+ argv = prop;
+ argc = 2;
+ XCALL;
+
+ if(XGetTextProperty(display, w, &rtp, XA_WM_COMMAND) == False) {
+ delete("XGetTextProperty() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if(rtp.encoding != XA_STRING ) {
+ report("The encoding component of the XTextProperty was %lu instead of STRING (%lu).",
+ (unsigned long)rtp.encoding, (unsigned long)XA_STRING);
+ FAIL;
+ } else
+ CHECK;
+
+ if(rtp.format != 8) {
+ report("The format component of the XTextProperty was %d instead of %d.", rtp.format, 8 );
+ FAIL;
+ } else
+ CHECK;
+
+ len = strlen(str1) + 1 + strlen(str2) + 1;
+
+ if(rtp.nitems != len) {
+ report("The nitems component of the XTextProperty was %lu instead of %lu.", rtp.nitems, len);
+ FAIL;
+ } else
+ CHECK;
+
+ /*
+ * Ignore final <NUL> if present since UNIX WM_COMMAND is nul-terminated, unlike
+ * the nul-separated text properties.
+ * Cal - 7/6/91
+ */
+ if (rtp.value[rtp.nitems - 1] == '\0') rtp.nitems--;
+
+
+ if(XTextPropertyToStringList( &rtp, &list_return, &count_return) == False) {
+ delete("XTextPropertyToStringList() returned False.");
+ return;
+ } else
+ CHECK;
+
+ if (count_return != argc) {
+ delete("XTextPropertyToStringList() count_return was %d instead of %d.", count_return, argc);
+ return;
+ } else
+ CHECK;
+
+ if( (strcmp(str1, list_return[0]) != 0) || (strcmp(str2, list_return[1]) != 0) ) {
+ report("Value strings were:");
+ report("\"%s\" and \"%s\"", list_return[0], list_return[1]);
+ report("Instead of:");
+ report("\"%s\" and \"%s\"", str1, str2);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)rtp.value);
+ XFreeStringList(list_return);
+
+ CHECKPASS(7);
+
+>>ASSERTION Good A
+When the
+.A normal_hints
+argument is non-NULL, then a call to xname
+sets the WM_NORMAL_HINTS property for the window
+.A w
+to be of type
+.S WM_SIZE_HINTS ,
+format 32 and to have value set
+to the
+.A normal_hints
+argument.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_NORMAL_HINTS property with XSetWMProperties.
+Obtain the value, type and format of the WM_NORMAL_HINTS property using XGetWindowProperty.
+Verify that the type is WM_SIZE_HINTS.
+Verify that the format is 32.
+Verify that the value is identical to that value set by XSetWMNormalHints.
+>>CODE
+Window win;
+XVisualInfo *vp;
+Atom rtype;
+int rformat;
+unsigned long ritems, rbytes, *uls = NULL;
+XSizeHints pp;
+int i;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ w = win;
+ normal_hints = &sizehints_1;
+ XCALL;
+
+ if( XGetWindowProperty(display, win, XA_WM_NORMAL_HINTS, 0L,
+ (long) NewNumPropSizeElements, False,
+ AnyPropertyType, &rtype, &rformat, &ritems, &rbytes,
+ (unsigned char **) &uls) != Success ) {
+ delete("XGetWindowProperty() did not return Success.");
+ return;
+ } else
+ CHECK;
+
+ if( rtype != XA_WM_SIZE_HINTS ) {
+ report("WM_NORMAL_HINTS property was type %lu instead of XA_WM_SIZE_HINTS (%lu)",
+ (unsigned long) rtype, (unsigned long) XA_WM_SIZE_HINTS);
+ FAIL;
+ } else
+ CHECK;
+
+ if( rformat != 32 ) {
+ report("WM_NORMAL_HINTS property was format %d instead of 32.", rformat);
+ FAIL;
+ } else
+ CHECK;
+
+ /* unpack from the array of unsigned longs into pp */
+ pp.flags = uls[i=0];
+
+ pp.x = (int)uls[++i]; /* obsolete for new window mgrs, but clients */
+ pp.y = (int)uls[++i];
+ pp.width = (int)uls[++i];
+ pp.height = (int)uls[++i]; /* should set so old wm's don't mess up */
+
+ pp.min_width = (int)uls[++i]; pp.min_height = (int)uls[++i];
+ pp.max_width = (int)uls[++i]; pp.max_height = (int)uls[++i];
+ pp.width_inc = (int)uls[++i]; pp.height_inc = (int)uls[++i];
+ pp.min_aspect.x = (int)uls[++i]; pp.min_aspect.y = (int)uls[++i];
+ pp.max_aspect.x = (int)uls[++i]; pp.max_aspect.y = (int)uls[++i];
+
+ pp.base_width = (int)uls[++i]; /* added by ICCCM version 1 */
+ pp.base_height = (int)uls[++i]; /* added by ICCCM version 1 */
+ pp.win_gravity = (int)uls[++i]; /* added by ICCCM version 1 */
+
+ if(pp.flags != PAllHints) {
+ report("The flags component of the XSizeHints structure was %lu instead of PAllHints (%ld).", pp.flags, PAllHints);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.x != 1) {
+ report("The x component of the XSizeHints structure was %d instead of 1.", pp.x);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.y != 2) {
+ report("The y component of the XSizeHints structure was %d instead of 2.", pp.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.width != 3) {
+ report("The width component of the XSizeHints structure was %d instead of 3.", pp.width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.height != 4) {
+ report("The height component of the XSizeHints structure was %d instead of 4.", pp.height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.min_width != 5) {
+ report("The min_width component of the XSizeHints structure was %d instead of 5.", pp.min_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.min_height != 6) {
+ report("The min_height component of the XSizeHints structure was %d instead of 6.", pp.min_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.max_width != 7) {
+ report("The max_width component of the XSizeHints structure was %d instead of 7.", pp.max_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.max_height != 8) {
+ report("The max_height component of the XSizeHints structure was %d instead of 8.", pp.max_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.width_inc != 9) {
+ report("The width_inc component of the XSizeHints structure was %d instead of 9.", pp.width_inc);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.height_inc != 10) {
+ report("The height_inc component of the XSizeHints structure was %d instead of 10.", pp.height_inc);
+ FAIL;
+ } else
+ CHECK;
+
+ if((pp.min_aspect.x != 11) || (pp.min_aspect.y != 12)){
+ report("The min_aspect components of the XSizeHints structure were %d, %d instead of 11, 12.",
+ pp.min_aspect.x, pp.min_aspect.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if((pp.max_aspect.x != 13) || (pp.max_aspect.y != 14)){
+ report("The max_aspect components of the XSizeHints structure were %d, %d instead of 13, 14.",
+ pp.max_aspect.x, pp.max_aspect.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.base_width != 15) {
+ report("The base_width component of the XSizeHints structure was %d instead of 15.", pp.base_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.base_height != 16) {
+ report("The base_height component of the XSizeHints structure was %d instead of 16.", pp.base_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.win_gravity != 17) {
+ report("The win_gravity component of the XSizeHints structure was %d instead of 17", pp.win_gravity);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)uls);
+ CHECKPASS(19);
+
+>>ASSERTION Good A
+When the
+.A wm_hints
+argument is non-NULL, then a call to xname
+sets the WM_HINTS property for the window
+.A w
+to be of type
+.S WM_HINTS ,
+format 32 and to have value set
+to the
+.A wm_hints
+argument.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_HINTS property for the window with XSetWMProperties.
+Verify type and format are XA_WM_HINTS and 32, respectively.
+Verify that the property value was correctly set with XGetWindowProperty.
+>>CODE
+Window win;
+XVisualInfo *vp;
+XWMHints hints;
+XWMHints *hints_ret;
+unsigned long leftover, nitems;
+int actual_format;
+Atom actual_type;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ hints.flags = AllHints;
+ hints.input = True;
+ hints.initial_state = IconicState;
+ hints.icon_pixmap = 1L;
+ hints.icon_window = 1L;
+ hints.icon_x = 13;
+ hints.icon_y = 7;
+ hints.icon_mask = 1L;
+ hints.window_group = 1L;
+
+ w = win;
+ wm_hints = &hints;
+ XCALL;
+
+ if (XGetWindowProperty(display, win, XA_WM_HINTS, 0L, (long)NumPropWMHintsElements,
+ False, AnyPropertyType, &actual_type, &actual_format, &nitems, &leftover,
+ (unsigned char **)&hints_ret) != Success) {
+ delete("XGetWindowProperty() did not return Success.");
+ return;
+ } else
+ CHECK;
+
+ if(leftover != 0) {
+ report("The leftover elements numbered %lu instead of 0", leftover);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_format != 32) {
+ report("The format of the WM_HINTS property was %lu instead of 32", actual_format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_type != XA_WM_HINTS) {
+ report("The type of the WM_HINTS property was %lu instead of XA_WM_HINTS (%lu)", actual_type, XA_WM_HINTS);
+ FAIL;
+ } else
+ CHECK;
+
+ if(nitems != NumPropWMHintsElements) {
+ report("The number of elements comprising the WM_HINTS property was %lu instead of %lu.",
+ actual_type, (unsigned long) NumPropWMHintsElements);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->flags != AllHints) {
+ report("The flags component was %lu instead of AllHints.", hints_ret->flags);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->input != True) {
+ report("The hints_ret component of the XWMHints structure was %d instead of True.", (Bool) hints_ret->input);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->initial_state != IconicState) {
+ report("The initial_state component of the XWMHints structure was %d instead of IconicState.",
+ hints_ret->initial_state);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_pixmap != 1L) {
+ report("The icon_pixmap component of the XWMHints structure was %lu instead of 1.", hints_ret->icon_pixmap);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_window != 1L) {
+ report("The icon_window component of the XWMHints structure was %lu instead of 1.", hints_ret->icon_window);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_x != 13) {
+ report("The icon_x component of the XWMHints structure was %d instead of 13.", hints_ret->icon_x);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_y != 7) {
+ report("The icon_y component of the XWMHints structure was %d instead of 7.", hints_ret->icon_y);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->icon_mask != 1L) {
+ report("The icon_mask component of the XWMHints structure was %lu instead of 1.", hints_ret->icon_mask);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hints_ret->window_group != 1L) {
+ report("The window_group component of the XWMHints structure was %lu instead of 1.", hints_ret->window_group);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)hints_ret);
+
+ CHECKPASS(14);
+
+
+>>ASSERTION Good A
+When the
+.A class_hints
+argument is non-NULL, then a call to xname
+sets the WM_CLASS property for the window
+.A w
+to the
+.A class_hints
+argument.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_CLASS property for the window using XSetWMProperites.
+Obtain the value type and format of the WM_CLASS property using XGetWindowProperty.
+Verify that the format is 8.
+Verify that the type is STRING.
+Verify that the value is correct.
+>>CODE
+Window win;
+XVisualInfo *vp;
+XClassHint classhint, retchint;
+int reslen;
+char *propp = NULL, *s;
+unsigned long leftover, nitems, len;
+int actual_format;
+Atom actual_type;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ classhint.res_name = "XTestResName";
+ classhint.res_class = "XTestClassName";
+
+ reslen = strlen(classhint.res_name);
+ len = reslen + 1 + strlen(classhint.res_class) + 1;
+
+ w = win;
+ class_hints = &classhint;
+ XCALL;
+
+ if (XGetWindowProperty(display, win, XA_WM_CLASS, 0L, len, False,
+ AnyPropertyType, &actual_type, &actual_format, &nitems, &leftover,
+ (unsigned char **)&propp) != Success) {
+ delete("XGetWindowProperty() did not return Success.");
+ return;
+ } else
+ CHECK;
+
+ if(leftover != 0) {
+ report("The leftover elements numbered %lu instead of 0", leftover);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_format != 8) {
+ report("The format of the WM_HINTS property was %lu instead of 8", actual_format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_type != XA_STRING) {
+ report("The type of the WM_CLASS property was %lu instead of STRING (%lu).", actual_type, (unsigned long) XA_STRING);
+ FAIL;
+ } else
+ CHECK;
+
+ if(propp == NULL) {
+
+ report("No value was set for the WM_CLASS property.");
+ FAIL;
+
+ } else {
+
+ if(strcmp(propp, classhint.res_name) != 0) {
+ report("The res_name component of the XClassHint structure was \"%s\" instead of \"%s\"", propp, classhint.res_name);
+ FAIL;
+ } else
+ CHECK;
+
+ if(strcmp(s = propp+1+reslen, classhint.res_class) != 0) {
+ report("The res_class component of the XClassHint structure was \"%s\" instead of \"%s\".", s, classhint.res_class);
+ FAIL;
+ } else
+ CHECK;
+ XFree(propp);
+ }
+
+ CHECKPASS(6);
+
+
+>>ASSERTION Good A
+When the
+.M res_name
+component of the
+.S XClassHint
+structure named by the
+.A class_hints
+argument is NULL and the RESOURCE_NAME environment variable
+is set, then a call to xname sets the WM_CLASS property for
+the window
+.A w
+after substituting the value of the RESOURCE_NAME environment variable
+for the NULL
+.M res_name
+component.
+>>STRATEGY
+Fork a child process using tet_fork.
+Execute the File "./Test1" using tet_exec with envp set to "RESOUCE_NAME=XTest_res_name"
+In child:
+ Verify the environment variable RESOURCE_NAME is defined in the environment using getenv.
+ Set the WM_CLASS property using XSetWMProperties with the class_hints structure having NULL as the res_name component.
+ Obtain the value of the WM_CLASS property using XGetClassHint.
+ Verify that the value is "XTest_res_name".
+>>CODE
+
+ tet_fork(t007exec, TET_NULLFP, 0, 0xFF);
+
+>>EXTERN
+
+extern char **environ;
+
+static void
+t007exec()
+{
+char *argv[4];
+char *envp;
+
+ argv[0] = "Test1";
+ argv[1] = NULL;
+
+ envp = "RESOURCE_NAME=XTest_res_name";
+ if (xtest_putenv( envp )) {
+ delete("xtest_putenv failed");
+ return;
+ }
+
+ tet_exec("./Test1", argv, environ);
+ delete("tet_exec() of \"./Test1\" failed.");
+}
+>>ASSERTION Bad Good A
+When the
+.M res_name
+component of the
+.S XClassHint
+structure named by the
+.A class_hints
+argument is NULL and the RESOURCE_NAME environment variable
+is not set and
+.A argv
+and
+.A argv[0]
+are non-NULL, then a call to xname sets the WM_CLASS property for the window
+.A w
+after substituting
+.A argv[0] ,
+stripped of any directory prefixes, for the NULL
+.M res_name
+component.
+>>STRATEGY
+Fork a child process using tet_fork.
+Execute the File "./Test2" using tet_exec with environ without RESOURCE_NAME.
+In child:
+ Verify the environment variable RESOURCE_NAME is not defined in the environment using getenv..
+ Set the WM_CLASS property using XSetWMProperties with the class_hints structure having NULL as the res_name component.
+ Obtain the value of the WM_CLASS property using XGetClassHint.
+ Verify that the value is "Test2".
+>>CODE
+
+ tet_fork(t008exec, TET_NULLFP, 0, 0xFF);
+
+>>EXTERN
+static void
+t008exec()
+{
+char *argv[4];
+
+ argv[0] = "./Test2";
+ argv[1] = NULL;
+ if (getenv("RESOURCE_NAME") != (char *)NULL) {
+ char **newenv = environ; /* Remove RESOURCE_NAME */
+
+ trace("Removing RESOURCE_NAME from the environment");
+
+ while( strncmp("RESOURCE_NAME=", *newenv, 14)
+ && *newenv != NULL )
+ newenv++;
+
+ if (*newenv == NULL) {
+ report("could not remove RESOURCE_NAME from the environment");
+ UNRESOLVED;
+ return;
+ }
+
+ do {
+ *newenv = *(newenv+1);
+ newenv++;
+ } while( *newenv != NULL) ;
+ }
+
+ tet_exec("./Test2", argv, environ);
+ delete("tet_exec() of \"./Test2\" failed.");
+
+}
+>>ASSERTION Bad A
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/stwmprtcls/stwmprtcls.m b/xc/test/xsuite/xtest/tset/CH09/stwmprtcls/stwmprtcls.m
new file mode 100644
index 000000000..6e4473c43
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/stwmprtcls/stwmprtcls.m
@@ -0,0 +1,149 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWMProtocols CH09
+Status
+XSetWMProtocols(display, w, protocols, count)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+Atom *protocols = &prots;
+int count = 1;
+>>EXTERN
+#include "Xatom.h"
+Atom prots;
+>>ASSERTION Good A
+A call to xname sets the
+.S WM_PROTOCOLS
+property for the window
+.A w ,
+to be of type
+.S ATOM ,
+format 32 and to have value set
+to the list of
+.A count
+atoms specified by the
+.A protocols
+argument
+and returns non-zero.
+>>STRATEGY
+Create a window with XCreateWindow.
+Set the WM_PROTOCOLS property using XSetWMProtocols.
+Verify that the call returned non-zero.
+Obtain the WM_PROTOCOLS atom using XInternAtom.
+Obtain the WM_PROTOCOLS property using XGetWindowProperty.
+Verify that the property type is ATOM
+Verify that the property format is 32.
+Verify that the returned number of elements is correct.
+Verify that the property value is correct.
+>>CODE
+Status status;
+XVisualInfo *vp;
+unsigned long leftover, nitems, len;
+int actual_format;
+Atom actual_type;
+int nats = 5;
+Atom xa_wm_protocols;
+Atom prots[5], *rprots = (Atom *) NULL;
+Atom at, *atp;
+int i;
+
+
+ for(i=0, at = XA_LAST_PREDEFINED; i<nats; i++)
+ prots[i] = (int) --at;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ w = makewin(display, vp);
+
+ protocols = prots;
+ count = nats;
+ status = XCALL;
+
+ if(status == 0) {
+ report("%s() returned zero.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if((xa_wm_protocols = XInternAtom(display, "WM_PROTOCOLS", True)) == None) {
+ delete("The \"WM_PROTOCOLS\" string was not interned.");
+ return;
+ } else
+ CHECK;
+
+
+ if (XGetWindowProperty(display, w, xa_wm_protocols,
+ 0L, (long) nats, False,
+ AnyPropertyType, &actual_type, &actual_format,
+ &nitems, &leftover, (unsigned char **) &rprots) != Success) {
+ delete("XGetWindowProperty() did not return Success.");
+ return;
+ } else
+ CHECK;
+
+ if(leftover != 0) {
+ report("The leftover elements numbered %lu instead of 0", leftover);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_format != 32) {
+ report("The format of the WM_PROTOCOLS property was %lu instead of 32", actual_format);
+ FAIL;
+ } else
+ CHECK;
+
+ if(actual_type != XA_ATOM) {
+ report("The type of the WM_PROTOCOLS property was %lu instead of ATOM (%lu)", actual_type, (long) XA_ATOM);
+ FAIL;
+ } else
+ CHECK;
+
+ if( rprots == (Atom *) NULL) {
+ report("No value was set for the WM_PROTOCOLS property.");
+ FAIL;
+ } else {
+
+ CHECK;
+ if( nitems != nats) {
+ report("The WM_PROTOCOLS property comprised %ul elements instead of %d", nitems, nats);
+ FAIL;
+ } else {
+
+ if(actual_format == 32) {
+
+ CHECK;
+ for(i = 0, atp = rprots; i<nats; i++, atp++)
+ if( *atp != prots[i]) {
+ report("Element %d of the WM_PROTOCOLS value was %lu instead of %lu", i+1, (long) *atp, (long) prots[i]);
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+ XFree((char*)rprots);
+ }
+
+ CHECKPASS(8 + nats);
+
+>>ASSERTION Bad B 1
+When the atom name \(lqWM_PROTOCOLS\(rq cannot be interned,
+then a call to xname returns zero.
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Good A
+.ER BadWindow
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/stwmszhnts/stwmszhnts.m b/xc/test/xsuite/xtest/tset/CH09/stwmszhnts/stwmszhnts.m
new file mode 100644
index 000000000..5c830517b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/stwmszhnts/stwmszhnts.m
@@ -0,0 +1,214 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetWMSizeHints CH09
+void
+XSetWMSizeHints(display, w, hints, property)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+XSizeHints *hints = &sizehints_0;
+Atom property = XA_WM_NORMAL_HINTS;
+>>EXTERN
+#define NumPropSizeElements 18 /* ICCCM v. 1 */
+#include "Xatom.h"
+static XSizeHints sizehints_0 = { 0,0,0,0,0,0,0,0,0,0,0, {0,0}, {0,0}, 0,0,0};
+static XSizeHints sizehints_1 = { 0,1,2,3,4,5,6,7,8,9,10, {11,12}, {13,14}, 15, 16, 17};
+>>ASSERTION Good A
+A call to xname sets the
+property, specified by the
+.A property
+argument, for the window
+.A w ,
+to be of type
+.S WM_SIZE_HINTS ,
+format 32 and to have value set to
+the hints in the
+.S XSizeHints
+structure named by the
+.A hints
+argument.
+>>STRATEGY
+Create a window using XCreateWindow.
+Set the property WM_NORMAL_HINTS using XSetWMSizeHints.
+Obtain the value of the WM_NORMAL_HINTS property using XGetWindowProperty.
+Verify that the property format is 32.
+Verify that the property type is WM_SIZE_HINTS.
+Verify that the property value is correct.
+>>CODE
+Window win;
+XVisualInfo *vp;
+Atom rtype;
+int rformat;
+unsigned long ritems, rbytes, *uls = NULL;
+XSizeHints pp;
+int i;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+ win = makewin(display, vp);
+
+ w = win;
+ hints = &sizehints_1;
+ XCALL;
+
+ if( XGetWindowProperty(display, win, XA_WM_NORMAL_HINTS, 0L,
+ (long) NumPropSizeElements, False,
+ AnyPropertyType, &rtype, &rformat, &ritems, &rbytes,
+ (unsigned char **) &uls) != Success ) {
+ delete("XGetWindowProperty() did not return Success.");
+ return;
+ } else
+ CHECK;
+
+ if( rtype != XA_WM_SIZE_HINTS ) {
+ report("WM_NORMAL_HINTS property was type %lu instead of WM_SIZE_HINTS (%lu)",
+ (unsigned long) rtype, (unsigned long) XA_WM_SIZE_HINTS);
+ FAIL;
+ } else
+ CHECK;
+
+ if( rformat != 32 ) {
+ report("WM_NORMAL_HINTS property was format %d instead of 32.", rformat);
+ FAIL;
+ } else
+ CHECK;
+
+ /* unpack from the array of unsigned longs into pp */
+ pp.flags = uls[i=0];
+
+ pp.x = (int)uls[++i]; /* obsolete for new window mgrs, but clients */
+ pp.y = (int)uls[++i];
+ pp.width = (int)uls[++i];
+ pp.height = (int)uls[++i]; /* should set so old wm's don't mess up */
+
+ pp.min_width = (int)uls[++i]; pp.min_height = (int)uls[++i];
+ pp.max_width = (int)uls[++i]; pp.max_height = (int)uls[++i];
+ pp.width_inc = (int)uls[++i]; pp.height_inc = (int)uls[++i];
+ pp.min_aspect.x = (int)uls[++i]; pp.min_aspect.y = (int)uls[++i];
+ pp.max_aspect.x = (int)uls[++i]; pp.max_aspect.y = (int)uls[++i];
+
+ pp.base_width = (int)uls[++i]; /* added by ICCCM version 1 */
+ pp.base_height = (int)uls[++i]; /* added by ICCCM version 1 */
+ pp.win_gravity = (int)uls[++i]; /* added by ICCCM version 1 */
+
+ if(pp.flags != 0) {
+ report("The flags component of the XSizeHints structure was %lu instead of 0.", pp.flags);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.x != 1) {
+ report("The x component of the XSizeHints structure was %d instead of 1.", pp.x);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.y != 2) {
+ report("The y component of the XSizeHints structure was %d instead of 2.", pp.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.width != 3) {
+ report("The width component of the XSizeHints structure was %d instead of 3.", pp.width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.height != 4) {
+ report("The height component of the XSizeHints structure was %d instead of 4.", pp.height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.min_width != 5) {
+ report("The min_width component of the XSizeHints structure was %d instead of 5.", pp.min_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.min_height != 6) {
+ report("The min_height component of the XSizeHints structure was %d instead of 6.", pp.min_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.max_width != 7) {
+ report("The max_width component of the XSizeHints structure was %d instead of 7.", pp.max_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.max_height != 8) {
+ report("The max_height component of the XSizeHints structure was %d instead of 8.", pp.max_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.width_inc != 9) {
+ report("The width_inc component of the XSizeHints structure was %d instead of 9.", pp.width_inc);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.height_inc != 10) {
+ report("The height_inc component of the XSizeHints structure was %d instead of 10.", pp.height_inc);
+ FAIL;
+ } else
+ CHECK;
+
+ if((pp.min_aspect.x != 11) || (pp.min_aspect.y != 12)){
+ report("The min_aspect components of the XSizeHints structure were %d, %d instead of 11, 12.",
+ pp.min_aspect.x, pp.min_aspect.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if((pp.max_aspect.x != 13) || (pp.max_aspect.y != 14)){
+ report("The max_aspect components of the XSizeHints structure were %d, %d instead of 13, 14.",
+ pp.max_aspect.x, pp.max_aspect.y);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.base_width != 15) {
+ report("The base_width component of the XSizeHints structure was %d instead of 15.", pp.base_width);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.base_height != 16) {
+ report("The base_height component of the XSizeHints structure was %d instead of 16.", pp.base_height);
+ FAIL;
+ } else
+ CHECK;
+
+ if(pp.win_gravity != 17) {
+ report("The win_gravity component of the XSizeHints structure was %d instead of 17", pp.win_gravity);
+ FAIL;
+ } else
+ CHECK;
+
+ XFree((char*)uls);
+ CHECKPASS(19);
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
+>>ASSERTION Bad A
+.ER BadAtom
+>>ASSERTION Bad A
+.ER BadWindow
+>># Kieron Action Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/txtprprtyt/txtprprtyt.m b/xc/test/xsuite/xtest/tset/CH09/txtprprtyt/txtprprtyt.m
new file mode 100644
index 000000000..307fb784d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/txtprprtyt/txtprprtyt.m
@@ -0,0 +1,196 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XTextPropertyToStringList CH09
+Status
+XTextPropertyToStringList(text_prop, list_return, count_return)
+XTextProperty *text_prop;
+char ***list_return;
+int *count_return;
+>>EXTERN
+#include "Xatom.h"
+char *nullstr = "<NULL>";
+char *str1 = "Xtest_._.";
+char *str2 = "test._";
+char *str3 = "string._..";
+>>ASSERTION Good A
+When the
+.M encoding
+component of the
+.A text_prop
+argument is STRING and the
+.M format
+component is 8, then
+a call to xname returns in the
+.A list_string
+argument the list of strings representing the null-separated
+elements of the
+.S XTextProperty
+structure named by the
+.A text_prop
+argument, returns in
+.A count_return
+the number of strings and returns non-zero.
+>>STRATEGY
+Create an XTextProperty structure.
+Extract the strings using XTextPropertyToStringList.
+Verify that the call did not return zero.
+Verify that the returned string count is correct.
+Verify that the returned string list is correct.
+>>CODE
+Status status;
+XTextProperty tp;
+char **list;
+int count;
+
+ tp.value = (unsigned char *) "Xtest_._.\0test._\0string._..";
+ tp.nitems = 27;
+ tp.format = 8;
+ tp.encoding = XA_STRING;
+ text_prop = &tp;
+ list_return = &list;
+ count_return = &count;
+ status = XCALL;
+
+ if(status == 0) {
+ delete("%s() returned zero.", TestName);
+ return;
+ } else
+ CHECK;
+
+ if(count != 3) {
+ report("The returned number of strings was %d instead of %d", count, 3);
+ FAIL;
+ } else {
+ CHECK;
+
+ if(strcmp(list[0], str1) != 0 ||strcmp(list[1], str2) != 0 || strcmp(list[2], str3)) {
+ report("The returned strings were:");
+ report("\"%s\"", list[0] == NULL ? nullstr : list[0]);
+ report("\"%s\"", list[1] == NULL ? nullstr : list[1]);
+ report("\"%s\"", list[2] == NULL ? nullstr : list[2]);
+ report("instead of:");
+ report("\"%s\"", str1);
+ report("\"%s\"", str2);
+ report("\"%s\"", str3);
+ } else
+ CHECK;
+
+ }
+
+ XFreeStringList(list);
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the
+.M encoding
+component of the
+.A text_prop
+argument is not STRING, then
+a call to xname sets no return values and returns zero.
+>>STRATEGY
+Create an XTextProperty structure with encoding component set to XA_WINDOW.
+Call XTextPropertyToStringList.
+Verify that the call returned zero.
+Verify that the list_return argument was not changed.
+Verify that the count_return argument was not changed.
+>>CODE
+Status status;
+XTextProperty tp;
+char **list = (char **) -1;
+int count = -1;
+
+ tp.value = (unsigned char *) "Xtest_._.\0test._\0string._..";
+ tp.nitems = 27;
+ tp.format = 8;
+ tp.encoding = XA_WINDOW;
+ text_prop = &tp;
+ list_return = &list;
+ count_return = &count;
+ status = XCALL;
+
+ if(status != 0) {
+ report("%s() did not return zero.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if(list != (char**) -1) {
+ report("The list_return argument was altered.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(count != -1) {
+ report("The count_return argument was altered.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the
+.A format
+component of the
+.A text_prop
+argument is not 8, then
+a call to xname sets no return values and returns zero.
+>>STRATEGY
+Create an XTextProperty structure with format component set to 16.
+Call XTextPropertyToStringList.
+Verify that the call returned zero.
+Verify that the list_return argument was not changed.
+Verify that the count_return argument was not changed.
+>>CODE
+Status status;
+XTextProperty tp;
+char **list = (char **) -1;
+int count = -1;
+
+ tp.value = (unsigned char *) "Xtest_._.\0test._\0string._..";
+ tp.nitems = 27;
+ tp.format = 16;
+ tp.encoding = XA_STRING;
+ text_prop = &tp;
+ list_return = &list;
+ count_return = &count;
+ status = XCALL;
+
+ if(status != 0) {
+ report("%s() did not return zero.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if(list != (char**) -1) {
+ report("The list_return argument was altered.");
+ FAIL;
+ } else
+ CHECK;
+
+ if(count != -1) {
+ report("The count_return argument was altered.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Bad B 1
+When insufficient memory is available for the list and its elements,
+then a call to xname sets no return values and returns zero.
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/wmgmtry/wmgmtry.m b/xc/test/xsuite/xtest/tset/CH09/wmgmtry/wmgmtry.m
new file mode 100644
index 000000000..3fa302dea
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/wmgmtry/wmgmtry.m
@@ -0,0 +1,759 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+>>TITLE XWMGeometry CH09
+int
+XWMGeometry(display, screen, user_geom, def_geom, bwidth, hints, x_return, y_return, width_return, height_return, gravity_return);
+Display *display = Dsp;
+int screen = DefaultScreen(Dsp);
+char *user_geom = NULL;
+char *def_geom = NULL;
+unsigned int bwidth = 1;
+XSizeHints *hints = &size_hints;
+int *x_return = &dint;
+int *y_return = &dint;
+int *width_return = &dint;
+int *height_return = &dint;
+int *gravity_return = &dint;
+>>EXTERN
+#include "Xatom.h"
+int dint;
+XSizeHints size_hints;
+
+XSizeHints szhints = { 0L,
+ 0,0,
+ 0,0,
+ 38, 29, /* min width, min height */
+ 400, 300, /* max width, max height */
+ 17, 18, /* width inc, height inc */
+ {0,0},
+ {0,0},
+ 20, 10, /* base width, base height */
+ SouthWestGravity};
+
+XSizeHints szhints1 = { PAllHints, /* Deliberate lack of PBaseSize and PWinGravity */
+ 0,0,
+ 0,0,
+ 20, 30, /* min width, min height */
+ 400, 300, /* max width, max height */
+ 17, 18, /* width inc, height inc */
+ {0,0},
+ {0,0},
+ -1, -2, /* base width, base height */
+ -1};
+
+XSizeHints szhints2 = { 0L,
+ 0,0,
+ 0,0,
+ 0,0,
+ 0,0,
+ 0,0,
+ {0,0},
+ {0,0},
+ 0,0,
+ 0};
+
+
+>># NOTE
+>># Having consulted the ICCCM v1.0 page 21 I have changed this
+>># assertion to mention that :
+>># returned width = hints->base_width + width*hints->width_inc
+>># returned height = hints->base_height + height*hints->height_inc
+>>#
+>># Cal 23/5/91
+>>#
+>>ASSERTION Good A
+A call to xname combines the geometry information given in the
+.A user_geom ,
+.A def_geom
+and
+.A hints
+arguments and returns in
+.A x_return
+the x offset, in
+.A y_return
+the y offset, in
+.A width_return
+the width ( = hints->base_width + width*hints->width_inc)
+, in
+.A height_return
+the height ( = hints->base_height + height*hints->height_inc)
+and in
+.A gravity_return
+the gravity information specified by the geometry arguments.
+>>STRATEGY
+Call XWMGeometry with user_geom "10x12+30+40", def_geom = NULL,
+ and an XSizeHints structure with min_width = 38, min_heght = 29,
+ max_width = 400, max_height = 300, width_inc = 17, height_inc =18,
+ base_width = 20 and base_height = 10.
+Verify that the returned width is base_width + (10 * width_inc)
+Verify that the returned height is base_height + (12 * height_inc)
+Verify that the returned x-coordinate is 30.
+Verify that the returned y-coordinate is 40.
+
+Call XWMGeometry with user_geom NULL, def_geom = "10x12+30+40"
+ and an XSizeHints structure with min_width = 38, min_heght = 29,
+ max_width = 400, max_height = 300, width_inc = 17, height_inc =18,
+ base_width = 20 and base_height = 10.
+Verify that the returned width is base_width + (10 * width_inc)
+Verify that the returned height is base_height + (12 * height_inc)
+Verify that the returned x-coordinate is 30.
+Verify that the returned y-coordinate is 40.
+
+Call XWMGeometry with user_geom = "10x12", def_geom = "2x3+30+40"
+ and an XSizeHints structure with min_width = 38, min_heght = 29,
+ max_width = 400, max_height = 300, width_inc = 17, height_inc =18,
+ base_width = 20 and base_height = 10.
+Verify that the returned width is base_width + (10 * width_inc)
+Verify that the returned height is base_height + (12 * height_inc)
+Verify that the returned x-coordinate is 30.
+Verify that the returned y-coordinate is 40.
+
+Call XWMGeometry with user_geom = "1x1", def_geom = NULL
+ and an XSizeHints structure with min_width = 38, min_heght = 29,
+ max_width = 400, max_height = 300, width_inc = 17, height_inc =18,
+ base_width = 20 and base_height = 10.
+Verify that the returned width is min_width
+Verify that the returned height is min_height
+
+Call XWMGeometry with user_geom = "40x30", def_geom = NULL
+ and an XSizeHints structure with min_width = 38, min_heght = 29,
+ max_width = 400, max_height = 300, width_inc = 17, height_inc =18,
+ base_width = 20 and base_height = 10.
+Verify that the returned width is max_width
+Verify that the returned height is max_height
+
+Call XWMGeometry with user_geom = "10x12-1-2", def_geom = NULL
+ and an XSizeHints structure with min_width = 38, min_heght = 29,
+ max_width = 400, max_height = 300, width_inc = 17, height_inc =18,
+ base_width = 20 and base_height = 10.
+Verify that the returned x-coordinate is DisplayWidth -1 - (base_width + 10 * width_inc) - 2 * bwidth
+Verify that the returned y-coordinate is DisplayHeight -1 - (base_height + 10 * height_inc) - 2 * bwidth
+
+>>CODE
+int rval;
+int xr, yr, wr, hr, gr;
+int x, y, w, h, g;
+
+ bwidth = 10;
+ szhints.flags= PAllHints|PBaseSize|PWinGravity;
+ hints = &szhints;
+ x_return = &xr;
+ y_return = &yr;
+ width_return = &wr;
+ height_return = &hr;
+ gravity_return = &gr;
+
+ user_geom = "10x12+30+40";
+ def_geom = NULL;
+ rval = XCALL;
+
+ w = szhints.base_width + (10 * szhints.width_inc);
+ h = szhints.base_height + (12 * szhints.height_inc);
+ x = 30;
+ y = 40;
+
+ trace("user_geom = %s, def_geom = %s", user_geom == NULL ? "<NULL>": user_geom, def_geom == NULL ? "<NULL>": def_geom);
+
+ if(w != wr) {
+ report("Returned width was %d instead of %d", wr, w);
+ FAIL;
+ } else
+ CHECK;
+
+ if(h != hr) {
+ report("Returned height was %d instead of %d", hr, h);
+ FAIL;
+ } else
+ CHECK;
+
+ if(x != xr) {
+ report("Returned x-coordinate was %d instead of %d", xr, x);
+ FAIL;
+ } else
+ CHECK;
+
+ if(y != yr) {
+ report("Returned y-coordinate was %d instead of %d", yr, y);
+ FAIL;
+ } else
+ CHECK;
+
+ user_geom = NULL;
+ def_geom = "10x12+30+40";
+ rval = XCALL;
+
+ w = szhints.base_width + (10 * szhints.width_inc);
+ h = szhints.base_height + (12 * szhints.height_inc);
+
+ trace("user_geom = %s, def_geom = %s", user_geom == NULL ? "<NULL>": user_geom, def_geom == NULL ? "<NULL>": def_geom);
+
+ if(w != wr) {
+ report("Returned width was %d instead of %d", wr, w);
+ FAIL;
+ } else
+ CHECK;
+
+ if(h != hr) {
+ report("Returned height was %d instead of %d", hr, h);
+ FAIL;
+ } else
+ CHECK;
+
+ if(x != xr) {
+ report("Returned x-coordinate was %d instead of %d", xr, x);
+ FAIL;
+ } else
+ CHECK;
+
+ if(y != yr) {
+ report("Returned y-coordinate was %d instead of %d", yr, y);
+ FAIL;
+ } else
+ CHECK;
+
+/* When no x,y is specified by user_geom, use the def_geom */
+ user_geom = "10x12";
+ def_geom = "2x3+30+40";
+ rval = XCALL;
+
+ w = szhints.base_width + (10 * szhints.width_inc);
+ h = szhints.base_height + (12 * szhints.height_inc);
+
+ trace("user_geom = %s, def_geom = %s", user_geom == NULL ? "<NULL>": user_geom, def_geom == NULL ? "<NULL>": def_geom);
+
+ if(w != wr) {
+ report("Returned width was %d instead of %d", wr, w);
+ FAIL;
+ } else
+ CHECK;
+
+ if(h != hr) {
+ report("Returned height was %d instead of %d", hr, h);
+ FAIL;
+ } else
+ CHECK;
+
+ if(x != xr) {
+ report("Returned x-coordinate was %d instead of %d", xr, x);
+ FAIL;
+ } else
+ CHECK;
+
+ if(y != yr) {
+ report("Returned y-coordinate was %d instead of %d", yr, y);
+ FAIL;
+ } else
+ CHECK;
+
+/* Ensure that the minimums hold */
+ user_geom = "1x1";
+ def_geom = NULL;
+ rval = XCALL;
+
+ w = szhints.min_width;
+ h = szhints.min_height;
+
+ trace("user_geom = %s, def_geom = %s", user_geom == NULL ? "<NULL>": user_geom, def_geom == NULL ? "<NULL>": def_geom);
+
+ if(w != wr) {
+ report("Returned width was %d instead of %d", wr, w);
+ FAIL;
+ } else
+ CHECK;
+
+ if(h != hr) {
+ report("Returned height was %d instead of %d", hr, h);
+ FAIL;
+ } else
+ CHECK;
+
+/* Ensure that the maximums hold */
+ user_geom = "40x30";
+ def_geom = NULL;
+ rval = XCALL;
+
+ w = szhints.max_width;
+ h = szhints.max_height;
+
+ trace("user_geom = %s, def_geom = %s", user_geom == NULL ? "<NULL>": user_geom, def_geom == NULL ? "<NULL>": def_geom);
+
+ if(w != wr) {
+ report("Returned width was %d instead of %d", wr, w);
+ FAIL;
+ } else
+ CHECK;
+
+ if(h != hr) {
+ report("Returned height was %d instead of %d", hr, h);
+ FAIL;
+ } else
+ CHECK;
+
+/* Check that border, width and height is taken into account with negative x & y */
+ user_geom = "10x12-1-2";
+ def_geom = NULL;
+ rval = XCALL;
+
+ w = szhints.base_width + (10 * szhints.width_inc);
+ h = szhints.base_height + (12 * szhints.height_inc);
+ x = DisplayWidth(display, screen) + (-1) - w - 2 * bwidth;
+ y = DisplayHeight(display, screen) + (-2) - h - 2 * bwidth;
+
+
+ trace("user_geom = %s, def_geom = %s", user_geom == NULL ? "<NULL>": user_geom, def_geom == NULL ? "<NULL>": def_geom);
+
+ if(x != xr) {
+ report("Returned x-coordinate was %d instead of %d", xr, x);
+ FAIL;
+ } else
+ CHECK;
+
+ if(y != yr) {
+ report("Returned y-coordinate was %d instead of %d", yr, y);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(18);
+
+>>ASSERTION Good A
+The value returned in the
+.A gravity_return
+information is one of
+.S NorthWestGravity ,
+.S NorthGravity ,
+.S NorthEastGravity ,
+.S WestGravity ,
+.S CenterGravity ,
+.S EastGravity ,
+.S SouthWestGravity ,
+.S SouthGravity ,
+or
+.S SouthEastGravity .
+>>STRATEGY
+Call XWMGeometry with user_geom = "10x20-0-0", and an XSizeHints
+ structure with gravity component set to SouthWestGravity.
+Verify that the gravity returned is one of NorthWestGravity,
+ NorthGravity , NorthEastGravity , WestGravity ,
+ CenterGravity ,EastGravity , SouthWestGravity ,
+ SouthGravity , SouthEastGravity .
+>>CODE
+int rval;
+int xr, yr, wr, hr, gr;
+
+ user_geom = "10x20-0-0";
+ def_geom = NULL;
+ bwidth = 1;
+ szhints.flags= PAllHints|PBaseSize|PWinGravity;
+ hints = &szhints;
+ x_return = &xr;
+ y_return = &yr;
+ width_return = &wr;
+ height_return = &hr;
+ gravity_return = &gr;
+ rval = XCALL;
+
+ trace("user_geom = %s, def_geom = %s", user_geom == NULL ? "<NULL>": user_geom, def_geom == NULL ? "<NULL>": def_geom);
+
+ if( (gr != NorthWestGravity) && (gr != NorthGravity) &&(gr != NorthEastGravity) &&
+ (gr != WestGravity) && (gr != CenterGravity) && (gr != EastGravity) &&
+ (gr != SouthWestGravity) && (gr != SouthGravity) && (gr != SouthEastGravity)) {
+ report("Gravity value returned was invalid : %d", gr);
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good A
+A call to xname returns a mask which indicates
+which information came from the
+.A user_geom
+argument and whether the
+position is relative to the right and bottom edges which is the OR of
+none or any of
+.S XValue ,
+.S YValue ,
+.S WidthValue ,
+.S HeightValue ,
+.S XNegative ,
+or
+.S YNegative .
+>>STRATEGY
+Call XWMGeometry with user_geom = "40x30-9-9"
+Verify that the returned mask is (XValue | YValue | WidthValue |HeightValue | XNegative | YNegative)
+Call XWMGeometry with user_geom = "-9+9"
+Verify that the returned mask is (XValue | YValue | XNegative)
+Call XWMGeometry with user_geom = "5x5"
+Verify that the returned mask is (WidthValue | HeightValue)
+Call XWMGeometry with user_geom = NULL
+Verify that the returned mask is 0.
+>>CODE
+int rval;
+int xr, yr, wr, hr, gr;
+
+ user_geom = "40x30-9-9";
+ def_geom = NULL;
+ bwidth = 1;
+ szhints.flags= PAllHints|PBaseSize|PWinGravity;
+ hints = &szhints;
+ x_return = &xr;
+ y_return = &yr;
+ width_return = &wr;
+ height_return = &hr;
+ gravity_return = &gr;
+ rval = XCALL;
+
+ if(rval != (XValue | YValue | WidthValue |HeightValue | XNegative | YNegative)) {
+ report("Return value was 0x%x, instead of", rval);
+ report("(XValue | YValue | XWidthValue | XHeightValue | XNegative | YNegative)");
+ report("with user_geom = %s", user_geom);
+ FAIL;
+ } else
+ CHECK;
+
+ user_geom = NULL;
+ rval = XCALL;
+
+ if(rval != NoValue) {
+ report("Return value was 0x%x, instead of NoValue with user_geom = %s", rval, user_geom);
+ FAIL;
+ } else
+ CHECK;
+
+ user_geom = "-9+9";
+ rval = XCALL;
+
+ if(rval != ( XValue | YValue | XNegative)) {
+ report("Return value was 0x%x, instead of", rval);
+ report("(XWidthValue | XHeightValue | XNegative)");
+ report("with user_geom = %s", user_geom);
+ FAIL;
+ } else
+ CHECK;
+
+ user_geom = "5x5";
+ rval = XCALL;
+
+ if(rval != (WidthValue | HeightValue)) {
+ report("Return value was 0x%x, instead of", rval);
+ report("(XValue | YValue)");
+ report("with user_geom = %s", user_geom);
+ FAIL;
+ } else
+ CHECK;
+
+ user_geom = NULL;
+ rval = XCALL;
+
+ if(rval != 0) {
+ report("Return value was 0x%x, instead of 0", rval);
+ report("with user_geom = %s", user_geom);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+>>ASSERTION Good A
+When the
+.M base_width
+component of the
+.S XSizeHints
+structure named by the
+.A hints
+argument
+is not set, then the
+.M min_width
+component is used.
+>>STRATEGY
+Call XWMGeometry with user_geom = "10x12", def_geom = NULL and an XSizeHints
+ structure with flags component = PAllHints , base_width = -1 base_height = -2,
+ min_width = 20 and min_height = 30.
+Verify that the returned width is min_width + (10 * width_inc)
+>>CODE
+int rval;
+int xr, yr, wr, hr, gr;
+int w;
+
+ bwidth = 10;
+ hints = &szhints1;
+ x_return = &xr;
+ y_return = &yr;
+ width_return = &wr;
+ height_return = &hr;
+ gravity_return = &gr;
+
+ user_geom = "10x12";
+ def_geom = NULL;
+ rval = XCALL;
+
+ w = szhints1.min_width + (10 * szhints1.width_inc);
+
+ trace("user_geom = %s, def_geom = %s", user_geom == NULL ? "<NULL>": user_geom, def_geom == NULL ? "<NULL>": def_geom);
+
+ if(w != wr) {
+ report("Returned width was %d instead of %d", wr, w);
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good A
+When the
+.M base_height
+component of the
+.S XSizeHints
+structure named by the
+.A hints
+argument
+is not set, then the
+.M min_height
+component is used.
+>>STRATEGY
+Call XWMGeometry with user_geom = "10x12", def_geom = NULL and an XSizeHints
+ structure with flags component = PAllHints , base_width = -1 base_height = -2,
+ min_width = 20 and min_height = 30.
+Verify that the returned height is min_height + (10 * height_inc)
+>>CODE
+int rval;
+int xr, yr, wr, hr, gr;
+int h;
+
+ bwidth = 10;
+ hints = &szhints1;
+ x_return = &xr;
+ y_return = &yr;
+ width_return = &wr;
+ height_return = &hr;
+ gravity_return = &gr;
+
+ user_geom = "10x12";
+ def_geom = NULL;
+ rval = XCALL;
+
+ h = szhints1.min_height + (12 * szhints1.height_inc);
+
+ trace("user_geom = %s, def_geom = %s", user_geom == NULL ? "<NULL>": user_geom, def_geom == NULL ? "<NULL>": def_geom);
+
+ if(h != hr) {
+ report("Returned height was %d instead of %d", hr, h);
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good A
+When the
+.M min_width
+component is not set in the
+.S XSizeHints
+structure named by the
+.A hints
+argument, then the
+.M base_width
+component is used.
+>>STRATEGY
+Call XWMGeometry with user_geom = "1x1", def_geom = NULL and an XSizeHints
+ structure with flags component = PBaseSize | PResizeInc , min_width = 21,
+ min_height = 31, width_inc = -1, height_inc = -1, base_height = 20 and
+ base_width = 30.
+Verify that the returned width is base_width.
+>>CODE
+int rval;
+int xr, yr, wr, hr, gr;
+int w;
+
+ bwidth = 10;
+
+ szhints2.flags = PBaseSize | PResizeInc;
+ szhints2.min_width = 21;
+ szhints2.min_height = 31;
+ szhints2.width_inc = -1;
+ szhints2.height_inc = -1;
+ szhints2.base_height = 20;
+ szhints2.base_width = 30;
+
+ hints = &szhints2;
+ x_return = &xr;
+ y_return = &yr;
+ width_return = &wr;
+ height_return = &hr;
+ gravity_return = &gr;
+
+ user_geom = "1x1";
+ def_geom = NULL;
+ rval = XCALL;
+
+ w = szhints2.base_width;
+
+ trace("user_geom = %s, def_geom = %s", user_geom == NULL ? "<NULL>": user_geom, def_geom == NULL ? "<NULL>": def_geom);
+
+ if(w != wr) {
+ report("Returned width was %d instead of %d", wr, w);
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good A
+When the
+.M min_height
+component is not set in the
+.S XSizeHints
+structure named by the
+.A hints
+argument, then the
+.M base_height
+component is used.
+>>STRATEGY
+Call XWMGeometry with user_geom = "1x1", def_geom = NULL and an XSizeHints
+ structure with flags component = PBaseSize | PResizeInc , min_width = 21,
+ min_height = 31, width_inc = -1, height_inc = -1, base_height = 20 and
+ base_width = 30.
+Verify that the returned height is base_height.
+>>CODE
+int rval;
+int xr, yr, wr, hr, gr;
+int h;
+
+ bwidth = 10;
+
+ szhints2.flags = PBaseSize | PResizeInc;
+ szhints2.min_width = 21;
+ szhints2.min_height = 31;
+ szhints2.width_inc = -1;
+ szhints2.height_inc = -1;
+ szhints2.base_height = 20;
+ szhints2.base_width = 30;
+
+ hints = &szhints2;
+ x_return = &xr;
+ y_return = &yr;
+ width_return = &wr;
+ height_return = &hr;
+ gravity_return = &gr;
+
+ user_geom = "1x1";
+ def_geom = NULL;
+ rval = XCALL;
+
+ h = szhints2.base_height;
+
+ trace("user_geom = %s, def_geom = %s", user_geom == NULL ? "<NULL>": user_geom, def_geom == NULL ? "<NULL>": def_geom);
+
+ if(h != hr) {
+ report("Returned height was %d instead of %d", hr, h);
+ FAIL;
+ } else
+ PASS;
+
+
+>>ASSERTION Good A
+When neither the
+.M base_width
+nor
+.M min_width
+components of the
+.S XSizeHints
+structure named by the
+.A hints
+argument is set, then the value 0 is used.
+>>STRATEGY
+Call XWMGeometry with user_geom = "1x1", def_geom = NULL and an XSizeHints
+ structure with flags component = PResizeInc , min_width = 21,
+ min_height = 31, width_inc = -1, height_inc = -1, base_height = 20 and
+ base_width = 30.
+Verify that the returned width is 0.
+>>CODE
+int rval;
+int xr, yr, wr, hr, gr;
+
+ bwidth = 10;
+
+ szhints2.flags = PResizeInc;
+ szhints2.min_width = 21;
+ szhints2.min_height = 31;
+ szhints2.width_inc = -1;
+ szhints2.height_inc = -1;
+ szhints2.base_height = 20;
+ szhints2.base_width = 30;
+
+ hints = &szhints2;
+ x_return = &xr;
+ y_return = &yr;
+ width_return = &wr;
+ height_return = &hr;
+ gravity_return = &gr;
+
+ user_geom = "1x1";
+ def_geom = NULL;
+ rval = XCALL;
+
+ trace("user_geom = %s, def_geom = %s", user_geom == NULL ? "<NULL>": user_geom, def_geom == NULL ? "<NULL>": def_geom);
+
+ if(wr != 0) {
+ report("Returned width was %d instead of 0", wr);
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good A
+When neither the
+.M base_height
+nor
+.M min_height
+components of the
+.S XSizeHints
+structure named by the
+.A hints
+argument is set, then the value 0 is used.
+>>STRATEGY
+Call XWMGeometry with user_geom = "1x1", def_geom = NULL and an XSizeHints
+ structure with flags component = PResizeInc , min_width = 21,
+ min_height = 31, width_inc = -1, height_inc = -1, base_height = 20 and
+ base_width = 30.
+Verify that the returned height is 0.
+>>CODE
+int rval;
+int xr, yr, wr, hr, gr;
+
+ bwidth = 10;
+
+ szhints2.flags = PResizeInc;
+ szhints2.min_width = 21;
+ szhints2.min_height = 31;
+ szhints2.width_inc = -1;
+ szhints2.height_inc = -1;
+ szhints2.base_height = 20;
+ szhints2.base_width = 30;
+
+ hints = &szhints2;
+ x_return = &xr;
+ y_return = &yr;
+ width_return = &wr;
+ height_return = &hr;
+ gravity_return = &gr;
+
+ user_geom = "1x1";
+ def_geom = NULL;
+ rval = XCALL;
+
+ trace("user_geom = %s, def_geom = %s", user_geom == NULL ? "<NULL>": user_geom, def_geom == NULL ? "<NULL>": def_geom);
+
+ if(hr != 0) {
+ report("Returned height was %d instead of 0", hr);
+ FAIL;
+ } else
+ PASS;
+
+>># Kieron Completed Review
diff --git a/xc/test/xsuite/xtest/tset/CH09/wthdrwwdw/wthdrwwdw.m b/xc/test/xsuite/xtest/tset/CH09/wthdrwwdw/wthdrwwdw.m
new file mode 100644
index 000000000..e9cf16e05
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH09/wthdrwwdw/wthdrwwdw.m
@@ -0,0 +1,182 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XWithdrawWindow CH09
+Status
+XWidthdrawWindow(display, w, screen_number)
+Display *display = Dsp;
+Window w = DRW(Dsp);
+int screen_number = DefaultScreen(Dsp);
+>>ASSERTION Good A
+A call to xname unmaps the window
+specified by the
+.A w
+argument
+and sends,
+to the root window of the screen specified by the
+.A screen_number
+argument, a synthetic
+.S UnmapNotify
+event with a
+.M window
+of
+.A w ,
+an
+.M event
+equal to the receiving root window and a
+.M from_configure
+element of
+.S False
+using an event mask of
+.S SubstructureRedirectMask |
+.S SubstructureNotifyMask
+and returns non-zero.
+>>STRATEGY
+Create a window using XCreateWindow.
+Select UnmapNotify events on the root using XSelectInput with SubstructureNotifyMask.
+Unmap the window using XWithdrawWindow.
+Verify that the window is unmapped using XGetWindowAttributes.
+Verify that a non-synthetic UnmapNotify event is generated.
+Verify that a synthetic UnmapNotify event is generated.
+
+Create a window using XCreateWindow.
+Select UnmapNotify events on the root using XSelectInput with SubstructureRedirectMask.
+Unmap the window using XWithdrawWindow.
+Verify that the window is unmapped using XGetWindowAttributes.
+Verify that a non-synthetic UnmapNotify event is generated.
+>>CODE
+int nevents;
+XVisualInfo *vp;
+XWindowAttributes atts;
+XEvent ev;
+XEvent rev;
+
+
+ resetvinf(VI_WIN);
+ nextvinf(&vp);
+
+ ev.type = UnmapNotify;
+ ev.xany.display = display;
+ ev.xunmap.type = UnmapNotify;
+ ev.xunmap.send_event = False;
+ ev.xunmap.display = display;
+ ev.xunmap.event = DRW(display);
+ ev.xunmap.from_configure = False;
+
+ CATCH_ERROR(display);
+ XSelectInput(display, DRW(display), SubstructureNotifyMask);
+ RESTORE_ERROR(display);
+
+ if(GET_ERROR(display) != Success) {
+ delete("XSelectInput() failed with an event mask of 0x%lx.", SubstructureNotifyMask);
+ return;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+ XCALL;
+
+ if(XGetWindowAttributes(display, w, &atts) == False){
+ delete("XGetWindowAttributes Failed on window id %lx.", (long) w);
+ return;
+ } else
+ CHECK;
+
+ if(atts.map_state != IsUnmapped) {
+ report("Window ID %lx was not unmapped", (long) w);
+ FAIL;
+ } else
+ CHECK;
+
+ ev.xunmap.window = w;
+ ev.xunmap.send_event = False;
+ rev.type = -1;
+ if( (nevents = getevent(display, &rev)) == 0 ) {
+ report("No event was generated.");
+ FAIL;
+ } else {
+ CHECK;
+ if( checkevent(&ev, &rev) != 0 )
+ FAIL;
+ else
+ CHECK;
+ }
+
+ ev.xunmap.send_event = True;
+ rev.type = -1;
+
+ if( (nevents = getevent(display, &rev)) == 0 ) {
+ report("No event was generated.");
+ FAIL;
+ } else {
+ CHECK;
+ if( checkevent(&ev, &rev) != 0 )
+ FAIL;
+ else
+ CHECK;
+ }
+
+ CATCH_ERROR(display);
+ XSelectInput(display, DRW(display), SubstructureRedirectMask);
+ RESTORE_ERROR(display);
+
+ if(GET_ERROR(display) != Success) {
+ delete("XSelectInput() failed with an event mask of 0x%lx.",SubstructureRedirectMask);
+ return;
+ } else
+ CHECK;
+
+ w = makewin(display, vp);
+ XCALL;
+
+ if(XGetWindowAttributes(display, w, &atts) == False){
+ delete("XGetWindowAttributes Failed on window id %lx.", (long) w);
+ return;
+ } else
+ CHECK;
+
+ if(atts.map_state != IsUnmapped) {
+ report("Window ID %lx was not unmapped", (long) w);
+ FAIL;
+ } else
+ CHECK;
+
+ ev.xunmap.window = w;
+ ev.xunmap.send_event = False;
+ rev.type = -1;
+ if( (nevents = getevent(display, &rev)) == 0 ) {
+ report("No event was generated.");
+ FAIL;
+ } else {
+ CHECK;
+ if( checkevent(&ev, &rev) != 0 )
+ FAIL;
+ else
+ CHECK;
+ }
+
+ CHECKPASS(12);
+
+>>ASSERTION Bad B 1
+>># Untestable, and not worth the effort of adding XTest extension facilities
+>># to provoke the error.
+When the
+.S UnmapNotify
+event is not successfully sent, then
+xname returns zero.
+>>ASSERTION Good A
+.ER BadWindow
+>># Completed Kieron Review
diff --git a/xc/test/xsuite/xtest/tset/CH10/Makefile b/xc/test/xsuite/xtest/tset/CH10/Makefile
new file mode 100644
index 000000000..ebfd51129
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/Makefile
@@ -0,0 +1,238 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+#
+# This Makefile can be used to compile all the tests in this
+# section of the X test suite in such a way that they are all links to
+# a single executable file. This normally allows a considerable
+# reduction in the disc space requirements for the X test suite
+# when fully built.
+#
+# There are two ways this can be done:
+# 1) Using the TET. Execute the command:
+# tcc -b -s link_exec xtest linkbuild
+# in the directory $TET_ROOT/xtest.
+# This will execute the TET build tool (which is normally pmake)
+# in the top level directory of each section of the test suite
+# (including this directory).
+#
+# 2) Directly without using the TET. Execute the command:
+# pmake
+# in this directory.
+#
+# For more details, refer to the User Guide
+#
+
+CAT=cat
+
+ALLTESTS=Tests
+
+TESTOFILES=\
+addpxl.o \
+clpbx.o \
+crtbtmpfrm.o \
+crtimg.o \
+crtpxmpfrm.o \
+crtrgn.o \
+dltcntxt.o \
+dstryimg.o \
+dstryrgn.o \
+emptyrgn.o \
+eqlrgn.o \
+fndcntxt.o \
+ftchbffr.o \
+ftchbyts.o \
+gtdflt.o \
+gtpxl.o \
+gtvslinf.o \
+intrsctrgn.o \
+iscrsrky.o \
+isfnctnky.o \
+iskypdky.o \
+ismdfrky.o \
+ismscfnctn.o \
+ispfky.o \
+kycdtkysym.o \
+kysymtkycd.o \
+kysymtstr.o \
+lkpkysym.o \
+lkpstr.o \
+mtchvslinf.o \
+offstrgn.o \
+plygnrgn.o \
+pntinrgn.o \
+prmllc.o \
+prsclr.o \
+prsgmtry.o \
+ptpxl.o \
+rbndkysym.o \
+rctinrgn.o \
+rdbtmpfl.o \
+rfrshkybrd.o \
+rmdstrydtb.o \
+rmgtfldtbs.o \
+rmgtrsrc.o \
+rmgtstrdtb.o \
+rmintlz.o \
+rmmrgdtbss.o \
+rmprscmmnd.o \
+rmptfldtbs.o \
+rmptlnrsrc.o \
+rmptrsrc.o \
+rmptstrrsr.o \
+rmqgtrsrc.o \
+rmqgtsrchl.o \
+rmqgtsrchr.o \
+rmqptrsrc.o \
+rmqptstrrs.o \
+rmqrktstr.o \
+rmstrtbndn.o \
+rmstrtqrk.o \
+rmstrtqrkl.o \
+rmunqqrk.o \
+rsrcmngrst.o \
+rttbffrs.o \
+sbimg.o \
+sbtrctrgn.o \
+shrnkrgn.o \
+strbffr.o \
+strbyts.o \
+strgn.o \
+strtkysym.o \
+svcntxt.o \
+unnrctwthr.o \
+unnrgn.o \
+unqcntxt.o \
+wrtbtmpfl.o \
+xrrgn.o
+
+LINKOFILE=linktbl.o
+OFILES = $(TESTOFILES) $(LINKOFILE)
+
+DIRLIST=\
+addpxl \
+clpbx \
+crtbtmpfrm \
+crtimg \
+crtpxmpfrm \
+crtrgn \
+dltcntxt \
+dstryimg \
+dstryrgn \
+emptyrgn \
+eqlrgn \
+fndcntxt \
+ftchbffr \
+ftchbyts \
+gtdflt \
+gtpxl \
+gtvslinf \
+intrsctrgn \
+iscrsrky \
+isfnctnky \
+iskypdky \
+ismdfrky \
+ismscfnctn \
+ispfky \
+kycdtkysym \
+kysymtkycd \
+kysymtstr \
+lkpkysym \
+lkpstr \
+mtchvslinf \
+offstrgn \
+plygnrgn \
+pntinrgn \
+prmllc \
+prsclr \
+prsgmtry \
+ptpxl \
+rbndkysym \
+rctinrgn \
+rdbtmpfl \
+rfrshkybrd \
+rmdstrydtb \
+rmgtfldtbs \
+rmgtrsrc \
+rmgtstrdtb \
+rmintlz \
+rmmrgdtbss \
+rmprscmmnd \
+rmptfldtbs \
+rmptlnrsrc \
+rmptrsrc \
+rmptstrrsr \
+rmqgtrsrc \
+rmqgtsrchl \
+rmqgtsrchr \
+rmqptrsrc \
+rmqptstrrs \
+rmqrktstr \
+rmstrtbndn \
+rmstrtqrk \
+rmstrtqrkl \
+rmunqqrk \
+rsrcmngrst \
+rttbffrs \
+sbimg \
+sbtrctrgn \
+shrnkrgn \
+strbffr \
+strbyts \
+strgn \
+strtkysym \
+svcntxt \
+unnrctwthr \
+unnrgn \
+unqcntxt \
+wrtbtmpfl \
+xrrgn
+
+all: subdirs test
+
+test:$P $(OFILES) $(LIBS) $(TCM)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(TCM) $(LIBS) $(SYSLIBS)
+ $(CAT) test > $(ALLTESTS)
+ $(RM) test
+
+subdirs:
+ if [ ! -f $(ALLTESTS) ]; then $(CAT) /dev/null > $(ALLTESTS); \
+ chmod a+x $(ALLTESTS); else : ; fi
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then \
+ (cd $$i; echo Compiling in $$i; $(TET_BUILD_TOOL) linkexec); \
+ fi; \
+ done
+
+# The xtestlib is made if it doesn't exist
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
+clean: cletests clesubdirs
+
+cletests:
+ $(RM) test $(OFILES) $(ALLTESTS) core
+
+clesubdirs:
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then (cd $$i; $(TET_CLEAN_TOOL) ); fi; done
+
+clobber: clean
diff --git a/xc/test/xsuite/xtest/tset/CH10/addpxl/addpxl.m b/xc/test/xsuite/xtest/tset/CH10/addpxl/addpxl.m
new file mode 100644
index 000000000..994b83281
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/addpxl/addpxl.m
@@ -0,0 +1,153 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XAddPixel CH10
+
+XAddPixel(ximage, value)
+XImage *ximage;
+long value;
+>>EXTERN
+mpattern(display, d, w, h, dep)
+Display *display;
+Drawable d;
+unsigned int w;
+unsigned int h;
+int dep;
+{
+int i;
+int j;
+int mod;
+GC gc;
+unsigned long val;
+
+ gc = makegc(display, d);
+ mod = 1<<dep;
+ val = 0;
+ for(j=0; j<h; j++)
+ for(i=0; i<w; i++) {
+ XSetForeground(display, gc, val);
+ XDrawPoint(display, d, gc, i, j);
+ val = (val + 1) % mod;
+ }
+}
+
+int
+mcheck(xi, w, h, dep)
+XImage *xi;
+unsigned int w;
+unsigned int h;
+int dep;
+{
+int i;
+int j;
+int mod;
+unsigned long val;
+
+ mod = 1<<dep;
+ val = value;
+ for(j=0; j<h; j++)
+ for(i=0; i<w; i++) {
+ if(XGetPixel(ximage, i, j) != val){
+ return 0;
+ }
+ val = (val + 1) % mod;
+ }
+ return 1;
+}
+>>ASSERTION Good A
+A call to xname adds the
+.A value
+argument to every pixel in the
+.A ximage
+argument.
+>>STRATEGY
+For all supported drawables:
+ Create a drawable.
+ Initialise the drawable's pixels.
+ For ZPixmap and XYPixmap:
+ Obtain an ximage from the drawable using XGetImage.
+ Add the drawables depth - 1 to every image pixel using xname.
+ Verify that the ximage pixels all set correctly using XGetPixel.
+>>CODE
+XVisualInfo *vi;
+int npix;
+unsigned int width;
+unsigned int height;
+Pixmap pm;
+Window win;
+int i;
+static int fmats[2] = { XYPixmap, ZPixmap };
+
+
+ for(resetvinf(VI_PIX); nextvinf(&vi);) {
+
+ pm = makepixm(Dsp, vi);
+ getsize(Dsp, pm, &width, &height);
+ width = width > 17 ? 17 : width;
+ height = height > 19 ? 19 : height;
+ mpattern(Dsp, pm, width, height, vi->depth);
+
+ for(i=0; i<2; i++) {
+ ximage = XGetImage(Dsp, pm, 0,0, width, height, AllPlanes, fmats[i]);
+ if( ximage == (XImage *) NULL ) {
+ delete("XGetImage() returned NULL.");
+ return;
+ } else {
+
+ value = (1 << vi->depth) - 1;
+ XCALL;
+ if(mcheck(ximage, width, height, vi->depth) == 0) {
+ report("XImage structure was not correct.");
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyImage(ximage);
+ }
+
+ }
+ }
+ npix = nvinf();
+
+ for(resetvinf(VI_WIN); nextvinf(&vi);) {
+
+ win = makewin(Dsp, vi);
+ getsize(Dsp, win, &width, &height);
+ width = width > 17 ? 17 : width;
+ height = height > 19 ? 19 : height;
+ mpattern(Dsp, win, width, height, vi->depth);
+
+ for(i=0; i<2; i++) {
+ ximage = XGetImage(Dsp, win, 0,0, width, height, AllPlanes, fmats[i]);
+ if(ximage == (XImage *) NULL) {
+ delete("XGetImage() returned NULL.");
+ return;
+ } else {
+ value = (1 << vi->depth) - 1;
+ XCALL;
+ if(mcheck(ximage, width, height, vi->depth) == 0) {
+ report("XImage structure was not correct.");
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyImage(ximage);
+ }
+ }
+
+ }
+
+ CHECKPASS(2 * (npix + nvinf()));
diff --git a/xc/test/xsuite/xtest/tset/CH10/clpbx/clpbx.m b/xc/test/xsuite/xtest/tset/CH10/clpbx/clpbx.m
new file mode 100644
index 000000000..d5f49f6db
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/clpbx/clpbx.m
@@ -0,0 +1,205 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XClipBox CH10
+
+XClipBox(r, rect_return)
+Region r;
+XRectangle *rect_return;
+>>ASSERTION Good A
+A call to xname returns in the
+.A rect_return
+argument the smallest rectangle enclosing the region
+.A r .
+>>EXTERN
+Status
+checknotclear(disp, d, fg)
+Display *disp;
+Drawable d;
+unsigned long fg;
+{
+XImage *im;
+unsigned long pix;
+unsigned int width;
+unsigned int height;
+int x;
+int y;
+
+ getsize(Dsp, d, &width, &height);
+
+ if ((im = XGetImage(disp, d, 0, 0, width, height, AllPlanes, ZPixmap)) == (XImage*) NULL) {
+ delete("XGetImage failed");
+ return(False);
+ }
+
+ for(y=0; y<height; y++)
+ for(x=0; x<width; x++)
+ if(XGetPixel(im, x, y) == fg)
+ return(True);
+ return(False);
+}
+>>STRATEGY
+Create a region using XPolygonRegion.
+Create a gc using XCreateGC.
+Create a window using XCreateWindow.
+Set the clip mask of the gc to the region.
+Fill the entire drawable with W_FG using XFillRectangle.
+Verify that the drawable is not completely W_BG.
+Set the foreground of the gc to W_BG.
+Obtain the smallest rectangle enclosing the polygon using xname.
+Draw the returned rectangle in W_BG using XFillRectangle.
+Verify that the drawable is completely W_BG
+
+Create a window using XCreateWindow.
+Fill the entire drawable with W_FG using XFillRectangle and the first gc.
+Verify that the drawable is not completely W_BG.
+Draw the smallest enclosing rectangle offset by +1+0 in W_BG using XFillRectangle and the second gc.
+Verify that the drawable is not completely W_BG.
+
+Create a window using XCreateWindow.
+Fill the entire drawable with W_FG using XFillRectangle and the first gc.
+Verify that the drawable is not completely W_BG.
+Draw the smallest enclosing rectangle offset by -1+0 in W_BG using XFillRectangle and the second gc.
+Verify that the drawable is not completely W_BG.
+
+Create a window using XCreateWindow.
+Fill the entire drawable with W_FG using XFillRectangle and the first gc.
+Verify that the drawable is not completely W_BG.
+Draw the smallest enclosing rectangle offset by +0+1 in W_BG using XFillRectangle and the second gc.
+Verify that the drawable is not completely W_BG.
+
+Create a window using XCreateWindow.
+Fill the entire drawable with W_FG using XFillRectangle and the first gc.
+Verify that the drawable is not completely W_BG.
+Draw the smallest enclosing rectangle offset by +0-1 in W_BG using XFillRectangle and the second gc.
+Verify that the drawable is not completely W_BG.
+>>CODE
+static XPoint points[] = { {10, 10}, {74, 10}, {75, 30}, {65, 60}, {65, 30}, {75, 60},
+ {30, 50}, {30, 74}, {60, 74}, {60, 5}, {70, 5}, {70, 75}, {10, 85} };
+Region reg;
+XRectangle rect;
+XVisualInfo *vi;
+Window win;
+GC gc;
+GC gc2;
+unsigned int width;
+unsigned int height;
+
+ reg = XPolygonRegion( points, NELEM(points), WindingRule);
+ resetvinf(VI_WIN);
+ nextvinf(&vi);
+ win = makewin(Dsp, vi);
+ gc = makegc(Dsp, win);
+ gc2 = makegc(Dsp, win);
+ XSetRegion(Dsp, gc, reg);
+ XSetForeground(Dsp, gc, W_FG);
+ XSetForeground(Dsp, gc2, W_BG);
+ getsize(Dsp, win, &width, &height);
+ XFillRectangle(Dsp, win, gc, 0,0, width, height);
+
+ if(checknotclear(Dsp, win, W_FG) == 0) {
+ delete("XFillRectangle did not set any pixel to foreground.");
+ return;
+ } else
+ CHECK;
+
+ r = reg;
+ rect_return = &rect;
+ XCALL;
+
+ XDestroyRegion(reg);
+
+ XFillRectangle(Dsp, win, gc2, rect.x, rect.y, rect.width, rect.height);
+
+ if(checknotclear(Dsp, win, W_FG) != 0 ) {
+ report("With a region used as the clip-mask in a GC,");
+ report("%s() did not return a sufficiently large rectangle.", TestName);
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ win = makewin(Dsp, vi);
+ XFillRectangle(Dsp, win, gc, 0,0, width, height);
+
+ if(checknotclear(Dsp, win, W_FG) == 0) {
+ delete("XFillRectangle did not set any pixel to foreground.");
+ return;
+ } else
+ CHECK;
+ XFillRectangle(Dsp, win, gc2, rect.x+1, rect.y, rect.width, rect.height);
+
+ if(checknotclear(Dsp, win, W_FG) == 0 ) {
+ report("With a region used as the clip-mask in a GC,");
+ report("%s() did not return a sufficiently small rectangle.in the x-direction.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ win = makewin(Dsp, vi);
+ XFillRectangle(Dsp, win, gc, 0,0, width, height);
+
+ if(checknotclear(Dsp, win, W_FG) == 0) {
+ delete("XFillRectangle did not set any pixel to foreground.");
+ return;
+ } else
+ CHECK;
+ XFillRectangle(Dsp, win, gc2, rect.x-1, rect.y, rect.width, rect.height);
+
+ if(checknotclear(Dsp, win, W_FG) == 0 ) {
+ report("With a region used as the clip-mask in a GC,");
+ report("%s() did not return a sufficiently small rectangle in the x-direction.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ win = makewin(Dsp, vi);
+ XFillRectangle(Dsp, win, gc, 0,0, width, height);
+
+ if(checknotclear(Dsp, win, W_FG) == 0) {
+ delete("XFillRectangle did not set any pixel to foreground.");
+ return;
+ } else
+ CHECK;
+
+ XFillRectangle(Dsp, win, gc2, rect.x, rect.y+1, rect.width, rect.height);
+
+ if(checknotclear(Dsp, win, W_FG) == 0 ) {
+ report("With a region used as the clip-mask in a GC,");
+ report("%s() did not return a sufficiently small rectangle in the y-direction.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ win = makewin(Dsp, vi);
+ XFillRectangle(Dsp, win, gc, 0,0, width, height);
+
+ if(checknotclear(Dsp, win, W_FG) == 0) {
+ delete("XFillRectangle did not set any pixel to foreground.");
+ return;
+ } else
+ CHECK;
+
+ XFillRectangle(Dsp, win, gc2, rect.x, rect.y-1, rect.width, rect.height);
+
+ if(checknotclear(Dsp, win, W_FG) == 0 ) {
+ report("With a region used as the clip-mask in a GC,");
+ report("%s() did not return a sufficiently small rectangle in the y-direction.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(10);
diff --git a/xc/test/xsuite/xtest/tset/CH10/crtbtmpfrm/crtbtmpfrm.m b/xc/test/xsuite/xtest/tset/CH10/crtbtmpfrm/crtbtmpfrm.m
new file mode 100644
index 000000000..e1db2e0c4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/crtbtmpfrm/crtbtmpfrm.m
@@ -0,0 +1,151 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCreateBitmapFromData CH10
+Pixmap
+
+Display *display = Dsp;
+Drawable d = defwin(display);
+char *data = (char*)cbfd_one;
+unsigned int width=10;
+unsigned int height=20;
+>>EXTERN
+/* data for a "checkerboard" 10x20 bitmap. */
+static unsigned char cbfd_one[]= {
+ 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00,
+ 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0x1f, 0x00, 0xe0, 0x03, 0xe0, 0x03,
+ 0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x03, 0xe0, 0x03,
+ 0xe0, 0x03, 0xe0, 0x03};
+
+>>ASSERTION Good A
+A call to xname returns a bitmap containing the
+.A data
+of width
+.A width
+and height
+.A height .
+>>STRATEGY
+Call xname to create the bitmap from the data.
+Use XGetGeometry to check pixmap.
+Verify the pixmap was as expected.
+>>CODE
+Pixmap ret;
+Window wt_r;
+int it_r;
+unsigned int width_ret, height_ret;
+unsigned int uit_r;
+unsigned int depth_ret;
+struct area ar;
+
+/* Call xname to create the bitmap from the data. */
+ ret=XCALL;
+
+/* Use XGetGeometry to check pixmap. */
+ if(!XGetGeometry(display, ret, &wt_r, &it_r, &it_r,
+ &width_ret, &height_ret, &uit_r, &depth_ret)) {
+ delete("XGetGeometry failed.");
+ return;
+ } else
+ CHECK;
+
+#ifdef TESTING
+ depth_ret = 2;
+ width_ret++;
+ height_ret++;
+#endif
+
+ if(width_ret!=width || height_ret!=height) {
+ FAIL;
+ report("%s created a pixmap of unexpected geometry.",
+ TestName);
+ report("Expected width, height: %d,%d", width, height);
+ report("Returned width, height: %d,%d", width_ret, height_ret);
+ } else
+ CHECK;
+
+ if(depth_ret != 1) {
+ FAIL;
+ report("%s created a pixmap of unexpected depth.",
+ TestName);
+ report("Expected depth: 1");
+ report("Returned depth: %u", depth_ret);
+ } else
+ CHECK;
+
+/* Verify the pixmap was as expected. */
+ setarea(&ar,0,0,5,10);
+ if(!checkarea(display, ret, &ar, W_FG, 0, CHECK_IN)) {
+ FAIL;
+ report("%s did not return the expected pixmap.", TestName);
+ trace("Top right quarter was incorrect");
+ } else
+ CHECK;
+
+ setarea(&ar,5,0,5,10);
+ if(!checkarea(display, ret, &ar, W_BG, 0, CHECK_IN)) {
+ FAIL;
+ report("%s did not return the expected pixmap.", TestName);
+ trace("Top left quarter was incorrect");
+ } else
+ CHECK;
+
+ setarea(&ar,0,10,5,10);
+ if(!checkarea(display, ret, &ar, W_BG, 0, CHECK_IN)) {
+ FAIL;
+ report("%s did not return the expected pixmap.", TestName);
+ trace("Bottom right quarter was incorrect");
+ } else
+ CHECK;
+
+ setarea(&ar,5,10,5,10);
+ if(!checkarea(display, ret, &ar, W_FG, 0, CHECK_IN)) {
+ FAIL;
+ report("%s did not return the expected pixmap.", TestName);
+ trace("Bottom Left quarter was incorrect");
+ } else
+ CHECK;
+
+ CHECKPASS(7);
+
+>>ASSERTION Bad B 1
+When sufficient temporary storage cannot be allocated,
+then a call to xname returns
+.S None .
+>>ASSERTION Bad B
+.ER BadAlloc
+>>ASSERTION Bad A
+When a drawable argument does not name a valid drawable, then one or more
+.S BadDrawable
+errors, one or more
+.S BadGC
+errors or both types of error occur.
+>>STRATEGY
+Create a bad drawable by creating and destroying a window.
+Call test function using bad drawable as the drawable argument.
+Verify that a BadDrawable and BadGC error occurs.
+>>CODE BadDrawable
+
+ seterrdef();
+
+ A_DRAWABLE = (Drawable)badwin(A_DISPLAY);
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() == BadDrawable || geterr() == BadGC)
+ PASS;
+ else
+ FAIL;
diff --git a/xc/test/xsuite/xtest/tset/CH10/crtimg/crtimg.m b/xc/test/xsuite/xtest/tset/CH10/crtimg/crtimg.m
new file mode 100644
index 000000000..bc21aef84
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/crtimg/crtimg.m
@@ -0,0 +1,364 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCreateImage CH10
+XImage *
+XCreateImage(display, visual, depth, format, offset, data, width, height, bitmap_pad, bytes_per_line)
+Display *display = Dsp;
+Visual *visual;
+unsigned int depth;
+int format;
+int offset;
+char *data;
+unsigned int width;
+unsigned int height;
+int bitmap_pad;
+int bytes_per_line;
+>>EXTERN
+int
+checkstruct(im, width, height, offset, format, data, bo, bmu, bmbo, bp, dep, bpl, bpp, rm, gm, bm)
+XImage *im;
+int width;
+int height;
+int offset;
+int format;
+char *data;
+int bo;
+int bmu;
+int bmbo;
+int bp;
+int dep;
+int bpl;
+int bpp;
+unsigned long rm;
+unsigned long gm;
+unsigned long bm;
+{
+
+ int pass = 0;
+ int fail = 0;
+
+ if(im-> width != width ) {
+ report("The width component was %d instead of %d.", im->width, width);
+ fail++;
+ } else
+ pass++;
+
+ if(im-> height != height ) {
+ report("The height component was %d instead of %d.", im->height, height);
+ fail++;
+ } else
+ pass++;
+
+ if(im-> xoffset != offset ) {
+ report("The xoffset component was %d instead of %d.", im->xoffset, offset);
+ fail++;
+ } else
+ pass++;
+
+ if(im-> format != format ) {
+ report("The format component was %d instead of %d.", im->format, format);
+ fail++;
+ } else
+ pass++;
+
+ if(im-> data == (char *) NULL) {
+ report("The data component was NULL.");
+ fail++;
+ } else {
+ pass++;
+ if(strcmp(im->data, data) != 0) {
+ report("The data component was incorrectly set.");
+ fail++;
+ } else
+ pass++;
+ }
+
+ if(im-> byte_order != bo ) {
+ report("The byte_order component was %d instead of %d.", im->byte_order, bo);
+ fail++;
+ } else
+ pass++;
+
+ if(im-> bitmap_unit != bmu ) {
+ report("The bitmap_unit component was %d instead of %d.", im->bitmap_unit, bmu);
+ fail++;
+ } else
+ pass++;
+
+ if(im-> bitmap_bit_order != bmbo ) {
+ report("The bitmap_bit_order component was %d instead of %d.", im->bitmap_bit_order, bmbo);
+ fail++;
+ } else
+ pass++;
+
+ if(im-> bitmap_pad != bp ) {
+ report("The bitmap_pad component was %d instead of %d.", im->bitmap_pad, bp);
+ fail++;
+ } else
+ pass++;
+
+ if(im-> depth != dep) {
+ report("The depth component was %d instead of %d.", im->depth, dep);
+ fail++;
+ } else
+ pass++;
+
+ if(im-> bytes_per_line != bpl) {
+ report("The bytes_per_line component was %d instead of %d.", im->bytes_per_line, bpl);
+ fail++;
+ } else
+ pass++;
+
+ if(im-> bits_per_pixel != bpp) {
+ report("The bits_per_pixel component was %d instead of %d.", im->bits_per_pixel, bpp);
+ fail++;
+ } else
+ pass++;
+
+ if(im-> red_mask != rm ) {
+ report("The red_mask component was %lu instead of %lu.", im->red_mask, rm);
+ fail++;
+ } else
+ pass++;
+
+ if(im-> green_mask != gm ) {
+ report("The green_mask component was %lu instead of %lu.", im->green_mask, gm);
+ fail++;
+ } else
+ pass++;
+
+ if(im-> blue_mask != bm ) {
+ report("The blue_mask component was %lu instead of %lu.", im->blue_mask, bm);
+ fail++;
+ } else
+ pass++;
+
+ if( pass==16 && fail==0 )
+ return 1;
+ return 0;
+}
+>>ASSERTION Good A
+A call to xname allocates and returns an
+.S XImage
+structure.
+>>STRATEGY
+For format XYPixmap and ZPixmap:
+ Create an XImage structure using xname.
+ Verify that the call did not return NULL.
+ Verify that the structure components set from the parameters are set correctly.
+>>CODE
+XVisualInfo *vi;
+XImage *im;
+int byteord;
+int bmunit;
+int bmbitord;
+int bmpad;
+unsigned long rm;
+unsigned long gm;
+unsigned long bm;
+int bpp;
+int i;
+XPixmapFormatValues *pv;
+XPixmapFormatValues *f;
+int npv;
+
+ if((pv = XListPixmapFormats(display, &npv)) == (XPixmapFormatValues *) NULL) {
+ delete("XListPixmapFormats() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ byteord = ImageByteOrder(display);
+ bmunit = BitmapUnit(display);
+ bmbitord = BitmapBitOrder(display);
+ bmpad = BitmapPad(display);
+
+ offset = 13;
+ data = "SomeTextData";
+
+ width = 10;
+ height = 20;
+ bitmap_pad = bmpad;
+ bytes_per_line = 11;
+
+
+ for(resetvinf(VI_WIN_PIX); nextvinf(&vi);) {
+
+ visual = vi->visual;
+ depth = vi->depth;
+ rm = vi->red_mask;
+ gm = vi->green_mask;
+ bm = vi->blue_mask;
+
+ trace("ZPixmap.");
+ format = ZPixmap;
+ im = XCALL;
+
+ if( im == (XImage *) NULL ) {
+ delete("%s() returned NULL.", TestName);
+ fail++; /* Avoid path checking in CHECKPASS */
+ } else {
+ CHECK;
+
+ bpp = -1;
+ for(i=npv, f=pv; i>0; i--,f++)
+ if(f->depth == depth) {
+ bpp = f->bits_per_pixel;
+ break;
+ }
+
+ if(bpp == -1) {
+ delete("Could not determine the bits_per_pixel component for depth %d.", depth);
+ fail++; /* Avoid path checking in CHECKPASS */
+ bpp = depth;
+ } else
+ CHECK;
+
+ if(checkstruct(im, width, height, offset, format, data, byteord, bmunit, bmbitord, bitmap_pad, depth, bytes_per_line, bpp, rm, gm, bm) == 0)
+ FAIL;
+ else
+ CHECK;
+ }
+
+ im->data = (char *) NULL;
+ XDestroyImage(im);
+
+ trace("XYPixmap.");
+ format = XYPixmap;
+ im = XCALL;
+
+ if( im == (XImage *) NULL ) {
+ delete("%s() returned NULL.", TestName);
+ fail++; /* Avoid path checking in CHECKPASS */
+ } else {
+ CHECK;
+
+ if(checkstruct(im, width, height, offset, format, data, byteord, bmunit, bmbitord, bitmap_pad, depth, bytes_per_line, 1, rm, gm, bm) == 0)
+ FAIL;
+ else
+ CHECK;
+
+ }
+
+ im->data = (char *) NULL;
+ XDestroyImage(im);
+ }
+
+
+ XFree( (char *) pv);
+ CHECKPASS(1 + nvinf() * 5);
+
+>>ASSERTION Good B 1
+When sufficient storage cannot be allocated,
+then a call to xname returns NULL.
+>>ASSERTION Good A
+When the
+.A bytes_per_line
+argument is zero, then scanlines are assumed to be contiguous.
+>>STRATEGY
+For format XYPixmap and ZPixmap:
+ Create an XImage structure using xname with bytes_per_line argument set to zero.
+ Verify that the call did not return NULL.
+ Verify that the bytes_per_line component of the structure is correct.
+>>CODE
+#define ROUNDUP(nbytes, pad) ((((nbytes) + ((pad) - 1)) / (pad)) * (pad)) /* Courtesy of Xlib */
+XVisualInfo *vi;
+XImage *im;
+int bmpad;
+int bpl;
+int bpp;
+int i;
+XPixmapFormatValues *pv;
+XPixmapFormatValues *f;
+int npv;
+
+ if((pv = XListPixmapFormats(display, &npv)) == (XPixmapFormatValues *) NULL) {
+ delete("XListPixmapFormats() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ bmpad = BitmapPad(display);
+ offset = 0;
+ data = (char *) NULL;
+ width = 10;
+ height = 20;
+ bitmap_pad = bmpad;
+ bytes_per_line = 0;
+
+
+ for(resetvinf(VI_WIN_PIX); nextvinf(&vi);) {
+
+ visual = vi->visual;
+ depth = vi->depth;
+ format = ZPixmap;
+ im = XCALL;
+
+ if( im == (XImage *) NULL ) {
+ delete("%s() returned NULL.", TestName);
+ fail++; /* Avoid path checking in CHECKPASS */
+ } else {
+ CHECK;
+
+ bpp = -1;
+ for(i=npv, f=pv; i>0; i--,f++)
+ if(f->depth == depth) {
+ bpp = f->bits_per_pixel;
+ break;
+ }
+
+ if(bpp == -1) {
+ delete("Could not determine the bits_per_pixel component for depth %d.", depth);
+ fail++; /* Avoid path checking in CHECKPASS */
+ bpp =depth;
+ } else
+ CHECK;
+
+ bpl = ROUNDUP((bpp * width), bmpad) >> 3;
+ if(im->bytes_per_line != bpl) {
+ report("The bytes_per_line component was %d instead of %d.", im->bytes_per_line, bpl);
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyImage(im);
+ }
+
+ format = XYPixmap;
+ im = XCALL;
+
+ if( im == (XImage *) NULL ) {
+ delete("%s() returned NULL.", TestName);
+ fail++; /* Avoid path checking in CHECKPASS */
+ } else {
+ CHECK;
+
+ bpl = ROUNDUP((width + offset), bmpad) >> 3;
+
+ if(im->bytes_per_line != bpl) {
+ report("The bytes_per_line component was %d instead of %d.", im->bytes_per_line, bpl);
+ FAIL;
+ } else
+ CHECK;
+
+ im->data = (char *) NULL;
+ XDestroyImage(im);
+ }
+ }
+
+ XFree( (char *) pv);
+ CHECKPASS(1 + nvinf() * 5);
diff --git a/xc/test/xsuite/xtest/tset/CH10/crtpxmpfrm/crtpxmpfrm.m b/xc/test/xsuite/xtest/tset/CH10/crtpxmpfrm/crtpxmpfrm.m
new file mode 100644
index 000000000..b25887485
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/crtpxmpfrm/crtpxmpfrm.m
@@ -0,0 +1,200 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCreatePixmapFromBitmapData CH10
+Pixmap
+
+Display *display = Dsp;
+Drawable d;
+char *data = (char*)cpfbd_one;
+unsigned int width = 16;
+unsigned int height = 8;
+unsigned long fg = W_BG;
+unsigned long bg = W_FG;
+unsigned int depth = 1;
+>>EXTERN
+/* Data for a "checkerboard" pixmap. */
+static unsigned char cpfbd_one[] = {
+ 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00,
+ 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff};
+
+>>ASSERTION Good A
+A call to xname returns a pixmap
+containing the bitmap-format
+.S XPutImage
+of the
+.A data
+of depth
+.A depth ,
+width
+.A width ,
+and height
+.A height ,
+and with foreground and background pixel values of
+.A fg
+and
+.A bg .
+>>STRATEGY
+Create a drawable for the pixmap.
+Call xname to create the pixmap from the data.
+Call XGetGeometry to check the pixmap.
+Verify the pixmap was as expected.
+>>CODE
+XVisualInfo *vp;
+Pixmap ret;
+Window wr_r;
+int it_r;
+unsigned int width_ret, height_ret;
+unsigned int uit_r;
+unsigned int depth_ret;
+struct area ar;
+
+/* Create a drawable for the pixmap. */
+ resetvinf(VI_WIN); nextvinf(&vp);
+ d = makewin(display, vp);
+ depth = vp->depth;
+
+/* Call xname to create the pixmap from the data. */
+ ret=XCALL;
+
+/* Call XGetGeometry to check the pixmap. */
+ if(!XGetGeometry(display, ret, &wr_r, &it_r, &it_r,
+ &width_ret, &height_ret, &uit_r, &depth_ret)) {
+ delete("XGetGeometry failed.");
+ return;
+ } else
+ CHECK;
+
+ if(width_ret!=width || height_ret!=height) {
+ FAIL;
+ report("%s created a pixmap of unexpected geometry",
+ TestName);
+ report("Expected width, height: %d,%d", width, height);
+ report("Returned width, height: %d,%d", width_ret, height_ret);
+ } else
+ CHECK;
+
+ if(depth_ret != depth) {
+ FAIL;
+ report("%s created a pixmap of unexpected depth.",
+ TestName);
+ report("Expected depth: %u", depth);
+ report("Returned depth: %u", depth_ret);
+ } else
+ CHECK;
+
+/* Verify the pixmap was as expected. */
+ setarea(&ar,0,0,8,4);
+ if (!checkarea(display, ret, &ar, fg, 0, CHECK_IN)) {
+ FAIL;
+ report("%s did not return the expected pixmap.", TestName);
+ trace("Top left quarter was incorrect");
+ } else
+ CHECK;
+
+ setarea(&ar,8,0,8,4);
+ if (!checkarea(display, ret, &ar, bg, 0, CHECK_IN)) {
+ FAIL;
+ report("%s did not return the expected pixmap.", TestName);
+ trace("Top right quarter was incorrect");
+ } else
+ CHECK;
+
+ setarea(&ar,0,4,8,4);
+ if (!checkarea(display, ret, &ar, bg, 0, CHECK_IN)) {
+ FAIL;
+ report("%s did not return the expected pixmap.", TestName);
+ trace("Bottom left quarter was incorrect");
+ } else
+ CHECK;
+
+ setarea(&ar,8,4,8,4);
+ if (!checkarea(display, ret, &ar, fg, 0, CHECK_IN)) {
+ FAIL;
+ report("%s did not return the expected pixmap.", TestName);
+ trace("Bottom right quarter was incorrect");
+ } else
+ CHECK;
+
+ CHECKPASS(7);
+
+>>ASSERTION Bad A
+When the
+.A depth
+is not supported by the screen of the specified drawable
+.A d ,
+then on a call to xname a
+.S BadValue
+error occurs.
+>>STRATEGY
+Calculate a bad depth.
+Call xname with a bad depth
+Verify that a bad value error occurred.
+>>CODE BadValue
+XVisualInfo *vp;
+int baddepth;
+
+
+/* Calculate a bad depth. */
+ baddepth=1;
+ resetvinf(VI_PIX);
+ for(baddepth=1; nextvinf(&vp); )
+ if(baddepth < vp->depth)
+ baddepth=vp->depth;
+ baddepth *= 2;
+
+/* Call xname with a bad depth */
+ depth=baddepth;
+ d = defwin(display);
+ XCALL;
+
+/* Verify that a bad value error occurred. */
+ if (geterr() != BadValue) {
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad B 1
+When sufficient temporary storage cannot be allocated, then a call to
+xname returns
+.S NULL .
+>>ASSERTION Bad B
+.ER BadAlloc
+>>ASSERTION Bad A
+When a drawable argument does not name a valid drawable, then one or more
+.S BadDrawable
+errors, one or more
+.S BadGC
+errors or both types of error occur.
+>>STRATEGY
+Create a bad drawable by creating and destroying a window.
+Call test function using bad drawable as the drawable argument.
+Verify that a BadDrawable and BadGC error occurs.
+>>CODE BadDrawable
+
+ seterrdef();
+
+ A_DRAWABLE = (Drawable)badwin(A_DISPLAY);
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() == BadDrawable || geterr() == BadGC)
+ PASS;
+ else
+ FAIL;
diff --git a/xc/test/xsuite/xtest/tset/CH10/crtrgn/crtrgn.m b/xc/test/xsuite/xtest/tset/CH10/crtrgn/crtrgn.m
new file mode 100644
index 000000000..14dfde826
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/crtrgn/crtrgn.m
@@ -0,0 +1,75 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XCreateRegion CH10
+Region
+XCreateRegion()
+>>ASSERTION Good A
+A call to xname returns a new, empty region.
+>>STRATEGY
+Create a region using xname.
+Verify that the call did not return NULL.
+Verify that the region is empty using XEmptyRegion.
+Obtain the smallest rectangle enclosing the region using XClipBox.
+Verify that the returned rectangle has width and height zero.
+Union a rectangle with the region using XUnionRectWithRegion.
+Obtain the smallest rectangle bounding the region using XClipBox.
+Verify that the bounding box is the same as the original rectangle.
+Destroy the region using XDestroyRegion.
+>>CODE
+static XRectangle rect = { -99, 666, 198, 3 };
+XRectangle bbox;
+Region reg;
+
+ reg = XCALL;
+
+ if(reg == (Region) NULL) {
+ delete("%s() returned NULL.", TestName);
+ return;
+ } else
+ CHECK;
+
+ if( XEmptyRegion(reg) != True) {
+ report("XEmptyRegion() returned True.");
+ FAIL;
+ } else
+ CHECK;
+
+ XClipBox(reg, &bbox);
+ if( (bbox.width != 0) || (bbox.height != 0)) {
+ report("%s() returned a region of width %d and height %d instead of 0.", TestName, bbox.width, bbox.height);
+ FAIL;
+ } else
+ CHECK;
+
+ XUnionRectWithRegion(&rect, reg, reg);
+ XClipBox(reg, &bbox);
+
+ if((rect.x != bbox.x) || (rect.y != bbox.y) || (rect.width != bbox.width) || (rect.height != bbox.height) ) {
+ report("%s() returned the rectangle x %d, y %d, height %d, width %d, instead of x %d, y %d, height %d, width %d.",
+ "XClipBox",
+ rect.x, rect.y, rect.width, rect.height,
+ bbox.x, bbox.y, bbox.width, bbox.height );
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyRegion(reg);
+ CHECKPASS(4);
+
+>>ASSERTION Bad B 1
+When sufficient storage cannot be allocated,
+then a call to xname returns NULL.
diff --git a/xc/test/xsuite/xtest/tset/CH10/dltcntxt/dltcntxt.m b/xc/test/xsuite/xtest/tset/CH10/dltcntxt/dltcntxt.m
new file mode 100644
index 000000000..e6aeea7f6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/dltcntxt/dltcntxt.m
@@ -0,0 +1,116 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDeleteContext CH10
+int
+
+Display *display = Dsp;
+Window w = defwin(display);
+XContext context = XUniqueContext();
+>>EXTERN
+static char *xdc_data = "a context!";
+
+>>ASSERTION Good A
+A call to xname deletes the table entry for previously saved context data
+for display
+.A display ,
+window
+.A w
+and context type
+.A context ,
+and returns zero.
+>>STRATEGY
+Create a test window.
+Save some context information using XSaveContext.
+Delete the context information using xname.
+Verify that the context was deleted using XFindContext.
+>>CODE
+int a;
+int ret;
+caddr_t b;
+
+/* Create a test window. */
+/* Save some context information using XSaveContext. */
+ a = XSaveContext(display, w, context, (caddr_t)xdc_data);
+ if (a != 0) {
+ delete("Could not save test context.");
+ report("Returned error: %s", contexterrorname(a));
+ return;
+ } else
+ CHECK;
+
+/* Delete the context information using xname. */
+ ret = XCALL;
+ if (ret != 0) {
+ FAIL;
+ report("%s returned an error when expected to succeed.",
+ TestName);
+ report("Returned error: %s", contexterrorname(ret));
+ } else
+ CHECK;
+
+
+/* Verify that the context was deleted using XFindContext. */
+ a = XFindContext(display, w, context, &b);
+ if (a != XCNOENT) {
+ FAIL;
+ report("%s did not delete the context.", TestName);
+ report("Return code: %s", contexterrorname(a));
+ if (b == (caddr_t)xdc_data) {
+ report("Returned data was the context supplied.");
+ } else {
+ report("Returned data was not the context supplied.");
+ report("Supplied context: %0x", (unsigned int)xdc_data);
+ report("Returned context: %0x", (unsigned int)b);
+ }
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Bad A
+When there is no previously saved context data
+for display
+.A display ,
+window
+.A w
+and context type
+.A context ,
+then a call to xname returns
+.S XCNOENT .
+>>STRATEGY
+Create a test window with no context.
+Call xname to delete the non-existent context.
+Verify that XCNOENT was returned.
+>>CODE
+int ret;
+
+/* Create a test window with no context. */
+
+/* Call xname to delete the non-existent context. */
+ ret = XCALL;
+
+/* Verify that XCNOENT was returned. */
+ if (ret != XCNOENT) {
+ FAIL;
+ report("%s did not return XCNOENT when",
+ TestName);
+ report("deleting a non-existent context.");
+ report("Return code: %s", contexterrorname(ret));
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH10/dstryimg/dstryimg.m b/xc/test/xsuite/xtest/tset/CH10/dstryimg/dstryimg.m
new file mode 100644
index 000000000..d786e566a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/dstryimg/dstryimg.m
@@ -0,0 +1,65 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDestroyImage CH10
+int
+XDestroyImage(ximage)
+XImage *ximage;
+>>ASSERTION Good B 1
+A call to xname frees both the structure and image data specified by the
+.A ximage
+argument.
+>>STRATEGY
+For 20 iterations:
+ Create an image using XGetImage on the root window.
+ Access the region data using XAddPixel.
+ Free the structure using xname.
+ Create an image using XCreateImage.
+ Free the structure using xname.
+>>CODE
+int i;
+int bp;
+static int fmat[2] = {XYPixmap, ZPixmap};
+
+ bp = BitmapPad(Dsp);
+
+ for(i=0; i<20; i++) {
+
+ ximage = XGetImage(Dsp, RootWindow(Dsp, 0), 0,0, 12,13, AllPlanes, fmat[ i%2 ]);
+ if(ximage == (XImage *) NULL){
+ delete("XGetImage() returned NULL.");
+ return;
+ } else
+ if(i == 19)
+ CHECK;
+
+ XAddPixel(ximage, 1<<29 - 7);
+ XCALL;
+
+ ximage = XCreateImage(Dsp, DefaultVisual(Dsp, 0), 32, fmat [ 1 - i%2 ], 5, (char *) NULL, 13,23, 32, 0);
+
+ if(ximage == (XImage *) NULL){
+ delete("XCreateImage() returned NULL.");
+ return;
+ } else
+ if(i == 19)
+ CHECK;
+
+ XCALL;
+
+ }
+
+ CHECKUNTESTED(2);
diff --git a/xc/test/xsuite/xtest/tset/CH10/dstryrgn/dstryrgn.m b/xc/test/xsuite/xtest/tset/CH10/dstryrgn/dstryrgn.m
new file mode 100644
index 000000000..0f9f7e38a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/dstryrgn/dstryrgn.m
@@ -0,0 +1,47 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XDestroyRegion CH10
+
+XDestroyRegion(r)
+Region r;
+>>ASSERTION Bad B 1
+A call to xname deallocates the storage associated with the region
+.A r .
+>>STRATEGY
+Create a gc using XCreateGC.
+For 20 iterations:
+ Create a region using XPolygonRegion.
+ Set the gc clip mask to the region using XSetRegion.
+ Destroy the region using xname.
+>>CODE
+int i;
+int loopcount = 20;
+GC gc;
+static int rule[] = { EvenOddRule, WindingRule };
+static XPoint points[] = { {20,20}, {35,10}, {55,10}, {80,20}, {90,35}, {85,50}, {75,65}, {50,70}, {30,65}, {20,60}, {15,40},
+ {75,60}, {60,45}, {55,60}, {30,55}, {35,35}, {15,40}, {20,18}, {45,10}, {70,15}, {55,30}, {80,45},
+ {85,40}, {30,20}, {20,55}, {30,69}, {55,35}, {85,44}, {10,43}, {14,66} };
+
+ gc = makegc(Dsp, DRW(Dsp));
+ for(i=0; i<loopcount; i++) {
+ r = XPolygonRegion(points, NELEM(points), rule[i % 2]);
+ XSetRegion(Dsp, gc, r);
+ XCALL;
+ CHECK;
+ }
+
+ CHECKUNTESTED(loopcount);
diff --git a/xc/test/xsuite/xtest/tset/CH10/emptyrgn/emptyrgn.m b/xc/test/xsuite/xtest/tset/CH10/emptyrgn/emptyrgn.m
new file mode 100644
index 000000000..20aaa3e42
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/emptyrgn/emptyrgn.m
@@ -0,0 +1,97 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XEmptyRegion CH10
+Bool
+XEmptyRegion(r)
+Region r;
+>>ASSERTION Good A
+When the region
+.A r
+is empty, then a call to xname returns
+.S True .
+>>STRATEGY
+Create a region using XCreateRegion.
+Verify that the region is empty using xname.
+Compute the intersection of two disjoint regions.
+Verify that the region is empty using xname.
+>>CODE
+Region reg;
+Bool res;
+Region R1;
+Region R2;
+static XRectangle rect1 = {0,0, 7,13 };
+static XRectangle rect2 = {8, 14, 12,12};
+
+ reg = makeregion();
+ R1 = makeregion();
+ R2 = makeregion();
+
+ if(isdeleted()) return;
+
+ r = reg;
+ res = XCALL;
+
+ if(res != True) {
+ report("%s() did not return True", TestName);
+ report("for a region obtain by a call to XCreateRegion().");
+ FAIL;
+ } else
+ CHECK;
+
+ XUnionRectWithRegion(&rect1, R1, R1);
+ XUnionRectWithRegion(&rect2, R2, R2);
+ XIntersectRegion(R1, R2, R1);
+
+ r = R1;
+ res = XCALL;
+
+ if(res != True) {
+ report("%s() did not return True", TestName);
+ report("for a region obtained from the union of two disjoint regions.");
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the region
+.A r
+is not empty, then a call to xname returns
+.S False .
+>>STRATEGY
+Create a region using XCreateRegion.
+Set the region using XUnionRectWithRegion.
+Verify that the region is non-empty using xname.
+>>CODE
+Bool res;
+Region R1;
+static XRectangle rect1 = {0,0, 1,1 };
+
+ R1 = makeregion();
+ if(isdeleted()) return;
+
+ XUnionRectWithRegion(&rect1, R1, R1);
+ r = R1;
+ res = XCALL;
+
+ if(res != False) {
+ report("%s() did not return False", TestName);
+ report("for a region obtain by a call to XUnionRectWithRegion().");
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH10/eqlrgn/eqlrgn.m b/xc/test/xsuite/xtest/tset/CH10/eqlrgn/eqlrgn.m
new file mode 100644
index 000000000..ef17c4166
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/eqlrgn/eqlrgn.m
@@ -0,0 +1,169 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XEqualRegion CH10
+Bool
+XEqualRegion(r1, r2)
+Region r1;
+Region r2;
+>>EXTERN
+static XRectangle rect1 = {0,0, 7,13 };
+static XRectangle rect2 = {5,5, 10,15 };
+static XRectangle rect3 = {0,0, 17,20 };
+static XRectangle rect4 = {-1,-1, 1,1 };
+>>ASSERTION Good A
+When the regions
+.A r1
+and
+.A r2
+have the same offset, size and shape, then a call to xname returns
+.S True.
+>>STRATEGY
+Create two regions using XCreateRegion.
+Set one region to the union of three rectangles one of which covers the other two using XUnionRectWithRegion.
+Set the other region to the all encompassing region using XUnionRectWithRegion.
+Verify that the call to xname returns True.
+>>CODE
+Bool res;
+Region R1;
+Region R2;
+
+ R1 = makeregion();
+ R2 = makeregion();
+ if(isdeleted()) return;
+
+ XUnionRectWithRegion(&rect1, R1, R1);
+ XUnionRectWithRegion(&rect3, R1, R1);
+ XUnionRectWithRegion(&rect2, R1, R1);
+ XUnionRectWithRegion(&rect3, R2, R2);
+
+ r1 = R1;
+ r2 = R2;
+ res = XCALL;
+
+ if(res != True) {
+ report("%s() did not return True for two equal regions.", TestName);
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good A
+When the regions
+.A r1
+and
+.A r2
+do not have the same offset, then a call to xname returns
+.S False .
+>>STRATEGY
+Create regions R1 R2 using XCreateRegion.
+Set R1 and R2 to the same region using XUnionRectWithRegion.
+Offset R2 using XOffsetRegion.
+Verify that a call to xname returns False.
+>>CODE
+Bool res;
+Region R1;
+Region R2;
+
+ R1 = makeregion();
+ R2 = makeregion();
+
+ if(isdeleted()) return;
+
+ XUnionRectWithRegion(&rect1, R1, R1);
+ XUnionRectWithRegion(&rect1, R2, R2);
+ XOffsetRegion(R2,1,0);
+
+ r1 = R1;
+ r2 = R2;
+ res = XCALL;
+
+ if(res != False) {
+ report("%s() did not return False for regions with a different offset.", TestName);
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good A
+When the regions
+.A r1
+and
+.A r2
+do not have the same size, then a call to xname returns
+.S False .
+>>STRATEGY
+Create regions R1 R2 using XCreateRegion.
+Set R1 and R2 to the same region using XUnionRectWithRegion.
+Change the size of R2 using XShrinkRegion.
+Verify that a call to xname returns False.
+>>CODE
+Bool res;
+Region R1;
+Region R2;
+
+ R1 = makeregion();
+ R2 = makeregion();
+
+ if(isdeleted()) return;
+
+ XUnionRectWithRegion(&rect1, R1, R1);
+ XUnionRectWithRegion(&rect1, R2, R2);
+ XShrinkRegion(R2, 1, 0);
+
+ r1 = R1;
+ r2 = R2;
+ res = XCALL;
+
+ if(res != False) {
+ report("%s() did not return False for regions with a different size.", TestName);
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good A
+When the regions
+.A r1
+and
+.A r2
+do not have the same shape, then a call to xname returns
+.S False .
+>>STRATEGY
+Create regions R1 R2 using XCreateRegion.
+Set R1 and R2 to the same region using XUnionRectWithRegion.
+Change R2 with disjoint rectangle using XUnionRectWithRegion.
+Verify that a call to xname returns False.
+>>CODE
+Bool res;
+Region R1;
+Region R2;
+
+ R1 = makeregion();
+ R2 = makeregion();
+
+ if(isdeleted()) return;
+
+ XUnionRectWithRegion(&rect1, R1, R1);
+ XUnionRectWithRegion(&rect1, R2, R2);
+ XUnionRectWithRegion(&rect4, R2, R2);
+
+ r1 = R1;
+ r2 = R2;
+ res = XCALL;
+
+ if(res != False) {
+ report("%s() did not return False for two different regions.", TestName);
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH10/fndcntxt/fndcntxt.m b/xc/test/xsuite/xtest/tset/CH10/fndcntxt/fndcntxt.m
new file mode 100644
index 000000000..0af0bc6a5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/fndcntxt/fndcntxt.m
@@ -0,0 +1,121 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFindContext CH10
+int
+
+Display *display = Dsp;
+Window w = defwin(display);
+XContext context = XUniqueContext();
+caddr_t *data_return = &xfc_data;
+>>EXTERN
+static caddr_t xfc_data;
+
+static char *xfc_ctxt = "another context";
+>>ASSERTION Good A
+A call to xname returns the context data
+for display
+.A display ,
+window
+.A w
+and context type
+.A context
+in
+.A data_return ,
+and returns zero.
+>>STRATEGY
+Create a test window.
+Save some context information using XSaveContext.
+Find the context information using xname.
+Verify the context was returned as expected.
+>>CODE
+int a;
+int ret;
+
+/* Create a test window. */
+/* Save some context information using XSaveContext. */
+ a = XSaveContext(display, w, context, (caddr_t)xfc_ctxt);
+ if (a != 0) {
+ delete("Could not save test context.");
+ report("Returned error: %s", contexterrorname(a));
+ return;
+ } else
+ CHECK;
+
+/* Find the context information using xname. */
+ xfc_data = (caddr_t)NULL;
+ ret = XCALL;
+
+/* Verify the context was returned as expected. */
+#ifdef TEST_RPT
+ xfc_data++;
+#endif
+ if (ret != 0) {
+ FAIL;
+ report("%s returned an error when expected to succeed.",
+ TestName);
+ report("Returned error: %s", contexterrorname(ret));
+ } else {
+ CHECK;
+ if (xfc_data != (caddr_t)xfc_ctxt) {
+ FAIL;
+ report("%s did not return the expected context data.",
+ TestName);
+ report("Expected context: %0x", (unsigned int)xfc_ctxt);
+ report("Returned context: %0x", (unsigned int)xfc_data);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(3);
+>>ASSERTION Bad A
+When there is no previously saved context data
+for display
+.A display ,
+window
+.A w
+and context type
+.A context ,
+then a call to xname returns
+.S XCNOENT .
+>>STRATEGY
+Create a test window with no context.
+Call xname to find the non-existent context.
+Verify that XCNOENT was returned.
+>>CODE
+int ret;
+
+/* Create a test window with no context. */
+
+/* Call xname to find the non-existent context. */
+ ret = XCALL;
+
+#ifdef TEST_RPT
+ ret = 0;
+#endif
+
+/* Verify that XCNOENT was returned. */
+ if (ret != XCNOENT) {
+ FAIL;
+ report("%s did not return XCNOENT when",
+ TestName);
+ report("finding a non-existent context.");
+ report("Return code: %s", contexterrorname(ret));
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
diff --git a/xc/test/xsuite/xtest/tset/CH10/ftchbffr/ftchbffr.m b/xc/test/xsuite/xtest/tset/CH10/ftchbffr/ftchbffr.m
new file mode 100644
index 000000000..a87901a1b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/ftchbffr/ftchbffr.m
@@ -0,0 +1,166 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>#
+>># COMMENT : Spec mentions the possibility of a BadValue error.
+>># I can't see how this could be generated without
+>># changing Xlib. The spec also fails to mention that
+>># the call returns NULL if there is no data in the
+>># specified cut buffer. I have added this to the
+>># assertion.
+>>#
+>># Cal 12/07/91
+>>#
+>>TITLE XFetchBuffer CH10
+char *
+XFetchBuffer(display, nbytes_return, buffer)
+Display *display = Dsp;
+int *nbytes_return;
+int buffer;
+>>EXTERN
+#include "Xatom.h"
+>>ASSERTION Good A
+When the cut buffer specified by the
+.A buffer
+argument contains data, then a call to xname returns in the
+.A nbytes_return
+argument the number of bytes stored in the buffer and returns a pointer
+to storage allocated for the data, which can be freed with
+.S XFree .
+>>STRATEGY
+For each cut buffer 0..7:
+ Set the buffer to contain data using XStoreBuffer.
+For each cut buffer 0..7:
+ Obtain the contents of the buffer using xname.
+ Verify that the data is correct.
+ Free the returned data using XFree.
+>>CODE
+char *bp;
+char *rbp;
+int nr;
+int len;
+int i;
+int j;
+struct bstrct {
+ char *data;
+ int len;
+} bfrs[8], *bptr;
+
+ for(i=0, bptr=bfrs; i<8; i++, bptr++) {
+
+ len = 1+i*123;
+ bptr->len = len;
+
+ if((bptr->data = (char*)malloc(len)) == (char *) NULL) {
+ delete("malloc() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ for(j=len, bp=bptr->data; j>0; *bp++ = (j) % (256 - i), j--)
+ ;
+
+ XStoreBuffer(display, bptr->data, len, i);
+ }
+
+ for(i=0, bptr=bfrs; i<8; i++, bptr++) {
+
+ buffer = i;
+ nbytes_return = &nr;
+ rbp = XCALL;
+
+ if(rbp == (char *) NULL) {
+ report("%s() did not set buffer %d to contain any data.", TestName, i);
+ FAIL;
+ } else {
+ CHECK;
+
+ if(bptr->len != nr) {
+ report("%s() set buffer %d to contain %d bytes instead of %d.", TestName, i, nr, bptr->len);
+ FAIL;
+ } else {
+ CHECK;
+
+ if(memcmp(rbp, bptr->data, nr) != 0) {
+ report("%s() set buffer %d to contain the wrong data.", TestName, i);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ free(bptr->data);
+ XFree(rbp);
+ }
+ }
+
+
+ CHECKPASS(8 + 8 * (3));
+
+>>ASSERTION Good A
+When the cut buffer specified by the
+.A buffer
+argument does not contain any data, then a call to xname sets the
+.A nbytes_return
+argument to zero, and returns NULL.
+>>STRATEGY
+For each cut buffer 0..7:
+ Set the buffer to contain data using XStoreBuffer.
+For i in 0..7:
+ Delete the property CUT_BUFFERi from screen 0 of the display using XDeletePropery.
+For each cut buffer 0..7:
+ Obtain the contents of the buffer using xname.
+ Verify that the call returned NULL.
+ Verify that the nbytes_return argument was set to zero.
+>>CODE
+char *rbp;
+char *tstr = "XTest Multi buffer string";
+int len = 1 + strlen(tstr);
+int nr;
+int i;
+
+ for(i=0; i < 8; i++)
+ XStoreBuffer(display, tstr, len, i);
+
+ XDeleteProperty(display, RootWindow(display, 0), XA_CUT_BUFFER0);
+ XDeleteProperty(display, RootWindow(display, 0), XA_CUT_BUFFER1);
+ XDeleteProperty(display, RootWindow(display, 0), XA_CUT_BUFFER2);
+ XDeleteProperty(display, RootWindow(display, 0), XA_CUT_BUFFER3);
+ XDeleteProperty(display, RootWindow(display, 0), XA_CUT_BUFFER4);
+ XDeleteProperty(display, RootWindow(display, 0), XA_CUT_BUFFER5);
+ XDeleteProperty(display, RootWindow(display, 0), XA_CUT_BUFFER6);
+ XDeleteProperty(display, RootWindow(display, 0), XA_CUT_BUFFER7);
+
+ for(i=0; i < 8; i++) {
+
+ buffer = i;
+ nbytes_return = &nr;
+ rbp = XCALL;
+
+ if(rbp != (char *) NULL) {
+ report("%s() did not return NULL for buffer %d.", TestName, i);
+ FAIL;
+ } else
+ CHECK;
+
+ if(nr != 0) {
+ report("%s() set nbytes_return to %d instead of 0 for buffer %d.", TestName, nr, i);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(8 * 2);
diff --git a/xc/test/xsuite/xtest/tset/CH10/ftchbyts/ftchbyts.m b/xc/test/xsuite/xtest/tset/CH10/ftchbyts/ftchbyts.m
new file mode 100644
index 000000000..ebb159ad6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/ftchbyts/ftchbyts.m
@@ -0,0 +1,106 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XFetchBytes CH10
+char *
+XFetchBytes(display, nbytes_return)
+Display *display = Dsp;
+int *nbytes_return;
+>>EXTERN
+#include "Xatom.h"
+char buff[17];
+>>ASSERTION Good A
+When cut buffer zero contains data, then a call to xname returns in the
+.A nbytes_return
+argument the number of bytes stored in the buffer and returns a pointer
+to storage allocated for the data, which can be freed with
+.S XFree .
+>>STRATEGY
+Store some data in cut buffer zero using XStoreBuffer.
+Obtain the data in cut buffer zero using xname.
+Verify that the data is correct.
+Free the returned data using XFree.
+>>CODE
+char *bp;
+char *bpr = (char *) NULL;
+int i;
+int br;
+
+ for(i=NELEM(buff), bp = buff; i>0; *bp++ = (char) (i & 255), i--);
+
+ XStoreBuffer(display, buff, NELEM(buff), 0);
+
+ nbytes_return = &br;
+ bp = XCALL;
+
+ if(bp == (char *) NULL) {
+ report("%s() did return the contents of cut buffer 0.", TestName);
+ FAIL;
+ } else {
+ CHECK;
+
+ if(br != NELEM(buff)) {
+ report("%s() returned %d bytes from cut buffer 0 instead of %d.", TestName, br, NELEM(buff));
+ FAIL;
+ } else {
+ CHECK;
+
+ if(memcmp(bp, buff, NELEM(buff)) != 0) {
+ report("%s() did not return the contents of cut buffer 0 correctly.", TestName);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XFree(bp);
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When cut buffer zero does not contain any data, then a call to xname
+sets the
+.A nbytes_return
+argument to zero, and returns NULL.
+>>STRATEGY
+Set cut buffer to contain data using XStoreBytes.
+Delete the property CUT_BUFFER0 from screen 0 of the display using XDeletePropery.
+Obtain the contents of cut buffer 0 using xname.
+Verify that the call returned NULL.
+Verify that the nbytes_return argument was set to zero.
+>>CODE
+char *tstr = "XTest cut buffer 0 string";
+char *bp;
+int br;
+
+ XStoreBytes(display, tstr, 1 + strlen(tstr));
+ XDeleteProperty(display, RootWindow(display, 0), XA_CUT_BUFFER0);
+ nbytes_return = &br;
+ bp = XCALL;
+
+ if(bp != (char *) NULL) {
+ report("%s() did not return NULL.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if(br != 0) {
+ report("%s() returned %d bytes from cut buffer 0 instead of 0.", TestName, br);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH10/gtdflt/EnvXdefaults b/xc/test/xsuite/xtest/tset/CH10/gtdflt/EnvXdefaults
new file mode 100644
index 000000000..f17dae002
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/gtdflt/EnvXdefaults
@@ -0,0 +1,3 @@
+XTest.testval44:eVAL_4
+XTest.testval42:eVAL_5
+XTest.testval46:eVAL_6
diff --git a/xc/test/xsuite/xtest/tset/CH10/gtdflt/HstXdefaults b/xc/test/xsuite/xtest/tset/CH10/gtdflt/HstXdefaults
new file mode 100644
index 000000000..58701b2f9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/gtdflt/HstXdefaults
@@ -0,0 +1,4 @@
+XTest.testval54:hVAL_4
+XTest.testval52:hVAL_5
+XTest.testval56:hVAL_6
+XTest.testval57:hVAL_7
diff --git a/xc/test/xsuite/xtest/tset/CH10/gtdflt/Test3.c b/xc/test/xsuite/xtest/tset/CH10/gtdflt/Test3.c
new file mode 100644
index 000000000..ddaa5af75
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/gtdflt/Test3.c
@@ -0,0 +1,110 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include <stdlib.h>
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+#include "Xatom.h"
+
+extern Display *Dsp;
+
+/*
+ * Dummy declarations which are normally inserted by mc.
+ * Needed to prevent linkstart.c being included.
+ */
+char *TestName = "XGetDefault";
+int tet_thistest;
+struct tet_testlist tet_testlist[] = {
+ NULL, 0
+};
+int ntests = sizeof(tet_testlist)/sizeof(struct tet_testlist)-1;
+
+tet_main(argc, argv, envp)
+int argc;
+char *argv[];
+char *envp[];
+{
+int pass = 0, fail = 0;
+Display *display;
+char *prog = "XTest";
+char *opt = "testval32";
+char *tres = "VAL_b";
+char *res;
+char *pval="XTest.testval31:pval_a\nXTest.testval32:pval_b\nXTest.testval33:pval3\n";
+
+ exec_startup();
+ tpstartup();
+ trace("Exec'd file ./Test3.");
+
+ if(getenv("HOME") == (char *) NULL) {
+ delete("Environment variable \"HOME\" is not set.");
+ return;
+ } else
+ CHECK;
+
+ XDeleteProperty(Dsp, RootWindow(Dsp, 0), XA_RESOURCE_MANAGER);
+ XSync(Dsp, False);
+
+ display = opendisplay();
+ startcall(display);
+ res = XGetDefault(display, prog, opt);
+ endcall(display);
+
+ if( res == (char *) NULL) {
+ report("%s() returned NULL.", TestName);
+ FAIL;
+ } else {
+ CHECK;
+ if(strcmp(res, tres) != 0) {
+ report("%s() with program \"%s\" and option \"%s\" returned \"%s\" instead of \"%s\".", TestName, prog, opt, res, tres);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XChangeProperty (Dsp, RootWindow(Dsp, 0), XA_RESOURCE_MANAGER, XA_STRING, 8, PropModeReplace, (unsigned char *)pval, 1+strlen(pval));
+ XSync(Dsp, False);
+
+ display = opendisplay();
+ tres = "pval_b";
+
+ startcall(display);
+ res = XGetDefault(display, prog, opt);
+ endcall(display);
+
+ if(res == (char *) NULL) {
+ report("%s() returned NULL.", TestName);
+ FAIL;
+ } else {
+ CHECK;
+
+ if(strcmp(res, tres) != 0) {
+ report("%s() with program \"%s\" and option \"%s\" returned \"%s\" instead of \"%s\"", TestName, prog, opt, res, tres);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+
+ CHECKPASS(5);
+ tpcleanup();
+ exec_cleanup();
+}
diff --git a/xc/test/xsuite/xtest/tset/CH10/gtdflt/Test4.c b/xc/test/xsuite/xtest/tset/CH10/gtdflt/Test4.c
new file mode 100644
index 000000000..8c2d0e4b3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/gtdflt/Test4.c
@@ -0,0 +1,97 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include <stdlib.h>
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+#include "Xatom.h"
+
+extern Display *Dsp;
+
+/*
+ * Dummy declarations which are normally inserted by mc.
+ * Needed to prevent linkstart.c being included.
+ */
+char *TestName = "XGetDefault";
+int tet_thistest;
+struct tet_testlist tet_testlist[] = {
+ NULL, 0
+};
+int ntests = sizeof(tet_testlist)/sizeof(struct tet_testlist)-1;
+
+tet_main(argc, argv, envp)
+int argc;
+char *argv[];
+char *envp[];
+{
+int pass = 0, fail = 0;
+Display *display;
+char *prog = "XTest";
+char *opt;
+char *tres;
+char *res;
+char *pval="XTest.testval41:pVAL_1\nXTest.testval42:pVAL_2\nXTest.testval43:pVAL_3\n";
+int i;
+static char *testval[] = { "testval41", "testval42", "testval46" };
+static char *result[] = { "pVAL_1", "eVAL_5", "eVAL_6" };
+
+ exec_startup();
+ tpstartup();
+ trace("Exec'd file ./Test4 with XENVIRONMENT = \"%s\".", getenv("XENVIRONMENT"));
+
+ if(getenv("XENVIRONMENT") == (char *) NULL) {
+ delete("XENVIRONMENT environment variable not set.");
+ return;
+ } else
+ CHECK;
+
+ XChangeProperty (Dsp, RootWindow(Dsp, 0), XA_RESOURCE_MANAGER, XA_STRING, 8, PropModeReplace, (unsigned char *)pval, 1+strlen(pval));
+ XSync(Dsp, False);
+
+ display = opendisplay(); /* Should merge $XENVIRONMENT file with existing database. */
+
+ for(i=0; i< NELEM(testval); i++) {
+
+ opt = testval[i];
+ tres = result[i];
+
+ startcall(display);
+ res = XGetDefault(display, prog, opt);
+ endcall(display);
+
+ if( res == (char *) NULL) {
+ report("%s() returned NULL with program = \"%s\" and option = \"%s\".", TestName, prog, opt);
+ FAIL;
+ } else {
+ CHECK;
+ if(strcmp(res, tres) != 0) {
+ report("%s() with program = \"%s\" and option = \"%s\" returned \"%s\" instead of \"%s\".", TestName, prog, opt, res, tres);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ }
+
+ CHECKPASS(1 + 2*NELEM(testval));
+ tpcleanup();
+ exec_cleanup();
+}
diff --git a/xc/test/xsuite/xtest/tset/CH10/gtdflt/Test5.c b/xc/test/xsuite/xtest/tset/CH10/gtdflt/Test5.c
new file mode 100644
index 000000000..9120978d9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/gtdflt/Test5.c
@@ -0,0 +1,103 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+#include <stdlib.h>
+#include "xtest.h"
+#include "Xlib.h"
+#include "Xutil.h"
+#include "tet_api.h"
+#include "xtestlib.h"
+#include "pixval.h"
+#include "Xatom.h"
+
+extern Display *Dsp;
+
+/*
+ * Dummy declarations which are normally inserted by mc.
+ * Needed to prevent linkstart.c being included.
+ */
+char *TestName = "XGetDefault";
+int tet_thistest;
+struct tet_testlist tet_testlist[] = {
+ NULL, 0
+};
+int ntests = sizeof(tet_testlist)/sizeof(struct tet_testlist)-1;
+
+tet_main(argc, argv, envp)
+int argc;
+char *argv[];
+char *envp[];
+{
+int pass = 0, fail = 0;
+Display *display;
+char *prog = "XTest";
+char *opt;
+char *tres;
+char *res;
+char *pval="XTest.testval51:pVAL_1\nXTest.testval52:pVAL_2\nXTest.testval53:pVAL_3\nTest.testval57:pval_7";
+int i;
+static char *testval[] = { "testval51", "testval52", "testval56" , "testval57"};
+static char *result[] = { "pVAL_1", "hVAL_5", "hVAL_6" , "hVAL_7"};
+
+ exec_startup();
+ tpstartup();
+ trace("Exec'd file ./Test5 with XENVIRONMENT = \"%s\" and HOME = \"%s\".", getenv("XENVIRONMENT"), getenv("HOME"));
+
+ if(getenv("XENVIRONMENT") != (char *) NULL) {
+ delete("XENVIRONMENT environment variable was set.");
+ return;
+ } else
+ CHECK;
+
+ if(getenv("HOME") == (char *) NULL) {
+ delete("HOME environment variable was not set.");
+ return;
+ } else
+ CHECK;
+
+ XChangeProperty (Dsp, RootWindow(Dsp, 0), XA_RESOURCE_MANAGER, XA_STRING, 8, PropModeReplace, (unsigned char *)pval, 1+strlen(pval));
+ XSync(Dsp, False);
+
+ display = opendisplay(); /* Should merge $HOME/.Xdefaults-<name> file with existing database. */
+
+ for(i=0; i< NELEM(testval); i++) {
+
+ opt = testval[i];
+ tres = result[i];
+
+ startcall(display);
+ res = XGetDefault(display, prog, opt);
+ endcall(display);
+
+ if( res == (char *) NULL) {
+ report("%s() returned NULL with program = \"%s\" and option = \"%s\".", TestName, prog, opt);
+ FAIL;
+ } else {
+ CHECK;
+ if(strcmp(res, tres) != 0) {
+ report("%s() with program = \"%s\" and option = \"%s\" returned \"%s\" instead of \"%s\".", TestName, prog, opt, res, tres);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ }
+
+ CHECKPASS(2 + 2*NELEM(testval));
+ tpcleanup();
+ exec_cleanup();
+}
diff --git a/xc/test/xsuite/xtest/tset/CH10/gtdflt/Xdefaults b/xc/test/xsuite/xtest/tset/CH10/gtdflt/Xdefaults
new file mode 100644
index 000000000..5d969398a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/gtdflt/Xdefaults
@@ -0,0 +1,4 @@
+XTest.testval31:VAL_a
+XTest.testval32:VAL_b
+XTest.testval33:VAL_c
+XTest.testval57:VAL_d
diff --git a/xc/test/xsuite/xtest/tset/CH10/gtdflt/gtdflt.m b/xc/test/xsuite/xtest/tset/CH10/gtdflt/gtdflt.m
new file mode 100644
index 000000000..bc35e0660
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/gtdflt/gtdflt.m
@@ -0,0 +1,291 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>#
+>># I have assumed POSIX here in all assertions which make reference to
+>># environment variables.
+>>#
+>># Cal 16/07/91
+>>#
+>>TITLE XGetDefault CH10
+char *
+XGetDefault(display, program, option)
+Display *display = Dsp;
+char *program;
+char *option;
+>>MAKE
+AUXFILES=.Xdefaults Test3 Test4 Test5
+AUXCLEAN=Test3 Test4 Test5 Test3.o Test4.o Test5.o .Xdefaults\
+ .Xdefaults-$(XTESTHOST)
+
+all: Test
+
+.Xdefaults : Xdefaults HostXdefaults
+ $(RM) .Xdefaults ./.Xdefaults-$(XTESTHOST)
+ $(CP) Xdefaults .Xdefaults
+ $(CP) HostXdefaults ./.Xdefaults-$(XTESTHOST)
+
+Test3 : Test3.o $(LIBS) $(TCMCHILD)
+ $(CC) $(LDFLAGS) -o $@ Test3.o $(TCMCHILD) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+Test4 : Test4.o $(LIBS) $(TCMCHILD)
+ $(CC) $(LDFLAGS) -o $@ Test4.o $(TCMCHILD) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+Test5 : Test5.o $(LIBS) $(TCMCHILD)
+ $(CC) $(LDFLAGS) -o $@ Test5.o $(TCMCHILD) $(LIBLOCAL) $(LIBS) $(SYSLIBS)
+
+>># end of included makefile section
+>>EXTERN
+#include "Xatom.h"
+>>ASSERTION Good A
+A call to xname reads and returns from the resource manager database the entry
+specified by the
+.A program
+and
+.A option
+arguments.
+>>STRATEGY
+Set the RESOURCE_MANAGER property on the default root window of screen 0 to contain the string XT.OPT.VAL
+Open a display using XOpenDisplay.
+Obtain the value of the XT.OPT resource using XGetDefault.
+Verify that the returned value is "OPT".
+>>CODE
+unsigned char *pval = (unsigned char *) "VAL*VAl\nXT.LEO:CAL\nXT.OPT:VAL\nXT.Bezoomny:Cal\n";
+char *valstr;
+char *res = (char *) NULL;
+Display *client;
+
+ valstr = "VAL";
+
+ XChangeProperty (Dsp, RootWindow(Dsp, 0), XA_RESOURCE_MANAGER, XA_STRING, 8, PropModeReplace, pval, 1+strlen(pval));
+ XSync(Dsp, False);
+
+ display = opendisplay();
+ program = "XT";
+ option = "OPT";
+ res = XCALL;
+
+ if(res == (char *) NULL) {
+ report("%s() returned NULL.", TestName);
+ FAIL;
+ } else {
+ CHECK;
+
+ if(strcmp(res, valstr) != 0) {
+ report("%s() retured \"%s\" instead of \"%s\"", TestName, res, valstr);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the option specified by the
+.A program
+and
+.A option
+arguments does not exist in the resource manager database,
+then a call to xname returns NULL.
+>>STRATEGY
+Set the RESOURCE_MANAGER property on the default root window to contain some valid strings not containing XT.Cal*
+Open a display using XOpenDisplay.
+Obtain the value of the XT.Cal resource using xname.
+Verify that the call returned NULL.
+>>CODE
+unsigned char *pval = (unsigned char *) "XT.LEO:CAL\nXT.OPT:VAL\nXT.Bezoomny:Cal\n";
+char *nullstr = "<NULL>";
+char *res = (char *) NULL;
+Display *client;
+
+
+ XChangeProperty (Dsp, RootWindow(Dsp, 0), XA_RESOURCE_MANAGER, XA_STRING, 8, PropModeReplace, pval, 1+strlen(pval));
+ XSync(Dsp, False);
+
+ display = opendisplay();
+ program = "XT";
+ option = "Cal";
+ res = XCALL;
+
+ if(res != (char *) NULL) {
+ report("%s() retured \"%s\" instead of \"%s\"", TestName, res, nullstr);
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good C
+If the system is POSIX compliant:
+When the RESOURCE_MANAGER property was defined at the time
+.A display
+was opened, then the default resource manager database is taken from the value
+of that property, otherwise the default resource manager database is taken from the
+file $HOME/.Xdefaults in the client's home directory.
+>>STRATEGY
+Fork a new process using tet_fork.
+In the child process:
+ Execute the file ./Test3 using tet_exec with the HOME environment variable set to ".".
+ In Test3:
+ Delete the RESOURCE_MANAGER property using XDeleteProperty.
+ Open a new display using XOpenDisplay.
+ Obtain the value of the XTest.testval32 resource using xname.
+ Verify that the returned value is "VAL_b".
+ Set the RESOURCE_MANAGER property using XChangeProperty.
+ Open a new display using XOpenDisplay.
+ Obtain the value of the XTest.testval32 resource using xname.
+ Verify that the returned value is "pval_b".
+>>CODE
+
+ if(config.posix_system == 0)
+ unsupported("This assertion can only be tested on a POSIX system.");
+ else
+ tet_fork(t003exec, TET_NULLFP, 0, ~0);
+
+>>EXTERN
+extern char **environ;
+
+static void
+t003exec()
+{
+char *argv[2];
+char *envp;
+
+ argv[0] = "./Test3";
+ argv[1] = (char *) NULL;
+ envp = "HOME=./";
+ if (xtest_putenv( envp )) {
+ delete("xtest_putenv failed to add HOME to the environment");
+ return;
+ }
+ tet_exec("./Test3", argv, environ);
+ delete("tet_exec() of \"./Test3\" failed.");
+}
+>>#
+>># Altered this assertion - there is no way for Xlib to determine if the
+>># environment variable contains the full path name of a resource file,
+>># as was implied - the onus is on the user to set it up properly.
+>>#>>ASSERTION
+>>#If the system is POSIX compliant:
+>>#When the XENVIRONMENT environment variable is defined to be the
+>>#full path name of an existing resource file,
+>>#then this file is merged to update the default resource database.
+
+>>ASSERTION Good C
+If the system is POSIX compliant:
+When the XENVIRONMENT environment variable is defined, then the
+file named by the XENVIRONMENT environment variable is merged to
+update the default resource database.
+>>STRATEGY
+Fork a new process using tet_fork.
+In the child process:
+ Execute the file ./Test4 using tet_exec with the XENVIRONMENT variable set to ./EnvXdefaults.
+ In Test4:
+ Set the RESOURCE_MANAGER property using XChangeProperty.
+ Open a display using XOpenDisplay.
+ Obtain the value of resources set by the ChangeProperty request and by the XENVIRONMENT file using xname.
+ Verify that the resources are set from each source.
+ Verify that the XENVIRONMENT resources updated those of the ChangeProperty request.
+>>CODE
+
+ if(config.posix_system == 0)
+ unsupported("This assertion can only be tested on a POSIX system.");
+ else
+ tet_fork(t004exec, TET_NULLFP, 0, ~0);
+
+>>EXTERN
+static void
+t004exec()
+{
+char *argv[2];
+char *envp;
+
+ argv[0] = "./Test4";
+ argv[1] = (char *) NULL;
+ envp = "XENVIRONMENT=./EnvXdefaults";
+ if (xtest_putenv(envp)) {
+ delete("xtest_putenv failed to add XENVIRONMENT to the environment");
+ }
+
+ tet_exec("./Test4", argv, environ);
+ delete("tet_exec() of \"./Test4\" failed.");
+}
+
+
+>>ASSERTION Good C
+>>#
+>># Altered wording of the assertion to explain what `hostname` is.
+>># DPJ Cater 21/1/92.
+>>#
+If the system is POSIX compliant:
+When the XENVIRONMENT environment variable is not defined, then the
+file $HOME/.Xdefaults-<name> is merged to
+update the default resource database, where <name> specifies the name
+of the machine on which the application is running.
+>>STRATEGY
+Fork a new process using tet_fork.
+In the child process:
+ Remove XENVIRONMENT from the environment
+ Execute the file ./Test5 using tet_exec with the HOME variable set to ".".
+ In Test5:
+ Set the RESOURCE_MANAGER property using XChangeProperty.
+ Open a display using XOpenDisplay.
+ Obtain the value of resources set by the ChangeProperty request and by the file $HOME/.Xdefaults-<name> using xname.
+ Verify that the resources are set from each source.
+ Verify that the .Xdefaults-<name> resources updated those of the ChangeProperty request.
+>>CODE
+
+ if(config.posix_system == 0)
+ unsupported("This assertion can only be tested on a POSIX system.");
+ else
+ tet_fork(t005exec, TET_NULLFP, 0, ~0);
+
+>>EXTERN
+static void
+t005exec()
+{
+char *argv[2];
+char *envp;
+
+ argv[0] = "./Test5";
+ argv[1] = (char *) NULL;
+ envp = "HOME=.";
+ if (xtest_putenv(envp)) {
+ delete("xtest_putenv failed to add HOME to the environment");
+ return;
+ }
+
+ if (getenv("XENVIRONMENT") != (char *)NULL) {
+ char **newenv = environ; /* Remove XENVIRONMENT */
+
+ trace("Removing XENVIRONMENT from environment");
+
+ while( strncmp("XENVIRONMENT=", *newenv, 13)
+ && *newenv != NULL )
+ newenv++;
+
+ if (*newenv == NULL) {
+ report("could not remove XENVIRONMENT from the environment");
+ UNRESOLVED;
+ return;
+ }
+
+ do {
+ *newenv = *(newenv+1);
+ newenv++;
+ } while ( *newenv != NULL );
+ }
+ tet_exec("./Test5", argv, environ);
+ delete("tet_exec() of \"./Test5\" failed.");
+}
diff --git a/xc/test/xsuite/xtest/tset/CH10/gtpxl/gtpxl.m b/xc/test/xsuite/xtest/tset/CH10/gtpxl/gtpxl.m
new file mode 100644
index 000000000..238eb835e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/gtpxl/gtpxl.m
@@ -0,0 +1,127 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetPixel CH10
+unsigned long
+XGetPixel(ximage, x, y)
+XImage *ximage;
+int x;
+int y;
+>>ASSERTION Good A
+When the image
+.A ximage
+contains coordinates
+.A x, y ,
+then a call to xname returns the normalised value of the pixel located at
+.A x, y
+in the image.
+>>STRATEGY
+For all supported drawables:
+ Create a drawable.
+ For a range of pixel values over the drawable's depth:
+ Set a pixel in the drawable using XDrawPoint.
+ For XYPixmap and ZPixmap:
+ Obtain an XImage using XGetImage.
+ Obtain the pixel value using xname.
+ Verify that the values are the same.
+>>CODE
+XVisualInfo *vi;
+GC gc;
+int npix;
+Pixmap pm;
+Window win;
+int i;
+int j;
+unsigned long pixel;
+unsigned long rpixel;
+unsigned long mask;
+static int fmats[2] = { XYPixmap, ZPixmap };
+
+ x = 2;
+ y = 1;
+
+ for(resetvinf(VI_PIX); nextvinf(&vi);) {
+
+ pm = makepixm(Dsp, vi);
+ gc = makegc(Dsp, pm);
+ mask = (1<<vi->depth) - 1;
+ for(i = 0; i <= (15 & mask); i++) {
+ pixel = mask & (i | i<<4 | i<<12 | i<<20);
+ XSetForeground(Dsp, gc, pixel);
+ XDrawPoint(Dsp, pm, gc, x+1, y+2);
+
+ for(j=0; j<2; j++) {
+ ximage = XGetImage(Dsp, pm, 1,2, 2*x,2*y, AllPlanes, fmats[j]);
+ if( ximage == (XImage *) NULL ) {
+ delete("XGetImage() returned NULL.");
+ return;
+ } else {
+
+ rpixel = XCALL;
+
+ if(rpixel != pixel) {
+ report("%s() returned 0x%lx instead of 0x%lx.", TestName, rpixel, pixel);
+ FAIL;
+ } else
+ if(i == 0 && j == 0)
+ CHECK;
+
+ XDestroyImage(ximage);
+ }
+
+ }
+ }
+
+ }
+
+ npix = nvinf();
+
+ for(resetvinf(VI_WIN); nextvinf(&vi);) {
+
+ win = makewin(Dsp, vi);
+ gc = makegc(Dsp, win);
+ mask = (1<<vi->depth) - 1;
+ for(i = 0; i <= (15 & mask); i++) {
+ pixel = mask & (i | i<<4 | i<<12 | i<<20);
+ XSetForeground(Dsp, gc, pixel);
+ XDrawPoint(Dsp, win, gc, x+1, y+2);
+
+ for(j=0; j<2; j++) {
+ ximage = XGetImage(Dsp, win, 1,2, 2*x,2*y, AllPlanes, fmats[j]);
+ if( ximage == (XImage *) NULL ) {
+ delete("XGetImage() returned NULL.");
+ return;
+ } else {
+
+ rpixel = XCALL;
+
+ if(rpixel != pixel) {
+ report("%s() returned 0x%lx instead of 0x%lx.", TestName, rpixel, pixel);
+ FAIL;
+ } else
+ if(i == 0 && j == 0)
+ CHECK;
+
+ XDestroyImage(ximage);
+ }
+
+ }
+ }
+
+ }
+
+ CHECKPASS(npix + nvinf());
+
diff --git a/xc/test/xsuite/xtest/tset/CH10/gtvslinf/gtvslinf.m b/xc/test/xsuite/xtest/tset/CH10/gtvslinf/gtvslinf.m
new file mode 100644
index 000000000..c3f2e009d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/gtvslinf/gtvslinf.m
@@ -0,0 +1,519 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XGetVisualInfo CH10
+XVisualInfo *
+XGetVisualInfo(display, vinfo_mask, vinfo_template, nitems_return)
+Display *display = Dsp;
+long vinfo_mask;
+XVisualInfo *vinfo_template = &v_tmpl;
+int *nitems_return = &n_ret;
+>>EXTERN
+int n_ret;
+int n_all;
+XVisualInfo v_tmpl;
+
+void
+init_vp(mask, vp, vptmpl)
+long mask;
+XVisualInfo *vp;
+XVisualInfo *vptmpl;
+{
+ vptmpl->visualid = 0;
+ vptmpl->screen = -1;
+ vptmpl->depth = 0;
+ vptmpl->class = -1;
+ vptmpl->red_mask = 0L;
+ vptmpl->green_mask = 0L;
+ vptmpl->blue_mask = 0L;
+ vptmpl->colormap_size = 0;
+ vptmpl->bits_per_rgb = 0;
+
+ if ((mask & VisualIDMask))
+ vptmpl->visualid = vp->visualid;
+ if ((mask & VisualScreenMask))
+ vptmpl->screen = vp->screen;
+ if ((mask & VisualDepthMask))
+ vptmpl->depth = vp->depth;
+ if ((mask & VisualClassMask))
+ vptmpl->class = vp->class;
+ if ((mask & VisualRedMaskMask))
+ vptmpl->red_mask = vp->red_mask;
+ if ((mask & VisualGreenMaskMask))
+ vptmpl->green_mask = vp->green_mask;
+ if ((mask & VisualBlueMaskMask))
+ vptmpl->blue_mask = vp->blue_mask;
+ if ((mask & VisualColormapSizeMask))
+ vptmpl->colormap_size = vp->colormap_size;
+ if ((mask & VisualBitsPerRGBMask))
+ vptmpl->bits_per_rgb = vp->bits_per_rgb;
+}
+
+XVisualInfo *
+get_visuals(mask, vp, n_all, vptest, n)
+long mask;
+XVisualInfo *vp;
+int n_all;
+XVisualInfo *vptest;
+int *n;
+{
+XVisualInfo *vptr, *vpret;
+int i;
+
+ *n = 0;
+
+ /* Allocate enough space (all visuals may match vptest) */
+ vptr = vpret = (XVisualInfo *)calloc(n_all, sizeof(XVisualInfo));
+
+ /* Obtain sub-list of visuals which match in the mask fields */
+ for(i = 0; i < n_all; i++, vp++) {
+ /* All visuals have same screen, but check in case code */
+ /* gets used another way one day */
+ if ((mask & VisualIDMask) && (vptest->visualid != vp->visualid))
+ continue;
+ if ((mask & VisualScreenMask) && (vptest->screen != vp->screen))
+ continue;
+ if ((mask & VisualDepthMask) && (vptest->depth != vp->depth))
+ continue;
+ if ((mask & VisualClassMask) && (vptest->class != vp->class))
+ continue;
+ if ((mask & VisualRedMaskMask) && (vptest->red_mask != vp->red_mask))
+ continue;
+ if ((mask & VisualGreenMaskMask) && (vptest->green_mask != vp->green_mask))
+ continue;
+ if ((mask & VisualBlueMaskMask) && (vptest->blue_mask != vp->blue_mask))
+ continue;
+ if ((mask & VisualColormapSizeMask) && (vptest->colormap_size != vp->colormap_size))
+ continue;
+ if ((mask & VisualBitsPerRGBMask) && (vptest->bits_per_rgb != vp->bits_per_rgb))
+ continue;
+ *vptr++ = *vp;
+ (*n)++;
+ trace("get_visuals: Adding visual number %d", *n);
+ }
+
+ return(vpret);
+}
+
+void
+report_visuals(n, vp)
+int n;
+XVisualInfo *vp;
+{
+int i;
+
+ for(i = 0; i < n; i++, vp++) {
+ report("Visual %d: screen %d; depth %d; class %s.",
+ i, vp->screen, vp->depth, displayclassname(vp->class));
+ }
+}
+
+int
+check_visuals(mask, n, expected, observed)
+long mask;
+int n;
+XVisualInfo *expected;
+XVisualInfo *observed;
+{
+XVisualInfo *vp, *vpo;
+int i, j;
+int matched;
+int pass = 0;
+
+ for (i = 0, vp = expected; i < n; i++, vp++) {
+ matched = 0;
+ for (j = 0, vpo = observed; j < n; j++, vpo++) {
+ if (vp->visualid != vpo->visualid)
+ continue;
+ if (vp->screen != vpo->screen)
+ continue;
+ if (vp->depth != vpo->depth)
+ continue;
+ if (vp->class != vpo->class)
+ continue;
+ if (vp->red_mask != vpo->red_mask)
+ continue;
+ if (vp->green_mask != vpo->green_mask)
+ continue;
+ if (vp->blue_mask != vpo->blue_mask)
+ continue;
+ if (vp->colormap_size != vpo->colormap_size)
+ continue;
+ if (vp->bits_per_rgb != vpo->bits_per_rgb)
+ continue;
+ matched = 1;
+ break;
+ }
+ if (!matched) {
+ report("%s did not return matching visual", TestName);
+ report("when selecting with mask %d (%s)", mask,
+ visualmaskname(mask));
+ report_visuals(1, vp);
+ return(1);
+ } else
+ pass++;
+ }
+
+ if (n > 0 && pass == n)
+ return(0);
+ report("Path counter was %d instead of %d", pass, n);
+ return(-1);
+}
+
+int
+check_mask_visuals(mask, all, n_all)
+long mask;
+XVisualInfo *all;
+int n_all;
+{
+XVisualInfo *vp, *expected, *visuals;
+int i;
+int r;
+int n_expected;
+int pass = 0;
+
+ /* For each visual */
+ for(i = 0, vp = all; i < n_all; i++, vp++) {
+ /* Obtain list of visuals matching vp in the masked fields. */
+ /* This is a bit like our own XGetVisualInfo. */
+ expected = get_visuals(mask, all, n_all, vp, &n_expected);
+
+ /*
+ * Need VisualScreenMask, since "all" points to a list
+ * of visuals for the default screen only.
+ */
+ init_vp(mask, vp, vinfo_template);
+ vinfo_template->screen = XDefaultScreen(Dsp);
+ vinfo_mask = VisualScreenMask | mask;
+
+ /* Call XGetVisualInfo directly to avoid return; in code */
+ startcall(display);
+ if (isdeleted())
+ return(-1);
+ visuals = XGetVisualInfo(display, vinfo_mask, vinfo_template, nitems_return);
+ endcall(display);
+ if (geterr() != Success) {
+ report("Got %s, Expecting Success", errorname(geterr()));
+ return(1);
+ }
+
+ /*
+ * Verify that xname does not return NULL.
+ * (should be at least one visual - vp!).
+ */
+ if (visuals == (XVisualInfo *)NULL) {
+ report("%s returned NULL with visual mask %d",
+ TestName, visualmaskname(mask));
+ return(1);
+ } else
+ pass++;
+
+ /* Verify that xname returns same size list. */
+ if (n_ret != n_expected) {
+ report("%s returned %d instead of %d visual(s)",
+ TestName, n_ret, n_expected);
+ report("when selecting with mask %s",
+ visualmaskname(mask));
+ report_visuals(n_ret, visuals);
+ return(1);
+ } else {
+ pass++;
+ trace("%s returned %d visual(s)", TestName, n_ret);
+ }
+
+ /* Verify that xname returns same sub-list. */
+ if ((r = check_visuals(mask, n_expected, expected, visuals)) < 0)
+ return(-1);
+ else if (r > 0)
+ return(1);
+ else
+ pass++;
+
+ /* Free the list of all visuals using XFree. */
+ XFree((char*)visuals);
+ free((void*)expected);
+ }
+
+ if (n_all > 0 && pass == 3*n_all)
+ return(0);
+ report("Path counter was %d instead of %d", pass, 3*n_all);
+ return(-1);
+}
+
+>>ASSERTION Good A
+A call to xname returns the list of
+.S XVisualInfo
+structures, which can be freed by
+.S XFree ,
+which match those components of the
+.A vinfo_template
+argument specified by the
+.A vinfo_mask
+argument, and returns the number of such structures in the
+.A nitems_return
+argument.
+>>STRATEGY
+Initialise the list of class/depth pairs from parameter XT_VISUAL_CLASSES.
+Obtain list of all visuals for the screen.
+Verify that xname does not return NULL (should be at least one visual).
+Verify that xname returns at least one visual for each class/depth pair
+ specified in parameter XT_VISUAL_CLASSES.
+Verify that the list returned matches those in XT_VISUAL_CLASSES.
+Verify that each visual can be selected using VisualIDMask.
+Verify that each visual can be selected using VisualScreenMask.
+Verify that each visual can be selected using VisualDepthMask.
+Verify that each visual can be selected using VisualClassMask.
+Verify that each visual can be selected using
+ VisualScreenMask|VisualDepthMask|VisualClassMask.
+Verify that each visual can be selected using VisualRedMaskMask.
+Verify that each visual can be selected using VisualGreenMaskMask.
+Verify that each visual can be selected using VisualBlueMaskMask.
+Verify that each visual can be selected using VisualColormapSizeMask.
+Verify that each visual can be selected using VisualBitsPerRGBMask.
+Verify that each visual can be selected using
+ VisualBitsPerRGBMask|VisualColormapSizeMask.
+Verify that each visual can be selected using VisualAllMask.
+Free the list of all visuals using XFree.
+>>CODE
+int j;
+int r;
+int matched;
+int class;
+int depth; /* (depths usually unsigned, but not for nextvclass) */
+XVisualInfo *all, *vp;
+
+/* Initialise the list of class/depth pairs from parameter XT_VISUAL_CLASSES. */
+ if(initvclass() < 0) {
+ delete("The list of expected visual classes could not be initialised.");
+ return;
+ }
+
+/* Obtain list of all visuals for the screen. */
+ vinfo_template->screen = XDefaultScreen(Dsp);
+ vinfo_mask = VisualNoMask | VisualScreenMask;
+ all = XCALL;
+ n_all = n_ret;
+
+/* Verify that xname does not return NULL (should be at least one visual). */
+ if (all == (XVisualInfo *)NULL) {
+ report("%s returned NULL with visual mask %d",
+ TestName, visualmaskname(vinfo_mask));
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+/* Verify that xname returns at least one visual for each class/depth pair */
+/* specified in parameter XT_VISUAL_CLASSES. */
+ if (n_all < nvclass()) {
+ report("%s returned %d instead of at least %d visual(s)",
+ TestName, n_all, nvclass());
+ report_visuals(n_all, all);
+ FAIL;
+ return;
+ } else {
+ CHECK;
+ trace("%s returned %d visual(s)", TestName, n_all);
+ }
+
+/* Verify that the list returned matches those in XT_VISUAL_CLASSES. */
+ for(j = 0, vp = all; j < n_all; j++, vp++) {
+ if (vp->screen != XDefaultScreen(Dsp)) {
+ report("%s returned visual for wrong screen", TestName);
+ report("Expected screen: %d; Observed screen %d.",
+ XDefaultScreen(Dsp), vp->screen);
+ report_visuals(1, vp);
+ FAIL;
+ } else
+ CHECK;
+
+ matched = 0;
+ for (resetvclass(); nextvclass(&class, &depth); ) {
+ if (vp->depth == (unsigned)depth &&
+ vp->class == class) {
+ matched = 1;
+ break;
+ }
+ }
+ if (!matched) {
+ report("%s returned visual", TestName);
+ report("which is not specified in XT_VISUAL_CLASSES.");
+ report_visuals(1, vp);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+/* Verify that each visual can be selected using VisualIDMask. */
+ if((r = check_mask_visuals((long)VisualIDMask, all, n_all)) < 0) {
+ delete("Path check error in check_mask_visuals");
+ return;
+ } else if (r > 0)
+ FAIL;
+ else
+ CHECK;
+/* Verify that each visual can be selected using VisualScreenMask. */
+ if((r = check_mask_visuals((long)VisualScreenMask, all, n_all)) < 0) {
+ delete("Path check error in check_mask_visuals");
+ return;
+ } else if (r > 0)
+ FAIL;
+ else
+ CHECK;
+/* Verify that each visual can be selected using VisualDepthMask. */
+ if((r = check_mask_visuals((long)VisualDepthMask, all, n_all)) < 0) {
+ delete("Path check error in check_mask_visuals");
+ return;
+ } else if (r > 0)
+ FAIL;
+ else
+ CHECK;
+/* Verify that each visual can be selected using VisualClassMask. */
+ if((r = check_mask_visuals((long)VisualClassMask, all, n_all)) < 0) {
+ delete("Path check error in check_mask_visuals");
+ return;
+ } else if (r > 0)
+ FAIL;
+ else
+ CHECK;
+/* Verify that each visual can be selected using */
+/* VisualScreenMask|VisualDepthMask|VisualClassMask. */
+ if((r = check_mask_visuals((long)(VisualScreenMask|
+ VisualDepthMask|
+ VisualClassMask), all, n_all)) < 0) {
+ delete("Path check error in check_mask_visuals");
+ return;
+ } else if (r > 0)
+ FAIL;
+ else
+ CHECK;
+/* Verify that each visual can be selected using VisualRedMaskMask. */
+ if((r = check_mask_visuals((long)VisualRedMaskMask, all, n_all)) < 0) {
+ delete("Path check error in check_mask_visuals");
+ return;
+ } else if (r > 0)
+ FAIL;
+ else
+ CHECK;
+/* Verify that each visual can be selected using VisualGreenMaskMask. */
+ if((r = check_mask_visuals((long)VisualGreenMaskMask, all, n_all)) < 0) {
+ delete("Path check error in check_mask_visuals");
+ return;
+ } else if (r > 0)
+ FAIL;
+ else
+ CHECK;
+/* Verify that each visual can be selected using VisualBlueMaskMask. */
+ if((r = check_mask_visuals((long)VisualBlueMaskMask, all, n_all)) < 0) {
+ delete("Path check error in check_mask_visuals");
+ return;
+ } else if (r > 0)
+ FAIL;
+ else
+ CHECK;
+/* Verify that each visual can be selected using VisualColormapSizeMask. */
+ if((r = check_mask_visuals((long)VisualColormapSizeMask, all, n_all)) < 0) {
+ delete("Path check error in check_mask_visuals");
+ return;
+ } else if (r > 0)
+ FAIL;
+ else
+ CHECK;
+/* Verify that each visual can be selected using VisualBitsPerRGBMask. */
+ if((r = check_mask_visuals((long)VisualBitsPerRGBMask, all, n_all)) < 0) {
+ delete("Path check error in check_mask_visuals");
+ return;
+ } else if (r > 0)
+ FAIL;
+ else
+ CHECK;
+/* Verify that each visual can be selected using */
+/* VisualBitsPerRGBMask|VisualColormapSizeMask. */
+ if((r = check_mask_visuals((long)(VisualBitsPerRGBMask|
+ VisualColormapSizeMask), all, n_all)) < 0) {
+ delete("Path check error in check_mask_visuals");
+ return;
+ } else if (r > 0)
+ FAIL;
+ else
+ CHECK;
+/* Verify that each visual can be selected using VisualAllMask. */
+ if((r = check_mask_visuals((long)VisualAllMask, all, n_all)) < 0) {
+ delete("Path check error in check_mask_visuals");
+ return;
+ } else if (r > 0)
+ FAIL;
+ else
+ CHECK;
+
+/* Free the list of all visuals using XFree. */
+ XFree((char*)all);
+
+ CHECKPASS(14 + 2*n_all);
+
+>>ASSERTION Bad A
+When no visuals match the template specified by the
+.A vinfo_mask
+and
+.A vinfo_template
+arguments,
+then a call to xname returns NULL.
+>>STRATEGY
+Obtain list of all visuals for the screen.
+Initialise visual template to first visual returned.
+Call xname with VisualDepthMask and depth 0.
+Verify that number of matching visuals is set to 0.
+Verify that xname returns NULL.
+>>CODE
+XVisualInfo *visuals;
+XVisualInfo *all;
+
+/* Obtain list of all visuals for the screen. */
+ vinfo_template->screen = XDefaultScreen(Dsp);
+ vinfo_mask = VisualNoMask | VisualScreenMask;
+ all = XCALL;
+
+/* Initialise visual template to first visual returned. */
+ init_vp((long)VisualAllMask, all, vinfo_template);
+ if(all != (XVisualInfo *)NULL)
+ XFree((char*)all);
+
+/* Call xname with VisualDepthMask and depth 0. */
+ vinfo_template->depth = 0;
+ vinfo_mask = VisualNoMask | VisualDepthMask;
+ visuals = XCALL;
+
+/* Verify that number of matching visuals is set to 0. */
+ if (n_ret != 0) {
+ report("%s set nitems_return to %d instead of 0",
+ TestName, n_ret);
+ FAIL;
+ } else
+ CHECK;
+
+/* Verify that xname returns NULL. */
+ if (visuals != (XVisualInfo *)NULL) {
+ XFree((char*)visuals);
+ report("%s did not return NULL", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad B 1
+When sufficient storage cannot be allocated,
+then a call to xname returns NULL.
diff --git a/xc/test/xsuite/xtest/tset/CH10/intrsctrgn/intrsctrgn.m b/xc/test/xsuite/xtest/tset/CH10/intrsctrgn/intrsctrgn.m
new file mode 100644
index 000000000..6e0ca7475
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/intrsctrgn/intrsctrgn.m
@@ -0,0 +1,108 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XIntersectRegion CH10
+
+XintersectRegion(sra, srb, dr_return)
+Region sra;
+Region srb;
+Region dr_return;
+>>ASSERTION Good A
+A call to xname computes the intersection of the regions
+.A sra
+and
+.A srb
+and replaces the value of
+.A dr_return
+with the result.
+>>STRATEGY
+Create regions R1, R2 and R3 using XCreateRegion.
+Verify that none of the calls returned NULL.
+Set R1 to a polygon using XPolygonRegion.
+Set R2 to a polygon which intersects the first using XPolygonRegion.
+Obtain the intersection of R1 and R2 into R3 using xname.
+Verify that the result is not empty using XEmptyRegion.
+
+Test that ((R1 ^ R2) | (R1 & R2)) == (R1 | R2):
+ Obtain union of R1 and R2 into Ru using XUnionRegion.
+ Obtain exclusive-or of R1 and R2 into Rx using XXorRegion.
+ Obtain union of Rx and R3 using XUnionRegion.
+ Verify that result equals Ru using XEqualRegion.
+
+Create three regions using XCreateRegion.
+Set two of the regions to disjoint polygons using XPolygonRegion.
+Obtain the intersection of the regions using xname.
+Verify that the returned region was empty using XEmptyRegion.
+>>CODE
+static XPoint noninter1[] = { {-25,-5}, {-15,-10}, {-10,-25}, {-20,-35}, {-30,-30}, {-35,-20}, {-30,-10} };
+static XPoint inter1[] = { {25,5}, {15,10}, {10,25}, {20,35}, {30,30}, {35,20}, {30,10} };
+static XPoint inter2[] = { {25,20}, {37,22}, {40,30}, {35,37}, {30,40}, {25,38}, {18,32}, {20,25} };
+Region R1;
+Region R2;
+Region Ri;
+Region Rt;
+Region Ru;
+Region Rx;
+
+ R1 = makeregion();
+ R2 = makeregion();
+ Ri = makeregion();
+ Rt = makeregion();
+ Ru = makeregion();
+ Rx = makeregion();
+
+ if(isdeleted()) return;
+
+ R1 = XPolygonRegion( inter1, NELEM(inter1), WindingRule );
+ R2 = XPolygonRegion( inter2, NELEM(inter2), WindingRule );
+ XUnionRegion(R1, R2, Ru);
+
+ sra = R1;
+ srb = R2;
+ dr_return = Ri;
+ XCALL;
+
+ if( XEmptyRegion(Ri) == True ) {
+ report("%s() returned the empty region for two intersecting regions.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ XXorRegion(R1, R2, Rx);
+ XUnionRegion(Rx, Ri, Rt);
+
+ if(XEqualRegion(Ru, Rt) != True) {
+ report("%s() returned a region not completely contained in a source region.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ R1 = makeregion();
+ R2 = makeregion();
+ Ri = makeregion();
+
+ sra = R1;
+ srb = R2;
+ dr_return = Ri;
+ XCALL;
+
+ if( XEmptyRegion(Ri) != True ) {
+ report("%s() returned a non-empty region for two non-intersecting intersecting regions.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
diff --git a/xc/test/xsuite/xtest/tset/CH10/iscrsrky/iscrsrky.m b/xc/test/xsuite/xtest/tset/CH10/iscrsrky/iscrsrky.m
new file mode 100644
index 000000000..388a8a95c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/iscrsrky/iscrsrky.m
@@ -0,0 +1,89 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE IsCursorKey CH10
+
+IsCursorKey(keysym)
+KeySym keysym;
+>>EXTERN
+#define XK_LATIN1
+#define XK_MISCELLANY
+#include "keysymdef.h"
+#undef XK_MISCELLANY
+#undef XK_LATIN1
+>>ASSERTION Good A
+When the
+.A keysym
+argument is a cursor key, then
+invocation of the xname macro returns
+.S True .
+>>STRATEGY
+For each cursor key KeySym:
+ Verify that xname returns True.
+>>CODE
+static KeySym cks[] = {
+ XK_Home,
+ XK_Left,
+ XK_Up,
+ XK_Right,
+ XK_Down,
+ XK_Prior,
+ XK_Next,
+ XK_End,
+ XK_Begin,
+ 0 };
+KeySym *ksp;
+Bool res;
+
+ for(ksp = cks; *ksp; ksp++) {
+ keysym = *ksp;
+ res = XCALL;
+ if(res != True) {
+ char *kstr = XKeysymToString(*ksp);
+
+ report("%s() did not return True for KeySym XK_%s (value %lu).",
+ TestName, kstr != (char *) NULL ? kstr : "<KeySym Undefined>", *ksp);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(NELEM(cks) - 1);
+
+>>ASSERTION Good A
+When the
+.A keysym
+argument is not a cursor key, then
+invocation of the xname macro returns
+.S False .
+>>STRATEGY
+Verify that xname returns False for the KeySym XK_A.
+>>CODE
+Bool res;
+
+ keysym = XK_A;
+ res = XCALL;
+ if(res != False) {
+ char *kstr = XKeysymToString(keysym);
+
+ report("%s() did not return False for KeySym XK_%s (value %lu).",
+ TestName, kstr != (char *) NULL ? kstr : "<KeySym Undefined>", keysym);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH10/isfnctnky/isfnctnky.m b/xc/test/xsuite/xtest/tset/CH10/isfnctnky/isfnctnky.m
new file mode 100644
index 000000000..f8a42d61d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/isfnctnky/isfnctnky.m
@@ -0,0 +1,140 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE IsFunctionKey CH10
+
+IsFunctionKey(keysym)
+KeySym keysym;
+>>EXTERN
+#define XK_LATIN1
+#define XK_MISCELLANY
+#include "keysymdef.h"
+#undef XK_MISCELLANY
+#undef XK_LATIN1
+>>ASSERTION Good A
+When the
+.A keysym
+argument is a function key, then invocation
+of the xname macro returns
+.S True .
+>>STRATEGY
+For each function key KeySym:
+ Verify that xname returns True.
+>>CODE
+static KeySym ks[] = {
+ XK_F1,
+ XK_F2,
+ XK_F3,
+ XK_F4,
+ XK_F5,
+ XK_F6,
+ XK_F7,
+ XK_F8,
+ XK_F9,
+ XK_F10,
+ XK_F11,
+ XK_L1,
+ XK_F12,
+ XK_L2,
+ XK_F13,
+ XK_L3,
+ XK_F14,
+ XK_L4,
+ XK_F15,
+ XK_L5,
+ XK_F16,
+ XK_L6,
+ XK_F17,
+ XK_L7,
+ XK_F18,
+ XK_L8,
+ XK_F19,
+ XK_L9,
+ XK_F20,
+ XK_L10,
+ XK_F21,
+ XK_R1,
+ XK_F22,
+ XK_R2,
+ XK_F23,
+ XK_R3,
+ XK_F24,
+ XK_R4,
+ XK_F25,
+ XK_R5,
+ XK_F26,
+ XK_R6,
+ XK_F27,
+ XK_R7,
+ XK_F28,
+ XK_R8,
+ XK_F29,
+ XK_R9,
+ XK_F30,
+ XK_R10,
+ XK_F31,
+ XK_R11,
+ XK_F32,
+ XK_R12,
+ XK_R13,
+ XK_F33,
+ XK_F34,
+ XK_R14,
+ XK_F35,
+ XK_R15,
+ 0 };
+KeySym *ksp;
+Bool res;
+
+ for(ksp = ks; *ksp; ksp++) {
+ keysym = *ksp;
+ res = XCALL;
+ if(res != True) {
+ char *kstr = XKeysymToString(*ksp);
+
+ report("%s() did not return True for KeySym XK_%s (value %lu).",
+ TestName, kstr != (char *) NULL ? kstr : "<KeySym Undefined>", *ksp);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(NELEM(ks) - 1);
+
+>>ASSERTION Good A
+When the
+.A keysym
+argument is not a function key, then
+invocation of the xname macro returns
+.S False .
+>>STRATEGY
+Verify that xname returns False for the KeySym XK_A.
+>>CODE
+Bool res;
+
+ keysym = XK_A;
+ res = XCALL;
+ if(res != False) {
+ char *kstr = XKeysymToString(keysym);
+
+ report("%s() did not return False for KeySym XK_%s (value %lu).",
+ TestName, kstr != (char *) NULL ? kstr : "<KeySym Undefined>", keysym);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH10/iskypdky/iskypdky.m b/xc/test/xsuite/xtest/tset/CH10/iskypdky/iskypdky.m
new file mode 100644
index 000000000..be8566365
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/iskypdky/iskypdky.m
@@ -0,0 +1,105 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE IsKeypadKey CH10
+
+IsKeypadKey(keysym)
+KeySym keysym;
+>>EXTERN
+#define XK_LATIN1
+#define XK_MISCELLANY
+#include "keysymdef.h"
+#undef XK_MISCELLANY
+#undef XK_LATIN1
+>>ASSERTION Good A
+When the
+.A keysym
+argument is a keypad key, then
+invocation of the xname macro
+returns
+.S True .
+>>STRATEGY
+For each keypad key KeySym:
+ Verify that xname returns True.
+>>CODE
+static KeySym ks[] = {
+ XK_KP_Space,
+ XK_KP_Tab,
+ XK_KP_Enter,
+ XK_KP_F1,
+ XK_KP_F2,
+ XK_KP_F3,
+ XK_KP_F4,
+ XK_KP_Equal,
+ XK_KP_Multiply,
+ XK_KP_Add,
+ XK_KP_Separator,
+ XK_KP_Subtract,
+ XK_KP_Decimal,
+ XK_KP_Divide,
+ XK_KP_0,
+ XK_KP_1,
+ XK_KP_2,
+ XK_KP_3,
+ XK_KP_4,
+ XK_KP_5,
+ XK_KP_6,
+ XK_KP_7,
+ XK_KP_8,
+ XK_KP_9,
+ 0 };
+KeySym *ksp;
+Bool res;
+
+ for(ksp = ks; *ksp; ksp++) {
+ keysym = *ksp;
+ res = XCALL;
+ if(res != True) {
+ char *kstr = XKeysymToString(*ksp);
+
+ report("%s() did not return True for KeySym XK_%s (value %lu).",
+ TestName, kstr != (char *) NULL ? kstr : "<KeySym Undefined>", *ksp);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(NELEM(ks) - 1);
+
+>>ASSERTION Good A
+When the
+.A keysym
+argument is not a keypad key, then
+invocation of the xname macro returns
+.S False .
+>>STRATEGY
+Verify that xname returns False for the KeySym XK_A.
+>>CODE
+Bool res;
+
+ keysym = XK_A;
+ res = XCALL;
+ if(res != False) {
+ char *kstr = XKeysymToString(keysym);
+
+ report("%s() did not return False for KeySym XK_%s (value %lu).",
+ TestName, kstr != (char *) NULL ? kstr : "<KeySym Undefined>", keysym);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH10/ismdfrky/ismdfrky.m b/xc/test/xsuite/xtest/tset/CH10/ismdfrky/ismdfrky.m
new file mode 100644
index 000000000..9a2620137
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/ismdfrky/ismdfrky.m
@@ -0,0 +1,94 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE IsModifierKey CH10
+
+IsModifierKey(keysym)
+KeySym keysym;
+>>EXTERN
+#define XK_LATIN1
+#define XK_MISCELLANY
+#include "keysymdef.h"
+#undef XK_MISCELLANY
+#undef XK_LATIN1
+>>ASSERTION Good A
+When the
+.A keysym
+argument is a modifier key, then invocation of
+the xname macro returns
+.S True .
+>>STRATEGY
+For each modifier key KeySym:
+ Verify that xname returns True.
+>>CODE
+static KeySym ks[] = {
+ XK_Shift_L,
+ XK_Shift_R,
+ XK_Control_L,
+ XK_Control_R,
+ XK_Caps_Lock,
+ XK_Shift_Lock,
+ XK_Meta_L,
+ XK_Meta_R,
+ XK_Alt_L,
+ XK_Alt_R,
+ XK_Super_L,
+ XK_Super_R,
+ XK_Hyper_L,
+ XK_Hyper_R,
+ 0 };
+KeySym *ksp;
+Bool res;
+
+ for(ksp = ks; *ksp; ksp++) {
+ keysym = *ksp;
+ res = XCALL;
+ if(res != True) {
+ char *kstr = XKeysymToString(*ksp);
+
+ report("%s() did not return True for KeySym XK_%s (value %lu).",
+ TestName, kstr != (char *) NULL ? kstr : "<KeySym Undefined>", *ksp);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(NELEM(ks) - 1);
+
+>>ASSERTION Good A
+When the
+.A keysym
+argument is not a modifier key, then
+invocation of the xname macro returns
+.S False .
+>>STRATEGY
+Verify that xname returns False for the KeySym XK_A.
+>>CODE
+Bool res;
+
+ keysym = XK_A;
+ res = XCALL;
+ if(res != False) {
+ char *kstr = XKeysymToString(keysym);
+
+ report("%s() did not return False for KeySym XK_%s (value %lu).",
+ TestName, kstr != (char *) NULL ? kstr : "<KeySym Undefined>", keysym);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH10/ismscfnctn/ismscfnctn.m b/xc/test/xsuite/xtest/tset/CH10/ismscfnctn/ismscfnctn.m
new file mode 100644
index 000000000..0e3598957
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/ismscfnctn/ismscfnctn.m
@@ -0,0 +1,94 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE IsMiscFunctionKey CH10
+
+IsMiscFunctionKey(keysym)
+KeySym keysym;
+>>EXTERN
+#define XK_LATIN1
+#define XK_MISCELLANY
+#include "keysymdef.h"
+#undef XK_MISCELLANY
+#undef XK_LATIN1
+>>ASSERTION Good A
+When the
+.A keysym
+argument is a miscellaneous function key, then
+invocation of the xname macro returns
+.S True .
+>>STRATEGY
+For each miscellaneous function key KeySym:
+ Verify that xname returns True.
+>>CODE
+static KeySym ks[] = {
+ XK_Select,
+ XK_Print,
+ XK_Execute,
+ XK_Insert,
+ XK_Undo,
+ XK_Redo,
+ XK_Menu,
+ XK_Find,
+ XK_Cancel,
+ XK_Help,
+ XK_Break,
+ /* XK_Mode_switch, */
+ /* XK_script_switch, */
+ /* XK_Num_Lock, */
+ 0 };
+KeySym *ksp;
+Bool res;
+
+ for(ksp = ks; *ksp; ksp++) {
+ keysym = *ksp;
+ res = XCALL;
+ if(res != True) {
+ char *kstr = XKeysymToString(*ksp);
+
+ report("%s() did not return True for KeySym XK_%s (value %lu).",
+ TestName, kstr != (char *) NULL ? kstr : "<KeySym Undefined>", *ksp);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(NELEM(ks) - 1);
+
+>>ASSERTION Good A
+When the
+.A keysym
+argument is not a miscellaneous function key, then
+invocation of the xname macro returns
+.S False .
+>>STRATEGY
+Verify that xname returns False for the KeySym XK_A.
+>>CODE
+Bool res;
+
+ keysym = XK_A;
+ res = XCALL;
+ if(res != False) {
+ char *kstr = XKeysymToString(keysym);
+
+ report("%s() did not return False for KeySym XK_%s (value %lu).",
+ TestName, kstr != (char *) NULL ? kstr : "<KeySym Undefined>", keysym);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH10/ispfky/ispfky.m b/xc/test/xsuite/xtest/tset/CH10/ispfky/ispfky.m
new file mode 100644
index 000000000..b8bb64c9a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/ispfky/ispfky.m
@@ -0,0 +1,84 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE IsPFKey CH10
+
+IsPFKey(keysym)
+KeySym keysym;
+>>EXTERN
+#define XK_LATIN1
+#define XK_MISCELLANY
+#include "keysymdef.h"
+#undef XK_MISCELLANY
+#undef XK_LATIN1
+>>ASSERTION Good A
+When the
+.A keysym
+argument is a PF key, then invocation of the
+xname macro returns
+.S True .
+>>STRATEGY
+For each modifier key KeySym:
+ Verify that xname returns True.
+>>CODE
+static KeySym ks[] = {
+ XK_KP_F1,
+ XK_KP_F2,
+ XK_KP_F3,
+ XK_KP_F4,
+ 0 };
+KeySym *ksp;
+Bool res;
+
+ for(ksp = ks; *ksp; ksp++) {
+ keysym = *ksp;
+ res = XCALL;
+ if(res != True) {
+ char *kstr = XKeysymToString(*ksp);
+
+ report("%s() did not return True for KeySym XK_%s (value %lu).",
+ TestName, kstr != (char *) NULL ? kstr : "<KeySym Undefined>", *ksp);
+ FAIL;
+ } else
+ CHECK;
+
+ }
+
+ CHECKPASS(NELEM(ks) - 1);
+
+>>ASSERTION Good A
+When the
+.A keysym
+argument is not a PF key, then
+invocation of the xname macro returns
+.S False .
+>>STRATEGY
+Verify that xname returns False for the KeySym XK_A.
+>>CODE
+Bool res;
+
+ keysym = XK_A;
+ res = XCALL;
+ if(res != False) {
+ char *kstr = XKeysymToString(keysym);
+
+ report("%s() did not return False for KeySym XK_%s (value %lu).",
+ TestName, kstr != (char *) NULL ? kstr : "<KeySym Undefined>", keysym);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH10/kycdtkysym/kycdtkysym.m b/xc/test/xsuite/xtest/tset/CH10/kycdtkysym/kycdtkysym.m
new file mode 100644
index 000000000..122d0b449
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/kycdtkysym/kycdtkysym.m
@@ -0,0 +1,127 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XKeycodeToKeysym CH10
+KeySym
+XKeyCodeToKeysym(display, keycode, index)
+Display *display = Dsp;
+KeyCode keycode;
+int index;
+>>EXTERN
+#define XK_LATIN1
+#include "keysymdef.h"
+#undef XK_LATIN1
+>>ASSERTION Good A
+A call to xname returns the
+.S KeySym
+specified by element
+.A index
+of the
+.S KeyCode
+vector specified by the
+.A keycode
+argument.
+>>STRATEGY
+Obtain the KeyCode corresponding to KeySym XK_a using XKeysymToKeycode.
+Obtain the KeySym corresponding to the KeyCode using xname with index = 0.
+Verify that the KeySym returned is XK_a.
+Obtain the KeySym corresponding to the KeyCode using xname with index = 1.
+Verify that the KeySym returned is XK_A.
+>>CODE
+KeyCode kc;
+KeySym ks;
+
+ kc = XKeysymToKeycode(display, XK_a);
+
+ if(kc == 0) {
+ delete("XKeysymToKeycode() returned 0 for KeySym XK_a");
+ return;
+ } else
+ CHECK;
+
+ keycode = kc;
+ index = 0;
+ ks = XCALL;
+
+ if(ks != XK_a) {
+ report("%s() returned KeySym %lu instead of %lu for KeyCode %lu and index %d.",
+ TestName, (long) ks, (long) XK_a, (long) kc, index);
+ FAIL;
+ } else
+ CHECK;
+
+
+ index = 1;
+ ks = XCALL;
+
+ if(ks != XK_A) {
+ report("%s() returned KeySym %lu instead of %lu for KeyCode %lu and index %d.",
+ TestName, (long) ks, (long) XK_A, (long) kc, index);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the symbol specified by element
+.A index
+of the
+.S KeyCode
+vector specified by the
+.A keycode
+argument is not defined, then a call to
+xname returns
+.S NoSymbol .
+>>STRATEGY
+Obtain the maximum keycode using XDisplayKeycodes.
+Obtain the KeySym corresponding to the maximum KeyCode+1 using xname with index 0.
+Verify that the call returned NoSymbol.
+Obtain the KeySym corresponding to the minimum KeyCode using xname with index 9.
+Verify that the call returned NoSymbol.
+>>CODE
+int maxi,mini;
+KeyCode maxkc, minkc;
+KeySym ks;
+int kspkc;
+
+ XDisplayKeycodes(display, &mini, &maxi);
+ minkc = (KeyCode)mini;
+ maxkc = (KeyCode)maxi;
+
+ index = 0;
+ keycode = maxkc + 1;
+ ks = XCALL;
+
+ if(ks != NoSymbol) {
+ report("%s() returned KeySym value %ul instead of NoSymbol (%lu) for KeyCode %lu and index %d.",
+ TestName, (long) ks, (long) NoSymbol, (long) keycode, index);
+ FAIL;
+ } else
+ CHECK;
+
+ keycode = minkc;
+ index = 9; /* only 0-8 are valid. */
+ ks = XCALL;
+
+ if(ks != NoSymbol) {
+ report("%s() returned KeySym value %ul instead of NoSymbol (%lu) for KeyCode %lu and index %d.",
+ TestName, (long) ks, (long) NoSymbol, (long) keycode, index);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH10/kysymtkycd/kysymtkycd.m b/xc/test/xsuite/xtest/tset/CH10/kysymtkycd/kysymtkycd.m
new file mode 100644
index 000000000..afee6e87c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/kysymtkycd/kysymtkycd.m
@@ -0,0 +1,77 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XKeysymToKeycode CH10
+KeyCode
+XKeysymToKeycode(display, keysym)
+Display *display=Dsp;
+KeySym keysym;
+>>EXTERN
+#define XK_LATIN1
+#include "keysymdef.h"
+#undef XK_LATIN1
+>>ASSERTION Good A
+A call to xname returns the
+.S KeyCode
+defined for the
+.S KeySym
+specified by the
+.A keysym
+argument.
+>>STRATEGY
+Verify that XK_a and XK_A map to the same KeyCode using xname.
+Verify that the returned KeyCode maps to XK_a using XKeycodeToKeysym with index 0.
+Verify that the returned KeyCode maps to XK_A using XKeycodeToKeysym with index 1.
+>>CODE
+KeyCode res_lc, res_uc;
+KeySym ks;
+
+ keysym = XK_A;
+ res_uc = XCALL;
+ keysym = XK_a;
+ res_lc = XCALL;
+
+ if( res_lc != res_uc ) {
+ report("%s() mapped KeySyms XK_A and XK_a to KeyCodes %lu and %lu instead of to the same KeyCode.", TestName, (long) res_uc, (long) res_lc);
+ FAIL;
+ } else
+ CHECK;
+
+ ks = XKeycodeToKeysym(display, res_lc, 0);
+
+ if(ks != XK_a) {
+ report("%s() returned KeyCode %lu which did not map to KeySym XK_a.", TestName, (long) res_lc);
+ FAIL;
+ } else
+ CHECK;
+
+ ks = XKeycodeToKeysym(display, res_uc, 1);
+
+ if(ks != XK_A) {
+ report("%s() returned KeyCode %lu which did not map to KeySym XK_A.", TestName, (long) res_uc);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+
+>>ASSERTION Bad B 1
+When the
+.A keysym
+argument is not defined for any
+.S KeyCode ,
+then a call to xname returns zero.
diff --git a/xc/test/xsuite/xtest/tset/CH10/kysymtstr/kysymtstr.m b/xc/test/xsuite/xtest/tset/CH10/kysymtstr/kysymtstr.m
new file mode 100644
index 000000000..db8865196
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/kysymtstr/kysymtstr.m
@@ -0,0 +1,81 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XKeysymToString CH10
+char *
+XKeysymToString(keysym)
+KeySym keysym;
+>>EXTERN
+#define XK_MISCELLANY
+#include "keysymdef.h"
+#undef XK_MISCELLANY
+>>ASSERTION Good A
+A call to xname returns
+as a null-terminated string
+the name of the
+.S KeySym
+specified by the
+.A keysym
+argument.
+>>STRATEGY
+Obtain the string corresponding to the KeySym XK_BackSpace using xname.
+Verify that the returned string was "BackSpace".
+>>CODE
+KeySym ks = XK_BackSpace;
+char *value = "BackSpace";
+char *res;
+
+ keysym = ks;
+ res = XCALL;
+
+ if( res == (char *) NULL) {
+ report("%s() returned NULL for KeySym XK_BackSpace.", TestName);
+ FAIL;
+ } else {
+ CHECK;
+ if(strcmp(res, value) != 0) {
+ report("%s() returned \"%s\" instead of \"%s\" for KeySym XK_Backspace.",
+ TestName, res, value);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the
+.S KeySym
+specified by the
+.A keysym
+argument
+is not defined, then a call to xname returns NULL.
+>>STRATEGY
+Obtain the string corresponding to the KeySym NoSymbol using xname.
+Verify that the returned string was NULL
+>>CODE
+KeySym ks = NoSymbol;
+char *res;
+
+ keysym = ks;
+ res = XCALL;
+
+ if( res != (char *) NULL) {
+ report("%s() returned \"%s\" instead of NULL for KeySym NoSymbol.",
+ TestName, res);
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH10/linktbl.c b/xc/test/xsuite/xtest/tset/CH10/linktbl.c
new file mode 100644
index 000000000..4080e95b2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/linktbl.c
@@ -0,0 +1,162 @@
+/* $XConsortium$ */
+
+#include "xtest.h"
+
+extern struct linkinfo EIsCrsrKy;
+extern struct linkinfo EIsFnctnKy;
+extern struct linkinfo EIsKypdKy;
+extern struct linkinfo EIsMscFnctnKy;
+extern struct linkinfo EIsMdfrKy;
+extern struct linkinfo EIsPFKy;
+extern struct linkinfo EXAddPxl;
+extern struct linkinfo EXClpBx;
+extern struct linkinfo EXCrtBtmpFrmD;
+extern struct linkinfo EXCrtImg;
+extern struct linkinfo EXCrtPxmpFrmB;
+extern struct linkinfo EXCrtRgn;
+extern struct linkinfo EXDltCntxt;
+extern struct linkinfo EXDstryImg;
+extern struct linkinfo EXDstryRgn;
+extern struct linkinfo EXEmptyRgn;
+extern struct linkinfo EXEqlRgn;
+extern struct linkinfo EXFtchBffr;
+extern struct linkinfo EXFtchByts;
+extern struct linkinfo EXFndCntxt;
+extern struct linkinfo EXGtDflt;
+extern struct linkinfo EXGtPxl;
+extern struct linkinfo EXGtVslInf;
+extern struct linkinfo EXIntrsctRgn;
+extern struct linkinfo EXKycdTKysym;
+extern struct linkinfo EXKysymTKycd;
+extern struct linkinfo EXKysymTStr;
+extern struct linkinfo EXLkpKysym;
+extern struct linkinfo EXLkpStr;
+extern struct linkinfo EXMtchVslInf;
+extern struct linkinfo EXOffstRgn;
+extern struct linkinfo EXPrsClr;
+extern struct linkinfo EXPrsGmtry;
+extern struct linkinfo EXPntInRgn;
+extern struct linkinfo EXPlygnRgn;
+extern struct linkinfo EXPtPxl;
+extern struct linkinfo EXRdBtmpFl;
+extern struct linkinfo EXRbndKysym;
+extern struct linkinfo EXRctInRgn;
+extern struct linkinfo EXRfrshKybrdM;
+extern struct linkinfo EXRsrcMngrStr;
+extern struct linkinfo EXRttBffrs;
+extern struct linkinfo EXSvCntxt;
+extern struct linkinfo EXStRgn;
+extern struct linkinfo EXShrnkRgn;
+extern struct linkinfo EXStrBffr;
+extern struct linkinfo EXStrByts;
+extern struct linkinfo EXStrTKysym;
+extern struct linkinfo EXSbImg;
+extern struct linkinfo EXSbtrctRgn;
+extern struct linkinfo EXUnnRctWthRg;
+extern struct linkinfo EXUnnRgn;
+extern struct linkinfo EXUnqCntxt;
+extern struct linkinfo EXWrtBtmpFl;
+extern struct linkinfo EXXrRgn;
+extern struct linkinfo EXprmllc;
+extern struct linkinfo EXrmDstryDtbs;
+extern struct linkinfo EXrmGtFlDtbs;
+extern struct linkinfo EXrmGtRsrc;
+extern struct linkinfo EXrmGtStrDtbs;
+extern struct linkinfo EXrmIntlz;
+extern struct linkinfo EXrmMrgDtbss;
+extern struct linkinfo EXrmPrsCmmnd;
+extern struct linkinfo EXrmPtFlDtbs;
+extern struct linkinfo EXrmPtLnRsrc;
+extern struct linkinfo EXrmPtRsrc;
+extern struct linkinfo EXrmPtStrRsrc;
+extern struct linkinfo EXrmQGtRsrc;
+extern struct linkinfo EXrmQGtSrchLs;
+extern struct linkinfo EXrmQGtSrchRs;
+extern struct linkinfo EXrmQPtRsrc;
+extern struct linkinfo EXrmQPtStrRsr;
+extern struct linkinfo EXrmQrkTStr;
+extern struct linkinfo EXrmStrTBndng;
+extern struct linkinfo EXrmStrTQrk;
+extern struct linkinfo EXrmStrTQrkLs;
+extern struct linkinfo EXrmUnqQrk;
+
+struct linkinfo *linktbl[] = {
+ &EIsCrsrKy,
+ &EIsFnctnKy,
+ &EIsKypdKy,
+ &EIsMscFnctnKy,
+ &EIsMdfrKy,
+ &EIsPFKy,
+ &EXAddPxl,
+ &EXClpBx,
+ &EXCrtBtmpFrmD,
+ &EXCrtImg,
+ &EXCrtPxmpFrmB,
+ &EXCrtRgn,
+ &EXDltCntxt,
+ &EXDstryImg,
+ &EXDstryRgn,
+ &EXEmptyRgn,
+ &EXEqlRgn,
+ &EXFtchBffr,
+ &EXFtchByts,
+ &EXFndCntxt,
+ &EXGtDflt,
+ &EXGtPxl,
+ &EXGtVslInf,
+ &EXIntrsctRgn,
+ &EXKycdTKysym,
+ &EXKysymTKycd,
+ &EXKysymTStr,
+ &EXLkpKysym,
+ &EXLkpStr,
+ &EXMtchVslInf,
+ &EXOffstRgn,
+ &EXPrsClr,
+ &EXPrsGmtry,
+ &EXPntInRgn,
+ &EXPlygnRgn,
+ &EXPtPxl,
+ &EXRdBtmpFl,
+ &EXRbndKysym,
+ &EXRctInRgn,
+ &EXRfrshKybrdM,
+ &EXRsrcMngrStr,
+ &EXRttBffrs,
+ &EXSvCntxt,
+ &EXStRgn,
+ &EXShrnkRgn,
+ &EXStrBffr,
+ &EXStrByts,
+ &EXStrTKysym,
+ &EXSbImg,
+ &EXSbtrctRgn,
+ &EXUnnRctWthRg,
+ &EXUnnRgn,
+ &EXUnqCntxt,
+ &EXWrtBtmpFl,
+ &EXXrRgn,
+ &EXprmllc,
+ &EXrmDstryDtbs,
+ &EXrmGtFlDtbs,
+ &EXrmGtRsrc,
+ &EXrmGtStrDtbs,
+ &EXrmIntlz,
+ &EXrmMrgDtbss,
+ &EXrmPrsCmmnd,
+ &EXrmPtFlDtbs,
+ &EXrmPtLnRsrc,
+ &EXrmPtRsrc,
+ &EXrmPtStrRsrc,
+ &EXrmQGtRsrc,
+ &EXrmQGtSrchLs,
+ &EXrmQGtSrchRs,
+ &EXrmQPtRsrc,
+ &EXrmQPtStrRsr,
+ &EXrmQrkTStr,
+ &EXrmStrTBndng,
+ &EXrmStrTQrk,
+ &EXrmStrTQrkLs,
+ &EXrmUnqQrk,
+ 0,
+};
diff --git a/xc/test/xsuite/xtest/tset/CH10/lkpkysym/lkpkysym.m b/xc/test/xsuite/xtest/tset/CH10/lkpkysym/lkpkysym.m
new file mode 100644
index 000000000..8b1c24881
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/lkpkysym/lkpkysym.m
@@ -0,0 +1,121 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XLookupKeysym CH10
+KeySym
+XLookupKeysym(key_event, index)
+XKeyEvent *key_event;
+int index = 0;
+>>ASSERTION Good A
+A call to xname returns the
+.S KeySym
+element specified by
+.A index
+of the
+.S KeyCode
+vector specified by the
+.M keycode
+member of the
+.A key_event
+argument .
+>>STRATEGY
+Obtain the maximum and minimum KeyCodes using XDisplayKeycodes.
+Obtain the number of KeySyms per KeyCode using XGetKeyboardMapping.
+For each KeyCode and index:
+ Obtain the corresponding KeySym using XKeycodeToKeysym.
+ Obtain the corresponding KeySym using xname.
+ Verify that the KeySyms are identical.
+
+>>CODE
+int minkc, maxkc;
+int syms_per_kc;
+KeyCode kc;
+KeySym ks, res;
+KeySym *keysyms;
+XKeyEvent ke;
+int i;
+
+ XDisplayKeycodes(Dsp, &minkc, &maxkc);
+ keysyms = XGetKeyboardMapping(Dsp, minkc, 1, &syms_per_kc);
+ XFree((char *) keysyms);
+ key_event = &ke;
+ ke.display = Dsp;
+
+ for(i=minkc; i<=maxkc; i++)
+ for(index = 0; index < syms_per_kc; index++) {
+ ks = XKeycodeToKeysym(Dsp, i, index);
+ ke.keycode = i;
+ res = XCALL;
+ if(res != ks){
+ report("%s() returned KeySym %lu instead of %lu for KeyCode %lu with index %d.", TestName, (long) res, (long) ks, (long) i, index);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+
+ CHECKPASS( (1+maxkc-minkc) * syms_per_kc);
+
+>>ASSERTION Good A
+When no
+.S KeySym
+is defined for the
+.M keycode
+of the event
+.A key_event ,
+then a call to xname returns
+.S NoSymbol .
+>>STRATEGY
+Obtain the maximum and minimum KeyCodes using XDisplayKeycodes.
+Obtain the number of KeySyms per KeyCode using XGetKeyboardMapping.
+For each index:
+ Obtain the KeySym for a KeyCode greater than maximum KeyCode using xname.
+ Verify that the KeySym returned is NoSymbol.
+>>CODE
+int minkc, maxkc;
+int syms_per_kc;
+KeyCode kc;
+KeySym res;
+KeySym *keysyms;
+XKeyEvent ke;
+
+ XDisplayKeycodes(Dsp, &minkc, &maxkc);
+ keysyms = XGetKeyboardMapping(Dsp, minkc, 1, &syms_per_kc);
+ XFree( (char *) keysyms);
+ kc = maxkc + 1;
+
+ if(kc == minkc) {
+ delete("Cannot establish an invalid KeyCode.");
+ return;
+ } else
+ CHECK;
+
+ key_event = &ke;
+ ke.display = Dsp;
+ ke.keycode = kc;
+
+ for(index=0; index < syms_per_kc; index++) {
+
+ res = XCALL;
+
+ if(res != NoSymbol) {
+ report("%s() returned %lu instead of NoSymbol (%lu) for invalid KeyCode %lu with index %d.", TestName, (long) res, (long) NoSymbol, (long) kc, index);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(1 + syms_per_kc);
diff --git a/xc/test/xsuite/xtest/tset/CH10/lkpstr/lkpstr.m b/xc/test/xsuite/xtest/tset/CH10/lkpstr/lkpstr.m
new file mode 100644
index 000000000..df2bff2b4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/lkpstr/lkpstr.m
@@ -0,0 +1,198 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XLookupString CH10
+int
+XLookupString(event_struct, buffer_return, bytes_buffer, keysym_return, status_in_out)
+XKeyEvent *event_struct;
+char *buffer_return;
+int bytes_buffer;
+KeySym *keysym_return;
+XComposeStatus *status_in_out;
+>>EXTERN
+#define XK_LATIN1
+#define XK_MISCELLANY
+#include "keysymdef.h"
+#undef XK_MISCELLANY
+#undef XK_LATIN1
+>>ASSERTION Good A
+A call to xname returns in the
+.A keysym_return
+argument the
+.S KeySym
+and in the
+.A buffer_return
+the string of maximum length
+.A bytes_buffer
+specified by the
+.M keycode
+and
+.M state
+of the
+.A event_struct
+argument,
+using the standard shift
+modifier computations as defined in the X protocol specification,
+and returns the length of the returned string.
+>>STRATEGY
+Obtain the keycode corresponding to the keysym XK_b using XKeysymToKeycode.
+Obtain the string and keysym bound to that keycode using xname.
+Verify that the returned string is correct.
+Obtain the string and keysym bound to that keycode using xname with state = ShiftMask.
+Verify that the returned string is correct.
+>>CODE
+KeySym ks = 0;
+KeyCode kc;
+static char buf[]="Xtest uninitialised string.";
+int res;
+int cmplen;
+int mlen = strlen(buf);
+XKeyEvent ke;
+
+ kc = XKeysymToKeycode(Dsp, XK_b);
+
+ ke.type = KeyPress;
+ ke.display = Dsp;
+ ke.keycode = kc;
+ ke.state = 0;
+
+ event_struct = &ke;
+ buffer_return = (char *) buf;
+ bytes_buffer = mlen;
+ keysym_return = &ks;
+ status_in_out = (XComposeStatus *) NULL;
+
+ res = XCALL;
+
+ if(ks != XK_b) {
+ report("%s() returned keysym %d instead of %d.", TestName, (int) ks, (int) XK_b);
+ FAIL;
+ } else
+ CHECK;
+
+ if(res != 1) {
+ report("%s() returned %d instead of 1.", TestName, res);
+ FAIL;
+ } else
+ CHECK;
+
+ cmplen = mlen;
+ if(res>0 && res<mlen)
+ cmplen = res;
+ buf[cmplen] = '\0';
+
+ if(strncmp(buffer_return, "b", cmplen) != 0) {
+ report("%s() returned string \"%s\" instead of \"b\".", TestName, buffer_return);
+ FAIL;
+ } else
+ CHECK;
+
+ ke.state = ShiftMask;
+ event_struct = &ke;
+ res = XCALL;
+
+ if(ks != XK_B) {
+ report("%s() returned keysym %d instead of %d.", TestName, (int) ks, (int) XK_B);
+ FAIL;
+ } else
+ CHECK;
+
+ cmplen = mlen;
+ if(res>0 && res<mlen)
+ cmplen = res;
+ buf[cmplen] = '\0';
+
+ if(strncmp(buffer_return, "B", cmplen) != 0) {
+ report("%s() returned string \"%s\" instead of \"B\".", TestName, buffer_return);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>>ASSERTION Good A
+When the
+.S KeySym
+corresponding to the
+.A event_struct
+argument has been rebound, then
+the bound string is returned, truncated to
+.A bytes_buffer ,
+in the
+.A buffer_return
+argument.
+>>STRATEGY
+Rebind the keysym XK_c to the string XtestRebound using XRebindKeysym.
+Obtain the keycode bound to the XK_c keysym using XKeysymToKeycode.
+Obtain the first three characters of the string to which the keycode is bound using xname.
+Verify that the returned string is correct.
+>>CODE
+KeySym ks = 0;
+KeyCode kc;
+static char buf[]="XtestRebound";
+static char buf_ret[4];
+int res;
+int cmplen;
+int mlen = 3;
+XKeyEvent ke;
+
+ kc = XKeysymToKeycode(Dsp, XK_c);
+ XRebindKeysym(Dsp, XK_c, (KeySym *) NULL, 0, (unsigned char *) buf, strlen(buf));
+
+ ke.type = KeyPress;
+ ke.display = Dsp;
+ ke.keycode = kc;
+ ke.state = 0;
+
+ event_struct = &ke;
+ buffer_return = (char *) buf_ret;
+ bytes_buffer = mlen;
+ keysym_return = &ks;
+ status_in_out = (XComposeStatus *) NULL;
+
+ res = XCALL;
+
+ if(ks != XK_c) {
+ report("%s() returned keysym %d instead of %d.", TestName, (int) ks, (int) XK_b);
+ FAIL;
+ } else
+ CHECK;
+
+ if(res != mlen) {
+ report("%s() returned %d instead of %d.", TestName, res, mlen);
+ FAIL;
+ } else
+ CHECK;
+
+ cmplen = mlen;
+ if(res>0 && res<mlen)
+ cmplen = res;
+ buf[cmplen] = '\0';
+ buffer_return[cmplen] = '\0';
+
+ if(strncmp(buffer_return, buf, cmplen) != 0) {
+ report("%s() returned string \"%s\" instead of \"%s\".", TestName, buffer_return, buf);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
+
+>>ASSERTION Good B 1
+When the
+.A status_in_out
+argument is not NULL, then a call to xname
+records in it the state of compose processing.
diff --git a/xc/test/xsuite/xtest/tset/CH10/mtchvslinf/mtchvslinf.m b/xc/test/xsuite/xtest/tset/CH10/mtchvslinf/mtchvslinf.m
new file mode 100644
index 000000000..4563319c9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/mtchvslinf/mtchvslinf.m
@@ -0,0 +1,125 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XMatchVisualInfo CH10
+Status
+XMatchVisualInfo(display, screen, depth, class, vinfo)
+Display *display = Dsp;
+int screen = DefaultScreen(Dsp);
+int depth;
+int class;
+XVisualInfo *vinfo;
+>>ASSERTION Good A
+When a visual exists on screen
+.A screen
+of depth
+.A depth
+and of class
+.A class,
+then a call to xname returns the associated
+.S XVisualInfo
+structure in the
+.A vinfo_return
+argument, and returns non-zero.
+>>STRATEGY
+Initialise the list of class/depth pairs from parameter XT_VISUAL_CLASSES.
+For each class/depth pair:
+ Call xname.
+ Verify that xname does not return zero.
+ Verify that class and depth of returned structure are correct.
+>>CODE
+Status s;
+XVisualInfo vi;
+
+/* Initialise the list of class/depth pairs from parameter XT_VISUAL_CLASSES. */
+ if(initvclass() < 0) {
+ delete("The list of expected visual classes could not be initialised.");
+ return;
+ }
+ vinfo = &vi;
+/* For each class/depth pair: */
+ for (resetvclass(); nextvclass(&class, &depth); ) {
+
+/* Call xname. */
+ s = XCALL;
+
+ trace("Matching depth=%d, class=%s", depth, displayclassname(class));
+
+/* Verify that xname does not return zero. */
+ if (s == 0) {
+ report("%s returned 0 with depth=%d, class=%s",
+ TestName, depth, displayclassname(class));
+ FAIL;
+/* Verify that class and depth of returned structure are correct. */
+ } else if (vi.class != class || vi.depth != depth) {
+ /*
+ * Since the actual visual returned is not defined then
+ * all we can do is check that class and depth are OK
+ * and output all the other fields for regression test purposes.
+ */
+ report(" Incorrect class or depth found");
+ report(" Got %s, depth %d", displayclassname(vi.class), vi.depth);
+ report(" Expecting %s, depth", displayclassname(class),
+ depth);
+ FAIL;
+ } else {
+ trace(" visualid=0x%x, screen=%d, depth=%u, class=%s",
+ vi.visualid, vi.screen, vi.depth,
+ displayclassname(vi.class));
+ trace(" red_mask=0x%x, green_mask=0x%x, blue_mask=0x%x",
+ vi.red_mask,
+ vi.green_mask,
+ vi.blue_mask);
+ trace(" colormap_size=%d, bits_per_rgb=%d",
+ vi.colormap_size,
+ vi.bits_per_rgb);
+
+ CHECK;
+ }
+ }
+
+ CHECKPASS(nvclass());
+
+>>ASSERTION Good A
+When a visual does not exist on screen
+.A screen
+of depth
+.A depth
+and of class
+.A class,
+then a call to xname returns zero.
+>>STRATEGY
+Call xname with depth zero.
+Verify that xname returns zero.
+>>CODE
+Status s;
+
+ /*
+ * Try with a depth of 0 which is always invalid.
+ */
+ depth = 0;
+ class = StaticColor;
+
+ s = XCALL;
+
+ if (s == 0)
+ CHECK;
+ else {
+ report("Return value was %d", s);
+ FAIL;
+ }
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH10/offstrgn/offstrgn.m b/xc/test/xsuite/xtest/tset/CH10/offstrgn/offstrgn.m
new file mode 100644
index 000000000..23126efba
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/offstrgn/offstrgn.m
@@ -0,0 +1,89 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XOffsetRegion CH10
+
+XOffsetRegion(r, dx, dy)
+Region r;
+int dx;
+int dy;
+>>ASSERTION Good A
+A call to xname moves the region
+.A r
+by
+.A dx
+in the x direction and
+.A dy
+in the y direction.
+>>STRATEGY
+Create a window using XCreateWindow.
+Create a gc using XCreateGC.
+Set the gc function to GXxor using XSetFunction.
+Set the foreground pixel of the gc to W_FG ^ W_BG using XSetForeground.
+Draw a rectangle using XFillRectangle.
+Create a region using XCreateRegion.
+Verify that the call did not return NULL.
+Set the region to a rectangle of the same dimension but a different position as the drawn one using XUnionRectWithRegion.
+Offset the region to lie over the same position as the drawn rectangle using xname.
+Set the clipmask of the gc to the region using XSetRegion.
+Fill the entire drawable using XFillRectangle.
+Verify that the entire window is W_BG.
+>>CODE
+XVisualInfo *vi;
+Window win;
+GC gc;
+unsigned int width;
+unsigned int height;
+static XRectangle cliprect = { 23, 13, 53, 63 };
+static XRectangle rect = { -1, -2, 53, 63 };
+
+ resetvinf(VI_WIN);
+ nextvinf(&vi);
+ win = makewin(Dsp, vi); /* Makes a window with bg W_BG. */
+
+ gc = makegc(Dsp, win);
+ XSetFunction(Dsp, gc, GXxor);
+ XSetForeground(Dsp, gc, W_BG^W_FG);
+ XFillRectangle(Dsp, win, gc, cliprect.x, cliprect.y, cliprect.width, cliprect.height);
+ if( checkarea(Dsp, win, (struct area *) NULL, W_BG, W_BG, CHECK_ALL|CHECK_DIFFER) != 0) {
+ delete("All pixels were set to W_BG before calling %s", TestName);
+ return;
+ } else
+ PASS;
+
+ if( (r = XCreateRegion()) == (Region) NULL) {
+ delete("XCreateRegion() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ XUnionRectWithRegion(&rect, r, r);
+ dx = cliprect.x - rect.x;
+ dy = cliprect.y - rect.y;
+ XCALL;
+ XSetRegion(Dsp, gc, r);
+ getsize(Dsp, win, &width, &height);
+ XFillRectangle(Dsp, win, gc, 0,0, width, height);
+
+ if( checkarea(Dsp, win, (struct area *) NULL, W_BG, W_BG, CHECK_ALL) == 0) {
+ report("Some pixels were not set to W_BG after calling %s", TestName);
+ FAIL;
+ } else
+ PASS;
+
+ XFlush(Dsp);
+ sleep(5);
+ XDestroyRegion(r);
diff --git a/xc/test/xsuite/xtest/tset/CH10/plygnrgn/plygnrgn.m b/xc/test/xsuite/xtest/tset/CH10/plygnrgn/plygnrgn.m
new file mode 100644
index 000000000..29f6631bc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/plygnrgn/plygnrgn.m
@@ -0,0 +1,139 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XPolygonRegion CH10
+Region
+XPolygonRegion(points, n, fill_rule)
+XPoint *points;
+int n = 99;
+int fill_rule;
+>>EXTERN
+XPoint poly1[] = { {20,20}, {35,10}, {55,10}, {80,20}, {90,35}, {85,50}, {75,65}, {50,70}, {30,65}, {20,60}, {15,40} };
+XPoint poly2[] = { {75,60}, {60,45}, {55,60}, {30,55}, {35,35}, {15,40}, {20,18}, {45,10}, {70,15}, {55,30}, {80,45} };
+XPoint poly3[] = { {85,40}, {30,20}, {20,55}, {30,69}, {55,35}, {85,44}, {10,43}, {14,66} };
+/*
+ * The same polygon used in XFillPolygon tests.
+ */
+XPoint compshape[] = { {10, 10}, {80, 10}, {100, 30}, {65, 60}, {65, 30}, {85, 60},
+ {30, 50}, {30, 80}, {60, 80}, {60, 5}, {70, 5}, {70, 100}, {10, 100},
+};
+
+struct prec {
+ XPoint *points;
+ int size;
+} poly[] = { {poly1, NELEM(poly1)},
+ {poly2, NELEM(poly2)},
+ {compshape, NELEM(compshape)} };
+
+>>ASSERTION Good A
+A call to xname returns a region
+comprising the interior of the
+filled polygon as described by the
+.A n
+points
+specified by the
+.A points
+argument, filled with the
+.A fill_rule
+argument.
+>>STRATEGY
+For a convex, concave and complex polygon :
+ For fill_rule = EvenOddRule, WindingRule :
+ Create a polygon region using xname.
+ Create a gc using XCreateGC.
+ Set the foreground of the GC to W_FG ^ W_BG.
+ Create a drawable with background W_BG using XCreateWindow.
+ Fill the polygon on the drawable using XFillPolygon.
+ Set the GC clipmask to the region using XSetRegion.
+ Set the graphics function of the GC to GXxor using XSetFunction.
+ Fill the drawable using XFillRectangle.
+ Verify that the entire drawable is W_BG.
+>>CODE
+int loop;
+XImage im;
+XVisualInfo *vi;
+Region reg;
+Window win;
+GC gc;
+unsigned int width;
+unsigned int height;
+int x;
+
+ resetvinf(VI_WIN);
+ nextvinf(&vi);
+
+ for(loop=0; loop < NELEM(poly); loop++) {
+
+ win = makewin(Dsp, vi);
+ gc = makegc(Dsp, win);
+ fill_rule = EvenOddRule;
+ XSetFillRule(Dsp, gc, fill_rule);
+ XSetFillStyle(Dsp, gc, FillSolid);
+ XSetFunction(Dsp, gc, GXxor);
+ XSetForeground(Dsp, gc, W_BG^W_FG);
+ points = poly[loop].points;
+ n = poly[loop].size;
+ reg = XCALL;
+
+ getsize(Dsp, win, &width, &height);
+ XFillPolygon(Dsp, win, gc, points, n, Complex, CoordModeOrigin);
+ if( checkarea(Dsp, win, (struct area *) NULL, W_BG, W_BG, CHECK_ALL|CHECK_DIFFER)){
+ delete("XFillPolygon() did set any pixels to non-background values.");
+ return;
+ } else
+ CHECK;
+ XSetRegion(Dsp, gc, reg);
+ XFillRectangle(Dsp, win, gc, 0,0, width, height);
+
+ if( checkarea(Dsp, win, (struct area *) NULL, W_BG, W_BG, CHECK_ALL) == 0){
+ report("When used as a clip-mask in a GC,");
+ report("the polygon region did not produce the expected clipping.");
+ report("Results depend on the correctness of XFillPolygon().");
+ FAIL;
+ } else
+ CHECK;
+ XDestroyRegion(reg);
+
+ win = makewin(Dsp, vi);
+ gc = makegc(Dsp, win);
+ fill_rule = WindingRule;
+ XSetFillRule(Dsp, gc, fill_rule);
+ XSetFillStyle(Dsp, gc, FillSolid);
+ XSetFunction(Dsp, gc, GXxor);
+ XSetForeground(Dsp, gc, W_BG^W_FG);
+ reg = XCALL;
+
+ getsize(Dsp, win, &width, &height);
+ XFillPolygon(Dsp, win, gc, points, n, Complex, CoordModeOrigin);
+ if( checkarea(Dsp, win, (struct area *) NULL, W_BG, W_BG, CHECK_ALL|CHECK_DIFFER)){
+ delete("XFillPolygon() did set any pixels to non-background values.");
+ return;
+ } else
+ CHECK;
+ XSetRegion(Dsp, gc, reg);
+ XFillRectangle(Dsp, win, gc, 0,0, width, height);
+
+ if( checkarea(Dsp, win, (struct area *) NULL, W_BG, W_BG, CHECK_ALL) == 0){
+ report("When used as a clip-mask in a GC,");
+ report("the polygon region did not produce the expected clipping.");
+ report("Results depend on the correctness of XFillPolygon().");
+ FAIL;
+ } else
+ CHECK;
+ XDestroyRegion(reg);
+ }
+
+ CHECKPASS(NELEM(poly) * 4);
diff --git a/xc/test/xsuite/xtest/tset/CH10/pntinrgn/pntinrgn.m b/xc/test/xsuite/xtest/tset/CH10/pntinrgn/pntinrgn.m
new file mode 100644
index 000000000..c512a648e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/pntinrgn/pntinrgn.m
@@ -0,0 +1,152 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XPointInRegion CH10
+Bool
+XPointInRegion(r, x, y)
+Region r;
+int x;
+int y;
+>>EXTERN
+static XPoint lines[] = { {20,20}, {35,10}, {55,10}, {80,20}, {90,35}, {85,50}, {75,65}, {50,70}, {30,65}, {20,60}, {15,40}, {20,20} };
+static XPoint ply1[] = { {20,20}, {35,10}, {55,10}, {80,20}, {90,35}, {85,50}, {75,65}, {50,70}, {30,65}, {20,60}, {15,40} };
+
+>>ASSERTION Good A
+When the point specified by the
+.A x
+and
+.A y
+arguments is contained in the region
+.A r ,
+then a call to xname returns
+.S True .
+>>STRATEGY
+Create a region using XCreateRegion.
+Set the region to a polygon using XPolygonRegion.
+Obtain the smallest rectangle covering the region using XClipBox.
+For each point in the covered area:
+ Determine whether the point is in the region using xname.
+ Obtain the union of a region formed from the point and the region.
+ If the point is in the region:
+ Verify that the union is the same as the initial region using XEqualRegion.
+>>CODE
+Region R;
+Region Rp;
+Bool res;
+XRectangle rrect;
+int maxx;
+int maxy;
+
+ R = makeregion();
+ if(isdeleted()) return;
+ R = XPolygonRegion(ply1, NELEM(ply1), WindingRule);
+
+ XClipBox(R, &rrect);
+
+ rrect.height = 1;
+ rrect.width = 1;
+ r = R;
+ maxx = 10 + rrect.x + rrect.width;
+ maxy = 10 + rrect.y + rrect.height;
+ for(x = rrect.x - 10; x <= maxx; x++) {
+ rrect.x = x;
+ for(y = rrect.y - 10; y <= maxy; y++) {
+ rrect.y = y;
+ res = XCALL;
+ Rp = XCreateRegion();
+ XUnionRectWithRegion(&rrect, Rp, Rp);
+ XUnionRegion(R, Rp, Rp);
+
+ if(XEqualRegion(R, Rp) == True) {
+ if(res != True) {
+ report("%s() did not return True",
+ TestName);
+ report("when point %d %d was in the specified region",
+ x, y);
+ FAIL;
+ }
+ }
+ if((x == maxx) && (y == maxy))
+ CHECK;
+ XDestroyRegion(Rp);
+ }
+ }
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When the point specified by the
+.A x
+and
+.A y
+arguments is not contained in the region
+.A r ,
+then a call to xname returns
+.S False .
+>>STRATEGY
+Create a region using XCreateRegion.
+Set the region to a polygon using XPolygonRegion.
+Obtain the smallest rectangle covering the region using XClipBox.
+For each point in the covered area:
+ Determine whether the point is in the region using xname.
+ Obtain the union of a region formed from the point and the region.
+ If the point is not in the region:
+ Verify that the union is not the same as the initial region using XEqualRegion.
+>>CODE
+Region R;
+Region Rp;
+Bool res;
+XRectangle rrect;
+int maxx;
+int maxy;
+
+ R = makeregion();
+ if(isdeleted()) return;
+ R = XPolygonRegion(ply1, NELEM(ply1), WindingRule);
+
+ XClipBox(R, &rrect);
+
+ rrect.height = 1;
+ rrect.width = 1;
+ r = R;
+ maxx = 10 + rrect.x + rrect.width;
+ maxy = 10 + rrect.y + rrect.height;
+ for(x = rrect.x - 10; x <= maxx; x++) {
+ rrect.x = x;
+ for(y = rrect.y - 10; y <= maxy; y++) {
+ rrect.y = y;
+ res = XCALL;
+ Rp = XCreateRegion();
+ XUnionRectWithRegion(&rrect, Rp, Rp);
+ XUnionRegion(R, Rp, Rp);
+
+ if(XEqualRegion(R, Rp) != True) {
+ if(res != False) {
+ report("%s() did not return False",
+ TestName);
+ report("when point %d %d was not in the specified region",
+ x, y);
+ FAIL;
+ }
+ }
+ if((x == maxx) && (y == maxy))
+ CHECK;
+ XDestroyRegion(Rp);
+ }
+ }
+
+ CHECKPASS(1);
+
diff --git a/xc/test/xsuite/xtest/tset/CH10/prmllc/prmllc.m b/xc/test/xsuite/xtest/tset/CH10/prmllc/prmllc.m
new file mode 100644
index 000000000..770beb29b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/prmllc/prmllc.m
@@ -0,0 +1,69 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE Xpermalloc CH10
+char *
+
+unsigned int size;
+>>ASSERTION Good A
+A call to xname returns a pointer to a block of memory
+.A size
+bytes large.
+>>STRATEGY
+Call xname to allocate a block of memory.
+Verify that all addresses within the block may be accessed.
+>>CODE
+int i, badaccess;
+char *ret;
+
+/* Call xname to allocate a block of memory. */
+ size = 2048;
+ ret = XCALL;
+
+ if( ret == (char *)NULL ) {
+ delete("%s returned a NULL pointer.", TestName);
+ report("Expecting a pointer to a block of %u bytes", size);
+ } else
+ CHECK;
+
+/* Verify that all addresses within the block may be accessed. */
+ for(i=0; i<size; i++) {
+ *(ret+i)='s'; /* A SIGSEGV indicates t r o u b l e */
+ CHECK;
+ }
+
+ badaccess=0;
+ for(i=0; i<size; i++) {
+ if( *(ret+i) != 's' ) {
+ badaccess++;
+ } else
+ CHECK;
+ }
+
+ if( badaccess!=0 ) {
+ FAIL;
+ report("%s did not return a writable block of memory.",
+ TestName);
+ report("%d addresses within the allocated block could not be written to.", badaccess);
+ } else
+ CHECK;
+
+ CHECKPASS(2+size*2);
+
+>>ASSERTION Bad B 1
+When sufficient temporary storage cannot be allocated, then a call to
+xname returns
+.S NULL .
diff --git a/xc/test/xsuite/xtest/tset/CH10/prsclr/prsclr.m b/xc/test/xsuite/xtest/tset/CH10/prsclr/prsclr.m
new file mode 100644
index 000000000..90f0889d6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/prsclr/prsclr.m
@@ -0,0 +1,431 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XParseColor CH10
+>>#
+>># Note Do{Red,Green,Blue} are set in the XColor structure.
+>>#
+Status
+XParseColor(display, colormap, spec, exact_def_return)
+Display *display = Dsp;
+Colormap colormap = DefaultColormap(Dsp, 0);
+char *spec = config.good_colorname;
+XColor *exact_def_return = &color_ret;
+>>EXTERN
+
+#include <ctype.h>
+
+XColor color_ret;
+
+Status
+checkcolor( red, green, blue, shift, ret_desired)
+unsigned int red, green, blue;
+unsigned int shift;
+XColor *ret_desired;
+{
+ ret_desired->red = (unsigned short) red<<shift;
+ ret_desired->green = (unsigned short) green<<shift;
+ ret_desired->blue = (unsigned short) blue<<shift;
+ return((ret_desired->red == color_ret.red) && (ret_desired->green == color_ret.green) && (ret_desired->blue == color_ret.blue));
+}
+
+rgb_report(desired)
+XColor *desired;
+{
+ report("%s() returned red 0x%x green 0x%x blue 0x%x instead of red 0x%x green 0x%x blue 0x%x.",
+ TestName,
+ (int) color_ret.red, (int) color_ret.green, (int) color_ret.blue,
+ (int) desired->red, (int) desired->green, (int) desired->blue);
+}
+
+>>ASSERTION Good B 1
+When the first character of the
+.A spec
+argument is not "#", then a call to xname returns in the
+.A exact_def_return
+argument
+the rgb values for
+the colour named by the
+.A spec
+argument on the screen associated with the
+.A colormap
+argument
+and returns non-zero.
+>>STRATEGY
+Parse the color XT_GOOD_COLORNAME using xname.
+Verify that the call returns non-zero.
+>>CODE
+Status result;
+
+ result = XCALL;
+ if(result == 0) {
+ report("%s() returned zero.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKUNTESTED(1);
+
+>>ASSERTION Good A
+When the first character of the
+.A spec
+argument is a "#", and the remainder of the string comprises 3 hexadecimal digits,
+then a call to xname sets the
+.A exact_def_return
+argument to have
+.M red
+component equal to the value of the first digit << 12, to have
+.M green
+component equal to the value of the second digit << 12, to have
+.M blue
+component equal to the value of the third digit << 12 and returns non-zero.
+>>STRATEGY
+Parse the string "#18f" using xname.
+Verify that the returned XColor structure had red 0x1 green 0x8 blue 0xf.
+>>CODE
+Status ret;
+XColor dcol;
+
+ spec = "#18f";
+ ret = XCALL;
+ if( ret == 0 ) {
+ report("%s() with spec \"%s\" returned 0.", TestName, spec);
+ FAIL;
+ } else
+ CHECK;
+
+ if( checkcolor(0x1, 0x8, 0xf, 12, &dcol) == 0) {
+ rgb_report(&dcol);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the first character of the
+.A spec
+argument is a "#", and the remainder of the string comprises 6 hexadecimal digits,
+then a call to xname sets the
+.A exact_def_return
+argument to have
+.M red
+component equal to the value of the first two digits << 8, to have
+.M green
+component equal to the value of the second two digits << 8, to have
+.M blue
+component equal to the value of the third two digits << 8 and returns non-zero.
+>>STRATEGY
+Parse the string "#f1f8ff" using xname.
+Verify that the returned XColor structure had red 0xf1 green 0xf8 blue 0xff.
+>>CODE
+Status ret;
+XColor dcol;
+
+ spec = "#f1f8ff";
+ ret = XCALL;
+ if( ret == 0 ) {
+ report("%s() with spec \"%s\" returned 0.", TestName, spec);
+ FAIL;
+ } else
+ CHECK;
+
+ if( checkcolor(0xf1, 0xf8, 0xff, 8, &dcol) == 0) {
+ rgb_report(&dcol);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the first character of the
+.A spec
+argument is a "#", and the remainder of the string comprises 9 hexadecimal digits,
+then a call to xname sets the
+.A exact_def_return
+argument to have
+.M red
+component equal to the value of the first three digits << 4, to have
+.M green
+component equal to the value of the second three digits << 4, to have
+.M blue
+component equal to the value of the third three digits << 4 and returns non-zero.
+>>STRATEGY
+Parse the string "#af1bf8cff" using xname.
+Verify that the returned XColor structure had red 0xaf1 green 0xbf8 blue 0xcff.
+>>CODE
+Status ret;
+XColor dcol;
+
+ spec = "#af1bf8cff";
+ ret = XCALL;
+ if( ret == 0 ) {
+ report("%s() with spec \"%s\" returned 0.", TestName, spec);
+ FAIL;
+ } else
+ CHECK;
+
+ if( checkcolor(0xaf1, 0xbf8, 0xcff, 4, &dcol) == 0) {
+ rgb_report(&dcol);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the first character of the
+.A spec
+argument is a "#", and the remainder of the string comprises 12 hexadecimal digits,
+then a call to xname sets the
+.A exact_def_return
+argument to have
+.M red
+component equal to the value of the first four digits, to have
+.M green
+component equal to the value of the second four digits, to have
+.M blue
+component equal to the value of the third four digits and returns non-zero.
+>>STRATEGY
+Parse the string "#faf01bf81cff" using xname.
+Verify that the returned XColor structure had red 0xfaf0 green 0x1bf8 blue 0x1cff.
+>>CODE
+Status ret;
+XColor dcol;
+
+ spec = "#faf01bf81cff";
+ ret = XCALL;
+ if( ret == 0 ) {
+ report("%s() with spec \"%s\" returned 0.", TestName, spec);
+ FAIL;
+ } else
+ CHECK;
+
+ if( checkcolor(0xfaf0, 0x1bf8, 0x1cff, 0, &dcol) == 0) {
+ rgb_report(&dcol);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+Upper and lower case characters in the
+.A spec
+argument refer to the same colour.
+>>STRATEGY
+Parse the string XT_GOOD_COLORNAME using xname.
+Verify that the call did not return zero.
+Parse the string obtained by inverting each character of XT_GOOD_COLORNAME using xname.
+Verify that the call did not return zero.
+Verify that the returned red, green and blue values are the same.
+Parse the string #feAAc1 using xname.
+Verify that the call did not return zero.
+Parse the string #FEAaC1 using xname.
+Verify that the call did not return zero.
+Verify that the returned red, green and blue values are the same.
+>>CODE
+char *ptr;
+char *str;
+Status result;
+XColor dcol;
+unsigned short red, green, blue;
+
+ result = XCALL;
+ if(result == 0) {
+ report("%s() with spec \"%s\" returned zero.", TestName, config.good_colorname);
+ FAIL;
+ } else
+ CHECK;
+
+ red = color_ret.red;
+ green = color_ret.green;
+ blue = color_ret.blue;
+
+ str = xt_strdup(config.good_colorname);
+
+ if(str == (char *) NULL) {
+ delete("xt_strdup() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ for(ptr = str; *ptr; ptr++)
+ if(isupper(*ptr))
+ *ptr = tolower(*ptr);
+ else
+ *ptr = toupper(*ptr);
+
+ spec = str;
+ result = XCALL;
+ if(result == 0) {
+ report("%s() with spec \"%s\" returned zero.", TestName, str);
+ FAIL;
+ } else
+ CHECK;
+
+ if((red != color_ret.red) || (green != color_ret.green) || (blue != color_ret.blue)) {
+ report("%s() did not map color names %s and %s to the same rgb values.", TestName, config.good_colorname, str);
+ FAIL;
+ } else
+ CHECK;
+
+ spec = "#feAAc1";
+ result = XCALL;
+ if( result == 0 ) {
+ report("%s() with spec \"%s\" returned 0.", TestName, spec);
+ FAIL;
+ } else
+ CHECK;
+
+ if( checkcolor(0xfe, 0xaa, 0xc1, 8, &dcol) == 0) {
+ rgb_report(&dcol);
+ FAIL;
+ } else
+ CHECK;
+
+ spec = "#FEAaC1";
+ result = XCALL;
+ if( result == 0 ) {
+ report("%s() with spec \"%s\" returned 0.", TestName, spec);
+ FAIL;
+ } else
+ CHECK;
+
+ if( checkcolor(0xfe, 0xaa, 0xc1, 8, &dcol) == 0) {
+ rgb_report(&dcol);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(8);
+
+
+>>ASSERTION Good A
+A call to xname sets the
+.M flags
+component of the
+.A exact_def_return
+argument to
+.S "DoRed|DoGreen|DoBlue" .
+>>STRATEGY
+Parse the string "#000" using xname.
+Verify that the flags component of the returned XColor structure was DoRed|DoGreen|DoBlue.
+>>CODE
+Status ret;
+char flags;
+XColor dcol;
+
+ spec = "#000";
+ ret = XCALL;
+ if( ret == 0 ) {
+ report("%s() with spec \"%s\" returned 0.", TestName, spec);
+ FAIL;
+ } else
+ CHECK;
+
+ if(color_ret.flags != (flags = DoRed | DoGreen | DoBlue)) {
+ report("%s() set the flags component of the retured XColor structure to %d instead of DoRed|DoGreen|DoBlue (%d).",
+ TestName, (int) color_ret.flags, (int) flags);
+
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+When the first character of the
+.A spec
+argument is a "#"
+and the remainder of the string does not comprise
+3, 6, 9 or 12 hexadecimal digits,
+then a call to xname returns zero.
+>>STRATEGY
+Parse the string "#f0" using xname.
+Verify that the call returns zero.
+Parse the string "#1010" using xname.
+Verify that the call returns zero.
+Parse the string "##ffeeffeeffe" using xname.
+Verify that the call returns zero.
+Parse the string "##0011223344556" using xname.
+Verify that the call returns zero.
+>>CODE
+Status ret;
+
+ spec = "#f0";
+ ret = XCALL;
+ if( ret != 0 ) {
+ report("%s() with spec \"%s\" did not return zero.", TestName, spec);
+ FAIL;
+ } else
+ CHECK;
+
+ spec = "#1010";
+ ret = XCALL;
+ if( ret != 0 ) {
+ report("%s() with spec \"%s\" did not return zero.", TestName, spec);
+ FAIL;
+ } else
+ CHECK;
+
+ spec = "#ffeeffeeffe"; /* 11 digits */
+ ret = XCALL;
+ if( ret != 0 ) {
+ report("%s() with spec \"%s\" did not return zero.", TestName, spec);
+ FAIL;
+ } else
+ CHECK;
+
+ spec = "#0011223344556"; /* 13 digits */
+ ret = XCALL;
+ if( ret != 0 ) {
+ report("%s() with spec \"%s\" did not return zero.", TestName, spec);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+>>ASSERTION Good A
+When the first character of the
+.A spec
+argument is not a "#"
+and the colour named by the
+.A spec
+argument is not in the colour database,
+then a call to xname returns zero.
+>>STRATEGY
+Parse the string XT_BAD_COLORNAME using xname.
+Verify that the call returns zero.
+>>CODE
+char *ptr;
+char *str;
+Status result;
+XColor dcol;
+unsigned short red, green, blue;
+
+ spec = config.bad_colorname;
+ result = XCALL;
+ if(result != 0) {
+ report("%s() with spec \"%s\" did not return zero.", TestName, config.bad_colorname);
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Bad A
+.ER BadColor
diff --git a/xc/test/xsuite/xtest/tset/CH10/prsgmtry/prsgmtry.m b/xc/test/xsuite/xtest/tset/CH10/prsgmtry/prsgmtry.m
new file mode 100644
index 000000000..057cad9da
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/prsgmtry/prsgmtry.m
@@ -0,0 +1,295 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XParseGeometry CH10
+int
+XParseGeometry(parsestring, x_return, y_return, width_return, height_return)
+char *parsestring;
+int *x_return;
+int *y_return;
+>># Documentation says 'int' for the width and height. Changed to unsigned
+>># here to match the header prototype which is consistant with the
+>># use of unsigned for other width and height parameters.
+unsigned int *width_return;
+unsigned int *height_return;
+>>ASSERTION Good A
+>>#
+>># .Ds
+>># [=][<width>x<height>][{+-}<xoffset>{+-}<yoffset>],
+>># [=][<\fIwidth\fP>x<\fIheight\fP>][{+-}<\fIxoffset\fP>{+-}<\fIyoffset\fP>]
+>># .De
+>>#
+When the
+.A parsestring
+argument is a string of the form
+.Ds
+[=][<\fIwidth\fP>x<\fIheight\fP>][{+-}<\fIxoffset\fP>{+-}<\fIyoffset\fP>]
+.De
+then a call to xname returns a bitwise OR of
+.S "WidthValue | HeightValue" ,
+.S "XValue | YValue" ,
+.S XNegative
+or
+.S YNegative
+depending on whether the height and width are specified, whether the offsets are specified
+and on the sign of the specified offsets respectively.
+>>STRATEGY
+For geometry strings covering each case of interest
+ Parse string with xname.
+ Verify that correct flags are set.
+ For each value
+ If corresponding flag is set
+ Verify that value is set correctly.
+ else
+ Verify that value is unchanged.
+>>CODE
+#define DEFV 123
+static struct list {
+ char *pstr; /* Parse string */
+ int flags; /* returned flags */
+ int x;
+ int y;
+ unsigned int width;
+ unsigned int height;
+} list[] = {
+ {"=10x20", WidthValue|HeightValue, DEFV, DEFV, 10, 20},
+ {"=+10+20", XValue|YValue, 10, 20, DEFV, DEFV},
+ {"=1x2-10-20", WidthValue|HeightValue|XValue|YValue|XNegative|YNegative, -10, -20, 1, 2},
+ {"=1x2-0-0", WidthValue|HeightValue|XValue|YValue|XNegative|YNegative, 0, 0, 1, 2},
+ {"=10x20+2-3", WidthValue|HeightValue|XValue|YValue|YNegative, 2, -3, 10, 20}
+};
+struct list *lp;
+int i;
+int xr;
+int yr;
+unsigned int wr;
+unsigned int hr;
+int result;
+
+ x_return = &xr;
+ y_return = &yr;
+ width_return = &wr;
+ height_return = &hr;
+
+ /*
+ * Essentially we run through the list twice, the first time
+ * without the '=' the second time with.
+ */
+ for(i=0; i < 2*NELEM(list); i++) {
+
+ lp = &list[i%NELEM(list)];
+
+ /* Set all values to some default */
+ xr = yr = wr = hr = DEFV;
+
+ /* Set parse string, and skip the '=' if this is first time through */
+ parsestring = lp->pstr;
+ if (i < NELEM(list))
+ parsestring++;
+ trace("parse string of \"%s\"", parsestring);
+ result = XCALL;
+
+ if(result != lp->flags) {
+ report("%s() returned 0x%x instead of 0x%x for parsestring \"%s\".", TestName, result, lp->flags, parsestring);
+ FAIL;
+ } else
+ CHECK;
+
+ if (xr == lp->x)
+ CHECK;
+ else if (lp->x == DEFV) {
+ report("x_return was unexpectedly altered to %d", xr);
+ FAIL;
+ } else {
+ report("Returned x value was %d, expecting %d", xr, lp->x);
+ FAIL;
+ }
+ if (yr == lp->y)
+ CHECK;
+ else if (lp->y == DEFV) {
+ report("y_return was unexpectedly altered to %d", yr);
+ FAIL;
+ } else {
+ report("Returned y value was %d, expecting %d", yr, lp->y);
+ FAIL;
+ }
+ if (wr == lp->width)
+ CHECK;
+ else if (lp->width == DEFV) {
+ report("width_return was unexpectedly altered to %u", wr);
+ FAIL;
+ } else {
+ report("Returned width value was %u, expecting %u", wr, lp->width);
+ FAIL;
+ }
+ if (hr == lp->height)
+ CHECK;
+ else if (lp->x == DEFV) {
+ report("height_return was unexpectedly altered to %u", hr);
+ FAIL;
+ } else {
+ report("Returned height value was %u, expecting %u", hr, lp->height);
+ FAIL;
+ }
+ }
+
+ CHECKPASS(5*2*NELEM(list));
+
+>># COMMENT
+>># Added the word "just" to this assertion.
+>># Cal.
+>>ASSERTION Good A
+When the
+.A parsestring
+argument contains just xoffset and yoffset specifications,
+then a call to xname returns these values
+in the
+.A x_return
+and
+.A y_return
+arguments respectively and the
+.A width_return
+and
+.A height_return
+arguments are not altered.
+>>STRATEGY
+Parse the string "+32768-32768" using xname.
+Verify that the call returns XValue | YValue | YNegative.
+Verify that the x_return argument is set to 32768.
+Verify that the y_return argument is set to -32768.
+Verify that the width_return argument is unaltered.
+Verify that the height_return argument is unaltered.
+>>CODE
+int xr = -1;
+int yr = -1;
+int wr = -13;
+int hr = -666;
+int rres;
+int result;
+
+ parsestring = "+32768-32768";
+ x_return = &xr;
+ y_return = &yr;
+ width_return = (unsigned *)&wr;
+ height_return = (unsigned *)&hr;
+
+ result = XCALL;
+ if(result != (rres = XValue | YValue | YNegative)) {
+ report("%s() returned %d instead of %d for parsestring \"%s\".", TestName, result, rres, parsestring);
+ FAIL;
+ } else
+ CHECK;
+
+ if(xr != 32768) {
+ report("%s() returned %d in x_return instead of %d.", TestName, xr, 32768);
+ FAIL;
+ } else
+ CHECK;
+
+ if(yr != -32768) {
+ report("%s() returned %d in y_return instead of %d.", TestName, yr, -32768);
+ FAIL;
+ } else
+ CHECK;
+
+ if(wr != -13) {
+ report("%s() changed the width_return argument.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hr != -666) {
+ report("%s() changed the height_return argument.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>># COMMENT
+>># Added the word "just" to this assertion.
+>># Cal.
+>>ASSERTION Good A
+When the
+.A parsestring
+argument contains just width and height specifications,
+then a call to xname returns these values
+in the
+.A width_return
+and
+.A height_return
+arguments respectively and the
+.A x_return
+and
+.A y_return
+arguments are not altered.
+>>STRATEGY
+Parse the string "16385x33768" using xname.
+Verify that the call returns WidthValue | HeightValue.
+Verify that the width_return argument is set to 16385.
+Verify that the height_return argument is set to 33768.
+Verify that the x_return argument is unaltered.
+Verify that the y_return argument is unaltered.
+>>CODE
+int xr = -77;
+int yr = -33;
+unsigned int wr = 16385;
+unsigned int hr = 33768;
+int rres;
+int result;
+
+ parsestring = "16385x33768";
+ x_return = &xr;
+ y_return = &yr;
+ width_return = &wr;
+ height_return = &hr;
+
+ result = XCALL;
+ if(result != (rres = WidthValue | HeightValue)) {
+ report("%s() returned %d instead of %d for parsestring \"%s\".", TestName, result, rres, parsestring);
+ FAIL;
+ } else
+ CHECK;
+
+ if(wr != 16385) {
+ report("%s() returned %u in width_return instead of %d.", TestName, wr, 16385);
+ FAIL;
+ } else
+ CHECK;
+
+ if(hr != 33768) {
+ report("%s() returned %u in height_return instead of %d.", TestName, hr, 33768);
+ FAIL;
+ } else
+ CHECK;
+
+ if(xr != -77) {
+ report("%s() changed the x_return argument.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ if(yr != -33) {
+ report("%s() changed the y_return argument.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>># COMMENT
+>># Maybe need an assertion which verifies that all 4 of the parameters are set correctly.
+>># Cal.
diff --git a/xc/test/xsuite/xtest/tset/CH10/ptpxl/ptpxl.m b/xc/test/xsuite/xtest/tset/CH10/ptpxl/ptpxl.m
new file mode 100644
index 000000000..b122c0fa1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/ptpxl/ptpxl.m
@@ -0,0 +1,140 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XPutPixel CH10
+int
+XPutPixel(ximage, x, y, pixel)
+XImage *ximage;
+int x;
+int y;
+unsigned long pixel;
+>>EXTERN
+int bltimage(im, w, h, dep)
+XImage *im;
+unsigned int w;
+unsigned int h;
+int dep;
+{
+int i;
+unsigned long mask;
+unsigned long rpixel;
+
+ ximage = im;
+ mask = (1<<dep) - 1;
+ for(y=0; y<h; y+=10)
+ for(x=0; x<w; x+=10) {
+ for(i = 0; i <= (15 & mask); i++) {
+ pixel = mask & (i | i<<4 | i<<12 | i<<20);
+ startcall(Dsp);
+ if (isdeleted())
+ return(0);
+ ValueReturn = XPutPixel(ximage, x, y, pixel);
+ if (ValueReturn == 0) {
+ report("%s() returned 0", TestName);
+ return(0);
+ }
+ endcall(Dsp);
+ if (geterr() != Success) {
+ report("Got %s, Expecting Success", errorname(geterr()));
+ return(0);
+ }
+ if((rpixel = XGetPixel(ximage, x, y)) != pixel) {
+ report("XGetPixel() returned %lx instead of %lx.", rpixel, pixel);
+ return(0);
+ }
+ }
+ }
+
+ return(1);
+}
+>>ASSERTION Good A
+When the image
+.A ximage
+contains the coordinate
+.A x,y ,
+and the
+.A pixel
+argument is in normalised format, then a call to xname overwrites
+.A x,y
+with the value
+.A pixel .
+>>STRATEGY
+For all supported drawables:
+ Create a drawable.
+ For XYPixmap and ZPixmap:
+ Obtain an XImage structure using XGetImage.
+ For a range of pixel values over the drawable's depth:
+ Set pixels using xname.
+ Verify that the pixels are correctly set using XGetPixel.
+>>CODE
+XVisualInfo *vi;
+int npix;
+unsigned int width;
+unsigned int height;
+Pixmap pm;
+Window win;
+int i;
+static int fmats[2] = { XYPixmap, ZPixmap };
+
+
+ for(resetvinf(VI_PIX); nextvinf(&vi);) {
+
+ pm = makepixm(Dsp, vi);
+ getsize(Dsp, pm, &width, &height);
+ width = width > 17 ? 17 : width;
+ height = height > 19 ? 19 : height;
+
+ for(i=0; i<2; i++) {
+ ximage = XGetImage(Dsp, pm, 0,0, width, height, AllPlanes, fmats[i]);
+ if( ximage == (XImage *) NULL ) {
+ delete("XGetImage() returned NULL.");
+ } else {
+ if(bltimage(ximage, width, height, vi->depth) == 0)
+ FAIL;
+ else
+ CHECK;
+
+ XDestroyImage(ximage);
+ }
+
+ }
+ }
+ npix = nvinf();
+
+ for(resetvinf(VI_WIN); nextvinf(&vi);) {
+
+ win = makewin(Dsp, vi);
+ getsize(Dsp, win, &width, &height);
+ width = width > 17 ? 17 : width;
+ height = height > 19 ? 19 : height;
+
+ for(i=0; i<2; i++) {
+ ximage = XGetImage(Dsp, win, 0,0, width, height, AllPlanes, fmats[i]);
+ if(ximage == (XImage *) NULL) {
+ delete("XGetImage() returned NULL.");
+ } else {
+ if(bltimage(ximage, width, height, vi->depth) == 0)
+ FAIL;
+ else
+ CHECK;
+
+ XDestroyImage(ximage);
+ }
+ }
+
+ }
+
+ CHECKPASS(2 * (npix + nvinf()));
diff --git a/xc/test/xsuite/xtest/tset/CH10/rbndkysym/rbndkysym.m b/xc/test/xsuite/xtest/tset/CH10/rbndkysym/rbndkysym.m
new file mode 100644
index 000000000..ba3c46ea4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rbndkysym/rbndkysym.m
@@ -0,0 +1,193 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XRebindKeysym CH10
+void
+XRebindKeysym(display, keysym, list, mod_count, string, bytes_string)
+Display *display = Dsp;
+KeySym keysym;
+KeySym *list;
+int mod_count;
+unsigned char *string;
+int bytes_string;
+>>EXTERN
+
+/* Arbitary keysyms for use as modifiers */
+#define MODKS1 0x12
+#define MODKS2 0x45
+
+#define XK_LATIN1
+#include "keysymdef.h"
+#undef XK_LATIN1
+
+#define MAXRES 256 /* Maximum length of bound string */
+
+>>#
+>># The assertion category should be B. The assertion cannot be reliably
+>># tested because of the implementation defined treatment of modifiers.
+>># XSetModifierMapping() is not guaranteed to be able to set
+>># the modifiers required for the test.
+>># DPJ Cater 3/4/92
+>>#
+>>ASSERTION Good B 3
+A call to xname rebinds the meaning of the
+.A keysym
+argument
+for use in XLookupString
+to the
+.A bytes_string
+length
+.A string
+and to use the
+.A mod_count
+modifiers specified by the
+.A list
+argument.
+>>STRATEGY
+Set map between keysyms that will be used and keycodes.
+Open new connection to get refreshed mappings.
+Bind the keysym XK_A to a string using xname.
+Bind the keysym XK_A with modifiers to a second string using xname.
+Obtain the keycode bound to the XK_A keysym using XKeysymToKeycode.
+Obtain the binding for the keycode without modifiers using XLookupString.
+Verify that the keysym is correctly bound to the string astring.
+Obtain the binding for the keycode with modifiers using XLookupString.
+Verify that the keysym is correctly bound to the string modstring.
+>>CODE
+XKeyEvent ev;
+char *astring = "Bound String";
+char *modstring = "String to bind to modified key";
+static char rstring[MAXRES] = "UninitializedBoundString.";
+int bb;
+KeySym ksr;
+KeySym modlist[5];
+KeySym keylist[6];
+XModifierKeymap *origmap;
+XModifierKeymap *modmap;
+KeySym *origkeymap;
+int minkc, maxkc;
+int kpk;
+
+ /*
+ * Save old keyboard map. Map the keysyms that we want to use
+ * to the first available keycodes.
+ */
+ XDisplayKeycodes(display, &minkc, &maxkc);
+ origkeymap = XGetKeyboardMapping(display, minkc, maxkc-minkc+1, &kpk);
+ keylist[0] = MODKS1;
+ keylist[1] = MODKS1;
+ keylist[2] = MODKS2;
+ keylist[3] = MODKS2;
+ keylist[4] = XK_A;
+ keylist[5] = XK_A;
+ XChangeKeyboardMapping(display, minkc, 2, keylist, 3);
+
+ origmap = XGetModifierMapping(display);
+
+ /*
+ * Set up a modifier mapping to use the modifier keysyms that we are
+ * going to use.
+ */
+ modmap = XNewModifiermap(0);
+ modmap = XInsertModifiermapEntry(modmap, minkc, ShiftMapIndex);
+ modmap = XInsertModifiermapEntry(modmap, minkc+1, Mod1MapIndex);
+ if( XSetModifierMapping(display, modmap) != MappingSuccess) {
+ report("XSetModifierMapping did not return MappingSuccess");
+ UNTESTED;
+ /*
+ * Attempt to reset the state of the keyboard.
+ */
+ XSetModifierMapping(display, origmap);
+ XChangeKeyboardMapping(display, minkc, kpk, origkeymap,
+ maxkc-minkc+1);
+ return;
+ } else
+ CHECK;
+
+ /*
+ * Need to refresh the display structure mappings, we just open a new
+ * connection and use that.
+ */
+ display = opendisplay();
+
+ /*
+ * Set up a rebinding for A (unshifted)
+ */
+ keysym = XK_A;
+ list = (KeySym *) NULL;
+ mod_count = 0;
+ string = (unsigned char *)astring;
+ bytes_string = strlen(string)+1;
+ XCALL;
+
+ /*
+ * Set up a rebinding for Shift Mod1 A.
+ */
+ modlist[0] = MODKS1;
+ modlist[1] = MODKS2;
+
+ keysym = XK_A;
+ list = modlist;
+ mod_count = 2;
+ string = (unsigned char *)modstring;
+ bytes_string = strlen(string)+1;
+ XCALL;
+
+ /*
+ * Check the unmodified case.
+ */
+ ev.display = display;
+ ev.keycode = XKeysymToKeycode(display, XK_A);
+ debug(1, "code=%d", ev.keycode);
+ ev.state = 0;
+ XLookupString(&ev, rstring, MAXRES, &ksr, (XComposeStatus *) NULL);
+ trace("String returned >%s<", rstring);
+
+ if (strcmp(astring, rstring) != 0) {
+ report("%s() bound XK_A to \"%s\" instead of \"%s\".", TestName, rstring, astring);
+ FAIL;
+ } else
+ CHECK;
+
+
+ /*
+ * Now check the modified case.
+ */
+ ev.display = display;
+ ev.state = ShiftMask|Mod1Mask;
+ XLookupString(&ev, rstring, MAXRES, &ksr, (XComposeStatus *) NULL);
+ trace("String returned >%s<", rstring);
+
+ if (strcmp(modstring, rstring) != 0) {
+ report("%s() bound XK_A to \"%s\" instead of \"%s\".", TestName, rstring, modstring);
+ FAIL;
+ } else
+ CHECK;
+
+ /*
+ * Attempt to reset the state of the keyboard.
+ */
+ XSetModifierMapping(display, origmap);
+ XChangeKeyboardMapping(display, minkc, kpk, origkeymap, maxkc-minkc+1);
+
+ CHECKPASS(3);
+>>ASSERTION Good B 1
+When
+.A keysym
+does not exist, then
+a call to xname rebinds the meaning of the
+.A keysym
+argument.
diff --git a/xc/test/xsuite/xtest/tset/CH10/rctinrgn/rctinrgn.m b/xc/test/xsuite/xtest/tset/CH10/rctinrgn/rctinrgn.m
new file mode 100644
index 000000000..afcb82d6a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rctinrgn/rctinrgn.m
@@ -0,0 +1,137 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XRectInRegion CH10
+int
+XRectInRegion(r, x, y, width, height)
+Region r;
+int x;
+int y;
+unsigned int width;
+unsigned int height;
+>>EXTERN
+static XRectangle medrect = { 10,10, 15,5 };
+>>ASSERTION Good A
+When the rectangle specified by the
+.A x ,
+.A y ,
+.A width ,
+and
+.A height
+arguments is entirely in the region
+.A r ,
+then a call to xname returns
+.S RectangleIn .
+>>STRATEGY
+Create a region using XCreateRegion.
+Set the region to a rectangle using XUnionRectWithRegion.
+Verify that with a contained rectangle xname returns RectangleIn.
+>>CODE
+Region R;
+int res;
+
+ R = makeregion();
+ if(isdeleted()) return;
+
+ XUnionRectWithRegion(&medrect, R, R);
+ r = R;
+ x=10;
+ y=10;
+ width=15;
+ height=5;
+
+ res = XCALL;
+
+ if(res != RectangleIn) {
+ report("%s() returned %d instead of RectangleIn (%d).", TestName, res, RectangleIn);
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good A
+When the rectangle specified by the
+.A x ,
+.A y ,
+.A width ,
+and
+.A height
+arguments is entirely out of the region
+.A r ,
+then a call to xname returns
+.S RectangleOut .
+>>STRATEGY
+Create a region using XCreateRegion.
+Set the region to a rectangle using XUnionRectWithRegion.
+Verify that with a non-intersecting rectangle xname returns RectangleOut.
+>>CODE
+Region R;
+int res;
+
+ R = makeregion();
+ if(isdeleted()) return;
+
+ XUnionRectWithRegion(&medrect, R, R);
+ r = R;
+ x=35;
+ y=15;
+ width=5;
+ height=2;
+
+ res = XCALL;
+
+ if(res != RectangleOut) {
+ report("%s() returned %d instead of RectangleOut (%d).", TestName, res, RectangleOut);
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good A
+When the rectangle specified by the
+.A x ,
+.A y ,
+.A width ,
+and
+.A height
+arguments is partly in the region
+.A r ,
+then a call to xname returns
+.S RectanglePart .
+>>STRATEGY
+Create a region using XCreateRegion.
+Set the region to a rectangle using XUnionRectWithRegion.
+Verify that with an intersecting rectangle xname returns RectanglePart.
+>>CODE
+Region R;
+int res;
+
+ R = makeregion();
+ if(isdeleted()) return;
+
+ XUnionRectWithRegion(&medrect, R, R);
+ r = R;
+ x=20;
+ y=5;
+ width=4;
+ height=10;
+
+ res = XCALL;
+
+ if(res != RectanglePart) {
+ report("%s() returned %d instead of RectanglePart (%d).", TestName, res, RectanglePart);
+ FAIL;
+ } else
+ PASS;
+
diff --git a/xc/test/xsuite/xtest/tset/CH10/rdbtmpfl/rdbtmpfl.m b/xc/test/xsuite/xtest/tset/CH10/rdbtmpfl/rdbtmpfl.m
new file mode 100644
index 000000000..0a9f0e37e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rdbtmpfl/rdbtmpfl.m
@@ -0,0 +1,480 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XReadBitmapFile CH10
+int
+
+Display *display = Dsp;
+Drawable d = (Drawable)defwin(display);
+char *filename = xrbf_name;
+unsigned int *width_return = &width;
+unsigned int *height_return = &height;
+Pixmap *bitmap_return = &bitmap;
+int *x_hot_return = &x_hot;
+int *y_hot_return = &y_hot;
+>>EXTERN
+#include <stdio.h>
+
+/* Function return variables. */
+static unsigned int width;
+static unsigned int height;
+static Pixmap bitmap;
+static int x_hot;
+static int y_hot;
+
+/* Temporary bitmap filename. */
+static char *xrbf_name = "xrbf_temp";
+static char *xrbf_bad_name = "xrbf_nofile";
+
+/* Valid bitmap file without hotspot definition. */
+static char *xrbf_one[] = {
+ "#define test_width 16",
+ "#define test_height 8",
+ "static char test_bits[] = {",
+ "0x80, 0x00, 0x3f, 0xfe, 0x04, 0x07, 0x88, 0x41,",
+ "0xfc, 0x09, 0x00, 0x80, 0x40, 0x20, 0x08, 0x04};",
+} ;
+static int xrbf_n_one = NELEM(xrbf_one);
+
+/* Valid bitmap file with hotspot definition. */
+static char *xrbf_two[] = {
+ "#define test_width 16",
+ "#define test_height 8",
+ "#define test_x_hot 5",
+ "#define test_y_hot 6",
+ "static char test_bits[] = {",
+ "0x80, 0x00, 0x3f, 0xfe, 0x04, 0x07, 0x88, 0x41,",
+ "0xfc, 0x09, 0x00, 0x80, 0x40, 0x20, 0x08, 0x04};",
+} ;
+static int xrbf_n_two = NELEM(xrbf_two);
+
+/* Invalid bitmap file. */
+static char *xrbf_three[] = {
+ "#define not bit map data",
+ "static char data_bits[]={",
+ "};",
+};
+static int xrbf_n_three = NELEM(xrbf_three);
+
+static char *xrbf_verify_array[8]={
+ "0000000100000000",
+ "1111110001111111",
+ "0010000011100000",
+ "0001000110000010",
+ "0011111110010000",
+ "0000000000000001",
+ "0000001000000100",
+ "0001000000100000",
+};
+
+
+static int
+xrbf_create(file, data, elements)
+char *file;
+char **data;
+int elements;
+{
+ FILE *fp;
+ int a;
+
+ fp = fopen(file, "w");
+ if (fp == (FILE *)NULL) {
+ delete("Could not create temporary bitmap file '%s'", file);
+ return -1;
+ }
+
+ a = 0;
+ while( a<elements ) {
+ (void) fprintf(fp, "%s\n", data[a++]);
+ }
+
+ fclose(fp);
+ return 0;
+}
+
+static void
+xrbf_b_start() {
+ tpstartup();
+ (void) xrbf_create(xrbf_name, xrbf_one, xrbf_n_one);
+}
+
+
+static void
+xrbf_b_end() {
+ (void) unlink(xrbf_name);
+ tpcleanup();
+}
+
+static int
+xrbf_check(pm, array, w, h)
+Pixmap pm;
+char **array;
+int w;
+int h;
+{
+ int lh, lw, bad;
+ unsigned long exp;
+
+ bad = 0;
+ for(lh=0; lh<h; lh++) {
+ for(lw=0; lw<w; lw++) {
+ int pix;
+ exp = (array[lh][lw]=='0'?W_BG:W_FG);
+ pix = checkpixel(display, pm, lw, lh, exp);
+ if ( !pix ) {
+ trace("Bad Pixel at %d,%d", lw, lh);
+ bad++;
+ }
+ }
+ }
+
+ return bad;
+}
+
+>>ASSERTION Good A
+When the file
+.A filename
+is readable and in the X11 bitmap format, then a call to xname returns
+.S BitmapSuccess .
+>>SET return-value BitmapSuccess
+>>STRATEGY
+Create a valid, readable, bitmap file.
+Call xname to read the bitmap file.
+Verify that BitmapSuccess was returned.
+>>CODE
+int ret;
+
+/* Create a valid, readable, bitmap file. */
+ if (xrbf_create(filename, xrbf_two, xrbf_n_two)) {
+ return;
+ } else
+ CHECK;
+
+/* Call xname to read the bitmap file. */
+ XCALL;
+
+ (void) unlink(filename);
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When the file
+.A filename
+is readable and in the X11 bitmap format, then a call to xname
+returns the bitmap's height and width as read
+from the file in
+.A width_return
+and
+.A height_return ,
+and a pixmap containing the bitmap with the bitmap's height and width, on
+the same screen as the
+.A drawable ,
+in
+.A bitmap_return .
+>>STRATEGY
+Create a valid, readable, bitmap file.
+Call xname to read the bitmap file.
+Verify that the width was returned as expected.
+Verify that the height was returned as expected.
+Call XGetGeometry to obtain the bitmap width, height and depth.
+Verify that the bitmap was of the correct height, width and depth.
+Verify that the bitmap contents were correct.
+Verify that the bitmap was created on the correct screen.
+>>CODE
+Window w_tmp, rw_ret, rw2_ret;
+int i_tmp;
+unsigned int h_ret, w_ret, d_ret, ui_tmp;
+
+/* Create a valid, readable, bitmap file. */
+ if (xrbf_create(filename, xrbf_one, xrbf_n_one)) {
+ return;
+ } else
+ CHECK;
+
+/* Call xname to read the bitmap file. */
+ width = 0;
+ height = 0;
+ bitmap = (Pixmap)NULL;
+
+ XCALL;
+
+/* Verify that the width was returned as expected. */
+ if (width != 16) {
+ FAIL;
+ report("%s did not return the expected width",
+ TestName);
+ report("Expected width: 16");
+ report("Returned width: %d", width);
+ } else
+ CHECK;
+
+/* Verify that the height was returned as expected. */
+ if (height != 8) {
+ FAIL;
+ report("%s did not return the expected height",
+ TestName);
+ report("Expected height: 8");
+ report("Returned height: %d", height);
+ } else
+ CHECK;
+
+/* Call XGetGeometry to obtain the bitmap width, height and depth. */
+ (void)XGetGeometry(display, bitmap, &rw_ret, &i_tmp, &i_tmp,
+ &w_ret, &h_ret, &ui_tmp, &d_ret);
+
+/* Verify that the bitmap was of the correct height, width and depth. */
+ if (w_ret != 16 || h_ret != 8 || d_ret != 1) {
+ FAIL;
+ report("%s created a pixmap of unexpected dimensions.",
+ TestName);
+ report("Expected width :16; Returned width :%u", w_ret);
+ report("Expected height: 8; Returned height:%u", h_ret);
+ report("Expected depth : 1; Returned depth :%u", d_ret);
+ } else
+ CHECK;
+
+/* Verify that the bitmap contents were correct. */
+ if (xrbf_check(bitmap, xrbf_verify_array, 16, 8)) {
+ FAIL;
+ report("%s did not generate the expected pixmap.",
+ TestName);
+ } else
+ CHECK;
+
+/* Verify that the bitmap was created on the correct screen. */
+ (void)XGetGeometry(display, d, &rw2_ret, &i_tmp, &i_tmp,
+ &ui_tmp, &ui_tmp, &ui_tmp, &ui_tmp);
+ if(rw2_ret != rw_ret) {
+ FAIL;
+ report("%s did not generate the pixmap on the expected screen.",
+ TestName);
+ report("Root window for drawable and bitmap differ.");
+ } else
+ CHECK;
+
+ (void) unlink(filename);
+
+ CHECKPASS(6);
+
+>>ASSERTION Good A
+When the file
+.A filename
+is readable, and in the X11 bitmap format, and contains
+.M name_x_hot
+and
+.M name_y_hot ,
+then a call to xname returns the value of
+.M name_x_hot
+to
+.A x_hot_return ,
+and the value of
+.M name_y_hot
+to
+.A y_hot_return .
+>>STRATEGY
+Create a valid, readable, bitmap file containing a hotspot.
+Call xname to read the bitmap file.
+Verify that the x_hot_return was returned as expected.
+Verify that the y_hot_return was returned as expected.
+>>CODE
+Window w_tmp;
+int i_tmp;
+unsigned int h_ret, w_ret, d_ret, ui_tmp;
+
+/* Create a valid, readable, bitmap file containing a hotspot. */
+ if (xrbf_create(filename, xrbf_two, xrbf_n_two)) {
+ return;
+ } else
+ CHECK;
+
+/* Call xname to read the bitmap file. */
+ x_hot = 0;
+ y_hot = 0;
+ XCALL;
+
+/* Verify that the x_hot_return was returned as expected. */
+ if (x_hot != 5) {
+ FAIL;
+ report("%s did not return the expected x_hot_return",
+ TestName);
+ report("Expected x_hot_return: 5");
+ report("Returned x_hot_return: %d", x_hot);
+ } else
+ CHECK;
+
+/* Verify that the y_hot_return was returned as expected. */
+ if (y_hot != 6) {
+ FAIL;
+ report("%s did not return the expected y_hot_return",
+ TestName);
+ report("Expected y_hot_return: 6");
+ report("Returned y_hot_return: %d", y_hot);
+ } else
+ CHECK;
+
+ (void) unlink(filename);
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When the file
+.A filename
+is readable, and in the X11 bitmap format, and does not contain
+.M name_x_hot
+and
+.M name_y_hot ,
+then a call to xname returns -1 to
+.A x_hot_return
+and
+.A y_hot_return .
+>>STRATEGY
+Create a valid, readable, bitmap file containing no hotspot.
+Call xname to read the bitmap file.
+Verify that the x_hot_return was returned as expected.
+Verify that the y_hot_return was returned as expected.
+>>CODE
+Window w_tmp;
+int i_tmp;
+unsigned int h_ret, w_ret, d_ret, ui_tmp;
+
+/* Create a valid, readable, bitmap file containing no hotspot. */
+ if (xrbf_create(filename, xrbf_one, xrbf_n_one)) {
+ return;
+ } else
+ CHECK;
+
+/* Call xname to read the bitmap file. */
+ x_hot = 0;
+ y_hot = 0;
+ XCALL;
+
+/* Verify that the x_hot_return was returned as expected. */
+ if (x_hot != -1) {
+ FAIL;
+ report("%s did not return the expected x_hot_return",
+ TestName);
+ report("Expected x_hot_return: -1");
+ report("Returned x_hot_return: %d", x_hot);
+ } else
+ CHECK;
+
+/* Verify that the y_hot_return was returned as expected. */
+ if (y_hot != -1) {
+ FAIL;
+ report("%s did not return the expected y_hot_return",
+ TestName);
+ report("Expected y_hot_return: -1");
+ report("Returned y_hot_return: %d", y_hot);
+ } else
+ CHECK;
+
+ (void) unlink(filename);
+
+ CHECKPASS(3);
+>>ASSERTION Bad A
+When the file
+.A filename
+cannot be opened, then a call to xname returns
+.S BitmapOpenFailed .
+>>STRATEGY
+Call xname with a non-existant bitmap filename.
+Verify that BitmapOpenFailed was returned.
+>>CODE
+int ret;
+
+/* Call xname with a non-existant bitmap filename. */
+ filename = xrbf_bad_name;
+ ret = XCALL;
+
+/* Verify that BitmapOpenFailed was returned. */
+ if (ret != BitmapOpenFailed) {
+ FAIL;
+ report("%s did not return correct value with a nonexistant",
+ TestName);
+ report("bitmap file.");
+ report("Expected: %d (BitmapOpenFailed)");
+ report("Returned: %d", ret);
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+When the file
+.A filename
+is readable and does not contain valid bitmap data, then a call to
+xname returns
+.S BitmapFileInvalid .
+>>STRATEGY
+Create an invalid, bitmap file.
+Call xname to read the bitmap file.
+Verify that BitmapFileInvalid was returned.
+>>CODE
+int ret;
+
+/* Create an invalid, bitmap file. */
+ if (xrbf_create(filename, xrbf_three, xrbf_n_three)) {
+ return;
+ } else
+ CHECK;
+
+/* Call xname to read the bitmap file. */
+ ret = XCALL;
+
+/* Verify that BitmapFileInvalid was returned. */
+ if (ret != BitmapFileInvalid) {
+ FAIL;
+ report("%s did not return correct value with an invalid",
+ TestName);
+ report("bitmap file.");
+ report("Expected: %d (BitmapFileInvalid)");
+ report("Returned: %d", ret);
+ } else
+ CHECK;
+
+ (void) unlink(filename);
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad B 1
+When insufficient memory is allocated, then a call to xname returns
+.S BitmapNoMemory .
+>>ASSERTION Bad A
+.ER BadAlloc
+>>SET tpstartup xrbf_b_start
+>>SET tpcleanup xrbf_b_end
+>>ASSERTION Bad A
+When a drawable argument does not name a valid drawable, then one or more
+.S BadDrawable
+errors, one or more
+.S BadGC
+errors or both types of error occur.
+>>STRATEGY
+Create a bad drawable by creating and destroying a window.
+Call test function using bad drawable as the drawable argument.
+Verify that a BadDrawable and BadGC error occurs.
+>>CODE BadDrawable
+
+ seterrdef();
+
+ A_DRAWABLE = (Drawable)badwin(A_DISPLAY);
+
+>>SET no-error-status-check
+ XCALL;
+
+ if (geterr() == BadDrawable || geterr() == BadGC)
+ PASS;
+ else
+ FAIL;
diff --git a/xc/test/xsuite/xtest/tset/CH10/rfrshkybrd/rfrshkybrd.m b/xc/test/xsuite/xtest/tset/CH10/rfrshkybrd/rfrshkybrd.m
new file mode 100644
index 000000000..ab29b6f7a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rfrshkybrd/rfrshkybrd.m
@@ -0,0 +1,269 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XRefreshKeyboardMapping CH10
+
+XRefreshKeyboadMapping(event_map)
+XMappingEvent *event_map;
+>>EXTERN
+#define XK_LATIN1
+#include "keysymdef.h"
+#undef XK_LATIN1
+
+static void
+cpymap(dest, src)
+ XModifierKeymap *dest;
+ XModifierKeymap *src;
+{
+ int i;
+ int n;
+
+ for(i=0,n=src->max_keypermod*8; i<n; i++)
+ dest->modifiermap[i] = src->modifiermap[i];
+ dest->max_keypermod = src->max_keypermod;
+}
+>>ASSERTION Good A
+When the
+.M request
+component of the
+.A event_map
+argument is
+.S MappingKeyboard ,
+then a call to xname modifies the keymap information based on that specified
+by the
+.A event_map
+argument.
+>>STRATEGY
+Map the keycode which maps to KeySym XK_a onto XK_b using XChangeKeyboardMapping.
+Verify that a MappingNotify event is generated.
+Update the keymap information with xname.
+Obtain the KeySym corresponding to the keycode.
+Verify that KeySym is XK_b.
+Reset the keycode to map onto XK_a using XChangeKeyboardMapping.
+>>CODE
+XEvent ev;
+KeyCode kc;
+KeySym ks, res, old, new;
+XKeyEvent ke;
+
+ old = XK_a;
+ new = XK_b;
+
+ if((kc = XKeysymToKeycode(Dsp, old)) == 0) {
+ delete("XKeysymToKeycode() returned 0 for KeySym %lu.", (long) old);
+ return;
+ } else
+ CHECK;
+
+ XChangeKeyboardMapping(Dsp, kc, 1, &new, 1);
+ XSync(Dsp, False);
+
+ if( getevent(Dsp, &ev) == 0) {
+ delete("Did not get an event after an XChangeKeyboardMapping()");
+ XChangeKeyboardMapping(Dsp, kc, 1, &old, 1);
+ return;
+ } else
+ CHECK;
+
+ if(ev.type != MappingNotify) {
+ delete("Got a %s event instead of a %s.", eventname(ev.type), eventname(MappingNotify));
+ XChangeKeyboardMapping(Dsp, kc, 1, &old, 1);
+ return;
+ } else
+ CHECK;
+
+ if(ev.xmapping.request != MappingKeyboard) {
+ delete("The request field was %d instead of %d (MappingKeyboard)",
+ ev.xmapping.request, MappingKeyboard);
+ XChangeKeyboardMapping(Dsp, kc, 1, &old, 1);
+ return;
+ } else
+ CHECK;
+
+ event_map = &ev.xmapping;
+ XCALL;
+
+ if((res = XKeycodeToKeysym(Dsp, kc, 0)) == NoSymbol) {
+ delete("XKeycodeToKeysym() returned NoSymbol for KeyCode %lu.", (long) kc);
+ XChangeKeyboardMapping(Dsp, kc, 1, &old, 1);
+ return;
+ } else
+ CHECK;
+
+ if( res != new) {
+ report("%s() mapped KeyCode %lu to KeySym %lu instead of %lu.", TestName, (long) kc, (long) res, (long) new);
+ FAIL;
+ } else
+ CHECK;
+
+ XChangeKeyboardMapping(Dsp, kc, 1, &old, 1);
+ CHECKPASS(6);
+
+>>ASSERTION Good B 1
+When the
+.M request
+component of the
+.A event_map
+argument is
+.S MappingModifier ,
+then a call to xname modifies the keymap information based on that specified
+by the
+.A event_map
+argument.
+>>STRATEGY
+Obtain a new modifier map using XNewModifiermap.
+Initialise it to have the current, valid, values.
+Set the modifier map to the new map using XSetModifierMapping.
+Await the mapping event.
+Update the modifier mappings using xname.
+Release the map storage using XFreeModifiermap.
+>>CODE
+int i;
+XEvent ev;
+KeyCode *kcptr;
+KeyCode *tkcptr;
+XModifierKeymap *savemap = XGetModifierMapping(Dsp);
+XModifierKeymap *mmap;
+
+ if(savemap == (XModifierKeymap *) NULL) {
+ delete("XGetModifierMapping() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ mmap = XNewModifiermap(savemap->max_keypermod);
+
+ if(mmap == (XModifierKeymap *) NULL) {
+ delete("XNewModifiermap() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ cpymap(mmap, savemap);
+
+ if(XSetModifierMapping(Dsp, mmap) != MappingSuccess) {
+ delete("XSetModifierMapping() did not return MappingSuccess.");
+ return;
+ } else
+ CHECK;
+
+ XSync(Dsp, False);
+
+ if( getevent(Dsp, &ev) == 0) {
+ delete("Did not get an event after an XSetModifierMapping()");
+ XSetModifierMapping(Dsp, savemap);
+ return;
+ } else
+ CHECK;
+
+ if(ev.type != MappingNotify) {
+ delete("Got a %s event instead of a %s.", eventname(ev.type), eventname(MappingNotify));
+ XSetModifierMapping(Dsp, savemap);
+ return;
+ } else
+ CHECK;
+
+ if(ev.xmapping.request != MappingModifier) {
+ delete("The request field was %d instead of %d (MappingModifier)",
+ ev.xmapping.request, MappingModifier);
+ XSetModifierMapping(Dsp, savemap);
+ return;
+ } else
+ CHECK;
+
+ event_map = &ev.xmapping;
+ XCALL;
+
+ XSetModifierMapping(Dsp, savemap);
+
+ XFreeModifiermap(mmap);
+ XFreeModifiermap(savemap);
+ CHECKUNTESTED(6);
+
+>>ASSERTION Good B 1
+When the
+.M request
+component of the
+.A event_map
+argument is other than
+.S MappingKeyboard
+or
+.S MappingModifier ,
+then a call to xname does not modify the keymap information.
+>>STRATEGY
+Obtain a new modifier map using XNewModifiermap.
+Initialise it to have the current, valid, values.
+Set the modifier map to the new map using XSetModifierMapping.
+Await the mapping event.
+Set the request component of the event structure to MappingModifier + MappingKeyboard + MappingPointer
+Update the modifier mappings using xname.
+>>CODE
+int i;
+int set;
+XEvent ev;
+XModifierKeymap *savemap = XGetModifierMapping(Dsp);
+XModifierKeymap *mmap1;
+KeyCode minkc;
+KeyCode maxkc;
+KeyCode *kcp;
+
+ if(savemap == (XModifierKeymap *) NULL) {
+ delete("XGetModifierMapping() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ mmap1 = XNewModifiermap(savemap->max_keypermod);
+
+ if(mmap1 == (XModifierKeymap *) NULL) {
+ delete("XNewModifiermap() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ cpymap(mmap1, savemap);
+
+ if(XSetModifierMapping(Dsp, mmap1) != MappingSuccess) {
+ delete("XSetModifierMapping() did not return MappingSuccess.");
+ return;
+ } else
+ CHECK;
+
+ XSync(Dsp, False);
+
+ if( getevent(Dsp, &ev) == 0) {
+ delete("Did not get an event after an XSetModifierMapping()");
+ XSetModifierMapping(Dsp, savemap);
+ return;
+ } else
+ CHECK;
+
+ if(ev.type != MappingNotify) {
+ delete("Got a %s event instead of a %s.", eventname(ev.type), eventname(MappingNotify));
+ XSetModifierMapping(Dsp, savemap);
+ return;
+ } else
+ CHECK;
+
+ ev.xmapping.request = MappingModifier + MappingKeyboard + 1;
+ event_map = &ev.xmapping;
+ XCALL;
+
+ XSetModifierMapping(Dsp, savemap);
+
+ XFreeModifiermap(mmap1);
+ XFreeModifiermap(savemap);
+ CHECKUNTESTED(5);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmdstrydtb/rmdstrydtb.m b/xc/test/xsuite/xtest/tset/CH10/rmdstrydtb/rmdstrydtb.m
new file mode 100644
index 000000000..1ed9922df
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmdstrydtb/rmdstrydtb.m
@@ -0,0 +1,67 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmDestroyDatabase CH10
+void
+
+XrmDatabase database;
+>>SET startup rmstartup
+>>INCLUDE ../rmptrsrc/fn.mc
+>>ASSERTION Good B 1
+A call to xname destroys the specified
+.A database .
+>>STRATEGY
+Create a database.
+Call xname to destroy the database.
+>>CODE
+
+/* Create a database. */
+ database=xrm_create_database("test:one");
+ if(database == (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to destroy the database. */
+ XCALL;
+
+ CHECKUNTESTED(1);
+
+>>ASSERTION Good B 1
+When
+.A database
+is
+.S NULL ,
+then a call to xname returns immediately.
+>>STRATEGY
+Call xname with a NULL database.
+Verify that xname returns.
+(It is not possible to test that return is immediate).
+>>CODE
+
+/* Call xname with a NULL database. */
+ database = (XrmDatabase)NULL;
+ XCALL;
+
+/* Verify that xname returns. */
+/* (It is not possible to test that return is immediate). */
+ CHECK;
+ CHECKUNTESTED(1);
+
+>>ASSERTION Good B 1
+A call to xname frees the memory associated with the
+.A database .
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmgtfldtbs/rmgtfldtbs.m b/xc/test/xsuite/xtest/tset/CH10/rmgtfldtbs/rmgtfldtbs.m
new file mode 100644
index 000000000..d4e7a1d99
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmgtfldtbs/rmgtfldtbs.m
@@ -0,0 +1,157 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmGetFileDatabase CH10
+XrmDatabase
+
+char *filename;
+>>SET startup rmstartup
+>>INCLUDE ../rmptrsrc/fn.mc
+>>EXTERN
+#include <stdio.h>
+#define XGFD_NON_EXIST "xgfd_nonfile"
+#define XGFD_TEST_FILE "xgfd_tmpfile"
+
+#define XGFD_T1_COUNT 23
+
+static char *t1_lines[XGFD_T1_COUNT][5] = {
+/* Capital 'T' is transformed to TAB in the prefix and conjunct. */
+/* prefix, resource, conjunt, value, specifier */
+{"", "a.a", ":", "one", "a.a" }, /* Normal Line */
+
+{" ", "a.b", ":", "two", "a.b" }, /* pre-resource space */
+{"T", "a.c", ":", "three","a.c" }, /* pre-resource tab*/
+{" T ", "a.d", ":", "four", "a.d" }, /* pre-resource ws */
+
+{"", "a.e", " :", "five", "a.e" }, /* post-resource space */
+{"", "a.f", "T:", "six", "a.f" }, /* post-resource tab */
+{"", "a.g", " T :", "seven","a.g" }, /* post-resource ws */
+
+{"", "a.h", ": ", "eight","a.h" }, /* pre-value space */
+{"", "a.i", ":T", "nine", "a.i" }, /* pre-value tab */
+{"", "a.j", ": T ", "ten", "a.j" }, /* pre-value ws */
+
+{" ", "a.k", " : ","eleven","a.k" }, /* multiple space */
+{"TT", "a.l", "TT:TTTT","twelve","a.l"}, /* multiple tab */
+{"T T","a.m", " T:T ","thirteen","a.m"}, /* multiple ws */
+
+{"", ".a.n", ":", "fourteen","a.n"}, /* pre-resource binding . */
+{"", "*a.o", ":", "fifteen", "b.a.o"}, /* pre-resource binding * */
+
+{"", "a*p", ":", "sixteen", "a.z.p"}, /* inclusive binding * */
+{"", ".a*q", ":", "seventeen","a.z.q"}, /* inclusive binding * */
+
+{"", "*a*r", ":", "eighteen","b.a.c.r"}, /* inclusive binding * */
+
+{"", "b", ":", "nineteen","b" }, /* lone component */
+{"", ".c", ":", "twenty", "c" }, /* lone component */
+{"", "*z", ":", "twenty one","b.z" }, /* lone component */
+
+{"", "d", ":", "Aa9! @#$%^&*()_+~", "d"}, /* complex value */
+
+{"T ", "a-z.r_9A-*a-8B","T: ","A* bZ_% !?", "a-z.r_9A-.z.a-8B"} };/* complex entry */
+
+>>ASSERTION Good A
+A call to xname opens the specified
+.A filename ,
+creates a new resource database, loads the database with the
+resource specifications from the file in ResourceLine
+format, and returns the database.
+>>STRATEGY
+Create a test database file.
+Write test lines to test database file.
+Call xname to read the database.
+Verify the database was non-NULL, and contained the test information.
+Remove test database file.
+>>CODE
+FILE *f;
+int a,b;
+char tbuf[256], *tptr;
+XrmDatabase rdb;
+
+/* Create a test database file. */
+ f = fopen(XGFD_TEST_FILE, "w");
+ if (f==(FILE *)NULL) {
+ delete("fopen() call to write database failed");
+ return;
+ } else
+ CHECK;
+
+/* Write test lines to test database file. */
+ for(a=0; a<XGFD_T1_COUNT; a++) {
+ tptr=tbuf;
+ for(b=0; b<4; b++) {
+ tptr += xrm_tabulate(t1_lines[a][b], tptr);
+ CHECK;
+ }
+ *tptr = '\0';
+ (void) fprintf(f, "%s\n", tbuf);
+ }
+ fclose(f);
+
+/* Call xname to read the database. */
+ filename = XGFD_TEST_FILE;
+ rdb = XCALL;
+
+/* Verify the database was non-NULL, and contained the test information. */
+ if (rdb == (XrmDatabase)NULL) {
+ FAIL;
+ report("%s returned a NULL database when expecting a database.",
+ TestName);
+ } else {
+ for(a=0; a<XGFD_T1_COUNT; a++) {
+ tptr=tbuf;
+ tbuf[ xrm_tabulate(t1_lines[a][3], tptr) ] = '\0';
+ if(xrm_check_entry(rdb, t1_lines[a][4], t1_lines[a][4],
+ "String", tbuf)) {
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(1 + XGFD_T1_COUNT*4 + XGFD_T1_COUNT);
+
+/* Remove test database file. */
+#ifndef TESTING
+ (void) unlink(XGFD_TEST_FILE); /* Compiling with CFLOCAL=-DTESTING */
+ /* allows inspection of the testfile */
+#endif
+
+>>ASSERTION Good A
+When
+.A filename
+refers to a file that cannot be opened, then a call to xname returns
+.S NULL .
+>>STRATEGY
+Call xname with a non-existant file.
+Verify that NULL was returned.
+>>CODE
+XrmDatabase ret;
+
+/* Call xname with a non-existant file. */
+ filename = XGFD_NON_EXIST;
+ ret = XCALL;
+
+/* Verify that NULL was returned. */
+ if( ret != (XrmDatabase)NULL) {
+ FAIL;
+ report("%s returned non-NULL with a non-existant filename.",
+ TestName);
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmgtrsrc/common.mc b/xc/test/xsuite/xtest/tset/CH10/rmgtrsrc/common.mc
new file mode 100644
index 000000000..c1606c9c8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmgtrsrc/common.mc
@@ -0,0 +1,58 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+>># Common definitions
+>># Used by:
+>># XrmGetResource
+>># XrmQGetResource.
+>>EXTERN
+
+#define XGR_T1_DATA 13
+static char *t1_data[XGR_T1_DATA][3] = {
+/* Specifier, type, value */
+ { "a.b.c", "String", "one" },
+ { "a.z", "String", "two" },
+ { "a*z", "String", "three" },
+ { "b.d.z", "String", "four" },
+ { "b.d.Z", "String", "five" },
+ { "c*z", "String", "six" },
+ { "c.a.z", "String", "seven" },
+ { "c.A.z", "String", "eight" },
+ { ".d.z", "String", "nine" },
+ { "*d.z", "String", "ten" },
+ { "e.d.z", "String", "eleven" },
+ { "*f*z", "String", "twelve" },
+ { "*g*z", "String", "thriteen" } };
+
+#define XGR_T1_TEST 8
+static char *t1_test[XGR_T1_TEST][5] = {
+/* Full Name, Full Class, Expected Type, Expected Value, Failure message */
+ { "a.b.c", "I.J.K", "String", "one", "Simple match failed" },
+ { "a.z", "I.K", "String", "two", "period not more specific than asterisk" },
+ { "b.d.z", "B.D.Z", "String", "four", "name was not more specific than class" },
+ { "c.a.z", "I.J.K", "String", "seven", "specifying a name was not more specific than ommiting one" },
+ { "c.z.z", "C.A.Z", "String", "eight", "specifying a class was not more specific than ommiting one" },
+ { "e.d.z", "I.J.K", "String", "eleven", "left components were not more specific than right components" },
+ { "f.g.z", "I.J.K", "String", "twelve", "left components were not more specific than right components" },
+ { "d.z", "I.J", "String", "nine", "absent prefix not identical to a period"} };
+
+#define XGR_T2_TEST 3
+static char *t2_test[XGR_T2_TEST][3] = {
+ { "a.b", "A.B", "Name and class didn't match an entry" },
+ { "A.B", "a,b", "Name and class didn't match an entry" },
+ { "q", "Q", "Non-existant database entry matched." } };
+
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmgtrsrc/rmgtrsrc.m b/xc/test/xsuite/xtest/tset/CH10/rmgtrsrc/rmgtrsrc.m
new file mode 100644
index 000000000..a92b9718b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmgtrsrc/rmgtrsrc.m
@@ -0,0 +1,201 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmGetResource CH10
+Bool
+
+XrmDatabase database = (XrmDatabase)NULL;
+char *str_name;
+char *str_class;
+char **str_type_return = &str_type;
+XrmValue *value_return = &value;
+>>SET startup rmstartup
+>>INCLUDE ../rmptrsrc/fn.mc
+>>INCLUDE common.mc
+>>EXTERN
+char *str_type;
+XrmValue value;
+
+>>ASSERTION Good A
+When
+.A str_name
+is a fully qualified resource name and
+.A str_class
+is a fully qualified resource class
+and the
+.A database
+contains one or more corresponding resources,
+then a call to xname places
+the representation type as a string in
+.A str_type_return
+and the value in
+.A value_return
+of the closest matching resource as defined by the matching rules,
+and returns
+.S True .
+>>STRATEGY
+Create a database containing test information.
+Interrogate database using xname.
+Verify that the returned type and value were as expected.
+>>CODE
+int a;
+XrmValue b;
+Bool ret;
+
+/* Create a database containing test information. */
+ database = xrm_create_database("");
+ if (database == (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+ for(a=0; a<XGR_T1_DATA; a++) {
+ xrm_fill_value(&b, t1_data[a][2]);
+ XrmPutResource(&database, t1_data[a][0], t1_data[a][1], &b );
+ CHECK;
+ }
+
+#ifdef TESTING
+ XrmPutFileDatabase(database, "xgr_one");
+#endif
+
+/* Interrogate database using xname. */
+/* Verify that the returned type and value were as expected. */
+ for(a=0; a<XGR_T1_TEST; a++) {
+ str_name = t1_test[a][0];
+ str_class = t1_test[a][1];
+ trace("Testing: %s (class %s)", str_name, str_class);
+ str_type = (char *)NULL;
+ value.addr = (caddr_t)NULL;
+ ret = XCALL;
+ if (ret==False) {
+ FAIL;
+ report("%s failed to match a database entry.",
+ TestName);
+ report("name :%s", t1_test[a][0]);
+ report("class:%s", t1_test[a][1]);
+ report("Possible diagnosis: %s", t1_test[a][4]);
+ } else {
+ CHECK;
+
+ if (str_type == NULL || strcmp(t1_test[a][2], str_type)) {
+ FAIL;
+ report("%s failed to return expected type.",
+ TestName);
+ report("Expected type: '%s'", t1_test[a][2]);
+ report("Returned type: '%s'",
+ (str_type==NULL?"<NULL POINTER>":str_type));
+ } else
+ CHECK;
+
+
+ if (value.addr == NULL
+ || strncmp(t1_test[a][3], (char *)value.addr, strlen(t1_test[a][3]))){
+ char tb[100];
+ unsigned int l;
+ if (value.addr == NULL) {
+ strcpy(tb, "<NULL POINTER>");
+ l = strlen(tb);
+ } else {
+ (void) strncpy(tb, (char*)value.addr, value.size);
+ tb[value.size]='\0';
+ l = value.size;
+ }
+ FAIL;
+ report("%s failed to return expected value.",
+ TestName);
+ report("Expected value: '%s'", t1_test[a][3]);
+ report("Returned value: '%.*s'", l, tb);
+ report("Possible diagnosis: %s", t1_test[a][4]);
+ } else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(1 + XGR_T1_DATA + 3*XGR_T1_TEST);
+>>ASSERTION Good A
+When
+.A str_name
+is a fully qualified resource name and
+.A str_class
+is a fully qualified resource class
+and the
+.A database
+does not contain a corresponding resource as defined by the matching rules,
+then a call to xname returns
+.A False .
+>>STRATEGY
+Create a database containing test information.
+Interrogate database using xname.
+Verify that the test examples were not found.
+>>CODE
+int a;
+XrmValue b;
+Bool ret;
+
+/* Create a database containing test information. */
+ database = xrm_create_database("");
+ if (database == (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+ for(a=0; a<XGR_T1_DATA; a++) {
+ xrm_fill_value(&b, t1_data[a][2]);
+ XrmPutResource(&database, t1_data[a][0], t1_data[a][1], &b );
+ CHECK;
+ }
+
+#ifdef TESTING
+ XrmPutFileDatabase(database, "xgr_two");
+#endif
+
+/* Interrogate database using xname. */
+/* Verify that the test examples were not found. */
+ for(a=0; a<XGR_T2_TEST; a++) {
+ str_name = t2_test[a][0];
+ str_class = t2_test[a][1];
+ trace("Testing: %s (class %s)", str_name, str_class);
+ str_type = (char *)NULL;
+ value.addr = (caddr_t)NULL;
+ ret = XCALL;
+ if (ret==False) {
+ CHECK;
+ } else {
+ char tb[100];
+ unsigned int l;
+
+ FAIL;
+ report("%s returned a database match when a failure was expected.",
+ TestName);
+ report("Returned type: '%s'",
+ (str_type==NULL?"<NULL POINTER>":str_type));
+ if (value.addr == NULL) {
+ strcpy(tb, "<NULL POINTER>");
+ l = strlen(tb);
+ } else {
+ (void) strncpy(tb, (char*)value.addr, value.size);
+ tb[value.size]='\0';
+ l = value.size;
+ }
+ report("Returned value: '%.*s'", l, tb);
+ report("Possible diagnosis: %s", t2_test[a][3]);
+ }
+ }
+
+ CHECKPASS(1 + XGR_T1_DATA + XGR_T2_TEST);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmgtstrdtb/rmgtstrdtb.m b/xc/test/xsuite/xtest/tset/CH10/rmgtstrdtb/rmgtstrdtb.m
new file mode 100644
index 000000000..27f3574d7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmgtstrdtb/rmgtstrdtb.m
@@ -0,0 +1,139 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmGetStringDatabase CH10
+XrmDatabase
+
+char *data;
+>>SET startup rmstartup
+>>INCLUDE ../rmptrsrc/fn.mc
+>>EXTERN
+
+#define XGSD_T1_COUNT 23
+
+static char *t1_lines[XGSD_T1_COUNT][5] = {
+/* Capital 'T' is transformed to TAB in the prefix and conjunct. */
+/* prefix, resource, conjunt, value, specifier, newvalue */
+{"", "a.a", ":", "one", "a.a" }, /* Normal Line */
+
+{" ", "a.b", ":", "two", "a.b" }, /* pre-resource space */
+{"T", "a.c", ":", "three","a.c" }, /* pre-resource tab*/
+{" T ", "a.d", ":", "four", "a.d" }, /* pre-resource ws */
+
+{"", "a.e", " :", "five", "a.e" }, /* post-resource space */
+{"", "a.f", "T:", "six", "a.f" }, /* post-resource tab */
+{"", "a.g", " T :", "seven","a.g" }, /* post-resource ws */
+
+{"", "a.h", ": ", "eight","a.h" }, /* pre-value space */
+{"", "a.i", ":T", "nine", "a.i" }, /* pre-value tab */
+{"", "a.j", ": T ", "ten", "a.j" }, /* pre-value ws */
+
+{" ", "a.k", " : ","eleven","a.k" }, /* multiple space */
+{"TT", "a.l", "TT:TTTT","twelve","a.l"}, /* multiple tab */
+{"T T","a.m", " T:T ","thirteen","a.m"}, /* multiple ws */
+
+{"", ".a.n", ":", "fourteen","a.n"}, /* pre-resource binding . */
+{"", "*a.o", ":", "fifteen", "b.a.o"}, /* pre-resource binding * */
+
+{"", "a*p", ":", "sixteen", "a.z.p"}, /* inclusive binding * */
+{"", ".a*q", ":", "seventeen","a.z.q"}, /* inclusive binding * */
+
+{"", "*a*r", ":", "eighteen","b.a.c.r"}, /* inclusive binding * */
+
+{"", "b", ":", "nineteen","b" }, /* lone component */
+{"", ".c", ":", "twenty", "c" }, /* lone component */
+{"", "*z", ":", "twenty one","b.z" }, /* lone component */
+
+{"", "d", ":", "Aa9! @#$%^&*()_+~", "d"}, /* complex value */
+
+{"T ", "a-z.r_9A-*a-8B","T: ","A* bZ_% !?", "a-z.r_9A-.z.a-8B"} };/* complex entry */
+
+>>ASSERTION Good A
+When
+.A data
+is a sequence of
+newline separated lines in
+ResourceLine format,
+then a call to xname
+creates a new database,
+stores a resource name and value pair from each line of
+.A data
+in the database,
+and returns the database.
+>>STRATEGY
+Create test string.
+Call xname to get database from string.
+Verify the database was non-NULL, and contained the test information.
+Free test database memory.
+>>CODE
+char *ts, *tp;
+int a,b,l;
+XrmDatabase rdb;
+
+/* Create test string. */
+ l=0;
+ for(a=0; a<XGSD_T1_COUNT; a++) {
+ for(b=0; b<4 ; b++) {
+ l+=strlen(t1_lines[a][b]); /* Allow for string */
+ }
+ l++; /* Allow for newlines */
+ }
+ l++; /* Allow for terminating null. */
+
+ ts = (char *) malloc( (size_t)l );
+ if (ts==(char *)NULL) {
+ delete("malloc(%d) for the database string failed.", l);
+ return;
+ } else
+ CHECK;
+
+ trace("Test database string is %d bytes", l);
+
+ tp = ts;
+ for(a=0; a<XGSD_T1_COUNT; a++) {
+ for(b=0; b<4; b++) {
+ tp += xrm_tabulate(t1_lines[a][b], tp);
+ CHECK;
+ }
+ *tp++ = '\n' ;
+ }
+ *tp='\0';
+
+/* Call xname to get database from string. */
+ data = ts;
+ rdb = XCALL;
+
+/* Verify the database was non-NULL, and contained the test information. */
+ if (rdb == (XrmDatabase)NULL) {
+ FAIL;
+ report("%s returned a NULL database when expecting a database.",
+ TestName);
+ } else {
+ for(a=0; a<XGSD_T1_COUNT; a++) {
+ tp=ts;
+ tp[ xrm_tabulate(t1_lines[a][3], tp) ] = '\0';
+ if(xrm_check_entry(rdb, t1_lines[a][4], t1_lines[a][4],
+ "String", ts)) {
+ FAIL;
+ } else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(1 + 4*XGSD_T1_COUNT + XGSD_T1_COUNT);
+
+/* Free test database memory. */
+ free( (void *)ts );
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmintlz/rmintlz.m b/xc/test/xsuite/xtest/tset/CH10/rmintlz/rmintlz.m
new file mode 100644
index 000000000..19dabbf8d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmintlz/rmintlz.m
@@ -0,0 +1,21 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmInitialize CH10
+void
+
+>>ASSERTION Good B 2
+A call to xname initializes the resource manager.
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmmrgdtbss/rmmrgdtbss.m b/xc/test/xsuite/xtest/tset/CH10/rmmrgdtbss/rmmrgdtbss.m
new file mode 100644
index 000000000..9bf289303
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmmrgdtbss/rmmrgdtbss.m
@@ -0,0 +1,237 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmMergeDatabases CH10
+void
+
+XrmDatabase source_db;
+XrmDatabase *target_db = &target;
+>>SET startup rmstartup
+>>INCLUDE ../rmptrsrc/fn.mc
+>>EXTERN
+static XrmDatabase target;
+
+#define XMD_SPEC 0
+#define XMD_TYPE 1
+#define XMD_VALUE 2
+#define XMD_FSPEC 3
+#define XMD_FCLASS 4
+#define XMD_XTYPE 5
+#define XMD_XVALUE 6
+
+/* Test database data */
+#define XMD_SIZE 3
+static char *d1_data[XMD_SIZE][5] = {
+ /* spec, type, value, fullspec, fullclass */
+ { "one.data", "String", "one", "one.data", "One.Data" },
+ { "one.Misc", "Nylon", "two", "one.misc", "One.Misc" },
+ { "one*type", "Cotton", "three", "one.type", "One.Type" } };
+
+static char *d2_data[XMD_SIZE][5] = {
+ /* spec, type, value, fullspec, fullclass */
+ { "two.data", "Thread", "four", "two.data", "Two.Data" },
+ { "Two.star", "Lycra", "five", "two.star", "Two.Star" },
+ { "two*Halt", "Silk", "six", "two.halt", "Two.Halt" } };
+
+static char *d3_data[XMD_SIZE][7] = {
+ /* spec, type, value, fullspec, fullclass, exptype, expvalue */
+/* These should replace test data in the target */
+ { "one.data", "Thread", "seven", "one.data", "One.Data", "Thread", "seven" },
+ { "one.Misc", "Lycra", "eight", "one.misc", "One.Misc", "Lycra", "eight" },
+/* These is new data from the source. */
+ { "two.odd", "Silk", "nine", "two.odd", "Two.Odd", "Silk", "nine" } };
+
+/* This defines from which point in d1_data entries the data is expected to
+ remain in the target after the merge in test 3. */
+#define XMD_UNREPLACED 2
+
+>>ASSERTION Good A
+A call to xname
+merges the contents of
+.A source_db
+into
+.A target_db .
+>>STRATEGY
+Create two test databases.
+Add test data to the test databases.
+Call xname to merge the databases.
+Verify that the target database contains all the test data.
+>>CODE
+int a;
+XrmValue val;
+
+/* Create two test databases. */
+ source_db = xrm_create_database("");
+ if(source_db == (XrmDatabase)NULL) {
+ delete("Could not create source database.");
+ return;
+ } else
+ CHECK;
+
+ target = xrm_create_database("");
+ if(target == (XrmDatabase)NULL) {
+ delete("Could not create target database.");
+ return;
+ } else
+ CHECK;
+
+/* Add test data to the test databases. */
+ for(a=0; a<XMD_SIZE; a++) {
+ CHECK;
+ xrm_fill_value( &val, d1_data[a][XMD_VALUE] );
+ XrmPutResource(&source_db,
+ d1_data[a][XMD_SPEC],
+ d1_data[a][XMD_TYPE],
+ &val);
+
+ xrm_fill_value( &val, d2_data[a][XMD_VALUE] );
+ XrmPutResource(target_db,
+ d2_data[a][XMD_SPEC],
+ d2_data[a][XMD_TYPE],
+ &val);
+ }
+
+/* Call xname to merge the databases. */
+ XCALL;
+
+/* Verify that the target database contains all the test data. */
+ for(a=0; a<XMD_SIZE; a++) {
+
+ if (xrm_check_entry(target,
+ d1_data[a][XMD_FSPEC],
+ d1_data[a][XMD_FCLASS],
+ d1_data[a][XMD_TYPE],
+ d1_data[a][XMD_VALUE])) {
+ FAIL;
+ report("%s did not merge in the source database correctly",
+ TestName);
+ } else
+ CHECK;
+
+ if (xrm_check_entry(target,
+ d2_data[a][XMD_FSPEC],
+ d2_data[a][XMD_FCLASS],
+ d2_data[a][XMD_TYPE],
+ d2_data[a][XMD_VALUE])) {
+ FAIL;
+ report("%s did not preserve the target database correctly",
+ TestName);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2 + XMD_SIZE + XMD_SIZE*2);
+
+ XrmDestroyDatabase(target);
+
+>>ASSERTION Good B 1
+On a call to xname, the source database
+.A source_db
+is destroyed.
+>>#
+>># There is no portable way to verify that a resource database has been
+>># destroyed.
+>>#
+>>ASSERTION Good A
+When a resource is a member of both
+.A target_db
+and
+.A source_db ,
+then the value and type of the resource in
+.A target_db
+is overwritten with the corresponding value and type from the resource in
+.A source_db .
+>>STRATEGY
+Create two test databases.
+Add test data to the test databases.
+Call xname to merge the databases.
+Verify that the overlapping source database entries replaced the
+ corresponding target database entries, and that unique source
+ database entries were merged correctly.
+Verify that unique target database entries remained following the merge.
+>>CODE
+int a;
+XrmValue val;
+
+/* Create two test databases. */
+ source_db = xrm_create_database("");
+ if(source_db == (XrmDatabase)NULL) {
+ delete("Could not create source database.");
+ return;
+ } else
+ CHECK;
+
+ target = xrm_create_database("");
+ if(target == (XrmDatabase)NULL) {
+ delete("Could not create target database.");
+ return;
+ } else
+ CHECK;
+
+/* Add test data to the test databases. */
+ for(a=0; a<XMD_SIZE; a++) {
+ CHECK;
+
+ xrm_fill_value( &val, d3_data[a][XMD_VALUE] );
+ XrmPutResource(&source_db,
+ d3_data[a][XMD_SPEC],
+ d3_data[a][XMD_TYPE],
+ &val);
+
+ xrm_fill_value( &val, d1_data[a][XMD_VALUE] );
+ XrmPutResource(target_db,
+ d1_data[a][XMD_SPEC],
+ d1_data[a][XMD_TYPE],
+ &val);
+ }
+
+/* Call xname to merge the databases. */
+ XCALL;
+
+/* Verify that the overlapping source database entries replaced the */
+/* corresponding target database entries, and that unique source */
+/* database entries were merged correctly. */
+ for(a=0; a<XMD_SIZE; a++) {
+ if (xrm_check_entry(target,
+ d3_data[a][XMD_FSPEC],
+ d3_data[a][XMD_FCLASS],
+ d3_data[a][XMD_XTYPE],
+ d3_data[a][XMD_XVALUE])) {
+ FAIL;
+ report("%s did not merge the databases correctly",
+ TestName);
+ } else
+ CHECK;
+ }
+
+/* Verify that unique target database entries remained following the merge. */
+ for(a=XMD_UNREPLACED; a<XMD_SIZE; a++) {
+ if (xrm_check_entry(target,
+ d1_data[a][XMD_FSPEC],
+ d1_data[a][XMD_FCLASS],
+ d1_data[a][XMD_TYPE],
+ d1_data[a][XMD_VALUE])) {
+ FAIL;
+ report("%s did not preserve the target database correctly",
+ TestName);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2 + XMD_SIZE + XMD_SIZE*2 - XMD_UNREPLACED) ;
+
+ XrmDestroyDatabase(target);
+
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmprscmmnd/rmprscmmnd.m b/xc/test/xsuite/xtest/tset/CH10/rmprscmmnd/rmprscmmnd.m
new file mode 100644
index 000000000..f627ec154
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmprscmmnd/rmprscmmnd.m
@@ -0,0 +1,582 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmParseCommand CH10
+void
+
+XrmDatabase *database = &xpc_db;
+XrmOptionDescList table = xpc_table;
+int table_count = XPC_TESTS;
+char *name = "xtest";
+int *argc_in_out = &xpc_argc;
+char **argv_in_out = xpc_argv;
+>>SET startup rmstartup
+>>INCLUDE ../rmptrsrc/fn.mc
+>>EXTERN
+#define XPC_TESTS 12
+#define XPC_MAXDBE 2
+#define XPC_MAXAVE 6
+
+/* XPC_DB_MODE means that failed database matches cause a failure, */
+/* instead of deletion. */
+#define XPC_DB_MODE 1
+
+/* XPC_ARGC_MODE means that incorrect argc values returned cause a failure, */
+/* instead of deletion. */
+#define XPC_ARGC_MODE 2
+
+/* XPC_NOREPORT_MODE suppresses the CHECKPASS call at the end of xpc_dotest. */
+#define XPC_NOREPORT_MODE 4
+
+static XrmDatabase xpc_db;
+static int xpc_argc;
+static char *xpc_argv[XPC_MAXAVE];
+
+/* Initial database contents */
+static char *xpcdb_init[XPC_TESTS][XPC_MAXDBE][2] = {
+ { {NULL,NULL}, {NULL,NULL} },
+ { {NULL,NULL}, {NULL,NULL} },
+ { {NULL,NULL}, {NULL,NULL} },
+ { {NULL,NULL}, {NULL,NULL} },
+ { {"xtest.t5","i5"}, {NULL,NULL} },
+ { {"xtest.t6","i6"}, {"xtest.t1","i1"} },
+ { {"xtest.t7","i7"}, {"xtest.t1","i1"} },
+ { {"xtest.t1","i1"}, {"xtest.t2","i2"} },
+ { {"xtest.test","i9"}, {NULL,NULL} },
+ { {NULL,NULL}, {NULL,NULL} },
+ { {"xtest.tA","iA"}, {"xtest.tB","iB"} },
+ { {"xtest.tC","iC"}, {NULL,NULL} } };
+
+/* Expected final database contents. */
+static char *xpcdb_final[XPC_TESTS][XPC_MAXDBE][2] = {
+ { {"xtest.t1","v1"}, {NULL,NULL} },
+ { {"xtest.t2","bb"}, {NULL,NULL} },
+ { {"xtest.t3","a3"}, {NULL,NULL} },
+ { {"xtest.t4","a4"}, {NULL,NULL}},
+ { {"xtest.t5","i5"}, {"t","a5"} },
+ { {"xtest.t6","i6"}, {"xtest.t1","i1"} },
+ { {"xtest.t7","i7"}, {"xtest.t1","i1"} },
+ { {"xtest.t1","i1"}, {"xtest.t2","bb"} },
+ { {"xtesttest","v9"}, {"xtest.test","i9"} },
+ { {"xtest.tA","vA"}, {NULL,NULL} },
+ { {"xtest.tA","iA"}, {"xtest.tB","iB"} },
+ { {"xtest.tC","iC"}, {NULL,NULL} } };
+
+/* Initial argc value. */
+static int xpcac_init[XPC_TESTS] = {
+ 2, 2, 2, 3, 3, 3, 4, 5, 2, 2, 2, 2 };
+
+/* Expected return argc value. */
+static int xpcac_final[XPC_TESTS] = {
+ 1, 1, 1, 1, 1, 3, 4, 4, 1, 1, 2, 2 };
+
+/* Initial argv vector contents */
+static char *xpcav_init[XPC_TESTS][XPC_MAXAVE] = {
+ { "PROGNAME", "aa", NULL, NULL, NULL, NULL },
+ { "PROGNAME", "bb", NULL, NULL, NULL, NULL },
+ { "PROGNAME", "cca3", NULL, NULL, NULL, NULL },
+ { "PROGNAME", "dd", "a4", NULL, NULL, NULL },
+ { "PROGNAME", "ee", "t:a5", NULL, NULL, NULL },
+ { "PROGNAME", "ff", "aa", NULL, NULL, NULL },
+ { "PROGNAME", "gg", "left", "aa", NULL, NULL },
+ { "PROGNAME", "hh", "left", "aa", "bb", NULL },
+ { "PROGNAME", "ii", NULL, NULL, NULL, NULL },
+ { "PROGNAME", "jj", NULL, NULL, NULL, NULL },
+ { "PROGNAME", "j", NULL, NULL, NULL, NULL },
+ { "PROGNAME", "LL", NULL, NULL, NULL, NULL } };
+
+/* Expected argv vector contents */
+static char *xpcav_final[XPC_TESTS][XPC_MAXAVE] = {
+ { "PROGNAME", NULL, NULL, NULL, NULL, NULL },
+ { "PROGNAME", NULL, NULL, NULL, NULL, NULL },
+ { "PROGNAME", NULL, NULL, NULL, NULL, NULL },
+ { "PROGNAME", NULL, NULL, NULL, NULL, NULL },
+ { "PROGNAME", NULL, NULL, NULL, NULL, NULL },
+ { "PROGNAME", "ff", "aa", NULL, NULL, NULL },
+ { "PROGNAME", "gg", "left", "aa", NULL, NULL },
+ { "PROGNAME", "hh", "left", "aa", NULL, NULL },
+ { "PROGNAME", NULL, NULL, NULL, NULL, NULL },
+ { "PROGNAME", NULL, NULL, NULL, NULL, NULL },
+ { "PROGNAME", "j", NULL, NULL, NULL, NULL },
+ { "PROGNAME", "LL", NULL, NULL, NULL, NULL } };
+
+/* Test XrmOptionDescRec table. */
+static XrmOptionDescRec xpc_table[XPC_TESTS] = {
+ { "aa", ".t1", XrmoptionNoArg, (caddr_t)"v1" },
+ { "bb", ".t2", XrmoptionIsArg, (caddr_t)"v2" },
+ { "cc", ".t3", XrmoptionStickyArg, (caddr_t)"v3" },
+ { "dd", ".t4", XrmoptionSepArg, (caddr_t)"v4" },
+ { "ee", ".t5", XrmoptionResArg, (caddr_t)"v5" },
+ { "ff", ".t6", XrmoptionSkipArg, (caddr_t)"v6" },
+ { "gg", NULL, XrmoptionSkipLine, (caddr_t)NULL },
+ { "hh", NULL, XrmoptionSkipNArgs, (caddr_t)2 },
+/* Adds prefix without binding test. */
+ { "ii", "test", XrmoptionNoArg, (caddr_t)"v9" },
+/* Unambiguous match tests. */
+ { "jjj", ".tA", XrmoptionNoArg, (caddr_t)"vA" },
+ { "jk", ".tB", XrmoptionNoArg, (caddr_t)"vB" },
+/* Case sensitivity test */
+ { "ll", ".tC", XrmoptionNoArg, (caddr_t)"vC" } };
+
+static int
+xpc_dotest(n, mode)
+int n;
+int mode;
+{
+ int a;
+ int pass=0;
+ int fail=0;
+/* Create new database to perform tests on. */
+ xpc_db = xrm_create_database("");
+ if (xpc_db == (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return(0);
+ } else
+ CHECK;
+
+/* Load database with initial values, if any. */
+ for(a=0; a<XPC_MAXDBE; a++) {
+ CHECK;
+ if (xpcdb_init[n][a][0] != NULL) {
+ XrmPutStringResource(database,
+ xpcdb_init[n][a][0],
+ xpcdb_init[n][a][1]);
+ }
+ }
+
+/* Initialise test argc and argv */
+ xpc_argc = xpcac_init[n];
+ for(a=0; a<XPC_MAXAVE; a++) {
+ CHECK;
+ xpc_argv[a]=xpcav_init[n][a];
+ }
+
+/* Call xname to parse the argc,argv pair. */
+ XCALL;
+
+/* Verify that argc was updated as expected. */
+ if (xpc_argc != xpcac_final[n]) {
+ if(mode & XPC_ARGC_MODE) {
+ FAIL;
+ report("%s did not set argc_in_out as expected.", TestName);
+ report("Expected argc_in_out: %d", xpcac_final[n]);
+ report("Returned argc_in_out: %d", xpc_argc);
+ } else {
+ CHECK;
+ trace("%s did not set argc_in_out as expected.", TestName);
+ trace("Expected argc_in_out: %d", xpcac_final[n]);
+ trace("Returned argc_in_out: %d", xpc_argc);
+ }
+ } else
+ CHECK;
+
+/* Verify that argv was updated as expected. */
+ for(a=0; a<xpcac_final[n]; a++) {
+ if(xpc_argv[a] == NULL ||
+ strcmp(xpc_argv[a], xpcav_final[n][a])) {
+ if(mode & XPC_DB_MODE) {
+ FAIL;
+ report("Expected argv_in_out[%d]: %s", a,
+ xpcav_final[n][a]);
+ report("Returned argv_in_out[%d]: %s", a,
+ xpc_argv[a]);
+ } else {
+ CHECK;
+ trace("Expected argv_in_out[%d]: %s", a,
+ xpcav_final[n][a]);
+ trace("Returned argv_in_out[%d]: %s", a,
+ xpc_argv[a]);
+ }
+ } else
+ CHECK;
+ }
+
+/* Verify that the database was updated as expected. */
+ for(a=0; a<XPC_MAXDBE; a++) {
+ if(xpcdb_final[n][a][0]!=NULL) {
+ if(xrm_check_entry(xpc_db,
+ xpcdb_final[n][a][0], xpcdb_final[n][a][0],
+ "String", xpcdb_final[n][a][1])) {
+ if(mode & XPC_DB_MODE) {
+ FAIL;
+ report("%s did not update the database",
+ TestName);
+ report("as expected.");
+ } else {
+ CHECK;
+ trace("%s did not update the database",
+ TestName);
+ trace("as expected.");
+ }
+ } else
+ CHECK;
+ } else
+ CHECK;
+ }
+
+#ifdef TESTING
+ { /* If the database contents are required for investigation, */
+ /* Compile with pmake CFLOCAL=-DTESTING to dump the database */
+ char tf[20];
+ sprintf(tf, "xpc_%d.%d", n, mode);
+ XrmPutFileDatabase(xpc_db, tf);
+ trace("Database dumped to '%s'", tf);
+ }
+#endif
+ XrmDestroyDatabase(xpc_db);
+
+ if (!(mode & XPC_NOREPORT_MODE)) {
+ CHECKPASS(1+XPC_MAXDBE+XPC_MAXAVE+1+xpcac_final[n]+XPC_MAXDBE);
+ return(0);
+ } else {
+ return(pass==(1+XPC_MAXDBE+XPC_MAXAVE+1+xpcac_final[n]+XPC_MAXDBE)?1:0);
+ }
+}
+
+>>ASSERTION Good A
+When an argument in
+.A argv_in_out
+matches an
+.M option
+within
+.A table
+whose
+.M argKind
+is
+.S XrmoptionNoArg ,
+then a call to xname
+stores the resource
+.M specifier
+with value
+.M value
+and representation type
+.M String
+in the database
+.A database
+and removes the argument from
+.A argv_in_out .
+>>STRATEGY
+Create new database to perform tests on.
+Load database with initial values, if any.
+Initialise test argc and argv
+Call xname to parse the argc,argv pair.
+Verify that argv was updated as expected.
+Verify that the database was updated as expected.
+>>CODE
+
+ (void)xpc_dotest(0, XPC_DB_MODE);
+
+>>ASSERTION Good A
+When an argument in
+.A argv_in_out
+matches an
+.M option
+within
+.A table
+whose
+.M argKind
+is
+.S XrmoptionIsArg ,
+then a call to xname
+stores the resource
+.M specifier
+with the value
+set to the argument
+and representation type
+.M String
+in the database
+.A database
+and removes the argument from
+.A argv_in_out .
+>>STRATEGY
+Create new database to perform tests on.
+Load database with initial values, if any.
+Initialise test argc and argv
+Call xname to parse the argc,argv pair.
+Verify that argv was updated as expected.
+Verify that the database was updated as expected.
+>>CODE
+
+ (void)xpc_dotest(1, XPC_DB_MODE);
+
+>>ASSERTION Good A
+When an argument in
+.A argv_in_out
+matches an
+.M option
+within
+.A table
+whose
+.M argKind
+is
+.S XrmoptionStickyArg ,
+then a call to xname stores the resource
+.M specifier
+with the value set to
+the characters immediately following the argument
+and representation type
+.M String
+in the database
+.A database
+and removes the argument from
+.A argv_in_out .
+>>STRATEGY
+Create new database to perform tests on.
+Load database with initial values, if any.
+Initialise test argc and argv
+Call xname to parse the argc,argv pair.
+Verify that argv was updated as expected.
+Verify that the database was updated as expected.
+>>CODE
+
+ (void)xpc_dotest(2, XPC_DB_MODE);
+
+>>ASSERTION Good A
+When an argument in
+.A argv_in_out
+matches an
+.M option
+within
+.A table
+whose
+.M argKind
+is
+.S XrmoptionSepArg ,
+then a call to xname stores the resource
+.M specifier
+with the value set to
+the next argument
+and representation type
+.M String
+in the database
+.A database
+and removes both arguments from
+.A argv_in_out .
+>>STRATEGY
+Create new database to perform tests on.
+Load database with initial values, if any.
+Initialise test argc and argv
+Call xname to parse the argc,argv pair.
+Verify that argv was updated as expected.
+Verify that the database was updated as expected.
+>>CODE
+
+ (void)xpc_dotest(3, XPC_DB_MODE);
+
+>>ASSERTION Good A
+When an argument in
+.A argv_in_out
+matches an
+.M option
+within
+.A table
+whose
+.M argKind
+is
+.S XrmoptionResArg ,
+then a call to xname stores the resource
+and value specified by
+the next argument
+and representation type
+.M String
+in the database
+.A database
+and removes both arguments from
+.A argv_in_out .
+>>STRATEGY
+Create new database to perform tests on.
+Load database with initial values, if any.
+Initialise test argc and argv
+Call xname to parse the argc,argv pair.
+Verify that argv was updated as expected.
+Verify that the database was updated as expected.
+>>CODE
+
+ (void)xpc_dotest(4, XPC_DB_MODE);
+
+>>ASSERTION Good A
+When an argument in
+.A argv_in_out
+matches an
+.M option
+within
+.A table
+whose
+.M argKind
+is
+.S XrmoptionSkipArg ,
+then a call to xname ignores the argument and the following argument.
+>>STRATEGY
+Create new database to perform tests on.
+Load database with initial values, if any.
+Initialise test argc and argv
+Call xname to parse the argc,argv pair.
+Verify that argv was updated as expected.
+Verify that the database was updated as expected.
+>>CODE
+
+ (void)xpc_dotest(5, XPC_DB_MODE);
+
+>>ASSERTION Good A
+When an argument in
+.A argv_in_out
+matches an
+.M option
+within
+.A table
+whose
+.M argKind
+is
+.S XrmoptionSkipLine ,
+then a call to xname ignores the argument and the rest of
+.A argv_in_out .
+>>STRATEGY
+Create new database to perform tests on.
+Load database with initial values, if any.
+Initialise test argc and argv
+Call xname to parse the argc,argv pair.
+Verify that argv was updated as expected.
+Verify that the database was updated as expected.
+>>CODE
+
+ (void)xpc_dotest(6, XPC_DB_MODE);
+
+>>ASSERTION Good A
+When an argument in
+.A argv_in_out
+matches an
+.M option
+within
+.A table
+whose
+.M argKind
+is
+.S XrmoptionSkipNArgs ,
+then a call to xname ignores the argument and the following
+.M value
+arguments of
+.A argv_in_out .
+>>STRATEGY
+Create new database to perform tests on.
+Load database with initial values, if any.
+Initialise test argc and argv
+Call xname to parse the argc,argv pair.
+Verify that argv was updated as expected.
+Verify that the database was updated as expected.
+>>CODE
+
+ (void)xpc_dotest(7, XPC_DB_MODE);
+
+>>ASSERTION Good A
+On a call to xname, the
+.A argc_in_out
+argument is set to the remaining number of arguments that were not
+parsed.
+>>STRATEGY
+Create new database to perform tests on.
+Load database with initial values, if any.
+Initialise test argc and argv
+Call xname to parse the argc,argv pair.
+Verify that argc was updated as expected.
+>>CODE
+int a;
+
+ for(a=0; a<8; a++) {
+ trace("testing parse table line %d",a);
+ if(xpc_dotest(a, XPC_ARGC_MODE|XPC_NOREPORT_MODE)) {
+ CHECK;
+ } else
+ FAIL;
+ }
+
+ CHECKPASS(8);
+
+>>ASSERTION Good B 1
+On a call to xname, the
+.A name
+is prefixed without a binding character to the
+.M specifier
+in the option
+.A table
+before storing the specification in the
+.A database .
+>># There has been clarification from MIT that the semantics are undefined
+>># when the table member does not start with a binding. The assertion
+>># therefore does not have any interesting consequences.
+>>#>># ***POTENTIAL GREY AREA***
+>>#>># The specification says that no binding character is inserted, but
+>>#>># it is. The specification _does_ say that each table member should
+>>#>># start with a . or * though, and I don't do this....
+>>#>># If I did have to place a * or . at the start of the test table
+>>#>># entry, then this assertion becomes untestable.
+>>#>>STRATEGY
+>>#Create new database to perform tests on.
+>>#Load database with initial values, if any.
+>>#Initialise test argc and argv
+>>#Call xname to parse the argc,argv pair.
+>>#Verify that argv was updated as expected.
+>>#Verify that the database was updated as expected.
+>>#>>CODE
+>>#
+>># (void)xpc_dotest(8, XPC_DB_MODE);
+>>#
+>>ASSERTION Good A
+On a call to xname, any unambiguous abbreviation within
+.A argv_in_out
+for an
+.M option
+member of
+.A table
+is considered a match for the option.
+>>STRATEGY
+Create new database to perform tests on.
+Load database with initial values, if any.
+Initialise test argc and argv
+Call xname to parse the argc,argv pair.
+Verify that argc was updated as expected.
+Verify that argv was updated as expected.
+Verify that the database was updated as expected.
+>>CODE
+
+ if(xpc_dotest(9, XPC_DB_MODE|XPC_ARGC_MODE|XPC_NOREPORT_MODE)) {
+ CHECK;
+ } else {
+ FAIL;
+ report("Unambiguous abbreviation failed to match.");
+ }
+
+ if(xpc_dotest(10, XPC_DB_MODE|XPC_ARGC_MODE|XPC_NOREPORT_MODE)) {
+ CHECK;
+ } else {
+ FAIL;
+ report("Ambiguous abbreviation matched incorrectly.");
+ }
+
+ CHECKPASS(2);
+
+>>ASSERTION Good A
+On a call to xname, the case of arguments is significant.
+>>STRATEGY
+Create new database to perform tests on.
+Load database with initial values, if any.
+Initialise test argc and argv
+Call xname to parse the argc,argv pair.
+Verify that argc was updated as expected.
+Verify that argv was updated as expected.
+Verify that the database was updated as expected.
+>>CODE
+
+ (void)xpc_dotest(11, XPC_DB_MODE|XPC_ARGC_MODE);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmptfldtbs/rmptfldtbs.m b/xc/test/xsuite/xtest/tset/CH10/rmptfldtbs/rmptfldtbs.m
new file mode 100644
index 000000000..ac9e55fce
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmptfldtbs/rmptfldtbs.m
@@ -0,0 +1,84 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmPutFileDatabase CH10
+void
+
+XrmDatabase database = (XrmDatabase)NULL;
+char *stored_db = "xpfd_file";
+>>SET startup rmstartup
+>>INCLUDE ../rmptrsrc/fn.mc
+>>EXTERN
+
+#define XPFD_T1_COUNT 4
+static char *t1_data[XPFD_T1_COUNT][3] = {
+ { "a.b.c", "ONE", "a.b.c" },
+ { "D.E.F", "TWO", "D.E.F"},
+ { "*Z", "THREE", "A.Z" },
+ { ".e.f.g.h.i.j", "*!++ X&", "e.f.g.h.i.j" } };
+
+>>ASSERTION Good A
+A call to xname stores the resource name and value pairs
+in the specified file
+.A stored_db
+from the specified
+.A database
+in ResourceLine format.
+>>STRATEGY
+Create a new database containing the test information.
+Call xname to write the database.
+Call XrmGetFileDatabase to check the database was written out.
+Check the retrieved database contents were as expected.
+Remove created file.
+>>CODE
+int a;
+XrmDatabase rdb;
+
+/* Create a new database containing the test information. */
+ for(a=0; a<XPFD_T1_COUNT; a++) {
+ XrmPutStringResource(&database, t1_data[a][0], t1_data[a][1]);
+ CHECK;
+ }
+
+/* Call xname to write the database. */
+ unlink( stored_db );
+ XCALL;
+
+/* Call XrmGetFileDatabase to check the database was written out. */
+ rdb = XrmGetFileDatabase( stored_db );
+ if (rdb == (XrmDatabase)NULL) {
+ FAIL;
+ delete("XrmGetFileDatabase could not open the written database.");
+ return;
+ } else {
+/* Check the retrieved database contents were as expected. */
+ for(a=0; a<XPFD_T1_COUNT; a++) {
+ if (xrm_check_entry(rdb, t1_data[a][2], t1_data[a][2],
+ "String", t1_data[a][1])) {
+ delete("Unexpected data item returned from read in database");
+ report("%s may have failed.", TestName);
+ } else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(XPFD_T1_COUNT + XPFD_T1_COUNT);
+
+/* Remove created file. */
+#ifndef TESTING
+ unlink( stored_db ); /* To examine test file, */
+ /* use pmake CFLOCAL=-DTESTING */
+#endif
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmptlnrsrc/rmptlnrsrc.m b/xc/test/xsuite/xtest/tset/CH10/rmptlnrsrc/rmptlnrsrc.m
new file mode 100644
index 000000000..9d7b93e49
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmptlnrsrc/rmptlnrsrc.m
@@ -0,0 +1,513 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmPutLineResource CH10
+void
+
+XrmDatabase *database = &xplr_database;
+char *line;
+>>SET startup rmstartup
+>>EXTERN
+static XrmDatabase xplr_database;
+
+#define XPLR_T1_COUNT 23
+
+static char *t1_lines[XPLR_T1_COUNT][5] = {
+/* Capital 'T' is transformed to TAB in the prefix and conjunct. */
+/* prefix, resource, conjunt, value, specifier, newvalue */
+{"", "a.a", ":", "one", "a.a" }, /* Normal Line */
+
+{" ", "a.b", ":", "two", "a.b" }, /* pre-resource space */
+{"T", "a.c", ":", "three","a.c" }, /* pre-resource tab*/
+{" T ", "a.d", ":", "four", "a.d" }, /* pre-resource ws */
+
+{"", "a.e", " :", "five", "a.e" }, /* post-resource space */
+{"", "a.f", "T:", "six", "a.f" }, /* post-resource tab */
+{"", "a.g", " T :", "seven","a.g" }, /* post-resource ws */
+
+{"", "a.h", ": ", "eight","a.h" }, /* pre-value space */
+{"", "a.i", ":T", "nine", "a.i" }, /* pre-value tab */
+{"", "a.j", ": T ", "ten", "a.j" }, /* pre-value ws */
+
+{" ", "a.k", " : ","eleven","a.k" }, /* multiple space */
+{"TT", "a.l", "TT:TTTT","twelve","a.l"}, /* multiple tab */
+{"T T","a.m", " T:T ","thirteen","a.m"}, /* multiple ws */
+
+{"", ".a.n", ":", "fourteen","a.n"}, /* pre-resource binding . */
+{"", "*a.o", ":", "fifteen", "b.a.o"}, /* pre-resource binding * */
+
+{"", "a*p", ":", "sixteen", "a.z.p"}, /* inclusive binding * */
+{"", ".a*q", ":", "seventeen","a.z.q"}, /* inclusive binding * */
+
+{"", "*a*r", ":", "eighteen","b.a.c.r"}, /* inclusive binding * */
+
+{"", "b", ":", "nineteen","b" }, /* lone component */
+{"", ".c", ":", "twenty", "c" }, /* lone component */
+{"", "*z", ":", "twenty one","b.z" }, /* lone component */
+
+{"", "d", ":", "Aa9! @#$%^&*()_+~", "d"}, /* complex value */
+
+{"T ", "a-z.r_9A-*a-8B","T: ","A* bZ_% !?", "a-z.r_9A-.z.a-8B"} };/* complex entry */
+
+>>INCLUDE ../rmptrsrc/fn.mc
+>>ASSERTION Good A
+When
+.A line
+is in
+ResourceLine format,
+then a call to xname adds a resource name and value pair from the specified
+.A line
+to the specified
+.A database .
+>>STRATEGY
+Create empty database for testing.
+Call xname to add test lines to the database.
+Verify the test lines were added to the database as expected.
+Call xname to test comments.
+Verify that comments did not affect the database contents.
+>>CODE
+int i,j,k;
+char tbuf[256], *tptr;
+
+/* Create empty database for testing. */
+ xplr_database=xrm_create_database("");
+ if (xplr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add test lines to the database. */
+ for(i=0; i<XPLR_T1_COUNT; i++) {
+
+ tptr=tbuf;
+ for(j=0; j<4; j++) {
+ tptr += xrm_tabulate(t1_lines[i][j], tptr);
+ CHECK;
+ }
+ *tptr = '\0';
+ trace("line: %s", tbuf);
+
+ line=tbuf;
+ XCALL;
+ }
+
+/* Verify the test lines were added to the database as expected. */
+ for(i=0; i<XPLR_T1_COUNT; i++) {
+ tptr=tbuf;
+ k = xrm_tabulate(t1_lines[i][3], tptr);
+ tbuf[k] = '\0';
+ if(xrm_check_entry(xplr_database,
+ t1_lines[i][4], t1_lines[i][4],
+ "String", tbuf)) {
+ FAIL;
+ } else
+ CHECK;
+ }
+
+/* Call xname to test comments. */
+ tbuf[0]= '!';
+ tptr=tbuf+1;
+ tptr += xrm_tabulate(t1_lines[1][1], tptr);
+ tptr += xrm_tabulate(":COMMENTS EFFECT DATABASE", tptr);
+ *tptr = '\0';
+
+ line=tbuf;
+ XCALL;
+
+/* Verify that comments did not affect the database contents. */
+ if(xrm_check_entry(xplr_database,
+ t1_lines[1][4], t1_lines[1][4],
+ "String", t1_lines[1][3])) {
+ FAIL;
+ report("On a call to %s, resources within comments affect",
+ TestName);
+ report("the resource database.");
+ } else
+ CHECK;
+
+ CHECKPASS(1 + 4*XPLR_T1_COUNT + XPLR_T1_COUNT + 1);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xplr_database, "xplr_one");
+#endif
+
+ XrmDestroyDatabase(xplr_database);
+
+>>ASSERTION Good A
+When the
+.A database
+contains an entry for the resource name specified by
+.A line ,
+then a call to xname replaces the resource value in the
+.A database
+with the resource value associated with
+.A line .
+>>STRATEGY
+Create empty database for testing.
+Call xname to add test lines to the database.
+Call xname to replace the database entries.
+Verify the database entries were replaced as expected.
+>>CODE
+int i,j,k;
+char tbuf[256], *tptr;
+
+/* Create empty database for testing. */
+ xplr_database=xrm_create_database("");
+ if (xplr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add test lines to the database. */
+ for(i=0; i<XPLR_T1_COUNT; i++) {
+ tptr=tbuf;
+ for(j=0; j<3; j++) {
+ tptr += xrm_tabulate(t1_lines[i][j], tptr);
+ CHECK;
+ }
+ tptr += xrm_tabulate("testvalue", tptr);
+ *tptr = '\0';
+
+ line=tbuf;
+ XCALL;
+ }
+
+/* Call xname to replace the database entries. */
+ for(i=0; i<XPLR_T1_COUNT; i++) {
+ tptr=tbuf;
+ for(j=0; j<4; j++) {
+ tptr += xrm_tabulate(t1_lines[i][j], tptr);
+ CHECK;
+ }
+ *tptr = '\0';
+
+ line=tbuf;
+ XCALL;
+ }
+
+/* Verify the database entries were replaced as expected. */
+ for(i=0; i<XPLR_T1_COUNT; i++) {
+ tptr=tbuf;
+ k = xrm_tabulate(t1_lines[i][3], tptr);
+ tbuf[k] = '\0';
+ if(xrm_check_entry(xplr_database,
+ t1_lines[i][4], t1_lines[i][4],
+ "String", tbuf)) {
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS( 1 + 3*XPLR_T1_COUNT + 4*XPLR_T1_COUNT + XPLR_T1_COUNT );
+
+#ifdef TESTING
+ XrmPutFileDatabase(xplr_database, "xplr_two");
+#endif
+
+ XrmDestroyDatabase(xplr_database);
+
+>>ASSERTION Good A
+When
+.A line
+is in
+ResourceLine format and
+.A database
+is NULL,
+then a call to xname
+creates a new database, adds a resource name and value pair from the specified
+.A line
+to the database, and
+returns a pointer to the database in
+.A database .
+>>STRATEGY
+Call xname to add data to a NULL database.
+Verify that the database was created, and the data was added as expected.
+>>CODE
+
+/* Call xname to add data to a NULL database. */
+ xplr_database = (XrmDatabase)NULL;
+ line="one.two.three:testing";
+ XCALL;
+/* Verify that the database was created, and the data was added as expected. */
+ if (xplr_database== (XrmDatabase)NULL) {
+ FAIL;
+ report("%s did not create a new database when called with",
+ TestName);
+ report("*database=(XrmDatabase)NULL");
+ } else {
+ CHECK;
+ if (xrm_check_entry(xplr_database,
+ "one.two.three", "ONE.TWO.THREE",
+ "String", "testing")) {
+ FAIL;
+ report("%s did not add to the database as expected.",
+ TestName);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xplr_database, "xplr_three");
+#endif
+
+ XrmDestroyDatabase(xplr_database);
+
+>>ASSERTION Good A
+>># This has been thoroughly covered by test one, however we perform a
+>># further simple test.
+On a call to xname, any white space before or after the name
+or colon in the
+.A line
+argument is ignored.
+>>STRATEGY
+Create empty database for testing.
+Call xname to add an entry with white space around the name and colon.
+Verify that the white space had no effect upon the entry.
+>>CODE
+char tbuf[256];
+
+/* Create empty database for testing. */
+ xplr_database=xrm_create_database("");
+ if (xplr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add an entry with white space around the name and colon. */
+ tbuf[xrm_tabulate("T a.b.c T: Ttest", tbuf)] = '\0';
+ line=tbuf;
+ XCALL;
+
+/* Verify that the white space had no effect upon the entry. */
+ if (xrm_check_entry(xplr_database,
+ "a.b.c", "a.b.c",
+ "String", "test")) {
+ FAIL;
+ report("%s did not add to the database as expected.",
+ TestName);
+ report("White space effects database entries");
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xplr_database, "xplr_four");
+#endif
+
+ XrmDestroyDatabase(xplr_database);
+
+>>ASSERTION Good A
+On a call to xname, the processing of
+.A line
+is terminated at a new-line or an ASCII nul character.
+>>STRATEGY
+Create empty database for testing.
+Create a test string containing a new-line character.
+Call xname to add the data to the database.
+Verify that only a single entry was added to the database.
+Create a test string containing a nul character.
+Call xname to add the data to the database.
+Verify that only a single entry was added to the database.
+>>CODE
+char tbuf[256], *tptr;
+char *type_ret;
+XrmValue value_ret;
+int k;
+
+/* Create empty database for testing. */
+ xplr_database=xrm_create_database("");
+ if (xplr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Create a test string containing a new-line character. */
+ tptr = tbuf;
+ tptr += xrm_tabulate("one:test", tbuf);
+ *tptr++ = '\n';
+ tptr += xrm_tabulate("two:another test", tptr);
+ *tptr='\0';
+
+/* Call xname to add the data to the database. */
+ line = tbuf;
+ trace("test string: '%s'", line);
+ XCALL;
+
+/* Verify that only a single entry was added to the database. */
+ if (xrm_check_entry(xplr_database,
+ "one", "one", "String", "test")) {
+ FAIL;
+ } else
+ CHECK;
+
+ if (XrmGetResource(xplr_database, "two", "two",
+ &type_ret, &value_ret)) {
+ FAIL;
+ report("Unexpected entry indicates that a newline");
+ report("does not terminate line processing for %s",
+ TestName);
+ trace("'two:%s' was unexpectedly present in the database.",
+ (value_ret.addr!=(char *)NULL?
+ (char *)value_ret.addr:"<NULL_POINTER"));
+ } else
+ CHECK;
+
+/* Create a test string containing a nul character. */
+ tptr = tbuf;
+ tptr += xrm_tabulate("three:test", tbuf);
+ *tptr++ = '\0';
+ tptr += xrm_tabulate("four:another test", tptr);
+ *tptr='\0';
+
+/* Call xname to add the data to the database. */
+ line = tbuf;
+ trace("test string: '%s'", line);
+ XCALL;
+
+/* Verify that only a single entry was added to the database. */
+ if (xrm_check_entry(xplr_database,
+ "three", "three", "String", "test")) {
+ FAIL;
+ } else
+ CHECK;
+
+ if (XrmGetResource(xplr_database, "four", "four",
+ &type_ret, &value_ret)) {
+ FAIL;
+ report("Unexpected entry indicates that an ASCII nul ");
+ report("does not terminate line processing for %s",
+ TestName);
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xplr_database, "xplr_five");
+#endif
+
+ XrmDestroyDatabase(xplr_database);
+
+>>ASSERTION Good A
+When the
+.A line
+argument contains
+.M \\\\n ,
+then on a call to xname this is interpreted as the new-line character.
+>>STRATEGY
+Create empty database for testing.
+Call xname to add an entry including a \n in the value.
+Verify that the \n was treated as an embedded newline.
+>>CODE
+char tbuf[256];
+char tstr[4];
+
+/* Create empty database for testing. */
+ xplr_database=xrm_create_database("");
+ if (xplr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add an entry including a \n in the value. */
+ tbuf[xrm_tabulate("one.two.three:t\\n!", tbuf)] = '\0';
+ line=tbuf;
+ trace("test string: '%s'", line);
+ XCALL;
+
+/* Verify that the \n was treated as an embedded newline. */
+ tstr[0]='t';
+ tstr[1]='\n';
+ tstr[2]='!';
+ tstr[3]='\0';
+ if (xrm_check_entry(xplr_database,
+ "one.two.three", "One.Two.Three",
+ "String", tstr)) {
+ FAIL;
+ report("%s did not add to the database as expected.",
+ TestName);
+ report("\\n was not treated as an embedded character.");
+ report("(whitespace in values represents \\n)");
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xplr_database, "xplr_six");
+#endif
+
+ XrmDestroyDatabase(xplr_database);
+
+>>ASSERTION Good A
+When the
+.A line
+argument contains
+.M \\\\nnn
+where n is a digit from zero to seven, then on a call to xname this is
+interpreted as a single byte containing the corresponding octal character.
+>>STRATEGY
+Create empty database for testing.
+Call xname to add an entry including a \100 in the value.
+Verify that the \100 was treated as a character .
+>>CODE
+char tbuf[256];
+char tstr[4];
+
+/* Create empty database for testing. */
+ xplr_database=xrm_create_database("");
+ if (xplr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add an entry including a \100 in the value. */
+ tbuf[xrm_tabulate("one.two.three:t\\100!", tbuf)] = '\0';
+ line=tbuf;
+ trace("test string: '%s'", line);
+ XCALL;
+
+/* Verify that the \100 was treated as a character . */
+ tstr[0]='t';
+ tstr[1]=(char)0x40;
+ tstr[2]='!';
+ tstr[3]='\0';
+ if (xrm_check_entry(xplr_database,
+ "one.two.three", "One.Two.Three",
+ "String", tstr)) {
+ FAIL;
+ report("%s did not add to the database as expected.",
+ TestName);
+ report("\\nnn was not treated as an embedded character.");
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xplr_database, "xplr_seven");
+#endif
+
+ XrmDestroyDatabase(xplr_database);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmptrsrc/common.mc b/xc/test/xsuite/xtest/tset/CH10/rmptrsrc/common.mc
new file mode 100644
index 000000000..4d1d58898
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmptrsrc/common.mc
@@ -0,0 +1,93 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+>># shared resource manager test declarations.
+>># Used by:
+>># XrmPutResource
+>># XrmPutStringResource
+>># XrmQPutResource
+>># XrmQPutStringResource
+
+>># include common functions
+>>INCLUDE ../rmptrsrc/fn.mc
+>>EXTERN
+
+#define XRM_T1_TESTS 4
+
+static char *t1_specifiers[XRM_T1_TESTS] = {
+ "opus.hodgepodge.portnoy",
+ "calvin*and.hobbes",
+ "*The.Far*Side",
+ "Cutter.John.was*here" };
+
+static char *qt1_specifiers[XRM_T1_TESTS][5] = {
+ { "opus" , "hodgepodge", "portnoy" , (char *)NULL, (char *)NULL },
+ { "calvin", "and", "hobbes", (char *)NULL, (char *)NULL },
+ { "The", "Far", "Side" , (char *)NULL, (char *)NULL },
+ { "Cutter", "John", "was", "here", (char *)NULL } };
+
+static XrmBinding qt1_bindings[XRM_T1_TESTS][4] = {
+ { XrmBindTightly, XrmBindTightly, XrmBindTightly },
+ { XrmBindTightly, XrmBindLoosely, XrmBindTightly },
+ { XrmBindLoosely, XrmBindTightly, XrmBindLoosely },
+ { XrmBindTightly, XrmBindTightly, XrmBindTightly, XrmBindLoosely } };
+
+static char *t1_fspecs[XRM_T1_TESTS] = {
+ "opus.hodgepodge.portnoy",
+ "calvin.and.hobbes",
+ "the.far.side",
+ "cutter.john.was.here" };
+
+static char *t1_fclasses[XRM_T1_TESTS] = {
+ "opus.hodgepodge.portnoy",
+ "Boy.Thingy0.Tiger",
+ "The.Far.Side",
+ "Cutter.John.was.here" };
+
+static char *t1_types[XRM_T1_TESTS] = {
+ "String",
+ "Thing",
+ "Ping",
+ "Bing" };
+
+static char *t1_values[XRM_T1_TESTS] = {
+ "Value One",
+ "Value Two",
+ "What we say to cats.",
+ "NCC-1701a" };
+
+static char *t2_specifiers[2] = {
+ "A.b*C",
+ "A.b*C" };
+
+static char *qt2_specifier[] = {
+ "A", "b", "C", (char *)NULL };
+
+static XrmBinding qt2_bindings[] = {
+ XrmBindTightly, XrmBindTightly, XrmBindLoosely };
+
+static char *t2_fullspec = "a.b.c";
+
+static char *t2_fullclass = "A.B.C";
+
+static char *t2_types[2] = {
+ "TypeOne",
+ "TypeTwo" };
+
+static char *t2_values[2] = {
+ "One",
+ "Two" };
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmptrsrc/fn.mc b/xc/test/xsuite/xtest/tset/CH10/rmptrsrc/fn.mc
new file mode 100644
index 000000000..bf07df2ce
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmptrsrc/fn.mc
@@ -0,0 +1,117 @@
+*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+
+>># resource manager test common functions
+>># Used by:
+>># XrmPutLineResource
+>># XrmPutResource
+>># XrmQPutResource
+>># XrmPutStringResource
+>># XrmQPutStringResource
+>># XrmGetResource
+>># XrmQGetResource
+>># XrmMergeDatabases
+>># XrmDestroyDatabase
+>># XrmGetFileDatabase
+>># XrmGetStringDatabase
+>># XrmPutFileDatabase
+
+>>EXTERN
+
+static XrmDatabase
+xrm_create_database(data)
+char *data;
+{
+ /* Create a new database for testing with */
+ return(XrmGetStringDatabase(data));
+}
+
+static void
+xrm_fill_value(value, data)
+XrmValue *value;
+char *data;
+{
+ value->addr = (caddr_t)data;
+ value->size = (unsigned int)(strlen(data)+1);
+}
+
+static int
+xrm_check_entry(dbase, fullspec, fullclass, type, val)
+XrmDatabase dbase;
+char *fullspec;
+char *fullclass;
+char *type;
+char *val;
+{
+ int ret_val;
+ char *type_ret;
+ XrmValue value_ret;
+
+ ret_val=0;
+ type_ret=(char *)NULL;
+ value_ret.size=0;
+ value_ret.addr=(caddr_t)NULL;
+
+ if(XrmGetResource(dbase, fullspec, fullclass, &type_ret, &value_ret)
+ ==False) {
+ report("XrmGetResource failed to find database entry");
+ report("Specifier was: %s", fullspec);
+ ret_val++;
+ } else {
+ if (type_ret==NULL || strcmp(type_ret, type)) {
+ report("XrmGetResource returned unexpected type information.");
+ report("Specifier was: %s", fullspec);
+ report("Expected type: '%s'", type);
+ report("Returned type: '%s'",
+ (type_ret==NULL)?"<NULL POINTER>":type_ret);
+ ret_val++;
+ }
+
+ if (( value_ret.addr==(caddr_t)NULL)
+ || (strncmp((char *)value_ret.addr, val, strlen(val)))) {
+ report("XrmGetResource returned unexpected value information.");
+ report("Specifier was: %s", fullspec);
+ report("Expected value: '%s'", val);
+ if(value_ret.addr == (caddr_t)NULL) {
+ report("Returned value: <NULL POINTER>");
+ } else {
+ report("Returned value: '%.*s' (%u bytes)",
+ value_ret.size, (char *)value_ret.addr, value_ret.size);
+ }
+ ret_val++;
+ }
+ }
+
+ return(ret_val);
+}
+
+static int
+xrm_tabulate(from, into)
+char *from, *into;
+{
+ int i,j;
+
+ j = strlen(from);
+ for(i=0; i<j; i++) {
+ if(from[i]=='T') {
+ into[i]='\t';
+ } else {
+ into[i]=from[i];
+ }
+ }
+ return(j);
+}
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmptrsrc/rmptrsrc.m b/xc/test/xsuite/xtest/tset/CH10/rmptrsrc/rmptrsrc.m
new file mode 100644
index 000000000..920257772
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmptrsrc/rmptrsrc.m
@@ -0,0 +1,183 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmPutResource CH10
+void
+
+XrmDatabase *database = &xpr_database;
+char *specifier;
+char *type;
+XrmValue *value = &xpr_value;
+>>SET startup rmstartup
+>>EXTERN
+static XrmDatabase xpr_database;
+static XrmValue xpr_value;
+
+>>INCLUDE common.mc
+>>ASSERTION Good A
+A call to xname adds a resource
+.A specifier
+with the specified
+.A value
+to the specified
+.A database
+with a
+.A type
+representation type.
+>>STRATEGY
+Create an empty test database.
+Call xname to add database entries.
+Call XrmGetResource to verify the database entries were added.
+>>CODE
+int i;
+
+/* Create an empty test database. */
+ xpr_database = xrm_create_database("");
+ if (xpr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add database entries. */
+/* Call XrmGetResource to verify the database entries were added. */
+ for(i=0; i<XRM_T1_TESTS; i++) {
+ specifier = t1_specifiers[i];
+ type = t1_types[i];
+ xrm_fill_value(value, t1_values[i]);
+ XCALL;
+ if(xrm_check_entry(xpr_database,
+ t1_fspecs[i], t1_fclasses[i],
+ t1_types[i], t1_values[i])) {
+ FAIL;
+ } else
+ CHECK;
+ }
+
+#ifdef TESTING
+ XrmPutFileDatabase(xpr_database, "xpr_one");
+#endif
+
+ CHECKPASS(1+XRM_T1_TESTS);
+
+ XrmDestroyDatabase(xpr_database);
+
+>>ASSERTION Good A
+When the
+.A database
+contains an entry for the resource name specified by
+.A specifier,
+then a call to xname replaces the resource value in the
+.A database
+with
+.A value ,
+and the resource type
+with
+.A type .
+>>STRATEGY
+Create an empty test database.
+Call xname to add a database entry.
+Call xname to replace a database entry.
+Verify the database entry was updated as expected.
+>>CODE
+ int i;
+
+/* Create an empty test database. */
+ xpr_database = xrm_create_database("");
+ if (xpr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add a database entry. */
+/* Call xname to replace a database entry. */
+ for(i=0; i<2; i++) {
+ specifier = t2_specifiers[i];
+ type = t2_types[i];
+ xrm_fill_value(value, t2_values[i]);
+ trace("Adding %s: (type %s) %s", specifier, type, t2_values[i]);
+ XCALL;
+ CHECK;
+ }
+
+/* Verify the database entry was updated as expected. */
+ if(xrm_check_entry(xpr_database,
+ t2_fullspec, t2_fullclass,
+ t2_types[1], t2_values[1])) {
+ FAIL;
+ report("%s did not update the database contents as expected.",
+ TestName);
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xpr_database, "xpr_two");
+#endif
+
+ XrmDestroyDatabase(xpr_database);
+
+>>ASSERTION Good A
+When
+.A database
+is NULL, then a call to xname
+creates a new database, adds a resource
+.A specifier
+with the specified
+.A value
+to the database with a
+.A type
+representation type, and returns a pointer to the database in
+.A database .
+>>STRATEGY
+Call xname to add data to a NULL database.
+Verify that the database was created, and the data was added as expected.
+>>CODE
+
+/* Call xname to add data to a NULL database. */
+ xpr_database = (XrmDatabase)NULL;
+ specifier = t2_specifiers[0];
+ type = t2_types[0];
+ xrm_fill_value(value, t2_values[0]);
+ XCALL;
+
+/* Verify that the database was created, and the data was added as expected. */
+ if (xpr_database== (XrmDatabase)NULL) {
+ FAIL;
+ report("%s did not create a new database when called with",
+ TestName);
+ report("*database=(XrmDatabase)NULL");
+ } else {
+ CHECK;
+ if(xrm_check_entry(xpr_database,
+ t2_fullspec, t2_fullclass,
+ t2_types[0], t2_values[0])) {
+ FAIL;
+ report("%s did not add to the database as expected.",
+ TestName);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xpr_database, "xpr_three");
+#endif
+
+ XrmDestroyDatabase(xpr_database);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmptstrrsr/rmptstrrsr.m b/xc/test/xsuite/xtest/tset/CH10/rmptstrrsr/rmptstrrsr.m
new file mode 100644
index 000000000..8f03e7be4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmptstrrsr/rmptstrrsr.m
@@ -0,0 +1,177 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmPutStringResource CH10
+void
+
+XrmDatabase *database = &xpsr_database;
+char *specifier;
+char *value;
+>>SET startup rmstartup
+>>EXTERN
+static XrmDatabase xpsr_database;
+
+>>INCLUDE ../rmptrsrc/common.mc
+>>ASSERTION Good A
+A call to xname adds a resource
+.A specifier
+with the specified
+.A value
+to the specified
+.A database
+with a
+.M String
+representation type.
+>>STRATEGY
+Create an empty test database.
+Call xname to add database entries.
+Call XrmGetResource to verify the database entries were added.
+>>CODE
+int i;
+
+/* Create an empty test database. */
+ xpsr_database = xrm_create_database("");
+ if (xpsr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add database entries. */
+/* Call XrmGetResource to verify the database entries were added. */
+ for(i=0; i<XRM_T1_TESTS; i++) {
+ specifier = t1_specifiers[i];
+ value = t1_values[i];
+ XCALL;
+ if(xrm_check_entry(xpsr_database,
+ t1_fspecs[i], t1_fclasses[i],
+ "String" , t1_values[i])) {
+ FAIL;
+ } else
+ CHECK;
+ }
+
+#ifdef TESTING
+ XrmPutFileDatabase(xpsr_database, "xpsr_one");
+#endif
+
+ CHECKPASS(1+XRM_T1_TESTS);
+
+ XrmDestroyDatabase(xpsr_database);
+
+>>ASSERTION Good A
+When the
+.A database
+contains an entry for the resource name specified by
+.A specifier,
+then a call to xname replaces the resource value in the
+.A database
+with
+.A value ,
+and the repesentation type with
+.M String .
+>>STRATEGY
+Create an empty test database.
+Call xname to add a database entry.
+Call xname to replace a database entry.
+Verify the database entry was updated as expected.
+>>CODE
+ int i;
+
+/* Create an empty test database. */
+ xpsr_database = xrm_create_database("");
+ if (xpsr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add a database entry. */
+/* Call xname to replace a database entry. */
+ for(i=0; i<2; i++) {
+ specifier = t2_specifiers[i];
+ value = t2_values[i];
+ trace("Adding %s: (type %s) %s", specifier, "String", t2_values[i]);
+ XCALL;
+ CHECK;
+ }
+
+/* Verify the database entry was updated as expected. */
+ if(xrm_check_entry(xpsr_database,
+ t2_fullspec, t2_fullclass,
+ "String" , t2_values[1])) {
+ FAIL;
+ report("%s did not update the database contents as expected.",
+ TestName);
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xpsr_database, "xpsr_two");
+#endif
+
+ XrmDestroyDatabase(xpsr_database);
+
+>>ASSERTION Good A
+When
+.A database
+is NULL, then a call to xname
+creates a new database, adds a resource
+.A specifier
+with the specified
+.A value
+to the database with a
+.M String
+representation type, and returns a pointer to the database in
+.A database .
+>>STRATEGY
+Call xname to add data to a NULL database.
+Verify that the database was created, and the data was added as expected.
+>>CODE
+
+/* Call xname to add data to a NULL database. */
+ xpsr_database = (XrmDatabase)NULL;
+ specifier = t2_specifiers[0];
+ value = t2_values[0];
+ XCALL;
+
+/* Verify that the database was created, and the data was added as expected. */
+ if (xpsr_database== (XrmDatabase)NULL) {
+ FAIL;
+ report("%s did not create a new database when called with",
+ TestName);
+ report("*database=(XrmDatabase)NULL");
+ } else {
+ CHECK;
+ if(xrm_check_entry(xpsr_database,
+ t2_fullspec, t2_fullclass,
+ "String" , t2_values[0])) {
+ FAIL;
+ report("%s did not add to the database as expected.",
+ TestName);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xpsr_database, "xpsr_three");
+#endif
+
+ XrmDestroyDatabase(xpsr_database);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmqgtrsrc/rmqgtrsrc.m b/xc/test/xsuite/xtest/tset/CH10/rmqgtrsrc/rmqgtrsrc.m
new file mode 100644
index 000000000..09f148bd6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmqgtrsrc/rmqgtrsrc.m
@@ -0,0 +1,203 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmQGetResource CH10
+Bool
+
+XrmDatabase database = (XrmDatabase)NULL;
+XrmNameList quark_name = name;
+XrmClassList quark_class = class;
+XrmRepresentation *quark_type_return = &type;
+XrmValue *value_return = &value;
+>>SET startup rmstartup
+>>INCLUDE ../rmptrsrc/fn.mc
+>>INCLUDE ../rmgtrsrc/common.mc
+>>EXTERN
+XrmName name[10];
+XrmClass class[10];
+XrmRepresentation type;
+XrmValue value;
+>>ASSERTION Good A
+When
+.A quark_name
+is a list of quarks representing a fully qualified resource name
+and
+.A quark_class
+is a list of quarks representing a fully qualified resource class,
+and the
+.A database
+contains one or more corresponding resources,
+then a call to xname places
+the representation type as a quark in
+.A quark_type_return
+and the value in
+.A value_return
+of the closest matching resource as defined by the matching rules,
+and returns
+.S True .
+>>STRATEGY
+>>CODE
+int a;
+XrmValue b;
+Bool ret;
+
+/* Create a database containing test information. */
+ database = xrm_create_database("");
+ if (database == (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+ for(a=0; a<XGR_T1_DATA; a++) {
+ xrm_fill_value(&b, t1_data[a][2]);
+ XrmPutResource(&database, t1_data[a][0], t1_data[a][1], &b );
+ CHECK;
+ }
+
+#ifdef TESTING
+ XrmPutFileDatabase(database, "xgr_one");
+#endif
+
+/* Interrogate database using xname. */
+/* Verify that the returned type and value were as expected. */
+ for(a=0; a<XGR_T1_TEST; a++) {
+ XrmStringToNameList(t1_test[a][0], quark_name);
+ XrmStringToClassList(t1_test[a][1], quark_class);
+ type = (XrmRepresentation)0;
+ value.addr = (caddr_t)NULL;
+ ret = XCALL;
+ if (ret==False) {
+ FAIL;
+ report("%s failed to match a database entry.",
+ TestName);
+ report("name :%s", t1_test[a][0]);
+ report("class:%s", t1_test[a][1]);
+ report("Possible diagnosis: %s", t1_test[a][4]);
+ } else {
+ CHECK;
+
+ if (type == (XrmRepresentation)0 ||
+ type != XrmStringToRepresentation(t1_test[a][2])) {
+ FAIL;
+ report("%s failed to return expected type.",
+ TestName);
+ report("Expected type: '%s'", t1_test[a][2]);
+ report("Returned type: '%s'",
+ (type==(XrmRepresentation)0?
+ "<NULL QUARK>":XrmQuarkToString(type)));
+ } else
+ CHECK;
+
+
+ if (value.addr == NULL
+ || strncmp(t1_test[a][3], (char *)value.addr, strlen(t1_test[a][3]))){
+ char tb[100];
+ unsigned int l;
+
+ if (value.addr == NULL) {
+ strcpy(tb, "<NULL POINTER>");
+ l = strlen(tb);
+ } else {
+ (void) strncpy(tb, (char*)value.addr, value.size);
+ tb[value.size]='\0';
+ l = value.size;
+ }
+ FAIL;
+ report("%s failed to return expected value.",
+ TestName);
+ report("Expected value: '%s'", t1_test[a][3]);
+ report("Returned value: '%.*s'", l, tb);
+ report("Possible diagnosis: %s", t1_test[a][4]);
+ } else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(1 + XGR_T1_DATA + 3*XGR_T1_TEST);
+>>ASSERTION Good A
+When
+.A quark_name
+is a list of quarks representing a fully qualified resource name
+and
+.A quark_class
+is a list of quarks representing a fully qualified resource class,
+and the
+.A database
+does not contain a corresponding resource as defined by the matching rules,
+then a call to xname returns
+.S False .
+>>STRATEGY
+Create a database containing test information.
+Interrogate database using xname.
+Verify that the test examples were not found.
+>>CODE
+int a;
+XrmValue b;
+Bool ret;
+
+/* Create a database containing test information. */
+ database = xrm_create_database("");
+ if (database == (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+ for(a=0; a<XGR_T1_DATA; a++) {
+ xrm_fill_value(&b, t1_data[a][2]);
+ XrmPutResource(&database, t1_data[a][0], t1_data[a][1], &b );
+ CHECK;
+ }
+
+#ifdef TESTING
+ XrmPutFileDatabase(database, "xgr_two");
+#endif
+
+/* Interrogate database using xname. */
+/* Verify that the test examples were not found. */
+ for(a=0; a<XGR_T2_TEST; a++) {
+ XrmStringToNameList(t2_test[a][0], quark_name);
+ XrmStringToClassList(t2_test[a][1], quark_class);
+ type = (XrmRepresentation)0;
+ value.addr = (caddr_t)NULL;
+ ret = XCALL;
+ if (ret==False) {
+ CHECK;
+ } else {
+ char tb[100];
+ unsigned int l;
+
+ FAIL;
+ report("%s returned a database match when a failure was expected.",
+ TestName);
+ report("Returned type: '%s'", (type==(XrmRepresentation)0)?
+ "<NULL QUARK>":XrmRepresentationToString(type));
+
+ if (value.addr == NULL) {
+ strcpy(tb, "<NULL POINTER>");
+ l = strlen(tb);
+ } else {
+ (void) strncpy(tb, (char*)value.addr, value.size);
+ tb[value.size]='\0';
+ l = value.size;
+ }
+ report("Returned value: '%.*s'", l, tb);
+ report("Possible diagnosis: %s", t2_test[a][3]);
+ }
+ }
+
+ CHECKPASS(1 + XGR_T1_DATA + XGR_T2_TEST);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmqgtsrchl/rmqgtsrchl.m b/xc/test/xsuite/xtest/tset/CH10/rmqgtsrchl/rmqgtsrchl.m
new file mode 100644
index 000000000..a61ad4bca
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmqgtsrchl/rmqgtsrchl.m
@@ -0,0 +1,169 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmQGetSearchList CH10
+Bool
+
+XrmDatabase database = (XrmDatabase)NULL;
+XrmNameList names = nl;
+XrmClassList classes = cl;
+XrmHashTable *list_return = sl; /* This is a XrmSearchList */
+int list_length = XQGSL_LENGTH;
+>>SET startup rmstartup
+>>EXTERN
+
+#define XQGSL_LENGTH 3
+static XrmHashTable sl[XQGSL_LENGTH];
+
+#define XQGSL_N_QUARK 10
+
+static XrmName nl[XQGSL_N_QUARK];
+static XrmClass cl[XQGSL_N_QUARK];
+
+#define XQGSL_T3_ENTRIES 2
+static char *t3_data[XQGSL_T3_ENTRIES] = {
+ "a:one",
+ "b:two" };
+
+#define XQGSL_T4_ENTRIES 10
+static char *t4_data[XQGSL_T4_ENTRIES] = {
+ "a*z:one",
+ "a.b*z:two",
+ "a.b.c*z:three",
+ "a.b.c.d*z:four",
+ "a.b.c.d.e*z:five",
+ "A*Z:six",
+ "A.B*Z:seven",
+ "A.B.C*Z:eight",
+ "A.B.C.D*Z:nine",
+ "A.B.C.D.E*Z:ten" };
+
+>>ASSERTION Good B 2
+A call to xname returns a list of database levels in
+.A list_return
+where a match for the specified
+.A names
+and
+.A classes
+in the
+.A database
+could occur.
+>>#
+>># The problem here is that the XrmSearchList is a pointer to a
+>># Xlib defined structure (it is defined in Xrm.c). Therefore, we
+>># cannot perform any processing on the pointer in a portable
+>># manner.
+>>#
+>># The essence of this assertion is tested in XrmQGetSearchResource,
+>># which must call XrmQGetSearchList to build it's XrmSearchList
+>># argument.
+>>#
+>>ASSERTION Good B 2
+On a call to xname, the list returned in
+.A list_return
+is in best-to-worst match order.
+>>#
+>># The problem here is that the XrmSearchList is a pointer to a
+>># Xlib defined structure (it is defined in Xrm.c). Therefore, we
+>># cannot perform any processing on the pointer in a portable
+>># manner.
+>>#
+>>ASSERTION Good A
+When
+.A list_length
+is greater than or equal to the number of database levels
+where a match could occur,
+then a call to xname returns
+.S True .
+>>STRATEGY
+Create a test database with insufficient database levels to fill the list.
+Call xname to obtain search list.
+Verify that True was returned.
+>>CODE
+int a;
+Bool ret;
+
+/* Create a test database with insufficient database levels to fill the list. */
+ for(a=0; a<XQGSL_T3_ENTRIES; a++) {
+ XrmPutLineResource(&database, t3_data[a]);
+ }
+
+/* Call xname to obtain search list. */
+ for(a=0; a<XQGSL_N_QUARK; a++) {
+ nl[a]=(XrmName)0;
+ cl[a]=(XrmClass)0;
+ }
+ XrmStringToNameList( "a", nl );
+ XrmStringToClassList("A", cl );
+ ret = XCALL;
+
+/* Verify that True was returned. */
+ if (ret != True) {
+ FAIL;
+ report("%s did not return True when the list_length was",
+ TestName);
+ report("greater than or equal to the number of");
+ report("possible match database levels.");
+ report("Returned value: %s", boolname(ret));
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+ XrmDestroyDatabase(database);
+
+>>ASSERTION Good A
+When
+.A list_length
+is less than the number of database levels
+where a match could occur,
+then a call to xname returns
+.S False .
+>>STRATEGY
+Create a test database with sufficient database levels to fill the list.
+Call xname to obtain search list.
+Verify that False was returned.
+>>CODE
+int a;
+Bool ret;
+
+/* Create a test database with sufficient database levels to fill the list. */
+ for(a=0; a<XQGSL_T4_ENTRIES; a++) {
+ XrmPutLineResource(&database, t4_data[a]);
+ }
+
+/* Call xname to obtain search list. */
+ for(a=0; a<XQGSL_N_QUARK; a++) {
+ nl[a]=(XrmName)0;
+ cl[a]=(XrmClass)0;
+ }
+ XrmStringToNameList( "a.b.c.d.e.f.g.h.z", nl );
+ XrmStringToClassList( "A.B.C.D.E.F.G.H.Z", cl );
+ ret = XCALL;
+
+/* Verify that False was returned. */
+ if (ret != False) {
+ FAIL;
+ report("%s did not return False when the list_length was",
+ TestName);
+ report("less than the number of possible match database levels.");
+ report("Returned value: %s", boolname(ret));
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+ XrmDestroyDatabase(database);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmqgtsrchr/rmqgtsrchr.m b/xc/test/xsuite/xtest/tset/CH10/rmqgtsrchr/rmqgtsrchr.m
new file mode 100644
index 000000000..1b9d0c260
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmqgtsrchr/rmqgtsrchr.m
@@ -0,0 +1,246 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmQGetSearchResource CH10
+Bool
+
+XrmHashTable *list = sl;
+XrmName name;
+XrmClass class;
+XrmRepresentation *type_return = &type;
+XrmValue *value=&val;
+>>SET startup rmstartup
+>>EXTERN
+static XrmRepresentation type;
+static XrmValue val;
+static XrmDatabase dbase;
+
+#define XQGSR_ARRAY_SIZE 10
+static XrmHashTable sl[XQGSR_ARRAY_SIZE];
+static XrmName nl[XQGSR_ARRAY_SIZE];
+static XrmClass cl[XQGSR_ARRAY_SIZE];
+
+/* Database data */
+#define XQGSR_T1_DATA 5
+static char *t1_data[XQGSR_T1_DATA] = {
+ "applic.window.background:blue",
+ "Applic.window.BackGround:cyan",
+ "applic.Window.background:magenta",
+ "Applic.Window.BackGround:orange",
+ "Applic.Window.Unimportant:pink" };
+
+/* Searchlist data */
+#define XQGSR_T1_SEARCH 2
+static char *t1_search[XQGSR_T1_SEARCH][2] = {
+ { "applic", "Applic" },
+ { "window", "Window" } };
+
+/* SearchResource tests */
+#define XQGSR_T1_TESTS 3
+static char *t1_tests[XQGSR_T1_TESTS][3] = {
+ { "background", "BackGround", "blue" },
+ { "border", "BackGround", "cyan" },
+ { "misc", "Unimportant", "pink" } };
+
+#define XQGSR_T2_TESTS 1
+static char *t2_tests[XQGSR_T2_TESTS][2] = {
+ { "nomatch", "Nomatch" } };
+
+>>ASSERTION Good A
+When
+.A name
+and
+.A class
+fully identify a resource which is contained in
+the specified database levels
+.A list ,
+then a call to xname
+returns the type in
+.A type_return
+and
+the value in
+.A value_return
+which first match,
+and returns
+.S True .
+>>STRATEGY
+Create a database containing testable resource/value pairs.
+Call XrmQGetSearchList to build up the search list.
+Call xname to retrieve information.
+Verify the retrieved information was correct.
+>>CODE
+int a;
+XrmRepresentation exp_type;
+Bool ret;
+
+/* Create a database containing testable resource/value pairs. */
+ dbase=(XrmDatabase)NULL;
+ for(a=0; a<XQGSR_T1_DATA; a++) {
+ CHECK;
+ XrmPutLineResource(&dbase, t1_data[a]);
+ }
+
+#ifdef TESTING
+ XrmPutFileDatabase(dbase, "xqgsr_one");
+#endif
+
+/* Call XrmQGetSearchList to build up the search list. */
+ for(a=0; a<XQGSR_T1_SEARCH; a++) {
+ CHECK;
+ nl[a]=XrmStringToName(t1_search[a][0]);
+ cl[a]=XrmStringToClass(t1_search[a][1]);
+ }
+ nl[XQGSR_T1_SEARCH]=(XrmName)0;
+ cl[XQGSR_T1_SEARCH]=(XrmClass)0;
+
+ if(!XrmQGetSearchList(dbase, nl, cl, sl, XQGSR_ARRAY_SIZE)) {
+ delete("XrmQGetSearchList unexpectedly exhausted the allocated space for table.");
+ return;
+ } else
+ CHECK;
+
+ exp_type = XrmStringToRepresentation("String");
+ for(a=0; a<XQGSR_T1_TESTS; a++) {
+
+/* Call xname to retrieve information. */
+ name = XrmStringToName(t1_tests[a][0]);
+ class= XrmStringToClass(t1_tests[a][1]);
+ type = (XrmRepresentation)0;
+ val.addr = (caddr_t)NULL;
+ val.size = 0;
+ ret = XCALL;
+
+/* Verify the retrieved information was correct. */
+ if(ret != True) {
+ FAIL;
+ report("%s returned False when expecting a database match.",
+ TestName);
+ } else {
+ if (type != exp_type) {
+ char *rt;
+
+ FAIL;
+ report("%s returned unexpected type.", TestName);
+ report("Name (class): %s (%s)", t1_tests[a][0], t1_tests[a][1]);
+ report("Expected type: String");
+ rt=XrmRepresentationToString(type);
+ report("Returned type: %s", (rt==NULL?"<NULL STRING":rt));
+ } else
+ CHECK;
+
+ if (val.addr==NULL ||
+ strncmp((char*)val.addr, t1_tests[a][2],
+ strlen(t1_tests[a][2]))) {
+ FAIL;
+ report("%s returned unexpected value", TestName);
+ report("Name (class): %s (%s)", t1_tests[a][0], t1_tests[a][1]);
+ report("Expected value: %s", t1_tests[a][2]);
+ if (val.addr==NULL) {
+ report("Returned value: <NULL POINTER>");
+ } else {
+ report("Returned value: %.*s",
+ val.size,
+ (char *)val.addr);
+ }
+ } else
+ CHECK;
+ }
+ }
+
+ CHECKPASS(1+XQGSR_T1_DATA+XQGSR_T1_SEARCH+XQGSR_T1_TESTS*2);
+
+ XrmDestroyDatabase(dbase);
+
+>>ASSERTION Good A
+When
+.A name
+and
+.A class
+fully identify a resource which is not contained in
+the specified database levels
+.A list ,
+then a call to xname returns
+.S False .
+>>STRATEGY
+Create a database containing testable resource/value pairs.
+Call XrmQGetSearchList to build up the search list.
+Call xname to retrieve information.
+Verify there was no match.
+>>CODE
+int a;
+Bool ret;
+
+/* Create a database containing testable resource/value pairs. */
+ dbase=(XrmDatabase)NULL;
+ for(a=0; a<XQGSR_T1_DATA; a++) {
+ CHECK;
+ XrmPutLineResource(&dbase, t1_data[a]);
+ }
+
+#ifdef TESTING
+ XrmPutFileDatabase(dbase, "xqgsr_two");
+#endif
+
+/* Call XrmQGetSearchList to build up the search list. */
+ for(a=0; a<XQGSR_T1_SEARCH; a++) {
+ CHECK;
+ nl[a]=XrmStringToName(t1_search[a][0]);
+ cl[a]=XrmStringToClass(t1_search[a][1]);
+ }
+ nl[XQGSR_T1_SEARCH]=(XrmName)0;
+ cl[XQGSR_T1_SEARCH]=(XrmClass)0;
+
+ if(!XrmQGetSearchList(dbase, nl, cl, sl, XQGSR_ARRAY_SIZE)) {
+ delete("XrmQGetSearchList unexpectedly exhausted the allocated space for table.");
+ return;
+ } else
+ CHECK;
+
+ for(a=0; a<XQGSR_T2_TESTS; a++) {
+
+/* Call xname to retrieve information. */
+ name = XrmStringToName(t2_tests[a][0]);
+ class= XrmStringToClass(t2_tests[a][1]);
+ type = (XrmRepresentation)0;
+ val.addr = (caddr_t)NULL;
+ val.size = 0;
+ ret = XCALL;
+
+/* Verify there was no match. */
+ if(ret != False) {
+ char *rt;
+
+ FAIL;
+ report("%s returned True when expecting no match.",
+ TestName);
+ report("Name (class): %s (%s)", t2_tests[a][0], t2_tests[a][1]);
+ rt=XrmRepresentationToString(type);
+ report("Returned type: %s", (rt==NULL?"<NULL STRING":rt));
+ if (val.addr==NULL) {
+ report("Returned value: <NULL POINTER>");
+ } else {
+ report("Returned value: %.*s",
+ val.size,
+ (char *)val.addr);
+ }
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(1+XQGSR_T1_DATA+XQGSR_T1_SEARCH+XQGSR_T2_TESTS);
+
+ XrmDestroyDatabase(dbase);
+
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmqptrsrc/rmqptrsrc.m b/xc/test/xsuite/xtest/tset/CH10/rmqptrsrc/rmqptrsrc.m
new file mode 100644
index 000000000..371ceb895
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmqptrsrc/rmqptrsrc.m
@@ -0,0 +1,208 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmQPutResource CH10
+void
+
+XrmDatabase *database = &xqpr_database;
+XrmBindingList bindings = xqpr_bindings;
+XrmQuarkList quarks = xqpr_quarks;
+XrmRepresentation type;
+XrmValue *value = &xqpr_value;
+>>SET startup rmstartup
+>>EXTERN
+static XrmDatabase xqpr_database;
+static XrmBinding xqpr_bindings[10];
+static XrmQuark xqpr_quarks[10];
+static XrmValue xqpr_value;
+
+>>INCLUDE ../rmptrsrc/common.mc
+>>ASSERTION Good A
+A call to xname adds a resource
+specified by
+.A bindings
+and
+.A quarks
+with the specified
+.A value
+to the specified
+.A database
+with a
+.A type
+representation type.
+>>STRATEGY
+Create an empty test database.
+Call xname to add database entries.
+Call XrmGetResource to verify the database entries were added.
+>>CODE
+int i,j;
+
+/* Create an empty test database. */
+ xqpr_database = xrm_create_database("");
+ if (xqpr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add database entries. */
+/* Call XrmGetResource to verify the database entries were added. */
+ for(i=0; i<XRM_T1_TESTS; i++) {
+ for(j=0; qt1_specifiers[i][j] != (char *)NULL; j++) {
+ xqpr_quarks[j]=XrmStringToQuark(qt1_specifiers[i][j]);
+ xqpr_bindings[j]=qt1_bindings[i][j];
+ }
+ xqpr_quarks[j]=(XrmQuark)0;
+ type = XrmStringToRepresentation(t1_types[i]);
+ xrm_fill_value(value, t1_values[i]);
+ XCALL;
+ if(xrm_check_entry(xqpr_database,
+ t1_fspecs[i], t1_fclasses[i],
+ t1_types[i], t1_values[i])) {
+ FAIL;
+ } else
+ CHECK;
+ }
+
+#ifdef TESTING
+ XrmPutFileDatabase(xqpr_database, "xqpr_one");
+#endif
+
+ CHECKPASS(1+XRM_T1_TESTS);
+
+ XrmDestroyDatabase(xqpr_database);
+
+>>ASSERTION Good A
+When the
+.A database
+contains an entry for the resource name specified by
+.A bindings
+and
+.A quarks ,
+then a call to xname replaces the resource value in the
+.A database
+with
+.A value ,
+and the resource type with
+.A type .
+>>STRATEGY
+Create an empty test database.
+Call xname to add a database entry.
+Call xname to replace a database entry.
+Verify the database entry was updated as expected.
+>>CODE
+ int i,j;
+
+/* Create an empty test database. */
+ xqpr_database = xrm_create_database("");
+ if (xqpr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add a database entry. */
+/* Call xname to replace a database entry. */
+ for(i=0; i<2; i++) {
+ for(j=0; qt2_specifier[j] != (char *)NULL; j++) {
+ xqpr_quarks[j]=XrmStringToQuark(qt2_specifier[j]);
+ xqpr_bindings[j]=qt2_bindings[j];
+ }
+ xqpr_quarks[j]=(XrmQuark)0;
+ type = XrmStringToRepresentation(t2_types[i]);
+ xrm_fill_value(value, t2_values[i]);
+ XCALL;
+ CHECK;
+ }
+
+/* Verify the database entry was updated as expected. */
+ if(xrm_check_entry(xqpr_database,
+ t2_fullspec, t2_fullclass,
+ t2_types[1], t2_values[1])) {
+ FAIL;
+ report("%s did not update the database contents as expected.",
+ TestName);
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xqpr_database, "xqpr_two");
+#endif
+
+ XrmDestroyDatabase(xqpr_database);
+
+>>ASSERTION Good A
+When
+.A database
+is NULL, then a call to xname
+creates a new database,
+adds a resource
+specified by
+.A bindings
+and
+.A quarks
+with the specified
+.A value
+to the database
+with a
+.A type
+representation type, and returns a pointer to the database in
+.A database .
+>>STRATEGY
+Call xname to add data to a NULL database.
+Verify that the database was created, and the data was added as expected.
+>>CODE
+int j;
+
+/* Call xname to add data to a NULL database. */
+ xqpr_database = (XrmDatabase)NULL;
+ for(j=0; qt2_specifier[j] != (char *)NULL; j++) {
+ xqpr_quarks[j]=XrmStringToQuark(qt2_specifier[j]);
+ xqpr_bindings[j]=qt2_bindings[j];
+ }
+ xqpr_quarks[j]=(XrmQuark)0;
+
+ type = XrmStringToRepresentation(t2_types[0]);
+ xrm_fill_value(value, t2_values[0]);
+ XCALL;
+
+/* Verify that the database was created, and the data was added as expected. */
+ if (xqpr_database== (XrmDatabase)NULL) {
+ FAIL;
+ report("%s did not create a new database when called with",
+ TestName);
+ report("*database=(XrmDatabase)NULL");
+ } else {
+ CHECK;
+ if(xrm_check_entry(xqpr_database,
+ t2_fullspec, t2_fullclass,
+ t2_types[0], t2_values[0])) {
+ FAIL;
+ report("%s did not add to the database as expected.",
+ TestName);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xqpr_database, "xqpr_three");
+#endif
+
+ XrmDestroyDatabase(xqpr_database);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmqptstrrs/rmqptstrrs.m b/xc/test/xsuite/xtest/tset/CH10/rmqptstrrs/rmqptstrrs.m
new file mode 100644
index 000000000..b97cb3537
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmqptstrrs/rmqptstrrs.m
@@ -0,0 +1,203 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmQPutStringResource CH10
+void
+
+XrmDatabase *database = &xqpsr_database;
+XrmBindingList bindings = xqpsr_bindings;
+XrmQuarkList quarks = xqpsr_quarks;
+char *value;
+>>SET startup rmstartup
+>>EXTERN
+static XrmDatabase xqpsr_database;
+static XrmBinding xqpsr_bindings[10];
+static XrmQuark xqpsr_quarks[10];
+
+>>INCLUDE ../rmptrsrc/common.mc
+>>ASSERTION Good A
+A call to xname adds a resource
+specified by
+.A bindings
+and
+.A quarks
+with the specified
+.A value
+to the specified
+.A database
+with a
+.M String
+representation type.
+>>STRATEGY
+Create an empty test database.
+Call xname to add database entries.
+Call XrmGetResource to verify the database entries were added.
+>>CODE
+int i,j;
+
+/* Create an empty test database. */
+ xqpsr_database = xrm_create_database("");
+ if (xqpsr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add database entries. */
+/* Call XrmGetResource to verify the database entries were added. */
+ for(i=0; i<XRM_T1_TESTS; i++) {
+ for(j=0; qt1_specifiers[i][j] != (char *)NULL; j++) {
+ xqpsr_quarks[j]=XrmStringToQuark(qt1_specifiers[i][j]);
+ xqpsr_bindings[j]=qt1_bindings[i][j];
+ }
+ xqpsr_quarks[j]=(XrmQuark)0;
+ value= t1_values[i];
+ XCALL;
+ if(xrm_check_entry(xqpsr_database,
+ t1_fspecs[i], t1_fclasses[i],
+ "String" , t1_values[i])) {
+ FAIL;
+ } else
+ CHECK;
+ }
+
+#ifdef TESTING
+ XrmPutFileDatabase(xqpsr_database, "xqpsr_one");
+#endif
+
+ CHECKPASS(1+XRM_T1_TESTS);
+
+ XrmDestroyDatabase(xqpsr_database);
+
+>>ASSERTION Good A
+When the
+.A database
+contains an entry for the resource name specified by
+.A bindings
+and
+.A quarks ,
+then a call to xname replaces the resource value in the
+.A database
+with
+.A value ,
+and the resource type
+with
+.M String .
+>>STRATEGY
+Create an empty test database.
+Call xname to add a database entry.
+Call xname to replace a database entry.
+Verify the database entry was updated as expected.
+>>CODE
+ int i,j;
+
+/* Create an empty test database. */
+ xqpsr_database = xrm_create_database("");
+ if (xqpsr_database = (XrmDatabase)NULL) {
+ delete("Could not create test database.");
+ return;
+ } else
+ CHECK;
+
+/* Call xname to add a database entry. */
+/* Call xname to replace a database entry. */
+ for(i=0; i<2; i++) {
+ for(j=0; qt2_specifier[j] != (char *)NULL; j++) {
+ xqpsr_quarks[j]=XrmStringToQuark(qt2_specifier[j]);
+ xqpsr_bindings[j]=qt2_bindings[j];
+ }
+ xqpsr_quarks[j]=(XrmQuark)0;
+ value=t2_values[i];
+ XCALL;
+ CHECK;
+ }
+
+/* Verify the database entry was updated as expected. */
+ if(xrm_check_entry(xqpsr_database,
+ t2_fullspec, t2_fullclass,
+ "String", t2_values[1])) {
+ FAIL;
+ report("%s did not update the database contents as expected.",
+ TestName);
+ } else
+ CHECK;
+
+ CHECKPASS(4);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xqpsr_database, "xqpsr_two");
+#endif
+
+ XrmDestroyDatabase(xqpsr_database);
+
+>>ASSERTION Good A
+When
+.A database
+is NULL, then a call to xname
+creates a new database,
+adds a resource
+specified by
+.A bindings
+and
+.A quarks
+with the specified
+.A value
+to the database
+with a
+.M String
+representation type, and returns a pointer to the database in
+.A database .
+>>STRATEGY
+Call xname to add data to a NULL database.
+Verify that the database was created, and the data was added as expected.
+>>CODE
+int j;
+
+/* Call xname to add data to a NULL database. */
+ xqpsr_database = (XrmDatabase)NULL;
+ for(j=0; qt2_specifier[j] != (char *)NULL; j++) {
+ xqpsr_quarks[j]=XrmStringToQuark(qt2_specifier[j]);
+ xqpsr_bindings[j]=qt2_bindings[j];
+ }
+ xqpsr_quarks[j]=(XrmQuark)0;
+ value=t2_values[0];
+ XCALL;
+
+/* Verify that the database was created, and the data was added as expected. */
+ if (xqpsr_database== (XrmDatabase)NULL) {
+ FAIL;
+ report("%s did not create a new database when called with",
+ TestName);
+ report("*database=(XrmDatabase)NULL");
+ } else {
+ CHECK;
+ if(xrm_check_entry(xqpsr_database,
+ t2_fullspec, t2_fullclass,
+ "String", t2_values[0])) {
+ FAIL;
+ report("%s did not add to the database as expected.",
+ TestName);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+
+#ifdef TESTING
+ XrmPutFileDatabase(xqpsr_database, "xqpsr_three");
+#endif
+
+ XrmDestroyDatabase(xqpsr_database);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmqrktstr/rmqrktstr.m b/xc/test/xsuite/xtest/tset/CH10/rmqrktstr/rmqrktstr.m
new file mode 100644
index 000000000..a557cacfd
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmqrktstr/rmqrktstr.m
@@ -0,0 +1,81 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmQuarkToString CH10
+char *
+
+XrmQuark quark;
+>>SET startup rmstartup
+>>ASSERTION Good A
+A call to xname returns a pointer to the string that corresponds to
+the
+.A quark .
+>>STRATEGY
+Call XrmStringToQuark to allocate a quark for a string.
+Call xname to obtain the representation for the quark.
+>>CODE
+char *s="qts_one";
+char *ret;
+
+/* Call XrmStringToQuark to allocate a quark for a string. */
+ quark = XrmStringToQuark( s );
+
+/* Call xname to obtain the representation for the quark. */
+ ret = XCALL;
+
+ if (ret==(char *)NULL || strcmp(s,ret)) {
+ FAIL;
+ report("%s did not return the representation for the quark.",
+ TestName);
+ report("Expected representation: %s", s);
+ report("Returned representation: %s",
+ (ret==(char *)NULL?"NULL pointer":ret));
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When no string exists for a
+.A quark ,
+then a call to xname returns
+.S NULL .
+>>STRATEGY
+Create a unique quark which has no string representation.
+Call xname to obtain the representation for the quark.
+Verify that a NULL pointer was returned.
+>>CODE
+char *ret;
+
+/* Create a unique quark which has no string representation. */
+ quark = XrmUniqueQuark();
+
+/* Call xname to obtain the representation for the quark. */
+ ret = XCALL;
+
+/* Verify that a NULL pointer was returned. */
+ if (ret != (char *)NULL) {
+ FAIL;
+ report("%s returned unexpected value with a quark with",
+ TestName);
+ report("no string representation.");
+ report("Expected value: NULL pointer");
+ report("Returned value: '%s'", ret);
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmstrtbndn/rmstrtbndn.m b/xc/test/xsuite/xtest/tset/CH10/rmstrtbndn/rmstrtbndn.m
new file mode 100644
index 000000000..40701c0a3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmstrtbndn/rmstrtbndn.m
@@ -0,0 +1,493 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmStringToBindingQuarkList CH10
+void
+
+char *string;
+XrmBindingList bindings_return = (XrmBindingList) xstbql_bret;
+XrmQuarkList quarks_return = (XrmQuarkList) xstbql_qret;
+>>SET startup rmstartup
+>>EXTERN
+#define XSTBQL_MAX_RETURN 10
+static XrmBinding xstbql_bret[XSTBQL_MAX_RETURN];
+static XrmQuark xstbql_qret[XSTBQL_MAX_RETURN];
+
+static char *xstbql_s1[]={
+ "xstbql_test",
+ "einse",
+ "zwei",
+ "drei",
+ "vier",
+ "funf",};
+
+static char *xstbql_s1prefix[]={
+ "*",
+ ".",
+ "*",
+ ".",
+ "*",
+ "."};
+
+static int xstbql_ns1=NELEM(xstbql_s1);
+
+static char *xstbql_s2[]={
+ "xstbql_test2",
+ "Binkleys",
+ "Dads",
+ "1972",
+ "Ford",
+ "Pinto"};
+
+static char *xstbql_s2sep[]={
+ "*",
+ ".",
+ "*",
+ "*",
+ ".",
+ ""};
+
+static int xstbql_ns2=NELEM(xstbql_s2);
+
+static char *xstbql_s4[]={
+ "xstbql_test2",
+ "hazel",
+ "wal",
+ "coco",
+ "pea"};
+
+static char *xstbql_s4prefix[]={
+ ".",
+ "*",
+ ".",
+ "*",
+ "."};
+
+static int xstbql_ns4=NELEM(xstbql_s4);
+
+
+static char *xstbql_s5[]={
+ "xstbql_test5.",
+ "Calvin*",
+ "Hobbes",
+ };
+static int xstbql_ns5=NELEM(xstbql_s5);
+
+static void
+xstbqlclear(value)
+XrmQuark value;
+{
+ int i;
+
+/* Clear the return arrays, to avoid rogue results. */
+ for(i=0; i<XSTBQL_MAX_RETURN; i++)
+ {
+ xstbql_qret[i]=value;
+ xstbql_bret[i]=XrmBindTightly; /* Have to use a value. */
+ }
+
+}
+
+
+static
+xstbqlname(value, ptr)
+XrmBinding value;
+char *ptr;
+{
+ if(value==XrmBindTightly) {
+ strcpy(ptr, "XrmBindTightly");
+ } else
+ if(value==XrmBindLoosely) {
+ strcpy(ptr, "XrmBindLoosely");
+ } else
+ sprintf(ptr, "UNKNOWN(%d)", (int)value);
+}
+
+>>ASSERTION Good A
+When
+.A string
+is a valid null-terminated resource name format string, then a call to xname
+returns a quark list in
+.A quarks_return
+corresponding to the components of
+.A string .
+>>STRATEGY
+Create the test string.
+Call xname to obtain the quark and binding lists.
+Verify that the quark list returned was as expected.
+>>CODE
+int t;
+char *buffer1;
+char *buffer2;
+
+ buffer1 = (char *)malloc( (size_t)256);
+ if (buffer1==(char *)NULL) {
+ delete("Could not malloc 256 bytes for buffer1.");
+ return;
+ } else
+ CHECK;
+
+ buffer2 = (char *)malloc( (size_t)4096);
+ if (buffer2==(char *)NULL) {
+ delete("Could not malloc 4096 bytes for buffer2.");
+ return;
+ } else
+ CHECK;
+
+ *buffer1='\0'; /* Make the buffers empty strings. */
+ *buffer2='\0';
+
+/* Create the test string. */
+ for(t=0; t<xstbql_ns1; t++) {
+ (void) strcat(buffer1, xstbql_s1prefix[t]);
+ (void) strcat(buffer1, xstbql_s1[t]);
+ }
+ trace("Testing with '%s'", buffer1);
+
+ xstbqlclear((XrmQuark)0);
+
+/* Call xname to obtain the quark and binding lists. */
+ string= buffer1;
+ XCALL;
+
+#ifdef TESTING
+ xstbql_qret[0]=0;
+ xstbql_qret[1]=XrmStringToQuark("TESTING");
+#endif
+
+/* Verify that the quark list returned was as expected. */
+ for(t=0; t<xstbql_ns1; t++) {
+ char *ts;
+
+ ts = XrmQuarkToString( xstbql_qret[t] );
+ if (ts == (char *)NULL) {
+ FAIL;
+ report("Quark array[%d]=%d. Represents: NO STRING (expecting '%s')",
+ t, xstbql_qret[t], xstbql_s1[t]);
+ strcat(buffer2,"<NO STRING>");
+ } else
+ {
+ if(strcmp(xstbql_s1[t], ts)) {
+ FAIL;
+ report("Quark array[%d]=%d. Represents: '%s' (expecting '%s')",
+ t, xstbql_qret[t], ts, xstbql_s1[t]);
+ } else {
+ CHECK;
+ trace("Quark array[%d]=%d. Represents: '%s' as expected.",
+ t, xstbql_qret[t], ts );
+ }
+ (void) strcat(buffer2, ts);
+ }
+ (void) strcat(buffer2, " ");
+ }
+
+ if (fail) {
+ report("%s did not split the string into the quarks as expected",
+ TestName);
+ report("String passed to %s: '%s'", TestName, buffer1);
+ report("Quark array represents: %s", buffer2);
+ } else
+ CHECK;
+
+ CHECKPASS(2+xstbql_ns1+1);
+ free(buffer1);
+ free(buffer2);
+
+>>ASSERTION Good A
+>># Two assertions for "strings are separeted by periods & asterisks"
+On a call to xname, the
+.A string
+is separated into components according to the
+positions of periods and asterisks.
+>>STRATEGY
+Create the test string.
+Call xname to obtain quark and binding lists.
+Verify that the quark list returned was as expected.
+>>CODE
+int t;
+char *buffer1;
+char *buffer2;
+
+ buffer1 = (char *)malloc( (size_t)256);
+ if (buffer1==(char *)NULL) {
+ delete("Could not malloc 256 bytes for buffer1.");
+ return;
+ } else
+ CHECK;
+
+ buffer2 = (char *)malloc( (size_t)4096);
+ if (buffer2==(char *)NULL) {
+ delete("Could not malloc 4096 bytes for buffer2.");
+ return;
+ } else
+ CHECK;
+
+ *buffer1='\0'; /* Make the buffers empty strings. */
+ *buffer2='\0';
+
+/* Create the test string. */
+ for(t=0; t<xstbql_ns2; t++) {
+ (void) strcat(buffer1, xstbql_s2[t]);
+ (void) strcat(buffer1, xstbql_s2sep[t]);
+ }
+ trace("Testing with '%s'", buffer1);
+
+ xstbqlclear((XrmQuark)0);
+
+/* Call xname to obtain the quark and binding list. */
+ string= buffer1;
+ XCALL;
+
+#ifdef TESTING
+ xstbql_qret[0]=0;
+ xstbql_qret[1]=XrmStringToQuark("TESTING");
+#endif
+
+/* Verify that the quark list returned was as expected. */
+ for(t=0; t<xstbql_ns2; t++) {
+ char *ts;
+
+ ts = XrmQuarkToString( xstbql_qret[t] );
+ if (ts == (char *)NULL) {
+ FAIL;
+ report("Quark array[%d]=%d. Represents: NO STRING (expecting '%s')",
+ t, xstbql_qret[t], xstbql_s2[t]);
+ strcat(buffer2,"<NO STRING>");
+ } else
+ {
+ if(strcmp(xstbql_s2[t], ts)) {
+ FAIL;
+ report("Quark array[%d]=%d. Represents: '%s' (expecting '%s')",
+ t, xstbql_qret[t], ts, xstbql_s2[t]);
+ } else {
+ CHECK;
+ trace("Quark array[%d]=%d. Represents: '%s' as expected.",
+ t, xstbql_qret[t], ts );
+ }
+ (void) strcat(buffer2, ts);
+ }
+ (void) strcat(buffer2, " ");
+ }
+
+ if (fail) {
+ report("%s did not split the string into the quarks as expected",
+ TestName);
+ report("String passed to %s: '%s'", TestName, buffer1);
+ report("Quark array represents: '%s'", buffer2);
+ } else
+ CHECK;
+
+ CHECKPASS(2+xstbql_ns2+1);
+ free(buffer1);
+ free(buffer2);
+
+>>ASSERTION Good A
+When
+.A string
+does not start with a period or asterisk, then a leading period is assumed.
+>>STRATEGY
+Call xname to obtain quark and binding lists.
+Verify that the binding was correct .
+>>CODE
+char ts[64];
+
+/* Call xname to obtain quark and binding lists. */
+ string = "xstbql_test3";
+ XCALL;
+
+/* Verify that the binding was correct. */
+ if ( xstbql_bret[0] != XrmBindTightly ) {
+ FAIL;
+ xstbqlname(xstbql_bret[0], ts);
+ report("%s did not assume a leading period", TestName);
+ report("Returned %s", ts);
+ report("Expected XrmBindTightly");
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When
+.A string
+is a valid resource name format string, then a call to xname
+returns a binding list in
+.S bindings_return
+corresponding to the components of
+.A string ,
+with components of
+.A string
+starting with an asterisk set to
+.M XrmBindLoosely
+and
+other components set to
+.M XrmBindTightly .
+>>STRATEGY
+Create the test string.
+Call xname to obtain the quark and binding lists.
+Verify that the binding list returned was as expected.
+>>CODE
+int t;
+char *buffer1;
+char *buffer2, *buffer3;
+
+ buffer1 = (char *)malloc( (size_t)256);
+ if (buffer1==(char *)NULL) {
+ delete("Could not malloc 256 bytes for buffer1.");
+ return;
+ } else
+ CHECK;
+
+ buffer2 = (char *)malloc( (size_t)1024);
+ if (buffer2==(char *)NULL) {
+ delete("Could not malloc 1024 bytes for buffer2.");
+ return;
+ } else
+ CHECK;
+
+ buffer3 = (char *)malloc( (size_t)1024);
+ if (buffer3==(char *)NULL) {
+ delete("Could not malloc 1024 bytes for buffer3.");
+ return;
+ } else
+ CHECK;
+
+ *buffer1='\0'; /* Make the buffers empty strings. */
+ *buffer2='\0';
+ *buffer3='\0';
+
+/* Create the test string. */
+ for(t=0; t<xstbql_ns4; t++) {
+ (void) strcat(buffer1, xstbql_s4prefix[t]);
+ (void) strcat(buffer1, xstbql_s4[t]);
+ }
+ trace("Testing with '%s'", buffer1);
+
+ xstbqlclear((XrmQuark)0);
+
+/* Call xname to obtain the quark and binding lists. */
+ string= buffer1;
+ XCALL;
+
+#ifdef TESTING
+ xstbql_bret[0]=(XrmBinding) -256;
+#endif
+
+/* Verify that the binding list returned was as expected. */
+ for(t=0; t<xstbql_ns4; t++) {
+ char retstr[64], expstr[64];
+ XrmBinding expect;
+
+ expect = *(xstbql_s4prefix[t])=='*'? XrmBindLoosely:XrmBindTightly;
+
+ xstbqlname(expect, expstr);
+ xstbqlname(xstbql_bret[t], retstr);
+
+ if (xstbql_bret[t] != expect) {
+ FAIL;
+ report("Binding array[%d]=%s. Expecting %s",
+ t, retstr, expstr);
+ } else {
+ CHECK;
+ trace("Binding array[%d]=%s as expected.",
+ t, retstr);
+ }
+
+ (void) strcat(buffer2, expstr);
+ (void) strcat(buffer2, " ");
+
+ (void) strcat(buffer3, retstr);
+ (void) strcat(buffer3, " ");
+ }
+
+ if (fail) {
+ report("%s did not split the string into the bindings as expected",
+ TestName);
+ report("String passed to %s: '%s'", TestName, buffer1);
+ report("Expected bindings: %s", buffer2);
+ report("Returned bindings: %s", buffer3);
+ } else
+ CHECK;
+
+ CHECKPASS(3+xstbql_ns4+1);
+ free(buffer1);
+ free(buffer2);
+ free(buffer3);
+
+>>ASSERTION Good A
+On a call to xname, the
+.A quarks_return
+list is terminated with a zero.
+>>STRATEGY
+Create the test string.
+Set return buffer with unique quark value.
+Call xname to obtain the quark and binding lists.
+Verify that the quark list was zero terminated.
+>>CODE
+char *buffer1;
+XrmQuark unq;
+int t;
+
+ buffer1 = (char *)malloc( (size_t)256);
+ if (buffer1==(char *)NULL) {
+ delete("Could not malloc 256 bytes for buffer1.");
+ return;
+ } else
+ CHECK;
+
+ *buffer1='\0';
+
+/* Create the test string. */
+ for(t=0; t<xstbql_ns5; t++) {
+ (void) strcat(buffer1, xstbql_s5[t]);
+ }
+ trace("Testing with '%s'", buffer1);
+
+/* Set return buffer with unique quark value. */
+ unq=XrmUniqueQuark();
+ xstbqlclear(unq);
+
+/* Call xname to obtain the quark and binding lists. */
+ string= buffer1;
+ XCALL;
+
+/* Verify that the quark list was zero terminated. */
+ t=0;
+ while(t<XSTBQL_MAX_RETURN
+ && xstbql_qret[t] != unq
+ && xstbql_qret[t] != (XrmQuark)0) {
+ t++;
+ }
+
+ if (t==XSTBQL_MAX_RETURN) {
+ int i;
+ FAIL;
+ report("%s did not return the quark array as expected.",
+ TestName);
+ report("At least %d quarks returned.", XSTBQL_MAX_RETURN);
+ for (i=0; i<XSTBQL_MAX_RETURN; i++)
+ report("Quark array[%d]=%d", i, xstbql_qret[i]);
+ } else {
+ if (xstbql_qret[t] == unq) {
+ FAIL;
+ report("%s did not terminate the array with a zero.",
+ TestName);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+ free(buffer1);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmstrtqrk/rmstrtqrk.m b/xc/test/xsuite/xtest/tset/CH10/rmstrtqrk/rmstrtqrk.m
new file mode 100644
index 000000000..6b0ecb7d6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmstrtqrk/rmstrtqrk.m
@@ -0,0 +1,89 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmStringToQuark CH10
+XrmQuark
+
+char *string;
+>>SET startup rmstartup
+>>ASSERTION Good A
+A call to xname returns a quark allocated to represent
+.A string .
+>>STRATEGY
+Call xname to allocate a quark for a string.
+Call XrmQuarkToString to obtain representation for the quark.
+Verify the quark represents the string.
+>>CODE
+char *s = "stq_one";
+XrmQuark ret;
+char *rep;
+
+/* Call xname to allocate a quark for a string. */
+ string = s;
+ ret = XCALL;
+
+/* Call XrmQuarkToString to obtain representation for the quark. */
+ rep = XrmQuarkToString(ret);
+
+#ifdef TESTING
+ rep = "barfed";
+#endif
+
+/* Verify the quark represents the string. */
+ if((rep==(char *)NULL) || strcmp(s,rep)) {
+ FAIL;
+ report("%s did not allocate a quark representing the string",
+ TestName);
+ report("Returned quark was: %d", (int)ret);
+ report("Expected representation: %s", s);
+ report("Returned representation: %s",
+ (rep==(char *)NULL?"NULL pointer":rep));
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Good A
+When a quark already exists for
+.A string ,
+then a call to xname returns that quark.
+>>STRATEGY
+Call xname to allocate a quark for a string.
+Call xname to allocate a quark for the string again.
+Verify that the quarks were the same.
+>>CODE
+char *s = "stq_two";
+XrmQuark ret1, ret2;
+
+/* Call xname to allocate a quark for a string. */
+ string = s;
+ ret1 = XCALL;
+
+/* Call xname to allocate a quark for the string again. */
+ ret2 = XCALL;
+
+/* Verify that the quarks were the same. */
+ if (ret1 != ret2) {
+ FAIL;
+ report("%s did not return the same quark to represent",
+ TestName);
+ report("the same string.");
+ report("1st quark return: %d", (int) ret1);
+ report("2nd quark return: %d", (int) ret2);
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmstrtqrkl/rmstrtqrkl.m b/xc/test/xsuite/xtest/tset/CH10/rmstrtqrkl/rmstrtqrkl.m
new file mode 100644
index 000000000..4ccea2025
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmstrtqrkl/rmstrtqrkl.m
@@ -0,0 +1,316 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmStringToQuarkList CH10
+void
+
+char *string;
+XrmQuarkList quarks_return = (XrmQuarkList)xstql_ret;
+>>SET startup rmstartup
+>>EXTERN
+#define XSTQL_MAX_RETURN 10
+static XrmQuark xstql_ret[XSTQL_MAX_RETURN];
+
+static char *xstql_s1[]={
+ "xstql_test",
+ "ena",
+ "deo",
+ "tria"};
+
+static char *xstql_s1sep[]={
+ ".",
+ ".",
+ ".",
+ ""};
+
+static int xstql_ns1=NELEM(xstql_s1);
+
+static char *xstql_s2[]={
+ "XStql_test",
+ "une",
+ "deux",
+ "trois",
+ "erm",
+ "five"};
+static char *xstql_s2sep[]={
+ "*",
+ ".",
+ "*",
+ "*",
+ ".",
+ ""};
+static int xstql_ns2=NELEM(xstql_s2);
+
+static char *xstql_s3[]={
+ "XStqL_test.",
+ "jack.",
+ "and.",
+ "jill"};
+static int xstql_ns3=NELEM(xstql_s3);
+
+static void
+xstqlclear(value)
+XrmQuark value;
+{
+ int i;
+
+/* Clear the return array, to avoid rogue results. */
+ for(i=0; i<XSTQL_MAX_RETURN; i++)
+ xstql_ret[i]=value;
+
+}
+
+>>ASSERTION Good A
+When
+.A string
+is a valid null-terminated resource name format string, then a call to xname
+returns a quark list in
+.A quarks_return
+corresponding to the components of
+.A string .
+>>STRATEGY
+Create the test string.
+Call xname to obtain quark list.
+Verify that the quark list returned was as expected.
+>>CODE
+int t;
+char *buffer1;
+char *buffer2;
+
+ buffer1 = (char *)malloc( (size_t)256);
+ if (buffer1==(char *)NULL) {
+ delete("Could not malloc 256 bytes for buffer1.");
+ return;
+ } else
+ CHECK;
+
+ buffer2 = (char *)malloc( (size_t)4096);
+ if (buffer2==(char *)NULL) {
+ delete("Could not malloc 4096 bytes for buffer2.");
+ return;
+ } else
+ CHECK;
+
+ *buffer1='\0'; /* Make the buffers empty strings. */
+ *buffer2='\0';
+
+/* Create the test string. */
+ for(t=0; t<xstql_ns1; t++) {
+ (void) strcat(buffer1, xstql_s1[t]);
+ (void) strcat(buffer1, xstql_s1sep[t]);
+ }
+ trace("Testing with '%s'", buffer1);
+
+ xstqlclear((XrmQuark)0);
+
+/* Call xname to obtain quark list. */
+ string= buffer1;
+ XCALL;
+
+#ifdef TESTING
+ xstql_ret[0]=0;
+ xstql_ret[1]=XrmStringToQuark("TESTING");
+#endif
+
+/* Verify that the quark list returned was as expected. */
+ for(t=0; t<xstql_ns1; t++) {
+ char *ts;
+
+ ts = XrmQuarkToString( xstql_ret[t] );
+ if (ts == (char *)NULL) {
+ FAIL;
+ report("Quark array[%d]=%d. Represents: NO STRING (expecting '%s')",
+ t, xstql_ret[t], xstql_s1[t]);
+ strcat(buffer2,"<NO STRING>");
+ } else
+ {
+ if(strcmp(xstql_s1[t], ts)) {
+ FAIL;
+ report("Quark array[%d]=%d. Represents: '%s' (expecting '%s')",
+ t, xstql_ret[t], ts, xstql_s1[t]);
+ } else {
+ CHECK;
+ trace("Quark array[%d]=%d. Represents: '%s' as expected.",
+ t, xstql_ret[t], ts );
+ }
+ (void) strcat(buffer2, ts);
+ }
+ (void) strcat(buffer2, " ");
+ }
+
+ if (fail) {
+ report("%s did not split the string into the quarks as expected",
+ TestName);
+ report("String passed to %s: '%s'", TestName, buffer1);
+ report("Quark array represents: %s", buffer2);
+ } else
+ CHECK;
+
+ CHECKPASS(2+xstql_ns1+1);
+ free(buffer1);
+ free(buffer2);
+
+>>ASSERTION Good A
+On a call to xname, the
+.A string
+is separated into components according to the
+positions of periods and asterisks.
+>>STRATEGY
+Create the test string.
+Call xname to obtain quark list.
+Verify that the quark list returned was as expected.
+>>CODE
+int t;
+char *buffer1;
+char *buffer2;
+
+ buffer1 = (char *)malloc( (size_t)256);
+ if (buffer1==(char *)NULL) {
+ delete("Could not malloc 256 bytes for buffer1.");
+ return;
+ } else
+ CHECK;
+
+ buffer2 = (char *)malloc( (size_t)4096);
+ if (buffer2==(char *)NULL) {
+ delete("Could not malloc 4096 bytes for buffer2.");
+ return;
+ } else
+ CHECK;
+
+ *buffer1='\0'; /* Make the buffers empty strings. */
+ *buffer2='\0';
+
+/* Create the test string. */
+ for(t=0; t<xstql_ns2; t++) {
+ (void) strcat(buffer1, xstql_s2[t]);
+ (void) strcat(buffer1, xstql_s2sep[t]);
+ }
+ trace("Testing with '%s'", buffer1);
+
+ xstqlclear((XrmQuark)0);
+
+/* Call xname to obtain quark list. */
+ string= buffer1;
+ XCALL;
+
+#ifdef TESTING
+ xstql_ret[0]=0;
+ xstql_ret[1]=XrmStringToQuark("TESTING");
+#endif
+
+/* Verify that the quark list returned was as expected. */
+ for(t=0; t<xstql_ns2; t++) {
+ char *ts;
+
+ ts = XrmQuarkToString( xstql_ret[t] );
+ if (ts == (char *)NULL) {
+ FAIL;
+ report("Quark array[%d]=%d. Represents: NO STRING (expecting '%s')",
+ t, xstql_ret[t], xstql_s2[t]);
+ strcat(buffer2,"<NO STRING>");
+ } else
+ {
+ if(strcmp(xstql_s2[t], ts)) {
+ FAIL;
+ report("Quark array[%d]=%d. Represents: '%s' (expecting '%s')",
+ t, xstql_ret[t], ts, xstql_s2[t]);
+ } else {
+ CHECK;
+ trace("Quark array[%d]=%d. Represents: '%s' as expected.",
+ t, xstql_ret[t], ts );
+ }
+ (void) strcat(buffer2, ts);
+ }
+ (void) strcat(buffer2, " ");
+ }
+
+ if (fail) {
+ report("%s did not split the string into the quarks as expected",
+ TestName);
+ report("String passed to %s: '%s'", TestName, buffer1);
+ report("Quark array represents: '%s'", buffer2);
+ } else
+ CHECK;
+
+ CHECKPASS(2+xstql_ns2+1);
+ free(buffer1);
+ free(buffer2);
+
+>>ASSERTION Good A
+On a call to xname, the
+.A quarks_return
+list is terminated with a zero.
+>>STRATEGY
+Create the test string.
+Set return buffer with unique quark value.
+Call xname to obtain quark list.
+Verify that the quark list was zero terminated.
+>>CODE
+char *buffer1;
+XrmQuark unq;
+int t;
+
+ buffer1 = (char *)malloc( (size_t)256);
+ if (buffer1==(char *)NULL) {
+ delete("Could not malloc 256 bytes for buffer1.");
+ return;
+ } else
+ CHECK;
+
+ *buffer1='\0';
+
+/* Create the test string. */
+ for(t=0; t<xstql_ns3; t++) {
+ (void) strcat(buffer1, xstql_s3[t]);
+ }
+ trace("Testing with '%s'", buffer1);
+
+/* Set return buffer with unique quark value. */
+ unq=XrmUniqueQuark();
+ xstqlclear(unq);
+
+/* Call xname to obtain quark list. */
+ string= buffer1;
+ XCALL;
+
+/* Verify that the quark list was zero terminated. */
+ t=0;
+ while(t<XSTQL_MAX_RETURN
+ && xstql_ret[t] != unq
+ && xstql_ret[t] != (XrmQuark)0) {
+ t++;
+ }
+
+ if (t==XSTQL_MAX_RETURN) {
+ int i;
+ FAIL;
+ report("%s did not return the quark array as expected.",
+ TestName);
+ report("At least %d quarks returned.", XSTQL_MAX_RETURN);
+ for (i=0; i<XSTQL_MAX_RETURN; i++)
+ report("Quark array[%d]=%d", i, xstql_ret[i]);
+ } else {
+ if (xstql_ret[t] == unq) {
+ FAIL;
+ report("%s did not terminate the array with a zero.",
+ TestName);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
+ free(buffer1);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rmunqqrk/rmunqqrk.m b/xc/test/xsuite/xtest/tset/CH10/rmunqqrk/rmunqqrk.m
new file mode 100644
index 000000000..6959746d9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rmunqqrk/rmunqqrk.m
@@ -0,0 +1,60 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XrmUniqueQuark CH10
+XrmQuark
+
+>>SET startup rmstartup
+>>ASSERTION Good A
+A call to xname returns a quark that does not represent any string
+known to the resource manager.
+>>STRATEGY
+Call xname to obtain a unique quark.
+Verify the quark does not represent a string in the resource manager.
+Call xname to obtain another quark.
+Verify this is a distinct quark.
+>>CODE
+XrmQuark ret1, ret2;
+char *str;
+
+/* Call xname to obtain a unique quark. */
+ ret1 = XCALL;
+
+/* Verify the quark does not represent a string in the resource manager. */
+ str = XrmQuarkToString( ret1 );
+ if (str != (char *)NULL) {
+ FAIL;
+ report("%s did not return a quark not representing a string.",
+ TestName);
+ report("XrmQuarkToString Expected: NULL pointer");
+ report("XrmQuarkToString Returned: '%s'", str);
+ } else
+ CHECK;
+
+/* Call xname to obtain another quark. */
+ ret2 = XCALL;
+
+/* Verify this is a distinct quark. */
+ if (ret1 == ret2) {
+ FAIL;
+ report("%s returned indistinct quarks on consecutive calls.",
+ TestName);
+ report("1st quark: %d", (int)ret1);
+ report("2nd quark: %d", (int)ret2);
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rsrcmngrst/rsrcmngrst.m b/xc/test/xsuite/xtest/tset/CH10/rsrcmngrst/rsrcmngrst.m
new file mode 100644
index 000000000..68d5517e0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rsrcmngrst/rsrcmngrst.m
@@ -0,0 +1,58 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XResourceManagerString CH10
+char *
+XResourceManagerString(display)
+Display *display = Dsp;
+>>EXTERN
+#include "Xatom.h"
+>>ASSERTION Good A
+A call to xname returns the value of the RESOURCE_MANAGER
+property on the root window of screen zero at the time
+.A display
+was opened.
+>>STRATEGY
+Set the value of the RESOURCE_MANAGER property to "XTest.test.resource:value" using XChangeProperty.
+Open display using XOpenDisplay.
+Set the value of the RESOURCE_MANAGER property to "XTest.changed.resource:value" using XChangeProperty.
+Obtain the value of the RESOURCE_MANAGER property at the time display was opened using xname.
+Verify that the call returned "XTest.test.resource:value".
+>>CODE
+char *pval1 = "XTest.test.resource:value";
+char *pval2 = "XTest.changed.resource:value";
+char *res;
+
+ XChangeProperty (Dsp, RootWindow(Dsp, 0), XA_RESOURCE_MANAGER, XA_STRING, 8, PropModeReplace, (unsigned char *)pval1, 1+strlen(pval1));
+ XSync(Dsp, False);
+ display = opendisplay();
+ XChangeProperty (display, RootWindow(display, 0), XA_RESOURCE_MANAGER, XA_STRING, 8, PropModeReplace, (unsigned char *)pval2, 1+strlen(pval2));
+
+ res = XCALL;
+
+ if( res == (char *) NULL) {
+ report("%s() returned NULL.", TestName);
+ FAIL;
+ } else {
+ CHECK;
+ if(strcmp(res, pval1) != 0) {
+ report("%s() returned \"%s\" instead of \"%s\".", TestName, res, pval1);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/CH10/rttbffrs/rttbffrs.m b/xc/test/xsuite/xtest/tset/CH10/rttbffrs/rttbffrs.m
new file mode 100644
index 000000000..2ca03166f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/rttbffrs/rttbffrs.m
@@ -0,0 +1,118 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XRotateBuffers CH10
+
+XRotateBuffers(display, rotate);
+Display *display = Dsp;
+int rotate;
+>>EXTERN
+#include "Xatom.h"
+>>ASSERTION Good A
+A call to xname rotates the cut buffers by
+.A rotate
+modulo 8.
+>>STRATEGY
+For cut buffers 0..7:
+ Set the buffer to contain distinct data.
+Rotate the buffers by -51 using xname.
+For i in 0..7:
+ Verify the data previously in buffer i is now in buffer (i+rotate) modulo 8.
+>>CODE
+char *bp;
+char *rbp;
+int nr;
+int len;
+int i;
+int j;
+struct bstrct {
+ char *data;
+ int len;
+} bfrs[8], *bptr;
+
+ for(i=0, bptr=bfrs; i<8; i++, bptr++) {
+
+ len = 1+i*123;
+ bptr->len = len;
+
+ if((bptr->data = (char *)malloc(len)) == (char *) NULL) {
+ delete("malloc() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ for(j=len, bp=bptr->data; j>0; *bp++ = (j) % (256 - i), j--);
+
+ XStoreBuffer(display, bptr->data, len, i);
+ }
+
+
+ rotate = -51;
+ XCALL;
+
+ for(i=0, bptr=bfrs; i<8; i++, bptr++) {
+
+ rbp = XFetchBuffer(display, &nr, (8 + i + (rotate % 8)) % 8);
+
+ if(rbp == (char *) NULL) {
+ delete("Buffer %d was not set.", i);
+ return;
+ } else {
+ CHECK;
+
+ if(bptr->len != nr) {
+ report("%s() did set buffer %d to contain %d bytes instead of %d.", TestName, i, nr, bptr->len);
+ FAIL;
+ } else {
+ CHECK;
+
+ if(memcmp(rbp, bptr->data, nr) != 0) {
+ report("%s() set buffer %d to contain the wrong data.", TestName, i);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ free(bptr->data);
+ XFree(rbp);
+ }
+ }
+
+ CHECKPASS(8 + 8 * 3);
+
+>>ASSERTION Bad A
+When any of the 8 cut buffers have not been created, then a
+.S BadMatch
+error occurs.
+>>STRATEGY
+For cut buffers 0..7:
+ Set the buffer to contain some data.
+Delete the property CUT_BUFFER4 from screen 0 of the display using XDeletePropery.
+Rotate the buffers by 1 using xname.
+Verify that a BadMatch error occurred.
+>>CODE BadMatch
+char *tstr = "XTest Multi buffer string";
+int len = 1 + strlen(tstr);
+int i;
+
+ for(i=0; i < 8; i++)
+ XStoreBuffer(display, tstr, len, i);
+
+ XDeleteProperty(display, RootWindow(display, 0), XA_CUT_BUFFER4);
+ rotate = 1;
+ XCALL;
+ if(geterr() == BadMatch)
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH10/sbimg/sbimg.m b/xc/test/xsuite/xtest/tset/CH10/sbimg/sbimg.m
new file mode 100644
index 000000000..304a1fe6b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/sbimg/sbimg.m
@@ -0,0 +1,181 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSubImage CH10
+XImage *
+XSunImage(ximage, x, y, subimage_width, subimage_height)
+XImage *ximage;
+int x;
+int y;
+unsigned int subimage_width;
+unsigned int subimage_height;
+>>EXTERN
+static int mpattern(display, d, w, h, dep)
+Display *display;
+Drawable d;
+unsigned int w;
+unsigned int h;
+int dep;
+{
+int i;
+int j;
+int mod;
+GC gc;
+unsigned long val;
+
+ gc = makegc(display, d);
+ mod = 1<<dep;
+ for(j=0; j<h; j++)
+ for(i=0; i<w; i++) {
+ val = (i + j) % mod;
+ XSetForeground(display, gc, val);
+ XDrawPoint(display, d, gc, i, j);
+ }
+}
+
+static int checksubimage(subim, x,y, w,h, dep)
+XImage *subim;
+int x;
+int y;
+unsigned int w;
+unsigned int h;
+int dep;
+{
+int i;
+int j;
+int a;
+int b;
+int mod;
+
+ mod = 1<<dep;
+ for(j=0, b=y; j<h; j++, b++)
+ for(i=0, a=x; i<w; i++, a++)
+ if(XGetPixel(subim, i,j) != (a+b) % mod) {
+ return(0);
+ }
+ return 1;
+}
+>>ASSERTION Good A
+When the rectangle specified by the
+.A x ,
+.A y ,
+.A subimage_width
+and
+.A subimage_height
+arguments is contained in the image
+.A ximage ,
+then a call to xname creates a copy of the subimage and
+returns a pointer to the newly created subimage.
+>>STRATEGY
+For all supported drawables types:
+ Create a drawable.
+ Initialise the drawable.
+ For XYPixmap and ZPixmap:
+ Create an image using XGetImage.
+ Obtain a subimage using xname.
+ Verify that the pixels in the subimage are correctly set using XGetPixel.
+>>CODE
+XImage *sxi;
+XVisualInfo *vi;
+int npix;
+unsigned int width;
+unsigned int height;
+Pixmap pm;
+Window win;
+int i;
+static int fmats[2] = { XYPixmap, ZPixmap };
+
+
+ for(resetvinf(VI_PIX); nextvinf(&vi);) {
+
+ pm = makepixm(Dsp, vi);
+ getsize(Dsp, pm, &width, &height);
+ width = width > 17 ? 17 : width;
+ height = height > 19 ? 19 : height;
+ x = 3;
+ y = 5;
+ subimage_width = width - 2*x;
+ subimage_height = height - 2*y;
+ mpattern(Dsp, pm, width, height, vi->depth);
+
+ for(i=0; i<2; i++) {
+ ximage = XGetImage(Dsp, pm, 0,0, width, height, AllPlanes, fmats[i]);
+
+ if(ximage == (XImage *) NULL) {
+ delete("XGetImage() returned NULL.");
+ fail++; /* Avoid path checking in CHECKPASS */
+ } else {
+ sxi = XCALL;
+ if(sxi == (XImage *) NULL) {
+ delete("%s() returned NULL.", TestName);
+ fail++; /* Avoid path checking */
+ } else {
+ if(checksubimage(sxi, x,y, subimage_width, subimage_height, vi->depth) == 0) {
+ report("Subimage structure was not correct.");
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyImage(sxi);
+ }
+
+ XDestroyImage(ximage);
+ }
+ }
+ }
+
+ npix = nvinf();
+
+ for(resetvinf(VI_WIN); nextvinf(&vi);) {
+
+ win = makewin(Dsp, vi);
+ getsize(Dsp, win, &width, &height);
+ width = width > 17 ? 17 : width;
+ height = height > 19 ? 19 : height;
+ x = 3;
+ y = 5;
+ subimage_width = width - 2*x;
+ subimage_height = height - 2*y;
+ mpattern(Dsp, win, width, height, vi->depth);
+
+ for(i=0; i<2; i++) {
+ ximage = XGetImage(Dsp, win, 0,0, width, height, AllPlanes, fmats[i]);
+ if(ximage == (XImage *) NULL) {
+ delete("XGetImage() returned NULL.");
+ fail++; /* Avoid path checking in CHECKPASS */
+ } else {
+
+ sxi = XCALL;
+ if(sxi == (XImage *) NULL) {
+ delete("%s() returned NULL.", TestName);
+ fail++; /* Avoid path checking */
+ } else {
+ if(checksubimage(sxi, x,y, subimage_width, subimage_height, vi->depth) == 0) {
+ report("Subimage structure was not correct.");
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyImage(sxi);
+ }
+
+ XDestroyImage(ximage);
+ }
+ }
+
+ }
+
+ CHECKPASS(2 * (npix + nvinf()));
diff --git a/xc/test/xsuite/xtest/tset/CH10/sbtrctrgn/sbtrctrgn.m b/xc/test/xsuite/xtest/tset/CH10/sbtrctrgn/sbtrctrgn.m
new file mode 100644
index 000000000..fa28b8e6f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/sbtrctrgn/sbtrctrgn.m
@@ -0,0 +1,84 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSubtractRegion CH10
+
+XSubtractRegion(sra, srb, dr_return)
+Region sra;
+Region srb;
+Region dr_return;
+>>ASSERTION Good A
+A call to xname subtracts the region
+.A srb
+from region
+.A sra
+and stores the result in region
+.A dr_return .
+>>STRATEGY
+Create a region using XCreateRegion.
+Set the region to a rectangle using XUnionRectWithRegion.
+Subtract an encompassing region from itself using xname.
+Verify that the result is the empty region using XEmptyRegion.
+Subtract an enclosed region from and encompassing one using xname.
+Verify that the result is not the empty region using XEmptyRegion.
+Combine this result with the enclosed region.
+Verify that the result is the original region.
+>>CODE
+Region R1;
+Region R2;
+Region Rres;
+static XRectangle rect = { -43, -54, 122, 23};
+static XRectangle rect2 = { -44, -55, 123, 24};
+
+ R1 = makeregion();
+ R2 = makeregion();
+ Rres = makeregion();
+
+ if(isdeleted()) return;
+
+ XUnionRectWithRegion(&rect, R1, R1);
+ XUnionRectWithRegion(&rect2, R2, R2);
+
+ sra = R1;
+ srb = R2;
+ dr_return = Rres;
+ XCALL;
+
+ if(XEmptyRegion(Rres) != True) {
+ report("%s() did not return the empty region.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ sra = R2;
+ srb = R1;
+ dr_return = Rres;
+ XCALL;
+
+ if(XEmptyRegion(Rres) == True) {
+ report("%s() returned the empty region.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ XXorRegion(R1,Rres, Rres);
+ if(XEqualRegion(Rres,R2) == False) {
+ report("%s() did not return expected region.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
diff --git a/xc/test/xsuite/xtest/tset/CH10/shrnkrgn/shrnkrgn.m b/xc/test/xsuite/xtest/tset/CH10/shrnkrgn/shrnkrgn.m
new file mode 100644
index 000000000..aeb7cf557
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/shrnkrgn/shrnkrgn.m
@@ -0,0 +1,225 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XShrinkRegion CH10
+
+XShrinkRegion(r, dx, dy)
+Region r;
+int dx;
+int dy;
+>>#
+>># COMMENT : I think there ought to be some sort of assertion about
+>># the Xlib's modification of a region's offsets to keep
+>># the center of the region in the same position.
+>># Cal.
+>>#
+>># REPLY: MIT asked us to reword the assertion, and I attempted to do
+>># this in a simple manner as below. I am sure I haven't covered
+>># your point fully, but since the assertions are now approved,
+>># we should test just these assertions.
+>># Dave
+>>#
+>># COMMENT : These new assertions prohibit the testing of enlargement of a region
+>># on one axis and contraction on the other.
+>># Cal.
+>>#
+>>ASSERTION Good A
+When
+.A dx
+and
+.A dy
+are zero, then a call to xname does not change
+the size of region
+.A r .
+>>STRATEGY
+Create two regions using XCreateRegion.
+Verify that the calls did not return NULL.
+Set the regions to the same rectangle using XUnionRectWithRegion.
+Shrink the first region with parameters dx = dy = 0.
+Verify that the two regions are identical using XEqualRegion.
+>>CODE
+Region R1;
+Region R2;
+static XRectangle rect = { 7,5, 23, 45};
+
+ if( ((R1 = XCreateRegion()) == (Region) NULL) ||
+ ((R2 = XCreateRegion()) == (Region) NULL) ){
+ delete("XCreateRegion() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ XUnionRectWithRegion(&rect, R1, R1);
+ XUnionRectWithRegion(&rect, R2, R2);
+
+ r = R1;
+ dx = dy = 0;
+ XCALL;
+
+ if( XEqualRegion(R1, R2) != True ) {
+ report("%s() changed a region when dx and dy were zero.", TestName);
+ FAIL;
+ } else
+ PASS;
+
+ XDestroyRegion(R1);
+ XDestroyRegion(R2);
+
+>>ASSERTION Good A
+When
+.A dx
+and
+.A dy
+are both positive, and a point x, y is outside region
+.A r ,
+then call to xname changes the size of the region
+.A r
+such that
+the point x, y remains outside region
+.A r ,
+and some point x1, y1 previously
+inside region
+.A r
+is now outside region
+.A r .
+>>STRATEGY
+Create regions R1, R2 and R3 using XCreateRegion.
+Verify that none of the calls returned NULL.
+Set region R1 to a rectangle using XUnionRectWithRegion.
+Copy region R1 to R2 using XUnionRegion.
+Shrink R2 using xname.
+Set R3 to the difference of the union and intersection of R1 and R2 using XXorRegion.
+Verify that R3 is not empty using XEmptyRegion.
+Set R3 to be the union of R2 and R3 using XUnionRegion.
+Verify that R3 is the same as R1 using XEqualRegion.
+>>CODE
+static XRectangle rect = { 5,7, 100, 200};
+Region R1;
+Region R2;
+Region R3;
+
+ R1 = XCreateRegion();
+ R2 = XCreateRegion();
+ R3 = XCreateRegion();
+
+ if( (R1 == (Region) NULL) || (R2 == (Region) NULL) || R3 == (Region) NULL) {
+ delete("XCreateRegion() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ XUnionRectWithRegion(&rect, R1, R1);
+ XUnionRegion(R1, R1, R2);
+
+ dx = dy = 1;
+ r = R2;
+ XCALL;
+
+ XXorRegion(R1, R2, R3);
+
+ if(XEmptyRegion(R3) == True) {
+ report("%s() did not change the size of the source region.", TestName);
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ XUnionRegion(R2, R3, R3);
+
+ if( XEqualRegion(R1, R3) == False) {
+ report("%s() did not produce a shrunk region contained in its source.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyRegion(R1);
+ XDestroyRegion(R2);
+ XDestroyRegion(R3);
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When
+.A dx
+and
+.A dy
+are both negative, and a point x, y is in region
+.A r ,
+then call to xname changes the size of the region
+.A r
+such that
+the point x, y remains in region
+.A r ,
+and some point x1, y1 previously
+outside region
+.A r
+is now inside region
+.A r .
+>>STRATEGY
+Create regions R1, R2 and R3 using XCreateRegion.
+Verify that none of the calls returned NULL.
+Set region R1 to a rectangle using XUnionRectWithRegion.
+Copy region R1 to R2 using XUnionRegion.
+Enlarge R2 using xname.
+Set R3 to the difference of the union and intersection of R1 and R2 using XXorRegion.
+Verify that R3 is not empty using XEmptyRegion.
+Set R3 to be the union of R2 and R3 using XUnionRegion.
+Verify that R3 is the same as R2 using XEqualRegion.
+>>CODE
+static XRectangle rect = { 5,7, 100, 200};
+Region R1;
+Region R2;
+Region R3;
+
+ R1 = XCreateRegion();
+ R2 = XCreateRegion();
+ R3 = XCreateRegion();
+
+ if( (R1 == (Region) NULL) || (R2 == (Region) NULL) || R3 == (Region) NULL) {
+ delete("XCreateRegion() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ XUnionRectWithRegion(&rect, R1, R1);
+ XUnionRegion(R1, R1, R2);
+
+ dx = dy = -1;
+ r = R2;
+ XCALL;
+
+ XXorRegion(R1, R2, R3);
+
+ if(XEmptyRegion(R3) == True) {
+ report("%s() did not change the size of the source region.", TestName);
+ FAIL;
+ return;
+ } else
+ CHECK;
+
+ XUnionRegion(R2, R3, R3);
+
+ if( XEqualRegion(R2, R3) == False) {
+ report("%s() did not produce an enlarged region containing its source.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ XDestroyRegion(R1);
+ XDestroyRegion(R2);
+ XDestroyRegion(R3);
+
+ CHECKPASS(3);
diff --git a/xc/test/xsuite/xtest/tset/CH10/strbffr/strbffr.m b/xc/test/xsuite/xtest/tset/CH10/strbffr/strbffr.m
new file mode 100644
index 000000000..b2c5581ad
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/strbffr/strbffr.m
@@ -0,0 +1,101 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XStoreBuffer CH10
+
+XStoreBuffer(display, bytes, nbytes, buffer)
+Display *display = Dsp;
+char *bytes;
+int nbytes;
+int buffer;
+>>ASSERTION Good A
+A call to xname stores
+.A nbytes
+bytes from the
+.A bytes
+argument into the cut buffer specified by the
+.A buffer
+argument.
+>>STRATEGY
+For each cut buffer 0 to 7:
+ Store different data into each buffer using xname.
+For each cut buffer 0 to 7:
+ Obtain the contents of the buffer using XFetchBuffer.
+ Verify that the data is correct.
+>>CODE
+char *bp;
+char *rbp;
+int nr;
+int len;
+int i;
+int j;
+struct bstrct {
+ char *data;
+ int len;
+} bfrs[8], *bptr;
+
+ for(i=0, bptr=bfrs; i<8; i++, bptr++) {
+
+ len = 1+i*123;
+ bptr->len = len;
+
+ if((bptr->data = (char*)malloc(len)) == (char *) NULL) {
+ delete("malloc() returned NULL.");
+ return;
+ } else
+ CHECK;
+
+ for(j=len, bp=bptr->data; j>0; *bp++ = (j) % (256 - i), j--);
+
+ bytes = bptr->data;
+ nbytes = len;
+ buffer = i;
+ XCALL;
+ }
+
+ for(i=0, bptr=bfrs; i<8; i++, bptr++) {
+
+ rbp = XFetchBuffer(display, &nr, i);
+
+ if(rbp == (char *) NULL) {
+ report("%s() did not set buffer %d to contain any data.", TestName, i);
+ FAIL;
+ } else {
+ CHECK;
+
+ if(bptr->len != nr) {
+ report("%s() set buffer %d to contain %d bytes instead of %d.", TestName, i, nr, bptr->len);
+ FAIL;
+ } else {
+ CHECK;
+
+ if(memcmp(rbp, bptr->data, nr) != 0) {
+ report("%s() set buffer %d to contain the wrong data.", TestName, i);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ free(bptr->data);
+ XFree(rbp);
+ }
+ }
+
+
+ CHECKPASS(8 + 8 * (3));
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
diff --git a/xc/test/xsuite/xtest/tset/CH10/strbyts/strbyts.m b/xc/test/xsuite/xtest/tset/CH10/strbyts/strbyts.m
new file mode 100644
index 000000000..055a860c2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/strbyts/strbyts.m
@@ -0,0 +1,72 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XStoreBytes CH10
+
+XStoreBytes(display, bytes, nbytes)
+Display *display = Dsp;
+char *bytes = buff;
+int nbytes = NELEM(buff);
+>>EXTERN
+static char buff[1217];
+>>ASSERTION Good A
+A call to xname stores
+.A nbytes
+bytes from the
+.A bytes
+argument into cut buffer zero.
+>>STRATEGY
+Store bytes in cut buffer 0 using xname.
+Obtain the contents of cut buffer 0 using XFetchBuffer.
+Verify that the buffer contents is correct.
+>>CODE
+char *bp;
+char *bpr = (char *) NULL;
+int i;
+int br;
+
+ for(i=NELEM(buff), bp = buff; i>0; *bp++ = (char) (i & 255), i--);
+
+ XCALL;
+
+ bp = XFetchBuffer(display, &br, 0);
+
+ if(bp == (char *) NULL) {
+ report("%s() did not set buffer 0 to contain any data.", TestName);
+ FAIL;
+ } else {
+ CHECK;
+
+ if(br != NELEM(buff)) {
+ report("%s() set buffer 0 to contain %d bytes instead of %d.", TestName, br, NELEM(buff));
+ FAIL;
+ } else {
+ CHECK;
+
+ if(memcmp(bp, buff, NELEM(buff)) != 0) {
+ report("%s() set buffer 0 to contain the wrong data.", TestName);
+ FAIL;
+ } else
+ CHECK;
+ }
+
+ XFree(bp);
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Bad B 1
+.ER BadAlloc
diff --git a/xc/test/xsuite/xtest/tset/CH10/strgn/strgn.m b/xc/test/xsuite/xtest/tset/CH10/strgn/strgn.m
new file mode 100644
index 000000000..978f52c0f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/strgn/strgn.m
@@ -0,0 +1,90 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSetRegion CH10
+
+XSetRegion(display, gc, r)
+Display *display = Dsp;
+GC gc;
+Region r = XCreateRegion();
+>>SET tpcleanup strgncleanup
+>>EXTERN
+static void
+strgncleanup()
+{
+ XDestroyRegion(r);
+ tpcleanup();
+}
+
+>>ASSERTION Good A
+A call to xname sets the
+.M clip_mask
+component of the
+.A gc
+argument to the region
+.A r .
+>>STRATEGY
+Create a region using XCreateRegion.
+Set the region to a rectangle using XUnionRectWithRegion.
+Create a drawable using XCreateWindow.
+Create a gc using XCreateGC.
+Draw the clip mask rectangle using XFillRectangle.
+Set the graphics function of the GC to GXxor using XSetFunction.
+Set the foreground pixel of the gc to W_BG ^ W_FG using XSetForeground.
+Set the clip mask of the gc to the region using xname.
+Set every pixel in the drawable using XFillRectangle.
+Verify that every pixel in the drawable is set to W_BG.
+Destroy the region using XDestroyRegion.
+>>CODE
+XVisualInfo *vi;
+Window win;
+GC gc;
+unsigned int width;
+unsigned int height;
+static XRectangle cliprect2 = { 23, 13, 53, 63 };
+static XRectangle cliprect = { 0,0, 1,1};
+
+ resetvinf(VI_WIN);
+ nextvinf(&vi);
+ win = makewin(display, vi); /* Makes a window with bg W_BG. */
+
+ gc = makegc(display, win);
+ XSetFillStyle(display, gc, FillSolid);
+ XSetFunction(display, gc, GXxor);
+ XSetForeground(display, gc, W_BG^W_FG);
+
+ XUnionRectWithRegion(&cliprect, r, r);
+ XFillRectangle(display, win, gc, cliprect.x, cliprect.y, cliprect.width, cliprect.height);
+
+ if( checkarea(display, win, (struct area *) NULL, W_BG, W_BG, CHECK_ALL|CHECK_DIFFER)){
+ delete("XFillRectangle() did set any pixels to non-background values.");
+ return;
+ } else
+ CHECK;
+
+ XCALL;
+ getsize(display, win, &width, &height);
+ XFillRectangle(display, win, gc, 0,0, width, height);
+
+ if( checkarea(display, win, (struct area *) NULL, W_BG, W_BG, CHECK_ALL) == 0){
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+>>ASSERTION Bad A
+.ER BadGC
diff --git a/xc/test/xsuite/xtest/tset/CH10/strtkysym/strtkysym.m b/xc/test/xsuite/xtest/tset/CH10/strtkysym/strtkysym.m
new file mode 100644
index 000000000..01e51b4a0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/strtkysym/strtkysym.m
@@ -0,0 +1,69 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XStringToKeysym CH10
+KeySym
+XStringToKeysym(string)
+char *string;
+>>EXTERN
+#define XK_MISCELLANY
+#include "keysymdef.h"
+#undef XK_MISCELLANY
+>>ASSERTION Good A
+A call to xname returns the
+.S KeySym
+value for the
+.S KeySym
+name specified by the
+null-terminated
+.A string
+argument.
+>>STRATEGY
+Obtain the KeySym corresponding to the string "Escape" using XStringToKeysym.
+Verify that the returned value is XK_Escape.
+>>CODE
+KeySym ks;
+char *tstr = "Escape";
+
+ string = tstr;
+ ks = XCALL;
+ if(ks != XK_Escape) {
+ report("%s() returned KeySym %lu instead of XK_Escape (%lu) for \"%s\".",
+ TestName, (long) ks, (long) XK_Escape, tstr);
+ FAIL;
+ } else
+ PASS;
+
+>>ASSERTION Good A
+When the specified string does not match a valid KeySym, then
+a call to xname returns
+.S NoSymbol .
+>>STRATEGY
+Obtain the KeySym matching the string "XTest_No_Sym" using XStringToKeysym.
+Verify that the returned value is NoSymbol.
+>>CODE
+KeySym ks;
+char *tstr = "XTest_No_Sym";
+
+ string = tstr;
+ ks = XCALL;
+ if(ks != NoSymbol) {
+ report("%s() returned KeySym %lu instead of NoSymbol (%lu) for \"%s\".",
+ TestName, (long) ks, (long) NoSymbol, tstr);
+ FAIL;
+ } else
+ PASS;
+
diff --git a/xc/test/xsuite/xtest/tset/CH10/svcntxt/svcntxt.m b/xc/test/xsuite/xtest/tset/CH10/svcntxt/svcntxt.m
new file mode 100644
index 000000000..1ee915117
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/svcntxt/svcntxt.m
@@ -0,0 +1,155 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XSaveContext CH10
+int
+
+Display *display = Dsp;
+Window w = defwin(display);
+XContext context = XUniqueContext();
+caddr_t data;
+>>EXTERN
+
+static char *xsc_ctxt ="set context";
+static char *xsc_ctxt2 ="set context two";
+
+>>ASSERTION Good A
+A call to xname sets the table entry for context data
+for display
+.A display ,
+window
+.A w
+and context type
+.A context
+to the specified value
+.A data ,
+and returns zero.
+>>STRATEGY
+Call xname to enter the context data.
+Verify that zero was returned.
+Call XFindContext to verify that the context data was added correctly.
+>>CODE
+int a;
+int ret;
+caddr_t b;
+
+/* Call xname to enter the context data. */
+ data = (caddr_t) xsc_ctxt;
+ ret = XCALL;
+
+/* Verify that zero was returned. */
+ if (ret != 0) {
+ FAIL;
+ report("%s returned non-zero when expected zero.",
+ TestName);
+ report("Returned value: %s", contexterrorname(ret));
+ } else
+ CHECK;
+
+/* Call XFindContext to verify that the context data was added correctly. */
+ a = XFindContext(display, w, context, &b);
+ if (a != 0) {
+ FAIL;
+ report("XFindContext failed to find the context saved by %s", TestName);
+ report("XFindContext returned %s", contexterrorname(a));
+ } else {
+ CHECK;
+
+ if (b != (caddr_t)xsc_ctxt) {
+ FAIL;
+ report("XFindContext returned an unexpected context.");
+ report("Expected context: %0x", (unsigned int)xsc_ctxt);
+ report("Returned context: %0x", (unsigned int)b);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(3);
+
+>>ASSERTION Good A
+When there is previously saved context data
+for display
+.A display ,
+window
+.A w
+and context type
+.A context ,
+then a call to xname replaces the previously saved context data
+with the specified value
+.A data ,
+and returns zero.
+>>STRATEGY
+Call xname to set the context data.
+Verify that zero was returned.
+Call xname to reset the context data.
+Verify that zero was returned.
+Call XFindContext to verify that the context data was added correctly.
+>>CODE
+int a;
+int ret;
+caddr_t b;
+
+/* Call xname to set the context data. */
+ data = (caddr_t) xsc_ctxt;
+ ret = XCALL;
+
+/* Verify that zero was returned. */
+ if (ret != 0) {
+ FAIL;
+ report("%s returned non-zero when expected zero when setting",
+ TestName);
+ report("context information.");
+ report("Returned value: %s", contexterrorname(ret));
+ } else
+ CHECK;
+
+/* Call xname to reset the context data. */
+ data = (caddr_t) xsc_ctxt2;
+ ret = XCALL;
+
+/* Verify that zero was returned. */
+ if (ret != 0) {
+ FAIL;
+ report("%s returned non-zero when expected zero when resetting",
+ TestName);
+ report("context information.");
+ report("Returned value: %s", contexterrorname(ret));
+ } else
+ CHECK;
+
+/* Call XFindContext to verify that the context data was added correctly. */
+ a = XFindContext(display, w, context, &b);
+ if (a != 0) {
+ FAIL;
+ report("XFindContext failed to find the context saved by %s", TestName);
+ report("XFindContext returned %s", contexterrorname(a));
+ } else {
+ CHECK;
+
+ if (b != (caddr_t)xsc_ctxt2) {
+ FAIL;
+ report("XFindContext returned an unexpected context.");
+ report("Original context: %0x", (unsigned int)xsc_ctxt);
+ report("Expected context: %0x", (unsigned int)xsc_ctxt2);
+ report("Returned context: %0x", (unsigned int)b);
+ } else
+ CHECK;
+ }
+
+ CHECKPASS(4);
+>>ASSERTION Bad B 1
+When there is insufficient memory, then a call to xname returns
+.S XCNOMEM .
diff --git a/xc/test/xsuite/xtest/tset/CH10/unnrctwthr/unnrctwthr.m b/xc/test/xsuite/xtest/tset/CH10/unnrctwthr/unnrctwthr.m
new file mode 100644
index 000000000..084eb8bcf
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/unnrctwthr/unnrctwthr.m
@@ -0,0 +1,58 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUnionRectWithRegion CH10
+
+XUnionRectWithRegion(rectangle, src_region, dest_region_return)
+XRectangle *rectangle;
+Region src_region;
+Region dest_region_return;
+>>ASSERTION Good A
+A call to xname computes the union of the rectangle
+.A rectangle
+and the region
+.A src_region
+and stores the result in
+.A dest_region_return .
+>>STRATEGY
+Create a region using XCreateRegion.
+Set the region to a rectangle using xname.
+Obtain the extents of the region using XClipBox.
+Verify that the position and dimension of the region is the same as that of the rectangle.
+>>CODE
+static XRectangle rect = { 7,9, 23,37 };
+XRectangle rrect;
+Region R1;
+
+
+ R1 = makeregion();
+ rectangle = &rect;
+ src_region = R1;
+ dest_region_return = R1;
+ XCALL;
+
+ XClipBox(R1, &rrect);
+
+ if( (rect.x != rrect.x) || (rect.y != rrect.y) || (rect.width != rrect.width) || (rect.height != rrect.height)) {
+ report("%s() set a rectangle x - %d y - %d width - %d height - %d",
+ TestName,
+ rrect.x, rrect.y, rrect.width, rrect.height);
+ report("instead of x - %d y - %d width - %d height - %d.",
+ rect.x, rect.y, rect.width, rect.height);
+
+ FAIL;
+ } else
+ PASS;
diff --git a/xc/test/xsuite/xtest/tset/CH10/unnrgn/unnrgn.m b/xc/test/xsuite/xtest/tset/CH10/unnrgn/unnrgn.m
new file mode 100644
index 000000000..c59d4ac43
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/unnrgn/unnrgn.m
@@ -0,0 +1,107 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUnionRegion CH10
+
+XUnionRegion(sra, srb, dr_return)
+Region sra;
+Region srb;
+Region dr_return;
+>>ASSERTION Good A
+A call to xname computes the union of the regions
+.A sra
+and
+.A srb
+and places the result in the region
+.A dr_return .
+>>STRATEGY
+Create regions R1 R2 R3 using XCreateRegion.
+Set regions R1 and R2 to right-angled triangles joined along the hypotenuse using XPolygonRegion.
+Set R3 to the rectangle formed by joining the triangles using XUnionRectWithRegion.
+Obtain the union of R1 and R2 using xname.
+Verify that union is the same as R3 using XEqualRegion.
+
+Create a region using XCreateRegion.
+Set the region to an overlapping set of 3x3 rectangular regions using xname.
+Verify that the result is the correct rectangular region using XEqualRegion.
+>>CODE
+int i;
+int j;
+Region R1;
+Region R2;
+Region R3;
+Region Rt;
+static XPoint tri1[] = { {5,5}, {30,5}, {5,20} };
+static XPoint tri2[] = { {5,20}, {30,20}, {30,5} };
+static XRectangle rect1 = { 5,5, 25,15};
+XRectangle rect2;
+XRectangle rrect;
+
+ R1 = makeregion();
+ R2 = makeregion();
+ R3 = makeregion();
+ Rt = makeregion();
+
+ if(isdeleted()) return;
+
+ R1 = XPolygonRegion(tri1, NELEM(tri1), WindingRule);
+ R2 = XPolygonRegion(tri2, NELEM(tri2), WindingRule);
+
+ sra = R1;
+ srb = R2;
+ dr_return = R3;
+ XCALL;
+
+ XUnionRectWithRegion(&rect1, Rt, Rt);
+
+ if( XEqualRegion(Rt, R3) != True) {
+ report("%s() did not unify two triangular regions into the correct rectangular region.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+
+ R2 = makeregion();
+
+ srb = R2;
+ dr_return = R2;
+ rect2.width=3;
+ rect2.height=3;
+ for(j=5; j<18; j++) {
+ rect2.y=j;
+ for(i=5; i<28; i++) {
+
+ if((R1 = XCreateRegion()) == (Region) NULL) {
+ delete("XCreateRegion() returned NULL.");
+ return;
+ } else
+ if(i==27 && j==17) CHECK;
+
+ rect2.x=i;
+ XUnionRectWithRegion(&rect2, R1, R1);
+ sra = R1;
+ XCALL;
+ XDestroyRegion(R1);
+ }
+ }
+
+ if( XEqualRegion(Rt, R2) != True) {
+ report("%s() did not unify a set of over-lapping rectangular regions into the correct rectangular region.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(3);
diff --git a/xc/test/xsuite/xtest/tset/CH10/unqcntxt/unqcntxt.m b/xc/test/xsuite/xtest/tset/CH10/unqcntxt/unqcntxt.m
new file mode 100644
index 000000000..b153eb657
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/unqcntxt/unqcntxt.m
@@ -0,0 +1,43 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XUniqueContext CH10
+XContext
+
+>>ASSERTION Good A
+A call to xname returns a unique context type identifier.
+>>STRATEGY
+Call xname to obtain a unique context type identifier.
+Call xname to obtain another unique context identifier.
+Verify the context type identifiers are unique.
+>>CODE
+XContext a,b;
+
+/* Call xname to obtain a unique context type identifier. */
+ a = XCALL;
+
+/* Call xname to obtain another unique context identifier. */
+ b = XCALL;
+
+/* Verify the context type identifiers are unique. */
+ if (a==b) {
+ FAIL;
+ report("%s returned identical context identifiers on subsequent calls.",
+ TestName);
+ } else
+ CHECK;
+
+ CHECKPASS(1);
diff --git a/xc/test/xsuite/xtest/tset/CH10/wrtbtmpfl/wrtbtmpfl.m b/xc/test/xsuite/xtest/tset/CH10/wrtbtmpfl/wrtbtmpfl.m
new file mode 100644
index 000000000..5b865a92d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/wrtbtmpfl/wrtbtmpfl.m
@@ -0,0 +1,300 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XWriteBitmapFile CH10
+int
+
+Display *display = Dsp;
+char *filename = xwbf_name;
+Pixmap bitmap = xwbf_bm;
+unsigned int width = xwbf_width;
+unsigned int height = xwbf_height;
+int x_hot = -1;
+int y_hot = -1;
+>>EXTERN
+
+#include <sys/types.h>
+#include <errno.h>
+#include <sys/stat.h>
+
+#ifndef S_IRUSR
+#define XWBF_MODE 0x600
+#else
+#define XWBF_MODE (S_IRUSR|S_IXUSR)
+#endif
+
+#define XWBF_DIR "xwbf_dir"
+#define XWBF_FILE "xwbf_dir/xwbf_file"
+
+static char *xwbf_name = "xwbf_temp";
+
+static Pixmap xwbf_bm = (Pixmap)0;
+
+static unsigned char xwbf_data[]= {
+ 0x80, 0x00, 0x3f, 0xfe, 0x04, 0x07, 0x88, 0x41,
+ 0xfc, 0x09, 0x00, 0x80, 0x40, 0x20, 0x08, 0x04};
+static unsigned int xwbf_width=16;
+static unsigned int xwbf_height=8;
+
+static void
+xwbf_start()
+{
+ tpstartup();
+
+ xwbf_bm = XCreateBitmapFromData(Dsp, DefaultRootWindow(Dsp),
+ (char*)xwbf_data, xwbf_width, xwbf_height);
+ regid(Dsp, (union regtypes *)&xwbf_bm, REG_PIXMAP);
+
+ (void)unlink(xwbf_name);
+}
+
+static void
+xwbf_clean()
+{
+ (void)unlink(filename);
+ tpcleanup();
+}
+
+>>SET tpstartup xwbf_start
+>>SET tpcleanup xwbf_clean
+>>ASSERTION Good A
+A call to xname writes a
+.A bitmap
+to the file
+.A filename
+in the X version 11 format and returns
+.S BitmapSuccess .
+>>STRATEGY
+Create a suitable bitmap.
+Call xname to write the bitmap to file.
+Verify that BitmapSucess was returned.
+Read back bitmap with XReadBitmapFile.
+Verify the bitmap was read back, and the details were correct.
+>>CODE
+ int ret;
+ unsigned int w_ret, h_ret;
+ Pixmap pm_ret;
+ int x_h_ret, y_h_ret;
+ XImage *good;
+
+/* Create a suitable bitmap. */
+/* Call xname to write the bitmap to file. */
+ ret=XCALL;
+
+/* Verify that BitmapSucess was returned. */
+ if (ret != BitmapSuccess) {
+ FAIL;
+ report("%s did not return expected value.",
+ TestName);
+ report("Expected: %d (BitmapSuccess)", BitmapSuccess);
+ report("Returned: %d", ret);
+ } else
+ CHECK;
+
+/* Read back bitmap with XReadBitmapFile. */
+ ret=XReadBitmapFile(display, DefaultRootWindow(display),
+ xwbf_name, &w_ret, &h_ret, &pm_ret, &x_h_ret, &y_h_ret);
+
+/* Verify the bitmap was read back, and the details were correct. */
+ if (ret != BitmapSuccess) {
+ FAIL;
+ report("XReadBitmapFile could not read back the bitmap file.");
+ } else
+ CHECK;
+
+ if (w_ret != 16 || h_ret !=8) {
+ FAIL;
+ report("Read pixmap had incorrect width/height.");
+ report("Expected width:16, height:8");
+ report("Returned width:%d, height:%d", w_ret, h_ret);
+ } else
+ CHECK;
+
+ if (x_h_ret != -1 || y_h_ret != -1) {
+ FAIL;
+ report("Read pixmap had incorrect hot spot.");
+ report("Expected hotspot (x,y): -1,-1");
+ report("Returned hotspot (x,y): %d,%d", x_h_ret, y_h_ret);
+ } else
+ CHECK;
+
+ good=savimage(display, xwbf_bm);
+ trace("savimage");
+ if (!compsavimage(display, pm_ret, good)) {
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>>ASSERTION Good A
+When
+.A x_hot
+and
+.A y_hot
+are not -1, then a call to xname writes
+.A x_hot
+and
+.A y_hot
+as the hotspot coordinates for the
+.A bitmap .
+>>STRATEGY
+Create a suitable bitmap.
+Call xname to write the bitmap to file, with non -1 x_hot and y_hot.
+Verify that BitmapSucess was returned.
+Read back bitmap with XReadBitmapFile.
+Verify the bitmap was read back, and the details were correct.
+>>CODE
+ int ret;
+ unsigned int w_ret, h_ret;
+ Pixmap pm_ret;
+ int x_h_ret, y_h_ret;
+ XImage *good;
+
+/* Create a suitable bitmap. */
+/* Call xname to write the bitmap to file, with non -1 x_hoy and y_hot. */
+ x_hot = 6;
+ y_hot = 3;
+ ret=XCALL;
+
+/* Verify that BitmapSucess was returned. */
+ if (ret != BitmapSuccess) {
+ FAIL;
+ report("%s did not return expected value.",
+ TestName);
+ report("Expected: %d (BitmapSuccess)", BitmapSuccess);
+ report("Returned: %d", ret);
+ } else
+ CHECK;
+
+/* Read back bitmap with XReadBitmapFile. */
+ ret=XReadBitmapFile(display, DefaultRootWindow(display),
+ xwbf_name, &w_ret, &h_ret, &pm_ret, &x_h_ret, &y_h_ret);
+
+/* Verify the bitmap was read back, and the details were correct. */
+ if (ret != BitmapSuccess) {
+ FAIL;
+ report("XReadBitmapFile could not read back the bitmap file.");
+ } else
+ CHECK;
+
+ if (w_ret != 16 || h_ret !=8) {
+ FAIL;
+ report("Read pixmap had incorrect width/height.");
+ report("Expected width:16, height:8");
+ report("Returned width:%d, height:%d", w_ret, h_ret);
+ } else
+ CHECK;
+
+ if (x_h_ret != 6 || y_h_ret != 3) {
+ FAIL;
+ report("Read pixmap had incorrect hot spot.");
+ report("Expected hotspot (x,y): 6,3");
+ report("Returned hotspot (x,y): %d,%d", x_h_ret, y_h_ret);
+ } else
+ CHECK;
+
+ good=savimage(display, xwbf_bm);
+ trace("savimage");
+ if (!compsavimage(display, pm_ret, good)) {
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(5);
+
+>>ASSERTION Bad A
+When the file
+.A filename
+cannot be opened for writing,
+then a call to xname returns
+.S BitmapOpenFailed .
+>>STRATEGY
+Create a suitable bitmap.
+Create an unwritable directory.
+Call xname to write the bitmap file.
+Verify that a BitmapOpenFailed error occurred.
+>>CODE
+int ret;
+
+/* Create a suitable bitmap. */
+/* Create an unwritable directory. */
+ if(mkdir(XWBF_DIR, XWBF_MODE)) {
+ int en = errno;
+ delete("Could not create the test subdirectory.");
+ report("errno %d", en);
+ return;
+ } else
+ CHECK;
+
+/* Call xname to write the bitmap file. */
+ filename = XWBF_FILE;
+ ret = XCALL;
+
+/* Verify that a BitmapOpenFailed error occurred. */
+ if (ret != BitmapOpenFailed) {
+ FAIL;
+ report("%s did not return expected value.");
+ report("Expected %d (BitmapOpenFailed)", BitmapOpenFailed);
+ report("Returned %d", ret);
+ } else
+ CHECK;
+
+ CHECKPASS(2);
+
+ (void) unlink(XWBF_FILE);
+ (void) rmdir(XWBF_DIR);
+
+>>ASSERTION Bad B 1
+When insufficient memory is allocated, then a call to xname returns
+.S BitmapNoMemory .
+>>ASSERTION Bad A
+When
+.A width
+and
+.A height
+are greater than the corresponding dimensions of the
+.A bitmap ,
+then on a call to xname a
+.S BadMatch
+error occurs.
+>>STRATEGY
+Create a suitable bitmap.
+Call xname to write the bitmap to file, with the width and height
+ bigger than the bitmap.
+Verify that BadMatch occurred.
+>>CODE BadMatch
+
+/* Create a suitable bitmap. */
+/* Call xname to write the bitmap to file, with the width and height */
+/* bigger than the bitmap. */
+ width=256;
+ height=512;
+ XCALL;
+
+/* Verify that BadMatch occurred. */
+ if (geterr() != BadMatch) {
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(1);
+
+>>ASSERTION Bad A
+>># This may look odd (after all, xname takes a pixmap...) but there is
+>># nothing in the Xlib implementation to stop you passing any old
+>># drawable here... -stuart.
+.ER BadDrawable
diff --git a/xc/test/xsuite/xtest/tset/CH10/xrrgn/xrrgn.m b/xc/test/xsuite/xtest/tset/CH10/xrrgn/xrrgn.m
new file mode 100644
index 000000000..05bb3f0ba
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/CH10/xrrgn/xrrgn.m
@@ -0,0 +1,85 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE XXorRegion CH10
+
+XXorRegion(sra, srb, dr_return)
+Region sra;
+Region srb;
+Region dr_return;
+>>ASSERTION Good A
+A call to xname computes the difference between the union and intersection of
+the regions
+.A sra
+and
+.A srb
+and stores the result in
+.A dr_return .
+>>STRATEGY
+Create regions R1 R2 R3 Ru Ri Rx using XCreateRegion.
+Set R1 to a polygon using XPolygonRegion.
+Set R2 to a polygon which partially intersects R1 using XPolygonRegion.
+Set Ru to the union of R1 and R2 using XUnionRegion.
+Set Ri to the intersection of R1 and R2 using XIntersectRegion.
+Set R3 to the difference between Ru and Ri using XSubtractUnion.
+Set Rx to the difference between the union and intersection of R1 and R2
+ using xname.
+Verify that Rx is the same as R3 using XEqualRegion.
+>>CODE
+Region R1;
+Region R2;
+Region R3;
+Region Ru;
+Region Ri;
+Region Rx;
+static XPoint inter1[] = { {25,5}, {15,10}, {10,25}, {20,35}, {30,30}, {35,20}, {30,10} };
+static XPoint inter2[] = { {25,20}, {37,22}, {40,30}, {35,37}, {30,40}, {25,38}, {18,32}, {20,25} };
+
+ R1 = makeregion();
+ R2 = makeregion();
+ R3 = makeregion();
+ Ru = makeregion();
+ Ri = makeregion();
+ Rx = makeregion();
+
+ if(isdeleted()) return;
+
+ R1 = XPolygonRegion( inter1, NELEM(inter1), WindingRule );
+ R2 = XPolygonRegion( inter2, NELEM(inter2), WindingRule );
+
+ XUnionRegion(R1, R2, Ru);
+ XIntersectRegion(R1, R2, Ri);
+ XSubtractRegion(Ru, Ri, R3);
+
+ sra = R1;
+ srb = R2;
+ dr_return = Rx;
+ XCALL;
+
+ if(XEmptyRegion(Rx) == True) {
+ report("%s() returned empty region.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+
+ if(XEqualRegion(R3, Rx) != True) {
+ report("%s() did not return the difference between the union and intersection of its arguments.", TestName);
+ FAIL;
+ } else
+ CHECK;
+
+ CHECKPASS(2);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/Makefile b/xc/test/xsuite/xtest/tset/XPROTO/Makefile
new file mode 100644
index 000000000..d319e3bcf
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/Makefile
@@ -0,0 +1,344 @@
+#
+# Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+# UniSoft Group Limited.
+#
+# 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 names of MIT and UniSoft not be
+# used in advertising or publicity pertaining to distribution of the
+# software without specific, written prior permission. MIT and UniSoft
+# make no representations about the suitability of this software for any
+# purpose. It is provided "as is" without express or implied warranty.
+#
+# $XConsortium$
+#
+
+#
+# This Makefile can be used to compile all the tests in this
+# section of the X test suite in such a way that they are all links to
+# a single executable file. This normally allows a considerable
+# reduction in the disc space requirements for the X test suite
+# when fully built.
+#
+# There are two ways this can be done:
+# 1) Using the TET. Execute the command:
+# tcc -b -s link_exec xtest linkbuild
+# in the directory $TET_ROOT/xtest.
+# This will execute the TET build tool (which is normally pmake)
+# in the top level directory of each section of the test suite
+# (including this directory).
+#
+# 2) Directly without using the TET. Execute the command:
+# pmake
+# in this directory.
+#
+# For more details, refer to the User Guide
+#
+
+# CFLAGS - Compilation flags specific to the X Protocol tests.
+#
+CFLAGS=$(XP_CFLAGS)
+SYSLIBS=$(XP_SYSLIBS)
+LIBS=$(XP_LIBS)
+
+# LINTFLAGS - Flags for lint specific to the X Protocol tests.
+#
+LINTFLAGS=$(XP_LINTFLAGS)
+LINTLIBS=$(XP_LINTLIBS)
+
+CAT=cat
+
+ALLTESTS=Tests
+
+TESTOFILES=\
+allcclr.o \
+allcclrcll.o \
+allcclrpln.o \
+allcnmdclr.o \
+allwevnts.o \
+bdrqst.o \
+bll.o \
+chngactvpn.o \
+chnggc.o \
+chnghsts.o \
+chngkybrdc.o \
+chngkybrdm.o \
+chngpntrcn.o \
+chngprprty.o \
+chngsvst.o \
+chngwdwatt.o \
+clrar.o \
+clsfnt.o \
+cnfgrwdw.o \
+cnvrtslctn.o \
+cpyar.o \
+cpyclrmpan.o \
+cpygc.o \
+cpypln.o \
+crcltwdw.o \
+crtclrmp.o \
+crtcrsr.o \
+crtgc.o \
+crtglyphcr.o \
+crtpxmp.o \
+crtwdw.o \
+dltprprty.o \
+dstrysbws.o \
+dstrywdw.o \
+fllply.o \
+frclrmp.o \
+frclrs.o \
+frcrsr.o \
+frcscrnsvr.o \
+frgc.o \
+frpxmp.o \
+grbbttn.o \
+grbky.o \
+grbkybrd.o \
+grbpntr.o \
+grbsrvr.o \
+gtatmnm.o \
+gtfntpth.o \
+gtgmtry.o \
+gtimg.o \
+gtinptfcs.o \
+gtkybrdcnt.o \
+gtkybrdmpp.o \
+gtmdfrmppn.o \
+gtmtnevnts.o \
+gtpntrcntr.o \
+gtpntrmppn.o \
+gtprprty.o \
+gtscrnsvr.o \
+gtslctnown.o \
+gtwdwattrb.o \
+imgtxt16.o \
+imgtxt8.o \
+instllclrm.o \
+intrnatm.o \
+kllclnt.o \
+lkpclr.o \
+lstextnsns.o \
+lstfnts.o \
+lstfntswth.o \
+lsthsts.o \
+lstinstlld.o \
+lstprprts.o \
+mpsbws.o \
+mpwdw.o \
+noprtn.o \
+opndsply.o \
+opnfnt.o \
+plyarc.o \
+plyfllarc.o \
+plyfllrctn.o \
+plyln.o \
+plypnt.o \
+plyrctngl.o \
+plysgmnt.o \
+plytxt16.o \
+plytxt8.o \
+ptimg.o \
+qrybstsz.o \
+qryclrs.o \
+qryextnsn.o \
+qryfnt.o \
+qrykymp.o \
+qrypntr.o \
+qrytr.o \
+qrytxtextn.o \
+rclrcrsr.o \
+rprntwdw.o \
+rttprprts.o \
+sndevnt.o \
+staccsscnt.o \
+stclprctng.o \
+stclsdwnmd.o \
+stdshs.o \
+stfntpth.o \
+stinptfcs.o \
+stmdfrmppn.o \
+stpntrmppn.o \
+strclrs.o \
+strnmdclr.o \
+stscrnsvr.o \
+stslctnown.o \
+trnsltcrds.o \
+ungrbbttn.o \
+ungrbky.o \
+ungrbkybrd.o \
+ungrbpntr.o \
+ungrbsrvr.o \
+unmpsbws.o \
+unmpwdw.o \
+unnstllclr.o \
+wrppntr.o
+
+LINKOFILE=linktbl.o
+OFILES = $(TESTOFILES) $(LINKOFILE)
+
+DIRLIST=\
+allcclr \
+allcclrcll \
+allcclrpln \
+allcnmdclr \
+allwevnts \
+bdrqst \
+bll \
+chngactvpn \
+chnggc \
+chnghsts \
+chngkybrdc \
+chngkybrdm \
+chngpntrcn \
+chngprprty \
+chngsvst \
+chngwdwatt \
+clrar \
+clsfnt \
+cnfgrwdw \
+cnvrtslctn \
+cpyar \
+cpyclrmpan \
+cpygc \
+cpypln \
+crcltwdw \
+crtclrmp \
+crtcrsr \
+crtgc \
+crtglyphcr \
+crtpxmp \
+crtwdw \
+dltprprty \
+dstrysbws \
+dstrywdw \
+fllply \
+frclrmp \
+frclrs \
+frcrsr \
+frcscrnsvr \
+frgc \
+frpxmp \
+grbbttn \
+grbky \
+grbkybrd \
+grbpntr \
+grbsrvr \
+gtatmnm \
+gtfntpth \
+gtgmtry \
+gtimg \
+gtinptfcs \
+gtkybrdcnt \
+gtkybrdmpp \
+gtmdfrmppn \
+gtmtnevnts \
+gtpntrcntr \
+gtpntrmppn \
+gtprprty \
+gtscrnsvr \
+gtslctnown \
+gtwdwattrb \
+imgtxt16 \
+imgtxt8 \
+instllclrm \
+intrnatm \
+kllclnt \
+lkpclr \
+lstextnsns \
+lstfnts \
+lstfntswth \
+lsthsts \
+lstinstlld \
+lstprprts \
+mpsbws \
+mpwdw \
+noprtn \
+opndsply \
+opnfnt \
+plyarc \
+plyfllarc \
+plyfllrctn \
+plyln \
+plypnt \
+plyrctngl \
+plysgmnt \
+plytxt16 \
+plytxt8 \
+ptimg \
+qrybstsz \
+qryclrs \
+qryextnsn \
+qryfnt \
+qrykymp \
+qrypntr \
+qrytr \
+qrytxtextn \
+rclrcrsr \
+rprntwdw \
+rttprprts \
+sndevnt \
+staccsscnt \
+stclprctng \
+stclsdwnmd \
+stdshs \
+stfntpth \
+stinptfcs \
+stmdfrmppn \
+stpntrmppn \
+strclrs \
+strnmdclr \
+stscrnsvr \
+stslctnown \
+trnsltcrds \
+ungrbbttn \
+ungrbky \
+ungrbkybrd \
+ungrbpntr \
+ungrbsrvr \
+unmpsbws \
+unmpwdw \
+unnstllclr \
+wrppntr
+
+all: subdirs test
+
+test:$P $(OFILES) $(LIBS) $(TCM)
+ $(CC) $(LDFLAGS) -o $@ $(OFILES) $(TCM) $(LIBS) $(SYSLIBS)
+ $(CAT) test > $(ALLTESTS)
+ $(RM) test
+
+subdirs:
+ if [ ! -f $(ALLTESTS) ]; then $(CAT) /dev/null > $(ALLTESTS); \
+ chmod a+x $(ALLTESTS); else : ; fi
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then \
+ (cd $$i; echo Compiling in $$i; $(TET_BUILD_TOOL) linkexec); \
+ fi; \
+ done
+
+# The xtestlib is made if it doesn't exist
+$(XTESTLIB):
+ cd $(XTESTROOT)/src/lib; $(TET_BUILD_TOOL) install
+
+# The fontlib is made if it doesn't exist
+$(XTESTFONTLIB):
+ cd $(XTESTROOT)/fonts; $(TET_BUILD_TOOL) install
+
+# The X Protocol test library is made if it doesn't exist
+$(XSTLIB):
+ cd $(XTESTROOT)/src/libproto; $(TET_BUILD_TOOL) install
+
+
+clean: cletests clesubdirs
+
+cletests:
+ $(RM) test $(OFILES) $(ALLTESTS) core
+
+clesubdirs:
+ for i in $(DIRLIST); do \
+ if [ -d $$i ]; then (cd $$i; $(TET_CLEAN_TOOL) ); fi; done
+
+clobber: clean
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/allcclr/allcclr.m b/xc/test/xsuite/xtest/tset/XPROTO/allcclr/allcclr.m
new file mode 100644
index 000000000..aa9e9f0b3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/allcclr/allcclr.m
@@ -0,0 +1,192 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE AllocColor XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for AllocColor request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xAllocColorReply *reply;
+
+/*
+ intent: send an AllocColor request to the server and check
+ that the server sent an AllocColor reply back
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ methods:
+*/
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_AllocColor);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default AllocColor request\n", CLIENT);
+ if ((reply = (xAllocColorReply *) Expect_Reply(CLIENT, X_AllocColor)) == NULL) {
+ Log_Err("client %d failed to receive AllocColor reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received AllocColor reply\n", CLIENT);
+ /* do any reply checking here */
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent AllocColor request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong AllocColor request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/allcclrcll/allcclrcll.m b/xc/test/xsuite/xtest/tset/XPROTO/allcclrcll/allcclrcll.m
new file mode 100644
index 000000000..3ec9a67c8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/allcclrcll/allcclrcll.m
@@ -0,0 +1,226 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE AllocColorCells XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for AllocColorCells request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xAllocColorCellsReply *reply;
+xError *err;
+
+/*
+ intent: send an AllocColorCells request to the server and check
+ that the server sent an AllocColorCells reply back if
+ colormap is supposed to allocate color cells, otherwise
+ check that an error was sent back.
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ methods:
+*/
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_AllocColorCells);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default AllocColorCells request\n", CLIENT);
+ if (Allocatable (CLIENT))
+ if ((reply = (xAllocColorCellsReply *) Expect_Reply(CLIENT, X_AllocColorCells)) == NULL) {
+ Log_Err("client %d failed to receive AllocColorCells reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received AllocColorCells reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(reply);
+ }
+ else
+ if ((err = Expect_Error(CLIENT, BadAlloc)) == NULL) {
+ Log_Err("client %d failed to receive Alloc error\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received Alloc error\n", CLIENT);
+ Free_Error(err);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent AllocColorCells request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong AllocColorCells request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good C
+If the default visual class for screen zero is
+.S DirectColor ,
+.S PseudoColor ,
+or
+.S GrayScale :
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+Otherwise:
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a BadAlloc error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+
+If the default visual class for screen zero is
+DirectColor, PseudoColor, or GrayScale :
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+
+Otherwise:
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a BadAlloc error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a BadAlloc error.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/allcclrpln/allcclrpln.m b/xc/test/xsuite/xtest/tset/XPROTO/allcclrpln/allcclrpln.m
new file mode 100644
index 000000000..71187e1c8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/allcclrpln/allcclrpln.m
@@ -0,0 +1,226 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE AllocColorPlanes XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for AllocColorPlanes request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xAllocColorPlanesReply *reply;
+xError *err;
+
+/*
+ intent: send an AllocColorPlanes request to the server and check
+ that the server sent an AllocColorPlanes reply back if
+ colormap is supposed to allocate color planes, otherwise
+ check that an error was sent back.
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ methods:
+*/
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_AllocColorPlanes);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default AllocColorPlanes request\n", CLIENT);
+ if (Allocatable (CLIENT))
+ if ((reply = (xAllocColorPlanesReply *) Expect_Reply(CLIENT, X_AllocColorPlanes)) == NULL) {
+ Log_Err("client %d failed to receive AllocColorPlanes reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received AllocColorPlanes reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(reply);
+ }
+ else
+ if ((err = Expect_Error(CLIENT, BadAlloc)) == NULL) {
+ Log_Err("client %d failed to receive Alloc error\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received Alloc error\n", CLIENT);
+ Free_Error(err);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent AllocColorPlanes request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong AllocColorPlanes request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good C
+If the default visual class for screen zero is
+.S DirectColor ,
+.S PseudoColor ,
+or
+.S GrayScale :
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+Otherwise:
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a BadAlloc error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+
+If the default visual class for screen zero is
+DirectColor, PseudoColor, or GrayScale :
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+
+Otherwise:
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a BadAlloc error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a BadAlloc error.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/allcnmdclr/allcnmdclr.m b/xc/test/xsuite/xtest/tset/XPROTO/allcnmdclr/allcnmdclr.m
new file mode 100644
index 000000000..627743436
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/allcnmdclr/allcnmdclr.m
@@ -0,0 +1,192 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE AllocNamedColor XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for AllocNamedColor request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xAllocNamedColorReply *reply;
+
+/*
+ intent: send a AllocNamedColor request to the server and check
+ that the server sent an AllocNamedColor reply back
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ methods:
+*/
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_AllocNamedColor);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default AllocNamedColor request\n", CLIENT);
+ if ((reply = (xAllocNamedColorReply *) Expect_Reply(CLIENT, X_AllocNamedColor)) == NULL) {
+ Log_Err("client %d failed to receive AllocNamedColor reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received AllocNamedColor reply\n", CLIENT);
+ /* do any reply checking here */
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent AllocNamedColor request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong AllocNamedColor request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Create colourmap with alloc set to AllocNone.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/allwevnts/allwevnts.m b/xc/test/xsuite/xtest/tset/XPROTO/allwevnts/allwevnts.m
new file mode 100644
index 000000000..c93c55956
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/allwevnts/allwevnts.m
@@ -0,0 +1,186 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE AllowEvents XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for AllowEvents request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xGrabPointerReq *gpr;
+xGrabPointerReply *gprep;
+xAllowEventsReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ gpr = (xGrabPointerReq *) Make_Req(CLIENT, X_GrabPointer);
+ gpr->pointerMode = GrabModeSync;
+ Send_Req(CLIENT, (xReq *) gpr);
+ Log_Trace("client %d sent (pointerMode = GrabModeSync) GrabPointer request\n", CLIENT);
+
+ if ((gprep = (xGrabPointerReply *) Expect_Reply(CLIENT, X_GrabPointer)) == NULL) {
+ Log_Err("client %d failed to receive GrabPointer reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GrabPointer reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(gprep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(gpr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xAllowEventsReq *) Make_Req(CLIENT, X_AllowEvents);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default AllowEvents request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent AllowEvents request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong AllowEvents request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/bdrqst/bdrqst.m b/xc/test/xsuite/xtest/tset/XPROTO/bdrqst/bdrqst.m
new file mode 100644
index 000000000..49e7eadab
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/bdrqst/bdrqst.m
@@ -0,0 +1,97 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE BadRequest XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Tests for the BadRequest protocol error */
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+xReq req;
+xError *err;
+
+static
+void
+bad_request()
+{
+ Create_Client(CLIENT);
+
+ req.reqType = Xst_BadType;
+ req.length = 1;
+
+ Send_Req(CLIENT, (xReq *) &req);
+ Log_Trace("client %d sent request with bad type\n", CLIENT);
+
+ if ((err = Expect_Error(CLIENT, BadRequest)) == NULL) {
+ Log_Err("client %d failed to receive Request error\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received Request error\n", CLIENT);
+ if (err->majorCode == Xst_BadType && err->minorCode == 0)
+ Log_Trace("Op codes OK\n");
+ else
+ Log_Err("Unexpected Op codes (%d,%d)\n",
+ err->majorCode, err->minorCode);
+ Free_Error(err);
+ }
+
+ (void) Expect_Nothing(CLIENT);
+
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends an invalid protocol request to the X server,
+in which the major or minor opcode does not specify a valid request,
+then the X server sends back a BadRequest error to the client.
+>>STRATEGY
+Open a connection to the X server using native byte sex.
+Send an invalid protocol request to the X server
+ with major opcode 254 and minor opcode 0.
+Verify that the X server sends back a BadRequest error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid protocol request to the X server
+ with major opcode 254 and minor opcode 0.
+Verify that the X server sends back a BadRequest error.
+>>CODE
+
+ /* Call a library function to exercise the test code */
+ testfunc(bad_request);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/bll/bll.m b/xc/test/xsuite/xtest/tset/XPROTO/bll/bll.m
new file mode 100644
index 000000000..83f48baef
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/bll/bll.m
@@ -0,0 +1,163 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE Bell XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for Bell request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xBellReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xBellReq *) Make_Req(CLIENT, X_Bell);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default Bell request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent Bell request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong Bell request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/chngactvpn/chngactvpn.m b/xc/test/xsuite/xtest/tset/XPROTO/chngactvpn/chngactvpn.m
new file mode 100644
index 000000000..e06ee7321
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/chngactvpn/chngactvpn.m
@@ -0,0 +1,182 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ChangeActivePointerGrab XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ChangeActivePointerGrab request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xGrabPointerReq *gpr;
+xGrabPointerReply *gprep;
+xChangeActivePointerGrabReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ gpr = (xGrabPointerReq *) Make_Req(CLIENT, X_GrabPointer);
+ Send_Req(CLIENT, (xReq *) gpr);
+ Log_Trace("client %d sent default GrabPointer request\n", CLIENT);
+
+ if ((gprep = (xGrabPointerReply *) Expect_Reply(CLIENT, X_GrabPointer)) == NULL) {
+ Log_Err("client %d failed to receive GrabPointer reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GrabPointer reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(gprep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(gpr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xChangeActivePointerGrabReq *) Make_Req(CLIENT, X_ChangeActivePointerGrab);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ChangeActivePointerGrab request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ChangeActivePointerGrab request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ChangeActivePointerGrab request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/chnggc/chnggc.m b/xc/test/xsuite/xtest/tset/XPROTO/chnggc/chnggc.m
new file mode 100644
index 000000000..61d13042c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/chnggc/chnggc.m
@@ -0,0 +1,197 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ChangeGC XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ChangeGC request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xChangeGCReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xChangeGCReq *) Make_Req(CLIENT, X_ChangeGC);
+ if(test_type == BAD_VALUE) {
+ req->mask |= 1<<28; /* an unused mask bit */
+ req->length += 1;
+ req = (xChangeGCReq *) Xstrealloc((char *) req, req->length<<2);
+ }
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ChangeGC request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_VALUE:
+ Log_Trace("client %d sent ChangeGC request with illegal mask\n", CLIENT);
+ (void) Expect_BadValue(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ChangeGC request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ChangeGC request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the mask value contains an unused bit,
+then the X server sends back a BadValue error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+>>CODE
+
+ test_type = BAD_VALUE;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/chnghsts/chnghsts.m b/xc/test/xsuite/xtest/tset/XPROTO/chnghsts/chnghsts.m
new file mode 100644
index 000000000..4aa69aafc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/chnghsts/chnghsts.m
@@ -0,0 +1,247 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ChangeHosts XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ChangeHosts request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+#include "xthost.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xCreateWindowReq *win_req;
+xListHostsReq *hosts_req;
+xListHostsReply *hosts_rep;
+xChangeHostsReq *req;
+unsigned char *hp;
+XHostAddress *host = xthosts;
+
+/*
+ * Routine: main - touch test for ChangeHosts
+ *
+ * Input:
+ *
+ * Output:
+ *
+ * Returns:
+ *
+ * Globals used:
+ *
+ * Side Effects:
+ *
+ * Methods: this test depends on having at least one host on the
+ * access control list. HOST item that hp points to looks like
+ *
+ * byte entity
+ * 0 family
+ * 1 unused
+ * 2 length of address (2 bytes)
+ * 4 address (n bytes)
+ *
+ * hence length starts at hp + 2, and address starts at hp + 4.
+ * Can't cast hp with XHostAddress because fields don't match up.
+ *
+ */
+
+static
+void
+tester()
+{
+ int mode;
+ extern int Xst_error_count;
+
+ Create_Client(CLIENT);
+
+ /* find out if use of access control list is enabled */
+
+ hosts_req = (xListHostsReq *) Make_Req(CLIENT, X_ListHosts);
+ Send_Req(CLIENT, (xReq *) hosts_req);
+ Log_Trace("client %d sent default ListHosts request\n", CLIENT);
+
+ if ((hosts_rep = (xListHostsReply *) Expect_Reply(CLIENT, X_ListHosts)) == NULL) {
+ Log_Del("client %d failed to receive ListHosts reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received ListHosts reply\n", CLIENT);
+ }
+
+ if (hosts_rep->nHosts < 1)
+ mode = HostInsert;
+ else
+ mode = HostDelete;
+
+
+ /* Delete/Insert host from/to access control list */
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xChangeHostsReq *) Make_Req(CLIENT, X_ChangeHosts);
+debug(3,"length of req = %d, req at 0x%lx\n",req->length,(unsigned long)req);
+ if ((req->mode = mode) == HostDelete) {
+ hp = (unsigned char *) ((unsigned char *) hosts_rep + sizeof (xListHostsReply));
+ req = (xChangeHostsReq *)
+ Add_Counted_Bytes (req, hp + 4, * (unsigned short *) (hp + 2));
+ } else {
+ req = (xChangeHostsReq *)
+ Add_Counted_Bytes (req, host->address, host->length);
+ req->hostFamily = host->family;
+ }
+debug(3,"pre-send length of req = %d, req at 0x%lx\n",req->length,(unsigned long)req);
+
+ Send_Req(CLIENT, (xReq *) req);
+debug(3,"post-send length of req = %d, req at 0x%lx\n",req->length,(unsigned long)req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ChangeHosts request\n", CLIENT);
+ Log_Trace("\t(BadAccess probably indicates not on local/privileged machine)\n");
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ChangeHosts request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ChangeHosts request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ /* tidy up by undoing the change */
+ if (!isdeleted() && (
+ (Xst_error_count == 0 && test_type == GOOD) ||
+ (Xst_error_count > 0 && test_type != GOOD)
+ ) ) {
+ Set_Test_Type(CLIENT, SETUP);
+ req->mode = (mode == HostInsert) ? HostDelete : HostInsert;
+ Send_Req(CLIENT, (xReq *) req);
+ (void) Expect_Nothing(CLIENT);
+ }
+
+ Free_Req(hosts_req);
+ Free_Reply(hosts_rep);
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/chngkybrdc/chngkybrdc.m b/xc/test/xsuite/xtest/tset/XPROTO/chngkybrdc/chngkybrdc.m
new file mode 100644
index 000000000..474fecd7d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/chngkybrdc/chngkybrdc.m
@@ -0,0 +1,210 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ChangeKeyboardControl XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ChangeKeyboardControl request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *gkcr;
+xGetKeyboardControlReply *gkcrep;
+xChangeKeyboardControlReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ gkcr = (xReq *) Make_Req(CLIENT, X_GetKeyboardControl);
+ Send_Req(CLIENT, (xReq *) gkcr);
+ Log_Trace("client %d sent default GetKeyboardControl request\n", CLIENT);
+
+ if ((gkcrep = (xGetKeyboardControlReply *) Expect_Reply(CLIENT, X_GetKeyboardControl)) == NULL) {
+ Log_Err("client %d failed to receive GetKeyboardControl reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetKeyboardControl reply\n", CLIENT);
+ /* do any reply checking here */
+ }
+ (void) Expect_Nothing(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xChangeKeyboardControlReq *) Make_Req(CLIENT, X_ChangeKeyboardControl);
+ req = (xChangeKeyboardControlReq *) Add_Masked_Value(req, KBKeyClickPercent, gkcrep->keyClickPercent);
+ if(test_type == BAD_VALUE) {
+ req->mask |= 1<<28; /* an unused mask bit */
+ req->length += 1;
+ req = (xChangeKeyboardControlReq *) Xstrealloc((char *) req, req->length<<2);
+ }
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ChangeKeyboardControl request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_VALUE:
+ Log_Trace("client %d sent ChangeKeyboardControl request with illegal mask\n", CLIENT);
+ (void) Expect_BadValue(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ChangeKeyboardControl request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ChangeKeyboardControl request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the mask value contains an unused bit,
+then the X server sends back a BadValue error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+>>CODE
+
+ test_type = BAD_VALUE;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/chngkybrdm/chngkybrdm.m b/xc/test/xsuite/xtest/tset/XPROTO/chngkybrdm/chngkybrdm.m
new file mode 100644
index 000000000..68f4d1744
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/chngkybrdm/chngkybrdm.m
@@ -0,0 +1,208 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ChangeKeyboardMapping XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ChangeKeyboardMapping request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xGetKeyboardMappingReq *gkmr;
+xGetKeyboardMappingReply *gkmrep;
+xChangeKeyboardMappingReq *req;
+xEvent *ev;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ /* Get the existing mapping... */
+
+ gkmr = (xGetKeyboardMappingReq *) Make_Req(CLIENT, X_GetKeyboardMapping);
+ Send_Req(CLIENT, (xReq *) gkmr);
+ Log_Trace("client %d sent default GetKeyboardMapping request\n", CLIENT);
+
+ if ((gkmrep = (xGetKeyboardMappingReply *) Expect_Reply(CLIENT, X_GetKeyboardMapping)) == NULL) {
+ Log_Err("client %d failed to receive GetKeyboardMapping reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetKeyboardMapping reply\n", CLIENT);
+ /* do any reply checking here */
+ }
+ (void) Expect_Nothing(CLIENT);
+
+ /* ... then make a request to duplicate that mapping. */
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xChangeKeyboardMappingReq *) Make_Req(CLIENT, X_ChangeKeyboardMapping);
+ req->keyCodes = gkmr->count;
+ req->firstKeyCode = gkmr->firstKeyCode;
+ req->keySymsPerKeyCode = gkmrep->keySymsPerKeyCode;
+ req->length += req->keyCodes * req->keySymsPerKeyCode;
+ req = (xChangeKeyboardMappingReq *) Xstrealloc((char *) req, req->length<<2);
+ {
+ unsigned char *p, *q, *r;
+
+ p = (unsigned char *) (gkmrep + 1);
+ q = (unsigned char *) (req + 1);
+ r = ((unsigned char *) req) + (int)(req->length<<2); /* endptr */
+ while (q < r)
+ *q++ = *p++;
+ }
+
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ChangeKeyboardMapping request\n", CLIENT);
+ if ((ev = (xEvent *) Expect_Event(CLIENT, MappingNotify)) == NULL) {
+ Log_Err("client %d failed to receive MappingNotify\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received MappingNotify\n", CLIENT);
+ /* do any event checking here */
+ Free_Event(ev);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ChangeKeyboardMapping request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ChangeKeyboardMapping request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a
+.S MappingNotify
+event to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a MappingNotify event.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a MappingNotify event.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/chngpntrcn/chngpntrcn.m b/xc/test/xsuite/xtest/tset/XPROTO/chngpntrcn/chngpntrcn.m
new file mode 100644
index 000000000..0bfa31956
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/chngpntrcn/chngpntrcn.m
@@ -0,0 +1,181 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ChangePointerControl XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ChangePointerControl request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *gpcr;
+xGetPointerControlReply *gpcrep;
+xChangePointerControlReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ gpcr = (xReq *) Make_Req(CLIENT, X_GetPointerControl);
+ Send_Req(CLIENT, (xReq *) gpcr);
+ Log_Trace("client %d sent default GetPointerControl request\n", CLIENT);
+
+ if ((gpcrep = (xGetPointerControlReply *) Expect_Reply(CLIENT, X_GetPointerControl)) == NULL) {
+ Log_Err("client %d failed to receive GetPointerControl reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetPointerControl reply\n", CLIENT);
+ /* do any reply checking here */
+ }
+ (void) Expect_Nothing(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xChangePointerControlReq *) Make_Req(CLIENT, X_ChangePointerControl);
+ req->accelNum = gpcrep->accelNumerator;
+ req->accelDenum = gpcrep->accelDenominator;
+ req->threshold = gpcrep->threshold;
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ChangePointerControl request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ChangePointerControl request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ChangePointerControl request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/chngprprty/chngprprty.m b/xc/test/xsuite/xtest/tset/XPROTO/chngprprty/chngprprty.m
new file mode 100644
index 000000000..bd7e1e2cc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/chngprprty/chngprprty.m
@@ -0,0 +1,171 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ChangeProperty XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ChangeProperty request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Atom Test_Property;
+xChangePropertyReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ Test_Property = Create_Default_Atom(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xChangePropertyReq *) Make_Req(CLIENT, X_ChangeProperty);
+ req->property = Test_Property;
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ChangeProperty request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ChangeProperty request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ChangeProperty request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/chngsvst/chngsvst.m b/xc/test/xsuite/xtest/tset/XPROTO/chngsvst/chngsvst.m
new file mode 100644
index 000000000..95dddc4a1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/chngsvst/chngsvst.m
@@ -0,0 +1,171 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ChangeSaveSet XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ChangeSaveSet request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+#define CLIENT1 1
+static TestType test_type = SETUP;
+Window win;
+xChangeSaveSetReq *req;
+xEvent *ev;
+xError *err;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+ Create_Client(CLIENT1);
+
+ win = Create_Default_Window(CLIENT1);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xChangeSaveSetReq *) Make_Req(CLIENT, X_ChangeSaveSet);
+ req->window = win;
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ChangeSaveSet request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ChangeSaveSet request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ChangeSaveSet request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/chngwdwatt/chngwdwatt.m b/xc/test/xsuite/xtest/tset/XPROTO/chngwdwatt/chngwdwatt.m
new file mode 100644
index 000000000..a8656f116
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/chngwdwatt/chngwdwatt.m
@@ -0,0 +1,199 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ChangeWindowAttributes XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ChangeWindowAttributes request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xChangeWindowAttributesReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xChangeWindowAttributesReq *) Make_Req(CLIENT, X_ChangeWindowAttributes);
+ if(test_type == BAD_VALUE) {
+ req->valueMask |= 1<<28; /* an unused mask bit */
+ req->length += 1;
+ req = (xChangeWindowAttributesReq *) Xstrealloc((char *) req, req->length<<2);
+ }
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ChangeWindowAttributes request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_VALUE:
+ Log_Trace("client %d sent ChangeWindowAttributes request with illegal mask\n", CLIENT);
+ (void) Expect_BadValue(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ChangeWindowAttributes request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ChangeWindowAttributes request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the mask value contains an unused bit,
+then the X server sends back a BadValue error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+>>CODE
+
+ test_type = BAD_VALUE;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/clrar/clrar.m b/xc/test/xsuite/xtest/tset/XPROTO/clrar/clrar.m
new file mode 100644
index 000000000..3415780a7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/clrar/clrar.m
@@ -0,0 +1,184 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ClearArea XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ClearArea request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window Default_Window;
+xClearAreaReq *req;
+xEvent *ev;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Default_Window = Create_Default_Window(CLIENT);
+ Map_Window(CLIENT, Default_Window);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xClearAreaReq *) Make_Req(CLIENT, X_ClearArea);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ClearArea request\n", CLIENT);
+ if ((ev = (xEvent *) Expect_Event(CLIENT, Expose)) == NULL) {
+ Log_Err("client %d failed to receive Expose\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received Expose\n", CLIENT);
+ /* do any event checking here */
+ Free_Event(ev);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ClearArea request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ClearArea request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and
+.M exposures
+is
+.S True ,
+then the X server sends back an
+.S Expose
+event to the client
+for regions of the rectangle that are either visible or are being retained in
+backing store.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back an Expose event.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back an Expose event.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/clsfnt/clsfnt.m b/xc/test/xsuite/xtest/tset/XPROTO/clsfnt/clsfnt.m
new file mode 100644
index 000000000..cc33e5719
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/clsfnt/clsfnt.m
@@ -0,0 +1,170 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CloseFont XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>SET tpstartup tpfontstartup
+>>SET tpcleanup tpfontcleanup
+>>EXTERN
+/* Touch test for CloseFont request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Font Default_Font;
+xResourceReq *req;
+
+static
+void
+tester()
+{
+ Set_Init_Timer();
+
+ Create_Client(CLIENT);
+
+ Default_Font = Create_Default_Font(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_CloseFont);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default CloseFont request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent CloseFont request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong CloseFont request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/cnfgrwdw/cnfgrwdw.m b/xc/test/xsuite/xtest/tset/XPROTO/cnfgrwdw/cnfgrwdw.m
new file mode 100644
index 000000000..9468e0cec
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/cnfgrwdw/cnfgrwdw.m
@@ -0,0 +1,199 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ConfigureWindow XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ConfigureWindow request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xConfigureWindowReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xConfigureWindowReq *) Make_Req(CLIENT, X_ConfigureWindow);
+ if(test_type == BAD_VALUE) {
+ req->mask |= 1<<12; /* an unused mask bit */
+ req->length += 1;
+ req = (xConfigureWindowReq *) Xstrealloc((char *) req, req->length<<2);
+ }
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ConfigureWindow request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_VALUE:
+ Log_Trace("client %d sent ConfigureWindow request with illegal mask\n", CLIENT);
+ (void) Expect_BadValue(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ConfigureWindow request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ConfigureWindow request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the mask value contains an unused bit,
+then the X server sends back a BadValue error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+>>CODE
+
+ test_type = BAD_VALUE;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/cnvrtslctn/cnvrtslctn.m b/xc/test/xsuite/xtest/tset/XPROTO/cnvrtslctn/cnvrtslctn.m
new file mode 100644
index 000000000..3521b59b7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/cnvrtslctn/cnvrtslctn.m
@@ -0,0 +1,181 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ConvertSelection XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ConvertSelection request */
+
+/* Expect to get a SelectionNotify event with property None, since a
+ selection that is not set is being requested. */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Atom Test_Property;
+xConvertSelectionReq *req;
+xEvent *ev;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ Test_Property = Create_Default_Atom(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xConvertSelectionReq *) Make_Req(CLIENT, X_ConvertSelection);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ConvertSelection request\n", CLIENT);
+ if ((ev = (xEvent *) Expect_Event(CLIENT, SelectionNotify)) == NULL) {
+ Log_Err("client %d failed to receive SelectionNotify\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received SelectionNotify\n", CLIENT);
+ Free_Event(ev);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ConvertSelection request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ConvertSelection request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and no client currently owns the selection,
+then the X server sends back a
+.S SelectionNotify
+event to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a SelectionNotify event.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a SelectionNotify event.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/cpyar/cpyar.m b/xc/test/xsuite/xtest/tset/XPROTO/cpyar/cpyar.m
new file mode 100644
index 000000000..124605aac
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/cpyar/cpyar.m
@@ -0,0 +1,187 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CopyArea XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for CopyArea request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win1, win2;
+xCreateWindowReq *cwr;
+xCopyAreaReq *req;
+xEvent *ev;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win1 = Create_Default_Window(CLIENT);
+ win2 = Create_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win1);
+ Map_Window(CLIENT, win2);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xCopyAreaReq *) Make_Req(CLIENT, X_CopyArea);
+ req->dstDrawable = win2;
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default CopyArea request\n", CLIENT);
+ if ((ev = (xEvent *) Expect_Event(CLIENT, GraphicsExpose)) == NULL) {
+ Log_Err("client %d failed to receive GraphicsExpose\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GraphicsExpose\n", CLIENT);
+ /* do any event checking here */
+ Free_Event(ev);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent CopyArea request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong CopyArea request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and
+.M graphics-exposures
+in the graphics context is
+.S True ,
+then the X server sends back a
+.S GraphicsExpose
+event to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a GraphicsExpose event.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a GraphicsExpose event.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/cpyclrmpan/cpyclrmpan.m b/xc/test/xsuite/xtest/tset/XPROTO/cpyclrmpan/cpyclrmpan.m
new file mode 100644
index 000000000..87fa09802
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/cpyclrmpan/cpyclrmpan.m
@@ -0,0 +1,259 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CopyColormapAndFree XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for CopyColormapAndFree request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xAllocColorCellsReply *reply;
+
+/*
+ intent: send a CopyColormapAndFree request to the server and check
+ that nothing was sent back.
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ methods:
+*/
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+
+ /* Allocate color cells if client hasn't got any */
+
+ if (Allocatable (CLIENT)) {
+ req = (xResourceReq *) Make_Req(CLIENT, X_AllocColorCells);
+ Send_Req(CLIENT, (xReq *) req);
+ if ((reply = (xAllocColorCellsReply *) Expect_Reply(CLIENT, X_AllocColorCells)) == NULL) {
+ Log_Err("client %d failed to receive AllocColorCells reply\n", CLIENT);
+ Exit();
+ }
+ else {
+ Log_Trace("client %d received AllocColorCells reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(reply);
+ }
+ Free_Req(req);
+ }
+ (void) Expect_Nothing(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_CopyColormapAndFree);
+ if(test_type == BAD_IDCHOICE1) {
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent CopyColormapAndFree request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ }
+ if(test_type == BAD_IDCHOICE2) {
+ req->id = 0xffffffff; /* top 2 bits set ==> invalid */
+ }
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default CopyColormapAndFree request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE1:
+ Log_Trace("client %d sent CopyColormapAndFree request with same resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE2:
+ Log_Trace("client %d sent CopyColormapAndFree request with out-of-range resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent CopyColormapAndFree request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong CopyColormapAndFree request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is already in use,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE1;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is outside the range assigned to the client,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE2;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/cpygc/cpygc.m b/xc/test/xsuite/xtest/tset/XPROTO/cpygc/cpygc.m
new file mode 100644
index 000000000..0d30ba4c4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/cpygc/cpygc.m
@@ -0,0 +1,206 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CopyGC XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for CopyGC request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+GContext gc1, gc2;
+xChangeGCReq *cgcr;
+xCopyGCReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ gc1 = Create_Default_GContext(CLIENT);
+ gc2 = Create_GContext(CLIENT);
+
+ cgcr = (xChangeGCReq *) Make_Req(CLIENT, X_ChangeGC);
+ Send_Req(CLIENT, (xReq *) cgcr);
+ Log_Trace("client %d sent default ChangeGC request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(cgcr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xCopyGCReq *) Make_Req(CLIENT, X_CopyGC);
+ req->dstGC = gc2;
+ if(test_type == BAD_VALUE) {
+ req->mask |= 1<<28; /* an unused mask bit */
+ req = (xCopyGCReq *) Xstrealloc((char *) req, req->length<<2);
+ }
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default CopyGC request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_VALUE:
+ Log_Trace("client %d sent CopyGC request with illegal mask\n", CLIENT);
+ (void) Expect_BadValue(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent CopyGC request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong CopyGC request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the mask value contains an unused bit,
+then the X server sends back a BadValue error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+>>CODE
+
+ test_type = BAD_VALUE;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/cpypln/cpypln.m b/xc/test/xsuite/xtest/tset/XPROTO/cpypln/cpypln.m
new file mode 100644
index 000000000..c7fe13b6f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/cpypln/cpypln.m
@@ -0,0 +1,186 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CopyPlane XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for CopyPlane request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win1, win2;
+xCopyPlaneReq *req;
+xEvent *ev;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win1 = Create_Default_Window(CLIENT);
+ win2 = Create_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win1);
+ Map_Window(CLIENT, win2);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xCopyPlaneReq *) Make_Req(CLIENT, X_CopyPlane);
+ req->dstDrawable = win2;
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default CopyPlane request\n", CLIENT);
+ if ((ev = (xEvent *) Expect_Event(CLIENT, GraphicsExpose)) == NULL) {
+ Log_Err("client %d failed to receive GraphicsExpose\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GraphicsExpose\n", CLIENT);
+ /* do any event checking here */
+ Free_Event(ev);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent CopyPlane request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong CopyPlane request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and
+.M graphics-exposures
+in the graphics context is
+.S True ,
+then the X server sends back a
+.S GraphicsExpose
+event to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a GraphicsExpose event.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a GraphicsExpose event.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/crcltwdw/crcltwdw.m b/xc/test/xsuite/xtest/tset/XPROTO/crcltwdw/crcltwdw.m
new file mode 100644
index 000000000..82533f234
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/crcltwdw/crcltwdw.m
@@ -0,0 +1,224 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CirculateWindow XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for CirculateWindow request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window Default_Window;
+xCreateWindowReq *cwr;
+xResourceReq *mwr;
+xCirculateWindowReq *req;
+xEvent *ev;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Default_Window = Create_Default_Window(CLIENT);
+
+ cwr = (xCreateWindowReq *) Make_Req(CLIENT, X_CreateWindow);
+ cwr->parent = Default_Window;
+ Send_Req(CLIENT, (xReq *) cwr);
+ Log_Trace("client %d sent additional CreateWindow request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(cwr);
+
+ cwr = (xCreateWindowReq *) Make_Req(CLIENT, X_CreateWindow);
+ cwr->parent = Default_Window;
+ Send_Req(CLIENT, (xReq *) cwr);
+ Log_Trace("client %d sent additional CreateWindow request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(cwr);
+
+ mwr = (xResourceReq *) Make_Req(CLIENT, X_MapWindow);
+ Send_Req(CLIENT, (xReq *) mwr);
+ Log_Trace("client %d sent default MapWindow\n", CLIENT);
+
+ if ((ev = (xEvent *) Expect_Event(CLIENT, Expose)) == NULL) {
+ Log_Err("client %d failed to receive Expose\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received Expose\n", CLIENT);
+ /* do any event checking here */
+ Free_Event(ev);
+ }
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(mwr);
+
+ mwr = (xResourceReq *) Make_Req(CLIENT, X_MapSubwindows);
+ Send_Req(CLIENT, (xReq *) mwr);
+ Log_Trace("client %d sent default MapSubwindows\n", CLIENT);
+
+ if ((ev = (xEvent *) Expect_Event(CLIENT, Expose)) == NULL) {
+ Log_Err("client %d failed to receive Expose\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received Expose\n", CLIENT);
+ /* do any event checking here */
+ Free_Event(ev);
+ }
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(mwr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xCirculateWindowReq *) Make_Req(CLIENT, X_CirculateWindow);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default CirculateWindow request\n", CLIENT);
+ if ((ev = (xEvent *) Expect_Event(CLIENT, Expose)) == NULL) {
+ Log_Err("client %d failed to receive Expose\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received Expose\n", CLIENT);
+ /* do any event checking here */
+ Free_Event(ev);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent CirculateWindow request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong CirculateWindow request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and regions of formerly obscured windows are exposed,
+then the X server sends back an
+.S Expose
+event to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back an Expose event.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back an Expose event.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/crtclrmp/crtclrmp.m b/xc/test/xsuite/xtest/tset/XPROTO/crtclrmp/crtclrmp.m
new file mode 100644
index 000000000..a14aaa6af
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/crtclrmp/crtclrmp.m
@@ -0,0 +1,239 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CreateColormap XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for CreateColormap request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xCreateColormapReq *req;
+
+/*
+ intent: send a CreateColormap request to the server and check
+ for the correct response
+ input:
+ output:
+ global input:
+ side effects: creates a window resource and a colormap resource
+ methods:
+*/
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xCreateColormapReq *) Make_Req(CLIENT, X_CreateColormap);
+ if(test_type == BAD_IDCHOICE1) {
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent CreateColormap request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ }
+ if(test_type == BAD_IDCHOICE2) {
+ req->mid = 0xffffffff; /* top 2 bits set ==> invalid */
+ }
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default CreateColormap request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE1:
+ Log_Trace("client %d sent CreateColormap request with same resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE2:
+ Log_Trace("client %d sent CreateColormap request with out-of-range resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent CreateColormap request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong CreateColormap request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is already in use,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE1;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is outside the range assigned to the client,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE2;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/crtcrsr/crtcrsr.m b/xc/test/xsuite/xtest/tset/XPROTO/crtcrsr/crtcrsr.m
new file mode 100644
index 000000000..4317f6182
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/crtcrsr/crtcrsr.m
@@ -0,0 +1,232 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CreateCursor XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for CreateCursor request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+Pixmap pix;
+xCreateCursorReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ pix = Create_Default_Cursor_Pixmap(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xCreateCursorReq *) Make_Req(CLIENT, X_CreateCursor);
+ if(test_type == BAD_IDCHOICE1) {
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent CreateCursor request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ }
+ if(test_type == BAD_IDCHOICE2) {
+ req->cid = 0xffffffff; /* top 2 bits set ==> invalid */
+ }
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default CreateCursor request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE1:
+ Log_Trace("client %d sent CreateCursor request with same resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE2:
+ Log_Trace("client %d sent CreateCursor request with out-of-range resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent CreateCursor request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong CreateCursor request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is already in use,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE1;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is outside the range assigned to the client,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE2;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/crtgc/crtgc.m b/xc/test/xsuite/xtest/tset/XPROTO/crtgc/crtgc.m
new file mode 100644
index 000000000..1c06a7553
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/crtgc/crtgc.m
@@ -0,0 +1,260 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CreateGC XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for CreateGC request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xCreateGCReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xCreateGCReq *) Make_Req(CLIENT, X_CreateGC);
+ if(test_type == BAD_IDCHOICE1) {
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent CreateGC request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ }
+ if(test_type == BAD_IDCHOICE2) {
+ req->gc = 0xffffffff; /* top 2 bits set ==> invalid */
+ }
+ if(test_type == BAD_VALUE) {
+ req->mask |= 1<<28; /* an unused mask bit */
+ req->length += 1;
+ req = (xCreateGCReq *) Xstrealloc((char *) req, req->length<<2);
+ }
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default CreateGC request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE1:
+ Log_Trace("client %d sent CreateGC request with same resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE2:
+ Log_Trace("client %d sent CreateGC request with out-of-range resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_VALUE:
+ Log_Trace("client %d sent CreateGC request with illegal mask\n", CLIENT);
+ (void) Expect_BadValue(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent CreateGC request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong CreateGC request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is already in use,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE1;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is outside the range assigned to the client,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE2;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the mask value contains an unused bit,
+then the X server sends back a BadValue error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+>>CODE
+
+ test_type = BAD_VALUE;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/crtglyphcr/crtglyphcr.m b/xc/test/xsuite/xtest/tset/XPROTO/crtglyphcr/crtglyphcr.m
new file mode 100644
index 000000000..b29de5b66
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/crtglyphcr/crtglyphcr.m
@@ -0,0 +1,234 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CreateGlyphCursor XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>SET tpstartup tpfontstartup
+>>SET tpcleanup tpfontcleanup
+>>EXTERN
+/* Touch test for CreateGlyphCursor request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xCreateGlyphCursorReq *req;
+
+static
+void
+tester()
+{
+ Set_Init_Timer();
+
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Font(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xCreateGlyphCursorReq *) Make_Req(CLIENT, X_CreateGlyphCursor);
+ if(test_type == BAD_IDCHOICE1) {
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent CreateGlyphCursor request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ }
+ if(test_type == BAD_IDCHOICE2) {
+ req->cid = 0xffffffff; /* top 2 bits set ==> invalid */
+ }
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default CreateGlyphCursor request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE1:
+ Log_Trace("client %d sent CreateGlyphCursor request with same resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE2:
+ Log_Trace("client %d sent CreateGlyphCursor request with out-of-range resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent CreateGlyphCursor request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong CreateGlyphCursor request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is already in use,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE1;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is outside the range assigned to the client,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE2;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/crtpxmp/crtpxmp.m b/xc/test/xsuite/xtest/tset/XPROTO/crtpxmp/crtpxmp.m
new file mode 100644
index 000000000..54dff65dc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/crtpxmp/crtpxmp.m
@@ -0,0 +1,229 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CreatePixmap XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for CreatePixmap request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xCreatePixmapReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xCreatePixmapReq *) Make_Req(CLIENT, X_CreatePixmap);
+ if(test_type == BAD_IDCHOICE1) {
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent CreatePixmap request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ }
+ if(test_type == BAD_IDCHOICE2) {
+ req->pid = 0xffffffff; /* top 2 bits set ==> invalid */
+ }
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default CreatePixmap request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE1:
+ Log_Trace("client %d sent CreatePixmap request with same resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE2:
+ Log_Trace("client %d sent CreatePixmap request with out-of-range resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent CreatePixmap request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong CreatePixmap request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is already in use,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE1;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is outside the range assigned to the client,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE2;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/crtwdw/crtwdw.m b/xc/test/xsuite/xtest/tset/XPROTO/crtwdw/crtwdw.m
new file mode 100644
index 000000000..b20540bd4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/crtwdw/crtwdw.m
@@ -0,0 +1,265 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE CreateWindow XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for CreateWindow request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window Default_Window;
+xCreateWindowReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Default_Window = Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xCreateWindowReq *) Make_Req(CLIENT, X_CreateWindow);
+ req->parent = Default_Window;
+ if(test_type == BAD_IDCHOICE1) {
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent CreateWindow request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ }
+ if(test_type == BAD_IDCHOICE2) {
+ req->wid = 0xffffffff; /* top 2 bits set ==> invalid */
+ }
+ if(test_type == BAD_VALUE) {
+ req->mask |= 1<<28; /* an unused mask bit */
+ req->length += 1;
+ req = (xCreateWindowReq *) Xstrealloc((char *) req, req->length<<2);
+ }
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default CreateWindow request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE1:
+ Log_Trace("client %d sent CreateWindow request with same resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE2:
+ Log_Trace("client %d sent CreateWindow request with out-of-range resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_VALUE:
+ Log_Trace("client %d sent CreateWindow request with illegal mask\n", CLIENT);
+ (void) Expect_BadValue(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent CreateWindow request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong CreateWindow request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is already in use,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE1;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is outside the range assigned to the client,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE2;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the mask value contains an unused bit,
+then the X server sends back a BadValue error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with a mask value
+ containing an unused bit.
+Verify that the X server sends back a BadValue error.
+>>CODE
+
+ test_type = BAD_VALUE;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/dltprprty/dltprprty.m b/xc/test/xsuite/xtest/tset/XPROTO/dltprprty/dltprprty.m
new file mode 100644
index 000000000..ad3cba143
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/dltprprty/dltprprty.m
@@ -0,0 +1,179 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE DeleteProperty XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for DeleteProperty request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Atom Test_Property;
+xChangePropertyReq *cpr;
+xDeletePropertyReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ Test_Property = Create_Default_Atom(CLIENT);
+
+ cpr = (xChangePropertyReq *) Make_Req(CLIENT, X_ChangeProperty);
+ cpr->property = Test_Property;
+ Send_Req(CLIENT, (xReq *) cpr);
+ Log_Trace("client %d sent default ChangeProperty request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(cpr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xDeletePropertyReq *) Make_Req(CLIENT, X_DeleteProperty);
+ req->property = Test_Property;
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default DeleteProperty request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent DeleteProperty request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong DeleteProperty request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/dstrysbws/dstrysbws.m b/xc/test/xsuite/xtest/tset/XPROTO/dstrysbws/dstrysbws.m
new file mode 100644
index 000000000..44c4b6afa
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/dstrysbws/dstrysbws.m
@@ -0,0 +1,177 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE DestroySubwindows XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for DestroySubwindows request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window Default_Window;
+xCreateWindowReq *cwr;
+xResourceReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Default_Window = Create_Default_Window(CLIENT);
+
+ cwr = (xCreateWindowReq *) Make_Req(CLIENT, X_CreateWindow);
+ cwr->parent = Default_Window;
+ Send_Req(CLIENT, (xReq *) cwr);
+ Log_Trace("client %d sent additional CreateWindow request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(cwr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_DestroySubwindows);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default DestroySubwindows request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent DestroySubwindows request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong DestroySubwindows request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/dstrywdw/dstrywdw.m b/xc/test/xsuite/xtest/tset/XPROTO/dstrywdw/dstrywdw.m
new file mode 100644
index 000000000..b2421e7ce
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/dstrywdw/dstrywdw.m
@@ -0,0 +1,168 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE DestroyWindow XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for DestroyWindow request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_DestroyWindow);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default DestroyWindow request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent DestroyWindow request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong DestroyWindow request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/fllply/fllply.m b/xc/test/xsuite/xtest/tset/XPROTO/fllply/fllply.m
new file mode 100644
index 000000000..cee067126
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/fllply/fllply.m
@@ -0,0 +1,156 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE FillPoly XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for FillPoly request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xFillPolyReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xFillPolyReq *) Make_Req(CLIENT, X_FillPoly);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default FillPoly request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent FillPoly request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong FillPoly request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request
+plus zero or more vertices,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request + zero vertices.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request + zero vertices.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/frclrmp/frclrmp.m b/xc/test/xsuite/xtest/tset/XPROTO/frclrmp/frclrmp.m
new file mode 100644
index 000000000..3adbe92a8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/frclrmp/frclrmp.m
@@ -0,0 +1,178 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE FreeColormap XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for FreeColormap request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+
+/*
+ intent: send a FreeColormap request to the server and check
+ that the server sent nothing back
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ methods:
+*/
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_FreeColormap);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default FreeColormap request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent FreeColormap request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong FreeColormap request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/frclrs/frclrs.m b/xc/test/xsuite/xtest/tset/XPROTO/frclrs/frclrs.m
new file mode 100644
index 000000000..962fc0469
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/frclrs/frclrs.m
@@ -0,0 +1,182 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE FreeColors XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for FreeColors request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xAllocNamedColorReply *alloc_reply;
+extern unsigned long reply_pixel;
+
+/*
+ intent: send a FreeColors request to the server and check
+ that the server sent nothing back.
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ writes to global reply_pixel
+ methods:
+*/
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+
+ /* allocate a color and store pixel from reply in global */
+
+ req = (xResourceReq *) Make_Req(CLIENT, X_AllocNamedColor);
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent default AllocNamedColor request\n", CLIENT);
+ if ((alloc_reply = (xAllocNamedColorReply *) Expect_Reply(CLIENT, X_AllocNamedColor)) == NULL) {
+ Log_Err("client %d failed to receive AllocNamedColor reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received AllocNamedColor reply\n", CLIENT);
+ }
+ reply_pixel = alloc_reply->pixel;
+ (void) Expect_Nothing(CLIENT);
+
+ /* free the allocated color cell */
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_FreeColors);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default FreeColors request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent FreeColors request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong FreeColors request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good C
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/frcrsr/frcrsr.m b/xc/test/xsuite/xtest/tset/XPROTO/frcrsr/frcrsr.m
new file mode 100644
index 000000000..d212b1bdc
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/frcrsr/frcrsr.m
@@ -0,0 +1,167 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE FreeCursor XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for FreeCursor request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Cursor_Pixmap(CLIENT);
+ (void) Create_Default_Cursor(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_FreeCursor);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default FreeCursor request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent FreeCursor request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong FreeCursor request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/frcscrnsvr/frcscrnsvr.m b/xc/test/xsuite/xtest/tset/XPROTO/frcscrnsvr/frcscrnsvr.m
new file mode 100644
index 000000000..c54d05271
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/frcscrnsvr/frcscrnsvr.m
@@ -0,0 +1,165 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ForceScreenSaver XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ForceScreenSaver request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xForceScreenSaverReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ /* Activate screen saver */
+ Set_Test_Type(CLIENT, test_type);
+ req = (xForceScreenSaverReq *) Make_Req(CLIENT, X_ForceScreenSaver);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ForceScreenSaver request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ForceScreenSaver request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ForceScreenSaver request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/frgc/frgc.m b/xc/test/xsuite/xtest/tset/XPROTO/frgc/frgc.m
new file mode 100644
index 000000000..51d5d0b91
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/frgc/frgc.m
@@ -0,0 +1,166 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE FreeGC XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for FreeGC request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_FreeGC);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default FreeGC request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent FreeGC request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong FreeGC request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/frpxmp/frpxmp.m b/xc/test/xsuite/xtest/tset/XPROTO/frpxmp/frpxmp.m
new file mode 100644
index 000000000..0c84fb9fa
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/frpxmp/frpxmp.m
@@ -0,0 +1,167 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE FreePixmap XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for FreePixmap request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Pixmap Default_Pixmap;
+xResourceReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ Default_Pixmap = Create_Default_Pixmap(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_FreePixmap);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default FreePixmap request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent FreePixmap request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong FreePixmap request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/grbbttn/grbbttn.m b/xc/test/xsuite/xtest/tset/XPROTO/grbbttn/grbbttn.m
new file mode 100644
index 000000000..568d357fb
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/grbbttn/grbbttn.m
@@ -0,0 +1,165 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GrabButton XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GrabButton request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xGrabButtonReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xGrabButtonReq *) Make_Req(CLIENT, X_GrabButton);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GrabButton request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GrabButton request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GrabButton request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/grbky/grbky.m b/xc/test/xsuite/xtest/tset/XPROTO/grbky/grbky.m
new file mode 100644
index 000000000..8bdc70a2c
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/grbky/grbky.m
@@ -0,0 +1,165 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GrabKey XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GrabKey request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xGrabKeyReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xGrabKeyReq *) Make_Req(CLIENT, X_GrabKey);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GrabKey request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GrabKey request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GrabKey request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/grbkybrd/grbkybrd.m b/xc/test/xsuite/xtest/tset/XPROTO/grbkybrd/grbkybrd.m
new file mode 100644
index 000000000..a8c884e1b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/grbkybrd/grbkybrd.m
@@ -0,0 +1,175 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GrabKeyboard XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GrabKeyboard request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xGrabKeyboardReq *req;
+xGrabKeyboardReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xGrabKeyboardReq *) Make_Req(CLIENT, X_GrabKeyboard);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GrabKeyboard request\n", CLIENT);
+ if ((rep = (xGrabKeyboardReply *) Expect_Reply(CLIENT, X_GrabKeyboard)) == NULL) {
+ Log_Err("client %d failed to receive GrabKeyboard reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GrabKeyboard reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GrabKeyboard request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GrabKeyboard request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/grbpntr/grbpntr.m b/xc/test/xsuite/xtest/tset/XPROTO/grbpntr/grbpntr.m
new file mode 100644
index 000000000..d4407daf0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/grbpntr/grbpntr.m
@@ -0,0 +1,175 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GrabPointer XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GrabPointer request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xGrabPointerReq *req;
+xGrabPointerReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xGrabPointerReq *) Make_Req(CLIENT, X_GrabPointer);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GrabPointer request\n", CLIENT);
+ if ((rep = (xGrabPointerReply *) Expect_Reply(CLIENT, X_GrabPointer)) == NULL) {
+ Log_Err("client %d failed to receive GrabPointer reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GrabPointer reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GrabPointer request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GrabPointer request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/grbsrvr/grbsrvr.m b/xc/test/xsuite/xtest/tset/XPROTO/grbsrvr/grbsrvr.m
new file mode 100644
index 000000000..2f53ea652
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/grbsrvr/grbsrvr.m
@@ -0,0 +1,165 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GrabServer XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GrabServer request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xReq *) Make_Req(CLIENT, X_GrabServer);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GrabServer request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GrabServer request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GrabServer request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtatmnm/gtatmnm.m b/xc/test/xsuite/xtest/tset/XPROTO/gtatmnm/gtatmnm.m
new file mode 100644
index 000000000..0f961b086
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtatmnm/gtatmnm.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetAtomName XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetAtomName request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xGetAtomNameReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_GetAtomName);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetAtomName request\n", CLIENT);
+ if ((rep = (xGetAtomNameReply *) Expect_Reply(CLIENT, X_GetAtomName)) == NULL) {
+ Log_Err("client %d failed to receive GetAtomName reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetAtomName reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetAtomName request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetAtomName request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtfntpth/gtfntpth.m b/xc/test/xsuite/xtest/tset/XPROTO/gtfntpth/gtfntpth.m
new file mode 100644
index 000000000..04f8e1021
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtfntpth/gtfntpth.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetFontPath XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetFontPath request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *req;
+xGetFontPathReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xReq *) Make_Req(CLIENT, X_GetFontPath);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetFontPath request\n", CLIENT);
+ if ((rep = (xGetFontPathReply *) Expect_Reply(CLIENT, X_GetFontPath)) == NULL) {
+ Log_Err("client %d failed to receive GetFontPath reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetFontPath reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetFontPath request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetFontPath request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtgmtry/gtgmtry.m b/xc/test/xsuite/xtest/tset/XPROTO/gtgmtry/gtgmtry.m
new file mode 100644
index 000000000..e938d2daf
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtgmtry/gtgmtry.m
@@ -0,0 +1,175 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetGeometry XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetGeometry request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xGetGeometryReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_GetGeometry);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetGeometry request\n", CLIENT);
+ if ((rep = (xGetGeometryReply *) Expect_Reply(CLIENT, X_GetGeometry)) == NULL) {
+ Log_Err("client %d failed to receive GetGeometry reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetGeometry reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetGeometry request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetGeometry request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtimg/gtimg.m b/xc/test/xsuite/xtest/tset/XPROTO/gtimg/gtimg.m
new file mode 100644
index 000000000..488ad1e29
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtimg/gtimg.m
@@ -0,0 +1,183 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetImage XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetImage request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xPolyRectangleReq *prr;
+xGetImageReq *req;
+xGetImageReply *rep;
+
+static
+void
+tester()
+{
+ unsigned char *from;
+ unsigned char *to;
+ unsigned int len;
+
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win);
+
+ prr = (xPolyRectangleReq *) Make_Req(CLIENT, X_PolyRectangle);
+ Send_Req(CLIENT, (xReq *) prr);
+ Log_Trace("client %d sent pixmap PolyRectangle request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(req);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xGetImageReq *) Make_Req(CLIENT, X_GetImage);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetImage request\n", CLIENT);
+ rep = (xGetImageReply *) Expect_Reply(CLIENT, X_GetImage);
+ (void) Expect_Nothing(CLIENT);
+ Free_Reply(rep);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetImage request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetImage request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtinptfcs/gtinptfcs.m b/xc/test/xsuite/xtest/tset/XPROTO/gtinptfcs/gtinptfcs.m
new file mode 100644
index 000000000..17985119e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtinptfcs/gtinptfcs.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetInputFocus XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetInputFocus request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *req;
+xGetInputFocusReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xReq *) Make_Req(CLIENT, X_GetInputFocus);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetInputFocus request\n", CLIENT);
+ if ((rep = (xGetInputFocusReply *) Expect_Reply(CLIENT, X_GetInputFocus)) == NULL) {
+ Log_Err("client %d failed to receive GetInputFocus reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetInputFocus reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetInputFocus request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetInputFocus request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtkybrdcnt/gtkybrdcnt.m b/xc/test/xsuite/xtest/tset/XPROTO/gtkybrdcnt/gtkybrdcnt.m
new file mode 100644
index 000000000..6f00e7554
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtkybrdcnt/gtkybrdcnt.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetKeyboardControl XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetKeyboardControl request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *req;
+xGetKeyboardControlReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xReq *) Make_Req(CLIENT, X_GetKeyboardControl);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetKeyboardControl request\n", CLIENT);
+ if ((rep = (xGetKeyboardControlReply *) Expect_Reply(CLIENT, X_GetKeyboardControl)) == NULL) {
+ Log_Err("client %d failed to receive GetKeyboardControl reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetKeyboardControl reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetKeyboardControl request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetKeyboardControl request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtkybrdmpp/gtkybrdmpp.m b/xc/test/xsuite/xtest/tset/XPROTO/gtkybrdmpp/gtkybrdmpp.m
new file mode 100644
index 000000000..3cacb18e2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtkybrdmpp/gtkybrdmpp.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetKeyboardMapping XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetKeyboardMapping request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xGetKeyboardMappingReq *req;
+xGetKeyboardMappingReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xGetKeyboardMappingReq *) Make_Req(CLIENT, X_GetKeyboardMapping);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetKeyboardMapping request\n", CLIENT);
+ if ((rep = (xGetKeyboardMappingReply *) Expect_Reply(CLIENT, X_GetKeyboardMapping)) == NULL) {
+ Log_Err("client %d failed to receive GetKeyboardMapping reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetKeyboardMapping reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetKeyboardMapping request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetKeyboardMapping request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtmdfrmppn/gtmdfrmppn.m b/xc/test/xsuite/xtest/tset/XPROTO/gtmdfrmppn/gtmdfrmppn.m
new file mode 100644
index 000000000..1496ecd29
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtmdfrmppn/gtmdfrmppn.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetModifierMapping XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetModifierMapping request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *req;
+xGetModifierMappingReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xReq *) Make_Req(CLIENT, X_GetModifierMapping);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetModifierMapping request\n", CLIENT);
+ if ((rep = (xGetModifierMappingReply *) Expect_Reply(CLIENT, X_GetModifierMapping)) == NULL) {
+ Log_Err("client %d failed to receive GetModifierMapping reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetModifierMapping reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetModifierMapping request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetModifierMapping request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtmtnevnts/gtmtnevnts.m b/xc/test/xsuite/xtest/tset/XPROTO/gtmtnevnts/gtmtnevnts.m
new file mode 100644
index 000000000..be837f171
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtmtnevnts/gtmtnevnts.m
@@ -0,0 +1,175 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetMotionEvents XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetMotionEvents request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xGetMotionEventsReq *req;
+xGetMotionEventsReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xGetMotionEventsReq *) Make_Req(CLIENT, X_GetMotionEvents);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetMotionEvents request\n", CLIENT);
+ if ((rep = (xGetMotionEventsReply *) Expect_Reply(CLIENT, X_GetMotionEvents)) == NULL) {
+ Log_Err("client %d failed to receive GetMotionEvents reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetMotionEvents reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetMotionEvents request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetMotionEvents request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtpntrcntr/gtpntrcntr.m b/xc/test/xsuite/xtest/tset/XPROTO/gtpntrcntr/gtpntrcntr.m
new file mode 100644
index 000000000..a7c74ba83
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtpntrcntr/gtpntrcntr.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetPointerControl XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetPointerControl request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *req;
+xGetPointerControlReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xReq *) Make_Req(CLIENT, X_GetPointerControl);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetPointerControl request\n", CLIENT);
+ if ((rep = (xGetPointerControlReply *) Expect_Reply(CLIENT, X_GetPointerControl)) == NULL) {
+ Log_Err("client %d failed to receive GetPointerControl reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetPointerControl reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetPointerControl request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetPointerControl request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtpntrmppn/gtpntrmppn.m b/xc/test/xsuite/xtest/tset/XPROTO/gtpntrmppn/gtpntrmppn.m
new file mode 100644
index 000000000..d825cfdd5
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtpntrmppn/gtpntrmppn.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetPointerMapping XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetPointerMapping request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *req;
+xGetPointerMappingReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xReq *) Make_Req(CLIENT, X_GetPointerMapping);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetPointerMapping request\n", CLIENT);
+ if ((rep = (xGetPointerMappingReply *) Expect_Reply(CLIENT, X_GetPointerMapping)) == NULL) {
+ Log_Err("client %d failed to receive GetPointerMapping reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetPointerMapping reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetPointerMapping request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetPointerMapping request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtprprty/gtprprty.m b/xc/test/xsuite/xtest/tset/XPROTO/gtprprty/gtprprty.m
new file mode 100644
index 000000000..97ec5ad22
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtprprty/gtprprty.m
@@ -0,0 +1,186 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetProperty XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetProperty request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Atom Test_Property;
+xChangePropertyReq *cpr;
+xGetPropertyReq *req;
+xGetPropertyReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ Test_Property = Create_Default_Atom(CLIENT);
+
+ cpr = (xChangePropertyReq *) Make_Req(CLIENT, X_ChangeProperty);
+ cpr->property = Test_Property;
+ Send_Req(CLIENT, (xReq *) cpr);
+ Log_Trace("client %d sent default ChangeProperty request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(cpr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xGetPropertyReq *) Make_Req(CLIENT, X_GetProperty);
+ req->property = Test_Property;
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetProperty request\n", CLIENT);
+ if ((rep = (xGetPropertyReply *) Expect_Reply(CLIENT, X_GetProperty)) == NULL) {
+ Log_Err("client %d failed to receive GetProperty reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetProperty reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetProperty request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetProperty request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtscrnsvr/gtscrnsvr.m b/xc/test/xsuite/xtest/tset/XPROTO/gtscrnsvr/gtscrnsvr.m
new file mode 100644
index 000000000..ca5ef0824
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtscrnsvr/gtscrnsvr.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetScreenSaver XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetScreenSaver request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *req;
+xGetScreenSaverReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xReq *) Make_Req(CLIENT, X_GetScreenSaver);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetScreenSaver request\n", CLIENT);
+ if ((rep = (xGetScreenSaverReply *) Expect_Reply(CLIENT, X_GetScreenSaver)) == NULL) {
+ Log_Err("client %d failed to receive GetScreenSaver reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetScreenSaver reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetScreenSaver request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetScreenSaver request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtslctnown/gtslctnown.m b/xc/test/xsuite/xtest/tset/XPROTO/gtslctnown/gtslctnown.m
new file mode 100644
index 000000000..e33fe65a4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtslctnown/gtslctnown.m
@@ -0,0 +1,183 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetSelectionOwner XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetSelectionOwner request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Atom Test_Property;
+xResourceReq *req;
+xSetSelectionOwnerReq *ssor;
+xGetSelectionOwnerReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ Test_Property = Create_Default_Atom(CLIENT);
+
+ ssor = (xSetSelectionOwnerReq *) Make_Req(CLIENT, X_SetSelectionOwner);
+ Send_Req(CLIENT, (xReq *) ssor);
+ Log_Trace("client %d sent default SetSelectionOwner request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(ssor);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_GetSelectionOwner);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetSelectionOwner request\n", CLIENT);
+ if ((rep = (xGetSelectionOwnerReply *) Expect_Reply(CLIENT, X_GetSelectionOwner)) == NULL) {
+ Log_Err("client %d failed to receive GetSelectionOwner reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetSelectionOwner reply\n", CLIENT);
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetSelectionOwner request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetSelectionOwner request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/gtwdwattrb/gtwdwattrb.m b/xc/test/xsuite/xtest/tset/XPROTO/gtwdwattrb/gtwdwattrb.m
new file mode 100644
index 000000000..9b05926c3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/gtwdwattrb/gtwdwattrb.m
@@ -0,0 +1,175 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE GetWindowAttributes XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for GetWindowAttributes request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xGetWindowAttributesReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_GetWindowAttributes);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default GetWindowAttributes request\n", CLIENT);
+ if ((rep = (xGetWindowAttributesReply *) Expect_Reply(CLIENT, X_GetWindowAttributes)) == NULL) {
+ Log_Err("client %d failed to receive GetWindowAttributes reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetWindowAttributes reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent GetWindowAttributes request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong GetWindowAttributes request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/imgtxt16/imgtxt16.m b/xc/test/xsuite/xtest/tset/XPROTO/imgtxt16/imgtxt16.m
new file mode 100644
index 000000000..594546609
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/imgtxt16/imgtxt16.m
@@ -0,0 +1,205 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ImageText16 XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>SET tpstartup tpfontstartup
+>>SET tpcleanup tpfontcleanup
+>>EXTERN
+/* Touch test for ImageText16 request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xImageText16Req *req;
+xCreateGCReq *gc_req;
+xOpenFontReq *font_req;
+
+static
+void
+tester()
+{
+ Set_Init_Timer();
+
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+
+ /* open the xtfont2 font to get its resource id for GContext */
+
+ font_req = (xOpenFontReq *) Make_Req(CLIENT, X_OpenFont);
+ font_req = (xOpenFontReq *) Clear_Counted_Value (font_req);
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, 'x');
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, 't');
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, 'f');
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, 'o');
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, 'n');
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, 't');
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, '2');
+ Send_Req(CLIENT, (xReq *) font_req);
+ Log_Trace("client %d sent default OpenFont request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+
+ /* create a default GContext with xtfont2 as the font */
+
+ gc_req = (xCreateGCReq *) Make_Req (CLIENT, X_CreateGC);
+ gc_req = (xCreateGCReq *) Add_Masked_Value (gc_req, GCFont, font_req->fid);
+ Send_Req (CLIENT, (xReq *) gc_req);
+ Log_Trace ("client %d sent CreateGC request\n", CLIENT);
+ Expect_Nothing (CLIENT);
+ Set_Default_GContext (CLIENT, gc_req->gc);
+ Free_Req (gc_req);
+ Free_Req (font_req);
+
+ /* map window, send ImageText16 request, and check results visually */
+
+ Map_Window(CLIENT, win);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xImageText16Req *) Make_Req(CLIENT, X_ImageText16);
+
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ImageText16 request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ImageText16 request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ImageText16 request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length
+accepted by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ greater than that accepted by the X server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ greater than that accepted by the X server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/imgtxt8/imgtxt8.m b/xc/test/xsuite/xtest/tset/XPROTO/imgtxt8/imgtxt8.m
new file mode 100644
index 000000000..d981695e8
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/imgtxt8/imgtxt8.m
@@ -0,0 +1,169 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ImageText8 XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ImageText8 request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xImageText8Req *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xImageText8Req *) Make_Req(CLIENT, X_ImageText8);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ImageText8 request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ImageText8 request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ImageText8 request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/instllclrm/instllclrm.m b/xc/test/xsuite/xtest/tset/XPROTO/instllclrm/instllclrm.m
new file mode 100644
index 000000000..237288e8e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/instllclrm/instllclrm.m
@@ -0,0 +1,201 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE InstallColormap XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for InstallColormap request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xAllocColorCellsReply *reply;
+
+/*
+ intent: send a InstallColormap request to the server and check
+ that nothing was sent back.
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource.
+ installs a color map.
+ methods:
+*/
+
+static
+void
+tester()
+{
+
+
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+
+ /* Allocate color cells if client hasn't got any */
+
+ if (Allocatable (CLIENT)) {
+ req = (xResourceReq *) Make_Req(CLIENT, X_AllocColorCells);
+ Send_Req(CLIENT, (xReq *) req);
+ if ((reply = (xAllocColorCellsReply *) Expect_Reply(CLIENT, X_AllocColorCells)) == NULL) {
+ Log_Err("client %d failed to receive AllocColorCells reply\n", CLIENT);
+ Exit();
+ }
+ else {
+ Log_Trace("client %d received AllocColorCells reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(reply);
+ }
+ Free_Req(req);
+ }
+ (void) Expect_Nothing(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_InstallColormap);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default InstallColormap request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent InstallColormap request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong InstallColormap request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/intrnatm/intrnatm.m b/xc/test/xsuite/xtest/tset/XPROTO/intrnatm/intrnatm.m
new file mode 100644
index 000000000..448bc99b4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/intrnatm/intrnatm.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE InternAtom XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for InternAtom request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xInternAtomReq *req;
+xInternAtomReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xInternAtomReq *) Make_Req(CLIENT, X_InternAtom);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default InternAtom request\n", CLIENT);
+ if ((rep = (xInternAtomReply *) Expect_Reply(CLIENT, X_InternAtom)) == NULL) {
+ Log_Err("client %d failed to receive InternAtom reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received InternAtom reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent InternAtom request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong InternAtom request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/kllclnt/kllclnt.m b/xc/test/xsuite/xtest/tset/XPROTO/kllclnt/kllclnt.m
new file mode 100644
index 000000000..a8a46d852
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/kllclnt/kllclnt.m
@@ -0,0 +1,174 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE KillClient XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for KillClient request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define VICTIM 0
+#define CLIENT 1
+static TestType test_type = SETUP;
+Window win;
+xResourceReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(VICTIM);
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(VICTIM);
+ (void) Create_Default_GContext(VICTIM);
+
+ /* We can't send anything on the VICTIM client to see if it's
+ really been killed. If we do, the library will see "Connection
+ reset by peer" and blow off the test. */
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_KillClient);
+ req->id = win;
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default KillClient request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent KillClient request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong KillClient request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/linktbl.c b/xc/test/xsuite/xtest/tset/XPROTO/linktbl.c
new file mode 100644
index 000000000..3d42f8a7b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/linktbl.c
@@ -0,0 +1,252 @@
+/* $XConsortium$ */
+
+#include "xtest.h"
+
+extern struct linkinfo EAllcClr;
+extern struct linkinfo EAllcClrClls;
+extern struct linkinfo EAllcClrPlns;
+extern struct linkinfo EAllcNmdClr;
+extern struct linkinfo EAllwEvnts;
+extern struct linkinfo EBdRqst;
+extern struct linkinfo EBll;
+extern struct linkinfo EChngActvPntr;
+extern struct linkinfo EChngGC;
+extern struct linkinfo EChngHsts;
+extern struct linkinfo EChngKybrdCnt;
+extern struct linkinfo EChngKybrdMpp;
+extern struct linkinfo EChngPntrCntr;
+extern struct linkinfo EChngPrprty;
+extern struct linkinfo EChngSvSt;
+extern struct linkinfo EChngWdwAttrb;
+extern struct linkinfo ECrcltWdw;
+extern struct linkinfo EClrAr;
+extern struct linkinfo EClsFnt;
+extern struct linkinfo ECnfgrWdw;
+extern struct linkinfo ECnvrtSlctn;
+extern struct linkinfo ECpyAr;
+extern struct linkinfo ECpyClrmpAndF;
+extern struct linkinfo ECpyGC;
+extern struct linkinfo ECpyPln;
+extern struct linkinfo ECrtClrmp;
+extern struct linkinfo ECrtCrsr;
+extern struct linkinfo ECrtGC;
+extern struct linkinfo ECrtGlyphCrsr;
+extern struct linkinfo ECrtPxmp;
+extern struct linkinfo ECrtWdw;
+extern struct linkinfo EDltPrprty;
+extern struct linkinfo EDstrySbws;
+extern struct linkinfo EDstryWdw;
+extern struct linkinfo EFllPly;
+extern struct linkinfo EFrcScrnSvr;
+extern struct linkinfo EFrClrmp;
+extern struct linkinfo EFrClrs;
+extern struct linkinfo EFrCrsr;
+extern struct linkinfo EFrGC;
+extern struct linkinfo EFrPxmp;
+extern struct linkinfo EGtAtmNm;
+extern struct linkinfo EGtFntPth;
+extern struct linkinfo EGtGmtry;
+extern struct linkinfo EGtImg;
+extern struct linkinfo EGtInptFcs;
+extern struct linkinfo EGtKybrdCntrl;
+extern struct linkinfo EGtKybrdMppng;
+extern struct linkinfo EGtMdfrMppng;
+extern struct linkinfo EGtMtnEvnts;
+extern struct linkinfo EGtPntrCntrl;
+extern struct linkinfo EGtPntrMppng;
+extern struct linkinfo EGtPrprty;
+extern struct linkinfo EGtScrnSvr;
+extern struct linkinfo EGtSlctnOwnr;
+extern struct linkinfo EGtWdwAttrbts;
+extern struct linkinfo EGrbBttn;
+extern struct linkinfo EGrbKy;
+extern struct linkinfo EGrbKybrd;
+extern struct linkinfo EGrbPntr;
+extern struct linkinfo EGrbSrvr;
+extern struct linkinfo EImgTxt16;
+extern struct linkinfo EImgTxt8;
+extern struct linkinfo EInstllClrmp;
+extern struct linkinfo EIntrnAtm;
+extern struct linkinfo EKllClnt;
+extern struct linkinfo ELstExtnsns;
+extern struct linkinfo ELstFnts;
+extern struct linkinfo ELstFntsWthIn;
+extern struct linkinfo ELstHsts;
+extern struct linkinfo ELstInstlldCl;
+extern struct linkinfo ELstPrprts;
+extern struct linkinfo ELkpClr;
+extern struct linkinfo EMpSbws;
+extern struct linkinfo EMpWdw;
+extern struct linkinfo ENOprtn;
+extern struct linkinfo EOpnDsply;
+extern struct linkinfo EOpnFnt;
+extern struct linkinfo EPlyArc;
+extern struct linkinfo EPlyFllArc;
+extern struct linkinfo EPlyFllRctngl;
+extern struct linkinfo EPlyLn;
+extern struct linkinfo EPlyPnt;
+extern struct linkinfo EPlyRctngl;
+extern struct linkinfo EPlySgmnt;
+extern struct linkinfo EPlyTxt16;
+extern struct linkinfo EPlyTxt8;
+extern struct linkinfo EPtImg;
+extern struct linkinfo EQryBstSz;
+extern struct linkinfo EQryClrs;
+extern struct linkinfo EQryExtnsn;
+extern struct linkinfo EQryFnt;
+extern struct linkinfo EQryKymp;
+extern struct linkinfo EQryPntr;
+extern struct linkinfo EQryTxtExtnts;
+extern struct linkinfo EQryTr;
+extern struct linkinfo ERclrCrsr;
+extern struct linkinfo ERprntWdw;
+extern struct linkinfo ERttPrprts;
+extern struct linkinfo ESndEvnt;
+extern struct linkinfo EStAccssCntrl;
+extern struct linkinfo EStClpRctngls;
+extern struct linkinfo EStClsDwnMd;
+extern struct linkinfo EStDshs;
+extern struct linkinfo EStFntPth;
+extern struct linkinfo EStInptFcs;
+extern struct linkinfo EStMdfrMppng;
+extern struct linkinfo EStPntrMppng;
+extern struct linkinfo EStScrnSvr;
+extern struct linkinfo EStSlctnOwnr;
+extern struct linkinfo EStrClrs;
+extern struct linkinfo EStrNmdClr;
+extern struct linkinfo ETrnsltCrds;
+extern struct linkinfo EUngrbBttn;
+extern struct linkinfo EUngrbKy;
+extern struct linkinfo EUngrbKybrd;
+extern struct linkinfo EUngrbPntr;
+extern struct linkinfo EUngrbSrvr;
+extern struct linkinfo EUnnstllClrmp;
+extern struct linkinfo EUnmpSbws;
+extern struct linkinfo EUnmpWdw;
+extern struct linkinfo EWrpPntr;
+
+struct linkinfo *linktbl[] = {
+ &EAllcClr,
+ &EAllcClrClls,
+ &EAllcClrPlns,
+ &EAllcNmdClr,
+ &EAllwEvnts,
+ &EBdRqst,
+ &EBll,
+ &EChngActvPntr,
+ &EChngGC,
+ &EChngHsts,
+ &EChngKybrdCnt,
+ &EChngKybrdMpp,
+ &EChngPntrCntr,
+ &EChngPrprty,
+ &EChngSvSt,
+ &EChngWdwAttrb,
+ &ECrcltWdw,
+ &EClrAr,
+ &EClsFnt,
+ &ECnfgrWdw,
+ &ECnvrtSlctn,
+ &ECpyAr,
+ &ECpyClrmpAndF,
+ &ECpyGC,
+ &ECpyPln,
+ &ECrtClrmp,
+ &ECrtCrsr,
+ &ECrtGC,
+ &ECrtGlyphCrsr,
+ &ECrtPxmp,
+ &ECrtWdw,
+ &EDltPrprty,
+ &EDstrySbws,
+ &EDstryWdw,
+ &EFllPly,
+ &EFrcScrnSvr,
+ &EFrClrmp,
+ &EFrClrs,
+ &EFrCrsr,
+ &EFrGC,
+ &EFrPxmp,
+ &EGtAtmNm,
+ &EGtFntPth,
+ &EGtGmtry,
+ &EGtImg,
+ &EGtInptFcs,
+ &EGtKybrdCntrl,
+ &EGtKybrdMppng,
+ &EGtMdfrMppng,
+ &EGtMtnEvnts,
+ &EGtPntrCntrl,
+ &EGtPntrMppng,
+ &EGtPrprty,
+ &EGtScrnSvr,
+ &EGtSlctnOwnr,
+ &EGtWdwAttrbts,
+ &EGrbBttn,
+ &EGrbKy,
+ &EGrbKybrd,
+ &EGrbPntr,
+ &EGrbSrvr,
+ &EImgTxt16,
+ &EImgTxt8,
+ &EInstllClrmp,
+ &EIntrnAtm,
+ &EKllClnt,
+ &ELstExtnsns,
+ &ELstFnts,
+ &ELstFntsWthIn,
+ &ELstHsts,
+ &ELstInstlldCl,
+ &ELstPrprts,
+ &ELkpClr,
+ &EMpSbws,
+ &EMpWdw,
+ &ENOprtn,
+ &EOpnDsply,
+ &EOpnFnt,
+ &EPlyArc,
+ &EPlyFllArc,
+ &EPlyFllRctngl,
+ &EPlyLn,
+ &EPlyPnt,
+ &EPlyRctngl,
+ &EPlySgmnt,
+ &EPlyTxt16,
+ &EPlyTxt8,
+ &EPtImg,
+ &EQryBstSz,
+ &EQryClrs,
+ &EQryExtnsn,
+ &EQryFnt,
+ &EQryKymp,
+ &EQryPntr,
+ &EQryTxtExtnts,
+ &EQryTr,
+ &ERclrCrsr,
+ &ERprntWdw,
+ &ERttPrprts,
+ &ESndEvnt,
+ &EStAccssCntrl,
+ &EStClpRctngls,
+ &EStClsDwnMd,
+ &EStDshs,
+ &EStFntPth,
+ &EStInptFcs,
+ &EStMdfrMppng,
+ &EStPntrMppng,
+ &EStScrnSvr,
+ &EStSlctnOwnr,
+ &EStrClrs,
+ &EStrNmdClr,
+ &ETrnsltCrds,
+ &EUngrbBttn,
+ &EUngrbKy,
+ &EUngrbKybrd,
+ &EUngrbPntr,
+ &EUngrbSrvr,
+ &EUnnstllClrmp,
+ &EUnmpSbws,
+ &EUnmpWdw,
+ &EWrpPntr,
+ 0,
+};
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/lkpclr/lkpclr.m b/xc/test/xsuite/xtest/tset/XPROTO/lkpclr/lkpclr.m
new file mode 100644
index 000000000..08986c018
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/lkpclr/lkpclr.m
@@ -0,0 +1,185 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE LookupColor XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for LookupColor request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xLookupColorReply *rep;
+
+/*
+ intent: send a LookupColor request to the server and check
+ that the server sent a reply back
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ methods:
+*/
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_LookupColor);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default LookupColor request\n", CLIENT);
+ if ((rep = (xLookupColorReply *) Expect_Reply(CLIENT, X_LookupColor)) == NULL) {
+ Log_Err("client %d failed to receive LookupColor reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received LookupColor reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent LookupColor request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong LookupColor request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/lstextnsns/lstextnsns.m b/xc/test/xsuite/xtest/tset/XPROTO/lstextnsns/lstextnsns.m
new file mode 100644
index 000000000..4696f818b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/lstextnsns/lstextnsns.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ListExtensions XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ListExtensions request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *req;
+xListExtensionsReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xReq *) Make_Req(CLIENT, X_ListExtensions);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ListExtensions request\n", CLIENT);
+ if ((rep = (xListExtensionsReply *) Expect_Reply(CLIENT, X_ListExtensions)) == NULL) {
+ Log_Err("client %d failed to receive ListExtensions reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received ListExtensions reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ListExtensions request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ListExtensions request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/lstfnts/lstfnts.m b/xc/test/xsuite/xtest/tset/XPROTO/lstfnts/lstfnts.m
new file mode 100644
index 000000000..c5ccd2b1f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/lstfnts/lstfnts.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ListFonts XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ListFonts request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xListFontsReq *req;
+xListFontsReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xListFontsReq *) Make_Req(CLIENT, X_ListFonts);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ListFonts request\n", CLIENT);
+ if ((rep = (xListFontsReply *) Expect_Reply(CLIENT, X_ListFonts)) == NULL) {
+ Log_Err("client %d failed to receive ListFonts reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received ListFonts reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ListFonts request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ListFonts request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/lstfntswth/lstfntswth.m b/xc/test/xsuite/xtest/tset/XPROTO/lstfntswth/lstfntswth.m
new file mode 100644
index 000000000..451ea771d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/lstfntswth/lstfntswth.m
@@ -0,0 +1,184 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ListFontsWithInfo XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ListFontsWithInfo request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xCreateWindowReq *cwr;
+xListFontsWithInfoReq *req;
+xListFontsWithInfoReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xListFontsWithInfoReq *) Make_Req(CLIENT, X_ListFontsWithInfo);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ListFontsWithInfo request\n", CLIENT);
+ if ((rep = (xListFontsWithInfoReply *) Expect_Reply(CLIENT, X_ListFontsWithInfo)) == NULL) {
+ Log_Err("client %d failed to receive ListFontsWithInfo reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received ListFontsWithInfo reply\n", CLIENT);
+ /* do any reply checking here */
+ }
+ while (rep->nameLength != 0) {
+ Free_Reply(rep);
+ if ((rep = (xListFontsWithInfoReply *) Expect_Reply(CLIENT, X_ListFontsWithInfo)) == NULL) {
+ Log_Err("client %d failed to receive ListFontsWithInfo reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received ListFontsWithInfo reply\n", CLIENT);
+ /* do any reply checking here */
+ }
+ }
+ Free_Reply(rep);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ListFontsWithInfo request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ListFontsWithInfo request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back replies to the client
+until a reply with a zero length name is returned.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/lsthsts/lsthsts.m b/xc/test/xsuite/xtest/tset/XPROTO/lsthsts/lsthsts.m
new file mode 100644
index 000000000..acfebf949
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/lsthsts/lsthsts.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ListHosts XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ListHosts request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xListHostsReq *req;
+xListHostsReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xListHostsReq *) Make_Req(CLIENT, X_ListHosts);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ListHosts request\n", CLIENT);
+ if ((rep = (xListHostsReply *) Expect_Reply(CLIENT, X_ListHosts)) == NULL) {
+ Log_Err("client %d failed to receive ListHosts reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received ListHosts reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ListHosts request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ListHosts request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/lstinstlld/lstinstlld.m b/xc/test/xsuite/xtest/tset/XPROTO/lstinstlld/lstinstlld.m
new file mode 100644
index 000000000..74e0d5a83
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/lstinstlld/lstinstlld.m
@@ -0,0 +1,187 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ListInstalledColormaps XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ListInstalledColormaps request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xListInstalledColormapsReply *reply;
+
+/*
+ intent: send a ListInstalledColormaps request to the server and check
+ that the server sent a ListInstalledColormaps reply back.
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ methods:
+*/
+
+static
+void
+tester()
+{
+
+
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_ListInstalledColormaps);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ListInstalledColormaps request\n", CLIENT);
+ if ((reply = (xListInstalledColormapsReply *) Expect_Reply(CLIENT, X_ListInstalledColormaps)) == NULL) {
+ Log_Err("client %d failed to receive ListInstalledColormaps reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received ListInstalledColormaps reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(reply);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ListInstalledColormaps request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ListInstalledColormaps request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/lstprprts/lstprprts.m b/xc/test/xsuite/xtest/tset/XPROTO/lstprprts/lstprprts.m
new file mode 100644
index 000000000..ec1e257f2
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/lstprprts/lstprprts.m
@@ -0,0 +1,175 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ListProperties XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ListProperties request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xListPropertiesReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_ListProperties);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ListProperties request\n", CLIENT);
+ if ((rep = (xListPropertiesReply *) Expect_Reply(CLIENT, X_ListProperties)) == NULL) {
+ Log_Err("client %d failed to receive ListProperties reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received ListProperties reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ListProperties request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ListProperties request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/mpsbws/mpsbws.m b/xc/test/xsuite/xtest/tset/XPROTO/mpsbws/mpsbws.m
new file mode 100644
index 000000000..6a244502b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/mpsbws/mpsbws.m
@@ -0,0 +1,178 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE MapSubwindows XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for MapSubwindows request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window Default_Window;
+xCreateWindowReq *cwr;
+xResourceReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Default_Window = Create_Default_Window(CLIENT);
+
+ cwr = (xCreateWindowReq *) Make_Req(CLIENT, X_CreateWindow);
+ cwr->parent = Default_Window;
+ Send_Req(CLIENT, (xReq *) cwr);
+ Log_Trace("client %d sent additional CreateWindow request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(cwr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_MapSubwindows);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default MapSubwindows request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent MapSubwindows request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong MapSubwindows request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the parent window is not mapped,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/mpwdw/mpwdw.m b/xc/test/xsuite/xtest/tset/XPROTO/mpwdw/mpwdw.m
new file mode 100644
index 000000000..ec67b3c30
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/mpwdw/mpwdw.m
@@ -0,0 +1,175 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE MapWindow XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for MapWindow request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xEvent *ev;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_MapWindow);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default MapWindow request\n", CLIENT);
+ if ((ev = (xEvent *) Expect_Event(CLIENT, Expose)) == NULL) {
+ Log_Err("client %d failed to receive Expose\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received Expose\n", CLIENT);
+ /* do any event checking here */
+ Free_Event(ev);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent MapWindow request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong MapWindow request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and backing store has not been maintained while the window was unmapped,
+then the X server sends back an Expose event to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back an Expose event.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back an Expose event.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/noprtn/noprtn.m b/xc/test/xsuite/xtest/tset/XPROTO/noprtn/noprtn.m
new file mode 100644
index 000000000..b40efadcb
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/noprtn/noprtn.m
@@ -0,0 +1,179 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE NoOperation XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for NoOperation request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xReq *) Make_Req(CLIENT, X_NoOperation);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default NoOperation request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent NoOperation request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case JUST_TOO_LONG:
+ /* special for NoOperation, excess bytes allowed and ignored */
+ Log_Trace("client %d sent excess length NoOperation request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ Log_Trace("client %d sent overlong NoOperation request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Good A
+>># N.B. NoOperation is special: length can be >= minimum (1 word).
+When a client sends a valid xname protocol request to the X server,
+in which the length field of the request is greater than the minimum length
+required to contain the request but
+does not exceed the maximum length accepted
+by the X server,
+then the X server does not send back an error, event or reply to the client.
+>># N.B. NoOperation is special: length can be >= minimum (1 word).
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is less than the minimum length
+required to contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/opndsply/opndsply.m b/xc/test/xsuite/xtest/tset/XPROTO/opndsply/opndsply.m
new file mode 100644
index 000000000..f3112ef6a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/opndsply/opndsply.m
@@ -0,0 +1,131 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE OpenDisplay XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for OpenDisplay request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+
+/*
+ intent: send an OpenDisplay request to the server and check
+ that the server sent an OpenDisplay reply back
+ input:
+ output: none
+ global input:
+ side effects:
+ methods:
+*/
+
+static
+void
+tester()
+{
+ int status = Create_Client_Tested(CLIENT, test_type);
+
+ if(!status) {
+ switch(test_type) {
+ case OPEN_DISPLAY:
+ Log_Err("Expected connection to fail, but it didn't");
+ break;
+ default:
+ Log_Err("Expected connection not to fail, but it did");
+ break;
+ }
+ Exit();
+ }
+
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a valid authorisation-accepted
+reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a valid authorisation-accepted reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a valid authorisation-accepted reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+>># Assertion changed, 11th March 1992, to expect other than valid
+>># auth.-accepted reply. It's wrong to expect a valid auth.-fail
+>># reply as if byte order unknown then the 2-byte major & minor
+>># protocol versions can't be sent properly: client byte-sex is
+>># unknown to the server. We therefore will accept anything but
+>># a valid reply: nothing; connection closed or reply with first
+>># byte False (0). See bug report 0223.
+>># This was not noticed at initial assertion review time.
+When a client sends an invalid xname protocol request to the X server,
+in which the
+.M byte_order
+is not 0x42 or 0x6C,
+then the X server does not
+send back a valid authorisation-accepted reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server.
+Send an invalid xname protocol request to the X server with byte_order
+ other than 0x42 (and not 0x6C, either).
+Verify that the X server does not send back a valid authorisation-accepted reply.
+Open a connection to the X server.
+Send an invalid xname protocol request to the X server with byte_order
+ other than 0x6C (and not 0x42, either).
+Verify that the X server does not send back a valid authorisation-accepted reply.
+>>CODE
+
+ test_type = OPEN_DISPLAY;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/opnfnt/opnfnt.m b/xc/test/xsuite/xtest/tset/XPROTO/opnfnt/opnfnt.m
new file mode 100644
index 000000000..023da4ff4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/opnfnt/opnfnt.m
@@ -0,0 +1,231 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE OpenFont XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>SET tpstartup tpfontstartup
+>>SET tpcleanup tpfontcleanup
+>>EXTERN
+/* Touch test for OpenFont request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xOpenFontReq *req;
+
+static
+void
+tester()
+{
+ Set_Init_Timer();
+
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xOpenFontReq *) Make_Req(CLIENT, X_OpenFont);
+ if(test_type == BAD_IDCHOICE1) {
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent OpenFont request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ }
+ if(test_type == BAD_IDCHOICE2) {
+ req->fid = 0xffffffff; /* top 2 bits set ==> invalid */
+ }
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default OpenFont request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE1:
+ Log_Trace("client %d sent OpenFont request with same resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_IDCHOICE2:
+ Log_Trace("client %d sent OpenFont request with out-of-range resource ID\n", CLIENT);
+ (void) Expect_BadIDChoice(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent OpenFont request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong OpenFont request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is already in use,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request with identical resource ID
+ to the X server.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE1;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the resource ID is outside the range assigned to the client,
+then the X server sends back a BadIDChoice error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Send an invalid xname protocol request to the X server with a resource ID
+ outside the range assigned to the client.
+Verify that the X server sends back a BadIDChoice error.
+>>CODE
+
+ test_type = BAD_IDCHOICE2;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/plyarc/plyarc.m b/xc/test/xsuite/xtest/tset/XPROTO/plyarc/plyarc.m
new file mode 100644
index 000000000..354c83b71
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/plyarc/plyarc.m
@@ -0,0 +1,170 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE PolyArc XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for PolyArc request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xPolyArcReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xPolyArcReq *) Make_Req(CLIENT, X_PolyArc);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default PolyArc request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent PolyArc request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong PolyArc request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request
+plus zero or more arcs,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request + zero arcs.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request + zero arcs.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request + n arcs.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request + n arcs.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum + n arcs */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length
+accepted by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ greater than that accepted by the X server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ greater than that accepted by the X server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/plyfllarc/plyfllarc.m b/xc/test/xsuite/xtest/tset/XPROTO/plyfllarc/plyfllarc.m
new file mode 100644
index 000000000..3e3e0069f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/plyfllarc/plyfllarc.m
@@ -0,0 +1,170 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE PolyFillArc XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for PolyFillArc request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xPolyFillArcReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xPolyFillArcReq *) Make_Req(CLIENT, X_PolyFillArc);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default PolyFillArc request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent PolyFillArc request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong PolyFillArc request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request
+plus zero or more arcs,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request + zero arcs.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request + zero arcs.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request + n arcs.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request + n arcs.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum + n arcs */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/plyfllrctn/plyfllrctn.m b/xc/test/xsuite/xtest/tset/XPROTO/plyfllrctn/plyfllrctn.m
new file mode 100644
index 000000000..96ec22a2a
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/plyfllrctn/plyfllrctn.m
@@ -0,0 +1,169 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE PolyFillRectangle XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for PolyFillRectangle request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xPolyFillRectangleReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xPolyFillRectangleReq *) Make_Req(CLIENT, X_PolyFillRectangle);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default PolyFillRectangle request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent PolyFillRectangle request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong PolyFillRectangle request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/plyln/plyln.m b/xc/test/xsuite/xtest/tset/XPROTO/plyln/plyln.m
new file mode 100644
index 000000000..b285dadf7
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/plyln/plyln.m
@@ -0,0 +1,155 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE PolyLine XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for PolyLine request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xPolyLineReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xPolyLineReq *) Make_Req(CLIENT, X_PolyLine);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default PolyLine request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent PolyLine request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong PolyLine request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/plypnt/plypnt.m b/xc/test/xsuite/xtest/tset/XPROTO/plypnt/plypnt.m
new file mode 100644
index 000000000..cd65e0a68
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/plypnt/plypnt.m
@@ -0,0 +1,155 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE PolyPoint XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for PolyPoint request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xPolyPointReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xPolyPointReq *) Make_Req(CLIENT, X_PolyPoint);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default PolyPoint request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent PolyPoint request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong PolyPoint request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/plyrctngl/plyrctngl.m b/xc/test/xsuite/xtest/tset/XPROTO/plyrctngl/plyrctngl.m
new file mode 100644
index 000000000..1303d4303
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/plyrctngl/plyrctngl.m
@@ -0,0 +1,169 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE PolyRectangle XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for PolyRectangle request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xPolyRectangleReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xPolyRectangleReq *) Make_Req(CLIENT, X_PolyRectangle);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default PolyRectangle request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent PolyRectangle request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong PolyRectangle request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/plysgmnt/plysgmnt.m b/xc/test/xsuite/xtest/tset/XPROTO/plysgmnt/plysgmnt.m
new file mode 100644
index 000000000..690172194
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/plysgmnt/plysgmnt.m
@@ -0,0 +1,169 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE PolySegment XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for PolySegment request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xPolySegmentReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xPolySegmentReq *) Make_Req(CLIENT, X_PolySegment);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default PolySegment request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent PolySegment request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong PolySegment request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request plus zero or more segments,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request + 0 segs.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request + 0 segs.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request + n segs.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request + n segs.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum + n segs */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length
+accepted by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ greater than that accepted by the X server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ greater than that accepted by the X server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/plytxt16/plytxt16.m b/xc/test/xsuite/xtest/tset/XPROTO/plytxt16/plytxt16.m
new file mode 100644
index 000000000..aa2956b15
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/plytxt16/plytxt16.m
@@ -0,0 +1,203 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE PolyText16 XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>SET tpstartup tpfontstartup
+>>SET tpcleanup tpfontcleanup
+>>EXTERN
+/* Touch test for PolyText16 request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xPolyText16Req *req;
+xCreateGCReq *gc_req;
+xOpenFontReq *font_req;
+
+static
+void
+tester()
+{
+ Set_Init_Timer();
+
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+
+ /* open the xtfont2 font to get its resource id for GContext */
+
+ font_req = (xOpenFontReq *) Make_Req(CLIENT, X_OpenFont);
+ font_req = (xOpenFontReq *) Clear_Counted_Value (font_req);
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, 'x');
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, 't');
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, 'f');
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, 'o');
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, 'n');
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, 't');
+ font_req = (xOpenFontReq *) Add_Counted_Value (font_req, '2');
+ Send_Req(CLIENT, (xReq *) font_req);
+ Log_Trace("client %d sent default OpenFont request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+
+ /* create a default GContext with xtfont2 as the font */
+
+ gc_req = (xCreateGCReq *) Make_Req (CLIENT, X_CreateGC);
+ gc_req = (xCreateGCReq *) Add_Masked_Value (gc_req, GCFont, font_req->fid);
+ Send_Req (CLIENT, (xReq *) gc_req);
+ Log_Trace ("client %d sent CreateGC request\n", CLIENT);
+ Expect_Nothing (CLIENT);
+ Set_Default_GContext (CLIENT, gc_req->gc);
+ Free_Req (gc_req);
+ Free_Req (font_req);
+
+ /* map window, send PolyText16 request, and check results visually */
+
+ Map_Window(CLIENT, win);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xPolyText16Req *) Make_Req(CLIENT, X_PolyText16);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default PolyText16 request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent PolyText16 request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong PolyText16 request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/plytxt8/plytxt8.m b/xc/test/xsuite/xtest/tset/XPROTO/plytxt8/plytxt8.m
new file mode 100644
index 000000000..3cd1c49e3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/plytxt8/plytxt8.m
@@ -0,0 +1,171 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE PolyText8 XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for PolyText8 request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xPolyText8Req *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xPolyText8Req *) Make_Req(CLIENT, X_PolyText8);
+ Log_Err_Detail("Request was:");
+ Show_Req(req);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default PolyText8 request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent PolyText8 request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong PolyText8 request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/ptimg/ptimg.m b/xc/test/xsuite/xtest/tset/XPROTO/ptimg/ptimg.m
new file mode 100644
index 000000000..8efb67ae6
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/ptimg/ptimg.m
@@ -0,0 +1,232 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE PutImage XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for PutImage request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xPolyRectangleReq *prr;
+xGetImageReq *req;
+xGetImageReply *rep;
+xPutImageReq *pir;
+
+static
+void
+tester()
+{
+ unsigned char *from;
+ unsigned char *to;
+ unsigned int len;
+
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+ Map_Window(CLIENT, win);
+
+ prr = (xPolyRectangleReq *) Make_Req(CLIENT, X_PolyRectangle);
+ Send_Req(CLIENT, (xReq *) prr);
+ Log_Trace("client %d sent pixmap PolyRectangle request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(req);
+
+ req = (xGetImageReq *) Make_Req(CLIENT, X_GetImage);
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent default GetImage request\n", CLIENT);
+
+ if ((rep = (xGetImageReply *) Expect_Reply(CLIENT, X_GetImage)) == NULL) {
+ Log_Del("client %d failed to receive GetImage reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetImage reply\n", CLIENT);
+ /* do any reply checking here */
+ }
+ (void) Expect_Nothing(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ Map_Window(CLIENT, win);
+
+ Set_Test_Type(CLIENT, test_type);
+ pir = (xPutImageReq *) Make_Req(CLIENT, X_PutImage);
+ pir->dstX = 0;
+ pir->dstY = 0;
+ pir->width = req->width;
+ pir->height = req->height;
+ if (test_type != BAD_LENGTH) {
+ switch (test_type) {
+ case JUST_TOO_LONG:
+ pir->length += 10; /* ensure we're well over
+ w*h*depth_and_format_and_pad_stuff/4 */
+ /* now fall through */
+ default:
+ pir->length += rep->length;
+ break;
+ case TOO_LONG:
+ /* this must match, or exceed, the munged in max_length
+ used in SendReq.c
+ */
+ pir->length = Get_Max_Request(CLIENT) + 1;
+ break;
+ }
+ len = pir->length<<2;
+ pir = (xPutImageReq *) Xstrealloc((char *) pir, len);
+ if (pir == NULL) {
+ Log_Del ("client %d could not reallocate %d bytes for request buffer\n", CLIENT, len);
+ Exit ();
+ }
+ to = (unsigned char *) (pir+1);
+ from = (unsigned char *) (rep+1);
+ bcopy(from, to, rep->length << 2);
+ }
+
+ Send_Req(CLIENT, (xReq *) pir);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default PutImage request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Visual_Check();
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent PutImage request with bad length (%d)\n", CLIENT, pir->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong PutImage request (%d)\n", CLIENT, pir->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Free_Reply(rep);
+ Free_Req(pir);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/qrybstsz/qrybstsz.m b/xc/test/xsuite/xtest/tset/XPROTO/qrybstsz/qrybstsz.m
new file mode 100644
index 000000000..203716265
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/qrybstsz/qrybstsz.m
@@ -0,0 +1,177 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE QueryBestSize XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for QueryBestSize request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window win;
+xQueryBestSizeReq *req;
+xQueryBestSizeReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ win = Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xQueryBestSizeReq *) Make_Req(CLIENT, X_QueryBestSize);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default QueryBestSize request\n", CLIENT);
+ if ((rep = (xQueryBestSizeReply *) Expect_Reply(CLIENT, X_QueryBestSize)) == NULL) {
+ Log_Err("client %d failed to receive QueryBestSize reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received QueryBestSize reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent QueryBestSize request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong QueryBestSize request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/qryclrs/qryclrs.m b/xc/test/xsuite/xtest/tset/XPROTO/qryclrs/qryclrs.m
new file mode 100644
index 000000000..cc4292d31
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/qryclrs/qryclrs.m
@@ -0,0 +1,191 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE QueryColors XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for QueryColors request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xAllocNamedColorReply *alloc_reply;
+xQueryColorsReply *query_reply;
+xError *err;
+extern unsigned long reply_pixel;
+
+/*
+ intent: send a QueryColors request to the server and check
+ that the server sent a QueryColors reply back.
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ writes to global reply_pixel
+ methods:
+*/
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+
+ /* allocate a color and store pixel from reply in global */
+
+ req = (xResourceReq *) Make_Req(CLIENT, X_AllocNamedColor);
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent default AllocNamedColor request\n", CLIENT);
+ if ((alloc_reply = (xAllocNamedColorReply *) Expect_Reply(CLIENT, X_AllocNamedColor)) == NULL) {
+ Log_Err("client %d failed to receive AllocNamedColor reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received AllocNamedColor reply\n", CLIENT);
+ }
+ reply_pixel = alloc_reply->pixel;
+ (void) Expect_Nothing(CLIENT);
+
+ /* query colors */
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_QueryColors);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default QueryColors request\n", CLIENT);
+ if ((query_reply = (xQueryColorsReply *) Expect_Reply(CLIENT, X_QueryColors)) == NULL) {
+ Log_Err("client %d failed to receive QueryColors reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received QueryColors reply\n", CLIENT);
+ Free_Reply(query_reply);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent QueryColors request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong QueryColors request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/qryextnsn/qryextnsn.m b/xc/test/xsuite/xtest/tset/XPROTO/qryextnsn/qryextnsn.m
new file mode 100644
index 000000000..61524a06f
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/qryextnsn/qryextnsn.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE QueryExtension XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for QueryExtension request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xQueryExtensionReq *req;
+xQueryExtensionReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xQueryExtensionReq *) Make_Req(CLIENT, X_QueryExtension);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default QueryExtension request\n", CLIENT);
+ if ((rep = (xQueryExtensionReply *) Expect_Reply(CLIENT, X_QueryExtension)) == NULL) {
+ Log_Err("client %d failed to receive QueryExtension reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received QueryExtension reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent QueryExtension request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong QueryExtension request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/qryfnt/qryfnt.m b/xc/test/xsuite/xtest/tset/XPROTO/qryfnt/qryfnt.m
new file mode 100644
index 000000000..4d1dec602
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/qryfnt/qryfnt.m
@@ -0,0 +1,180 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE QueryFont XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>SET tpstartup tpfontstartup
+>>SET tpcleanup tpfontcleanup
+>>EXTERN
+/* Touch test for QueryFont request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Font Default_Font;
+xResourceReq *req;
+xQueryFontReply *rep;
+
+static
+void
+tester()
+{
+ Set_Init_Timer();
+
+ Create_Client(CLIENT);
+
+ Default_Font = Create_Default_Font(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_QueryFont);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default QueryFont request\n", CLIENT);
+ if ((rep = (xQueryFontReply *) Expect_Reply(CLIENT, X_QueryFont)) == NULL) {
+ Log_Err("client %d failed to receive QueryFont reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received QueryFont reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent QueryFont request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong QueryFont request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/qrykymp/qrykymp.m b/xc/test/xsuite/xtest/tset/XPROTO/qrykymp/qrykymp.m
new file mode 100644
index 000000000..c8439f8d9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/qrykymp/qrykymp.m
@@ -0,0 +1,173 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE QueryKeymap XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for QueryKeymap request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *req;
+xQueryKeymapReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xReq *) Make_Req(CLIENT, X_QueryKeymap);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default QueryKeymap request\n", CLIENT);
+ if ((rep = (xQueryKeymapReply *) Expect_Reply(CLIENT, X_QueryKeymap)) == NULL) {
+ Log_Err("client %d failed to receive QueryKeymap reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received QueryKeymap reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent QueryKeymap request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong QueryKeymap request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/qrypntr/qrypntr.m b/xc/test/xsuite/xtest/tset/XPROTO/qrypntr/qrypntr.m
new file mode 100644
index 000000000..435179590
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/qrypntr/qrypntr.m
@@ -0,0 +1,175 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE QueryPointer XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for QueryPointer request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xQueryPointerReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_QueryPointer);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default QueryPointer request\n", CLIENT);
+ if ((rep = (xQueryPointerReply *) Expect_Reply(CLIENT, X_QueryPointer)) == NULL) {
+ Log_Err("client %d failed to receive QueryPointer reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received QueryPointer reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent QueryPointer request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong QueryPointer request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/qrytr/qrytr.m b/xc/test/xsuite/xtest/tset/XPROTO/qrytr/qrytr.m
new file mode 100644
index 000000000..681c9ba33
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/qrytr/qrytr.m
@@ -0,0 +1,175 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE QueryTree XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for QueryTree request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xQueryTreeReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_QueryTree);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default QueryTree request\n", CLIENT);
+ if ((rep = (xQueryTreeReply *) Expect_Reply(CLIENT, X_QueryTree)) == NULL) {
+ Log_Err("client %d failed to receive QueryTree reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received QueryTree reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent QueryTree request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong QueryTree request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/qrytxtextn/qrytxtextn.m b/xc/test/xsuite/xtest/tset/XPROTO/qrytxtextn/qrytxtextn.m
new file mode 100644
index 000000000..c864a01a9
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/qrytxtextn/qrytxtextn.m
@@ -0,0 +1,166 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE QueryTextExtents XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>SET tpstartup tpfontstartup
+>>SET tpcleanup tpfontcleanup
+>>EXTERN
+/* Touch test for QueryTextExtents request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Font Default_Font;
+xQueryTextExtentsReq *req;
+xQueryTextExtentsReply *rep;
+
+static
+void
+tester()
+{
+ Set_Init_Timer();
+
+ Create_Client(CLIENT);
+
+ Default_Font = Create_Default_Font(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xQueryTextExtentsReq *) Make_Req(CLIENT, X_QueryTextExtents);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default QueryTextExtents request\n", CLIENT);
+ if ((rep = (xQueryTextExtentsReply *) Expect_Reply(CLIENT, X_QueryTextExtents)) == NULL) {
+ Log_Err("client %d failed to receive QueryTextExtents reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received QueryTextExtents reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent QueryTextExtents request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong QueryTextExtents request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/rclrcrsr/rclrcrsr.m b/xc/test/xsuite/xtest/tset/XPROTO/rclrcrsr/rclrcrsr.m
new file mode 100644
index 000000000..f137af003
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/rclrcrsr/rclrcrsr.m
@@ -0,0 +1,167 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE RecolorCursor XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for RecolorCursor request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xRecolorCursorReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Cursor_Pixmap(CLIENT);
+ (void) Create_Default_Cursor(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xRecolorCursorReq *) Make_Req(CLIENT, X_RecolorCursor);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default RecolorCursor request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent RecolorCursor request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong RecolorCursor request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/rprntwdw/rprntwdw.m b/xc/test/xsuite/xtest/tset/XPROTO/rprntwdw/rprntwdw.m
new file mode 100644
index 000000000..582394834
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/rprntwdw/rprntwdw.m
@@ -0,0 +1,178 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE ReparentWindow XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for ReparentWindow request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window Default_Window;
+xCreateWindowReq *cwr;
+xReparentWindowReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Default_Window = Create_Default_Window(CLIENT);
+
+ cwr = (xCreateWindowReq *) Make_Req(CLIENT, X_CreateWindow);
+ cwr->parent = Default_Window;
+ Send_Req(CLIENT, (xReq *) cwr);
+ Log_Trace("client %d sent additional CreateWindow request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Default_Window = cwr->wid;
+ Free_Req(cwr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xReparentWindowReq *) Make_Req(CLIENT, X_ReparentWindow);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default ReparentWindow request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent ReparentWindow request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong ReparentWindow request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/rttprprts/rttprprts.m b/xc/test/xsuite/xtest/tset/XPROTO/rttprprts/rttprprts.m
new file mode 100644
index 000000000..edc998d39
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/rttprprts/rttprprts.m
@@ -0,0 +1,189 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE RotateProperties XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for RotateProperties request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xChangePropertyReq *ch_req;
+xRotatePropertiesReq *req;
+xError *err;
+extern Atom Test_Atom1;
+extern Atom Test_Atom2;
+extern char *Test_prop;
+char *Test_prop1 = "__Test1_prop";
+char *Test_prop2 = "__Test2_prop";
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+ (void) Create_Default_Window(CLIENT);
+ Test_prop = Test_prop1;
+ Test_Atom1 = Create_Default_Atom(CLIENT);
+
+ ch_req = (xChangePropertyReq *)Make_Req(CLIENT, X_ChangeProperty);
+ Test_Atom1 = ch_req->property;
+ Send_Req(CLIENT, (xReq *)ch_req);
+ Expect_Nothing(CLIENT);
+
+ Test_prop = Test_prop2;
+ ch_req->property = Test_Atom2 = Create_Default_Atom(CLIENT);
+ Send_Req(CLIENT, (xReq *)ch_req);
+ Expect_Nothing(CLIENT);
+
+ Log_Trace("Test_Atom1 is 0x%x", Test_Atom1);
+ Log_Trace("Test_Atom2 is 0x%x", Test_Atom2);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xRotatePropertiesReq *) Make_Req(CLIENT, X_RotateProperties);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default RotateProperties request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent RotateProperties request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong RotateProperties request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/sndevnt/sndevnt.m b/xc/test/xsuite/xtest/tset/XPROTO/sndevnt/sndevnt.m
new file mode 100644
index 000000000..11e2b8541
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/sndevnt/sndevnt.m
@@ -0,0 +1,206 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SendEvent XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for SendEvent request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xSendEventReq *req;
+xEvent *ev;
+
+/*
+ * Routine:
+ *
+ * Input:
+ *
+ * Output:
+ *
+ * Returns:
+ *
+ * Globals used:
+ *
+ * Side Effects:
+ *
+ * Methods:
+ *
+ */
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Atom(CLIENT);
+ (void) Create_Default_Event(CLIENT, ClientMessage);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xSendEventReq *) Make_Req(CLIENT, X_SendEvent);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default SendEvent request\n", CLIENT);
+ if ((ev = (xEvent *) Expect_Event(CLIENT, ClientMessage)) == NULL) {
+ Log_Err("client %d failed to receive ClientMessage\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received ClientMessage\n", CLIENT);
+ /* Checking here that the MSBit of the event code is ON */
+ if (!is_fake(ev->u.u.type))
+ Log_Err("client %d Expected MSB set in event type ClientMessage; got %x\n", ev->u.u.type);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent SendEvent request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong SendEvent request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+ }
+
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and
+.M event.code
+is
+.S ClientMessage ,
+and
+.M event_mask
+is empty,
+and
+.M destination
+is a window created by the client,
+then the X server sends back a
+.S ClientMessage
+event to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a ClientMessage event.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a ClientMessage event.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/staccsscnt/staccsscnt.m b/xc/test/xsuite/xtest/tset/XPROTO/staccsscnt/staccsscnt.m
new file mode 100644
index 000000000..c5e9c5e39
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/staccsscnt/staccsscnt.m
@@ -0,0 +1,164 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SetAccessControl XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for SetAccessControl request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xSetAccessControlReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xSetAccessControlReq *) Make_Req(CLIENT, X_SetAccessControl);
+ req->mode = DisableAccess;
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default SetAccessControl request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent SetAccessControl request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong SetAccessControl request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/stclprctng/stclprctng.m b/xc/test/xsuite/xtest/tset/XPROTO/stclprctng/stclprctng.m
new file mode 100644
index 000000000..df0d5265d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/stclprctng/stclprctng.m
@@ -0,0 +1,166 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SetClipRectangles XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for SetClipRectangles request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xSetClipRectanglesReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xSetClipRectanglesReq *) Make_Req(CLIENT, X_SetClipRectangles);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default SetClipRectangles request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent SetClipRectangles request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong SetClipRectangles request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/stclsdwnmd/stclsdwnmd.m b/xc/test/xsuite/xtest/tset/XPROTO/stclsdwnmd/stclsdwnmd.m
new file mode 100644
index 000000000..b1cd4aae0
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/stclsdwnmd/stclsdwnmd.m
@@ -0,0 +1,164 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SetCloseDownMode XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for SetCloseDownMode request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xSetCloseDownModeReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xSetCloseDownModeReq *) Make_Req(CLIENT, X_SetCloseDownMode);
+ req->mode = RetainPermanent;
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default SetCloseDownMode request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent SetCloseDownMode request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong SetCloseDownMode request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/stdshs/stdshs.m b/xc/test/xsuite/xtest/tset/XPROTO/stdshs/stdshs.m
new file mode 100644
index 000000000..6b6a0fe7b
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/stdshs/stdshs.m
@@ -0,0 +1,166 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SetDashes XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for SetDashes request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xSetDashesReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_GContext(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xSetDashesReq *) Make_Req(CLIENT, X_SetDashes);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default SetDashes request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent SetDashes request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong SetDashes request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/stfntpth/stfntpth.m b/xc/test/xsuite/xtest/tset/XPROTO/stfntpth/stfntpth.m
new file mode 100644
index 000000000..f362c8355
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/stfntpth/stfntpth.m
@@ -0,0 +1,163 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SetFontPath XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for SetFontPath request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xSetFontPathReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xSetFontPathReq *) Make_Req(CLIENT, X_SetFontPath);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default SetFontPath request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent SetFontPath request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong SetFontPath request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/stinptfcs/stinptfcs.m b/xc/test/xsuite/xtest/tset/XPROTO/stinptfcs/stinptfcs.m
new file mode 100644
index 000000000..d85f8e7ba
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/stinptfcs/stinptfcs.m
@@ -0,0 +1,180 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SetInputFocus XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for SetInputFocus request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *gifr;
+xGetInputFocusReply *gifrep;
+xSetInputFocusReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ gifr = (xReq *) Make_Req(CLIENT, X_GetInputFocus);
+ Send_Req(CLIENT, (xReq *) gifr);
+ Log_Trace("client %d sent default GetInputFocus\n", CLIENT);
+
+ if ((gifrep = (xGetInputFocusReply *) Expect_Reply(CLIENT, X_GetInputFocus)) == NULL) {
+ Log_Err("client %d failed to receive GetInputFocus reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetInputFocus reply\n", CLIENT);
+ /* do any reply checking here */
+ }
+ (void) Expect_Nothing(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xSetInputFocusReq *) Make_Req(CLIENT, X_SetInputFocus);
+ req->revertTo = gifrep->revertTo;
+ req->focus = gifrep->focus;
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default SetInputFocus request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent SetInputFocus request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong SetInputFocus request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/stmdfrmppn/stmdfrmppn.m b/xc/test/xsuite/xtest/tset/XPROTO/stmdfrmppn/stmdfrmppn.m
new file mode 100644
index 000000000..f7e901184
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/stmdfrmppn/stmdfrmppn.m
@@ -0,0 +1,217 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SetModifierMapping XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for SetModifierMapping request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *gmmr;
+xGetModifierMappingReply *gmmrep;
+xSetModifierMappingReq *req;
+xSetModifierMappingReply *rep;
+xEvent *ev;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ /* Get the existing mapping... */
+
+ gmmr = (xReq *) Make_Req(CLIENT, X_GetModifierMapping);
+ Send_Req(CLIENT, (xReq *) gmmr);
+ Log_Trace("client %d sent default GetModifierMapping request\n", CLIENT);
+
+ if ((gmmrep = (xGetModifierMappingReply *) Expect_Reply(CLIENT, X_GetModifierMapping)) == NULL) {
+ Log_Err("client %d failed to receive GetModifierMapping reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetModifierMapping reply\n", CLIENT);
+ /* do any reply checking here */
+ }
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(gmmr);
+
+ /* ... then make a request to duplicate that mapping. */
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xSetModifierMappingReq *) Make_Req(CLIENT, X_SetModifierMapping);
+ req->numKeyPerModifier = gmmrep->numKeyPerModifier;
+ req->length += 2*req->numKeyPerModifier;
+ req = (xSetModifierMappingReq *) Xstrealloc((char *) req, req->length<<2);
+ {
+ unsigned char *p, *q, *r;
+
+ p = (unsigned char *) (gmmrep + 1);
+ q = (unsigned char *) (req + 1);
+ r = ((unsigned char *)req) + (int)(req->length<<2);
+ while (q < r)
+ *q++ = *p++;
+ }
+
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default SetModifierMapping request\n", CLIENT);
+ if ((ev = (xEvent *) Expect_Event(CLIENT, MappingNotify)) == NULL) {
+ Log_Err("client %d failed to receive MappingNotify\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received MappingNotify\n", CLIENT);
+ /* do any event checking here */
+ Free_Event(ev);
+ }
+ if ((rep = (xSetModifierMappingReply *) Expect_Reply(CLIENT, X_SetModifierMapping)) == NULL) {
+ Log_Err("client %d failed to receive SetModifierMapping reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received SetModifierMapping reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent SetModifierMapping request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong SetModifierMapping request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply and a
+.S MappingNotify
+event to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply and a MappingNotify event.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply and a MappingNotify event.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request
+plus zero or more keycode groups,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request + zero keycode groups.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request + zero keycode groups.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request + n keycode groups.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request + n keycode groups.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum + n keycode groups */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/stpntrmppn/stpntrmppn.m b/xc/test/xsuite/xtest/tset/XPROTO/stpntrmppn/stpntrmppn.m
new file mode 100644
index 000000000..b7cfc5f9d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/stpntrmppn/stpntrmppn.m
@@ -0,0 +1,211 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SetPointerMapping XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for SetPointerMapping request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *gpmr;
+xGetPointerMappingReply *gpmrep;
+xSetPointerMappingReq *req;
+xSetPointerMappingReply *rep;
+xEvent *ev;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ gpmr = (xReq *) Make_Req(CLIENT, X_GetPointerMapping);
+ Send_Req(CLIENT, (xReq *) gpmr);
+ Log_Trace("client %d sent default GetPointerMapping request\n", CLIENT);
+
+ if ((gpmrep = (xGetPointerMappingReply *) Expect_Reply(CLIENT, X_GetPointerMapping)) == NULL) {
+ Log_Err("client %d failed to receive GetPointerMapping reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetPointerMapping reply\n", CLIENT);
+ /* do any reply checking here */
+ }
+ (void) Expect_Nothing(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xSetPointerMappingReq *) Make_Req(CLIENT, X_SetPointerMapping);
+ req->nElts = gpmrep->nElts;
+ req->length += ((3 + req->nElts) >> 2);
+ req = (xSetPointerMappingReq *) Xstrealloc((char *) req, req->length<<2);
+ {
+ unsigned char *p, *q, *r;
+
+ p = (unsigned char *) (gpmrep + 1);
+ q = (unsigned char *) (req + 1);
+ r = ((unsigned char *)req) + (int)(req->length<<2);
+ while (q < r)
+ *q++ = *p++;
+ }
+
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default SetPointerMapping request\n", CLIENT);
+ if ((ev = (xEvent *) Expect_Event(CLIENT, MappingNotify)) == NULL) {
+ Log_Err("client %d failed to receive MappingNotify\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received MappingNotify\n", CLIENT);
+ /* do any event checking here */
+ Free_Event(ev);
+ }
+ if ((rep = (xSetPointerMappingReply *) Expect_Reply(CLIENT, X_SetPointerMapping)) == NULL) {
+ Log_Err("client %d failed to receive SetPointerMapping reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received SetPointerMapping reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent SetPointerMapping request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong SetPointerMapping request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply and a
+.S MappingNotify
+event to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply and a MappingNotify event.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply and a MappingNotify event.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/strclrs/strclrs.m b/xc/test/xsuite/xtest/tset/XPROTO/strclrs/strclrs.m
new file mode 100644
index 000000000..c8b23b5b1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/strclrs/strclrs.m
@@ -0,0 +1,291 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE StoreColors XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for StoreColors request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xAllocColorCellsReply *acreply;
+xAllocNamedColorReply *anreply;
+xError *err;
+extern unsigned long reply_pixel;
+
+/*
+ intent: If a read-write color cell can be allocated:
+ Allocate read-write cell by sending an AllocColorCells request,
+ send a StoreColors request to the server and check no errors,
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ writes to global reply_pixel
+ methods:
+*/
+
+static
+void
+tester_rw()
+{
+ Create_Client(CLIENT);
+ if (!Allocatable (CLIENT)) {
+ unsupported("The visual class for screen zero is not writable");
+ Exit_OK();
+ }
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+
+ /* allocate a color and store pixel from reply in global */
+
+ req = (xResourceReq *) Make_Req(CLIENT, X_AllocColorCells);
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent default AllocColorCells request\n", CLIENT);
+ if ((acreply = (xAllocColorCellsReply *) Expect_Reply(CLIENT, X_AllocColorCells)) == NULL) {
+ Log_Err("client %d failed to receive AllocColorCells reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received AllocColorCells reply\n", CLIENT);
+ /*
+ * This line gets the first pixel value OR'd with
+ * zero of the returned masks
+ */
+ reply_pixel = *(unsigned long*) (acreply + 1);
+ Free_Reply(acreply);
+ }
+
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(req);
+
+ /* store a color in the pixel from the reply */
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_StoreColors);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ Log_Trace("client %d sent default StoreColors request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(req);
+
+ Exit_OK();
+}
+
+/*
+ intent: Allocate read-only cell by sending an AllocNamedColor request,
+ send a StoreColors request to the server and check
+ that a BadAccess error is sent back.
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ writes to global reply_pixel
+ methods:
+*/
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+
+ /* allocate a color and store pixel from reply in global */
+
+ req = (xResourceReq *) Make_Req(CLIENT, X_AllocNamedColor);
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent default AllocNamedColor request\n", CLIENT);
+ if ((anreply = (xAllocNamedColorReply *) Expect_Reply(CLIENT, X_AllocNamedColor)) == NULL) {
+ Log_Err("client %d failed to receive AllocNamedColor reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received AllocNamedColor reply\n", CLIENT);
+ reply_pixel = anreply->pixel;
+ Free_Reply(anreply);
+ }
+
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(req);
+
+ /* store a color in the pixel from the reply */
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_StoreColors);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ /*
+ * The default test code called Expect_Nothing() - this is
+ * not the case here, we expect BadAccess error.
+ */
+ Log_Trace("client %d sent default StoreColors request\n", CLIENT);
+ (void) Expect_BadAccess(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent StoreColors request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong StoreColors request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good C
+If the default visual class for screen zero is
+.S DirectColor ,
+.S PseudoColor ,
+or
+.S GrayScale :
+When a client sends a valid xname protocol request to the X server,
+and the colour cell is read-write,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+DirectColor, PseudoColor, or GrayScale :
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester_rw);
+
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the colour cell is read-only,
+then the X server sends back a BadAccess error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a BadAccess error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a BadAccess error.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request
+plus zero or more colours,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request + zero colours.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request + zero colours.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request + n colours.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request + n colours.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum + n colours */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/strnmdclr/strnmdclr.m b/xc/test/xsuite/xtest/tset/XPROTO/strnmdclr/strnmdclr.m
new file mode 100644
index 000000000..ac9869b23
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/strnmdclr/strnmdclr.m
@@ -0,0 +1,287 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE StoreNamedColor XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for StoreNamedColor request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xAllocColorCellsReply *acreply;
+xAllocNamedColorReply *anreply;
+xError *err;
+extern unsigned long reply_pixel;
+
+/*
+ intent: If a read-write color cell can be allocated:
+ Allocate read-write cell by sending an AllocColorCells request,
+ send a StoreNamedColor request to the server and check no errors,
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ writes to global reply_pixel
+ methods:
+*/
+
+static
+void
+tester_rw()
+{
+ Create_Client(CLIENT);
+ if (!Allocatable (CLIENT)) {
+ unsupported("The visual class for screen zero is not writable");
+ Exit_OK();
+ }
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+
+ /* allocate a color and store pixel from reply in global */
+
+ req = (xResourceReq *) Make_Req(CLIENT, X_AllocColorCells);
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent default AllocColorCells request\n", CLIENT);
+ if ((acreply = (xAllocColorCellsReply *) Expect_Reply(CLIENT, X_AllocColorCells)) == NULL) {
+ Log_Err("client %d failed to receive AllocColorCells reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received AllocColorCells reply\n", CLIENT);
+ /*
+ * This line gets the first pixel value OR'd with
+ * zero of the returned masks
+ */
+ reply_pixel = *(unsigned long*) (acreply + 1);
+ Free_Reply(acreply);
+ }
+
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(req);
+
+ /* store a color in the pixel from the reply */
+
+ req = (xResourceReq *) Make_Req(CLIENT, X_StoreNamedColor);
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent default StoreNamedColor request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(req);
+
+ Exit_OK();
+}
+
+/*
+ intent: Allocate read-only cell by sending an AllocNamedColor request,
+ send a StoreNamedColor request to the server and check
+ that a BadAccess error is sent back.
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource
+ writes to global reply_pixel
+ methods:
+*/
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+
+ /* allocate a color and store pixel from reply in global */
+
+ req = (xResourceReq *) Make_Req(CLIENT, X_AllocNamedColor);
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent default AllocNamedColor request\n", CLIENT);
+ if ((anreply = (xAllocNamedColorReply *) Expect_Reply(CLIENT, X_AllocNamedColor)) == NULL) {
+ Log_Err("client %d failed to receive AllocNamedColor reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received AllocNamedColor reply\n", CLIENT);
+ reply_pixel = anreply->pixel;
+ Free_Reply(anreply);
+ }
+
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(req);
+
+ /* store a color in the pixel from the reply */
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_StoreNamedColor);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ /*
+ * The default test code called Expect_Nothing() - this is
+ * not the case here, we expect BadAccess error.
+ */
+ Log_Trace("client %d sent default StoreNamedColor request\n", CLIENT);
+ (void) Expect_BadAccess(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent StoreNamedColor request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong StoreNamedColor request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good C
+If the default visual class for screen zero is
+.S DirectColor ,
+.S PseudoColor ,
+or
+.S GrayScale :
+When a client sends a valid xname protocol request to the X server,
+and the colour cell is read-write,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+DirectColor, PseudoColor, or GrayScale :
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester_rw);
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the colour cell is read-only,
+then the X server sends back a BadAccess error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a BadAccess error.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a BadAccess error.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/stscrnsvr/stscrnsvr.m b/xc/test/xsuite/xtest/tset/XPROTO/stscrnsvr/stscrnsvr.m
new file mode 100644
index 000000000..7d414ad88
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/stscrnsvr/stscrnsvr.m
@@ -0,0 +1,182 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SetScreenSaver XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for SetScreenSaver request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *gssr;
+xGetScreenSaverReply *gssrep;
+xSetScreenSaverReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ gssr = (xReq *) Make_Req(CLIENT, X_GetScreenSaver);
+ Send_Req(CLIENT, (xReq *) gssr);
+ Log_Trace("client %d sent default GetScreenSaver request\n", CLIENT);
+
+ if ((gssrep = (xGetScreenSaverReply *) Expect_Reply(CLIENT, X_GetScreenSaver)) == NULL) {
+ Log_Err("client %d failed to receive GetScreenSaver reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GetScreenSaver reply\n", CLIENT);
+ /* do any reply checking here */
+ }
+ (void) Expect_Nothing(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xSetScreenSaverReq *) Make_Req(CLIENT, X_SetScreenSaver);
+ req->timeout = gssrep->timeout;
+ req->interval = gssrep->interval;
+ req->preferBlank = gssrep->preferBlanking;
+ req->allowExpose = gssrep->allowExposures;
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default SetScreenSaver request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent SetScreenSaver request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong SetScreenSaver request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/stslctnown/stslctnown.m b/xc/test/xsuite/xtest/tset/XPROTO/stslctnown/stslctnown.m
new file mode 100644
index 000000000..890af119d
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/stslctnown/stslctnown.m
@@ -0,0 +1,168 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE SetSelectionOwner XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for SetSelectionOwner request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Atom Test_Property;
+xSetSelectionOwnerReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ Test_Property = Create_Default_Atom(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xSetSelectionOwnerReq *) Make_Req(CLIENT, X_SetSelectionOwner);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default SetSelectionOwner request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent SetSelectionOwner request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong SetSelectionOwner request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client does not currently own the selection,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/trnsltcrds/trnsltcrds.m b/xc/test/xsuite/xtest/tset/XPROTO/trnsltcrds/trnsltcrds.m
new file mode 100644
index 000000000..592e26706
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/trnsltcrds/trnsltcrds.m
@@ -0,0 +1,185 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE TranslateCoords XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for TranslateCoords request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window Another_Window;
+xCreateWindowReq *cwr;
+xTranslateCoordsReq *req;
+xTranslateCoordsReply *rep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ cwr = (xCreateWindowReq *) Make_Req(CLIENT, X_CreateWindow);
+ Send_Req(CLIENT, (xReq *) cwr);
+ Log_Trace("client %d sent default CreateWindow request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Another_Window = cwr->wid;
+ Free_Req(cwr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xTranslateCoordsReq *) Make_Req(CLIENT, X_TranslateCoords);
+ req->dstWid = Another_Window;
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default TranslateCoords request\n", CLIENT);
+ if ((rep = (xTranslateCoordsReply *) Expect_Reply(CLIENT, X_TranslateCoords)) == NULL) {
+ Log_Err("client %d failed to receive TranslateCoords reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received TranslateCoords reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(rep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent TranslateCoords request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong TranslateCoords request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server sends back a reply to the client
+with the minimum required length.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back a reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/ungrbbttn/ungrbbttn.m b/xc/test/xsuite/xtest/tset/XPROTO/ungrbbttn/ungrbbttn.m
new file mode 100644
index 000000000..db262bc7e
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/ungrbbttn/ungrbbttn.m
@@ -0,0 +1,172 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE UngrabButton XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for UngrabButton request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xGrabButtonReq *gbr;
+xUngrabButtonReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ gbr = (xGrabButtonReq *) Make_Req(CLIENT, X_GrabButton);
+ Send_Req(CLIENT, (xReq *) gbr);
+ Log_Trace("client %d sent default GrabButton request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(gbr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xUngrabButtonReq *) Make_Req(CLIENT, X_UngrabButton);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default UngrabButton request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent UngrabButton request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong UngrabButton request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/ungrbky/ungrbky.m b/xc/test/xsuite/xtest/tset/XPROTO/ungrbky/ungrbky.m
new file mode 100644
index 000000000..6e74c1f24
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/ungrbky/ungrbky.m
@@ -0,0 +1,172 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE UngrabKey XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for UngrabKey request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xGrabKeyReq *gkr;
+xUngrabKeyReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ gkr = (xGrabKeyReq *) Make_Req(CLIENT, X_GrabKey);
+ Send_Req(CLIENT, (xReq *) gkr);
+ Log_Trace("client %d sent default GrabKey request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(gkr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xUngrabKeyReq *) Make_Req(CLIENT, X_UngrabKey);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default UngrabKey request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent UngrabKey request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong UngrabKey request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/ungrbkybrd/ungrbkybrd.m b/xc/test/xsuite/xtest/tset/XPROTO/ungrbkybrd/ungrbkybrd.m
new file mode 100644
index 000000000..d60e13170
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/ungrbkybrd/ungrbkybrd.m
@@ -0,0 +1,185 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE UngrabKeyboard XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for UngrabKeyboard request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xGrabKeyboardReq *gkr;
+xGrabKeyboardReply *gkrep;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ gkr = (xGrabKeyboardReq *) Make_Req(CLIENT, X_GrabKeyboard);
+ Send_Req(CLIENT, (xReq *) gkr);
+ Log_Trace("client %d sent default GrabKeyboard request\n", CLIENT);
+
+ if ((gkrep = (xGrabKeyboardReply *) Expect_Reply(CLIENT, X_GrabKeyboard)) == NULL) {
+ Log_Err("client %d failed to receive GrabKeyboard reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GrabKeyboard reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(gkrep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(gkr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_UngrabKeyboard);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default UngrabKeyboard request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent UngrabKeyboard request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong UngrabKeyboard request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/ungrbpntr/ungrbpntr.m b/xc/test/xsuite/xtest/tset/XPROTO/ungrbpntr/ungrbpntr.m
new file mode 100644
index 000000000..bce102579
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/ungrbpntr/ungrbpntr.m
@@ -0,0 +1,185 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE UngrabPointer XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for UngrabPointer request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xGrabPointerReq *gpr;
+xGrabPointerReply *gprep;
+xResourceReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ gpr = (xGrabPointerReq *) Make_Req(CLIENT, X_GrabPointer);
+ Send_Req(CLIENT, (xReq *) gpr);
+ Log_Trace("client %d sent default GrabPointer request\n", CLIENT);
+
+ if ((gprep = (xGrabPointerReply *) Expect_Reply(CLIENT, X_GrabPointer)) == NULL) {
+ Log_Err("client %d failed to receive GrabPointer reply\n", CLIENT);
+ Exit();
+ } else {
+ Log_Trace("client %d received GrabPointer reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(gprep);
+ }
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(gpr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_UngrabPointer);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default UngrabPointer request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent UngrabPointer request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong UngrabPointer request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/ungrbsrvr/ungrbsrvr.m b/xc/test/xsuite/xtest/tset/XPROTO/ungrbsrvr/ungrbsrvr.m
new file mode 100644
index 000000000..29c0694b1
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/ungrbsrvr/ungrbsrvr.m
@@ -0,0 +1,172 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE UngrabServer XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for UngrabServer request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xReq *gsr;
+xReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+
+ gsr = (xReq *) Make_Req(CLIENT, X_GrabServer);
+ Send_Req(CLIENT, (xReq *) gsr);
+ Log_Trace("client %d sent default GrabServer\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(gsr);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xReq *) Make_Req(CLIENT, X_UngrabServer);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default UngrabServer request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent UngrabServer request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong UngrabServer request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/unmpsbws/unmpsbws.m b/xc/test/xsuite/xtest/tset/XPROTO/unmpsbws/unmpsbws.m
new file mode 100644
index 000000000..cd0c75fc3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/unmpsbws/unmpsbws.m
@@ -0,0 +1,187 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE UnmapSubwindows XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for UnmapSubwindows request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window Default_Window;
+xCreateWindowReq *cwr;
+xResourceReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Default_Window = Create_Default_Window(CLIENT);
+
+ cwr = (xCreateWindowReq *) Make_Req(CLIENT, X_CreateWindow);
+ cwr->parent = Default_Window;
+ Send_Req(CLIENT, (xReq *) cwr);
+ Log_Trace("client %d sent additional CreateWindow request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(cwr);
+
+ req = (xResourceReq *) Make_Req(CLIENT, X_MapSubwindows);
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent default MapSubwindows\n", CLIENT);
+
+ /* Don't expect to see Expose event because the parent is not
+ mapped. */
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(req);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_UnmapSubwindows);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default UnmapSubwindows request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent UnmapSubwindows request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong UnmapSubwindows request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the parent window is not mapped,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/unmpwdw/unmpwdw.m b/xc/test/xsuite/xtest/tset/XPROTO/unmpwdw/unmpwdw.m
new file mode 100644
index 000000000..491ae6ca4
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/unmpwdw/unmpwdw.m
@@ -0,0 +1,170 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE UnmapWindow XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for UnmapWindow request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+Window Default_Window;
+xResourceReq *req;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Default_Window = Create_Default_Window(CLIENT);
+ Map_Window(CLIENT, Default_Window);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_UnmapWindow);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default UnmapWindow request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent UnmapWindow request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong UnmapWindow request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back an UnmapNotify event.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server sends back an UnmapNotify event.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/unnstllclr/unnstllclr.m b/xc/test/xsuite/xtest/tset/XPROTO/unnstllclr/unnstllclr.m
new file mode 100644
index 000000000..3a58b85d3
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/unnstllclr/unnstllclr.m
@@ -0,0 +1,207 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE UninstallColormap XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for UninstallColormap request */
+
+/****************************************************************************
+ * Copyright 1989 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xResourceReq *req;
+xAllocColorCellsReply *reply;
+
+/*
+ intent: send an UninstallColormap request to the server and check
+ that nothing was sent back.
+ input:
+ output: none
+ global input:
+ side effects: creates a window resource.
+ installs and uninstalls a colormap.
+ methods:
+*/
+
+static
+void
+tester()
+{
+
+
+ Create_Client(CLIENT);
+
+ (void) Create_Default_Window(CLIENT);
+ (void) Create_Default_Colormap(CLIENT);
+
+ /* Allocate color cells if client hasn't got any */
+
+ if (Allocatable (CLIENT)) {
+ req = (xResourceReq *) Make_Req(CLIENT, X_AllocColorCells);
+ Send_Req(CLIENT, (xReq *) req);
+ if ((reply = (xAllocColorCellsReply *) Expect_Reply(CLIENT, X_AllocColorCells)) == NULL) {
+ Log_Err("client %d failed to receive AllocColorCells reply\n", CLIENT);
+ Exit();
+ }
+ else {
+ Log_Trace("client %d received AllocColorCells reply\n", CLIENT);
+ /* do any reply checking here */
+ Free_Reply(reply);
+ }
+ Free_Req(req);
+ }
+ (void) Expect_Nothing(CLIENT);
+
+ req = (xResourceReq *) Make_Req(CLIENT, X_InstallColormap);
+ Send_Req(CLIENT, (xReq *) req);
+ Log_Trace("client %d sent default InstallColormap request\n",CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ Free_Req(req);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xResourceReq *) Make_Req(CLIENT, X_UninstallColormap);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default UninstallColormap request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent UninstallColormap request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong UninstallColormap request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
diff --git a/xc/test/xsuite/xtest/tset/XPROTO/wrppntr/wrppntr.m b/xc/test/xsuite/xtest/tset/XPROTO/wrppntr/wrppntr.m
new file mode 100644
index 000000000..00cd1ad95
--- /dev/null
+++ b/xc/test/xsuite/xtest/tset/XPROTO/wrppntr/wrppntr.m
@@ -0,0 +1,167 @@
+/*
+ * Copyright 1990, 1991 by the Massachusetts Institute of Technology and
+ * UniSoft Group Limited.
+ *
+ * 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 names of MIT and UniSoft not be
+ * used in advertising or publicity pertaining to distribution of the
+ * software without specific, written prior permission. MIT and UniSoft
+ * make no representations about the suitability of this software for any
+ * purpose. It is provided "as is" without express or implied warranty.
+ *
+ * $XConsortium$
+ */
+>>TITLE WarpPointer XPROTO
+>>SET startup protostartup
+>>SET cleanup protocleanup
+>>EXTERN
+/* Touch test for WarpPointer request */
+
+/****************************************************************************
+ * Copyright 1988 by Sequent Computer Systems, Inc., Portland, Oregon *
+ * *
+ * *
+ * 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 appears in all copies and that *
+ * both that copyright notice and this permission notice appear in *
+ * supporting documentation, and that the name of Sequent not be used *
+ * in advertising or publicity pertaining to distribution or use of the *
+ * software without specific, written prior permission. *
+ * *
+ * SEQUENT DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING *
+ * ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS; IN NO EVENT SHALL *
+ * SEQUENT 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. *
+ ****************************************************************************/
+
+#include "Xstlib.h"
+
+
+#define CLIENT 0
+static TestType test_type = SETUP;
+xWarpPointerReq *req;
+xEvent *ev;
+
+static
+void
+tester()
+{
+ Create_Client(CLIENT);
+
+ Set_Test_Type(CLIENT, test_type);
+ req = (xWarpPointerReq *) Make_Req(CLIENT, X_WarpPointer);
+ Send_Req(CLIENT, (xReq *) req);
+ Set_Test_Type(CLIENT, GOOD);
+ switch(test_type) {
+ case GOOD:
+ Log_Trace("client %d sent default WarpPointer request\n", CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case BAD_LENGTH:
+ Log_Trace("client %d sent WarpPointer request with bad length (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ case TOO_LONG:
+ case JUST_TOO_LONG:
+ Log_Trace("client %d sent overlong WarpPointer request (%d)\n", CLIENT, req->length);
+ (void) Expect_BadLength(CLIENT);
+ (void) Expect_Nothing(CLIENT);
+ break;
+ default:
+ Log_Err("INTERNAL ERROR: test_type %d not one of GOOD(%d), BAD_LENGTH(%d), TOO_LONG(%d) or JUST_TOO_LONG(%d)\n",
+ test_type, GOOD, BAD_LENGTH, TOO_LONG, JUST_TOO_LONG);
+ Abort();
+ /*NOTREACHED*/
+ break;
+ }
+ Free_Req(req);
+ Exit_OK();
+}
+>>ASSERTION Good A
+When a client sends a valid xname protocol request to the X server,
+and the client has no event selected in the
+.M event_mask
+for any window,
+then the X server does not send back an error, event or reply to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+Open a connection to the X server using reversed byte sex.
+Send a valid xname protocol request to the X server.
+Verify that the X server does not send back an error, event or reply.
+>>CODE
+
+ test_type = GOOD;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad A
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request is not the minimum length required to
+contain the request,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one less than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the minimum length required to contain the request.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = BAD_LENGTH; /* < minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+ test_type = JUST_TOO_LONG; /* > minimum */
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);
+
+>>ASSERTION Bad B 1
+When a client sends an invalid xname protocol request to the X server,
+in which the length field of the request exceeds the maximum length accepted
+by the X server,
+then the X server sends back a BadLength error to the client.
+>>STRATEGY
+Call library function testfunc() to do the following:
+Open a connection to the X server using native byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+Open a connection to the X server using reversed byte sex.
+Send an invalid xname protocol request to the X server with length
+ one greater than the maximum length accepted by the server.
+Verify that the X server sends back a BadLength error.
+>>CODE
+
+ test_type = TOO_LONG;
+
+ /* Call a library function to exercise the test code */
+ testfunc(tester);